From bf3dd3f69a740b1677270b9d9bc3f60a6a410ac2 Mon Sep 17 00:00:00 2001 From: Tim Long Date: Sat, 7 Sep 2019 06:28:25 +0100 Subject: [PATCH 01/13] Begun refactoring the LocalServer class to use the "Van Noord" embedded driver pattern --- ...OM.K8056.Switch.Specifications.DotSettings | 1 - .../AscomSwitch}/Octet.cs | 111 +- .../AscomSwitch}/StringExtensions.cs | 2 +- .../AscomSwitch}/Switch.cs | 111 +- .../LocalServer.cs | 459 ++++--- TA.ArduinoPowerController.Server/NLog.xsd | 1172 ++++++++++++----- TA.ArduinoPowerController.Server/ReadMe.md | 21 - .../ServedComClassLocator.cs | 156 +-- .../TA.ArduinoPowerController.Server.csproj | 53 +- .../packages.config | 8 +- .../AscomSwitchDriver.wxs | 6 - TA.ArduinoPowerController.Setup/NLog.wxs | 1 - .../TA.ArduinoPowerController.Setup.wixproj | 8 - .../GlobalAssemblyInfo.cs | 35 + ...rduinoPowerController.SharedCode.projitems | 14 + ...A.ArduinoPowerController.SharedCode.shproj | 13 + ...OM.K8056.Switch.Specifications.DotSettings | 1 - .../ASCOM.K8056.Switch.Specifications.csproj | 137 -- ...6.Switch.Specifications.csproj.DotSettings | 4 - ...56.Switch.Specifications.v2.ncrunchproject | 27 - .../Properties/AssemblyInfo.cs | 36 - .../TransactionSpecs.cs | 28 - .../app.config | 11 - .../packages.config | 22 - .../AscomDriverAssemblyResolver.cs | 73 - .../NLog.dll.Debug.nlog | 11 - .../NLog.dll.Release.nlog | 9 - .../NLog.dll.nlog | 21 - .../Properties/AssemblyInfo.cs | 11 - .../Scripts/LoadSwitch.ps1 | 5 - .../Scripts/WalkingRelayTest.ps1 | 19 - ....ArduinoPowerController.AscomSwitch.csproj | 175 --- TA.ArduinoPowerController.Switch/app.config | 69 - .../packages.config | 16 - TA.ArduinoPowerController.sln | 38 +- TA.ArduinoPowerController.sln.DotSettings | 56 +- 36 files changed, 1403 insertions(+), 1537 deletions(-) delete mode 100644 ASCOM.K8056.Switch.Specifications/ASCOM.K8056.Switch.Specifications.DotSettings rename {TA.ArduinoPowerController.Switch => TA.ArduinoPowerController.Server/AscomSwitch}/Octet.cs (90%) rename {TA.ArduinoPowerController.Switch => TA.ArduinoPowerController.Server/AscomSwitch}/StringExtensions.cs (99%) rename {TA.ArduinoPowerController.Switch => TA.ArduinoPowerController.Server/AscomSwitch}/Switch.cs (84%) delete mode 100644 TA.ArduinoPowerController.Server/ReadMe.md create mode 100644 TA.ArduinoPowerController.SharedCode/GlobalAssemblyInfo.cs create mode 100644 TA.ArduinoPowerController.SharedCode/TA.ArduinoPowerController.SharedCode.projitems create mode 100644 TA.ArduinoPowerController.SharedCode/TA.ArduinoPowerController.SharedCode.shproj delete mode 100644 TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.DotSettings delete mode 100644 TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.csproj delete mode 100644 TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.csproj.DotSettings delete mode 100644 TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.v2.ncrunchproject delete mode 100644 TA.ArduinoPowerController.Switch.Specifications/Properties/AssemblyInfo.cs delete mode 100644 TA.ArduinoPowerController.Switch.Specifications/TransactionSpecs.cs delete mode 100644 TA.ArduinoPowerController.Switch.Specifications/app.config delete mode 100644 TA.ArduinoPowerController.Switch.Specifications/packages.config delete mode 100644 TA.ArduinoPowerController.Switch/AscomDriverAssemblyResolver.cs delete mode 100644 TA.ArduinoPowerController.Switch/NLog.dll.Debug.nlog delete mode 100644 TA.ArduinoPowerController.Switch/NLog.dll.Release.nlog delete mode 100644 TA.ArduinoPowerController.Switch/NLog.dll.nlog delete mode 100644 TA.ArduinoPowerController.Switch/Properties/AssemblyInfo.cs delete mode 100644 TA.ArduinoPowerController.Switch/Scripts/LoadSwitch.ps1 delete mode 100644 TA.ArduinoPowerController.Switch/Scripts/WalkingRelayTest.ps1 delete mode 100644 TA.ArduinoPowerController.Switch/TA.ArduinoPowerController.AscomSwitch.csproj delete mode 100644 TA.ArduinoPowerController.Switch/app.config delete mode 100644 TA.ArduinoPowerController.Switch/packages.config diff --git a/ASCOM.K8056.Switch.Specifications/ASCOM.K8056.Switch.Specifications.DotSettings b/ASCOM.K8056.Switch.Specifications/ASCOM.K8056.Switch.Specifications.DotSettings deleted file mode 100644 index e7d45a2..0000000 --- a/ASCOM.K8056.Switch.Specifications/ASCOM.K8056.Switch.Specifications.DotSettings +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch/Octet.cs b/TA.ArduinoPowerController.Server/AscomSwitch/Octet.cs similarity index 90% rename from TA.ArduinoPowerController.Switch/Octet.cs rename to TA.ArduinoPowerController.Server/AscomSwitch/Octet.cs index e611c18..1e25234 100644 --- a/TA.ArduinoPowerController.Switch/Octet.cs +++ b/TA.ArduinoPowerController.Server/AscomSwitch/Octet.cs @@ -1,17 +1,16 @@ // This file is part of the TA.ArduinoPowerController project // -// Copyright © 2016-2017 Tigra Astronomy, all rights reserved. +// Copyright © 2016-2019 Tigra Astronomy, all rights reserved. // Licensed under the MIT license, see http://tigra.mit-license.org/ // -// File: Octet.cs Last modified: 2017-04-02@18:44 by Tim Long +// File: Octet.cs Last modified: 2019-09-07@02:16 by Tim Long using System; using System.Diagnostics.Contracts; using System.Text; -using PostSharp.Patterns.Contracts; -namespace TA.ArduinoPowerController.AscomSwitch - { +namespace TA.ArduinoPowerController.Server.AscomSwitch +{ /// /// An immutable representation of an 8 bit byte, with each bit individually addressable. In /// most cases an Octet is interchangeable with a (implicit conversion @@ -19,26 +18,26 @@ namespace TA.ArduinoPowerController.AscomSwitch /// integer. /// public struct Octet : IEquatable - { + { private readonly bool[] bits; [ContractInvariantMethod] private void ObjectInvariant() - { + { Contract.Invariant(bits != null); Contract.Invariant(bits.Length == 8, "Consider using Octet.FromInt() instead of new Octet()"); - } + } /// /// Initializes a new instance of the struct from an array of at least 8 booleans. /// /// The bits; there must be exactly 8. - private Octet([Required] bool[] bits) - { + private Octet(bool[] bits) + { Contract.Requires(bits != null); Contract.Requires(bits.Length == 8); this.bits = bits; - } + } /// /// Gets an Octet with all the bits set to zero. @@ -65,16 +64,16 @@ public bool this[int bit] /// The source. /// Octet. public static Octet FromInt(int source) - { + { var bits = new bool[8]; for (var i = 0; i < 8; i++) - { + { var bit = source & 0x01; bits[i] = bit != 0; source >>= 1; - } - return new Octet(bits); } + return new Octet(bits); + } /// /// Factory method: create an Octet from an unisgned integer. @@ -82,9 +81,9 @@ public static Octet FromInt(int source) /// The source. /// Octet. public static Octet FromUnsignedInt(uint source) - { + { return FromInt((int) source); - } + } /// /// Returns a new octet with the specified bit number set to the specified value. @@ -94,13 +93,13 @@ public static Octet FromUnsignedInt(uint source) /// The value of the specified bit number. /// A new octet instance with the specified bit number set to the specified value. public Octet WithBitSetTo(ushort bit, bool value) - { + { Contract.Requires(bit < 8); var newBits = new bool[8]; bits.CopyTo(newBits, 0); newBits[bit] = value; return new Octet(newBits); - } + } /// /// Returns a new octet with the specified bit number set to the specified value. @@ -110,22 +109,22 @@ public Octet WithBitSetTo(ushort bit, bool value) /// The value of the specified bit number. /// A new octet instance with the specified bit number set to the specified value. public Octet WithBitSetTo(int bit, bool value) - { + { Contract.Requires(bit >= 0 && bit < 8); return WithBitSetTo((ushort) bit, value); - } + } public override string ToString() - { + { var builder = new StringBuilder(); for (var i = 7; i >= 0; i--) - { + { builder.Append(bits[i] ? '1' : '0'); builder.Append(' '); - } + } builder.Length -= 1; return builder.ToString(); - } + } /// /// Performs an explicit conversion from to . @@ -134,9 +133,9 @@ public override string ToString() /// The integer. /// The result of the conversion. public static explicit operator Octet(uint integer) - { + { return FromUnsignedInt(integer); - } + } /// /// Performs an explicit conversion from to . @@ -145,9 +144,9 @@ public static explicit operator Octet(uint integer) /// The integer. /// The result of the conversion. public static explicit operator Octet(int integer) - { + { return FromInt(integer); - } + } /// /// Performs an implicit conversion from to . @@ -155,14 +154,14 @@ public static explicit operator Octet(int integer) /// The octet. /// The result of the conversion. public static implicit operator byte(Octet octet) - { + { var sum = 0; for (var i = 0; i < 8; i++) - { + { if (octet[i]) sum += 1 << i; - } - return (byte) sum; } + return (byte) sum; + } /// /// Performs an implicit conversion from to . @@ -170,9 +169,9 @@ public static implicit operator byte(Octet octet) /// The input byte. /// The result of the conversion in a new Octet. public static implicit operator Octet(byte b) - { + { return FromUnsignedInt(b); - } + } /// /// Indicates whether this octet is equal to another octet, using value semantics. @@ -182,53 +181,53 @@ public static implicit operator Octet(byte b) /// /// An object to compare with this object. public bool Equals(Octet other) - { + { for (var i = 0; i < bits.Length; i++) - { + { if (bits[i] != other[i]) return false; - } - return true; } + return true; + } public override bool Equals(object obj) - { + { if (ReferenceEquals(null, obj)) return false; return obj is Octet && Equals((Octet) obj); - } + } public override int GetHashCode() - { + { return bits.GetHashCode(); - } + } public static bool operator ==(Octet left, Octet right) - { + { return left.Equals(right); - } + } public static bool operator !=(Octet left, Octet right) - { + { return !left.Equals(right); - } + } public static Octet operator &(Octet left, Octet right) - { + { var result = (bool[]) left.bits.Clone(); for (var i = 0; i < 8; i++) - { + { result[i] &= right[i]; - } - return new Octet(result); } + return new Octet(result); + } public static Octet operator |(Octet left, Octet right) - { + { var result = (bool[]) left.bits.Clone(); for (var i = 0; i < 8; i++) - { + { result[i] |= right[i]; - } - return new Octet(result); } + return new Octet(result); } - } \ No newline at end of file + } +} \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch/StringExtensions.cs b/TA.ArduinoPowerController.Server/AscomSwitch/StringExtensions.cs similarity index 99% rename from TA.ArduinoPowerController.Switch/StringExtensions.cs rename to TA.ArduinoPowerController.Server/AscomSwitch/StringExtensions.cs index 102e609..f597873 100644 --- a/TA.ArduinoPowerController.Switch/StringExtensions.cs +++ b/TA.ArduinoPowerController.Server/AscomSwitch/StringExtensions.cs @@ -11,7 +11,7 @@ using System.Linq; using System.Text; -namespace TA.ArduinoPowerController.AscomSwitch +namespace TA.ArduinoPowerController.Server.AscomSwitch { public static class StringExtensions { diff --git a/TA.ArduinoPowerController.Switch/Switch.cs b/TA.ArduinoPowerController.Server/AscomSwitch/Switch.cs similarity index 84% rename from TA.ArduinoPowerController.Switch/Switch.cs rename to TA.ArduinoPowerController.Server/AscomSwitch/Switch.cs index 759e932..4474642 100644 --- a/TA.ArduinoPowerController.Switch/Switch.cs +++ b/TA.ArduinoPowerController.Server/AscomSwitch/Switch.cs @@ -1,9 +1,9 @@ // This file is part of the TA.ArduinoPowerController project -// -// Copyright © 2016-2017 Tigra Astronomy, all rights reserved. +// +// Copyright © 2016-2019 Tigra Astronomy, all rights reserved. // Licensed under the MIT license, see http://tigra.mit-license.org/ -// -// File: Switch.cs Last modified: 2017-03-17@17:37 by Tim Long +// +// File: Switch.cs Last modified: 2019-09-06@21:59 by Tim Long using System; using System.Collections; @@ -15,18 +15,13 @@ using JetBrains.Annotations; using NLog; using TA.ArduinoPowerController.DeviceInterface; -using TA.ArduinoPowerController.Server; using TA.ArduinoPowerController.Server.Properties; using TA.PostSharp.Aspects; -using NotImplementedException = System.NotImplementedException; +using NotImplementedException = ASCOM.NotImplementedException; -#if DEBUG_IN_EXTERNAL_APP -using System.Windows.Forms; -#endif - -namespace TA.ArduinoPowerController.AscomSwitch - { +namespace TA.ArduinoPowerController.Server.AscomSwitch +{ [ProgId(SharedResources.SwitchDriverId)] [Guid("7e30c5fc-bfdc-48a7-b3d3-965e0ad100a2")] [ComVisible(true)] @@ -35,7 +30,7 @@ namespace TA.ArduinoPowerController.AscomSwitch [ServedClassName(SharedResources.SwitchDriverName)] [NLogTraceWithArguments] public class Switch : ReferenceCountedObjectBase, ISwitchV2, IDisposable, IAscomDriver - { + { private readonly Guid clientId; private readonly ILogger log = LogManager.GetCurrentClassLogger(); private DeviceController device; @@ -47,39 +42,34 @@ public class Switch : ReferenceCountedObjectBase, ISwitchV2, IDisposable, IAscom /// Initializes a new instance of the class. /// public Switch() - { -#if DEBUG_IN_EXTERNAL_APP - MessageBox.Show("Attach debugger now"); -#endif - //HandleAssemblyResolveEvents(); - //device = CompositionRoot.GetDeviceLayer(); + { clientId = SharedResources.ConnectionManager.RegisterClient(SharedResources.SwitchDriverId); - } + } internal bool IsOnline => device?.IsOnline ?? false; [MustBeConnected] public string Action(string ActionName, string ActionParameters) - { + { throw new NotImplementedException(); - } + } public bool CanWrite(short id) => true; public void CommandBlind(string Command, bool Raw = false) - { + { throw new NotImplementedException(); - } + } public bool CommandBool(string Command, bool Raw = false) - { + { throw new NotImplementedException(); - } + } public string CommandString(string Command, bool Raw = false) - { + { throw new NotImplementedException(); - } + } /// /// Gets or sets the connection state. @@ -103,10 +93,10 @@ public bool Connected public string Description => "Arduino Power Controller"; public void Dispose() - { + { Dispose(true); GC.SuppressFinalize(this); - } + } /// /// Descriptive and version information about this ASCOM driver. @@ -135,7 +125,6 @@ public string DriverVersion public string GetSwitchDescription(short id) => $"Relay {id}"; - public string GetSwitchName(short id) => Settings.Default.SwitchNames[id] ?? $"Relay {id}"; /// @@ -168,32 +157,32 @@ public string DriverVersion [MustBeConnected] public void SetSwitch(short id, bool state) - { + { var relay = (ushort) id; if (state) device.SetRelay(relay); else device.ClearRelay(relay); shadow = shadow.WithBitSetTo(id, state); - } + } public void SetSwitchName(short id, string name) - { + { Settings.Default.SwitchNames[id] = string.IsNullOrWhiteSpace(name) ? $"Relay {id}" : name; Settings.Default.Save(); - } + } /// /// Set the value for this device as a double. /// [MustBeConnected] public void SetSwitchValue(short id, double value) - { + { SetSwitch(id, value > 0.0); - } + } public void SetupDialog() - { + { SharedResources.DoSetupDialog(clientId); - } + } /// /// Returns the list of action names supported by this driver (currently none supported). @@ -213,63 +202,53 @@ public void SetupDialog() /// is was offline. /// private void Connect() - { + { device = SharedResources.ConnectionManager.GoOnline(clientId); if (!device.IsOnline) - { + { log.Error("Connect failed - device reported offline"); throw new DriverException( "Failed to connect. Open apparently succeeded but then the device reported that is was offline."); - } - device.PerformOnConnectTasks(); } + device.PerformOnConnectTasks(); + } private void CreateSwitchNames() - { + { Settings.Default.SwitchNames = new StringCollection(); for (var i = 0; i < MaxSwitch; i++) - { + { Settings.Default.SwitchNames.Add($"Relay {i}"); - } } + } /// /// Disconnects from the device. /// private void Disconnect() - { + { SharedResources.ConnectionManager.GoOffline(clientId); device = null; //[Sentinel] - } + } protected virtual void Dispose(bool fromUserCode) - { + { if (!disposed) - { + { if (fromUserCode) - { + { SharedResources.ConnectionManager.UnregisterClient(clientId); - } } - disposed = true; } - + disposed = true; + } /// /// Finalizes this instance (called prior to garbage collection by the CLR) /// ~Switch() - { + { Dispose(false); - } - - /// - /// Installs a custom assembly resolver into the AppDomain so that the driver can find its - /// referenced assemblies. This avoids the need for strong-naming - /// - private void HandleAssemblyResolveEvents() - { - AppDomain.CurrentDomain.AssemblyResolve += AscomDriverAssemblyResolver.ResolveSupportAssemblies; - } } - } \ No newline at end of file + } +} \ No newline at end of file diff --git a/TA.ArduinoPowerController.Server/LocalServer.cs b/TA.ArduinoPowerController.Server/LocalServer.cs index 553f331..6a630ec 100644 --- a/TA.ArduinoPowerController.Server/LocalServer.cs +++ b/TA.ArduinoPowerController.Server/LocalServer.cs @@ -1,16 +1,15 @@ // This file is part of the TA.ArduinoPowerController project // -// Copyright © 2016-2017 Tigra Astronomy, all rights reserved. -// Licensed under the MIT license, see http://tigra.mit-license.org/ +// Copyright © 2016-2019 Tigra Astronomy, all rights reserved. +// Licensed under the Tigra MIT license, see http://tigra.mit-license.org/ // -// File: LocalServer.cs Last modified: 2017-04-02@18:43 by Tim Long +// File: LocalServer.cs Last modified: 2019-09-07@06:25 by Tim Long using System; -using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; -using System.IO; +using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Security.Principal; @@ -19,15 +18,13 @@ using ASCOM; using ASCOM.Utilities; using Microsoft.Win32; -using NLog; +using NLog.Fluent; using TA.PostSharp.Aspects; namespace TA.ArduinoPowerController.Server - { +{ public static class Server - { - private static readonly ILogger Log = LogManager.GetCurrentClassLogger(); - + { // This property returns the main thread's id. public static uint MainThreadId { get; private set; } // Stores the main thread's thread id. @@ -35,6 +32,7 @@ public static class Server public static bool StartedByCOM { get; private set; } // True if server started by COM (-embedding) #region SERVER ENTRY POINT (main) + // // ================== // SERVER ENTRY POINT @@ -43,16 +41,23 @@ public static class Server [STAThread] [NLogTraceWithArguments] private static void Main(string[] args) - { + { // Manage unhandled exceptions Application.ThreadException += UnhandledThreadException; AppDomain.CurrentDomain.UnhandledException += UnhandledException; - var foundTypes = LoadComObjectAssemblies(); - if (foundTypes < 1) - return; // There is no point continuing if we found nothing to serve. + var drivers = new DriverDiscovery(); + drivers.DiscoverServedClasses(); + if (!drivers.DiscoveredTypes.Any()) + { + Log.Fatal() + .Message( + "No driver classes found. Have you added ServedClassName attributes to your driver classes?") + .Write(); + return; + } - if (!ProcessArguments(args)) return; // Register/Unregister + if (!ProcessArguments(drivers, args)) return; // Register/Unregister // Initialize critical member variables. objsInUse = 0; @@ -60,19 +65,19 @@ private static void Main(string[] args) MainThreadId = GetCurrentThreadId(); Thread.CurrentThread.Name = "Main Thread"; + // Create the user interface and display it Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - s_MainForm = new ServerStatusDisplay(); -//#if !DEBUG -//// Only show the application main window if it was started manually by the user. -// if (StartedByCOM) s_MainForm.WindowState = FormWindowState.Minimized; -//#endif - - // Register the class factories of the served objects - RegisterClassFactories(); - - // Start up the garbage collection thread. - var GarbageCollector = new GarbageCollection(1000); + var statusDisplay = new ServerStatusDisplay(); + /* + * If you do not wish your main form to display when started automatically + * by a client app, then minimize it to the task bar here. + */ + //if (StartedByCOM) s_MainForm.WindowState = FormWindowState.Minimized; + + var registeredFactories = RegisterClassFactories(drivers); + // ToDo: [TPL] Why is this even necessary? Shouldn't GC be automatic? + var GarbageCollector = new GarbageCollection(10000); var GCThread = new Thread(GarbageCollector.GCWatch); GCThread.Name = "Garbage Collection Thread"; GCThread.Start(); @@ -82,146 +87,115 @@ private static void Main(string[] args) // served COM objects, making this act like the VB6 equivalent! // try - { - Application.Run(s_MainForm); - } + { + Application.Run(statusDisplay); + } finally - { + { // Revoke the class factories immediately. // Don't wait until the thread has stopped before // we perform revocation!!! - RevokeClassFactories(); + RevokeClassFactories(registeredFactories); // Now stop the Garbage Collector thread. GarbageCollector.StopThread(); GarbageCollector.WaitForThreadToStop(); Application.ThreadException -= UnhandledThreadException; AppDomain.CurrentDomain.UnhandledException -= UnhandledException; - } } + } + #endregion #region Command Line Arguments + // // ProcessArguments() will process the command-line arguments // If the return value is true, we carry on and start this application. // If the return value is false, we terminate this application immediately. // - private static bool ProcessArguments(string[] args) - { + private static bool ProcessArguments(DriverDiscovery drivers, string[] args) + { var bRet = true; // //**TODO** -Embedding is "ActiveX start". Prohibit non_AX starting? // if (args.Length > 0) - { + { switch (args[0].ToLower()) - { - case "-embedding": - StartedByCOM = true; // Indicate COM started us - break; - - case "-register": - case @"/register": - case "-regserver": // Emulate VB6 - case @"/regserver": - RegisterObjects(); // Register each served object - bRet = false; - break; - - case "-unregister": - case @"/unregister": - case "-unregserver": // Emulate VB6 - case @"/unregserver": - UnregisterObjects(); //Unregister each served object - bRet = false; - break; - - default: - MessageBox.Show( - "Unknown argument: " + args[0] + "\nValid are : -register, -unregister and -embedding", - "ASCOM driver for Arduino Power Controller", MessageBoxButtons.OK, - MessageBoxIcon.Exclamation); - break; - } + { + case "-embedding": + StartedByCOM = true; // Indicate COM started us + break; + + case "-register": + case @"/register": + case "-regserver": // Emulate VB6 + case @"/regserver": + RegisterObjects(drivers); // Register each served object + bRet = false; + break; + + case "-unregister": + case @"/unregister": + case "-unregserver": // Emulate VB6 + case @"/unregserver": + UnregisterObjects(drivers); //Unregister each served object + bRet = false; + break; + + default: + MessageBox.Show( + "Unknown argument: " + args[0] + "\nValid are : -register, -unregister and -embedding", + "ASCOM driver for Arduino Power Controller", MessageBoxButtons.OK, + MessageBoxIcon.Exclamation); + break; } + } else StartedByCOM = false; return bRet; - } + } + #endregion + #region Unhandled Exceptions + + /* + * If you write multi-threaded or asynchronous code, it is quite easy to accidentally + * "leak" unhandled exceptions that bring down the entire process. To avoid that, we define + * some top level event handlers that deal with these exception leaks by writing them to the log. + */ private static void UnhandledException(object sender, UnhandledExceptionEventArgs ea) - { - Log.Error((Exception) ea.ExceptionObject, "Unhandled exception"); - } + { + Exception ex = ea.ExceptionObject as Exception ?? new ApplicationException("Non-exception object thrown"); + Log.Error() + .Exception(ex) + .Message("Unhandled exception: {message}", ex.Message) + .Write(); + } private static void UnhandledThreadException(object sender, ThreadExceptionEventArgs ea) - { - Log.Error(ea.Exception, "Unhandled thread exception"); - } + { + Log.Error() + .Exception(ea.Exception) + .Message("Unhandled thread exception: {message}", ea.Exception.Message) + .Write(); + } + + #endregion Unhandled Exceptions // ----------------- // PRIVATE FUNCTIONS // ----------------- - #region Dynamic Driver Assembly Loader - /// - /// Load the assemblies that we will serve via COM. These will be located in the same - /// folder as out executable and will have at least one type decorated with a - /// - /// - /// The count of types found. - private static int LoadComObjectAssemblies() - { - Log.Info("Loading served COM classes"); - try - { - // Discover assemblies and types to be served in Reflection Only context in an isolated AppDomain - using (var reflectionContext = new AppDomainIsolated()) - { - reflectionContext.Worker.DiscoverServedClasses(); - s_ComObjectAssys = new List(reflectionContext.Worker.DiscoveredAssemblyNames); - s_ComObjectTypes = new List(reflectionContext.Worker.DiscoveredTypes); - } - // Now load the discovered assemblies into the current domain's execution context - foreach (var assemblyName in s_ComObjectAssys) - { - Assembly.Load(assemblyName); - } - return s_ComObjectTypes.Count; - } - finally - { - AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve -= CurrentDomainOnReflectionOnlyAssemblyResolve; - } - } - - private static Assembly CurrentDomainOnReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args) - { - try - { - Log.Info( - $"Event: ReflectionOnlyResolveAssembly for {args.Name} requested by {args.RequestingAssembly.GetName().Name}", - args.Name); - var resolved = Assembly.ReflectionOnlyLoad(args.Name); - Log.Info($"Successfully resolved assembly with {resolved.FullName}"); - return resolved; - } - catch (FileLoadException ex) - { - Log.Error(ex, $"Failed to resolve assembly: {args.Name}"); - return null; // Let the app raise its own error. - } - } - #endregion - #region Access to kernel32.dll, user32.dll, and ole32.dll functions + [Flags] private enum CLSCTX : uint - { + { CLSCTX_INPROC_SERVER = 0x1, CLSCTX_INPROC_HANDLER = 0x2, CLSCTX_LOCAL_SERVER = 0x4, @@ -243,31 +217,33 @@ private enum CLSCTX : uint CLSCTX_INPROC = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER, CLSCTX_SERVER = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, CLSCTX_ALL = CLSCTX_SERVER | CLSCTX_INPROC_HANDLER - } + } [Flags] private enum COINIT : uint - { + { /// Initializes the thread for multi-threaded object concurrency. COINIT_MULTITHREADED = 0x0, + /// Initializes the thread for apartment-threaded object concurrency. COINIT_APARTMENTTHREADED = 0x2, + /// Disables DDE for Ole1 support. COINIT_DISABLE_OLE1DDE = 0x4, + /// Trades memory for speed. COINIT_SPEED_OVER_MEMORY = 0x8 - } + } [Flags] private enum REGCLS : uint - { + { REGCLS_SINGLEUSE = 0, REGCLS_MULTIPLEUSE = 1, REGCLS_MULTI_SEPARATE = 2, REGCLS_SUSPENDED = 4, REGCLS_SURROGATE = 8 - } - + } // CoInitializeEx() can be used to set the apartment model // of individual threads. @@ -280,7 +256,7 @@ private enum REGCLS : uint // PostThreadMessage() allows us to post a Windows Message to // a specific thread (identified by its thread id). - // We will need this API to post a WM_QUIT message to the main + // We will need this API to post a WM_QUIT message to the main // thread in order to terminate this application. [DllImport("user32.dll")] private static extern bool PostThreadMessage(uint idThread, uint Msg, UIntPtr wParam, @@ -291,45 +267,45 @@ private static extern bool PostThreadMessage(uint idThread, uint Msg, UIntPtr wP // the main thread. [DllImport("kernel32.dll")] private static extern uint GetCurrentThreadId(); + #endregion #region Private Data + private static int objsInUse; // Keeps a count on the total number of objects alive. private static int serverLocks; // Keeps a lock count on this application. - private static ServerStatusDisplay s_MainForm; // Reference to our main form - private static List s_ComObjectAssys; // Dynamically loaded assemblies containing served COM objects - private static List s_ComObjectTypes; // Served COM object types - private static ArrayList s_ClassFactories; // Served COM object class factories private static readonly string s_appId = "{50e4c255-0a0e-4276-bd33-aae742da21b1}"; // Our AppId private static readonly object lockObject = new object(); + #endregion #region Server Lock, Object Counting, and AutoQuit on COM startup + // Returns the total number of objects alive currently. public static int ObjectsCount { get { lock (lockObject) - { + { return objsInUse; - } + } } } // This method performs a thread-safe incrementation of the objects count. public static int CountObject() - { + { // Increment the global count of objects. return Interlocked.Increment(ref objsInUse); - } + } // This method performs a thread-safe decrementation the objects count. public static int UncountObject() - { + { // Decrement the global count of objects. return Interlocked.Decrement(ref objsInUse); - } + } // Returns the current server lock count. public static int ServerLockCount @@ -337,59 +313,61 @@ public static int ServerLockCount get { lock (lockObject) - { + { return serverLocks; - } + } } } - // This method performs a thread-safe incrementation the + // This method performs a thread-safe incrementation the // server lock count. public static int CountLock() - { + { // Increment the global lock count of this server. return Interlocked.Increment(ref serverLocks); - } + } - // This method performs a thread-safe decrementation the + // This method performs a thread-safe decrementation the // server lock count. public static int UncountLock() - { + { // Decrement the global lock count of this server. return Interlocked.Decrement(ref serverLocks); - } + } - // AttemptToTerminateServer() will check to see if the objects count and the server + // AttemptToTerminateServer() will check to see if the objects count and the server // lock count have both dropped to zero. // // If so, and if we were started by COM, we post a WM_QUIT message to the main thread's - // message loop. This will cause the message loop to exit and hence the termination + // message loop. This will cause the message loop to exit and hence the termination // of this application. If hand-started, then just trace that it WOULD exit now. // public static void ExitIf() - { + { lock (lockObject) - { + { if (ObjectsCount <= 0 && ServerLockCount <= 0) - { + { if (StartedByCOM) - { + { var wParam = new UIntPtr(0); var lParam = new IntPtr(0); PostThreadMessage(MainThreadId, 0x0012, wParam, lParam); - } } } } + } public static void TerminateLocalServer() - { + { if (StartedByCOM) Application.Exit(); - } + } + #endregion #region COM Registration and Unregistration + // // Test if running elevated // @@ -407,48 +385,47 @@ private static bool IsAdministrator // Elevate by re-running ourselves with elevation dialog // private static void ElevateSelf(string arg) - { + { var si = new ProcessStartInfo(); si.Arguments = arg; si.WorkingDirectory = Environment.CurrentDirectory; si.FileName = Application.ExecutablePath; si.Verb = "runas"; try - { + { Process.Start(si); - } + } catch (Win32Exception) - { + { MessageBox.Show( "The LocalServer was not " + (arg == "/register" ? "registered" : "unregistered") + " because you did not allow it.", SharedResources.SwitchDriverId, MessageBoxButtons.OK, MessageBoxIcon.Warning); - } + } catch (Exception ex) - { + { MessageBox.Show(ex.ToString(), SharedResources.SwitchDriverId, MessageBoxButtons.OK, MessageBoxIcon.Stop); - } } + } - // - // Do everything to register this for COM. Never use REGASM on - // this exe assembly! It would create InProcServer32 entries - // which would prevent proper activation! - // - // Using the list of COM object types generated during dynamic - // assembly loading, it registers each one for COM as served by our - // exe/local server, as well as registering it for ASCOM. It also - // adds DCOM info for the local server itself, so it can be activated - // via an outboiud connection from TheSky. - // - private static void RegisterObjects() - { + /// + /// Registers the discovered driver types for COM and with the ASCOM Profile Store. + /// + /// The discovered drivers. + /// + /// Registers each discovered driver type with COM so that applications + /// can find it and load it by ProgID (i.e. via the ASCOM Chooser). + /// Also adds DCOM info for the LocalServer itself, so it can be activated + /// via an outbound connection from TheSky. + /// + private static void RegisterObjects(DriverDiscovery drivers) + { if (!IsAdministrator) - { + { ElevateSelf("/register"); return; - } + } // // If reached here, we're running elevated // @@ -463,41 +440,40 @@ private static void RegisterObjects() // Local server's DCOM/AppID information // try - { + { // // HKCR\APPID\appid // using (var key = Registry.ClassesRoot.CreateSubKey("APPID\\" + s_appId)) - { + { key.SetValue(null, assyDescription); key.SetValue("AppID", s_appId); key.SetValue("AuthenticationLevel", 1, RegistryValueKind.DWord); - } + } // // HKCR\APPID\exename.ext // using (var key = Registry.ClassesRoot.CreateSubKey(string.Format("APPID\\{0}", Application.ExecutablePath.Substring(Application.ExecutablePath.LastIndexOf('\\') + 1)))) - { + { key.SetValue("AppID", s_appId); - } } + } catch (Exception ex) - { + { MessageBox.Show("Error while registering the server:\n" + ex, SharedResources.SwitchDriverId, MessageBoxButtons.OK, MessageBoxIcon.Stop); return; - } - finally {} + } // // For each of the driver assemblies // - foreach (var type in s_ComObjectTypes) - { + foreach (var type in drivers.DiscoveredTypes) + { var bFail = false; try - { + { // // HKCR\CLSID\clsid // @@ -507,36 +483,36 @@ private static void RegisterObjects() var deviceType = type.Name; using (var key = Registry.ClassesRoot.CreateSubKey(string.Format("CLSID\\{0}", clsid))) - { + { key.SetValue(null, progid); // Could be assyTitle/Desc??, but .NET components show ProgId here key.SetValue("AppId", s_appId); using (var key2 = key.CreateSubKey("Implemented Categories")) - { + { key2.CreateSubKey("{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}"); - } + } using (var key2 = key.CreateSubKey("ProgId")) - { + { key2.SetValue(null, progid); - } + } key.CreateSubKey("Programmable"); using (var key2 = key.CreateSubKey("LocalServer32")) - { + { key2.SetValue(null, Application.ExecutablePath); - } } + } // // HKCR\progid // using (var key = Registry.ClassesRoot.CreateSubKey(progid)) - { + { key.SetValue(null, assyTitle); using (var key2 = key.CreateSubKey("CLSID")) - { + { key2.SetValue(null, clsid); - } } + } // - // ASCOM + // ASCOM // assy = type.Assembly; @@ -545,35 +521,34 @@ private static void RegisterObjects() //PWGS Changed to search type for attribute rather than assembly var chooserName = ((ServedClassNameAttribute) attr).DisplayName ?? "MultiServer"; using (var P = new Profile()) - { + { P.DeviceType = deviceType; P.Register(progid, chooserName); - } } + } catch (Exception ex) - { + { MessageBox.Show("Error while registering the server:\n" + ex, SharedResources.SwitchDriverId, MessageBoxButtons.OK, MessageBoxIcon.Stop); bFail = true; - } - finally {} - if (bFail) break; } + if (bFail) break; } + } // - // Remove all traces of this from the registry. + // Remove all traces of this from the registry. // // **TODO** If the above does AppID/DCOM stuff, this would have // to remove that stuff too. // - private static void UnregisterObjects() - { + private static void UnregisterObjects(DriverDiscovery drivers) + { if (!IsAdministrator) - { + { ElevateSelf("/unregister"); return; - } + } // // Local server's DCOM/AppID information @@ -585,8 +560,8 @@ private static void UnregisterObjects() // // For each of the driver assemblies // - foreach (var type in s_ComObjectTypes) - { + foreach (var type in drivers.DiscoveredTypes) + { var clsid = Marshal.GenerateGuidForType(type).ToString("B"); var progid = Marshal.GenerateProgIdForType(type); var deviceType = type.Name; @@ -611,51 +586,59 @@ private static void UnregisterObjects() Registry.ClassesRoot.DeleteSubKey(string.Format("CLSID\\{0}\\Programmable", clsid), false); Registry.ClassesRoot.DeleteSubKey(string.Format("CLSID\\{0}", clsid), false); try - { + { // // ASCOM // using (var P = new Profile()) - { + { P.DeviceType = deviceType; P.Unregister(progid); - } } - catch (Exception) {} + } + catch (Exception) + { } } + } + #endregion #region Class Factory Support + // - // On startup, we register the class factories of the COM objects - // that we serve. This requires the class facgtory name to be + // Register the class factories of the COM objects (drivers) + // that we serve. This requires the class factory name to be // equal to the served class name + "ClassFactory". // - private static bool RegisterClassFactories() + private static IEnumerable RegisterClassFactories(DriverDiscovery drivers) + { + var registeredFactories = new List(); + foreach (var type in drivers.DiscoveredTypes) { - s_ClassFactories = new ArrayList(); - foreach (var type in s_ComObjectTypes) - { var factory = new ClassFactory(type); // Use default context & flags - s_ClassFactories.Add(factory); - if (!factory.RegisterClassObject()) - { - MessageBox.Show("Failed to register class factory for " + type.Name, - "TA.ArduinoPowerController.Server", MessageBoxButtons.OK, MessageBoxIcon.Stop); - return false; - } + if (factory.RegisterClassObject()) + { + registeredFactories.Add(factory); + } + else + { + Log.Fatal() + .Message("Failed to register class factory for {type}", type.Name) + .Write(); } - ClassFactory.ResumeClassObjects(); // Served objects now go live - return true; } + ClassFactory.ResumeClassObjects(); // Served objects now go live + return registeredFactories; + } - private static void RevokeClassFactories() - { + private static void RevokeClassFactories(IEnumerable factories) + { ClassFactory.SuspendClassObjects(); // Prevent race conditions - foreach (ClassFactory factory in s_ClassFactories) + foreach (var factory in factories) factory.RevokeClassObject(); - } - #endregion } - } \ No newline at end of file + + #endregion + } +} \ No newline at end of file diff --git a/TA.ArduinoPowerController.Server/NLog.xsd b/TA.ArduinoPowerController.Server/NLog.xsd index 4aa20b2..05684bd 100644 --- a/TA.ArduinoPowerController.Server/NLog.xsd +++ b/TA.ArduinoPowerController.Server/NLog.xsd @@ -37,12 +37,12 @@ - Global log level threshold for application log messages. Messages below this level won't be logged.. + Global log level threshold for application log messages. Messages below this level won't be logged. - Throw an exception when there is an internal error. Default value is: false. + Throw an exception when there is an internal error. Default value is: false. Not recommend to set to true in production! @@ -70,6 +70,11 @@ Use InvariantCulture as default culture instead of CurrentCulture. Default value is: false. + + + Perform message template parsing and formatting of LogEvent messages (true = Always, false = Never, empty = Auto Detect). Default value is: empty. + + @@ -118,7 +123,7 @@ - Name of the logger. May include '*' character which acts like a wildcard. Allowed forms are: *, Name, *Name, Name* and *Name* + Name of the logger. May include wildcard characters ('*' or '?'). @@ -151,9 +156,9 @@ Ignore further rules if this one matches. - + - Enable or disable logging rule. Disabled rules are ignored. + Rule identifier to allow rule lookup with Configuration.FindRuleByName and Configuration.RemoveRuleByName. @@ -164,7 +169,13 @@ + + + + Default action if none of the filters match. + + @@ -204,12 +215,19 @@ + + + + Variable value. Note, the 'value' attribute has precedence over this one. + + + Variable name. - + Variable value. @@ -270,6 +288,7 @@ + @@ -286,6 +305,11 @@ Number of log events that should be processed in a batch by the lazy writer thread. + + + Whether to use the locking queue, instead of a lock-free concurrent queue The locking queue is less concurrent when many logger threads, but reduces memory allocation + + Limit of full s to write before yielding into Performance is better when writing many small batches, than writing a single large batch @@ -303,7 +327,7 @@ - Time in milliseconds to sleep between batches. + Time in milliseconds to sleep between batches. (1 or less means trigger on new activity) @@ -325,13 +349,15 @@ - + + + - + - Name of the target. + Delay the flush until the LogEvent has been confirmed as written @@ -339,6 +365,16 @@ Condition expression. Log events who meet this condition will cause a flush on the wrapped target. + + + Name of the target. + + + + + Only flush when LogEvent matches condition. Ignore explicit-flush, config-reload-flush and shutdown-flush + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit @@ -354,6 +390,7 @@ + @@ -372,6 +409,11 @@ Timeout (in milliseconds) after which the contents of buffer will be flushed if there's no write in the specified period of time. Use -1 to disable timed flushes. + + + Action to take if the buffer overflows. + + Indicates whether to use sliding timeout. @@ -385,6 +427,12 @@ + + + + + + @@ -395,19 +443,26 @@ + + + + - - - - + + - + + + + + + @@ -442,14 +497,19 @@ Indicates whether to append newline at the end of log message. - + - Action that should be taken if the will be more connections than . + Network address. - + - Action that should be taken if the message is larger than maxMessageSize. + Size of the connection cache (number of connections which are kept alive). + + + + + Indicates whether to keep connection open whenever possible. @@ -457,19 +517,19 @@ Maximum current connections. 0 = no maximum. - + - Indicates whether to keep connection open whenever possible. + Action that should be taken if the will be more connections than . - + - Size of the connection cache (number of connections which are kept alive). + Action that should be taken if the message is larger than maxMessageSize. - + - Network address. + Get or set the SSL/TLS protocols. Default no SSL/TLS is used. Currently only implemented for TCP. @@ -477,9 +537,14 @@ Maximum queue size. - + - Indicates whether to include dictionary contents. + The number of seconds a connection will remain idle before the first keep-alive probe is sent + + + + + NDLC item separator. @@ -487,21 +552,46 @@ Indicates whether to include source info (file name and line number) in the information sent over the network. + + + Renderer for log4j:event logger-xml-attribute (Default ${logger}) + + Indicates whether to include NLog-specific extensions to log4j schema. + + + Indicates whether to include contents of the stack. + + Indicates whether to include stack contents. + + + Indicates whether to include dictionary contents. + + + + + Indicates whether to include dictionary contents. + + Indicates whether to include call site (class and method name) in the information sent over the network. + + + Option to include all properties from the log events + + AppInfo field. By default it's the friendly name of the current AppDomain. @@ -534,14 +624,27 @@ + + + + + + + + + + + + + - Layout that should be use to calcuate the value for the parameter. + Layout that should be use to calculate the value for the parameter. @@ -549,6 +652,11 @@ Viewer parameter name. + + + Whether an attribute with empty value should be included in the output + + @@ -558,12 +666,15 @@ - - - + + + + + + @@ -586,14 +697,14 @@ Footer. - + - Indicates whether to use default row highlighting rules. + Indicates whether to auto-check if the console is available. - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App) - + - Indicates whether to auto-check if the console is available. - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App) + Enables output using ANSI Color Codes @@ -606,6 +717,21 @@ Indicates whether the error stream (stderr) should be used instead of the output stream (stdout). + + + Indicates whether to auto-check if the console has been redirected to file - Disables coloring logic when System.Console.IsOutputRedirected = true + + + + + Indicates whether to use default row highlighting rules. + + + + + Indicates whether to auto-flush after + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit @@ -659,14 +785,19 @@ + - + + + Compile the ? This can improve the performance, but at the costs of more memory usage. If false, the Regex Cache is used. + + Indicates whether to ignore case when comparing texts. @@ -687,11 +818,6 @@ Indicates whether to match whole words only. - - - Compile the ? This can improve the performance, but at the costs of more memory usage. If false, the Regex Cache is used. - - Background color. @@ -711,9 +837,10 @@ - + + @@ -736,11 +863,6 @@ Footer. - - - Indicates whether to send the log messages to the standard error instead of the standard output. - - Indicates whether to auto-check if the console is available - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App) @@ -751,6 +873,16 @@ The encoding for writing messages to the . + + + Indicates whether to send the log messages to the standard error instead of the standard output. + + + + + Indicates whether to auto-flush after + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit @@ -892,20 +1024,34 @@ - + + + - + + + + + + Database parameter name. + + - Layout that should be use to calcuate the value for the parameter. + Layout that should be use to calculate the value for the parameter. - + - Database parameter name. + Database parameter DbType. + + + + + Database parameter size. @@ -918,9 +1064,19 @@ Database parameter scale. - + - Database parameter size. + Type of the parameter. + + + + + Convert format of the database parameter value . + + + + + Culture used for parsing parameter string-value for type-conversion @@ -995,13 +1151,14 @@ + + + - - @@ -1019,6 +1176,11 @@ Layout that renders event Category. + + + Optional entrytype. When not set, or when not convertible to then determined by + + Layout that renders event ID. @@ -1034,24 +1196,24 @@ Name of the machine on which Event Log service is running. - + - Value to be used as the event Source. + Maximum Event log size in kilobytes. - + - Action to take if the message is larger than the option. + Message length limit to write to the Event Log. - + - Optional entrytype. When not set, or when not convertable to then determined by + Value to be used as the event Source. - + - Message length limit to write to the Event Log. + Action to take if the message is larger than the option. @@ -1105,38 +1267,40 @@ + + - - - - - + + + - + + + + - - - - - - + + - - + + + + + + + - - @@ -1168,6 +1332,11 @@ Line ending mode. + + + Indicates whether to compress archive files into the zip archive format. + + Way file archives are numbered. @@ -1178,6 +1347,11 @@ Name of the file to be used for an archive. + + + Is the an absolute or relative path? + + Indicates whether to automatically archive log files every time the specified time passes. @@ -1188,49 +1362,49 @@ Size in bytes above which log files will be automatically archived. Warning: combining this with isn't supported. We cannot create multiple archive files, if they should have the same name. Choose: - + - Indicates whether to compress archive files into the zip archive format. + Maximum number of archive files that should be kept. - + - Maximum number of archive files that should be kept. + Indicates whether the footer should be written only when the file is archived. - + - Gets or set a value indicating whether a managed file stream is forced, instead of using the native implementation. + Maximum number of log filenames that should be stored as existing. - + Is the an absolute or relative path? - + - Cleanup invalid values in a filename, e.g. slashes in a filename. If set to true, this can impact the performance of massive writes. If set to false, nothing gets written when the filename is wrong. + Gets or set a value indicating whether a managed file stream is forced, instead of using the native implementation. - + - Whether or not this target should just discard all data that its asked to write. Mostly used for when testing NLog Stack except final write + Indicates whether file creation calls should be synchronized by a system global mutex. - + - Is the an absolute or relative path? + Indicates whether to replace file contents on each write instead of appending log message at the end. - + - Value indicationg whether file creation calls should be synchronized by a system global mutex. + Indicates whether to write BOM (byte order mark) in created files - + - Indicates whether the footer should be written only when the file is archived. + Indicates whether to enable log file(s) to be deleted. @@ -1248,14 +1422,19 @@ Indicates whether to archive old log file on startup. + + + Cleanup invalid values in a filename, e.g. slashes in a filename. If set to true, this can impact the performance of massive writes. If set to false, nothing gets written when the filename is wrong. + + Indicates whether to create directories if they do not exist. - + - Indicates whether to enable log file(s) to be deleted. + Indicates whether to delete old log file on startup. @@ -1263,49 +1442,49 @@ File attributes (Windows only). - + - Indicates whether to delete old log file on startup. + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit - + - Indicates whether to replace file contents on each write instead of appending log message at the end. + Indicates whether concurrent writes to the log file by multiple processes on different network hosts. - + - Indicates whether concurrent writes to the log file by multiple processes on the same host. + Maximum number of seconds that files are kept open. If this number is negative the files are not automatically closed after a period of inactivity. - + - Indicates whether to keep log file open instead of opening and closing it on each logging event. + Number of files to be kept open. Setting this to a higher value may improve performance in a situation where a single File target is writing to many files (such as splitting by level or by logger). - + - Maximum number of log filenames that should be stored as existing. + Indicates whether to keep log file open instead of opening and closing it on each logging event. - + - Indicates whether concurrent writes to the log file by multiple processes on different network hosts. + Whether or not this target should just discard all data that its asked to write. Mostly used for when testing NLog Stack except final write - + - Number of files to be kept open. Setting this to a higher value may improve performance in a situation where a single File target is writing to many files (such as splitting by level or by logger). + Indicates whether concurrent writes to the log file by multiple processes on the same host. - + - Maximum number of seconds that files are kept open. If this number is negative the files are not automatically closed after a period of inactivity. + Number of times the write is appended on the file before NLog discards the log message. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + Delay in milliseconds to wait before attempting to write to the file again. @@ -1313,19 +1492,14 @@ Log file buffer size in bytes. - - - Indicates whether to automatically flush the file buffers after each log message. - - - + - Delay in milliseconds to wait before attempting to write to the file again. + Maximum number of seconds before open files are flushed. If this number is negative or zero the files are not flushed by timer. - + - Number of times the write is appended on the file before NLog discards the log message. + Indicates whether to automatically flush the file buffers after each log message. @@ -1339,6 +1513,13 @@ + + + + + + + @@ -1356,13 +1537,6 @@ - - - - - - - @@ -1389,6 +1563,7 @@ + @@ -1498,16 +1673,11 @@ - + - - - Name of the target. - - Interval in which messages will be written up to the number of messages. @@ -1518,6 +1688,11 @@ Maximum allowed number of messages written per . + + + Name of the target. + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit @@ -1619,19 +1794,19 @@ - + + - - - + + + + - - - - + + @@ -1662,9 +1837,14 @@ Footer. - + - Indicates whether to send message as HTML instead of plain text. + Indicates whether NewLine characters in the body should be replaced with tags. + + + + + Priority used for sending mails. @@ -1672,9 +1852,9 @@ Encoding to be used for sending e-mail. - + - Indicates whether to add new lines between log entries. + BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). @@ -1682,24 +1862,14 @@ CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). - - - Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). - - - - - BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). - - - + - Mail message body (repeated for each log message send in one mail). + Indicates whether to add new lines between log entries. - + - Mail subject. + Indicates whether to send message as HTML instead of plain text. @@ -1707,19 +1877,19 @@ Sender's email address (e.g. joe@domain.com). - + - Indicates the SMTP client timeout. + Mail message body (repeated for each log message send in one mail). - + - Priority used for sending mails. + Mail subject. - + - Indicates whether NewLine characters in the body should be replaced with tags. + Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). @@ -1727,6 +1897,11 @@ Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + Indicates the SMTP client timeout. + + SMTP Server to be used for sending. @@ -1795,6 +1970,7 @@ + @@ -1807,52 +1983,9 @@ Layout used to format log messages. - - - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit - - - - - - - - - - - - - - - - - - - - - - - Name of the target. - - - - - Layout used to format log messages. - - - - - Encoding to be used when writing text to the queue. - - - + - Indicates whether to use the XML format when serializing message. This will also disable creating queues. - - - - - Indicates whether to check if a queue exists before writing to it. + Max number of items to have in memory @@ -1860,26 +1993,6 @@ Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit - - - Indicates whether to create the queue if it doesn't exists. - - - - - Label to associate with each message. - - - - - Name of the queue to write to. - - - - - Indicates whether to use recoverable messages (with guaranteed delivery). - - @@ -1926,13 +2039,15 @@ - - + + + + @@ -1965,16 +2080,6 @@ Indicates whether to append newline at the end of log message. - - - Action that should be taken if the will be more connections than . - - - - - Action that should be taken if the message is larger than maxMessageSize. - - Network address. @@ -2000,6 +2105,26 @@ Maximum queue size. + + + Action that should be taken if the will be more connections than . + + + + + Action that should be taken if the message is larger than maxMessageSize. + + + + + Get or set the SSL/TLS protocols. Default no SSL/TLS is used. Currently only implemented for TCP. + + + + + The number of seconds a connection will remain idle before the first keep-alive probe is sent + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit @@ -2018,19 +2143,26 @@ + + + + - - - - + + - + + + + + + @@ -2065,14 +2197,19 @@ Indicates whether to append newline at the end of log message. - + - Action that should be taken if the will be more connections than . + Network address. - + - Action that should be taken if the message is larger than maxMessageSize. + Size of the connection cache (number of connections which are kept alive). + + + + + Indicates whether to keep connection open whenever possible. @@ -2080,19 +2217,19 @@ Maximum current connections. 0 = no maximum. - + - Indicates whether to keep connection open whenever possible. + Action that should be taken if the will be more connections than . - + - Size of the connection cache (number of connections which are kept alive). + Action that should be taken if the message is larger than maxMessageSize. - + - Network address. + Get or set the SSL/TLS protocols. Default no SSL/TLS is used. Currently only implemented for TCP. @@ -2100,9 +2237,14 @@ Maximum queue size. - + - Indicates whether to include dictionary contents. + The number of seconds a connection will remain idle before the first keep-alive probe is sent + + + + + NDLC item separator. @@ -2110,21 +2252,46 @@ Indicates whether to include source info (file name and line number) in the information sent over the network. + + + Renderer for log4j:event logger-xml-attribute (Default ${logger}) + + Indicates whether to include NLog-specific extensions to log4j schema. + + + Indicates whether to include contents of the stack. + + Indicates whether to include stack contents. + + + Indicates whether to include dictionary contents. + + + + + Indicates whether to include dictionary contents. + + Indicates whether to include call site (class and method name) in the information sent over the network. + + + Option to include all properties from the log events + + AppInfo field. By default it's the friendly name of the current AppDomain. @@ -2462,6 +2629,7 @@ + @@ -2474,6 +2642,11 @@ Layout used to format log messages. + + + Always use independent of + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit @@ -2487,67 +2660,81 @@ - - - - + + + + + + + + Name of the target. + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + Should we include the BOM (Byte-order-mark) for UTF? Influences the property. This will only work for UTF-8. - + - Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + Web service method name. Only used with Soap. - + - Encoding. + Web service namespace. Only used with Soap. - + - Value whether escaping be done according to the old NLog style (Very non-standard) + Protocol to be used when calling web service. - + - Value whether escaping be done according to Rfc3986 (Supports Internationalized Resource Identifiers - IRIs) + Custom proxy address, include port separated by a colon - + - Web service method name. Only used with Soap. + Encoding. - + - Web service namespace. Only used with Soap. + Web service URL. - + - Protocol to be used when calling web service. + Value whether escaping be done according to the old NLog style (Very non-standard) - + - Web service URL. + Value whether escaping be done according to Rfc3986 (Supports Internationalized Resource Identifiers - IRIs) + + + + + Indicates whether to pre-authenticate the HttpWebRequest (Requires 'Authorization' in parameters) @@ -2560,6 +2747,11 @@ (optional) root namespace of the XML document, if POST of XML document chosen. (see and ). + + + Proxy configuration when calling web service + + @@ -2573,6 +2765,14 @@ + + + + + + + + @@ -2642,6 +2842,13 @@ + + + + + + + @@ -2653,17 +2860,11 @@ - - - - - - - + @@ -2675,6 +2876,11 @@ Name of the column. + + + Override of Quoting mode + + @@ -2683,6 +2889,10 @@ + + + + @@ -2693,7 +2903,27 @@ - Option to include all properties from the log events + Option to include all properties from the log event (as JSON) + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the dictionary. + + + + + How far should the JSON serializer follow object references before backing off @@ -2711,15 +2941,12 @@ - + + + - - - Determines wether or not this attribute will be Json encoded. - - Layout that will be rendered as the attribute's value. @@ -2730,6 +2957,21 @@ Name of the attribute. + + + Determines whether or not this attribute will be Json encoded. + + + + + Indicates whether to escape non-ascii characters + + + + + Whether an attribute with empty value should be included in the output + + @@ -2760,7 +3002,51 @@ - + + + + + + + + + + + + + Option to include all properties from the log events + + + + + Indicates whether to include call site (class and method name) in the information sent over the network. + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the stack. + + + + + Indicates whether to include contents of the stack. + + + + + Indicates whether to include source info (file name and line number) in the information sent over the network. + + @@ -2778,6 +3064,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + List of property names to exclude when is true + + + + + Option to include all properties from the log event (as XML) + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the dictionary. + + + + + How far should the XML serializer follow object references before backing off + + + + + XML element name to use for rendering IList-collections items + + + + + XML attribute name to use when rendering property-key When null (or empty) then key-attribute is not included + + + + + XML element name to use when rendering properties + + + + + XML attribute name to use when rendering property-value When null (or empty) then value-attribute is not included and value is formatted as XML-element-value + + + + + Name of the root XML element + + + + + Value inside the root XML element + + + + + Whether a ElementValue with empty value should be included in the output + + + + + Auto indent and create new lines + + + + + Determines whether or not this attribute will be Xml encoded. + + + + + + + + + + + + + + + Layout that will be rendered as the attribute's value. + + + + + Name of the attribute. + + + + + Determines whether or not this attribute will be Xml encoded. + + + + + Whether an attribute with empty value should be included in the output + + + + + + + + + + + + + + + + + + + + + + + + + Determines whether or not this attribute will be Xml encoded. + + + + + Name of the element + + + + + Value inside the element + + + + + Whether a ElementValue with empty value should be included in the output + + + + + Auto indent and create new lines + + + + + List of property names to exclude when is true + + + + + Option to include all properties from the log event (as XML) + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the dictionary. + + + + + How far should the XML serializer follow object references before backing off + + + + + XML element name to use for rendering IList-collections items + + + + + XML attribute name to use when rendering property-key When null (or empty) then key-attribute is not included + + + + + XML element name to use when rendering properties + + + + + XML attribute name to use when rendering property-value When null (or empty) then value-attribute is not included and value is formatted as XML-element-value + + + @@ -2935,6 +3433,80 @@ + + + + + + + + + + + + + + + + + + + Action to be taken when filter matches. + + + + + Default number of unique filter values to expect, will automatically increase if needed + + + + + Applies the configured action to the initial logevent that starts the timeout period. Used to configure that it should ignore all events until timeout. + + + + + Layout to be used to filter log messages. + + + + + Max number of unique filter values to expect simultaneously + + + + + Max length of filter values, will truncate if above limit + + + + + How long before a filter expires, and logging is accepted again + + + + + Default buffer size for the internal buffers + + + + + Reuse internal buffers, and doesn't have to constantly allocate new buffers + + + + + Append FilterCount to the when an event is no longer filtered + + + + + Insert FilterCount value into when an event is no longer filtered + + + + + diff --git a/TA.ArduinoPowerController.Server/ReadMe.md b/TA.ArduinoPowerController.Server/ReadMe.md deleted file mode 100644 index 0ce311f..0000000 --- a/TA.ArduinoPowerController.Server/ReadMe.md +++ /dev/null @@ -1,21 +0,0 @@ -ASCOM Platform Components via NuGet -=================================== - -This repository contains a copy of the compiled binaries taken from the ASCOM Developer Components installer -together with a `.nuspec` file for creating a NuGet package. - -This package can be easily installed when developing ASCOM drivers or applications and allows development -to proceed without having to install the ASCOM Platform. - -This is probably of most use when using a build server, where it is burdensome to have to install ASCOM -on each build agent. - -No originality is claimed, this is simply an alternative mechanism for distributing the binaries from the ASCOM Platform. - -This is a derivative work and the binaries are redistributed with permission, under the Creative Commons license of the ASCOM Platform. - -All other content is Copyright © 2016 Tigra Astronomy, all rights reserved. You may use this content under the terms of [Tigra MIT License](http://tigra.mit-license.org "MIT License for Tigra Astronomy"). - -Tim Long, -Tigra Astronomy [http://tigra-astronomy.com](http://tigra-astronomy.com "Tigra Astronomy Web Site") -June 2016 \ No newline at end of file diff --git a/TA.ArduinoPowerController.Server/ServedComClassLocator.cs b/TA.ArduinoPowerController.Server/ServedComClassLocator.cs index f741dc0..dfcca62 100644 --- a/TA.ArduinoPowerController.Server/ServedComClassLocator.cs +++ b/TA.ArduinoPowerController.Server/ServedComClassLocator.cs @@ -1,144 +1,66 @@ // This file is part of the TA.ArduinoPowerController project // -// Copyright © 2016-2017 Tigra Astronomy, all rights reserved. -// Licensed under the MIT license, see http://tigra.mit-license.org/ +// Copyright © 2016-2019 Tigra Astronomy, all rights reserved. +// Licensed under the Tigra MIT license, see http://tigra.mit-license.org/ // -// File: ServedComClassLocator.cs Last modified: 2017-03-16@23:34 by Tim Long +// File: DriverDiscovery.cs Last modified: 2019-09-07@05:21 by Tim Long using System; using System.Collections.Generic; -using System.IO; using System.Linq; using System.Reflection; using ASCOM; -using NLog; +using NLog.Fluent; namespace TA.ArduinoPowerController.Server +{ + internal class DriverDiscovery : MarshalByRefObject { - internal class ServedComClassLocator : MarshalByRefObject - { - private readonly ILogger Log = LogManager.GetCurrentClassLogger(); - - public ServedComClassLocator() - { - DiscoveredAssemblyNames = new List(); - DiscoveredTypes = new List(); - } - /// - /// Gets the list of the names of assemblies that contain ASCOM drivers to be served by - /// the LocalServer. + /// Gets the full name of the LocalServer assembly /// - /// The discovered assembly full names. - public List DiscoveredAssemblyNames { get; } + public string DiscoveredAssemblyName { get; private set; } = string.Empty; /// /// Gets the discovered types that were found to be decorated with the /// attribute. /// /// A list of the discovered types. - public List DiscoveredTypes { get; } + public List DiscoveredTypes { get; } = new List(); /// - /// Discovers types (and their declaring assemblies) that are decorated with the - /// , which identifies an ASCOM driver that should be served - /// by the LocalServer. + /// Discovers types within the LocalServer assembly that are decorated with the + /// , which identifies an ASCOM driver + /// that should be served by the LocalServer. /// - /// - /// Assemblies are loaded using to prevent any code execution. - /// This would otherwise be a potential malware attack vector, since untrusted assemblies would be loaded and - /// potentially into - /// a privileged user context. If any of the loaded assemblies must later execute, then this operation should be - /// performed - /// in an isolated application domain so that the domain and all the loaded assemblies can later be unloaded. Unloaing - /// an entire - /// AppDomain is the only way to remove assemblies from memory. - /// The class inherits from specifically so that it can be proxied across an - /// App Domain boundary. - /// - /// public void DiscoverServedClasses() + { + Log.Info().Message("Loading served COM classes").Write(); + var thisAssembly = Assembly.GetExecutingAssembly(); + var assemblyName = thisAssembly.GetName(); + var assemblyFullName = assemblyName.FullName; + var assemblyDisplayName = assemblyName.Name; + var types = thisAssembly.GetTypes(); + Log.Trace() + .Message("Reflection found {typeCount} types in assembly {assemblyName}", + types.Length, assemblyDisplayName) + .Write(); + var servedClasses = from type in types.AsParallel() + let memberInfo = (MemberInfo) type + let safeAttributes = CustomAttributeData.GetCustomAttributes(memberInfo) + where safeAttributes.Any( + p => p.AttributeType.Name == nameof(ServedClassNameAttribute)) + select type; + var discoveredTypes = servedClasses.ToList(); + if (discoveredTypes.Any()) { - Log.Info("Loading served COM classes"); - - // put everything into one folder, the same as the server. - var assyPath = Assembly.GetExecutingAssembly().Location; - assyPath = Path.GetDirectoryName(assyPath); - Log.Debug($"Assembly load path is {assyPath}"); - - var d = new DirectoryInfo(assyPath); - var fileInfos = d.GetFiles("*.dll"); - Log.Debug($"Discovered {fileInfos.Length} candidate assemblies"); - try - { - AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += HandleReflectionOnlyAssemblyResolve; - foreach (var fi in fileInfos) - { - Log.Trace($"Examining types in {fi.Name}"); - var aPath = fi.FullName; - try - { - Log.Trace($"Attempting reflection only load for {aPath}"); - var so = Assembly.ReflectionOnlyLoad(Path.GetFileNameWithoutExtension(fi.Name)); - var soShortName = so.GetName().Name; - var types = so.GetTypes(); - Log.Trace($"Reflection found {types.Length} types in assembly {so.FullName}"); - var servedClasses = from type in types.AsParallel() - let memberInfo = (MemberInfo) type - let safeAttributes = CustomAttributeData.GetCustomAttributes(memberInfo) - where safeAttributes.Any( - p => p.AttributeType.Name == nameof(ServedClassNameAttribute)) - select type; - var discoveredTypes = servedClasses.ToList(); - if (discoveredTypes.Any()) - { - DiscoveredTypes.AddRange(discoveredTypes); - DiscoveredAssemblyNames.Add(so.FullName); - Log.Warn($"Discovered {discoveredTypes.Count} served clases in assembly {soShortName}"); - } - } - catch (BadImageFormatException ex) - { - Log.Warn(ex, $"BadImageFormat: {fi.Name}.{fi.Extension} continuing"); - // Probably an attempt to load a Win32 DLL (i.e. not a .net assembly) - // Just swallow the exception and continue to the next item. - } - catch (Exception ex) - { - Log.Error(ex, $"Unexpected error processing {fi.Name}: {ex.Message}"); - //return false; - } - } - } - finally - { - AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve -= HandleReflectionOnlyAssemblyResolve; - } - } - - - /// - /// Handles the reflection only assembly resolve. - /// - /// The sender. - /// The instance containing the event data. - /// Assembly. - private Assembly HandleReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args) - { - try - { - Log.Info( - $"Event: ReflectionOnlyResolveAssembly for {args.Name} requested by {args.RequestingAssembly.GetName().Name}", - args.Name); - var resolved = Assembly.ReflectionOnlyLoad(args.Name); - Log.Info($"Successfully resolved assembly with {resolved.FullName}"); - return resolved; - } - catch (FileLoadException ex) - { - Log.Error(ex, $"Failed to resolve assembly: {args.Name}"); - return null; // Let the app raise its own error. - } + DiscoveredTypes.AddRange(discoveredTypes); + DiscoveredAssemblyName = assemblyFullName; + Log.Info() + .Message("Discovered {servedClassCount} served classes in assembly {assembly}", + discoveredTypes.Count, assemblyName) + .Write(); } } - } \ No newline at end of file + } +} \ No newline at end of file diff --git a/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj b/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj index c67384a..51194d5 100644 --- a/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj +++ b/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj @@ -65,50 +65,44 @@ - ..\packages\ASCOM.Platform.6.3.0\lib\net40\ASCOM.Astrometry.dll - True + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Astrometry.dll - ..\packages\ASCOM.Platform.6.3.0\lib\net40\ASCOM.Attributes.dll - True + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Attributes.dll + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Cache.dll - ..\packages\ASCOM.Platform.6.3.0\lib\net40\ASCOM.Controls.dll - True + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Controls.dll - ..\packages\ASCOM.Platform.6.3.0\lib\net40\ASCOM.DeviceInterfaces.dll - True + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.DeviceInterfaces.dll - ..\packages\ASCOM.Platform.6.3.0\lib\net40\ASCOM.DriverAccess.dll - True + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.DriverAccess.dll - ..\packages\ASCOM.Platform.6.3.0\lib\net40\ASCOM.Exceptions.dll - True + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Exceptions.dll - ..\packages\ASCOM.Platform.6.3.0\lib\net40\ASCOM.Internal.Extensions.dll - True + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Internal.Extensions.dll - ..\packages\ASCOM.Platform.6.3.0\lib\net40\ASCOM.SettingsProvider.dll - True + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.SettingsProvider.dll - ..\packages\ASCOM.Platform.6.3.0\lib\net40\ASCOM.Utilities.dll - True + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Utilities.dll - ..\packages\ASCOM.Platform.6.3.0\lib\net40\ASCOM.Utilities.Video.dll - True + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Utilities.Video.dll ..\packages\JetBrains.Annotations.10.4.0\lib\net\JetBrains.Annotations.dll + - ..\packages\NLog.4.4.5\lib\net45\NLog.dll + ..\packages\NLog.4.6.7\lib\net45\NLog.dll ..\packages\PostSharp.4.3.31\lib\net35-client\PostSharp.dll @@ -121,7 +115,10 @@ ..\packages\PostSharp.Patterns.Threading.4.3.31\lib\net45\PostSharp.Patterns.Threading.dll + + + ..\packages\Rx-Core.2.2.5\lib\net45\System.Reactive.Core.dll @@ -134,6 +131,9 @@ ..\packages\Rx-PlatformServices.2.2.5\lib\net45\System.Reactive.PlatformServices.dll + + + @@ -151,6 +151,9 @@ AboutBox.cs + + + @@ -232,7 +235,6 @@ SettingsSingleFileGenerator Settings.Designer.cs - @@ -289,13 +291,6 @@ - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - diff --git a/TA.ArduinoPowerController.Server/packages.config b/TA.ArduinoPowerController.Server/packages.config index 713e855..822f8b5 100644 --- a/TA.ArduinoPowerController.Server/packages.config +++ b/TA.ArduinoPowerController.Server/packages.config @@ -1,10 +1,9 @@  - - + - - + + @@ -13,6 +12,5 @@ - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Setup/AscomSwitchDriver.wxs b/TA.ArduinoPowerController.Setup/AscomSwitchDriver.wxs index 884be6d..8c79c34 100644 --- a/TA.ArduinoPowerController.Setup/AscomSwitchDriver.wxs +++ b/TA.ArduinoPowerController.Setup/AscomSwitchDriver.wxs @@ -20,12 +20,6 @@ Directory="INSTALLDIRECTORY" Guid="*" Win64="no"> - diff --git a/TA.ArduinoPowerController.Setup/NLog.wxs b/TA.ArduinoPowerController.Setup/NLog.wxs index 2a1ea80..abb1670 100644 --- a/TA.ArduinoPowerController.Setup/NLog.wxs +++ b/TA.ArduinoPowerController.Setup/NLog.wxs @@ -9,7 +9,6 @@ KeyPath="yes" /> - diff --git a/TA.ArduinoPowerController.Setup/TA.ArduinoPowerController.Setup.wixproj b/TA.ArduinoPowerController.Setup/TA.ArduinoPowerController.Setup.wixproj index 0fdaff1..088f29e 100644 --- a/TA.ArduinoPowerController.Setup/TA.ArduinoPowerController.Setup.wixproj +++ b/TA.ArduinoPowerController.Setup/TA.ArduinoPowerController.Setup.wixproj @@ -46,14 +46,6 @@ Binaries;Content;Satellites INSTALLFOLDER - - SwitchDriver - {ed0fe6aa-e1e5-4d21-9b5e-802d50edcce1} - True - True - Binaries;Content;Satellites - INSTALLFOLDER - Aspects {9cdcf319-dadc-41eb-b787-de3862017e95} diff --git a/TA.ArduinoPowerController.SharedCode/GlobalAssemblyInfo.cs b/TA.ArduinoPowerController.SharedCode/GlobalAssemblyInfo.cs new file mode 100644 index 0000000..ddf874c --- /dev/null +++ b/TA.ArduinoPowerController.SharedCode/GlobalAssemblyInfo.cs @@ -0,0 +1,35 @@ +// This file is part of the TA.ArduinoPowerController project +// +// Copyright © 2016-2019 Tigra Astronomy, all rights reserved. +// Licensed under the MIT license, see http://tigra.mit-license.org/ +// +// File: GlobalAssemblyInfo.cs Last modified: 2017-04-07@17:48 by Tim Long + +using System.Reflection; +using System.Runtime.InteropServices; + +// Global assembly attributes shared by all projects in the solution. + +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Tigra Astronomy")] +[assembly: AssemblyProduct("ASCOM Switch driver for Arduino Power Controller")] +[assembly: AssemblyCopyright("Copyright © 2017-19 Tigra Astronomy")] +[assembly: AssemblyTrademark("Tigra Astronomy")] +[assembly: AssemblyCulture("")] + +/* + * Only classes that implement an ASCOM device interface need to be COM-Visible. + * The majority of types in the solution should NOT be COM-visible, so we disable + * COM visibility globally here. It is recommended to place [ComVisible(true)] + * attributes explicitly on each driver class. + */ +[assembly: ComVisible(false)] + +/* + Version information will be injected during the build by GitVersion. + If you do not wish to use GitVersion, then uninstall the GitVersionTask + NuGet package and add your own version information here, as follows: +[assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyFileVersion("1.0.3")] +[assembly: AssemblyInformationalVersion("1.0.3")] +*/ \ No newline at end of file diff --git a/TA.ArduinoPowerController.SharedCode/TA.ArduinoPowerController.SharedCode.projitems b/TA.ArduinoPowerController.SharedCode/TA.ArduinoPowerController.SharedCode.projitems new file mode 100644 index 0000000..07529fc --- /dev/null +++ b/TA.ArduinoPowerController.SharedCode/TA.ArduinoPowerController.SharedCode.projitems @@ -0,0 +1,14 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + 6778254b-a2cd-4364-bf2b-249b59285136 + + + TA.ArduinoPowerController.SharedCode + + + + + \ No newline at end of file diff --git a/TA.ArduinoPowerController.SharedCode/TA.ArduinoPowerController.SharedCode.shproj b/TA.ArduinoPowerController.SharedCode/TA.ArduinoPowerController.SharedCode.shproj new file mode 100644 index 0000000..7eed75d --- /dev/null +++ b/TA.ArduinoPowerController.SharedCode/TA.ArduinoPowerController.SharedCode.shproj @@ -0,0 +1,13 @@ + + + + 6778254b-a2cd-4364-bf2b-249b59285136 + 14.0 + + + + + + + + diff --git a/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.DotSettings b/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.DotSettings deleted file mode 100644 index e7d45a2..0000000 --- a/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.DotSettings +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.csproj b/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.csproj deleted file mode 100644 index d40014f..0000000 --- a/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.csproj +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - Debug - AnyCPU - {C006703F-2193-481D-AA15-F46D2FB2A21B} - Library - Properties - ASCOM.K8056.Switch.Specifications - ASCOM.K8056.Switch.Specifications - v4.6.2 - 512 - - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - True - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - ..\packages\Machine.Specifications.0.11.0\lib\net45\Machine.Specifications.dll - True - - - ..\packages\Machine.Specifications.Should.0.11.0\lib\net45\Machine.Specifications.Should.dll - True - - - ..\packages\NLog.4.4.3\lib\net45\NLog.dll - True - - - ..\packages\PostSharp.Redist.5.0.20-preview\lib\net45\PostSharp.dll - - - ..\packages\PostSharp.Patterns.Common.Redist.5.0.20-preview\lib\net46\PostSharp.Patterns.Common.dll - - - ..\packages\PostSharp.Patterns.Model.Redist.5.0.20-preview\lib\net40\PostSharp.Patterns.Model.dll - - - ..\packages\PostSharp.Patterns.Threading.Redist.5.0.20-preview\lib\net45\PostSharp.Patterns.Threading.dll - - - - - ..\packages\Rx-Core.2.2.5\lib\net45\System.Reactive.Core.dll - True - - - ..\packages\Rx-Interfaces.2.2.5\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\packages\Rx-Linq.2.2.5\lib\net45\System.Reactive.Linq.dll - True - - - ..\packages\Rx-PlatformServices.2.2.5\lib\net45\System.Reactive.PlatformServices.dll - True - - - - - - - - - - ..\packages\TA.Ascom.ReactiveCommunications.0.3.0\lib\net45\TA.Ascom.ReactiveCommunications.dll - True - - - - - - - - - LocalServerLayers.layerdiagram - False - - - - - - - - {ed0fe6aa-e1e5-4d21-9b5e-802d50edcce1} - ASCOM.K8056.Switch - - - {3015f05f-d747-4c3e-a0d4-ec2b3bd76c56} - TA.VellemanK8056.DeviceInterface - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.csproj.DotSettings b/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.csproj.DotSettings deleted file mode 100644 index 184255f..0000000 --- a/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.csproj.DotSettings +++ /dev/null @@ -1,4 +0,0 @@ - - Implicit - Implicit - False \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.v2.ncrunchproject b/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.v2.ncrunchproject deleted file mode 100644 index 05b9746..0000000 --- a/TA.ArduinoPowerController.Switch.Specifications/ASCOM.K8056.Switch.Specifications.v2.ncrunchproject +++ /dev/null @@ -1,27 +0,0 @@ - - true - 1000 - false - false - false - true - false - false - false - false - false - true - false - true - false - true - true - true - 60000 - - - - AutoDetect - STA - x86 - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch.Specifications/Properties/AssemblyInfo.cs b/TA.ArduinoPowerController.Switch.Specifications/Properties/AssemblyInfo.cs deleted file mode 100644 index 845e71d..0000000 --- a/TA.ArduinoPowerController.Switch.Specifications/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ASCOM.K8056.Switch.Specifications")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ASCOM.K8056.Switch.Specifications")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("c006703f-2193-481d-aa15-f46d2fb2a21b")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/TA.ArduinoPowerController.Switch.Specifications/TransactionSpecs.cs b/TA.ArduinoPowerController.Switch.Specifications/TransactionSpecs.cs deleted file mode 100644 index f282df8..0000000 --- a/TA.ArduinoPowerController.Switch.Specifications/TransactionSpecs.cs +++ /dev/null @@ -1,28 +0,0 @@ -// This file is part of the ASCOM.K8056.Switch project -// -// Copyright © 2016-2017 Tigra Astronomy, all rights reserved. -// Licensed under the MIT license, see http://tigra.mit-license.org/ -// -// File: TransactionSpecs.cs Last modified: 2017-03-06@19:17 by Tim Long - -using System.Collections.Generic; -using Machine.Specifications; -using TA.VellemanK8056.DeviceInterface; - -namespace ASCOM.K8056.Switch.Specifications - { - [Subject(typeof(NoReplyTransaction))] - public class when_computing_a_twos_compliment_checksum_of_bytes - { - static byte actualChecksum; - static byte expectedChecksum; - static List input; - Establish context = () => - { - input = new List {0x0A, 0xAE, 0x00, 0x00, 0x46, 0x31, 0x30, 0x00, 0x41, 0x44, 0x43, 0x00, 0x00}; - expectedChecksum = 0xD9; - }; - Because of = () => actualChecksum = NoReplyTransaction.ComputeChecksum(input); - It should_give_the_expected_checksum = () => actualChecksum.ShouldEqual(expectedChecksum); - } - } \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch.Specifications/app.config b/TA.ArduinoPowerController.Switch.Specifications/app.config deleted file mode 100644 index d48b4ff..0000000 --- a/TA.ArduinoPowerController.Switch.Specifications/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch.Specifications/packages.config b/TA.ArduinoPowerController.Switch.Specifications/packages.config deleted file mode 100644 index c5745d5..0000000 --- a/TA.ArduinoPowerController.Switch.Specifications/packages.config +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch/AscomDriverAssemblyResolver.cs b/TA.ArduinoPowerController.Switch/AscomDriverAssemblyResolver.cs deleted file mode 100644 index 7f611be..0000000 --- a/TA.ArduinoPowerController.Switch/AscomDriverAssemblyResolver.cs +++ /dev/null @@ -1,73 +0,0 @@ -// This file is part of the TA.ArduinoPowerController project -// -// Copyright © 2016-2017 Tigra Astronomy, all rights reserved. -// Licensed under the MIT license, see http://tigra.mit-license.org/ -// -// File: AscomDriverAssemblyResolver.cs Last modified: 2017-03-17@17:36 by Tim Long - -using System; -using System.IO; -using System.Reflection; -using NLog; - -namespace TA.ArduinoPowerController.AscomSwitch - { - internal static class AscomDriverAssemblyResolver - { - private static readonly Logger Log = LogManager.GetCurrentClassLogger(); - - /// - /// Resolves support assemblies for an ASCOM driver by searching in the same directory - /// as the driver assembly. - /// - /// The sender. - /// - /// The instance containing the event data. - /// - /// The loaded resolved assembly. - /// - /// - /// The CLR's default assembly resolution strategy is to look in the Global Assembly Cache, - /// then in the application directory and subfolders. However, an ASCOM driver is loaded - /// via COM Interop and is not normally located in the application directory, so the runtime - /// will need help locating an referenced assemblies. - /// - /// - /// By default, ASCOM solves this by including the CodeBase registry value in the driver's - /// COM Interop registration. This requires that the driver is strong named, which means that - /// any referenced assemblies also have to be strong named. This can be problematic, especially - /// if the driver uses third party code that is not signed. - /// - /// - /// Tigra Astronomy prefers to use a custom assembly resolver, which simply looks in the same - /// directory as the driver assembly. This avoids the need to sign the driver with a strong-name, - /// which gives us a bit more flexibility in using third party libraries and tends to simplify - /// build, debug and deployment. - /// - /// - public static Assembly ResolveSupportAssemblies(object sender, ResolveEventArgs args) - { - try - { - Log.Info($"Handling AppDomain.ResolveAssembly event for {args.Name}"); - Log.Info("Attempting to resolve the assembly"); - var me = Assembly.GetExecutingAssembly(); - var here = me.Location; - var myDirectory = Path.GetDirectoryName(here); - var commaPosition = args.Name.IndexOf(','); - var targetName = args.Name.Head(commaPosition); - var targetDll = targetName + ".dll"; - var target = Path.Combine(myDirectory, targetDll); - Log.Info($"Target assembly is {target}"); - var resolvedAssembly = Assembly.LoadFrom(target); - Log.Info($"Successfully resolved assembly load with {resolvedAssembly.GetName()}"); - return resolvedAssembly; - } - catch (Exception ex) - { - Log.Error(ex, $"Failed to resolve assembly: {args.Name}"); - return null; // Let the app raise its own error. - } - } - } - } \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch/NLog.dll.Debug.nlog b/TA.ArduinoPowerController.Switch/NLog.dll.Debug.nlog deleted file mode 100644 index f2aa0df..0000000 --- a/TA.ArduinoPowerController.Switch/NLog.dll.Debug.nlog +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch/NLog.dll.Release.nlog b/TA.ArduinoPowerController.Switch/NLog.dll.Release.nlog deleted file mode 100644 index db7ce87..0000000 --- a/TA.ArduinoPowerController.Switch/NLog.dll.Release.nlog +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch/NLog.dll.nlog b/TA.ArduinoPowerController.Switch/NLog.dll.nlog deleted file mode 100644 index 1949941..0000000 --- a/TA.ArduinoPowerController.Switch/NLog.dll.nlog +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch/Properties/AssemblyInfo.cs b/TA.ArduinoPowerController.Switch/Properties/AssemblyInfo.cs deleted file mode 100644 index b9ce97f..0000000 --- a/TA.ArduinoPowerController.Switch/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,11 +0,0 @@ -// This file is part of the TA.ArduinoPowerController project -// -// Copyright © 2016-2017 Tigra Astronomy, all rights reserved. -// Licensed under the MIT license, see http://tigra.mit-license.org/ -// -// File: AssemblyInfo.cs Last modified: 2017-04-02@18:44 by Tim Long - -using System.Reflection; - -[assembly: AssemblyTitle("ASCOM.ArduinoPowerController.Switch")] -[assembly: AssemblyDescription("ASCOM Switch Driver for Arduino Power Controller")] \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch/Scripts/LoadSwitch.ps1 b/TA.ArduinoPowerController.Switch/Scripts/LoadSwitch.ps1 deleted file mode 100644 index 0e1a13f..0000000 --- a/TA.ArduinoPowerController.Switch/Scripts/LoadSwitch.ps1 +++ /dev/null @@ -1,5 +0,0 @@ -Push-Location ..\bin\Debug -Add-Type -path .\ASCOM.ArduinoPowerController.Switch.dll -$global:sw=New-Object ASCOM.ArduinoPowerController.Switch -$global:sw.Connected = $true -Pop-Location diff --git a/TA.ArduinoPowerController.Switch/Scripts/WalkingRelayTest.ps1 b/TA.ArduinoPowerController.Switch/Scripts/WalkingRelayTest.ps1 deleted file mode 100644 index f64f918..0000000 --- a/TA.ArduinoPowerController.Switch/Scripts/WalkingRelayTest.ps1 +++ /dev/null @@ -1,19 +0,0 @@ - -$sw = New-Object -ComObject ASCOM.ArduinoPowerController.Switch -$sw.Connected = $true - -Function WalkState([bool] $state) - { - For ($i=0; $i -lt 8; $i++) - { - $sw.SetSwitch($i, $state) - Start-Sleep -Milliseconds 250 - } - } - -While ($true) - { - WalkState($true) - WalkState($false) - } - diff --git a/TA.ArduinoPowerController.Switch/TA.ArduinoPowerController.AscomSwitch.csproj b/TA.ArduinoPowerController.Switch/TA.ArduinoPowerController.AscomSwitch.csproj deleted file mode 100644 index 902e939..0000000 --- a/TA.ArduinoPowerController.Switch/TA.ArduinoPowerController.AscomSwitch.csproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - Debug - AnyCPU - {ED0FE6AA-E1E5-4D21-9B5E-802D50EDCCE1} - Library - Properties - TA.ArduinoPowerController.AscomSwitch - TA.ArduinoPowerController.AscomSwitch - v4.6.2 - 512 - - - - True - - - true - full - false - ..\BuildOutput\ - TRACE;DEBUG - prompt - 4 - x64 - false - - - pdbonly - true - ..\BuildOutput\ - TRACE - prompt - 4 - false - - - true - ..\BuildOutput\ - TRACE;DEBUG;DEBUG_IN_EXTERNAL_APP - full - x64 - prompt - MinimumRecommendedRules.ruleset - false - - - ..\BuildOutput\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - false - - - - - - - - - ..\packages\JetBrains.Annotations.10.4.0\lib\net\JetBrains.Annotations.dll - - - ..\packages\NLog.4.4.5\lib\net45\NLog.dll - - - ..\packages\PostSharp.4.3.31\lib\net35-client\PostSharp.dll - True - - - ..\packages\PostSharp.Patterns.Common.4.3.31\lib\net45\PostSharp.Patterns.Common.dll - - - ..\packages\PostSharp.Patterns.Model.4.3.31\lib\net40\PostSharp.Patterns.Model.dll - - - ..\packages\PostSharp.Patterns.Threading.4.3.31\lib\net45\PostSharp.Patterns.Threading.dll - - - - - - - ..\packages\Rx-Core.2.2.5\lib\net45\System.Reactive.Core.dll - - - ..\packages\Rx-Interfaces.2.2.5\lib\net45\System.Reactive.Interfaces.dll - - - ..\packages\Rx-Linq.2.2.5\lib\net45\System.Reactive.Linq.dll - - - ..\packages\Rx-PlatformServices.2.2.5\lib\net45\System.Reactive.PlatformServices.dll - - - - - - - - - ..\packages\TA.Ascom.ReactiveCommunications.0.4.2\lib\net45\TA.Ascom.ReactiveCommunications.dll - - - - - Properties\GlobalAssemblyInfo.cs - - - - - - - - - - - NLog.dll.nlog - True - - - Always - true - - - NLog.dll.nlog - True - - - - - - - - {3015f05f-d747-4c3e-a0d4-ec2b3bd76c56} - TA.ArduinoPowerController.DeviceInterface - - - {3689a2cb-94c5-4012-a5cf-7e7d1dd27143} - TA.ArduinoPowerController.Server - - - {9cdcf319-dadc-41eb-b787-de3862017e95} - TA.PostSharp.Aspects - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch/app.config b/TA.ArduinoPowerController.Switch/app.config deleted file mode 100644 index 199e35c..0000000 --- a/TA.ArduinoPowerController.Switch/app.config +++ /dev/null @@ -1,69 +0,0 @@ - - - - - -
- - -
- - - - - - - - - - - - - - - - - - - - - - COM1:2400,None,8,One,NoDTR,NoRTS - - - - - Relay 0 - Relay 1 - Relay 2 - Relay 3 - Relay 4 - Relay 5 - Relay 6 - Relay 7 - - - - - COM1 - - - - - - - 500 - - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Switch/packages.config b/TA.ArduinoPowerController.Switch/packages.config deleted file mode 100644 index 90ec0ae..0000000 --- a/TA.ArduinoPowerController.Switch/packages.config +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.sln b/TA.ArduinoPowerController.sln index 0ee939e..6057add 100644 --- a/TA.ArduinoPowerController.sln +++ b/TA.ArduinoPowerController.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26228.4 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29209.152 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TA.ArduinoPowerController.DeviceInterface", "TA.ArduinoPowerController.DeviceInterface\TA.ArduinoPowerController.DeviceInterface.csproj", "{3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}" EndProject @@ -17,54 +17,65 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Shared Items", "So WalkingSwitches.ps1 = WalkingSwitches.ps1 EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TA.ArduinoPowerController.AscomSwitch", "TA.ArduinoPowerController.Switch\TA.ArduinoPowerController.AscomSwitch.csproj", "{ED0FE6AA-E1E5-4D21-9B5E-802D50EDCCE1}" -EndProject Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "TA.ArduinoPowerController.Setup", "TA.ArduinoPowerController.Setup\TA.ArduinoPowerController.Setup.wixproj", "{B847A048-C924-4134-BD60-C111B0D37C8B}" EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "TA.ArduinoPowerController.SharedCode", "TA.ArduinoPowerController.SharedCode\TA.ArduinoPowerController.SharedCode.shproj", "{6778254B-A2CD-4364-BF2B-249B59285136}" +EndProject Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + TA.ArduinoPowerController.SharedCode\TA.ArduinoPowerController.SharedCode.projitems*{6778254b-a2cd-4364-bf2b-249b59285136}*SharedItemsImports = 13 + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Debug|Any CPU.Build.0 = Debug|Any CPU {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Debug|x64.ActiveCfg = Debug|Any CPU {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Debug|x64.Build.0 = Debug|Any CPU {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Debug|x86.ActiveCfg = Debug|Any CPU {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Debug|x86.Build.0 = Debug|Any CPU + {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Release|Any CPU.Build.0 = Release|Any CPU {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Release|x64.ActiveCfg = Release|Any CPU {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Release|x64.Build.0 = Release|Any CPU {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Release|x86.ActiveCfg = Release|Any CPU {3015F05F-D747-4C3E-A0D4-EC2B3BD76C56}.Release|x86.Build.0 = Release|Any CPU + {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Debug|Any CPU.Build.0 = Debug|Any CPU {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Debug|x64.ActiveCfg = Debug|Any CPU {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Debug|x64.Build.0 = Debug|Any CPU {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Debug|x86.ActiveCfg = Debug|Any CPU {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Debug|x86.Build.0 = Debug|Any CPU + {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Release|Any CPU.Build.0 = Release|Any CPU {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Release|x64.ActiveCfg = Release|Any CPU {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Release|x64.Build.0 = Release|Any CPU {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Release|x86.ActiveCfg = Release|Any CPU {3689A2CB-94C5-4012-A5CF-7E7D1DD27143}.Release|x86.Build.0 = Release|Any CPU + {9CDCF319-DADC-41EB-B787-DE3862017E95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9CDCF319-DADC-41EB-B787-DE3862017E95}.Debug|Any CPU.Build.0 = Debug|Any CPU {9CDCF319-DADC-41EB-B787-DE3862017E95}.Debug|x64.ActiveCfg = Debug|Any CPU {9CDCF319-DADC-41EB-B787-DE3862017E95}.Debug|x64.Build.0 = Debug|Any CPU {9CDCF319-DADC-41EB-B787-DE3862017E95}.Debug|x86.ActiveCfg = Debug|Any CPU {9CDCF319-DADC-41EB-B787-DE3862017E95}.Debug|x86.Build.0 = Debug|Any CPU + {9CDCF319-DADC-41EB-B787-DE3862017E95}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9CDCF319-DADC-41EB-B787-DE3862017E95}.Release|Any CPU.Build.0 = Release|Any CPU {9CDCF319-DADC-41EB-B787-DE3862017E95}.Release|x64.ActiveCfg = Release|Any CPU {9CDCF319-DADC-41EB-B787-DE3862017E95}.Release|x64.Build.0 = Release|Any CPU {9CDCF319-DADC-41EB-B787-DE3862017E95}.Release|x86.ActiveCfg = Release|Any CPU {9CDCF319-DADC-41EB-B787-DE3862017E95}.Release|x86.Build.0 = Release|Any CPU - {ED0FE6AA-E1E5-4D21-9B5E-802D50EDCCE1}.Debug|x64.ActiveCfg = Debug|Any CPU - {ED0FE6AA-E1E5-4D21-9B5E-802D50EDCCE1}.Debug|x64.Build.0 = Debug|Any CPU - {ED0FE6AA-E1E5-4D21-9B5E-802D50EDCCE1}.Debug|x86.ActiveCfg = Debug|Any CPU - {ED0FE6AA-E1E5-4D21-9B5E-802D50EDCCE1}.Debug|x86.Build.0 = Debug|Any CPU - {ED0FE6AA-E1E5-4D21-9B5E-802D50EDCCE1}.Release|x64.ActiveCfg = Release|Any CPU - {ED0FE6AA-E1E5-4D21-9B5E-802D50EDCCE1}.Release|x64.Build.0 = Release|Any CPU - {ED0FE6AA-E1E5-4D21-9B5E-802D50EDCCE1}.Release|x86.ActiveCfg = Release|Any CPU - {ED0FE6AA-E1E5-4D21-9B5E-802D50EDCCE1}.Release|x86.Build.0 = Release|Any CPU + {B847A048-C924-4134-BD60-C111B0D37C8B}.Debug|Any CPU.ActiveCfg = Debug|x86 {B847A048-C924-4134-BD60-C111B0D37C8B}.Debug|x64.ActiveCfg = Debug|x64 {B847A048-C924-4134-BD60-C111B0D37C8B}.Debug|x64.Build.0 = Debug|x64 {B847A048-C924-4134-BD60-C111B0D37C8B}.Debug|x86.ActiveCfg = Debug|x86 {B847A048-C924-4134-BD60-C111B0D37C8B}.Debug|x86.Build.0 = Debug|x86 + {B847A048-C924-4134-BD60-C111B0D37C8B}.Release|Any CPU.ActiveCfg = Release|x86 {B847A048-C924-4134-BD60-C111B0D37C8B}.Release|x64.ActiveCfg = Release|x64 {B847A048-C924-4134-BD60-C111B0D37C8B}.Release|x64.Build.0 = Release|x64 {B847A048-C924-4134-BD60-C111B0D37C8B}.Release|x86.ActiveCfg = Release|x86 @@ -73,4 +84,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CA042B53-2A8D-4E52-8866-82EAA3672D22} + EndGlobalSection EndGlobal diff --git a/TA.ArduinoPowerController.sln.DotSettings b/TA.ArduinoPowerController.sln.DotSettings index ce1dd75..d5a930d 100644 --- a/TA.ArduinoPowerController.sln.DotSettings +++ b/TA.ArduinoPowerController.sln.DotSettings @@ -149,9 +149,50 @@ This file is part of the $SOLUTION$ project Copyright © 2016-$CURRENT_YEAR$ Tigra Astronomy, all rights reserved. -Licensed under the MIT license, see http://tigra.mit-license.org/ +Licensed under the Tigra MIT license, see http://tigra.mit-license.org/ File: $FILENAME$ Last modified: $CURRENT_YEAR$-$CURRENT_MONTH$-$CURRENT_DAY$@$CURRENT_TIME$ by $USER_NAME$ + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> True D:\VS-Projects\ASCOM.K8056.Switch\ASCOM.K8056.Switch.Specifications\ASCOM.K8056.Switch.Specifications.DotSettings ..\ASCOM.K8056.Switch.Specifications\ASCOM.K8056.Switch.Specifications.DotSettings @@ -159,5 +200,18 @@ File: $FILENAME$ Last modified: $CURRENT_YEAR$-$CURRENT_MONTH$-$CURRENT_DAY$@$C False 1 True + LIVE_MONITOR + LIVE_MONITOR + DO_NOTHING + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + DO_NOTHING + LIVE_MONITOR True AUTO \ No newline at end of file From 8f59c3a747508670587b8eab1feb78ef4cfbc850 Mon Sep 17 00:00:00 2001 From: Tim Long Date: Sun, 8 Sep 2019 05:15:45 +0100 Subject: [PATCH 02/13] Implemented the Van Noord integrated driver pattern Much tidying up to make the code more template-ready --- ReadMe.md | 14 +++--- .../ArduinoSwitchTransaction.cs | 36 +++++++++---- .../CommunicationsStackBuilder.cs | 7 ++- .../Properties/AssemblyInfo.cs | 2 +- .../ReactiveTransactionProcessorFactory.cs | 11 +++- .../ReadMe.md | 5 ++ ...uinoPowerController.DeviceInterface.csproj | 18 +++++-- .../WriteRelayTransaction.cs | 50 +++++++++++-------- .../packages.config | 1 + ...dComClassLocator.cs => DriverDiscovery.cs} | 14 ++++-- .../GitVersionExtensions.cs | 49 ++++++++++++++++++ .../LocalServer.cs | 17 +++++-- TA.ArduinoPowerController.Server/NLog.config | 18 ++++--- .../Properties/AssemblyInfo.cs | 6 +-- .../ServerStatusDisplay.Designer.cs | 32 ++++-------- .../ServerStatusDisplay.cs | 13 ----- .../TA.ArduinoPowerController.Server.csproj | 20 +++++--- .../packages.config | 1 + .../TA.ArduinoPowerController.Setup.wixproj | 12 +++++ .../packages.config | 1 + TA.ArduinoPowerController.sln | 5 +- .../MustBeConnectedAttribute.cs | 38 +++++++------- TA.PostSharp.Aspects/ReadMe.md | 49 ++++++++++++++++++ 23 files changed, 291 insertions(+), 128 deletions(-) create mode 100644 TA.ArduinoPowerController.DeviceInterface/ReadMe.md rename TA.ArduinoPowerController.Server/{ServedComClassLocator.cs => DriverDiscovery.cs} (86%) create mode 100644 TA.ArduinoPowerController.Server/GitVersionExtensions.cs create mode 100644 TA.PostSharp.Aspects/ReadMe.md diff --git a/ReadMe.md b/ReadMe.md index 72f2101..6e5bbca 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,5 +1,4 @@ -Arduino Power Controller with ASCOM Switch Driver -================================================= +# Arduino Power Controller with ASCOM Switch Driver ![Arduino Power Controller][image] @@ -7,8 +6,7 @@ This driver and its source code and the accompanying Arduino Sketch are licensed For further information, please visit the [Project Home Page][project] or the [BitBucket Source Repository][source]. -Project Description -------------------- +## Project Description This project is designed to enable easy control of power to astronomical instruments and ancillary equipment in a robotic observatory. The module can be controlled via the ASCOM Switch interface @@ -32,10 +30,9 @@ the relays directly from the USB power. Note that the Arduino is not capable of powering your equipment directly and it should never be directly connected to the power supply being switched. The output side of the relays must remain completely isolated from the Arduino and the USB connection. The observatory equipment itself should be powered using a separate power supply designed for the purpose. -Software Architecture ---------------------- +## Software Architecture -For developers, this project demonstrates some advanced techniques for developing ASCOM drivers. At Tigra Astronomy, we use techniques that differ significantly from the methods described in the ASCOM documentation. We have our own reasons for this and this is not to say that our techniques are better or more correct, but they do demonstrate some alternative practices. +For developers, this project demonstrates some best practices for developing ASCOM drivers and can be used as a template project to create new drivers. At Tigra Astronomy, we use techniques that differ significantly from the methods described in the ASCOM documentation. We have our own reasons for this and this is not to say that our techniques are better or more correct, but they do demonstrate some alternative practices. In particular: @@ -92,6 +89,9 @@ If you want to get involved but are not sure what to do, please check the [bug t Buy Me a Cup of Coffee ---------------------- +| | | +|---|---| +| | | Software development is powered by coffee! If you've found this driver useful, or you're just feeling benevolent, then you might consider [buying me a cup of coffee][coffee] (or several cups) using the link at the bottom of my web site. Thank you! August 2016, Tim Long diff --git a/TA.ArduinoPowerController.DeviceInterface/ArduinoSwitchTransaction.cs b/TA.ArduinoPowerController.DeviceInterface/ArduinoSwitchTransaction.cs index e8d724d..3e1842f 100644 --- a/TA.ArduinoPowerController.DeviceInterface/ArduinoSwitchTransaction.cs +++ b/TA.ArduinoPowerController.DeviceInterface/ArduinoSwitchTransaction.cs @@ -1,21 +1,37 @@ // This file is part of the TA.ArduinoPowerController project -// -// Copyright © 2016-2017 Tigra Astronomy, all rights reserved. -// Licensed under the MIT license, see http://tigra.mit-license.org/ -// -// File: ArduinoSwitchTransaction.cs Last modified: 2017-03-16@23:33 by Tim Long +// +// Copyright © 2016-2019 Tigra Astronomy, all rights reserved. +// Licensed under the Tigra MIT license, see http://tigra.mit-license.org/ +// +// File: ArduinoSwitchTransaction.cs Last modified: 2019-09-08@04:07 by Tim Long using System; using PostSharp.Patterns.Contracts; using TA.Ascom.ReactiveCommunications.Transactions; namespace TA.ArduinoPowerController.DeviceInterface - { +{ + /// + /// Class ArduinoSwitchTransaction. Sets the base characteristics for all transactions + /// in this solution. + /// + /// internal abstract class ArduinoSwitchTransaction : TerminatedStringTransaction - { + { + /// + /// Initializes a new instance of the class. + /// + /// The command to be sent to the communications channel. + /// + /// !string.IsNullOrEmpty(command) + /// + /// + /// This abstract class cannot be instantiated directly and is intended to be inherited by your own transaction + /// classes. + /// protected ArduinoSwitchTransaction([Required] string command) : base(command) - { + { Timeout = TimeSpan.FromSeconds(2); - } } - } \ No newline at end of file + } +} \ No newline at end of file diff --git a/TA.ArduinoPowerController.DeviceInterface/CommunicationsStackBuilder.cs b/TA.ArduinoPowerController.DeviceInterface/CommunicationsStackBuilder.cs index 9e95b9d..63d5b91 100644 --- a/TA.ArduinoPowerController.DeviceInterface/CommunicationsStackBuilder.cs +++ b/TA.ArduinoPowerController.DeviceInterface/CommunicationsStackBuilder.cs @@ -1,10 +1,13 @@ // This file is part of the TA.ArduinoPowerController project -// +// // Copyright © 2016-2017 Tigra Astronomy, all rights reserved. // Licensed under the MIT license, see http://tigra.mit-license.org/ -// +// // File: CommunicationsStackBuilder.cs Last modified: 2017-03-16@23:33 by Tim Long +/* + * ToDo: completely remove this class after updating Rx + */ using System; using TA.Ascom.ReactiveCommunications; diff --git a/TA.ArduinoPowerController.DeviceInterface/Properties/AssemblyInfo.cs b/TA.ArduinoPowerController.DeviceInterface/Properties/AssemblyInfo.cs index 6b98fb8..909187b 100644 --- a/TA.ArduinoPowerController.DeviceInterface/Properties/AssemblyInfo.cs +++ b/TA.ArduinoPowerController.DeviceInterface/Properties/AssemblyInfo.cs @@ -8,4 +8,4 @@ using System.Reflection; [assembly: AssemblyTitle("TA.ArduinoPowerController.DeviceInterface")] -[assembly: AssemblyDescription("Low level device communications layer")] \ No newline at end of file +[assembly: AssemblyDescription("Low level device communications layer for Arduino Power Controller")] \ No newline at end of file diff --git a/TA.ArduinoPowerController.DeviceInterface/ReactiveTransactionProcessorFactory.cs b/TA.ArduinoPowerController.DeviceInterface/ReactiveTransactionProcessorFactory.cs index 670f325..bb5049c 100644 --- a/TA.ArduinoPowerController.DeviceInterface/ReactiveTransactionProcessorFactory.cs +++ b/TA.ArduinoPowerController.DeviceInterface/ReactiveTransactionProcessorFactory.cs @@ -1,8 +1,8 @@ // This file is part of the TA.ArduinoPowerController project -// +// // Copyright © 2016-2017 Tigra Astronomy, all rights reserved. // Licensed under the MIT license, see http://tigra.mit-license.org/ -// +// // File: ReactiveTransactionProcessorFactory.cs Last modified: 2017-03-16@23:33 by Tim Long using System; @@ -11,6 +11,12 @@ namespace TA.ArduinoPowerController.DeviceInterface { + /// + /// Class ReactiveTransactionProcessorFactory. Used to set up and tear down the communications stack + /// as the device is connected and disconnected. + /// Implements + /// + /// public class ReactiveTransactionProcessorFactory : ITransactionProcessorFactory { public string ConnectionString { get; } @@ -35,6 +41,7 @@ public ReactiveTransactionProcessorFactory(string connectionString) public ITransactionProcessor CreateTransactionProcessor() { Endpoint = DeviceEndpoint.FromConnectionString(ConnectionString); + //ToDo: use new create semantics after updating Rx Channel = CommunicationsStackBuilder.BuildChannel(Endpoint); observer = new TransactionObserver(Channel); processor = new ReactiveTransactionProcessor(); diff --git a/TA.ArduinoPowerController.DeviceInterface/ReadMe.md b/TA.ArduinoPowerController.DeviceInterface/ReadMe.md new file mode 100644 index 0000000..e9e390c --- /dev/null +++ b/TA.ArduinoPowerController.DeviceInterface/ReadMe.md @@ -0,0 +1,5 @@ +# Device Interface project + +It is best practice to place the device communications and interfacing code in its own separate project. One reason for doing so is so that this "business logic" code can be unit tested in isolation. + +This will become particularly important in projects that contain more than one driver class. The driver classes can then share the common device interface code. \ No newline at end of file diff --git a/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj b/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj index a844599..5c90957 100644 --- a/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj +++ b/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj @@ -1,5 +1,6 @@  + Debug @@ -19,7 +20,7 @@ true full false - ..\BuildOutput\ + ..\BuildOutput\Debug\ DEBUG;TRACE prompt 4 @@ -28,7 +29,7 @@ pdbonly true - ..\BuildOutput\ + ..\BuildOutput\Release\ TRACE prompt 4 @@ -75,9 +76,6 @@ - - Properties\GlobalAssemblyInfo.cs - @@ -91,13 +89,23 @@ + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + - + - + - - + + \ No newline at end of file diff --git a/TA.ArduinoPowerController.Server/Properties/AssemblyInfo.cs b/TA.ArduinoPowerController.Server/Properties/AssemblyInfo.cs index e2651f7..93e2aa6 100644 --- a/TA.ArduinoPowerController.Server/Properties/AssemblyInfo.cs +++ b/TA.ArduinoPowerController.Server/Properties/AssemblyInfo.cs @@ -1,11 +1,11 @@ // This file is part of the TA.ArduinoPowerController project -// +// // Copyright © 2016-2017 Tigra Astronomy, all rights reserved. // Licensed under the MIT license, see http://tigra.mit-license.org/ -// +// // File: AssemblyInfo.cs Last modified: 2017-03-16@23:33 by Tim Long using System.Reflection; [assembly: AssemblyTitle("TA.ArduinoPowerController.Server")] -[assembly: AssemblyDescription("ASCOM multi-interface server for TA.ArduinoPowerController.Server")] \ No newline at end of file +[assembly: AssemblyDescription("ASCOM multi-instance server for Arduino Power Controller")] \ No newline at end of file diff --git a/TA.ArduinoPowerController.Server/ServerStatusDisplay.Designer.cs b/TA.ArduinoPowerController.Server/ServerStatusDisplay.Designer.cs index c8d239d..bab52b2 100644 --- a/TA.ArduinoPowerController.Server/ServerStatusDisplay.Designer.cs +++ b/TA.ArduinoPowerController.Server/ServerStatusDisplay.Designer.cs @@ -32,7 +32,6 @@ private void InitializeComponent() this.registeredClientCount = new System.Windows.Forms.Label(); this.OnlineClients = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); - this.ClientStatus = new System.Windows.Forms.ListBox(); this.annunciatorPanel1 = new ASCOM.Controls.AnnunciatorPanel(); this.Relay0Annunciator = new ASCOM.Controls.Annunciator(); this.Relay1Annunciator = new ASCOM.Controls.Annunciator(); @@ -48,7 +47,7 @@ private void InitializeComponent() // // label1 // - this.label1.Location = new System.Drawing.Point(12, 10); + this.label1.Location = new System.Drawing.Point(12, 38); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(104, 21); this.label1.TabIndex = 0; @@ -57,7 +56,7 @@ private void InitializeComponent() // registeredClientCount // this.registeredClientCount.AutoSize = true; - this.registeredClientCount.Location = new System.Drawing.Point(122, 10); + this.registeredClientCount.Location = new System.Drawing.Point(122, 38); this.registeredClientCount.Name = "registeredClientCount"; this.registeredClientCount.Size = new System.Drawing.Size(13, 13); this.registeredClientCount.TabIndex = 1; @@ -66,7 +65,7 @@ private void InitializeComponent() // OnlineClients // this.OnlineClients.AutoSize = true; - this.OnlineClients.Location = new System.Drawing.Point(226, 10); + this.OnlineClients.Location = new System.Drawing.Point(226, 38); this.OnlineClients.Name = "OnlineClients"; this.OnlineClients.Size = new System.Drawing.Size(13, 13); this.OnlineClients.TabIndex = 3; @@ -74,26 +73,14 @@ private void InitializeComponent() // // label3 // - this.label3.Location = new System.Drawing.Point(166, 10); + this.label3.Location = new System.Drawing.Point(166, 38); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(54, 21); this.label3.TabIndex = 2; this.label3.Text = "Online:"; // - // ClientStatus - // - this.ClientStatus.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ClientStatus.FormattingEnabled = true; - this.ClientStatus.Location = new System.Drawing.Point(13, 35); - this.ClientStatus.Name = "ClientStatus"; - this.ClientStatus.Size = new System.Drawing.Size(514, 108); - this.ClientStatus.TabIndex = 4; - // // annunciatorPanel1 // - this.annunciatorPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.annunciatorPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); this.annunciatorPanel1.Controls.Add(this.Relay0Annunciator); this.annunciatorPanel1.Controls.Add(this.Relay1Annunciator); @@ -103,7 +90,7 @@ private void InitializeComponent() this.annunciatorPanel1.Controls.Add(this.Relay5Annunciator); this.annunciatorPanel1.Controls.Add(this.Relay6Annunciator); this.annunciatorPanel1.Controls.Add(this.Relay7Annunciator); - this.annunciatorPanel1.Location = new System.Drawing.Point(346, 7); + this.annunciatorPanel1.Location = new System.Drawing.Point(93, 14); this.annunciatorPanel1.Name = "annunciatorPanel1"; this.annunciatorPanel1.Size = new System.Drawing.Size(181, 19); this.annunciatorPanel1.TabIndex = 5; @@ -230,7 +217,7 @@ private void InitializeComponent() // // SetupCommand // - this.SetupCommand.Location = new System.Drawing.Point(265, 5); + this.SetupCommand.Location = new System.Drawing.Point(12, 12); this.SetupCommand.Name = "SetupCommand"; this.SetupCommand.Size = new System.Drawing.Size(75, 23); this.SetupCommand.TabIndex = 8; @@ -242,10 +229,11 @@ private void InitializeComponent() // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(539, 160); + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.ClientSize = new System.Drawing.Size(310, 73); this.Controls.Add(this.SetupCommand); this.Controls.Add(this.annunciatorPanel1); - this.Controls.Add(this.ClientStatus); this.Controls.Add(this.OnlineClients); this.Controls.Add(this.label3); this.Controls.Add(this.registeredClientCount); @@ -254,6 +242,7 @@ private void InitializeComponent() this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; this.Location = global::TA.ArduinoPowerController.Server.Properties.Settings.Default.MainFormLocation; this.Name = "ServerStatusDisplay"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; this.Text = "Arduino Power Controller"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmMain_FormClosing); this.Load += new System.EventHandler(this.frmMain_Load); @@ -271,7 +260,6 @@ private void InitializeComponent() private System.Windows.Forms.Label registeredClientCount; private System.Windows.Forms.Label OnlineClients; private System.Windows.Forms.Label label3; - private System.Windows.Forms.ListBox ClientStatus; private ASCOM.Controls.AnnunciatorPanel annunciatorPanel1; private System.Windows.Forms.Button SetupCommand; private ASCOM.Controls.Annunciator Relay0Annunciator; diff --git a/TA.ArduinoPowerController.Server/ServerStatusDisplay.cs b/TA.ArduinoPowerController.Server/ServerStatusDisplay.cs index fe0f3fc..2bde675 100644 --- a/TA.ArduinoPowerController.Server/ServerStatusDisplay.cs +++ b/TA.ArduinoPowerController.Server/ServerStatusDisplay.cs @@ -94,19 +94,6 @@ private void ObserveClientStatusChanged(EventPattern eventPattern) SetUiButtonState(); SetUiDeviceConnectedState(); var clientStatus = SharedResources.ConnectionManager.Clients; - try - { - ClientStatus.BeginUpdate(); - ClientStatus.Items.Clear(); - foreach (var client in clientStatus) - { - ClientStatus.Items.Add(client); - } - } - finally - { - ClientStatus.EndUpdate(); - } registeredClientCount.Text = clientStatus.Count().ToString(); OnlineClients.Text = clientStatus.Count(p => p.Online).ToString(); ConfigureUiPropertyNotifications(); diff --git a/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj b/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj index 51194d5..934026c 100644 --- a/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj +++ b/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -39,7 +40,7 @@ true full false - ..\BuildOutput\ + ..\BuildOutput\Debug\ DEBUG;TRACE prompt 4 @@ -50,7 +51,7 @@ pdbonly true - ..\BuildOutput\ + ..\BuildOutput\Release\ TRACE prompt 4 @@ -141,9 +142,6 @@ - - Properties\GlobalAssemblyInfo.cs - Form @@ -164,6 +162,7 @@ CommunicationSettingsControl.cs + @@ -178,7 +177,7 @@ Settings.settings - + Form @@ -277,6 +276,7 @@ TA.PostSharp.Aspects + - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Server/NLog.Release.config b/TA.ArduinoPowerController.Server/NLog.Release.config deleted file mode 100644 index 20fcb34..0000000 --- a/TA.ArduinoPowerController.Server/NLog.Release.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Server/NLog.config b/TA.ArduinoPowerController.Server/NLog.config index 3afacf6..67e9f85 100644 --- a/TA.ArduinoPowerController.Server/NLog.config +++ b/TA.ArduinoPowerController.Server/NLog.config @@ -9,7 +9,7 @@ --> - - + \ No newline at end of file diff --git a/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj b/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj index b6fda94..a1fdc14 100644 --- a/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj +++ b/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj @@ -152,14 +152,6 @@ Designer true - - NLog.config - True - - - NLog.config - True - SettingsSingleFileGenerator Settings.Designer.cs diff --git a/TA.ArduinoPowerController.sln.DotSettings b/TA.ArduinoPowerController.sln.DotSettings index fd058ff..6ce561c 100644 --- a/TA.ArduinoPowerController.sln.DotSettings +++ b/TA.ArduinoPowerController.sln.DotSettings @@ -215,4 +215,5 @@ File: $FILENAME$ Last modified: $CURRENT_YEAR$-$CURRENT_MONTH$-$CURRENT_DAY$@$C LIVE_MONITOR True AUTO - True \ No newline at end of file + True + True \ No newline at end of file From 17896be6eaf725fbab0fa34746b1320eed8e6478 Mon Sep 17 00:00:00 2001 From: Tim Long Date: Sun, 8 Sep 2019 19:02:57 +0100 Subject: [PATCH 06/13] Introduced unit tests based on Machine.Specifications --- ReadMe.md | 96 +++-- .../Common/OctetTests.cs | 125 ++++--- .../WriteRelayTransactionTests.cs | 5 - .../TA.ArduinoPowerController.Test.csproj | 13 +- ...inoPowerController.Test.csproj.DotSettings | 354 ++++++++++++++++++ TA.ArduinoPowerController.sln.DotSettings | 12 +- 6 files changed, 484 insertions(+), 121 deletions(-) create mode 100644 TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj.DotSettings diff --git a/ReadMe.md b/ReadMe.md index 6e5bbca..b1a5513 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -2,105 +2,93 @@ ![Arduino Power Controller][image] -This driver and its source code and the accompanying Arduino Sketch are licensed under the [Tigra MIT license][license]. Essentially, anyone can do anything at all with this software, including commercially, without restriction. Anything you do is your responsibility and not mine. +This driver and its source code and the accompanying Arduino Sketch are licensed under the [Tigra MIT license][license]. Essentially, anyone can do anything at all with this software, including commercially, without restriction. Anything you do is your responsibility and not the author's. -For further information, please visit the [Project Home Page][project] or the [BitBucket Source Repository][source]. +For further information, please visit the [Project Home Page][project] or the [Git Source Repository][source]. ## Project Description -This project is designed to enable easy control of power to astronomical instruments and ancillary -equipment in a robotic observatory. The module can be controlled via the ASCOM Switch interface -from any planetarium or observatory automation software that supports it. Alternatively, the driver -can be used directly from a PowerShell script or any Windows scripting engine that can load a COM object. +This project is designed to enable easy control of power to astronomical instruments and ancillary equipment in a robotic observatory. The project consists of a an ASCOM Switch driver, plus an Arduino sketch. The two parts of the project communicate via the USB interface, which acts as a virtual COM port. The module can be controlled via the ASCOM Switch interface from any planetarium or observatory automation software that supports the ASCOM `ISwitch` interface. Alternatively, the driver can be used directly from a PowerShell script or any Windows scripting engine that can load a COM object. -We have tested the unit while switching 12 volt power supplies. The limitations on voltage and -current will depend on the relay module used. Commonly available modules have relays rated for -up to 10 Amps and up to 250 volts AC. However, switching mains voltages and/or high current loads -can be hazardous. A simple mistake can result in destruction of equipment, fire, electrocution -and death. ***Therefore we cannot endorse the use of this technology for switching high voltage or high -current loads***. We suggest using the module only to switch low voltage DC power where the consequences -of a mistake are more manageable. +The serves as a base implementation that can be extended to build other drivers and to understand the operation of in-process (COM LocalServer) drivers. -The project uses cheap, commonly available modules to create a computer controlled power switch. -We used an Arduino UNO R3, available for as little as £5, and an 8-port relay module obtained -from eBay, also costing around £5. The only other item required is a 10-way Dupont style Male-to-Female -jumper cable to connect up the relay module. A 5 volt Arduino UNO should be capable of driving -the relays directly from the USB power. +### Cautions and Limitations -Note that the Arduino is not capable of powering your equipment directly and it should never be -directly connected to the power supply being switched. The output side of the relays must remain completely isolated from the Arduino and the USB connection. The observatory equipment itself should be powered using a separate power supply designed for the purpose. +We have tested the unit while switching 12 volt power supplies. The limitations on voltage and current will depend on the relay module used. Commonly available modules have relays rated for up to 10 Amps and up to 250 volts AC. However, switching mains voltages and/or high current loads can be hazardous. A simple mistake can result in destruction of equipment, fire, electrocution and death. **_Therefore we cannot endorse the use of this technology for switching high voltage or high current loads_**. We suggest using the module only to switch low voltage DC power where the consequences of a mistake are more manageable. The author has used this technique quite successfully to control 12v accessories for over 2 years at the time of writing. + +The project uses cheap, commonly available modules to create a computer controlled power switch. We used an Arduino UNO R3, available for as little as £5, and an 8-port relay module obtained from eBay, also costing around £5. The only other item required is a 10-way Dupont style Male-to-Female jumper cable to connect up the relay module. A 5 volt Arduino UNO should be capable of driving the relays directly from the USB power, but a 3.3 volt board would probably need additional level shifting buffers. + +Note that the Arduino is not capable of powering your equipment directly and it should never be directly connected to the power supply being switched. The output side of the relays must remain completely isolated from the Arduino and the USB connection. The observatory equipment itself should be powered using a separate power supply designed for the purpose. + +You must accept personal responsibility if you choose to use this project. This is a non-negotiable condition of the license agreement and the author(s) cannot be held liable for anything that happens as a result of you using the project. ## Software Architecture -For developers, this project demonstrates some best practices for developing ASCOM drivers and can be used as a template project to create new drivers. At Tigra Astronomy, we use techniques that differ significantly from the methods described in the ASCOM documentation. We have our own reasons for this and this is not to say that our techniques are better or more correct, but they do demonstrate some alternative practices. +For developers, this project demonstrates some best practices for developing ASCOM in-process (COM LocalServer) drivers and can be used as a template project to create new drivers. The driver has been developed using modern object-oriented techniques. While this may take a little effort to understand initially, the techniques used can be very powerful and save you a lot of time in the long run, so it is worth persevering. You can always post questions to the [ASCOM-Talk Developers Group][ascom-dev] if you are stuck on any of the implementation details. People there are only too willing to help. In particular: -- **Reactive ASCOM** - the project demonstrates our Reactive Communications library in use in a real driver. +- **Reactive ASCOM** - the project demonstrates a transactional thread-safe approach to handling device communications, using the [Reactive Communications for ASCOM][rx-ascom] library. Command/Response sequencing and thread safety can be a real challenge to get right and there are many subtle pitfalls to be avoided. Using a transactional approach helps to ensure correct sequencing of commands and responses, while the Reactive Extensions for .NET ensure thread safety and provide an event-driven programming model. ASCOM drivers are essentially real-time systems and this model is a good fit for that. For information and learning resources on the [Reactive Communications for ASCOM][rx-ascom] library, please visit the [project home page][rx-ascom]. - **WiX Installer** - demonstrates how to perform a declarative no-code install of an ASCOM LocalServer driver, without running any of the code being installed during the installation. Normally, registration must be performed by running the LocalServer application with the /register option. Our install does this declaratively by directly creating the required registry keys. Our installers use WiX - Windows Installer XML, which is free and open source (it was actually Microsoft's very first open source product). The pros and cons of our technique vs. the ASCOM standard technique are complex and this is not the place to have that discussion, but we've used our techniques successfully in at least 6 production drivers. - **Aspect Oriented Programming** We use a product called PostSharp, which is an Aspect Oriented Programming framework and tool chain. PostSharp is not free but it will work in unlicensed mode for a project with a small number of properties and methods, and most ASCOM drivers fit that description nicely. PostSharp allows us to factor out a lot of 'boilerplate' code and replace it with attributes. Some of the attributes you'll notice in this project are: - - `[MustBeConnected]` used in the ASCOM Switch driver on methods that require that the comms channel is active. This is done in such a way that the check is only performed once in the case of nested calls. - - `[NLogTraceWithArguments]` emits diagnostics output on entry and exit from driver methods, including information about passed parameter values and return values, all without writing any code. - - `[NotifyPropertyChanged]` used in the device layer to implement the `INotifyPropertyChanged` interface automatically. - - `[ReaderWriterSynchronized]` used in the `ClientConnectionManager` class within the LocalServer project to create a thread safe Reader/Writer lock around the list of connected clients. - - + + - `[MustBeConnected]` used in the ASCOM Switch driver on methods that require that the comms channel is active. This is done in such a way that the check is only performed once in the case of nested calls. + - `[NLogTraceWithArguments]` emits diagnostics output on entry and exit from driver methods, including information about passed parameter values and return values, all without writing any code. + - `[NotifyPropertyChanged]` used in the device layer to implement the `INotifyPropertyChanged` interface automatically. + - `[ReaderWriterSynchronized]` used in the `ClientConnectionManager` class within the LocalServer project to create a thread safe Reader/Writer lock around the list of connected clients. - + - **Modified LocalServer** Our LocalServer implementation has a few interesting customizations. - - **Reduced Attack Surface Area** that uses the Reflection-only load context when searching for assemblies with ASCOM drivers. The original LocalServer loads every assembly it finds into the execution context whilst running with elevated permissions. That comes with a high risk since malicious code could very easily be dropped into the folder. We minimize this attack vector by examining all assemblies in the Reflection-only context, so that no malicious code could execute while the server has elevated permissions.At other times we only load the assemblies containing ASCOM drivers. Note: there is no known incident of a LocalServer being used as an attack vector, but once we had identified the possibility we felt that we had to address it. - - **Status Display GUI** that shows the status of each client connection and also updates annunciators to show the state of the hardware. This also provides easy access to the Setup Dialog. + - **Reduced Attack Surface Area** that uses the Reflection-only load context when searching for assemblies with ASCOM drivers. The original LocalServer loads every assembly it finds into the execution context whilst running with elevated permissions. That comes with a high risk since malicious code could very easily be dropped into the folder. We minimize this attack vector by examining all assemblies in the Reflection-only context, so that no malicious code could execute while the server has elevated permissions.At other times we only load the assemblies containing ASCOM drivers. Note: there is no known incident of a LocalServer being used as an attack vector, but once we had identified the possibility we felt that we had to address it. + - **Status Display GUI** that shows the status of each client connection and also updates annunciators to show the state of the hardware. This also provides easy access to the Setup Dialog. -Installation ------------- +## Installation -Download » +[Download »](https://bitbucket.org/tigra-astronomy/ta.arduinopowercontroller-ascom-switch-driver/downloads/) The installer can be downloaded from [BitBucket][download]. The installer has a minimal user interface but is fully functional. Upgrades can be installed 'on top of' existing versions and we expect that settings will be preserved in that situation. The installer has two versions, one for 32-bit (x86) computers and another for 64-bit (x64) computers. The installer checks that it is running on the right type of system and will not allow installation to proceed if it finds a mismatch. This allows our ASCOM drivers to function correctly in all situations and they are compatible with operating systems and applications of all varieties. -End users should install the `Release` version of the driver. `Debug` versions are for diagnostic use and will have much worse performance than the release build. +End users should install the Release version of the driver. Debug versions are for diagnostic use and will have much worse performance than the release build. -Driver Configuration --------------------- +## Driver Configuration -The driver currently allows configuration only of the Comm Port Name (typically "COM1") via the Setup Dialog. Other parameters may be configurable but there is no user interface. They can be edited using the *ASCOM Profile Explorer* utility. +The driver currently allows configuration only of the Comm Port Name (typically "COM1") via the Setup Dialog. Other parameters may be configurable but there is no user interface. They can be edited using the _ASCOM Profile Explorer_ utility. -Diagnostics ------------ +## Diagnostics The driver emits diagnostic information using NLog. It is configured by default to emit informational messages to the Trace channel and errors & warnings to the log file. Live output can be viewed with a utility such as SysInternals' DebugView, or Binary Fortress' Log Fusion. Alternatively, the NLog configuration file `NLog.dll.nlog` and `NLog.config` can be edited to emit logging information to any NLog target, including a file or database. See the [NLog wiki][nlog] for information on configuring NLog. -Feeback and Bugs ----------------- +## Feeback and Bugs There is a bug tracker at the [BitBucket source repository][source]. Please submit any bug reports and feature requests there. It would be most helpful if you could quote the full version number of the driver when reporting any issues. -Get Involved ------------- +## Get Involved There are probably many ways in which this driver could be improved. If you would like to contribute, then we would be delighted to accept your pull request at our [BitBucket source repository][source]. Any source code that you contribute will be covered by the original [Tigra MIT License][license] and once merged, contributions are irrevocable. If you want to get involved but are not sure what to do, please check the [bug tracker][source] to see if there are any outstanding issues or feature requests that you could work on. -Buy Me a Cup of Coffee ----------------------- +## Buy Me a Cup of Coffee + +| | | -| | | -|---|---| -| | | Software development is powered by coffee! If you've found this driver useful, or you're just feeling benevolent, then you might consider [buying me a cup of coffee][coffee] (or several cups) using the link at the bottom of my web site. Thank you! August 2016, Tim Long -[license]: https://tigra.mit-license.org/ "Tigra Astronomy Open Source License" -[project]: http://tigra-astronomy.com/oss/arduino-power-controller "Project Home Page at Tigra Astronomy" -[source]: https://bitbucket.org/account/user/tigra-astronomy/projects/OPC "BitBucket Git Source Control" +[coffee]: http://tigra-astronomy.com/#coffee "Buy me a cup of coffee" [download]: https://bitbucket.org/tigra-astronomy/ta.arduinopowercontroller-ascom-switch-driver/downloads/ "Download the installer" -[tigra]: http://tigra-astronomy.com "Tigra Astronomy Web Site" -[nlog]: https://github.com/nlog/nlog/wiki/Configuration-file#targets "NLog Targets" -[coffee]: http://tigra-astronomy.com/#coffee "Buy me a cup of coffee" -[image]: http://tigra-astronomy.com/Media/TigraAstronomy/site-images/arduino-power-controller/hardware.png "Arduino Power Controller" \ No newline at end of file +[image]: http://tigra-astronomy.com/Media/TigraAstronomy/site-images/arduino-power-controller/hardware.png "Arduino Power Controller" +[license]: https://tigra.mit-license.org/ "Tigra Astronomy Open Source License" +[nlog]: https://github.com/nlog/nlog/wiki/Configuration-file#targets "NLog Targets" +[project]: http://tigra-astronomy.com/oss/arduino-power-controller "Project Home Page at Tigra Astronomy" +[source]: https://github.com/Tigra-Astronomy/TA.ArduinoPowerController.AscomServer "Git Source Repository" +[tigra]: http://tigra-astronomy.com "Tigra Astronomy Web Site" +[ascom-dev]: https://ascomtalk.groups.io/g/Developer "ASCOM-Talk/Developer discussion group" +[rx-ascom]: http://tigra-astronomy.com/reactive-communications-for-ascom "Project home page: Reactive Communications for ASCOM" \ No newline at end of file diff --git a/TA.ArduinoPowerController.Test/Common/OctetTests.cs b/TA.ArduinoPowerController.Test/Common/OctetTests.cs index af40b02..75495ad 100644 --- a/TA.ArduinoPowerController.Test/Common/OctetTests.cs +++ b/TA.ArduinoPowerController.Test/Common/OctetTests.cs @@ -1,59 +1,88 @@ -// This file is part of the TA.UWP.IoTUtilities project +// This file is part of the TA.ArduinoPowerController project // -// Copyright © 2015-2015 Tigra Astronomy., all rights reserved. +// Copyright © 2016-2019 Tigra Astronomy, all rights reserved. +// Licensed under the Tigra MIT license, see http://tigra.mit-license.org/ // -// File: OctetTests.cs Last modified: 2015-11-10@15:27 by Tim Long +// File: OctetTests.cs Last modified: 2019-09-08@19:01 by Tim Long -using FluentAssertions; +using Machine.Specifications; using TA.ArduinoPowerController.Common; -using Xunit; namespace TA.ArduinoPowerController.Test.Common { - public class OctetTests + [Subject(typeof(Octet), "Initialization")] + internal class when_an_octet_is_initialized_to_zero { - [Fact] - private void OctetZeroContainsAllBitsFalse() - { - var zero = Octet.Zero; - for (var i = 0; i < 8; i++) + Establish context; + Because of = () => zero = Octet.Zero; + + It should_have_all_bits_clear = () => + { + for (var i = 0; i < 8; i++) + { + zero[i].ShouldBeFalse(); + } + }; + + static Octet zero; + } + + [Subject(typeof(Octet), "bit clear")] + internal class when_a_bit_is_cleared + { + Establish context = () => immutableOctet = Octet.Max; + + It should_produce_a_new_octet_with_that_bit_cleared = () => + { + var octet = Octet.Max; // All bits set + for (int i = 0; i < 8; ++i) + { + var actual = octet.WithBitSetTo(i, false); + expected[i].ShouldEqual((byte) actual); + } + immutableOctet.ShouldEqual(Octet.Max); + }; + + static byte[] expected = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}; + static Octet immutableOctet; + } + + [Subject(typeof(Octet), "bit set")] + internal class when_a_bit_is_set + { + Establish context = () => immutableOctet = Octet.Zero; + + It should_produce_a_new_octet_with_that_bit_set = () => { - zero[i].Should().BeFalse("Zero instance should always be false"); - } - } - - [Theory] - [InlineData(0, 0xFE)] - [InlineData(1, 0xFD)] - [InlineData(2, 0xFB)] - [InlineData(3, 0xF7)] - [InlineData(4, 0xEF)] - [InlineData(5, 0xDF)] - [InlineData(6, 0xBF)] - [InlineData(7, 0x7F)] - public void ClearingABitProducesANewObjectWithThatBitCleared(ushort bit, byte expected) - { - var allBitsSet = Octet.Max; - var oneBitClear = allBitsSet.WithBitSetTo(bit, false); - var expectedOctet = Octet.FromUnsignedInt(expected); - oneBitClear.Should().NotBeSameAs(allBitsSet, "octets are immutable"); - oneBitClear.Should().Be(expectedOctet, "clearing a bit should only affect that bit"); - } - - [Fact] - public void BitwiseAndOperatorShouldMaskBits() - { - var mask = Octet.FromInt(0xAA); - var andResult = Octet.Max & mask; - andResult.Should().Be(mask, "bitwise AND should clear set"); - } - - [Fact] - public void BitwiseOrOperatorShouldSetBits() - { - var mask = Octet.FromInt(0x0F); - var orResult = Octet.Zero | mask; - orResult.Should().Be(mask, "bitwise OR should set bits"); - } + for (int i = 0; i < 8; ++i) + { + var actual = immutableOctet.WithBitSetTo(i, true); + expected[i].ShouldEqual((byte) actual); + } + immutableOctet.ShouldEqual(Octet.Zero); + }; + + static byte[] expected = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; + static Octet immutableOctet; + } + + [Subject(typeof(Octet), "bitwise AND")] + internal class when_a_bitwise_and_is_applied + { + Establish context = () => mask = 0xAA; + Because of = () => actual = Octet.Max & mask; + It should_mask_the_false_bits = () => actual.ShouldEqual(mask); + static Octet actual; + static Octet mask; + } + + [Subject(typeof(Octet), "bitwise OR")] + internal class when_a_bitwise_or_is_applied + { + Establish context = () => mask = 0xAA; + Because of = () => actual = Octet.Zero | mask; + It should_set_the_true_bits = () => actual.ShouldEqual(mask); + static Octet actual; + static Octet mask; } } \ No newline at end of file diff --git a/TA.ArduinoPowerController.Test/DeviceInterface/WriteRelayTransactionTests.cs b/TA.ArduinoPowerController.Test/DeviceInterface/WriteRelayTransactionTests.cs index af25d01..deac6b5 100644 --- a/TA.ArduinoPowerController.Test/DeviceInterface/WriteRelayTransactionTests.cs +++ b/TA.ArduinoPowerController.Test/DeviceInterface/WriteRelayTransactionTests.cs @@ -5,15 +5,10 @@ // // File: WriteRelayTransactionTests.cs Last modified: 2019-09-08@09:48 by Tim Long -using Xunit; namespace TA.ArduinoPowerController.Test.DeviceInterface { public class WriteRelayTransactionTests { - [Fact] - void WritingARelaySendsTheCorrectCommand() - { - } } } \ No newline at end of file diff --git a/TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj b/TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj index a5ae97e..8c91d41 100644 --- a/TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj +++ b/TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj @@ -53,18 +53,15 @@ - - 5.9.0 + + 1.0.0 + + + 1.0.0 1.2.2 - - 2.4.1 - - - 2.4.1 - diff --git a/TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj.DotSettings b/TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj.DotSettings new file mode 100644 index 0000000..85113d1 --- /dev/null +++ b/TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj.DotSettings @@ -0,0 +1,354 @@ + + SUGGESTION + SUGGESTION + True + Implicit + Implicit + <?xml version="1.0" encoding="utf-16"?> +<Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"> + <FilePattern RemoveRegions="AllExceptGenerated"> + <Region Name=" Context base classes"> + <Entry DisplayName="with_"> + <Entry.Match> + <And> + <Kind Is="Class" /> + <Name Is="^with_.+$" IgnoreCase="True" /> + </And> + </Entry.Match> + </Entry> + </Region> + <Entry DisplayName="when_"> + <Entry.Match> + <And> + <Kind Is="Class" /> + <Or> + <HasAttribute Name="^Subject$" /> + <Name Is="^when_.+$" IgnoreCase="True" /> + </Or> + </And> + </Entry.Match> + </Entry> + </FilePattern> + <TypePattern DisplayName="Machine.Specifications"> + <TypePattern.Match> + <And> + <Kind Is="Class" /> + <Not> + <Access Is="Private" /> + </Not> + <Or> + <HasAttribute Name="^Subject(Attribute)?$" /> + <Name Is="^with_.+$" IgnoreCase="True" /> + <Name Is="^when_.+$" IgnoreCase="True" /> + </Or> + </And> + </TypePattern.Match> + <Entry DisplayName="Establish context"> + <Entry.Match> + <And> + <Access Is="Private" /> + <Kind Is="Field" /> + <Name Is="^context$" IgnoreCase="True" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Because of"> + <Entry.Match> + <And> + <Access Is="Private" /> + <Kind Is="Field" /> + <Name Is="^of$" IgnoreCase="True" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="It should"> + <Entry.Match> + <And> + <Access Is="Private" /> + <Kind Is="Field" /> + <Name Is="^should_.+$" IgnoreCase="True" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Cleanup after"> + <Entry.Match> + <And> + <Access Is="Private" /> + <Kind Is="Field" /> + <Name Is="^after$" IgnoreCase="True" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Static fields"> + <Entry.Match> + <And> + <Access Is="Any" /> + <Static /> + <Kind Is="Field" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Access /> + <Name Is="Enter Pattern Here" /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Other fields"> + <Entry.Match> + <Kind Is="Field" /> + </Entry.Match> + </Entry> + </TypePattern> +</Patterns> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Private, Protected, ProtectedInternal, Internal, Public" Description="MSpec context base class"><ElementKinds /></Descriptor><Policy Inspect="True" Prefix="with_" Suffix="" Style="aa_bb" /></Policy> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Private, Protected, ProtectedInternal, Internal, Public" Description="MSpec context class"><ElementKinds /></Descriptor><Policy Inspect="True" Prefix="when_" Suffix="" Style="aa_bb" /></Policy> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Private, Protected, ProtectedInternal, Internal, Public" Description="MSpec supporting field"><ElementKinds /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /></Policy> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Private, Protected, ProtectedInternal, Internal, Public" Description="MSpec specification"><ElementKinds /></Descriptor><Policy Inspect="True" Prefix="should_" Suffix="" Style="aa_bb" /></Policy> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + LIVE_MONITOR + LIVE_MONITOR + DO_NOTHING + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + DO_NOTHING + LIVE_MONITOR + True + True + True + Imported 19/05/2016 + MSpec + Short template for MSpec BDD specification + True + 2 + True + 1 + True + 0 + True + True + 2.0 + InCSharpTypeAndNamespace + specs + True + [Subject(typeof($Subject$))] +public class when_$Specification$ +{ + It should_$Behaviour$$END$; +} + True + True + MSpec + cs + Specs + True + Specs + True + 2 + True + 3 + True + fileheader() + -1 + 4 + True + getProjectName() + 0 + True + 1 + True + InCSharpProjectFile + True + $FileHeader$ + +using Machine.Specifications; + +namespace $Namespace$ +{ +[Subject(typeof($Type$), "$Concern$")] +internal class when_$Context$ +{ +$END$ +It should_make_assertions; +} +} + True + True + MSpec + Live template for MSpec 'Because' delegate + True + 2.0 + InCSharpTypeMember + because + True + Because of = () => $END$; + True + True + MSpec + Catch.Exception + True + True + 2.0 + InCSharpFile + True + Exception = Catch.Exception(() => { $SELECTION$ }); + True + True + MSpec + Live template for MSpec 'It' delegate + True + JoarOyenLiveTemplateMacros.ValidIdentifier() + 0 + True + 2.0 + InCSharpTypeMember + it + True + It should_$do$ = () => $END$; + True + True + Imported 19/05/2016 + MSpec + Short template for MSpec BDD context + True + 0 + True + True + 2.0 + InCSharpTypeAndNamespace + specc + True + public abstract class with_$Context$ +{ + Establish context = () => + { + $END$ + }; +} + True + True + Imported 19/05/2016 + MSpec + Template for MSpec BDD specification + True + 3 + True + 4 + True + 2 + True + 1 + True + 0 + True + True + 2.0 + InCSharpTypeAndNamespace + spect + True + [Subject(typeof($Subject$), "$Concern$")] +public class when_$Specification$ : with_$Context$ +{ + Because of = () => + { + + }; + + It should_$Behaviour$$END$; +} + True + True + MSpec + Live template for MSpec 'Establish' delegate + True + 2.0 + InCSharpTypeMember + establish + True + Establish context = () => $END$; + True + True + Imported 19/05/2016 + MSpec + Full template for MSpec BDD specification + True + 2 + True + 1 + True + JoarOyenLiveTemplateMacros.ValidIdentifier() + 3 + True + 0 + True + True + 2.0 + InCSharpTypeAndNamespace + spec + True + [Subject(typeof($Subject$), "$Concern$")] +public class when_$Context$ + { + Establish context ; + Because of ; + It should_$Behaviour$$END$; + } + True + True + MSpec + Assert that an exception of the expected type was thrown + True + completeType("System.Exception") + 0 + True + True + 2.0 + InCSharpFile + should-throw + True + It should_throw = () => Exception.ShouldBeOfExactType<$exception$>(); +static Exception Exception; \ No newline at end of file diff --git a/TA.ArduinoPowerController.sln.DotSettings b/TA.ArduinoPowerController.sln.DotSettings index 6ce561c..61c4fd8 100644 --- a/TA.ArduinoPowerController.sln.DotSettings +++ b/TA.ArduinoPowerController.sln.DotSettings @@ -193,12 +193,12 @@ File: $FILENAME$ Last modified: $CURRENT_YEAR$-$CURRENT_MONTH$-$CURRENT_DAY$@$C <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - True - D:\VS-Projects\ASCOM.K8056.Switch\ASCOM.K8056.Switch.Specifications\ASCOM.K8056.Switch.Specifications.DotSettings - ..\ASCOM.K8056.Switch.Specifications\ASCOM.K8056.Switch.Specifications.DotSettings - True - False - 1 + + + + + + True LIVE_MONITOR LIVE_MONITOR From 6ba91620b068970f057fb5414c997bdc1b186c5c Mon Sep 17 00:00:00 2001 From: Tim Long Date: Sat, 26 Mar 2022 21:23:29 +0000 Subject: [PATCH 07/13] Added a composition root that uses Ninject. Updated dependencies Updated installer to include new dependencies Switch to TA.Utils for logging and other utilities Switch to TA.WinFormsControls from teh ASCOM version --- ReadMe.md | 19 ++- .../DeviceController.cs | 7 +- ...uinoPowerController.DeviceInterface.csproj | 12 +- .../TransactionException.cs | 31 ----- .../WriteRelayTransaction.cs | 5 +- .../ClientConnectionManager.cs | 66 +++++---- .../CompositionRoot.cs | 126 ++++++++++++++++++ .../ServerStatusDisplay.Designer.cs | 38 +++--- .../ServerStatusDisplay.cs | 2 +- .../SharedResources.cs | 55 ++++---- .../TA.ArduinoPowerController.Server.csproj | 22 ++- .../AscomLocalServer.wxs | 4 + .../AscomSwitchDriver.wxs | 1 + .../DeviceControlLayer.wxs | 1 + TA.ArduinoPowerController.Setup/Ninject.wxs | 15 +++ .../PostSharpAspects.wxs | 1 + .../ReactiveExtensions.wxs | 21 +-- .../RuntimeSupport.wxs | 38 ++++++ .../TA.ArduinoPowerController.Setup.wixproj | 5 + TA.ArduinoPowerController.Setup/TaUtils.wxs | 22 +++ .../TaWinformsControls.wxs | 14 ++ .../GlobalAssemblyInfo.cs | 6 +- .../ClassDiagram1.cd | 2 + .../Common/OctetTests.cs | 1 - .../WriteRelayTransactionTests.cs | 21 ++- .../Fakes/FakeCommunicationChannel.cs | 41 +++--- .../Fakes/FakeEndpoint.cs | 26 ++++ .../Fakes/TestableDeviceTransaction.cs | 3 +- .../Fakes/TransactionExtensions.cs | 3 +- TA.ArduinoPowerController.Test/LogSetup.cs | 35 +++++ .../TA.ArduinoPowerController.Test.csproj | 13 +- .../CommunicationsChannelContext.cs | 25 ++++ .../CommunicationsChannelContextBuilder.cs | 32 +++++ .../with_fake_communications_channel.cs | 29 ++++ .../TA.PostSharp.Aspects.csproj | 6 +- 35 files changed, 572 insertions(+), 176 deletions(-) delete mode 100644 TA.ArduinoPowerController.DeviceInterface/TransactionException.cs create mode 100644 TA.ArduinoPowerController.Server/CompositionRoot.cs create mode 100644 TA.ArduinoPowerController.Setup/Ninject.wxs create mode 100644 TA.ArduinoPowerController.Setup/RuntimeSupport.wxs create mode 100644 TA.ArduinoPowerController.Setup/TaUtils.wxs create mode 100644 TA.ArduinoPowerController.Setup/TaWinformsControls.wxs create mode 100644 TA.ArduinoPowerController.Test/ClassDiagram1.cd create mode 100644 TA.ArduinoPowerController.Test/LogSetup.cs create mode 100644 TA.ArduinoPowerController.Test/TestContexts/CommunicationsChannelContext.cs create mode 100644 TA.ArduinoPowerController.Test/TestContexts/CommunicationsChannelContextBuilder.cs create mode 100644 TA.ArduinoPowerController.Test/TestContexts/with_fake_communications_channel.cs diff --git a/ReadMe.md b/ReadMe.md index b1a5513..c361c05 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -8,7 +8,11 @@ For further information, please visit the [Project Home Page][project] or the [G ## Project Description -This project is designed to enable easy control of power to astronomical instruments and ancillary equipment in a robotic observatory. The project consists of a an ASCOM Switch driver, plus an Arduino sketch. The two parts of the project communicate via the USB interface, which acts as a virtual COM port. The module can be controlled via the ASCOM Switch interface from any planetarium or observatory automation software that supports the ASCOM `ISwitch` interface. Alternatively, the driver can be used directly from a PowerShell script or any Windows scripting engine that can load a COM object. +This project serves a dual purpose. It is a fully functional turnkey solution designed to enable easy control of power to astronomical instruments and ancillary equipment in an observatory. At the same time, it can form a learning platform and a jumping-off point for other new drivers. The Switch code can be gradually replaced with new code and if done with care, it is possible to keep a working build at all times. In the past, driver development began with a mostly empty template project which didn't offer much guidance on how to get things done or demonstrate good architectural choices. The author discovered, after developing over a dozen ASCOM drivers, that it was actually easier to start from an already fully functional project and add new code from there. + +To begin work on your own driver, we recommend forking this project on GitHub, building it on your own system and then striking out towards your new driver. + +The project consists of a an ASCOM Switch driver, plus an Arduino sketch. The two parts of the project communicate via the USB interface, which acts as a virtual COM port. The module can be controlled via the ASCOM Switch interface from any planetarium or observatory automation software that supports the ASCOM `ISwitch` interface. Alternatively, the driver can be used directly from a PowerShell script or any Windows scripting engine that can load a COM object. The serves as a base implementation that can be extended to build other drivers and to understand the operation of in-process (COM LocalServer) drivers. @@ -29,18 +33,19 @@ For developers, this project demonstrates some best practices for developing ASC In particular: - **Reactive ASCOM** - the project demonstrates a transactional thread-safe approach to handling device communications, using the [Reactive Communications for ASCOM][rx-ascom] library. Command/Response sequencing and thread safety can be a real challenge to get right and there are many subtle pitfalls to be avoided. Using a transactional approach helps to ensure correct sequencing of commands and responses, while the Reactive Extensions for .NET ensure thread safety and provide an event-driven programming model. ASCOM drivers are essentially real-time systems and this model is a good fit for that. For information and learning resources on the [Reactive Communications for ASCOM][rx-ascom] library, please visit the [project home page][rx-ascom]. -- **WiX Installer** - demonstrates how to perform a declarative no-code install of an ASCOM LocalServer driver, without running any of the code being installed during the installation. Normally, registration must be performed by running the LocalServer application with the /register option. Our install does this declaratively by directly creating the required registry keys. Our installers use WiX - Windows Installer XML, which is free and open source (it was actually Microsoft's very first open source product). The pros and cons of our technique vs. the ASCOM standard technique are complex and this is not the place to have that discussion, but we've used our techniques successfully in at least 6 production drivers. -- **Aspect Oriented Programming** We use a product called PostSharp, which is an Aspect Oriented Programming framework and tool chain. PostSharp is not free but it will work in unlicensed mode for a project with a small number of properties and methods, and most ASCOM drivers fit that description nicely. PostSharp allows us to factor out a lot of 'boilerplate' code and replace it with attributes. Some of the attributes you'll notice in this project are: +- **WiX Installer** - demonstrates how to perform a declarative no-code install of an ASCOM LocalServer driver, without running any of the code being installed during the installation. Normally, registration must be performed by running the LocalServer application with the /register option. Our install does this declaratively by directly creating the required registry keys. Our installers use WiX - Windows Installer XML, which is free and open source (it was actually Microsoft's very first open source project, written by people on the Windows Installer team). +- **Aspect Oriented Programming** We use a product called PostSharp, which is an Aspect Oriented Programming framework and tool chain. PostSharp Essentials is free for a project with a relatively small number of classes, and most ASCOM drivers fit that description nicely. PostSharp allows us to factor out a lot of 'boilerplate' code and replace it with attributes. Some of the attributes you'll notice in this project are: - `[MustBeConnected]` used in the ASCOM Switch driver on methods that require that the comms channel is active. This is done in such a way that the check is only performed once in the case of nested calls. - `[NLogTraceWithArguments]` emits diagnostics output on entry and exit from driver methods, including information about passed parameter values and return values, all without writing any code. - `[NotifyPropertyChanged]` used in the device layer to implement the `INotifyPropertyChanged` interface automatically. - - `[ReaderWriterSynchronized]` used in the `ClientConnectionManager` class within the LocalServer project to create a thread safe Reader/Writer lock around the list of connected clients. - + - `[ReaderWriterSynchronized]` used in the `ClientConnectionManager` class within the LocalServer project to create a thread safe Reader/Writer lock around the list of connected clients. + + The `Aspects` project contains a ReadMe file with more details. -- **Modified LocalServer** Our LocalServer implementation has a few interesting customizations. +- **LocalServer with Integral Driver Classes** A recent development with the LocalServer pattern was to incorporate driver classes directly into the LocalServer project. Previously, drivers were implemented as separate projects and dynamically loaded by the LocalServer process. However, it was realized that this had a number of disadvantages and promoted poor design. Driver classes are now incorporated directly into the LocalServer project and _should contain the bare minimum code necessary to compile and load_. - - **Reduced Attack Surface Area** that uses the Reflection-only load context when searching for assemblies with ASCOM drivers. The original LocalServer loads every assembly it finds into the execution context whilst running with elevated permissions. That comes with a high risk since malicious code could very easily be dropped into the folder. We minimize this attack vector by examining all assemblies in the Reflection-only context, so that no malicious code could execute while the server has elevated permissions.At other times we only load the assemblies containing ASCOM drivers. Note: there is no known incident of a LocalServer being used as an attack vector, but once we had identified the possibility we felt that we had to address it. - - **Status Display GUI** that shows the status of each client connection and also updates annunciators to show the state of the hardware. This also provides easy access to the Setup Dialog. +- **Status Display User Interface** that shows the status of each client connection and also updates annunciators to show the state of the hardware. This also provides easy access to the Setup Dialog. Thread safety is again ensured using the Reactive Extensions for .NET. ## Installation diff --git a/TA.ArduinoPowerController.DeviceInterface/DeviceController.cs b/TA.ArduinoPowerController.DeviceInterface/DeviceController.cs index 4c6a194..aeff3f3 100644 --- a/TA.ArduinoPowerController.DeviceInterface/DeviceController.cs +++ b/TA.ArduinoPowerController.DeviceInterface/DeviceController.cs @@ -6,22 +6,23 @@ // File: DeviceController.cs Last modified: 2019-09-08@08:36 by Tim Long using System; -using NLog; using TA.Ascom.ReactiveCommunications; +using TA.Utils.Core.Diagnostics; namespace TA.ArduinoPowerController.DeviceInterface { public class DeviceController : IDisposable { private readonly ITransactionProcessorFactory factory; - private readonly Logger log = LogManager.GetCurrentClassLogger(); + private readonly ILog log; private bool disposed; private ITransactionProcessor transactionProcessor; - public DeviceController(ITransactionProcessorFactory factory) + public DeviceController(ITransactionProcessorFactory factory, ILog logService) { this.factory = factory; + log = logService; } public bool IsOnline => transactionProcessor != null && (factory?.Channel?.IsOpen ?? false); diff --git a/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj b/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj index 63e60a3..df3ee55 100644 --- a/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj +++ b/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj @@ -59,7 +59,6 @@ - @@ -77,16 +76,19 @@ all - 2019.1.3 + 2021.3.0 - 6.2.11 + 6.10.8 - 6.2.11 + 6.10.8 - 1.2.2 + 1.4.0 + + + 1.3.0 diff --git a/TA.ArduinoPowerController.DeviceInterface/TransactionException.cs b/TA.ArduinoPowerController.DeviceInterface/TransactionException.cs deleted file mode 100644 index fc0f735..0000000 --- a/TA.ArduinoPowerController.DeviceInterface/TransactionException.cs +++ /dev/null @@ -1,31 +0,0 @@ -// This file is part of the TA.ArduinoPowerController project -// -// Copyright © 2016-2017 Tigra Astronomy, all rights reserved. -// Licensed under the MIT license, see http://tigra.mit-license.org/ -// -// File: TransactionException.cs Last modified: 2017-03-16@23:33 by Tim Long - -using System; -using TA.Ascom.ReactiveCommunications; - -namespace TA.ArduinoPowerController.DeviceInterface - { - [Serializable] - public sealed class TransactionException : Exception - { - // - // For guidelines regarding the creation of new exception types, see - // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp - // and - // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp07192001.asp - // - - public TransactionException() {} - - public TransactionException(string message) : base(message) {} - - public TransactionException(string message, Exception inner) : base(message, inner) {} - - public DeviceTransaction Transaction { get; set; } - } - } \ No newline at end of file diff --git a/TA.ArduinoPowerController.DeviceInterface/WriteRelayTransaction.cs b/TA.ArduinoPowerController.DeviceInterface/WriteRelayTransaction.cs index c28f320..c9a7d22 100644 --- a/TA.ArduinoPowerController.DeviceInterface/WriteRelayTransaction.cs +++ b/TA.ArduinoPowerController.DeviceInterface/WriteRelayTransaction.cs @@ -9,12 +9,11 @@ using System.Linq; using System.Reactive.Linq; using System.Text.RegularExpressions; -using NLog.Fluent; using TA.Ascom.ReactiveCommunications; using TA.Ascom.ReactiveCommunications.Diagnostics; namespace TA.ArduinoPowerController.DeviceInterface -{ + { /// /// Class WriteRelayTransaction. A transaction type used to write a relay setting. /// The transaction checks that the received response contains the expected relay number and value. @@ -97,7 +96,7 @@ protected override void OnCompleted() int relay = int.Parse(matches.Groups["Relay"].Value); bool state = matches.Groups["Value"].Value == "1"; Value = new RelayCommand {Operation = operation, Relay = this.relay, State = state}; - Log.Debug().Message("Successfully received RelayCommand {response}", Value).Write(); + //Log.Debug().Message("Successfully received RelayCommand {response}", Value).Write(); } base.OnCompleted(); // This is critical - it marks the transaction as complete. } diff --git a/TA.ArduinoPowerController.Server/ClientConnectionManager.cs b/TA.ArduinoPowerController.Server/ClientConnectionManager.cs index debe9d8..de4db18 100644 --- a/TA.ArduinoPowerController.Server/ClientConnectionManager.cs +++ b/TA.ArduinoPowerController.Server/ClientConnectionManager.cs @@ -5,16 +5,18 @@ // // File: ClientConnectionManager.cs Last modified: 2017-03-16@23:33 by Tim Long -using System; -using System.Collections.Generic; -using System.Linq; using JetBrains.Annotations; -using NLog; +using Ninject; using PostSharp.Patterns.Model; using PostSharp.Patterns.Threading; +using System; +using System.Collections.Generic; +using System.Linq; using TA.ArduinoPowerController.DeviceInterface; using TA.Ascom.ReactiveCommunications; using TA.PostSharp.Aspects; +using TA.Utils.Core; +using TA.Utils.Core.Diagnostics; namespace TA.ArduinoPowerController.Server { @@ -26,7 +28,7 @@ namespace TA.ArduinoPowerController.Server [NLogTraceWithArguments] public class ClientConnectionManager { - [Reference] private readonly ILogger log = LogManager.GetCurrentClassLogger(); + [Reference] private readonly ILog log; private readonly bool performActionsOnOpen; [Reference] private Maybe controllerInstance; [Reference] private ITransactionProcessorFactory factory; @@ -38,8 +40,11 @@ public class ClientConnectionManager /// A factory class that can create and destroy transaction processors (and by implication, /// the entire communications stack). /// - public ClientConnectionManager(ITransactionProcessorFactory factory) : this(factory, - performActionsOnOpen: true) {} + public ClientConnectionManager(ITransactionProcessorFactory factory, ILog logService) : this(factory, + performActionsOnOpen: true) + { + this.log = logService; + } /// /// Initializes a new instance of the class and allows @@ -90,7 +95,7 @@ internal ITransactionProcessorFactory TransactionProcessorFactory get { return factory; } set { - log.Warn("Setting the TransactionProcessorFactory"); + log.Warn().Message("Setting the TransactionProcessorFactory").Write(); if (OnlineClientCount > 0) throw new InvalidOperationException( "Cannot change or set the Transaction Processor Factory while there are connected clients"); @@ -115,8 +120,9 @@ private void EnsureControllerInstanceCreatedAndOpen() { if (!controllerInstance.Any()) { - var controller = new DeviceController(factory); - controllerInstance = new Maybe(controller); + CompositionRoot.BeginSessionScope(); // Starting a new session + var controller = CompositionRoot.Kernel.Get(); + controllerInstance = Maybe.From(controller); } var instance = controllerInstance.Single(); if (!instance.IsOnline) @@ -128,7 +134,7 @@ private void EnsureControllerInstanceCreatedAndOpen() [Writer] public void GoOffline(Guid clientId) { - log.Info($"Go offline for client {clientId}"); + log.Info().Message("Go offline for client {clientId}", clientId).Write(); ClientStatus client = null; try { @@ -136,15 +142,16 @@ public void GoOffline(Guid clientId) } catch (InvalidOperationException e) { - var message = $"Attempt to go offline by unecognized client {clientId}"; - log.Error(e, message); - //ThrowOnUnrecognizedClient(clientId, e, message); + log.Error() + .Exception(e) + .Message("Attempt to go offline by unecognized client {clientId}", clientId) + .Write(); } client.Online = false; RaiseClientStatusChanged(); if (OnlineClientCount == 0) { - log.Warn($"The last client has gone offline - closing connection"); + log.Warn().Message("The last client has gone offline - closing connection").Write(); if (controllerInstance.Any()) { controllerInstance.Single().Close(); @@ -167,7 +174,7 @@ public void GoOffline(Guid clientId) [Writer] public DeviceController GoOnline(Guid clientId) { - log.Info($"Go online for client {clientId}"); + log.Info().Message("Go online for client {clientId}", clientId).Write(); ClientStatus client = null; try { @@ -175,8 +182,10 @@ public DeviceController GoOnline(Guid clientId) } catch (InvalidOperationException e) { - var message = $"Attempt to go online with unregistered client {clientId}"; - log.Error(e, message); + log.Error() + .Exception(e) + .Message("Attempt to go online with unregistered client {clientId}", clientId) + .Write(); //ThrowOnUnrecognizedClient(clientId, e, message); } try @@ -185,7 +194,10 @@ public DeviceController GoOnline(Guid clientId) } catch (TransactionException trex) { - log.Error(trex, $"NOT CONNECTED due to transaction exception: {trex.Transaction}"); + log.Error() + .Exception(trex) + .Message("NOT CONNECTED due to transaction exception in {transaction}", trex.Transaction) + .Write(); DestroyControllerInstance(); return null; } @@ -219,7 +231,7 @@ protected void RaiseClientStatusChanged() public Guid RegisterClient(string name = null) { var id = Guid.NewGuid(); - var status = new ClientStatus {ClientId = id, Name = name ?? id.ToString(), Online = false}; + var status = new ClientStatus { ClientId = id, Name = name ?? id.ToString(), Online = false }; Clients.Add(status); RaiseClientStatusChanged(); return id; @@ -237,25 +249,29 @@ private void ThrowOnUnrecognizedClient(Guid clientId, Exception e, string messag var ex = new ASCOM.InvalidOperationException($"Connection Manager: {message}", e); ex.Data["RegisteredClients"] = Clients; ex.Data["UnknownClient"] = clientId; - log.Error(ex, $"Client not found: {clientId}"); + log.Error() + .Exception(ex).Message("Client not found: {clientId}", clientId) + .Property("registeredClients", Clients) + .Write(); throw ex; } [Writer] public void UnregisterClient(Guid clientId) { - log.Info($"Unregistering client {clientId}"); + log.Info().Message("Unregistering client {clientId}", clientId).Write(); var previousClientCount = RegisteredClientCount; try { Clients.Remove(Clients.Single(p => p.Equals(clientId))); RaiseClientStatusChanged(); } - catch (InvalidOperationException e) + catch (InvalidOperationException) { var message = $"Attempt to unregister unknown client {clientId}"; - log.Error(e, message); - //ThrowOnUnrecognizedClient(clientId, e, "Attempt to unregister an unknown client"); + log.Error() + .Message("Attempt to unregister unknown client {clientId}", clientId) + .Write(); } if (previousClientCount == 1 && RegisteredClientCount == 0) { diff --git a/TA.ArduinoPowerController.Server/CompositionRoot.cs b/TA.ArduinoPowerController.Server/CompositionRoot.cs new file mode 100644 index 0000000..461feea --- /dev/null +++ b/TA.ArduinoPowerController.Server/CompositionRoot.cs @@ -0,0 +1,126 @@ +// This file is part of the TA.WeatherListener project +// +// Copyright © 2016-2018 Tigra Astronomy, all rights reserved. +// +// File: CompositionRoot.cs Last modified: 2018-04-04@01:29 by Tim Long + +using Ninject; +using Ninject.Activation; +using Ninject.Modules; +using Ninject.Planning.Bindings.Resolvers; +using Ninject.Syntax; +using System.IO; +using System.Reflection; +using TA.ArduinoPowerController.DeviceInterface; +using TA.ArduinoPowerController.Server.Properties; +using TA.Ascom.ReactiveCommunications; +using TA.Utils.Core.Diagnostics; +using TA.Utils.Logging.NLog; + +namespace TA.ArduinoPowerController.Server + { + public static class CompositionRoot + { + static CompositionRoot() + { + var appAssembly = Assembly.GetExecutingAssembly(); + var appPath = appAssembly.Location; + var appDirectory = Path.GetDirectoryName(appPath); + var pluginLocation = Path.Combine(appDirectory, "Plugins"); + Kernel = new StandardKernel(new CoreModule(), new LoggingCompositionModule()); + Kernel.Components + .Remove(); + //Kernel.Components.Add(); + } + + public static IKernel Kernel { get; } + + public static ILog LogService => Kernel.Get(); + private static ScopeObject CurrentScope { get; set; } + + + public static void BeginSessionScope() + { + var log = LogService; + var scope = new ScopeObject(); + log.Info() + .Message("Beginning session scope id={ScopeId}", scope.ScopeId) + .Write(); + CurrentScope = scope; + } + + public static IBindingNamedWithOrOnSyntax InSessionScope(this IBindingInSyntax binding) + { + return binding.InScope(ctx => CurrentScope); + } + } + + internal class ScopeObject + { + private static int scopeId; + + public ScopeObject() + { + ++scopeId; + } + + public int ScopeId => scopeId; + } + + internal class CoreModule : NinjectModule + { + public override void Load() + { + var settingsId = SharedResources.SwitchDriverId; + var lastDot = settingsId.LastIndexOf('.'); + var deviceType = settingsId.Substring(lastDot + 1); + Bind().ToSelf().InSessionScope(); + Bind() + .ToMethod(BuildCommunicationsChannel) + .InSessionScope(); + Bind().ToSelf().InSessionScope(); + Bind().ToSelf().InSingletonScope(); + Bind().ToMethod(CreateTransactionProcessorFactory).InTransientScope(); + } + + private static ITransactionProcessorFactory CreateTransactionProcessorFactory(IContext _) + { + string connectionString = Settings.Default.ConnectionString; + var log = CompositionRoot.Kernel.Get(); + log.Info() + .Message("Creating transaction processor factory with connection string {connectionString}", connectionString) + .Write(); + return new ReactiveTransactionProcessorFactory(connectionString ?? "(not set)"); + } + + private ICommunicationChannel BuildCommunicationsChannel(IContext context) + { + var channelFactory = Kernel.Get(); + var channel = channelFactory.FromConnectionString(Settings.Default.ConnectionString); + return channel; + } + } + + internal class LoggingCompositionModule : NinjectModule + { + public override void Load() + { + Bind().ToMethod(CreateLoggerForClass).InTransientScope(); + Bind().ToSelf().InTransientScope(); + } + + private ILog CreateLoggerForClass(IContext context) + { + var callerName = context.Request.GetType().Name; + return Kernel.Get().WithAmbientProperty("LoggerName", callerName); + } + } + + internal class PowerControllerCompositionModule : NinjectModule + { + public override void Load() + { + Bind().ToSelf().InSingletonScope(); + } + } + } \ No newline at end of file diff --git a/TA.ArduinoPowerController.Server/ServerStatusDisplay.Designer.cs b/TA.ArduinoPowerController.Server/ServerStatusDisplay.Designer.cs index bab52b2..d52089b 100644 --- a/TA.ArduinoPowerController.Server/ServerStatusDisplay.Designer.cs +++ b/TA.ArduinoPowerController.Server/ServerStatusDisplay.Designer.cs @@ -1,3 +1,5 @@ +using TA.WinFormsControls; + namespace TA.ArduinoPowerController.Server { partial class ServerStatusDisplay @@ -32,15 +34,15 @@ private void InitializeComponent() this.registeredClientCount = new System.Windows.Forms.Label(); this.OnlineClients = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); - this.annunciatorPanel1 = new ASCOM.Controls.AnnunciatorPanel(); - this.Relay0Annunciator = new ASCOM.Controls.Annunciator(); - this.Relay1Annunciator = new ASCOM.Controls.Annunciator(); - this.Relay2Annunciator = new ASCOM.Controls.Annunciator(); - this.Relay3Annunciator = new ASCOM.Controls.Annunciator(); - this.Relay4Annunciator = new ASCOM.Controls.Annunciator(); - this.Relay5Annunciator = new ASCOM.Controls.Annunciator(); - this.Relay6Annunciator = new ASCOM.Controls.Annunciator(); - this.Relay7Annunciator = new ASCOM.Controls.Annunciator(); + this.annunciatorPanel1 = new AnnunciatorPanel(); + this.Relay0Annunciator = new Annunciator(); + this.Relay1Annunciator = new Annunciator(); + this.Relay2Annunciator = new Annunciator(); + this.Relay3Annunciator = new Annunciator(); + this.Relay4Annunciator = new Annunciator(); + this.Relay5Annunciator = new Annunciator(); + this.Relay6Annunciator = new Annunciator(); + this.Relay7Annunciator = new Annunciator(); this.SetupCommand = new System.Windows.Forms.Button(); this.annunciatorPanel1.SuspendLayout(); this.SuspendLayout(); @@ -260,16 +262,16 @@ private void InitializeComponent() private System.Windows.Forms.Label registeredClientCount; private System.Windows.Forms.Label OnlineClients; private System.Windows.Forms.Label label3; - private ASCOM.Controls.AnnunciatorPanel annunciatorPanel1; + private AnnunciatorPanel annunciatorPanel1; private System.Windows.Forms.Button SetupCommand; - private ASCOM.Controls.Annunciator Relay0Annunciator; - private ASCOM.Controls.Annunciator Relay1Annunciator; - private ASCOM.Controls.Annunciator Relay2Annunciator; - private ASCOM.Controls.Annunciator Relay3Annunciator; - private ASCOM.Controls.Annunciator Relay4Annunciator; - private ASCOM.Controls.Annunciator Relay5Annunciator; - private ASCOM.Controls.Annunciator Relay6Annunciator; - private ASCOM.Controls.Annunciator Relay7Annunciator; + private Annunciator Relay0Annunciator; + private Annunciator Relay1Annunciator; + private Annunciator Relay2Annunciator; + private Annunciator Relay3Annunciator; + private Annunciator Relay4Annunciator; + private Annunciator Relay5Annunciator; + private Annunciator Relay6Annunciator; + private Annunciator Relay7Annunciator; } } diff --git a/TA.ArduinoPowerController.Server/ServerStatusDisplay.cs b/TA.ArduinoPowerController.Server/ServerStatusDisplay.cs index 2bde675..99827e0 100644 --- a/TA.ArduinoPowerController.Server/ServerStatusDisplay.cs +++ b/TA.ArduinoPowerController.Server/ServerStatusDisplay.cs @@ -12,11 +12,11 @@ using System.Reactive.Linq; using System.Threading; using System.Windows.Forms; -using ASCOM.Controls; using NLog; using TA.ArduinoPowerController.DeviceInterface; using TA.ArduinoPowerController.Server.Properties; using TA.Ascom.ReactiveCommunications.Diagnostics; +using TA.WinFormsControls; namespace TA.ArduinoPowerController.Server { diff --git a/TA.ArduinoPowerController.Server/SharedResources.cs b/TA.ArduinoPowerController.Server/SharedResources.cs index 9adbe79..6df12de 100644 --- a/TA.ArduinoPowerController.Server/SharedResources.cs +++ b/TA.ArduinoPowerController.Server/SharedResources.cs @@ -7,9 +7,11 @@ using System; using System.Windows.Forms; +using Ninject; using NLog; using TA.ArduinoPowerController.DeviceInterface; using TA.ArduinoPowerController.Server.Properties; +using TA.Utils.Core.Diagnostics; namespace TA.ArduinoPowerController.Server { @@ -33,58 +35,47 @@ public static class SharedResources /// public const string SwitchDriverName = "Arduino Power Controller"; - private static readonly ILogger Log; + private static readonly ILog Log = CompositionRoot.Kernel.Get(); static SharedResources() { - Log = LogManager.GetCurrentClassLogger(); - ConnectionManager = CreateConnectionManager(); } /// /// Gets the connection manager. /// /// The connection manager. - public static ClientConnectionManager ConnectionManager { get; } + public static ClientConnectionManager ConnectionManager => CompositionRoot.Kernel.Get(); - private static ClientConnectionManager CreateConnectionManager() - { - Log.Info("Creating ClientConnectionManager"); - return new ClientConnectionManager( - CreateTransactionProcessorFactory()); - } - private static ITransactionProcessorFactory CreateTransactionProcessorFactory() - { - Log.Warn( - $"Creating transaction processor factory with connection string {Settings.Default.ConnectionString}"); - return new ReactiveTransactionProcessorFactory(Settings.Default.ConnectionString ?? "(not set)"); - } public static void DoSetupDialog(Guid clientId) { var oldConnectionString = Settings.Default.ConnectionString; - Log.Info($"SetupDialog requested by client {clientId}"); + Log.Info().Message("SetupDialog requested by client {clientId}", clientId).Write(); using (var dialogForm = new SetupDialogForm()) { var result = dialogForm.ShowDialog(); switch (result) { - case DialogResult.OK: - Log.Info($"SetupDialog successful, saving settings"); - Settings.Default.Save(); - var newConnectionString = Settings.Default.ConnectionString; - if (oldConnectionString != newConnectionString) - { - Log.Warn( - $"Connection string has changed from {oldConnectionString} to {newConnectionString} - replacing the TansactionProcessorFactory"); - ConnectionManager.TransactionProcessorFactory = CreateTransactionProcessorFactory(); - } - break; - default: - Log.Warn("SetupDialog cancelled or failed - reverting to previous settings"); - Settings.Default.Reload(); - break; + case DialogResult.OK: + Log.Info().Message("SetupDialog successful, saving settings").Write(); + Settings.Default.Save(); + var newConnectionString = Settings.Default.ConnectionString; + if (oldConnectionString != newConnectionString) + { + Log.Warn().Message( + "Connection string has changed from {old} to {new} - replacing the TansactionProcessorFactory") + .Property("old", oldConnectionString) + .Property("new", newConnectionString) + .Write(); + ConnectionManager.TransactionProcessorFactory = CompositionRoot.Kernel.Get(); + } + break; + default: + Log.Warn().Message("SetupDialog cancelled or failed - reverting to previous settings").Write(); + Settings.Default.Reload(); + break; } } } diff --git a/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj b/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj index a1fdc14..f14973e 100644 --- a/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj +++ b/TA.ArduinoPowerController.Server/TA.ArduinoPowerController.Server.csproj @@ -97,6 +97,7 @@ CommunicationSettingsControl.cs + @@ -204,7 +205,7 @@ - 6.4.2 + 6.5.2 5.0.1 @@ -212,19 +213,28 @@ all - 2019.1.3 + 2021.3.0 + + + 3.3.4 - 4.6.7 + 4.7.15 - 4.6.7 + 4.7.15 - 6.2.11 + 6.10.8 - 6.2.11 + 6.10.8 + + + 1.3.0 + + + 1.0.1 diff --git a/TA.ArduinoPowerController.Setup/AscomLocalServer.wxs b/TA.ArduinoPowerController.Setup/AscomLocalServer.wxs index 35d3900..fa41f26 100644 --- a/TA.ArduinoPowerController.Setup/AscomLocalServer.wxs +++ b/TA.ArduinoPowerController.Setup/AscomLocalServer.wxs @@ -7,6 +7,10 @@ + + + + + + + + + + + + + + + + + diff --git a/TA.ArduinoPowerController.Setup/PostSharpAspects.wxs b/TA.ArduinoPowerController.Setup/PostSharpAspects.wxs index 630de0e..f68c4a4 100644 --- a/TA.ArduinoPowerController.Setup/PostSharpAspects.wxs +++ b/TA.ArduinoPowerController.Setup/PostSharpAspects.wxs @@ -5,6 +5,7 @@ + + - - - - - - - - - \ No newline at end of file diff --git a/TA.ArduinoPowerController.Setup/RuntimeSupport.wxs b/TA.ArduinoPowerController.Setup/RuntimeSupport.wxs new file mode 100644 index 0000000..50c814d --- /dev/null +++ b/TA.ArduinoPowerController.Setup/RuntimeSupport.wxs @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TA.ArduinoPowerController.Setup/TA.ArduinoPowerController.Setup.wixproj b/TA.ArduinoPowerController.Setup/TA.ArduinoPowerController.Setup.wixproj index afd836f..6698090 100644 --- a/TA.ArduinoPowerController.Setup/TA.ArduinoPowerController.Setup.wixproj +++ b/TA.ArduinoPowerController.Setup/TA.ArduinoPowerController.Setup.wixproj @@ -66,12 +66,17 @@ + + + + + diff --git a/TA.ArduinoPowerController.Setup/TaUtils.wxs b/TA.ArduinoPowerController.Setup/TaUtils.wxs new file mode 100644 index 0000000..4725759 --- /dev/null +++ b/TA.ArduinoPowerController.Setup/TaUtils.wxs @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/TA.ArduinoPowerController.Setup/TaWinformsControls.wxs b/TA.ArduinoPowerController.Setup/TaWinformsControls.wxs new file mode 100644 index 0000000..28f5ea0 --- /dev/null +++ b/TA.ArduinoPowerController.Setup/TaWinformsControls.wxs @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/TA.ArduinoPowerController.SharedCode/GlobalAssemblyInfo.cs b/TA.ArduinoPowerController.SharedCode/GlobalAssemblyInfo.cs index ddf874c..c26bc8d 100644 --- a/TA.ArduinoPowerController.SharedCode/GlobalAssemblyInfo.cs +++ b/TA.ArduinoPowerController.SharedCode/GlobalAssemblyInfo.cs @@ -6,6 +6,7 @@ // File: GlobalAssemblyInfo.cs Last modified: 2017-04-07@17:48 by Tim Long using System.Reflection; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // Global assembly attributes shared by all projects in the solution. @@ -32,4 +33,7 @@ Version information will be injected during the build by GitVersion. [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyFileVersion("1.0.3")] [assembly: AssemblyInformationalVersion("1.0.3")] -*/ \ No newline at end of file +*/ + +// Make internals visible to the unit test assembly. +[assembly:InternalsVisibleTo("TA.ArduinoPowerController.Test")] \ No newline at end of file diff --git a/TA.ArduinoPowerController.Test/ClassDiagram1.cd b/TA.ArduinoPowerController.Test/ClassDiagram1.cd new file mode 100644 index 0000000..7b89419 --- /dev/null +++ b/TA.ArduinoPowerController.Test/ClassDiagram1.cd @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/TA.ArduinoPowerController.Test/Common/OctetTests.cs b/TA.ArduinoPowerController.Test/Common/OctetTests.cs index 75495ad..1978c51 100644 --- a/TA.ArduinoPowerController.Test/Common/OctetTests.cs +++ b/TA.ArduinoPowerController.Test/Common/OctetTests.cs @@ -13,7 +13,6 @@ namespace TA.ArduinoPowerController.Test.Common [Subject(typeof(Octet), "Initialization")] internal class when_an_octet_is_initialized_to_zero { - Establish context; Because of = () => zero = Octet.Zero; It should_have_all_bits_clear = () => diff --git a/TA.ArduinoPowerController.Test/DeviceInterface/WriteRelayTransactionTests.cs b/TA.ArduinoPowerController.Test/DeviceInterface/WriteRelayTransactionTests.cs index deac6b5..7c620d5 100644 --- a/TA.ArduinoPowerController.Test/DeviceInterface/WriteRelayTransactionTests.cs +++ b/TA.ArduinoPowerController.Test/DeviceInterface/WriteRelayTransactionTests.cs @@ -3,12 +3,29 @@ // Copyright © 2016-2019 Tigra Astronomy, all rights reserved. // Licensed under the Tigra MIT license, see http://tigra.mit-license.org/ // -// File: WriteRelayTransactionTests.cs Last modified: 2019-09-08@09:48 by Tim Long +// File: WriteRelayTransactionTests.cs Last modified: 2019-09-09@18:46 by Tim Long +using Machine.Specifications; +using TA.ArduinoPowerController.DeviceInterface; +using TA.ArduinoPowerController.Test.TestContexts; namespace TA.ArduinoPowerController.Test.DeviceInterface { - public class WriteRelayTransactionTests + [Subject(typeof(WriteRelayTransaction), "command")] + internal class when_a_relay_transaction_is_processed : with_fake_communications_channel { + Establish context = () => Context = Builder + .WithFakeResponse(":W00#") + .Build(); + + Because of = () => + { + Transaction = new WriteRelayTransaction(0, false); + Context.Processor.CommitTransaction(Transaction); + Transaction.WaitForCompletionOrTimeout(); + }; + + It should_succeed = () => Transaction.Successful.ShouldBeTrue(); + static WriteRelayTransaction Transaction; } } \ No newline at end of file diff --git a/TA.ArduinoPowerController.Test/Fakes/FakeCommunicationChannel.cs b/TA.ArduinoPowerController.Test/Fakes/FakeCommunicationChannel.cs index ba6de17..1856b85 100644 --- a/TA.ArduinoPowerController.Test/Fakes/FakeCommunicationChannel.cs +++ b/TA.ArduinoPowerController.Test/Fakes/FakeCommunicationChannel.cs @@ -3,7 +3,6 @@ using System.Reactive.Linq; using System.Reactive.Subjects; -using NLog.Fluent; using TA.Ascom.ReactiveCommunications; namespace TA.NexDome.Specifications.Fakes @@ -11,6 +10,7 @@ namespace TA.NexDome.Specifications.Fakes using System; using System.Diagnostics.Contracts; using System.Text; + using TA.Utils.Core.Diagnostics; /// /// A fake communication channel that logs any sent data in and @@ -19,27 +19,30 @@ namespace TA.NexDome.Specifications.Fakes /// called. /// public class FakeCommunicationChannel : ICommunicationChannel - { + { readonly IObservable receivedCharacters; readonly Subject receiveChannelSubject = new Subject(); readonly StringBuilder sendLog; + readonly ILog Log = new TA.Utils.Logging.NLog.LoggingService(); + /// /// Dependency injection constructor. /// Initializes a new instance of the class. /// + /// /// Implementation of the injected dependency. - public FakeCommunicationChannel(string fakeResponse) - { + public FakeCommunicationChannel(DeviceEndpoint endpoint, string fakeResponse) + { Contract.Requires(fakeResponse != null); - Endpoint = new InvalidEndpoint(); + Endpoint = endpoint; Response = fakeResponse; receivedCharacters = fakeResponse.ToCharArray().ToObservable(); sendLog = new StringBuilder(); IsOpen = false; - } + } /// /// Gets the send log. @@ -60,33 +63,41 @@ public FakeCommunicationChannel(string fakeResponse) public int TimesOpened { get; set; } public void Dispose() - { + { TimesDisposed++; - } + } public void Open() - { + { TimesOpened++; IsOpen = true; - } + } public void Close() - { + { TimesClosed++; IsOpen = false; - } + } public void Send(string txData) - { + { Log.Info().Message($"Send: {txData}").Property(nameof(txData), txData).Write(); sendLog.Append(txData); foreach (char c in Response) receiveChannelSubject.OnNext(c); - } + } public IObservable ObservableReceivedCharacters => receiveChannelSubject.AsObservable(); public bool IsOpen { get; set; } public DeviceEndpoint Endpoint { get; } + + public static ICommunicationChannel FromEndpoint(DeviceEndpoint endpoint) + { + if (!(endpoint is FakeEndpoint)) + throw new ArgumentException($"Expected a FakeEndpoint, got a {endpoint.GetType().Name}"); + var fake = endpoint as FakeEndpoint; + return new FakeCommunicationChannel(endpoint, fake.FakeResponse); } - } \ No newline at end of file + } +} \ No newline at end of file diff --git a/TA.ArduinoPowerController.Test/Fakes/FakeEndpoint.cs b/TA.ArduinoPowerController.Test/Fakes/FakeEndpoint.cs index 5d841ad..acdcf40 100644 --- a/TA.ArduinoPowerController.Test/Fakes/FakeEndpoint.cs +++ b/TA.ArduinoPowerController.Test/Fakes/FakeEndpoint.cs @@ -1,15 +1,41 @@ // This file is part of the TA.NexDome.AscomServer project // Copyright © 2019-2019 Tigra Astronomy, all rights reserved. +using System; +using System.Text.RegularExpressions; + namespace TA.NexDome.Specifications.Fakes { using TA.Ascom.ReactiveCommunications; class FakeEndpoint : DeviceEndpoint { + public string FakeResponse { get; } + + public FakeEndpoint(string fakeResponse = null) + { + this.FakeResponse = fakeResponse; + } + public override string ToString() { return "fake device"; } + + public static bool IsConnectionStringValid(string connectionString) => + connectionString.StartsWith("Fake", StringComparison.InvariantCultureIgnoreCase); + + public static DeviceEndpoint FromConnectionString(string connectionString) + { + const string endpointParsePattern = "^Fake(:(?.*))?$"; + var parser = new Regex(endpointParsePattern, + RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture | + RegexOptions.IgnoreCase | RegexOptions.Singleline); + var match = parser.Match(connectionString); + if (!match.Success) + throw new ArgumentException("unable to parse the connection string"); + var fakeResponse = match.Groups["Response"].Value; + return new FakeEndpoint(fakeResponse); + } } } \ No newline at end of file diff --git a/TA.ArduinoPowerController.Test/Fakes/TestableDeviceTransaction.cs b/TA.ArduinoPowerController.Test/Fakes/TestableDeviceTransaction.cs index 17209aa..e0c85d3 100644 --- a/TA.ArduinoPowerController.Test/Fakes/TestableDeviceTransaction.cs +++ b/TA.ArduinoPowerController.Test/Fakes/TestableDeviceTransaction.cs @@ -6,6 +6,7 @@ namespace TA.NexDome.Specifications.Fakes using System; using TA.Ascom.ReactiveCommunications; + using TA.Utils.Core; class TestableDeviceTransaction : DeviceTransaction { @@ -24,7 +25,7 @@ public override void ObserveResponse(IObservable source) void SetResponse(string response) { - Response = new Maybe(response); + Response = Maybe.From(response); } internal void SignalCompletion(string fakeResponse) diff --git a/TA.ArduinoPowerController.Test/Fakes/TransactionExtensions.cs b/TA.ArduinoPowerController.Test/Fakes/TransactionExtensions.cs index abf1953..145f0ca 100644 --- a/TA.ArduinoPowerController.Test/Fakes/TransactionExtensions.cs +++ b/TA.ArduinoPowerController.Test/Fakes/TransactionExtensions.cs @@ -9,6 +9,7 @@ namespace TA.NexDome.Specifications.Fakes using JetBrains.Annotations; using TA.Ascom.ReactiveCommunications; + using TA.Utils.Core; /// /// Extension methods for manipulating non-public members of transaction classes. @@ -23,7 +24,7 @@ static class TransactionExtensions /// public static void SetResponse(this DeviceTransaction transaction, [CanBeNull] string response) { - var maybeResponse = response == null ? Maybe.Empty : new Maybe(response); + var maybeResponse = Maybe.From(response); var transactionType = typeof(DeviceTransaction); var responseProperty = transactionType.GetProperty("Response"); responseProperty.SetValue( diff --git a/TA.ArduinoPowerController.Test/LogSetup.cs b/TA.ArduinoPowerController.Test/LogSetup.cs new file mode 100644 index 0000000..d28990a --- /dev/null +++ b/TA.ArduinoPowerController.Test/LogSetup.cs @@ -0,0 +1,35 @@ +using JetBrains.Annotations; +using Machine.Specifications; +using NLog; +using NLog.Config; +using NLog.Targets; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TA.Utils.Core.Diagnostics; + +namespace TA.ArduinoPowerController.Test + { + [UsedImplicitly] + public class LogSetup : IAssemblyContext + { + static ILog log; + + public void OnAssemblyStart() + { + var configuration = new LoggingConfiguration(); + var unitTestRunnerTarget = new TraceTarget(); + unitTestRunnerTarget.RawWrite = true; + configuration.AddTarget("Unit test runner", unitTestRunnerTarget); + var logEverything = new LoggingRule("*", LogLevel.Debug, unitTestRunnerTarget); + configuration.LoggingRules.Add(logEverything); + LogManager.Configuration = configuration; + log = new TA.Utils.Logging.NLog.LoggingService(); + log.Info().Message("Logging initialized").Write(); + } + + public void OnAssemblyComplete() { } + } + } diff --git a/TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj b/TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj index 8c91d41..f65c1f5 100644 --- a/TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj +++ b/TA.ArduinoPowerController.Test/TA.ArduinoPowerController.Test.csproj @@ -50,7 +50,11 @@ + + + + @@ -60,7 +64,10 @@ 1.0.0 - 1.2.2 + 1.4.0 + + + 1.3.0 @@ -73,6 +80,8 @@ TA.ArduinoPowerController.DeviceInterface - + + + \ No newline at end of file diff --git a/TA.ArduinoPowerController.Test/TestContexts/CommunicationsChannelContext.cs b/TA.ArduinoPowerController.Test/TestContexts/CommunicationsChannelContext.cs new file mode 100644 index 0000000..79afb5d --- /dev/null +++ b/TA.ArduinoPowerController.Test/TestContexts/CommunicationsChannelContext.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TA.Ascom.ReactiveCommunications; +using TA.NexDome.Specifications.Fakes; + +namespace TA.ArduinoPowerController.Test.TestContexts + { + internal sealed class CommunicationsChannelContext + { + public ICommunicationChannel Channel { get; set; } + + public FakeCommunicationChannel FakeChannel => Channel as FakeCommunicationChannel; + + public DeviceEndpoint Endpoint => Channel.Endpoint; + + public ReactiveTransactionProcessor Processor { get; set; } + + public ChannelFactory Factory { get; set; } + + public TransactionObserver Observer { get; set; } + } + } diff --git a/TA.ArduinoPowerController.Test/TestContexts/CommunicationsChannelContextBuilder.cs b/TA.ArduinoPowerController.Test/TestContexts/CommunicationsChannelContextBuilder.cs new file mode 100644 index 0000000..68bf626 --- /dev/null +++ b/TA.ArduinoPowerController.Test/TestContexts/CommunicationsChannelContextBuilder.cs @@ -0,0 +1,32 @@ +using TA.Ascom.ReactiveCommunications; +using TA.NexDome.Specifications.Fakes; + +namespace TA.ArduinoPowerController.Test.TestContexts + { + class CommunicationsChannelContextBuilder + { + CommunicationsChannelContext context = new CommunicationsChannelContext(); + string connectionString = "Fake"; + string fakeResponse = string.Empty; + + internal CommunicationsChannelContextBuilder WithFakeResponse(string response) + { + connectionString = $"Fake:{response}"; + return this; + } + + internal CommunicationsChannelContext Build() + { + var logService = new TA.Utils.Logging.NLog.LoggingService(); + context.Factory = new ChannelFactory(logService); + context.Factory.RegisterChannelType(FakeEndpoint.IsConnectionStringValid, FakeEndpoint.FromConnectionString, FakeCommunicationChannel.FromEndpoint); + context.Channel = context.Factory.FromConnectionString(connectionString); + context.Observer = new TransactionObserver(context.Channel); + var processor = new ReactiveTransactionProcessor(); + processor.SubscribeTransactionObserver(context.Observer); + context.Processor = processor; + context.Channel.Open(); + return context; + } + } + } diff --git a/TA.ArduinoPowerController.Test/TestContexts/with_fake_communications_channel.cs b/TA.ArduinoPowerController.Test/TestContexts/with_fake_communications_channel.cs new file mode 100644 index 0000000..f57cbee --- /dev/null +++ b/TA.ArduinoPowerController.Test/TestContexts/with_fake_communications_channel.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Machine.Specifications; + +namespace TA.ArduinoPowerController.Test.TestContexts + { + internal class with_fake_communications_channel + { + Establish context = () => + { + Builder = new CommunicationsChannelContextBuilder(); + }; + + Cleanup after = () => + { + Context.Processor.Dispose(); + Context.Channel?.Close(); + Context.Channel?.Dispose(); + Context = null; + Builder = null; + }; + + public static CommunicationsChannelContextBuilder Builder { get; set; } + public static CommunicationsChannelContext Context { get; set; } + } + } diff --git a/TA.PostSharp.Aspects/TA.PostSharp.Aspects.csproj b/TA.PostSharp.Aspects/TA.PostSharp.Aspects.csproj index f9f7e63..0b32e53 100644 --- a/TA.PostSharp.Aspects/TA.PostSharp.Aspects.csproj +++ b/TA.PostSharp.Aspects/TA.PostSharp.Aspects.csproj @@ -63,7 +63,7 @@ - 6.4.2 + 6.5.2 5.0.1 @@ -71,10 +71,10 @@ all - 4.6.7 + 4.7.15 - 6.2.11 + 6.10.8 From b0cc87ae1195be998979fb0bc1ed2bab48f4b3b9 Mon Sep 17 00:00:00 2001 From: Tim Long Date: Sat, 26 Mar 2022 22:30:41 +0000 Subject: [PATCH 08/13] Fixed up issues with obsolete GitVersionTask Validate switch names on startup and set them to defaults if invalid --- .../TA.ArduinoPowerController.Common.csproj | 12 +++++++ .../gitversion.json | 35 +++++++++++++++++++ .../packages.config | 4 +++ ...uinoPowerController.DeviceInterface.csproj | 8 ++--- .../AscomSwitch/Switch.cs | 2 +- .../CompositionRoot.cs | 1 + .../LocalServer.cs | 32 +++++++++++++++++ .../Properties/Settings.Designer.cs | 14 +++++++- .../Properties/Settings.settings | 3 ++ .../TA.ArduinoPowerController.Server.csproj | 8 ++--- TA.ArduinoPowerController.Server/app.config | 3 ++ .../TA.ArduinoPowerController.Setup.wixproj | 1 - .../TA.PostSharp.Aspects.csproj | 4 +-- 13 files changed, 110 insertions(+), 17 deletions(-) create mode 100644 TA.ArduinoPowerController.Common/gitversion.json create mode 100644 TA.ArduinoPowerController.Common/packages.config diff --git a/TA.ArduinoPowerController.Common/TA.ArduinoPowerController.Common.csproj b/TA.ArduinoPowerController.Common/TA.ArduinoPowerController.Common.csproj index 803ff79..86877c7 100644 --- a/TA.ArduinoPowerController.Common/TA.ArduinoPowerController.Common.csproj +++ b/TA.ArduinoPowerController.Common/TA.ArduinoPowerController.Common.csproj @@ -1,5 +1,6 @@  + Debug @@ -12,6 +13,8 @@ v4.7.2 512 true + + true @@ -47,8 +50,17 @@ + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/TA.ArduinoPowerController.Common/gitversion.json b/TA.ArduinoPowerController.Common/gitversion.json new file mode 100644 index 0000000..d5619fd --- /dev/null +++ b/TA.ArduinoPowerController.Common/gitversion.json @@ -0,0 +1,35 @@ +{ + "Major": 1, + "Minor": 1, + "Patch": 0, + "PreReleaseTag": "embedded-driver.1", + "PreReleaseTagWithDash": "-embedded-driver.1", + "PreReleaseLabel": "embedded-driver", + "PreReleaseLabelWithDash": "-embedded-driver", + "PreReleaseNumber": 1, + "WeightedPreReleaseNumber": 30001, + "BuildMetaData": 16, + "BuildMetaDataPadded": "0016", + "FullBuildMetaData": "16.Branch.feature-embedded-driver.Sha.6ba91620b068970f057fb5414c997bdc1b186c5c", + "MajorMinorPatch": "1.1.0", + "SemVer": "1.1.0-embedded-driver.1", + "LegacySemVer": "1.1.0-embedded-driver1", + "LegacySemVerPadded": "1.1.0-embedded-driver0001", + "AssemblySemVer": "1.1.0.0", + "AssemblySemFileVer": "1.1.0.0", + "FullSemVer": "1.1.0-embedded-driver.1+16", + "InformationalVersion": "1.1.0-embedded-driver.1+16.Branch.feature-embedded-driver.Sha.6ba91620b068970f057fb5414c997bdc1b186c5c", + "BranchName": "feature/embedded-driver", + "EscapedBranchName": "feature-embedded-driver", + "Sha": "6ba91620b068970f057fb5414c997bdc1b186c5c", + "ShortSha": "6ba9162", + "NuGetVersionV2": "1.1.0-embedded-driver0001", + "NuGetVersion": "1.1.0-embedded-driver0001", + "NuGetPreReleaseTagV2": "embedded-driver0001", + "NuGetPreReleaseTag": "embedded-driver0001", + "VersionSourceSha": "887973d02237bcca750293197a2b4913e5b2f26d", + "CommitsSinceVersionSource": 16, + "CommitsSinceVersionSourcePadded": "0016", + "UncommittedChanges": 4, + "CommitDate": "2022-03-26" +} \ No newline at end of file diff --git a/TA.ArduinoPowerController.Common/packages.config b/TA.ArduinoPowerController.Common/packages.config new file mode 100644 index 0000000..f30bd58 --- /dev/null +++ b/TA.ArduinoPowerController.Common/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj b/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj index df3ee55..28fbdfa 100644 --- a/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj +++ b/TA.ArduinoPowerController.DeviceInterface/TA.ArduinoPowerController.DeviceInterface.csproj @@ -1,6 +1,5 @@  - Debug @@ -70,8 +69,8 @@ - - 5.0.1 + + 5.9.0 runtime; build; native; contentfiles; analyzers; buildtransitive all @@ -97,10 +96,7 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - diff --git a/TA.ArduinoPowerController.Setup/JetBrainsAnnotations.wxs b/TA.ArduinoPowerController.Setup/JetBrainsAnnotations.wxs new file mode 100644 index 0000000..934b987 --- /dev/null +++ b/TA.ArduinoPowerController.Setup/JetBrainsAnnotations.wxs @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/TA.ArduinoPowerController.Setup/PostSharp.wxs b/TA.ArduinoPowerController.Setup/PostSharp.wxs index 80a5a50..704fe0a 100644 --- a/TA.ArduinoPowerController.Setup/PostSharp.wxs +++ b/TA.ArduinoPowerController.Setup/PostSharp.wxs @@ -10,9 +10,15 @@ KeyPath="yes" /> - + + + diff --git a/TA.ArduinoPowerController.Setup/Product.wxs b/TA.ArduinoPowerController.Setup/Product.wxs index a88d57b..0f70ad9 100644 --- a/TA.ArduinoPowerController.Setup/Product.wxs +++ b/TA.ArduinoPowerController.Setup/Product.wxs @@ -1,5 +1,7 @@ - + + - + + + @@ -20,5 +29,14 @@ NOT VersionNT64 + + + + + = 601)]]> + + = 601)]]> + + diff --git a/TA.ArduinoPowerController.Setup/RuntimeSupport.wxs b/TA.ArduinoPowerController.Setup/RuntimeSupport.wxs index 50c814d..def1294 100644 --- a/TA.ArduinoPowerController.Setup/RuntimeSupport.wxs +++ b/TA.ArduinoPowerController.Setup/RuntimeSupport.wxs @@ -3,6 +3,7 @@ + + Debug @@ -66,6 +67,7 @@ + @@ -88,6 +90,7 @@ + aSfEcJO2<8fW5xhT}`8f#CO z>K2rC1J=$RKE5qsp$*YdH4!oCzJYE!8!M?=EmkQdYK2HG5-5dcDsywKlY_5T>mria zNEMD!g_A&Rt+VndENRwSdYA}Q#-_3#etxA;vG02=E}cn8EDjIP$<1$3X*?Yq11F|8 zu3Z2A?xWWazuUY2o&L<>x$BRQ@7`S6IzKSAy0E!>?9{cLb9c^Nd35#W_t)?K2!QQg zez1J(TvNxGn@@z5o!83dg`IQvIC|Y(+rF}R?A+@1rLD6!fw9wCB?OkAXoS3*x16<^vcliY+HL@enFL`m77Rr5g3{PR*g@u17H*L$3|z?(9SJw zvp+ccr#rgF21n*6=Qn2-kM|AEv~&!YSGUpElcBo6E&2u+T6D|nI=lj+P0Y1s63h71 z!jkHC&Zmq!=f{4t)if9X|5SQK6Z+rOwLR z(=RzOEjTD#sn8O%#3H#$spIKoVk|TH*BrdGZKfy1B~q&OC`5z>gy433QUhN&S*j7YtU!k1A~+HVuI-)CSrX)E672M zz<@4d1cVB7$@%!r>(BRtVEM*^PU}9!d61J*3>6p|O$FoX_3$(7 zBH&DqnNREyP=qdW#y>Wm%VKic7wwlSKcLGycQE*uO945%!58nu{%`O0KD~YOF)=Ym zt#Z~{xOw`7ojiN>>aB;jA3QyK;r77rLRa@}clT0z^I}WoQfu+C#==vjc_$;{*KK@e zl)m$_plNYTue7LL(o!euE_d!s$r<*)^uYJ0=hm;^>VEsh>eD6LS3}TVjvuSte=GBQ z72|b5p#Z(k8f$h;HFILC0b7@LZ=dGS;Kt~v@`%V(-#`}&8!c3qxk4pTE2SE9GdZ*u z=p~cdloT~2#ODb`)*`9BSY~f*rZN-h+`S|2-23kM*2&jz_ix{RC=y%y`o}ps2W)Pg zzIOc{7D@|i@08TiYd3$oe&^S_k6+z=^5V{u7dIb1yL9U*B-h%>E7h%o_MV{$S!JWM zo5xSz0KhI?{}xgV!S3aUr!U-F+BnzRJw7zCx^?=->5C6Ruhp$9bE{`37q;m~`j?Mi zfEvSWz}U$Pch6jTeDT%~*X}<9$!>oOn7zFF?Th$ST8*u4{HuY)wnX@zl# zSrO4G0l_g~SY%{!baZNLbb5SjW@dVEWkqvm=kV0j%F4=#<>l?ArLBpH#fpk1Cuct+ zGkIoi#o*||?Be$H(iTKj=fG6o$lUPw()9f1+``uM+_983T!d09t&K-gR%uCfTWw2!L&q?8C&*}9|3pjgSY7)-VpefcbxUn) ze?!|4CQr>S4~xkNi%Nt1ijB`^01HnH3W*B{hz#%#hx`J)0s|rtdwK*oIeJ=H+R5Y^ zK;@gm>{;~$Fhl>3|KlqjV?4|VVAKL&M-LkbOof&f*1p~WNeQV5@yQCghVGez z7aR;TWg-l1a!SVUzy0&=oA;1k%=h$nXAr=+fUPTNsmrio;BUESy|b8MiQPTVAjF*y zWEZ*stvyCB-jM;ocwEuRMvh?&V{i8NUtwiDI0eNbc3-~!yd}|#{6H7JXT;)GPPA+_ z;{e8-*0lo}Ks5+p>?RJl9$E)djE{N88jn>T8wqUG(z;JA1^R{lAkUXkfK7ZQ832Z( zK|rsNy7ZdaA)?`7^H`xvr%M}!P`w;1o$K@Pq;y$g=;&FvAv`D1dQi2tOO4i!jDj@!ZmHMV^wBM@tz#4{pIh zH7@u_&)ryD+}5aFlnN(H3-|tksS8(b-@5nY%Jm1+vztAAGu>VD9Zd_(Rda2nD@}!) zWw|>ENyqF0Cl!8^QvWeg#DF-bT~uE!?<}+GN{j08IesPh`(GX3yw-gB)%y1vF3%?{ z-!$2NtaAOW#OGzK=XFcnSrf%M6U~;Xc0pu0VCB^ArWt<7LM%( zMy9H)T$Prtce9@mrE;K;*xUX5_3bs*>#|>@Pvqnq^QW0*x1bY`0Uiw!h-zjy4uc>;f2-JQ!6Vc zSJqB1ubrA(Jl@$enp05OH#9vtySA{hJu;=^9H{V}V+!b%Gizhi+@?tFG@ZscM5))^|5| zj&$@*w)ajpbqqImj@CB!7nU`}C+FKc``bGD`2@s7#%4fohef3Zg~a>#Mfm%(%V5F5 z(NJUl{^8!jkQ7!!6Y|2Dme7Dks+wyJivHI65Qe(!6EL8%tofB0!vG4 zUtj;Eq?GvhM3qV-mdMQnB7qS9+O$M0NG>?!7h;K2`QqinjZ z{Uc}*x2PpYp38te?8G3uHRGKgZ`}IIjb*10_h0P+X&@GJPJ6Mh40Ehvm%%tG2GO?9 zZcwB%jhLS^TERXCXu0KzIk%M2CKwh#tW;>Ji#)A$6r)8K#@GLi?x81Wk<$r401N@+ z76~b|2RC$(6Nli05OV6GrAlOID<-1?yj%ME16lxDwCE#7l8j8?Aqf5pWae=SMMZBK!9k zEk;oWhA!o4Dl*C=V_<*>J1fZH=c6IO$glyNK%lSI-%r8P7($RBY!Fna9)@DW8PLM0 z%iXNO2uEEq!%D>baLVXW#ECP*eQ}!*vjZ?V-}u?tKm&2c&LDpH{k!j;d3uIu)Xq|g z4HnI_yVq~sd2;jiJcToT?V zPHUG`)kr%ktva#;I=m*&c|QEf;l&&E`{!1_-FAL8X7{qe?tPWpN6;(5{id~U*G#c{ zM0LtoJ1es2vvO?l_NfmGt&57Rii%G1_I1m+emz9{1n~;!$k0U#;s;si5t9NpGZgXknKvq}Z*=revRmib zcdG|M7hr5?YIR^@xp#D-V_>?vr56Bm^a>WM?d;qFqm%QX!}7`+^GX^r^Q$v*D>HH` z(zDCKFlYDRh?op?i^`fxDq3=j>XI`{({d^@@~R-$sv3HmJIC64r_ff^bs^&)9B(eQ zG!d$;?Y&|Wa^e#6qvNxK!;^jdqP%?>xBUFV(E9p@dU^)Bx%oQSyINa0Smzh&JL^X@ge zz!JOE^p^`@P(ONraabZm0X$e@IjYemG%PJ(5~LVv-hx{kuJpIgBZfoqa4HS-0=nM6 ze2bXP!>?vAS`uNDL~9se(crtR+8|FxT^Mbm%wKM!Cz$a7gY#5l3_C#A7tR2|wG1KL zsYQxuE8it_!6}KCK}X3!fx&=UN)l}F_G2LX5Fp05N#HaIpQo;#i+W@9`T}6c(knOI z5yjL+%Z75sC-EMkrLAPtg;7^O;J}dAM+cvlzQc9ddw=lR&?--#0iQ&T;VzKDCaR&B ztJ2?^!R7VD!qU%iixC0=Dlr@dC__xeT)loaE?}d`4WYu#{h3TK%E0t}&Hy4lNt5$Q z+6%h06-hmc4xH;UWyTe-W2R&Hf?>#@OA3tq-9D!JueP=Uoz__O*WOYWUJZqxcHqy+STl82t zG`W`qte*8{Hr&9xOV#o z0POm`XK1h9`T5+{Z%8GIT-(07dGaRI73c+wEp1#Fo;=pkH#fC# za(;DpZR_&(8A!2*0NAPXch|Qs4^6Cv$7Y*|EP^A`rWa4FZ(o8$TUa|gIls;QZ1LHp zV;9#?TswC1#<5d3K(g)KyJxRH!M-lu_#QH@YhbRVvbCtRv8=SYt!1cxaBg^bp}%jY zvwgIrxG^QUFfk!7F)=?Sqc|nKIH#bxwy~$Te|mcM*wX5Wh2<>>FVJg#c?%@#?43-_ zELQ0pWNMq(#GJNnCa{L5R-nClN9NE1R|uLqhb!tkTe?RP18I%iZ#qLxl~%VyEkPc& z_D=MS%!6TFLo;>l0|1!P+T|+~sj*m>np;s&(Og#7Sy0vlKG8)ih%g8*3IMR&!dkS+ z>BT@4)Kyem7PjV>HkH?Q)iw{*wG3h}P-ZCBTDcxJmiY$8B&V08W|l=UfF*hQM0k3K z`S^qYU~mA;%PYvm#Tx*#va|=lR7wl>Bc&3RSR^ws7JPGv{q7gxis;2VGG8%g@(T<* zbm%Y?m_T5z(^-0Z`;r2)u&@$IB;c38+*~GCLUob+;@m7VEC17P|Mlzhw=W^vR;j8SKwDJO2B)zgatPJz99g+J!m?ed_P z{>&i(j6)ja7kKuLJG;mnyrk8D7A{)TU`SE``y!?;-@-7Q55Cw0V>fXS!+4T03US0@ zs5v;PNB{#1&?9w4Eu#Y$6G+G@&pWS^$n|*xPVg;~2>1-uV>r!VI1eSUBfg84hI0{d zivbKRKj9Yvnc;a$eiIQC8LDAZ|JAS+Zy#5FaI^>SEWOdR3C5Lwo*yk+`1J(({OQtc z6vNm^1Ljcx<6~|(0HD9O5KcVffW-{(Ac~-pE7m`K3Nc#Xfq=&#p(h`!q_JdF57JP; z8&=Pls`FjUgC$P=p&prx%8Pz>RPKN9!Zb8FzgU%U3e(ZOFKcTgzo z`uiuYT)lng?zfk&-5;M?ZSS1u?3in7nr*F`Zz)=C%3ZI>+KP%pD|MWfS-6iRalFS%486N6qRV!2G`?Ch&n+smXj zDvhgL=^~NYDb=nXUeSGnb8@w_O6O+p6mVkaim5;=6j_NRHe#u*z}!l$aj&Rod+^}f zm6hWcE{cH;8J$*ZR?-MesuNh|OPG7DmB_4wtP zrBfMsH9kQJIYkWzJ2EA$#ZuQjLmFj=GP94t*mTbz*f|t5?%Pv z#Kz?O&dkzj2)K>y%TQ(;Y+u>ZLlA+o|xH~oY|P3JHD`VYIXJO%JP|o zxt-ymg~o>d!h-tr^wOl1g0zg1>DFdad}hE;LOnEGDKK&*9bHgxYgP-2E7I0)ipQ`bOC9=SXEp1&*L7wU)WoF}Ksm)G<^o+w zX+@wExRsSxg*G9jAS5D1sy#g(n))$Msjby2Zd zDH$agm6=x=m5}8d6yxk3;OY?o)kO}H!JVAE?Co4^tQ~b)8vqO<3=EUY)Dp2mD3BN( zHRHa*d>GI&Jb%diKfeCQe|`;mef5v8`BR7hn5(OMLPAnpT%x6=wOArIH8U3o#WK0d zOdvjT)byy482}~_N}oRc^@kr`y?puc<(u~}-+Vy(>McYSd*;(?0PNj|SMNW)La_f4 zU96Y7$=qR~kQN7xN-mHtw+o2XF9s4Iyz=LTW4EpW?G9EnsYa*GLI+4uQ>-# zX#>V(K_i0DE>T9Sq^?5To@d`4pE>BYb<6v^Uv)2EN`L!F`*uh5yhFZMwT8j z6K|VcnRLfYv1zPXF|{03*|s~mH3tUQMnqIZ$E5fMxM{7_<}#(ZR3?;4%%q@~&{QT9 zYtmBkPM)~b*)b-Q+DfGMVhIG6typGf=M>n{J9)%Ndi01)BGEp5`t#wVlGwPcf}+Oc zl#=S&?#%3Rh039*xN+l2=zI^+qbJswxJF8n)rk75R&Th`GoCbIR zn6sB2oV)Vq+?6NCPu*NTc5!fgJt3`BZROz=5Ia7*xpCs^*6Euon->?>cEO(Y?JGOG zx8aani|f09*~W=0&}xunMHOvnIhAcaQ@z8BP-B>UZR-;1p~m1q%`R)C$Dcq2p+q*w0LTCWTm-zsGy`SJ-akHy)Zeg5G2dWDK9Fm zYijKq7@nD3I5xMqIlHhqKE2*QJYQAUm7Y@$R)J6bV+#nNw@Pc;==t=(SX=Knv=?LB z&`d-7U`0chlXr-bSYs-)NXRUzZ0c_88gA$us&45;3 zRT>nQ1c4P1lL3asCFMbKkpe>-pPY}aa<#)zQ>Cq=Z%SqGhAlLwNmz{Of;w#UAK;nO3WHadC}}jgN_r*J-WIMRF5U zp+G2+E3~F&Vk2Xrk+JBTZ%o_Udyj4Iwsnk5&aAz7{c-=}KN-W`a(avVwid^*1K<1b znw<`#QyT1k4J@B;v4S!!o?Ee*hXi$z@j<6eBrXLyXUfUQ`c4VgE4P;qSSM;D6;OLE2s`rGJvjKN8A z83N1@TJ(eta*h!!iI!sOQihV`6yq(yJPbAm0HbG0;W*GDLrH=P6Gq%5Wi_qnfJ@Obo-?TZ(RPd}+YUC=!1k?q&md@OVOkmLWYpY1uh^pu%o z$5^!@uo#hBciFqN1O(KEg_TA|qyz-I=`7VEnN%nNy~Jh`a}%-9L@F^?%fuFPsf|Kr zcj5d!Yb!5-xdmJza}tVe6>8_^&e8SbJ58!%rq{O*k4_(3J$?~1 z0>i+S(--c8VM`kq`bSs10^(|$`DKZC+a2x&kMRLC?V<-L_6$ zKem14_|DbSyLT>JdUy#!@cjKVr*ExqoFAQBX>1+H&aX;ND@x%!IW0dmqp+mBp{0Fb zcx--RdUbmC*yQy3==gH)zzk#-=!F*0Dz0h?j7W-4D=4gB&+P@Y*!RGo!v>}x&g$9* zQuE3+cJ3-0*RuK!5Uajp5aRDj~<(-WwVV zdX7B;R&O~ghfB8|q@-QC~UHxvMKarU;eb+NT^vbJ&{`K6F+;XoHK23N?T#xxSK z($qwB_!|>WjnVhOzWMv#|NhlK{_&5$|NU!vBK?sgrlzJEjmFv8B`z)@Bsko{!WK%) z#1wir>RuM{hfN|5Kj8)>lG=qLPHyTDHe^f?}Y-i_{=CnP@&kMOwSQG#|9>VuoWq6#hmEE zh$3i_haJ?Q7`(w2rlP2Tuc2M*<r@*-Ok7vK`g@+|874|Zzbwx$vg$p-t-h6oF%Dw5S^^Vqw_U4)P z`o-q5`NsU^hMdj9v=bp=OYD(R{*#K3L1A2*X>p@TOR20q(W~2|XWQ}Cch)~Y*X;jd z^~ZJF=L51g^|loTBaxZ0RA{EOv+)p^s?1E)rl#t1ySFWLu38J%lCtL9{JNsjR=L_)u61ec z8eLf4u5aqMu=KIE_3`wM{PUmx=i0`pk@1DAHy(TWMz0^cc>dyp%h$fWbmP0rx1L_S z@!k1rk9W@90j>ZcSD!G2g`<;4@W|BK`u4?>=WZQ8bq#6>YHa(=O>kxP_$5dvKPOr6ejW%_T^bWH}TFkDT*gSRl#P0Rur?0GSUjWqr39YTWu}BSd0%5dz zYvrk|=DyJ|dB+?4#qefv)WQYG|*hxGZ$R zCtwUokc;0bxAAOiWAw zFgG`k#KdH8Z+{D&4b+>7iNIVa#hk`Wewmw^N@8PE{rtieDqE%6!NWT;Ew=)H1WYa* zd-C(EpI?9Y0`jXj&^I6hSOpRG5iMi_S{8s_ zOqOwXb1;DIv+HUI*jK^!U%Yt-C)B-o1Ec|6boYl|z>x?;fU!(zVJ%`br#$N0JCV9uMF`OU5W;f{a#*U8z7y?YF z&vHh)pa3n6HOx@J$5db#P>dEed~je4TD)W7=IF)v!HxUNF8F{9G0G?=dCH- ziO!a(mb#h7ve|}$g}UsOii~54@f(hQQ!1Y+S-_YmvQv;#Z&F`w-kxpW8dSRAc=mz) z(_hsupXq+PYyW0S_o7n!zRcx)f$Q@aw<}hf9f4%WRJmrN8W&r3+Bi1*c-IF9mxP6+ z`1`xtFnWp2%*{bBGqJgu)XY?BE>MZhb*04(DarYkmd;I0U5_9CY-}t~PAzfs2=n!i zh>S_Ivhxv0ZFIK2I_m(9g^yD00)Q13HG6tRtF^95jZvk zJ-L4T{Pg_sf#HSj{^_p1>F&Y#!SNM9aenm-JNLM8VP^Tv?8@1-?W@O5vKu|%J7@2l zJOA*?)u&glaSXfi_}s+@TRYdL=eFBB#|nz-lTr$zV>6>-GGgMg;u3PQ^D4{h+nc+G zx`(F+Cl-b#m-|NNah#A`QHhxV7(6+v2wl*twxzGUw!N4=|EU$ws%h;5!_dO3TY7=3 z^nyyi@B~XIZ_l7;U@W7ss<4vXy8*QdfI)<17F35uq^NYx9zGG^Q*L2xW^N^D9Uh$y zN}-L2$%sqJ1JZyl6aZ;p8;TWb2mE7ma`cY~PfbfL&PXp!O=s8klF|xO(u-mfGW`R> z@z;c}Pe_1&H~#5wQqe#4seW39eRIYBkpEhq;wHu}FTDJ<|RV(8b%~ z!-qM5nX1)l4-e1e?x^fyZ!i=t=+44zkBx6>kqF!{`1+}PoNhV27mtcWFkJ1(xRAynf|&Luf2HZwHnr6UcDgzY3LphL+2m<%XkKU z>AxSwPGi!##4l(t#8@Pu!1U@04sH>^m;&Rz!c1EUR~!YnvV)kX2stv;@)QAhD1af! z7FW*nDK3c`Zt4DiHGL_^2AY}n%bY=6Z&W~rmq%Uw{ytv}!@j^vHX9Yd_?U0mfPXWt z_OtOx6jPVm5sN8+;nVnnVOXLm31_o#hOzW{z_65a1N9#dm(zFontu-%dANZX!WSC` zWK@QLXhB^*AVU|0Jf(P0@$^DK&%$`W&#qme2n>S(PBfgOlpbsxvj9Jq<3e`sk&{`3 zF8$0b_`rQ>n>$Km4tB>B*t`8tk01Z!>l3L}yD1e8-QDBoF5bF%^TF=!)!v@Tw$`z> zrm3dt+4_>%`hu03+|BINO|Oszwa=6!U|bl|Elg_>R#cg`RFMA~*s+d4P5+Mu9{kkE{P01sOm zm6T~Ok*UbsR4g==2#jT7bEUnlheTvyZRvLH%KcBD{<*VrUT5K=v+%UF^SgED$^QG_ zU%dM8_~~;O&v22%-dyY?Fn2JQ+Nmu)l2S`;?R-Td3m?De@~Y0`C$3(&^5EjNCs%Gh zy?FHr=yl@k&6DSDpT2PK%*A_Kr?1Vgo@(hHU06SL?Bu1B=WlX|I@UY9)IYj1GIeZx zc57wx0)~KXn(ld_ zYn!_ZD?3ADiyb`^shLFuC3WpxW8Hl-Bjc+JE2n3dPJ&*O3nwS$ci{7D=T^6_96tr+ zcWdY5t=)4E&R=+h_TrUCm##iOfBC`b-P`NOE{u$=)YNw+rxC*##v)@f64Uc@imECb zI>64p(b@j7h3=u5j(&C)F(bb+JT9ZCvKi8_zHOkawmqw$Dm}M6J+A^#%P()NZ0xS< z7_9Fcs%hyhtY}KiDAL%teQhii$Sgx+(!gmX3o4rFi_C?UE# zyn6TX<=zM8Z}qTY1mYe#MW++70Dwk>CEihnBsqZ5~QlVKj1egkLx%zU1@Wc0T3?=00|DaOGPu?S!sYp~Em zilKxV$|%4Ld`n51lP@5nBw8|#H~LQ$Mn_^;MtQ2FVhYGm1LM$wqtfdq4nT}ma5|d@ zz)%-lVQ2RCL8m`Hd;q{0rI4b51TAV|G(TGI#3Vu-61x+U07laiy%?xa$R0Jq)E46z zC;PA!|AHaEYHQnUY&_*s`3|CRXHmK z85>~{OO~D!3g0PFaKBk%o1nD8tg%Shnd;N+FmT4==1Q` zNsoLZwz6<`a}Bc4x#HL~8aHbjKeg6fp?0*k^-E4G?dTqNa0|7t^$LziKDM=MBG3rT z?F8ob0+FpqYG-Nfy>;SZZEb5~YtQofnKS3_p1=C&;`MLg=dL_DarPEO)!fQyVCnd& z>!;4&K6(BY(6zC1@zjM|o2M=VJm64bdP#h0QA68s-^k+3(hhq9{m!M;t#cp~P&YEY znpawH?-tO}KRLOu3Fcwc!1!W&-vqpObbf4ZeQxdK%GU1s@pH@Tr-3m@v4WC%OItUE z#vV$gcVK>Mc58m=)Y#Oq!HHwTQ^!YVw#Q~qjL$J&SUb1AeRXr|>eh)Hr_S6tbMD^x zOAjwxegqwc;PkoMnLv zY-}8S0z%@U!yv-&V(Df@IK-K!PlSWLZ%A-rY)n>aN>M_5ZctFXk6)BuK(t?ARA5j{ zSXe?tcw%TsOh|CFhr7RxwX;O5=6>GO1X2myA_ay3yrC{BGoT3a3-q$k*;-oIa!;Dq z2m}Jq3k*ASh@C$Kz)Vfe)cD8b?im^qVQb@vv7i?LOel~U8;MPfr6wk_qee0_p~lrc z*uy)#yt-8+wfOGG*8vepyVo8RRJD2p#=H9`rsme)fAZqP@Bin^x1V0In>#)`k%sUC zxkH!4-m))pF)Z<{Lcjru#c$t3z%kW@B;{!n1(Z3+BZH6#)#6fEFYAF8eJo*;S zxXzuxquIDTGge^$T0^5s7!^>LPm-aF149erX8e z;}7yMEc|F`erm~RE4K^%CrTM^FMs)Kg^Z&J!w8vS3?qu*sNm>w*Q*%17^@B#gBDI1 zIFBC=Rg6_Uz-V%6v1>Xc7`iYnV6||XisnJf=msJh><+&F{sol4B$$Iy(=J7L=XFrSHUbFtO-||I;?S84#`&_ptK~`rZ(w(ES%_Hh56HSN4 zrryP^+TXuCC^#=TB*@iGE0weBUdHBT#zK>$0GQ0^h_tJ7`1jxb_2-}eb7$wWm5rxN zX)lr6iDmX;xt&_)9+y~XWA7)|xk=Ryp1u(mF5f(2B=hl0h=|P1&Z!LzOR=-}wX^eH z-#B^h(ygsiSI=I$f9}e|-7AmaJLm7LZC?hEMyA#$=8hv+**v#%?&j{5d!QHO7Z3%3 zRo^z~?iZ=GaSx109+_T)MB6xV3A$=(aTD#@_WAV_7ofCyxo5f))kY?lJ9;Ndt6Hn- zyP7(NKn@79rH#`Bu$hJ9qmwH|WlaFs5ffQ)dGp}t(&EbLiJ4=)gL7>?GaY@i-Ghq* zV{1c`$3|ziMy58$W{xi`pI+TKzj6H1_Q`9fc5j^pi7!960Kf9!%=z0}C$B87of;lr zs%`Aa$SIGE%?OVM!&2c9vFQnE`ME{4m35tU&HYUsBQ0HHt=;2j!7ym4)SNO$k0626 z5+X7%5(ujSw2Eun3aXm(${HZZ;28y#5eb>Gsd?GOwZ+vfXya20!(uW5!;`}y`;u}J z(u;D6YKtpciYi*N^Q)udvb=mE&83!yjb%!$BSct4OnP*D7BChRmKYqK3{3`rMMS4Z zgr~ye<8t7E!SP-`5mr{N_V%96Zoak8>XIO`@w9&ypfw2SQj8-#RPbgpjgA;P-+h7E+S1(?^e9kcT>Lt4iQ4bib z%p9V~k*B1gBTqom*Bo5*`T`78Oc3G~6p4h(!fjADKub*YRDT?&8^5mWZ!9_M9%|`p>cB+RKcfSVf(yrlqd!Ne78gx1rxy&vfV$&yvcX@G0ORrQnX_v-9DsPFxBxx`K& zwlo;>|IzpzTBacXEBvbFPb_Xzg$iwFr$P^+A>vMM%D zTseE`;rXkN&s}?X?%Ly17w@g_T$x=xJu!Ezwz;pNeQ0=Ubz*LFasBkxnXB;av)7KF zW+w@us{+Ck#VXsf+V+{{ZP06R<8=SnLeKCFWERi`XhE@|g+skfFK+b@&(UKB-Mm6G zbIMygMn=Y$=a)_ZU2{v@i>oIWR(3`vmaFPI(zDA@JT-T0etBnbbg`{#th%wUu4S;P zW3;VjvI`g+Umu=4HZ-v@GQKv+VQgvj?8esl<2#qPPF_B>d-Kf2yQeSQ+1b5${N&ZO z&GU1MJDt5#B^9l)DS5$BDe%CEq>u>4kHpl1oPwH?sW|!8*XBH)76eVYsq~}#Yr9oxpgJ)$8h?6plBjVES-TXB+ zuI_%}AyFwYi8(15#aVfkIfb=(MeNJVF>%>WZh=yzt&2x+NJMfZd(>g7Z(t1G7Ej+u zFTW`N;P}vp6v%zZuejLku+U_0zi=yCS5s4|shL!zwe|82^79J|2#E0W4fXa4f&zov z*}8yRAQqh`go9fmbGc9;1;YR^bWs3j7r@wwL_3HuxK3*=lPL}#KKj*Hhv*)TqeqNQ zj0I|yg}b|#x0fGO8fGvt7MhxfXhH-=MuMY8!ox?*4jT!KOvUC>ozB|T*1_A_-ow(- z%g!y>!9CK#Hq62{&e|cx#Vga@FST!M`T4uw*eOIPB>j!`AM{@oV>fZUdvl<`NJ2qr z(OE%a5*#rPF#d!gC6S>#S_-&Wf4c|Qr6gL$FajH?E`SI0qApzt!vaUAG&x=P83(lV z!4P2O`Wu0Sf$9Z2e@J(5Fo1C+BTYsbs)Tb0&|?o>Vh@tkQouV%0An2Zj1UF`+KRE5 zhX7{i>^_wPqk8=)y|HI)U}xNp|FV?=7*8OyUl@{Xii6n<1HOP-GQ`-57VjFLM*yQd z?B6qFRE#9vYqa#fQ=qTl%rJv`DnpA={17rKhS63SM+m*vLHmVK4H>#L@PI3N@?j3f zl6~%Xwg@L^fe?`9Ao%#{cl;>?>R|{5@-u)^Xu0Y2d5&LtfKfmf%;?G)7)IavLM=A| z3|0Dl!Pz-O%*ko5_wWBWclNrgv!7CKYisSXv2p6swYwLt+?}1@Zf+ZGY8q*2n5-!s ztInOQ&0Z|bSdEOIxAUJ+c#R2tdqmOA;-V_ErhH{yvVee_>=$(;Y3B3h4fnER-Ie-L31yDh$jLxh9QP5j-da$W;xTSj(>S}0md13w3 z=BdksF^H|ck-5Us25WmSsoVxihz_4 z;}ta>5ph}Rxs~;;!wqdC?Y+}|BTMk!VF||CxU#l&X<_Z`(8Llz20$1^rDPUX<&`(&S2QMO6-Opyg~g`FCgvoh~L4B*b4-Y-UPYQBGb}d}3};NCG@OGBqM9-9Iqa%`@1} z(aYAs%f&qqV#_ZeCKyK*l@=YF84{M{11jqF*Y{W>Fm9|gZ=%&fG#&zUuP#T zCr3}Xy`7u2m7|5FomOW9SE(%}Qk6g;g=~Um0@#=clUpd2R%*2kT%)nYR9c;_Mr&ne zCWQ7PfF1h!=;3dSj~baNp};(RT;04>Y72o7VoPXhCdQoRA{n~ICgu!ahXqHBMaE`Q zslq~IVXw1tQtKQnY+ONNXU|9nw`i?xl+HHM+9A!}Jv}Hg@7K3~zS#fx93bHU#?B&s zz9jY~mZ(cW;wgm|Nea-?RzpXUcRtA%bN7a@^M{81ntRCa0j@|0vIUdYL&HT6#s{#! z5pO^d0E{OV0yx18+t4B=IFXaa;uV--1_31rMc6&Dgbsy{1}#4j&WL3&1pXFX&iElP zbPrm#KWt>f4qhQu^04HMjWpOb#T3A}o$%A@4KdY|@ky$oB;GsPL@kUjFpMc6Lzmuk z!!E^?hZ%N>3NT8NQ4Nw*149f5@G*5MLzR4nH%fvm2b&OrF28;JpuhKzM;ExoGmJU= zT9}?v&{B*|oE^;b7eNL?8MhTJihuj`@sE!m{`mNjeSsPysK!uxak~S(KC*}Qe*E+0 ztNrZE5}n3Tt+cN!Z#jSA`js1ZH+Rl=_DnRjj5IfnHB?U26i(J;&sJtFrzS1A2aRfc zMx=iIg79W>R*kT_P}G{{*y7u;WPjzM&C{QhufJD+IB)S&o8noq#hXHxy=JjCrP}gkbP~+)c78qC@9Gv3gR3J6WR9mxwiHZg~IOUt#7@2!t5Nqu`b&>_{)^eS}PxorMFDwDv~JQc?6< zByezoE{V~t8HlGAk3*9+b_`*0k4w$3ZyNx^=w=OI3}t91=Z^tYP$Vwy!A)(0fD>K! zYHlB@YwE3U?rZBBg#rV^mex)|jbSV58(Rmk`YW}LGL?ODdPx%l*i_%hVq4EdYxg+f zu7R2E!MWaH_LXF?7IF~#Vi-GdX&VeX!=4GUdGgx&_T|O(v%qaz?>Kl9os@$&igb^+ ze{?`d0x*`GUR+R8Us>BxS=Rw&Syt1QUs|7CRFeytRneH5S00&^?Hv^3;2!7~8XuLA z9ha1wnpu)nSPl6F#g>#&6cLkZW#?`pROzf;Ag$t)^WdO$U}(I5aBNU$d~|F^YI<=( zQXb$G8I#WVLgs&fXaSGc^-oDl>sZBvt@p+)pseOijf` z#-hVULSr+DRH0L8ZPYqDfmm&7u2O2999)BKT|%s#BCH%^E$ox5oKq|vBQM>2`tz&z z&)&QzbirTmf8rR%=mN=QKpI9MbSXwan|Mc_ciP0?smPDwD`_jY2{AjJNGA{JVi;S^ z+49eBBq4x-1Kfi5msOOOI4mi&xS?gY(E~YzA529~(1H`g(893?DkDc1Tlkotgt~Bw z`Bk2b0K<-ntAXQqshH4(V@H>LSByJu6mv(ee;GJ>?$D8DFZr)B<}*w5yWmFgdxRn2 z2}c=jZdUe%Q4NeQFf79{pv6>3qK1-WUvy#I1p2ogEsW3TD-3E7^96>6B!M4(Log3Eo zzc>H+N6Fp|i=T$&KUJ!q7udbZ^?V%UcuK0+I;vPPl8>9JyVZ70?p`$kLB&BKsr~_; zR@O?9*xXELYAoQ+9GaUNi4{^yX9qt=dq0`jHXzWKZaj+L(*2va>2T)_2eB-a2>j zJ^%)KvAYe=-rPKW{rH(1tJ@cW0j%I&fzcz=>{pEGwBaE4oIr45cxq*OX$z{0WEld0 z0irD_vsi2EE>hY=C1&>w&jNLr2Q#1^!Q%RsPVHMS46 zc8@{)fuL~g7Y8%5vc0%*W_9br`iYBMr*CYZxe0(lhv8KKt9S`@Eq!25aCnlJUljR) z8cT;}DkyEJsP8Q27*<--R?K~2IU%zsC^|)D0eNKx0Tma#UP;LP{=>77!Ba=^N(m73}R79uOQ892OrLlbVp66CKBX-^!@WEMA-@6xBLOg|E=vmsh1^1` zv9+>vghPSx0D}lqD0Kp%^ym>YVomJ^>M_uD%HtPO%nFNw#iD9sP^XUjO#&4f~q&3lIzV0aW%szIp!% zm?6gSKq5z%oWsxmhGBe{lo^~S8JuU^^VfS^5{%T-ivY$k42vM+7JxwC{W_2^%xF=i zPM8fOe9fIiftIrSMAl?`{pCOFlK;U{ZajP?bFCy!6OF!WX>phhj zI@`n@9~C1YkWh@4@BzmbR(J3UVHEIPvM;(c36k`7P|R)7n_-umUcYM!$PlB9k}!Ri z8*A7l`{I2k_8gZ}-^wb2l$vzPGrt)7~}K*gRZUJ6KmfQk6YclQmzKu^byeYZo{o z^%)fU^_oRA3G=E2bw$dS6#pidv6D78zLS3UquHwm@|W|9AM4bwO6=d}c>EmYaZ#b( zHkNK2QBIgBdX&~39zG2|{^fpwS$+XN_Ks?iL@Y2Dm#hc2H~F z;}eTBv&yv=j_#hp^Yh0~pT2(X!rk2q_jfO`AMwH}zj*8%9183>Fn0PXq!kfp^VDT1 zFo+wlp`^M6>Z*5Swr_NPYGD&K*n}4140y{ct+#UY7RoGZTl$73+0P$?CG0l8{>kp4 z8N^UmD;sBK7q(^>nS)OdSn1hi4le#~ULm=KHBe?f1Jlr9z!-V|@LY4-U}kn%N?K8K z>tNsDZ13<~UF$$uO?zQQGy9TOeP?x3Pec1)bJqy-?$Oqsv995n;hD9mrLBeaGb@`H zxF=LyUf;g7wtXH91AQmvHadGJiprW|6LbB7;#@t$=n|AqKuln0LU>F%V9f5nsARh+ zs%mDpY!p@nN2gfWdmc7Z$W``X(P@yUpjUiaL2y(`NK{IAYzB~)m|75%kPVE*CT2y( zrUi#5c=?5Et(?^sj*c$AUcOs)i z7zg|D6wXBgp-d!Ji4_`|+CrhVLTf5i95s;|naS~|hM7n!QecN3F1`^q?s01Scx#u$ zxYWv*`~Q0O=F^L}A6~qD2YNjRY&eGT$e{q>;ZG+5KjetXd6H2vwLG_|hMWc>NmIRi zyNA`E&KwfM;BVLoLw52I%m0B0(=UUx+@bv(aO)ckiyZ?Pm;v_CDMY5EIB1dZ(gVyu zd$AiQ420U=8~q7GLnk;PU`RWF0R_Y`(k?K>`a?v(4WS*;7rfXZa$70Jnn;5nx)j3RTPWrGaOojYbKp9KD2rCqxjil+1nFVKQt;|6gj-f^?Z@w zd)3lv=ZI|UkaEsg-7mLlcX4kG46gPIEbtGEaCWhj%B7}4A?O9|Wh5{)G8YR~YK8Um z^unKi{Pzd_3QpSpTt_r}cfiT<(0g0e)h1sIZ4KwGFm)jbhaF{O0odX<&>5R$WtXNJOH>(n+GQN=`2z z1%~16-D8NM&k%!Q2q4A4Hq6l4IZ|2Mk(pZop_7M;Ggx2QsoN!y+?0yrVpQqP={h zJ$xdd#)86<=gE~n5TD`gR8HL zM}UWKD3pu4SCFHN4|rzh=mG4xc?NlShX8);H^8``V0L!$0=JBf%#Dr;RVphxTURG1 zFDEAt8yhE($;QUT*4EY5mOUB~=(4i3M}UmAH3)}13n0ZrB9#%FK|p@!Yoo6LutP_` z{>DfmS8H|FbpG(D5&Q8J?n;=z$V6ytCWf1t%gjV_bD3JK&?p%L9zMgeWTDox2MWQ=x|a6bpY72c0v7bKh=;EZcjD<(b{u_IZh8D;u|lz#wQ| zV>QK=gGY6+yW+U-iv8{7^A`*=bOMm07m*18S~`VDC<4(4a^&=NG3J~C1AZ`w0z#3V zVcdQZu$HUgAN$0w?<_!>0sP)@w=WV5(6Ry!0|ze;U7{DO;WErnz@{^pnT(r2&lTE4 zlk-M-7}dit70)~vU%<`5VhZSx(B*5Wo;MW05MZle%P0TcXo#WdHyjx49mDYfWBJF& zi+7Aj0T@8s5XLwNeRd@29|VnpAwUt=A_kET0LCs^eI^jqQ_Chb5MJDcF#YeIa4j?L zF#Zy7-xyT)1>|a%Q!m zwZE}tsG)wOs&u3>d$c-zt~7ZuCT7;!dr0m*DDdqNL|2&?6$$IJbuIBRy$#Mdu_Gx}Dw%N<_dmiV1+sSFiOndwr?b0FbfI!!7KCp0AKryutN0}@P3ECoUcEIX0dL8)?y zh{;UJD7LV2l1SA*J$r3w?e6Ut)7mlSiW! zp1;FAYvbnX@e7mlTm56pjUA&M{jGlZ{lYwbf<3&0ynI8sQ;V@cpie-ww||tUZv=)|*}9oa)R1MCHZIO? zen6U+Pl#VYIQ@>LpI?}>vo{zfm1v;75PNt8xVU(+vxrQJx!T*iJ34tfID0xcdDuI; zJ0N!PvUBpZck!}yaJRL0lPj%+BIV(u!Xrn_jvf_=L~@Zx0akr|$mq~v6Ny}-(pbwB zIwKSD;iCc*Gl{8CW@I8VHj|hLWQfho<#3@`g@cqSEg>RRT3fM9D-bEo%oQS;R<5;C zS-WU#y_MEMQmZhfZIqo?vTH!9XGr4K?)5hx|NF~5x{u?-%f0;BS1@J;?c!Z zio+7ybbu&*Of_HRIeP8AeUE7&v)ChmsQ~SpeEVdn-B7;Z(9JvD4kuXRv`5_U51-3M%Zx5qRT z(EAU^k_xJzUfBy&M*W0(hoj!fl-p)rRvr9`a-Z^>s{Dqsxw|B9m zHnt7bHxAcS4prohR;5jrr!3?qvs>ro?)~OoU4oEi^NeayMZTgg&9lk7>$u(JC)&q9 zihjLo`OA{c(@M>YJm;55zTf$Iot0`fkE&J#bZUL`;@YtbE1MUVkDZ@g zKGi?E6cv~46A;_eKMQ&-ukDVEuXXlJcXUs6_s#b7&rM8kZXCaaA=orMw~ey8hMw@q zRIP=JLS>KTzNu{xe43oy0LI{m$EH??#~HD(sjF`i86d5;u?L6(B=U>v5CCIPW1!dI z=mKg0u)@-Y;P51KiKW0?o03*kUEA5*HdxizU0BgXx3(iFt8GUHUftBw+%?SZ?;l$j z9A6oq-GnpHP95X!#Xr_Nw9?f(TiY;@SJ)U4o#o{h*ChpJ^;$$;s8n%`*_{%GW;%0E0vPF@U)RX)GL%7)uTtiIrMA zXLo;h?_h6#98ZY1U#NdzWI$k~UqFPLN1&s#x0ADvhgYDdcd)aox2?U4T5SUb=HTD~ zP3G+4?dI;s+{53+)8E;{&)MDA!PVQ!)&TB*WPt+NB66>4jl(n_wj z#(Sc$a8+6R$*h7U*5PuyXrIW^@RSCXeYnmsG^?cf=Di=^e*EW)y^qh|vU7>QLS}(R ze^F8Tn=dFPWkyMI#QatY_?S~*ZyC4VF;1Z6a0NA{zf=aNN!WL(IC^2x;8za{U~DPn zu8`5?G4g%xAszZBaS&JdfQUscIkAV+Pu%nA4IWp|*D&yKHB`*EL?-N?GE{~o9!3i> z4C0K?r3dT5LeGJ8U@Bx#dj2F3?4zJPDB6@g)f0>e=-Wcb}t=8FRA()){mFQb4P zr=Jt;7sW6t_`mm})VO8huUL71%5a^#4=;vi;tq_@;o0ys%(96U`YAVo} z33YO%Q(;k)04vL3p^=Gf>%?wLYp1VY#PRJ*uI^#kITd9UEi$EpRN?63pP;k$kg4ny zYG(@@&y%Mv$H!+ox&&fXot`~bRMN1ty0fu!{>0hq+h?zzx^VO4*&Az{=VlhRhQ^j+ z;&YT5N43s5GpBNVdShwr%<2X5aO|^ zwaM9Iqm!#66Dvbwi;!F;70uz%X=)2+C%3@3q+DPO0t=99?HmEgTH1%uEiP{YSAs$l zODmc&gvqkq+K$TluBwLa>c*bt&e4uOU~FY@e05}M zV-!a?xdDa^j;{|4uk`dUboR`aS9K+)7l%ZoxOs=WdWMoiAObC572UM~dXcAPmBu6h zc;RBXFN~#hm7;_5A)}yVy7a5qWl6Q zq32vZ{1hrn{Lv$kXduF%$^3jn1N@n23kZn75Z{1scdtNuCr`Ddz1qUw*3m;}>1bvq zJ9NmDFlKa=J>*cWwTC`asjSQd(j!ONSH2MFzxZ`TU~DD@!#IGcgc2>exl|{T>L4_g z8eq&>ZQ&$WJE|;wq#9qTRfNx#SS`|INOehC`zU9x*!F?xU*G-l^22|7 z_V)cRZ}!o?;BKiWw2%lRXQbgyDpJh1gdzePF^Nyoqom-k_CPWO1Uw96PXRvYvR@-3 zfYFKsqXi8utyfs&fDu9$xCQ4fmcM5Tj6el?@x(&F$3!4F4=p$lgqSi^##b7~{3HNI zLAkz^L5l;S{1T4LW==;kY z%=G6f*(i2|jDqife+P{1{SH5V{EWT5hf-;ilT&u;)aBjtHy4+8@Yj7qb6-QHw>O@JxY-;SBd*FcDs~7UiB(%vqty)-Kq^wT#t#=(gWpnkh`0@9mUvKJu7}EY& zV)-K57FV^nAFB;?oX#(AiyzQKk5p+)+>@bdb(LEP zflR~WOEU|{r{^~ZM&?mgP*U&hA0<)P2*kRmxXjAh4xkSC>iVwgx~}>rM!tsDfr|Q0 zpbl~k6P8uCW)@V1$7Og1M1@4B#--+?3msNc-3o^qE3fM)uj{OC>}}~9>lvEsA6*2- z`bPn?^`VK4fw8r|k(G`<_Q;Q#rh)9j`iQt3-{3?7n7elvR1pp-D2&~vNLRl=FF4(H zhyn{6cMtFI;Lt=8UceRi!~c=~fwBBO@z@#?mI&lPa#>irNaPlWjYM*ljgyO?r*}A@ z?!I}sktqPC0$fEh3v(&lQXtj}#2R2sqOekF?KKw8GPR3b z=P%WTO0DDMc8P)UZK*}`R!)ryZKFg{DOG2yt)p#SBLgDR7LV<|djIG1y-&Zs0d*LA z;2dVyZHizLoCDJTMrk2<{(6r`8acNWHTs)1=*A7&gdtSG(UAd+eSw-SMfz0^YY5go z>au`6v0m@I2m`>-WeSXNMFG3Y#c47__8#B4d{2GUl#iG%Vy>iB>+THNVH{=3m8Dx=mgfKdU(hGmpQOYb8Lc^G?xxvzh5 z$^LuJ^{R^@iF;}= z0b~CiA&sGngcNpxmI6Zvab-w+`t%8O`HUir;)lSHJjkCa)( znM3wfu#fDFBHb#2TH+a9{d)KA_vg>wB`0TVwf0UcxAp9mdG-jsTTElC%?it;wK+CbfyHA^r|(!j_)hfmJ=wEW z_4k#^XE}B+Qary8^f)cotsRlBd?On&Rk!GDYrVZo0|T=B{bRhnY}85_mK_sg6C)F& zqwLma6BC)aNGDUdDz!dBv74#T$T7 zWJw^h5{T@~%&pDLElkaIY73XC*>zKa?9gFTAODE{q3PMh&DG5_P+-STUpldS6%K%% zIDPf_&ZX63yI@#b*H~lA;Pm{~#_>yF*ud~oTjxYW%V2vqQ&%9?%I5Cs@pG%k&dx2J z7#wA=fiw|HaGbUkH649Jv(QpdQC)qLz!F;Mt@-5>BNNMXJI2)9v9_*Ja40ps7>j#y zY9X{E#1oR(3cO)#&%iW*1bqV}*g5$YmNuXZ;RTE#h8im=YeI}sbuInu(pT#MopMaf zD6)3)F;`e?ZQVh#titNzs+Q84w%n4s{IUkX3|?H>T2|9h+uYyLH`Oz=&^-uW>>XYP zz2H4VOC5c)Z9S9FY87?enfcYx@!8(~(QaO$aKac~FE9pZ0b|MOMF1FDbfM3n27>icvnw<$S*rr@9^m4_~h)!=oDvXKaogt3b-BWjdk%E;*&g3VBi5c(8FC+$Fx53b5qu4=mCm|uf zNP(R`eaY3;SE;lrFK;}1_S)|5_4&o)O)Uep4L!BB168H{rP%|eX=6o6Gbu4M9)3d_ zk8ZJ7yIF9JAgfeRk!w+t5Ygzoc+%ze1IwomWzWy(p0=xh%+|e3bN(sP3PhJGQwoYD#2;11Y0LcYiHMe;3*w*Ef zXKsy7tatU!6qmI?dC=vn?*6IKnYH=Vow=oL5={NWv(@#TUVagQp>fzcF|#qjzS=cb z-`rc<*o_us0>f4|&R_`1FMy}GyvfZYM4_^`vhm2sDywPerqhD}73wh$V1^9T6|jVQ zWa^rFK`$IeY+_DMUR7REZE0moWkVM|Ilii~yQs1`Ijh9V(fb=yxlHR2o03;h-U#i5 zHZ8Xto{?XfU)oSu-dw~znGk$xXd7wkndYKl z(bJwlFEGr*C)~>~(myzk;VM2WAtgU4jos6cm|BpKoEMjn6BCyO@PJ$36FUKD*r^;qPX*r_Q zjj1#PYF)crQzF-GNK+7|U zD?q@2K?>{z`^pz5>A0<^q>-`U<<_jMZ^#J#UmDKK(m* zC_s{0bg89EN|LcLoay^qh6-qM%5Yos#T3J+3!^T-N6Mh(GZcIgqk!MV7X?`E`4|EF zR1a8)fRZpOfB_fyJQ=`P%kJO+5{MRhAietp1;!zY0gMcLp%ybB58@EIxKoT&%;Sw2 z0SQA8&?w5o2w)hCDr`al6;lA?u9S0QPq8)619pxw)k} zoxP)@C*&9CwY7Dww{N1pvA4Fqr?R}aEWfuneV{aTA}4M(G<4j`t4HS9A@Hs@jjs?C z6-cU5ovVGCrW~$Zv-$Rc^^0p3&n7ItE7UztbNDsJ>$a=YrckkRL_2j@)nTrwwRNoW z_013TOZ4^fwzH8-L=a!5M#d&bnEcW|_FJelGgAqLx}!$&-Q8PPu6&!ATqZPkG!r

_9B8BDE zZHTcIx(XPh8#Dl_vdUI0*-Ev8jh$CsVNG-U5VRV!6o>_fK5Ok5!7h+QF^0g)DqAvh zD|`Z?t?fKrJwnp5O2M;=y3U&BUb;<#?%+txDRc4+4va|3E~JEV{JV%?Y*-cy5>6j=UTfb;mw`n%^hR)Ed!OcojC>7 z@hN#A7SQG48{z2};prO=qy>h?LwLm`WYbNFDe1*YDFyLKxll{au7P5i#ZeQfN^9@s z8x9&lnE^ti!$79U=yW*U>p{O*780HeRSKv(I{SlFs0@uriH*;OPK97iPAfz`z%NtU znTstvy~ClsfUAV$9Fkv&DY;-+Ms`VdennPpS#DufesN7faZPq!Il7rSr7;Paj;_8M zD+e$Cu*`yr%-k{{EhIc4C@?M}Jh`~IEII z1v97xD$tT~1p2I~4xC|y!xeKHg%sDa0=l1q1&lWgLcF1dt7n_w2+1*&0LD2}V00KX z1TE+V`|GXt{4PGyKg4(Y>}$((`^LHRS6p1ZbUMe9lDZQoE}S`Yb!uw0rDdSLzPqlr ztE#NGEVr*Xb*La|JTZF0IiN@7(I)X}Hw&y0WR{3ZbJbN*k?p#b)7E!xTl{p#`uUda z50%Gr=Sx;+i{+?H!rj>_f^DF=+zjT)OOch4d}-!y;k5H}~SLMjxPLU|b*9W^>) zBrr8sNHtbEyRguh&W?f1%;M_mww;~JE-t}Ozkg$C<*T#s`R1_3$iz}8a!5|AxOVf= z^;>s8{qe8ag>`3F|M96MZ{LuWwd1EwU%-MTmg6sCc3HyK!QI<0JT@V#y0&v*e13Xq zb76gFY2)O^@w3N{pNDU3p5NTQd~grp*@fj(Q#0G$y|Y=lRT`bMos(~C*Xa1nI)qpM z@Eo{8_g_F!(UYI1=8nxRZcWb~YwsMbtZ9Wfu(EY?_YMJOAl>LDcmN4QhDH{8`)8_Z zI}(!fvEtX%cVR1P%Botk^Q$tm%kv9sOUs+_cLSY-#MZXX(Tb`zEaFZs0a&}mQmgo+ zJa%_teOGBs8$C`JxMG*Ys#|kQ>Oil8$|huTimQ_|3PU54J$%B#qEZr4@=~%(A;mC+ zjVf*A1X*ikeQ$m12*<4{cuUs=lo*%HQ~)eCHZ#CKDmS~d zqO3uouojCoa+%J=Sajs5nUS&3TqHMT-}+LBWjcl0*22ogQ~->rO$8dbi5UxoA`78N zCzabs6?S5ooj_`5DseQCx|?f)C04O+p>>{Nog!_yP+4oPY?Wxbq?$gNW>BFSQ|o5b zx+#^#kkX=Asx1<$6BL$FZUISo<*irl{_y(KpD*8ieEw$t`I|k`PdvTI5r5fbryunX z_+SrA+DDRo>x;hf#mO?%v#*F@69+Sj_un3zAA(_dqnrOYbg{Eb^xZEkF<4t@dBHmJ zH##v$Y6+AgT=4*-n6{#2at-~L&*?-W)qG~vf%Za70Wx%|@a4;wpaOwGzZ{bz(dq|b1II0342~W@cKG*|aaisKJ4t{3gCmQCgJM`R;Ls&=VG zgQIJymv^?mPmH&_tx7Hyn1WwMMkYtNr+~{ODr-x-pnx!6pCF~e!ok6_zP>9rx3Z|P z{`|$ev-4Y5u6|qJFeDT^7@OLd3GJ$C`<7SFhDBxwMOKzJUbYTCPo6&W_6gQ%?RQRJ zgBpMc6N>#SJ%(19ot=5 zKeMuWdS&J8^vv;|-pQ(}w#KHuk+G%ur4yr*%Pk#4wGCax<&D+#olR{6Jp)s-i^rGO zPfpFQ4-C(?cMX@8)p>XYiX|Gg)~=+Yv9)s;H61;p_02sEO?_S6<5SZcYUP)^a9_2NDC`B zZ@(yj5cz`Ay2`rt>W0pmhOY9Ob}$SIGCCp4-p$X_!NV^!Hmk5IyQDTYB@f3OmzWzJ zmnD*dKx(PnQl+vIOH^j2V)oT$?&%v6DSMQZz+9=)*y${soLvH-7gZW3Q-M|_wJ|l< znu>HHnYFpp%3KDwHkSin4yF<}BeADI6>8&=@9bZvvMm?LN`>-Tk*Z0gYT+2xD^c~! zHRDR%q{?DaV?D019*}Dr1=0eEI#FX6;p81x(b)Uw#}|8_{_Dlt56{{C9SlD&-h5VL zJhy-%y|jV?(*umb>EJ70RL_3X67YDlzxVe2KK$UpzD$|Ddi#EF|KrbRMEPYsH7{HjQqAw{M+`EAQjtq6-9J%zr6Gn*QTXMs(d>+d>85l;3 zyM7tw&MT6mN1I@@5dn>&BpKgD0gj$qvH!BTV-sR(X*i!JqnPptsF*9!Pr}!5xxW}c z@ZXKEr+}v7j|A^BpQOX4fRcQMH*{e%7N*Z~Mj75HgBi#SW7xrvw@gkEz}Uqwkb|`- zz=1&?0WkPC!qCE=M$bsYF^15?j0Y0?r^Hb7+eh}yU*PZ)_th?@$qu;4jEWI(>I*ph z%PB;Z;h!NP4fNtp1)yaL?8eP|Ufux~mUh+EEhkQ#KXvNT$jEF%V^>{$cTG)Cd0BT^ zZf`+SPjXJV2{ePMeJ242&pvBE-|Udu&54CXtiJ3)!cp{`TnlO_p7##D%C$` z+WwT_@-V=8TdY_+teQEj>=bC~?3}B7ee-;M5`DcqY^`PHWb8(SAgSMT76xZI+Oo`JEs z#bc`+!B{wCfG&Qe0tGK4Hsu}dEYVIkjY6id}cY z_TLzrD|NO}3G8>1A=l6*XO$#n6sKgBrR7w@bBb%T3u_C@+bZk(>skgI+J@nc?ITcN z4Q+$g5P9xy30rz#_-G9w%62Yf09 zzD z&(ex!=+wM|nv}F68#}KfMlxt1a5OWoq6lv?_sg8MEqEq5ADexdP}j$W?5VTqYV z`Q;7i1(jM`cb&CcXhbsDX)I72F_xGKmE02!mFy8P#zJEwp}9~N8WLq}WG*c%OU%cLb`39u<@RDN~p^Il2S}=?h7;}Sfi9LS}-G&%Ed-wX?n>X)4 zvb|UATVk)_+yfH9Id+f!-iP0~oAuef@&quZ!`LnK&|mxdKg$n{0LD%R@|V5{S_C8> zUfsqJn# zzC{gJ%SN%!)4-5Ki(p+rW)H-zO>UTpU8&bKOK)`6)9T=OCR#Ve5F|oL~czkJjdtqs3eu1@%%R9>} zCzqB^E-vjXENsor9-EolTv$3WJhs@p8rQ{YD*H%`xLVH1h4Ghlq56-rC zkJUEz0ANn8fo4JtmgD5q!rF%JmX2X4GrBNVQP)w|+}G4GRNvCip6JmwSkv5_Q&Ja~ zn(yotqOq6Ts+zL$D5MjB+^;rcqIYo7a<*gNUJ+;k)4XwlVEdvCw+O~c`5jqSQgZL}0 zY|SreNYAMNX@DHRpg6$EKR6x?i-^gLPtFI!Kqlf%K}iERgd{j8QP>)pDS_&^q};k$CVh(xKV8Zh1HoOV7_1%><9r=Z|egQGi*GG|k%hfp18?~`xiSs>D-8Ou^kWI4u?0ux!8nWEZM zR%<3}FjsV#%iBeY4vDH;rs-GdM%9{0t!`GW8&_(PEEB7eRhCiKj!_922{?|r0O?Lj6wqo~(jgfRn#aVHE>K#mwn3shqdk%Dt47%>(By8CZIFK&IHmIBT> zbaBp|8)9o6TlL=U{f(VJgoeZ7d~mjqhZdYzMHy^Dmon7l%McUr_zb$_SodKd78DrA zG6plWd;txou~bh5XvuJ#SgG}$zZz|Vu@}Pu!*C!OCgjV=^c(&kzW(z)vLj3L1nZej zh5%e^tpywotz|$5fPhv3t+m!#YYl|fIvCUpY9`5KCYfYVgrLamuCAJ{?&|K@-kF^b zJI{XDKVV(`I)fVx!47xM)$D&UQ#@Oh3C2S)W| zM>Cj$zdN@)n~Rq6R6t3}z-Scpe3u`^V^KhcAu{%?9zL%WBS4p8V#y(C720k#)IJZ-go`!vEP@w&JUXne=4{ADL?Ro_`pjl!>+)zAux}sZ9TzZ z&9Sj%F;SUO;lVDuUaeHfAil&>F$mT3bt#*p>RtCz3bx_tTi zfBSF$BRVFTeYG~DC^NGFBFya$bvOfTPJfpt$j=)R7#x|Hm{D2TI6OSPyu7oud1Yt& z+V1X+J@_7T&C3P{$_IaJf!U0m4+N6_3pR8`kmP*RtYQ3$=l zo%Cw}KL{RhAO|GlF7X&*ce`gl4>sF1Fw-$O-7z@XIWz@__-pMRhc|VM)HU}*Ih{Up zHaBYqfUUWGxUFlfy?Y$gheCxs#Xl;)s1`)5sBMS#8lGAi zomm^2T*e=&qi+I=GdAgrUvO+}Y7YKl_?zUE)~d~Jxz1L6wyvzA-e&Wf&3-bOUZpZw ztS-4iE0!ol+@-J%yT8XT%xv`dd!lW&pwyK7k&)$|{yDdQtkDvz(EG3*kQyVBp#`_Td-fCEBbb90C()k&{QSkQPZ`F*Fm_o7IVZ>%z(BaC?ABB4u8Fio zFyVD@?FQSt_}z>Q`x`burofoIIuun101}FMu22^(Mk$~cL*$4_PT|pL)=NGCY+w?o z#99_$&t|6$Ib87~jEb@QVyEVfq3`f?AGcjIqalEbVoH+H5Dc^UmN%;5lhh?cmp#(q z&!bTH=ny5@9}LF{Y_Jx8zZV$e0(RuAJp>90sbw=b!(Si9CyyFN`2fZ(aInI^&Coh9 zO7a2hXpASAx~%l&6Mqz7B)Ql}Uz8_D%pr%-i{=7KhcTlOi1oL>v2Ss4=ONi;^hYNm zpcci*{BC9D+=Ux-T7Wxqh~U@ne|#}EF&`8X8K0QGvv>W*%}0KJcp9&4r`YnXsT-U&1b?I{l~ZcUVY2;(FXxvy&C%ApyiL1 zjz5+CwEzGZWcMp`Etv;2Mo|%&0XXlQ6`YD#upUHi!J{KEY9#>S=X?W^0{S9W)=ZEYdGva@q-Yy0Z@)@5j^m9+~q zbDLegV}&I(bxqyl(<>_*=SL__ ziJ7^jwPiJJ5EGCT-9s~dqw@e5_Tuuoj_|m2rNI>%lUiKe0&M|efnJ5&8O1X8LzEz2 zKfJMXu&HyXp=AIPCp)hqHZjZQ3gzzfQ4M$i6#xurCIE~a7;EVq?e3oj#yW>)I|paG zq5KACI>EC(Bw5?mGuhHLUfVp7U)q?OSq6HgW|XF#E=$iW%g(EWegYIB*U0hcc!<2B zS`Z6)JSZLxG1L{<#-AZ<XHy%UI-|pE_49aw zHCnSwt~DC%TAf)URe@e$m{x1DnB7iiFwo`kj|>fqyLrEv{u%y)HM#+{9+XP zAd@rtbY6XEOt#h68*jAs%qFB)WaPI8$DEaDz7}V zMg3_1L79^Hw3~S z%XKM(GQLYw;QSOg0yr{=F&78Uc3;kD?LSE{&q4E?>jVV_;y@ z4grSD(NP$6>1gTSNJop70(RuwD9yq;Xz?een9V&jev}L`%4imq@kzAE&=9{AZ%51c zn2b|R?6W8&>6wOc0gEA$m`>tO0RHXQfBc1=QDlGtia2x~0E}kAj;wG1F!~^kPDTFu zw|`GSVsDyW08yYLcb1Ya3E@6hqbpyjCFfqCn8ohf`{Jj+fAOcUlhblM0paycU35L( z#KcN}-&9}EWM|uWTjO|D;b2+T@Y(E{g6#RYq-k5kfHtyQmE5E*snj-=60JT+Bys2rA$nt|Rv)Z01R2eNtLqmv z8k@%x>2QSDZ2>l`AN}gQ-R6fK%5L-b_k>18Cgx<9v^MvSjm#}BY_6}L2fZMqc6YCW z=$l(t);BM&v-S#Bn_Jw0lGyXrf4Fw7bJW4#EZjj0vNLo@$__p{KUFzqY9l zLv20d9fLC+12Y`M<~s-Hx&{}!hnC<7ItLcodS_d@r)!&si_2Ow&s3+KKFctcS(2Gk zPGkbQfF+_%OV?O)=O|NeEdzMy^sG{-D~Df1Ms^uciX-gmo8o>LdbVd^22*fg7=jMN zD3FHHj-CnRu_jgnv<8M3M#ff#$5zJJ&wFl7E$mG#?2b&W4~#BB)P_Z+cmiWGbIT#c zsv5gfvr80ur^y+ZUtImpd!Ib{?pa7kv{GqMYfM(FANNzsOn%7~I+e<()!H16V3#Y* z=?*j7{8!e`EiRu62~Q3VOD?bKT3EXR1t!ya)uvD|Y;a=385nDHhK$ec>|J?1A){Qb z4;86`Man3tI$5gD7Ax~)+ESUeLawb->YL@-7P+=fW$04syH&@b2+$&?3#*b~cv3N1aa6o5i}k`K_rFvKy8&ilQTM;!PLbrScZV)PQB ziQIpw;BWL<8l6Hs@*`fq{Pg1G&=G&hE#A4)0(eLEk96;-)z#g=(Ae0-^v&HX*KWPB zv3;$#Z2xhV`ps+SQr0+UgQ*Q&xCu)Zli& z!#5nCJa&9`-T(bQ$0uh!Ulay?oDz23Xx|YUmVM15N^6(P+Y%mG7afxq6&dMvnYC)A zlzr$W7PBvYDHIy5S_k>{{^JjB-@Nna)i)eW9(f61JjUS7Egd_%=Vs;>=a$!}=2sWj zc9+)n>l(XdDvQ?W%`0iU`|$IW^eVk6T&W3^DE(wgmrCOvpIlR^EKX;r-HvzD0XB=< zVsh9lE{oY|G&tZEv&-oS2nvi$Oh_*(tmtU(pPXD?TH0A%-3Q4wHZH6&zqGb_d2NF^ zblAcY``iok8l7AMht5_u1%||G4Nl0cmiB?cky!w2czmI62wVBvP6kp2+gr&Ze%> zw*E4y&#whOB=XL6Fb2$0IY#d0JcKdjkNVmw)anU3`~P$ zU5sAKJ;N(KBP%_ltG#1u-6JdA!^_=$^G&T|`9)0`Srs4?zyr_9tte(+TKUBR&MEivkBW}XsHkqMZ|$$B?XdfW%ha}%%tEcv zC081Qf}+O8=Jk4q!QfOVjY5%}0e$<%M%MYL`s)H?(&uTi{#-F#VM)sv{aQV zR~O4vXXWZ@g|11ZZ&B*n6uNeWzDsH7RT}$MrXjU?1ZqrYn=&|NOn!@2|7Dy1g57_{ zHDYbDhy6?F%bqbp$pZ8O%eZNXImq-kY9iO ziP7utY>4SC(2Jcs&)0R-h>~L@m`IW|f>_X9qB_K_j3T_HSd}j%KI; zh8Rm>5#Ii72F6#?5Y2_LwKzkPS{xn$3{L+jI`X5=R^$v*_%$h@MX1XMyz!%WVkqDZ zqtwz<$QxBsaCC^CT|R>@TFSuKlm9cjpo90L0OMn>dw@fpZ0RLwc&*5ve_fSsG(*WWRH z^oISt74y3_#?Oj9pXCI<8tQ*uZr$`XO^Hn1Ccoy;@S5nTv(Zt>AwdqKQ6X1K*o7Nn ziAXA!Dz$2Z*<^j|jkg~?eB;*5yJ@NEPN&E1WKmWm@(OY*O z42@3(g-1L6gM-53-hB6u$*E_g3iHJ5er5eoVp_Sz7_PU*NYw!%xl1BhTRi^mkg(vGw3IVdRZV?;K=+GW>!}>FN{wu1AFCF&7l#eJORhB0Y3c*R8bOZs z;X074bF`&rqO}(oo9P@{gm;fD_fM=3PHhg)Y>&+DjLq$h&+Lp$Z1xQ;*E9|mmNjSR z)tt_$%s5k?U06xKkO}S8*+1JiveZAi+%vQQA(dZT7Z{Rgv;=0JscdQ;>FJ;A8(IM8 zKr)VDv;9MhgConsW2>VR>+rroDA&nTsfA{H5Eu;TcJ@w!|b4FH?K&%nV^irw5sHoa*_iEXVqm)9i zT*$uurIARrVzJg_^7DG5l9O}t3d_Y(b$H~d#pOMn(Y3UCzOuS&W9N47(CUS&Z!WG~ z-`an5Vf}h+a>3N%{=md~bV{CB?eLKqeWb<{5|cpY7RiIfib#nvQKHI_s`BKTGKIEE zZKzl3o0NuDxvo`d=u{ZGmF7N~u}^6kRzZzfC$#n{onzYMH*fVWnmyB2@3_gY)8tog z@szkia?^7g=hrX(@Zvu{`}yDh`0SUb&kio-0Hxrhz{uJE@P7uth+f=Hfw}8GAi@qA z1}XLe0ONjwi)~r-9-7;K4t76&N1~P~Fkp(O4xCqD1TE~*6!Qh-7$PY~#b}YCGMY$p z;S^8?Lx|B*@H^)LfZhBkLda-{3|;(VD4>?FN5Ego!PUMr456hw)zczq$ygC*+-z3H zC)w~JX!)b%13ph{(sbC%xrc~CiVEJh=C$9Z<<@OJ>?h{YB>T#c=C;Fx&u;n~X*g9I>4@wCqZb(V{MoNpuHNzlh6P8&ZR}jSdh^w_txMf~6CK!M+Q-{lM(eAFOR~Doo*t~s zn$Ag`4UZeQg!X8n+Ep2qis}+&bEbcDMB9?z?bpnY-%)>Z!}@lw?!z+c=Y>I!lL9VT ztXpF9iqJePx3>BRRYyma#YX2uMFv@II)z#)QHX`?!VS1arPHW&%gd|pyz_W}@8Zt( zIit}AXt_Nhe%>&be~`l+;6&Fi(BmKE=LrZ34!?H&PFq*6SfRGL{k2AGOGnQqfBaMW z>HO)1J(<>Dp%0R41C@qQl{rGH1;gADnX9h8uco$Br*rD{PLq)dFE9)aZt)DW7#&uV z)9vsE`iDkF#-Bc&-_X!8G&H@iu(`atx3sdiymo$N*!LeesH9S6}sIsZPV+isKA`EN;mLRR_TZdXY$D2Dw zn6zpgtmWiaPC<1@M6$sW5R;Hamvun#G_(z&rjEM-RYS*cW9JA|U`x+<`@sAmz&3_w zcE=aaPp@2_UAsEFa%p<$!qnpVvDw}JvDMn<;rz0e)4A2@IcGETt8$C$%BtJz+lHax z`o@+9^bg@h0095=Nklm!Ywm+lGtFnriBMdk5wQN0)jB=KwYw0Av>6gf5cf zQya4jdvl9>BNMA_UE?tc*-EWLZ}t|SZSEbMCwi@{Us+zeJil^ba(=gWcrp2ONkB+^ zMs_La)!jdJwz^es_7ltX61hGpEjuA8Lnu@ljn1aVPMg&umubZ!1?Nh{+#L}OMx!Sv zC@v~0_47Y{`;Y(huRD9!wK^A;ia(We=ix_pAAS0#Z+?0E!@uBP-PSXI>)|I4-uz1 zP-FUbwW(WX=$7ew_IW@n5ibr>y~FW>1&NUFGnU289=9 z=DizMfjDq#8K3a+=8Y^dr}FV2CfHQNE0v+x8EP z+r61l7yIc!pWC}BpdlC^gI+M|QW-r8txtKh1TfbB?P|YkDWGB^*3qLq8dH~yCX(@) zgM;B(`s@Ghabd`i@kzc*#>W_?p`%96D@JK?$`FA#XdN(&D`TV~T%jd;p@kExD1cLd zmLt=Fqf4|S2cNjq7&E>7AZN7Z{ z{`t#yMkklM`^EvVj@I$k#)*o;fs%}#@{G~5r)N@=r~M*_w4ojHmc@zhL=S}=0-)u`g^S! zy-cEzh!rA%7=c2j)N2hD<&|H3_1DXnub$h#bp6_Gt=8ytd7W;cE0_T0aC$xd!EQ(~ zKd;T^YHjNt9Gwu$RSJz>uGY>kEw8L@G&c8OJ5%UAVx>zUbBGjfvDzco1uFExa!sI8 z>yaw#LXklz)XL>Xz20FmxlA0uh+!7969D5F=5pHo-L8PZfUvmOQcuAS@Zo2YH-VL$l+Jy+M>+BwuS zFf}rPM z{NUv3$joNf&|GC>Z&qQoCoE2Fa(lxPiYl6bHwd-X-f_sUjzM;bAjDR2RZDVKQDH@6 zZEJsX_ZZky)zk~}6<4;D)wEaC_tds|Nlu@L&1PEkCS3pb=lvy)7 z0F2TNJ5brwHP+lc4#(f4v1_ueAG}=b8C@Be+#H?T1Hj;OYgZRGuEXcoug$Jp9-H0k z8eFPu7|1HDOUtRuDy+>es>?sygnva_-&Ftj%INead~9lSWMXZ2Y-My}ZD?${yMG1* z^$&`RjLoR3>*^VpLvm_vXKrbKW?^@J>DN*|F@C^ZNq29eApl$r!mvq0(+%R?pd zScxo6uFO@aO6AH5xw2BJsa0wlKr*?ZU9Rs?=(|*=eua5ZVII+fVa{2jYu@NuU?&v= z;8PaAev7ls=C1MtmnWvx+H6z_`0_For>&Vf4i>&pA!T zv>H=p9Kg6Uhit$3H@KphjJoU;A`@X8hv<9C1SE2bu`iV7` zEMR^x5lM2^EyGGmEN7`E^>ng|2q_pNG zc9x}%6{SzbBn;akdQ@R8@>BJy(i&Y|fxF>U-E7E}`$6x%;rZmI=dB*|yQR)g@`4_p z3c75tZiy_j0`rj8-r@@}G+a=BP65sAbSp$Gues`a74VGr)zzj*%Q z)yvn;?Oi;#cR{7pxLy8`TyA$D`v7P`m%aeZF9_)J_yuw9wOSm_%^gc?*ur`PL&M@v zCH?b%`WKbjXt4%Z93dKmSEhFPiY-E^T_m%K6i$^X#6K+E=m5rCVyQ(S(g_6Ym&ObR z2i|=f4K{<`YB1O=W|!6EwisP-FwAOkIvxK0p5Tz+=%iDp&z`O8?H!w#TAp3ln3>z0 zUBHgHv$(pow7#>jy0y5rv%Gq4ab<5|c^4{e^V|(6r>4%~+~OKfK%`pl;O;5a4LFTW ztqzYb4U8@fO)ibktqo5txAu%wHFiTq4U8|2&aAcfjMp{w7M9kRls9o-$r@m6Mhnp#KO&@q~kU+EVb>nqc_0;7v7o142v+Iq(uJBH|@`Ig=>hOxd0WZvioJRk%WH9EQ8-aUEx%vqByNMrCjlV8<4 zFb_n{EuNd6+ob?yh({(?`iB>X$5t_Mb>r&V=C$>$YXI2v{1#MfXk>Cocv3-09sAnc z;7mbDtwv`z8eRT)HKgUZ+@VIJTc>px4NkMgDU)mPdSotEi6t6efl4IS(Qnbol@5*0 z)7(0G|J6?;W7yZx;u7=sF1~vH%Ii8yh|U}wo0Na&;U`*Cu+bLy<=4Md*7d1$ZjsdB zD^mIhr9L8wuShPGsDu)&P^=M%bwY_*EOSdC#bgmO#VMsKTd69L$%|$3QiZx&0gM@1 zWZGthu3cs90mIa$0l3aOVz5mb9l+SE*)wnTF4?_HPVa)nHDqx%fnm`}g@69;>37e$ zZ!trG{qzgBwI48y9Q1neD|Q2R`7!f@&%^#kpMfz3(07&(p#?j-gB|UnWeV)a9}c($ zfWZ-CzJguR=QhLcT{2dTg}I8$=m$7!^o9~2*c1B}3M)Udr`3r4_g%P#}I zn6_Ywsel6BXayMZ6jKe1&!eS3AsrP0Mw&yY94$tdjJjn1c9e`yvJLu>G|2q_TaXW6 z^rxqZG=zXgDW-tp-vyY+&n2S_o>atq0d*-u0gQ$ypcerdUKmFO79ao5k_U!aXu0b_ z4gf}@hYKD&1U)*N`U`viMGRwC(?0+8+0$Qt{PEY$jsdSXytK0Z+~phRF5em$nQQMJ zYwH|oX&Y{7oGi}nO$u))Od2XmnaEBV4~gwHMYOA<8xYHzkF$gC1^R8tOltz;h}h6-cGL$3m4}7pg@#2rTxO+;eeX*sf=k5` zwNh;|n7cZC_@xC^LuMgTn}qh&`Q|TUXyQFfcJa zy*xd)I==*rt5hTv-qD5r z@ulwJIlw0MOqn+#F(bdcyrGl6TwK$_?ypf%-%0mHZ10`u8k}kGn`-NyZ0s7YZ0b%( z&)dIt|D@F54vxz|+gRDygLRf46^DnPEWa|9|ax3s>jwu8c4)-%&Nu)tq`*wH`VJ+cgj^-rvWVH1lN=v*QgwzPS3Vg35z#tpPH%a@0z zc3OL8%4&MD3+plqs7wvZ(f~Wy*M_rS=-nf8kyn=jBRWk z8W>xdTRIPJjj_+b)+T4RCuer%7SDru@Wqvj>s!}1cCM{&UtQU_IJdNiKXPWy*`Tn* z^sJJGroQRf&Gya_quI}3aK*=G-oE|nwd=QRHh+`J4Tf1P9+lc463YcbsZb=B%G3gZ z5^r%tBE3Xrkt^**B@JS!S+4Q(1SQ>m`0@181-mDvxnu0#|I@#wpU#yiER8K=!{ZxL zrFDJ#(%X-}^adqLTeY;ZMr7`!ZOnpjYpT;txvyJKP<3{I%$unc~E;|EO z?f&yN_n_HX>ki6o>6v)?>pyI@A zzJN|+x8C6Q6Ec1WBcm<>>^s2bD6!z66d{dg7=i65y5LWLVBBIW9Neg$L5s^DoKyt8 zzW@Gv(nGu|LIA@?j}`@dl6HUID9_tLmdm5X=7<0-P2@^m8drE=L{t8d*byF*3Dc>D zwpup80fsWv{D_+rFV0O|oh;LxwX{+%m-dG?Qk)XVR6ao-TmqPEF5`jn7=V zeC?x;KNSk0r))-xzu6k(35ZQfE3mu6#BwwH)Inwu$jkz{NhCKp{lcSS)0G;#SZWlA zG!mJPS zp3bk#D{F$RoLjp%zkX?f`-Nx#jPonAOZ)vJ3k|J<1EWjRi~I8{7ooidMwU8yCWgmX z#-}!+z(}+~cx~_9-rBpdxqE$W>+YOkurr^);c`EKz#o+CZZ- zHmA7#;oE<1>z&QWF8k+y{U5JC{$gTw$7BhNiA(?KZ~t0U+A5LT@FvMesPYjgfG%H= z%ohNI2ooy=V!2QXDW(=mpu>y;vDsH>l}J5ud5A(0qfn;G6=&p%0-5rxTvemgG%7Sr zaxHgp2fIeGo6}*#dUikiQIp@K$#2%`zvu{9c6euPo_@2d)ITiyo2P&K?ghL5@AofW zeE;nEk1u}VPPZ@}hL+n07{ho+7u&)Q*gSvYZji{moyMDL?lccGY$4RbUhXQKvAfYT z0v*aPewQa!5ws{tF@l#E;F3Rl{{#R-#4+sm=Lx_2?mO(!Jg(Sw&cTDvP{3zkQ~<+X zO!Z`xgdyg3^52hA1_3QadDv0;#bAbm|1BhFF2&SRl3HZYQb0p6{1MURABaYgq)`~U zWWVeF&bWmS9v#mIo+s`JVn#_Ab!muSiUMRXiyJ>c7jNvDKl0pD7lt8p$*7VC63+jdPQofvb<1Te>$Ks zpl8*2`(D614+1{k3VO4~@-hcca)ELJwOM7ek?DSk(N~+0dve_ISk2f?V65I+2j_`8_ zsFZqvKz!y*{^iRzXXjRiM<)L3fBS#+NorOK!`x$Mr+n7GsBm93B8|6C$Bh@=*g z%;YOl>kRhTgp8d0iko*|FXQx$Ol1{H4RWG#X&DH3;;u5HrP#in^9*) z%d0W&gR$_$gtXGqs*aBS;o<3t>80uU)#>@Q>G`esW%$ng%0B2dv%HHIqH1Vlp|g8@ zWNhjD#k+G$yB$5_RgK-JG73_%iXoWju6^Lv(Bv{0HaxY`H84}t)R&l?Z?pubWmnX< zj&u($boS3d9ua9kozB6TzOjX#QFePLv~B$pHLZQw#nm=XsMg{a9+z5N*#xb~zHZeu z-rPOW(hY`9)ie+1pKVRfDk-dJhSI`1ShJ?3zr4N+PAdalpd+Ln9s&S^L_@vC>@QMS zLLyRYn}@pw7Wzk5!7ykqC@?T=V0?XGasvts02`Rx9GgD}fYFIWqSxxqo%OwYYrA(h z&)r|!y}i0~YkvJQu$q>0wytexa&eE*YvVGtOIueLH?J&jUt8O|xwLs@ZuKHlW*b)^ z%SNX+D{8tTV$yR8s=NDV#wIrwmM=hiZSCILJ$GmK{B4M^r8V~Z*GXylkY70kRjnPv z-My1_4LvH2L#eVA71eO}i!y68_U7ikh=@~qy`rH`;^smO#8E`utBnu5aB?Y5jy! zqpwKo>#Okb!Lkr`XqiLaF_$RVW%?i`yW721B+^NwMv25MmAVuPU@T6dOjoK3<%%+; zx<;<91;bRj7Nx#TZS2&TdbQ?0y>&ou8v?_0j!}ba(&Cx7`Oi80Cr!>egFW@Zn;(7i zlqs<9o;`;G`wj|%yE88_>?peEb8!UFTu@*?Vh`i)@QV?)_i)BUr3OgEOL3EE! z;h!7Cl*A)ao;MmoKvO7&(L~;8h@NBq`KA^|L+E1kFbUioQ0geX;9M2U!_ftW*sJD< zq@$X{>CE^Cf*o`Z6&RwQemOXW_~$RbNleTL35lMXTDo}k_Wa6LN6$!0$53G%Xmg}rLvH*~VcJaUsfnP-K2un;D!N*mS*owhv(_b~b-LFsx*py4d;ezW<5B;& zOY9%y_`jLpf8K0a5*ug4h8~5v*6KVP99$S0k`fqX*J-69#x0?*2mq5y6>g`W!{(w> zi0{4oeqBvnb!ByZZCy)K^W^wgY;?3ntx>BrDy3GT&`7xJK74&8v9Sq{9=*A`vfV#0 z_U)4&$}6fQQYGFsvr~vBcX(7%Lv#Pw#LC0h-b+r+lE|$Rxml?;z5D*hc6X>>P^`ln zW%Y~D7(FVzTW<-_82#jOqfn?4_{xO>nL@7BsEzDXF`WhIGH6*#3_}Z~*~~7N!yj5O zCMGc@HS6rzy6&Elk@30dxixla#=`o{BKz4Cplfz{4?1jSX?J>VYiee5Zee$O_r}1; zJj6j(L8UVwN^JsZ(kmOf_%Cunt^r_UGaJxb4b4M^CC%lvy+B3Z$VzL^H0YIowz0UX zwW6ULTmfBr$L8VPBeSi2<25aP$yr4@tH(#G4T?-Gt!i#;8*c5MZ0(t>ZySN)Y3`bY zH+GC+E*$9M&KVA4wV33bxYWF&%2vRvxqGa8c&=}35#BSh0G^fBbcDvFnH(WSXIomk zr$Mj5@pT+kd*56~|2!B55jHrrIWoHg`2`=G+6Kd*!={%n^YRM-+dBUczIpB*e0BH6 z#KKN}`_RbD#_THO*JYqdyY1-E(*0dl&9Nf#EGeRb8hyI4{{o$WH0SOX?#Ydz*3GL-0Won6p{a~h8tdWTH60t=p^_R&bWr|d(ELSEkmC4KH%36iG zL8WU}F@|+(Ox;>DhcWxG);^?njhj6)cK>OIXVU3uwfSXjpTGI__n;R87;|<`kX=uY zJ(#iTkYOan&}E;KvCqcf2Uj6tpXN6a>>&ry;V#DqF!~-C=ymWJ7{Q5GQD_NiJj38r z1}D7z_&s+Ll9OK;1tExha7@9%N1;U|pd@YL)aAyR@x^=+n>85~^M=epbXY?HwJ4?- zM)bn*uw&zlYK|H*ctix${?0H3EzP18V0@ke`h)U$6r-gsjJkY`_UI_ZG#$ogU`L-V zbkQP10kxE&0EQSw0*JbN5=JoxnuBwIToSzlL=lh(V@J4kFmxC*qeb{KI2I)1@&}KF zL&ONX*B1Ax<^0#D&wjah@rIu#sHnL7+_`J#&R^>toNDVDX=)p3Zk?)coXb5k>9w{b z1b62rkL8}4NQfPEhxO{in$)qChTL*vWsbKlvTodZ<&NK*4+1~f3xBJ{{kYig!_0tt zq3#WpVNs+X5gXg|j%v5JEF>&DG%VEN(8=Xu0njBD`ua#jVw1s`o|^8kx(qs##bk|% zihbj?H{X8qo#DZezMlT6iOI$Jg_4pIgTWvci$&~SQ&Oc;Q(fKg{(GOy&#i22?%%p` z@BaNqa=BJ2)yn01yFD;HEq`=$abx$|%EqM|w_htMtC7lWGNsLE4GfD)vH3+9o#9GT zfL!k5>FI4v^ytQY%cX(lNe6@FYsiSWWoEV$g>Fl3xXdi=Yat6lu zhb3kfR+Ut@)wK_H0(%4O8^Jw8a}ZnQwVhFkS$0oEPEk#DV=w5{(lt@vI$Yh@U)wTL z*E-tNIoa0Bra)bROaNGI+dz75d2MUIRO<+iPA{+TY3-fr8(Z!kh5}=kjSNhz_KYkx zc8--*cQ&+*42-P}O>BT+IJWBM!TOG|_JO(Xk)^{=zo5O&jm_@?X7I_S^8nb&_H8)i z7XfTz9{~YucVuQ0(1N;}Te~#5xZg9p*w6t*I8e)d;S7g?(e?dXJD2WnUj+7UFRWdH z0)w>j2FLdf&O?4}@7>-zfA8GI2m2T9BVOIO+&?%Qmyj6}ad7QMcmLGstWuf6s#LS{ z#%i_o%P+sVaN+v)_T}vCGK0a*zWBwi-C)`aG3a&7SA0^Sl*mj%p>|{YYD|1C=p~c~ zij-jr<0*wDRc1<(=%Qu%2$?QKp%1NY9J_S$@y&Z5^$spGxi8jX`bl3I0gQ8*uRzM{ zFbk zJzD#q&N-rYjaococF%}^P?y~=bMO3(Z+>|39s2-`-DTr@C_S~kiV zwrm*K06QAMKrFrhMqL;RsHI9uQVqp08l{->{LT)eVi^0|aHkOA=wgVkM3YIT9c2_f`;6CFHV86m+aqu`0=NL z!m~la5#!@?moD8}SlnvwX7a1CWwg0B1Y8 z3FZ32GGk?Wbff>|p8Nho%e!}+@5~3hRpa+gj`z*Ppi5TkvPeH8H1xKd6|?HrhD z>Kv|W>}J17pxS!;_nBJu_7e{m@DAY56B4`hbX}^7<}FC7=ipYVI0q z>z(ZApKj}&sBP{)Thmd~)Ypy-yU)caGT8++d8JL&O#s6%Py}>!4b659v0EBqk?f)x z|Ih@1!W^GgP~F@Q`PDzZ)HyiY);EQ=Z;UZ)Xo~%~C5~rgY6}jm)-(+TMWuzto`wYN z7?|rBT^X9*8lBq(y}+>Pm5ZR)#KO6mBO+{L|Nhqb2V3XwgJFxCS4L;In9SM)y)HnF zHFuAf)ph{V@PhItPHVO`b&X9g?{A#DwR`!&{^f`8t-V`glk466vs1G>Al8M;ub#j3 z5DtuO?cSQ6-zg}n4GN7<$tY}W9q1XDZtWZ~+q?#|AEbF|M!v@rE|ckkgQFdeV58A3 zlj%ibCA1fT1egK9UO9;usYWU{C#M!n&F+chE}`7(D-RZH66A(7g(*#}PY`RPMA|T^ zK2)X)(^{g#;__R%XYKANfkf{kRQm`OJ_2^;@ORvz4BhGDcP^D_L=vr7g5xnrq-L4S zPbLeINMhu&G^MgYsVrBis#WS*jlLBC(-_+|=1!fhM`!B;!}N|}vwO(qH{=QEusSnd zfBVxXPk;I01^269>{f^DYC~cb?Er_wIyfssJj4D7sRjjx9p%@*VXHaVMraR#(Z+=& z0)B@%xQK%QMyx^r4)M5xgGNW43eX~EWvJjk20J{>NM#rW46yl<-XbudOECrCfB*f_ zBq=b8kLF>BdE>jN;f>qF*}e=zKm{QVlT1t`~jelpf0tIAz{&x%FnWGp1-%>!vKkHP6E@db12GKuJ1sGTK@1@mjMhB|8DE&yZ0W2g~z6(=WOp?+1bA~Fg(-RIn>xX*wi}N)I6V_ z(eH7z1UXwXVuuQn$CIN6y+K{3pbk}dwI;n>Uz~5Nh&$cw+Pvw0@X++u71!&1);CLR zZ>GENhkJIkmPLVaNT6%dI?6rX;*ijskccq5)1XvCbqR$+fk4E4`lSgAiA+gKKb4p? zKew2hQ-F*{rG*p=4GufMf8m?2zun#0Ut8PQ*x1_JJGZs9Q&w7$ms>Q5eRO$qZg%;{ zAD-vt7U}gismyRXt0XZgTP8Clr{sV8-$0OpZvs zGujiA8=Q1DAfd<+o@Nh-Ywj49Dva2w)LOUE=+&qlG8y&`qf}}Ti8S2D_&TM+q)}P) zI@_UJ*){iitI@zd7_*q2e(pf-;*OZqlJdbil=K}p}ut_E59l%CS52q zA!ukHX1CMrp8~z=+lJr>I{Kynt@d8lb`8w7^-O_%bTuuBxf8thV!PT~|dzPiaj@L3wjtNkie;7BF~e<1zqt?#ip@uRgkX^|cF^ zAMKsLzkBX3=ymbRBVrf;w!C(^wPQ3mEHOGRy|%H3?vEUsn5EX)9PZ$=6%A){Oa1-B zwOXqVZ$}I+rP3r4v3nlEK`(IS#7PnS*h!H{s*%VHk3alcXATo91AJw{0#%H}kS)`n zk?PU}>S(bZ9wE_%OZ8DIYg~3|XH0UDP-gKFX-^20$9)(GeS9VGlRjc_3yTxIkRgEa zEu52L(0>4!RxH)wp~W(*Na7N+3lw9N>THFwRHd#~X=+plI;=@!Y*U-tb=GdZz2D#% zG`j~Ke*J#lMwd6^yQlx*$&Wv?8zcf?+z)*{W7l!8_pn4SzD4E;z@9(*=>@y^5DJWK zC)jG3VFTdUrqG0?Kim7|lXcp0thYfebdywjY958Sc^uocg z;P5&NjQ-oNZPBuPfMwCL%0nDd8I14pEtSEz@dHB_k4SkKH;L6B^bg@g0mXP?j^<&= z@G)P8m@lS)FQb5r&-1SXGJc4AJM%Lp!I3)(FuF8@&+q`FiFo~R&dMlHudsi6U^pP= z+}kcZ13y0fsj0cc?H4>WIW4A zJraG5&968hATKmDB_P<7cMOA2}C-n+!7EJ?+uKzIzv1GF}oM;O-yfvL?(-scBL`c;CCu8u_7#^F*v2h z5phOmkCLgJ<&|w?lWT7OIJv^ERM^!jheB?ZN=+iM&PS;7^;Lpo3Yig7>_Cla*;O8N zu_9WX*34hu0g^>VCg$XnG&FVh4^ECxEltg?PE0RP&ThboUQC2>02`fN8<|=ko7tFJ z*y-$_ZfGA&J5y?M25Zco=u=r$4Lz;h7Y5CW@v zaJHputgdCSq@uOFrn9!Gzp;G;&;s^Q3~%q9u4@@8t?r17&lag{5eZq<%>zWQj)7Tt z_wd5t76B5Y>$()`B3MI30su)|9^ZZB?Jomkjg+Pb>7 zcXM_3=J@<>b@Ncq$TEV7`MuHE?cR~)+Lqzcs*Zv(_CsX@<11U|?_Rj}+NB$BT)Xx5 zwVUr=yZO$Q8*g5@{>J5NufqW_s4*zBxKn2!_=`&Gd-|vPhGt63n-m&bP-xt#lru5$ z>9g}20|S$4Je3-YT5SO{h$7_d(=QHSOgxEIy#v$bHQhpmTObegkwr-LX##DoM4vBG zr-(ERU?N?(SQjDIMR}r%QuCV?#sD9wfziuXe%wcL+(+c&3x9?GdVy!a z7%4MSV{{C30#hVbvHMp^bnLoWsY59Biscb<^=Y}XM5d^cDytM~FsvR7Q|p_RhGvba zU2EymT6@gyeut;q<}PXJn)&LSF%@!?4+K z`wjcF9a{&#O(CF|_A$h?z5K&>-+lW%-AxKI>H8<7rI>S4j1h>?jCl3)%V0vRTF5Fh9>820z0JmUk}xY_pqTWnwy)44$|i8O)gP<1hM9RdRd zXwf~$(AJEFw{w@Qfzc{*-p)Q|+QI|Jljy_NPQ;6peh9ojH z#HzV~H*~2C@zJN8y1Y>yhCIIl7hs67>JV2i>2);2`OAl(>7d!shr??4htbQF{MoZ# zKmO#4n7E|qxa4z}Zf`?=jm$!RHMR6NG>>$2ubn>A>vAe+Vb4KZG7W~^|ev!qY~>IXFPXfyt`KGyhJ}N)V64?<$m76 zz@Y5lkZ^}fuT)7z?BYX_Kni+s_d8&%)#5spm=PD7LU)1(10ZDp2DQpyG@6}GcW-Y$ z{+SofUr9^N1i(y2n?_^2a^>cq|MFLj&aBc|L}HChZn}Q!4Wl_oEValK4wcrUF?v;c z&zXYi{F3^p#O#jl$^4Qgg&|PuI^|8Qh|TK?OKWt7=PC4IT2n|)QLV`ybhf7JR9eyE z@*eiMGr849Q;=L~1sVlHtx%*>C@oP@r(`l6Ha-qxCIT39t%Y}x%whM0hD4o8Oe-iT zZ)xcn9-bZ>pP!goo19*UCYu7u*jYsOO{UR__2Eh8gX61EOLeXNDOtq^d!RsWJe66< zZYs}R%g%i!)Zf@Sf|wInQ-BuxUNgHB?o@s2F!uML(Bzo-GexD%H4Xhuos*pd3q1hd z;3B-OZ>F-bFE%CL<{w#7-PY1G-aX9jBH!Kz{Wsm(Gu<^b3mrB(yEQhqJwCsKwr^}1 zY%3^l3X40fvjv~ZfWTUS3WWBWnA-!rW|uF{ty~(N-Ujm^=|DSZskya_6AQb&qYDik z!;o~iyPNgwr|d@US8h1LFW?T6Z8Ayb9)#9+mJ^A zS97U*aK5~@8w#?uYjSJv7I1a-_B+?_zIXlJ``7P1zH#sIwcBq4X_s%lxqtcL%I4LI znvS5bQ|VbH9o=Jn12avn{Z>byLS-&2tl&N+HOS@q;^Hd2$xted5-DAIC<8X+a*arI z0I=geVxdgy7Z`o})en5-4qs(}P!TRtC&?{&Qe%Ngf7(|WFN6ZqML~gybP+;L#F_Ge zkl4JFQuA@K_Jpqj@(YWc@D%}FnCU41*SwsePqJq0A|e`HSUo za`hRRqFAP=l&k8LntIM_6;NaPdbPeuYiu=GI_>Trmw%HtwD8q;{`mPf-~aW;=TDvj zVC)JGc0Uew72?5}Lvki1uz_Gd!LITP{kRhQ?iY3pZcjSco%qd!Vi?7I`w!p;hY;>p z!45tTl2Hw12m^4I!T*2%}vMryZ9~pI75qA{{9THu0$d2j|B>Y77cj6!iUBHf$d-Q>h zwiLinMvK7sBpLFwq4NPHQO3tG8bZrWVhp1^J##R6A`u`-qm)F8dRB3`0v}+M3iudC zF)czy1zZM?Z~!U02y>OrYJU%h&9~jou+I{ZQt@-60 z_UTvqU}N(@Q`=Bg{Zv>)i`CTTHg=y18O})CfZ zT65sV>u)S?UYF`TdcQbVOksFtQ*dfsKw^c(KgH>v5TBGYI6T)kIGdAK?sNt8#`x6c@FWvqLldh5V@sU_Q&o-K@o9Pfq4A})ZLNJ1 zKnr+N)zo{ot`lv2`w+O*H89gNG}k*kkD#q*qNZseA+=DW_gAQ0u?aa{d#MoSmaqXo2fFTJ{V`4QU9bN7}uuY*_!CKt~2kFAYNZv$o<`*#-BF7^&D zlvQ`sH1=)o-U6tu-+S-&!;g4?-MI7aRgPi17w`9vF2^QjN5^M2w+{^r&-eCECnlfa zzDJ=eJzFD{t9=AgNUMN=2)8>}p)iQWYQlz0u2Cp;3WXkm%vUJ)5z3WX+v@gJhc{lR z^7tx)gsK>+K2vTkkQ#FYniOAEj8GFL(lUC%rN-!*j@c7p%L$?Gn6C-|J9ZNCOAG~e z{Dk1dNgRhx;2^7`7K~4>{P!Xo!rJvd_R6KbZC+v``D@`9w+!F*bTQ z0^X^H^5j&>2EO|i9ikUGx|Bi7c*g3O0%PYeIRhSkx9Kx7a7IJ;XHY=#(He@GAwCp^ zgebIp0cOF_r9A$G6rkm%zAQt_D23=YRqj@)Xc0b@`Sm zF~mJnFOk3-M)?3k)TJ7}cFE39z64{O4~|)3TytPpxh4?VP_lFv{dteRDs&seL>vXTa@lwHdm-rmnQ`!R)w^ zgy>#xNRvLOP90IM&n(terg~}v+9qt5Za81PVR>`Tey2qDdY0osf_vX?nH6h?#fCjQ?#1io_a$JzrUBjV#?lY#=n zBO~J4+j`<+PswF!gMn@0Kgr?_2}~$7E!e%`BYv z5jlLNfxglpkupr83JZ_PUD~)=TGcZ!zM(Y-7o2U=*~65k0KGd}?@6?WpK(UzxgztN zL8*3kba{2#wHuF$imU$ffBx_P_#glCH{U(8J3^Ier&8s1`bGPB)(n8@)FvKal+^32W|PZq^AGTbr=(<8SGV`{OpJ^yOir$jj4h9j zuZ&Huk4U4!E*@PYB={)xrzk=e$s;j{G}Xa}d3I|pZgoZ_n1#Eio1qMEA4-a77k zT|B@#`)3;3Mo#Bc>P>-il`}iHy0LWx+6&x*z-sN8K?_zvQPEX}XaOn&5Lm@k?TH!1 zejy2YWetE0@{nJ2{W^SXZVRXb^D+x+dWM&Vr?zI6F9KSiSMTsLT}D4PyEDIjiN3A1 zx_biv!y;#jYaId6a=k0Fpc(+1S-AlDwYYU1^n$PN-2u9GEiZ|=_qNa9nOfMZYZjt90s+$i!xb^U(n-4y`_3(q6_unIc zoxl2MY2!*>Nh9c0P*OiUzBD?y(%9UuHMpb-qe!BSj7t3Mi$AAloWWa=h=>Hd^}&lr zh!-LE;geLRhAWgtrP?f!>trfpMoww}*pg7;5-I}(>PVqBMPVtBn({y|A61+{6(v-M z3pC*(Z6q)zGsl!PjQ&BOJ1Nv2^HCi;DFeVxK+O4yh+anlh87N10a_4z2;hV<_-_@M zNhtG56frVIwoFkZQ&cF_^-6UE0H$W#s#WXiHTnjSOlNE|n49f>wXsQc_ulyU?T-jx z&z?MchK>G*=ReW+zyL7X2adj-r7oO(LzI2fhHV=B?g69s$1vJSV0=LK58r?P1PJ-= z$v2!}Isgn~*rBw7^8iCYF*!24BTpnifJGPrxwDaA6?IVoS|LWuzDvwL8)G_*;{pQ% z4=0MzQWwS#QGg*D`UB1ppV$D=YF|G^^or*Ou?BkQw?zcpl7 z{gE=vLW{pI4Y4B5xGL5~o;NCk@dZbdWa#pF8bV7?8=r(7?b0X({IiZ01!R<@Jom!* zjeeq0f)@AU`MvN$%i)P7DdraY&BNhQ5YV!8TzHw%OBOHU-Q5d;LE%+3jpr|2Us&C0 zYU^ui8>nvRZfF@iTRjpQ(Q2`_nsx2LmX6HGfy|iU$jDB6NWD6^QWaln$j>uX#fQ{7 z#+U84ZkiumHb3e&-_19_mhQP7=~>a3CPk(miLq91EAs~A1qP)DhIq{ug+wl7=#l_n zBB25fX!-iU8NFmuoz3d+b_HuS5L?lw64L;%0B>2dzbLKhRhvT`L5V_@ zLtze4m_pUo2(3Lz=ZG>nA_IaG{R3l{*7vX9ygx8Bm62JJUs$uedQQl$1hdHG4x=$R zBI0y(be2SFlE{qEeCz`fUnwwrz$%Sd2jO)HFk%?+1}bYc7K7eywfKdGCgkLtZEWo6 z@1GhNm>n3L8y;OAW>*+8hYlN>TpgHP0>k>p8O9LwjW0q5RX6t~q!*aoVS0N|Qf6^w zeRp%`C;$ehOXqur7MeT9^NSmE3+w9|2YQFthgC!`x^BLud$N0IVQ6X{IDtZf12gUY zGu6!lK~bqfr8Pb+9{@vse4bs@J~Xv4v9LG23~99wZuO6?k4*2(uU&ydc!68F#Z5I$ zgIxpjU4sjlwX$=4`{KQ=3wOC|G4^r5ej)K1i??H72Fh%G|JM4syAWaX8&{XMZfxw` z*}m`q#5#BNbc6 z?mxc$>c?;}?A8MYuv_=vgZ$dLa1ShxOUlj6DeoVipPJho8e0qsNl>b-E>Bo!c!E}I zPe@1|8k)?^EVfwuAfp+*gbIn2U3p0AMa<|CQbEmnJlst~a@QEJXn z*b2pl%#+GEfjUN{i4qOAnyjwUh4tHy9{=&(kH7rr&tHA@2MmQ0&;o?dK7xl-x=j$h&ejEG=7vTWX9)tV>|nyrbJ8`GCrnRM`L;l`6L+) z!4Ts~rS{;7KkTB#vIw{s&4I>33m|cF>LrAzWv`JVD{zACfMi@f3%EQRpt)%IBcVsZ zAwPfd>$B&-{`mCg?|*nvR8;Blgw8K*ZtquqXbzqec8I+}5&&*^E^n>tMT zrZ89M>FD9qxWV9vR%1x5GOR?Al&>p1ZLNqnRcBe-v){a>eSObzw^4gP+x8&IbIxs_ zQ?NT9wks?ZcE7@apzOeqI6tphsga7MLV?)VM+EsL7OF)8wa`~1^i>Odlp>)H!nlu_qU`T9P zWm{eIgw~XxF{SIBS+3xMz_5bYr1H-GwF}oC7gzRK{Nk0SV3Rvqq;d)s4zbFGy+&yW zR2sb^g+*`jFDR<(?w@FA={4JfR9c5jX8huduZ2R5OlA>DOmd~eXbwzGD~6Tp}_QyEoqgId8_jmo6g+g+}p_;~JvvDV)1zVU(K zxxvwep|K^%g^>xsY?*x?Hnk4A^o%TmH&9D0J(HDl;AQmJS=`F;4BP-3FlhuubiK)fu+2vIYeHiK;Ss9t$hL6qej?V1hQEFQHBN9&A zy^;0pBLfqwz!ioDCpLyAH&He*zdyZnVQ%&E?8>FZjcf49#dCv`YtU^bSD4Wml2cOG z-aj?5unYMG2dKcXjdQo5$$CeZaO5<_~>GWB|IEIz&n>Z@q6O};Mz1Kg#``Tx>U;XsGr1Kyqf4!`tF<<*-r?sLYBqb!X1B%aRw#8)UBnETT#a`^+|~0k zp+t=-Hdn~_^jcParAX-%D7`{Wgw&iNwG~LMc|NKHUsV)@mrxtZIf8KZNthv8=a(KF zS9n~gIqsu)<%IaSkM!6{@v$TFi&_F0NwGtWF@P~{aS-(pNqxm~AF;w$tnrmNMY0H~ zB1J08lPOA-${K~dPNi&8DH}EFCbhazqiIm7t8|7ci>=1)F3T(JyZ_dwj~;*W&ZnP! z^3~UW{^7^JK7aPj^XK0^XWs+kezlTr)O#Sg=uIs-F$}vADKN4Z+~tVePJ{O46ztOk zJa*Rcr(f9bficn?qUa@rxGq4&qYL{!b@>eMR1e3#&n9x8a?xo?f&r~YL_rHjk^WQgN1?ZtQ?7$5x3uuoHP zw15te0u*q|FypyPqclVT#dzk>QUN7lY$k^Uv6q@%z?K+5z4c84m9-;bQB8VllS1EWF*HZ}cc(`UCB+T;g*9n{E9DV|%8YzX zahkU*pt{etf5mwFy7s}m?#@}ws~N6a(SB=s-@!XyRXdvj@ts7`( zmM`Lva!VWJdbdPlFRE-Ao?c(ty1Kf1gKhz}ynSuw(*51b4>r%=K^}q(UBsYQ-^fyS zUTt&R*!=3{_1)V57!=s~Yj4n5L;wseGN5mMS?lS%TEbXDS_uHQzIO)lR!b_|Ny23y&7VDx!x+tkRE;g;|4?fD{2Ooe*Upc|9#RscM zdlAF9lZOmiJiws9=wKMYL~>tpvBpPa5Jp%gwh`{X>?1LHw@d)zYF=K2Pk!({FdjwZzzisb-JHNfj_&^y zV88nTOok}#JS3fyBpzT2^1M@$Vob!gPC^962Qb8-$de~epwAFs|3#AaM~Yzp4^|)o z{ZAbagaWFe$K{DdjxJ?TL!(rN#c9VUNRS~WqfxYUJTN}_J3Bf`^+)qCTKVYiPX#c_ z(6R`qODzM+0g4z;D5lY)T?CZm7o;H$aDOKV5tcAQQ>dQG_y9>BNN~DwBAhSg>ye?y z!XaZ>D6nVGe*wUrKKrGmwL3gKeq>~3XaCB`_*`RaUvqPBT|;+6^Kf?FfXmaU);B5j z&302`d|+34On+Q-uOp;E6rts} zQmIkks}Kt0zCL21Kq?l=r4l7}6t5>R=~PN+P3g3Y&(n%;;DSIHCP~22?R=sSSRpR3Vh`fv5K@8lpOl}bo7 z3xuZE8=0C`P*u~}(KFsRG|Ne`MedU@plglub#gGHV_>Gfb*Q4Q8@Qr-_(J;Bw-4r& z*0Jj{+Q%TUu=PV%0XbtcI|E~DZ9OxU_5C_ah*ae$tL_Al04FeMV0;~wLsOe$bDPu4 z=cbmMG$cARDlxCIV*=f&#q&Vd(&qKG-P`cFwTn2UGsX4ES!Fn| z#my@aUf|Z$(*DfKd5nTvkX&Hc`RlL2_piRXzIStOS*&fo^KEAwpefQF< zL@Xj1;w!h`g@b2+C2$Lj!7CdEwl6$@ID_`O`QSs)3(x|($nU-W+3klPUcLSH)Z%t> zW>H4&*}lcW?i}d$l?eUE8PM`fUh!2Zpr{>L72XfSqmhVoa4$^AMS*qKobJ_CDJkZ zCDO8M=!NVoVqEUoo>zR8$9x#TIEMl|;1&Ul415*Wxanhw%X8=*68{ zaY z4&Wd(E9tmW8OnIIed~mb|MtKCkTMaFbt|RyGWySmy z92=`XvL;?vKo|bYEzIU}6PaO@D>#59TKX5fc+ToMfc^CGCtt+IC8ek5?(AGzT-k2x z8mw#St*-B=YwRnp9SDzZ)f?)y+7`XO!DX&X3~5h`>5d3*vjxX4b>*7n=BEBiz5GtL{%(?O(`}eisC&h_28FT0?q3iPlHm;wceo5Hja0<0-4OTy zODc&-FY+}BeJmn@NhY>hO~D$q6Y@(e*87~4ojf5qc|r*1J}Q&SB{G#v>2bKC!y@Bj zk}^`WLINXN8#~HNtNh(TUQfvB(|MP#-+S`IumAOb`#-1Wmc=TEMCpXa>gb)hc;j(+ zT%N%eIX-vZ8`S(wM(i?53vkE3BXLE8&^m;$LJ=|;wx_#%-sZ$w30Xq?jgZDWJ zNJ}BbNPa<0Dx^A|VJf9j0fxz-GJ!XPR%5f-0>dJbvvVtI8+$r?C;Ery`$w1IgOdmJ zLNGkNF*36WADmc&i0K_=Hz({IoPqpG%_%dwLi|D!^2=J9yQlic)}XF{9JG`3`@@r) z9es1TMU6Ry^=&=Vq`E+_?xCf&-r4S<#s2XnEIzw>X>sE!#1p^+m_el#oNY5YA{2UW zR$)DzxP$sZOBc99PSHuivAJz9Z~NjsbfMm`R8>wG6nt(Hesv4h#wmatcfWoS?2Y&)uWbiC6DDzJBlht9Kt`6olKm@(65$IJX?rl z^m^q4=p}yTxZv1vUmjq<6`edpOaWTr8JH>ny@WC!A#|8VD7J_s9`SSZ8{`&mI zw?Do377Tm-902f!ucw8--hMDam}gBES>2slVFLl-+D zwFfEAXcl+_@L&{sClQE*6b;cR1xLF_lSD7nqhNiezF?nzq2TWmlk)+AVcp%syL*?1$7Y+`dK;VjYU;b{ zn}_oXMr^JIwWeO9YS5~yy!N`3h>n!#j?j>1b3nB!q*RfZt<6n!6oluuy4LptZe4a> zn=)N4)!fRoUX8Xdnzds}L#NbKXRx332Av5EPVo=&nr#}nT8y`uJ`$)a$SB$flw)x+4Tme!4wu4nvs;A z5Sfq=5ucNho1S#KxuIis_wq-de)av+zyF7S{x98qBXX5XEH_Or?JsZN4v0MM2t4Ht zPq%sF{3B1>y$MQvkVx+I6`6cRdb!%3TTs`~+#ep55*?Qw7!v0VjE#-YZ0{U%d!qEl z0JYXnu5b;HtW8esq@?Bd4~#y3@1v&X&PR{l85o#W$gL`+L#uU`mewyWZYq`flP4u7 zPfGDm5Q`K+f#FgK6NoA~0H#w&HBe)K7SIKT$)xPIjc^4prn5O*?8f;;CEOXsp@rUI z=&;qniPhoBRqi{^Tcguk02qJ)sRW1a=^C1^Z5;}WJ1y1OWIAVNL3Mlo47ddaMgnVe zdYitmH8io&JG=}{HnVgA8Sn|ZD!ZtzqM;YC=^I-n4nat*?cGE>I=h7-S5Umw6V)*= z3+6!&0bSFWzHoka&fPnA<+Urf-nn-7z3cbizwz+H>kmFa zd;8JHoaFk9L)V{Pd-u{tAfg(gG4;0EhVwJy06(m-NiPT|2C3hW%Fo+J=t% zFzxlq3E}aR>>B!`m(lau3*6#eh_`nFc3x2^R`?2)zCyJ?q!US;B1woy7AKLV%jJbK z*;$#aN-nEq+Dp}-(ln}djVf)u&e&*kG&(({?S1Q)@4gH9_2x&PJ^t+TPrv^9FF!v0 z_QlVPVK3P25Fx^z{rt<*7wo%VP!^yLr!N@BI0&&%%@2rmxaYtSvu%homd94Zp^GOO zHg_XOafha>hO*(oM=Zwh~YGsF@wAE5OhL7EAvC}qZv$R^&CQ|3&R#k zMlqi`8W800F9*{Y)($5j#!@_)*dwB4XJ47V06kF2rf|W*`Zxy6Vkr=eGt_VZgCT=m z8AJT7J=hL?$RRfU@Te$5qer{{(-yOic6sBw2(SoRJeSncvrGRFJfG|v!dxE3d=1&r z7*9XC?4`j?=ZC-^0vPYqA-tD&RihVY`~^YEXaKl}OF)1QBQ z`tx7D`YtssJ3b+0XZOm=`hG|EaARw4ZDV&$Ltl0MM09MI&d{XSwdu7DI!#%SUv+9s zds1|3U{IYgph6j%uTIG@<|hW^2R01a&Ry`kwd=jqW4WAfx|ZzR4X{sYGy`&dv&>X( zaufsvpAHF)cKe$(da0OQe<<*kiG>=e*d!8|1wM9xuUjCn8x0X*VVMqRlt$;4$V>u( z>f}k;@neExulRsr$B+4(JbpqZ5}VZ;lTu~U=sb2;YM+PVUU;oGd z`@j6_|MOq|^?(2V+28%VF-ncw8=SCz_0^D=tgzTK2783f6K`@xYph{fOPEp@D3m!* z_!>?M3}TrzJSrUmC^X{KsgyJEr!qsrPK8INWMr0xge8MsGKE7bbHv2v+ME$uz5C6# zKa|N08m&vKbHDfg7ZRynuCU19a&tmr=4YS%IVm|40Q2>g3x)E8gw)Zo>G=3$s4=)q zs^$Vch;^XDfH9elIbxMrXK?xlMy6&I;Jtr)&qVL={NVWV@YL$a^!nKB*4Qljaxq=n zKDD$rvA8obyU{iE&|}Okfx|1lhE@dt+*8zpZb&scRf;TiL$8wtH)S?ef^{ zPS@Z94g&%UoP!QKckK~0*7@tNAs(OKK2uz)Hv7xwKo8;Td#g}^VN@TzxK(U*FOcK zz%4@8>yQ7!1MJmzzI^c3pYFW&$>#p8?EI>PwEV7tnW=^Cp^4?poUHr-E|qE2YLm+^#O4T&O~|@%_0_Y7;B{C7KA4I!dIC5gB5kz|{8m)}9$CuoJ#g z9$=)v$N?}qi%94?qQJOo5k(3gq0&dB_7xe05|2a{C6OmfWSKH~G31wAUZYUdE8(ho zb_t@cUTcz4!4upML(~mw*1^+b7>Veg5S6Pv1WO>AM%) z?=o`$dxp2U9I=Q!KeIcdvhCtvZ=%hOgBE=Pf`B(R%FZY<=YEgrXUsx1x(5JbTlOKh zfR>{H@(4(2F~A%dr7pF60i0Gtk^(rAzzGdeJvpsU(&vCThsHtSfK@PL2o?Mg8IqJI zV-Px2R3yUiCEF$@{}KY{R|<&u02H}&9P*!bxbYupD(tiZL%Pu+Y^#W4Uz6d41LY zV!iE3mhEby|Ax~!BG+|E^|dNXq0OBg5S$bo66A2J6&kTnCKSkozACZEAd@)6LWfZ3 zC-C(b3f(GIh}{wI?@e;Lqt#lMSfuy$Rh~F50>cPkCtf*@_p1iE!mL#3WpWdgn!yy} zADEhul$VvCotZz-KlaBzemOe6=<<)znuDbZ=b3`q_P*)FjN-7^(>jw!s&pvy0aCS} zSn0ys>f=JwaUY|P&?-~9!y?mzL*nBTPFGYl)zxdOLp?2K5^M+8&ZZ59XTmSRF{%>-H&S3Hfbft2$LS;3WoISlGJA0SR78iXcfABV6 z#Qk1|Od|)zWIFm73>c#T&i#Uh8beB@(QNSxk4nuiu4!r?>>ZgKV83s7o9sS>pd*wM00tmIW+4MmK}ZqOz%vNGtiqb1 zsdXF)RJXYj^K#sRJH`Xp_~3e6cD;tO_?eB|9qBV|$;+h`2e>j#s26~+ofnFrS;B*#|=N2D8 zdm%XKEAI3@;-72Q5!5 zZm0Q;@S-mJ5BEtJ)$?;P_76;caaSSoXaQ7+Mif(*^cEatG=yTp1G+R3Ejh(#QGkG9 z=@4URX_UGYA8f~5F*bb;NzCZ-4FpJ19weifH)MX3KXOtLPJ2C#Pz_u6@Wdc?UK)ZS zi53|ef?+xx6&)TNNz~9N)lk+T~>Yg9tRDcf9@sl5?yej8aMQES(-vdtI;}m*-;mU!$VBx2jB>vfr2am!+!bh z$6rg%RtJa0PS34vY+r8c8fj?ht7-17ZW^j-o=HgVGMO9Hs#b-pR;4I5>GR^E8dGB1 zVj^1Xo(heBfif&hm!59Pi;pUH%&z%g-M8JCwqHDJzMO8o7~@(t+Xkh^R*Ak!Yb)>s zo(>F&3kY->t#YYKB$NvUa*0n_fLXw{dA^?E-vinSI@O zX653{%BA6{t**hv{IXVWSZYKNjSURl$b;s(ey zP;G7Z_UsC~eFn$`OyVKvBq5X&5C!l6V0iSD>@vMQNMrF=DZ}LWxSLF-a9#(q3?pg#D=h319l2mQ=1bne73X za_inZYNMZ2V-rYC@hQb`zV~fd)LEr2RicX3+M?B#V42=2)>@SokHHn*F)$B}D^UlF zv{7P1tlShYHbxn|$)yc_?%-%BFm@Xb4q*KGL$ri3$^cq$PJXc;YX)ZgYmK!QXPwh~Hot6e|LU7JUVZ%VUC6J` zKK}DpUq1Q%+o$X&n4kXiE49yl{@b$yZn1Z_9K#sE*jB+^ror76iET1uh_REQ?2wg`p_S4VY-ROZ7fP|dTMNA^tAcL0Y4JG*uA&r6O2)ZZ<$L`OM5>bxk(V`y3 zzss}wL(ClI1Poo`5MsJC5ysUXT%HcYB5-<80uR+-h!0@gdM}NVWK=`z&`~jZar0=i zrh2S~mhYmaQ7WUDo)Q>8ms&DzwbMlftFt6(r7xJ9S0R;cR~%5tSL*W)ftO>R$$X^9AHvU)01-aJ)gw)S*} zEiW>?(y+d1y}oO@Helb+(O*un?1VaIw3Z%;u0d`nHahYGLs9~QqdZ=dn*DaAP#_fw z6cUk9DuVoSiUb~CAAcVJOym}d-2#zaAhL-h&@oPvCCF+E(WvZVp+?{#ysYGC^%fUiEjMP-dbsqsugi!H{P<~vb5i9Ltg?nP|f>0SC(MHP+@iIe&oB9bb>X9UsGJ2rXjvA=9D!0yEIUsElTj{oB>3%c{9;odP5gqeYBAJr!`14uD4) z3TOpBLtV^5Ovgh248MMkPOmH_G#dF0Bk>-6P-6 z0Ki`0T^RS}<&N$FZ*b)3B^esVw-V4%XsOOeZ^xNRhn8v z+6tvH&+f_$2u=wM4zk*{QiVhy7O^`>DWqbPOym&xx`e*|0^a~%U#~#O80IT<`UtE( zzD8f6K_oG%)DElJYt%bsQVqx_@(~G+pA;NBE;)YOAQBX&ByP`6T2)GmMyFG#WI~xj zsb8OCNiOiK>)ZEZKC|BFvfw5YnM{n`2Y+s8`EKulzu3v(M6<~J`b?Oa*dy0o}`X?6d`%I?jj?Hkie7kY-5iz_?LuBf2M45%^a zt;Nmj(<>Lp=J!VDcEPaOwacq}x7W|z1<9bjHumpAgbhrrm)CdMyy1SKan0RhAmz%= zb?^obN&#bgR~{~HUF{uR0_Si5=)yP8-&x$ef}^5hltG6vb@lLlH~qb>}44n|)B3=I&1mK+%#R5VK9 zp&`Buqx>us@BtswIy9G7qnNr>KpD^iEn=2O<>9Aa2%bE7f|fEoz^J8d8uoJ2Kco%; zjQJr0xHZ@;%J4~g6h5FKejOYYTKv_im_`w!CnmYyv^)Yc4wjtJ6nfE6_h|m;n*56u zPTc?D$Dcm?{4X)_$*CDRcqcqPzuC|}zyQ|RQ{6aNP&(uvQfaiD)oRZwRe3T+d}MUt z%G#~8^v1Z@dQU*P!Cfd1$X3T@nKG08vi#eIox7WsON++c8pD33*Ny-yQ?c9yM9U`g281ck;$MJJs;onKa3-_tYJ(=*x8J{l38k`R{@7?3bFu`ZODMKY%d*i(9xYOgo= zRCG+r|Mma*|8DGEYH03`iBHSQE+{B0S7|L8y)_^>{If5=ic3h5DYWQ@MaJKM_^;HOkDo%=-Wm4|S4o-wIjHyh#gJD{u!(CMo9FI9fh}%a8yH{DKieeHTJ?^=w!W#kwTlo{aHuP2EWimm?BdNgkXhfq1$04U z(Zz=Y6RT-C70ulfR7N@s4oX33Vb=8Wequ&JLV7;vb?Mfd$lrMI9wXxAhZnEE0d(Da z?bA0N|K+uJz68l0z5OR>vYm?$TYF~g{&C5f<&z8N05Hfh(Ch6Fzk!2cpcmxV_Js%K z^}YS0%fpjvgJa8mBTJ`qD^xm{RB3?%1HA%66P%uKwazS-siCxdgzUzH1Tc2}q1F-* z9OWMv;qVI%3X8vd{nha3RF{9m{ObAcq51o7eBM2@>IuzO8>1zvAd$*_OsG8OEBSXP z#eWbm1$I(w^p)B*rf{VpN~(qb-TBgPhZ-D{BL@Gl|NwkzC!vk@Jhw$T$ z=O8|UJqlo$OIN+bn(x@s{jXselckiNq zU|47G@cQ<}zM+}=mj0T??#jBZ%DTSP)3r|jOuac(sY+C-63o_^?Y&zwbNeZ2_0h3) z4sWs1lPeEQHJ&{LY-dc0+PFS}ptovDxomjtFKhJ>HSue8`80_hO{z=|| zNIyTbR?Gc%CHq#gRIE|RYyg-@;1Kw@eSQ3Wef>|I^gHR}K5^1{!pC;f$8`LJ_SgyK zu@efPlXC9vh+3n;q1RdEQngqh5%~y(CxsIB3+)1>5K2wswAdv0AOA_Qz=z#jQNn!` zpO~B*n{cMCaUeW89RzWD6RhqSr7l1scZxZ5i6l0$#1<5il$287@kXCY$u20Yh>T2( zj5yWWHt^{mzpbh1@_3?h^J-F3i$+FQq%x~eY85FQB85|?@-te4s%u*Q_y6<%8XTKD zeWpNXw0`i>AGLb3Qe#kP^m>!!=fD5`%dftfoSnBiTne>TuFz&>6+L|Tj@23<6dD8q zosW;&$CrKmSu9qo)h3PFO!7;mL~J=g7hGpm>uh?npTjTQKQtlgRL+^=`nJAlD4v-$ zC@^*wabfH7^6u4@z3XfHci;dLoW8R)wRj#pLp-%~VQ^|Qzq~CpF8fSLQ}5U+q}bg0 z71Tq10Rw2ku>SFtq|B1+qT0#DeIgcp*^9oIj2Og%asr&L-+v5%(P(y2oyiq$^+dJw zOdR*4~qGXM+$q}$B$`K@zz&s}-#+MUP5uy;QE=Jj{~ z3+aG-c1$O_<&#vElzqVz#dw6kjes_F! zvwvivv28?W4iL-DO0C1~jq(qQh5H3W8q5xfTnm7)OEwPgItXCMRYtoj(B%oSIs&@- zCTbeGR60juO75kbZ(X_lPHaligSWm6i7GSN)1~SNf!uvepn1hd_KJ_>6@lUe0Zd|- zYXcSfNSQuXVT=onFU=}x6)3I81d3PKuQ>~j`>@Zw04flRKZQsaZoq#Bu#*C%uShEt zJH(POp(sHl&X7tA<#KlG4Y|Bpsf7HhQL7sOFr%@_Y-zGNt4;Ro;pvO#ufKKU)yIz> zfAaW`Uw-nJZ@+xY3D6e2QI07Lu_ zL>;t*CE^ot<;geS()ICFLqp_9A_HfzIsDKIE$_4fUjsiH(-5HxEkS}}a>OVAOR$w= zb3badzZ1YHraZP$>av~vP&r|{M?iThph}tobx2m`hYxXd;!z?}K*n$M zNU~j@GduwlPyrd0!Du3He1@OJmg3Mw|1NqiX^1x@$$r=UH-@RdqU9NO6krt73NRc4 z&EbvD!w?|D4)X9$W!wR>uYY~}h9v1zl5N@Xk@@by*?{eJ&wjsS zqrh}A)4dVpKVkQDshwx#rYxg9!!O{JH!#TI)T`7IcK<`T45CUQw@bxNfxsygdV~V6 zP!IqGcH*S#_zB1H6ZR86=Hn*}kXR>(aG{m9-si|0utJn3A)t2}wC~i@OqqSs=3k zU}B|HqI7Buey7ir{mXy*KSrnK6Oz)VX6HZo{L8N1!Q(!@Ck4XB*0!&oJo)&G&p-Ri zm+yS|L4HYzP$E}q%nnz0)|slnkQAZBdfZoYLZI^TQ3{0&U{aYzqp~XHCY8dhQCrzB zjgf0DDxJ-24-5`Z3XVt)jY$iSKOL8vcebvpXKaZRVT@s`yVursZ*HEu&-uNr^Q;8} z(9(B=L9&j4S@2J$a~qxE4V@E{OXt~7b8WL*L$NO=qw?Yd;0N+EI75a-_S8SyL^6PZf9g_qqBb|G$I+=ODr>K4Q`^BClJqL zq}k?Cs7*4ZL9S$1&_MX2#k&MNDR8a99vYFjzI{cdcS_ZEiOO**qpYG~AiJ>ngU^2T z4=ph|b0w;1vBKX+Z2EU66@Tzi922Nch;_blt5oAJ(*{9-DU1m^TXK2bn86--OsMfriA0vMs|@T0HaFbs;&S0MKlg0g0jBuFGl5Q@`9l3ba*OeTZy0=nu|ss^R9 z2CmmPn#_$>d%e|JlwH`fed*P!_uswy)`zcu_{aA?`|`8De*5i@FTQ{N%MZ_g`R>Qx zC@_v#1h9ksgi(kyiitzCrJzL@Ny>0lFAMlC-y-=B#3vq0tbM{-mi&$-fe{W!2j}{T zPaI|dB$fwhC`pK7WWxT=afnSv8Ru-HM;`x&2&W^k9I5Y+-q8A(i zIZrRnkwGP1DD1VuR_FSBa5TnD?zrguA(LM}KK=Rjorl38QPuSwtD6@FN9P(^dTScG ztLi$@X6IM7bPjLqT-n;ay0v>{d-w9Wi`On)xic`hn3z}*9#v)W%U3zmRbffGCW)y`Y09y=GdzKb{sA77MJ1Dq53b;l$s~H2 z)GiUb1Ok_@ugllRc4Afng_3I!^jnkDo9eKc+qQisINGq_6xt@v&EgCytAJ zeIydGQX$vqv?i5YD-lWsCxwEO0>KG^?+M{a_LXPBE604vk7MIFAry#I8okpS5+4kpUKmh5h~0RIHF&E+3kQ$Oe5+n}Y zBMMwO&)xQE|0+9M2oVM*<(4+MgX3b7a|S2Zz%yV81cJH(r2r=cz+TtT{J_L2L=}V= zl9z71iMi|hx1iWA+;|-|_uu^Vwa0&gKYHhLOvmWi+OELRM3;Ze!BvQ}*Z=s=N8djFU2YDR^17a`4u1aA5KV*;eFK!sIG&HHGnbV7SAxyi@wp! zDME!nsP+{ag<_{f5-AcV2_=~lS%F+p&TieSs8uQ(xSMX&tJO7HU7g8XYq6I*y}3(U zcQ4+0^Y-f>JbM4rw?FyfkR2q!-EWGw8QX*A8LZ=_2ip_(~R70e<{gl(4~N4 z3TX5hn8N*53($v_F3&(q0pNt~9wcC!K8GuyivWh0XAcEPViMJ$%Yehr<*i&hx=gwcceC5WqYxlc4C*$MFLc+^U?p(DyLlu^&O^&u@d2(t@%S+DvS^G|%Wjoup zmEfMX+q$HtdXb@6X*}cbOLh6jd%RAaK`D`mgbZL}kwPvrv2TEh+`bH8?h}k#ekXlA z$4|IVoP#L2~R5A}|bmI&qxcSxPLDv-`WNjZ%qHfW3gD z*9pk4SA37X;sbx>4=3Tr{@`=`nDF>X=}CdYX!Z{cPs+`&uBhtB&99S4Y$CB$3`gWH8=XMNf2S#QNkz5FR9sx! z(>K-AKhxGZQC{7imRSNMN5p1?$7RN*+Op--`Y5LXKLv@ zber1jZ}mg~fj|_Y3s{2F^%{3y{}@UO@FP$m2?RpPRW}bnB<);!aN+tJHy?cP;H}Tz zc>Lv?@BR6;cfPoK`|ZAw#mLx<q} zpZ`b@AH4O)#?Gjnz z+~E!Zt^h5o)dM$}T}F!=jzFd|o)9S8x<*GQS3xh8&Mj5DWtu>_E?jAhRhv`o-m~_g zdZQy>Z%GP@$l`v!z+bF(i&RdD+AYxpO0^MkeT+mGZVOD$FYl5l-6w_mV<(lzj!Tan zgZyIOU#1Ves0F=5V)m<*oC1^5O?&aqhP&^EUMO}*B*7AKf=HYuk>$zcB??8AQduWg z)ykC(GDRKx;+L-0XsWl^tMryL)eX~omtVX2@ZCp`p-{j0@Qbg$eDcFLPucyVnCjwg ze9C{6z`k@02(er7a&Ng0PbMMYfOP;N{tV&I9J+q~^%oX!TMpZ(xUGgN$uJQul4#i} zL=s+%Dc^kyT!A_SEjIA&UwJISpK`b8rI-S$r((1;5oO#NK&}ROV@p3FZt-1!0Y(tw z;Y3a`l9Z<|Ux0v3;Q;pCcLzU)NiaBQF&7GnLl-fO>R~8AiyE3mQ)meEA%>B(p{0;V zKrxH}NBqDa6&V_Z(X&F!qDw<;3hnHiafQDp89fAI%EM>~_PZ{OJ&Wvxa3I1kO3yBD zs6k6fnu36yY}nCaB#(3%u?|7SWEld!JA%o4U$tJ1c5B&*W9*71r!uym9X0_4AjnUATDV(&cN{uiv?L z^+9vfa6)WZU~s9youhI?fyEm#;vCt2Wlfg#73c1xZL`w4bK1EQ?i|q@JH^HZv8h;N z$+Wvu{R5($F0)c4W1oJpOAuvJwMt==i0opapRdsEBXIlpLVkICxR1ezVgEn2{sKC# zrpxbz-?hfVW@hGYF*CDdF*91sEQ@T(wj|q<#bjn?CNUZxcp)>Hnam_}bJrwUxw&6* zZ|;|TcYV7~No_sPq~86O_t^!f)!k41`d_C`9V=^qt{DSsG98sN~dQ5079_Jn;S)jPCHW-Q?&CBCNitSE+Lxo4&~6t7vSz6}?oU zaymD0(aF_^%@cF@qKT>LKmPeoKmGFa_n&@gY-(33bt;u!F4xFpYMD%yDBq1=&mdqzn_!Jnz$Xv*2G=W~{sMXjD1q!{^ zvAC$NrR7*_`^lE}lQm7f1!awgQwsb-;$6HW?cGCMeWL;+Q`2&5>f28Coti#zW)T>M z6xh@?M6cPKV{^C07w(MD-vKh6o4qwKvH*H(c;X7!;Mw!tgHr`%tszmFg-6=jd(J`; zNH+i&7)YO)3l9K?b*+OSzY;Qv`%X;(s4m=i3g`j}1;PtJ1!4;%7Z3%|b?x43;2G38 zIl7oz+UV>Z0WYtu=PX7P2&^0T-dw-?`reZzAlaqsPlwLVkBnWIyZjhfb^9^WTjO)L z;q?h`x7(D!sBvWeWF}FLmXZGO%9$ats~HD&*XYQmsEjrzF0+L3Dr91%hw;P z^=|&b@ih%yYMmRE1#ohu@;q6hFp)YljEE0Kn{M zd>4k$ldtp*ODGX2UC9i&Ek$5u!?CiYTUj9m2Hdi+w8a?13Jg>ig@PDHB4L2B$yCr@ z0y0HHqZ=3u4+cG$$&6tz6ItvuCNq=8&SP@W)4w>pLcXw2EGd*LiXf(mX z3y8HpNeBtY_YU@l8gLHAv4e|#C@?TgCV&taum^GsFdP8`IAOyzv6&<0ng^Spna6#M z0hGYt5De%A_<`YjZ_wWd73LNgrUf`S2#4T+p=wZ(-~=Mi0W6_ml%NhIKo{8FYa=RS zULI_Sn}7p3Mi=obVGm~JA_(D{5W@y92E9B8?UzCVAL`@&u@5o+kim0YJ z_`3w9xEekLAJYp13`Y(o{4s+AA22R8*C9T7^r`RlL-_ka1TeGM!UhpMwP=puAZ~eWWt4Qg(7cb-G2rUn>5yLDP78W%0W0sgCv_u>bWJFdNo8uGNX{2XAr}gj0-;nUmn$`ji#IMz%uUUlKOd8r z?BMF-8yF*1I?xz$Yg>V(HP6}>nXN6GMB&1V<^Uo1pSGKr$U%pl8e7OMt(WUv4bJ``4S|Jt`;3LF zkC14){uD&m!{@8_o-X0N4IjMNxO(@^?4^h8eWNicg|)56M#U%UsUk6&#)fA{Ix zyWOYnHy^)UzyEUi;_as?c@?p#`NQLjBa`R*PMs^OZqpb&Ts*>t$1ZdqKNl2{>fsmd z;T`Vg8RY2Xtx}t?{KC_QQl&|zvXdx`ES`))6LcIMsjThhOZ9TKox5kq)ZCTus4NE8 zjluV4i(^FEOo<`O&OQC+)>G!6kAp>gKo14odL5lM8eo+a^c3(U|thT2d; zpsPSqTUxWNkOD&tv$UcR)7oS-vrSy1CD!o+z|blZblr;z@{3ERN~kmqo#w)11TYv; z3?{nqi@^YZ<+4~vfpGO ze%adniq{{SR~`buP)@A3fDs8JiWr;-_7LL=81bwxQ~}4agDb<30yzvSkVC>n*oS1U zg8&AK2+J)qe%4l(v4c?r7=s)Tg>@A+a|N@H>tF{*03K%Tg?)@M$T7em$Adl$)qn&D z10HaWxwS_uEWFHz(8f%@1K7aM-XZY-XvlZA&|PKlMnDBfP-ONYp^o-Qv&StkKn57D z200|$C%iC>E>s94BNEXKO4u_8aSjc^fj62c+zUd&BR=-Qfwac};#{~Dd_w=SCU6Uj zu!8_IJNQF|1QBx(Cwz!=s793UeL0AKze0{33@V(P0d~+K`ulM%NceT44JFY&QeU>V zKQAqBgoeiW1w`~7JKfngoL5?xkynwPTalSl9iLd{=oD|X3vX#17&|vRH9bE&bAECD z;=Ym+SNJ2DgIS7K_0Za0K#(mj2+dRJqa_ zv>?#S2F!+QYsza-oJ2icF3hnTO<=4a_+R_4`1pu4A_+aMJLohf55!T)} z7MD~cklK0q$8{eYKRt03KamTsOFTP$9oT~&c}!gE0_}DA_KV5I+h?XOXBJj_2F0Z1 zRSuk7p^~pw&Qa*XU^X}fAuji z?8&Q*r*C&aVBLGVdg&qR(AgRKmV7^+~T<8BXofWLlDlBr}35P zY(Z|Hpcer!blWnq@{mqOyR@*-wufXsnIfmrj10OblM%{dB`}#O zOjbI`FD5I8$;v|;3-I#zq5`3$K&mX1snY|)kDQ&l0}}blofmhXy?yfbD zqw57bpT2IxFV|0B!OQ?dB8-?JL>$|{poK;p7;^wPLC3ye@PMD%#D*F;0?Ay8D?@-d zB81vrggD+$;G;zx00uA&Ff)G4D8hUKhT#Yx0m~YsY={ULIA}G;*5=0gI-1ubT0sR| z8ByebgAIDcAVZ*n1jyN^6ebpSAm5|KzVv|zE`qk;z|e`%vd=B-02eXM_VRrS;&b7# zn;-%z-_Ox0F}lFulu!o-Wx_$FXmJSY5P=FAK^kxlzC2_^&+s1L3gCl-gZR`qNDTWZ z;R-m1L+qOmaRhRR;O1})A3Cw9WUn&hD8644A3`!m4mvmyKq}f zsaN-R%1%@$`yv&`y_Fq$MFm%oP2(rBL=hT|pHA-%lj26(_*lI1URA5#%N-Jx*jSVnNVq+t=vf^7>ax5%amX_%E zEJ!g63s72!Uf2Lvwl*{doy+BjK#GAZ11W~p*gn9lZLBFQCXbkGL_5T@m_h+h>0syW z=@}6gnsRRJqDo~?XNq)27p=kB(>Ej`EjJ=A&Cb=IDbz5y3TqOFBT!3}_G*oNM@N5C zQ&&X9;mWGI$*JkBoy{-bKmYRUpBoz6L}CRfFdkpb;R?At0GNo!mjJ-P;R_^My=6wO{R!#Z3H&fTw5Cui(D#=$7GAaI6Ns=AeYJw zPENk*=_M`ggFSs`d-_NFj*qn;J=NHLytuN(!#|2IGjN0&HeV%IJ9_&@gRt)C85tT| z1cu?=2qzY9OqNw z?$$Cl~Hqx&8Xl%S~X|%!T`dXXfkL21ci@&Rx8J;o1{m*n{V5k6&#ehCNxC zz3`y6c|fLd^$Cujn7eu9_RGhwHvnB=FF)=+d$)1_#mAY8w-d99c?k3ZhAA`-5`{@D zw{vs}INEnwXY$nA`J8@}Z{_e%=Pi{SY^XTP=mmgL>5=-Z|chHOr{Bk9JRO2;Vdk$h4o+l&{ z0Uex(B4XbIVuV2`!UYIWdn7}h;1!H8{`|K2UV@r`z-#5P4l~mWJCI}Tg%O3BggFEe z?Bh79fb)e7y%{P9KKsIpK*?_=5+MgO7eS6|LXL@L<`(1!g&pKD z#P6YwXpW2UxR0p-Igvn_p-!leOvV%kPuy-za zJ=lRnU;`!WArm3{`_@o_v`A$ZhB^(i@R^f(SgpMQ^gg{8F^JHS!EfyAis_{ zIwr_uVG3nHQexrk%!P%8^A{E`onN@LICtsXnT4p(ED!etwLVIq4dxhp1)e^#ASah_ zNkfz7Scm+0v7$E=0H$iw%8zgb88rT3jwD2<_15d0HChQ@$fUBU#0@u0rbumYOUgJ> zP}x~n(_2*8la|-$6_mjdyW5g
{}8FCwv+S*150JE``5jQo9Ev@(#R$TZ!3kDb? z7>3YgaR|)T(gLY5kYZ#K!z{&!-KX%3;vT@rBs!D9g*cf^XV5uJ2A{5o zuRZ}=y#DO`jpx%B?vG4fK7M*`eEtr;3U%`Ag~IZ-q^z>`zB7OvVA#yXdzWs#xO(?B zsH+RtpO4MlsB0T^@`{L0FC8Agw0P~wjr;FFs7)>2J2!g^5D5Ow2Ol23*Z>21J$Sx; z@x}`%0(!anM1@9YoF2b~McBQkXtm+P=j+ek?mm6Jefj3gq0#dr=Pq8n{`CIS<(D5n zyoAkmaQ$@)|O>UVuSpmP~|kL z9i8gQphq#8iEMT{hnvG-=Q26KEzn+Ixm-bxP?{%Kg91xVOlupRx-)BSl+CT*;C;tES+uquG1h6kq8HN!weBqj? z0n|ae&f^PdP;(D*kf0jT8A@>Y17OJZ0fq^Lb9@;L0|~%mu7iC>l{YbyT71mx*9XkgN*95~P z`}7&@#fk1SAZE0;KY!jrTlapsegBEk(LF3W@z{y6`sUt(;=0Vds*K#KjO^-wz-*N= zN-7T0Xnaneo}HV$v@o-Hadz?I%;Ma+x#QiZ!$Z>D-QrccNWLbBWAqbvc*_GFJt9S| zExMDPih&$OPq28vQ`MrDl(PX~f>^Eu`T~GCXf+}}pFv}TDxy-@Y>vdyH83TwD!rsR zx3asWp})AkC$p?2BB@koA4Xy5ZOLj9Nn=COSX(P?Z4{uu0AR#@%_0j+bZfJP75t=S zTO49y9cFQeOf2r85HLeeT_M@hL11BwVJSw;DB>rI(LjXJ2%3Tc!+>)Pnt;QWg8Xv# z2#ih0IDKv=Ec!5w#iw#4G_Dj394B|*%DNVjOq-Kea_|15nVAJwH?QiN#_pbD;Sn)q zN2=a`So!dA4G;xN3!{t80d5HxOfLA?2tg)}iA@9x2nzEF2rMcq=L==T4n|78P{ZYG zI6N(vXJE2b6q<<25Hc7d29poqx3WT8zJkMG2t*={O66#>^NNZ|ud40r=swkR>`ZmT zQG=s5izi0_<46HuVBmlvF*$k1rx!PMojP%L@yyiK$qOLD?jV3&MbFv71^@%tz)*;% z3g@pp9G$t=Jvbg3n<3LXyZT17^^QOU6xgMk&+)?~K}%h|^9JgJN*g@A2)MfS@FPUP zIX!Xp*wEbA%uOH}un=nAe})7W01PUenY>!v+%Hl&*}I3J%W1csKX|cv|LMw&d+)B_ zeS7!uGBE7T(${CNH*em5bN9)I7az9Ytb7K0z5MCb((c1o%R}P}k%?JJStY~g7RF|- zoH=(sJUWfRkvFvTHMbwn$S&iHH7c#6(ZSQv)z87%2k0dbC`2NKP@?9GkclJ)E?>>$ zC>R_CS~M?IvqYMavy)9t?R5A}qcXi&`l7Xq6DpG>`cj2MVQJ&JzR{~Q*PmZ~xTLTP z;VFHXGGDIJPpI}0s=ZwO)1nh=_!2K0s@mFCVPylqy3jY)(n?@q#j^krh9(l(#9ShS z1gs)1bK0V(o}ya-iRoe#hF4GvNKfC7UALo@goVCDp^@I@o2kJ~~8 zbDe!c>=6r1&mtngXbht~LK*}KdL5)4O5o$R_@!co9W44?!bRW!F|czm$3X%od+B!- zAjj!o6G%9SeMtDD#S!>`A;%RC#v$QDTnc2us_S=@I(P^U(FcmanQ#zxLLl>1m|8 z=EkO`htJFoogF(qGH`S_C?Lt%IaaBS;Aw)`1|N~9w=%%NFIwEzsvT;P9Zwb?50dsf z%Npf^QWh_TE{NpI0<}6Xy}_tZ3OPI`okJ|3=kWOQh?um(ik9pntr=yl=~bQCHAf4Z z`txgg(hFPs!?U>}XG>eTElB}pO_+@>Qed_usg14J$`(z_SXyx`ELexovJSeX1fzte(zST$y4K`q zLt|5z0vcN^QR;ajWqMX&USWArQAJ^4nTxAO*U=sxUnG^OM>MWspy#A32| z7+^p$@F54E$49e>3Z*VOCLuO1DJVE1IX%P0-HXoR3&bj}Kp~bHBr+45tKtbXFubxj z3K~PgWJxG=j-?It5a8JoUB)AkSTveIDm6%DMupnJ#XTr7CBL|=AvwKBAk{NCQjS0g z++uNM=()ozF_kG|aAhKuy_;`D{*fkN(#dlR6X$OMz~-(Z1!iU#VCmA$ml#fq*B%3| zK)3mXBrpVOcfZKvBeQsM{P}B7@Cth%)3v*A?>t_{d+9yMvbe%yJt_Vw-R7svr%Pu{Fwy7eThs5&ezy{+feB~*+1E8N| zDhFVBMNPY#XNXi`1dXNCIB4|F3Z;q5MY~OMdFX~^cxQM*6ipA52WOnX8 z;Xz?>20N#}`-gw~=YRco?^k!zbGuZAOog#TZdc0JB*diGU4OD#RM&U&>6%|;K2z$Y zc8+C9+#}+O(hJ)o6RREElPL@b8;Z^vetYfBAIS0Kft5Aid|eZi7MaWfh7k)*1r&;q z48n^dAdy65ikeDwV$cKWv`8i+iN#DOmd@uf*f}h29%2|bmoET-WhzuzQe}K;_0Z__ z-NmbqZ`^K%_^}Jed*}lD_Wfrt zT$yN#s=;Uk8Vw>4hsvlQH0+>$@Pd0(XTRGYH!?$xk%QTT;bcY;E_>h971O z?#J8^_Xas|389JT0sDBkha3z_%!Vn2;e=rWb}$b8Lk_?|b>M&d^uja(5oT6kkV702 z?h2m>9B740aWxph0S3@JLL#BGFtH#v+a8^W1Rd@-Av!;Bb1~F{LtKj4fPF}~GCnlt z=0q^%Hvq$NqUmpHLV^zuI|plG2S;#%!>>r2|EK^7+Tz?CA^!bwJF}Tg@NEGz2XP!5 z;uR4GgMR^F*x+s2-1+kC#Rg4`RNxmA zkv}_qZDIb(;>`JliRtmd6JtHcM!Jt5?>rIgpWy6708EVlCiL*o_}c}>h})Xg0}b+? z!{WXGdAFmYP9i8^auQg=5Rp7UtMkz6bP^el2`UFEFglIP7bsFQOR5^Wk2Ln=)pn*< zwkKD#XV!G*HuM!Y9?Pxhj7cqX@Q9)?G&U54HAQYsmD5>jSNF((pk!B%NETOXX(Kpf z$t8^SR|Lb5{S`&*GOk)W-0-0Lp(Az(BI6gfx;;^%mhgM^lot>vp>A)YpK$4o4 z-QLj?7!*claA7MGZ*jOeE9Cghh1RU<(n@j z=kN3kOyb?7K#e_lxdAc=(Di=(8yF}sfZ4+r%boor;c@B3mCY0L*T7DknRRv#1|d~e z*}@m=GIPrvT>J$>HD90-iM3#CwiIoY%oKpqrL%-gjzlQYa`-AXSHl(Pr3xp#$tSn4 zW@`4*lNay&f@A$dQ;p6sDpRuDkfU}y;_O!*m0ZshIpkKfKmG76x4c_w3}K4hYue97 zC6@VxWVH3o`Gys-Mcy`4J6pnR$aqDP#+IbEAt^zPS=*vZV%D}?8!{N%mdv#!^KD2% z5?O3Z26V~D6eWdjB7^*5gd+I`+KZLVMvLYPSe$$|uYkkP zzd3X9!R6b}?>>3|{Pohi<;}J2FB`kWb{lAqSYQnCR21T>6=oRZ7(c|tFBnYF=m-M| zT3Anrt*_sH!WA&Ra1K47n&=Y$9tCk7boko@V;1ffDKIpP2;=_R`r7I;CKJYw`2rZu zF^UdWAP!MO3@|fz064f58yo_5FuKe+CJLqz&WVP^epCRS12Dsew)fq~4|eu!|L!YD z#Ps3bone?z*aLdt%FrR?s6zsHP=Q#KfyQ?@6QBshe&Sbial z?eEqBXT<+PDRyu|XCji>H^;F93C9WE?WsL;5I#A`3GVEn=wN~(_(X99RC~WZPSA<@ z5LY;mBYJ^hCZR9dKE`km^9*AQBG|`8=g@OW8kqq46;))OV^^HFu$sj7v-96C3SEeMjyd{r73m0Beb zb7(9Yp>-H^o?NcaE3B$+I9l1 z$=+>p>O9D=q{K9pQYREh2acZ#3JyU_J2b|+`qs*-`mF4Hu>>R|l}up($=Dn|uuUpc zf(b=Zg;ERJD=a+5*DtuGwF?4FAS)9XCINsImejPgAMffOa(444QMtrkuIN@U3YBeR zOSiNHhS^%%P+=_Q^OXXDlFgNoX?z+}q*B`})b;=~E(i;;1{4@@i_2GXcnYpSNoPwy zgxS#fwhV+Zt^`2o4@~OlKQlUWedf}`#p};5-g`K+x!YKW0hvH!fq@Q#U}MLS-Z2n9uenQ)AOgY* z78DuP;A-y8Y<={H2E#b-lj9NtyX|(~I}6-Ffrm z<@(#@FCW&vec1T^Vf{NOuov&Q=P%z&$tsOcEf|}+G_!bfbox?KMzK(8?$;lc>;N0&*1d)ce~F&e5z?10-6K8JOYw~WAbi4+t!#u z6SG=mx(E`(#fIu=LvbY0oNOufWSRqw?ntHCp*tN(YFk@{ElFle5|bz*TMFOGhG%Uf zvLQ*yR0WwLr%*Linu$VlqtXKD^jHQXmCZ&Q93B*NQL5@I_DOIG4 zuh6*Hv9U_@gWcHyHAEL^@rj1P)dZ9zGz0*O@1c$&- zF`RVo5Dl|L_j`_+XHXIQxCj!wO_0OL4iR)NB0d9H*AXfvL&!bF&u~7B4L>EY3|%4iEH?j|`8EobKs3?(Grj><}kcNAOgEY`wR{ z!^7b35SyZEuh;gLsg8z;y1nJCCUv<`lF8&nvUx!=xwlf~qEsmbLKc-yrP4v=u$X+4 z(WRuUuClhhvJn{8Th@HMu<=-SU4MFYZ$?dDZvC;6mcjhmZY0Ih%k4ZOeZ$fU%G>kH zTXT;z=aw~P7d7~Yq){1aOSIK5&(fM}Va2wvVp(F0?JZCwu8r-%i~>VHkj%!KiY|B2 zxnSU6l0i;f24jPfY-v_jXtQu)rjAS^)7dNVqDwT^2ULLv( zMkAAfi88)O$rVV+G&bPYnnVXjC{fCk25cgUh6m{4${`2TfpNH?V#QdBQJ6wHPa;;C zJpCh!%A5L!rqG^G*PdRuj`q>GdiT}k+b?cBczf%~hntT-+<5rm=A)0-?!N=O`)u|0 z<0X(&C(mApPAt?p1cb%r42@j^L;;iVQzh|*E@Gkl^V1Vop$MRe*KU9_F@Fc&$PB=P zIxpUTez*Gbo8|8>KYqURTK(z$ z(${+rKh!kz#w8clH1(gq`gr#I-LBpVeP1B}K* z4*&ynfdfXN3#fDvi=*HP(UZ0LB4bTMPh@OHO;hjE#_pHzzch865<)soaz| zJoC1s_5_Wscl3yJ@=4Y?#|Sk+EU8a%-SJ~%S4U4RGJ^1 z89}EXrZZBQ%xne&7*>cx7%!hEC=`kcxx7rFI729n35`B-cKXiT<@?v}zPR`F{foCN zAC@=Pw>}g1exd!Mc8MRgFgoDDWPbqJyH5)e#timgPyv8pT?L3TtE+F{e>P(b=L8Y= z9=nVN9<1Sr!HOW)UV_6v09p=G3e0?X5N2Q)KW19|Fns-tz!*jgu5WG*b`V_{W-!WQ zZedjfTtcwId?FG!c-RH!cc?Ho1W1@)66D1F(R=qzg9AB6nz=bna0nwhoD>5La%2R$ zpcEWj2Rpw@xEkc}IhiY92j^IdK~899^obHx_7c>AgxliuyC58bgA)#7$Nc5M2|hW< zar}2hkjxR>A>?KUip+o7!G=T?B+-Z<@C^P%hyrMVkH3>#VYl9g4Kl~WxOlC9SS`+7%@jn2(XFQTRMix&Z4Gc!{Y z6Qfg;W0MmT{k^9=-6NdrV`QpOj>30IEK$Zct$Rs+xJVtCoWefB=WMP9h3%4bq$4*LR8fRB; zKmSlCCr`b>v7w0*a4RGPwefU%}zAle3qz3MzKL{qe<{_1pJf51gE`ck;F& zvu(&MTQa&23=|lh!9@>fW(qkR3DAotRM1&`K$nFz1ks zUM4eOdI^PUfl!TP8Bb2AF(DZSba>?gg~s3-6`xh#dTey+%HoxW`0g%HU7)=%zyMme z9xvT~vJB3>=WBqmnF|k&4b6G@ALdHzJpPS0&o z8WZJ)BBfoK#F$vuHF53!hpTtrBxcmf4dEhn2)Yka5hB%xD;%Po{WHVkYx&Y(GSid7 z^r5nRX<$qr3f+sr@}trHNE9y;#gjyFr%>E!G{~JuBok;dAejwWiPkG2su@WnM=I5e zN)Mqkq8ZF2IwOt2$YL_{Sgd?5uK=`{KvcvB`6bMdC{h&Kn8DN6CKvBty7lzVledpv zetf&MM=u00V%x(V7!VL)5KAD3Q3E@WW9K&{0~+l=ml?I%2N*aYw!p{JkJtgM5hdS1 zi4ltsQToxE2nYM4O(OB6wc9}!~h27!$I-F^wlg-gx;L3$zT5ZHi$ z9)ko75{#|*3YJ-Zq38je;Gq^yf$HN$_B+Jg%7kHJK{*(_8Z*prKSY0f&Mu*la6i~E zFHz_F=Q5+z9Dzhs*~11dIv7XJ{`EG%7>+xinwTVcYn|?Bk-9xl*6yOL*C-1(f;1*Sj3WqC zsyr1clSC$B^B5EcnM?(M@p%#tcfaiH;@tf5{L z$f)T_uINgs?98k=nq7SqFqT`{mS5RgP}N#ci2xQ9nW5BrQRoUw8zErK%2sS)EjVO} zrV|M@#_%!tT1@WUfwA|hjxl2g+& zvhwl^5636P#3q0_yLhyb$q zrJz|vLV;L49Uu?IDT?s=KS5uH=kd-^Xle zx}I0s;^+|p*aIIT5C^tBeY5lI-OihpukY7EitPeH7q30K|9tuN^5+j5KP_$kva<2> z%KFdmmcCrS{i5VZOLBTC;P&2=j|-O{R5$b})Q;YMk^RSpT3Wi)8pnX31hh>hnl0o5 z!zgr~Ed@O}1%3^HS=lm4R2~aG{ZuEG+KHqN0phOobF~-ECw`v^|$qY|h8UW0f$_ij` zg6W)KD#M>l^C8o`DZntQuPw#Lmh4TUdIQXC$Zj@dXIrwPEydoJVh1^i;zS0#(SvA= zNIEl~&P=5-GH8r!IslAYz!Mfo^o_Zz_pd*A0rYzDesy_c zcYXU47%_Q>Hb4AC%*vRdg403LU>}VjkiG$&_PB+KWk%OQq~Sv#7(y4ZH6m(6h%j@v z*n#v1;1J$-!)yQ>vx8v<28ZCAIfM<@fkH4WWdI4#2;#U2b}+QSfH6OMASU^6D{L@K zA51WsA6$`f5ChN(3^;-2>tJ{{LlF)2h+$v=Ac8@79}u)s0}?nWnWqi+&kjC>p>wDM zLpeA&fsf-vGn8;C&f(DPLk?|`vkx#ZbCKCGH#wNh&G&jZfF(FIlNBdigcFqF`rzYI z95?%rLw$1-b7e>e`+s&aG7GBOJC^UC86XN5;3cXbX74V@bv89h68ZhT^DVj8#w^qK{mm>nOV zoH#jn*3%`-(JoT13T4W?nR-v2hlj>jADbwzuT*v9D_Z@fZ7#}Ml`N0LPiF8!If4MC z+C!-}h@~PHj}90hQ>j#@fG_p+366$-DlyK<`AvnyJ1%Ue?NYW%{|RR&)wQ)NXGTiS{(Z6ub~ zVhbz5AuArjm^Ft07~_xy?T`ia&>^xJU}lV2?d?IuWV85m8XJo+Al5;K0o6!0R0!Hw zktt*bP)a6MJ2|?$ID0wRyP1qG^>uCYbC(JW%4}`WW~@vWUm%pFre&8Msg8^~92gWH z7!(#19OmlgDUmAW3JnM^5N9c=nb|o7ES`|g=Bss1#pvE!Jx^kYPtL1v?g@`h2514m z(A6)dh|UtzXnY!thZPuu!KcyrY@U?OlhBwv7?&-qsYroYQ>ZjHmn#*CReX_x%a=)O4PixP0m6vuk%> zU4QuY#>002EljVw&sXoiSV#734eKpn71-S;E1;r)Y9OlmPt9VaEnaRi0?=*q1ZCr;11dWFZvXY}@;Idf*_Z~o@rym6@o-m*1^!qGzTMkNZNChhKjJ1ArmfL|lkKh$7H}9Y_bMgQ7@F?adQnR$+i)bb(=v zL5CP)5GFtd|0lXTz(TXIL)XACnJ|qY$I!y~!4d3092`Ie_?Q`lvxg#V&<=%v+Yl;a zg#=9?0*9#iK7=qr2+E)_6#YX?B;uR8Aeq$|PEZF!0&=Xtpf{|;KJ5Zj_5g;_wJ*Yc z10m=Uzgm3WgJ;Ky-~vhqeVoh{4i;esfCJ~luMIN{60VOER3Og3M?pw9juWm79}o5+ z5iHr0S*Qk)aM3{r60QJ;;FyEhL0#;#3I`#XBan!?zlr1T8hlU8k_!wo3t}hiIBx%kZDvhjZOf}-!Duq(+R~Yt;sn(x45(srV_`FL(!PfB^);nL=$iuR0}j_kV5?COrJ^47S_3a{W~ zg~5ly(pZutmL#c_t<=g!YH2O8v=JY&5?ELR##o0enTIUthpg~KA_5p*ln6P-n3W|3 zz#|k$Sxi2Y!6n(!@Dw6u82E^4R%B~S64{nUqcAC;#%$>v7GJA2I@r6Kj7~bOou`Li zNpS^_Ck8g-&Ba-4zR~1VR9qe!77ga<<?h7n~y)-db$Mky7yxJ!K=-OuhC8!kBQs4fJuO;cdI{x ziURpHK6g7gs}j^zdS30s{2f5l!xtMMzkpsqIKUXN>gt_0AZX6b-h#Fe0e}JjAPB1K z=EHY)pDsOqz5aIf%gWBLA2)$yzksc8|GKvI%e&<-bBlL@UTK--Bcta*CSJJuI3=@G zEHhrdd|M(h*qMBT0uz7!^>1S0vUmb5jVU$*jK<^xz^Du!owfIua(Ehv%t3GTZtod- z^>#fvHnX#5WMckCUF*rJyao=+%Z;8wZ^Gm=7&q%xw&)JQTdicE{7 z(4xuIXbLr&N{a-TQD{Io&}v~cW;BC!n9fX~u~O))eeK05L~A#MMIvdLQd^}^m5HV4 zLTPko|KiBxjrnU2u0441;N?3kzwpY#y*&@n(^5b@5m&Pa!T?SXWcIm*li5e5-$1b; zK7nCknROWC7-Qg=0frlzS%teYJ2*!Q43i1x7&+kMl^xi@aa_SnFKmcRKqAbo{mWpu z0tOZKp&D)oIWB@B9@Qk6herGZ<2zsga^Mzb82C_h(1A1lFoKJyLt^iFbEoDU(+L`4 z5JHY_=pwj)G>05&;#PnsB8KXM8iW{(^Vm?3D8jD|Jjn6nA=HMPXpRz4 z0eAbmgqvUo*TD%Q_z*({CtL&(bNZJNoN#=v*>72ebL>FE74Yf6fiDLUKwlCwx-hgb zv9N7#6Ela~Xy$Nt=iBnqdU{%pL2oaY>!ea`adCBb_esbzG72*@i$H{>q~@fgnE>i@t0AN}-uB(g2OBWL_ zZ>-cbXDS=KBu$QrBQkLoTM$R*1abx53WYQ14w0D8Vlyav027N8L4gszJ|PN~(aSHi zs=jUT^kmXy>_j>?w4ik7~TmSg!1J()FKNoCDRqbLzS? zD_UbR%iM$FSz?owt=Jj>Mv@&uB1~chxsBM$R%B^~?iI86aY>AZSJTAcv^2I7g%WBdhc5$|(dm4=;V+LT zgV$hVOS7`3Sz9vzekzr{$>d=)dFV}U3bnmRssnln#2Reig93vw9Y_W_o2Qa09o)Pl za*FE*Mi%C;JihVZJ&3S7&zA4KSbgwn{qdVE01`If7A6yb>hi5upuHmF^W{2EztEJa z#e26OE#b*Sa6n^$^Lpvq`?X&HWBAh7hxK0pgdp8|PE1uc_D-F@bN&9CJ5N47d$$Sn z0)~OD?*0+zwY2{I{*#XtHJ$NE1@+DS7q32=zjVLn_^49r3{-yg_MJee;PTWGiQUxf zg~JIsY_1C4H!=-LE(|aV9np)yLeCIjut0w4)mnFh$=k;_JR~&kJlWTY>6>1GNqHm(p5H|xNz%DNNh1*=_gS7r)1alo}7h$b8DQYxYS08bkYmQ+ zCg7mRzVv}A<_WibX6%jZ00w-BlR1K^1BP0eFM#bc%uFu=T?k<2c}Uy?BH4k-L&(ve zuzym>&F4Z5P!&Wa$O)LiK))|O_6@x_q6y@fUeEwO1fT-+h7yXLGEZB+S~h^n!5Ay%2QMGGc${`vr8f(4>vb=&&*tyo4+u(cwynf z#aUq3)XezA)acmw@W`37qhq7zPM;kEpiMg2`#YEbV1X>DCrj(fb8%L>sbb<4^_A+T z3{}0Sq`^T^DwC$O_^}Lb09W9pR5~dXO1^-{WKl^}3W*8;gRwq2DHFtBYI=TQY4zan z*vRN?bH}m5BXt=CM{(?YuvuBr36dc- zW`Q=Ux3#gR0KmYo6a$QbLnSi+SJ`YE}CT9nGSCz`>;^OV? z9l~G;NhB7P3dG_oRr=(VOu!hvuQ@9_KPfp~DpP`ra&q-;Xzup#4k6QpKra$aM4}07 zsXQwZ2QY@7#!C?}*>W=EOfgyrP8ZT>d(jPZ(ezzgBjC zUEcWV?b4^=vBkKAyt0b6g^TwtU3)UKa5Es}Fo!Q^bETu_W?)E-PfV(*YuMWPNg&eG znP?j=pcfdRi^c@K3nqrYj=@qe*&4CbE->iu?81#V?^gcX|NZ~;^q-u)aGNjl;3}d- z`YgG9zJFBxyRCo7E^E~}he>n+5>22$;m4JFL?@MAzxS@Jrtk9YkI6Zmd`U2g?qNlC zwV`@iQ@lyE017>rLJy-dKx{>V@B%(j>9JIL9EFB~#v*xc=f>kqF#e0lHXhvy$w zKW=FT%{u?*N7-1aT9rv3@&kh<$vBZ)(P!fP?$r>xw`Z zKE&6+08|KISZrZ*0cQbA%_xF@z@XRt);~yw&JO<& z6N%uXS42G91)mENt_dSN;?vG2j4>GJcL17jxU~zU149wSFr1*vO`ri3V1_|Idj~Yv@VB5T zM568Y+EU&Nc=&kGMsc!2n zZ|OVIa;&svFu(CwT6I@)Wk*Ks(cFf<{D%I_ijK(iGCQwG5=#T<0ucte6W@Yb_#`kP*AK+=R_v6Nn{3<#s>N2?%`Wf zT5;_7$;qiX8lBB#@}px?%Bxy4vdbwzJG#)8Dzv4EAh)6NWh#f9g6ha<_$99N@`*6n zd(&t_^k6W$5J*O$aBOTDKrd@}Nn{pQ7)*{Bgckse$CuG)JX;do3@~UY7HidNN0rJ^ zA~yiNOb(uQj$S&Wt5jj+i;x1t3n#}W&rDuDJ#qEo zjTd;4{hQ@)0I>B>f4#i*XHa8vmmZ~LSGxK}#iy6teE9Cko6Yy@-vC{py?|j$TR*>F z{c_{(i^3yKDd}Z{r)Dl*eKL3cZgcyf!OnAY=j+oKZx6?33=dCkZ+~Arf6KusKrA&; z;2lHULKCgTMK1xBA)+xPGzR=>Di&MM6X-5nx~nsKC1+F)4o&{^fBHWoV+uuzNP#L{ zGVs&Oqp5Ffy4; z^sq`MJD)|!F9xfC$;lT=N@U7%m99c#ES0GfQnOn}r$K(*y?poSo#$^Kyab6BzUf(fw{wBC75A z<~Zcw<3yCB1U|+LLKcyTa#R6)C;|spFz03mH$RwAk3@aQ&0Rqv8lhH1A_%<$-1-W& z(34yCwI;FC$es+{+5Nh+`|a+%$Av{l+}yqOI(vmoCl+die6>WP&CM(A=G^rEsTstuGiT49K09)9=+yCnlm32@ zj`ksPl`l)`Mprs>?41-Yn#dSMWuc-zRaWQ2uW=9;NF|9ZemH~g!xMWbR3@2B%H^?W zbOxCYYKBGUDhPnp*0$C+bhLEzb@mQc*LUOiU61mRVk5s z^2N?*YSCH*470H2TUc`sS%MV9J9i*}Sz0oQr!>)FtS1;|i_O-CMyyd}Lyi}B;ORuX zOcA3F0}SURTe?W3u(NYBncT!;y+ELGaS8DB3=xXtm|-loKqOW~M8<)`7f5+LsZ?%| zDeXBz4TUYWp$V<2duGcJrDT;NZO}72fMgtwR4Ub}R3?d3N2c-VEU`ju@8T9<@8}Dr zR6B_z2D1(mh%`c>8r?L;kpV1mp9;0f)gz#=wD#Q8g&TLCKY04#(W}*G?>1k2+CMX5*DGJZUM+uly$neE^6cHt)3@78Tfe?r`+o1)@}*nPb4nT_6LKmWd#>MqbNA`e z%a5NvZ2Szivh$~po4>qX{&N2MljfsCGZ*jOf4=f|^(zuyg!}?~v-0`gvyW}PLuq;C zRSiAouRghW{aIyww{Kvq*5Kyq5fm4ndFTF%@$m&W_Yh~-P>#{^iWDxDw~te=42v(u`?LVbP7EKgcpOILucjCnYj!Wy7~pi z6BJ40C31DCN>{2i1e*N&($Cn@1K5p)=fBFja+SvI_Tp>Xh zv9KZP5XsDyg9#C4UvEJ}%q=kDmS;32Xhspv0Z{-s_`z&G3#J_aT|uJ0t`8#>>Xb;( z5Gq3xw3#m;3PT9!vbwSa07FuYpp=Xmg3zG~mg$)LG zGs6%)fFB45d&4mf;!z%#!pMuqdYo_s61*NWz|d<0QMeB<7_NyC8%~7o55tJVt#HB} z0uhPR0o&jZn2sy3*iEw_z%{lyw zjSyHsDe!(EkT?S*Vv=xoZ^J`Ed!e(yE5vn(?;m^%zdm{Ts-dwhFeu#K!Cj-ZmrC^l zzE;2k1*R9v3~gQg4K1BH1xHfSic-=FGqX!W!Ve$qADmveFmwJQioD93 zU+y5xl?oGByl^_tha>WkDNItCgu?}Z(Mf1Jj>X{0rRwagg2sl9wzl4e=B~P?j;i|B z;_}+0^js%*U!$XYaz@_K{*$N9Otc<7R#wwoQq_EE*6|hZzEs1x02_k(1~eGD8b61F9Xe5n0#>35FplMm&%O zjET3j2Zj+_DN=|Xfzcv+;@TM6M-j+`XB6=QMNBftF}e6|kAtBMh!BL=!=nNi{#piIvkP}b2R0zcyJ7-^>R8Qr}t!M%(DwxocDi$goVp9sy zql8lngTs@;qtn1qs9X|~irqZINfeHp{mj&*^n!})lA5#AXnExP`9_}lj(jWS^$|ALZ*cg^oj=UMW!Nv0lkPENR|xrVlYzxV;pYA zp7FBq9`j62E`yy*$gcv>VH|#uP*N;YmZ=R#G{!=yGOo6HY;5NC;?>93?!CDG{Qa|c zEAQ5}SGGQF?4qk*+XtTYh3N$b+%ZE15;%xkSdanL4(KXu7)S@J;Z~5N#hC88ekB|a5`AQOet)*0*>Pf5P^Jkbr}r6h>Vz)+=JEu zHAW2OKN5`TFvcSY5o0|Zn(>B9aRML4Q>cUEXb2|OZI~6<4pKjR217IqyeN9$<}hf2 z+v46JVSquHI0O6xx(W^M5Zm4T_U_|$Z9{iaX=6+KiHY$mPac0*U4@bTr=9I@+go2Z zH$H7`qN_p3w!w(mMbrbtcj4u1p!v>S82uq9I7>`O61c+%!LJ8$B0|WW19NwfW1L_g za&sv*G`Y85gmW+gf$%Bs)xkkF?VxkHc(=}XjP_v_7D z_o{0e0|O&m-OyZ?Ty7MLbv(X`&o}aU4q~yhqiaZK?}@Uix{REXl#HVE?2`2C;;6Xf zsfCNvix;OBE`Uvg_98GgwJ<-uxBvi~n3_pO>O1Wtr( zIh%(z<{;FV2+t@2dmthZtE5s5ydJ(lMk2ESdzgH-WHy(t26Q>Q1_HzE9KG}=H@V7A zEY$S9MW@a5ipD^kSo-7?q0ze*`<90qZh9|y7%Pci+4M(K7M+$^!e?| zmv^gQ->rQGdI7p12SfqefMM6}y=vE_d(!E*|o^Q9|y!y?n7;<6Vn-TpuS z>;H8)DcjyLz|}q6**#dHcBC?Z^g!#qHwpkIk{M49&(^mLDYOA9eS}Evuha%j&D~qy z{`HT4{ZE6ZuM3qaVqK+JcZ4gCE2$lvzxv|I>)oKJVy@heC34L#ZM$;s!>Q3L3PWH{ zQLowz2EyV}uMWO|gXu%YEIE5Ys@{2-?qfq0BOI!(L3NS2@!36o0 z4mk)f4mXR#MIwyN$zpNyz|cWPgtl>m#cM^T2q-)pXnQ1d}i|Y?4<{n zZ#}<*cAZ~-yS%vy^xFBd3EGRGm)S7DzyT5gNHBpgS}>d-hkwoJI!GfJwQwDCL!vU_ z5cht4CKfAV(MH&B>X^?0`5&z=s?~@xJxMPV)$0sPM=9AvU64 zXo2PuQ86(C30>h%&?%9R`ZT{BI0NXgS1(s0qH|r{V?DeQy?s)nA`4Pej?~xp3=K`) zzx!(G1K<)!_7gA+8(<9I7ez=k#43a#&X0? zESUpGXD@TmdIg9JbCne-l2TuOk-acmDvf9HLTFr1Cf@^o*o(!WzyM$j3WG*L&tjH} zRW((Oqo=2bht4%NcGlFl)-<-%HMi9^wN}|XWRSFwj3L6=sjEAeWtYSWL8~oTv2OmeoJa;M@B_kT1iuUPNh#+3Qy)@ zMO9jo6_#X-G07oou_a*4N?>8hv$En@T5yP`vFtI-%7Sirh>9P}f&sQ~=)#!!c4n-` zzyXGV8Uu7;LsN^uFi>f>G%AhF7f208N3GUDBGCZ4yu5nx1&l=VlOm~BYj6z;O(?H!ADg&*>)zYvZ@1qp zeR;R?_1y|06R0c1q3vInwvc`T!~1KX9gpt4e)evA?bBageAvD9=>7bahj`iH-KR** zy;%YHp}W2adZGD40O7-zD}6%~G0Axqja>^@?>~CEvUv4@cVMhkWw*Zdh0X+~y1IIX z{OiB{H@OAX-oCNkJ~6JIp<08RP@;i%fJEg2y&z|>#caN+sr|(LCo3=Beew%RmnwtR zx&)Oj*=V0`uuqZe(xkd_p|&(Mwk;&4f-CcO^iJ~+FHx9cxXM7b*!leRrxWKNl~(nY zRu6_mm9vHZRF*f1>}5l8huoIz3-lt>gF%5&XyFtZ04$aO*kRxnHc()IE`nhQS{z^% zI|q!x%%U-~7~m5C1Np@v=p~VtD%52vUAfM#M5#~d>_2~Q?(TW?thHBDXgqB15a;HR;O-e08(UCZ+|t`S zy0CcX*^8z1jc=RVKW%J%-P-!Pz5Qhq6d2+ba&V3wHG(eK5m%Ckr60s!gI+d1B$lLq z1%5z|4AW%?8E^$6KosO002r=}@?G?Z6XNm}<{6sg#56_gBH{ao4QPiZ36Z)YE@eTE z3{)fDN&_#=Am&J++waRu8x!NRxj99_K@l!4z6OJu{XcS zB+QUYVws@8INof&msDwzNM#%Wi^`-E*T9%Gjz(qZ?HL$7Gu_pBtfsoDy1JpNzM;OQ zt)Zp8uDQLXqp#=qa98ii>V~$w;v=4ZAzYEd;NYHJRE-)=E$<1^ZT3OV~~%*qn)%E17$wE>J#sT7c6Xo3*~%sj^k5y+Vg zu1aOHw|56MCK9QF!(#gfMvk8tJvB1%?WbQ?HoyMz*ZaAL4kbQW44C|5fkPRjA}ivWyK=)}%`3;~TTAk(;H zDv!<(GPq(Inog8}@q}uH+Fq(Kf^SV?f&#O&p$o)nozV?cmr~;ZWa0{x4$eMq9w8oH zVGd5-DvhI5Za`P*_DH4?iimrk`DkBYzDO-mnoLf<5iuF9T|=`M?mT(5_GanR$Mx?Y zHow1L|F%S2!2(;|1r_xZeg?|Rk2_$PPY++NUB30QsG>a~qqOhT6fo@m^OfiCcR+IC zg&P=Pua`f~T)dN6RFzRsd3O5py=O}gUMyEOcIh3wgfhb)|MIt9zCk1^TcdaUxBuHe z2L{Il1SJ^l{hZwc4E7!xgNs7r0IG{4P-7EF^p~%{%q?#D_NRaNo4@^!T|MJ+WtiTO zqc;`EG+8ojp-fjH(dD!rohhm6mTCh9$^d~Xkgo_3sRMa3x5KIBFFyP{fB8*nPKQJp zPGfnKXO?HJnU~KsS3KfW?z3hrxheAjR06Ob$1j&CaGX zGHA>U20M$GHq4>3vcci-3jkn{a|MNH?S`scW2n%Xj;M4QDOuek6E{JAUAg=0?vppq z-+X+(g6>@2*!{YV=tba%5L-9_KQL5&;0J~tB7Ob-4Q~MjWq=k zg9nVzQhV|3Efj%LaJIKVX2FSwLu6mKpz_`+p!D0;CRF|o`J30vXU|Nfreyp21Uox< z8VpWKrM*I7FBTg_A_Ir3WpnKK0#A`RS|CUl2@2$rQl%=Tx_-ErinT3<5$Iea9P0TJ#&d&qDrsfu==jSG7W+rFmM@G+e_Vl#2b@cWfJ9Bot zqO!rD_ap%3$`sjg)%E}|Cof?}mY^(IQ0&DoHVCsM;y4yJgwFP2@jOH_JBd`v7O-h7 z1{EnVCY_^In@$XloIG*5rn<4PpfnY5T3lLHQ(s-%*xJ$E+SS|KakQbeqpH5Cu&gpY zr_jwi&@VWup}lWx=Hl6@^RpLkPF%Qtd~~L{f2g{1puBycv~?h_wkNr`B|5Jzs-P~e zv?-~)HL;{ADzm~PG)-X&AhETURJjF7VnGsHkkIuoOE7DJl?~s@ifd`fwnmQ@V;nj} z$GcA*0x5>}?*OA5kYanAcL1~iT>vv{D|8<;Ug&}81+ol$fEgeSt^1&`1Ol0Zqq~c% zw_4{QR~hRXyZ-Vw|M1`b`~P_Sa;d(xKP9`Qd*HM!1B4ft#F{4J$&4C1F9u(AX6j)N*h}R`u~Y{-4054ZBOtb<5(rg7kxr#{_V5hP$g4bccK+_;_rS0Zt6#xZ zHh*3v)?ciB`jeSt*ntShtUFIWj!s_>Kb&iF4e||10A=>*)%yGOpH_DMgquKHz}~%Q zAIs~zl5Zo0eNrpO9Xmw(}2($vHQ7<8S}zKYjb--zTTn z$h2{4Q@-A*Lhn+hbxzMO?|$-nS8Eq0RQvN3zHFJNUs!f>PMuKcZg7qai#_7(nL%TF zk?CG!nvV_H(}wJAOZK-R`I9KY6lxfi7D=H-61OVH5!^~702WWBB~fX~OlAhqi^T$f zWl|aGbQYRCWU@hZh4dt6RJ4yWayNQdPzvi8e&036X1p^>*;fF~Zq3+Sx7I-YG(B z3e}jxHO45t-C?8SVF$Mu&%nb0;VJ1^dlf62)75E35U;}g^BjN~V1iA>@ zYxo@i_VL5!jq4BE+xjBH<6T{R9qiq;8heFYFOzCTB8^a># zvm^t<#1_^fOB=DJwb061U}?p(1T|*KI%L5_n|C0R0mHCS4+0DfOEJ77uvv-$wD29! z_#zq53vzr_%-V)ZrLol-le>4IqpOcn>zJBZxV*Y^=h5q?uEA$-m&Hmu3@{tI)S50~ ziS#^~9aE^&I(i#id<9AqUv6S@l@x}AOc&cyg;J$G=!x*?^n&7gqn%GiR#{O=ErTVp zw53^*nM^MHT2OKXN;Y4~1tHE;(U~$ZHdiH*7(s7=6jNy(^(J?{(M>GV+fvvT)-*6{ z5{pdZi==vYp9tTeIKQAcPv1y;2OqV@S+0a1A$pKv@HHa@nN|b<6R5>PyKu_!)IYp% z_3nq7=FGVu6DkBrk9J2DT?XR9M;P4AY(h|Aq2+&JyEK-{?iYrcz&fJ~5{P4=1CwHH` zdj4kV;|lx`|8dXqF23kRT#JH)u67U!@#a9nL5wb}v@nM-Z}#LA+8PQG3`mDtLBim} zK6HvJo15U~I5!(U1O>K7FCs_thhP|57%_R0uTN-+{N|^Xjoq8~Ux56QX#%90AcZ#A%-~feKxt!a;Lo90B|M3Dtx{ zb16|DQH|)~$12L@mCg4bR$jmPc>lrE*_p+mQ)gS6JF_wig90O6oPCT2XRXEo&?OP8 z#UdrT$4j7KG9`eP^75larGrs1y=r}hP+G|qR`LX8Vp+CNU|wzWU`BRDVsb%BN?}?? zadd2Id1V6t3>4Vd)a=RAqo8=Q3JOLiXU>d`51&0VJaT$y_{_-Z(KDl?r_YQ6!%m+W zJK8;9GWw`Mfr(vUEa1uQ#X5t|QIwD(%}*8-c=HQ&f-JE(mdOEtc`~_fLa9+C5i@yA z3WK9EuB<7t zus*W5DZ04%a7lAwNpoy=ZAg5fqh}0SqX;_8R$^%@LAy`cN^D3HV3_s(V_EPbdyr!L zM*AJTh$~)bl?NaSMA*S~_8`CT;tnu4gqjw_g)vKjnGKc6lb9Sm+`NLrq7p+Q5oO& zjYm!Pp3bg;B8dU=!IR^Dfe|#ekRwuY#cGgWXwpoi;|p~xj)KmV(ijpBPbm;%<( z)qiS2Z||00QgQXh-Rj!bjGVI9A2&_TK_31IUIB?bv5~?Mlc{_Pg@^X)PtYrYOi83tlj-zy1|yTf%mRAR=ve?TIx~mK%A+xI=uEWjA)8mk6O;(V zWpY)8Qd_Pz98nu{{KG1T&fS^0`1r#0C$}EFdh+t)+m9Qo@N1s9VR`G*X8_peuf!EE z448khSc9O}9?a0zg?N$>F>H@C2MGkF=pq`i2p+e^4b906Ff+Ztz7o#{GxviXus;B| z%pwd}f`)rSfnjc8gSa`z26(`g&H4;{2x2$^y?%%=0*V+USfb%NxHkym2sj8c2q?(G zn87*;d+yS#Dr?h_ZED3QWPqzK~6`~^yHiP}r1 z_LZx=#ZniA+D&itc5)5&_KOLRO3%!#>OMYt@yf%OuU1x9cXrSmAX<69O|1I>oDjB0 zqmA|55ARnWK6-xh*8NMDZY-X^GC4JWZhU5ZVs>J3ZfbIVdTL>D;qs-6*DsvEdVcW= zIF~Qofc)ZxYY?BGy9gB~#%ISyr_P)nKY8NxiNTTHo&gxp>l<3DYZ}WdY72{w*|2 zy^ry!ZCblZzPySps^*F+xq=d*BqbvDNJUL2jD3koxoN3|=@~^~;R#2(2gfHD0AS~) z=Ye6vqvM@D{inw!PMjJUIC0|mz=>nW2Tz_F9vT@L8aXw5`poH(vEH6R7pDNV%2Ob6 z;s_nMGJBEMq_z_sPLSp&3G#jT`2aA9FowYnV{p8fTvwsQB$P;5dzZ@23*oOj9GiIbX#dpo!tj~#=9bQyx~7`CW_UxI+m5z&_8sj%d3s{* z+TEwu?mc_*X8GoW7n2KDXD-~Bn7?**`r_c&T+h&WWA|Wr^U>1A&ccSytm^i(s`l8@ zrih~Y@PfL-B`qmsZAnFqaT%3gB&%j*%e4*eBcbBJ?%-3xOI7={;jm=Cc6BY=k#n(3sFh&a` zCU5`fOIPo^dxrQ0L?afsg67i#572N%~sZ|`tF|7chD zK%L%MCO1fB22f)_GC4?Vu^vn$(gDU4atEW)+dnWqzo_BVnT6XA-@jVg1tA3tGs`cG zvE}VQt?v98^0zDBp1j$5`gZ%{#xHQVyz{4}?O)z+pbKgDo_(xo=}XKiCf05|xc}_q z!sYuep21_|)6ZVL`{|dz{2%}2zn;Hx=gE|KG6keqGL@FXU}Vvm*?=yBULe1+S?qiUGnc`}iw_Gp zydsh0h(cYZ(p9MSC3^de_TKsN`TGmk9$mTp^#0R#FW;>!t!;1Ye8%!?8))(6GjXls zH=8*T%t8)^8RR$!Xfgu~ip{VwKi>;+@Q3vJjShoEU=K|~qIt-DR)G=t{7nS=puo0> zYgIT$a9Ukn0RzW8iwGD1GarHjdIt!B@dJkaA7sL7@rm6%a0FT*N)Z!hXu%&*83P6? zAZI^eXkox$=J#LOWiTnEz&N^v!0L=TY63Jj`&4>>*y>UL*$ zb9-lPYiD)))5p!PUV+JSO|V=OqB92h`Xxq0q(6D`adqv}^7`h|`r5~h^>-WF{lk+2 zg}X@U$Cvr?m0m)nyIA3AatJzcYOcS3Oe!%Mjh=G3qt4*x;1uEGml7JDm6BRgSKmHz z`rL#2kC&I>%|Xf!l+*Ik`mLMy296IMDXUIS%7{Ol5*3vY9&tD%G$trGlGt%PJRmU4 zKOofKFEl7HJR~?048~>fLqnp%!(t*M;($YN7#tJhhp>h3-R*}_Vxcu`z^JUFIJsH$LzYB-{LzNnffD3r(((z5D{%NmnX^AnSDGBZmuGm9f45>K5P z8=nCAH3xQfVw%ulXF&!X8$8)}?09!ye^*a0_t2>7al(t;S0v zabXMW*%CXE#$KV9Mno&J6NGubf;_!2TP}`aaYJZq4;tHvBQOYrQjP!sMj@fa=rk%z zDppn;sp&o1-`&;M+T2lB-Oy0iG&g&GdU~O|cc7}WEY7U$Itm*)vTIt? zs@oGPTB3^TB64eD3z`xNn^Fp!60)j84i~uk#j`~YRus7elj zsKRS8fLW@w?+<5$Q^~3tNrOlsLL4@u8 zX>Iq9>nQ*8`tDy=w*LgSwE64G)*sh){{jZe?BnLopxa(A?~cu0iAu^&$}WM=7qr*S z2d}dVsuf!2_iNjJVeyAS>h+BLm;d(Po7)Ex(o5q~ic7273QFtMdRH5eU+`Dc1zI~d zJ6B(|(M_p!K09$qqH@tW1aZWUAip>gH@@5h-3KDHGdKrj=GPt@nrrG9;);#_VX3zs zFE@9eRvCTL^BYTRdf%=6>>HA_nO&|Uy7e8V!@u9t=GS!S^EiQAS7kO<=z2*haP zd6lkIWym?4(t2j<&h*6x7j8Yi@$kiy*Gq3!Hdcu19eBT}9iRo?1!_NGZsCM|$bTdP zLU<9!*YA4^F_3-xj)Pc%K_cq@m^{RX2zvy>P(K8s09|Hc;fOg0`@`xo5DOWeLd4tx zfMK+N4+ahxrWYa;v5yqwhc-~E*80cojSpM9=Wjd|t35<2Z=TefEAtR2 z+=Oyhjn3WC(W|rLXnIQW)cDwmfm1r2n?mWKP!CkBQ< zF!lGH$jvE=jY$ORczXD`xq3S}d6?|o3?>)7(OGW*a{$cf^!9oKz{W|hbJS@az(6el zd%(c4GdY8!)7oLv>+B(DHeAhI!Hg?xGN~G%B@rtLlL>`V0bdI8D8loGh^d(qm#1$Ff?;GK6&cw*s+tty~hV<7Z;05%VG~FG&Z+(_x7C{J_!nJaA0Wg z_;5s6vQ|w1OlZ%Q+KILH3Y{V-M3o*V$@Q1y7=>91Ni-WR;_#%gT{r@xKqTjim^3DZ zL?zo&=~R|XqRh$2Ki++8uyoZ*~X@}lHxKiPaj_&|Lm;1n%bu0 zCr;1IU%qko@#_!kcOSmIbnV{k`Riw=FAR^*of?}P8k+~Fz3*gcO-uff+Pt!wf{Oa$ z+SZc#j@+8oteUoz@|ME|b&)x>QQ38|xef98jd8g((HRx~(b-z3P!dyXL6#jtGm0R> zWMEd-5=$$Qr6u3OlDoG|@etGU2gZP5*hl~{Y*>u}v;bfrzwi=702>iU^s=#rLo)H8 zXY|-fODH9?82~6J9|!j!C$BK6*2RV)A+zK^00s(7q6cG&G(5RcW%7hNe3_j{=_pn@ z3#9f;j*7un@P!5@TTN%mjP{--l`YkceR0W!;W6p+=Wl{Uv$ACY#;k3*z%aCn2VKk) zs6|o(PpD>c{ zI2Qc2lj=SEBb5dhj#%40Fy`bL4geD=-FZ@=7bq|n_-V_NIorF1fxznOAFFLX{^H&4 zqvxAxIaOkXQ$%d`?S~(evul#G>$(PJx(DVW4p*6663~rb3{P8%7lrOep#_jA{s1s^ z^@|d0OA01Y!|~3CWC~auz5oWoi$X<@rle3(Xfy;c8Y2?`Mxkd=8Gx}o8Z)1cwv0js z3XILq7fFib$`X|>*Wj2oc>3zZ{N3}{pI(3P?7{Q5uRpFWZET|jXoLbo`$c{F3i1ny zr{5-kjXB|nS%hJLAzUFc5m&r`QG_zX28|&A6>)tGFqH864nn{Y`Mx2Tp<-wOat}@e zhSt`9MvFK=Zvny9R+g5{tilcie+Mum&i1$JI7l)KFc38uUEo8G+d?ad6Fne$p=(o{ zXg>}!KM1&>gpspH6Cz>Xv8=O`w`tsF~a1 zQmDJWy|c2l^Ko;#xqCpS^^vIjWtsqQ-^951{FRljYpdTtEv;>Ct!!^C@9r*be>pvQ zQDyQMD!sT8PXHKK>LQdmM@OeSI5Qerm9G=u~H2eeK-*mDaXFfzYH>x@)u^ z27`;q=wxSf3=fS?Oh^O4Ks-AGz@t$c)oP`233sWYReAwPPwzq6w+Bdr7!m{{t{6*=%^CXvP@*D2k-Bq?#S+(2ojQIM__M{#)} z42~B7jKw$bg%TDY07fO#2!Js~0%>GebVq&5iKEAc`vy<;9v>PwHGFEMtFybIp(QIT z2mVZ@QXL>ijRRJdD$6hpI!QfnJz;8y+CF!keX;L8HvI-nA{mGIRNbViBY-IuD-e7(Irr!aTZ8S zS$S1OWsO3q!P1&-X~P1BF<3IbP$!ZYI6Rg4!Wf&Ygosw}=HvqZHAT65hVexjTMEb0 zhGA(#x1q2>(8yJeZl0m;USZI=r%yypeK+_rm7_qc7fbDBQU}18Lg65n+lj?GvCJTm z8xXWBuZ{Bl7KAmXUKLBd;PMtVRhz4LuyO9baP4l{f*wU>rd6hYDw= zKs&j3x2(4N=YREY-mmTc(|`Cc*Y3RRIezZey_YP$_Q{*=y7r+Ph%C*Ibiv0K_N#70LxRV3ly5<(yCLZ$8XGEeth}Xi+fMs zzIe0radmTjYj?cS8(hvDI};vaOTGg8e>HA&{q6l(CL81uN z*-z$Dlz?tO?FlugX?EZoxO}exdMpbPh0xC*07ZyNd!+d>RfxHT9SDN6j`sZB+wB)K zY)^Zwqc!;Z_T%CiZiNYFu7KqiDp*^?AOVB`S`cIi*gz`;9s*Q|?n^xm0095=Nklo@_s2Kb15!@PCy0j;gGPsIHBaACiYPmL;@eu`qt*^*7nl&?(*&z7oQNZ z#$BTElM?_dC~Vl?{&fv8jJQa)y}i7>`+n>5;OL@6>m^iraAfWrsXI^Ns!(~PrsfU~ zwqHKqb^T)F^()PnE_O^#_q27?4h@}_O0^1wy+n+zFv%oZlflu`-N(t^L#MXKKmr*g zm8!*JwMeYti&Z?aiZ9V{1S$r4MuULG7BXR&W(YWJF`Fe~F@-{b6!0Sw$q5e0;81`# zBoGM1T#k^(74f*>h#-QDBP4=iz?fEJ1Xy~w`-0}n%*bnOXge`Da_Qpr$B$mDt!}Na z?JOVtZr*1}K6YH94u%PH6EJf$)huF%918-!{*saECSCP{R#hp}ym%`Uj46_jI(ylh@DQe7yPK+1#ZYrzhr4oSEnz7>0H|gCoP|X4;Pq zlvOqchQ{gb+`RlkVv{n;YMMHa4>fh4EUaqDJ<^m_+K^G+nq1Nxom&@{RU4L37nNNf zlUo~?R~wsE9T=N$?;gz(IDiPVw2@fZ0KLGF4zsWnqGz&Lu+hC@mdrzFkv&?Mcwl)w zMi&xcW&>#9b@qTRz!=GvPNT9JbT0VTRun`s5NB58LkMG3OESZnAynD9+qnnG4Xz5k z8;L2Ub2SV;=rAo)r~_hw!;zVI3VXKH$d%ji(}l}!M!&SR&q-FtcI*3-(y-dFF}zyI>Dp1gP$ zmzZ_!=EGn9__r@!EoJ9ddH6(d1ZoCH&J`$4j$Xmx@d@eq!4XN0ocp41@a3+2ISdH)8F}U1$HspB>%Wgo$n^?J>KhpQ@BiQb>EIeTbN-f_ zZ+vmh@z%cC;MkJ;uRf>bwn~*@6owm_?oOt8kZC?>-wldCT0KwkwjnnljrYUxcTJP!&gsVeSEjHy1KcuzWr%q=M%AZ2*&1(hC?7`3i!-t3g z@b5mf0CbwlMI?|x7%E5)5%nQQ7~7`~6yY4#LDAn% zDnf!dE`=P5b^uQMlZW7dK^!-Pglj^=ZJ|Eo5QkT}vbptfYxm-<2YiJ|qVp7Me5GnX z56}35g67qgpVn8uudaVy+1Op$-2Jfe>D|WHl-w$ymq6*klDe_Q2w*C;m#dR|X<^j0 zOEovIl-|5refeU;>`Y5vUqwqxg}=W?Pj6pzbc#f*0yF9z^jbT)L@O33g#v|uFBkCS z60uGyHA*B#k<3n^afwUJJ9c8?+O1~~9>0J1_}#txFK^wvfAz{OunXs}&dn{(OwTPW zT$r0(oS2xNo}L4nA|7&l@#2+>7p{WczIFe>{U?teK6~@}!~1v3uV1}?_43{7$|hd5 zzp=gx!~$DgfqWa$3qBn95^rp8pnM1DwYmvk=%2d>W@1x1Wcosps*xkEXYp&P$4Q1u^fUbmujI^};^o&CP;F#?E@{)==^eB_D$>Grn09gNt;hy6s0boau z9dGICtf;MP@98};a^~cjGu{2Yt!?e~_05$PbtOf$b|xRW(v2swV~LDhnO>w;8XN`j zQOb-ES*jy1O(!`l5(d$j-ZTyX3`PzmN5G-8=u`%k0sx~6I6`+vxBix{Q|)~NO6l$uV{rCo z3H8pN5h}fxQsXWV+hyid*VOlG^ge8!fhPo+O7!(n|b;68(b` zs;ZAh$7HM29%6JQ%%oI0C{>P1l}RQyN~EY;=pXtt*n9Z~#-?PHv>!b+cmDR{S1TXZ zzpm~6y739L*RP<%aK5tj)BR^3+WUr6^Ny6&wa;C-d+X7g;qmivDFuPyiGg7Wu?ab^ z-tYAEpN&l@Oin!#eK-sHr!d4+Fs6vXkqV?b@1ST8zX-L-oz9ijHh0G)=G3(un_9dZ zbvT#F*NK#_BDK3n>88|qTz~lP`P-HM{h$9MgDn%QT$MVnfBg6V*)KE=e*ZLg4!d|K z+IgfT=XRFXo_6ucqA)xGUBucAZ!!(E7rJxV78DpY(1rrqD}+pqAW+6~7jOOy1w}<{IXlx z`22D6>&LC18oSR(4gP$UFHhmk6uYrR?tH0-TJ7y6tmvE^bZ|iA*e(NyQ40K*nW>*$g4bDbQ6ag`Gj~W@qv?8hvC+H%?;1jx2_;JpD63-8?e<}Ltx zZRe+Jci(0e4XX6TLPZTv+{zLFy{g!pLJlW|#qy1a>kHEGw%?Ow3A1$V^W!OiM2S zfOT}A=stGp*vT_PXU9*T9s_!HA3M?6d%UafI4H1=-k!FjJw3+<0bsoYCz@MZnwnb+ z3QIgZePd%%U7UlIYImW;fh91qB|4!}tu}}vLzJoEl4Ms-vQ88)7GZ!nGkErVnUX7H z)0i|wFJKsh!{9pT?7Qk)&-9)++jHVnTknbH&VlBRQyo30I(ttX?LXGl+uzd<_+MRx zA3j?EuxGE|oxgTxWPBFn7udd6fPtD5n2@DGgi>YbqfC@(k zhYKqjQgTXCvP;tPj-(e?WtP=tmN%!CHYb%dpsQk8RblCsp&2z%nRT&Q^)YERL6LdR zUWYj%XG^le+E!+1EwMn`*o!QQt)~uIqMht5&>r@9>j2w8B)=&-v8-cnf#N>NkP&MX z(b^63{2>@PKreh~YePJ&3v`$@1q@vhBc6>yVQ^U@g~H$@(b@}@CIA>1M`A?NiBcno zFpysyxgA?(WC%4HdmmTtXtv166zYx6!7{Cm_n0slu5D;+SJ(uyt&nj?LG( zdqwpgKUZ?3Nh~vg*mI7L}S;RNHs*+_k&U->rOJ-$gnML>SIrzTY}KbulHkEW4!U*znZlJ5T4Y-b>Fb zi-}GAZb3}00sscDoJ8XT!`OUt`cW8OwiEyuy7vni#h*k8BvFD$ z)DRnTh%GscST`R{BFB=*=DnlP)h_~IsWe(9gON?6X9Bv!)~)-b(@$wLBQ=wcI4WDhVnp#$O&%@z^> zgJcE__z=WCP7pCWIN?KRf)BBSBRI#7*~g_s-M#zI;Lv<(1TX|4LVjUffdQVd2*Zb< zcMxj!xdlzI2s1MbeC({DK@pn$xE_YY7Ey{HIfizN#}Og{!hj`^0AQG25LgF)A28;$ zUmqcgXn_(gf@Jog4mv637Q~3x010|C*ZG};`(4}GSl-xL{q&R0$w#X96luNqDlehJ zPonVCnZk=JdY-=7UfTR+dFR(VPd^q_bqX}T5`CyZ8N`wLu_T^siKj&At5kWoIH=|( zEAHGXotsZPQtHs#l~Pxg6dmr8o$1%xn?F9)tT@fl=HINlg*9M8^eyB7$qK|QXQX=dH66W zu!7{&ywJ$RV<$&}UdKfeJ9>LNdinuoNBe;+M;jWN zDywQVTD?#x3lEPE2~JRH+~D^wD3gN$W?+ky z93h9s27sXlYoRBqaCCBAdtLKz--)r~!=t??hdX*tGu}uK6e4gG&DLjHobUmYGLT?WMk{ms`^%JrIq!0#TBI$bwi_*$A(6$ zn>#Y|OT%Ik1H$5BiS=w*rFHq$?U_ef(n=aqOBxdj>tk|jg43!3lFCCJQV2rrm8S5~nC6EkX3_C>GmtqKGU;wa#3jLcK!k#S|Jqr2)g(LKBCtrLp7`x`fG9sk9zqnG1+8I$Ob$=qu{FODa2>+6Ozj zPWlH$TiG%xG$D;870b~?A789vaO7;>-i#t&qz02IO-6eU7mpzS;JAqBbOK;@Jc&I= zWG|Gts&qc~PN9`my=m!{u5RIJ8D)iqwO(Ff8nu&JWv5cwDHRUDEwRjmOm31X926=i zgUQRoD=acLy{fkJ+|;EfFP7J~egZv%b0i!_xMzfBNgm>5IXksY$72L1Bq}u^s@%6Kc?UOS(W~banC!6st@$ zrug`&346D|$b|eeQ`Z6`)9u`XpS)d`>pVm%r;ymx`73vS{^igA^Z)&y|DXT<|NiIy z`v3fg|Kq=X`Q`7zV)Er`&xg-ejLuO?Q;bjklbZv~-@h^p!=YX9LC%z34eqMjnNhOQs=)5%Y(IXgMM$ zhbPV#De|=TnSDc7$L4OHzxm|GqgVG|yn6}1fZ+%3_NR?)V(rE!wCv*3XY^!~U1H-w zObg5pNCy#O#tbAJ$MqpM@6Z7-!oh!;h*DG&JCMvl=oaFTgAb>Mo^j{q1U3JFfP^mA zBi^j;C-?zxW)eXi;;I#ax;^0S;c6L8Kkl#TfI83{7Fa+j?CfD|UtM9YATAP|1aKgB z5YvE=0Ar8?R6rOJh(QUn2Upk&?MpFS4VOZW6TSe3PXvZu!2X3UC?#5>J|PFChEBb; zxwf^vys`a$ZS(qrCjzCNSmQ2Gd$OeNEGdYv5UDy?Weg39DoD(&Pspva_c<)J3liH! zii}YreH2$2%2xyf#w1EVnanlN*Y4Wo#@jcF&(CFcb%cZk%iUe&uCA((Am@+}yOQEW zg_O_bFd1|jor<=NprQ-%ObUf9lj-d3J+*olI|rZtKU;4B=SGs={pa(~+T)oKtGlHZ zGfTtF%*;H35sfs`Fta_j$4u)*FEf*u%xo{*ZQkUP%O$y7E_C5b@*eK){h#U@Yn{tm zpJ!{IuCA_@?HPUhSM~H$MWv0+ZEkyVaX7lBH)g9eIVw$|R$pv17bd5am6o@)v^m3( zm4_dB{>4|`JOA<3>o>nZ*{W{bVeB@jMR*{AzigzUZr%n1MTP2HAhrNt_n5RJJKSR4 z-3G8hBhEzp`ORDRZr=Iq+O4}+Zhe0Jvp<!17lEQ^93X0GYcRn;ln$L54yv%-JWol zJKX7xv^mG>`@$6+!GcC#VN0;8Gf>?XtZ4NX)()iRHp_Kc@mx(@f-){q0rpUwBraYS zpCDyk6eAu2jDZfrsXBInp~Q*5mpd`$?1^JzhVi&0)POX+Q47>~IuQ)#>|pj;=I!AS zTv8@hnx&v)G!CJ}Adu(@nTdHn%p#Ck*o1~h!81S(sYnt^Z9)mNz@u=mxRMe7#LU8W zQ>$B{P8Lbbgvd}@)s|D#*w8xM*fylmC0ACrN5+>Zu{MDtLh&?m1D{Z!>=k@DEj6k% zNqAEgV3<^4)EQH<^Q#I<8_dahS~L8*WfBtjJjpUmuEtnwvX<7=4-L7;v+}BnPEzHcRsc#zmyMO%G_D*+u$4Fa; zr)R)lUEgJ}WN?LYHeW(Xb(#5<3Vjk!q%5mxbqA;A`jkVbpBrB|xN+#QgD0OlcJ^6E zW|`WM`szEMo_YM4ufO>g$~WKs?w6p$zW(;)*_Sk?oSDS~(+kJc#wwMmR%dI@EN}|x z{6v0wA~S!;;^wotMI2rUl3$!M7Po@M?77SYZh-J=y05*k{KDD`1#SSkfMHx-4;wKI zxHSm$LJqf&CqQX92vHv)>JiDhXk|;!(AweCFP(k*wP#*=_ocT#c;}-_7q8v9dHahy zOwwK^X8k)t05cG0n1WlN#$>`iZo~!q4`2p`zvD1^9Q6*ogR7xtV6;=9A2T5841Hq# z(e?My2nF|yi7?!_Glj^|1fdHM0`x*NP)r_;-y;?v3iB)mEiA&o2L~JYxDUbuV2qha z#4G`ZVT0R26WkI!FpMa;dyGRdXvKV7pami4e%Wbd3IGXeI19G}hTUWKYlfS`Atn|s z_$qJ^$Kd0^Rd;S*y?N{MtveTQ-tmMc6{ZZaE`wC33zV4xWiFvC5UGnqnj(q5Olq!> zSt=x^GO49fY^o6(YiMJQNLwk@Rfv?ua!rv|o7+@Z{^X+*FFfmh=3MXNX9o}L9dr%X zH8mE!{pQnFlTxE36;eV(puOLPT%mv~YpI>e^r)hL{qd6lZyR5dMzpim8 z7+zmlJ3~-5sXR-e%xi89I+Dw^`fQWAFe$kzH@~jFslR_{bYbbxBTu~W<~txHZeP3g z`PG|uFWhewDzcds&kZVWT@x57*t-n?-at%2P@oMZlp;II1bHE6v3 z`L)}hUAgncV?xR=5V{DmoloRf*Sq&`KYZlm+3C6EuHK>A zhW7fV?#><;0Ia^HYx4k7U|>t@`(~Hcj-Pq-;m4m+8!ScT)sd;W<&CX%&_&B@(doJI znfb`nY-oJS69^Bwd{eV4^9!45jYFkP5=j|=sdThX*}J{5bzph(@Y3eN>6HUxv)j>mgt7S* zXg|7rpxk_XI+|P&6<$4)xgN zjCXXb-#JoI+o;eQ#d2+GRzcs8e|C9metmm5Faa#<81#3$!`&WWSfptvQrR_H(C8^{ za+kG^0LH31z2(iWf~sy?dWBG8-_2I;W+|A=9r8W#(%o_5xIHuqvfoK#&tn$G5XN@z z=7KS=JjV

(H6pGN`4z`;or!S*C@ckf|8v^x>o?s)F*1b$qiAc0GZWCo=!NvgIH zG9xH04yEOa3<8;*FE$BiE3M8@n+wFsG?6le2@p>fN-V8Ce!aCoNa@V>Y(k_FP#TYK z$~7_>iY(VP_4N;jQZh=E+NALKa&2ReRA~VnmdKTWf?;!|05GjS71R>mYSzOmBsdc83P zCGP+!hPJ4-s+Cr)+76~s+w}Srt1UY{qoky?vA5s9xP0*V$#Z+RP7Vx>wsZ_n&Tc;X z)a&P-e{X1HA~UZtDXrkgKl!_~^g^>Gqp_*yi|_xSxpk<#vc0ULwY}TjHxz_Auc%h3 zcNA7O>Ft@6!br*V8{4OiNqMQc)mcT2+ozs=?74R*m$oyCYK=*SV^iyoKl9pu{`W5c zU_h^Le)sKffA{TAfA((;t)8T`iuXRbV{+6Q?9H^gvTJBBr6^?yGQr|m=?Uy?76)hS zEluQrf%d}ms$uAbl5VirC~FiGcG$+@wzJu798Sk~0OJC{dVpI%FBTVc*dQ0^MGS!U z63YfevJQ#5$(q)=|L7~Ho_PJq7vFl}%@1CG|C93nml3 zN}0A?ra>tajpmZ{jBKx`WqqaX#If$v$NM)|yBeykjWwy0k^YJBKwV{~R>75t1rkyy zCB<@)TrN?PghZt@gu~Odwe2dkRjW_2CFK^Dw>Gr7dxs}{p*0?9R%mmU*3J&N=AL`$ z)7-)ql{Oot{7|QA3>nts;*6a7f|Az8Hg_9CLr@C7cC>?5culdWQH-|?-(D9&(vda4mxJg{8Tb)%oSkrM0c4jRQ*?M?jWE=e8oV`=Yb^=T;7_?mMt?VE^8O z2M!$GK63on$ulR8pIKgB4~53->zj*9DjHim`i5NoP;_Z+6DSK98wrMiY8|};rB!v= z1tqmj9pUl0`Q@$1PzC*sEm5B1)M>sWJtUB&j}2ZOIqOlZwmQ{^W;$4Qh-h)QBXehL(Zc!a84Y-e}GC zkIow`St?yhTc>Ml`%Ff5ISPW{OA^^ggvpgQjV{Gt%22B95}64EnIoknE3Zyx$>|xM zZ0jAfXVl7c`36UwCAqGPBA`N*dZwY8ZEWr_1e|IQj6iPrvx?+SZAd&S7{^Yia9Q zT;BNkfBoM-`_W(i`_KRT;GwgH#f>tBRjo_PFKh5e<_AY24Q+#E)os~DHMH8y6)8qS zvyGiDM`p#Db8mnGTiSPee&a-QkI$T5l#*Tf{3{>)#ZUg>-j{#;$)(%>^6&rk^*7)A z`s;5F9(zh<$b9Gg_16ALb4rWSSf5`WOvxE!39}PK}X2hppSjb;w}+5A4Ppr6C< z6;S;Gs*jcp%T&E`edEa3_R+JiJo3z&&%XBFEAO6v=i|#4uHCtD_j|YReIFFqXP;6dp4}jsYas^Z2%H=CpE?L*#zMO-voJ5Uy28=bmRVI|D9n_#)Fc&TO0!Y~!@YTa zSB+6CR7wO&F|D8!5|K+h0 zOE129{?jXWFI>HI>Be0k8B%5_u<#zpEI`+do1Y=Qb@T4kYj>_)zlZGBy{otGUB30j z-LL*UJiT4jJf|>tM2d(&5*5;;0?Nx54v|!|NK!aCcVOSaQwNTn*?;78cw)Y}9RSu2 z0PE;>mR2@&^bW6Y9a>u7T3Fq;u(~<7ygt3K;_{8wHMaw$fL>tJ3(LXC1gIHbC=!lN zkB!faPc1~J7N_Rcr)Sm+3hPwb6k28#(4YzQq*ALeNb+)(wI#~>bh=JYR!E3ko-mCo zwD1W%LCb_9f`=3s0F1{Gl0sUo(vL@{7w1>zW)_!b7gy$%R{&$n>w6bh_RlSEPcI#u zSl9?n?;Bs(Kfk_jadUlj@A~?_jg9?lD;txOQ*O6MqtU9>+U%Ty{sHISeFwJ>AD>@Y z12yLI1;GYfBVGN&ZQcDN!Lh~FeKQN|{X_ny*1m$0nzE{<>Zb0-j-eh;sLK;-bp~5p zqYVS2Ro#L726t|qr=Zba)*dKt_m;J|@~V2Q8C6J%p(Qcdp2VFPMZ7WQt~m0cUBbBC zL>!Qe(PX=KB0F~CJCHpP;sHLEVgN8uV^GH@a1&X4Hb=-}3*te3?FKc*#+#mi?MW0S za70qA0|2J6WQkQt9I-y0uVGV3w7yJktE0`8B3-dil?wo)lxYHqjUzM?l%=qwotD~p z0zHqf;tLg0nOUw($}Vi2nA;zo+?ZQA9GzOLtnFIeJhr~?gi31{l4>xJU!cPjDw|Ac zk;qMQl`SKuN^8vM>JN@i?5%2Y8ypn{RRd1nip#%RTG`j$6=-Pb*PGL2Dob{L#h@!t z*VI-}QdLk~?eT>A`#olJs#a&y>XX!3yGCnQqvbKXN@>&UQmmFNn=Lyfr63D1R@&I! zpA0`!DOtr+O9xtdeCykf7FKm_9Xq#r;E{~NhV0@dwK4ta7v6dA z{KcRB%YRfg_qX%}$7eQw^Yu4>`B(o~P}5t@Us%Q znept*1a=n69mUFLavoN&IRG#ewZY*vu-NrLubB2?GxXwc+V69#o6YIuaJmt_IH17# zxF~dffX(ma6Fou-ZJ|Pl1|*6Bsk$wv#J!F3ZoKy7OYgk+)(3BX^vQ>pZ(P0e<;{EF zzxx>g2Iz&8Tzt2tg=_2pX_)5!A&hoF^}h;kXK;uNm;}ZE?901%nXPh}%kgM%6Gn2O zo)~!GGsEoM0{ghcJ_h(`4Gat@gaF38%M5nq(&ZSy077^!F=iN7&<-_LTDWHnT8LZB zG$WkaLC6EqjBo|&$N&sP7{fGFFjo*!7#|m`2%!bwgli}WJ4}hSgO7m3tcu~8Ll_k+ zFz_GjhRb(@+(bD-uH3wJ;pW|5Pe`Oo6B`Od`eKp3lmc$)%1C_~Wq`Vb(w7T$C4{bo zBhO2uGZRJ0EKxF-PUX{Sgd~HIq$_lJYD2z8ldsce8FY4w!Qe0{Qf>0qx^%y@JnStU z^%RA?#WRrxue-W9&uUc3RbshBB$d(%sZ?z=Cy)4}O)Y&ETeiiPlbKst*EmpC*_B(+ zoLkgd-{RSK@UfBL()8l?;`)h|jWbj8hqh0=P*mByy!o(@c1Tp&GF_fRU!*V;D~+XU zQ>iVzF0-($s&UvAm|s75_S{SFesJm5<(pqzyY=O@o1b63^~KejpI^E88PpfA-MMn( z-sKyBw|kea-Mf7A^UHU>c=+5KLxC-Yae!8Z32{_FhXo?9fN&CIHzlrW>0ntNJ128+w;x(A#~>wAG)U?9I{7FQ?dmH=I$@!6&I{hJ34 z&#$b9C(u5VAZ1#+dOd-NKRh`;votxo5}8;GM;1G}JX(F4OkpQzGf%9eR0gSDo}8wr zEzve+OX`e7m7FLL2-7*Fg+~|!ltM_6JOPKpW3#y&W>XcpR5jS|+*sSUy1cQ(U<{FL zetB(i88K{O<~Ms^d}?IGmz$ff*650g%O@sh zkDoYm@X*oVSj0Kv9rlbs?e+zo-hk5^1U7@v^p1|VboA#IRw^}SPzi;lbxrL9-m$si z;ADq0&^qjI8VWTIMe6&b8-UtmN@rHZ96D{XR+FqzC+T&mMnk&UoME+QrDc?q zSG9qJK6dJ=*fYZOcx_$fZ_uV5?gG15O^fCdVVRNM{F3l0r zltgQ=WYjeD*wYGWm03t@4;+0wJ-2%6=o9wzvcspJefpIT8#=wYW$kIXwI1L2Q_sEm zAOHD_|N8I$o03_iwPY5TxBllZem%8(M61ucaP@o1nH~1@9=X1@v2#&rsAKUm(9#z- zJD$aaZ?IADA)DE7nZ-px^9hMnJbnv{-N?wVW;O@>78a|O%S;{ux|qNXG;PROFN*^T ztdGMR07D6U$zGBkAVmEX-LFvhNR^e#d!Ib{7)pEi{A(Y){{F}BUATPV#_b#TzPyQ6 zzrM?yiv&b5f62@)GC88az`@Bs z&~X2+5?cvF07C-nDhfoz^n$N`5N2C8e5dk5+}38$%&+c zO(t=Lb}pL7vJ#Y4L?_7=sqkB*(^!leoz0-mPSrJ3rFfl%HU!nS90 z!J1O?=u>akwzzAW-T7th%bO>Kw2hKyNHjU5Jd0Fji!}veO(Cr*Rv0Vw_6AE@b4Foj zVRe6(D>}D+?8Kuly#CI`3s*k7a^rhfZhU$9`sbIfeR1*X=a-TH#l`ENUAXb(TOVET zA6cL$fn1k~1N=nNXNz_t>KDV%{cgXJ@n;s5CTl!t~-9ycTzLw$9rom9- zV5GV?T-Y*_)8xu&aTjz3N_v82o!)}FzT~`mi6(sySMyMU90hkk&FsknBzp+0irp7s zy9K*0m;~GB7seS_Cm9WOwCLu z@^&Zi_pm8Ssy8}vb4wfd9ev6j-lVm~w7G_~wD67X9DNg8QMO0mAf(A`fgz5qi08;e zGHYjd;NF)%XzTKD_;QOaSD{KeeB|7zGcPK&$+XNYmYQg(S*=ew^XT)N`%jfux69Qw z3@}Qf7mBocOSV6Pl9v$D`)Dh^0zo>?OkyH;FF_A;ExC9%X zOH}&Sj=sj`uG-qR>gpD|J=5XHuBvJSnWfVuYvET3Gy-~VAe6eQOI|09d$=Q{UKKpjRXQHC9|GBG$AA5IXCHg&$A9y;Z@qI(Yc5<`J3g~?%9Pxuu{5UU4mGsTvjkZQoSoQ> z1a>y2S0cMGkzI^pH_$uFwV=SbJm40J-GG{T@e2oTfc$C~2>JkEY)&_N@e66MUN#Cr z?By^Dj4SA;Bu1-t^*kKe=y@ObdHUWYq$`XKLARBfye@A!8ba_7&sV0m|?h%VJSu|+z5571q@oS z6a%(F4MV}v4z!qHeQ=-!(+q0HP{B~a1$=11K#Cng!Dn&7{bSu?XVFX0_wR@m81w`& z#|*I32M*EyZrujtf(E>B?dHQzzd~tJCB`DDrBZ6CrHvJorck6Qpj0`eDho^?&*Vxn zc(P2MBtt067Amv2k~EGug)2(o2<;r9l`AxJ1xCKmBp}QLX{0EvRIJr1wPw94#ilCA zR#g-m%Zp5T8QOH4BE_V%>y&CSB_$~-B^Hx3DHQX0q*9@;tY|DRYs@dG&B!WGNh{6D zuFWlOZtDry)5;v_WfGO0Ryi{A>ytC9HV!_qeeyYLS{Vu7^0G8So-UMU63T2+l}{)O zh4NxrTP-&=sjST^TcgI&U`T7Q=QQV*_tZ3d+`+}A%~Mak_`!Rh-v0FZ=NE2#apC5d zP=9jmiz|2j%r&}R*)${7yGdo3Cl2$e0G}KY5JP-^i&$C_h^}oMI&t8{+5IO@1Hjg| z508W+buAs0H7z&_v7opb6c~VDY;tC4eczDBAB;?b`~r+k&94H(7%4UdU-})r0}8Fd znw;kJhL$%D?Aty*y|CsVo$v-GhFsy)v=W&jStPadX#-!XCDn43QCyg(s4b9ITLo2W zL8*w$;s_iZp_xZ$1*DWu@YpD&FUrROUq6)8YIe*{FKq2Sh#0oIxwx=0J3T))Gdnvy zvoJTmx{TgyKDe@ZV0LwLYGk&wyW6_^%4-_ZG7C~O@*7%uy`xj!@Kle} zU)R=C)zn$jKG4wXZXWQp4hNfu!*zqB#a-Tv=ApFa;p`4iQMb3OYow&rl~>bi%dFvx zt-BHx$l_(l_DFZd(db>VT?AkZ?JI_iSrTImZ!N|c8!>EWNsPUFHygAUnf8#CRGwDXIIw^F^!ZQkh9~!zR(DENNi7}DKl#Dmw6!@6#!QnrhbvHVQ5q^WPpAgr zwfDg3vZ}U~jU(&(j@wi6#WEwak+EK(OPO6c;)|>nRrh34jv-7KTCbVf!YF62?hhNAkZnLFVrsmb}KmN>%Z(VuwqnkOU&8C#X z?NjHTc=pv_|K{u8efvAGZ@&56*WY~mxBu|Zb&VsA)bbBL{mhcuqOmrqERDUcEvdRP z5#$#qgT={8VEs>eamo@o6(GNG+&lmb6d0EW=)#eQEf`>2ZU-MU76ULAV;Eo@em_=V z0&-BQ9MPG^)Mx z3-N=|Nw|R4ff_RdJ52L;4ip>&j~VlzgL*J)Ui?%;X{}h)DO_aRDEri@77Z1JuwH zkA^xh2*cOjynP2gEBrYx-Mrg17?f(WrTS8-u~KEJ)!FNWvP`}>nI}o+(srK2!Iz~9 zl-YzTSER`&mAQl}8&E+gvPeZXA=w751WuhMGIwb=5K)5=n^ zDy%6*$(iLxPd|I?%yUXzDy>SAY17oEe3dzmkS7Tw4uK?vCrt%_36Y6$# zs#|IsIzfRIl+*yg#%JbN_wJurT(u>qxAzQ$#;2Dzwq}<$0bt+<#?b25fNP|#xvjaQ zdv1Ai@4;hB>-+uTNw+sV>>eE$3f49B!sEPHZsUn{99kt%%A|TxdOBTQB&$s!t8_$# zRFumnlDPytKIr&pe|wY>F_FuHuk1t~ArQ%>s)4@YrG?ei<&E{VeX9Vh#npv{g_-G@ z*{SKd$?4Vk#kIwiz02#Hb1SRka|^!6tTPB0TL?}pj!n-;r)S5f7iO2%RyHQ0)5C-A z(y|JJ(QLNZDywQ-F7MRzJSaMkFVr{W>KSx(54hTU1{<2Ynp%6k!HH0Ge%Kdj>=-Di zYRW6ADXZ(OY3*<9ado*vt*&shD^%|cRSfv^Iz1UJL)mT4;%;AMPq3oXSJLFnDs5L8 zbC47RdL@7eV|K`lqj&E?8?x+*BX`9S4?Pgvfzwbi#su8Q0EPuw9Ba=W4$zArC0s6* zz!JtMB8Gtj7<*_p2kZ}bvme^S*%i-AV2N2gsa%tkSJIMI)Lhd#V#;WiSR1+82EM+N zZ|D-4+LE)o7Pro|_D^IKcA1jOr0O)0EQyqwn_7kmN+&_8%aoN{!{RE0qz*`yo>k@# z&1sEkvy1zi+6K=)@sc+`I3{&uC0H z7}E5{wB*#nzQMr$?T1f4@;pEkl;VhQ;?qyB=*?M`wf&=!#eezt|I9CJsI41xkIXpT z6WzVO;?hP!q$X%(c7BD$kt0!Bgp}swBQI1p4JT#QCucX?((975o9f#9gWkEE($?1A z;A`(){mUQ!6a^ll*m;Do-+uGW>c$y`F5~@=ZqzjUjVT>6b5%~6FD-AF&1YWx;$$YW zvl0PdtUTteFTCAX1>UccD`@2K0A0;oehZJ^%Hg(fd2J~85CF#O;BY&5{9YcvkHbtJ za`}A-VBB5~53Pam1cM@pORe|oEg^+=P^xZn2e*zt`r4zl49xPDL!Jy;lweYbdqyJ2);CZX{W8j*&(2gYEG z(NWMJtF9f4efhobgC>I!9vlk$_!4li&%6hApFP;e_`wcVQJ6-cpYTi|Pyri80u+WO zSCMvuL4aW>u#lk#GeT@_3V)b{ofEqw~>n41ZTX$|>y#?~?#-*FL-ud{FHN9A(%a!U%6{gC<$`Q4xj7Qlh zsa>tlHYb&kGKWy+AhkK9I$NyDk!kZ)rb3maL~cYTR^|w$=|X8Lhq7@93tM312()aT zjLj8sI3(yQ5lJg#Vzol7Rnj^zg+#BE=};;TiA*FV`Gk-w5U|m9_@EmETuLt0m`!O~ zU9!QPX>}9;x{UTboiQ`NsPWDBE*Y#@a$PDVPa@?G_+W(8A(Yq!l2kqjL`jA~o<(Yk zDP6hPP$SaUO0CUeQ-j3ZBsSJdEDbViqtwzMw>GNm&6?yEU0RDFy~Uo>nNi$d)fVdW ztxPPPZtI^btQ^zXT_TlBAo21j504t;3p%-iN{z8e*`QTnRfZYZr@l#Q&&?i;>&%=4K93`mh~+8C837dhK0ZA?ySBc$xU#yu zygE0xFgrUxH8DLsF+DpmvoJlsGPkrkyR;OUUhqXH2Yr(RJ|NjraC|;IJ{O$;jEx1u zt|3=reN#$un%Qh^XlRN=Cze;%#wVuw1_nEO`#O62x(9~)og>5UATW4zY}!9M+1cx^ zsA;t%WvC3cr_n>dQ(;aDXj<$NnT0G%;SGaO8nA_>j>GTx!1S)z*>juKL z-NCX(S4wUJtxDa)QK5-MAXywROakb__J_L!yB-qk-X%n7s2<`o(e?;nz%3kM|9cj< zo6TYod_FA@NZ1@QKAsPjkRaHzhr6?K#>6Pb#RJ#?augxfq~=s+7B;5lHDwle`l4$x zZJtomAWL>?Qu@s~gJMG!sVpMpnLNtM78*E&K_a&*w5bvqO8d0F?*vz%5Q?-sLY16e zG&Q%mxpgA1u(rN+K&rO)^at|_tK6gWbL%HP;T4dq{>b`QfA;rpeQ=|x-6xhO$&|@D zV^(2#YkRLxZ_Q*2=yKHx?8({QT#?ICbi={QSyKKE3+M#p}tb zrDj_}eo;e9ySu$>q^-+cSlXDLR}LmoTZFW>rOUap?{sQzgDtbcmeZA-+mn*pm7LY= z4lYm3?f>B7z00@0{KYSS{fl1#w!Z!LYk=7AzWC~gmZS>r=)%#{FX?TyhU7Mlqq(AS zf;Mc3Z~}wmtFOMoK0d^!VrQ|3`3Hkw2af|C;3QBg zhOzq-mB{c-u>rSmGG8Davi~)Ki5-S{I}?#8j2;o=KD{2~8MMbp1~rBXW*BA+AOQ;C zf#C`>`FI~-*hf^mugUOeU_c}=%pNGfFyIOr1V)FR%q?R0!3K?Ri#rb_f`S?s-0~p6 za1AIAhv(I^4O9UaE0M}+2~ARPiV_G(J|*A~e6~=?r6gjt zTyE0nl1_zZl_%wW^B)%k#FUb_j0kL^P zbun$Kru5a6p;oA?7U-%-W1YxUPnqk*mIjHXkv7-UrdrxmF9T&}ZPBE5sgl|>$!&(z zc1u>5J*O`v-;-JpGG~k`Odd)(z^7Z-!g3Co>mA!zJ$Pc@(bJ&7mi8U$81xKzg6&-c z9i0QUwJqh97-0Q{CAD3B!;z`^(a2O$S#?HkF{myOSZn(ZjZe*^F!a!vHyrUtC$No8 z&n>L(o0?zsj*gE6BGq-R@ZDrGr^5G9R&Iq$MgREJpg-E>n&@`T4Ev`7;hE6*WGFg15^xSU z+gsY}YU+Ky!2H4zfY9Y0X>M(+Z)|RAZENf5?H_gzc>=>DV8KDRzpZPqtg2D1w~C}1 zy(OitrDxDP<{q8yb&s_U_*#bo?e1`=Z=%&ZQRj)44TbW10!1Lg2F7ZK#~TO7YPx&{ z)xFlVN&#)d(}{8M=uKy^-Fp~|qvG};+a32^hzCk(j~Ir-6n7#OkrZRpSlk{qn|_=HBSPn9VwEp0=fY`S`U zO&uN~t;sE_2QqCOd^9w*)!ZE{uN%1aB|>h`&ettA!suxHc=9@RGnl`EiA8Y z16gl!q<0VbI{Q7PRShzwfy)(G(MPMmuB*oy-k7V@q`@aQS#t|Z zngC!;Z9^3`?FLH*CDBt-!=q2XRb17ZTi%ym)N9G?OwQ|V>Yh%`Y0D~T+jr>k*WUT$ zKYsD6b1%Mo=)|)(?tK62Z@>QUU;f(ZnXx5TUAyzA`Q<|fN3+u0P+S*L8S4{ynTebX zhF-ae>^$bhFO)KhE2tKb4HVr<(5)g_r&!iQNx*suakr4_;R!oA{0^?5i_Pl*dL?o@ zS-kEZzN(^AQKnt!J)a*peV+ZOOX;2TQ z1slH6-Fu&7fZY%AV0H^*wqp76d*9t9b_*yByifrF2lXGsD1{9G7GoF&4>&vcVOFpJ zOqelHWAGsMFaQH$U4?7mDkd}oV+@avM*ze00)yTRzjlJ!!GST*z3u}H3_}Rt3lIeW zg97)$K*9yuV|;=d{20BytC_R-MojvRTVU|9fV6WP;`6m{879lb7MFyiI-(bt5Rd%7oERx zM*bKlG0a+jn!gP4Q;9u8ydt0U|74{ z)~>L(tCBhuNo{g_3n(_JxlL~AQds-U>27PLQ)_R}Eq6_=o>)1E6xjOqiG|HWgTAre zp^?Vco|e|$s;Z{4%7*GX0N6lbNnJhzCx z3=H*qyd&XgV0;qj6+wX>OW}#Rkzf=QSaNC>MalE>%0|P}!|sq=Wuv7g0jcGQ)PzhU zRY;QUilPivnO#<{l9h<0SzOW{&ow6UG#r6KKoD#m2WIj-QB%qWffW3xn<>*O)VY$LoT;>)aeNfI=%hF zp6HK(w=-|2G&#)o~;wmwgN$6#}>yKUIt;R$zm$2)^Ft^Vm+_he~* zxTHS>b&V_9;GU=(jFh*J>KSar>n2AJ2mhECav?~E@*KSr~B8o`la0w1)Cq@x!FqD95H(-pldp8@D zSwg%Zku9R-rre^&s^+1B+SbC_zOCagS~5GF<0l*iBXUc(!rE=k?2XPI2L^EYs^pa1 zk3YV6;^gBpO|pDNVTrmE~2_RrTgfFb(3#)l#9a~Tf+KZI51HDAj zE}$1J@2BO1A}PwFA*A{^!Y;0`ha>1=^SfERE}&Ne8|v;vZVxsNdhx4|&F>+_0I(5* z(W5nXS2vCwKJ)U~XOR4Q^}SEt`S{AGS8iUtdGF?(FK#mc!v+A0aU}*YAOv=B!CDFm z<_es}4sHRSU^qQs|3j-m3k)7JIE33_fZ;JpeGMV>jIa80J$<Y`8O|z@6Wx$e@m6VoOT+-lnheDz0Lx)bw6-Gj= z70Zmi&}?vQp=UT)P}ZcgWfM{hkGAk704*z5WaWx&0@_YUEL=*(CL{?wB7q}F`tg70=| z7DtlFkz{eC*=$)ZPmwQB76=ptpwcL9xky(<8){{y22f*Sb0Y;R%>vdS)YlREI%KLL^$ik3ox)m^oZnvG;~$w^oLN0Mzj1hR^GI}Vqi5LL)ZW+B)>~EGTv`DD zYj5osDk^ONjG<`w@dfy*np)lqz?a|?oS$FW3)*Wm zIundc`$7{S>FOKWa)I^Xv0i_qxI$EyOfe1@imZmC7b&^tv z6lFw==UEf^S~g$76H*)=AO4;bIEnEb4vSBVUtOD8SeRX0 znp;|)onM@rU!0zq8y}wxha+R7k!Wyiax^*zpDZ*9A1E~B_I336y9Oh}zDaL*JUABd zhsXS(>GA3D=me;`*4B2L&7qL1l9Ezt>zZ6{UwCZN=MN7KdHVXDy#vn9p24Qp?%Kxo zjvmlv5qBWk>kKq>3>H;4SGM#t^g3II13mtUfzVuUaIPyj-{PIF9*!3E2J`xYrNd*@ zu4uh0(l8h)@v=4n^3@b^*ioNcP0hd*UR!cZtB_c2jY?N%Y1T+F(oo#w1ka z?a+%+W8X#FBc8G2<9Qqo1%`q<7=YnOMJ&b8q#`Ib5N9j_pOh;#*7V$}tb&$4=VWPv z+n(2HNbl9BI8`>6Cb_?;A=uVGcH+_3zWTwB|L9MDVofPk=+a54MIbh%WL1b%R=z~f zqjgeUl1OHL_T`ToJN&P_dueI&Om0cX(&pJe|H*&6`^nu4*Z*X7-)W#1m(cPEl;%UK zLOJY#VYJeux20D#bhLF1o9tVacuAB!B55~C1HgJ|`G7<|Bv-m<>5xb=MA3r+QNK_$24WG6*D>@$6OTI#`{K)c(D6RNpr9*b{9~Nh${F@|lKCQ%T-niKIOY%=It4YO zf#3`}$-EziX@pS(hCl&6LpB5n=2WZ?UIW9U;YMh=ufPzGF!t~%diBsyVq~uyLA2br&n&AJo}_lYf)$%5}8A( zPD#lus;Y0zE+|XQ$WKno9Su#^)VAaoRwz_PiQJH!mOnAQ($+Q9Gw5-8qfMP|O5xy= z7A|S#kR~wj1;8^}&lRaT0-7VB*nEP;B@*Fjk&RZNaXDkN%|R4bDkCA0y)#8vu~L&u&H%We7PUGDH&Yu{LX=V*^-p~E@n9zW3G zTr6t}ShCy1h9a&s4Mq9WDQr5GEluah0A?8+M6wJHoxzi4fpMgnTzL*(Q7BLpQ|fX; zQ%)IbNqq%rswRxpgrQofuc7p{l)i@0R*6;{^vb@`sYQ2aGCIH3=k^m4 zh1rqn@{i4~>|Nfw9hq7HbYXLPL&Hwrurn|>zp-!Y*uwHwMpl_jVI@TdzEC4XkK}5Z zQks&aDo$6G870LMajt+!V{xsCT(t1W;n5tvkd2ZevJ%*=M2>(*D&*>-lH%pn_4%c> zxuvz4g+=dZXe1DvURVTwdUg(U*woa_M09d26d4PKBf+t$(dcY=VmdfB;TxTB`vYAA zo|Z0eXMbqeJMIld{o#pV1k~7wYoxQYJ3Bj9qtT@#r*(GphDM{Kq48m-x4UPstE<1K zXRsGAHt6mf_JX(si3xweu6}oEU7OaHZp$nvZRltj^tqx7BQxvHiPiqlVozwHGqlj? zoh~1ay?@6B!(7k>VPh_OP|_ga8%?JcV^@_OH?SVgHIWOMg)@)m?ze9MOspB zC1f_GA-k!=^U>wIY55IRjn1$B^dJBE=f8USt;;|7tABupLN=ks5sXrWO` $6sE zLeSr0l|p09$}4Yd?Mu%p77$XtP|6cXBr;uQZdrbDO+iVuOl6cRjE>~Ix~ATh_3dB$ z;#XgP^X*^#_$Mg1;+t=O_OpNg+rRyn-~Q&CKmXBRpL+PklG1)Log$(gGG(etnDtA&=r`%Xu)iRxw)t@NLX7Mr; zxmhf3E>}=2mNrV{ZBj*tMBYhB+bC(fMA0Xf_X=q^?3E}6!6>?4DjSl>ouqV#k~qaO zk5Dws5%lqhLBJK8-v`2r&Fkgz`?>r9o?wtK?Bf&N64{_e->);b4S6?@Kl17$&%E*M zYwy4E?niHbbn(+`H?Q8hck|w7cfSC7A(mj(b?@^p@XpKFa6t@-Epagg3m|Y}HD(De zJ3X0QDA6FmHM|A$mtO#xV02&=0@(d4cKY96He(ouu0j{yhb2~8xHFU(z_7CuMt>dc zy>b2ajq5kAUb%Js+RbYy$PlHLzpsj741>-9Fw8A5I14qR9bWWe#=+o07cvGurWfvv z4No>=>@k9B=M<*hg9ex5b_6hHT5w0(F&1Oh@6ihiZUlw_y%4$pe<;80-Rn1RU%PeZ z>do61uHO9k(lyWlGPRMG8^rKu>5L+I1~TMr#^}Pr+9xn@2GWBNI6U zs4;kQgf9!I5y`MId+hQ#LLrY7lTryKlZlm5u}UJ*3JE1&pb*K7>A96NONZ2!{E{YD zn|szjb0{!-WH7Ye>YSLk zK;B7=#ZrB~(p+FpEl4mkGt;5sHn{NLYe62%`48G+9kpOUSWov2mfPZwl zqN+`ya!_KUfY9(sEh*86Wiq3QF341rI_M%5nJ*%;c>E*|-@xW6*jyP;Kygt@4i<~U z29mM(6iEYMMn(d23oG-Bt8)uW(TS;GXv{U@otm2mWi~svFf%hZH90dLnE(+M@{dLW z;b;)_R%j|1o(_a3MgpM$*GNb2NNZ29XK38zpY|g)HtHL7Io-gp>dKnNhGxGn6b_Ah zMgl;u=9Z3@md=j$9`FZ-M+RMf5SPOvqfobX4`vmWQA({uXDq0$>+?lI@VB(KJ+^Yt zJG*x{~-z!M>#REVTHy(uNPurf8PKx={rJ8N2YVRn8+ae2MLn!*u^c|tKE zR;Ug3+Q!av&%gfHKmEtwevM+=fBfU0&Mlk>MGjoJboZODzx4-KZOOGFX_8!-PKvA) zZI-F*q|_u3>!FswkDScbGdwXmu|F-Z-I&ofGW95_sj=kr<=1*j>Rp*dEgxO};{3;# zzx@Wq%|pS_8y{V|ot#-eKC^f4_LCX;eYT7)dvJy3v2=NdAj8CFHDuH1D zFcvTj6c`WCHOMD=1Z0myI-t^YW#$d5ejArIQSHD(Duy?hk!ueV?sGV ziZSnm#S9Mx1-jrC9Dm3NGJx6lzW06fGBp(F1LMayiW_l(zJGux44E)`l-2d-)oa%; zUxAvDH#=E5pvH%&ejv~TxDxZR10(|6fB|B5jKL3B3}e{fHgGerTeko(43ijK;j`F@ z0SsyY*xfsTCIqb*^B4r8f{6ts#xvXqhv38jh8V_d6aw_Ras$b)_ddFyw0*7j4`Cf z*en5;E#!e38Rr&@DXU}C+XtW}#*o?Gk8u65?rI`e9W^XrB)%X;#v z2fAFdzKN~&;iYCfL3rmwSb2%|na(k1uQ;pV>M#w!Ggnx#|LpjV<+s7rVj> z4gSe8XSi&5w8}l!=$~ry&on#7%Uj$@ISoQ4xMO#Ma@QXDt~eBJzk82#H=0@$;~7P? z-7{hsS{}nMK{KyEqhQ4c0R{$oE0M*=QVa)oV3J`e#`H-5Cq99f$R^l)+GxwDsPC+7 z>Mg43KJmy)Pdxv&-j@IDOCLUV?lqM@qpWtIdmthdn}re+CAS&ug-IaYit1@q8m-A9 zWND-xZD{YhF-&j*eRff2(e2* z4ReJ9OawxDPYzxM7Y?|gje0+L^M znLShRbRW_^m>*yOFhCa=I6w;^1g;ULm=Z$>II#kUF;xTwNw)8%{(xV9v?HyUX+v}u zxb*`HjOmBw4{^7ck7gk8N#>5YzI*pB+zaPI#EnRSf!Mls1LaIp-DxC zVdxanJcvvfS70&5U@T!-hJyR<0}R9xT7|mbEk-hoIz~L9K|xeuDTaGu10PQtVjmkO z8NLt$>>3EZ`^#Xs0I_gHBAz_NWk-AMh%l7I7A3d6ar=|Y*H1kB82q3Ez{Fw&vjM+^ zAZe14kR;7)$uAX)RWz+uDM5i|ZAz=jD(!3?nCx`UHugr7 z^V{TxT;LX)vLu2iBu#A6%%QAo(gHjKl5uD|TV&&kY&>xiU!2Mlr3%HVLP^TZ(rH?e z;u~EapF6UC;4!XHv$+2Wo+LG+xWBw9%$H@;hEkLwQd>moiYQ$nr7a*ed6YJr)@GO- z`NgG;MI{ZOy;|Cas%kpZGD>;|{Gsus(B!gfbYjpqwqyQ?GcfK6OiazKFYnzBOwRU? z1c!a$md<{7pss0bhp+g_h1IFW^+0qk5SjCbrU#s%th_3j(k>8bIi!w5Xebb23d(91 zbXYhV8V!#Ifsw3vkF0H<0$bTWHM{R7o?wME}9$y`pSZxc>)%hkW zT#>4giN?TmTX4S9ztGe_US2n>w-zPxbr0EFSzA6JnJ$ zIj^X?t)+Y9%oDGKr?v{qyXIGpeD?i6t7#b6d+@P|xdT=8ecsUG!Q)T=`Ct9*na7@! zY13<3JOZ(uk|t&5H~#EDe)C5^{JU4)zJB%YpWpf3U$^vlg%TqnHKu1*hN3Gq4Sf=Y zg~gR5qD&kF7@J26NQFXektvO|T&L1mlhSg_tDDMe8g*s|TRKY7hpL(&!J=fz|e&o4}rOi{?%z>ohk?ab0ajm=GGk@;+cmMLQ|L#YB@zWpv z=qJDa4M;Ea^78Yqe5kXOJonlM-Gg)4g>HkRIlnxRmOI3y@_1w(DJi9-Wt6m9ByA8$ znki&0VoAG1(IZy&ld@h))=x0>A|(T2>99oZqM?=y(^9usKEkJlkdebECyod(h5!a4 zj3*cXdT|9nuRc=TO-Z_Gd2@9`^uW=V9(n5Rb1$Mdm*4#0(+@Af*Dgwhdh6a7cbM=$ zoO}L0IS|0^F#y8~3<$vxWT#->0GvSg;6p6Dpx~b1pngn&7N!v`XJI;GbRl{n`SqQE zgFd(sceqb4bok&vs&or4j|bjJSuh{x~Nz@T7^J%}`h zWN;g10SxTMy&E_0UAlVf(zRO`F5l=K7!gUdB8eI$#1KivA{piuNzf!AA%wJ0AQlQ} zsYIhv7{!#96sl;EP9`;_q?RS8m5XRQA5@Oe%q7emp^;0N_#)lx(t(MYb*0vpnwf92 zrRL-m+U%)Hr9nu_)jIp~+JVs6bVF;m!JNt$$XG0b0T{smjN-CsE?W!^ha=%|WE`GK zAkjB~@r_=i7!gxQ4StulWTJbsiVBM-#50FRnTNjDI50BamALT zoR+}EVWBi7vtl5#a){F8i8c8mEqs`KLX#)dG5<7`up7BA#cA!&!W=O# zn-C=N_(l#7M3{sPf0aCtU~Cqf&Ej$s(c5)WvC?Wz>hE)gLlfiCndzy8$w_AQ>%O_% zBO_jabbJy>hJzAA!B8j|932@6dOTx(e;8xTi=>#pd%)e$HPYA}>2*(gLZBJPgAvee zK3|}(f3Uiy&SbJ^G`jM#Dv#SA4o`$5Q$VkNrw;+_{(PxFJUO$pvAA`3?a&FvPR?%~ zo7p@(y>V!Kd4G6*%Qv;*o?LTHZ46GV^hB20LJJMS*>ZohHaOify3iF^>K>VE>J8_V zcF47vXd;o>;&~Usn0$AfY|n0K+-`a|in&MG6j6Hn|B=`puZp1@RE!|IAK!6*MiD2V z!V6>AfM-~)q3Of~UOY?45zrcQ8hqn7w7Q2pGq*qg!Lu)ZGC6zTr$76T*WSBy_p3j< zdgrU@r6VuDed&V>x3&(S`I8_1_}~8P*PB}>a`S3zDV66heeupm*RS6B(e3a5`PPvq zEy+cc#Guh9Z5@6zJh?W#c)%B)x2NRCB@*#0B7qI+ijv6npukA61|B_yVg)>Xn(S#w z={aEVQv@Q6pcOzeIORwyC@5=b>TnlTwC9(!wsi*F-ub7W`{4CAukG9aL`GKq;iJ#x z<~N5T8)=zUR!4qHMzKQcD5>sv>CHSNEp z{oLyxypARhFJHWQ`}&>Ft}|O!0-(@r;eBi%hfzhqBq%@#bigb@VNQULYaHW_mbLB+ zqX+vy0SDS)5Zv~A0K+u^4EM(k;HG@YIX=V=Pz?IS00uQQ;$wq7ow+Vj3#9fM`1yV*qyf8d?B*|HF$qV-hXX6C#C> z5QFfd#d4q*=rG2l05BexSt3we|VD;RR1{*5!>3x?SI2!Kl8)#{5@9FLL`T~*2cr-dOHWmqo!XZY11psayZ_w+D20|15P}CC$_qzQp zeeRlePeWI9&^zrLn+Tv75Wg=l*gw?N)KXqv)zdu)yo^L?E3b^(!TMfeUZie!P$-BvBlxYl529^Il0jv zUF#WNs}Idq`KN0F3r)e5_R(d)Schl2zB6D?uVx7h55>vQdKdr&W=* zfu~jA_n&U=@z=GF)U*!1_RdGY`uf}d`oF*a^>4ra=9_Q-`Cop1;NY3k z+Wubm%#$yk|3826w~xK>?)>@@h0d|Qbu1~Zu(qMQz1yufr@MWV_07FJp*)^N3Mqw3 zYa_*Ko>0amBrLuNYJyfuRR*&o-I|;!*O(}&nor4W$=O+Xyj#g*|XaxUOw~Wo9AAB_my`)dFPWWpTHOV?Rz)wqL-IJfdO6^!t4NJ#~$DWgAD|a znA+KKmIj_tgO95d(!9k9i& zMVIX0XNP35Q*Z%r3gi_K3K)iAhAw|lt^v}RXbuKr2w(s$U|5V;;6Mw5Fx-OV7Y5j^ zo1a~~e&@>dJD*;;as1RHB8f&U)e$1J=q0A*pui-w0_!jU7#N>NfdZ3BwIWKv{s-wUA#>sn$Ex#$=;CtA8jM3eU3GLNaz1{@{8+h8oHa?oEdp_YE!OAnNBD&XmyrElP%F^ zO0`)kOTHqsM>WdagKtYE8=Ged3Fxl$l)s4@HfaK z*<2oIumlc!4~Lz==dlTjkVqvelhHmrG!hyepP62qom)UNhm+Hh=tLkG8XR&C3=V@7 z8yky)h2g(wbSxAO27&>9!0+|@Jibv-VE)iJ%7qmgANGg4ou0<-f$~OwbMM5Ef6^b0 zqTr68$L)1GJ>k&!#Q5yk*!0k_ufD0hxU9OdrE_4|3jiC9&de=uuI@X$_vmRr7ud?d zV~hI^&#WDoUfn;rycZZ2oL(6UP7emAo#A=U#F}Sv!!^0lJGs^xS*;sguJJF`2Uc4{ z>s{gX?$MRj;i>XwkH%6I$I|@a9@#^n!{TLe3DVth;@x{dhl#<^<}ABoCS(ldRD9^6 zM5Mrw?aU=&hCL|75?OoH7UESs-?8Dxu~pBuD0bm~C!lvybPx?of z_U=F1&^)xc|I~}Gez1P)22K?w>yR_-0aC-PYm9{p0)73x>-YqK@po)cj$Nr~v52 zBMJqgGLo(#q>UnZi&WDs*8;r;<(fgI&Z*S96*>>C9Hx~{Qi6n+RN)rMhQTCCk67js z%SI@P2LMJZ17d|=Aa)Uw5k`%<35knO4hX0|Qru6=`sJz)YjW4d_H!p5ef^0S-h2Ly z^KYKNaQ@tb{Fo)IKU_7S~MUUAH|XY!w})Xpc}pg7;p|cz)cy1A%@|C$A<#`A6&h1 z83i0Z05BxKE?;5jwWGkWuDW{p3bHGg5XZ2PVwi-{g)zhQgswXR4mr%Jn4F3!Hq0S3 z4(bZ%x<6Zp-`rx<8wMCc7ehrbEWE%0dhGygCmbI^3p-G-&+rSE+n~U(2)lmm&XudT zK!JU7`Fc;kQzTJSw3-wv(EK5deMqDt-YbKdwu=*=H_v;IgP~@Q6e2lTS%#0Aa(F$NnDwO zr$}OnEo{onrL250pbKDQ3>gD6d&NLQ#zs)U zWA|u7yN^eiMuH3QbBR;%p=6PA4khKt#3Gf@?x3?$={zHuBjIIHyd)mW$ck675@j5Y zh{Gc|puM=PI5sPu$4=yP*+LN|lS$QPlYMB=v$X|J72DDA$+5^dSSTDB4UGZDzyY2? z%V;syC6w~ucgJ-xbpYj!4n_A~W?@x{HKvDrS)7_yPbaB$i?vErNB@XTxuPVeoR+}9D=*AUuj3U9TK@9!Mn z>J6=R`GOa3=l{HU?<=JttKSv6^ZB3F zH1{^P^@1wR$SFH|=9!|3R=!xzAvGMK5=^SJHM9(tSG7vy2DFD6n@HqQpuoVu;Rw1>bO2@3ZBl)%d*5PSSbnVfPn$J zu>69W5Q@PlQYMvXB(#>xldySG5p9$!9bmZy4bQ&t0f;aWog|f~6O@A>tdz(yGjrhW zw=QpP9PjBFDJ!j=nwmd)^wil$o;Y>tk?rl{ckh1rumAe<|NQxX|LRx2{qsNniN%t3 z^5JK5@~fVC;cZ81VO?YY#@2CzITgOFxulwqSxH4QPi9Y`^a+F}L8w9d#8$q< zAy8$B4Mie-F{vq{jiu_OI%8%VSCP+H4qKAJqEi!zWEPmf#zs=im`DJ?fJ`>LHU$a81feOi@M#OBuv0P{A+gjp4|54UJV6h+#+zCOBIC;i z#SOWIweZYa-!xEE-fjhVGV|=KZwqLZOk?Wkb4|>x&95HRTQVt`i6_#qNF`gOVAE28 zjMV5w87ZP1JCUtoXNfr}LXL%NPOt2nTG|@|`Q;z4XzVJh?`ZCJ!QYHKGB-N6;ho;_ z&F%Nh9UPiD*f)K+WBdRxtYvI}@A$#~iG%%Pn?1he%C=E!W^JNSkG5rDsdgnOc7yGa z$KD=$2qp3m#l<5{hBkd>rV|-}@&3R2+vKwG7@OXZsT_Pt$0pPmU?ywM#MCBWrmC(pDYamC zf-sIHNZ=xdfdb=F3c1ckt4x$!FV$Gg$=TISU8Cdkg{5^Y9-YV$!P6%gS0J;YSH${i z8+)?yDpNB{n%jpOTLzQTiqwX*6K7x8KKXQHcE4Pg`Rp5)12ZRz8mHCCJ(*>`isoQ& z_P{IeUw!@EOaJ}LUww<<^$m)h|MuHo{^mCuN1n8&RGzJaWBTuJ_2aAi0JCU}~LTq4vtvBQoWP zROzLW`6)Su7U(UnNFD$aD*_^gmobl6;ZbOPDqT>f8kA`|izM&5*kwlm-*vGs9 zCgI6MJOW$`Bg3$}?>*@#Q=k`B#_Qh9Td4GHRR7*>5V^e1&vUupw*;A*U zT3pofH{gD=KTw&aWygZLF&6DX;EH$*HrX*6_ut0!g}1 znt^IrhCrSnP^1#7RG!?ympKG-FuMSts7a#rsi4Ws=_PrkO?|Gh?7~{5E-AO9HU!`6 z2Tske9&)4=(@Hx$l_v_7iG-XjmhnL?D}*+iFgu0JG4e7coHUB#;IjV7+4@M>h=0Pt`V=>JL(Mr#v-A}WH37A4MzsOBTd~SEj{4O_#?BSiK(%PNO&R; z2s?*Ih6df;-GiaA$%VD8<*h@j+ebH!p4?;@Hn+JyvbY+aUmlxZnOIsMUs&@;XF3Nx z3cXEdO)V&I>=^L-CzmEx4~#7xa80g_%x!t*54z@$3@;q*nc8lP>~D>1cTFA|oH^{8 z+8&H-w0ow@o17|hK>}A7m#Ey6pp1)G>`7F{B`A=^%XjaQ#3e{};q>+>!d|eO+4LEu zrDyVV#4>jvpUI<$r5KxoLhWNSit&m3Jqe)3xKJmsC>Doi!!L_ao?BScI~Z(kb9VQS zE^VB8_3bN1PCx&|^Y3;IhaP$Q)$^A>TiH7M)enEXwS97B^BApiP;zrpW@%b(l}wwe zG^84B*+Q|-l2WL(=14UuV^jNb3Y#dIg_4=|*6f_3I)%o%Cy`9xh}i-uU#tRviRAE; zsgkJ8xg|9SV@cTq&R~1DQ>n3X`0%qJQED88r46N3Ejh(CC`+$IE7e$YifUTBJ=sO| znT2(aJoU!DBj*mCdg^t4!OiF%M}> zPPNem^a6${jb4S`qtW{mYL8syk*PeuFr~&%%RQ9LEmrz=B$w1j$v}Z&^NHk0jfv!5 zsoJl%j2W$AwP8@9Z&}>?%&EuUe)QS5pL_Mg*WUf~{ZFr6zIpfhozD=!?gASC1|X_- zU=u621*iaJhiwl`P0fV#n z*7y(`Bh+?8-gjtZkcJc(py?_@FF+U8VYh(}3~yr80mGUJ6c{$l9tJ-MS~x>T>?(w) z`y`8vfNh6r481S~8GykZ(GdU%i7q&YAoM@dDl#zI0T`keUgbiO_B*R|7+1Ihl-Q~m zUI6<&fHk%EO63|rmxxv%6U)FrfytyQ2^>;VtiVK+8~{d9N`XKoB-K)x-C`{uNaM*z zUTW>~iDV9`GMy49@r5=%-%64;k<_kGrRenO>1ie96)hg`cynu?&XAOwUlESX*EMw7 z9ND?~RZFXfW*4^h9ymSV99!Re(jS`d?h8D2?lo(2&a*GQef-SR)*LM;&KNwJZZS*^Bw46uTd`pTNFs@mT4+6(6uF+PIQw%U04^6HQj!dRyS4&jM08W4? zn^dz%1z)ZZ$SIAHOiQM+EWC6jCtb`*60j^>mX6Jmv)EELPsAkVU?s2;UZCT7P%;{hKCxXAp% z+T!~D^@B(E9zC`9`00%!C)N%fTiSnUc4I5LusSxo6akxA@<(QRhP|ew3`(vmu557z zCTCU;POcmX%&zy3P7g&F-5|vlx4lb8JWI!i=8knw9cdpw*fVu_Xy(|+>=ED0_Q?3Y z&f%H-@*W|bw40@gOH_jz1KXXb1WmRFG#N@sMKcUT>Fsy#A<>dp9B&s+Y>(c0-T@e{ zGkiQeB$N&@|Lz9|0h>Jd;IB_;nB@t&l5@wfHAo)O{}!%7T1TO3(vmv&TH>o%r34U z@=k3Ze@dcokWv$u)C$E0N@^~vYE8>3WAkKuQbp2QsnRSIsabp}n~Mbc8p@c1vM{`MisG)DFKe%w^vmZY5;#2hvN1?0LQAZ4)YM!ybNmf*^;GR?(^!iKavrIfSV5d& zNCSSX20+AQ5XKA`_}>wQX~9#1K#~}-m?3wPWxzOSsQYljmw;i0#o95h@Qq@P|J#AV zVOXFSz6BI~yFa*g1xN!b3N3(P!?B3K9)Jz5!SK=-a0_(U<;xeLj?DoAK$w@wc6x$A z3s4G81%B7^pwFl=hI|-KI|}R?n&U%43dJshCPc&ni!lrg5$k^jXuugXd58l>?yrYI ziTThCxP?U+I9IRSyma}-JMVvNw57@wS`zIjDWgDyF$xR-2J`}B!sw9!z(kaSBo!i& zS}ZY2Wj3iS$!sln=EaW<)x6yYhVe9Dq3pi2{ZyyE0P$b3bR6GQ|prCDvMa6 z(;L%Vp6KzD=gvL-`sUWjiJ6TvkG>S1Tu;xcTwXgCj;=Mf48Qd1hxvsyk3IQPbKBs? z{^Kvd`5`6MQxg5s`mw6|ZjL~~CpBC`UE4g+?;daO4H_M#v^rCy%;JzqY|_f6Y#ebC z3t0+VlFpUq@RS97MX^9$$d~5wCD}Z2G7Bh$W)2a(;`s)@}G>ZrTCEzT*Z$t$WWt8A}r=+7x?)|m6T zlobP#F*6$uNi&B@8p)Mdc@i5KV2m#Vq@@VtsX|2>1@?^wpx5HQ?fK39Gb8N+{#K_XA;e`|ZvnP6|jyV@j zxfV|Nmrn*3j}3>`ntHw};JQ3-|&N%4*Lg6B2mw@f;R{8Gp|nE{lcYlGr?&3))DikjTwh zd3D9*?KwqF`K7JhLy===UpV*t+wcsRoKf1^Ik>WUq^Po!C)OqkRD7{cu1j+ICr>>5 z zo%;O${OIGW-|rlnRT|2wTSD&0-nH#VZhh~E$4)=`7k~9P<1+_*q19)ed*hpLe|P2P zSLuaqXP$U7FnuVq-0jF8$S8B?R{K~~P8>I#CCnEq8x)!jjiFC#98~KE)W%`G)oZi| z_0|B;OKtXn0#h4(I%80!^~qHuNP%g505GLCC;|~C9}&rcVIGiN_t6ywU#ba8)PA{c z)RH`tlDXhW4<}^~9XR>=i6>rv@}&=+fAgc)Ke+h8#j6)?+`e(|%UhqJbiKEjAV{;!mVxS+=S%IQ0P+y_`pnc+rscwcxyjY)=maNtaAgqXo0CLbmlCMC8Q#&EX> zY-hp{m)MP<`~i>!P;#A7U=K1Z#v33LUeLn40d#?3bb%o$#)z#LnGl>9nRN@mfpT*| z4K2uUPZW{C&q0}2i31^}2Gj3VVYhyw!*N79o7n3NW&X(pu;P3xp`3nkVIDP3*D z(E9$z75W^RCP%K#6U)+tVyiu+ab3XQ{- zT#%Vt+1cYA3CtvAl!@e4xh5?;zhQD_|NeuIl~uGwC)PTnfd#oPla!?Zc(|Z)2rFYK_#%H%6DLJQo& z#vB61)KK$9daWTdJFhmk5XEs+HS`pfwwM4ELF>Nk#qjK($VcdcI)P_oZU=zWB?vT$ zKu6NV6I)TN3Q}XqLInUUgH&Xa@K~VE6)LkunrvE=jrJPVX34c#N@a#jn!+Q@j0n@Q z#A=R2LC9#efk;oLvaNzN6+2ms0A^uxbu5lDfh|qoiW7JOHiwtUX76FK_OKH6u)$b~ zz%ZeZPr*O8L;@0Ao}Q8GbonNy=KX=N+v9h+y}&d4au`--V4%Z*UZBZZ+d77Z-D8o7 z(a|x#FBtTP0>05uaBM6TodW(uXBHwev%!gJcX+bTKRFOs7@c02T3Vc4SzcIQUER03 zxqa~H>0_rK+qZpub?flb=E0SH+beswmp2Yf&aH&TXHic4@rBXxd4FWq7nzOBt%sn&%GhrOU7*5;4 z0dCz-sK~&Kc^eEQ7w9l}3IviNDVD%XNDzPmOH34klgK4GOz2ZQi{cVWfK6pxS9wiW zaaC6!y7vBsJ1@WW$<2G;@9G^4MP?s+<_-7gOlN*BCrGk+h!0lg6_}@f-?8MGB+>N(lgy zD2!lAtv#opYRDbxcls?!83Zj)}Bp$P=mcj*6Q0-l5Tv(WTCTv59%O`KwPn zcYb#HxYjG&}0zW%}pU1#U)NkLr@!6L*neYupfdPb2%moy{044zx z>_fpXb$xOFt*jVJVnlhs*+Cc7m{?Hbp-@~06WM_Q7GoY5##QVPLlIl75$yN7LH)lJ z7!+vvgR56iY#{(FHh+lc5`jGkS`59gVb}n5fIZ+q4TdoGfKZD$fD|mkFtot112yjO zz$E03uEHn+IRzat%rL;1J_ulN2-+(~DQ1olZBDi`>j>B0S7y)-1$TgQ1GE>Q3){6j zmoD9CXzq}y^`uxXBqbofC<@IV;weNi9Fh|FQezaDgchsCA|*|00AM28z!$27BK_Rr z(ayez+K{Kx=PR}OGF1*GO9KzNiCBpk~F%E(~rK?(Ko^;(PRMd1Or&r3gnQSymiMR-s$Tubm;1)WN zdJGf|ECMiQWQ$E4k%dRYO)~_t48ANwpvdMavW4m#Qj;q}mLu0>Yt%V%c?KbNfG$iB z=;BFrqFBk7%HV0+Vxck}WTu{zCSj!uxv4z9na9(xIkE&coya9vTzJ^#qLBI>fF;K7 zq^sv~3HY~$Cm5C5V6~-GRMxe3^mcajb@vPm3=TV89uQle5x*ZK)@T^7llAru_Vf+_ z!@wUKi$)^j;cx`cD+c_a)WQ>yiRtLn?D+H?=&8}kiQ(X+Yjid+wLH1BzO=cqwtsDN zdt=|>t%Jum_a9x`cL;1_|B=yHGM zPWk2z4~?xh_eaz6o7qCc9$*+-4TeNmJeWK#UctNpEqf?V^w9kspLg#TKD3iZap$dP z24Jk1#qHS%P-Kh(bYbIgs6-CIY@ndtGTf6<`wY^T?Y;b(d>7V+^ zKm615{Bm_e`=d|4e*23bKKj&)U;XJ{96$X?aAHZWPZcSwZ9T50_92BPsj#$Jrc8!k zC@xPb5(CE6908Jdy@SE*{OaoZF3@3cmpyD@JcnQl;E7ZRWYU{c0bsP;pwc;v*7Szf zZcw+Dq;!Eu#^O^6T=>UV1KaAG`{3y%C9^`IOLwGKGg|gO&rEs98dpM1}#`2 zfic2sN4>=^kNH3^s9|szJqD*(jU6x;4WwA?5TE)z5q97C?q0DQVFv*WXn`|v;K@TQ z#bTrZ>Rh>e@$#h$m{`~_#(*p6kl_>ViO9sz?mJdpy~@B2IgAL~iL=M!0BaaBF@=#| zP~#~<@G;v!Xfav~Et|n1rWACCCKwoT>psBHAyeQi)VKp0`Q~kAJOr>SS8l!c{>OTg zU9Q3aqfzcC&|4HTj4r?!b|_LRm1s!<2&a@v4IsZbJh@nEdgb*?I%}cIn5Q-tstkn+ zO@Yx?a^cGN(lW}k3u`P%c}Z!7WtA;WEq#2UoD^xgd%a%&R9bowPaqc(Y5}PyL`EK^ zXBLw{?id6jvw$*DVjCs4lOn4`o|2wZCsx>CoR?q!Fu%Bt5Nk4W%GwKOaqNU0BEuv@0OK23l!YU*@n{DjOCeCw)g(S`QyFtXjbVVX1faKccnUF*ug3HO zjDZe=Kas|inU+(TQ&d-8-PX|DpI_8yN-6{mmnhIB@U@s&;J_iX*akH+G%_eE6g&bS z!-fzmP8P^A`SMJjGE<<+0yRdd^WZ^2tI1a?awtg}D9!|dDIS!ZNW+mTc`{0+CsLA$ zYzHqx%}ysd8A5?wz%%jq^7uq)0-KEIkcq%B9%5MhePgy<0V&4i5Y9eO_U^uZU>HcTfX|OIBMuC@8k^es2b@F0o?+)mC>)JOC&!~xxQ;|7!l7s| z5QaK3HZd_iJu^AGIJK}aHZwOmH9ZoY4NNXa7xpde-CQ}av3g*2b^q%6ftB?G>zmtq z_a9we+dsRs78;)(aCwJ3e(&g{e{3c)vpl)5KEALCHa4^73C+~B^pbMDL~Cv68Vt;= z&h0xsv+v}{%%*c<#XG+*ynZaYbtZb??8K2LB8Sff4m|1GeAKmc+Ou@hvvhcPW`BQp zwZ3~)Z!d-io!u-XzW`vn5>(h8idQ~_7zQGY3GP7ejS2s7mjGbK%qZe?zzAdagFD!} z;{anjn`H9&G(uORFg}6LLMvp#J@NeAaopW;ytqArJ@G;|S0Y#1>YE1oosrt+!QSDq z+12gy7p{GL>1uXCWo}X3OK+UN{@EYBbN<5GfzyQCN-C@}eTrO{DwbQ5(@IFO=EUho ze)iA*_LqPCw}qvRQ*(QlRu7F$tV$I&vCOPDrzfQq2q;AYSHuy*GoM;#O0y>AN)%?f z+6MGOuVCtJ*5u6Au7Qr;VY$Y{BV|k``?|I+cX3&(fYJ&?dP-(d8ZvWB+G?6zE#1Kb z$DUbOJ2Ag{_?34q{^x)F>g%t+{r8{$^4XU@>US?rt(@FC`BF)9D67hsT;gizUE$G1 zEJ1DpFON%AsEoZ@%aFnDwx$H^X<}7(y!j zs8Tzs)Pywph(aBbt43*=Uo7*9Bwkt$3TzBb9;!is`DNOGIe98IcQG|*){;6jx%B9< zM_+mLxi_DA{r#8U{ph`mmoMDBedW$)*YAS%LIAsU?+fPrc9BBgQTV!@3IBF&4(og5j1};{$j@1KwA4JD|lr z0vJH&2IdyhVT}9&O~$CG7?}{3m<2GP4uAyX2SWw-#JGZPXoB%R`4GmKhz+#M3bQD7 z69g8sUIoY4m;o7`gdu|><99?A<`Cx9O@uL|sNe_%7c%i0;KL>OLa1RZG!AZOFos(& zx}X=p5yc-KIxbh}6bhYyq6LIlAQTaVSV)M0WI}-m(8bIj(ooZ4g;=EG^TY%p2L%R? zer&ERudsgq_LDMwmduc=v6iUKC2Du4!q>&>uu?Y}BX5!qNgZ4Y zz1PfWCd4fUTHmdKVSoX>7_ey(bTdlRaw}G)9~j1o zN7IRDMlq3>n7~ayFE;T&LkNXpF|Cj*v`Up;Z?NX&7k6~_y4=1IZx8_H^^Jl9JnJ8D zfdzt*==k*b_zYMeI0pXY)Le9YCOS419vu&jj)y}N(Xq*?iP?qe#pS8RrSXON;Pirb zVl_CscY6K6@`3f`t(6sIYikFvdJa)5_@N?E3c7!IPndz5SutzTk9!c)>HXH?nbJ`p}~bC(g|te`@^j zIp4m=hL+Ft%^x3FIy$^^)V*}XIk~UPGh5m?Oe#_yLUW1A-HF;=37TE;>WAW0aV%|I zqKXN)mjcF^v7S$8zyy?rk{Gnc zRE5S)N%SE2fLm&PvPf#s8dB6chg4~zf&B`-Ol_=d>YSWg>FRSew+{lqY8!hcax0rJ z2jd9ULfS~l9knfPcW`NP;qc*;&wllTzj^K5>yJGC%ALD^`uX?%_Vst~oqO@}lP_Ou z=%20Vm^Nnhw)Af(jEyW|K3iDG5)=tU)jFV;4d^v$OC7VPjayS9rqqZ57?u*%IU-6+ zNM;Dg^g*d6pwx!d`iM#&ktzcU^{7farqYH1U}C9Xsu-24!ct|3R))ojph)2ZdTA^m zzh;xOr>$v$rmn>!XWuw|?$vWIzx(`~AH4nX#ZN$q+_`t-?iV*ffiVH}K(9NW0fD}X zt%2bJ3;_1vBp0{^on_X*fHc3Shu{zl{Lj&Q$EY*DiUG=w2*Zu|5RMV&?&Aa}Y0v|eDzI>4Z$BtG54^srH7*UvdXJQa))QwSWVCcS$Zr-?k;mWOs=5D#%D3j<3Qp#-fPYVeN zpbLx;ikX>1L@$z%$fRmQNDKI4l2nMrS}tG4;meoTk5|?YidCsnU6$HdptqKo9p#Un zd)FUY&dIM;X&sq4C3OvL<>mGH`Blluc_}G*`T3PeDTTQO^{t)5iz`RoeE)hyT_2Y~ zxf6jLK$=8mmw`iZHPs=6MQ0MybBnLw-v#L1*Iz27x|+4-z+=i=lc#68rzhu}^8kaK2@+t=Ig=m(f*^9v86Zdyi9{m6oO8|uK`@=5aAZkVuq|7X zWy!KE-+P@TzqhL!9MOKY_NlYGy1J$T4*KiAYFAa~=$@A0?M*}LYmRQJ>)%>;d~d_R zzUm`84!5n`UgC{g2H%q?mOhFC7+?%USTsi)%~nS-=O>LVV934|MXjbt39@g^Pa6C4 z@EFozQ9v>-gW6pTq!^A%F-*eY5GayCd*YCbQeeP;7HtosG`{L@3l$;ILK#D7rab#e!u%vEy;!;NLCYi?m;OWc$ zp;4PNbmqcMp-7A2T0XAk2~}KyiYHXsTybexEA?hSU6XE|U@srPT#QM~IwO-0?2JqN1u3v1vVbnfF% z8k+|zYx`TerVdvPY|d*-T9O|~+v82znYE&VMI>;EBp#lO;TaP7G7Helv)>&o^2U_d zy@eK6fz?+8^2-`1HhPNmjv}4?u*Q5yZJalip%6@|KPcDc>nz18eW3#Ar7nP6p)Md5 zc_Mk9OmjeG%(r@rT!CVzKhGPxqow;?|LE1xv)4~wy?f>E!}~91p3l91_5S0V4`04P zYe#)K_nwBtJdh$7pcDAC4x_0+l_BH+IY0w}(fFat|D5O+Ag3J~C$t~Q>5zB2@ksgS zhu}jEDv*Bu6TxWbbBuxW>Bi2l!H47EDPEC?Xv%+u@T%X$9MmgaO-x zM!rywi}W&uMX9kWH5Rqbsx#URM!QyL0)3#-ShWU6O8VmMyAJHhD>9ipE?4ZLMJs>w zmwyc^P$2mfTZqgiAYDpb+}X>|_T*O|ENLE_z5#EzO&tSES8n5r^gP@Ma!{=HZQfHQ zGlx~yM43KBD&2e%&;^LnqlgIt1<+H>n@7$kh5@~haS7DH$QK!;YKPsM;0vXuWvy7T zW_!-EO}@BnlQUi@v#dxE`(?v>j8vvlsr4q4EjFCEY}u*} z8@F!VwtMHUyghsKL4EUFVhSIu*{EDg_hiY~gH{@4!)O55rbhS2j*Vna`SJW01mgFv76&s(j zZTEr7x|YVap8A%qL#5RRipmd`)>b!l^&B7V9USjCHqzQR1OPi!)x0I|uroGA?+9A` ziL18dAFA)JIWk()H&)UyRN6IixO?=)`0mz`&2>ZTE01rl9X`-JTG%vvu(p3s zQR~W$hu~F=!81g2bPTSZgIPh4MKg6#3^a8N%@|`U7evdVqNULcX*5&vttf(;G=@4A z5x^(~2KKE5kaGZ3OcuuHlav&b@%dsF3$1ETFQ162Me`YKoZ22mj1elW$-8jLrnQ^% z7cJYdcFVz?`4z3b!*AYywJ>LGZFA4}fAV+V{n20DdN}j;%WvWmGrEtTw0IJ=mQZuY z@f~}L#4^*)J;kKVCJ^cvED@T8#z(Azuiw_4g_(<1o9!WiNCPD-u7t%!K_wV2lPU~a zgHvyE1H;TVzbBBKxoFMGwL1-#00&dh4C4va*-JL9*?e%_=KPsCkS|}qefQO+E4O#; zEq*rh^@Zy%_ZGIS-B!7APjmW;B6s5U60g*t07Kue)3(3%eev^1t7AQ>D2#$@UPAit!F z{Rm*10*PwBTw97_7 z0vH`V4*;V{00w%9e)`inAcVrfd`TqH(1QArzCK_G%?xz*zXJ&hBZ)2nN%wg*Nc0EM zJ|wy(IG+Fp44nVO&yB_yGK4~O)z@Dm1sO?bM`kb@U`TkqL<(&7#eeGtL=2;hCKKee z#)1<1kUkYDryUwmXyl8MM!*;NAM&UK^?*C{U=|!jIw9$}51LibHW&>mnp;$>Gqn7g zuk)!vNFcd@UZ1oVIP(i|yqS9kjlP(jdGhjAYwv(aW|OPjKokO(2{1w^B!mJHJg_44 zq5&q8s-+SYCLjeusYIs7Ne#T;#Ux~(oVtd~tfbll0F&wbDq}DyWA%k=Px=O?)^6Mj zbc{>PvO7X9XPnQM6bhxSSg|D|WBKxxTmSHf|NF=P`hQzHht6MnDv;PQv4dI$-o?f3 zV5qwfq!Ibsu6-nczual`^w;14?`WBHctg%#CZLc+ku zH5u9KUBQJqTcSi4Sh6-xqVWo)a6dXkDOzI@dX(c(g3v{ii~<;nv*!{f9_kS_fe6E; zW}PJfZ`LvKSqpR4_7SVA=$M+^fw$lwFX^fbU| zV+l-bN}+;06$%|%RoH4wH5pTtnk1gc%O+eb(#4V4xhfM^p#l-60TC7yB?Lqvi_kCU z`9xed#XOEeEUe%G;~kfnn{9-OUZ{HB}9$ zPcpx#4AfUgUsG#ORc%XNLGjML2Y2s3e6Y9%7}j}gq;F*M$jD@C-^k&b)@}QXV^bH& zw05H_cKd;{y6)kIqvMs`!v|`+3L1_aYVAMVHGH^dw6J@0fBV?ZrjuK1hj%xO&1g6%@HFF3#c#(e{`;6fUUJIs&2e^_%l^ zS8mT;wPV@Z-D|h*zx(Lb(SgxLxoc}0d#5fwy#451#=@1A4c!)RqCJpi_oeF1At9kH zt7zMmS0Ry^&Rx85>FOd3_X7`skg5|E5DqEn!=q@ohi&W-=I_qItdqJ+ZmZ*(IGEKfhcaS!v<{$tJ43SK| zU#`nn84nnp1vc*iM_^|{#-84R%LAiVCeGbFd+px!2hShC^Bd&XTSTw9k6*o|qUYbv zqYDv&7Fs}#&v61i;sbS#%IA9v=P#kS0=3{Q)TAqa-UwYtC%O^3wMYq_Xdm*(S;*hL zfA`^wk5o{|f9tdapU&UCM_rC^8Vm#&wXziTGr-M!`DsVyxtUjUuV-doy_^Ab0hT^- z3ydZi)OqpZ84afht^g(xpN3fkV386448m=K;;Jf0Ba6Y$IedI7^^QWcI%aY8B*tK>?PfKX$Ern0VU#k$=BnT1q& zWxAkD>zC{NCP!RK)~fx5)kg(TBETb)0#9| zGtdi6uFw)91%@l+Dl@!GqVG$WS-oPZo|GB$4%QqQJlA&QR9VBZ{E}8eX5$ljHpr|`BVIISXq#6~ zXebNVhIAz4d=b))e8Pm0XbjxujB|M6eYQPM|eL$P@ z^a6)!lj=wW1%`SNX@DVg3CuuZ4ramyR;?=5YD%?OGIXXiTozyxPPW+1S9(B%ag_#4 zqmbxvr%#j+OD6cp7`@Oh<@s=)o6j{fSq3IY!{ErH*b){;!Ucx$2_D*DN(c;Na`{X? z08GF^7~``r4h!`tqWF$^j7b4wdY#!~b;ZOcu7EGWo&x}|{DQ-f=j|^9dhOnu58|o3 zvaY1Ewz#4O@`9pLz*tFnb#Yl`(c!W~hf0BA6_s_>HI0pptu6I!ZB;GJMfH_?OUw3_ zG?zDb)pd0>cXu>*HP*M)*R{5^AL;Bl4gfn`QoU;R=A_g`>o)G%mtR^8@as9=b^K)S z@I>E<>CXPqs^;#zqN*ipx5C%Eyt$`+V6v%yJii7l*s-g$DX*rzu;pk;_egQi$&%i& zqMpeEo#T6(M|QWKDD0Um>K-eF^7f(q)!pm%lw19o46Y7IF}9w;(t!?Run@+gSsFM5 zO|~E!)R>%#??53QQ4BIV8ts`$FGdvs80|0^7?&#ohDjtE43h%V7-;!KkiG&o4;Y3s z*a8qn9G;jjP#CR&w5*jY*6hm8-Lz&~!ICvQcONMG`kNnLx&7#HP3OdgJ9&jwhb!9+ zt~i4;thdMN%t58f`u^iLJ^hnabw|<{u1QH>VYJ5Fe>4MfYVZCEvD|`-_3&p47}FR$ zxJWA`G#Z^tYe0KYP}@+zDYHuFl&P$8wOy_E#KbLHx?+1m^3qjncduN#YxA~4(`T;! z>A(K#pa1Y5fBCcD9UGhmhE1NnGJ5LLuKji6XCAEE-VjRLnY+FQlOWB z%21@#g9s~>Ye9tNOO*R%s(f%{nga@bzS_Ls<|}lC@|?lVrM1JyPFy}YeQo;koy&I~ z-+lV}*_#iq-hVMe0qotE-$wEa0EQG8Pyy&Q4=@ClPiT2hEhzPQ2~>!1i>3(Wqe_s` zvFubul%O&lb{I)?IZ%qOMm0R2=u>nZ8e{K3TcLf(=z+2Ms6{ZqCFKCXKA@Np3SeMg zeKo(5J(W=#TGF~F0xH@8ivWy<92i{^sYA;q8d`MEA?%7PP9e3 z2ceus6pbso1ai7$Ud>TrE8;-@$)}c#nx*W`d$2ce-o1W}wtRjz^XlpA*>l(KSiH#+ zU5r!{kSZN2r9L?!Zb?q2Mx_Fh(Z=IpfH9$vL@^zNR4i7@WCoesBEU7I+#nyjK&hDM9W5aNSR42H>>q-&^LjYwAE{O?$}wVP*@EHZ+7;Yl;m8CC78Kz&Ese9 zzy9X0uibg$i(4ksg~h5cpY#i)A)z#gkv@#{@(4RTtXY_zBQU@_pa9oOWhRx%tkc=F zS}QP2r?=_!NPz*&BvKUs4E_j#Uf>8sTBXh-*LwM&hlHSn>_9}G(9XlrA{w~ZHhuP9 zOyVM)$>R;gtz5lsaA;&;XsEoZdQV=#l9ij2(pQ8MbK+8$RW|px^o&;3^|E*}8elZT zkV6SCq`fc=J&wiXtGNW4_{_yEC@Mq*Ff+jo;9{#%>#@7yobLGer0hkxtFo7@iBDM^ zO31c4;t8<{*v!S$R75^94jkf$mn^;x85#*Q(C9)dh9DgYBsK{#n_3ZLF{j%d*;ZFJ z`~uk`4_oZvtGsNPoue@GH3nQO)7gmlcu9J^IK?B1(enIajt65q*=%5#o?44S#p1|V zY$=B)OO$45JcC(GK7?k=gz*|2Nb=DZz; z>-X1m7Pk)69-XM@9WU!0FF!h6a%Af8(dmOn&Kx>=rsUXEW&f$lBNHWUgLxI5i&pO? zm7XXx2BwMvfUyk=sGP|*0M7tsNQ$9>F?m$9EE-K3qhju(h2M&z)!00}z<^|6Or}sM zREWh|kw}dRWE8rDU_1fI;S-?47;G?{!yLi+ zx4(Y=`eS3q;K0Py&i+#|iHj9lXIkd+dkdagi58y{ETVl*dOEVoJ(4vE~RGX@qf*}Q%C z;k4{ky+_A0v)BCcSHJtGfBL^Ob3aJVSoIIT`{xHwUe~uAojmv8KVQ; zJauj2!i@_zAKZBG?9rA5*MB9R2+ z<6vB_03Kdko{$HJ0#YPWN@WJA+$@q9gNciW#xC**y-Xia8pB#^yxx`&m%9ASh1>l@ z(@R%wvAg4hB86C{1Mn#1R-M+pecQpwi7U5ny_h(4qo)37bH~XG*I&ue#v<{gGAxwD ziqr{&DxNP13S}XQIz(v>14p1oe{!T=p|q&gl>E|I^m@A<0SqZHt9+@LTx6* zYP3ozuGX7FdTUrnTG^PMOIT6=Bw!3T^F?NhBjM4rk3x~!>kr3<6Si*MIyrT6`t110 z@!`Rd;jX^pMP+r~n3S!%5AMh-_QqzNx%|lKOJ-qewg5#K(m{rZG~g2`SOfJdQb8PO z=!-y69+XZpg7I-PMwlgPm)Q}vI>R1cB1nhjtG6s#x;`#7CoU<+?N5;^Z5V-cSj14X zA|n?!(t}|DFcgl6nb<48BXUSUtqah6VDZS*xqd}-K+N~@IW{)S%-|TJIC>^W&EzQ992tizxi9}vSygFmLvdAYab+zcS$TCO=&XdU!M7G*--_aY3!#e-20VkD!4R_9 zA`Fv}qy`tMcziJnUJh;fh#noXsKFTrq~Lm0G7al%A5cCU@no9eLFoca&}0 zTk?~?`Q@*E`%j%mN3Y#|QQh1(^YQ!N{lU+F^$-8FJFj@nraTH@-uq8ppSyHRuCmKi zb|I-}^W_+PV=*NMQ(%PN=1E$-d`m(~uHNira70Wl$>vLVLWPjjf&$Z<0xGSSlv>~g zOQCkTeW@`C*+2TpFQ(4ieE0sFKmGB)e)os}^Zmd4>EHhHAK!lQzSQsm4+Q3{#m71G?n;LWSWF$S$iN{52^wAVJ^+QVHo2t$Y$#5sX275NdP?27L+=IEY~%KhWF) zd;9(!ePaMNx(=1*13KtCp$+{MAE+)wfCexLp@WiH;DFJ*i4cfh>M&9Q4$UES3NE4g z5|LJ-00yT%uN=7~k^`C|=t5Yc#?ioNhYmjc9AMznHD^B!dePm6G{ERY`6yK6HHrdx zGdBln3=X04+{~MIPiNjdeDyAS`iQz24%#OeU443VlZ zsf`zF5(q`CRFfdr#v-)=f<|Z*iu4kopb``q>O!RGW!D?*Mw3l%umZq9gef%^02qeL z**q~W*4sVFTXvNkIet!SjG;p09elu;$U;c%>o*rnpSx|ecmkogl$5kHr>Cx5JvTgZ zY;gG4@X3+mBcr2}r?1|)^MC&RKYsoD|C767>w)5i^13dLK+Pj`Y`!uSzesKHX^egj zriKRr9dHOaVwlhX3XdZIGgJMaMvlk}lF6t=?2R$BR5BW_S?9HL;nC}**FMUE)Ry&#}i5F%MVA=}PkS)$k` zcoGA{qN&vYS!^YntKjivTu@^e0hD5M_$&?&O&3GUcAy2Qz+rJIqb7~N|M&9X)@Em17v0+t>y77ZkuA0DGN&jgI2XnSg4 zEDDRF?9&JtKRQ~#WWo!gm>^UHp%4fq9IlYf5pcK!pD)JvVlJ0pvk4YU#N*3xQm53q z0^#gsYxb<(a-gKP`*213!)I@Q@tc48_3wV4n7;Vc$M2uJ`uNq{S1nzG?og)Lm87%9 zgc29K{3$ZEO(fBE_6`SP(`~Mp*3MpEFy8Kot8P46SlR?%yiiGQSLe5-H2 zBeZk@$F&G>#vrHmYakw~! z%WzUn%8X`vOl;Z;iPobshqaD0qa)quNDU<}fB53t3CWAovsbzONpZ=GR;=E>Y{eFd z)F>7k($klEy$LFnMMP>ij~PQy_Kl#dd+zDU|yNd4P}y30aU&I%t6L zaQG`i08^^XN~J-qHfyz3Fscg?DKNw^J+XZcFaG{F|MU<4 z_|GrjeP`{aeT5~BMdeKZFoD>(Z1t{*Gq>!Xq?4zv34k#mcEXET7$`G62lX!M0k;4! z7N3F*VHL_fBDJ5?`DA*()*Q0f;|yjrnKU6KXUXcVIm@Y;9p;RHXK7M+oz0eok$wP}Kocjk zrSUaBw$jGanlOW2Y>}JXWJ)@|V!3cdHaFEB9jk~6k<5UA<7TnV45pdEGJ!?24bf~J zlcVMEG+e%%C!qF8Yhmw5)xw@#yi6fulWxot;PF->#v#yQ62YX({V|}Ajz_5vn*GJD?=^7j@Z*0#yT)A=AfqjRodxj=Q z&Rjh`?lzr1VViantJ*=IF=};4J?{%UcfW}#-f?}D24__Dza4YN)W}AMJ*tr&~!1J z+VL3xCZHk}|BNvPL%`t>0)dpkl_HT6gVzQQ&gBq%o(SU+JTAfEh(N1Rn|J|Qbnp(8 zvT)tvmAmTN2dkU<4wf}Nd^-Db_Crm}u{U4*=)tr1uikxsc;d1|<1#rDwU$_oDTopB zE7$Lwxp1SkYeaAM?>|^kP*f#XJM#+b)@;m!uN)~gs&r2HPD)i)pqEr>)f&B8qhF?U zVrV{@9usPFmTe6ubeq{8*hmSw}(R>}CTHy2yrbFX zUL#cjy>i6zTvECWCzl9`C8T5(AzmX@ZZ_KY2jZ)NTQSK^u_;ZyxLSW)gEtne(G_fP z1RAZLI+Lr~V6QMbE5YbqM5XbtOozCI2E&ZV(4jV8X~@^x5174sLaBMJJ?96;ua2I% zcKXWQD|a5>fByQ}>|1)vO0c>2U%W+=z~EW`)rSvXfBf(r0NA_%z^GYVh(>@XiYv5E znr8(~DGC*|(D{_3ZatbtbWOMx67AFF==3LD1v%X~N?)RnfJ3N+D$iH^Zwl;livSFr zMNL8LpWn&6G(-TS(Lw_W07FxUKKvYDU~r1oVc_G z#d5349HTPDYORR|d#cHiWpQQf$g7^d_%JqUacuG;t2>;MwbbT_)#zMug+-~fu359| z?D;!4Za*JCb!GGRe7ie=kXdoL1L#Eo%)uj3{2^Me9c?M;0_5;SRvKU;sZpl1DpW{; z0lEwZhfZe$5vJ2yX!!*IQ)+;7N_gb*g>t>gFOl0)7p@r@zsx5Lgv^B$m#rpcTa5ypc(zQn> zYcONc+T$aa4wke57q{&zoxX6-;YrdN0{z1mnS6O{(vo$X56CqhHm2bS(AX8+xd5%q z>&BI6j)7F`Rp@+rON_}D(wlu2M<^yfBX{|xr7O2&EnWi*12q<#02oUUEA0XiieN;B z0EQOnprh(pn1Lfefh}yF9vCJTxgDm=SkH>|#7!<|u0Ryxh(ZEIoZP-pXpCno9Bie5 zr`HQDYN5#vsuwB4vjH37f1#<2X!-|-ewf_gF=4PdY##3b=ht1 zU~J+_cv9vU9V)IkR8mm_Vymu^w!ET}eTRwxX*DhFHO+0cO>LF6P1V)SH8m|w4IQAv zx;l>awjb+jIoem((_htfw6b%cv2U0_s-hr;8L#^G%%4?f9ZQpCOd37dt zX3naDvf7S*q`-QH$GeBd#?D`zymVve)cL0F{<8YE=H8*q-Pt9JZm{rL69(W{Lk7aRM}lr;|SJkStI zTFDXG8C+{L*BpgrI-3AsQIrmgVyGD`4T}Sg0!@5oi09)wq6E}xiZsIzy{Jw_dQ?on z<%&Rup_Q@;1)m2PBe)zPk1GP7!xk|)$k==-pHPd{4qrHH@rv!MHXYboRG)Xa_R-6^ zxi7vwJbCfN)HMLuoyYGy!G(m}DpA?_Lgl{wh2>SvyZ4p5d}$iJXVto$Mr%-^aV=lF zi;$QI(jXM+gruI7nN&KL-IHjxg*AGgT;&v!C?XdVsAI!f`wA*PeDU?a|K}h7F;l6~ly%J@HRJ9o7mq-E%Y^jjQ72vr5FrjEQ zDchhn?6!M~oWXK;s4AG$} zB-Ip3)CU#1Lvn3_M7d9<&ePiq%%1&5&*r_w$NGk^oS42jb?NqnoA+-#eD-MO4GKPd z_mSE;<%_xZpk_Y4`|$M#z|{xTbBLTTz707-8l}C^I1>d4nk7I9C1_7$ts+f`&?ZQY=?3RQi!+Us+4TmG!C=?v%xbMgt+&Y(dZ`phrj#o*{y=P7dpAKS zF@XXTs&UdJQo5uXzseZaS(D86Oq(mS_xRcUhic(j3~zJs$&39lDF85o$!9crU9PxL zY=+aFkg;&>wq2!1htFKT^&&ZQwLomaBn~cGEf;O-&m){@@g$sDhgXDVfKiJ}83>6% zrm!d!MwQY?_aXwobUF}W2w-ZB5pspvB!EADpDXpTcLETbbf;=*6B(P1T);Oc#Q_2=sb38tfTYz%GKM#@!6vj7fUNzyLv~* zPhG37>uK&7G}vOLYL`Um7#zL0Gp{_qux`ihl1?@&o)MNMOQZDUC#ism?6 zUcI-VXivf6=FTIHZQb=PowfCC)wM0PwXOB_?ad9H-R(#Fx(52Y2K(EO_tp3IRdpV( z?LF3d?0E0+v12Ftj-P1jK33bCrQn!3M_90KHC}z5*hww7z3gUZFiUIU#%b!RnT3;NsM^6PF$yoxas~`gZS`JMGhV z8pdzdj^C;}dA)k{dd0|<#*C-2 z1sG##qR{g8@@TYv2b%c2AR3Q~CZZXlC~)X7MbxPXBt!8X(b0Us7{&(`i#B|~g)*QQ zn?*5xFo!S9A;^`ucr7knr_%2`Su+e{Q^Vqpt=wv)IqWgDKnHK{s2D^$xwy=K`clSbrtc!ft-dJ zoufpr!~sH$(tMvA+`wD75vu2qh8Z}tp?iZmR3nIB)CYq>JJc))tl-;z@m?#F%PyEz(<) zB?^zx6iiCWPEA{!xoBlLX`zr*6C#yJq*SSlDmB7}RB47cHB4mS6GmKOCuB}i;Zf*9 zdQ(D1*2Zf$Uu7;r<2p`nLgu2?4tF>hOifA2jgQM(zI4;ReWiMXH+%7#?A*0hSHhFm z-!a(}c%&JVxOk+KN4mL$i;Fw?BET3(F$;hP=mnnz?}-wbS)sB5y3{}~wOOaNf@!sg zUJ((d)K~?CnlDfiVuL_x5-IFgZoN`!{Q|LDq6rJ6UQBG~;U<5~LboSbNazTWRU&gp zWe&N*rBJw(Dz`@CNlIQ)SX6iH_^ERj?@gY*K00x2e?e_r;*$2Rlfx%3ZQW61FvAZU zym;lY)gE{B`1I7-+wdU3#rnMb+T7(^FxfkTmXbIIc_Ek3@sc7ilvg;6Eq!Wns ze4$!^t0gj{(c-f@0(z56t+RrYn6ha3$}LNlZOY1CotCvSGka~?!nKL%D}3RF21i(~ z_lgt_OpK*mn#lr9#zF>~jKjvb zTzL2jc|07)rBbO%tu|OJE|)uyl#;n&^Ns_BCA;zp^A46&)HWBD)f61AXln0mZ0~IV zYwKxf=>{g%)VI~uwKX+$wYT?y-s>_2hh^u@7rS0*mp96fuj?dXZ3 z>Xx-T_A1Oyh1s>|P-XkT#Q8ffEt^$2KGI6=QzWd>ex6kLk>^OR2*}5H#oda`UeD`1e^*?^`oB#X6 zpZ(hAO)$ITb(UcI;x$G`j6`WQm>dHm6TmH!(U_f zR@*$)05G$=(&Pg91$hn`VuvnQdQRXXkMG7riO-iNRZ?YZm1oOiw`>R?ej*VU! zJ#+KSmHU@&J-Yk&)w7wom$UC)qivUgUS9ycP;5Ga2kIrH`9aUJ0(*y|BmOLR5Mw?i zq_-$T@S_+56==u-q9RQCGn^=5&3lypIn^LRMY^^5PQOoW(t<1kEhwRV`j%*hp^yG7 z(G}qGh=UsW@BsmgX4Q-5Pv_A>@rJg~55b9`i1z9FvhnUt85}|(U4ix^DZ(&-8e-UMYSoQbb1z@LdGUJg>8sg?FXt+ox>e>Fxe@4< zBsHaJZJ8=Vyj10tDV>2}+M=BGN$E=^Dl2@ag#;)tgW2M@S_2kqz+eyRZ6REacGD-s z4xEJdIFC%}Q>uL{SMPoB=woGdPtKA}dZRZ!agovD_4|{PlXEiCmhIYcXw9l!>(=c2 zw}1c7fBVlruHLx!((RW5nS(ENU=j~c{+~I%eEawDy^rjbEK{71Yk)h(vMAEH<*2xP$R}D0x3A=nraj7{w_ZJ^7t>Y6K zA*tmF6at|V9zYqojazF3RhqtRLQMyJOYpOv+8*@`W>OE+cbtWR6GCM9ciQs&C| z^yM+hxxR3=)sv#N#L9Jkk;2IbRf-#hxJg9V?55;c&yppnd*TBdWzrO(D4r{h7iiNp zzLlggjU)50WEQT@%&{7|9wX+~sl0gVV(#W0oV$bbh$RxGMvc}~wAno#e>gE^;j)z*w(iU;t*EbUY;SDqY3l52 z={{E9-V081XJ36w7htTev7^4Rv$eIiv*YN|zTxA2CysRv9Bn>2*fDs#{rE`F$cg^3 z;r_AX{U>{m3^lbLInqB0^coyHQ`6XW;85k-O}q9NRvfNs1cn_wId$^vmGSd8PF=bU zc}M@rlKQs1;+nPF_t$qFKXvuqg*z{7F$J%txUG;ThaJ`2N)I|#RG6B% zOv>hg8Y5Vs&v;@Xu9B;4ZhuNv?#9)d4&)Wpm(_JYe)aw@fA;g+4`1xqUw-%L+xOr8 z+4q0?_ql7f>FhB|y-#EEo1O8b%-Ye}H#7J3`mF^qNlQ2GEL7=TOIK`3OTP^VPDa+U-~9IXBje`|mNwjb_Qj)DUj!4@uG>~8R;P6B| zPF=ix@#f>}_ntj^G52crJvG_uOOP`F2hcin2p=K|g$kM+G(2d1Llc6A1kD?O5)B(T z4F(s}mqf;^pxQi3kT#o7;74$UK8;F|5-5TOX@fRt_RyajF}jd8`VJ$7kmzRME@`Tv zn}-V2kAONPKceka{u`6P(8BW+u0UPUu%YYFIU?4l%Jf-4(evj|BMgg>339Y9;%BqL zBA1}cA&1spqZOwp_5hjQPz0KX79?sF4c=_bN0lP!&Rv7T)qCaziMb zo|KZCl)7Zm%B|t_CAh+ZOKiB#MRShZyzYAv^!&@ z5|hc`ONh(fx2GiFOD!#F{LerB*B}1(|E+23-+Q=GtPcp_fvOC_gOP{3Ik=M}bWpvB zXf7~@8wH^ANCRj-g~F^Dg-lV@Vk+SIFfFF#$=46cU+EsWBVO zE~h6Z6qmAel+>%7#r+6 zG2A;c+&(zcdi-S9$ces_!^g*mM@|i$m>xWNdSLW)SO3Z4s>UU&Hks{#r1adpLlw1c zy<-=yow{;+Wcu>xnX9L--aB>q_VH5}>U#$2x{nW?zI^fCi?g?$Je>XN*@tf)BK!Wm zci)_UJlB8me)s9you}`#P2XuAzukQ5e&f`GhUo{5lXsdYZncbDs_&jGt?NHj(X(XL zUU=(@=9n2=TNGf7V*)8gtq81+LI6W6cSJK3ES8ePQ&M}35vWr!S^!3mhcOxR357pb;;rt+Y8EC?>v1!arVaD zM=$^Kum5(-o`Q<{?zu02RNd4g*Lox>hg|JaYTUR;zkJoUz4=u}YgnWAnw_y?g}JwX z?Cixmpuo_VUunZh-Poziv+us?=^I2iP*-6kaP5xPEpc=L7+(Tn=g;4Jtkh=U%T0z)+VG#Ca>ggVckJpm_D0v4$W zw4+f3+yY#Ifltu{Nh>re_KA5kx9CGONJVWeMlJ@xFzvdwv z&^c5C;RQZ*Axh8&RGY61z=IZMW?#&_c{20n^wrxMTS%k{N_0swW2(}et~4Y|H6c>r z7Asu9Fj8SBWLA;X0>T0(^remYH&<>wyL5XdHg&ba zlpxZ?3be5TMGRl;=MpX+;i7^#Y&5`xA`?9N#WIspX+dLD8oORMPcMVs4i*8JN)45j z0s{B}9FlYRvi{-oh+evQsWDlsOOP28wDy#HPru4sylL~cL&4ar*zn>|Y<4I%OQms& z#HJOib`GC7zjpmTi!GiYO=y=}v^k57l)_nuNaB!4+#->K5IG~+x?+bjmhN>B{>5LdYg}rt8lT_;R)w1-?(w(u7d|Fnp=8X zT6?TEcU*jGY&gl|jWL_OI=vgjtHT`^ipxyNSiUf4eMa`$R=_?Y_R>Y+)i%nh{ zO2`eyT; zvs<}tJLWY>{Th3mBx9*)?_PCjp{%+Yt-0kg>adezfizQkLeX3UTEm`W03EgfO%yXkqfSL_ zG)o@A0Q*=WNm$;os9ESGfufHT=bo z{{EXE{QZY7f6{Yovb>@1_=$^GZ@qf)=KD<@C%^pWXXmay$XQVkPTHn1<|uW`MDits zbQvjM1=Y!_*q(Q|uW#hq$f?_) zr!U@maO1(#CogATy?IYBw=w(fBMq>(D1rk?D>~6E0f%N1I1zr(kb@Em5`Tsb3Qwf4 z1m%#R1@P%Zx|~J`-5{OlLMVZpu1V$d4I=sVXMmwk2Sn0}YVI8ZDwNQL@Zk}d(Frw3 z&03=kE`dU59MU|%B6NvZ1U8U=&K}yJgswJEyZ_!F_=!m%uhpQ zbm!m8mv9JhnpawM$>#t=l_{5kADmQ!lNr9NuE!+32O)jy@Wc9?_ykSD3 zldEl7qucEdCnRU2q%SEhYuL19w^*#T*#hzL8Hov5F)`_0Z=%&6GMGJDqs!t5x&28% zvc$Ay$?3}zQkR62a^jM6V-gm{#xITuFY*VnJf1XHafumAR<2*WX-9rhIRLD+>u7sVKUhm=Uvq0uT?0t5j^>u0uCD(6V<$!iCr0|m z#*dDV^_)1_HZa+BV*JSX`0=TeL({{TOY;NEnunvV+?9hU@E>tx`5g(b3rr;wFfB{=}x3q?ud@& zv)Mv{KrA8^C@`2*fc&DSiwThq;}aY%7&u}MCgloMq{14Lv}p0FEk%_rXD;4-J@=ir z@4xf#@l1MV&cvyU?>_$Mo^OIk! zSa&FUX`w`s<_YdlYFC2%63JGQ@-+f-1#n9sTEoXzBNMLX6Ki?+8a}a3B-^Uc?^78M z80?2_-l||?TOgq=nAi>m4v-8Ci7;=i*;S>~ACjpH6uQGw)d9JBzg)dfq26n@75HNh zq%X?v8Mrhses%opowL{OUA_1C-m{m_;o11^1HED|=rGFQu?_$Lc6$;i?FTkLHwyqm^ND6v1W|w=8dQ+eMxO$kCll3eh*(7d z35@0$wD<96j zeKR`;cLpl&$*bANv+t4@t(NN079qGYDA6Z>0$3dA6;kOHDcry?OpNCI;u6pqR#Ivw zr8b$;qtpbX`mk6RCo{x};c_4rwM7;f08Auzi4-oxKQUZlqq^N3VwnRRmB#Dxq^@6= z*VaCI_R`~<4?b+!Rjx9{DfICYby%WH6sqEIWtfMSk3vz1NP*!Nz7TaGiX(p;+mye4%R#hil*C7<0#aR!&X!ow z(0{PBW#Q6I!ElD%6<)VtPcSAu8Nd*~Fc#pIv%%#_wmA|sT31Y5_OXG}oqglD)CfP9 zfCRJiQMVZ~9&QDU@dYNHz{nREK&ufFyWs}1vwLr`-5DZDy;Nc}oBS~`85wEI7A{v~RAIR{!Q{46xpEW%xux8WBN~dwTR+c4|#0!bA zP?oH+F4sEO2^FbgO{~i3S6RFgi=A&Z^V~K;yiFEwGRJEY7Rq+*Rg{;Cn=0^*GI3X- zvSE{SZy;)yC2FsUzt@28(TKN6$qgdONq zEmR~3q_F~N0GGPpH^Sm-Ihcxz%eXkfyPgkpkJ z5@MB9q1PJhKr)X%E;(({hRwUms~a0yyV|;sfwgxYZEWeTYebt~wlsHlwDHhYp;JA*!$7a`GgmI%e0Xx|Vq<&Xu6;$z zS8pyZZ)oZ`iq2fUclpj!z}V#nFRwg&dG*oE^(V8}p1!^Oc<#c3+4B$IoPYAB|J<#* zW0N&U#v2DucT8OAK69(*{GINz_nW8gmJeSqK7PHZ|61Act2OW-c(Z#!97b7al- z5{)^D!8J0`tOP5QYl-3*qd=3PU`0KHr9l{DgCLs^wWk)K!lR=>ilI%y=uXAxXoRr^ zQE1s;AeNBYo=u_D5h6K=Fb)@o_W*GCe3A{y3~l-><6sH_sdWcaHf%q*a>L$B*Y5w_ zuYTLvJv96F%hB=khe}&|`bU5KSHE~Y_q~qpL8Z>C(s^YnhuM{&G5Qr6H@vFKlrFO^ z{`k&(t-kY8F;vDR3u)E`!A56abfO7&i~ZlBq<&l}oN z-86pm#KjX+S5IGtf4+ye9zT2ZYWCIK+t=^jQ?VOgQ5c)=LPQD-p7@`^1~Gto?!$jH z41fdx0003+HK;Pr7~mgTevqOUB>Gx9fggbfoe&#Q-y;%3REMi^PFz{)5fjxizlmZPk+(k7z-vTsF<)EoPp$I57KgxxOL^<@FFn||LvQOQK zNSQ%SJ77=__Ua|t6Xx~I+t)J)VDQ5{el>gH<^z)_PNw&XlwMrsCzNp#O`<}VtkkE- zwQ(Z350?SJ5Rh=G9T(eBADY+>23V3PToP?irjIkZv*d=bP;AE~4gqPS96KR(2*ox5 zX~jt!K^Zu>*hxs7q|Bwz1a!t&yC>b@%e4D4k${r|?K}dhmr%zM+C)N=AXJ3VG84E1 z3?RW5nE65jCe#q5P9`xZ7K0JdORX`YK?01#MH(Ka;P7O_V^?Hq z9}l--VmB`Lzz?gn#7|v#xOH#I+AaG%!IW@fR(j@&P%Ma{rKuUqQ!`gATeVGZ_HW%$ z@WUVdq@l61qjzNcz7j%i!)5eJ`A&hzfq{_@G(;z~a0Di>W{<@Y zG~0tFo8N2?=xsi^&L&bAfMiCiFF8H8sjZI?Ym{1>RB76{bw4Oe_|b3_CS%m;T%kZJ z0BqUv%_~=LU$th(lI5FH)0e>=x_yaOM~uPb(-}QrdZX893Ro?%Hfz{o3R#VDc4Knb zy<+X+lAvXSL7uA+C*ed$Ac+^Lv-O@$q#+wq#z^%6na(NF7%{z`Yc=y@T)cRjG}&TJ zGbb&UZrv)WELF5rlRY((zG~?}iM}!i+wYIwV~gHz;TKrMg=TGmNxxI2SdUAWaj>Nf zer_}`mx(Q5<3O@i0{JQ-BH3cGDpRaTC8S}D2=R!3KmuPT1N^ICc%0o8Yjfc&;24fV z5?BPAC1A363>J^eC3w_>7?DgQmq;~orBP>eSe<^4KQ=jSVb0Q3yZ04TS2y?e4t91P zYX<$)(9zt~)!Ne2-PM2m_~?nD$%(;JV@JnFyH1|y7#Zz6aq7s##K82}@ad7^so@jT zlhc>aU%K6W>_k;#$CBmi%r>vf7cQ-CIzD##+Jon}pT4>N`1R!nFD~7Ge)Z9-E011X zemHya{>+7YudY6MJAM0k+wke~_JQK2zS8#ox}#(5qZf~yy?x~Dy|z=g>rURN9JzU@ z|LTDwmk#$|EWv~+zmyZ~T4zKA4Ma=BhA)d~bs zBxETm#zzaMNH{<;9?2D;>0%aV?7B_+Hg3(YZ|r;cc&?>w;LERn_`{$4&5>g#cjuM2 z^^BHOG4|HcCLxVKls4xnu zZ}1~(7SIyu{hL>Kh>!ElqH0h|P2obw`UFv$N#H{sF?4UANJdwKOX*V);L#Njz<@(w zG>2#=(YT5j;uCe2K1Flre^h{+E`%KD^|=A1AO}c69)TPfs3{6yP!5HFD+DSUS~R^P zJ%o^GR{alv(MY2i1_rR3nRx>SQVeeK$;%gyUd~jvbg3)>nLa=$JR(I9lZ8lif>Z}0 zELEaOAmkxJ9>8T@fy5z{H~?Tmk%f=x%$B%)2Wl2A*`hUvRfbqsARDPP(ux*b7g=~B zvruBgNDE(Nh7y6ujuBR#&@4dP9NPq9fE=*RiHqHY#Dh%gL0c`OnO;tw$c-!Ga7~g} zpBkIGRi+B^Q5PbD1Sl{brs4A7WfQFlf(xZ$_|ui@l?sDOY1F9AKr+1n#n8(YIt-KW z1X5C>XK|!jy{DsRl#S`oM~mG;v0JS48XO5jlUJrM-)lc|V(q3qPH&t-V*{=@z45_t zdOAp-td*WX%HwBm|MXvfdW`mT|De#iB^n?6qJ&a6fRMg1q!Fo=^3i6SxCz4zJb?xy zG#Zd!Rv!S&;fZy6!_dCn7uH$bVwFLnGRjmY6}49dDbou{jmwv?FlVh;ZW2iiIEfYo zCrO=3W%GCvGBZ~!UA}q4=H1(O9@xF_(Dq#iR;=EfwP;05T$(qK;0q>t{E1qvOD?lW z#3r%GsE{}f>TuApY(?hbB+o93V!2A3Bo@U8$QXevSz=u(b1vhn6NJiuSOYg>B~)gC z*21;fI6*r%(T1m5j9J=1DzS34sPv$ytrqWT6drGu4c2SB4oFIK8T*3^^6adGHoVBL zD0S*eZPp^QWv^Vlj)yO0@|G|-kgs41SMfw^Fxgs>YOO@GR;FDk*DMvQGT;s{S&%RG z@yQUW%(8my617!nN>9mgIKm=ao}Qk~V)8f)jK$=0*aAKm$9M$&Zw(|9OVvuX-e`7M z?H;!`6cdw}le;p%pt!T^Xm{^mV{><1Lp!K3P-Y;-hL4Y(9Go0JHh$vB*l733iO!P~ zU89qI6O)6d$4{IY8$Ulbc8=~;tf*|*x+5<=duelL--Vm^@4uXTGWX@<*)MOuczf;f z%#EkBXKy{4xN`68?I)KWyaMZ=y427+y!AlI_JXoQ4V~p3$D0PGhA!RjKYzP@;%fV; zo2{qr)SSFoI(YqH-=%{`FCIF6v10I2<J=tOh}?mMIOQBNrXbBN^N(!6E<$j-@2{1x~AvHKmB!WWB2Q~@MQmPc};6$YtNDX z;mX=pLTn_ZMuXA2VdHMO!mQOffA{-;`Pt9^@%8(^c=GDIv+sZW_KTlAd;QJyr6;|E z=gR8(4_Eacs_b96z7&`ElQZ%Rj+GkoD!F!zM7drhT~A6k3Gj`Wa1$=tE>rFoig)rw zI|P!QBIRCExmTjzFIDHuwFNRwzRFmnvjf0tU7<#2u+iafG&!q{jw+L@#$d0}+bVUI za;3hAn)r1qyxR-p{wL_0vH z`NlsTf`LQVp?%1~M_q{X)S)Q#Ifo#Jl88kr&?JlGP(l~dCA85pi&k1Rw*W@8Pt%Kb zP#+^=7~jHYwnv5<7YC)p8g=7{*FZvL2>JmgR%705OKmYc{^O+YfXP&;A zdGP#o#*%dk696nos(@hufjlHq#Y=T55?!iDlYpzjgd&8?0z45yh(KiFV!DEZ_1AB_ zDk^EIsO~v3aHh3;V%3HMp#;$jpoNL%4M>I#5z^2`l+?x|7NOK71eqmq3#A@RxVE$J z#Ko)ky84E7CKt7TggrHLIn_J2=*hG9fBe&*hQ`iKUwkBz+U3T0kt!&V`33Mh5qr2I zH-~U>2^S!lPgwc5d48W4snKKu?G>B_((H@(o+J=Iz~Ebnsw#X<6Oj;_AJ5hc<8B zyL#RB6|1*qWvz+}XFKfiCPToai?JD#eD)>aztRwpX&q9%LtwD5tVUL>m6L2IQ*4%0b1+qry@+41pKPj@_B4^l+oVGs zilIhjcfPo62{SLSAkWD@^CX}ot zW$Q`RI#RP*tXrlqES73had|u@jltwzOz9>~9+k_fbNt=U{;r~^A~}?@Z1Hj~lMjaW z&jga8$a|dH20=`cGPzu%(ZCbdX0|w8?m&D(+N#x?59F8B*0nXYbT>A2wY44T=^5xh zc5(=G*vRS0q0>{xr%!c{pXwZ)J~BBqaC+jz*@@9}V<*oJ4NmrSAMfn$FRyJrId%TY z%)6KGzIy$|_h!EQ-jjFVzWeI^t><%-SMCg-xjJ_7*2R0zCobRV9+@s{?smteIbxDl zZ{J_i)YCV4>D0}q!x!(=9vg2vd9m}<_14LoO{2G}hOZYLzm#|E+@ZmXr9&6X2hLab zpDAlQxxc(?<(6WtC5?l-7(5%3XJ>FBN0EvQE*P2$9nI1*SQ;iv4T6lxLNJSBkZ8N- zD8aX=fw52hiWo4A8W_XjJ1>!{sJ(<_AjP;mA>@=A6QSwPT(J<7i%FeU?_IKV+y4C8 zyaQEJ=WacE_I7mg!jFFX^WXoUfBVlrL+plxOl~Zq^uqB8QT=vnB{Bo z4wer16E>OMtCWV-62%4~xmG0EBEYxs1zUxpU4&#WM(z>G4oI~Ha(yA>)V!`DmEo{V zQ>Zi?)>z9d-a4DV!5M0?2b#^EdW*NgTefehQ&4)K{zW@@TXF1hPM{@`{9|2?U!9Xw}{YB&F zlaxW#KTYNf}<0_KV4qbCq`IIEI8;90uSlJux)Wcaea+DF zQLo-Se=+;`#p^4#9-G|>a&vZVNOYNA% z1`eV05lTOy2m%zLK^|@gI0-?@;5II97l^%>*e}w=llmm3Ez=!dg*yE{0gNX!@&#Iq zudtc@v#;MzPMmJ2Z>HAB7xQ@}m{1@Q;9?;zq5f#4gv1~aX*qmV-|@3rV=Px_!6iNc z=@-fUgw&xidP$IOW|!9DvAW=ANr_8cB-L2JQnHqnSGT2St;|`vdFaIXpZ?9S+WJmy zJ5aAQ#mNkbxH3kl2nm(3U;;%9CIPy8xI!yOVB!f)05Ace0|;52u^_*kzOXlx=nW7Qe4_}sHlG5zKRX&^Kut&%t&369JkW%%*_h# zT$522W87$0E;TAM&8EdlO(tKKAakscyVvtni!gPv+>op=#E7+STy5iOOiYWJ6LNEt zT#{6~Ww9q=l_#9RUAI9{St9Ogk{|7mo;V^OKcXIPRvbB?s9BC5jEO4ru!}upjZf7S zG_}V$+T)!qG42YRb&o``mM2`x7OaZqtzhz&bNQ>d_!^#gjX=JNP;HPKH!3abcPufF&8+dp{o^b$iydq!>X)*=_W3mKn zj!=k8fnidaMkthWI5-%ePx3L6$0NC1lFyf7LKP`CT5aJi+YfHvTe2&!^y1YA-}(N} z&Rn?t+u#2FM?d~6qcs!==UljYf9mX&dka4y7FmP=CMzg2Z?5;AqD%Hk9 zrT(DaT4Hty>{#I1CSCkZ)e|poO}CmZVvSUer`Yo z&^dD-KD>GNcAhuX7!{BJI6*)9Bb8~=&>*25FoYSZ3lT1%`|A*^C^1JhHXkAnB~;Mh zpFfw*X>`$r$UYHh?%g|3V9Gt1)4Bxy(n>m6H*MdO_jV{P(CsGsg|A&@V zV6@DNXsigFz`&=;M3+bWNCmni;>@Fq1|elMsA!|d#%Q0W+UwU)2a)M>VnG7*L841u zz5uMfqm8B%?L=~F^y>}yFJ8>Pc=_hZ%hwN|&lFd+s7*04eMqbY;T00fgFuS;*%Sz%4K_sSpap9KMLj5pd9!!U~nv zsWk+=f$ZV2TRhw>Bt0T&h>!$Gg;!+=j-I|TIDWCa=C zNTWvQw%9^uo8RUNdjd(mP@*p;5u}*a70?*%Qk6lX)PwwrVhb2tTtFyAaxv-h`}-ane~IhKo*$wFP*>o31~{^5J~W?SaR$JQCHFojl z*;|jtFW;%_J8`(F_i%G>Md$JQV*tvFT@zQ^MlZLF->e(EQ9gFPZ1QH=soUk_H)~E_ zuReaRyleDOb>Ged4H-E*q{;wVwu5J3a&1(kA_`Vya7+vq+GC8`Ia3pjmQs{Op`{c7 zV|1jVZ~+owNQW^P0>m(;fRYbFUWa38HOovT&>l)06m-LbJV-~P@IFW-E;udpd?(RPy~ zO>a$B>cbKh{GIyc`jA8u5-Ec`+}P89@{4bNb@R#hZ#@1%&+vnoEe2ESOElJUFrB^9=&Av9(F`*>Yb@?s zy{$}TEY#ae?EY$pzr^L=@A7XetvPXY`0B~2ThkZsU%dX{_I(f;Z(hIoF#G1i+jjtr zuil}}DiI7256}SEN6=nx;ki$Z8`0dNpZK5rc_oC@4TTUy5sF*j(1idn8V__%Qv~ua zzM5Z?9(<}Ix{zvNz8%`=LaITu&f%w~-UGlW9?n`v?fC_9jKcS9nQ=^IZz5D z6dL-11U29sIz+R(P(7r&s1*)hzJSB|;Vvq|WA4>UR5J7G4M6V2^Vct5%{>Qzy?Fg( z=3P?O3Y94=HN+91v6L|&zxc8cS02Mx#S{7zp*|7U#uMsTsU|GZ#E6wXn>+p9gLjF^ zIoo&SS5~#GTD8^bh|%kuVx$#xq|_ji7)hC#lvzosBN)4QWc+I1;Mp}B_c^?Y0c zYjL?#YKW2O!yZ>T_(^`D?f?0pZ!n!u zpi|0idV^c9cPivYc(3HJ1w0T-=~-*` z?yqiW8!oQwB9$JgItYKOA{A0#0!4^W#v)V1%5{k%sfUj`IZc?*Ady-1MxWUlG+X^v zdyL&3Mk7^J7oyV_Yxjh7W+z|_MA$sQNOf}N%BqGVLXln|GJ=M~gnBTM*iul~P+i;W z52kCicAGWO-#^ye)U#*L;bqG=XD?c_dd-ea+Yap5Q?xs;bnk)kox4jnY%Ex@d}q$0 zZD~pC{f=d;vPu@lM)k@zEzG^u~x{xbQ;)`SXvH(}^ z;iz3Kor7tyMY}ER1g9|DD_`kzYz~AsJAzBd-1WqvGFe-jbfBM{JfS{6X1O$KoIavH zQ6oLFm#kULtVmu^700RzQ&-NPxqk8D?VER>J$y1Z_wg@gKYa80!#6KKeDD6t z_ctERTzl{m&~@&{qv5H`qi3&!bLr00Q&;cyjhz9TzJ4D7)-gCy+|ZS^YD?~hU59Gh z%i9N)$Yj~?GrbfCvVkG+^m|qQ$BeI7*;)gz5e8t+GFQRn@;4H9x1IE zbO&?Ud;^oM19Y+Zb|4vo8QYAORRlrCMq^{t!uEqtZFk7OvU}U!j7k zGnel751-z?r)<~WqWb2ZAN=U2fBMt^`{Ap<*tNedD|aU$bMizME@1`(hmgC)>VQb; z6G|MuKq^uXpjWlZT&8!_fa&a2&QPn_U55t1Y~@;OiN#YHNNS2n zsr82Qa#mJ!9lbO>eq-|Noims3U%CD0;j@{SZ_uhyKrb*F0O;vY@dSVY+yZ+?A%}v+ zJiXvqPagtED6}AK%#&mO+WB^nLn$yYx)B;zv_p?|(FRfv@<qAbLz=f!g0$AijA^+T=js7Xf32ijnB6Z;K z^8oNb55GcMctwmZ1p6O_v=gZe4!l&%&Axp@ZTCeJ3mEnqO-P1=8MKiKHTs1hHy^Ko zfCq*G4xxcpsDp6^{FiTDyqbIVV(!7SH&^dI)7j!wrUa=z8CQjc@GMrv@nx}Gc`R2M zC(x$~jEG?(Z9JMgr3vY6NeQW|&Ru+HFuBVs>ROuHS1es^*H~42nSs<8q&lPAsFvuJ zQj<((QEPl^t>0t|C#5edu53Pc^}*#^&k9N!K%B{RA*nWokh#SQzd{o*7-J_-T?>XX z&DMB@He_{WsmuvtO)!wKl85%3qyQ$QL)EQ3%m9QCktR}Vl*mkSv>u0rAXI$5*kbj> z#3cEGaX2Yw^GFs)!V#zmsZC>wlWAgQ+9Z`BU1LTnN^eORnYg-Q-LBk~TYaH4w?8>P zIVWrJTBXKLkh-kw)y1WavGG}GBA3#t(fcgU1eHE0*9JriHzsxnBrd+##g}*l5+4{L z4GP7647c+zGbS(zghr*pVKxP9wvg58w>x4T&RCB(&g%~Yyi!X}i z2$?*Bg~{x`q`}dP0+9g|nK=SIC^^2+fD@MFlvRg|TRS>W*4FiG+Ppt8X;DgQ&iaje z50^BQSGI22vOhLqA>8?*B^wsztjk=uE+utUa?A%VW!0n7DIkYGI6Nqf52I zrq0#M)5Vf_OcdbD6IGt|63aTCdXc&_2~_8Z41_ZX>D}M^~jp zSH@xuG4i$;U3aW`Ak{OJ792@W97;{<4ToC1o+7OlUdz{Uuw@MHk|=KO0&MZO1i8_o z9599`I~vboiqhHQ1ePes#Jx=1!4w!6JWVu562&BdmamIuqogR zg&08yBP7!s4R*WD=k>%cU$(BKxTdkOySIC2cwlk@gxARV$)U5ShR&TEy?kc$()sZ# zSI^(Mef#-^OZRTxe*Wb7hnctEef0W^JJ05>KLp`5bLq~rfr<0&$3|QGMtX)O$Isum zc<=e8`!CMid;~Uh`f^RjvGqIi&E7bL$(^%yTUm4O!1UG0s}K99ueFa|JaXoC$Mnsn z@oP<|Zq-cQt~qt5cIr+YAZ_$|{m|9Az6-@oCravvhsJK^F59_)p#ts2;X7Ge2a{{3 zR-!U7*d`|AXkB16g9WCd)R<%ewSLF^yfJzyMPL{Uk75W|ES$#^bL*#$3OM- zPZpGP>MY3|%)sL7scpgas7piQ5-NO{#L2-lcOJZ%{oZlqTEJG@+7i@GDWFORW4IiNL1xYL$%UasW4PPt}<4s&DA<e@0&N5i?MEK{U=%n|UP`ED`NDubf+Ti zQ*!xqDCFlvKAF?1@TK5}`@N)d>Ox>OAC0V>t3yOq+}Wz)Y#QF-4$?#iRjv z)l!?nWz{_gi|S+Ilbf1aHm%kl- zS8lreNdgkZcTfyNldc4~4Z|%$kwq-Ei=-$}N~W-Y$>kOjB%nwumguAko!c8DB$RBl z<-bNKv4L=uX~I$fm?=|h&C=U5V&a!xzx^tlw0OzNt#)^OQrc3NFG*+eiRC6-tTR~r zplOZ`PMtY_ySc4@>545jSAtaK5y@OssH6pL=|b4}q=PSVa&h?UwQ~gyzQBsMl*EiU zVb*Hg05G%JZ!&pZ&al%FayWu6R}kn045I<2x3~aZ3=Yo5#0;Kf%kIPLwiXgH>!)3t zO#;F!65HiUmqzDvxl@x;R;}B3pt`pEaA~7T;{bDe62kEdH3oM$F?;LI!lu?^;kdan{dy2#dPRm@8nb#$p(n6Rph#2$!_4bAQeapP zSDMXJW(w3u_An(D7O9UCE21?jw%f`}bP+jz)!J}y-@=qVS;^~Ni7T;9dqg$$`lEfy z@lnmCDeK)!!Fv}1*H78c4QQv@B_~RF9UG$>vKe&=%*G(r5hLr0)%M1jk0#iLQrtsn zzJas=$g-ZqV3RLcY_#o>>(*nEWo#msAy^#6&tAaKio!CZg~W{cS!@W(G- zw&74=WpPnWZFSp;ku#H{7fzixe`@IL)bTSHhA-YYef!$Q`{&NyK6mc+g-iEu+<9^D z+1q>1-`;#QbN#`~lc%q?9X(Oe*j3TgRo{86sdsST)W!36o&v@|ew{dXt+K7Ru(~OA z$!d+=zj@!GuA#|OSMHv=dcU=QqNaPKZSYLb_?084Zghego4V6->P|BNZ0c4m*x2>P z6W8jGU#jgrTh=(z-Zzz%yA>0G{4%q+HWtqb3}bMtOs zFh;4dPo0W@F+7TivseU^%6UAARH_GqS3U4K9BL#ClR-{NF&Q6Ih$RNC&KrtZv~g?x z&OK%Q!xvu6eebvb{O@nxeZBW!V@mc$nI^!+%xuiW;v1Pf0GJiU63hKuk!AgsgKxk6 z%bQPscJ|h{r>=hc_KRO$fAZHoBaeM?`xW}VVtD~6Eh43*5=Di^(4f-SDfP7~69B1B zXKU2i8q}6Lv!_jGZ&aCUb+%fKrCMbIi~;1zfn+9EgEQD>bk!;iE3z5DJv}zR92srep7%jOX73dNKu!snw4g5$iB3=IfuR!O(9=Zf70FdC2q7k6x z&-9`V&e9d2GVRc_r>T+`NO;jQ3-uSip6@?IutG+k1*lP_vv1};c6Il+v>&~6_5PD5 zZ(hCr;>D|XGc)fHysXAU`N;cZkcJHfb={TO0wj?fT zvB4g!Y3Q~&W8J<)n=5R##|Fb$z%Z9L$>U1`dUYQgZ)_VDqIuk4Xc_>TRV}mtP~nz% zgo7iraWE^NZ^1B=kT6T6HiN-qwFE6@#4x)(V7L1%7LU#D2XxszAzFk<wR(?I?Eq#=WY)taO;t4= zOP6hSxZ?c5wETnBC8g~SJ@yV$xMusj|mG!!b`i^bMuPt?sebY%Z}UA)@vuU=X;c= zY83rD@b;yg#$&&+pcW5$tx&}UjFEsb5g|jH*eMNWlPfKC@z}{Tj~~7|er&X|ya`Bl?8wQ<;d7Jyr_YaG zzIgi9)YR4K>1$`s-aL2V&e=*36~s}H)5Pt>;crRS{PRZvpZ+*R9tq<{SE z*&7ef+<0>S_OlCjpG{o81LCZtu6@_R@|w23Q6yCOHGQjn`gYsd`;DjX)lA%~8^6^yai{6zwT9yts=Frlmb5qbPG&6L%;c!q zd>fl@XY&DLj%bdJ$+j@LXiY^1OUL5qqnR28OB2OJor>Rz7Jn+T?pu6FwoR7 zFn|`&3m7Jo8H7Rw$S)`XmblldWF75YiTq&TP>b;gQH1nsZ*JN zUPyi!9CefwD@T2a_G-PYQe!SvnTt%G!~VG9jNFoz?lS`?uZ~V#pT2ne@~sDVpTHA& z_QmYm*Kg6puXpd~VL%BTK)^hNA_h-?FnG#CIqlP2p-)kCLEA#F-vG1&4uA^u7F|dmf=^Rz zK8zk{L=y`Ppc26qO{vH!IHZj}q%Bh6^Rsj#V6+1{ExA6Y7rn?YDx^RKHaCmH=xK%_ z!G(f95V)WsxG!J5elhd*e1B^O^UL zU(7vxJ~w&cuF@D(+mcoG42daCs7>T6LhaD# z{W7&*qV!9ZK|3(8VUlt&R_@T9H|p;MndrZ1U*W8I>7Fy3csMizTuoT$UoYtWdkR^Hpp4 zigmy+zHBj*2($QB7DvNiix;pk1_z7A@F=mEqt^<9E@^sLwLHnXH8Z_r_0sy)$vb_q zizO>Js}5H=x{tbsPdd*`d9PmbJ-D54|5oVE73a;fw(H~8OUI4p+ccx4vfgcimgTIf zRAxyWvowZR79*$#iK=4cRY7%SKwBBomxl}$VQZmJpXV^{u~^nCbh#o`3PuFjd>6d` zGr2kjN6Y4_*c=6mL$Y`TlPhF!1xy|Qj1$eKHr3=X8C*7t&t?I}1biL=1|%bJsYI;O zYAkkZAb0WF_SR$X-+t$t@BaAYiF3_OeWgY9-R*-@r>>qHK67ID%<1WCQ`6TbPhXup zdwufU^`Y@|t=&Vr^UD-^hshb-wEJK~XaDJ|_s?8=I5d5=_vGnQSMQ#`^W@x(heM|> z0>)0BxeD}}x_q~xYv4d>{qoKG_LejpZs@J-80BD(|(U^&lhDH(O5rabz zWHg`X9!0tk>O=myL;Juaut*8rIDH9CFS^3#2A>S{0!o3{0)RoH6&PItr)FNwz|B2> z_4?t{H=B2s_~O_56Ssttcf_Ubj7!^^k+Wy%+JddSD{EVij-I}H^U>>j&)*kT^r~&C za!Z=joGLP=33W+)bv#!Yhvb(!88>9&riFw#3)3Wm0u#uCgd#?&i8b1js~e8pfBf$B zx!Zg5O5L6WnbIPX=*6T?LF(0nPAxH-b*|KeY^OcAEO*13Irsy zPy(XLEs?q9DxXRllqtQ0*d~(L;IB?^0;I(_JPA%uQZRP0QWqmp1jO=yNEU!b#0sB6 z?bn;a*KWQ%bK!PTX`Med#p;f6`xC%?fuuledN^@$OZ%Y4;66S){SW{6zpvkVFn!^^ zE0m7QT|CmxLkvR-jGDG=MWH3Q6^tjeVrT%&NRS4#&SABB=b_~YfPoJN05e$KV8Af5 z!^am&0AQfNqL{*ztX1o`6-hK9r8!k)NX4ao0clH2SvfL#xvg`gzUk=3Ee8UjWJ0Xv z3zPy}jUwztKr$03PPx)%GzT57M6KQ@ky$`@l42_cBiP%+NJrLu|$%xysC~kkq zwAF9i>NTtjdp9Y?iAq^2DM`ZR$#Tm|rDH2kwT35Ohbh+Zq>H%1Foy@vN=-D2jACI6 z*n)3yg;5w0MasBF6A=!Iv*P7z5{!G&;>wn-Yu&lLa9PqiN7g#!);vQ^owNIhYk0(W z?tJLVRp0gNu3Og~x2`&GU29;>z!RuBJUNFW<#5Ctj9~GEES`Xc z00s(-&ET+@9JDYMlgDK6fMGPoXp&JoYAO{nlTPEb*+QwQOSWyxFDYqgYVNyp=h@iU zg|_zN)s<~v{l~_~CoY{jbA95>wG*c<4UL`eJw930*u7@+UWY$^e{s#o^yPCm9!+1l z*LG~QuCu?TZ@7Q_-1HT+7BJ-JZ$1Km9X)xbtf4Do>3WsT?@w8@r?|GdbD)3v+KI~# z`lfFjIeqKMncGLs-Rrqs{(Q7q*rw%n78=k&>;Bd1* zWMpxaY)*cn`q!^M{Qc#-KbW}q6#(r1%෴Mzx$m%N4 z8p<`g28FstsjIWPy7bl-02sxvCWF1r;_kAzyCK(ETR@FzEVU+AgTYa2aMYVzjXHa^ z!C9@fmnkiUp14|nVud@rf6?;8y@Qtq#;%;4x-oVB=9Sxz?>v6_boMO(Z1(*Zuit%~ zd;jI!Tcl$U257DGNdtjHBjj_7RG@hPC6Q_rX68{r4UeHlpgvuPrUfebI8Plw4sGDy%6nCSOK5Z(54IZnL^`2k!2xYogh%g zf&vpNVnm9dLLX~&rDo)8-H}(_**7(D?yf7CA&{C$g-tHE%ftqm)TEG_Ee5aC9&@;; z{)?}EFmdYY(ZQ*)>Fc>GcWEt23T=`^8J4Moq|8Q23}T5M!GQ422zZayGfZFa7aoWQl-aajrRu91L3U9 zMH_OK?$Vi(B#NL^8G@Wt1jR}aVLqwK7oW6z+s?zCJ)`F@KR$l)?8dG8WoYV^S!eR5 zWUN@dZnxPUf``|?{qeurx(6@cdM#4A2xS0Q1cY)A56LeFS7@2HPm4%l0-7w7ec-JTem!*8;C^=6mN9aQTZ9g2uhg&*f3lt zBuoOKNhman2!~!1qmp}Frt~GrdCBhG0mBZzVY^4S#VB8@5~s){i84h3Ax~6TRw^7@ z`O5Wt#Rk576^C5JBa$$}D-c=v0u_r3&qTOS{sNY80heG&RRXI+7!xEjW0k8?EjyNl z4z0_r+qt50L)M=3_@&0h8c7te<;UkF~m;Jk6(a_fxc z`lRmCi1Pe#I=!@w{$U%MN>~_Y9wcv&%Q`R$06{ zSIoZB+U^t6BNuOvUU|^af2zL!RO{Hqo~i3c&)@C4_@Mjz{kAiAThHEWJNvNf+@p@^ zyB(9a+DETe_l$!SyYu8@VM!B{qhj#POrD+11%`o2wz2_c91DY`XR>t+wB56k!BQ~U zV6te2n86^xm`o9iMKW0g7=wv3SvU*rhlvv+xl(16N=+cYczh`rq?i!CR|*ba!GUiV zuE(VoiQ2&v=~$SCjp^8EFKz>T;q{ip-TN!A+P|T)zLK(z;9j*ixObT&1a1XlnJAW~05$U~ko!8?}~Zy{*;m z>$Q5i&8|+18?3|ZYB#%^t=?u(V0wF<)>@~v)u=5MI(wNnu`VU2JvFyJHf?`R^Z3!> zOD9fUKXv}@h3ofkJ$&)_)!SF^J_5Rsz5M_HqsG9{qaQ^TetP1Afi3}`<`8Z4DPR(< zvA~BM3TZ0P6=-5b4(SS?3?V9_z^M2`;2fo;(8~88(5M@A6&N^h1CZ19ftu!wnDeRU z5Pdea2nf{_a_B}^li|G5$E;n?3+2Hx}Y)Iq5b~{ZRPdi*{kQzW`Pk;p3FXf z{`%Ro*Uu5X=#j9ePae@6qF6QGc?j$Q9}(`wa}Z{51iX3i;srf?6^WRK#_7tys7Owi zyn6MTjwA%3Ma5;HS z74GE*-x{NDo!-07=-=p!-{ni%<4@k}Puc5D+HH#2to5x`x>ri=xk~pkiER;K$`a_) zF?~921b;DUT}&D?F;zUKh{5DBe0dO)`$futR1;Ji<2B|aqbptSNh2o3dE?omr|&jwEqL_m+pf@Jr8yY@rqrdZ-cY=H!vT2Q!}C`n zHOk~hnarS27*#5pRASk*rO;@Nm#BP%+#`YyrHoVrNQDm!m%8~PyHElQa}YA90Q$@! zlDSB^N2QOANnE~U^`4}Rbrw&i&XPeYLShhM3Ll!hEc23bFEC7P2x?6+PG5Rr+R7!X zcI-P?qt=F1!|?*Zbk7LA*VA400VA0y|GRoP(NUC2F!N9)fsep!?;+(;ft9Z zVH6YN3lyzACoqXss0+U0AQim z%#E85WM!|_8+{m|;ljH!p~G-QFSYQ>d-WwpRCgSb%1OBM41I&C02zJxDNWXrPn z+6s!KjKD7;azVL7P6CPJrLs(9hMGVUV7uL8%RSJ^Q~_J0VJq}hwT@&nQ(`@=%xFnz zlD;X!)|H(!rzovIKe;(JzRDC=%+9T1HgpPl<|sx+4U;Rh8#lnEsDKcRC~ARc5l>gUZLNx#JpnIGTN)3(_&~XRn}ywv%KOsi`Xh-D%eyZjm#kt zSwtc&3P-`=X=Hk6<{^zrrjv;@5`jv@Q$P@~7+f}!hYq762)IZhh!8~qh3<{9XcQrX zCT20@T(*kO)5>KQha)yIF}Jd^wY7b2|J;ee1J?(QF7)ib(s*3u30R&8Gf-|+UIU48K4iUSvy?Y{){ zT5|aMq61f#9=g8tz~#lePmOLk*gdjp`;p7L_Mg%kgAq6}fvk%nfeevg$O!5Puwn$| z47_wYP8@-kMBqeGfVxQDj7Vlg6l;0}eMTf>Miht^5_LutWm*I&0!M{^gfxZ({tOu` z8JK$lnS&>Ca3n4c`-UU}h7oBp_!kvL65%N_8rvY(##-Gu4qtwJTCFc`=7E#yi@|syZt1Kmw3g*c!y>I^GQ_YYYU^UTX;f+$ks5~OrUf$ne1&nI#yaSWA4|v> zPe`9tQZ+oe=Fs}B$I;;7iSt)4--HX{(|eEKy#M$a2wQRuM0H@SE09nBswKrq5y=j6z(%z zi**9&$B!R`UJ%0z3m!ef0EVFj=yl`z?WOAX__$I# zOJrg2j2xkbFEVij2BE~VU~FAq@2JC>7#p7(h{-Cc?A*HN3}5ErDFZ@9tV9)`meaCm z`L6cvVG3O$mKuc;Es4ygF?bxVjLlWe8(zf~Sy(~~Q($2V9Spu5#1=U@A_ulWKHo}V z84$oAU~nyTj+x3dVhcp^Y(l9|q6$hhaUylRLYK@Ex-s|0F;UqjXph}OzLErH#B!*#p3ll*6upIV8zCc!LhiELY~r~wfm}DdPkRU*nRZefm4^) zY(KDi$AO(k&O!{CMXR?AFIltg;K|*`&#&KgWbVYuhMsw~U30sJm-UXVnzMA{vh7FK z9l8JvTfYCo-WFA_V}aYSO0YN(MMMwe7Jtsz4XFyjd_+#g#k>a z9@ChX0=Ix+KrD@U66ggb9D)^tjLNh`ZX8#b#^k1jKrgjzOk-WBwhY;WW3j1=Vp0ba zv%1Gu>|eRz(59WocON=)!0`uh62sA%FqBraaAqM;IP}3Q!_ipesHi zK{$hwhzf{3D1bZ!P@)V7J0-O1CA!6htP(Uukb?%OXLMFr=n(Y~ert3Hc@&4=H{9~x zgZt1J#n1*~BxnF7)J`=9c7)a0-MD@gz=Nz9KnQW@ zbzzVT0W8EV>;*(Z8#E(~p|gNk&>JeJGNH%05VVl@g7W4~1i^c^fN>#!-MM`qw;p4Pj0_;0*i9ArsFEO0oj_z+aWp+1 z8%R_UX{r#wWE8rbN|#FIX0^_4GPx`kkJak6+I(h*4;W^$d!d9FB#^3S;HmKaHv$J& z7Fu0HpHkX^;tnPD7DPS8kD& zT4fbhX{AF}ZIhPhL>W?k0+Z?^k-ao_GDlRvl$22T#bka7Sx`*k=8`z6G=4mZ~yE zE;b2e8n#?TRmyN$b(GygblC}RN0i@7hzSzoqDhId)RY8jd<@y^#9565qne}?kwh#! zgBn4?Psc@0kDL(^F>QL}bSNXDrbk6aL`7jciV;Czvm$5Ufl^Qc!@z+t=^Qu=+b?`1 zMlX%hFneGgm@p7vjDV+;h)e>R3qF`i7lRiONsTgUP2ZpyDIJx)u1t>?Bt_6W(+qm~A z_^`dFE^I%15`5e4V`mqy-r7De5=h9>SbQ19wHEY{R2d|7Bxi)s_=D_BYb2grsxBkTZRYzw{>>gUOXXCC5-snO+8C!h{7=|Mm zfMGb2CX#?zu}GXW5+}jo#gS3GNE~NIB(^gPkSv5T?4BzUGGq}rdL*6!&YsE;g$B~q zES`$VRZ$sI5{2UrCh3iC97RB)t4Rz408A+N%QV59!lu9d^ZUR2{rkUs^uwP%{1(vl z_s?Ja{qvW<`{4Uq&;AJjyKwif_ul^O@VQ@AwrtSZ`sA8Z8 z*}fm_*V&U7u3Uj@=YuCeFXX+jb$g$^eg6@7uc;eRXb2I&0KN(W#0EsB|7(oq@}Xq7 zL;;GSSttn2&Ikb#=!F~@APgFWQG_}~r-Wk=Y7lPrA4&8f!-qgADADNn3WCbpmt>IjtY<7Xlb4Gz^gIclW#YO%FaY^@Sos^zvum9s_TZiiClZj^hQ6y8RV+|wv=)=6A- zLR+=aQX#Td2rXrNa}isg&DLem8i9`mFQt2=l{Z4P1H#$2tySlk!c)_BrY!S9y3x#K;@oiwIu%$hOZh_1vRQUK( zhf?noO7$9}Yj|ws#%)J{YJ8cUBLRBZx!9sp4&Wt-0RR(NITGwSXkZwbZ6LAqKr#l; z!UC#suoZQ&;Y7ZPEBEr0F-lXK#+*iBn}A!`q$!q>!L>2C*l;4Cg3h&p*g^+|Wh65~ zwb($VjVrNB)Ly+U-t0=1>ijIRnISOK_zt?zPv-ln;vik^~s319k3V-cV zB3a1cDFqVvB5%-WECz!E7-n($txi9NE;}e-vie9g{`4qX6oDRzqY+5l;RUOsh$0+W z0cMWO)G@dwk<77j^^TO(f|izEi9{ojr~|=xqs8U&#+s}ii`{2+1sEKuSYg<{_fY@f zaBOm(E0Bhx@Zr026d5yNM2eI^6aipJ6bXeYqfwMBx`x9rDujNAHrJskw#rLwvI>W| z#x1RL$|}vWVmU9BO^u-vgA8f{gO|Y&=2HZPBz_^8S4a^S(8M`pVH%kgLuUF3bQ_Lg zjKa2Ol!b2QizCS52$FCHnLmTdo5ti!<8Wq(coA|zq(&U66XW$lqF#WP^Qi(JgUzHf zs5CN#N+ePUcnSf0(+m=EI)yZyN{*mYBWcuWR5HYo6w(YbA&P))-aI{G2583gH>OXY z9s!y*En>#BDA06Z8CDY&8HtMkz|Fve5V63GLH7t?VTMIT5Lt8{g~SL=>!5~2!{Zo{ zIC^O9F&VS z?9Z&|%&Kh5scP#VU9scv+3g2UkFVU^K5L|R-uSGA%SM*3U$J%1j-#jcoxZsL6tM01 z#PW?@10&J#83L)+7neC}c8#fPsB z?Yh#r_IUfM!~JWI4Xr&gy!Pna$$foeTb67%)<3+KBea9@B2tWak^x83;mH`rq6mr* zz$AG1{|-)w!wVy$xUVqA2t6W3oq?mnKf>vev_2y+_X+JA3gw zT!!yFxcl(w-G@)^Kg1X|HH7%&M+b%ghDHVdgDWV2Duj)2{&h}(!l-~MREy2ac=8kj zS8W)`O(>TA8B`N+hwh zTJCI8xLTC%Hl?dg;cZd+T2ZO;1J4?yo(8e2PGqkYSgVA#DuJ~^WGfPw^SSyQmL`Lv zPGKn%8L}9*B1WM03snvtX1w$Qi9#rmizN!FSS1r`r6QeNVwB4)Qnf>_@hSB|g+3tC z_$a^|F33dVT1iYZnPnp}Y;>NJD+>w~euFKUCo$4_YUoyB^m8Qk&>CyNFb7xS4mmK) z^U=YFiJWYyhb?il#4ftPMqwK%Ecjw*#TL1tDs;w}IrAoG4K54B7l~CtwKtt}!5=5K^)rcr zv9j7g1qZ6CW zVe#lqZn?@7MPNi=v*&4%kyN9}S5VSSW#tmk1Sl4om-;O zS>;NjRDtd5s53gjr0Ps=7GIH)Rs8lZe?PW-T~TE-N2J411(77of#Jzw0$GA5iOEzs z*e?xeisP`(XY>E<F3ORyA!nR_L0-pqKDJrB0U=g4xGGcmU#Ehtjh{%Wt zD1k_kGo}BsfG01ve&Quw*=uuD+?~!;k*i(9|l`+DqyNHtat? zylPML;Og|M*%>wSv+75)8;0|nhO=vC=Qqr4p1rhl-tyLgMTM0eIWrr&2Pb+)mdu}A zw{FjY9Y;^^IdOL1iSt|b935Y}u6x#k!pf$K#;(crI}V(@bmZ){CF^(0o>(<|>H48n z+ebIxuD-QLpJ~C(h$$1-&4X!&dux!V`#P+QRt`E#x z#b9Z0XoE2vd}g=XpYQhN(HOcYf-nj%io#)vzzHI7ya+re0?&@Xv!I+F#Q;U%nV?7l zmc$eJV7#~j17Bokag1lq-}&OJ@813S9~8PoCeOv>I@kgSouwZco&4m>AO7~~^S}S= z`G=pr{2!p#XD>hc{Kdy#Jpb_DFMs~Wudm$u@XU=5?!WWd?I-_OyzX*L+MwP(TW=ZH znwD6cYXDtF$7--&Itu`7mCCq6WnKZ?QUJirlLq@rlXIonJ*l^kn>~ws3CrWsmc?g` zx?`IMMz${BaCr0XQ@anHK62{P*-LOmzJCiFKYSW?V2EL8ED=3N{P^({ke~z}ASA#c zVn(<`Ld~E=RDcWwaESDJgK#Hdp*E-r)nW}oUJVI4!t@yH6B@kUGuHC8P7qM1$P~(i zW7IhuhEGTF>vQNq*rFHr?%scJ|HoyWz<3?mYlj<_Tvi)-?Hp!h03ReTd z7!r_7VygjqX?z_jPrK69s`RvgRNhu?phF#K)dbr#G3^p}z1RV6tU&_&bJYnfr67^D zOlT<;nhV92LcTtWug?(a;`u5sPY(9T3g8h-4HA)7Ce+CUYK2H66RNOMW)ev)B9&X9 z@=%2~BF94J*~xr6h3_J995|*8&vMcP(M)L^R~{$P#8EkVY|l)dk%P-30uI8YheiB8>N@Vv5^^8D$7CTx)?mKND+%o7!jC| zupOnjCMwrP<-xlLnUZLcHYqWy1xL~0C@Ng&1{jepCs8FtiU3DsQ|Y{@C~`z35l^6z z$t*gZ%jJqC5|v7Alq)Sfp%T1T6oD2=pw5V*<`z`xtkD#Xp3E|m7}y{um91t8baJ)b z;)pFOZRi;oUNF9*xqUX3A)wF&*zT8N4M(723zTWOGq2o!T;0^0UEDxoD8P7y04Bnd zB?Ph*EvN_pBU5BFx{5-PGw3P~OUvWv`E0X7>{mI$2pSS!ks z^O89#7QA>GfBK`GC!Nl%_4Eq39Mv1D<+cRiJ+MyXu3$MVmeVg z4ac93=T5`Ze~P2LfhWCzCr-ys00E94=f2W4B#|l`g9O53Jaz| zFard^49sRt2^lZ&TQe}8!CAmCAlZ)qgA%i4Gop|pu}8r`xTr|%fiTSJy(TnAF=7TL zAX&r=B0?8pSX30m@GXRg?Zv~ED>aV##@-vZADJ969dnlMK6Puu!OI7(Jgc0wGP7-Q zV&kI3`mv;%(b$>u63d1%s^+Cv&d#bDh|Otm#TO>z)>L;6jjrClao@?U2hXhCesIga z6Z?-}+I8^E^7T7sFI+aXWcALY=MJ8^y5+!$!HE^Evln!YEFD<1X5NY|6I%|hIec;Q z!1=LVr-pZ&9^87SXYH}($%AbxkMyiNF|hIY{7uK^tlZZ>zIEBg~u6d-K2VJp1&~yPt16{4}?Gu`6c2(LSa# zPg`E;9Ad62 z^qOMVD|%s>oA*NY>prjyJGy=2`t93SZr)wEY@^(qqH|YiJoP{?8( z3(-=HE7n~f|Mq@jed=EnyV2h*Wx)i?5&k|Z#LNH$NdGy$x)I1xN z?*@8-^sWN2HjzL#Mv;{`ikw7O0Y4~o8I>Vnu%*?tE$!|7g@t9nut>O4jewk;Et z#v)O<1Ts4k4*+9KCr~2^%)yc6RIZB3HNX!Z+8a|tphJAvc%tZ5Y@I@?B9bhPB*OKP7lmU)0S54t zC_EW{cK9X0&(31=WfGN8AmegG9IlAX4O|A`?%-_Gx4BR7Ok8;P8sH+^X(*%Xb{Vx@61IttW3+&0SSGxS?Rq=B&Pr zvGq%1su#snOay1n4;IgjE}9ivG~h{Z_GLE4Ci8Ckw{*4V1yrR!I3-M{Nci;Wx_us$x?5pP=e+~fq?!$lm@X;49 z{_)j|e}47iqc5NT?eiBOeER&^Z$3MJ=dZV)e)8nKuTEY2b5q}rK;o#ywODVN)LT~S zt!wqxbvnyxV3^vtTy0veG%eTKR%)zZ#U^#u?18(s~vw z*}G=Ti7mTM?>l_q$my$RuiUOk&ur5>i}daqwYv`4ukhfZ z)DAGKQ@R_K?v__Wh^-2DGe{F?*9AN6sk4&GmP8kg#?74Y<_$YC=14vD5_cUoqUfxZ zxa!0X=%hjJXizxnfxmG&n zfm{rM6ZtK+G{BYxnetecGM*-lhLWv}<*DPrlkt?%5|uwaw|@WOOJcdHZ}#ZW!pWhr z<(u~$R~mhEKDatVXga09O)F=o2_1 z3tNN%jKMcD_}CC)Xqz46G)~wNBQb;vQxrRz+;G>99QTWJ69F$Q}m|GI? zr3Sr)Mr8rRfMmExB9uQ;3ga1;pMqRyW-5hEr}3y1YzI^dg@eb_BO7FKodI(dEbk!y#p zJnNs_Q#N~be&6c6Ih%3@Hf8m0%I@8g+`KBLa#2kAM0Dw>D`%D?v(uW=;LB=GD(+4z z?a8ScC~cnCHfzb~uV33U$*xe_tV(+D1r`$#~ys1Vi;Zm!V@7D;|LNQ5iGlm zL{*S!Dkj%TV>$s~ELIwyH}Os|?PyR^LXOf0Na-*5sPBdM6XJwq}=X%Pv`)kTIvR zYvtN4CpYdmy=&ju!^bb5ICuThjR$ugKEtNYKf>l5BJTyz3X=>3vNDKz^~NCR8M^_7*5e4>kPGR5y&Zg*a3>(hgaZVma07Ho zID<}qy%`9g6`r_=GC#R?^)dn&C=4(V%76f7VIKwxHwe3~*BgT%kG$7Z{w6jJ17Qp? z46|P$o}na`f9-W=YCb)ja|c>nyL0Qx-FrvQUQydq4W4qHr&{Bh0vIS{#TumcdL`h> zh1~#?JDZj6RuCMjeQlaxhc>zsh~>*0cIVA^i6}frBb^kOdAR$3ft_h=KrB5>Hd4FjXmRbrO;9B(Tgxwgm(MiDM;m!SOg~0w+`M zrvt;}(HvC*Tb0C6C9||?94(xcz){C>R!>cqWO=y>|2A(-$AE-FzsoxIrYhQ`s5@c9#pA#m*A>nF6Q6 z5Tn%l_)-%~pk?xPbbue%!jlI1vN*9O)f-!lrEf8zSbPGWC5PMy{)ld6~uZipz@Yzs1l zDU)kzYg_yJ=6(F}zZWlFfxrV*0Gk;zfKs@S&6=`Yh+BwK$cJI`I3l8E%m@uLz6!87 zbXN?7tQZ~z6&Sr|7ORfx0W8b-nsHn)#%RRp>5d%n{#IENNwAY(6A=9ZneL1(p5TU z%OA94_S&*K-8o&poX)s{p5%g#tkUj^=D~Rr>(=c$w)e!PZ3j+GZrIs3GSNT0C^jv> zYtHDJ?FY`?esccqvlBNT9=`ry&xJc1j$U5A_w?dj*n0L0cATEG`S`%*)xZMP$H5+9Gb*| zIUevp2vKlN4`25YLc;kl!_Xl#gUsvg!!5&l{SY+^pALfdsE0?dHc7!gNoWWWTeIWU zi6A%^31Z+4iZS!_Dt^5&^#6aYg&08#1czaUp*Gkgjxd}+5Ql9RhL=}UIS`YO!u||_ z4VpoKG7yIkA%OCAdLdke-53N=1toeRfQ7tQ$dKK>eeL#5K>H|#MT;#twv(05}PXd#xjAmRA9~%8Z+d^ zc$p?3l6!=5pIDoS87Zlst%$}p%oO@*l6a;Pdt92WNn@!J@jM5PX+er&m=MeWV-&sv z=oM0srHE%J64=^wo-vE7OJ%F#S@IaZGFG8aba=C_-T9f_lUUc>-`p{K_S`XpY` zrVUgz^e$SlsdHdNXAbg&X0F(2uw{u=acWbl3>!Z*;OW>pQUEX_Lq+9iXe>F6C1Y}A zWEvm4Akz78O(c_9WD=dv6N9VpxC3gn5w4OmqUce0Hjygjh;0IOkfVy_Dq>j*AT+i$ z_M&AQ{V^E@C3PyDQ)_VQj4qEqQK~dinG%a5rlh>dXbG^nDk|7VnvBYj6X|k9uNedZ zwqgQBf~QJBM4Ft+QZv|EGEEK+j6xHK)}RtHnL?ou0H);eWGn`s2F`=PrVzO#0+&qS zK?x$_xls{}h-ow^BXJCc$__?kdK7(H6bHd1%;(9r{C|3wcFhAJHgmSqyfgb98n+`UsKck)?2^0 za^=qY_1je{BjOGG_CNp|02ojTScPzfgaC#DuwTe~VMB-!05i<^Mn+%`4ABc=4514< zjKJe?*tjA#s7PYaXdD_1KBqt~*C(gsR8+V0&tA|wYqX-e%kD}^&ZtPvu81~6ZX)Zc1Jo#W0K(Z+Nc;(9De1KL1`F3_g(HOt(MQg?&g-JtXU z9qZ+eI;pEh;;N9iX39M!T3?~el+2d_!2A+j5?2u|(8Oaqvk2W(agZTT=IL_T+H8(C zgC>o|bDemW4TNJ_K?Dva63GDLDHl1V0;^@+`u|$zqpp2Dk z<7Za(9XWMVXYwr=Uz3?z9vzd)V+wg>j#sSDv&Uo@+yS}XC{hVn5`j>s*7{{imrQ9B zh;=HRCpn|);`O(+mIOKvne))dz}YkcFjgPD011tpC&jRPuubWGyRjoXh- zuGvLp>q#sIpI-kYF#ANUQY(ye!+6>x^ zNG6^nCNVTrzMU@eGQjr90$im}XG>VWc|U+EJHJw_j+)Mq#rV0xF3`CeSD(8lB2u(AZQ86Wi8=&StUsN|in?K1Hv$yInz*QctIG z;O*eoqE;Ew)AD+H24~K!UAS;*Wo2VrT$<77jEo?{r()2#e4b?1zz{Ixjh{x&m<~X~ z6yh01um7XMmJ8flm{_225E)5`h$KWt5uh(vn-$=nQ76Ex{ufZY34BOal?Mkd+}(BN)}~`uR_;5u zc;_j=6+mlj=ehCS7v^I_izmkSTwJ{O()i9ZL+cLqFW%aF8z>H<1aj?m^EWU-tGLUI%21}iqUeY&fWaa8Dzxd_v zfAiZv{(#}@`ODDjMMxONz>0kj7<=(K0PLF|z>opP{`uw0U%mg$ttTJfed|+T*twhU zcg)(AoV6sFw9e_@XmxKi+Bcb9o9(_WX7@&CaJ$h309#}6t@p%lb_AD4r>rij-aWH! zNBh9uoYHxVS07ok<MhJ3)k;nzw-ziKMV=s>h8lQQ`~y`7G}jlD{%lY zuq%4#9vHg%11iwO4Rjc000@#Ok1}Dx!6C|^AlwG3!i`Z7t_lmQdNlOtoJ4X|*DxP`@FwE$ocPEDh~i#e~*V_|SIAP?-<#hZ8b9=oV8CFp&XIxjG(Ugd4D zCiHsJ=K{mj-WJ5IFug+PYF2rg)!rtJ9~@Y#A+F1wKHFcgz*{g9m^o%l?FR=Yk8T4K zCJVNz;yP{M&x*!ene#xw{84N2Kyu|0Q$m;0*Jw%XhEm~ePLYWERIZ6F_3%}}%GQO$lY3K(dxgeKp)rqdEaV#tc=~LTD4NLk;@FNzrX9z2 z;@M6D$4=ndiCpZ48B-o)%7J0=Y-JKdnFRFW8neZ=JU|*l>=!6vrJA_n@}9kiFIpV2 z8@3#RtGr08rW5GAD0+fWTV)P3+hf{&i37zIdXciKqFJSO+Z^$K{PX{uIDOe0NKMbJ z+JE#KooiwWY%IQ&#k285_CQR&KRPQhrBG||O5}F2(x$h>ZQph5lYf8JH#or-ny4H- znXMx;b!3*7!iMjy8Y){!<0uW*fI{PtDXkK@IW|6<%U9890vd%!r(x1+twxiFK;q$v zd?Hnj?a#v0lUXJT+e#DIITB}Sbx&8{{DhQzt0S7pmE{*zskL^E-l5Xkm0E|%hOLVT zfz1&Y9g|a3+)`E36G;*ybbbwf$p^rMCpEye z9%AHpfJu=NP~7I$i1X=~5?Rngh?2_@aB6|>W;=O>j928#NkO9oPEheKMJT0556xFo%K zGPQk8a>x3l&dqVHfU)&~=5;Y`8)I5Gdg@nsYF2tGmb;4=dvk}KnFEfDc27=QY+*-C zL0d4VF?nW3P1nfal1-cTpF4l&-P5<;I&$UF!Atk|U%a>H{M}t=@2uW`VQk}(#amA; z-hO5x#4rqCTTYJcy*R$_(!$+mN46fHzwY4N$z46eYv)dEtZ16UlRAl1Es16Vdf`bn zBE?Ch*nwe0s)*R_c>WvRw0qZETpLWz z%~tO=BLwaZu9%%R|0YLpi#@n0CUu85epPPiu9a&|2L^8pD1`uvLtB)+-c`6U`V8SD>Kp~= zy^ya$xC)<+s>1EVx_kc~Hi-jhgzkYM^MnwEj29e25QZ6o90C~1g!3UHVXs@Ehq`Wr z7zP5QAy$E=MhnBit5;~)5S4dBbLg>k6mQ(QasAE>_yiYk-X2@NS!GGnduw(6Cbh3o z6KwJ2%yVVTF~;}0(uZ_`uF&8i=Ef8*2pTlLW_xn4J+;@7*6+!lX(DX-Mg_WzF>$E({ipf>(29&W$b_)x@+L;yPjq7wBSJLC%Z; zRiIJss*yRX<*rJVr&4CmA@LoNRCNSdMS#mR&%#jzl#VQwt59Ihe4c*{3f)$| z&!fJVXg54dTonHlBkjexPB&0J%9B^Z7DU=+Z zoX(Pw!4Vwh#uuI0*}ITHRpQ7pBDT_xl1NihXmTU>Jst9|hone!y{p$>Z@Q;Jp+|olv6W^2B0^QXr7h;C*RqGKIplT3Qbo0=C#88A`rDdiLC$ zZIBp58iz>Z0`h50DMz4@sqH#jT<^StzifV>Y_6vW{?OX2X-%$-`k4IY#G=-`y4f8gtH;*w-+1uCfeZHzT)4mI%$?D- zdj}`C53St2VEw_dttZB}pIWf>)bQ3*3wE6!-g$m#=eeP6XXb4>K6l-rxvO{2Ub3}) zaK*f(+f%Y@DQqJiTo=VbBs&RYJBbRik!cPJ%gy9_Sv>p5$dd2A{Q)3_p$TKv|Bn~e z@&z`c_}vdLzJC53W7zYTU;Oamvu|Ji?UNU8{qpl04?lYN?q}B@{cYR9H%n^Q2a{I0 zqc_|9o6Vlhw%}HiccVRen>&7&H*r^V%05rrHecMP)Z862>-JZ-?CYI-sG(!^z>qqhKHm_qadJ$khOJSaTh4}@XtHMAfhR3Jeu z2xXuIJ$?H0$&)8JE?hsW0PC^0Z0)bm-W(5}iZ=iwzmQaZx z1bGxgwDTD2ZSOdF099Fx&w8MCabSe-CqDKq=r50$3PhkOxpf2|}PkwP9j~ z^AKS9&Ri#xd}5TyxGJ4oQ1}iUZ58+EOcY6QR!~{m0Qmnm()SF|uVb3CzT(p$990OSLh6)eC= zmOd+xKi`ztncuS3pEnNxW{ho1E*({Qs?^>}u0Ab_ZJAC{yg`yiQWTMN4UT1|ihUeS zy2w%@G?(&CGx^4uJVPN%lg-j(FqJ7ZSt3P}KorIh`9T8DPvrZE0v}Q6CkcZDL4c-6 z5?c#p&Ju-trp{Z=Q6(}Y0jAK)5qTu4KtiG1yX`K&{a@luCC%9vvg#(mM68&A6wJYKU`YTq&Ilf zYP&y}CRbWDI=9&x?GI*@RkZVk`qYe)FTVcvPw)SCP1AtWpGo8CiA)uVsU$KK*nCKa zg345qnQ{;*3^0n2NEVPOLKaIV5~!tOjYz2A^CW1J1po}_6`GYt3ymT&qHvVy(}|Ih zG#rj)H2BD5K@^?^=)w_M*!G(Qmcaxc&ngzHIcyP)%BGN+;B^qaA|k-?knvcDG!mIX zp|a=fcp(koGbOn7WgJe^2n5=l%lnMEMbA%o$HKtaty zZ75_41Clrr+J*%aq8FeGN2GxOV0bv4${~{ZM2djHQAm|Gg~8uHf0Zk~#N;n@Bvkn` zn_~((V~e`ui+f`Vx`Me~uGAKLN~v5==aZD=r5me zS1s|>FZVUC2{fx&gj2h@)9aG#82LqA+|^hM&grF?a!?EU4D{ zKl}VE@L32nX#mk@l?u*+`|8f8Af8TlY z4DO^of9i= z7FLXpPaa*j?cA0<=XM>uc=+ViGnemPz4ZvQUyt6p7XsMBC)lkopck6T5vCVf+X-7K z13SbZ6uzvZD?Yd@2oNxkAO=Czvp1po>0`hUyh5u(g=>+}Au0h9h$637g#+vzLz6f# z#Jzfu85~%+0hAzUhGIk})aUC8lL>^lg_5W->I5aj3TLos^kEbsdVwH=@*spU1S*sd zSD~|}P7J+ngkBh?z{vsF?o5pw{wKY#A;Kxbg#?X&a`*1uy$22qPPl#>4B+((H*Xw0 ze@*L5GyBW*-g=Fd^9*wD3Y)l)_CUpA>7dW#9eR;$7 z^Z{#1uQ{nJx^P$@*9HJH#kXeFE;h%55iF-GqNmd}(@D~4Br*1sD^WI$tR-;Vd|i&% zS|+xXV+_+53r(eBYpKLmCNvjw_4#yVCPkV`l_ZkI2_#W0z>Fk{Az@`4Lz5x3mr0$a z3U`^hSVEUr9qsVvC1=+5&R(`{_nFeFP6Aa-r7LMvDU&4PQ$$jR zP$N;Bbhd=JtoaL;pSyhf49?uC)6e; z=O?EYdIHH=`IUv`Ep)z-#tC^ihK|J0l37{+7?W=_SYxwt%bQzgFI%>0;eu7!xm6sV zhRIflr6#jACONf;#ZlJO_k8)?5BDEE8(Y3rq6;vkHk!~x7Z|A=Et#pNFq9Ogl0cUN z!0=Qt8bSns5lDP04QQbf3pFwcfEfcAo5g1`xD+x200sgd1^@#AJf=@4MMl!;bg@Ei zC6V}%I3@-#0*652G1>Bjq&yx^!C(kkOab&G5i2=tA!fxuA>V@@eFFidfI}n-6JrA& zKtjR2vPTeu4`Z{%CX)*sm_lJtC`<~4g+k#)MPU;-8B89yG$vCZ5^0l@b8g(Y?{vnv z-SKp~Kqyqv8GPs&8UPCkM2uS`5(~}+(P(@SG^5dY*t>^dNg_{)N@LNP96Xu!I>17E zvtavnF;p61!~iZI1X3M_juzp~Icr?N00UWX-mv_ZiarblC%@qWRX+QAfoh zN7Z6i?Gkt0Qb+A#Tg`;CcEV9T=Bb_VR!#WIM}0F#>^ZaSS>5*ZR(EDgFsC&(zb&b_ zBd2;`X7f-@?|9qrs`+d8EZuct@s5)d+fI#bIX!>VnK>Izcdt3#w(>~ZihX@+4-IWR zGP3T#(2AX1Ln~_A78F;_Rp?R(G&_amqq6)oj-Mxv;R>yrHtzxyVa5x)(e-}|VDLf! z1AYJE^X{{MJ$UzD=We|}d+bwQp$as*R^N?>@U@|GE9gE}b}k z^U}?SH|{;T^YG1kkKexkFP6gbu^aAOmf%%)l_d))zDz%<^ zwWrAx+wIAkXHD)kC-y`aj9HUrsXVQrIfqRu4<ik>PAii`zfODRWNh^-o| zE97Vkc!naetz7D;gi>Ih$v2g7b@^;f4nvhem8Z}YDHKT}Ri4U&6K&-pN151B!c?bG zgh4XjOXfJK94FdulP?d5l+kj1oX(m==NTw$ZD^QILt`pwbSax5W-~+ro-#Hzd;j4J z@BHGABNMAuZQS3~xj?Fq0ebN?2_jW=LVAT#=b_RiERKTBQ}Km5fmkn7*rf_vbX?Ao zB&tX( zHJdB}zEH#BD!O_{-v8i}1BcJfTCj#Kce3OzhQuaNdPFJ@vSL)Wn#@*&92hoD5lk4+ z3js_h)JnyAxeTbR6bfV_p^VQH(`oF`eJ^Yv5$Hw0Q)ggCiX0V17m4*;u8Kh5MBM#p9dg&Gc9LMAa8bS{`SI1yWu379ESN@Z$nh6s&Kp|VM201T5rq5~cx zfQvH-&^h*a9QKqq8NdUK;cz58z6?sW+ANdlfkVJHKn|BDW-$3g5(8iv6O)#oUkP{v z;BmOvP$b|D_y=t)78e=Ya2bdtWH7|wGQ|?TOlFcw4ML%s#TJ6?3kjPH$zluO6p2(x zXY*++9)->(kbzjVFu-s`I-bM?dg4f6H@O5dk4zWy#Dy&&RMr~-HCPEPH)|FcK6|PM^0Zm zf9>AYJCASP3)!y_!0tZ=XkiWv*{}PrEDk^mIPr>JZvsNX7y2+-fMEy&=vt4eP#ZW5 z)9dN0?M}ii|KltaqeDcFuuuc&_w`Q|5=K*~f^*U7{}F)xqX8U30DYiwLdd+{`1LlZ zM70ouFn~=FD0KG=@eIl^w2Kc!8IC-CaSiub_47`qgXDF>+u( zHo!0zGGN#fVE2KEKsRV~>E?~I*Y9SRwW^$XI&Zbg-JtQcni6`QnR8-`#@v~M?(}(v z=q{C~P2p-m(>HX%=Iq+#W!+n6c5W{2*jU!Pt+;b@QOBmd_AP;u30-`TBG4v}ZU-r2 zJHmIr0A0SKh2H!TeL}Z8XDC=a<}X+P81v`P*TP?8bgL(8ZgRzw7*s^A&RWS%;yt5$-| zW2_N5Dh0N3o@FM>P{7vbvUPbtJBhtQXs?udssz>onmm!rk0x?_WUi0I@lbgl8sE?0 z`_SCQ$1on&0#a6+mu*_tp ziOPm}YSS{7z{cR3KmaoeQ%7e5mh@t&O{R9KjL~XSg4Ui^SUo`D8Yyf8@Q=*Uk(j_R z4VeL~)v~xcHqXEn7ObSunO}!@!)yRkgjXU1KAQw#KDbGbIkH z$W9em*)o^h6bn9#$Wl?*Y6=^BwwjDhK@0(m3;^R$X?&m#*e``#uaIjMa*bT3mP(X7 zt_XY>SQ7$~N+i*uaHMGw_~}uEC<0BPwvwp4C;}6QW8m>%ad=FoI59EXXmqNSW(J*4 zA+vd0F_pq15@>iF*f{K&WxhZvk*X9*okVT`FH4~dab!jWfjS*Wd1D52PMID_o)$rh z!~-oDBr1o>;A5g=BxA8eXkjNho$q$XtY5!F%E7fYPB9V$pC@5 zJgLtY4`&JZDuDpLaHs@gjY4J7>fL5*z+&@DrFx-I3FnH%*s{nHiAE;VsZ=JF)+$$- z6>5uEre|=(L>h-cW#a%{1ZEVG1&SoGB1o)AG8<17O4aT;3)Z^g3Vf;M*0^GGT&XRw zBDtieeg4MX=ieM!e=@scGNpAgxpif7)3T(-rE!hRVrv(BN=NM3vn|P8`nU#ba)&*+ z+Zf$yh;Gxyv}qICHA$VC_%=;Ut2(Y#liH=u=v8L)s&WQ&Me{6G6V}?r_WGr^`lXJB zrH=X~o`z+vx+RX93G>V$NAVm-Uau>w+nLcG$mxnN>Pwp0pI$kutYcxz(2B0{P4iYC z7+!yL_Ns%OtM;|5+}*r#cl)Znee3rP0>joHn73kA@7RXU;dS#DZ&w@QSVA{XWd8F9 zAO3(%)xbFP|Lz4Re*eP@Y(mF#Y!va!?_d7?-!I<%%~v-bee~#OU)*^7_kAaSRo=Wg zK67<+@=jOuZd+ixCt;^Qc~5M{!RYjz(Pc5W^kY(#HaT|b0siNz?J^h+`rJx zupg%#LJ*GO5)V8;hX@Jb0LADq%mXAug>V(bs4>JSiOR4ZJOqLFni@q6eL{?#@V=GiHh*Og|FoggXGGigaz2X@h-@S{W4g_a~RzAem-Uu=9R%rUht(`~Cnf$q0PpQUJ zqjc8;z+9PwwzL6n?tG9fWwz3X=!MNZRC`<9>HQTwTS~h(7q+b{>DpYl9vWYCg71zNcQ{tCzT{#m-8Ry+U9u6WGf5mYG~jsmN8y zHWpwbjgmx?AeIOi;|54PKauOB@&k0Ck1g?Yq&}fKTC9y0YW+N=hbwcj#WsP|9+Ozu zGi%Y_gO`t=xwCc8nZ>JipSt`QP{bB{7$P4-65uL>a#Nzh6f0D@g$jpM<5ucDB!)z+ zv>I*EcOSmT7wJO_bA-kZIT*mmOe2K_MhaMEWeHqtA;<{~195~7CeO+dSh#$%Kx7q2 zZ32Z$qzMW&(T=#{n3Qq?1G^K3F^r`pGqu>HM4F1qP*a&27SG7$8996-S73sYFSe@m z0j(*Aah7mE{I40aYz(4p2)0k}dsA|BB$?OgU5~WftK#0$m^LXH{ zlmelQMq~5%5|1|q7^cx!Boduo@6_lVI-?8Za3#dX=VoM;_YW*=Z0w4UPxp9YZ8pE% z?oUk2jEPA}NXW=5EKf?!u{r{Bl}V|0`eM@^zC;M<92uD*ilT65kk}Dqb_9hTMHP5s z^Kwf&gK3q4j2e4VsXn$StA1YR#E#x&du!)!E}gSEw{LSw>zd-(TWUx5=Fi!ZF=tEK ztj*EwD}qf+wFw=Xm^KYCEVf+}+pddi(M31uVp~+PO^Sq8S$vBk zsa=uMsm$uv=FPE`E%4MYb%hw_Y+UAOgkX`iX3SPO<|rF;mySCNhh6zY{-P0Y!5mM1 zZ=kq4p`tInW=?+df|`MqUE@1?C-=`OJ>Wkmwh}jWH*_)ViBtH8cKo4>R3ZO()D1Z#a;X`!FPp)6PdgB@xBOuU}2}6Dh z885U>2f|gDWFQ1H1Td5bM8VlWAHWxsuSNx-9veJF0E6;Jl7-s*?=m#%c;^<_ugkY? zpTBu;?!#dgcR*xFH{<)fN)f%b&r(UP_e zY1K;;W{v^C3fnhkH?9sAju=w`PF-NXK&t2tkS4YR5QQ19!UZ5l&OBvwn>x0`k~Yg< zxWJb`V$YZZ_DdCPR{9&YF|F2=9(#J9B2cUJRZ1*5k!@{=M5a|jVRtUoa7CH zn!*oAjQL_qnaENuv{VSql>%e6$Wkk|)(g!wB72=W(602gssnABV5=tBqVhMY0*%T* zlhjiuao38R)gng~&sxqgm$LMQbX68zkwKHEQp8C_jASu1NgPWaD^SO(tf@wCmeHG` zbEjw=NeXkU)EJa#d@`L+YmIjXa}qPFJNlQb*>VE>7DHgC@f{SNlPYji1umA<12Evo zT_Uw#rVFO$){^P6nKhle4xU@Mcs+qC27od7*#0cos`gwP*e@~@Ghq~_oyK-BxK29P z&IXc!u+5+yY@UV32ZkA$JPn<%<47GmrB`W7^u`quG2^8M??q&2vGsykdMdavx|&E+ z(bxtC*U07?8Eid=XJYeA9Fc`Db%+!$nZ~cNB*^vAWVV6G)Dc+*n!v)6I=FJD(iF>) z+9(_?0F1;?keQ0m6hv@ff+zxuMCNk23aLb=R2Xzxv&m>P8f=JR;KR5)F~ERGqGO|c zGq77(5{Z__Q(=xIqDE27>X4Nolz`MHDiV%@T0fLJk*O;SgLAgNe;N1bUe* z&U5Fl$drb(%wh&x7DZwKz@|lomT1B;XGDR^;Sec&0*K5(!jsqpA`?fT6G=?5R3ldz z)jF$2Z&PZ_V4DD4;Lkwu390+`A31dR1eL~td|Z4oj|cwD5gnTu6PFc?&4^9NE-r0Y zwsLDtL(j71n}&uKb#x4Lb!_@3PEO9v$tm5mdC%|v^uhi^r;eYxv|`QHmhQon z?3tdJRJ|>rGJ0e>Cr6^E@DzBaB#JH~FqJH^U2abDBvrUmtDI?7=9J31`RhssR+J5{ z&+A{C+_oydaYankMAhK7wuu9c69;o=Z^@dw&DXZv(?03%S{dkE9@Duh(6roDIbqEo zwq(zE!%PM~5~X9$9;M-qOAECbqu)%fEd2EoPp6c>ezf zz>o>Uo^F2e)ekSe{0>{2FtM4 z?>~9#UTEa-!DDRc4M5kcA;hN-!Pz{;^bqjy1oK|6fbpO93zYzda0Ud|`q#-34j>N- zHNgG@0;B*LLcVJ1wiXfs6%xv$_JA?8A|eQVs#kdc-qd|KBoqU9poDh>2w^MAzhV{S z!FYuc^?DKosDwPKLi)+g(2R{6*RMl~SQQq68R8R)F;Km-TnJ#O3J&jvSOqT(TG$J` z6t?6%G{K@9H?Lp425|^um=C*wy(j$Vb>_kUuHU?K^Xjb|7jNA@d;MN=L6g=~qW07( zy$u?FvpKQPojqhp?Kh{*vS$qfhh*Mn#jAy*Y>EAu)hlvpS0$88B$qEKXj`A(iYd8r zsUf*v5#0gy3#0~s1u=lx(q{XMMm_l>Krdh6LTzk^J$-htaA6=ceh7He#I!2>jUd37 zCZZBPo-5WUmPotP`M6ut9{ViHyOwH! zwGPC$)Cz44LR+oM-v$iR1hLiewbAfJwN)K#QpdC?gH4J+vm($c^E64^4L~x1y@G3+ z$uShsl-V?87DJvvm!)wu>2iCnHKx#$Qszx9btDv+{pq%tYgC2Q>Q3UiFo z5~naHsI4h#OA1fsqjK#O9>_r#y6FNpQ|M-hFpP<`aVkr4VR;vUDi^6eW_PMc>0)5Z zDjGsJz_4vuXdHl+9lRHrVWBV`z%VKc6O-#;@unEY6Iy9>rCRIlo;6xf-fZ`0$c@36 z^fI=@PGV^RU|_r`EIl2p7(+*6>cNl^scI_Az~Gn|ECZFUrDL_&CTHLynL-OgV5Wlw zLI=(UAVeU710zO7QE@oB$>brC_&`1|VFUt*3AI9zJT5LdJ|V^L zi-ArU3?7-p1lPr6@qu1ko`l85mO#wN%=^P1|B{tkoSIQYq6s63tm!z~v`A_s9&pHs zB8E1trwWM_0bmSI;u6U`JdsTxfNx{4Ibx;CgtqR~8tfRxG#0hmtW+AoipdpPy}_E8 zn9c#`#}eJS`$(&^mX$Z{*md;UjmHlj|NLja{L{IMH&33uK5t~%FMj=}!lJ5_l$`Xm zyoQF(?(V^smR=y)f`yYi_Z)lYz5n{-pFeu{=YM$k<}aT9>^EmF-(IzGr#mLy?2gkp zqP6yDg*jTN@$gk%fht;QOZTK!CzW&t^IM!*jXCWTrSmox4Q|ZnTjQ=;=qj1#Dd-Ot z&q}VCpI$STUcWTCWu?1r!r8ji*R$H+xx&}6(%rn=)i~*_UFNP@>MdL1Dp=qwnCHkF zv}E*~QoA+rjj}*B`~|6_>(zmJU2Kykwn-P?qEBwur*;}Lx{cX=mV(*d>IqNv5?AFi zYx$(Ta;3d$wXJfMtzx;WW`(hNRy>#>4e}4AO_s?H`k3IMG{{~_RV4>-V zFEN09|MJtXU;Oox=WqV%iE@jSr>^pKv1)Ir(p#(Y)@%LE zPOwJ>!-0~8uI%~7q&~T?MdoRixm#u6z`QM<^mzr1>vL*XXH~BRlBHBGO)OiSS-UEw za=AXCH#B~TNe%o6cIe}JoS8%3f`#VP+4ih?&g}Vygl<4rbkQi3Kr&5CJ2)_~M{-|- z%v+}lHW`!JHL(qH_e`oR_*1g%4IJl^GwLGYCpN-6qszshw3oFNwWcWCv)~ z3axb_K$pD{Bylt;JYc+lUTtciS4=yU+F0ye)X^>G(EJf?Y?nHwUFvC&cWseT(C-^$%h;Qkp-***Tvj>30?O`%7kf z^1EXTX9aTm9H|}l)DBBppDAm=S~BFQ8nsm}aMq54g>u#|a@H;NHLMEMt@KnZ@>Pv{ z%0_+VWA4%gmb?K&YNtA;Q4`&$j;V(~B?L27biFR2*_hgEMowCmHl^%;G}+_{E= z`L?p9j;dAmYD~7Om9Dy#Sm!Ov{LM>aT9?H%E%sK-cNEO_&zu)qJ)F`ok*6zZ1k-l{y)udqCg*RB z$s9L(>VEmhzt0+8H@Wfn#+_&3&t%WBi-%8NJb(Spjr))8JbZfl-s9W%pM;)V#vIs> z6E{LnEY>4;lM*rfIQ z_kMCU^up)`ekcSg#3uwB1RjJOH2)BU8lcfdl!0bQq2a)(QNgJoM67VP=nzVH2V~2j z5>p6ZH*R50@XF2Wr?1?cJGNG+OH#SZ)V>C#r%o5$>P(*%EE)-xEHtO|D*`QYf3wWn zD0Q_+os9}lvpa1tt9Dg-)$-)BC1An=dGqb51J3k0*5mX&loVKboq;iG;s|Q zM?nj_< ztNfjsV3#J?sg7=k{()h-xK2YtrzNE?vtfgZ zI4Y$f8R75WT`4vdNG%02YmUN^rSW8$qw}1JMed|xdwhX4Hc#iu5$h9~5kw>B9);^66jMI(g0Q9r0{H1o`r_V40eagF;UncV2Ojm0(#lW zY&T61O%nvkJTF5Ogih!@4@=+$hRIakYd4J1H=?tFFOygVJF@;uNHXX=^@k~qM=t)csfv%!( z3>=x0tMI68$tG7ig$rE7MiI$OC50{{Qbaf+mq_AK$o$0;w`QPvjAZJPJiX#(Lm{CT_6kG%klD5s6d^g+VM< zV>9LnG`T_#4vEi~b9vI)b4H##eW#?nQL3~Os3IJN&k<<}bWs#pfTxMMVl%db8Ux!$ z4YP@KDOfuaO+cWqNi?oRsn?rbCcD?_3Vm*L?jsitoxb|yz5n{thyQx??(got`RjXc{r17net+=X z%{hzKrkA$c6UzNr4N0XvGrJb8Iea^{W-zC1BC%#Dx^#}Opx2$-87S^cts3^{_ghms z&57-n#4clEry-@=oYk+-0_4onf%4}V3x=KLOJkbW#x$>vZe8WZ=Fl&3)+};Xjk?Mg z+6o3OIkQaJ-KO*oZ9)?;%ox{XN@&)_)@fpD^odRSgl0o>n7DD7TUVsEEKjOmlF__8vt@Zk(?mwY z!pz$F#cks)gKPW7wvVkjx^mlv^}8>fx%%`&_a(KR?`k=hJ)deD>^DUtM|hKSRsTq?N3R%h?j0y*(j+PkzmjjF}sg^F}5& z9KCq+twk&MuibWP^PaOi51v18^75(6H!k0OaO2_QTMwV!eemqw!#6?qAAt#bwG79T zXAhnNx1Qd4^!WZ0%zHh46Rg;iMKr7TNw6`$? z*j|*c8c*rf&>x12SC$J(08%)QV&K-3r`TFn5QJ`wO|cVv7y=kN3!CR2`bbbBg~oxpivlXP(q9pj>CB<5xpSz37{(sFzhxMHp+(yxiQ2iL>=H02A)@AiBKYi8(@gS zh6Aw|V%UEG3<)w=Ki9DN9q9HL0@(HISFc{ba_z>|OV_TSzI;15w_a&0(0FQ9o(6@x zR_$+gWz3B&8H*_y1N$ZQVxw&mcfHirD04R{+|9T9>r5Mf*cjKP z1@Gl<0rvw&P3~@!fp7D*=;FFfN&VXR9#_t=CvQX>-wn|6=a0Cu2C+TEGUk9iGAH*q zGG+n5VoOJpYnFHm=Bi?9Sh}R?6vZ?=|EE!`HzHZnqxjRJBoPz?OO`0Nl_*`63U{5{ zRVTEC0A>Z%i5!hmcwbK&a8w=aQeyzaOqe#dLl@Tp&JU28QoSO*ZjHZq!dEnA$(SRL zZk780&&_ggGyIrRca79tEB7?W-1RC?v%=9JwbqDDl|oaIz?jX~r-Q_%G@Y-&7B|zG zRA!GWS37fAidZ7wP2}3?VlM!UF7(g@UWPEpmZfminGAIbN0&+#dWk$Ind2aFY-F~L z!m(0-UK~J|g~GOyId%XTh2^5~{S0X$MHoX7Ml+=G3`sPJFjN zBgZd1dh*Mo$1m?ccvh?TFu58AN5kS7=-|NES~^!xVW@cmGYi}mO(m4rgvvh)faK zEdKo5^3>#9husgLVlV{Yy0BeHLeE+WMan=hF|V+^xU{CKwk@}?x~8$0&Q;^7k|?Tx z%u$e7ay(rcK@!HLloA;#5(}`cA~DrOY)N7Xi7qBkur-|IYKy_*wYh^1Zw$!gkMl<- z`htn&RgHW0A3b>ZR9=1sPoU=UH7b=oH>d3VKm8@N;1PBKMf&0S^J}*r{P*AfkzZ8h z^2W>Msr%@_cgQ+vUR8Pj@nDc#DX4ozyeI;BsQ zGN8?zYb{>js2uk-P6pamxf+)`>lbbkh5gaRXk|T>@}x#8j@S| zNzK~$Ms0k(A+f;_UvEur^5ylovb!N^%;<6y&hu1^*~>;e4HGdPD}x;?V|&)bcCL`Qfr)*~x18H` z==wXq{L5G0eh*&;LRRem0mcx(zQOK+VWWuu{`SRx|Ks`Fzxne1Tc5uDo3F1u`0ovS zAIxmpoRGI6n6*7Ae_w9-zVxDHWp(4fdH?V8Mz^fkaD2ngQ``2R*>~*1iHkQb-n@4c zyw}4gcOL=<-g@--EzD_w1AF`?1P`z^51&4G`X(^!9=I87ud?dV6g#M#!KlB&ZF2 z5=^f?73TI3t56AoBmfB%X4UIKxETb{5;7=>+WZ9Fi$V+oke~rQ;0j_D2vG`x|09Qx z@j@A_!Hw(4OCe!1>i;*uP;c0|SZ-<{5fl6$Hkst=)f?B&U%htp+)b4^S>r5KyX#b* zCXK(zkv=!EY-vou}>f0Yfc^jdU5_b`t0bU z1*W8KU;dCcchHc~A@|nE++`%OcN$4N4aa#S3hWnaS`>deUV&#g#JXI$tz7M`S9`%P zHiRY|Hc8zLVn?0K)2s?~fCW_gL2c?_I~qR(`vo#3^#%(UCRHwvFIyU2vcz9Bu1)As zM7N_klNfFRW4=akY;X$Z+kDL`ceC2lu5z`>u)WYK#Fk=#u~?wb6Pa?=t|Dt(r6aLg z=PeTIQ)!X_Rp@3){Tx}4DfZDtKBg#Ipve#!bGe30t~Qk<^n^Cy^ijAj0@FrhScps` z2^&AOkeFs7!%Ak_DI5<)5TJz#{JmdYIDf_C@ke2c1k$)Xh1Hdio?A)7Je-2Y zQ89RG23JXAN(cHDXw|lWFDWmltf;7>tgOyz^^(af8aAn&O`&k9G#*!|&=~EBsre-p zZL!IP&;x-kBQPWcri{c^lGtjI##2(=$C21+JR_J$Dv%rViz+Hx0Va&iSLn)O5NS_W4Z zw=F1W9?7g7OsSZi)v&N(cuVd4orV2d(|R{2_H2l5UG1q_?5dpbR4($CPxwm5oCSln z+&PA{UTt!hKD9@a)U8SG(Wdoi(|a_TeVUvBUEy3~*^sMt%u_Yys~&e$jXJBx9Mxk` z!lAcv)KfMLJhSBXnKC*|Y0Z|DdUI?^Vo~el_EUq)_Bc`-ZOKjg_*z3!y)Cahx_UUe zek`tKNm|e9!g*V=1~#PkZ%*sll-98!t7~&%|IVU0drRl;D<9lbI8M*Hlce+*aN}<1|ZX$A-xrk zyh2w94_JK&DpNrEU$6-UuQLYYANjEvV%z3fJi-HAXjOnP<-K-A-W^TD}4NMqL5J6JYg|SL&nbJ|Mbk(W> zx87zYMx7?Pzd0m~LjW+jw;f6V7;r0Ozc7Hon_}}J^B2aIE=j0bY0Vr`#q}s+riK}j zQA;jgYE7P{jqWfd^yq`_hG3U2(53ZusVJ@FcqQO1^t z=^_zJ!RM&BTos3-;qr|FkyWMf#wQgvw9Hw)cF)fJ=jV;C=86ntrkcbyQU!K!U}B9= zXOH*9W~Jv#a8xpd$KtEG5)(sUpz`!|zJVn)afL>+ zHF|hxiQVQ;Ps@`_^64GDHRa6G zr}rAu`*bN?y2K8wOzTl5cgT`kG?`uI!r9i6L3`ywd)26;c9Fei!ridM+ql$QzrIks+fPEdf}nU`TI%-w-?XeT-dv| zsAFYi*P5En)y;ithL`NUbo1T+`TM`W$EJ1wn5KTguXy&letf}K3G_rW_E7WpFFyO` z#h?H7!&^W9{O5o8;Q&bW48a_Vj{f9Rn+V^M?;c7VliO@yw>3 zXLlaFu>bg_3uL>A+DfVd>B_=#o?CoDhVNPzC}7BoreiVMKZb zFo;1Agj=H1p<5I{TPP5~u;$RmjqC7E7p~nrcJ5kwL951EtaH@^z_h*=uv4C_q3D7! zZ1s)gSqfh(*cyqe5demU5JTu{!Gh2(DsYttA7)GJvnKR{Cj;+=whdEzTcM@Whxss& zD$ov^ibJ%}$9EYLy3NVGfr61>!AKx)zA2$Arf|fUJxAfL);-C_EdPZKUw*Tt%GHUT6qZ zD4oSzbqZINz*ognMP3TuO<>u;gpt_}GRHv#H^#J)SWXJtiD$T?SU!>@nIcbRYcuGw zSUP6r+-!+Ev!HqFu2Wir|JJ>?;L1BXwnDGAis*d5#F(vdq^axyslg&pN|+)sUn5u8 zu{Eo-4!O#vG5NhQ*@sTtG}sczEDedJr3=C^`#|sDakp0Up#}(PfX0@@nn3yoXr+9 zITD9Ewyv?evuCKWeIO~V0DcM*O+;Y>z~m&RlFU+*St=TID6+8SPM*>$)OhnF4}r(>CW?Q3%6xAEla9f7T>r$x_;7CF&^KtI;DGK zdjHm7^UCPSQThq<^v$rEHdZJ)+cvrlRES%ouf4>c@1**tlwX8d5~{5{okch-aYH+PQg9T?lcX!Yr% zXP&+D%MU*O^vf^40&|7^zC+l0#j^kXdL3Y(FTZ>F;U_=*?AM>a_g|m?;jiD{d-Lz( zt1cDSt}m?KnqRXir*!`NAAG!eI`g^duULP=~G5E-(Nk(vSU;^yL13EzExNc4V3;kX-x%NJ&H{ccQ2A;l zjuNIUW(HXS#%o$6eR?D|gCl~VATjJ>eV)!;uk|(qEWz+4&Rhfl(OkDgiRi-d zxRS+b)hleNv;27rTp9C>3B8W=L48~|bf}4L)kL>wqMOyh22FH>HoDOq-^9_RanwmX zO@hLl7N1pT^JUVxX1c&5F=i_4`3idhSC!1uB(Y_&V8XzqQFtyA+d&h68}pDjE)vI0 zV7u`w7mf|~E1sgrVra6tx(u?wL*_XsTq~V#DX*WkZO=)6bo%{AKd-22^#+m!JQ_+ZP?*5gYH9Ym9PTQew7BW&Opke}CxcxzfrOizDvz#RpV&Xr)A!hQih| z1qQy!JvYP5wkizm}r-9$Q<#1zpuN*Y%Ur-Ok5v4lpJP|xCPdiobw z&AybRT%kb8<4P+k8g)9mT5XX?w9u8#=+^4pHb<;Cm|8fqzN>#>ZgD-GuVL`@*mg4< z9aCsxiY*L@gRAoKHPH%diq4g3^yawZi@kA$X*o5yMGYK*#$XG&{7He>bcZ{}Z1el0 zlfigp<(8*smZYQ=re+jn=T{o70io0YjCA=D-~0J*Lf6cxt0#Je_WhW$3_pZci1_4R zUwrx1ci<%c^yd$bpT4+s^_HHwKl;_hhd{Ew+#i?3N2Upp3EJ?gI-^;C}e>z2f}tcYu0ozT5DwsV!Yb<)=|>91L2 zNbA-lwP=%C4XN$cjBZOtmo>8oN<&J!CZR=_+-^+o0k)Y7<~jjm731#e#qQc={`yt1 z^^?gB6Mf6~Y&-jK`?-hh3pWK7n)ZbZ(Mz2-{_%*D^IT6d|~UJ8<%dp`|Cga?cbk&{X=Mj73_D6t)2Me zti>?Ez5^>9dMxbIuU`E6k6*m^yMMp`;rH+U?(@~#Zj?5x%CB5eSiNM&f%6Za{bKQ| zLuT1_JijSp16GK;_WN99^HQM40P*0#;^z2_R5&$3R@*8kpLSYfB_1^LT#`( zwDJWK+Tb5?1%#TR5+zZLgaIZ*tguiL31Wn(*BgWn!}JO@o*E|%O%K7^KrLwMEkdvX z@PH6+kRXEs zNFpp@wa~>YbO8pj;1#`~MEpZ7p;t^H?}c@9;}(37E7xwEzI>-|{-na3Zt&C?d`&uU zlOfpd%@|55Sz=F`Ws2?5`rBWz3bS8gM?DIVB+h!Ny;f|k=ITp1x|uvfna~V&qy_;@ z<7?B!bX$_ZA6ilfqZXiSVoyrdq#*%_*k(%V(#N-%lUj7qH56$)Nf4k(d_rxU zEtuERJF(-y)#V#cO7V%m!(Q3^PD7>1?`aHjLy0B;60}|8NTnwCFY9d1};xZCD7yqMl?f^$&;2T zb=77^oK)3XR#P^!N-o#^^IxAoeDdy^b=y08hZjt&rSlDBww}t?(KtG>(k@n7GPglFL4E}t*H#ae-F{`Mxu60Ojj+QE|W@oG?nCc6r2BOn~G3l`hSuydMsp-XO znI)OoWf|F}IR#a6jST>%(mRXG8$SK?bL^TKx^jlDpV$TT2aH`t8FtP6 z=f6LH?>B$EasSPWHy_@4^0P~~9=-dk|9bPi-<`gE_r!%;zy8zT51+oaegC-?8xLH) z|K5(nm-d{vwrJg6@Hgjfzq{}B?cFDC+!iPNsU>%oI;mNm z*knv@HK(@QGCS;99hUS~b6Tr8xy_v1Zb|JjCU;n}`pp^rhO|Co`YdDCTwDGEZ|PWk z%|vGF(vn$gO9s|twk%4ionO#6bn5!!yz1WV$1c_nj3*X0*7l6fU%GkS?xS5plS?-r z-g)X~Om2O8d2e;^vcl#CGdstd7i^xl?)31s%LCgkb!}>_4coS_UjM+`uBf*1FkIe z`$jML{eSn$eqnm?;;Zjp{`W`UzxUgJLHYZ?ez#@+-SU5=hazIi}HwDP(m#_C6vcT2t&eZ zkucg|40{Z`fu2C94GN$P(+FaOD|CqRuV;{;8I}bn!$k>h8m+1gmrQqJACzm2uowFZ``txrx8u^P z^o}C4w_4|K)cTs7DFd(FdV+nP+Y?j1^(F@Q801Kh3 z3V0?oSAz)y`vripCC`m1SQK3_;maM>$MtBVyIuzvNa1fr<9p^r>>ilX*C=(@N?qj~ zZF(d{KMg0C7RmT&BqI{X#Svr#s);2{P&unKt_F>#RUhco#&lUyX2q8+1$puoXydw} ze@(DMj*U`w>0^5{Ygf(e-dftby`*PrQP<|OzFoC*4^++GmsmY%Nbc7q_Ue-cwDG;V zSj>L8GUp|hElVg}nozndSTJT!n`=t!cV`U+3m1aoW{!hD%WvHfTQY6}+9h?x6puJF z`V8@nY-1*#@4+!F1g@Pbbc(dmW?yDpW^H}!ksl~I+F*SUBCRG|w7R3S-3+zHk7U3`&t{(@!SKYxDn z&ch`uwi)aRJef_V3m6?~CRc{i5^r#4nEiQLXQsxLt@q`5Q>zW0Tz_&|T7GkD?>P88 zqb)j!t)`LX@g@7CQ-ZPB-7jw-$rDIPN-NCDtH{c)%qgznO0;~LPHA+kT)*?PFTefa z`SZ{!NEouF@sV*Z2SX(dKpg&y}_f zk8eCu+C84zICpZ}@w(oH*Pi~Oq-j=4ans?;ccZf^w;jK6;Nr7`m!EZyZOCh!SJ}6` zasJk(#rt~JpP94e^88)5Ck{VZa`@@ko_j+(Zw>FcH@N-I;MTkIHr<=M?$+Sin{!uP z9b9>_b!cD5{JnD)9b3Nn`lda%4xN1T`0YRc?oaTG|Kj`SFMbGlU-+Fv3<8FI^ZeyU zpZ)N&|N8t-fBWW-AAWQ2^jkIUD`HbxF5P@*_u;cEH=fwA%pTpA3l8c@F8&G+2at*01Ox#Fb4eRs33-uR|0^+rTsqU zfv^Xfu}7PsStt)e=VJZ5;t+PL>NQ-U-ogsoCMYptgaULT#E4rEfFM9s*dZD`#EjHK zXoJuNoPprpgCC#Vf;55<;!~JFs6-i*L>XWeYKhvwxp0V*5Qk6s2{u|70vHGl9%A$Y z6BZ&CLKh;?|A(%>0FEQc+BVQH?v9yB7PHhXZf0hXTFgu>W@eUb*)lWZm|4tBW@cta z$?UnOx@_(Id*dqJICCm9s~WspPrsR2ndl)}f_f=Ppd5snGo+=4UT`500>eL!4XyyE zbOO3sn%kP2+93k?+B%R)hs{uiV63UNt+uIc&6Y#8c{CQ=uI{%|Vz!b1bAP^XV=HL}c}icrY~J&j4w5f)pEGq6Iy|j0y(Me~zhO{7lQg zrsx5{{+gsUaf;rQ85T3=lZ|XtRm#cL;_|8n{>%R3izj27r;383cKnDq;yqk!~-Fw-?2U{E8(3C6=tf+2+Ejy5tG7 zY$neJSxuX3rDcFOwH4ynKIQ~>6P$-B$=jIVsc+{xAFG^eE}dz}1G_fUfHl*AJwu-b z_6u=f`mD)@oSByLxpr<^IB$KD*Gx11G-SRaWyUzWDY zoABlv(P=z)Z4(DW3%oIgq;KY6Y>qdzAX->aFg8?-EltPRR?EnGwywoYZL?X(3=T^` z7g(sddcZIn@L}`xknPHJj2yJ}tqqLrL3&2E#%A_Dfe~TR$>ug>3kL>~C1Z+Q^~?yy zR#YP_MbDg|W9p!9PS7*MnOoBsJSV?^=-Bw|jI1&*p9nJx`}sO%dIlIXO9v`bN@L0N zjBK{;JP5zW4;-mquxzUXLt#sj;^(jyFpgN#^_0 z`F_q`@zIGzTDq1vihxKJ3dC+gv71Qh0%CHcJfS0-?+5?`7whF8>F6G)Z)R(1g=g>; z9eqQVjIE1s1 z9N`+&AazJUSomx7%a7-;Ka70;b?edVfeZILPF_9UcIrgW`6I1EJCAhSdH!+e!tEn1 zgSk~}{G+mBGb@*_+gaP%Q@v`}mILhy->fu*@pWYH|g1ddZu zMCR)36~{&D1)`|MVs$m$Bg0-6V<(Cr%3{cl@gzrZT`>ei(GYRcXbr{^aI!>#G8wN( z!YfnkqzO1h5>b^#^~j=n=TJNWW|@M3?6{J3RU3|lXRq{0UMh<$b&4rXU9dGYrK(iDtWGrdQU)oZzq%nWd zvBewO*YE0Ix3hiUiTUdU5lJqWsf8yz$Oz8dKMayvowWh0)nfdY=Z=ZaPiMT7b>Vio1wLE zA|y!En5sXF>4*Oy=+Z<)e>@gSAe2v#pc*R#GJ(ceHO42j5Ea@CZ2%E%@PEJkmZsYf z=moKPX;Kno<3o*inTGFDa@*IR-PDKpoVv1vdEiV-S#&j-W zx|A?n3mhb=U}yjg_Tp3wJC-QRq^t5Y&vk{E61=8rQ~sK6`qyNgag($lj-P5cX}aYs zUAl?A8QSh*GTt$#&qt1gW-ybetrM;Znl)uHt%?(_IQFj=2n% zB9Y%Bx^pok0-s8fJcA%jl?GHv{i{f_6oMp?=aJ7)Wf&1XrW>-RXyGQ##!i}PIdO*h zq#0(DXPQl$@1SETFtm5Epax-B;bycTBeK5%!B^MLLkpvtZ7xH1DVt`%odLGYkUz^( zG22Qt&%t9J-b0({qfhppZp@#CjF2&=Yf+|ak!BmvfML28Ok*pyxh)Ti6B=03kR=ec ztY&Fh&Yg?Vnv0n~&r(~p3uN5B7Ey>U-Q!BP^} zox=B_@VyHbZjMf0p!AMccqO_9WwVuP5-)%t2%t$rslp%{-^bZIo-g&m*wMk~Q5X`L zqYs;_q%wqjkrRb303Rlly2+h<+`K{qLgMU593xAdsTIk?Uw!kz({Gxe{NH~8z>wiC z@K0B6K00;o=HL4p^9pM!7p>oSq`kB6+}jVIzyJ8>)!WZ+KYac4`Nx|NUq6ig{PO)5 zoQ{z17uvyykPLA4H)gQkeIe+W<#XHZ2F5d4tbF*#u>frf%uRndee*eXib$`1C z#PJorT!o*1WLi$?vXVs`mTx=|lUa78rQahsR^_8sdPOc={WneMCG<{as$yw!wcIy7 zfB7N5%vBO~g)po{5mADds~yClVARNpSdt=!tc*n*n^fc5WKno&w1Wh}7(o_Ck|*FK z33zEDL6$^uOeHxb(mgX6o|$A-64N6^9F#5c&vuDk=oGWaC3%G^VR2ag`r?%bHy!O? zv%h2O@qzp$TT{wc?XK?)N-T=Ytv=Awmt0t#U%kmYy2LxSWZnMmz@(*-1)CG9cIB=* zn!oBu&EB3hwP!ZBUER`pbzAq%tz9>_bl%+7b$fmDwW__tB|8U-w+)tT>@Qf;m9xAx zduda_^47}r9o3s!iqeD><&mmmLp{QB$qy${##jof@VdZhkB zNL0!7yU(hYZmU^ybmhh)8@8X=y1Q=g;pW=rUZnG|d#Iy#xTANdy?>~C=v2?|)i;p! z=6e7YgF~nWhEGE585jih4i13;Fd$$C0-m8^Xxuw6*bU4WK-4z`=OQIgg*-r}Ii+uC z7+HhrPkShYm^PBdKU2Y{hxK@~(K`IqHF zaRt{ylQ9mVwP*rDYoV&6s}oJoW)M-Hp|nF`hB~k&6kTHx1dIV(jR_8cJ!1(9AymLE zAQNh{#?XZdu7wJ6C~s*+F0Fa&tEIgiOdnF%-rffMY-nw*ZEinO-@%dlSyP-H*umC} zU<@tXk{WKsiniq@;>4){Fl%lCh82U3fdRb`fRQ55@huI#B27u*;Jtub=t!7Gp+GMX zmJv&qWrOzufI%e6b8Yy^cxeVnk;8B;qB!N)iITyD(VTOwcrg~NNC$Be%PrrM4%ZLX zvvQm;%kHmfhJQ`b27vu%lJ@v%Mw4b*YZ>#+2wnhM0GJIsfvGB_yB2YME7?9349`*w z4~!SG{vkLyTYe&5mg1ANE+AuzU&_Y7j4eS~+aUK!-QbhFf$vjhFHW`-0k=|YfL=nd zUuhJ_JdQ^>$D=~vvk(%J0svMFIorLQ?OrDGTR@a$*a?y-%4}I+wM*C%=di^b*F0Np zw2qC_G+o-n+18V1TaKS@^4Aoj@l%bEH$2CBt|{A;;9)CtH!>VRmDCSr?&NNrdv3A$8_t7H->Qe$Nxe*2=uQ?Wynfk05y0jVE)EPSD z8G4ji29%llgxLo8+4>IiObA*gxOoQlT86k;I#%e;VOqL2OtvyCJdH|MNSyprbE@n~ z{C!6|c~V~;3+@~vo{pv10LxF#TfS)ZZfEZZ@L1YL)&?fF+Ikp6Q#)&W+B{uLDn~h6 z7r1CSdA8|vEzE2k>*-n+5a;PTXlvHNnrDF1HYVzr5Oqxm`er0OQzAq|3yO&q6@%kg z6GgTZ36ZUG^o-)l{4{GSvJ5Th`sNfpWR5#Q*O;hhOfWRV8(WY}EJ>yqvMGk5XY8P7 zjFUL}mo3_mo>v_no0FVXxo-R64LeTATq3AEFPbQbCJKm1sW{etR_LPki74=nEEc%L zkp&?{L9iXuhb4>PD1v>%vkWb11iF+bc9ST)0ANzNCygm$uq7aHU@V>z0Osi%;U65U zv0nru3w&Zm>AG!4dxtMQeD>zu$Tt*V_Z~cb`S#Q9{q>M$&wXY z`vxzcy>PE@@aoAkw=Z0Ibous+dr#lJ{`l>~=O3TG{rdbJ+}qEu-;tG&zH1ir1Ax8z z^6SalZx3FLT)Y2j@Y22h3wN*FdHL-12f$TU@v^L$ig6kaPA6J>TWWP`R0%d5fEI3Q(n}QPu zIEVv?(r}VIg6bGWkc8O_L+k}1c7jm6B*HMmK+lE1vJ zVqMd+?Op5k_O968ykv9TzS`lA;p;<}U!1%3@#38i+Yk2seWa(o_gvYc9ZS~lU%Rb# z^WXJ54m2LDYj5lvYU@TOA9iWBP3agI28N+)`1T?@r;IJ&dlJ~w-9ONS01Oqvu-`q0 zh~*kWst^r!Apk>GO+;IE1JaOXJBGUl2FBnAvAZ8>i8Sv2eASVG8z9QJqh^lG{gfk_B{P*9Bt4pADRLZOB748_>L zVTQIrxrLTPj;vAm$C>>fFbND62ols+jS&l&1QB&$kc@F_tPPr=a6*MTFw}%W1ays+ zk5LT{(ejQC$Pk`2HaFI{Adi1-+Ih%^EW>lXMeb zp%N{b$ZUAD^AMdM5A*^7y%25@LrlpbW@N}i5r7d9`vn5PfJ34>=Fyz;$&LuF@UnE^ z7TqPE<&FT%MgWXSrMu+Xi<4~larVMQs#BI3J=BEgKgU=wemeHAsrr9Sp09ZbOn1U` z69aVdemXec`Sw2Z9T0#SGs3L6;f4e- zYO)!I+*t-}WV1~@+6+DNbdWA_mH}ywA!(j5agHHwwxRtTBL~ntW1N-|PREo;U^>R8 zm9O7%V(Z?f%z`B$QQ7T%*NiNgbByS4g}KHIT}!SdS#C|08(`@=rg%LQoR+@T9BtG2 z`sTXE)&!b}!B@?kkC~~1ojT8amag?IT^q=Ol-kC4T~o5IDFvdA2?-H$NY*n0GLa1| zz++KCMp&jfUSdaAQ3T%pQTh7jfG)b88BN!e3e9xkEC84(S=$JYk`E$yG6OTBzA3@f zicX-*B~F21F}W3sw=CbVuVTqoQvmNk5WhRFC0=Y#cP9%1Bp%U+TLw~!S1;OdJR)^* zVB7+>BAO};x2Jp4MZqjdu)_(d@Z}do(5uhipS=6>ju^y>?mHfM-`Svka%O6E_Pf`g2*2y^mh;j+6w~g_yG>WU@LZ@gCLwBQIqA-1Zfme z3WQUW0A}(Sk}{6$7>|=jQ=L;7u4yz?D#Im%=aVl9sc??2agST-o3<)Adu{T9J#l3_ zk{9fZFW-{3XjkTvzcXrfs`D1t4qVKu*^yqgd1qZ;YUO6Xq@|v*i#%c$x`Y?{$Cb35 zy0N2nV0-Q0k{$I)es9}_?ak*758d6~e)-_={p}ssws&0L(|32@z=Iv_ zH#gQ_UVZr7(!YnRxA#Slh~ z`X#IPuiAKIly0k8}1rF)}C)47y^cM3=Ve>pYG}d#sIW5 z(qK%(B;e36L`1(=M?8r_4oy&@IeIQ!M? zT7u}my@DDDjo}K4{yRqlxk7K>f9JKMLeTUJ9KY$QQFO*DUlma2v>JO`+O;ck%9HLZ%1noa;hAKGsU&afi7g~-AC^ZJN zmX_bP3~h|o);BlSHn$#aXiv#0x1}q%E>S@#OC&ydSb8{?9$`j{u;Rw!B^hKz4oRL3 zi4`Zoj249seF43|enHgCl?MkFWMKOCURDQdQYBRSrd&X(vc9qXz5Qx=z)m{xuotKSby?Rd?JJ{qZx* z=NK`}@W^6U*31}dRvb~B#d0YnI_9%HD`>98*1|LlC*D#6Fl$zq#q+8{iA7T60n*?Q3I#q; zQjC{oLVEz1H8&o-DbKwK=w;831Kdv2XHA%GGhv45_~~F7b^ZfyTeIutWGx46tQf-p zv*o94=Wj?1L%&9SLa06=*pwcL<;G$-(H1PV86(1+8EMLhFrtR)lYL!y_q zwbL9k@f;J;OhfJzUD{MV>U4eTOhejSWBNQ3+8iVNECYwR#`rnLxVgrFF*_|Idu#5 z8`?UM1r>`nE?>7t*VJLQ9(Intt>)2V``Nm-a}6D|O~7)Iv`xtKO~|_DG+n@wB~!&SMc}}~l4~R$ zDPp%&mQ>AAM9AFZtnm^AU@RF|;v#eOmN|L>z!Xkit{#CPH_sp!k6>r_AfOjmF&!f- zBMgo&cRO^VWAoo9x`wZJ4qa{Txv=MO$BCAq?xD-=edo6AI!b5D#d1$|Y*ut)VN6m{ zM&6>Rgo3KYTV=|?kcgzakDl*6)G%=R_PJ}1x(BcCKi=JU`sUSpFYi73_~gwOFkbJ! z{(Af6$D7e#_nv>e@#yWXXCJOVd~@!`lRHn}C1w<;yrUx$3c}*@qEm_^k_u#QAq=6L zn_o;^dO=mqsyClTx9r+S;VKzI4~oE3;2a_HNMJdtK^&D@?voT4Uz}31@_5gss`Urf z?Qf|cyxMf~`pR7=+#}NoB2S{&$Cl@1!||};dRlWlu}oi_FqABdB1xlxTLeiIL99l6 z7#u2M0bm404AmuxqDrQ@z>mu`j#m!PuTUOVsZuX+kE>CsD?Q^EyGB(m-_yHvch{or zEyZh&rYzVRTeNcU#`9x6*Z*!lTQ_{CVD*u>$~~cl+rtaDMip+zTCnwa=b7Z) zj_f$tbg-_ov1_=k?@W8o$qr=al#>9kj=n(+$&h`&dWOJ}~1rS1OL1=pr3a2stp@)!<9sUkxXC>G#;1)ra14sjyK?&Ehg5gqxlOXRI0A|BW zz=>0Ad2x2USQ}2Hu8s3#ZPLV9m=;W{xEVFb0Oze^<2E1T zG|xgl!-zk_m^aIqGs}oE$Aqb6%F?x9>RGZ3tvQC)?D=Md*#>qqw5_ITVPEfb0^0L+YH zWJ#H$i?Og}a3$W>L>UGrwk0cFd=m6b0a_#-BjSAIB@h9|(1_9tFoq%xa$^j`8ZTlA zy+{ma2a3{$D1}d9Y9|098rur3Xznbf+R;DtVCzun^1nU83OvJ$<=*K$rv#odhAj*C zjmR^#V$apLwzQ{_m;#PKDU`ZM|zMjAG;M%?C!)I@nRnWh? z)yU7+pMO68^bLI2#hXt~v<Cgw*b=BbnO!V_}?B2#=q;vGGLd2%;5 z->^+P_wPMY7ZjD|7oH9djI9V3y2sJw;cO?hz%AA>AlXZuUASb+=0j~cRqGb5-{bFWu2$ zC2NnY_`7|}@xk>6yVoD-Kh$%hXx)j_rAHE%9#2_zJblTb<$Jo9?{1ARSsz!h>UhtE z!j-$X)eV-dJ8-b;^0J+cH9P9|ww>#}{_^~jk#kQ*25!CVxcs>D%Covt_gc$>`O z=+4Kp4@NFN{(Sn*`+=*^8;5Qm@4mXX>Gbwv{TuhUA8I{Y+jFU9@LGM(#f|$K7OvU3 zct11;1sB{A9S)4a`0pt>3vfc{1{{&s9|*xmQrY@sv)_<&F#p@o`S1WSMllq*n% zR-uj21U&^olV%z{v;n$61VI^;j2)s(LJQHW{kt5Rp>RThgbK<5QSF@_XpR=5JR8f= z!~a9=*BFz~1T6uufuO-y$yft4`Q69(FKCSs3#Atnj+rn`1Ed}NwIhrEwzg=RH8nNV zwl*KGZ(g%?Kb9!8=XyIw6nVrgk_MJI2;y)exJM&11A$v;?;k;$2>?T%Wkwws@_4dl z3=9CKnZ6NfL_p>rqBA%&GwA_r2*9kEaaIh#NrDAk4aSI~%w;$iuw0Snf&m^Z_ac%q z11C*kxaJ9b$^c-dlu#3b_bg-fxEbaXz{E__0v?Q;qW9Mn!zuIddRB5XlD`El%#s#m z%S&Xaig=!t0^fxU*AhEX29}#_p;`G59Fi?Jf$di09=+Nv29ayRTBUjk&!iWXSL|4h;uH`#c~Oq;pJLK|iXmKkY)4>Tf$AnPv1?JCAoCZQBp70Yf`~)iv%&ZWf7i-0d#W2+7)Nm700FX=z>onI= zKF3Tr%b2TW&Nr};n%IIQ<_M^3a%kEdzUG`6v^@d_$ZzxIKWPAzs&nWN1MHT$x~*kmv&BOn_u`6Du~r z%rhX_jwmBBU2TX8EDk=Vz|e|kY$Gx!I5QNH0{56j8~5*P7z&E7at+RR4$S2`#&Z?X z9C^6NInvaMHEE{dbS=Yqdd9}))^>P0l_8WW+*PiAAUCgI51%mKz-U*`5F=B2GYf*g zIc~%D{oj84`lcDI`uYPIzIyp~ZJBtASRnHb z3Qr3TOXZ3@H*DJd^XISkA4e`-zyIO$w@;&A&t18dRk(2bzQ&cC4lY@{cjd-ITlY5a zJ=WbmaP{i_R}Wr}y!i0r$=feyuRU6}ZjS>+6q%G88kZ4~n1v`lBRnoWI6B2UI7aCn z;0(kKj&bn~$I-<$BoUG8#!>{ye3H1%F?`opfm@7YV6t~q_O_!P8}~NFWK_guRTL~- z8J(6Fk(}YLPLjC?GbJ8Hi`E@)KXss?uWZ>CPj!Yp*Oej(q{}0y3SbymF*RU}<`_>= z#8DmNX-)|&mt^1>LzTpENoBidusyQ5-nl#=nQI!`HI?m>0up&=io7$#KAA4zB_7db z;aSVlsj4Gq~VkCbkxUA3=sSJRop zJ=YF)T|LlwIcLePr1A|*cGh=ZdU~wqa@*Ovm!E#R{_^wfH{Y(k7#+U-V&KN}p<8cG z-Fb8V{<|wrM=m`XIsfqesXMRF+2c75dwVl4*JaDyX;PQ#CGtC1R4>$Mi zJJG)9Sj)!0k8Ig@Gu9J?E_~aYMyHz26glebpfRYhC2p^ItL*l z36c+JIskun8x8@_;1D6)pPoaAe`Vrj2rV2V7FrI(Y6qL8={y{(MO;)<18TxhP@#fDC?BJj z25DfzfM2c162C1iZD8QqnwnZ0Pc$_iZfJ{6E3sv$=!$6f=mjoO3ppOScu}Izx0LRZ z>mW)Z$TNs?Kvx<;l4d7J0dye%(>O4+3laEaL<%(l5kvpX;|Mo{do(%Rf(m$xHX{S- zki`SBj94?8+L9R!-U#Rd0uuw|V0#qX36MLroiKswl!+H7nNvdy@gCE3$bU^WLgybM z%WzE9pD^8YrViQA*4cs*f}usi1#yBjs(pn~UH&hah=Qj(Ne@Sz+e$Wvbkz>ozvl5O~@;J4WB**&N81c-C)9W?Fm!0kQGBFf)6vE zGS@*5tF-4vVCmt;gdk&5urWEzlokc_LS;&evF0TM7m@da05#THn1tmg*osqZgh}>b z4TTBTP{@hKu+qv4j3;z3+_Ba=4@TsY;F1sZOTj?%JlgpNTzC&rsz=ST8Ol56bAMRV|&?L zBk~+Qhgmvy8g4nD8(q#dz|S=#YMasK8WCq35@#DxXBblEWB7Dggn_M08zYc=CRq{` zM%G*tEGr@|Z^6>dRt_v1JWr_bckzx*NUu^S6af)+z<43hBF;Ck*EYcE8WD7jh(?xl zpch22V!$(PBO(9{;~=uI0~0F?YaE5imndD7 zuD&X_K#ovlWM*$+Ll!E1TDpdi+3>&6sqn}Q`0tu^AAo10Uw?vLz8SrG+B!y z9z5CJH`v~fr~~xdkPY?>A$AQhY8oGgVCfIrdXb(+vdf*UX z1%gJ48w|nyEezOMCe=2bj<^L(NtNs{3r{0kiMO2 z;#_;MTz^g09*=CntTld`{^Z$~^G*4tcuxyzs1+m1niWq|zUb?*eh)BDPpVr9 zJYj|@0A#08vOcNowRM8j0q|ud--ewaA3&(WOMcL^9%@DhQxUW#Ce9KnR@uy z2E;jrUQqp?M*w5 zC8k%n`^MpEQhhU`ff-517^iK7(=oy8n-cVl2qxxKJyVjV+mHed%)p$gZ%WZOr<>dI z9Vp89^s2nFRVcMvlR|gV~aKrEERe7L``XlB!wK2%0F2DhQuia~q-+j%H#-FtD)4 z*fHW#O9#$eM|Z*h4X}Uy8TtD2&4(}VN4|YVo?J$r3Hvj>{>RrJzb;(4JurN!Z}>`M z`^l!(p~ufZUb*??)`J%}A3VGL@cH{MKi+=+`gZhd7yO*>AKrhWY2D5vU1x6eU%d6? z-RJk;e!c$m^~tM`r!L(hFvVf<04+r7gv`kJ^w8+!(3q6qs6;nENVAHnmX|MDEmnFP zSt84Nnb>o2Y*&Unl&y*qdBjUS<5dAE$pwp>de1Cbw^OY0Ny{q}wLpRd{1yX@fLvV#Ll5A`lP)VJbLU)7H0 z1>2iT)*jn@WT1ZV*1|1EYKLw#pS{;{@loH^XQ%GI8ocrN;^TKWUX9#)_x16}&qp7> z-FWfo%$*m5*B%dDe>!~Y+3CA4uRQ&D^A$L@FL&O4z4iL@t=FUX-hRII;?tE!ue;A) z>m0r`bn*7d%XiOSe=v0MR(^-{sNZs+4u9lwRw!TyC1E<^jklw}a{!?B3 zCp&rpU4!jC{qWD%JviJoFwoVHFsY-bAB1)!qLc!3X$HW+Z)sebrX1R!==y!w{a?m_ z07f9R1kKSZlo^o!)*oo05gjT+bIt5|#BZS|q7l^?ioi}mg0$&{OMy#+Ht?bvL9RiX zM!#u?!U+_GuG*5J40`hzs6Mfw;uorGik zhiEbeFtj}?6kwVGuoj?KOIu@ObA3Zo{n4hzO}md+;AHl!Ady#&bHqYPV5x&Rp5s-Z zieAd}F2eHTt$D~!{8sEZD`pJ3$RWDgAuvhvWLP9{2xw%@i9^d#PX^`;1Rjeh%YbHx z<>DupGm-Ut!N5Vu*tt|yF0zq|5Pr(#vOU1lq+2qBvCP1^$ohwvaZ?PCHGC&&{WV2r z;tbR2S`PYFN(-{TIVBW}tR0+4SLSov%0Xbi07U>WjRQkWm}V8k1S@v34KLMRkWQ55 z0+tBUOmI;gj|!qZ2LNWxOM;d_FJPFRFrDdA0<2;=moS}6=*V-{1zh(EhN>7MoXb!Z z(NzVqz{Q$*_GM!KYNkgiR-9zQ2%TdtnmF5b{50e7Q}rfHnLmE=ym0{Ci8|w_n$OZ> zSd#p3{1`hgIhL}(Zm4ewLqz|tMW>9(5X`2k=ASvpaXNpZ^IcojKC z)W|~@y2UM*1eQC96YYdaR$Ta8pm=L`j4e0Dh6i8^x8{dpIDsZW6uhgBwL;fgZtCDj z76t~!RhZZ-0BJgA!g_LxGO1tCpQg-$6Ccfe28zaS_)wS3_kGc4J_1ZQkU)Hil8G{x(gA+rtb2*SLg6;bg;GN%wb zg4n>6tQilZ=$X+>t+`;rzPKR@%qEdHy)0B|M_m@%axlCuHSj`^4+Ib??(Y? z*Y7>kpq^|M24y61 zoozLLckJo7c6|8Z{@$CLn$B)-yR@t0%DtB(#W*xt0e^+NxRSKI3P8&2JBJbkC_ z!o%*XPrEKX=)8D;;QF)Sn=dXrc>Cb(*GKQZK6v-#@rUnEM}9s1^y}{HuU8(uJAd!> znL979J^OI?-M9Pif82Zb{rgh*Jn5M(f zFa%fs8Y+XRDMa`OI2mg{b}k4d4NwQg64F3(7C;N-7McK*P!oo}F^JF}5-32g@Nc1Q z&}$+98{-z_|K=Hb2np)UP@au33~d8R6I?;lRR|IFUSlO=0E3r+*xU@YV80N6X&e|F zH`O)NAF69i$SSv@xR3;D=kSG2k<~okA{$|h(7#+BxtQRbX)R7*xD{ZzvE~efIvCAb zy$}IrIB`1iAeT!K->ZV>QOa^Dw4kajkm>bNrX*+tRArCK4(HlS2 zaNYIvf!aK2Sku$<7>I}yyK4KE(PH(No16+hNSsF47^)i4Yr$eikL zLGi&*y|Hv3ZH!b0tI)y7^sN+gjJPwjDO2X*r_U#W37e(Q)VERTI=E@st8{H0XBe?& z8PI0yQ|9QBKsv?@Q!AmC0d<}M(2G9b1ZwFs4d~PLnR6{f26$%!ysH7uMb}ngWUI6w zx>*t(VfuC<9N-pqnzWKJ-)B-;`M zQm3HQ?1j}!x2@TDD7SdINEtLo*G|urW`gBd;Ux}KN3P7*hRnsYc*(g%rnWRAEX~B4 z;}Mi8P^klAa(5hQrwRkee1D1{m@W=uO2R3;0DGD{Jr}xMqZEp00GRd-FbQA z-m5FOpPjyR=hBV)x9`1r{OrSbjXV4K^VfIHVpGU!8=764zx+T-zW@9I#fVWu5cuQO z`;n6uu5}Nee>?hR^ykmfAHSY|`10V@r^jzT-+uD;&eJ#P1(j@xOLS6Ra8z=5Y^rZ? zR76a2L~L?YLRxrCQfO2{Kv-OGM54P-xC4ndTgQUJRb`Z}uxB}w!~qPIn&%$JbB$8^ zCzP+;QQLKHUtLdL#S(Y_kOeghckbDA;qu9Aw=X?>ey^>k6bdi`RDVG-(HUV0KNG1{ptI!_g{`&zWeOzgO``@ zKJPknxpnAV+u*s@{xchP99+G5&-xwv57xCdb`3Oj4>ffUHuns*^qy?#9d1De&xYDH z&yY3u^tU6uf`jc{{T; zz$UO*Xak5Kgc;pP9m*aQKWIb<)Qhx)v(O9v4`$HIqRt5l;f0Xb_}6e6#J>Ik#Crk5 zx)6YkT?9@UJ9n%Q6?%v`FcdBSrIF_F-$KhlfG*Hj%Q1o9LQNP-ERJ4fXp@)KdlS_Do-O$6Ldm|`$-iuR;w^T$n^J8mK}>jd7j zo~07UjmB|f!GT#Zqk!Ltm!(GoWv#e?%xs(_8{i583kZk6FtX+u1Ew4D5{j@TjuFeG z!HeXfHL{S!bk_o$6d5gp?^XjaWUn&3EFC9LwUZ<{fTRhwfH8iw4L{0`7iG$C4dLLVKc6 zDDf0Yy;QD|QE~Z)Y6rCq2nJ?!V+;Z?JF?Q6C?c{Yb~JWKY^rBaY(i$G&?&HV$+pVn z+t1y29Gg`QBx5TgnQ}Et8c7p|k~#j?Bu9?e7fh8siKA^`ZeW5XQaK(zL3FkVM`B}a z@jS6SBd<8WVv!Azt!skQHo_ZPQ28={bz;e~bqAX|FPy#p1nzE^Zauqt_xa`9PdWxJ zrR6PHzGi1><%%UMwhW%S^7O@zTz9M^v{X&*S{Jr!nV$n2XXn+1R zocjk^0O`lCPv8D|GxGi2mtU_&zTbKLQl#*7@d*dpp zY~yaY`SuQ<-oAT}Z(v|SN$Ji#dk-8vwsO-ZrH7ASc%0HR#4{jn@v5Ci8v2VDu3fTj zPiR73*|N=^;mMt+uSaJsWXXel)%g@z2+Ik1P@1k#vz+1>idY8FOCIGNzfc*LuL#SR zhv&P+moM5;=VX&l0095=Nklx-ReQx!iZ- zB>=4T?7iB7t8M4*G@ZOYc;ng0n=kq=-amKy`Mp=858i$OdI6lCkNmvy;N{I{?{2^N zc>BeN=kT-R%P)veM}TCbm+!wlfBX53M{gg!8F~5X>)S6s-;Dlz1tc5&_Wa|QXCJ?U z?!A0}>e`**OScBjU++JAZRq^X?%_+@_a9%hYU9#%Tes~ycD$vh8LU|ENi??h1H*<| zd;8mZ2Y^_JdImsk5H-VQ=qwLF*B@>n7=ye^1F+wI3uw`;F+E_GG~7b+Kiuj8G9kP{ z(1OB7)64hUGl2s`bEH>LLn%$GUKBPU6fzt(sSttppuoopz95YlAHGJPv8&SN- zzg!WvfFMuRY^xt-NmCQWsq%m-k#9Lkp6wt`2Qoe7Bi;)YvI}zpSSzq! zV=|-1L9}2(IRY)T7IH9Wnoc~hXlZaM8}Mp8BwBNl(fB7xwB@Hb2-AqNY^q}(6B!08 zvJ)hjkOF6$3MbC7oiNP=Ks$c2*2JmEuABdvs6B3~@eCcR1>Tz^j3)@1PORyB3_Va%Z;;QL|704%N*W!28b7BhS>M&M~0RH|1!VuxIPjXX?>r z=`&^-FlQODXBcuO>9e)$T@1+Hrc@t2Tc_D3f_WxfEhDDBDXp{bD%OUzdtcql*Pobd zML=+Zj*g|)93x9ZYj>erjAw+m(3S1LurRPRGqWL5`KIRhU3-sj-FbjS6+5~H@7&*N zf@K?;vkc4`=C%SO42#BhmXJlnzMU*;vsoVl1<1+I~7MNMvQ#m59V6~fH z#C#)L8-jqsc1g=!8k1TTm0TH>R1ur8pnBEr_Wr9UFWzhJK3h<+g2r`h>pGQJv?w+? zKQW^;zhqf%(URqBcXtn5x_IT`-3PCqzZ&@n_Db{j8)E$*e;HVU#qorB|%NGs@9B+C3mHDj`3oaFNo*U*#5%Q&5#v zQ10d*O5-c+X@bD0w9KNVUBlP6?Q2@GasS$#$6_7}P{Jo&q>SK$+Lto@YK zJBjZav-wbO_JVB!w*;CjlI0k~P)1}g+Ugfq=op;l6IWKWa{r#@b1VODDqOKYAgQWw z`QF-rJA0ZhAWw#^K3=f$SkBTTX^ReIFF(9+N9*p^EBVX!6|X*2wdwfZ&1VmGTs+cy zwQl%!%Z0~vr|z#k+;gb+`u4_CZI>RkUU*nHbmLg>rSp&8cV4)6{=xg<8_)YL-o5hh z&D~d{cVB&a^!^Lz*~pL6Hy%Cy@a^%3?`Lm40(2pMYvlX0Pd}b~_^`;cc>bx(Gtz*6bLEr(KLV(AkrAOAo-ts3_t%S5C|~y z|C__bkyHMkE<_D1|6By+)Bmsvy#iW-a;pv5zXTD|h4?>esILWjp;inIQR6j+u73*( zkv9KA7wWyxa-@x>5aJ(ChR{o6!de=d>grqSPBb+fIMJ9>wgN+N#&aY2?s>AnDzlZxB$oj{s||^5c)0v0gW_- zLuS>RlGNsuXgh8a+~@&a5W#-I-PS>r21bo2&R_s|6ggI$1fo2fEX^Q@lZlcPoG{Uf z5otyWG_-S>u0tI^&1BppUGOmguyK=h$4^HFlgu34t*N0_)Nm^Xpfs89ULp-x$aXJ5 z-prr=Lu3&t4ni+8dMwDC5eE_3RD~IDLXFlZgzMqMkf*PxF@Q8^2Hpz*Mv&!bR^KS2 zs|w+2_QEu4ZW4Sb;Fb-VAa*AS#Rk`-447dngjZ1;*u#CFIdLXt{8WPpleH&I(V92~ z92mT9-HEfX^GpP`j4+}o-hm%$#fq|KN84!TUfS^CMH9e*0XS{=K(91A%_>$1z+@Sy z0|S5wd@GzHmdZjF$-`?@F)O*=W#GW5&Uw%PzD%4ro#$C94XkFk6tX;u9V3@goU*8@ zY?3mQBnRW0NtA-!Od$ZtgvmHzGC`C?;K!4Madylg9ZQiV-jT}p4~s8z4NO(~CfKoD zrfAtr)5T5IB>>5088T<;)90HB=9>#=8L@y{bBwujP585n`7?|K(=26LWN#gkw-Lox z3nQCjBAf@c`ZQf*>dJKoGIFbZ0^`?jI^gUcYKEa`>tJTh(4R9^*KR)6g&>Sq`fVv( zSe;!c;Yob`!p%$_&R@Fz@ymBlzsSnP>!Om1t#EQPYq1HI5A?Doiup<(_rNHHr@z$I z9{|P>xsdseJV(E%q_Um+JDhw|*z$0iD1;&kB@06k@dIf>e^7u7WRfk4nfVe^O3q!Lkh3Iz z!N#`1>+7~1={|W~1@t|EpFlIo)Nh|(FIXiiwl?R+;MzhSL4}(o!1U^-Z;>4W5M>e zytT&`>~33sVz_wC;k;#gYj!s7ZaQ1re`{~sh1#Jz2fMHCXgs}gU;ECcGke-Eo;ZD{ z@!Y-E^Y{C%J-z(&)9_8OU(biGKN-IE@b=3QFk5$DkKB7b`rzH?TQ5GGy8aMKZa#Z| z;G29k_J7wZH$|^~-mk zJ$^g-di2MOPhVe-e0%lz$LrCbw;sK{@!-|XN3Z`r+Oqd}>xEm7kGAyfJkq#n@3GRF zwS@~;F5kFo*WvoQ_WstMlWpC@$O6IL!);wdt=)sofH93B17e}{0--qo3}ROwQq|D| zRO|2T0oR4Z?%#z-A0t%3VHfZZ4gr1|fN5ZZP-o0Mp(WtqQ1+k^NCR9!4?!q|;1I3q z()hWqZfJ=Jv3Gx_&O>8}D54-ib2I^sUAd(V*}nu%K_k+Ih#D{84Vr*e0-+c~IfMcX zs-R>HU1JgHCv0s7j|Bb)ATtu)Hc^11%TDHid;glWOp1_ zE%3;d2USs>zyTzR{mUgmm9~-uqEm)ST_X)H$4L`SD50iQWcr3VEz*{sz;w-*1=Rq( zz%KB-kzF6*=59(wW+wu`H1;bFFHA!p9RqsV2~yzJkF4k+%>)z1a4N7v+(Q;!RX~+z za$NFRsvH|ulqEUToEV^QMaxHWWTPg`$BnhfkMXn$_W(A~eX1K!dhHRQs9u=IKGK(xrgC7TA!oZE;gz*%4 z5{4Eq$CRsU$u)P7a1}vI)*o21;XrozN{j=4t_gXzF>RJHW2PZ%wlP=RQlf9A)Ups6 z*eJCvr2wkwhP>&fqS^MY^XY+FL~oK~;w)2xR2DkTJTfFk`kjQMT z9cR8C*2ok;Z@%Ts8HNV4O>O5{unlaT>}ZZ8MoLtIyK4ZIEWCL6CfpMvV>5eCUZe57 z2n;W4f{TTnOwXK-qbmiDz5p|c`sr$Uh$zSOiT2!?vAR;LuE;Bqj z-P1R+tM7~qZu~KsU%&r+_hEGS%=HUb?tT3H?cK=NFF*eIhEBsr{t$+t07E9_Ba7Vs z?o0gm+!*z zji&)%btmsNoOyV-@5Y|?3;VmT93HySaPDp|Am_omi;v!&y!mYS`jeB_AD_Jb=+c9i zmmj=%^6}fv=O6CB`+V-s(`%34-GB4>#?yBX-+g%sUTWm~OYmVMKVOgjdiCk&qt~Mk zUyojU@ap32r?;QJzxVvpy%!_r?>y_jaHr?o?Ygcr4ZWv&&R)6p@WsPdpYFf-c;)Vk z2QNN8e)H+Z!w=`WtrJN)5YA}?r*!s0 z(y2LYhtts<0oZR7hB_xSq5uQ(w0HcrN@JKAvr3So$r!*opsWYZLQsTq3lg*q9HJ#? zf)>Id==ZsQn!zckApboJ5y%A4LWwnoF^FjG{|E}lNCt>P0fwRrB4W8TY(wa!v0oq! zy_z%tL;jGy#AYC5?Vs88dEx>YOfp8#bW=T_H=ur;*B%&+> ztN=lpZVx~IrRh}194NtwQ<*MBU}%u}=+1=<=X{P^fylFjp~$c#hnN$6b<9PRW?CT& z2~N}oD>H72?!;*(Q|CDt+BjK~{jk(9E4tbmjG!Wu?N-3`C>8ot!TUkD#fe7&hGEAe z^EenW7$BKu{YDc??e2Vn}e(bYQK-f1x!u9zF|vb~{lrmIHP(c($={;!K`;K(4+j7|0f}(Fk(9*G; zKM!L#*TQ_Rxs|qsgOLrNF0!?v2KdE%_%QnR!^fzE;^Qr+Y-p|yoB%tfzcs}TLs00L zQwU6jR23+2^Z`(9fQMSa#dboyAIXbQw4w}N6(1;CpzKAeYEvdUDx@B zo{Kdb_UBh`%&u6In7erOw&Mrt`y0E??LO2R6q!n4%ZW@0Pv)kCcjD~d(lJP7N)uD^ ze|-P>?fcKG*PlOm@%H}Xmsf5*8vXj?&-{-66*3WDv#HgWA3v_$eM(|Wyn>^{;?hH7 z(*hzBgQJo>10wuGV!VT*eS%{={3G1`BEW(9g~nOh(#)(V$v`jH7-dM2z_)PyaBuz20ywH;?Vhih!_zzoG(Qs4kHYq)^Zl7(KdvG`pbFuu z!uc*SQm+K3fHbej+_>zTwBl9j)QWwz{mFSXnI)@w&fKe7x!Wxy%{wCFXzQ?dL^{_o z*e^OaC@$YQAU-;!G^=FglGQuzJbadxU*qB%D|QapeWbo*!4i(d-8($pBRsum*)9Os zhJ!s-n`-md94X#ZTfVJj!S42heK%Jh=-O6)a)0NQ?G2~Eb*d-+6xN$%hLM-kyQv!Ru>J-UGlcKX`rh(d(xlzTbKI@&21pfZ4Uj zukXAZx%}Ye)AwJWy#M-Q^at3fx1WE$|N8UQ$oE^1U!S}2Xz;@AEBBs*EqnRtJLuKt zpATM*T)z9_+>OV#p1&Wye7CXZ%-S7?cO7kQ8@lrF^~i^>-$%axJlfoMq-ALPq1L_i z{nhLCt=(0>{cz{@BOP@;=T_~g&97dcS-Jv#_GOo^s9dpS=b?tW_JOAE;pXn)*6tzT zSzGU5Yj=NZC)lsPmd@T*pcj(#Xq*|sGoTvc&omYd?RETP#eOH6j>iF{ck#ddenZnPOS%p63CFxNc71-P>2CvZHA zAKAE(=dNc z()$Y;t3w>ve~`zn4JOURY8i8Fm_Y0ApV68VW6O_+t0B8$dXz~57NPrO+6uto zrQjsMq-_7xjgbYr)Wv^Cm+XnsD7I`*OzB?N=;c&Z4p0^aEs{9p!5el~uW}4u?h?CJ z5w?u(QUo7F61Y$qzSLR00!YSkD|CrkE%sl)bk3zXW;ljc^E`5GSYdOF#gk{_rp&aS zGSh12JR4mTlDRFHcOEe-o0g0nSs`-d)>9Wr%avvv-|iA)9V2 znr^Ppp#{#R1(@){wH@4MnhItZv1b`FXBpD9Oj&xCTw^PNE!m04aAAvlRNgUWHf#fP znzkWP#}H>=Xm6lvWu$|(Fm%9}k#P3h1N)o4eEHdb>U_rM@(j-nNhegVYV+jf3m`^7`uSJoZwuG!gCvi8u1 zW4-N{A6|U^>FoVi_uhZI@nYom%aI4~zTSHN;rw0jTW=r%dOiN|6#(|&?dQ9%J^_So zKY#!1!?$N2zP=p!@#@pJ4_|(L`u^+nXJoAF<;Zs^fAR7AE2tXz0RVgQ{>!Z=Z=byT z_UO&$H=lo8z5n9!ofmzluHJk0{^X@Q*B(53_wDD0Z@W$^nuEsLpb?-o#x1k~YQlccLL7@AfD_t_h++&aL8}_- zYavI-r0H+`%`?p$4PX*P6lRDm`(xcuq=Cjb2ZEM$&Gko{>JK)w3RFQhG+%3Kuq{(< z&yBX{#^Qwu@_-B#&FG2Ml6(uF2GBZ%^Bflv`{lj2*3#^O2tdk9K@+$7i5iX-%s-qw%T~)wfTac4agqH~EU9WsdXyC_+J+Yg zP$9{)?F32I{3O(VA!5dw(UE7)(8tb@r-likAborY08H0DL|@~;ba7!|!ff~{R8=nO zv_Oy}CJEk{Dii8RE2O&?xW%vM`IIA_iYfqSo^QemQ=<0_UG{|O))S_hO_*Xj zWxDya*_gSy1buU^Il;x26Jp0x+wr38gmDhyL`xR3@P{cS$N=xFYv-k9?KT^unrY`g zpB}8m2sU7a%)~0D8}p_cv1S>wXBaYP8?)z|^R&&_dKMf*ERc+2V#_wRW*K3a+QuXU zGm4=pS>F(EpzlB+3QSE27M9eKid8M0r=7hckF}i?x;mP9K8-<~R>^OT$aK0)MokT^a7FtRY1A`YWTBdFp?np8~@hY|%r zL_r{lA4nAjk@rIK<1%iWXlw|#%C?&x~GVPE5zZ8L=g++k!2pS z1!wO(%PC!a_t{(bz!(x+5tmvjcJ!liR1OpwmFKc}^{&GWeeHvnH|=W*h{~pke61)h z1YRIj6vmLM*@{@6Q@q4IS?QhX9+K-Bk(XY!KC5z5dg;3C@-@4U^{n1{%p)+_(Npao zk?!mhrNG@UM(!S>@(K-)%g!%f1}4(QKh)VfbmjUT51+qXzWKoVy^S?n zj@4|hU9z(=d+FcRyIR-Rp5E4QruEF@jv`4z4`3@{WqVlJbLx)+!2kKRY%wl1M? z^~M7|6{`=g-P4)7X#2*4ohhXoQ_I$+maa`N-;lF#YfR3v(BuVSDOKu>>WGwzgq-U9 zsx^Reuw{puI#0CqGcD44RDAoKM(e+e*LZk_AHe(%@<1v z)GX^BX2XhNIA$q>7Kpq{@Zuz)FWe0mivlaGxZq&I%xPg(EHy9*FG>L*0We6&ViqaD zFt{U|G1NxnP$N>PAraY51pr2tW)Q_`aIXi;1vh;VpbP0yRAf<<*;sBI;DPT`F7&Ms z`IT|p@*McFmegRdUpgk@Nz-k{O*I}jSs$n{9^zEfXMkR}sksYE$kIZLziS)L+fDR2lU z$pYDn(m@1yI^88#;8!N_FBb%s3xW_i#VifU-{G6SiSAxN1TX8D4FWTP!L${6up}5T~2Yymq#pjiCHZQsO0z*N`lHHenonA zE|av#e@!(XH^uO;Ne1I48BLsKHg&e$Tz#e`$=i+-fni1%5d!oa{6Gfy086GC{>ANu zNmzD_89hRq;5V1(I~P7X*?&ISZyMss_%n<-GfmhtjaajdIdhCTTBdBUVmf9leGE$< z*;j>TYR$I7i;S>L6I+h472DW?5tm$gtafnUp`P@-WpdYWXWzKS-iroSTw@1?3El-m z@xpNeWM0XB>O#3k3?CDWMLeqD5fHUDGz5zLKu=znjnxR4CF~e*#-&457w;P4~A@iZBNgsn@wG3p1m8raO2VSdoQ~O zF81`FA3SyC$e|2eA zs8Xn|8C?H-S!h9O)w*MyLpu+gs9v#|!ch_!(&X%l;HXrkdx%KsFHrjXM!=$lj$m{J;^Q5BcBIJsz1 z{=!vjw(Z-0qPe+y5E$0f0amQ9sjIuWySJsMuk~Ms3?&x8tfiw{Q>bxZT|J1g0+Rgc zMTCez2APQQ8$X?0zqzg;qg?LKIz)gHS}F2`~u(n5JuStP0wr07Dtp*woO_jHtP#v9_uH zP(wpj*mZl7-Vkk4g5-CHgog!*zE;$yo2mppPJC-cX z1Ybp!XF2ebaKaQjVG`VnF`QVSmoYWmkQ@s33m66f!!n|QUKC`p`E-&z6K;PFBCsGC zV8ZOh;M?M{>{ym-A$TvmB!wtXBidb$X&;YJXb7GQ6uRYb7z;u+mg|oz-0g)L8PxK6)f8gj5L*jT+g@JT&2mp-8 z4^-dPMCy3qRrS6G5Wh6%&%oYW4M1cZ%u(MxmO8%1k z@|8CpJTI!=P_usDk`4RU?W|qDtA5??`pT8N3adAQGuv~b2ef|IiT3`B1LtmEzxV3N zt52W50jH1&hp*p_JbC`%-ow{-AH2Tv;PveX&oq19|8wWT)B8`Jf7h%&^>1#Csb}CU zjw%cYPXKg*2@8)+kB-lZh(@LzM#QCsL?wmCrUB2OfyyJq6iYJ3kc+F<^PM83zL`{~ zB#KiKNf|?ug{<4#RJn5V>rbPJ8KqbUuE@zJNSzWMm!(e3k4Y{Hh)6D4u$&=QgvBQ< zS+h1EI_d1~=Q7VI65pS|_os?OsiJVQB%J9OE%Hou49s#1%XbgUkIGyY7+;Z4usk@S zBr$h!a^7N=*xk&A?i-pE7MqonRURIf?cx*Z=n;~ZR~eI1kXg8}v9m8duW<9O{rP2! zle5bA)b?!H)3|c`u`_p`?W*lN(R*p-uDTs3dd}T_J9O>YsavlGuRiU+_^9pF&6bnb zj(4BicD!@V-uflm4)&eG2_uqU1h5^rj zRd2uk^Xl`@NAJG?u|9tP`FaEjf4my`1_FS+`TPTr_UQEoz}Saxzdn8Y`QYV;r|-YM z{PY!E*SpU@9=`f?@5M(jZLddvJbC-+iGd*;T2b9bKgTzs(o zSXW}<%JMabQpz?(=d4Vx+!~d$JUVwpNZO(ehx9Iq?{9#0^)`2OqgL#X6 z9}iZ{DYP0GW-m@ewzXtM;YG>TEM#{Qx-thaMpI;CIdKl+RBK*>5jhO#1?U2RnP>n; zlB9zGbzru@gxT;CG(%q*$P5l?3YH7TDAJZ6PjkxVcoeeS^I5LB497GJYJj1Q)6{u* zpx3x5dVqv+lXWLdHJLiw)(|7daYJ0fDmM!Gkfg`~ zXraOY#uzaec02$K-9;McrRxv`(U2I1^eE!PjmgL?L}-JqJ?J1w#Y@wzxyc;&a++fS zMfrON83%E?z`K&|QOxry<$4tZajm&gX0#w}E9Jzwguf=6B5!!&{BaZJfC(FqO!_yN zKG$9!E45>U5s?`j$pk4l(R6V@6);lhUo8o$VR@7}Ad7Bfq0fHdBxyXK(&&E@b&sP~D4(s$8Nfo9R*D9KDR;o=ub|Vdw#qb?JZ2upBqlVBBP# zzb5Gez$Q#Fn>vSJZ0k%A#u}4@Oz9EU+yu>|Zz)#nBuhp-e1UjbCdo0I>j7s^n?#N@6DPOfqa zN>c@;I|ZaU`KP%AWcWnndxT_r1!XARV;Fodj@Vc39ubvRR=I4;z?sWCkF;&t+qiV& zfvT0e7OdR8V(ZZ*8xNM&Y+bqa=fNfWA-TR8J&GF;^!5F$o$KvH1?a4x~fT-}8 zbWmtiYGh1$WNaD$EHpY900#65Rww%g$8kh%2Ie@H$UQA@2~QQyb&X@XCeob~na*)c z$MD+j3rCv!o7)Fs6Z1?g@p6^7Z(v+tXi{WMc635+WPDb9Mj@6!3yn<#FL^^<@*3*xN zTZVTX>)KmCc%W%`=-QKx(>KoCdfqa4^+3bGp~j)czKfk_uD74Lez0|L$BC|;Cpzl~ z&fj`7^5EmwGq)e#eKqpv-RI{c-@sBXI2gml~@!OGm&)+=%@a6uC zH?Ky4e_tNI`FQKeo8B|mFW-N0qWdg>cHQ3AsO+Vw<(tdb9ruo}iY;0nnYTKoXnkN> zO=R90pTufcb*W=mp)$Nk7E~bd&yo0NiF{H7K8f<+bVW#-JUCMxl&K8PbXRBl#pd|O zW(UP(rWIH1Janv~vj-U)>*z*t^;_NG&$^pCIw7`d0M^#gg*q@a0?d%Sv#YHOTv}H< zSS1ZwfOII3P}uw%PLM+a^y<;9?tvbnEkR?HLL*8zNFbuF3(7%gj?xPOSVMg+um@F3 z9ild%OkG{`pZ>!!N}&LQh$iSX4fGIAps@8{t8xIYP=G-p3NS!geN%m7OJh@W!|{gN zU5AcalcbgeS1bhp7Kot)VJN{EN+^~ZhKz@?qs1O2PQldzuM$h9+L9J&&5pK3mO4Zp z!UbQ2kV%$l!H5ED1wx0uj7i91zQzP(oQy2Z0M0=(vI0C-8UPFj4nt$e@Uk>(ew;Zy z!jc(j&5I$(Q^?8;Fnl(gNHemZmW6QQZ0xwHdVfuxKW+-xFZ~JAEN0KAnAy2fB(ZK$ zi(J)4-q$}nZyAO47i1if&JbJImCz< zX-paT-vN;+V_#sbIMm zOM;gQ0v3@}h1QyB^gu6r5wbeITkOh^ob6sI>r}BTg7S9;7wq!O-YN*LqI;D%IA-IW z@^OxN_R3tms(|2JNb@XHMz0cwEs?8N0Kh1oB?Q+3hHnKgc#$Y`W?^Ic+=Q=HTBl6VuM`vfigxanrdJW1p!1>OHl1P5k5bspJ*=xfW3wq!?Px$!oF zR2yz801U%S1R0US39>8z7~P|Y?3zPy%Y{gC$)-BP=Sm|hlgWxiJ7J^+GtiLesbl9n z*Ge|mQZ(0sJJXmx--4rO#n-`dbU~IZ9Ser81#`X`P1}raWW&P{x=H#0g6j$gIlAe;Y7;d)f zw;kVgsC~oVbqDMFHtssMVRzla)w{FHS5>Xpi2|&A`Hr;0Wm%=GDwge7y5V3}$*Sb+ z#RZicix+Gts#tmc%B|tk*Pp(4_Y>@v#&Ui8_0Q-JxGjD=b^bCk?)B@}r!U`Lz5j$j z>)$@?pMPGx{qSMrYhF>6HJ(kTi^XzJpMdD_sI-V^5V8^n01VIt-YYO7$tNh5#FWo7 zu=WW_3Xd-qd&JX}ku28)hAM`sj1ao2(~6d^*tq||k@nWkGix{g%@sIeZ5VWxk|%QW z@{5X$&twWz=C;(>l)Sr-o}Osy-*TYE$uE&93*)My*^bdPNjOa&&T<0hnk4p00f4!N z<-0}Xdqo!oCKN@am8;Xra>`cB)5EGfLnGs}JLB+w*sUCr9C(mGotG`I; z$rd@U-ne_@$FIk)M=socw(Dp|*O@y9n}(VOF7;lxUEh6f-Ogi`OSh!vE?l~H*P3ky zx9+RodAMcw@%Dz^GnXE`xcU73z4xEb-hO=l%_yMjg$7GNqo?mi09Qbx4_|+N{Py$H zcQ94IG_LFG+b`c=jedLj?h_)D6TkKTNIt{D|W2FyNue);j+rJMKPefbG~ z3*O!*Fm0n>@4tBa{KM$OSMP5tU zQ0K36i>>lcTON|VCaQ2#c<%auw3R`bt6ZWg6rn|Y-)z257T+sH7LX?QOQ=}8*E=?w z>k`aXh4J0vcH@ZM}22cQx`H4Hm26Dp4RTJ7BD(p9ZenW z2)(+xTiQBW+d9Soh6?ZkwXI!UZQY%%z!eROP&h%Wu|#vm?~X)BP;QMifKxy~rhn&X z@;@bT3M44HKtLd53=BX8vA*_1Yh7JOV`FP=T}y2(01V|82oeNu8bqOu|1FeZkRYgo z!&bzBp~M;^83>_QeJud2p&1zlJ5pO$ykNPh4c~_1jRFiy4Y42vS&|_F#=>kEkz)5^ zRZume@&KeW;|>K zc-nJg?09kZ!c@FClj%|{^j$!6$!Ggi3WFBg%d@P-X*S5xy~w&y;LQ9|HwI>IQN=8C zOI#C}yCWcHduZX`UTK?HK9zV?KEHASF*j%-L|#xe(XEi^T1as#A~5iWW z=rx)+-Ac=tZ_5nFa-u9bF;@H}D`X|DbZbtU1wGM{k%%}jX(mybO>u>Hl8cJ&p3ipA zWx3@rTrz3SX=KL~f;hyk_u#oQ|MZ9 z=bDh`7?Wn`I{?P0q99$YK+j5u2*XEYDb%$T>R2jtu`ZUBAbY-=rAqXRt-?^89atWS zn4VTtR|}#OmZY+!x!WyI`M9jNUoU$(8VdP7`RReI5~0zlN_%_U2=CT3T! z+gV>)vn?UJ+A}!SD<~x}Dla^~u%v3`sk4_Z-?%q?=IY1MFTct3>mTr2?>>LM|K!!D zFW*0Z`~LOkKbNlG{_&5-rTuC1`Rn&Hmu`%H{n^sdXKINv!w?NjY|XJm8+!(wEt4ob z-2KA*LSh2L69d8$0zwmgg5oS}>DorNg_UdB5`V693{|dXIL9-cV;Hg^zEh~PZ>+O- zl!sqzs5&FJaPjutCsMMiFm_A}Ybu2)1DRqeW>)m#sx=Q@yy-Z3C4a$2xn}}J80Z;M z7@1Zrc1!Y9mnr-+r9P<=?-cil!m!lEez9e-xho>ltJE2l2{{Wrg5!0JY@!l!;!+CY zQVJ6@%TOg{l|u}TO$$^fx%x(kmEJswo4GZ$qI%VrAHQxscyagH#~p_o&)$8}ec?{i z(3Rs|XG&`}2CCC~PhQH*D}VI-<<{N%`%hmu-rRYpscX@iE!Q8vK7aSw>ATN{u0Oo> z;=|()pI?0X3jPV1Oo%M|^x?|ACoeyK8TtMT(KjI3uMgjUe)#tD?bn}xpBEoS9=-km zjlp9*eD&e>)3^6ue!BDQ{q=`0?>>L`>f_hv??<11{QTf0H2L-QpMO4n{{i%R{&56e z;{1(=Pu_iQ?m2bg*5j^|mpg_p@2%}>9lqJne{i?BO?!@3E#D$kh0rAaJl80e zXB^ujiLQ!fslw7r79Vfx1b`t!VqnEOx|`a&8ry+eZOxtS05C)v2L^aSIt)9yfGQBt z1Z)`!uvP$AS4S&?8N@#Uc*YQgf@iD*1rnP7yJV~o&Cxj;|E@*R1?6LclK*RI)NrV= zzNNk%wO^p-y1Irs#F?QC8;bxc6kupR)|ZIpzgt4Cd2$)$7RoSm46Lc8v9YMTBD^rkoEm1siFOdg zo05Yq=}6xokcsbJV$VxNR-o4`DgpE|0`CPTj2LV}3U=TpK{J3H5pi7^05ISjB${5t zbb>S$>=&3Pdr<;Tlt`2$W4Y0$j1W_bzn+crq-!HzX&{-zg(6$dDS2m%v^ zPDex&#GgSq8+n8o496J25STHMv(TlU-~&2{Qs}BYrb_|aqY#kEaLomRV(6hd7^f-o zNaLoOk4I)pYIZD}GO`QxYPO`T_>Ybn4`{p`4Edp@$FF-e{+@UD~vFA?}HVEa^Y z{TABEvTP(7_L6jaNh)5R!E!4NOy3%ky*)504dzh+?mGuhy;iD1990lnj=7*CpIXNq&P<3w6VOrC44@=voQIO>bSh2$F1+iR@9G-hRhUQ_z@UW)2nc@@}vNHh8lBBXA zLgHpg_An*5W9Ys%oFJNGtZ(8%o@cViD~0P4yXNo44g1Ttv0_I=IU_BA(kT|C-2e4_Pq#nSDmg-a`z?vtX?m70f{A)X%DjsY~b z6NTx>5xVc%SAXDG+m`J|Vv~y2Y&qD{cdBFfdO&oM)IE_Z4#}?A6cS%_xaA~VDlC0* ze8GyK#7c#KYFzH}h}7!Bnw_a7D*@!-O09`}J0ceV7Mq-(kY1dWRhE)dk(^zTmRFUO zRT>tX5fYu|6A~wK^rrEY`lfcf57a$>J96gQ!;80{9&Z~Oy7suC|6=37rOq=q7Ovi| zPRefX8Y){*^WydE3s9%(t$GI;gz+xu@mJ$U^Q z%+vEvU%*kl`TXVZS#&uqsjdlE^4MnBFQm| z?ilV7kzCu+-O$$6H2l%jiKwm0Q=Kz_-}ea$!~xG$q+W4IC|pv_PvK3Xd+9z)Qak6 zMsT(yd0G;^EC@bk_&_s4kOeWsk`xLIvx6HtJ<^;KYR`|u2@}kzp*HL&q9m0lP9e+S z4vuW60{3^|lMxA>e;8~`3^JpH;DkvaxN$Qavnk4Kbl)#5I~E#)U9%G;U|3NizcRL4 zp2)idWX)5X&;m?IUh~Yw<7ZoqpKhoD*!*#m^~O&#ovuYRwNv4_YFR+3GHfB+Bi~Mt zDDJ5!TE==3_$jHX?Z#lRS+bR63TzSq9W;+BkcTJIgWB0NEH* zqGc)4JVq_mvXsul$PG!})&jM?B%a}xg<%JqQ9OZR7DN>=j3fwfV0&XJt~PWpE1DOU z>Sadsfd3(xQT#EiFs4T~+dYfnluVVyMCYwkXDtm)sYokbeyr_OVdbh-8+Y7$`~v)h zcVJv@@v_A$c5K;Q*E4)`+usd`>-rb3+?`#vGP```>Mck19_y}HvU%g~qt_q2?mK;F z*}DDd`AfrM3UZ5=Ub%7q$g$1~R~|lk`u5YvS8!Kgw7&oRb@R?6h(CY+8vXkH^@mS? z`1N0aLCaU~K6VeCbMXmNsC;AMvrEdCP-sGHJF+c~im@ST8<@?Rr)OYlWo|<@u_Dbe z!1Clic?&iPJQCO*$#nM=ic1{bIa25z(Q*3L#=q;1HV!p)o?W|Te|T&bo##wuDVYLy z8b>8@^7RXeFDzZQaof@3%_lpDuW#Mo&Q(Uz#NjkaWKhBarGG|h`9=r6SI(lXSyk)T z?rAMs@%PSSeVOI!@{v`wmS>l&D6U#NR~IW%c)_K-0;2sw6H;<2)AAOi=2m4CEChf> zCS-@kr2B^_BKvJp_=e^VCokOUK6z>A^8J%nA3;2IJVe|h@))tM{TYu0QjTDU5wa&=m9&4t^~@4oo>_jK#v z`N!|SJp1(R^_O2wy=QCN;jKM+5B~TEGBp$!HuCMq=r`oC%h=U5ihXKIAeu;zffL?sxWNBb> ze9_|F4IPJCx(~PX9Bb=2(cV+r-hHC2=RkcIL+(RYh0)#P3Cd`SGD7SXcC@{-uCud2 z1F+`KuBP^m=8mrBPM{YeO<$sB3`{c^)`85|=xzgmb#)`2tW(1_q;W^9#(SZ>0ihg1 zfdmn)LQDQFXo)6hE!tqL=MXK2HqEUqfG#xtyXrT&uTqg;r81-jfX8sohc^K90>RsW+>#xIKJSH-B0Fy(i-~9^ z_YyhXY4#$BjW)E`*zS7T2Rp9tunLbqv?=p^m6);Q?vWV_m z$`7sP1XXc^7XZMRKIH%~mTv_=ph_NI|QEXhF#85nJnSQ1Sz`XTv-uk2fvPUk%Gmorr6}U z+4DD_T)F*f<)(wVWvhHcQhkDxPMyCxboxs5(oH4htG4exe(B0BfYa!guea|#)r^7t zbLY{sFUYEh0IdK1L7Q(se>HXvw)CEH_6os~d3FT0jXho82y0?)Gk3lrn=g$`Ng5l4_E;bcje$TP_+ zDz9eC@wmKYZyBP{LcJc(=H=}S-Ee!2GObzSH1m3z<6-h6uQ*0bR& z56;|pa_Y*x!wsF`ap^nv9T`4z?(y>%PhY-z_WJdWd-qOWypmPCFgCr&**{w97TDBt z>gJ<2Pu_lh^m_E>!&jGYKY8-{!;24}fmL6B{QRuhuW(k(KL2>Mb@1G+=LZ`GuHJvOdPnV=JsmmA4i>I$2+CeB4JiSD2?O#3{<#n(K}8Um z9w`j>1hIcI&m(->@uq{Vy~jHSj<@yIcJ$SC_SJXxHgxpWcMN8gE@L?cGu>hd$_TPD z)HN)Ae?wz^XJ?~k^b714qIM0mz<42KLZW7-1|noKy{6|7FakVl>+Wvq=zs>T-3Z>G zsvYTUM6iT%3&q&Ka}-f%Aw+07RsuqM8qq5NtHv5Y4n7Hl9-@N$|C;KN=^GHifr0UA zI&lIRhEC$BuRY#aU#rpY*&NWazU~Ahz_u}Gh6-%}LZJnM^HFpm>uzWSg$<3hb@eA| z>*^9xvoUrItUce-R*1n#v3Qk*gPSG6&kXNxh7T~s1)1W4&GEmjm^mrbfg6Y8$J;Q~ zBylpJi!4jUFd~qyMP9svFxik8qUl0J00#5|EU{hkG|HtZGm$5UXpzY5L<+JNFto(7 zqxqi245uujB-w@)1y|;|<(W}@4D6&+wC%^uFdjcuXTlV1WL?2&##86m>RF00L~o^E zsZ&suW6(mJAc5wT6(kIDZzLE zKR*E+7+g)@UFjONMizo}ArhSO5qe27Z6q0X;tU&Ms*NDkUX($QWfB$0Lb+KE{K}oM~sDdhDEuDMf(sFJaF*< zFq?oVXHsfNTsbwlR;+FHB+30K$rz>*$4+kR*)XtfZ@RAPmuD|9VXS%cdlxJmNKVml zx$$Aatgs*!F^osS3HY42g2Ki{J?jr2{r<+?$5(#%<>;B4Lx;|uxNv81{Ost&C0$XA zBsM$0xMjiOjl2kjBub;z)ttL{+a9@e|i4=)t}dX_z6h%H!^|ae}BIH z_1D`^UpDOAUtZr87)EvT#khK7y#29FZSx;J{uh&)%$a1?Qa~DMC&lf5yR&PIC)7E?Qr(dr9a9e8*}e}1}l|HY*rpI*5A%k5uY-+uV~=KZG^ zZ{8moJ6_k?RbJb;YU9>Z7q48rejCD#L>3GSqX`4B)Q8W1zy0XN!{>k8e)Rm#&%Zu- z{r1hLuRlG0@!Oy8;kWwxpC8`7{{-~7*dE=K?AD+B=_wwzR$FJT2x{$uacb|@2ymjcp zoh>6L&)s}HeC*oji5q}W2)%$wAY^C-=|4Pj6cBX;4D1MkvGGHP#|}^IKYV!P z;Gxlp!wBlY&yblN|I8jl8T0QkFsPsb@Sq&}cZt3PEm4L+fLm}DEhi-m0*7e(e@2Ig zfJsn}1H<$N1`He9w{J3NzvBLV2)7U#>7Q{%r0ri4h6WD*-2#L=sP9gMR{_lQLWXGC z(9q!Cy?Yn+4Jgud;hbpi0IG`@$<2r5<|}shk97}{y9Fh>1|=bbVS0eMg`@(*{3%%& zR<0jK8_dY{rDlflihy2Tq;wE0Phz?=23aE!wJvwO3Zx1zEFp=@vHT(*N`@;|38g1l z>rOIA7BL`kJzxGqA~DN=R;V?4pVs2N_g%n*JN zJE@hG+#1X;3gqNt1jTR&3FZ~TSx-s^d=dzJBwuBf9Yo6wX5<6oK?kX^4J>&(JE?;h)qoLJg$OEx`4#>EFc2(mSpcgvfLR*IE(_*@ zuT(MQ9hCT19B5zie0pMguowVV5hyAT6jp>pRAR(cgqQ|s2YLak0AOJNmAFO-)R~G- zW=aP&p;?^SLzdM?XZJ>Ey5e$|FcWIs334Ml{8S_7?`DI3nNOK%Ic3%yWRn`}Aa6oE zEvgI`QH&FngNz3AO9BOD0UQuSs8_%T4i#313gNd@Ly*?uW2!0f_4I^BR#GdtU3}qE zdC{`u(p5?2Ys6WL1?daG%;-tYAd%$wdVm=*u7)J5g+PUpP)CkODumc7ytJ4c1K%DB z1A$}=_(uX?agwckqpZB8w!Sg8J~38aQFE|K-ooNQ{Td=JVR67GAH2*P7vo2i`4Zv+ z$O!@D_+VP1KRLmNoZw4K_97*E;S=Wu$N39#L*go#nig69LT^%{Cow*dniNcm9yxp| zue5DmSKsp&uf4o6iAkAMYD7p7BRC+Og5@b?StXfO zp?BG~HCu*{p1F1J$(x<~jxSoeEm>Wbq%M;yO44(hpw1G=@BjSb=O?d@p1jc5(z9m6 z-tmdk4}W=vPTbJXSo$?#D0Q4XoT2 z9LiX=Zd-~fhs}$p(xh}olq3p_vblfx)_n)g96R&Frk#gVGHY1UOok*YT&!cq6@^FT z(js$ck-Em7oyE;7tLCjMtnD2;dA+uE89;jdw(&*Fws!TcclHbo#xYcxMO<;bC^|X2 zusTtbBZy9dGPkTAO-^ZDc2P}SN;ddnTlcaX_nz)QarNlMJ3|v^k6*fd;MCP4-~aI7 zw|Bq(@#z&ZYW3~;oAP4jD7yQw^BD3zaHP(5+x`@6rq zy#4dbA0Gbt=*90Z{`mOg&%gfm_QS1*&mTPf4T$yQ!>8{*etG-h~+pm+t6VIo#U6x4e6MX5*UT z?!B>vOUQ9$gqR{`ay3O(!bq$@02Y;xm1J|03Zv4><}Ka4_b@^)1Yn0xjvhHZdKdr( zIkREger}YSEYgrA>5N!S%aVb;hbBfRj_Mx*Ll#R!=W(E={vj}AdOeb(#||DldgwSZ zUt|0zSQi2<02q2PWc;7}Z?XoU2o2OxhE0;`->1;Sf48Hwn?x5{nasaQ_Mg#xLx@g+ zEdip2{>jLmJ(B*{qI`$q#4Ce1rII-dsmdfupzB**DrHAl@ZF?yQeHCe??S zj$!2m(z3AJ!ca~@04>WMr}C#|0nA*(lulq^p(+5FOPIo&l#XHNVK}*AyaEs`5H&wq z7T6ddhY{Zt!Yc-V1v7IQ(RJjAa=>9IJC7(V4xnk=L!+%+2-8hnrXu>KUs2Ft?o4A3 zYbS~)CN_Yq5F|AVliR4$Dh#K9o75&$%*XJG!UV+;>JG7b0ftuss^>;Z^Pp$}LU>7q zK;21oLUxp3{2bSgq0eVq0gIIZFX*E5ro*G*R0P_jY2FO8Wat#h& z#P-Sw;tCSjq__+pQ5wwA`BIh6!BNKc_~|BYK-sCYt)|X21N}mFQ8BQYW$I=+2kROb z<4;Nt4$lLC1+fZ9ku^fq0)cV?7#KOGF-TAW@#mKLb4&fWB>}wu0W6SR638tHi>L`t zn$JpIz)a~1mDC0ZN&|&u{`}GaeS(DL!J>*#Ni}c_0&GJQEUpZd*5G35iLnjgNo}Hx zMUmM{;P*g{t&PxhP@>CheMPgZf~Fccd^gkTyXj`%&9L}xrtJ)4H*+TvhLuJT7ljFn zu)? zP?jnnJk>v3;X_UJBBk15;=>YZD4KRj{$lu!?23(X4vX|B$785*tGDcL?Os;f-1+#| zS1HOI42I_Ig|o5tw6^qea|{miqef7r*>YWdNizw{s;p=wlLQwo-1zp_w}VGcuiQ9% z;rhc{_g|j9@?g*C>GHbn^11~vi8`>c%>1U@;?~vchIZ{el9^Mk)D%|MbhLH$K75Qk z)Qk>#eg5|C{iiRV|N8sRgU3fsU)eu#VcXtAfCM~^M`DTuk#SF+{rdd%oAw2LLTQ4l zr@w=nk6e+Ftj_htF#NEBU}`K$qzRA7B}#O7aW*r)K%QMcaqjlA^*fKBy{Xkzxq1X2 zI(j}urIROTrz#5N$vMf2yxPV^3CUTq#PnFXcKG1=)`gqsk~F$B3-l{IDu)Uri^^fg zS0BIq{u$Yv8eOU6$&1%F?>)YJ`{Bh~4-THbyl4ExwYxw6_!!yN1OWEt z^S9qWeE#W|Uw?k_>c?N6-+u7q?Z?mGU%T`9>tDbB`R>T6%jYiNdj02zcb|}vt)G8= z{q-xdWzE;W{ zh9p!{BxY?71SQs?V0;1dAMla}E@*1~K3>Dlm+K;uZ#YI1Z9h*|(U4^%8vhzyV0IBhzZ4-Us)n6B4-6)dU+&K-1^x14mjJ+^9>6LIVj~#yV-$La=lQXV zeb~jmZ~>eJyz$HYxW#}je;!hTgaN>ih$~TUAU8rddVozgcC+{8W4T!baS0Hb8dED&b&_N2@KLomNgV`e z3eo@2a*P;$L*T zIwN&U$nkYxX|%*92*3)>1Za zb7EGrXPC$-fa4M*a0wJR1qxk5B7F$)LA2D6aAhbv&5y3|A}4zhQ(TEDw#3wslm?Qv zLzJ`7kEsq~q_SoCA>s0{@OYK3?)XG7x`&tCcIz>!O5FF*MH#$%{w71U+q)#a45 zO6(ANU1IY{gOnh@KnK* zUw_*%I5u?fth%5rjGKZNX{gdHW^67!Dw~&3C`c-aNvliAZByj5>B<*2b**2y@!*OL zqlZphU$t>KE-Bk`j%R#Qh9piQj!lhEMK*a!(dH+o=Ye)CH_-{1V{ z(SygoUA=Yxdq2PX_yvCJ@Vx;n?f17IR&Ck=fP^3& zjGw>Ve)N3bp|eNMT;Dlzs(abC`mU7&n};VZ+`9Mjeee3g-VH<9m0js29jb!1%<=`= zvIRLceOZ-DYPxr1H>^%9T_P{*ORQMRQq)r8OSy_Vc1kr~nim?89VX7kM`keMbfVA3g>umQ_^8kf=yP6+xKHj7i;o;4lCT3~c`)B$GOY z=6`kt06TX4@CjsgB09Yu$^#P!z|d>?|%&*rDh z6Dm5W(RCgqtp_>Xg`fsR0l2>9Ph0C8ieXKLmhLv|jr7(6cbyLNeUw zfw&Q6z&vm@&@TWUPQRCbAg3@)RK|>N0){aY8pCDvaHS7j>p_&8xlpHDcuq66pE?`3 zWd;C42Eb-p&NP~1WaDS&$@Ru70_j-*upmZ$2nQ(G#7S-gv%!ih!y+mIdF27f^o>#< zW|0@8z?X$=2?qM*$0+upgM#F_lCtOGG;_jKc38DLJ;#q*>dh+f=L63QLBDWO;4X0Y zZzal_0)^#4z^%yY;D}172MWpnV?jbF%P{a45mU`k&LhXv1aos;uyO-C;&+BFQ)XIC z0eVd{`)<1VceCcqH23nv#)k5;@ew5iak)@6KPsySyp56EMvHI9Mb_&LtSU63GBlzb zA60{mEXPVpags7xTpcs9iIvlbA# z6lHYFikGnztsGT*T>es8LIX`!&q{2j$2Gv$5pq;DIjRPJ)!}hFc;wvIuiq|R{o%xgTUYNq-Mo8Z)2>6SHtn0=vo=08FHKid zUbnESX>oR8V@cKg;_~+Ls?NgFrZ{=prmcJRH`2e}ef)g);jiZ||9I-+om1c6h8#V6 z9kOHJ(SbEPH|*GV|MBw|zrVl#=*6|$4+<(8Qnh(OSh`mL-oZUc6s-!x@oD^2EHjZL zOs7ZXO4IAcr8GLNCL*OQKBGaVsm(0uEU4-pKYnY~ zrjgT^?hdTk9gJhUc!nk`b%3tS{7PiWtL&1<1eGLSnNd&~os>NJYw{~}Z=Zg9Ln-{LwzIFex6PNA|Pn!)e|_=# z?bmOA|M}tL)msk%fuOd(JbU%iqo+Ur^6b#b@6TMi_3F(ZpTBff4K+*Z=mU)QyI<&MMMEBE$q+OH~TP1ZH0=C-H{+OsPc zY0DO-mv(1XE-7ePom{-IeBrL_mW|5lWh7ZKJ+XokR}26P6YE07*%(n8DN@Uf(FzhW zbIO|6ZXew{c5>+8DZtpS(Zll=uN1|mQ3Of?Uyb7>DGO`19XPxX1=wK(V8dgF07#<; zk$D`W2PdFJ`2+w%rg9wr2VnaTAB2p7Buz{Jx{z6m2%|X)c%eb2 za_A=+B2uLv2}3HwBm0L(Mj<0e3lIwh7GoE+1Gvu&lp#pl`{tg*{8>FYIgTSdysDbMU~=alu;XWC4gWj)={ZkCCQr32YL zKG_U=pB< zo6;U0-vsdRrf0j8wa79P6sg-n#l4`3sEG5dxWdeidVh*>s) z$(8|0Ho>X3A&NN|r8`yU!^-#N7WxZ{L4eqb`Fu^cRM*c{bpy;$@d_4~LjpluBFcjz z0AQsd!V+MED18BjU+5p6VG|&kZWZ_)vU;x-vR*#WYlhVn14lzUj1O6k;b!1Og}@Jq zwmYG4SyJgL0FNkR307Ks>#ZRk7H? zKf)s{E`X}Q^Rq*_8NQTMZ&Ipbu*^Or&V{1FCDs$P9qhs-l*BrmC?}Yu!txZs%%l)z z5>=eel%&O}N|Uq|*(GgDR_;trDF#RJtx1vyZ^}dhtJ%&aO1(~#KrA{$6C8q@We@25Z3jr(w4{`xoEg+HIU1n9bZ>iawAuHHLx=ElL}mp1M^aQ4cN0JA%fUK~8}{jqb` zca2PJ8yefR>p*SmqJgzrDr=iJ?;1IB`kF+RP2nnt90ggB#*pSjC@U%A3`SITw6Y>4 zvnHpkqpNT0h8>62Z8@OHtaNk_bN0k}_z=8nwi_TrTyL;r+_K~x(nT>o^ zZA5xwX5CUjN?D}3N}?#ut6w5aER0f?#VX5mrSl6aI>(M*Uf936Z{@C@6p;9xGYS$lIdZj5EK`7fK{?kwXwlO3x9&Y&w{7J68xM|u zfBV46YdiLzJaOg6fepJ?Z{63>Incd)^RBTI$G*SyqaI)nU;YU;_Uw<3Z$5r~`{^6F z)Mr4~x4-|=uiyU(9P9I!ulhb%Fe>2CyU*V~eEsXu)90XHpttvaetPHOGvuL#zy5yx z<}G;J+3#<3_N=OG?AkSQ=+E~bktfE!{q^eIhtKe;Utj+8Kk@{zFGb4}nn~K~)R@27yLB#*o>G<42AFw7|MX4vvo= zIyidh5CX8n`WYNYj~)P$9X>jK7##yc_=F+~B@+rTw1Q@mUT7m=>ED-45(_Sapf5qW z1wrd@+5Z5xe`pZ61>yx61^q%Ea7Jbl0(d~PfIO&UArC%-jg5{V(--wK3P<)05AQ<^ z4AAwDmg$4g>%SEwqj1?E0Bp~$-8;AM+P-PF@H%k1Qz- zkEsl0XL{li?EQE~Hi6R&9T9*b3vgIZGq5u-^PKC(aSw>|3`zA0Q~8lI{3w|?L5V1J zJ}03)gi}b5u8qxH%$BzRCtUGrcLMTsmp=p9#y92pB1b7gpg!WdO)vea|OVT1}Bw;YFpi=;{z& zffq?R*H1LtI(Vv~BQh0YmN^(0B4Gv=(~NA5tURn-DejnrU`AFjE6<;q6Tr*?Dul;3 z@Rjof%K3P4buh0SjLMf&;tj;&6#KCXfnolvLI9XIJ;$AtWgDol2~f-pR@;YY975CV zF=-B=YIky`Kc_H&SA>tLp(Qr66!W;MPCT;IVHMa|cv3r4F^{F}Aj;}PB;^!&BUx4# zDk`DG)KFyAA^bcas?yAjIn~5_%B;D_Vpr2GzMFyU`7+(aZLSY1h^fX3bhwBjLSzL! zp&=rDK}yBisN7zl5dbn2p;s+NSWbwl=Bqk1H5;`Jn~*eZ$!Ol1-L@@%{w@ex*-TET z2Zk|HJLt(BOhpG^Oq|`5RIyfGwpv-cNt)Y7l+|(6^P}?mA#p{^BQh5O#^Q@tuu@uy zvG7srBC~tw@ZqDXsIgUUgd{T;mbpF6-h=InkpvT@OtC_dQ!h*`b`Onq$0qnumEPo3 zPhyH|m>kgM7M9|UO?3>DdxWRcRBeo`Zc$-BIiZ#qS%~FlhVj&a;Yp!v1%a=@aulp+ z9WOSAE>^Rost9?uG&zqWRWpT(a9#=x7{-eC3l8@UqDf*kqX*BtdHZqv=oz@7Z`?W2 zzG&U*ZDYF*oL#^D;NaMWBWG?tfAit^`7545WQI7AC6>n|YO@OA=3XmH&3yP2yy5c~ z4xPEyw|2+Sp);$t4DB3-I~o|m zFB^6a!P}m@{!?X3Z*pc0U7(=}(?~ouH6nu&p`}SO=;DlUNhUo)!w{=Q@i|e6dGW~w z(eXMAJ|ZxbTTt2pVew@_SY}3E^{so)Ht#vw(z98tZQ!XJ#2Kw6om&dq)=88VlGLKb zYlmVq6$#o(rLKC_){)Al-nNCSdsplztmr7HY&DkLd&W*&Jazf@yPF^Z3X^_v-t{A6r*C&I-@R_{iIkj%h@|{j zO}Vn5MO)rk*wkO%zOsMoMCa7lKX`1{_~D_6iG7DBM)k4< z0Ml~|79SNYEYnGP=bL0wnm1L>GeRVN%0!jKNf~E3~hu801WhN z*N&ZFV7s>N+OmGjhSlrWEML8L#p+c9E0^~T^!F@Tyr_5a;{N)^Hvb^(oVi|>Httro zUKTdq<~ClYR$j&y-X@lQCYFI_));F$qKzHZdMjG#B_pn$SciJp-uc-!e zzncl@g4j+sax%3EcJvmx2g*G{lpY}}Pkfp$Ig=)>6()Dkqw0g1d6DWasb&Gx{ir&3 zT$%?y9m6ROsoxK}#EX)xpFN-HMo9M}X9lzK32;XiRuDy%q{y0J zPEjDM01xQW0}PxD00tfg`URK-S!Bl55=6y5zY>O5xZJVtUGGo>8>78Y4UO=#t7 z7J=EYRUKhbl>iCA13so2BP?blGzc~Gf_b?f#N=7F_^E~-$m$!@Ev8H}|Gybl-_5d{ zY3}0|A_-=tVTE}(aWPR^2>^o#)4F2v`{~IoVUg7s{p@)xvLbLbJEcXO(Iw4Z2oYy> zOR~F@%9p1%ZB*8-VWc*a;_FHAjr8Pp02n=a9*|6;>x;-*0-py+1~}xUbtROp0(60U zi82>K3-C-X`>lQ%F@T7=pK!t^e3OeIlTV&%m*o=Y*Y##!1C96cC5L4shCG&DSc z6IW>GFAkumV|lqaVIG#BgW+TaGc(|K?nP8Pge5zXRQ{qOhH4%J6Hye%&cq3GaDq$> zCk@Nh;&@stM?;fj<9R9~Ull})4GoXYuj%gS-Bi}tTUy@}8L#7rRl1_)-6N+v7Ok&q z?QfpHB2iVcf8t_Y+tLJeSxRZ6ravY96ojU)Xgn>k1QP6a`5!+h{OU; zQW;B8%TI5PFYGGs+9=O#NX==e?p&E((w>-6*}r~oSKr2r{Kf=T0k~#q?E;P@(Z<0q zRgoic^UA@%JOc62DVgW4{BZN`{d1RYUB3C# zg&X%DzIcE4$?vxwJpb_J+p`z1GxDqOjEJVL{`|^TaMtYNdZ;vY4Q$&taqil^t9PFQ z!=C;A9-Qgpx4*uio2cp0g$9uJPxK2*zW@B~&ktW-|M?LeVmxv7a(Y%tl1jIJ^Bxec zAMZbU{pY7k*M5ZDzW-$Lz#908nMHLAdRJYze6wNR%JlpWb#8M~c5O}P>e~6M<`3+s z>s~W*@@B)LbqN`j($oT3dU=wrR$JatvtZS{Wjp#dj|0ZaySK?odgF?EFcDedi50Bm zO0KesnOsVa%EgJ`A6o`|TOveckRT#0Sp;P|QJhAUq!A+0@d7nbtl%c7cOO2n`{2aT z;fdkHM@IfJEkwD%z)*nckp`4P0sw{1X1ma}+8HqqR{gYux7a}^( z9_WSi{-J${4#!GJC0w1n`Jh`$Yz$gtBF0vAwUp7)dVrK0~tAf$RbjCAw1+MX+mTbE3qwvUlPJc&;w60)&{@lRm>E@x|&2;*1n)TFa z05C8x>!}6~Mz$gT2EfHocgu|G^0frJ#*CNg71qlOWiqaQEW-VqUHW8yrgSlB2Zfql4qOm2$ z%sR|^F2TW#<{ltGwpL-P9D<@S%q%Qd=R;O_lT-ZZN=F(lD*U_^#zQ6hC!u1E| zuiZa$_1@8QH;pyPUdni>`lUdf8oYR(& z*;3TJiWHGfibx{})D&?#QK$ixBnUJFVLDNe1~A5Pm3Ve4k*g$d6?k?EnU}(psHG_d z3SC`&$MR+C_s#F$79OdkNptX#xolOfRM*n5WJ`X{l9ZfAZTb9yx`ioO)q@AWuW4PX z%&eBmvrb;PTi@326-4n3rlw_;X69CA=2xNs%Py+UEUbcP^D6*dX}M)kfzrViaI5z4X)>kG?T_U%7*{M5y5yT|q)I(7Ajd&kdQY-sC_S7-_0g4DF4ruKp2 zs%}L_W2&}EmDjXv%YnSwMR|3L%3AwIPTlBQxpQF4{>3YI7uI&G^BZ!jJF7dF7t}AD zKd^o6o)fvvD`Sfm3bifNxB{uRS*&T0q%{bYHH`Q|Qe-w(m>$AaVK^!rPZP#f<9KNV zp_VAtQlyy#aT->T6eg6#XmhvjKZF8o=+NO|r2p{9sD2ra1BZ_Ry++1?Qvbym5DV!l z{AYq9w8L5C0=OO-3DXaWO&ms6>zF_$6hZ)5RxEZ zkY2B+h)Xdh*+}7N}&dl7w!qU^+ z(%aO^&%!puYA(*&fjq~VY3ItH>mhaYmbnHbxdkP=VUpcL6&^Sh-2FqjI=nES5nB<; z&BkyuNs$E}ggASDj91YF=?OoZf{;{4RDagarm=t%c#w|?k zOU?p@0jucJIP&jGM;LlKs`S$uV0d}h@H|#jID=+MOKAM zDnP&Zs`kvLO?mUS=d|s}owqBuW4Eq-r>1d>reQNLy^|DQN0c={^bBibq|O&*_DXY? z#TKqo)oqT>U&=^r1As+jEtcl?K|sR5z{ntcNzIb%p16W#vZ7_;jBavFHC|leK}a@t z4mYyFnpg#!Sp{3zhFRMaZCz-dm}m!o32+O;)wvUr8FA&AHLGhD4wZNAh)JZV zO01+DE3OC?mIQM0d>PpulyrBp#+8`tN=Wpkr25cOJ&1`;m}pxcu7w-b)}3naO>^|2 zxCPMtvD^S0Ul5(v*s*f;<^$`tk5@G>scT!-(zRyc(wz(Xw&#_131xYlSRGxQP8Vso z()8qvszobzrWG_KYs=zQd8z3I7q9<#=;Y;t$F5wz^Rs@y=C21&UhSW_Fns93`0-1} z&fPwF@h*7A>1z)r&i}CY&{?>-A3k?|{PdMwV<*<{-hT}E_UrFIKY#P$kB^lteHE=M zG)3LVXG@lE3MC6=so9E*lC+$v^xT@v{Q5*yVR?Nw zjVEiG-~Y##zmA^2cJslDCx3i+`1;+0mv3IZ|MdRL|F#4DH_V{^`Rm`Gzx@5_%U>6+ z-7c-37aYds3KMdQ8Vbu>E9)2J7B{BrDwOGkg=I}y`IRTnUik3k>&VzdM084;uDY;t zLAmywOuO;YZsI^FWInXV$sU&)g65`^ZG}R zUtP6rJiDehxnz+jt)7=s7MWHrQP)Z|wGql{Zc+&~T89;;h4R!P93_UUf(jD&n~F#$ zOEZWPO{hQ~#FETkv3|?`vE5_i`wk!3J9cnr{19Z{K_J-#*w`e%CRqh7sDwe#Q&1k5 z&_4<`0XYN!10Wqbd>FAU{c68Z(N~W^I|?Ky(K@uFL9v9EXk`*zXbXxrv;_i(Ko=;{ z{AYOg?ti)s2N8fl;1H3p;o$?ouA!m*!^3)LAtPQ8aIf(ZWIYW4*!U>&d>8<1TtDLj zf!Tl8?0~=zg6Ka0GJO#Mwr^-J01W80dDDgs>(;Jay>j)+RV$aTSh;LP|C0XxB?G;S z`xkciR#i86`G(AO_O!8gv$S=#v~e`IaVQe^xHLdoV0a#o$)Bdf3(AS23gDI>B^xvgfHz4m2ueGms8W9!Qici2 zg4l&%Y(N(z5tSj_LLXX|FFo6zkwXxbQX(tE_<8=}=`Nx1W=`R=ECZ$@3vgH?t8dIQ zpEko{`fTf&#tz1|0XClD-sB`KKU=Knz>7;gsTqFETz^(Rum`xsl(({z+8GJW1W9cm zr`VT~575%@rBVbH&@TX(3qHdkG|e##JnWxdM0-q{U9iF#mmb6|qQx}|RGsYPHdazQ zDY`C1R6&+C)8uX8N$sqZHoCkCC#@vK)-qGu0149U#lo~sY*euuImO6{I>pEXrPp`U zEv8Jj{%+=+nWo;Jq0vNvju=rykd%hY8^xK61e(r>^lk_vu@&frkFG@*KcvX&;0@F2 zHmIuCCYP^DYuKF8vMs4{4ZsqZL{Dxe%j*eo^#Cx6yafOT`X$U*!b@8u%7n5DSOt7V z=XAg!R9MP+$XH!M1F)8*XqRR$;i~5&17OkBxQG(_0I9J(+0YteY8`B98DL@&XgLRG z=|FN1k=pxJz9PSMYxjmzOj!j%T0xc7(_{_Q*g8Ta@^~3W zQ0&Ld@uF#+a4B}d@%AAyM@)>FJIm04Wb8n+aHD~QxdwAxgIVsuOt&DWTQJKbgzX+k z$1|fO^32-yWp(pbq-0bpvm5F<*3`^fpHaH7uzp!;cC#=c7ZgX5q+7OS-{Et&k6!p; z!P52jp1!(p{l}kQyuNt-?(GN9?>%{S;=;`>gNIja9NM-2#DQa%k6*Zb|JS$UC$H=} zaH@O7)(wM4w(LK#X3xR3dk*$*+`Dh$+{y3nT)+GD%I#m)?LNF<#qR3P^{S%I)ckq0 z$P8MfmM+aC0>(s;3@k4_jHAJFH6cu82tyIZQc@x^n9(_!;sw0;{Af)TPnJvJr;-6? zTnI7^1j|tbvlY0A45_vuHlx0N;l}pQ`6GDvVLCQhMfm9@)|f1 zsg`!$*7iO)3QrQNNLA-%=*qM6s&WczfMi)ns-Ogh6;w6_5g2T-?CgynpZ)&!_4^M< zA0RU40_h2S{`;SIetCKR%Du6p7i-!U5?PTnUNk>CDJm&FUXc?Kt4zzS45je%%bRZ8 zfBO9o56|AXf8y$$qnB^-42Y$FoDK;v5}@@Sz8`%0`tj@EK)CID5A!9- zPVny|R-r4b%P(sxEN?C-ZOSXE)8$udGK%FX8RgZ@o3`$q-#w63P{)r{rR6q8C6`E( z%M`h7Nm&gkISsP3vayqw%bI(d7p`8oa+^$*$C4y!@+&int83a9wJcmVe)8(x@$)Uc zn{ylbgo=`wbY#;RQEHhewOp*K;-!>?$K_&$8lo8fYSdVs1`@_oV*q9xMF=|?D@er& zC7YZu04yZs6;eyG^B&*OCRLCatpD|$7;2^Sp3OJVj*)OyU z@gEOE9|#-X2SNH6_1%mp=g=#`*q}rw-y@d+$wm?PLM05v7?dOWhn<05yLN5|1KYH5 z{n|CF)~#K=YQ;(b*g*fXrF{c^NdIAf_rksurPkir+s?(u+TPv5#@Wou$=u4>%)-&c z%--D0(ahAr)X3J<*xJ;@!qnK(3?Z47nTfSIqGb+dW{$?DPNwE=CKleNmO=4!}QC~&p{UOHL#g#Xg}T9#e6Q# z#W%t&FwQM75j8NN7YZ;>Lb^Xan-$+A(R35U6+kcG6L1LB%A2gk2}-EaYOSmY5nDJU#7&?0m+Ec+CV`WHKCOh*F=nMpu{%>i%LQzsI;}aCQ2LoCGvcksvEt)4y)*ZQU zZQH)1yAPb)xNHCDk#lD+-Tv+U=NE53ji31b)YZF(&s-fGKe=i5fepLHHtssObM(aB z$FKhU`t6rjfAp-~TF}_p*1w@=-R`#j^%e7aJNhz)JU1Q7QHQZrShgC+(GYkVnmCgclN+De=oBJ|P?V>a zc9HoCsz62LAOItWft)x zWC^Jm=~=}*u{@j~=Zj&73sbq#S%Ub2tcu0yC7l4U`1G>dKff%h>sIGfpE!R5z`T0P z?%vhwdsnYpv1tp`*KQkLwPoLm&BMD7Ug%!AOI6S$O3aliN~NmuC`}bVv4|0)BSnB8 zr{Q=S2$ri3Wh+BjN(?I{gqeutCKLDxQbqQLJtNzOM|X~n?mn=8@7UPT`1quRLG;t& z5z`tTJA}e)5@T>`vJL<{FflO-m^plK?C_z3dVm3qCP4+@ff8C!fc?7!`~Z_6=vlNr zJUW7c3QD*Jtph?(Zo#`ji3aM>_@DhlgMg*c!Mz9cQxH)sA?O+!904-}IO+GdgvQCB z^g`JN0b_$h1YppvS21)j47i1g7aW3nLH6w4xnuiQFfasQYgexU|5~+b`SRuceM^`2 z5A-bV>sj32(b>b`M%X!f+d9G5E>BB456d|o=GN|J)*dDnZpLP=CZ=x2MouQi_Qu9G z#(Eorn3>v`o7w=?OpI)djckpL?F>!q48cfD-HagS-e%SqAeogN#o7s(QRe8ybM+It z1&G}P#g1M~6KlU|hW1lu+n@lOX5={2+|$aL?Cd9Y3y5NUE_vNu=3&<+F_>}xlA>f zgRFlz!))3N^XW6KrvVJiy)2zbZkQNQOp&T3A-`9eu>c=g8pH#76@UcL;_4X*P5&?~ zp#>+Y(r=!b5A+IPBL;>t%$t_yK?V=Ybiro*lCB5g$sO$5zZI#WmuhYQrL{fMF1pvOT$Ct*T~Ya`{@I zS6ai?)&D%ANo4IN839?!uuqUpboX|{8XrahkIqC&qU;r>-Mh_4RK*dqd2YNw- z84IBVdI8eN@&=NujwWvmPimnhHW6d0Lq)}IxKtA-rqLX%kyVhHO@OJT4=~KwGSJqQ zKF5>mfsH4N3kea0^1NPk)!NjGRf(l5lFL@4)veEN+JX@j>DRbw1AxIV{GV?O@yO%S z$ST8;x}PzH;a1=YM>B{^tGncYay9b)>kybNtkmn?F75U94mZ>(tQX*kkI!ll$_q%m6q+cF z!dFs7DoTVVjFXsA(VbqlkQJ9beDd0|Eu)&k=2TtvjsvH&%i0z$+g{buS6s7zK#%ke zq(($4sNoWK?=b5*uEu7z7S@h-4j!(aL4Ltx23H!Bpq4ALfI%4x88g9+oNaCU;Odz$oZ?ww+(ICcksoZAO868`PpxOK6&}> z?3H^%2hZGp`s&sDufM(heEse(iK+rOAA(;HHA7dCU08)Cr>I7kSDBGjl9-Z_sVlj7 z?asAZ54AZJ6pqv_fJR^^u%ud1Vxc0xU6x*xpsmiY={j)i`=YuoVT|g=ou4;s9lZa` z)0G=GUAuGp+||qANvk*S?(AJt)wFQlqBY9ws%^uk_;KmNglv97jwq=xBC&`cUq}(c zUy6z#NC$dhn5luZ#6W6daClNkxE#w#B5-ASm96V{4sIJ7-Z4D9b7W-C{{2H^V}p|& ziQ@>g&`v@WU6US$N*Gkoc4XyWWESEfB!DGA(IJFJ5MUT!1|Wn6THp|+6xu#n|MyIK zRJNcpSw{qD|0voxd1~^4|DYX)Xh-6{UAsp1?D;pwP(Dq93avm;fK4(CdC8#O#{N5Z z48u9oW`odJO`A1$nxUhirQaM^hO*&$7Sbi}u%$JGNZA7K_yLLj^_D*ji*Y z5OEpU0NhEL@@7g5;!hYssUBc?0qg=O{aFP*^gKPlkd8!9F(`psP(d33Z^7JBq`#3} z5X>tM;g>)eEG!EJU`JL#a6lSql_;%?99xYQ7vm#KI4O;km@*JYQzzO~WB32lFCR5! zhWU3ht)|Shn{Mpk7A(c{a|xnCY(yy|p;4T%2;3_sZblKIzvW=e7OpZsEl?qR8i_IS(0l^hPPGNPJb}!i}r9AKW~6 zc+0+t2hU!=c=P`C`_E5bzrAwz(dNBl`;VTxeEZRb8$aEC^!(QS7kdw!F0Sj!t(>>> zz^MzjA8*}%YUPgct3N$$?_ITg%W!sidrn33nae+I*gAat)WzR^|FfcIzBZ>Wx1^OP zQE(%aETNJkNsEx@3gWW)vDv~nU1C}#iIWsWiVC62uPkB zORFLC6l}4UAxvXQv{Z2#L7-F=w5dzxOI2luzJIW2-C#*;Uy`o2w54BL*pi%4m0#7F ztSt{F@Z5ayj;?{;e)!k~&EUv{JXvjR<78pwXlCVPVdHEy$90Z_r>j@6XAmxk6dpnf zKY#7^!{@Ii&R^Mi;OMRc69-OQxc<{)WG$$lUp{#L_SZL`eghTz@a5B293c+zq@?nr-{>-kDR?WaqilgYd?(~JHKMfu0<<1EnUB3^u)!HlizP1KHR->)1@DN z{{6$3>-V0YyMBMq*qNcj7fxQfedm`~SMNSKc=8I78R_he4I}e_PuYdl$S7TYrLM3# zJGU$&yI3Yyx6NO2<;IVoxAhk*7MiTPo2Nm*w$U&wkS%T9ucdqY3plWvMwSa zD^*v^kIUl4=)%QXJX?WfDaZmXk(Y+&s4?{9P)2eXJ2jM*gk{E4c<~MM`!?(x+OlVG z$G(xB!=t-K_U}C~4giB7!(ayyZlMN-f(k9c#!w-f3<@yNF96tnRI0`ibDAU;N+tjm z+JX`bMc2RE(Tkxzc^P^oP-GHa{|+i-5CmW-ji3VbLIH*{X>vtGIE1s%f`CeYh^&tI zUljvxK@N`~OD2x(|7VG*N&P|}AOnDbexU$E2Ef*@UA1!g$`#92EC+-w>+c7K_4V{D zUc7jTQj_K8gPG&#YvTWp~=j0~}peo4XqL|DDQCW*PNiDdDQgPY>p{f%AMvbildVz=O zcg3tmxrG8upF(6F2Ln6|nabfs%K@H&mLVIJ{TFONFJKr*SRkhmWmo{OD1cw=&npTP zlmv^4NpUrjtc5XoJshAyOeHI+fe=~Z7!qq}iv!=9GSg-X0x;7lvn;2~o?|>WB#@qh z;bn&ka&gE~xwXRd1<|?v;>;zK_$ES3JwCb)#0vn4i>kp&t2wFd(K=*7jYuF+#zOEs zP$&p+2kbE>*y zwY3qcrD8={L~5B>QNfGPZ|&Lm+sCh`F8|QKe$Uo@M~dh)*k=<&bHALc{N=bC9MmV zZQZf&`22;-{`~N%r*AEt5h<5vd3)hpT`_L%*npsLEJ4U*$BUyiF^SnR$-0d@4hTxua(nnn>RaXdvRPZ`8fhVa!yak?b6oE531^AsF$8ikue6)N#upju_3t|1|_ zZs(!P?R}f(^>555pRXxuo!`GbIip%6%i=^TMKNlrOruoi+1h!!d4|v!0)Z&X%4)8G zfw_^1jjg>0k;=7m^s=&ZvvhE`aq&t@*FF06^^dHts&$IB%IWRzqWmlTtFyUbuAh-AAHRi&C>1aI7RES4rZj$UHTXqX=Urhq6-i zU5H5-MjTa;(6@TqhMj{OckV_R1_0Z$e+(D~LAwwER4BbrbfKASK^uW^=or}Oq4AM} z`aK~5NC*EJwL$?i$s`m@(1Ml_xCR9kdJTH<_WpoeJ7KklVJJg8sAZ5OptdLQb*`7d+B?$9TWaPRVdfz+ zbrqO6atv&VhBgEPE3A>_gps_YK zv^6xeHZ-&`Ft9N)oMUJJ>NeNN(9XcXdbWZ2%vt8MW?RpiWjh;e#wO6po-)Uk=jpV&6?gWi1UgJ*IdQvld>DkoiT6{z~01WCO zynJp_qX#k3Ez4;a%w3Wm(2=cv153YG!nAi|7= zTumonOrY(CLwa%xFTInm?Gk4#iZ5QFs9MiRY{EyDdXN;R&P-!ltdWJksg*yV%M=U@ zVijoR7VZ)fO%UdV$5v3Ji@{XB8z%9`z?ol7^i_N-gBd4J#f zeOYDg`88d6)eB^4WxA^QyT{HgUbc0`+HF5R_=U-hE-I>H(k0j+Iw_RNp@>)n9w~^5 z@x})G6JlgaSxTl{RgjijTiLW^)z$<1Pu$ota+VUI31KJuhRcJwsYLKCerhN^8c&ba z70<(m$4ZlODLnbmkt>z$1MBu2?p?Qg>Biyo;@0$%`I404yvoHfDW$yV3|54qXZaST zwm43%o$Ki9;t|Y`i2v>NyIZ&JbanRt%sjk97A{%2Var}u&me0Dk5DRm+4?Q_9wTV_ z<@MW3Km7RiE3)PP-ABLvaR1jg??36{rmU#UtWLsdhXiY7w3n0yU)~lHI7~wD+lk)d}Nk?d}?M&TAnmsrOGHw&nimKF4ANa zq-7Q56jkLFSH~-}J%XtiS|mR%Q<#`5Q51?(iXu}=B#HTjH47In-?e-A?8w-~^_%up z)^;c~y8M!gg}r^d_YNJLIC|%&hj9riHec!=O!n}@=an>U-#Z~qNZ+&ncv^0CN=C)# z(d!&(S|~j(A+3rkP*V5`0y`-T8G2M=IjJ~KQbdAw*@j&kcJAG{bJwO_d$#T!+CDUl zV(gzWufaZjlmeFgJNwWll*bML#-M@#Y?5IpkRZdmccT>us$VF~;L6EspfU+C zsG#M@(BR0v|2+)`0dxVtz`%Cx+^%2$a6RZ301ONa05-4``P18r^dBxf7 z$u+>vDa78D;OrOSiB~$|(&pmS7J+hezj#y67&DJ3BYXDjIdnt2aC0ZNi37vXjtpP$ zXIq8Lw(vKw@HI5|G&FZJGIcOAbu=<@Ff^WPWNZT@L%J3b8#6aDvNSNTFf_EBZD3|# z0ClU`v(5Ff(AO5%t_x-61yZv@IR)TeVZ0(QVwxvjgBO(gArt7485}?_F9O7GLIuc5 z`Lwu3cnMxo6)YI}Q@ zrddv#ZZ>VE)s$ItXPSD?_2C6E(nEO#cwrGGx*AymQMUxJM2c$wXa$SPLqwIK;%aPU zEmm5Ki$ZJ+8(EEytfs~_CY7y0#;as?fFb}DHo7J(sv3fg1`n$T2}5>*&R@n)U&K_* zXDK^K@%4Z%rlK9h3mpk#t2(0d`^CD&EMh?X`&}I@Kx>6Ig1sQtJO8@QYu!aHExubuHn^ z(bbfgYHCasK~fsV&kJU2gPCaMmaW;o_B>!C~P%ew?p2-qj%>$PE)o z7niAWyGt4eYT8l-vEf*Hx;lqQ;l{)(u|$?AMv-6BdF0YP3?m^pT<%4V@ukHEGh}WU zE|s4YN{%Fk$3`dS_OBUCOe^hPw!Ncw!_znK3v1_Z96So{HE&>djJh(rv^y%flo_E3 z7o=?5c_=-%$|s0!?-t_diNVu^HH`~CeExd>(X+!R&U^V|!-!0dAllx^+uYh|)ux@d zA3b~U4+fdX-pS7^^5#XE&&_ z>e6)e*@aCDmTc%*wuLQ=A8BwcY8ohS9jP#C-z?;y&SJqPRBdWA8{Bj;`i zW0fVfT?bFy%qVIOCX4qRI?s(smn7x(tQktmYQ(ZrLz&4qmRy-rxpw=|y6rmwU?5=- zlwrF^4~!f>g6P+w382&@w@_%IhiExzU;wb;@o{tv44uS*8W_qaRFY6EK^+Z>C=^a8 z!{7q+O0@p(7C;nQqR^VGLr@R*K_3Mh(=VThb{>L( z0lLusLv;S()-9Vrzcy}Iw|dozRjXF$0oJ#4X`g-othZ~y;&g4chgYz(Td0xN$KHJ2}(A3euXpVs~1k}pf$OuS=bS(nO3=M!-7PDuW8O$~}0GQ1- zH=J#51ONk3Gj=dEbv3c_GqDLWpM$lsr_OO=+qnxJy`|2+F|K|xWEn=}A+uE1KxF^u zKyoILSK>=ZCyC0!klkLgLCY|l0x&ZVg2o*O?xobbn$i=m4%ROsMT{ti_|h_inK`tm zYF<(+JF$flRpUd;3gYC$4ILLz>d({#vU9QgfhGs^X>2gZpn}))J|%Uz*huo6`q==Ep#K4gp;NFh~#&?5&<2+f0qFhnq4@ z)%c$Pz8g3(;^6a&}qW?1Vd z(3?-0ZaHP9gMnqBD@Gc~)P`{Lal#T_N}If3d1U5du3{cK!2~0$2o+Ug#s6B6UQ&$_ zS7AgIl$d%+#*&DP9zpsdiLRd}Zz06igQA5=5r9GT1~!ka0%9QxN`R}2jTZ+i$fQOUGvcZk@pZH~V0mqLd;=rCi79Vp$Xnqz!<4t_xrLxhpGHPf17F=5 zliMRN9!M!)sj6A4s$DP50a`BrV52*{K$_3i!rYj>{SabV)?jY~f~ zzW?OU+Yesed;Idy$xDk@?`~PVZsoSI%C_En&)<%n{XtXGrpRwtxpjmWo5qgPNK*@s zoc|F}^uztf4<0|ql6l^~czZiElM6Q=+NKbjXNHjG{om7F7r4G+NHyM5oz-tE^H zuYdpJZApE5X>-re#3ceJC4d_5OOEv=N4te`aco&cLMBJ5WJRQKBnnY%x>{Gmk)$N2 z7dLew`((}Q+mKh?-L!aHZcT4uR%5KXk|j=K2o*=q{?O93A|QfQfBU0t;c~w)+QuCt1!c{7Wz8A+HHDRJwXKU+ZQ8wb&Cc-?7f)TfbNk_o zM=#zYYx{oq3Ig}??fZ*2?jAmS<-xD7F5i9tUkEPTcyQ+W{k1y}t=Kj;uyy~&;S+0j z9o{r_Y_3Nb=of_@nWih%WS5AdlOtkM5>>iLnNkoLFH24bdTFu>fn*9zK8_~x!?6?6 zE3(SxXOwqnE9R#awZUO@Y6;k>h-%0aHNS__8w|kw0iB%u|#$LlGS^7F&ZLA23nj| z+KFW;aLg1UJE6F~W9^PTYqxLTuye>mSqA@exK5JaKeLRkeB$k6_A zv;skGY-AkiLOd{W5Lt}l@S$;J=KMcQLQ6D28VC>wf}Z++f?k83odgy7D%7-4T%qj{ z)WhHqc@7MnyMZzc4*#j|-SbZd_m1gTN*o>B3-ts0kXiNmDfLi7`w)5!`al?hvHz}2 zkBS!>pciUjKrhJJHLKRFUb$i!z-x&fV0}xL^tH8jGFg0g&k$#~5C=DslNTR+#fw_# zK`(cwm$}i4+^D(k6rCp}$CI4nM#yo(W;=vs*aRso{pDufQD$BeBNw)jGsD21Jll?7 zV1qHT2{N|!H@5UPHg|_xyrHSH0m8GnvyJD>GP0R%Y-0#WGqg4^vNkZZHZ-s@G_W)> zur!=yZe$34W;NT$*1%-$Y!e4#a}QGse>2MvOIxCi0|*)0)?HxlEk%XQ8AzsoP%Mm@ zkLMJDgn1LRzQjx{rzDt>2NDJWm;t&_dIg2+Na6}wR1K7XF>k6ifS!e6=aHqA)TruU zb{-%tJhqM&TMOca7nf0@s%X&_p2QSeFRr02W~!kBvX?Qkccp#--&q#3jOQ9#dRp4! z+ykS7sTtwYsu=AeiK>$ki}X)|)DaP>2k%=2n5rP&pGUe^e#CC$TmK0r2i*G@v z2y#_j;7oXFC9)5-dcGvHTawW!RJ8@OGVS~%1~#GJ&2rE`xoq{%1o~M{X7&VMa!N2e zJ4{%N6O{p6S&1#tx;~+%n<8rplT?L>DiHme+)G7R6(*_0NNPeQAYnC>_!d@bCri;q zPnw61t|!Dapo?0CB3+KPgxE&1teKL~OqI8gWQ|1qt}f^}88NPwmedR|W2Cml6bvMk ztc=dU7?LMR_Xxy;(gr=ZrV8c-N(oLBKweuFPj92Jl z*yS0Z|CD;@8fOf5n$^|viBsp`mu4e;{1v*0`vRJH@^M#_o~gimTlYLv2<6s zROe5X`%`3?@C2bOTdAv6=G3HSRmv0vQF5I$Av-cYLy=J?j#H;-3&xILs-3^QdC`XK z%0=lVow1s#cx`R0vNS3=f9L))yAPa6sGFIll+u(Gi`r?he3ffLVO{-Me$^a>_= z2NNQqj#*UuF%ho2UbFbXKfAZqZA09ma>B*~C@4mkI_!rUx`T6VCJtJes z&chpm%)NR4`S~F*t>2|L+5gPk5F?vkH`cy01UXriIA~H zaZw3smN16I;EST=%8Wc!W`Q!RC^kv!8$#tqCTEtlDRS#8+E>(ct*vSwQ0CUucdpPD zHp^9|F-dtb$@yTb;^o(?b@{u zz_WMv-rc)K_6?4LOAYNs7K=h2RYq2(AA=t>vQOWLoI)!9^)1jZ)Vd&pdv~KjC(wg_ zLDsEZ4F-l}`LY#D`IcA<)YUip_y)UshPt|AojsY(elcF898XHIH@)1GQs_a< z^&nN3;BdAgDPOryE8OdKFUDFef~h7bc=gV|OFv(0ABHl1Z) zKFiP&0s;p@W@PMYV(MjT5om6UvzSY=aG+T@(yd%Lj($?-z&MxS1g|hf5G51GE(DB) z!L6T~1L*R=slD)N9{&ZH7eNC6qe`nt;&QyO1Psg#ufp;Q3Bpn$v>=;R=J|zZk))MD zoIECcbB}KzMpl4+xndK{oT)R-eWn`PO*H@jm`$B!GIgfe6abisqp^jLl@rAySQbLh zW=7XUr*(@{=TjrAD3U7BuLw;SMo=tJ&If>jY=MFKvvNVdf_a71*t%F%D?x}A8c~CZs0|U-1PiO70vHR8tPK%Y0mCp7bcC!1 z3BtJ=ytEF2to#dvi>@c442y4plA6#$lOwB#KmcHbxLRCHH94VyrJToA%@0p%j>+jw zC|pLARKhRH1)FR%mu6rUWMt`MY~f{W>1AN%VqoSr%gocvf#5?;%Pe3XXem~ ztY|sF44h1w(<{mD;V9?vHJwbb#-tW%5*TDNHL-!50E$*liYbE-rHGJW1UaGHOgvYU zS=uqMakziYu6>8joxF7W{EY`UAG{bnda-Bqo`uVIG<2=(Uq1*2wr%umYtM$;Pkz62 z|F^Y6r!p$KqLd}+MJB zN?+b#0Jd@0{zK<~%Bbk!#Fyg*nK+&*T#`;;#mf|h z>G^f(xwUd-p+Z}(%qY()XviyTp)e!Wy2>?M59li9H+HYjEbnUT+n$os6rWxlrzwk3 z6$4Wnx>i*-_VlmbvwQT^^7VUHZyw$=dh*^cFZ)(*3dDv7;~7DChFqO};p)w|AHQ7s z;lYnTzxe6VuRlNi?c>+K-+lac@0VXMTz_!(%Iy>9Z^%-z@N_{*ZF_<;2fz%8lBaj~ zuTx|cFom)^KR>(vEoAwJb&}?w?Du9`SI)J8@D&@96568>K~uJJ^Ag= z*YCd^Id}ca-CtMl7+bl0|AM8P51qadldPNTj+x`)ugEA$&nb&ZOq0f|ByoypxkehV z6viaPCaY7mIVni;gwe^4o|x9|y#yfA$D z`@Yq?bR{jqm~>%`mM2y7r5awOMi`SJj?0Qn$PuHF=LqAngfg9`pgFCuIVq!J*`}d{ z^s@TSmE)&x#V88My!e!ivet#G@a*IuYJ6CDyhxU|V$;sG+jk-8+PrrC}i>l1W*JD1{L5F`al@UDil{JkbpYq z1rW3at^pdM^+`~{W$2YqqU`_}$Rx&~9V$o{;?T~WfG!{zT0tdjXlO4G2z`DFaVdSd zPd_6A0+iY}G>D#^yap}d6nYH=-eLEy9ccgIwym4DY~F~DfgxRpE0?btSURwzr>_^8 zec0W-P^r@T`h~iAgt@o@z}Q})3U6}0H?`24oa-E%V&N(_TR16gNJ%(NqB%q3>b!KK+?l*oXYm(&=X%#mU^2WM!9Gj$-EITDSmgAJ_w zXPf)XHup9#_nd9!G27e&Du!krh9+)Crp`vl)O@6~aki1wOalu57+4y#ApMYr4u;0A zhNj-e76HcA!6w!i6I-0QJ=xrmVe8I!@Q!p3mV1Pzc!nu_a2hYH+A~b)j!E?hRYJuB z=!I7Y(zD4C-ooyS6?7s~3GO+w^rpZ*qz$~X3+8CI*8e0X}y0N{(l7i`399g|o)y0W#4&xN^ z6We36d*L>UjVP0(F9d+W9Tx3Egg_;PUqp+mkJI&$V}KK-^u!j9zHiNsTj;~i2TSv3 z<%jS~^y?_r&=Xo2N%QH69modF{POUm`8@SvwxSd06)LI3N~@$2qeA2YBNXf*2WL{Gu>n89T8RG%+G=AuFk! zo!o(wAUmgo2r7dGm7x)}7(Kv3gwR+Y8d(=4stOWS`t!>@!t)&nS_fRZ3n|N&RTL_! z!b|H>5925oAW=cO>51)>_+|hYO}~RBA+`oQ3~Y=PUk@as#5Zvi?R?dIYHV#N@?b!L zmABBqHq6jEz{J|u)XLk$3IOIj+r-7#I$(|`GnA7~i7uwgs#uAQ3Hbv&Wd|p-TNmdu-&`)dMGQoWAz(>b+;{2amV(Y>ib{ zZaZ*c`HqR2?hTDSTRWER&Mcc>*4&>{-kDy|6qS+_m6V-Z-qN>v=ivDH{l~6wq7@`= zES4?}qetNwF*IHxgO||S(KoMSF`FgnU%LA1w{M@md|fcGdH?A<@mcMx_-bNAK0P`& zy|mLij2lW3Mil3O&6FE9X@-bO+(s(TO>#>^fymlQOrZu%WNLe@Ek@P3a}` ziW+;B1&wi9Tlcg%WdUJyrYLUHo&)!O zdH&(cUoYQ&{_X9jcVE8!^6Sg@`pv!mc>m?j!xyJ7{cz~y<-;egv@cxF6vh!4Vk}j_ z5+$%j39B~k4WsaBoS5rBJ-PGfH(=QFKjBS2KYRWD%=dTSfBx&$pC2yWyg#sZ*YBUc zK6>%y#k()ZFWmh8hsT{uH-Xe{A38EJaUqz*wQ}+c#4*xzWt!{~xiULJktL2zjfhF% zM<#G1<6=|PQHcsD^QJ+`R3}D#r5<0 z77lFQJ9c{X$oFN9i;^?SrHMHbxsDr^2H`|%c+u(H=nRfN5%N5qELSMci%cz!R+Y-q zDq=L{N!j%)w;yIlrTbucYqyUpGOMtR#9*47z?Q3WD%S1Tvu5j#bz63<-neb$#w|dy z_1lrz9NUM6(TRwI2N3ZZ939&`asY)ETB3nE$}o_yQ2^NZp#xx1=pTLmAqp)hC-v+9 zq1PmqCeK0zT2OkSa6+#~UxEhO!Hp*CX#NAxLVFG&z%aA|Er?p_nS=(U>YwP93;YZW z3=Su+fr|d8BLiS)J1Sx5U>*hRmT~y?p7?C5r%HOP2I?baVQlYg{0aB#h80=P272=Zah;Lma!Af$ex6l*&LjKO^AU_ zu+f|lL)%~@n_v^05FmlErH_%hhoPw}+_ntN91Tq78W`E>>1AtZG{?xq-oV&twz2ap zW0zUR?z2sO49xruEHS3GM2op}8z+vvr^v}i>f{^i8X$KKOmYoMat}%I3R8NArTP&x z{$wplRK|>|Va3#8So!|6EI&$S2s01IE5`Fn!i2>Dut0V$hF^#mm(gNtxyh}ef8psv&^QTll~3ofK!^<20Qo){fG(x7&E3$tn8#k)qvhbr7euh z?xV-n1Eqjo(u~DmIjDi53oBWGKMPBU-< zZlM61GSz0v3`a{RiXSC4h?y12F9h!qYZmfTJ0$6g_^JhDSraG}0x)4!u&4^?g%KeP z3lUa_it8Xj!YW^GnHw$FDp=u6&V<KD)pN_;Hx#26Z+<1TA4UDkk$C<_yncvH2e&P+q(UxJ^hm5+&qr?IJrv6jlgmv=UG zt{8=T{hp&8eVeM=2V&Kw(aMs{vd-?6gPZo99yxinu4~1GyDt{5JD@4;O380a&2LLc zugWax$SiC*eC9@J!{VmSWzk95v8lNVU3GG11zC_l62#-U@pxWRC^H_d*J%rM^9e7{_yp$H*Y_E`uZ3A zdGY(($FJUf(C!w!kS9#YNovXI&T)k=gstsF~uivzK^R^8;c5mK22okn? z^Z+uGejK6HzZo{PfBgTCF=QUcp^5#VQu>MSD6yaf>P&VXLOBVce*+1i1^9tOC{ZAx z?fWhuk|jO8^XARR6KM#*yh!ezOb@>} zA8eK6U$KZIYcXanyoWujtk$;UE<^&kDldA%Opw4gIKvCygUpqKbVsnz|3|FlUus6XIlkMHL#yD z+fu)Sr8zPTHrr~ZvAwaCkF_JoJvh#vs0pTLQ^Xa53@-zG*-940Ddr?f@q_8}uN$_|pO-iMv*j|`O|Pl*A&@RBNI z=Ao>amE1{|wFU_)NU_a4)gpH40-zU7-V!1%!$ntdHS@(;3u%ecmD!0e_Oc)A2ig2K~7*m=m7p3*9Q>b!)!rOCys#F>i;vB;c5jIa_g z395&Qs0ICk0J_2?^>7%#uXGPDuntjzegVB)C|Qm~EyRVG5x^-1fYIgcY(zh5XfWge6Q<$Oiin!=9V zr3?3zE!tDMU{~3~JrzCsDwYhEEZoCaw*$by-q78m;Uh(4E|!unF<+fs*|B8RzOhr9?23I8=e4C>SV2~Zpa3f_VJDWC&0jls;%4LG4g9z)XFpmX zLFnX7bn_+pW0>ClKItNWwfZOb^GA>pC7+|{QCFXk6#`=eev$&S9G_@!;7TU>CCT(_fI!-~RsX&ySCv|NijF%R3LA+`9K<;>^`uBS(kEPHfycx^CO> zxodZioV|MV+_gu)zIyiR&lhh#9y@ny@v=?*tGA!O_Mm_D&R^fWfBNR*ou8jyxcTtd zgI8UWbxjoX*4+p=u!rh&B^K*G>rupPr-U~z zfK`AofEff1q4B@NV~0k@#z*yifGDd_odWQnQUyUzq3D7}luVO|LW8zXG70LaX`wCf zLTE%Q==D%XD{$FAlQ;%&>UDDIDcu8q#xnBUrF97EO|GvH0 zJ|W2gB%Mo$!ornlV(aM}6dV!3)MceqSLTZ&cqyqGS&}x89O;6I3})pzVHDG?I8#l+ zEnMT>h=m^E6`r&bH*&5UKHC+a;Y!YQ3(s_C=eaQRooG5&Ql=9w-PS+F(ksEtQ)=cJ zY2qd_b`u%73Qb&urY-_wN2bYK3Xlx6&v-80&N~?LsdHjMw!}^ zXPS8->om@^m^#yZ8nTI{`3wUaLvt4ss{mUkhIc3!o;Hx0jTe+~I!0_g7#P?U zI97yaL9DJ%sOr?uKgbsYzsT3D_lMg7gZZ9D)Z&$2Z@TqqAF;KjW}rqE4h^sU++m) znz@8eGxhy$rX8|*%2WUtc$mF`Rj?019?H>$atp!)#rTNwaAb*)24tnHyj`eXB+@L7 zNb8A6?_nl&kYk(ps%~-CVq}U$`T`&pTRAVWY&DcXGAKpq3&`+8`NhF3owc{fz!qm@ z6=-Myf8(yR!M2T@XBxR0nfqHh(Zbl;@R*8lSq(C=P~OB$Y>CQVqN?5!owtmq>1L;N z=;_tQNk%pfmF4y&7A;LI=}Ri@SCkK^t5@ZB>@4cqrEOTxRkm>z^C0lkfng9y))F97 zOnz@#+osv15z5F{MmtIWww~5mSy6 ztRB2O&a6UPgrMf+1? z{YWwXlo$+CmR;7qW8cZ+7k?T&^nLfzZJM0AQ&;X2_-cQ;!jq~2|Hkk#*a;<3+FFUK zoGZ)0Fyg#IIdk2@5;cXKh?E$4*6Pi}{Ma07L?aqUXmTf(M?a|RQH@6KQscY+7G_bXxvaPIk-rmt8+xHx}d;js> z`@eko`|p>(|MBwoKS9IpJbe1})!R33KYY>e+65~1Ngp8G7d_QJe)}7A?YGx&uik!i z{@T4$m+qYS{)g*7J-KxA-pe=d-+lS(%;lfzJC@eB_f4F-*|&Pv#aj>WK7M`i)}vql z_;l{-Pd`3>)77_e^vETqC~=Nk5JZ(#l2_JHP~Mo4SCOdFrKIISBIA{!*d%VGOs3EZ zW0Im0)0}*;9vGG%LF!FO@MEL~ag<>^MP^xB?>Z18(4a#+Nn#L=nW8BqGa|VW$-*cV zKT;79rxC`gxYCq3MNV#c>*(?8>cSRrN(ncikeg5f7Sy8!+$Q-ID6OZhr zqC&Q9j&1ZU$J4+x@`ckJv)X+_Uu0} zIDT+&4B->1S!f9W+cUf$f}-oc06Pc((=XkN$QH^flwm-ZNob*sXbTD+w1SpEBlIka zF7#C>y3j_bpr_D_p$-9bq4{ST{XboZdm(#Jh7ImP=5as?4B9uicL-E$Xb>uJ!3en5 z(4hX2FJyj){@wnWwE@sV8HQpHIEMmkatTDB7v!IL94nRrz`($Im-NYG2?0T2zW!Ku zAA*-ZKZvC8Bd0kB##%ZMJiIXBG^!*bT%8&v!9ROb>R62fNghk?%px^&scE6Lqe{ zEV%2<4OQ6$C0qH*EPdik-6RGM9K$(mBRjUOr`XI1ya#J&jhSufJJZ~KmZ|ehV}}_= zbEnO+nLg8E%5*cp$&?x9)AS1x&HxcX?!K65Ien((37*ZIycuHBx zZLHLe(1;5Ef7a$emg)clVF>jPKl`v;T3ukl;*DRHy&bO?mOGeZKko)EF(w#-=n9QZJ3jvh%Cxy#MLn4 z8(4s@%pP^R2*6q3N zJL2;D_^J*r=+}Sg1>!5pSQJ;dOkTP|lD#-OuaBA9o>;mjreHvvjjZArTeu7^gU<|> z7FV>4pVlEv>yQ@>L}hf-qbmJKYI`4vlaI(Vgcm^IE3+!Q`Zp9-cJ{3rTC`$cC_RBF z)Ux9WIkIA3qAZvk7f4Pa3i4R774)cTJio}Fmg!4L4`ykYafR8{eaKY&Ls!q=ygzp0 zdr@4L4_0XBNwjgt+Irxu-0^nabf*B8XP7XE8bjeEiet0n%Cf?W1q=GO?%aQF$(m6t zTjNJnco0+E2`L`9BsZ+ghaxA5Gcqa{N2ZqY;<5xWX}Z#;ZNsNVj$JRTTg;5iqC{j8 z1Q|S8F)Joll3F3t)+J^)stenh$@mH}Bp9fW80x^)1qk`0da4A3l8j>!+WeJ$?D=>)(I> zrQetGt9}PB$otP<9z1#R^tU(QY9GJ-_4f1Er@#Ms^3wHN51tNi%eE$mt!bA44JoW=wNAG=c!BgBNOuw*^12O zCYB0PDmV!x%-90DI2&C)DwL@RVWxz#QbOp7!PNL5Y8;Lkr_3o|x_;}jjhmNm*fg+i z{W3khR&Cm{VaKj5dj@xp9zeSg_v+zS&3=48;<94O*gzLJuL67yLUYy#OsBMku|Yjw~ew02|u5695JT0_33X z1&v^4Xa^%YDz;z$fHMj_coq8i*XSU!n=`x>DqiqH6kSjP*x(J}-B5;sfo<8m5v7-Y z9>>a+E0!)B=v&&~+u7L}9?lL5!uk2*-2EtCArXO8wJ$~E=qItZ#{>uAq#_=NMPSmx zm^3VhMPaeSp<&<1P+obxH!;@Kkv+qLWbP#N!fV`c3UlZ1*=Al=w$3;b-8Y!vjiEXC zaczBLJt>90%yK_wi3=gi+$+J_C&?ABbEg!zkn^31`Of%kN36y!D9Oqz&fHyU?iOX? zE;V%I8_W$iup`g54xMG`KNG%^Tewd*azqxwm}xm}2D%u$<@6aA)2Exvm|-$gzq!eb zSr*e~K!9hqGiTY&HgGUBaxpe>H#PUOnuD{or_OceJ9$W4ePtej$=;!ejd>%J71iE^ zv;bOW2rDOylN%VW4dd!45e44(Bugi{ftk+?Bl{`(<>#l&Kqk;npKUqI*a1Yr#0Kl^ z6XlQ7{(ofs1$1P|d9aV?d^ku=htmLa=w&*>*UDei<4 zBkd-t2b8{LePjc|T)zz%lX({bW7g(VXtEy)FiqSwp^l9C)h&jHE=pVzEPYQU+m~4; zL(+Uu{mQCD?pM+(({d;|Wg?OwAhiuDyfeD+lC@#e+j+irczy_*L~}c2TwfdTz=s0LROOk_X3xKfRlj|*?Ok? z9FoK_dd=Ot13xCnmaBIM0_f%LyMP`HU!iW|X2az5=-5?%&pAWwlEgMZ-~~$w#H|11{v&;F}<(#}qUS5>|BEL#dikDVV zRMiYUUFa04!!lj1L|3P=w+Z$2G+CG+4C6&nte~!%A0bI<;e)*GE3WoMOZ}v$ZN9F5 zMel75v`&P(W~{Y+B1^N_(ju{TXgmXQSGU^NXN(Nn8pi7Tme1UHwtac;{lEPFSHAl% zU;3LLefXvCzW=#z{@p+S$KUYZ&Lo`3q` zSN`%lKYIU*-+KPx*Ka;}|H0GG{oN0LvU}rDAamvvQ$;FAeak?5-z0DgMOS0{U~}hi zOZP}q*I;w^P-EvnT}ux~V!%?RESZC?@WNk&F7>hHewxs+uyy6`;ro|vKAK%Tr82nj z6p=t`=8BDCwZq^D%k{2cLuVD4OX0{j&t5yZd*{)sFVuH0HVZjnRGX_Uhu0EN) z3vM8I+9rXvnX9e`ba7M>2$mwqQhLM&|LEe0i?<)_-nf0?`puo|*Dl<+0R{#DyY+DI z;nU~nf>LkSltKfL1}y+B0NB$w#-I*JL(}M=zkaiP)SpA^EtY^)Z`lJ6A>MKeMHCvS z?x0UW2~R-)pWe1W9bN(@v_lIVkJcfOGgIv7>X;DY7i*H zka&W47z!|yVGyW|!9x^a`+E<;z#byoFe4HM^ty5V>Wv#$u3x`&>GIBn3p-O&Gd#YO z$&`?(5&}&_=6aZlRlo<8z5#3*8C zYN0r#KvGI_R&xS*6|(e9OhrjmEE+tyIq&t@Tppj^9O1|!7fZC>z1c#z^uBf^?WD@5f8KssycNyjTglDVH3|#(Ofc_Vh|aM!7t#7#K!Q%*G#0 zuR5AmkqEcv8C6N?$j&Cfu;k?2#KfG0gzRGpxrmb`(wPaxfRoqAuH`1kzTy-l&6se>+ zGK%=gS@>hAMMnUQ$%uZ%`wt7!bMYDZjNDQsmKLB1+Yo?>+o`fns-lBy7%)Uub)jXz zgQw$+zvqH6y1_G#1Hgb@BKtJd0a|MR3II&yTNXKHG{H5de)tW#K)+x2#1*zt-i!HI99pY8YVKM*#-vx@DD%!S?1COyo7V-_L6)uqh?`c#PsyRC<&n~I za7mdJ$3UjjE7S97`4|~n-6X3SK{9LVR{e<4?s&REtuA|dFX|gk0KoLobz^iL0A_36 zY8<~cu<^8S{jm4=e*eb7z~*7c(*4-no#^;Ad+WBjc@qT~l<>O&mOOnIAOKxZ+S*Tn zECRH^z-%3-t?@0S!P3zFMpyT_==fDjGr)35?w$}Ddn)P9VyvdDT8X8~OzwJDsC9Mg zs@~aP5B8h9LljX+>Fi;vYqzeyy71srcV2((-Y33w>-Ar+Tz`GyF1wX5dmtDrqtKb(^iAylDQk)!1 zhFi-J7w++8L7F5$kw%E(Ish0>7{Lj{1VxmhZ8Wtks2isgkx_T|N~r%hKuczCli6D( zwpNb5L1bwYn%k7_0fnni;^>gpAe)Uv`&R4wS3oAGHm*E;`NdCv?H^u$=5OvDe)^}s z{OvFQ`%nM;(_cS(|BEj^@t23MKL5ezzVZ35efO`w_v6oh)-w1 zfB(PV{Lkl5d%?Z5c&!!Lg0 z^I!k=w}0?2zxba&{`;>!diIIW|L~{3yn1*4zkc_ppZ(@{CoeyUc1~_yxV!(}m*0Kz zX()GY?0@5XKfeFu!(V^&$F`n13_+fmM=q{pGI%Pr(QWre1JU+KQ+Iu9KT0x`UJ${? zb}Usu6X+DCuuvQ1XhIxSfTQqn6&|gl)*Wf>8l2s|`tbIH7xSxUCCZwLYF;IgPiD&~ z9GTt`z>s+ojXhA`wR`jN_N7O$!HxFu^Oo94LukU@FsJbi3ruZvc`aL2&s8^aRP`KH zEn5ln3Nz(FuF5Ml`c_Y0x^VOU&b3=R*KVG_c75mCwTm}zqXzcq+4F!@)ZE=t!AMCj6o@d;s*_sH^81h#}bt2 zOVDT0!_db6rv+XD72q6-IpAigvQRt%BjKrig+e*W^qWom#C^itpaM{NUcTP}o~r7wj7zP#E1Ljy1DLl360d zu)Kv>T~-bSQ-TvQX?~Y(b)mbb)9>|Kt*(Gf@2AVcL|F?>(^E|L9nF#@7ie&TPLgbd zC>ZYpNf<`Zoh<>JIV>d`FXu`FV8E;S{e zl9ESC&c-KaRwt)nlGDl)Q;U&EE=Yh#$_EKcj0d7+30X-A*(u3+DX9g?sfEdDWvLms z^ejqtE+@A@Qc$ccsnnNX&85T|49!PiM~FZ&eu%*J<5=z@f+4Md0hiHZDfvf%UMU~X zUrsMh%OzywaSAI9cy=v`-$W6$P{gf7Q49b^Q+5h%V`2w*%#g41oU84uDgZDWqN)2q zyZ~Bk!-&*5hX$fw=5cjkm1`bj8;5DyK6IfemVQuRpU~GHk7u_Z*VS%-fe9S5z%3b) zf4Br5CUnn|b$ujlH`_j<2+SKBjvE`6`St<4D3V?(Ihuw)l30q&Tt?`HY+9CE%9j{p z4MS&IrY^hNPjXFzOx*ySj3&4O)Um|QSX#~*8&0YGYh2S5-!?0>&+)A@05ISg&l6un?wXr)@w2Ml9b5RFs$R{+L_x=o;$D!6K_-%^LyKy-isKrb*bZ_jxM zN83pgXieRU+%qY#_A}J6T&z01keilE%_yK`AS=0G5;Mw^GBFv&tP+w|YVTG0Ce^_O zbHlo)^IT2qDPQl!(BM^f&qYJyHZV*dMUps-@qC%s^t;_F`?aH2W3#t=*7g8n4O2I4 z?I+DG2t|*Yf{?j-&LbYya~_pN)Yagry0I(z=#n-x z4*=t8+KUP1VyvnZBgK%!k=Ve@+Bs*qL!=KVtSu}>lrD>k&21f1yJzoy=E9>dY~A|A z=FJc0FFc*Q@LU}nGt|wSqHEgFiYmCM3BQ?kEptzc>|;Fh5JTNfls1>M{UtO<5ye!1 z*W}?8IRLW?QFfUqw?a~Yl@(Vjim;+s-v*xJBJljx04-6pT2PA@5>+R4Vb%c{^YTOSizJGq7yp0Sl!P*2Yxc(Rp1E_O zj+qyq`NryLxZoaKy!GTC{`qG=|F7SDSHAc4 zZ~x#|AN}b|U;oYze*Dva``ItS#(ww5|L>ze{^|GejVM3*{U5-w&R=`?!ISs?`ujf| zoLXKwabf$y?XB}So_+ASAOGyX{_U5)`O&}s;s^iw^Y8rQKmW@wegpBnfBD%z{_Ho` z9=#t%=2yLV@Zt+6cJDuY`Gt26Kly`y`{lhSpZKre{y{9SslW*Hi|9E8g!~dhaRs>? zODEEWJgHt~bouMrYMXn|F2qn%ht*qKQq54B{qDNHnn<7C+bPtAIC3{n?h>kMWIC6_ z-{_6B`lB87twRo9D~+SCzzb{qEmEx$+zS9^_cdBQ4bMLD)rOvVPt&x-(#cRaYW-t1 zO-uUVgu*#Mkwh4ZdYZJBE~{nA0bOB+ECjcVJe5~h6WQLqv2*?Ig==@tUAcb#>h;|l zH!t0~bL0L)FtA6@UOavY1_sc2AIkj~FX7?-%U65oz!-Sg^OuLu5rCly9napZ#{uH? z8eRYJEwRx0+ZGfyD1=aGp@%^`RNe+WglB;wZ{dWp3O({|1sdV0x5xYi>R!+G<6~f8 zPKSs*9qjKRbD1IHlbYXhD}E$WK?B;sz@CF_#d{8)KaB^uy&VK=W_xq9L9<=qooTUMKs$&ylON(xm^VSDJJMuwt`rtTsNYY8-&)oxl? z850QDHFjf9S1cO!x!g8?FlcoJc~VyiMxBu-F2HDU98XRKzo4+1O(CB?G2a{u>vVLX zuu32#b44tUNDyr5uAu9v%C@Wu)6r~cW~G@R?jlMDDmksi)alB!bbML{ zDLsppna9a4k>pn@%Lv8_lC_dz$Ixp^NT$pRX?g)QF}>_q3g}nn(d0~!u=w&(<>`6E z%tCG%-bUosQA9BWV4@b1Fh&%&5G5@XWhdyD#4+XX+Hu5AiEC!Ty}-b@rcuBcRDfh) zV4z<>FJK!0jAI%DXn}j745MrNxRw#QcU~J=g;L>P0t4e%Cjnrp$hxKuv}22H8z*Ud z37Rgdp-E>I5_(Ni0r#EcO3<$($8wMbIFbqy(=k|@QRf+G7(UlLdCAhS zCa{f)9n(C^ggUsauiLb>p4B&;)YWb2!keI6JnJ;q0_6;s@R2!Uw<1LLF z!M=;urW4lKso=m>Q}ZcZ{RwS!Lk-GXyJl(J3=dxETzu5F@E|;VrETF}Co=T4-@ATL zH*o_91RMn*85#jyYx;NztO9iT1}*}t!lT!~z#yQ-KX?fO7zRRyx*EbTBb5gX@nv7w_0(fUY@n{hBF?WRxH?vXM#I$n0!|e-2sk**wfL^s|k9Y(o!O(OfME zR%)nIcx9cuZc5%X z&y7winwAW)6{fkJX>4Wanwb#VW{$CqZ|)GHOupKmFx@fAMR7`|!!9uHAX^ z&;S0bpZxqczxdVffAi5F{_Wp?@gM*B>)(F#hyVWQ55N8WAJK6yP_K{v@TX6F?kk7y zeQss@Lf7!@-N)}Yc8om#ecru;Z;lb`0#`)q8KtePC65ZH_nGilgfwjxnGYlwe@5 z-h1yg#K&V`e~zyIhfgShpbi!E7_t{#|KcN9f_zy0g#>?>_6Q{#>wE|w}W9XZLPOVbCpncxeber~m?1-x>*m8~~&L=vh{!nl0vipJ)rD4G)T#7TMb5{i!`?JA}O z(u&1NSye=q7()@4;pJrnT?y4ik$1E7(=_c2Sv5sc3}FS0iACasJZ>&dUqG zb4H~hyvE3sXhb z6p>}nFTjAi=RABJbZazwY#UCPZyn|tdWtF5^df$GJ|iQal3hT}%q65`;Sw`3srkg5 zN-<3q*7_&(5oAv>Imw)CiJ_Aa!vEIcs9PM{(MFVWO(z|UxooeB(H0Z`R+odtja#-M`Q7(9e`gL78J zr!Yf_B>mT~nqnKa)=i~O&P0udLDX1)|B$Q&w8@%+PY%&eSS*}Qn=*5kvMpT7C-LC?UP-PvrlH`!bK`;vik*Cks4GSwLn8 zj?S;2zIfy8rCVn&-8g;m>X}Pd&t18O0_?#PWG%$Q*YEGYc=a*8-o)YS4-Q{_aQGsg z!4XFnIv)1y_4`j>Bcoz3U%&U_!!12hc{qze%w3FD#sNg=aoZ?9< z+o7!uy-aFUO9#tBQ3cZ6Ov{o`46j?V_HBC@V5tSn)tjIfg!t`=&6{og}*Hpo7 zD5lotkpkIxXEx59UM^2Bm*wI#HDketU!%4Q^Gl8_EYxQkCOPD55)%u7zq zN=eO1OiE8m%1BPiOaYRCnI+~VC+4Lj6(pw=rKFanrejmmaH*Mu^jvC2J}td~oRCp+ zG%f!q(s`Jblmsj+NXsb8$iaYt6;(=bbO(taB#Y|FqDG>y2`^|O2%AWf7Lv4urtDy< zd-Q=7xqFeOLdYbvO`(XAI_Cgga`%EJu*%X8BL?PQfeKaChXgVM3;~$bJq;InWKF-o zqB^+5wU2Wh6Y;eN=VSq7i6(-&n`s?EFMM!u7uSr_G#vzSLuRG?XeRERq&x&&$Fkl@ z%srY?UQi(x>03O_%eDQdoo(w<&zQ4gJ1}?=uF=xKEEooOlCcT7vIBvbmNAZf5=sb` z6)BluiV&u8hH0FlABF(DA%rtcutC&7znt^%LO4BmA-d3%z%>gbllm8h@dY@5AATT2 z>nUAiMdF$=)UD~l%UokWL)DUl)ua`2)AHdrCm}Py^6)9y@%0Z2>3KLMR~OR;rnTWk zecg(?<4mCUg1_g2xA!vW7m9OD9Re_I{c%7JK&Wx%-G=Eq5Kw`KXqO-axDxXUuZ8Pnmp;~JcEvn0mJMa+pezD>cFhXHjt0i=atLz zO8CWPqlUXyzP8dM);_H1FV<+_W>qbCq?FukV;+hmXM&mnrgS*GW+%K{Z%iQA}Q!icJ z1~)6!!n#UMsDd3XXN4=6VGK7~&2PZ+qgY9uz|n7NJuVE*@@torP3tVj2wvF&03#}* zG<73G+XMiEVC!0VhIWN(P+;m{Ya7{`2ClX-(79@F7;7EdsO_57)HJpZF0G!vwR7{} z(Tgv9@{8Yp_Q4na@W=ms^5T;`k@4<>*L;L@E|NhNy{_yMH z{O-Sg`-h+X@}nR9;OePsbH{hb z=TD8!Y%Ux>_xyv;{^oao{MG;b;qzbp_NTt`t;0`zrLlLReeA@_xqBVs8`lp$J-2;h zZRhTT7oY#zAOFX@`>((Fjqe*A;nl5O0z+6$=au1Tg{6elj1pw2)vRJNUC`LlWA_BJ ziz@TVh&g36ro!%Q8t}DG20EtOCr)f!e0cx)=iWX1;KaEr>!)^Gy2ehOyK(3Kv#GhQ zNVL!GYwI3dYU`PnXur*z?L`&EK4=hieuFPuBy3S;1-VSffB>2!LgkL zo|_`_F(m<-$V(G?xXO^BreS4!=hW`CvzKn3xp*A_2J}KQIPTuP{pityr%(4@yf}RC zy@OY;pnQyUAp*wU2Y~H8e|7Nk{imyc6d_2kp zB?Q{?w(;!&P=OM#0ReRsU=V2g#|Iz)1FS)y+tK79D(5s>LIa0}cE z%0mEEJR=cGFtEpu_ntgPra7YqhPoG&Z()Ww*&BetM}vgzA3S~t06RQDwI&g$0095= zNklbC z@S~S3ZKnvMWVVCK*3j5WzF23lxSL`FGF>f8-cUkvq~u643N=)5Q?;lT?v$%ZysobH zvC&R0v%+oVugtczx7f@UUUQrO(z{o19C;B@e=Jv!htcC$-rQnoc_mM))Ash)KKsO# zXlsq#Wo(Q!t!|%^8r(RJo2DEhtH#Kxp-f!O(L6~pErgSF%^aX&`XT_x@+psIY|k?u-ufS+~lO}l%%|rw9@4Cvc$CFqp5kvQnC|}?#G-s z!17bmOVYC{GYd$?RT4bYK@o+Bf?A>=is#qk1&zoG!r)<&7Bb>tT?|zpT?5vIa7*D? zqNxXH>V6;@C>LN%?3iI_2LWAZjv~;Df-FMc%`^naR2Y^+u0x3n@cT!8=Nz6ueusoLiPGV6)I=+fxlv}%f zZO8rH+lJ_Z#5)1kVt4Z4og@H!An>R)2pCgQJsvsj|QJEoK## zvqTEV^wL?O+DqhG#l{$h<)X@CO3#cj3P!c+>p9;%d8=XSR^#;Tw#5gI&ePh4;}F0t zfR?dkOW(8s07Dqo3|_ctXL!l96%34_ZsHl+c}AdDjH!w;lyw?+@8a40x$WCeKmCo>^Y>bY*R;;2nn+KqfAQHT zzwz+N=RW+x*Z=gV|DB%S(wh8j?c*dOUm`KKwhsAyP0fux^Rw$$FW-Il&f`b>?>&F@ z`LBKRAAbCk|M>S`{`#MO@{2EiYexP;o>fWb&rcbZ$?(Ki@wGY4Y zcXP)t&aIv!GNn|mqJqG#AhMVOm0Is4QH7vinYm>o8eeOw3Dz|fV+h&B_yP=vBC)7E zt(riOrFPU-H&PQFI(7Nc*{k=z^>_dDNy4;d}4Lhrz(c zUIV?LeEb4@D?WMo;|z{?|KaN=FJD3B)qC&1__H2A02owIlA(cu3QDvBKzbW!J4!DU zU;qz52-M*zD4~v4P;Q|CO(?)XyAXf@hk#yh0fu%VqWy>P4#-f}<2^7ibe#@#=nG1C zAzFa|fIW*JfG*(y=z;)-L7?u1_9EWDe;4Ql0S0#c=FLl&ug)*52*nBpM@C^tXbd%l zZeVbIOko{O)Jze_i1IdqEJl;HFh$KwVT3IXb0lGrvR<%QYIU9;ZX6;x>lOZi~RAXL^0Qw%%rq+liN1Q%eMCMUrx&6-%;IVMH9Z ze0+S^U>2BMOrE?_ET>52ocgBl^?P?JXfl?%gRJZ$NIMgYbg9J}tgsa$?yZuIVC7?Y z`4~YpiB*nN%KJ+NZKd3{VrEkzwKf~?$-+7^D=ZmhhO}a3Dk6x&)LdR_4l5;xmY9i8 z%EBdNmM3N)WJ*c}yfA?ut>!hvx6N!NNjivLHnP zk)r6QDEfHjaWF8EeHzdOJYyS1par2<9AGp}9{>z4Oz2E!q>NV>rXhNK|K<1&mO~8l zur#osu3cr@fh7Zc$Ec-oouX>ZBia&jsqdr|9ZAeYX3HVdzsgf{86>Vt=NSohZn;`F zW!_0;Xu;Zk(%gQM=b6+stn2F6CBAvF7ugJq^G5Y%;ye8>!$sfPy6x>f@9I1o=(`LY zg%f~JhhUlkU?Y6{q^V&`;a?Ja7tqx=fMF8fBG3zLj8`+osTl*x0!4rjruucUb5iD= z0l#D$2B`A(5=u>Sfgq!Rkx@WSFTkhg<5P36Nm;%TMwV5P<7n91 z&jGOzX0&X9W?A5C_V2<;0giQZ`alO*C~A zP1#5TjHwzS1m-TdOAy<->54kKBI0YEn>%@b=ETi|Pke3Z%-yloi@~-je{8H{X!XM{ zelONJ`TZaK6ByX!+?GIQrn8hqB}9BRr?I|gac*mV`uNQFYDa9yQ&SfJy0uT-fAHdK z-}u(!Cm;OiC;xfy@>9S0{hxmO$N&BEH~;qKr~WF|GglMpG&rK(x-Mf)-RX-DkbIEu z{L}p>A3lEl#r^lb+&r+D39SeQ4JIiP9?!No7Z*ps3e4Q!Oky!Fd z0Cy+~l_ zu?!=YX(95RWTBV9bKzKa4AX|8TX9SWf$Ic%k%S;&9;(R2l)A;*V14Vz_JwOF&tE*X zbLI5zwbQ#-cCOvHc!@&S82#~F}B?LMKhAiO`_qJzG zk$Cr?v~$Ehx+q8y z1qtF1K^UTlYiZ&rOWeehw{d0d97#J%+D4PLVmY;0C5GfYc?rowlXsG39c3I(9!`X( z@g!oI)vWDotBcjwcpTD`+Y__L=h!++IY*mZ!p$g_R#ENML_LkFuvuO0?X3a{g(WI+ zgt>OF&}@O5CgzvE@yTK$ovG@eD0|A;weRFA^KfpQs0$+TRGm~HOUf4|<*^fUDTz6x#B4%h zX7#bus-(2aSnUIT&OM3%O}Z$gl^6J?!1EV8_hsvHp8XMsze!L4a z1ONuaLJ?jRd#8lXabx`wQC63URUgT~zLQ+=PGZ)P#O$Mq1xJ!9vx@~RS*Ok7$aC$~xo7g>dSR2QDt*RD8PP6m2+ zA^bfTOby%W_=m!0=^Kz?FaQ|3>zF#a3LgXj3y)oQ_M8U}!M6Yc0lnh;el06PtMEcF zFmvoQJo}bafI2AQAq4OY#0%Qt$I&$$2S00^c{e(F3;DrA^8&|U0mYnICdewG=a*7& zM6M?gi!=^k$O;_8g5kKTMG={MLLHj7Hl3(xISJ+4<%8kekdtgYu4!6_0D7UJZ#iM^ zIB99!s_8oA?K{)Hc)NA}T6AK!b@5i+Cuq>dCSwP1(fKwE)S; zvM^cV4|gn09>4Lqzy7=JOAqe7_|nk)+2(=ervAnDk=26_zB;*d>I+}{&d>kzSKs;D ze{Ag-GFtuFd6k8QI4W7FR@iFHfsW>Zos(C4+eT-mHe5B$w{Go&u6_D*fBE^ZfA_u5 zef1Z={r!LZ_7CrW?(5G#`L&g;8+^IL;cu()wYr1twJpPA^Ct(VHtLbi*hO#SU|rYz z(wX~py-SS)$9*j`{?<8P%T!(WLfhy@@8tIE>aIW9$CKMQ5)+fJe*ZIHzJ33xTJOGc z{b6Z28BbyxOwKdscc&NEC>$l0sw8lYB$0zE^V8)KrmB{u^dElk^_Jer&wurAT!AJs zT{1kj>h?7oECHR#tJb?T29Gb?PGQM(R!`5!^zzp3$=!!UwgJyFS95GYDYC#z;JUC3 zD~4*qF{}VHgkAy{S?HpOToj?5C3A{3-r?!Bt@Bs5&R+rvJAD!K>&m$+S1#VX2>^R{ z{{ZNP0&MU3%XsbvB3_7l#k&w8p2l+y(auAZVb9|eoL_$MiRUkYLI|Hw-va!gBtu8S z(3ZC-f_8ZLwgs(2pa4T#-aZ8-l2Y;H@Y#zuJ%<1=wC6BRujfynz5I)V2M@r&p6!EI zA?}5`88Qs^aRvtv2;#}(eKao-9Wz6rh4vpp9g(o7PhJ8-5C1Q~o<4yWK7w~ZIw4Vp zJ$iuVaR9)sUAuAm%#O)Y!xhMAOc8}9VzA^~z83V^8E9n)Eewf+CUY@lZo0%p6T2DW z5K~;o5H_;KZA?iURosGM)@GKPvdWB=j4)NvO+u2Yn=3e;Vw|`V%VD!5Dy7C~P*F;JF;lXbNtu+SbYgNE zE;+R-CABOitt2_QFfFYp1vD!;CmHcAu&&HFz%r6kG7}Qhpq`wPm6o2LRe;MW28MA9 zszk*ET?N%vPIgq$yjW%!$F9W-8j+DOSu05j(Ls`S(G-0G^Eg{KCWd#iy5V$AN z3zjCjVu`J3!_yd^C$)@!B(3ZnWX^R)oMDB>(r_hst=QP^ZdvnnY=g~6J(K3fbwg}J z8bW8hdIUQ+)O zC>OE_eZ!W}JqK*iHEv3Si^|$nQ_D%X!h#!t6#*FBUFW<#J0K+hFuJy?Y)lZO%gdb@Kb_zj#efG09~Ej)bH*tnsNEK7Z}iqN7gund$1fipI30~p?9b~GGE zEe$FV@Wp{Q05EtHN5|>l&}C$|wyv|5*rq%%!!dSdW7S!u-0Tv1UI~THQnhuDvqbtz zvJA^GVL5J^Dy9z3X~K(e|6y%BVTK!#W~4U~&I;TM5UZ?TRW+=Ecp>NlfHiMG2|`@c zb;jL$E;4$lbLnpD+^r^L`^}r75oAmb)DYoc{hBMS0~moH?oEjj_|F!&RnOGC83|)(n#r^US6|w_u{S!iaqaHY zt#jAcw=SBjfhr8Gs)|e^F!^kmN^G)dJhM}q3WaNSe(S$K`u*3w`Tfs-{rjK%(zpKM zU;pc$e)gNc{`-IZhoAiF!L!dvv|gLH#TD$Zx|>|#4qvn<*x2u{@AWkf$So01<7jR7 zqP=c7+_~Uso{sjeMtfIkJD1!IV}a)Jx|Z?5sS|ofy-?-6bo=qGhcEg@m(9+)4?g`> z5|xiE?n>d+HFrogcD}+v=9&mROEu3*5ISixKSL3)hWj4B|CP?6#p$KfLb-*+kkrTe zwMLJ|=+;}jmYSg19#9!v)l`06tZVHD?Mb9n<#QqWkISqND}y}InFAE z70a{%z=(VoQ2=J|=i>G>N_tgFdPQPN zQF2-d!n4%kSr<<~BzH{l3)T6d=A=UUk<{WNN!jltW+Leu$)$;zBn-o$a1QvpPkP$7r0#K;SB0J#jsw9GAPQh+YDTumg7*hT!Zi`Oj(45`PN02^08v!efL_L?llJ!WuI`J@ zu3f;1z%`2kOy9U^ifseHKpg-E$cl)aXI!0UEzKuX!9}K_pRDXCrn*xKg~_?Jw0u%} zK0YlElah@|POnPMC1;h12z;N!*01tT0Kja`Cp?|!K*B)3f_)eDkqvclO&M5GhmrhA zP2F)t1i6%>28J>WJ{K7mC3alyo51n|ndQ=qLV89%DZ7x&6`4n;H}cA; zdw!T??r1d>tYb>LxaeJcVm zNl4b7iiK7IYkhhKg6nXlh?{K1J!_s(2@eCzRtPu~CP>(Bhn zmD?{yrniPCHzsGd_8z}~VfR*N_b8hs!(o^lmP)Vlve@cVXD=%i6tH@m?fw=|ZI{2k&*E#9 z7{ZZ`x!SHpf9tF_Hsgqn`C4W}9gC5UWk+Ph7V5PII%{fsE&eu>H`dTS)zmZNt?Pw% z0L+d~E%y#i^^GlToV{XkH}RDo3g3q3S*!W>YMz}043oM=`taiRjqCT{e{lGjvzHzi z?GeBjnJHuNR6>POYjy=9F*;XKiD&t0Tf2v*Uw!tk{HU{G3*+mz*EhuAqrgteho=bLl)Q=605Jid;QGC&2twv&z|4j**$&f5-@D%+KsF4 z-n;qW(fz}xpkGM-;VXa^G8HWDVF31W*FLM z2o=<{phW8cA>i5D@h!CSmQNr(Xv^Dx*Sdy}zKSNecL=5c3bNFb$7&si# z35ik=VsG!^y?gJX47+^gT1QtemoH)SBuplRh|85m>suzKW`{?|8k$>WDicSfV+ph@ zfsQRSGI=Hz&&J`qI07$66kzfF46cX5c2~0jU=f_40V`_73OcF_Rq?uH*=fO1)2{^5WU13c3R$Y+&0a znYLM`Wx5QAh4+_onsCbgD%DV>a-d4qSITWKq(<|J{v3=g4_8x84`)N5?Qc=rR^1% zhuQjmy1Iv|Lfng~?qjHXxrPBLI1uQIe_j#KI2YASa4o|^*Q6{s50_UU3d1r87g@Mk zfj_}DQC+tr^N!P0t$8@@v24;i$%RLga*zy;#QdYlW$6VhswATHj0AhmI%4Yr$Dpou z(cZePi7biSQ*cvn>p1NlxX5=;vmJvxt$8RWKCwvYH{aZ(1K&w#SeJdRO}yKs%639avTR zS3ts4;9((TS5J9p5hWIs@L5O%7eKlAa1l2TaxFt*=LE9Zn{N)8IS^dY#SP2=Cfc|T z0E6QZ?8SGBM&AcQ--xJ~u5LviU3GVz1&paeGXi^m0m+nF$V<;7r{@u}3&(2#-28O(rEQ?TNwE!@>s)4DE zk)!~ykRdQUv-RNpul)V%Fa6c!`_IYv{_ee?3Q$2V?2z5C!*B-$-i+CWUb!Psv<`onKO`rYo0gD-#c z$Gf**y!-46d!P8)yU#v%_2K(hAG~x&dxa_&k)`5DEE26-Yp?Z2djgI98f#Rf3;JV| zzSvB-b1BfaFn{V{sACBjR#P`+2@VF3>N6z(El^$pQyU>X8}i)Ykf7egEjp_Q{=lt0%5f z*_tves|?4eA~2a;IgZ3D$FUsV`i8b)psz95tM>PaTwQ{iPO`ENem(dv3mArEA#$Ar zzMCL$A^;QAAbpGi3qxXQ?Vmn=`of9x5CE{9Qx|v7Ub%Yt_Pd~8clI7Xc=8M#0|Q(^ z0KK3dFJGeig$#zpSMoi40fEr#*{k;t(TC4pA_G)$i$Z-14HRGiAqc3TOhN-%(1#z} z6+(-*41)?R=y9-+27^)d7;12rY18@VRg#T0+35BkvQBhw)_kTX$}r-Pv{d z0&Jcb0LEYlm`ov$FKLc-OwLSCOpXr^4>q^9Me3SuHGYvq$6!j~Hj2g8a(N~`-^v%- z`635TRKpe3u*43k&`uDz2*MzaUsug2#JtXLdvy+BQ#KkZUYrtwU*RD5U79nhutIl4=;ssBk3YXj3X2c=;e+ zGhVG3C8|g9ijivBP_<;BTG(C5X)mTXPhGiQ8D!_G0Rl6b$%rY!} z6irLDs6M?^_D%}+ouvGD`bN&t#Qb9^nA{2}SKFp?PlS5T>%t2H$FMcFQPXw`VTpGJ zxwY>)3l~sM%^0_4jAI>tD*5xD#*0`t}ugkf+&clMmOw4D)p=ef=a@HPRGL@*gA zD6+sj$O@3 zIS+nYQd%B1HK!^$vobjgn^VRG5(o|La_5L9Fl(q?1!zG;2CsmAx!TWydm(|)Yc(E7 zb_RTkBD|;!FDe3aQtvd+HjG!sIF^0^SctI~CvD`I2V|ZZrGG(JyYA__=i!s5o90@cz}K>O>{*MmFQ~S=rwKaGQ6$KH%T+JWLK+F3s}f%Ecy5s=97yS~s_x z0Qa)AZdqdM=H}xy9oxRXbN+s0<*J&Flh*ih`0xW7o44T30J-OAM;0Is3|$V5T=orI zP}MHk+E2n=0^DkVE9)B8M6L;$XIkc&k~k;io=K&5Lh2Z#%Ihncj+LDQy4+6@`^b_I zRT?1*+!{|mRoOt4)>0KwV{o)*T4R)zkB(KFC5>#*wQuD)-yRevEDbh;0v}zqP<32 z?Yj@2|N4La`0UlE&t86f?fwU&ix*}#ZfsqCGQWN6!rhneefe*1?tkjU&V9DnO6M8y zbUBf&66-t`e+yk;*4D&4O_MeC6aLnDZ)~<@Nz;0^NFVhu+(! z^|Yy+tx{{f*41nacG^Q7%{@~qC$INRY=qk;b)Igvs+KGSJ#r9*02n7(*}Q$nhD|%O%|a^!z7`fz;nU-fa2a-V?#C;2(1(+J_xD+~-%AnO*%xaTaWpP}-vu_W!R14fp z%RrT=H8EfPPKG=e=O;>s@rp@;YKo+qqG+aQx*4)&ny8wBMvP>nOwgOpisjOxS%hE) z){|Lj%_ujem1@#Um8qq&loAP)sU=b<)5_#&Wl#}kmH?TUS;eI6QbK7J8G~nV_$r0U zCRf|JLOoo_GV_Ru=~XG&)#>@fw0vSJ+@TjRGD~<_rNZ2DO@5`JgiwQFgm9cDqM)6? zZ^!f738FTlxSb$rCrUeL%08N^k7XF<+b3DpabC@o&^^m_ObQ*yYVk7fJcK;BB=*iR z&BL<5ytaPT2xb$U6Szjms#pcbmzc{wl2UObDK9>SIp;`XQBu7BkgaKx*Npo+P77^A zO8<$I!m3|!)6fjQ*XzT-4pwVAeImTj1A9p*X4xBxK6xY#`f40C{=_3v8X^4fNW z=bGVw4%UqEfOd{CXBvnoj|@EG=iC1f3Z zyW_0C=R$Pky03djU%M*xgBLDK1ArVPj{{Us8wK}57zP({AdSd5Rz`JtJGbjbE=5PK z)Q?>W^qnOrn!!jwY7KRp_LeiQj`N=G^Olw^q^GfI1MQ9jLqdA<;3KLRTh-P*n_WoBDdpr;h;y-Orn*J#n?-tnfu@lq z_;G+V_V~(*?*3hC*Ev8>hWa$#Zne9^Q8(mi95H&^Y{4#PWY7^ARXVz*)=q}9 z9?$pS*iMQlKoJK>0w0;@A#vRVwu2_{(0MK@$4=+lX?!b@ZJ==UN@LLBZ|xmk+dhBq z#@*MKZa%wv_}S+ERko&%p>5*V46ti@>6Q*WIIB2Jk%Y)1Kc43VfI)zMf#eZ*R+`AH zwujcwUS2=Dvw8j;#MaLFQx`9uy>jL9?c28=B5QD<^ooP(6<8Nw?D5O@K+EE(9LVy% zQ0_f@@%Y)xgJ&)GMs=kXcM$gV5#RS;2zK?$dHcmVc>FbwDgfg0HH z^-ZNp%NIzwTnUpQV6#MGk-}Ny8yg*)o*bVT8yXz!?doiAYG_c%l_UZMk0n=QNF+Rs zP)(%}ISi_h#gK4Va-KlL6KZ%O16KrQ=HQB4Y_X3a@>3v$0iqy86om2oIvlsIk`XB( z`zl$rRCyN(0H*9BN!su%KL#(u<5?sML80TFzH;2#)Ib(_=#nm~q!-I>NX(HH;;k%Y zCxKsISSiO-cy3=!Lu+k~-(mCE?H-pe5^3t}{Py4e?H9iO&0?aQtZK<8`xCR}iMi?u zRufS+gqIDJ^IA)3wI$RLhSOXv>>(+}N$S~Z)pV6&yiz_~DIF-|cNVjn^QfUrygMCh zOUGI=F#7aL?VG63r6B=zU1p^=vqGMQED+8rD5sZVSU4h|#+2!do^Z6QzIo6cY$ej9 zNf~9yS!KzYrO0~f8RZEX6-il`lx%WZE;F-GkX<6rt2CG3ofTw%6*Y+C)ZzIJ1VJNS z&a<*B$DE|}s+YkJXa;YMTsAjYc-xs ze;i~~Rl5xIlK5ueXTgZ-t{4Db9U!fWtZAcws8iw5 zYiKw+PwN}u_g@2hgR^z_o(GvTHm`?@ zGhh;jl=%a^(8TP9EKJUn~x;rpNY#H>`1XYg_}S;IOTB%+)m6I=0 zY;_~Hx=~AHxTb#0-8g0o_sK0$g{fAeuNCU*`MMUazLl=5ujab}*zr6IH<|CDaNQKH zi_ED(gUWYO`870wgC?w@i)&=2I;k-%(fWicx6RYq*0(URuq!n*(12Cq2t(J-w05y< z-4sm|UK}Dxf+UfTz^lQ7;R&48Tsw|q#q*3*k;&W8xpw9P7})0d^B`f{7j{nWUOa#8 z`jtEH-hQ-)uE7Dah4vW&z2fC7c!&ZFU63Am_!ME-lV_k%fTdRmx;_RNs$VFvP-vko zXoP2$+w zdy|NGIg}9n}im-zw9Ha{S%E|S| zGNd?Gn62z4@uS6+5*mx|@|pZmyVau))O%WcTDk_hTDv;F@TD*O(@%enVHwGaSbDiR zHBX&YW+Cv~syVSdtUawrnx4naDiUNDEAq=N<V#b-oR$JceHO`+hObG-*QDVbsaSg+#a~DdXT-A^v$3Z1GGLelyehkdl~+nHD5I8? zQYtV^CP$@E*KqjSGvOC`Z>LFc0w! z148q#r~OQ*|DvvT84S!DpRQ|&o!~mh>6Sr|Fm$JXP$gA(NgG~9lKA~|^1wV?(*YGc z*EHKP4gllYM|m~lvd{w906JVG4=oDabHEkAiN0YA3=9AUo}{T;uW3heHvkpd$cnCR zUEr7mfMJ9U=~bHK0%kI@ty*Wpf+&v+6PXSHg zWB_9j05EN29YP(S&ZUiRDniIoQph%A{yD%ZxFbo`-adP;aq?ya3~cObWax79)Xn;_ z>m+4|*g0j7opH3D0~d65f+-@?oOSUz#YozH2QteTv4DgpnzwWf>yfb=kqHM<7ScHqH0q#>#@RKl_gYX*eQVS#-}VCffFdc@XVg`?LJ z8uiC!N0zT_U444*<(Dtsd)+p?IlOqOzGoRj)nu1))ADHPx#WyIVs;_56eFOrO%ip$ z>}naGKl9+}=RW-6-=4XAuzLF5#?Ic%#+{nF39V;H=N;8}2KD|SNBv}=W3hSc#OU#B z;m&zoyfe@i>Fu06v32dRZ{d7>|M76wn!9 zz_Ss!HWJ4{WZMWV3z=&tacn>@hRDN``sfmm$=9oLwsAEfhQvh|IM`yBSQ(US>o}4i zO&Fw#A{1$qu5V$O+Zcuxyd+#L^bv(#ve1o3KEjS;TQMy76eC%n>z!O$JF~O7v%9^! z3-sE)aN*SMrJZXxuH3nM`_VoCEbd-N_WZ-Apki+@hB6GmhE_f{FeDrBDY_iS3nYW% z*`EOnAoR8ZB^oH4Ab>`1`2>Mt3=Q-lN-Xpk2(;xfsLwt~)jryVh-MY;?IVFKcX${# zu(tpM0--7f0WB!cpbh|gvcLCuFP_a2Us@i31Qnzg5z0N}cw{8(@BkSYJ3#X9;j>VB zf&8Jph!A`G_a8n)mh`=O^Tvr2TP~N6%Mr0z0v=B);L8MjsYEEZ8Z1rGhJl`*_E@vS zVis_?3!ApT$)Z6bzbm)G zos^@bh+Ej&Zko8R94iOn4h^-pbVbZAT__fuU7H!17;0{78J(IKom-=cYpOZHlze%5 zp}Gj~#&M$ArP`D%W_m8EtdfJN=HtlxoRN@{k(i#Hn3|iIQjn5Xnve#nflbcD zrsWXR^H`Y$f}9dXL4~0N=O`!pFpOFPFGiHKlB8`Ec?VU|!BBT`Oana20N*ymvkVIC z!-l$Lx}h7vn15OmS>QW{OBv3TLe8=Ds{fOe_fBHgI|xQ3^ zrRfuzh8>M30=*Yx9%L=V@X+PJ;6-J0g1$UVEhhmp z@Fp}vUnwV;TCPYbWToce)AO-u$m+di3F#GSxx~T>35n}eJNxA|15)R()HNY3_b!r2pwqyFHuDRoXA{ek!M!qMF2+Cbq{VF0tv#y7a_oMVpDforr#wg z+QqIZZDh^be9GB=-WlI51>2Oby%m z=!y8QF&n@z2y5#Zch9b~3&{%wT){mAI>Q?ENI)2hXzOm{yX&O_l`8n0Ac7FR%{)ce$n>j-i{a?_z1&kd;r(D`pl|^6+$xK;dcW znZI`TRqMcNL-$IwXU*5TSko|DQ$KHyPFZWm?a_&b!OfF5pHG~)TidtcjLq7jqqa!D zHPUN=vTnrNI%ln&FowoWkx7-e-&{A^F>`)p=iU!~@js_-zBqpQNyqqUZ*0yK95nd* zOuinCqg7YaCf0_+%_AE-ckey>{Pjnln%}+~=~y7}tkoO~fn&u1z&I8>+d^Pjfm?W{ z1u%wZnu#16iRWNQyj*ppwrho|2$G~;s@Oy1IViw3p^GK((D@!R-%l2XD3S=>p6%QoXU7A(s|gfv`=fS{swk}*axx0J%;^m7s zZ(qB6|6S0Nj|aejUTEyaCw?Ky6(0#hdl&bCaA+6e#|(S={Ket(7l?r&OGzONLqYYH zWB{SJjVPJWMwD1@5%o5J8BqQ|06Tngxc~SuU1qT4+km+J@Ogwi3jf2Mz0bq~!A0Q)P z2M-@TLI8H-#`V*u&UUnSi-a;3lh0uCpyYAIBEC!^RszEu7OPIBlnRAB78?LYC6dY2 z5F`SIK&Zl3msjH}@PtYNlf)!fQ?O+?d?i9Mz#G1bNWxKxI2xJEp;85Ox`fG6(pf4N zSI^`E%q%P+{8Mnkoeo{>C4+P$fA~-}vI0|#B<&!GyGi09l5m(H?8oyvQ;MwlST|kX z%~JQ#rL7pE5j<~cVWz1ith1>-b?(;Q*2cERXk*jd@>;BWLa2!p<4h^JqMTA~CDof- zp-IbT<>ZlB93@Yv;tFL3tIOf3clx{WtQwlMoo|>T$%cw)%?Y`N#6m}vZ~!MA!z*V< z>KTe=f}|S3N_s2AT@|wK3Pn#ouQ`ien@J3$%V zhd>LgD>*MQwGbi!^eZj@Xlm}U)a-=RtRyItvy+qaQc?;Mk_r-$ZOjUhGPMNB8qXx9 zXEQSMMcGA)ymCV!#tKeWMGxRONNNm85~Hcw>6#9zx{aaf=9vf0^~X*1YZC7S+uWxM z&hw4E1=WV6Z0eE3;vkbx1f{TohfU3l@3@^&nN>h7s1!40frkDQwS6b0?oo+z9OwnaRfiYtttY|c?5(G)t!DvU z@a7P*z%npQiS#QjOZ^LC->k$l&9)3SPF!!9y#w?L4P9)UxYasyH`upJ)pP-tJl#9? zmecwuG6_r_&+@kbY1%-@&bqtLYmoIvR%*J=1p0T~z=^h#;lWGV@RHCmQqFXx6!DVt zD9O3_j6xh!qz^U@NC_W*_t|^SiumW#B(U4uG$S4!#V`Mx(xHC)1#%JV{ za*FBY1hLc*Jb&w{rwQpWv^P%L8>T$5g+S+O^XTc3Xqxc0O#519&))t-&&)Za zzene8Gk99Frq<# zV3}!x8m834k_DKG5HiP05oRhQ1fG+G^e(!nY&(ThL*aXL<9?76;D1y#>Vy@Jw|Bzf$7KmcT!~a574w7=fl$mx0LG%x z5eXxZ$asJgo`}PfF(e`otCFCT>u7iyzzko3tA;4U5Grt_Dgv>x8dr(OR^Y2KWIUEi zBC@DdJ`+i0RC2inHrK@FTUi1dQ)ps|tu&E?BJz;L$mB{KvW;w0H4kyJGI}&I-%!Pl zF_gnB)d*eQSIr0#h$_3q-P#tjI;}3BtEsi6dvKt0U|?*1rEhXwpbDqwi&6?Ch1Hf) zqAe|-os~zzV(B9zlXx;wAmuy#PERmc+uTE9X!)vUzIK2t@5`ug9?Mjw6gjH6ebv%Q zqH>m^oTMnmsIn2dYK){FA?Ze|wIh|v{$gQg9MQF1K3@K_oUD?c$g51Cb#l9!O2dlXryFzYC?zjIc6 zBk97Fl(OU$Y;qbQHItT+%gHX3=9H-O%8i8>dnwrmBqInKh(ZKrbX5n>IKVaaGYp+7 z-;}{WOBFX{mdcK$RUb_%Jd%_P?|dWy09KV-E++E*9BmuW3mC@I_HuQ7Y+WzUI>@yS zgobwE;_hhQ<~zq(wqZqNNfuh*#N}neZDHbJGi{ z>3PW7QK?y&r1T1~(wt&uF-{>h$2zBW2UhR6+Bc={NeSpzXu;C7QPX}3h+=Kowzr=* zG;YHuiaZPQAd-j(=LsS9&LO>s?kQx1ul{&!`rZ2R8x0dTp#%dHImWo=L1b5y)@^eP z$>;;1D#D9^F;nxV4c@lx6oj^RMc;Vb(z*rcav^iq&Va4Ty)#@>Urx0)sgRkJhfm1G z=2lPyYNyrLnqEZ7DC1>R$nr==QO&S2GOLO%>Y9)wL(ng4`za7RPyep7_q@67l&*PO z+qA7~IcaP|(r4P2AN8yscCPMsA3x~Zd;(?b+&#c;Wbmq`>68K7t8POd1>*$GU4zov zcFNGSiDWZ&ow2lU!};qP*8yPQUcg}ZBA{Oq-;6Sz$>QrdSJSqo3C;3t19?PSCEZ2j zdC3AlhGs6pDRV1j>1Fb~YAZ|A%{C42?W4|))8Lx^{+-CsZu{IVuDM(08r4T;b>V3U zRbWcu9hJC8ScVR=Jc<+ev0S*t3|qp($9E3rPTY=m&MVFJ*+q<`OhRHN0WhDB<$Ib& zyQWV!j-CwktU6ofy{(JxmIZg~LUiy%*Zl6{l^5;Hx6K`!vgiWG)-Cr8$ecZLSD(Vw zD|7ZL-GfTckkrvHvG=HbL;B!Iqi7f(O?-1o-UZ+Tm0y|LLwWdE0e zwVm6mr!L>#d$oDy>cc0mmrtCpi;XzE?E;090_bAsNGt;x0K+m8nFazw4?#pqT{S~T z6WVD)Cq?9@NCPZ&y}-~!mjoYiBQRoWHPs_Wb6#9RS$ri^u?2dXX^Lb)Ah0US!xC|bL&gQc@0ydw=;&2#D zCY4Gfktuir1y6*aV#%aRf`}=IxI)xwDg{R(V(`@!7-AWgP=+N}RFf*Iaiv&X84d#c z3{#H7RS^kbW_Sjf$fi++U}kitoW)kKc`7Df%M_SsVjEfHAn=_;zL&s{V7cKUqARn^ zj2Cv({~yE~n}Z){&7>0tv$w()bb%Pa=}(%=N7!w!jca(?O85AIsM!W-D`Xew?tM zARB`c!)~dd)>n{ftJyKCqMxRppqpojhDowvlAs-{ly;T#>#_-kggnZTwDMyq=ys8L zM-mGX(#q3viKzwDV6I^J@Pa5w z(nOJgmbJ1p?KD|)DcPA)AUKjzbtEbOog|=R&N~VD$5OGScr8s5;UGJ4bh5QwY+VmW z+r!d!vkX0A*I01i0szcVzsj)=bL=Ck+GS)Svuz9{2Iys|-vqf4dEN|b(M`w#jA$^- zBOLpL*gFs215Zi)OF%548_2PwsoemspzFkQ9aBtXRr?8%XUY&=Ge(cgy|coaQLd%G zoaN3alcW|h)AEREIdIQj1@wX+Ff*T=U&h1I%#PZLp1G@oYj@q9+iJKL`)4(gC1=|y zSH~G=#~EAODND#*24A&W0w z4BS$Lkp(P(0dV!N={SRQB)&;LTn`RkuAjQqJbfoRcHJ5~0k0K1#)#s^^ipwRE;%U& zmylCcgku>!jg=H>Y5_UDl$V25m$TiXnh^y6tYKN*u%>U`1b~@axBWwxeS?<(SEiP2 zr01|{ThqLyYd!%;YhQWPvHHl_bGmu{PS3^xz^rlVwmr7(Y(1^3-B5?tfL`#oh?^pk z73uEXv9z7^4PJEj@0ePViDeMLGXSK2@DkiBpwpRUzFE0{*57m97+nVNu#6q~Bnv}c z&jV>-J4^7I%o0IbAwR7|T1s^a%mV~@8>p=(zB9GE_k3{hLc_$>`mu{FbB8uEt%YwC zoRRyd<-u8rZ%X7E<=guezA>(;gJWoAA#2!2RnG3NiSyGNw}<90nY?`&#k|B^T1pY4 zjHYonPt~-{xjU94{aYQ=7Y9~uc1&Mrn>yDyf2nEys&C|isq-YuJ<4$m=xV3s?m?+@ zKxpd{*}FN$Hm!>0zuTtlPQGw5$y z2z5?B{_yK-XRp7z|LRBo`m_J}-5>t?dq3Ddd(+}GpbL(f$o;bI&eSYWEh28U4 zucN!DyqN?Rp9i*wjD8^!hIAVugJEy#@pXQ|&z>K?eEImr^T#g%W>5ElVK1J6pd7}b z_5bf)5Wu0g5223I3ndx)@NEU<)>|f_PXWO8pFP=odWa+(9w5X5`+)#}J$!_e@sY5- zzc_gG2-NB^c-X@S;8h1m`;saxVMif_Y4yf>1gZrdxJWSj?d+@7%V28$)+(` zR5}D07>z)n5r}jmnNFmTaRe%!>~*;NJNlrM3#Du-lUhw8mt!elU}Zou46dvSTUrT$ zDXpw5h7yA-2TQBQRN`?M5&=geAu!|7C_)BP#$+pLTs4gkw?8H_-$>@!@Ek`e*_>Z( z!t*;A$`Ph&jIJ7|NQTJ#W-{9$kXhs^hf?iOYMe5)Tc`?gRZ*TMR#A+M`qhL7dQQi^mHoCdtCtCSYX zE>)&xQ*#TMIR)&@0)7F;K$N%h?2B~s0>v;zF-?*5V+3Ve22Oc23wJcF_()RTI|+G! zjU&i>VP;0D7+DLyM4DPGNiGtm7V?twn29;$ge-hwPIW>YW}s-t(u%;zj-}=%KqTiT zCg&n6F@lFBW+x;-nVXoHpO93Xm|U8aT$Y?#nVODI&!%PMv$IQtIpvDtYGX0pR!VeY zSbiKoQo-_PmTMBTXh)LEk)Fe(9FVYgk_*%FC>W}lA#DJFG1cuX1Yq3|Oid@$d6ofl z!u0AAT*|0YgQXs*VkALgq#?)ed zS^+(t3Q?7kRhpPynvh1G7Tg5d73|+KD;D6nZD_SrhZ-9h@>EDnl?N` zms(c#S{Ckm`p!4b-0E7}>s~+TJ$~3YaobeCfh4NbBDfJHKGyc)Z(WdxJhIls30%)!*II9TEz-b%nmNkKCvb?c`=CFh(9kpWwUQG#Joq_!R zyz~+&K@b+%hH2U!U(bcW;3YUuczgmx&MvQf1=IDgC zV=>aVwt3_A`mIki&EN72Ua)nYqFZ{H=5Arl0N2vRHFt>Zy#lBh+IYrxfw>b(s6$2S z=vI1q`d4ps&R-c=f7jl+B=-)Bt$kd5yT;uYY@0s(*Kl|Mu|M2ep=dIn- z;rc$F#6n@INi-FOsUgu-6qc4HwD6@h-9yKBufMqY;FDYDABLMo7(xq%uEsL;7?u&w zcT{ujbXicSZ{RC~45ZV@f#jwMY+d79mS8VO6Q;@i6)ZD`Wx+5_0desB6_oIB z?+wNflI=ZvzW?m`<7Y1)KYxDk;u#u|j zK?#ApGlt`#`Vw{{UbQkqkpL&k%qV&zOe_3NVl} zlvRjqeVlEN){%Cg*CPNVf+ZAS5NN{T+ZNzf{3{>^23Un>-@S9|+SSV!&+nc)b#8lO zYis?)@s;B%3(K>UGh;)eygQIdFi9LrEeH{*E`vbcqUWYzbRBts-&4@DTG z3L-SVkH&K|gg%BO!j{Ka$~Lm7F|}BoQmibbx+tpF61p?1lulu?lxl%k#u7M>~d9qxby;|H>AH@ixNAnp+GAoXz6~2?4`%Y5+|4A*+st^?sZ3P5Z9@dqEab#E7 zGAfK|CGzA#aZ*07h@j1`lqBXcj%AaNWfBszF$u`aOOB23TOiBk?A*JUrGxGUag_7(tRUTHCQ>jTS6dy|` z#0S7~kO8pdyrZe5Sw$=?)xwb0Gn6rgs*RyS7{*X{0KlN+8vCR*;|lLA%P_z;4U3%9 z0>?DdJPHy6S4; zbDFw!z#bf9j-9l(pRqKb(1e$TH4_~3AhPj?q#>hHnN+|^$t9)aRHtND#-|*VC1zCS zm2nHPGO?k#zHh5%{(9@wWmRaRZscO~%q@NWvKg-Upi1qh?QN$_%_o7KaJE1%iFa8R zSOpJ*kCq1)kSxS_h077U|{H&qBgprZ`g2kp9jr?Hv|?!=o;4nV-RTaB;XC`3+Jz`hhJk> z=ATmdr|X6;sl4N*bSK=^DeOIZPcK>ME+^}=N`&b}!mJ7vOWiKCjtJ~vUQ*XCYwDKaenJ_X6*@Q# zQ`=Uxs)cUsq-a~Inr4csfu?R?YLRWDg_cf07X;tbA$9cWLu1y)Sx@(dtz|{mupkXh zvh95gLnlquDm1nBOrE@W=eZ}^_R*jI_iumjBa6MZw|~LyX(5s%7%aE6oQA=1v3LQA zD&vaH=9>Cg=X5YS(9}6MFtIhcbbjOfy-4dgj;Y163|JQ8VN|J)Dsi)9E)q-65LoTL zPNvX$>f-*^g*|8OAY0+Dpz1MnLlsqvp=m3r+A^}bf}$j_)DnYdVe|aT_W8AwXV*`k zMc0u+0Cw}{&4&-~9vnP)^5o&+lSfaU0-}(3`t0$u=kRb3tn10shX;TVq>cg%dG`5J zlwL^r;wdtN>f>ZWRKI{ghfkkAefIqD>9fNpz%XPe>(6oZ22Sx7DACH>Ko3AW38B2d zhos9t0s{lA06&m<#19`IJVpd84lq!$zu13p_W%xi2=uzY_we51J$MNcz$Y{SS17mM z#v6K}Jd5`tB556QZb6Aw09|MaXNZ0Uw0v;??w#8=uUx)(;q1AyCr@o}Y@XaavAMdo zzPz%!usAn zpom&2q8LNoPL;JY6x~!=XBjP+n6J#NG*$AW6isIt%b!)kqOy1nr@nuvMXuxxjdl)= z_gGyPPsHCjG{IAN30z-#i7Kf;UQTsa&|T>TysB!RUZoi52)%pd_~K+&e|M~{y^Sr> zV3-z;d7N!qAsHsA`jKqB`A9bLNP6kf)Pi@wcv8!bW|7NTUW~8}E9@-iww1A)iJ( z5_8{4$OaEfNWZjPz?ycK&^!C+4u?nf^Z1W&Z(^1Csq!f#ii&&}ogyd{&Qf39{S7Lfu zY7RcXoL@%NXkGm+Bj-A%uhb5lQHLjMhc7lw-?F!zFg30N!)n@2S(~@iwa8!_gw($x z3$Ci88=B~bBD^dE6d_B_F9D6j{#k)%3Za*Gn&%uB#y3ublYtU&1%Yx79zuyOgA0wi zhU1_zo}Tmmz6*iAT~Fs(d+P~>cbuv~xSL$SO3opr=Hd$~Stf6cz}94z&@)R}0NOw$ zziDNn0*YDY9TWQ|<&ilQU;r(k3pfpw$lS8Vb#?T(BC;Y6ufPeLTTeyCZ#B)`kImn2 zntd0-)3*bt^YvZybnciNPM}?g@ErkQaF?KOIN|I%U(Wx(D7N-X zYQ{js!$VhU$F7IRt_Mc0MaHf-&%PU*xh3_Csl&i6WJWf!kbihd7F1(Ij=P$2b zebu#mBQ|%{(S1_ayeL#|X1sJAu580a+ zogK&Z4NGF*G|xRwv-DyVja8yroG^srxz62u**Cd4GPCl#KmG4te*N2Imb|ljmdR98 z$uc@chOJ^)3?3d+R#i&GRnbi*zuViW(z$CJ`vh{k(iocGxI8qog`p{MY#oNF!?KMy zt{KbHapaC_nu5qu2O0)~jf0I{Q+?wbR&RT>W44N-!7~k5x)w{ZRLvZavz&59k8NIs^lIw*M3W1`>vp@bKZm z6KH?@>;+VSaBl$i3`q9m$*ULfF)$?HAt2|idqKb@9sqV2UoakO2ZzW3D72u2`dckS z8&QCvxPtO+ppC#1Fd@*Ox5q#r^*sUjzA%jnN)g@#n~Kg=xS>3Xl@I+1MzmbMy3^U#3U@Kx&p~yq~OSMp%f5^ zDK4*qD6J|luBa-hsw}OlfGDe~0>)L5aMcVfo<*d|nLI0$;GlG8Q3GKB}Y>Vk0cizNv%rB=hKv(1o+|WgSwv4d&Yn_XOexhS7fO=~M9Bq$#9VH27CR|}o}58VN+W<^C8Sj( zBBN!6N%5qQ#H5cSG51(v&QSzT;CwmnB;_7S$v>J>bTq9P38*9&97%{nE-C+5a$!m) zKDR_zgjHi0PNFbGmeiA_jZ}GzDsQ1H+nA~jrm72qrRig+dO7+LnQNYF8s}N3;6f>I z&8os{Lf0(MIwp2bOI$Nd1JJ9VW*ngC`_PU=uqyx<7?{`#SFu@+eUfb*1A4K{gG?(t zI|{(iH?9L402@%3`sa*|8%$F_Roz-hwxtvc67#9ax!7c6`d3wAT3KRxc}_7cyO@J# z*=nLQZR5N3L+6aqIa9+@?eL|#(QEqpRXbd=;r2g_gfhH>8kjt|Dhn-x)@bUHZAvut zYv3YqL03eUME)6|*V_O@nd6IY0HxsEz*pe(Q1=4DLBIh}H^ol)1}-8?U^E@KHE+7w zPpN~mGWQ6E=SwY>B<9kRvI)T2N}?ptG?-aR%PeK&RPZvZWYyxJ*fT2hPDsIi!t?6- z_=@;F=Yu0xQF2kT7s!xKS`PBFXfomTgb}F3{1`vgPi(0N)n^>7R_RtPkgJiUG_{`1{TV`p!CA zHrVQx>?&}j#17r920|WQMD7xT^Kf$@^iCtD>zokPj7waTQrD!=HpVp%0n+%^ zA+B|RWAA6%`q<_krm2f*?4oJg$m$r=)TRlKYa;M3WDeZ9NP-4FjwsIahk`tk~9ejcGHpFqGe>jTZlr+vM+1*^tQWH2j97~H~C`w6U0$WSv>nU6fjjv+}4GN=QsB!6?4P>5y zBX`EprA4HTp~28pS5Sv$C{c`|paO*n=K7ccCdJ9}n(YkOlI0syu;KMw$dn4K6KAL$$HYww6PG(-Y!n^`3ha%dzb5l5@W zut<15ohsq5C2S6#$pi^wQRr+clSP3FgU4VASR9!^WKe1B27AaI(nvKfi%Tg|+KqND zjmx9+sCY7+NYyJeR*ex<3|Eec50aIa7nW2Ml~fj&LWyWuaYb2iC1Pec8jUVtvb8LZ ziN&>Xgf6bc$Cd`k;(ENGo+xf5N{~Ibs)fx3L{DagrIZ?`s|T3c5xSzE%nK3d3ahgw z81ary^!)YT{N?iTWsyoH)>zmI7gij|!CBIa)%jH>8ZS^>Ddun$CWEThrwuzrwRTp$ zlM}9CwKr+c@5~KOPFAul1a&7tJ5a)^J(|lsnvOY^T6zrVl~j5(jgVEY$4k1fvJtFw z9Iu=rDkq8RiE7O#PCbNE4Pg|6m9qXaVP_$?IfoX?B6u<|*7QnqdbuGLftf5hPZD1j zpOu(Rfs12e7A6Uq(iE{W(F8b%7#GF7okkfJd%_F<TqfKiqZjTol8nj6Fm!$eV(B5kI~Vq{q>UDd_V^wQM5EbWlg zInT9B$h?a({}SIZt*_e@Ic5N0GS8gAJ^=uu>jxO7A*x{j^owI3kN0Suu(X_pYbyYZ zX&FNd%rb-+m^Hp0RUBYwPK3ZcEe*^oLyI(hFIm}`S*cDf+ z0Tp-%7*ofW09M2oe*(67d(PLioz&N^D1EcinlXX3x0qr}D&QdtUu6^1^GJB6y0&FB zy_lR)#>lD?<`OkDO@qiiDDaGm12fXloFTU1>N^km98#%54_X@1YeIPmr!vJ9B*lBclQrmFC)N;xg+d|z7 z0z3>N-uZbR=xd6tdwS1=26vpT8w&3jmK(^bRF#ko1YS)Q!&pp|=Tr&POZge)B9bU9 zbB+MOEO z7t*h5Y*+`$7TDpYXHp7(anH2KJt6Tk1Xpkat~B9+5X6U9(vBrdp@x|}3~sH7;$h_W)Ww45vwYn;m`c2-WDTiZT+;`I5A zlV`ThoIkyD@xs*`=m6OL!>149xOzM8wfFqxgD20>v<{SH4-cM#ip6^u-vA6^?&tw6~z^FjTpu(ooq2x38 z0;T}yHPAWG+T7ky*F+)GB?6g2ZBR?qdZoV37cr=G@$^M(WeEVR7^N4KnDUCs(sE2i z6}AFfR$7V0kjW$-jV9%=HC(QqFSH6JH5{p*Aqi0>5sI{)Dr+Q&qF7F(iWMP9+Uc4h zx@v?j8=;9isa!veW#9<3W}91|&axYaDso)0E%CsqkiVCWS%=H&n3MC?~ z!)me_`6e~dXU2_m%G(-wJ~u5~r*7(MA&P5=%C>4*M-JY0G>3jPqbec2;%G|gJ4qEs z(`Y4>08ZSGk&ac%0bs*eQFkS;wSpI`60{NkrTS^ScB)!CiP4N>)FWVK<)ZciWP?%c4OU`4YdErW71YDL9&( zdki8a_XvWq3^d+3mUiT5dO~96(PQaHAQCbFdnp-JX*r~f0#;UuAh%MHkJT2FtYws% zYEFpAuOkW@sghQjyptve73&vRCWQ8Bu6f+txTOj#tAi_C%P538xXdw+pa7%k`lMszDhn>?8rChXC&9qjwh6v-MqP`nMyQG`N&T~I+c3{DD)vmnMNku2HaDKIHE#(W zV>E47CH(TG(zHTWN$bLbB|LPwVd56hD-N&)MR3{Faxyr2qjC0rWc+3zK7P|QcQ-V4B{+H+uCo9z zWKs6`mT7Ro1u~)CgP=PQKvu9Z;2E^Tr60|JKpO$Q*4PPe_c>?VDVcjpWF28?J94VD zNx2*(J3I@YU(RI9?Iu@KY9T4BoRy6c=acjtQ=7y)BJod2g0u3-g1PPg$JT$wMz(}~ ze%Jzcm_s+a$<8_FoO8}ib~ERkb0&v548sh`$vNGLjFWD7-**K`maWxF>xHn^hqYlD zwhS4DYy+0iJ#>bVUHpnYBr zLBK74=N)ihkcN9sB0WddqmLV=U#5p2#`^AdEq{u39l7hb(fdThF4$Z!nqW8a`XotHiM?QHZZg%FJn& z%tIAgD%kpRhQ5O5v_yve^{bxxHFy0601R-2lmj`kr%jvw*6rGf$BDsXe<#|i23`x` zSHM$(hX%N9o`2o7`mtyIbLYy3`l;v9-Xrwc)?G+FXiRb2jm8=`QNCr@*|>=ofQG+F z9eS$(n+~ZuIU@;<@;v=aTNlgPC2;mi+`XF6u*%n?@^qS(P4loT&>&O$ zI06%ctzt4|ESf;X6pN`MIa8(<8-jrvh1&7-^{4;x-~Ic$PtRYS{$sLr!jLiP&;0DJlFBaS~j`~KVccQnfN?TC?4+G-`0uzP-hJ6)6RE}QY!%&pR zUo*z=DV)J2X#HPYGlwhCHN9{O06RPV1ONjE_VVeY$M;Vj-aWc|=ivC@7U*zyYkzy= zaC>8CePwlVW@&nOthc=-lL!H$)Kay81F|S(0joLg_0)tz)sb*27z%kkE~~|=*J3L%XJB$J5wD!JIGlG$|{ugMTL+ma>+TH-|yhRoBdbvCQ)%`$7V zJh%Cl!a1&X%%~l+8r!(e+NZU(8(sB!XIAfRQo7saosH@C6{ zE~hh8os5S(>P$@a@_x^M^Kb9}`evxB+gaZnXz%M+IT{u25wW$eob7>k@Ir#1pq!Ui z!p$p|6jfNo))A?DN$8pvI>zX#dLl23mg?ZTE4blGNv+5}sg7(a;@isPo+@=q9$VAI zH#G50p>L6GpJJLusM>zAypAkEX%Kyp`b^CAis=P zP{zvt*?URJO;`pWhQjd+z?l_R+{h<@fM;OQ3W_L&#mvGoK`Dy+(3aCoM3%FX>!S+7 zOi7Zbs*@Pn6xLpib4cSE(+8%!b(@ytlA~tLUAt*YEE(bpzNTGg?S?)!uZ_&2Uc}%O z!dPSmtPF+$w3q-e6MUq3FWP%IIdC`Ddj#A92L{M#oO+fTxNE6dg2pk}vTI7rDg7gK zWlbr=T1HiuRY?)O2<-e)2K=ZBs*=pINDP^D$4bxqlm6vb@$UUZA6hG&s zS40q(5XCI9C0^gpk=o1XiVBXA$g}g!b=LHRyJ^MUvIzhSbnj=Uo;1w8tetv>0hXf| z0N^0d1+ELB3%nO701WFsj`u$RcU3p}s&VE`{ltqv>%Oyg(^bFYZQ8TfZ)1jCTQMMC zs0VZ>+y@jq0B?se20sK(aIP7H$F*NSez$Grkv7mz5`?ORD7;%{inFCoD&JVa(hwLr zsw8MnPWT(wy^Wg~U}*Kr#!c|bxStTf6KLDTiya5Mf9|q|`$BPmC78?hoA29}-}P>u z;a<&X|1q3`-wUV@6FulTbjWW$`9AiC8R}BCY88b3V z)*9?cHBWYrZ|&Xx@a3QW&G`IniN-Hfxw$eMM`YyiH9U@r&rRW_KYs<9zO;LcIUzK;|EW{egVLqynOTOJp$P2w;up7 z&?Oq>LN*K1i{H_l<+JZU0AQG2ps&B9fDY8hm>UB_F?%@&_BE&Pf9nbS4uz>1F6hVrG^EkyY!{r!h7gv|Kn-MBN21+0gb^gWIi_gHY zua~D^E_bY13vxDdtrb<9XR}UaSjd)>U_JrfNueP z&yfr>3>|*^0=Izy_WBh9*wcsiFu?BK-ak3qJKEp9v$u15duw-nZR6&`+QP)_a8Gwb zb;4)!m{exD&@30bbn1x17WcZVL%~cm0t|}ce_t++@$1U3GeZnX5qqBy)Ah zZ9Q_!fWk7au}!P2<68H));pl{_o;mYa?hyLH72(Y6S&C|dVnISRl3I1jy|z6>U2jY z#zs9hX?;R-XRGG-uhZ*mv8HBcM|V>s)vUC(DeNPBZA$@JS6Cq~Bnt9Mxi?C91*Iw? zH6XK1NE~xq(;z_*DXP*_d6p`U%HRqs?QxzqMpsk|t^JPr+qQ^q#IZ07=^X=1` z$L#cX#0!X$GilPch zAyJrL&do1p=LW#&`Q?lP0<)-`QCLRHFQMcH$trFXk@JcuzZ6vE6*3A+xkcsTk_vfo zrKYq>Ush$TpxH=FcNHhV5G8raI+3AM;TX^dC*7G}q zk01@T-O@#;#g3i|ex#IUDyveIkVGXFD0~9|Rz%=bu?=LFLuGGi7`WBD@VsO0xw~Pl zZu~Jot7Z08vi}6~y(=FFH_rUcJJ8O8Q2?t4jcla<7#h&VxtEcCXwYxBue<|*)z3b2 zwQgA(Rvk?nfG!+c2$aI!3o=jwR10+MK_0wUYUp0P9{~XQFhD}*KHAC)>|@K0yLQcy zTHxyH%IVf(q5|jzW>Kd1H}*^us0uWNnPnhwYzlX~wR#c&=55>dw(rIUk5i-f6GM3U zsE2?VJWt$%Mv_nzB0$L7eu#PzbF1lt!Sdvm6mc|cJL|V>*)>OY4d?|944y5Vf@)AF zx8TTOpz99UxZDPwKVg8-lIsWs6O5)ackWgX9(FD~i*;;@Z7oEOkIeTlq+TJ|1)-h9 zP*>13M23N{ul8i-fc$1lY3XT(gEMP1F&vW2zdi+Uz=z$05g`z+9{2geoQQ#k32Rt0) z;rj4Jz%VqNR=)=R%#fT{21a?7Hm0^#>S&YMnpMtLU(L8XJshl`XrJ6a{_r1%`*xMt z6=C8g#n{8rw=gvsjv>o8WCZ#efi5jIWi^gkgSWvRX?4chP2L8nAtKcJ_!wtov#-v>>P=aFEFoW*72ZV!je((%jXzLV;UE8S`TL(2zx{#0_U#9t>ndlz z0ASz$0WE|G00VkmK(n5UZbtz7BR5;?uWrD923StHAuklU2hhT}y5<&?K>0PIpb)Tx zg)0D`AP*IAA(Y_CxC9K=*~K}eQ1UNu=iv_^7GMm}mD88YQ_LrT6V`P+Jr-~aAL43| z!QKlknRs>i?F*t8p!#~~3nLA_7XbF*{jaZIy#RncfBXPU*a^_<_Wp4WU?A{ew>H?GSt(*G&46p zH9y!hkO;>#3Z+aau^7yqE$woVOvvH!m^?O(!=Xbe0C5>2B({Rj)ks7}h0Lzj__T(w z!J5?DQhHa7&QYteH!DodYDc6ljvkAW17H_zwOYF zSS{ye3af%u@^)2pOBUIYMs}3(TdE|aYqHpqB)T9D&vRW9R6`F*)m$#k77MEjxsgIv zu!!z0q&SPJOvP2kqDox>NnJ#i7m@%=iqcAD2}xd50iH%wh`Jn^d0^Da*m))F8%2!# z5>{R@yQrKG#<8$mP*^4`CP<1auSu!{hqyl7kNR<+4lZFGufY$vk)rIm&c<~?bAw*sz-qx=^&hv)zU*81)G_}y1WjS{j;CqMnG2MM791K=Xhy*hK+D*A^KHxW zo5b*4d(%1q%-M_r<$+buV#Wtfpm7Icfe(Y`9wRNc9>)pXC))R`=XQ4diMMs9X5?Yr z*rRm+iKlMekzTUKr>T-Cfo3cwg8kx?=yH`gRNXv;07g?17zV(D%HM6TnRYkc^t5aO zPVhV}Xsp2)L7SfQUO4<=H)lll-K|KTwgXoSf)+>}n-_V<#J*99cU0^iR)=Stb=!{G zE%3OW)_t&C!EUfV2wlJrj6)C_j%wY>VQk0MyaizPwQNUw_ToLa!tER8!~{cKP2hM4 zY&%opWl3CBY+VK1GgVX0Fl)S>?z(wD+;H=bt6>8kDN0+my&boJUT{HQCvXe>DIvwk z3HKs~fyV+w0l>18XppaG)Q={*R$a}j z%G9zjILpv?u{BL>b%vwM^7OTQeU_t11IEP0w9HbYao5|UoqBhjFWoIRhlNJJQ0Et_ z144xx8mF20-G-K7t2>>j>7Jb5jn(v={q|pI-L*1TgVfm|cQ@;T9m}_Wz5V=4s%aEF z97AXlDjhVQx{@U&F+~i4D%&zF*9CbpHvkO86xz5F8&7I=hcg=oclYl;IK2Pp&ci21 z51(LwJ%95K0EV{#1D*f)9f*awb)A9o3qTs!uW!G7{q4_hzvCGCfB1r8?tcKo@JQHC zp(Y+Ug?!bI-~YfvUm$Q>NVzV=YfwQ3A7Xkziiw3QK#Fk%!T>|q$mOqfU4j{QdG!Sa zaa_l7pq|5A2qKuUpIExQ#DifNW0+nb+-C?GsD|?ZFw8Izd<6*Z3hwQ?&l5^6&QGxe zd;9w3>*r5^Vb31je{g~(f&sw5eqn||=3r-IcVlIJVR~+KV4%IBwKmz13fIO1wee7W zGSZNW)hDCbSg1Pe2R9aS*c>{IP9lghvx{D13Gmk45E!*fgPlEfermVv$~7R=ZMrbu5^v_wVf1UeU+$5YM;`F*0kPvt#eqZiMqYM#`?h4YTx2$c4@Tw z?CssYo?e@$R&DE5JEz6wfikMCl&mfxiVDiO`DMJkGC@&=p0B8v+lQFShC;HjyizJv zn%(};;oalCqeFip9EisTC*~f%KIJN$O{0e@-*722oJVr8b=|7)x;%7C5xFG~Z%F*} zQm{DjWo>#(Q+-R3*cOLZ_<;qEXPRjruhjJs6zwJA`a*t92`5p^3>DJ=W{wh?wTNOa zqFM?mmSU={81iIo5lK}$WJO*DM&2%eF z;c|+ckXwYFDh}$xgZ7$PNBvD#(*`uqIDq~-RuJfgd(6OrxmtFe%|J2)FlX~Ecy#8> zs>DAoa1U$Z^ZL}1EhP?icGJPW@<_+W#v?DrNCp14LR!O9gQpC zWu1+iQSe4NT;VGtSC>N<1{gd*I7H?tx41q~3Z6D_t99wu-pw=kv8WHT@8_5t#&+BC zd#C_4ArFF6@R9*3Tn8#(q=9l=-+_mNVr^l23h(}j;@8Rsbi>sVYLEdJx5c+)71zJDYdK7n;tOun?#1F zDcA@A6I;TjaJ|eDlba$MTeN?2^~syB-~aKyI=%Xzt?fQJd2+sW^s7J@W~!qMRfMfg z3e6deG+YeC34dFHip0k)|Mx=gG+1c zpWHcmcyRCG(W9rJlgH0a9zJ>W{ME}}KLEh+0NClb9{@0{>s5V$VQ`2T_6_Me!~=}l z*WdrR0#JeL`tuJ+zy6+64qzbQ%D3-7a<1zydLjLs=Jn; z>}?p2FH8-O4|WW8HTAXD^)zR@8gr`8bk@~00mkCt>YzX3v^%tFqfDaaapWwf zjLDF*SW>_k15&n}&6RU_YJo^26ze21i_&0}Yjt9kUZPe@l{y6qVgxs4H(6aaXV4SK zBr|}n(Sh+)v|1)qNCW~gA1Eadu!SPF1jJ_uximhrk_BQ>*jze~#}+cdpD{#yu0kZx zNu?Go>Rk*Otto>wt+!O`tXY-4QDtvYSlbk~PPMH^W$uz2dnBeot$$u0TrmV!fMIHL zr{0>jIlb{%sJkwDv@-GM`G@JrC8MiT?V6H1XL-8zq6$qpSye(5qX>>N?u{~0Nu^0? z?vz>k=;A~nL8{Sv!tqqRI*~|+Vo84@9gZg=(=!YIr~l!9jMQ``+g2pDo?>dSj2V&G zhgE?kO>j+Mn5Ysr5_n;XJj&3dS-Li5aLJh2Q)h0;(mT@RmLjpCh%U<_OC0ZXg|UyQ zX(z}U%LLVB+(a2WT*L^Ja3e%PsutWn^Vxx$s5_JFk?L z2dF5b-9Vd!QGY3>;As22LJ$M3CSE3h`!6P`%Bl=RhMg`9F~l*ZteUHCkea&{wtl5^ zK|JyX~mow%2Xi>(?#W6+`u+y=fELYZurf;6%@D zTjRPiIxcc{5ryGmy1t}JUPMGuFhH-oG6rPIDJn1oVpD@TJnpYwYZ`wVYP*#hIBA)E z(J=Wm)Uk*95*Oa~uYQhn9wPhIxaF$ffMyqcOUpL2t$-h(PTTUYbu-U0Q;*$k+m?nE zOZ|$qeifQUz!+2j;a)@l6?ih-VVE6zTsw}|kqW{^z@_yaR}bHh_S^vsv`oJUx7{)) z=6L%0GKQ^~q$o!FZu3P-XV>se0$o{Fr6ABWM5dXqO&cO3_L_NT{VJdlns{(v&}28v zz66hgd4mlT0LV>lU2NYtClW(V7{53|9;H+==#|lJ zw!L;;ADw1s8feNIrL$A-?Xrft8wXZ{wL{KikH*u&)@GUdR*7p&WEa7CL!sWwNTE}rQh zo!&oweE#w4f1YX@=c)n}sh=thP{aYcJj~Wa1*Vk7-{7qs(0VdlrCX?WS2qqFJ^A$b z?H8jf&6T;>Vi!~BU?^#mv7#D`26Ag3IK-3 zz%af3ZohEJIRGrDuRjA6fmna!f)aoK`rGf{e*XjX{f|GteE)Iz6>Jk26dY&x8~g{{ zx=yb%xe+i_Csz$24Fl;KQTPunqE zY8~ln8}4iwXl?9j$h6m{fniCXD_}KPl~RL|KFsbmVXQsdMa{d!YaZ%rEQ zHAY9)=%_Q=n+?`ht))|C=~KDJ)ShWQfCK>Mo>toj_4YO}a1md+x4Ca|b}N|ZHu#2> zo_Uc2Fq15kQ29%o1!ONq8hhFNX!EpP324bMn)38u16 z6`Zy->}%`yRW&=}z#PvptVyhDs&@on%R);$?<~hU#?%j1N!u&LEmU<6P1jd00;*+8 z*zt09xQyv4XWGlDrm{*+VY#HBTu?|9=9O~uN}0bPXrcMeXuszC%DjRql;%@z6j1XD z>3K!Wf)ajlxwM?5AygWPG&_muq41(CX@;+9l3RK-j$yrLLhGB<2c}Jtd3|Ws6kql? z?0M>TK<3nvK0fDd*@^WX8#Bw1o;#_b`-AHGOnkTsVk|1TVm&zF>jPo z^U9b-L{S+941rf+?=XbMoz=_U`b}@cW-S0|;dOTOp}%#faq3y;^1G(lm!6g#fFeRy z!-l(g8~4#cvkMLk1aNAeeVrP-?`qt#)vW=*?2YR<5D{<%0y6>4F?!Q)Scgm;EZ5Ne zRR2k&z0#O;0%+ zfST*B=1o8>01R#zfYdnmCe#CT$puWJ`OCN9S*1{b%)7qr&!B_NSnfFj&I2zLlntDk*dKl3~n$?_B)0{o@Gk3t5j!Og>`;1GTS)Q4|}Ltopz zJ-e>(jgckQLUW7G*J}$8XdO)oORZ3s;;7;*Ws)jSiXA=LFdCXw`^FURL4|ujZ0+V6 zS~>bAo}pP}YG!Lv6+HM~z*I`tmC?23bX5gIMPex_JSCNL;X7pywfm(OGMdwP3 zbzz>|&yl#5@*7tASeFP5d;2vVw@#AOrpFDr^>h0T)r=PFBUIXm!7{erk z6gx9~7N`c!EH@7f^(CSS&Od(pjsf=DA32ZpTQ1=6w{Jgw{D8t-{~@3W(dp|qvtD z0WdF-_X0#=fI$W<7lszj;PfZP{x)ESXNmpxw=jAPuumV~zkm1k-RlOwMG;7<3VxDq+%PEC!e}84Ecx8Jmmx7-(}EzQ6e$%#g3lO)BkE8vBIKK5Vh~dHlof@Ps)qsq)UrJ&QbZe>vAzRHZD+^?el)xcO!L z{BpTal{Idk#;ln&L&Ls2xki*UsOG5iR-!ad!PFAS9$`$S9lEyNAbvY+k#&Q=^%|#@A zX_cXbqAjje6cR-!A|JSmf*8@nXE0=Wh16g2$-m@R{E|<)kw?CfS9zlV3Yi5(oWf#$ zVVSsyATK6q%P3|N(?{dSnPRk&w8YRYv-WGexuA>A2HN(l z+0{_z0gCi%+x2ztD-%J!H%8!$w#T4eN%LtrASwB+?71k%~i$H6R4^p zf~1hBByd~`PnRh*WvyGXH=xBK0U_X`FcfR2o`d(w#fco?&_Otxoq95O>jE^ed(pRj zHn4j>diZ7h&iB#7uc6*Uf7hO?b<5X@W{JVQVGoL?!Og#f52nW+z(ar%_#tq^@Jv8( z|KL!8YS+N49(iD`zR5LpQ{=T$Tf5HNZS-}?O|?Qzil>gVl`)z$N>|osf`v&FieyO9IXQ-noVif`pk>{x3+Q>X}1yfVO1coUp*)j@SLE~s> z96g<9WQ!d_by%p4@YNBHB1{+iDMBB-OI7kc6p^1S_EF@aX#1kf+aj{nNo*O3IUzAc z750?Wl9XGk#m1ySm*B_(9GRD^^osRGWd` zU>H##Y`-wQKp1J)0(#+2#auMUKYaZ;y9l|rL7TyCP&w3ci%hH+@pJ;NlEYN7nF=Od!JtbS3~*x-7E=NwV{v30o}4QL$pBFz zv~8wBto*xFVwFmw1bWGZ61hMs7sxTjWPBN7(ST-Xk!8gdVgOh{IWHgeADWex9+Q7c?TI(F zbu2E=X6s_}OWnJBBi+5#t(`5+JtO`MFtV$R6C`jV5^JwO-&{i0Gg*4KGcq+XJv!38 zy*0hKHtCOsmbVU44gErM7G7!P;rT*F{6>|RqV7~g*CnwHw47CVN#$SA1y}WfZFAzb zK5<(f*=2hdSe|)`b(E~{CP*_SEN=lxUqm*NdA>51ql95Dp&5(7kdaUvV-Z1EMC28f z^9xEi`9%!m$qFie$s^skLHZ@H0%d??;LHkX=xi}7zm!{4AuX-c5UJKmmXF4ZGDIn^ zszGAzRG@Y72i4vYjekrVoUo=Aq22d2Z6*6|8&k99%%ZPjM-?9zxH~E&fnvI`hyp|u z0KoD}(C#z&W!zGV8t#p)%V+|Fy2vEjx-&LsPc3DK9yCop3wQ2kMjimYK+sY{QwvxE z!vTH^AOQ^`;?TeepaSxMCBPN7T(~A40E2R%7u3Xpvv39Y2paNf+4VQ?II^q3)?0X~ zD&S?T=XU$tD>MKWpAi_F2`m@l|7>tId5dpVnTTrIa8O}m(0AY*1t9-5H`Ce^Wp+{*nMz%XC? zj-zp18XNp-#Z05G^` zJR}wyI0hG(nRuL?#Pg;fwy(SgAJ(<@(bK*I^a6R?QItIVQn*97NP6rcRI8bIoHLI1 z;L5?^C*Whi`4wN5*vF2`x}RFeG<(^UaNHLx!%7 zQWZg(!cUWXXc9X`XsG0>$t)F^Q6fW028@ZFOu3&f1$23-;s99`A_;;Of&f_@s*=Y< zj%ICiK++J_qA)aq;oXmrq~5T{|#<6Ceum*Y@i=b6tq)eE%J-%JJh5Jjd$` z*r~rd41r{j0;q8Q>$jgXmob6PufAM-`FaTq%ek>DKm?Qkm2yCWYS#e6f0fODHQ>dWy0Q+-x;-=gJ!))r?RVLKr*9< zuj6wx9PnN&aAOh{L(HU!7?@;CF_R@?^Mqi__&_p|LL^m)b6dBFK?9$_3$aun}x~F~d|$(-u+{1yzbdva*D%DkvA{7jyH9 zSUK-S$#pG~a-NI`8KeSIULjgvF|UYLP{J)Pmy}g#Dkvs0(^arIv1u zXV4s(u*9b<$!SA$%n+Y&H7r}R^YTDH$I?LLyNjzdg=A3?k%JsqF(t2QME*l zLtt*u28ZBe%#QCK-GRpT+dTU5M~mL>FLHZj%>h?V7i73(%DsI7tuQtsc79F!|I` zv#bjYGZiTU!&+LY0Q*%+7IGxUrmk@UMGOwCoT@LQSrpbbZ}noP|8}Hp$DX}u|BIb) zC-9}vWCInTK?eqa1IrD7q416CE<{sqq2wIE=5@&>Q_W3V{VFgFekK46d>FLvaQ{Fo z>}=pVa6v#9kPI#kh6cU}ej|{ee)>tx*!|?taqYwd_{Sr%wvYurGT%|jH<8(zvdY{9 z45GZSQqNGObM z1Zl_0hu+Pz{_P9ElC@zK1ON+kqc}ql+#wJPOchuN1fS)?&Vj5 zYrnS7J?XvqYGms}vS&}~?$t*p_0cJPctRH$*Mx?ZfdPrTLtty-m}^;vYK}I+R)?4X zGqIb@HJ35q%}GV%n5hyUO^U|7DB=)F6s{13h=L$l9HFVw5?8x6HYD|R3ta6qO`4@i z@N@~DCN46h_*%4mB~KgYslq}{SZoZ7be{IXnXRJ-dv_m!{W?SoAwE8N^8E4ZH_zXH zczbpZ4h-Og<2W$GFr^>>_CN{0#bygKxExmiT|i-O-TE(JwtoBlD|o5zzkT~FSOeQH z)Jgd52LKE*c(NDp=ISfJ3F+$VcQjP??FRzbB~a>TS0RQR&Yzy2UE43vwbQ~GTnC>5 zdO>B-+2tkbLcAsx_Emoa*f|Cm&@zP$5>KYG?rLFV6i1u%EM- zfBfwEygEPoeER9b>Bn~;-o6HafeCy0`0?{=hTXfH)A7TTJNND!o*eG&@2v0U7`DDV zx4JO3GB>e2J+d@4yf8ih7@HpGn&@pG?riRFK~}7zHq}xcLnMoavLRo}>xw$80gJ(- zS3A{mvs9!L3)BLxg3pq&X%aRgM>2+xLE|&%0w#z75(4CST##HSR0^dkkxVI)0KkA} zDv3gt^I;01LM>6-437GA(_r`T)aXo4dtWA5Yc|-$0y&Gxr&3rTauuCiNuyNJC}akO z%%qT66f&Dh69{-pAy1u)_^>LJE{!2*u*6J`q{WrBxSEZQHjSf8YU_|VdnB%2sk2XL zXd$s2WmU?O3Q=J>zpz|TP$nuUSJ8w?y>~_zSWtLph4y~BEXo$ztPWpSe`ohl$G~KF zTX$`BUD6SVTZ65dKo?b(Ea&(rlC;dxNn+VJ0JQqHKp+qddFq>z%WLEFH^;~3CS$dY zA1?o>X&!TBW?6>zLYlvno09sb#GYxYs*Au1R`Q)9V_0mCNla<9AH1u_(Y&v!K9Hvm zlr?+G^rkQ{`U}ZYOmRxA-P+)!)H}>Hwo^2XL|Lj#6fWg^O1O?vo|DM)6oaj#7>g=Y zg#=k)Ie?j)SIj6V0oO%AGs)2A&g5V63BMGS-^eHC<&*Mq17<}6b|lib#+a`k8f{f5YhJ~pZh^ow1cR8_K!Z7n7%3(yP%Mm}B#xtIZt zwuGXs68WUo7NCVLIH8YB>tnN~?VPHg5q-TIOEWj6A?pfCe4t1sT8(01Vnh zXvCrUhC_IxhjM@x_%NV|rFI4K&`^R+0k%P-3Dw{bY#Ceu>PLER1HgPu+W;_6<0gC; z7(SpESTRr2rX@A6^7K{;g9N&%ybA1#h)9#_tYJqWL!v9l3@wpvCUd-|z;K{;wP*2F z*TU;y`z=Rq$zZru_#z-HfCn3e!qnF>95`& zLExB496f=C7XB|Fit;Oz#Wb_n-fB+IT5Fb^jc8$hxF+BbNCOxHAi>44Se(&Et@7eeq=|8eJuA}J+?K__KUARNsTL`#r66VYPoaGkDx{^KHl6tEP#k&6Cd>#vj*?+!H!`^f7So)8^Q;IX-QSPwJxMn#hPM zG^7ah%l*A_ce}*i$TwuUnrfyZL>4;BSf(&n*Py~d9M>5b^7(|_fpxjw7E5NNUz$!Sr1dinh_vPF7%d2nTz>qV$1SUZSRfBv^ zKWBI44A#Zz`T6IwQ%Kt>2v8SejW|m|C7011(Mr&y5aD4s?(Ab)w*o_NLzEx}N5` z_PXlknnYtdmWc*%?_$_t@|rXbt?YRG-wMp87trC|b($P~}OvyQ7M0<%_iaL&Gkg(;x8;jP*Qx ze)Q`7=7T6KLkH z0S0X@2-Y>onwhQn3P!7;C<4Hxi6f74QFQ6A>pxuND*iso?qu8({drggI(gt*J#zat>P33XZd!rYozIl~W{CuGSN70P|nP)>W}g6-)<9 zmbQk+qb+L#>+k#4KGcpq^0uIGcGM{ceh&5fq2Vh?lfw_Z?T6TYdD;&C3PId5W!J!F zfwajvWpoMz3{yqXrfa5}6-#!_*|_a%+Xq7iJ_%CzrMTw}NB~a&eiStQ%`-2XXI``~ zzG_=~T{CjmUB99W4OK}Z1h%b$Wg^m)rDW9golg+v5fwzP%NQN8XBTbRo4KW)wo=2$ z;UPbl>!r;3MW8HlU~td=&cmkp*L~aPU2C7(mf!VlorCd$Ox^Tzs0NYRyP zsv-%8RkApUrm6NdugJW;B6}y>&_aMLxqTP}GLb|y6 z3LiPW{CW=Q1*G30fA;0;=L-PX7qDRGId_IrdDdL8d_KGQe13HbKjiY; zr}L}-9|r~`!-HV}s%wlvIdBM}=r4u=ncysf)?Y9~oXhbE^!vA;^TRN}aA7V|AJsu2 zA;4WAE%>n9U>FLifAjKfZgHtsPalIJd;a(V=;_0IkMExV$$kdeAMPFQZSU`H0LFGV zmbX_IHdp4?muJ`JCvVPI9$M(j4M#^ zL>jR|BT~qP3YA1-P#G;co6Y34nSFMP&uI^a1MyTm)85iOJTTtfJrqyXY4lbGgAWX& zQdr>3m<%4B%4X6zVu4I1R#lQXWD=*cl2=(JpaL;DDv{WvP&!nafYu1?iE7O;jX5FL zg(+-3p-Nti0_gc*zY5FbMMNu4(Jr-2E8NT4@TM}fEcH%^?Y(For7o(mCN!3m+?R=yL{jT=grn)12 za;s8MlSi=8lr6gCiav8oo84E}9jNQ~G_|)hnJsa6p64CsddDf2o-##!sieA;8!cw~ z3TU=Ms=0`wDXLNxSIUY=qCz4szl?mNbME8g6I}K@Br60ANt! zYT1Ss6E~*dz)TtBU?7E79vXc>7X}!h1sYjscClB0Q?|M_U+XS>O9wGQv~Ky@cay{Sumh`~c>&MFkCyA*$;F%80@nIFZ+EYs zg5QG23l(}cP6v0dAO+@ub%Vza&m4s32|x+33fKlU;e7%~28VD>JYok7tDSh7=sk*b z9)#NV!tML;z=8T;e7((^uIvIuk)$c(5^Jr(S|c^ZsyKQgU0K1@RPpUZzME^P1Ayrx zlgZwr`f<4UlhnvVcr&OOeUu%3po>oHqBDm0oB{sXq!&Pz>P1U-QJ0+7#3yB;5s7a| z>Km5&24vm=iK|=e>=fA0vZ!1`BU@L`&}8ZA3`qN; z5wb8)CGyjyA)YcSK;4OPp*bxwB_-yV)D*1i9NM^jfA8L-g9nfH?>;!V_u%;P(+AIA zK7ae`ub)ppU0$94g(wU#fYWszpoI@{9;W~>IC};)5x{<&ef!Ps1#ao`%N2sz)t8H}-#?sQ;EQ~`xPm;(C4c!pD(}sj6wt;fe?psF&&s& zI1fm}+=3FEVq#qb3<@Fhv$HV=FibBfMCJ@!7q)RZp5fT~A6Hl46oFx9r=P%weR%)& z*Eg@;zI*`~d;9X)>*r5iJb4HV!&VG1mYXYf2N-s8XaC^V=E2U|{`M-u*xKUe^6dKJ zG#Ikg`N>t(yEr;GJ~%znhdmj0!{(7nG-MK! zOk$HN*d!7MR9VTT(L@}!S|HHNq*krktUyNs5v6-p;hC1XCnc_Nk-blD?~&U&WwtJvqgU)4ka@wl$mxWnDI%$Y-dWVMLwFR1V;{R^7ZwkEx&%^aGV zkBlvc=B5Kp&8DV$U01WAtJ_uAZ;O-5Z1-5DroCKRTOvpl^TWj)S24>`L^Bpqb%j-` ze6l>RLY!YA%p-8~N?G|O^!y^~4Io(|IlrKypn#Z{N65=7D<~io6ri~L!eV-1F{8MY zT|^X>R?3MC9g$_MV4FxxJ?elhW#<>?=v7>Kqo}Hw$SEOQ+HO1t1wT@#uX& z=fj}shZ1OKp^hUL3<9%vq@2w_)^$e{n6QKR;Di3{OK@NfvoGj1s312>=qXa^4;yjQUE0O%F#x(xt}0KnRA1zLAQ?R&na zO=D!VN*ZM-q9S8jZLb!n{UoM}NRts6no7Qdz;(%;9j3^nEzio&o(~z zux9LOyyrybAJZr1a$6$InE_q!*U#RxHmvAt=GBR5d1PD}9M^;=)uC~Pe^}}n5W9MX zjvk?-Tk7tWxO&8nZt#D6Ya7?p!qC-IHCe8`SrX`D+dEjs)+$+=C?@%{%vR-F>ik?*Rbp_Jc=vpFV%|5?sRjUq79G1VUgS z{WZP?LI&$^=mKG$UFYHKXTVaqHv*2^zY3F?5yI?IK5oB`gzgk9#S zb_Jh;npYpr0ArW$&n`Y)eu0l8fMG;ojNudk=`X(pB_POPR$;v146cT-1j=<1LW;W( z|NQptpMLudQcN-|3^owJ>{~9N1AZD{?9<2hAKtxv|Mt!MH?KdudG+q~i?=VHy?OBz zV1`0Go;(DMJ-mDJ=-x5t?$Q3q;m+~l&Yk_OgWdK0Eo8`c))u!`7PeOAH~E>-Zpe1lRyQT1fU!*2lk__hK6}Dzi#m)!i^i#u znxs5~n5*S;)LfR54Pr{bhtZM5bf%cW64TirA)O~>iDVp!S^$PjrIlzjG8BKWkZP1t z4OlCsOsmtFY&N&SU^N z+0KFR|NH;*{}`Gb^VHAl6Wapw&@W|De z)x6{HyJzn`F?SxBn-6uFZFzK&X6mZawNxl;N`&DeuBU|KEMYl{nU(^op#We;Q5RFy z#bhbG$maovO6lOq3X3Z93rP8e#QXw69@@zTMSSFgCo8DDQCO8%Oe-iu`z#le1jQA+ z!ZIe%>lZ**No8J1RbC0TjLa{m%E??SPn!~3TV&2&xqDFV9hSNWAcb}cKw?QPnp2C` znwypkT2{l`y5nfru+^_YTM4iBneoTaEJ7oW*p_QOp)myky{z?XkV1BLx0OIpexaHr)BzuDKTq~O-QV51dg+msx2go$|%Arj=~dbkZ66C z8~~WLlH+D566VN|J3HSt^R#2(Mf1!vf9p=o@Pn?^k9e2|jrxoN!yYAv9|pVc0Kk9; zm|@o@46Vx10vKC2g7-?z19X95*mXG@cLN=F91ZZ35wqcL@y`Knfx`pgd>Sms@cpLg z=j{uxQUgbsp%Z;*yh@xZp*xBywP1WP!1Bwu`2GAEb(&HK^bdx?REnX%`o!N=B`HC+tQg|<{R!86P~ zMzonu{fZ&8sH>jWRnPf4;brBftzp?*Gp7wts6%5wGP!REGRnY+DmbF>4=H>D3jd(g z(X9vsL$}~13fCi z0@&UA0I)j`AD=vV`tarJSMNT)J3aq!es%g+=OLs&-PKgw$D^7QlP z_wP>Mz5DR`_4`+^-oJW@L+t@$AneI-zv9DtckZ7Yf==%29qsRc@X8#i;FY;I#I zH%>M`g$Bu{Mi$2gW`}#G2D*S`6FqGsoy|jS4FI!_+Ul0-L}N0Vjrg-6cTK<#tIN@^oq!N`(ss@Guv|5{cgMp+*ZES34^Lj$Su&PQHnZzJf z&?|^EEE17UBeU65J`?O8(32{rR0_*0cmxu^jL0o1XP1$LG`3!@j%f7NDs7EYUn?^< zi3}}#UAw^8!8djB&3z)mTM8`eZ_R!N(GA-ZVF4sCo(o!GM1?n}KR6|yK%>>={4 z1c8$z4luPf*4pI&c!Iu1uC9Boj{DBGJC=H|0vm>!6`psfLY*y_#7hN0GG7tLTflOa zay(>FsDy4UB5MkWaVek0+5D!9Z~oq`9>iL z?NwF?8FGGcC73X%Tu5XQ=}K^5bZLmIu7w98wRg*$-4c6;)Y+}@4rxN;`sj=~wP2}U zHdilMYL@-2yRL=}NBtV^MoSK&utVIkhkK44P1_h?An-KMu)-^UwC4^qm$9BZ!S+38 z!-lzL87;e4w+aFfXDXw^+3n%aQCsR32?Oo6@XY^ z!Z5dT=-SQ&5N>BD(Db!n`>jOpVXSk{U%#ew50LoLB8s)RQd@@B$&|orM1DE9kR&hT zI8^>VXu&N2u=+JX4tTFrZbC883xEV1g6C$f-*B}6$+lfBw_*eL8fIQL&Aq~Vn?X(R zY9Jt!t7Qkg8Wxbxn_CPMpamC%s{yw_Kf@8hlTAFqCOFszw|blzewZ14kRCdY_Z~J) zK67VQ#OAh2VTdUU3bhfnB}t~MN=XtTRSEW;#B;FKX>(-E7@0K0rcD5<#JsD1E7pAy z={&M!*8cKdXiHW2Q<~D?z?SXxYu1KUV|LM0yX0=$jP>8C8G8WAj6DEPZ%i#{V>7zg zj4?5%k4_sPADPmI#c5d$+Kis?f@YeCYgL?q5hsRHzJbwN5<%dsi0bsd}RQ?Vs%rLC$ z?nG1p81wDNMQ&A&pWH%&Ro_8?97sQ1d^v}56jg{AgTpi+1Lg_W0l*+1c69|hy}UfV zxH$jv<>G6OZE#KG;jTcaGw|Xnr_0mJFTf-KzH=>>Tx#{k3J!sxo50R}=gD>pgp$5#ZZukc>teo@H#D^w zt!VreZNCC3>QT%EcL2jKK7YFS^x^EoyHCHq`S|wrhquU$fpEY*UOo{>hG7P73}E)) zLTi6T$vqT0+LM*&kXlX4R(+B zcaHY9<8iX?rrM7Bn)XbhB^|Ac25N%dxW^H8SOQj~-(qm;@Hm-BE#xctJOz&@VX;IE zhKL3XV~S}k5sf9Lu^|=Ffo&WqM=0frWC9d(uaqdYN}b2$Z*A`A>gw~jgDR!IzOH3( zV63}q*yD}}1+rK)-QPEoPSx40UWr&urEq{@Ab?pVnaQN_r9u^r%EK0oP);u^XO$B< z}ouHmo%!RED(5n3WkDB*r?Sp;ln12k-#Q1g0LYu7{=Rrpekk zx&d`?NgvxV#MTVaMY*Got4az~K4&=n^xcP%g>|7ZB6hTh-921GYXvt!;-y5EUZJIz z$Z#>)a<|u-Zt+_qszgh$bF8gnth2r?J3LnV+wZ?d>YH@2A*pw&h#tF9;T5AjT-G$v zn{0h+5!1rgd6`methOoH)a_2TNGx%xGG<6l#)cjQ`W`x4?kK_wBF}`eX2a8Y$I*UZ zZMh|j&T(9QWL;B3@C(YgH;P$#CCp!n zsd>eeg5s+D!rWeE`K5XJWj6|lSij^GZWN%cUVh2#SoTW+0c>1Zm4w7HlG%1L*GCh_ zxaur=ZstazrA6ZCl(~A9zF|#h!VsG^!kcw^0SE!|G;N{bleWFg&;wudj=gpj$mB;$ z<0G2_Mh#M6fTv{#$W%RWFFW)w)^*zpmLj_fvemAlSiwfLoQJc19Si~3ru4wwWY2MR z|8aKU#2lY61c$0b;bMwDzd}@4!7HN*)Yd?C^8g90>0qGn929|1WNosiC*z&l?eou@ zXP?G;4}C4$wd0SWtq1P~jdlI>3r`zbFg`ag7)=EW<~AaUqb2YkfJbSXf89L)reWp< zH0yBNIPe7DKk5-hlcf&5ZMQtFyKq4`L_F?0^5x?909}s8bx-R?xO=a5{C;Ni9stY> zo+CaZFtwGjyoFV!Vv@Q9@BTvo`^76JE2*-WE;M3F&zrN$fO#-Xa940YIP4?k#ucDEc4h z1@9Tvxh<#Rv$>_JZhKm`d!UJeffIrkXQ1!9YW5tVWhgpI$Je7Y*qJWA&mwHE#w7hI*23 znh~m(16{Y^22#W59ss2Qc$=wT2M-GWcx;)QW&mFG61*xIlXJ$@ygD|eicTs+tvmM*a?$gL_a7ZS zeth@Y)2DCWz4`q4-TC>)FJC@?`}Xn670!J6@)d_8B4Q!S_3iZg_fKEHo}v*f1T7SN zmKif(7J<-yZnO3uFimAU%q2&mHX7!&rkwTy!vwf6;6FQgX@3!^6B#Y z^vfma)8)m-i;LWV7P{ugoVz+byZU^31volA`}*nA<)_mtAQqg((1QH0pUwbgkog&f zc=h=+q>#sC!g&A{WUlj=TR0EtHM+2{3Hv+1Q00qrJP+*am&@zfV0eXJsE~7GxlYC0 zBe*-oHEh`0mrYHy?j}4GaS}20R0X0m*RhA}|b-3=filaL6KB#bY1s zE(S2$+gjhLKEQ=<|R&1!{Yw85LPL8URZx|BUCgk23rGHKvT2hA= zG`=aVcfbpCf7YoK`{HF)A~*r}2=7BJ%!b%&$n&<<{_<ej5;Q%ojGJGK7G2C)F=9axsi35) zu%xn}n4Dik%Iz5q3`6unJDHVGi-^1ul9a?Sl2|qp%UQ+q(S!lIG|X0|1co}1sYzmO zm)W~jo?&fZ0^XEunPn&7C%Y19+mCe|CcBU9H7nkR&0yP}vu@LtT>}PSLk0kVhBDN? z52%ZG-3hntyX!YR^_$7wy9NcrS|p^ zIPUxk`HeC#E?hEO<_y=k!rAgFSp`E^!Ln2dyedx@04&+P+cfp4ZsLBh19*ARIQ1NW zgd;4_U|8RgI~Se@sDMIf$J>|R^=_O(+OqHlyc(!^{xzHe;$EW{Qjqtr`PaFY_dZYo z*_Yh98<2u*^{d|YEpOXqqW=&8RzLPI*s`S$jk7fkB@AbAm9d1ZE+!)TRX|`D5Co-F zI(R=Y#V5_x3-DQB6&NW%7ap&IJhop@4)g-q8X(N9xG;C;m z!&Smi70<&Ix!Dp|6-QTADJ-iLl~bfdww}m$N*pc5=ooO$0!}NQ^INF}eR3|Rd1HFP zRJ{oH8Vhwe1KZG^nKy0qEB1z!_`p#HAU%A)Zt5A_3_M#9Hnr}iO?aX4HgCBa*Wo1z z_@_oC)k>x*c|GfSl&3i zzjO3(|K#Dp30jIC?AN1Lub%z-{_W}6$EznziUX1Vwa zAQsT;0`K7U>GBL1_UZBxfCQgHI=lRQc6EC89 z;o|tpAo%!~^Us&3A1^+CIQ{S|*5~(cG06aF0JG~svY)++4^AH4J9>2Y&V%E_H940=!_A3~jT@l%SqIx{yW@ z(Wyc@Rm7kP8B7t2E#Y!y0)bMD)?L)fb$X>iqc)n1E}2v-5J>qviCCmi$n|EED;lY; z&9(r^x;h7IYg_&Pcwa z%Y8~!K&kP`)E>FsuP_8vrl`^wSC~>#Lsq0~5E@zq#&*7?OJL~{+6Kg~akYQm7@jxB z=8e$>U1(9|Uy^wjgw83Fuz|>|VM*Jeg493BRAq^DwNN6To$veeKlzkxkJYr+tRHNg z{dP7uJ*~7v#m;tVaDt|3{e|FQ$Q$*sn~K0pIWI(@D&;zBb$!k8gT1=Oq{C%&d98yZ zz5nLF`LEl0hb+Oy=CLDZYN?nS$glL%l&y}2182*Tz2%Or<+i2uz}k9fZrL|A-BP93 zx!zfZb+k&|Ss|$};l@kY!D6PTknSj;S_-NR1!Qeug|eVrT39A1EaMlJa!?0j3B9n4 zSyV1geohH4$k>BHdEKw3FCw z3O~q_r}&zBv7tk5>sR|m4UuVgcGZ<#wN@{?YS-Pf@aj&xS8(1TQhjSY4SO6F4BIG>OFF2Z(8D$ zLUUsY!)0HS3P{}ZP`o> zoHWn8geKArR&4Sq04z1~Ft>=*j<+2EcGNugrhD~sKjD+zd-XE={btR%@5p54x-(nq3MTT1O@_b9;guRIRpom9sxh`uzvDU?f8S*k^AA+ z9bNMLob>LEZ}Z z%xzMW>x>1MZG*ssIT}$2iMMqZ00!(wQ`7qIrH3E6ns%H}AtxWaBDA2m61Y_?WVVo3 zJHQVdumK;35_om+x8DK>)-e4%IdBK=+*7|UGItU;FF$r#I(U@9<)RbB@rI9Q(%T};c)k~0qwE}|$M$=k*)7iKh z>W1fkJ280DIQt?!f&zcw3B%Kd-{oxDaJOt#k3R6iyG!P#uXV>(x2jFd8h&cp5T7tb2P9uA*DS&yK#H-@c!U{lv0mdsgOod0PKma5Jt-odPxYXYVu0UrOIduI6KNPP4 z00VTL=OA=`k&7fmI{k75`h0cy;rtBB;q0diG|B}~{B(MGcK+qlXOw~!`|$Y!EEf<9 zQqY?ZpRY;w6JXa2!=XqTn<=5V_ko(!2uaC zVR&9Ma0_apkj1~k?x8-;fZ&6W<~Az3KwCwhf4%}vpMC_Le}ccpYwXMbX238oWPmXc zVC*N!?w|Y>yLdadTjs6X$dGO9Z?EIn#jVwajhl0;i_V{;zE)mT}0!g1MWHkX9+81IDTZ6pDyO6Vh`_ey~|$7DvJr$OICFM5$33)GC8UW0Hs!LV;Ys zm-D#_K$=ovuv)wxcQ_nQH#K#2cMpRJqf$9lRV<`R7O8>-=t8PsQYyJXNe)ZOM)Z`j z7z!p$$!2KT91WMJ<%{%UxkaXND0Ci`F{m_z)P}f1pOhP`#fBQ8zDA(W@^p0~bF0MG zC3E)6J);WWq{6c(b1%v~OC0kUiQi1-)r$;+`p8X1cwXr2trB_YY)vAaYU!#E#NB~d zz!wjBlL?tQg!b|C3<*3VrQB#y`3h+ELaM2_%1}bqmXI|i6^de#3@sf=kd%wN^LpSSiy2s za(#4hlBa4A7+b~GE|qu0o?3Qh*R81~TQxFdro@5;Tgi*lT zVWjIY*?$u6KJqqhM>qrlf~tg3L?WS(AO9vgWmf2?8u#l$p?x4+h_o6_Ckf<>;hDS zI`ApnZHV|Wd>?hqR!g3*s zKP>0LpMxUw7=lCA(U>zdIShlq-++JmNi?$pSmmhOz^npj z8FM8dw4GS>k|Ea(2r^eM+TevIv*c=AiT517$dn$hbN*sPy$}{JqA|pv=+2P=xH! z#-*J*TL<@cZr|TOd31315diGovlowEy?OQVGXMNjOb6F`!0bQ76$c=qL z1Ud&k)od_)P;C<`RVKu9N5`8*e{d;o?(DpGYn@?7b3VW+<*9YP~qv!7*y8`gK~Tp z6AM0q^FIr7b_&t!>L-UFMW!m(d5C)saSDQxKfZs%9|7T-Xu#}mk%~y)u73M^2@Hc2 z!wi!Qd$O~S?;r(?fpDw`crrXr2Er=^<0yPEWcQB_?%v)zKG?mphobNgcGmZ{R`+rd zjF@CM=O>rvCKjeg=O%}zNBgHn`X&dv$ND-)y4nWY!IRat)mFD=l6Vi7OxU0DxneGR z$Y$~ywQh~lsghe|V!e>3;>>N8lU=Jfry(UpYIW2+k?uOMF{Teubj0xwE&gv#YB< zk+OC7h2|DpTic?+u%)IhnrUpPZtBmpEpk+~g_S-cH?0fL`P&Y3(P^5pmdJ~c#8I*& zMp353o?bV+u6Evbb)Gm{Puy+y1Kp48jR)HFI>$LqQn!~$vL&K;DL+`w_LkBe#Z*f% z%~H%T7txF*R8twSXLn{ zF6ZW#ux=Ey3QBp<_!bgn#Uyn(#Z2R)Wvgi71X~G@s}nG$4UFqT6WY*(J~X8dPn#lh zrs%vSv0zOt+iO-l4V!=~JX8j(3byWh8n&aIcf#!l@$NgIVCyY7)jahA{8{6~GoTvq z%vHN$P0cAiy+p33uu6S{$j>KoNi3Psmx$E1ms0p8Bw=}#s)B8kJDLsAL0{uy-RN=S z)PrEh4gjov;t2o@=mKptV5xoiePZZgt~(AnD%`OK<_Rnp2pVxf9R?VD1j+$m06E+} z2qoCE0K=dhT3e_9hfoM5@L7AqdbICOtnV<|cZeL==>1^ZmNhXWGPaa6U1c;=ISp+b zT3C+a4+{x`k}5S%owUTpZ0UJB{LH#lPunhV%bnZ*B{lNE*RhAt)v%W9NJO27c&fD( zjV!L)>Q|wyH&!pHqSMmAn7}>Eca4aB6Xwh+p0WlRYb~100PqIk4m!v{3E%+(15!*l z{4+f*+i>S~Blk^_$tqEb#0d}>=5o5Kj3O;2u?xYhlexuI5rLy+>Efzjk2W%7OwF3A z7fm(G-d4aTeD$&g7=ywNm+?p#9GWvrAWQ8{Ywe1?e$AO1DfD%0`T+BtyTPtou4c5- z7zm!>b%!n7D!dTDTSBOF-`%)j%PdE`51n91YgfXZ`_{~&Avt5OTh_%Uw2={YU_k5d zGXw`D)@GI>lx`Vb-MhPWaCiIg1gL@C}JbZHR*~?u2;raXADu|!IeM9>C6_0g& zxV(fy(1)ulI7Fjg-@pH?kh59XNd28gKo<-W;0^9V1j_~VI?F}MV+VF!6Y9WcA%#4^ z22(26g?I)6Zef7EKl=<7uyAF-*y+z+#4BLf$It(K7JoYyl>7|hxcu}9a|q+=+J^yA z{!S@43;Ao9Vc|S*3s3|;4Ed^@oq`kt3=e<-z5W9S_IH2*y>QebMi=Cv0m(4NK;XszW1ru@#cu5H5g&gK`gs26-qQyskM7<9j2-Ro0LDPKZ*2k0Zr|Df zo?Y9rwWS&GWJ|N-$d*kE&5jLBkMvCpbdB`1^>;K4v^U|P546ljI^K|o)P#HquQTSb zM(vi6)#Nj1ttyF8Ce(^JxhZAfjA#-%RZOcA(yGJ^8t_Lz1KKc!Og4|n7I1hxHb=k_ z2)QBwM=a!lBm%CK%a(B1Vjfqjkn6#L$$%D8jaaM}2$f8>yoxF$Rr1J{JPK7vXGj=K z2_3$NA+4xuuPYb>T4wWT8XhiY-|-8+WE$Ij=o)B?v}g9)PV(M@TNAhq6y7Qor8RRBU_!O zN&{6AKTVO~8k@zAVYzo!5t!o`y7DVMY<-U`v>=Twa;@FPmD*T3)78`5+MbT5P0MR7 zPhTvLPc_C8_Ea|1IndWPu@*>=R&b*PRzhO#^JZ2!nwnCki6L=HbP<^;s(06zLydB0 z4O^d15AH*Q8}ECR>VFz+zh|%8b2Z&|x81ci9?IfN3}=6ZrmNd)1y{y?@*go-#(JEs1$o z?JAHd)_DjF3%2h1nsx#$dy$UANXKme8=MNDxcMzOmF_>O%guz1bsw5jbNa}b$lOvy zHRY3Kc|=|TkwfLH1J&&Ujk^Td0!bM~OA-1t-fly5*we6-9XY9+c<623@U?6=O+T-n z1Y>arNYlFb769h!xC0CTfB`LlUeIvkZa~Z}KoJ;``swG`fk6Wb?LM^Z(2PO}oCN{5 z;8W1N0<=KzSvZxQc!Etsy#ID){6T8)sCw`y*>lShpJd2W#Z+r?m9B)WM0?kjalw8S z5yj;+qukzPOHEnR^EMQsxdz0l&aJ!QYS{)W1|AUrW@}uxH*Hw!*Uh!-05D|2>Nd>T z6?1mkl3C_C`lS9*7g(|8Tdt;C^3b%e`I0SCt9$i2M zX4tj7Z99>!Jzv9`$~{2hM#*e1kzpdx6kxv!iOhluRuP$BLX{A>MxnJ<9qI>i07bx8 zIZ%k^fwyJbUbhzRIxvFws#(HAUvQJw%(Ay-D>-nS9=ewudsI9AI6DT0?_uNY^YqAF zd&7#Ye#L@fP?tfu$j@cKbI$mprLDYZTe1~r-CC$)5B{d`UIHXD*UY;bR^U0?GK>1? zxIH~a*O~uLtKte z{Rf%9=Mmv@n~MEpQtpE2?B&HbwD1+`JpAp)H=q|L8I+)&L*%i3b|C_;{_)3;fBNk= zpcmwUWdHR0@Bi@IH-Huh)9X6(?eYu+B*Q7%OZxO9U<|_ykB|Yzuz+N*o<4l>`2N#} zcOTz7dUF5x@%`h6cW;9&yLj`w$s^>&Q*v=4Q*^tUv0H)K0%5y`-l)kcHJmigTgr`d1OxeY3tN@|b_ zbwZwo$5wM$Du5Y-CZtlpjR|QqK8+?|F!&56hfd|dA(PE#a`-H^ki(boBqA_r9I=2e zm&nZz^+wPFi9j3i(JK}F~uyNiYL;Er6!rerqH-m`hdz9QJdpxV?tr9 z7V9%&W3AX!F9e=hIwY1pnPW`uoK$*ee;agl3EW<~Bfv1f)P z%;u3iV&}Llyd;S(ajk;{mQ$&>HnwJ8zq`Az+LLLpEU&f?4rfwn_s;%GZCk4?+$^)T z5O_(ZqSYB&5bGO?%LU8ZN7g{xpRAi$TK~8I{(t-A!|CkyVY+QZY>u~%pVSXNOm!Ty zR2^h-Bi}OQYC80E-gEWbvvl1yG;Rrk6Lf1g*EQg1-VypoN~JYr!fJvbP2eZWxIwf= zs?b?ZSE8*fizqirDf#8JJirwIjL1U)jbOjZn0aNi{4!cz3EH7g)4hcjAGoZY|iho9a7`_ug@4mvy0Gjy79DF%(t;z&M2@4nu4Rq&o== zWnqP|h^#2380pfO(%oZ>kGtzvlKpqmgLmN#J<)dr0IMFp4=s4@o=qDcY= zsiEVVvHQ{9{X_r>LH54SeynTT7#XSH22gwrNnKPSFDe)2mvZt-xdlWqk!{lldL7j> z)|v(IC9ak&fL46)Ztc{w>?GQ+3lN(Npa&DSZpyA0YF4lVGuEsas+aVsd0Ajg9vt_z z?s}Vdysi7*)&qC*o-VN{4NMxV!S1Ywx=`o}+#%d5@E8zvCxu;zd8PP^3OsP40cE#7c z6Ye-n^d0+KcVoRr*6d1-VaupHF^!hU%I${wvVGxA$KtPOD}%N7-K)QLuYPDpv!FF$;Ge{l&+x)x9h3y*k# zK3;u&cYcY-z))e%a$$=D%m9W#=9**}NQh5(NvDfT;MOTxtPqfMaf-&easn%sgV|r# z0d%1`$RE*y8pwfxz6j#HCKmKxHXj2swOpo$kuPz{uT^dxw!~#L) z&+p$c0{{5_?av?I|NH@Xy8=N51n2^!VX8qP?pnkd5cXss+_i{dhHcrKmrq_jfAr$% zgXd4~KYeuf$-@&!A3r#Lc<&DA(fy-)#|QV0_K$DhI^5d=?QE{>Y~I{jUtC|ATV9yF zxj3~jJ2pExj13vynQUsPXSBP0sN*NeI_qlMv+1T(3`hnT`x%IDHn?>vn^I<$iVPyY zmd{bL88Qa=CbUSEfCg@i%BNEJG>U*h$wAE3`(V zU9Yzp3=Xx{$>po53^9c+0xL#iNI)zO08C1zfHUJ0NnBzDn}EbDCo-s1zC@xWk-(Ex zm6el0<%G&|LKTt31d>r`0yRUv{R)L{iXzJlx288wzv1>x?o|gEQrM?v@N*BfM$zo=-l#>K2CXcSjB5PvTBvo3? zm0D_BYcGC#{a^jB{^LlsEz{)h=&gSE>|khmMC%HvJuNgvmMpFlSq3Dg4kFXm(mnQ{ z{#XC@_}SCO-fmwqnry7~B%+bJ?Abs3BVT1rwahgR99hG&70gs&Rk%{xY^~XKHy^n> zPP~10y*)?PrafhHMUhxi)~xeGGZnhdGHGL(q_#qmtq>)MXqi-J5lQq*5d|&gTU3=_ z#>gjdiz-A#72-mo;6@ocpTN2SR4b?cQc`uJ2mnU<P9}EC{4~QqTVQ?-zeec zl?wCAWknV0l1f7v4Z(~e2s7m=zOGJY>rlCR)!rekZ&VkYG)8A_H7ow+UA%b;Fbq<_ z7#J^i{d%P9pl$wj)6{c+%eEyor}FfWc;4blbpc6SNaB`JMFNd0TH8}vB`qdN@a8Wp zRZ{NiFvQ30wTr&CZEx$gqi(fs;&H>&vqa8I0i1HP!Jaw6skH9w!vJ-${u7`YYS~-iVeWcb(aw;u++y>P0$TiNJFy-32(TeBa1!ge0}Zzu+T5Po z@u8#S&{4d1FVV9XXkL}OI?GrtG|z#kDIzF}2$K9V-i=a00a;0tg^ZB_Yc)KIrQ9lr zn|OhY#<^EDP1vj6-EUFZgG882&4NVbL2YPhic;eH5C;*Hb9Bnh|hXh^% z@6FkphFlmu>P18m9LsR=WdAW>EY*JkFBUb!_nW7mcPzeboO%ZC3WXY`7T{7KQ}v>u zdJ*?_!e0UI&0e?atY3?u)vdOCt=ob2ZA%8~&j#AIye(^{)HE7IOip_;^D1X2Qx>)c z>o@P*-#EMj0K@hRg&_U}*vAi-mme;_fZktRUB}Hs1`A^hGEe~@;xRB_4=@9Wg}u~I zXyt%}F@~sij#kh(1y+4NL-s32viGN_r&oZwi?gerZY*~lVA#d`Gw@sIkiI(wXq}>H zj&l%P@Z$3&Sh}430xNcU`SBB^SD^PF&OUs)c>57C3;+fhxB z_Ff<;0ft@oD*|b*kp}6tFwCy=7+sLZ7{ecg3_5#t2|~-;UtawF^{*I>95T^Gz@L3b z^TYo5?FWugL;(Bk`#=8v9UCu9GMvEzjNuH_0YL`NVx&O|o(z)=7=~jPKfHbU_SLg@ zuaO~p`ScO$U3~TkZKwJ8{&Qr`?mc;M_tCv$v@!IZgX7zKxA(XAcGh;cRyJ1W0b{Gn zGoa=9>4lkz`KhtliIM5C0W?lF+&k9ag*+LMthJ#hH>Iq(I#Cx7Wn;nW+?2AA-Rv{# z-CC7hi8gjYBopveT(*o!7g4LkRH}$h<5R16luACWibt(PRHM6q*!F7>G&-A11D%iz}(Z3No*vl1CtOa#oC0R>3fsJZ7tx z2mm8eFu;B?th} zi6JdDfitTU>g)K1W`VhzXXzK%#>K8#iF;P!nc-Rc^QZxawp|fel!sR3!F7diN$wnF zNrR41ykn?!e0gAMWw@~?+uGNZX{|GdVk&P|>g*(nYsj)Dsbh#COA?v7`p$vXy}f_+ zU;mq~;XZ@QYH-`kK9@b@`(OWe|GWB*K9jepdEky%*HJ#hS6v*&NU z?ZG?cw;q_9_Vi7M`sO?8x?957BGoZSP&Jc*l#*B}-EaeK-BNV}OjRkfoTezDstYSs z1(m9NvLcTpxj_`Vc3vst7sM*kF9pOKg+vs8kM=49jFHjG!srUrydp+^2{*q4 zZO>Ljl$Vgz<#ZE??Vt(+Oj(?#YY>^+WR52>6~Mv<(Vo zSoO%mVCNlZ`a$mITPS9|V?W$~92q=GfcMI6)ejf|q=8`q5+L;*xtcc9!}qF3A0&s4 zv*Y*c$L|BcoS9jnxv`XKDP|s~!ZaF9rm@sqg25?KCUNzQifON?fZDL6so0ofr(!&oT;3IpEyd4MLuG@hg zG)G(FpVTFnJuUmbwnO;&*e{|k#MT|SGKv$KcpMqLV{KRscB9E*@T>q5;m-Yd_ibDC zk}fb-!Hrh1y%jVAfvPC06cwUbYpenizlf$N=a@L!v^F@T4WoG!@Th%lyRp7wPs@(8 zX*=G37t$QJ7U2((oAbWtYCta~0I*ok?L_zOnt{9ZqmSC>UboJ@0;C~&UKnPGTYrsgeMSts{CIYbyjRYIfj*y|<5i$OokHdcGB}Uc z;mujJ51&pyem;W|^jXN9Uw}TGq70-T&(Pr~M6#UDF5iFtNh~bLJRC$lwy}(tuvyz?S{3 zn-PRT1!TH*T{sWK`lmmBfH1%ygHd-~|NGTB?qI~DW!RHplHrIC9KHw`Lz}tef<9h6 zdG!48!>14LKfZrA7ruB1hV1tK*1@gyTiYw!8%towHdhzdZ!WAZ&D~s>S(u$zm>Hj& z9G#mO0cSQj*fZYWInvWU*xAz8-q_icZATa{Md+6F8V z@-;lJio=q!z>uL8g!wcwh)0FAl1l@mQ2BHQh{xn|nLGhkBos(R0vVShVKJplri{*% zg8f1%Q%Ye-s%Ro|l>kJl;*u#mQWd+3&TDAwuF13rgh~pPO(0fb{UjM+4D!g30ne%k z1ZoA?vPu?}#^-@26B#5@t6b@nt6WO0SE&!mb$+=%Bsaw5hPYIp7VB$;`Uak^m1pP> zT6zVRZi=EIj~WzOhSk9pb$CM++)xKrRlWtWp@XjsYwiAEb-J;;HC~_bB~n^PQ0b}H zhK88>_EJF&Mcturk1?ci3dayi)=n-i9^SuWa2WlGa4;3|#{;oU>_7e2|H<0!p-2;| z?Yc!1Ws56A6}+s%H)F}}+7cTQQy){2rOFdDbz11`FjUXkTK4R%$L6*ZbN7j@``FyF zEAaMLh{O3r$&ErrUIFDsA-#YgB%%F2e8o&xKEqtVFc#2sc>uF2bv{XcgCNQ)=iex2 z+$g2}QVh7Nyiowc+m#XX@`yJ8W@x*z%Dh4_bJSl7X?Z2AyiyM8V) z=+!X$(%*Ri^m4ZD`@4_h!;d0^_Y%Vof@mRpgswzx5q*EhzPowP*@&i6+0mMZI{+|% zT(}?2cLw`{I`?vWS^^1xdEgSje7Kv?7*A^OuB&<7-?|y^zLoAfuqMV?%48|sTtre8 z5~T$MNkJI^OjuAZCo*huTdOfVY>rKs<0ul{mbnS60+W=RXN{IL{L6tM@0DAVWzC%3 zGE}b_(yRK^O?7Ne9hu6EJ&yLBgnEFfcUzxlCX%T zBJ%8FOOq}%qK{4^fK@N~T6dHEC#j+P{`P}V*Bx6Oc*JF63N3+XOwL=Cj7Z?_3GhDfEd~tW<@Obm~ot--;m|+00d(U1xef#d! zr%&%MFR%m4c`V=-O5Xu3av78d-hBI>W80TcUr-bxhSs&NO&IoG_$;916Sy&;(dijR z7YM8vkPKTfz!g*gfl&k0VQA$F&p&;>`1lzBc7+N*pF#TZ^C^^nJOzfG1H-_F!Syk# zzgpeU&vhIA_yYP#uRnkM%Rhho;~(Ea zPy+g=KYqjX`dRs}0W;je`0Waj?0QPs=l5?uy?=u-_U`oyAlY>UBj`nL=|!~e;{D^? zYE`>Ohue1!5Xttp)^BaB?yjwDuP$${E^XXgSX-REIXiiCZgOF26nV1I{>hQP@u8lf zp0@tZ=E08Up60r?+H_NOyfGH833$^!chcjGx@=*G1+VdemidqhR6>rN$CPpyxfSsd z%me^1N)@+?!lzPsbS8(!!UPUBS zRS>9EWHuFeiuRTfF&PrR0NFCB$}Uklr7EvX>z8Rma&1hmPl>fPVtt*+P|wxYkVU~F zhMTEw65B@=-X)dqCP))pQ3hs|o_?_pjT6OTmSe#ZF4qNmzcRZHM6qLR|RW(4k)5pA}7t&cUjUm zrOtj5!%M0%$<;xXC8}~JB-TWg%rEl}_}lKdJMNh~?ikwktsS=%(a{o~=SI2UMiD)~ z5UdrmutLd{rC5UuoO}Cg=ASiA-52187Hrlb)%S; zS47DxssfVzf=EU}D+?FpdKZhUegVj#MXG4O6f*Nlctr$BafPa+%2Y;o5IMn0VVtF` z_hSPOqWyQ10I)7Jz6Iz4rxNT0dTry`RE~x%TiqsPpk2mG2;we8po^;- zahm>PPt%sWans+r6X`z4jNQ)+pH%nXuI@W9h6XEmo>H2jn4~Nuib46MqJlDU5m8ae zb?bcH_T;1`0q~xIJ2!*v$Sr&f&;ruHSK$6bOWmrWX4#lo1&kRpYbH<)0Bl*Cn3o2} z;M>!~52L*&;okefo_o=ON8YyE($KUnebd&k?QY!zeuD`Ei~+#F;bHDZ`j7lQd-kUF zNFN&NbGK}{;Y*u0GsE{S$!V^xmc(`AZC{9VSqYh!U(PD1;O3J>#dIB6!+CvTRu>1&;Mve(8IT za^e0%&|ers9fsE>cq9y;f(#U5Vqw39jTa^s&R~!rfjh`qC_E1gxCMs@QD^6$&MrP8 z6kP(7z)pRJF9J%Po_#*Q0LO+X1@Hp|LN!3(r_;}1$befP&(Jl&W_>yXhCzj2Kc2q- zeE$0Vr#BxyW0K+Y)w_>xKYaeVnC~^ZuIYtKFpWS!Bg`Z$$YV-fSGX4L8@xtZE-vvr zhZ7X6fqmPx8^ZuYOLFA4yF~qmIV%SF-~Zy!pMWk%f5RPyh-4UJz$yf@-+%j;fBgO* z{rSf~{P+QNfNeSKp*sKc$9Jdz6cn5_81MAJ$-ci@ZRD5lYP+1;ohCSo!hsz4|X;|yBn+9Ys-MK&6WAJrP-B* zspYu|JgW>yHZj~gKF~GNn~V5pYwT{wwq??-H7V@LYC=9dPUg26J!YNLptfq{S_xk* zLYr;MxQyH`Wi$a`go45i`CyBvGy#pyXR>(=wt&g!G59=|h{qB0c@jQfCJ?9u0yUd0 zXEJ1Tx`0mSGZ+FcPbyOyv<92Q9m>?T^bL*;j!bs<4SNGokyJ&Yvk4?hMI{X|R$f6V zBT~vMXv7K%STsm0D;Z=G6X!|b%qSc>Tf*k6xgs53Y7r^yQk7e-@vHPPxh^8shWMHQ zP3$OVnmMYp$k-w@^@y!QQv0aPHKqtosbW*=*n}!PrVNcK0^_Q{q$W742`$K6lLS#C zQQE?DjT_TzB1>B(+hTRZJNrgbwRNDHmiqek`gkT(*OKg?=nYqACFZ0(Ia4Xh(iF{_ zz_`NIT}Dy(J@8iG8SEJt8=veR8EG9J6KGu&kq5kvukFOyeqw6bH`H(N?HxrF^Nlk8 zjUq-Kn6M&lDb;KUPZ(l1wV`E^Z<=oIuTV6V3v0^wu`*$trmHU#MNlk0RaZb#6p`fl z&>|Crd1c%iWt?A1nKw!pzZB&HJqp2x<@y*4%kv6}Xjx%2U`Eb4GkRVzH@`%fS1vCm z>&vP33Z{=NOweU@Y*mv$-zu|rDBV5!(10%3ukm(?P4#51qohhzN)nY+@W@Pw$`S~s zn~5}e1zk;`=}2scK$q3|`z`SaV|)^AY8(g6S<*|cI<&?W_=Coom+ecx){H&`=j3kL z4R#-ed+vt1PoUk;j6aR^0EbSzZM&hagIM2@qhZ5dziqAE!~%wSTld1f$bR7|#&`e> zr~tMGk1&Bzu-C1DOMn(O(6$}z+6%XCx-;_%M;n1{FQXbtNa`}OyqGA-FBKG)i%ZE` zwmfDG4OI8;WQJ}#>K2_1EB1z;k%7Jr_&P9B2Y@j^nx$^dlm&*}wA5`{YBz9rp)R?o zO)RLQv*5#$gAX!e&#FgX)Qr6hbe^c=%gX42rEV+IcQ4R&8wY3r5>QlnZuKlkV}mD= z{yUDQ4R6~{tp6xEbT>QpC^K>|)py$%o}kHM1h$39)DkGt@+x6b1*e$AE36b0R7#8J zdWs^V_4jFmgZjw0DK%%wZSZEV--!3$1N&tKr^9H5XqtYJ z=sj+pe$_Gmwr%!JcK9Kb+iO=0DdfF$2w*dSF>P$xmc0oV#QleG&-yetvpFbq)~&f3 z*3m4(W4t zID7+*kmb+?7`yI5{P7Jz2=Ie32CPER`t94l{PQ;~T=Fmf{Qb`#KMN7ha$So!110zh z_#!ys1E<%$i(t#nKK}EXRk&*r$1c8p{`mQm``2+FkM18mJh}7W=gjCm%&^1Vt-Ylo{4AMR}JYia0hLM!68Wm1jFD2n(9 zdg4B3%;HrW|1yxa)0)c`;VV9Lv5(v~XBDIuAD<`ptmD~!7ppq_T z@ics~Ng}h#HBOnY9xuOxrPq4rlS&Wu%AD(}BdOXmYdGYM%fBb*`pa125_D_HQ zNB`35331gCb8^XAcVKC_Wv*FaDl-KH^)JQjJOEe`cqt)GnzYueYty^xf8p^E}5e*Ve~(^i`^B%lZCNw!4^aFQQrtD2Dt>Z9YkvS0VeQT!1mWx4=0ILfQ3Ajy0*}Q$lyt`;rW~(9# zJUJ{2g=HZzbXin&CPkG^(^9w&t-IEn9BrMr)wg<5J$x07+@f{3^(mXS`Pj7d#0iVV`AQzSaema`|G!ZP1{l8uSTq!`hL1 z5VX#mHccFXTBeRG`fqt_S8Sy-AWI3NmjfB-XAxo>897XWqz&;|Aj+Jjr@6cqs2$%|KKuird< z`;Mr8_#Tn$EnFgE0m&f1E$GF^PcJ@#{Xz?4&)y=Z1*`%AsDNHLrvuxs6unUD;Hx)J zfk5D#fI2{?*Kb}TT)lhw3cM7UD#C=l0x$LY>C0Cz2J9D@vnS7AJ_W44cnLkYg)tC7 zKfZPT`~^G~&l8?Le~G;p2zsy;!|lZsBIXeGTR6Zy(55hkTZ||Wh8AvNB<_bcb$LNA zz!=IZL|K9(e9{Pz7<2)=*)4RH&Ig^&h9x1jUuMJEp6B|tlfq5bj!-Wz&*?_L4PUcQ0f*wZtN zv1ez;gcZAge)90-@x9Zd`;Q;o0X@2V3v~b1^?Nt3-MV@}7_zM^yPF3)>jygyEhkIsr6 zLrh(#Iy7faZab>>?WJoHdy7CBa{G&#+Ip%Qni@J=j-DO$jM|zA8)}Q=}_YzwfNr zaF@)Jxc)4v{!*3*0QO6!IE}2=NBZ2=o3`r9rixvA&1F~pfxq!E(sV7_jLr~&zp`z~ z8JWM0X{scvlUcGvrZ_J{5YFKG(%GI%3|kt*e2Jz_r>oOwsMIm&UVX(-rVZ zO5-ThW^Z|8FNLS13k(#FfyTG?Ai!8|`C_PUy>j?& z!_-k;%MPkuffDHVQEEo(E_`;E4cx38z7q$44+b9S0095=Nkl83u1TG5-|n08LnTC)UQSB*E}T?*1Uec zHj%@1X3>o~bOV7d4Je1H=P1MWSZA2sA4Z* z3;^b;TC$ff0KhB&hSCLWzsyCmAY(zk3j`(%6ecJR?-_op{`xgj(S)yN1v(=Q zn_$8`W%KC!mP|Q{CgD8*z#K)xp^8~&Y)oOT5$U26%liPZ_5DMj*VdJ57+^OaK7M$9 z4qoaU=z=B&(Ppn_Xz2@ObEN2ny%+LfZ{EH9fC}$Ee}~fFF}=WS0W%=LSsOS=Ik2Zd zuUBuLfPVrbg;F`tj30pKDLAJWuTWVHz!>o9#j6*p~?H-(48BZy!Gbz!0~7Y<9*b45JI$ z@1IasJ%HzDegE?L*RNl`ef|6$u=M>a3O;}O4Jh^f+wX{TgdqO*^^fo0z5xrrd?sFk z1TP0z;*7^n@7{iT|MvZx7w=wQl&X65{K?B_XV0IUJbQBd9e^jpFuS(Ddu11Rwza>rad~SEoY^KZ!MM6GvobTaJUOv6F}^rH zHa9XnJHg%nUlMg%6)6)uDyI+YN-{e!&Z098%g99 zmz38v6qJ-!)YXm7%_izPjlmYSs#@mk&;wG}tQFg~>O)7(6-VW+ zwQS8%x*DwAD(*O}9=@9#xKTcOw{r4spmkGMG%4_QacwOWbw!S(Fh`W1EsSLG1KB)x zCfjz2rB6efjy362^(Bh(5?OjFN0f$O#!Aa#re)H9RK%x)MMKJF{el+Z;BA0`lctju z*)$!MZDtA_48ARgp-!iWGif3QUun&a+FP*{B8q?nYS#SKtC7ataKlcdX*=GrU)pyaKD%p1?!}sS;KMOo zznSd5=B-@zRIPwR1$u!34O{sgSMu5}14{r}iS9$Rn~K;(g-sjy4_D=4)yUnl{u`Bp zx9Z34B|G=si7~yugDMVXvaHz*Bbi~yrXl+UBC(7DJxZW2Xk6}`eb}{lT-J9buVpjd zwePE6%WFp`Q-e|t%vHVQtXxD{>E#R7(!S@W6u3!~C`@zS@ zyM;J||QYw$i}&D(zPWVNfd#CWiJIo7ZdtzQjP&jqVy3mZ1f1VA;oi((?{9S!?IHI#foBnkq?&_WlUEhG{&o&uSOnL{ibLks<&Cr_WJ zW)T5qPoBR3be+PF@ZvcH@IXv2!gyUwC!RiifdGaX_7BJeT!9w)Q@5~EmoN+?3NAqy zMbHT`MjZ%-;T8v2m|?hTBCeqL{S!KM1sgByy}l9~oPYcL8JFh(A?$rZ=IJ-^Tfcq- zXo0?d`2+%b;TXdV$1n!>|Nh%|i1FQT#9ch>qUY;p2;e(@{O|?~9ND|KFWIiiYxJbs}CCix!0fg#llI z&mGHkh8z~KWp16qu98?}Vxw4q3N7*w!{i(`u|md^vQgd#QSSpT1qy*sCYC5=N`*|V zLbgl`0Fy|xXu(WwP^&B|l~pD;sdd(1q_C%dqOP%1rqmnEE(j`XS{&|hNm+eUYad^z zB2nlh3WHcGLskq6z(!{ZL?RWF#iyYJ5DtyPW6>o7u39FtD&LI|~h- z(%g7kFxg*FKO3%|XX$FW+Ge?{*AN=jS!)U+@f!ydJL|n+pDG@;_jT2@)D#u?Et_)# zPtP8eRW`c{dp$Ml*3vnas`!^2?JwDqU$O<4vVj~*hO!WS`Xsj;75kQ=6|SWzTUta{ zCMmK)zNsQmHPtY6uYBZA(a?=(|8;Nsfv0IVw{FjxTo$@}xYib$wwA0c%aImliK7_; zU#7rA7W+wjUk1Z|iE03hrITf8Bq2)r$U$d7qa`tv#K-_=b}5~K=M~d41(!1UX_@@= zY+*)@D3dJ7q)5`ytI)xlSv0;-ZsLgaWHwP2ovj1B33T~7Pn{*y;fM`*5~H4?ac3c_ z{b4B>H4*uZ;KO{C%YZRgat;)#+X~jM`>I#+!GU#O1!5ImKNFNb~r12`K`^)h^jmk- zQ8JI#z)BZ96-)lw4S(&XuVypSbU9eRHXD#swYvH6VF-5dUKr#>fn8hfY z6n>vx_}MGwAprTRmcg+h2Uau{u2~IKEqcr6^6Hk0Tec#V^G08nK$nP>cg}BKS-X6F z^Wf^%{^9mj1hB(9_wO7ZAHzrg4}d*=`vKDnaf?{W!orA31(;8WLj;fzhcKUh@GSM( z)R=!T5(I$xaS04Vt69&$X%VafKK%?ZdswXwIjcn7LJ1%3$VMdTj>QNSvJ_X2380QUQrFW85Hqe24+4q@QIC1w=}2ly7| z6B674iw4m8Vb?&=5ABaf!FPZE^$Wt-=TGlGeS8bShxe~B#$E#c;a3VU`}-Ayk00K{ zS@@`06;VVu1v6-G9PVGgav5QaSSq``xwf~ly1TxzxxBc(FugoGPMjP)G&4RpJ2o&i z+&k8XNH*Bf44$mFrJ(DNsKhFzM5UB#6@=t64Jy5;G*;I% z_V$fdS2t_4Hjz{tiWUux%ngprOXYf-!#^@U*U>%X4;9Fi1^^XGVx$4O0AMI_Q6N@3 zTtNnd5B`ioW>Cn`0>%Uks+7f4aJU-2&>&V=6dI>m?=_f1CR@zxNZ35(R(F-&U8{9A zXk6_oXSd2dp!5!@B9odpd_pZ*6I0IkxHEs;Rxk$M!j+uQEnf*#@8}~_baf-w*sk=C zm}65WcYR@gVq~bQp*BD4H`Z21=BB$_YU70gV{cPpa;!I8P!X=0gum$3vB3;pZd#5q zJzEU)x|AclMAC{K4W{B1dvZhN9UzNi*?cEc?icCv1llk|<|Rwqrbu)9+=H^wd(qyT z{?<5 zlcvs~$cZDQMQJ(wU$WSLi%5pDJbp=I{E~*KmXQS{W2a|vGIDt7+1yK+#0F{-CxgPt zVTiJ5;%vG+i>4s6bS$BRB?9XbZIpZVfocn@dYyJrQ#_aJ4SIMk9 zIhR|8Y7Ivlz-+B~E0^+{cM4lC6BQS?{Z*^}%H?SNR-k$n=;eg*WvD1EU<^+ff{2N- zU9bhX)}M#Ko3ni0TeFhawpRqs45i5}N9vXKvwq z#4*u?xu#%CZgQl0=xW>Ss$xhvOP70ZsY1#`(Xejz+0w+0oULg%(LtOLK} z9q_jI;aivY9ai;Uk2kIBd~FO#l*)CInA#ksB9kUeqac7~(NvjCLk`~~wN{&>{kB4| zUnq+`(zF4;7I0vZ=H1*X@arq)#DWDJSn;B@c)?Zz@vNn223QM*%v-Y=@4OE0%~i1) zZ8@+O&jGi9VdjEyQ~szWJ`QfoU$q>rTL);_OJ{7!X|P}LZatNY;J`w4>%qD;0GO|0 zFzZ8H+F#$lwhs2|@apb0l)-WB-oyK+rzbC8 z0Kk6C8R7{;uwQ?cmd9AaZHh)Xz``7Yo)n+Xi9#5uVbBk_f*2z$H3s@o`{E*N13-o5 z42fkhAQ`dT^@3RaLY?>$bpG@?Fzm^*7iZ6&pFDZ``1};;1sFRAEA|Xr7uHM6Fld2c zsF*Jx2NMVa%&JrX!WhFnm{qB}03;9|hQ|P$FsJ}g_%23Q>J~;CbON6+!_XY#`*+`e z(C9NhEeyEw`C_lwuLQt=WT}Znj3pR`UxJB+m0}WZK`ASS27I}&Xm~IVpe1+)z(WFz z;Q){Z7z3E4NcQ&Svv=^P1A#HTpDdNTh@IJ^dv_k*1(MyqckAZ8TL3foPwDXX)x(=t z4sIOmU%R|_Wq0Rb2c5dPy}q=*G`qSuwKO-mG&`{{H99vwj1P7hALttG?HKB8?`v!B zZffXgsBNt&ZzwOWD#{0vRpy6EBfdhfJKyaHJ8gce$)(p?RSKhAqL+!aVu4!7lkpg6 zOBt6143l%YaxP!S5h!?KB~PN@1IZ+EkwhVtE2K)5QlnAntrnNX?9}V5a+$88s;RSQ zq_m>3yLVhDRLf-gyu4&j&*;$TT;JeiV^e1!m=7dlu!U3xpUsncgYo>r3JQ%!p>jxo zGzyzU;gHBYGMP^y3n&x;jV59+rCgp$DAGw~X0^tl*L%&Dh|OMLb0^KtQj@dF=&CV# z8nv!QrMpGuX;%jN4SDccJn1Z4aulySOSkRG9b4(1t!Pv18fF_iRKW>T;fgJ>XbpDy zLWPZu<@qt6*JCJ*yXtCV$pUA-Pf=H5YiqBu1(Lq%SzF~i-`VgB-JF&q$;c5RS45Je z)2*sdpQ(6J7aq;#dYMA2(Gd<7RK}9^{(=gL(d~*QEy1KQP}4Apwom2OY-b9SBvDdm z?{?MfIqI%B>h>MAd#3VLUGai4e_9?Lmj;Fz<~FjTEK6LFAqb{%J?U&)8q=J{G+v@< zf1#?InrVD6 zG}>&ICYx*Js`Kozo;BrsilOVR^T$Q~*K+Gtf=ye_%0)N04Why? z=;F9);@oOfX})$N*hm~!*|cjdSpa}p02qLcqD6ZNysPy@_e}s8*e_r0`i1u*Dh+z7 z;hD&X0Tqw|?LEwE*$mb#hiew2HOrpFnABQD69z~uD~X}XqDwNU0svS#MVLubX0l9V zp;zImx4^HoaNJ%z%~iIP*SrV*%#=R{_REkr0t_=3i~+{Lgt<%S9Hld^@;PVOthHpyUN#GXr(z*o zkCwpza*?`qZ`pjTVZE&9O1ycaq-DzjG3iozVrtJ%mYm4%|XE z>*Z^}5?=0l`uru>tY-i%wCHuQ7)GpnA@4=ZA0h{K_WU{6uk)AB&t5z`e|h1zQtjij zrwCwAo?kdH3@0388o^}>R9JWnHe?_SCrqi7@T&kk5T_W1`=Nzfm|@UjVC??wTR^h=H*em(e*Mn1Yqzgn zy>|IB=;}T=v)#Sz_3e$7t@WkN)y1{N*_HX}#c3ef*esB2bZ~sIceKBIsHbC~v#r0q zsjI2Bt*)}Us;s%ZsJ^72GCx`tMFp!01G!PRJzz7rOxVblEYVW!KLx!e4doglL-V$sZ=FbXw`a+Qm<7TwQ953>N1!dv4YY-xKJ$C zN~LZcnprtdwek}LqMT&NmLG*#wSq)WDtc% zB6G<=G6*Pq3Qa_%i`i&uQ_1IPHx!qB*YpOV~RbFw{ zUhy_v@wFcK+YUVqdyeWIb8=G=9_PEd7^WJErZihxm??~A@I&cbZ#vta#xP~j^_etH zIx5f(woG;@M{+4ka0w+S3ebttIovd|fbd(g9J(x<2I!Jg**Y*Z6t<4aF;G|r3foL! zTPYknmFJ=g{d7r~ql$}7SOr#vs@ICzE(5U= zt@{A5K; z&h>-I9(?jjxF+i%>-#n#jfwnJFAC3FyVrWpQm1bJ7tX$ZuM0n7G$I zcbe$f3)C&wjNNIRd7Rg=7i`)n8Mxu8S+*r-ZKboQ8dJq05Xj%KffESJiE_hrQ;$(4 z#{S!=rd08~wPev*x(Hx^)>i|r=qlJ9SLI5$c^6&?HV)*iTg|OSd3~;`MQ6pluX;JJ zWvjU7Al|+mteo|hOj;woJWUaWmrG_@a_EXoswkZzNCyW-5oOWUfL@L|rtvnL^9HPh zTLRL+uLb9}gc`SjmzKg=bKwlM7GUZHx+X1!lh(p%TVlphJnySo%WK?5hYZxL*@~w0 z(P3k36fg$%3jk(}jesnL<7Pr=Rjg| zDezclPo5!$y?BNE*0bm5PoE)T5#9>`c6R<0dQP7_J$Z`e4}o4_!XP+(4gs1@g!b_n z($SNrr_Trn2227zy?y@t_0y+tiF;C1!uRD{kiU%!9;0{Y|oufHK5^$BeV zL#t&-fB6+{aK_I;ou7$JkRQeiuccv(rS$u6-=QTsfrS@t415^ISZa3h-P@OM0Anwo z;zhD&PfyR!j?T}HkB=Um96vsK{P5Ak`w#Bly?^KS!`rtX+_?GR)-52}y&E?GW;YJ6 zfDSM30m+Dyqu2K~*LF8nHkRivNH#M$H;Kx8OpXkICWiZm`?`8NTDn^sdzZ@C; z%9_ecYD)@hisNN?b}^Wn=XD01mRyV8saM-|Dw9H@lL|FLfkwbrb2+GH6@nQX1TorS z#$_weMrFQIELKUR8o5%VP;1pXz1CzhI+O~7RHBoJbuyVrskDM~((2u2ThQZ+hw@6Q z>pKQU<|k)2mRApWLN%2kBvH8(8lVdR#v@VrWU45KEFe(?Ib?noiJe2?Qs@FUPfnxp zDHI+$PMRg*3bYcrO{4egjbVd1YOv;;>%)cR1xvKk z5T8-_`?ERTESeqw2JYt)Nti}c3ruCk{Bd<)kRcA6Y@w#MR;SNt_X4b4?nt1ft^Vr6 z8?6I6%Mac{*L0$%IdQ zZ5C5Q<{C>{cUZ!%5P-8+H{=0Bu2%zQr51W3?N3)ob~++j+H{q3YFe?OM2I z9qboy3#oV(7?xYM5Ut-z0Iu3D$J_Sunm0rB>mcwhiOz$Po~wvnRZGFz)ykpUV84nw z4)U9}OS=xj)pG(#C>pJ(WdoS z>sG@wFzG>{VYQ%huW9Zm(!7Nhkdh0wqFGzX9N?#zDDqn|darcocKOKN+NsACqxTcN zH{8{0mgIuDWZqgjZ!ceTRxX3Qbz70v161!3{+Os=zt{@axDjaD0F&pgS+ZBmdTW=W z%^UHytFg)K;K5s6X!CTXC3vb>IO3VPguw2Ond(pJDa1vY>NE;r|MFzom z8S;j441uX&OdlII7L0;S@i7cDQ^BaUa00+-jgNXtrb6H*iza=gvjyL>^ z#PD+5i7x?Q-#&c?K>z@Q0PqI4fLnMs7$Vu{&)9_hevwRnF{4NruZs*uOfTS8if3TL zz>@*JAOMnq8^bUIl3|zu#&Ap2r9>GY&!3$=hrcJ_H-2_te3A4)z-)150!TJHF)}qe2pAh1=o!PM7dx7J zTkAXOt8n^aU1_4axS%{9Esh3KiTFO7(PP#*v}&tLZjnokVv$b3*9mwk4jZK4vXng3 zDmW|!m#aicAAAL0AQOlb61hg9)u;?gl zv;?C`o=8JwiYW{sg)Sn~MI@?_OcPOPVsKpmFmPi)FOWd2(VN_4DkqD?%*SCH(J6LN1nw|V6w+ej)d7=p>tMiT}>)yo5ax}bM+{^!@9_f zsc^*@U$+#k+l%Ji1zo=Us$e7$%`d30t7>a3nVW2WadyABtP4IDbcq>(u|9|C$fT%I znmdRh%jDX$flfpIxYFIulLzdsKuu${&1a7l=fm&)%FU~NBR$nkrGNMT{yU}7Vh@%L z&fO8|lN4S)U0rP~U-UNa=wlOHeLX{2#8ekBR57|TuE}jLYP*u?x)trZb&l2 zx*To0;cGasl&^|IBXoNs*;GYR7n3Bh98s7giZGQ4nk+w?pPR{XWO3}-TqlX=qzGIT zA;>`zTS#InMQW$XoHVhGF1E5Ic9zJ>6q;#VJ&B>pAdAzoc|UFuDj@U?|VY9GqGp}kjTD6*2vlgyg@s%y+Cg;7S3xSGdPjViu znUya_U|7dK_^N`|J#ZVjm5af;wOGqey!~>r_ZpB4d<+bL9`I*{?fU@2{Q5O_VuYhf zkc7E(i3i>%nX4tS)j3>k7DrE$`c1)hPsv2Zz_rH72el)2LiH=jzQe}Z$K}H}t;y-4 z-m6V>Cq+G1kpoN4T8gLbrE`JCP2g6%`!LkJ4az5qV^xhmDCj!OtzEa3En1TEj*1nK zt7^^PuoG$B&+oh%>o|#E`Qh%M;JrO9|enM&L1_!hAlC81EZeeDR$fn#?wy<;f#Z4e=KKwsMFio!U+1sioW6Q__UaW;Ao0!F z>(>{0g{Xt+1;qMUXU{Ll1OqUNz+GW7VPRZhVqw8B5cH(R;{m77P)Z@t=*g=WfF-0? z#8lzaCjc<`=tQ5MPoJDV!LADt4seBqi1qgw25#(cfLNGM*o3`#_6!1yD;z+J$ppxO z7J~}o2XhF75rs!WfDr|k5P$$bsaJt8|DXqM!3!Y({}p>L+z$c= z1_Fiwz#zaR!<_)L6vpr(83b?NyZ}%3`qc}}uov);bbfk%a{TP%}u(2Z|rJD>tu};CAG=Is-pag!bouxJefPsYY#chK8r5bpmu8&Hig6@6X}IK zt$?H9vot)WibGei=^8G9G&V~~ zheT%QkT@g~hfL-I$*6QGgQev2bW({$sc~zK0i!Kyw8bore2cTlp@_2~=2? zEQe40bh0Fkq9TifR`^r5U|Qj5Q|Mw2hxcFptN+yQvCS^cef<9U*Tb*ox`BVB0cYJG-KOcw~MJpqL)A}~g{`l3+PLh0bm zg1%dk&g=5vpeitCFI`IvJPLK(bT{p}8n+F_(>!|&zc_#JF;7`jnE z{V?8j*;TnvK71PhmgqjTmCV|cb9S^N7&$P27C5kI+aAQ>mK^{X2rh~IjwNti_VOiH z6*{;%)Vy2Jb+xGPW~}2%5bajpEb6_6GTplliuwT4l^yE1>uv4%*Z;{^u69z42*y+nxr+}+BV7y)*KYw`wmoHzT)v_O^3R>V6_FkaV zXBU)80W3wP6srJHxF2`o7>|MW2ffgyu2ZzQ^%Pte2rza^OcFkM_U!qK7hnRwgrQH* zXHPFY7J)HnF|iO92c+3j_fB%OAht`1{u{zkUNZ1`I>`{tX5r6ZT_~ z?BWtr4KI>G3mALj*p+8oIrd2=<(U3M`w>8pFDhc z`sfihWFR!bcmw{^yL#*J@cRD#)xF(o`@07_8~fYqm$%k-)|UZhs|z#Bb5r=R&AG|p z>Cyh_k-n+no{7Qkq3+hc)`sq;8t`O5vZl)7y3%-6QC@jLs3?>h_qz&m?NO)MZ_#;; zYL`}SRf^0~o>9!v3s`zSQ_EwiH~=$f*$QONxH1liFXM@n0;y6UQ;C!ciCQ7msL+AY z$eF2BW{u8iwFfQEh+OMn2~;ehn#EIr7#szi4MH%Zu_OR9DqX-}i5pvbjh0*{Tf$(9 zs5E{K8LSvPGlvCjHkp${6=Va+sC)`VK&MN1Jhe<_(E@o*0m75TEUvi4U1D;VX`SU7 zbXHlj($lT1Ifr&f#C8f2eu;@^ZMa(CjUB z<@Hb`MO=N8JhxBlZ4*eGC(qv8J3lR~FL?jgm;cxQ;s1Q}{zYk1hd`MtHWbzj?3WGQ z2-a_qWu-ZSVydDhulZVj*PT$ujd17nD6z#V*tBU$&MNaJxb8lRwjoDZNl{c%+!BCCc0uhPsF>jgiD*ia10Pc*%Ts4#$>F*JaaHM5;a7G5t#h^KVf$BjZvU z4b`tA$}R8s7wg8uV?b3OBEukS>bOd1Lj!)$l z&4wyh@*B1a8aBY9MXT3*$pv5Oe586c(X<edUIc1pVrtNU)&4csnk zzv3^RR=b+0;3>H-rqBTfkpP%7o2|*=nq}6q+{8$vdIh{!!}!B|a8&iHRU@~nMsG)& zQRSra;X8Fxk7I3@?Zvb9;yGK%c>xvKsc}oUvR*c>YHf;gGJT>UN z6`be+!+>hxmR+D%xMeTUxRp;7yFxqIdJe&U`5RaBI(A~6yROQ);+}&<$4;PX!C5$F z2z4`*`Pn>YHp`IBP-W31=_FnzIu=e&X6Yzg3tJV@2b+y~0I&gT{-~#H4&WVX*eK}S z2Zka0RWu3S3j+)S6SM`BfG%@B0+=y2CU$koy*+Yox75=KB7zR4p+@2B28IEjFvEOR z%l71qDL!T^o^qDWc`6s&<@1h`X&7TqOnOS;Z;L5FS8mC)1ODm?_Zz$&0$t1&NX~6u z25znGBZjSAKG?o`9qiYQ2aoR_qaspguaLn4o0Xa;1bQJ8Mobt!c?~3cefr|n`K!0k zJ|%W{;YmV*Nq{Tly&xc#!4QOg#u5*idUSSzV<6dMw517~u%`%MDWxEU-Z`h@Xi9_E_MkfIu)FV1^lnsfLOu z0=km# zC@}m!SMt5FYfN~y?gg>qNOsN?s4nt!Hp}IaoMV?mv^r0Ze8A5-&tQFs#Q&|%ug=Q zO)g9gFH8>3jrC0rcTEj;jrX^Y^t29kH1@aE_cT?v)|56@6xAjRD&vu|STGs!A(D9= zQMWZ#d4ukDOM;X zN>t-Ru2ZXwI;~BscYzxdN;Q13ipiBRx$+diz=~mjFq!p%kiyAXz17T7Yt7){J!E5%}?O6AaM-6oUYWDS|@`BqPf$yI7}R~y_7dQY3q z)1~qCsQo?a;IKYAZ^&OU7Od-HtJ=I(O>9#gSrVFCvY4(6iXx3H${>r20|S83|Mn6Mom-Yh zzk~utS~~leG;Ug^@KTmIEnAvNQe{*0WR8o*_c6o~mLw)rl_`w124{=S-)#%`I`W3y ziSbb7Y@~W2SP9%(_La_sDwkum8_}w@aK&<7?Ro^jR<{vr+zM5%#OgK*>bDXN+mW() zo+e2Z`pFzSOJJk(3?!y9o36-W>B$0@##8T%4~Hw4YlrUCjo$ZHE)}%x)r~)>9J=kV zSpm#cj@|=?`Rdl}B{R0-X=@Ss5YHtJP)4;g25y4!!UZ(|V1dR>;8t$!Do#*@)?2p* zgiGxq1H#3@AaUD|cUU$LO|wZWeSnQVJD zQcam-sj4-PC3m8t@hw}HzTn&VT3 z{BaX7jDQxRSHYyY0D>`Xcu?u@)klZr-Y!{gCl&xq=xE{Fnhbfvj^b%g**pNuQ@&tJ zP8$>B(E97wf(`3|x;1y%ygoYUuUrUKFWK@(?D0`=>5MxuWe)ahoJ|6Cq`0+Y>b$9Mtk1mN`35*OeK0SqT``~Veh0WgH?LIw*9(3KJ%^E0SY zF$8~NjL;Jdt)G^`@Ld2H1aONW-}CdA$atMTM^l18qvI#=Xa4i2&z_$V7{jxOXT%gD zpbIS5gX5$7$MB&EBhQb{pB#gppcYLbrlt*{1p&iA7&e$j5a1RrVHgf@C*TJH5PmuI zr+P4Epa+E6gJTS^6ojDt{OthVDCSDf`~X3?1$e%tojLN@Dlu5(3g*&zJC5p z=*w5M1NsB5xPg)tKYl=kIlxN+pNMosB(P=QzkLT9eft8Gf&qwj1l3?9;O*PzPZ0d^ z>z~t!*scM?z>Qr%?&~KaYZ2iM0&LWv6GoyGN@8a;SV=5^+55Mz-@d-EWv^a5hkvLi zr)N*j&d*LxPmhnzPmWI?KLSsNCm4|-yM62K&1?5=UB@kg+2Q`RgS{(z+q+w6N+h<(ZL%siFDF!P&9?$)WDifsUcxmcGu$uGX6N`U)UfQ$=w@X<=<5 zuc{zi63R^k+y%J~@MHlryQp$%>lg&C5MWd*Gl`Y74%$-bl&weUh~u+>Jv)} z{|HrCna<2*Y04D-0j|A+rfs09YiWvdvN(|=$Ri0tB%zPQcV{pR=@eC3wgfq?O#Y<| z4yulyMkfw=pJJ@Cp-6j<+BQBJxSopWLh$4 z@NN|uWFgvbp2N?gDRSVQi*x19Ds7-eAMQ4yEW}Yq(Inzc<&w8{#aFw6DjAl{SmTrS z#I&_=3ZMm+3q<6{j~ntv6uur=ZWpwwKyQj(&;r0fnoz$hIqNQ+bC%5HRxCJwI52dU zSnaC6dc|BYYRDT3)hvVkvKNdJYhaU+%4JiaM`5jz=%bw@b4xpy!Fa6`0)XvYy?*uX z{acTY?wy<+J$rHT60LQef*^SP8eO8bu2;{AjbA@N_2>DJ#3ky%{dhnsh8D95T1+Nr zK^S|`iHP;|#rgA>PoBMe`uycN41S7S7p4~k(53_ogZA{9UVV9K6wn6r)ThzqqB2Vi30!zZOS}BkczP| zcv7AJ0B_Jjj7Q>53^VMp;1Z9=F&+c>!QKnQ?8|$wU>`qx_<#TgG4b{F6Op6wBMT8m zVrb#y!<2CKDIiBmfDmX?;2}7K)~>)j5kfiih-zQaQrTa=eS>d-*2ahxG7zzThDb)h z=>lLFX3(bW8tzQR_$~;K$BykgQ78o7-iHtGz>R??d;9kFn>VlE>&1%~&z?Plzcx}n^)maEQGPcy`BA?&E3tl?TzKFwMAsh z7N)?KEzXXka`=-2Q)9goBi$nd?Snln16@u1?e)DawOtKWZM9`+f-zZ8RTwSJ3l#XA z5tk+6wuGH#zt!L|YOQLyQ6|z$1UeC4E#Rs7JSCum#|3ky=5ZC^&(Ov)B!xf-LZ@y@ zq%x^gCX%-QL|ZF)%ngFgRCH)#mg> z6lx2VDMZQlG%l*LNacVa$Rshc$&73ggHGdt8)Pwsq#PENCSb8-Jb_juHY=5GtuA0N z=b7zsiz9(%7d@r=+zOqyUgK>Bk|{jh8c(0v*-8S-Lf2-J(E%ChWHEf`lLY~7V8EPM z(gMKpr;O2Fr8&B=x_S5Ez2WiUrnct##>VoxI$I!LVvZStt!iHnQ&&aTRmpula!;$q zS=`v(_aFbK|EZ?7CQ*{#+F8@lTU%OF=#BaRFaQ3(GdKbgW2kLxU+r!ni}RW4YJ2fq zqU(ww(#KIJDB=KJ;$=uYG@*yDDzN4CbblwcK+{|sf;jTWg7q4fDlj+QW#Mwa{ zg|%gjFRKERd`l-?T}zUbyi4+aNPzFt77CXU^>MKd)b_|c*<5X<0zfW zty;!R0yyFNRRAP-6}$vf%}byQNQMg@qNH}Bz!l)l4W6ua6=Hnpt6$HpTaC2s#5(s1 zx^@cMx50tsH>{hZ{aj5kMc~as08?f$6d4p@8i|Yk%Av}0IA*pYq|B|;1>5uya8U!s zyg_uDWif)5uVw}8k)veVmYB50Cjel!!YLD?*C?P1S`Zj7RiIDe?ofka3iT^|-BKy%y!_(UvzO=3UOj#G3eoHQ`N@xx87X=loj(KN!O%&x zFHeBAPoJNjJv%#ldU}q866>EmKZTFSvnQwrVGPAb0Ok{b+3E4=IrKy4pHql{79b56 zGK?Y|K#PMEmQsU(C>TiiF22N|`Wa(5#=;{(DS$x?v;*N2a&s1uM3To(Z_ zAQo;@t_yhcb3gVv7#o;m&|({e1yK17OcF4R5QYsP>i4f-|MKsK#dy#!|fd6Ik>!Yu(!3h4J2FKTw7RQnOj|)UY;9Uo*!G783vL~kM{w|#s@n_ z`dSBjn)^B%y1|w;R>Y=lRITTd# zgHGoOg$lV$N2PEwGHE0-heYC0$N~mK%HgOG$uw?_(W|or4fcr19n*P=HSVO^Q>Ap* zs2w#TO#z8%%A~^I*V1${Nm|yh4ao>Us?S~OV79~SYY!+ zjrNGv6_Yy>nm{Xj5(ylgGq_t z)5&}UFsdknuFTVRQZn5X(_K?JAo?$(gmNMus^)ZZDoT z=8qa;!}{nD0Wg#<58MLpCG~UysC1D*WuOFaSsSyg^U+5 z*$Bbc4`|j9`1Kk11t0DofJq;}e*CfPi^$`^^nw-x3<3l&2#8`FSlIVKo9cl}q6e*1 zU94IW&IwHt5@rjG7nm?;aR8kc?f37$ef#?T$1Eb~kKX}Z7kmQ2Lx`M@Z(zxw8*btN zxYHPk&?I*J|nG{I|NrD!@$f8V|lC6xYTy1LKh$(;3T)5##Y&!}TJ%!`0{BBdE zLF21dd1?V&n!J8Z!GtV4%CU8^^(`vzkUlo44)>ZvRfAJAcTXSWmlia1RIl$&t!xh0 z)E73jR~JHJa0cI($#rM)oLNj$7Q>K%PB2lV=b*|}>DjytRECjxDU`Rw&E?okQQ9-|?(|#dZ0&=W046`gzI!TsI)spEJ8q3WR1i8|fKvg6$lq>CZreLQf z(r=3mJ7dGK>c!I5EqDGPPm!SUeK|}EI_-s{A+ykoTnz2%%I57?m)0#WN`*fMdmpqrV?wcr*7zKdEXUR5}ejJFb4UgqA5@H5>VDt zu@I@>0K;U7qqI4E8DlJyLI{*wZfab*Vyq z@WPZ#u@U$dV8UD_Ggy{_G4Oo3CDXx*1)!G)>}me6Dcr4b){E5nl}$s_t3a=V)tv(X z7zi8~agODE0NCTF&xw=3UZEtz7q3oVzQ!bj7_Wf=byC7S1At+M;UI-8j5pvD@CL^q zOd}Y8A$JPj1vvBsZBhpIpj9kfpZD3t{NdxXr;kpb{ERN#j|~~>0b2%+?eqzOr8A5u zcn-8@gad;f96*a>xCNIN`@k@+aPa2YGwiycCuP5&O$jp$lL_#Xit$J+3^oiZ90RL< z?)jNXU*3QGNK71l0fYg*0AL?Je)(|0E#Mq(G0Xs9ApF{IA3xx|&lnFW2Zl`;2qO&_ z)VOE~Pxi+TXaU0jSMWd#Ff@NiPz^1K5xE}tIq(o*5+)Od6TSq1fq-5ZVBo{>93viv z$KVzV!|WR}Z(ot)gfIBP-+y@f<`vfKS1(?@d=41H)vA6zGa3XudwlmU2yctNdlOZw zx_$ld<~4+|8;6&#U)jBSdHc%l`oYfH9wUvAQ?7fGZX!Ic9B>oYaQrr z>g}lS1W(pf*<4pzSDC0OEvPQZM_bAw{z9KK>NE$fdLWrcuXLzoHl^4i6B@)kEuW?0 zGL#&;f<;%b=?V@*#->ZzOc{qIV{>F|u7tyraD`&7SSC=2g(`_iCzhCmVl!W2;fhQ= zF~}&8nI#IlLhaBR+-_gKFI&fRRl? z74g|wB)nk8%%O59bUu?K6-cx~g;A!ptHG05Lt0y&Smh-#RGAcU7Dbvx6=zVzIZPE_ z9g>+V6}C2|yHD+#&<7Tb;bl`~UY|FiD;U!jOz84w^o4V}#G*E_C<=};Ol<;Nw_0@5;e``1to#{mcrlv>AQu^1(P=@wG?V|+u4R1j=4eQ z@8Ia-Y`Lqwf6DCiIlRG=%Btq>&O~)(@5IclqgU~YE}@~IbMdHT;7*`^pRR7q6qNJr zJ=TgHZ`;jK*Nwu#yG7^#;%o8tgW~QR$-aBx_G|8jJza7^5a=ZvsxzdC3}IfDAe;>( zW4p3gjx44novzNHDZ!9sz$bE!AU&I#p3P3npr@r%kO@m8UrHnWl1~2HG}7Ouk$)jN z398Z3(iwl74%Uqao-92}mPyiN(~Kmhjly-&g#orapRX;ES*q2p27|vEhCHP6wHi^?{4oHSDLUpz%=#+Vih8c)weA6I3cIdU48xCh z=&G1E7f(9M=Zku;0eApl;Gck4$U+g03P1(M3tSpb^Z)_I@Bly;42CfPEf@or5Wpn_ z-r5ys<-EIkDb%tR1+}i{w`}G&Zn+cF5_2O(5XoUXGO5~3RCZZWX|*zt?!$Il5t@B%G~ zoxFH)_UdBM3u6g$=!XDHuh5(x3jX91CKkTDAl9>&e@+|z$Vddd;fX##7iJg$4Eiy# z0ALW{mw=!js0KYJz}mBOw5A30I(u>gd;(k{orC>)d~%Aaau9QgDTZOfVWBlJ?5i-n z@MUUM?B_N`sh@i=w4lX^`k7u30A_Fx9st7h0vbUJ<1wN>y?yuo9k`MA_|qJr48ZmS zV3>9oW5{(8OJcYmIj|q=OqgLn2oTPm`1s)+?!kMuuy8%!@1OtN-HdQWxG{`I-1+P0 z&)fk>FyfOoUp~D!Gy2)tF^1Wbqa(bf4CUY7yZiY5-3NDWqQj%_0MD-7zJ74y%HFN3 z``7ljuODn*+uuCgTi;n<+*+GoU!GZ>8(*3oTbLPLoEe>)9GV^*m>TUH9qbzJYai@s z?d@pnYOQOjt7xoBHddiT{OWk5A{I=By~ROK-0KM2jRA|!XVL)7Y$~u(0=<~4<+D{> zuwqCG7E{S#DcNi}lObcVq%1IJd>LCPWQ&AcsYsv_3AIA8P6&ofWB^0P;c0jR17Bbe zi40SFVbvTal0vM$)CbrvsdUS8k7 za{b=D|L*Vp@1KADn5-_iaewbG|LH&WB`P$YdXcG-W2hC`ThzWLzCNt6`Ojazk*G9Q zug@6>c*5a8LE+A|J9{^d{P}fEg|EE-azWQsYsqpNFOeg!lKV&P6+4mkYXu#<*1~?7 zr$*u|m%A#Ak+xv%LTTTPSl9L3<^xCluA_FxP_n>tb&@odS@NPRNkNt%lEn|AgEyI$ z42CI_@MOqjkY#B(A_Oz=Wa!{cdU_V^QU(Pn9gv1RS=uEU5?U=|fYQO1WpL9`r7L91 zGDxZ%x{1PZvcw^#G{%<2Sh75(G(;0Rs5}cwJ!c{NmBUZ~z(^b;M;p`nTFucOTWrLZ zKkg`;winJgiso}GQRRDo&1&V)o$As1k)|zT^=mq>Z4W>Nz6u-_-iZt?Tmq$c>yqhiigwdhCG*@!l*`^y&0p<%YXg3Jr& zFs&IBRTfPF+(JdXD7;LXEQ_OOsYCi;qrYstcJONL$j!W_HCM@$w_?tY&I6mttyvB? zqO;Jzeu2Pyp$%Jv07a(!F9jTd~Hqpy#jzJI>RHpCN#2xG(o7>q|f@2~^AuvtGd43u(U zfE?l$kPOw)`2OwFmoLzX@(h3djBu4AR;tB@>^qn|qD(OG2A+VS1y4&c>{ocgcep}H z`~Wb(*o6rrpar1%>tBBV{WrW|_9x6h051U8AAkJu8}Wr-3lGFU0!Htr5AQy`dkuR3 z`UU9i%V%$1JO!RTKRkPfpGsgEM=4`uO3=qX#FC?h_M?x9{J+cK62Nog0U@ zuI=BrvUBrr7cjODZft7>w7s#ozB0SEJhQqqy^JzG#!$w`#L)C;|KxD*_+aSSOPTwIZHQz()Y% zFqLeEk_`b{%4AAe94T8MW(!0dp@1V2a3w;XOd?cCMOv`{WDpBY5|J6$CX*Q&n!BnS zTI*Z86Q$KmuEgz)jEpaK_m4~D`hrBos2mcNOQ!Ka#Ia-?Fl2O=2uv6% z!$=j9C_)NNLS@S7EH#BL&!I|?38RWKsKRWzOdxZpj3Ko#Pi@RsS&P)xGOevzYp+$? z>r}2_0Sk(JkT#@SH>elL}&Y_8^ z?xBH_>hjs;*=r9U2g}+Fp&p*0S!iii<#uWPO>%2~yu9{b{OkWrX)t;73!){Z-e|r% z6v>Uo{^`H`&zzwWhB6RoTK3g%Yoe2vIC(66qailyF585^_j!f{Lz>Ii1XwZ~O{k}d zENo5K9Bi!^xK_}8)7Ny>(|j$r^)LiHYuHg0OfqdPBvnP0B#|S@BZ(p;zCVYXo6U7* zbL<%mV>(rvPEn^*AA)U*t+WjP=s>4V@I;mOeUvJB=g z8SG!uIcZs<43aX7s?TAV$ZQLhYoqe4bRh&p`UU|o5>rWrm}eH45?XJwG2CsA4%rGO zYz33H__Q@XZ2_y1oDDZ@0>Em=9(b#k>?PA4!aU(6F7Qu)A85gi`D#~P6^np0SH*%2 zodY?Ag$~^(<`1zy1KI)SU@-JR3@?XH03K0VaK>Ib1JBQI*~%?LYfEZ(H(i{}Vfk|y z7O-C#6v-tL?-H4VYH-k{SzH6(n6C{sM5<@12dA0x)KbT}&YYz;F&dNa631`MN-uTL7&KZbkYry`a@b2LWLE$RHNj zFA%sfU&VqYK5EV%w&bI14rgps?P}$#^7E4Iv+I}VHg}h|!G!G*Q-~-FasTFRa9}qc zJi32+jsW)T1+-wrP)6bllvRKH{N?cv_WVpBAPNyc4^qm3L7TEom^vT`aEt>i7;uI% z51)ep!?TEJmJf{JkD0^NOW=W+WDsMR0lh%S5Q7k|hy;xvl!6xMg_XL57F)5u0kefm zAYw}47CP}nBJ=}wQicp-+`=Wi3SWZoT@Yp!7Tg6yVSwQn_rtJMj0p$a!rlwo5AWXN z0OiO3G=GRo*W(hv$cF*jfMlO97QKE(7p52P1R=Goa!C$|B z2Zo`$#95jk3^4p0j4m9*{}YxB0Sp4%A|FOn^Z@qxc<0gmTleo=e{lE4otuYuZ(Y50egDSQ-NXH@s|Q;LdmDS(tGin(TkDG( ztMgmy3&69L#i<1#+05wl#Nf>2(9~%E_)yPCZ`)8;^H66~AF)){R$JCsR$Nn5P#MoF z&ySSm1&Tts`CdoRZuFb)cxZBDY}VtAHZ=Ei^^TQRHg@%m3#A6N&e`5M zHZr!juEy-lgMk*NG^v_i(sCh;?K1X&~@v}kh=RRjRb zqKc^uIa_Fys$ELGPigR}Eg_9HPiu>7EeV4)sk0Yr93@&;wc1&)a<(d5-3s@B)H9$C zO_+*SY~?$Sssmf;hP`;wk?8isn!N>$zJfYWUZp)$8Yyq~mbQB<$JN0Bwy{<0?1n$U zb)j~ZJyG4-J2W$+wL6jxjpNHJ4PCvtk%HOP?f=vN?f>EOmkG^9j*1z3)hfr@lEEvG zIJzvc1#A8|O=xZG8&%nT$OHUAs4F3O7~`-zw<5E(Y5Uy{%U*Rh!zvIf1jAs;SA56jNkHbae?^UrLeZXYqVlEO#cunn^ciq9Tfl zOsY7OBFsP}7WcsS{nJ6G!jnwNWlyp{(>?XxtB8dzhnwgX@9CBo1vz# z)KoS|!{qB}91Vr7rtyq)kyC6b(f9yheWtu2uoULlxFvtmT7Uos7Rpz(lI*=+Idt2R zoUs*8p@XlgmmTHvz@dVU{ZRczVfUfGZXLXuvve+4w+=153eW{FH^s*RU>I^hEH@ae z`ZY)S9JnHX%}TIg16~OB3%CWOahA@y%I4tt(S|iw(WE6ZBC)hl1O;T4hs=aug(96I zBIw1*pbOHO@+_V~YA-V7wU%_OSM}|e_U!vB7xJ4ntA}ru^jvY3qo)z)$gG0>auiQn zh_bwCpP#FUQ~z%am4vxwMrse%YySf==xE^kN^9aM$;L4Yw`WKbRK(}enwhXWAC zh8#r`u98W2=}d0fY;Ng{zkJpl?ov7G1*%wG`_#hb!TiSF(k9ri%d5L+B60KJ>i*3; zI13RR*xln(oXP|n(`V40J$sHP`cQk0ycd2#>V?o^TZSE2iew-(%?O?7flnWuoFAQ@;Utd7#N;91 z3hVLF3HUG&1Q%)a*inHnmQd%5XK!CVfBWM3o975-&j6nX`6JGuhxYg1zJB}s0oZ_^^P|2Z2#APVpcm-ZFQ}j*X4v;H zpYXP52!JsNV<@o@;R?tE+#)g$;S!z?0Q>&Ouix>J&?xw^HiqUHFXj?~RR~?cF!=f% z829ZvzKaK7k|ER)5BUx*5WxHq-tfE6AKrZ+_LIGS`TW(3XD^>WefjhW=;;~!S#orK zjF!qyj~*O7x_k8S?(w605ANQ&cl-L?+t=>g1dJWrzHxZ{>g8)!cCTL9J=ohs$42k0 z?`*Dat|6GMEzd45OfSt(%}hA z)Fq2+ixX9a1trl?BH%6Xx}$D;&}R0U^)9{Is*;)HVlB$T2a+MFxEuwWBV(bpF)5cX z;Sgf;C0vo1E0pkoWMYX(s#0jIW}D05b~wCFm*3$IYE909!b-a{A`lscBD2om^#zIw zi)w2ddisZ^2Zm>WWPxx(rZkFW`tqt~oxzhs2TBREsp4$F6f{xRmvT;Qb)ba)vECJ zssh7?f>~?HlB*IlXDgbt#>Y(2A$!5NH9qM~&NwR;Eu~95M;F`DDb5`<#AkHTeyO$C z9ZBjO?s!>cO?$`6<%7oFL1(aF^U9sQ8;|V%D!#GQmYg$}EM$pGDdKW%VAL9$;c60H zBjf-6KmNb|`M>)wikfR$hkBd(daBww>beK-oWB*Ry|Ma*g0AbKmTLlcZ@R3EZf?nK z+IKfzan@b7R&1D(tA@fko~vExZkPFcIJQQTyf{akpUwB9buzX+n`Oyl=rZYG$YdE5 zaXN*cM&_oII2mMi28ofG!?*;743ti}lnyPSG%Cu%#}kY|vJ7@Q34W_m5(A0Cl7q5o zGIa1JSI-o?#O7kPr^yiPF-Hf@c_WtCxGjI$5uddsrtFC+SIJzkW-YI28vuik)pu7c z+LN=v`i)4_w!dZ-0OqS*18%u17r|OtOQy}>y-HA}L{nk{d=)r0gd0Q2^rrkVRiIbt>sAMPRsJ4rs2>9GSgw*8wDc7jgpr0Q&~5+=Gt8JbXowED zli~_TXWdJt;vaL7nHvPoEv3 zL_xG_1(*SPfgr$ngTx{hViLv`1{I3p*!_pTB(n{>Qg(D3uZM4ACp4)T_P`Uw|trCD@sTPY{N()f=@YQlkB^TYoE$%V{OI1p2X{dC@7=m{`^McnH*Q=% zym{m5O(5B|gX>rJukP<2>~8OEt?%z{?rp7Yudi&ZEUqojtt`$g&5kclkIqjF&5ZO- z5BE(D_MlVB`Z|WXTYK9YyBq7;YpYtS${Wg(btQ#h%aYMxaoC?aHagd&1Clv)Du5Z9 zT@>(DJgx#TM(l~klCjuQCP%^|#O6wP0x4gp6ic;ol@xrP(xy zCE&WC1+by2j5HCIApwRF)f%OAwv5eD^7%TU&?u2uI#uC5ZT<-GNgtm##Fx!Qo95yzW67p52?l7HWAEX62IY}S zZDK)NFwVCmeMJq|Po6z^`Z8LQ3?)iD(S#?GXd9R;uI-YWi&WlDTgj3(JoyVVpQCFw zzzYKdG^xL`r|X~p*Z=ZA{Kx;HZ)&i*yP=}BE?Qcg8_WClPyUmxkp*+4wXo~DyK;-F zs{Mr%&rwvl>UQ0Y2cE`*+=k1!&HK462j=n>ZG1)(pA!0dbJP`CvXUH0B1@Q;!3}0{ z16gcO2FsqwvScvy84PtgO`cAZq|-zh6kZ0Ib19RSmPrMrXVK9dV+J)1t(IM6FK@ z%0(=&U*6gk02r_k;V?c4Pqr0Kc*_?GT6dkvSr>4zW~H!g+gUWC3v|*IMP#9uF0hkX z=nzZrUTG9|292LV6O#bF@?1@BO>T0ivTv`fdpA(d82)t*MNDWP-4XE(0Qt?w?NDa2g>7@j}; z;lLi=IXVU1J3+IESjd6B0tfc|Sqze0y6y>r$7ZQhRqLdUAQO!*b$)X z$um6l2UZCj7)rZ1Jwv$|z_YU_;G8hPK=9h1afMsx{F!7(XfOcm{Nd@@!?V--Cr5XW z9^Xf0IF25jouZN)C-8UrF%IrNdh{p2Kmahn30%H<@&vdAumPb{9A92oE_^oyFn|#5 zfffLU1u<|7+KYgA2nYi#C4dvW9FPC>_Wc*&7GMlq*IQJW<3iY<;gm(RRE7WsB!d7L z_7$70FYiBndWSGZlySQFtOxt`{==_8#P{!i2R?oNfNT4LAO?UTG7)L|7livUi-fz({x$Jm)Js>Kj1l8<8IW1(OT{_>Mpt;0;jcuK+M27az?=67z?6Sc+cg zB?P^G{SM>N01#L=c==!cKr@igMLZ3d_x+FGp$BXniobp#3XXjG`27nQPE;!rc!tvO ziS)%6&r#_`qJ-EPQ7Y`@^yJaW@gw+mKYIM|;RAr#z5Dm>+`D@lbm!KMTi34MAr5xA zcCdd4B-`6YWj;37_O_8N+X7p*JhwVOy*z^s+nk>mnHe9N9O)k$>>dG(b+!z&H}y2v zbv9JD*H*MtmNu4wCyN8gN+N+o&>Q!AqHbHjX7rkMZt!Gkxk)b3iG}FoXdX|+1y9CB z2bFQS3N{y5$X8?4VSOx0u6;~ zp-3l|8s$o>%@Hmrs;+J9ix<^1ISL9>LZXW(Oc@mn0b4<4%0W5c512?~x|q&FMH-={ zF=Z6Gm`veQD10haNTZ3^EV)Q%Py)u(Znf5{)dvigJcBi+vlr+bMOu4_##XAfSE`*g zYEOgQ-5~R{$^CuG@PszLWGr0P7p@wM)-DL;i}#Bw;bkm zTr2Fp7H+>BY~PP|T=UfI+N<^)ReS2ZX@R4grmH2P^EMONqQV?uEQ=S+;`=f<&P=v7 zgJsNMX)~CrOgcbFoJrwlvt;%!88pzP3~G8NxHL`{g_nh_ttg8o zgceOmQp6b)Ne)v@7g!mxT!uWv)g~mCN`@H^ z%tAv<=WhsAO;z;nCOfy?rBkltbXo7!qOQxX@)<|zRB_KCSUm$#P98iK2+$R&-%PY0 z#L34nn~ zIz>D~xfP(3)AN&a#3UFGFMkM3`XQhfv>0H}!X*fX;ZDppz}VxnlLyC-;cswY)&0|> zhvz2`&W<6tck=kb>G9p;M}W7BQc^F^&w)e0Eogx{$cnvw0pRgrv5%$Y!?FpA?Nhz{m%}J5VCZs0T^AFTiBD~7C!_%ftYXnN-Viu zd?R8d3>zZ|eo*H-pbOIr^c%qG`>$WYw-MG2vkEf|8!~wB*rh@H$8W#?^)E;mgwSH7 z;T~+opdVfX0krtL!w-&g7lC2elf8NU5)2vGvZqhZz>}Sx9O3iHKmaq0u}2T@H6%>w=%2nZ(##1wex{E-dMaqE<|% zNFdPgxPVEGNMe>L97?rEWAJNG(nnZpi5YB#MthObRibwks~u%ZN43h+tn{=ieZ4B* zh$c9$3XUrLqn5%&SJk$ocGp(FWv`lvx6dWpCt{VYP5t9H9-Uvm`@|cmlNu5dQ?)(- zpI-~M_ySX2LzPzOB2&8XG|${j=DO_u$m?$(+lP9_mL?y+IJy7i=*vI;y`s6{_~nb6 zr_be{vf}Oop}m`-t^?`A6T$jjcg3VAn;h{-gN zAe+ig&t@QiWzy4f*g&`}DnEnF&7g1y(-LVms>U;s#%3L*0k+G)h=eB4OFjy zvjN!>6SkspkgIe$RKFT&*^YPZ7j*6g8&_RrXt|4+*_$Su&@8w*f7MdBaV_4li;B=U ztVJ6)oJC_YTQyA*qVVnLbWk<`Op*?$CMwWp(v{G!a8#Hg9r32+^4`mZt(&&OF?dc% z@0EDxo~2~MTf0=)eI-=Cu17nUhYfin05E^mO0xSJFc|C?yib4CGQ9u7w#yJBQxzK2 z1p2iEz(5$-04e|&*hFop-xM20HOAtj@Vz{xGnRr8dt%(3oX#zq^;a%LY8JwkvzAb= z%3dqfMwM1Xvg_SQoc|Ktwr=R7wR(+#vESKu5=?z%%>=XweISTfnNL zQ%o!neljK&e*XQ`-ILS%$KbslU(`Ybh8;h~0rWtNg_1acNg!a!yH_ue*?Rfn^>cK5 zKA13Q5xNMHp#eWkSc+SiRS+ZQ{R51>f=fUbq8B^?aqG8->feJ)`BsFu0PIg8X?IL&af%s^<& zKU@X_XND&azX1P;!rTH}{iDDB0X_^{F;FT1rRwElK@WQ94}_-@@quBWS1+HT z{bU5m&Q6b0Bzyem0qBT0)#br$bZqpU+c$6Dx{jw7uU*~0dS&n00n)+l7OGaYz5*oM zSY23Mnq66#TAUqULbHp*Go$@e!@cAEU8B7nBi(JF-qwb$=GwNpistIl`tn2#+8iA% z%MT?&-aM}}?6L>!)?AapsngihN`RSJAu&irT9H5_5GcWuaS_IVVX_~Rve*)|Y$gzM z1QH&QOezt|r4o%?Zjee00)bi})^bG}jzG;3Xo%{IV69|`Vc@;k3KB~WEkFyz78`(J z48E2n)bqs#o=DH&C@Bm{4popv=HVj3WD1MU5O8@43ObfkK&6Xl3<;Ah=LvO)WU5@X z)~_}Ab;f|+95&fvMti=&UZi(a=p5BbM-6;5%k3=+XS>?dYY2|o6N`?D4M*L!tA4{< zzv?KRFhyD&vF2b=M{cB5@2b~&S~YDXc;nXLpEpsE(=U@cKPRgytdX3{k|Yzx{+CI~R3c|1+A*i)&6t=7;d-n2M)-8o2p}G|SShQu+0CCfL zqURvLZC4u|)Px6cp$&7v82GLH<{coGl{n%nuW<{kn7w!k?eq!{f&DV(p+zqc{7`^u zZ}|dn8UO}8w!(2&$rKO^enwMl$PgU>fC0>aWco}L4H1OUV6LVoL~6hY9V$Hyok{u~CMADscf(Bc*$6hAmR zet3Ke{g2Ns92mkF@qA#|y~ii_j!y0$1FoP&DvM*Dv_UvA=u=BZc?@6oIz^^g;jwJN4~5Ap%tJzi;1=75m}6 zQY{D=1`q;tr6>iD!hQ?mDz&Q&3&*J*2=HKd57>=C3%`VqAKrl8zk5X-8x15wJEKu` zj~|8%>FCiBknG`uM-T23Q;WCm-nnu6)-}M`t(#YGUAuDQa34ghlWl<^+uL3P?QAY> ztu3rAPNPM#nX!fG(Yc8s5WsADxOZ%zYq+=lA`!o(uC1Y}wYH+ArmU_s0iLY9Ag?$Q z%J=1lU5=o`7O-1BJ&bbdgvslXJj|Az_k9SS%@rBSy}QFX4%$ ze5q6*7xQIOu}Ugc3xrAzU%}?dnH(9DD1=XAt0-(Gm7@lsq&TjIB{YHMi{ipWiX)#&6ET@`9#<<7TNHAqR^vmbNL!*h zOPS}yYs>++`bc@t7sCqv*@s+|>;)m3$M&Asj0*AG_rw;Ovp ze*I_vC9rF5jb4yG&MhT}xN8y2aqgXG?Nv z(mX@nP^9gevlh|IUb3bPj5#Ydy^ROvl2uh?g6HU>8ym=)YO=bLWvb^{8d$n=vLr8C z5Xj=Xv$?Kpwl#~P&jOD^6{nFo8B}gILzvAFWl(v<@sIo*hFD?rT0C)$IUrKn=^RxK zRg{s#LwnA$IF~XxX*r_I99b3xSZJd1-E@(UDG9UXc>;a0)LNx-H|qTzj`)Z(KI$o& z@Fi!Qi77|nM4)2P1IDXx4BQEPrh_bnqrfn4<$MT$)VPw@vL0<-_f{`>s}|64$<-^N z+V$M>MQ~t|`VF8+taU3`x8kc_j5MwXD`&OdW`-9XXzLaLEU#r#748Fo;XHV7V_^Q^ zJA%OZIZLKv&6@?S+wfM6u?ub)^9BJm>-HGcpArgAk3bp_Tya&l#BZhdQhb9-T9dwzXuX=7)3dvA63^2R>=;d$fW z`mLMy9^QEfAMt3K4#0z#tcb-eL@Zzu7D23wd zTL2g)8AjR>yaz%6v&YA$phrjW8HB7D2m$Q$!kGcRz?|KE1gtv4KJ4iH=_3Mf4^bK4 z$Hd3h@x!CX5TkXG$B!UJl{i2^9e@)c2m38dEKDyJ(AO@3! z5TGz;9nKNQM{8Qp;x8x?POKSspn1gCGZR3tCJO zOs~KG_B)X5JF!I!92joF+I@v5TudP%dZERw9~}Bw7+^RCw&6<%Qar;g^xy#W9VKC2 zs(E!0bmY{5v-g z%x+#ixOQdtaDV6W4$8vc*;w3Moxj)|JwFLBTLPF(4o{8tPmc7Vb+Z1>fu6R3?$*AJ zroQ&Z-j@2d+KQ%%(z;|xWjwz$7A=W}6X8HS=#Kdu0f)(L(%LmDJi%y?iouhqcpNMx zIxrd-#zY0HxNIrdGVo+&i=%~divDh3zPi^|c^ zcv?DN&lZ_L9I;ubunUzofx-$_jLK1v8R!&gGM%48<6*1@)0EgS7OtBTTjs>3v0#p4YNDxXl%YvoY*v>)qYe!V zv`LQ8VYc|2T6^l+J8mC8{xAO9|K0EZ{6Bg3`}hCw|NS5T7ys4&LE)~HdwXQwL7BVH z92}(c!+fDjqqZdq3*Wzg`JeyW|Gc!SDlbu9QrW>2yXdO8r()Gpv+J+f1s@Rk`FwAju^Ig3n*C0dJjLs*MmE?$G*@93u&zH@1<}kFGG_; z8}kRPi7{W*e7Jr&SU(qTT!=I+d8=juHA}(TRbSO|pnBC)hUW1KT6Vn^i@wT*d|*lQ zR-|slRWvNMRZ_(PGS^Ar7<1@gD3uZXRi(%MNeg6yt-ebrCz3>bnh7;iD!dF2HF|nuyw*W$T4E9(c z91tgAqGdA-upfdLrRIPC1U~HRUw$R(CH|<&0Rn#DQ=x%gAR@^g;R;zUwA~A}Us26p zK-7h)N(pF$Cm|um+`^rhQt)sH0ASFGzZdSugW(eI6TmG9=mjyfsQe@Rnm)Y41wODL zd->uS&RqnOoq^*&IXZ^_HjW=WdW>>C9zDGO@ZQ}=_fUUW%uBN%N zye?T>Q=F(M%quI1B*MO^#}Tkud=``2phF~6$W0QlK_t|nvt2kuIeb)cQNaa_ff&$A z*&r6QVkSe(VT*Y@0hcf0i^T$kM5K|3QN{<8r(*K841u05K=z9%Fz{tIk32(1m2CkW3ed<%X7yL7qrOqH&30AB=1&GmF9`%o#U}gpMmCk+>jqiZq!= zp^DgSg;1cAOU-JvORM*y<2S7#y)92~i|cGf8cUJNkyJR!rLJm;yH1+hCinMhA``mU zoFTqqimzG{>*n~XE<8zJ3}vs=H>xRk!J>-E~%N=nLoM!6~}2gQTh@ ztEx!yWRA2bTM!{}ePp&3Raqnnz;b2Kcv*C4g(Qxe%-2%{Mhf3Z6_}_3BaLTZ@r*3K ziOJFCP=sk2%(QeGu^}25hA?(1gLf%|e+g9(7G;oRnH2a}Fp}AJsvy8s#wF%*4H&XO zyCKj4AKb=Zw>j8t3inu|z2<1237u>L1_g*UAE=!R)XjzJ7d(|y!P;ei^-`c_#b34T zN}>fY09c@UC0x6b-?Rzl#*{Y*SmNr6DIy<*=Oi-?*>qJVI-r1;LFVT$W!X$EiR+MA z%eCHCL$EtgIh$zT*2nt2)$>KYSBm=%HL(GA)qK3`GDuf2q>1#SEy*ENY+jGb_>NiP z3 z*p0gnZry(bB=|Aihcv}Yhc)TAWFLZ+Cm(&=HI^1H0p%)^s5gW@sA(EkLieJB=t!4yu z!1n;XP|QR){+hUtaB2&5rX^%H*n-sB+!m`@m5IL3mz@VFm?fmHxJ z;Mtcyeut+)j0D`m7{f8)#=fK$$xxlDx35!07ePwX(e(T1S+cytyUfa8VxN~)X>u`T_e|rr`wzs*AV74~D zwmh>mKe0SNfy#VLqs`IdsK!SpXtck5xVN>hv$?mev8%DRt-7M2ytp=5Seb|c#!8~0 z!k{nga)g|=fX$R^(m8c%t4eN?i}ezLR>V{B*-9Q$!DYzUG$ddciy>jsp+y*DF-0tn zh{Y9igd(n3B18okMW_IyQ7p4?MMjpuz!Dn3gmJ}Yz!+aV*fsVpeQaMT@Ur`#$ zD;*wR)SGjeTp5|h%_g(SbRLDtCo}jE;Cdg~Bvw`qGY1(m7Ky|mlel!MfX9~cxhg(S zEs+>iD!W>jt1||4rjXVg(pe%JYfNQ}EA2&cN4dgPr*yR{-Ce5O0kv;X7aTD}#(_XN zl7z_Cq6v=bqSM;E8Es_BlsBRCck#%iY`wKMSPDf15r z-Q61R2uG4PIyH50WBtST)BL30;Wt`yE!JF{&T6b_Zt55qmzna|hB8~}yfQMFBTJ?W z;u3e4r)IOD>ssmH?b3mpv9A4S$3e91N~rn3Q+L@^ye18fvmKpeO$|v|Mv^2bq9}=F z0p4VgQNkgaBgtZjGMO@oDMS(5DPjjnXwT+Zv)Oud8YDwcW&pk9>Dhc#5kG@QFpP>? zR67`nIPe8p#-()jrA%IWwm5^L&8C}a{9J}O#E?eVihQB2L~5!~yXrLHiu|qM&&-iN zM`AQmw;ZZn3{=f|D`q^Ulb*7v+=^MSW!{Q;f7KG2noCT&OXos0s|C%Q#T|S3O&fqc zb#5C|5hwG#WR9H#Z;zo&C-KusXbLoo4i3yf6Xq%%)oOPW{O0Y2!@=r#L;gUxX)V!n z5N+Mk<_`uN*9yD$^V+s$!LAg*jIj|D*u;zN%p>;V2>@7r%a*rt9_R(=(u6w+b?Kr# z@HQMp@l!qlK?RIVLip;I$w)GUnDYyh8Nan zH#g@&8(Rxo0I=PaZTNHY^7{V%))jDISFhf>iyat{;D>p7jsb@01(%pfa0?NL;1*U2 zOSm5g&~w46pZwXyEn?~qpV|dL0%##J0mFz5$PbSIIS5pkSPvf`6Pvft{;db_*YX(} zcK^}Qy@!t;939_-;OO}NF|uDEc>manT`&xB4y99r9)R_NkEe$ZAOMDe0|U?W>_SB1 z2A(s-Q-~KmubzXzfxUi;_Jjd}QnQE{NI3ZOl34wMmje{x5@RoA!cqKs^Cqy;Eje&k-d|*VSXoOG%M(Pt90K)XT zXn(K@&lY0im3kGpF&u!P6Tu98*ym5be!VE10fe~lPXxW7{Z16=_~W`?nt4yLk_7jy}A7 z;|jDluIz!X?e84!ZC&13-Pv5)-dIf4tXf`}oSzv*)vCq^CP#ZGM|(zxx<&^&hI?8E zIvQ~zerruR+8kY)0FssFhfDI%ma+n$JM6L&B-1!`3Y%JDQHqQ*AQ`wZhJs61^H?e_ z6V(xB1HWnnE5BCgAw{#4n4b-j>U#y|A#3UMzLKl!}=oD#mRvDRzw)&D7 z*+8-!CYi*dQ+Z6f2uMb!3)yTbkEaxfv@(T7sdcFJF1694HV0Iekir~MSPGQZq}pDo zve&2`bxLQg%wEmb6q3Y2fw4^GY0(Dy4B;_Dcv2r4H|CA${XI%sgTzqIR}=}pl+-z* zbXA_KVpbC9qG_vg;d#tXT^N)&3T_x5*Ui2m4akaW&L>;HcWNlyB&ZmlV+n zp0kstuB1y7IZQKQn834&No+|LQ%sYXm98R&GDMXHNMdg$-<8dC=CJJ9bPFhxrp=(p z(@5x?txK6qbV^wU?H6>aOKNj8Dk6Ld)%ZZiyIe}=r)7xKvSjHws!UX^%1mL~={yfh z66VNbVqH>gtJS%i%)t&%(Xb~u>Mfo0l});eP!Oz|^OaBMCa2sbQ{Zx(#nZWE^I&vx z%clL6b0AB>ki=F`5(de94~cC?r&cm#V87B)79~HMAt$rVY*|?Cs#m!h)w!*PNS86z zZ;B7*wQd5moE5YB_;9#+1MHWtZW-K|CJNSS5WE+-Jx|#@Ak$hnVJn)zt8}>)V53Jg z;a)Ia+DMlw*Z~YP|MWcc=HZ8Fbn`-3_+&9$1sSotpN@JnQ#Cj zA;7ExL_rHL#CM^^=z`$K125(hAHgjEA>q2PwZgvY!e*fruM>zd*dV|?5F@aio;`SU z1OkTLe|&r&;R*@fIi@el<9K|6-zoqM`>lHq?qh&K0GAN_%^QTS=dYhVef<>e{lb%n zAh2cFkiB{S^aB71OxTZn4WJQj0e%Fuei*Nm6(h{t+n0bn^b$M_35^7+m%n(6yLTUc&gQsa7=Z2Fmp_Z#zr!&5_W8qC zM4eCH33v4y;D=Zn`|a~*beC{!-#)(o{^`T7KqEBAh$akyWS`%^MPU1k!1nvs&%Xhp z5a$46s8q-IPoKbn;e(#P!Nb3P2A=);70n+)3+M%p1i}-EU%q@nlZQV63~u}mSORFF zEW`^wVJ!VDxRpX048W=OFgVo%V*pD)so#Ht9z-vUF=#Q;Fu+pd;kEEU=)ntSK(Y@& zvJY?Hy?^!g?aP<1o&(I#q0vvz&(2QI&rVSaaM7WA|=8xO)RI2D*Ly z%AM<1uA{`oU9e@~$pB*qyX%*C)^;|Rx7HUnR_9k2XIB=d7w0DCXGYM$E)#u|V?E=; zUE}>-V||?i9Zh|04V{fOEj8s$Rmqes1CkZ^-Fdmzh}#r$8vItR$Ea~=0nb zJgtDO<}p<~h78rhXUN$skc`EYqofbEn8gvZ*g_UZ$PtKm5|KbDLPha460ue)Gl--* zo>;>Ys^~l=D$K!Evv@jz*rYT1JpRJ+s`k$A@$t#kvB?#HSuk2GQ5YE!7RX#29cCgJ&B4<~)dB+kT=IKkA@-R*2qsrWLMJ_`bR(o3tI`&;Po6edYOXa4q zbXA|2SNQv>(!y-IF_WwSfMwIg*fhy`7XB5$Cu^_HH8XWrN&cl2((!uUDjw1@GM$0AFQ15l}$N| z#w-P+q3UIKat2^l*s>n2U(79=G(@`jhO!)ikHUA7*#=Z`m@Wmfro%raO$2U?%(jR$ zg(_#A&fBW>w`&4z;F&Cm;ew8xg3diNJhpf|(!7!1u?v3(prdx8{o1@id-0ULc-jpB zE1CooW&u7Wr-+%uL2bBC8v*;(s}6P{g}MxR17No7iAg+dXv`Z1fLVycz`%8ZzGb@%=~ z2moUj4(!#la|Ehq=Wm`rc?+%!!1LlM(odxkF@A7>(S>~#34Nm)906}(UM{w|71!f)vvxZMx%x5JxP$dlnyqt8#D zJUIh~p}Y?w5&yyc+gSJS-a2}KmdftlyoNJAZeKsd>5JD6_6{%afDU%Ib~abG)|YT1 zK6tW)*)h=E^vLwsz{GGbPWl+^Y3pfk>}sv=Y_9EWLNIG6E2>7hi{a8(pg7_!47y{v z_OQbgwCZyWDu-HXRfr6z7_dOYV{7>w6^E(jvQ-?8f<;usXE9|QL=`bk#OD!Z7D|7HF9~4NIUCNX$ZsS*Em`EPjtKo~&%{AD$hbS{oW&Z0#Hg zM2Zz!TQ-HuJB6(yvsBqsVLAdBFB2WIqoE1h zGE=$Q)u8pYYJBY~f4e%|VaV?fH>^gRHgwT`ciI1+uK$XSYw6lQv3I`1*zBBh&WUX1 zoHIo#QKBSLj3Pxzq^O*8PRyjJ9FKB7=Y7BLKLZ#T`(gkCHsCAY7{G7V(9RR>GS80T|R%}^7)gOE}Xh_`S=Bt7cXABdFlGC zYq#&+x=#*lb_su+1h6z|;I3Z0T6_6g(xc~K66i&N=uzZDq8;)jZZXWbosINDy(9pP zY?he8!OIm2Xr)KI;FTUdM$OBIYtNu3PhSFEqQj8*#5Qq-?AMc(M~@#pq2&!9u02M) zy!L42@sqz8_J{_(xc?9gW0IjHfc^gJIc(PZ*DpXLFbpI^knS^l`wA9{#>U{r-oF0w z?(OGysKnXd$y(9joA1Dn@MkFLDnYN0VqFge5EDzn7>%f{KMKZ!WQf5nh&mEKe*7*T z^Mbnqw*WA)(8LE|Nx~T7Z(l!yLusu84CN2nDU#-K5RLdrFEJ?*X>2ucn%hzX`G=US0q-Ta#ZC!_0$_i@ zq5)tu7hjO<&tE_P5UvP_MG3kH1X7F=LYtE7ViZXwa#$MyCUqgMmy`^l5pIVM5pWA= zpRfAk*S8-(K7arI^~;w}z}WluzrTA&o(v?Tp)xV)<0;%2bxPBJCjjgzP5M||TV8-x z7w5pRg$M9tw;d5KiQ~Yo=NX9ch z_K(rr#eIAGM)&j%?%1+tTUX!a_U&EGJ*{Rik(6O+K?N?DFJ${e`|jk;k91 zdJ}qk*z8Vt0X8r!+7O7f2IC#UWVb)L)nB;VlN#`rP6jHEB$_Wq8ZL(G&v`12xhiHH z5k+OYuf1S^tsHv@JXsM}gsi?;%Rads9Z}aHn@XfndPhY$qDDJkTcG*gX ze3knPS`H~()#gBHab0KImj1O@@Bc6V^Z)Jt`Tzc34jnmJSk-0@*Vv1CEB4%qZMz!j zxscp+&Ra4h)0Jc^JlP66jTmWd09dx#@tfLX47EfW_xl?TIBF&=eJ%J;}LF`3q*HUeN)TKiFH$_b&34k4rHy=c^p2}fw#ZaJTINC5) z(s8i3Z8Fs~9w^yu4Y!6$S`M5(KYi}p@k{59T{w5*;`tL7E}pyyoj-T^%B36l1G|0m z-hBYQ zM+wga>Ht~~X^4x~Dt!FxIgNgafNBK5)*b<7$fWs);FHu(D7p%t60ROSUK8{J^Hv`b z!&aZ9XLFDnqwYf7Wk4+&`eN^u?m~R?;wc!$16@EDlT4t9dkay%`S=zzf)%3~hFnQx zdQZj+V(-NOV=wg=z24J=4oEU#aC;0eiC!ofV1NfPOw2rFfHARvG4P2ES-SGeC!UW0 z8i8ABszKkr{Qz~oeWjj5F)tCKV4Ze!31CJEY1j2PT(SLP0Z3d*=;BO<8RzhYIOG}j zl(}wb2r2?s?7IHVjs5)jC-MdMV8Z_S<2wV4uLV&M;4*Fmm|=!7X_z{UABbM%-zte% z%rNdeWPl-uxdr?6-~YG&lv+SNVo1DVdevjX*dIVWz7Txdh%ty~;dA-?*%Jtc3}R4B5%_#xAFioH=L}ky}P#U?(OdFY2Dh<(9=Smti7hJwYs#iyr?>rsEkL-BEh177b@_=K-r^q z3p^QZ9&H51G=Q1gpz#=Jx(DsLNu|MV(A$hgkj!CrILt1$-S2P)9j=JO6|*{`0GQDl zgfj!uEbge?m+(c3qN%EAQFW}iX6DS*cu7sJ+AP=EN-7)O{)E*X3MWf9@7U{$rsNtE zOQxcUi@9=rP9CI_$qfpnS*>wsv`($oq1U_2X1~=Iv^azCb2_uv>MPWzTkr>|Z+c>1c!RbJS0GPe0*xbs|o`)R$eOQy-sR=Tql)?Bq!ri1;m zWvg9T`be;RAW(BK*m&GeI_7CO>aCq|S57<1586w|wXt1tUr!!Q$8XB9)MOjWGqr_T z>O__*nyCn6$i11glcXaf&ytyE&dfDt=8!F;-bET7Q)K;Bs#flaZ{fCJ$*yqO?s)Y;Y3q2ry5AA+QrXK?)`C2p zFGpolo4vGbF+I~}k?VY*n#o`9E8O8P9RR%or6c~*5nuU0uyQ0+wJ%yX8Eu@b+J3fn z=Y^7<&F<}omkh6wb6?HB3c zi>11!8L!7L-arhn)hFqvub5jbh88@K1TYqNLW<;EUyv3fTc9X05IT+^98_G*65G{#*kZlNPUJN7Pz$$Uf)Fr@Am$LD1tzh(fEQE6py>0b58u9~Po*)I-pX0b;1IJp=$Wvu>Hb5wA~I`V(Fm=J z&jf;a*$xQw0)!AqtU`&H4>z8Y;*FIY{3&1q5n2SX;J{EyBtr?of&D3f2L}d{(Lma| zyMiPvq5P{g0h{%%LJGJ>x&);JE#}sSLn0QJOfu+iRt($%z)=4A#}9y)J3Xo2Q(z3= z9oP>4{`R#r5uctXd-_;dy3{CntdXPvqC6->C7(O^YG%?b@Z)o?>o~?WPHt*Tq)z{Ou zy|a01dt*;?eP?}DYk5gyajL#BzosBwkqDJUd?~*x>9I!~wvZK`%os50eS|R>GM&dj z+m(6r8jn%$(gPzpkc8IzFj|RZ7PrIdbJ_wnTxt*795J&!VsHcv&Y;m1Hn}5aZ>+Sw zgCobJCt!-5qossbi*M0rty-O3t9NL04xP?rG|@9P}2C0b{<}W3=vK{mFR!;Xuh&hrc+MC@ZV3tFCXUZSG8zG(?J8LX|rr z)uZmRaS+8`G~z88G5G3Tk>Z0hM<)&+Dz2!gtE+BpsjaWC93C4we(r4FzA1C4+F8;c zZaWohJ`t!okZY{U(ZsS9t{kOeGO)6WPpQ(vvszVt{Z-&yHk!PnF zA9nLbmd&d8zVgR^o}Vnuu)O+~wIW+>pyvNAPU88B*kQnoQO*PNZ_$WeOpv|)uI zsk9Vn9Tf(5t;OGH4>!AFZO&+`$ycYg6|2ng9JM1)=dgOC*>YW$T%WD7D)oM~HR(%r z`%7rS#z5I%pll>iI_xVO2vv>*D@McBWBXzZuiiWoqAo--SYk-*`Rk{zewR#`2>ybWUk#=;>m_V5W! z&7f%&Jh%mnJ$@>B4#`dlAi;R0P1wV=XDbgM3BN^iG?-!Bg-8OF#8q%$5Yoh1>Ox#X zJEFr7ufynqcpk?;c+X$>Fz!EOfRPDXAI)MQNlXI005cpC-Z)d3uyjYFn4pLRh8!eu z3!wT8$0lNlYN+JH?_d&b6-Lwqbv}Ri@JVzbZWQjHT;etgdhvrz61^ap1_IT(i(&%d z5S4_k4ZaO80fCf+H!*h+7EtOi1pgRj5|*SGBAX=w=@bj~5UdM3FtCdO#`X&(#5@BP z{`~plk8j^#zW^{=+GBkkH}`Mr-rdvL+tISEt*NJ}uCuPHwW_S4wD7ML@q@mU&&?f- zFl1q?35JXXTjqr))2o3o+B_QE&>5UYlS6NI=&eqJ9VD}uTn@Y6?g-djL8~idc7=d3 zvnRS~$Kc6Jx3}yXb@<|HqqC@@@#vW=M^0Zf*}RFuiizptJ=^*VOY6)wzeev+>uf5m zO{uZcJVuob=!(S3wFZwYPcO?e$YlCFTE&W%{Ge4ol*aXyg&kUr3*>b=5ONo4eXgMAT*0PuiH>v8*3-eJUL9l@+TUACNN za42*>qr22w(CshA_k+G5nXn;$8T{_vKsm~hK=~+W1n^XBJ_F?VYsZ51queuu|&%ufAwgnW*j-8nhAg97z4~(J_LZlfuY1HSS~<|2gy(Zb&##-ZhNezVojP;)%-Q1?FB}KGE?hW%_AJUX zVAz%Gmv7v@e&;?v#SDP)t)EE)_JBj8Bk?5zjJ+3^qUVssU4rR+<`&nmz#E35R3d?9 z(&Nwl2~9g>{E!=42iT*>KpJ_kmDMM!51&F0@vfeLNn{YwpoFnyXcgD;Ra63X{8J!d z`4P^pKrqkNBm<{Xj)z`!8{Z$7_+*`oP`IQ;nb^#@T&BVl3;4D>>> zL^1}LG}|5sWJEEg05E2lL^7^N34n=w8V~y}9N4FiA3uE{flS~Q0;U&XOjv<5kie&} zU%!0DjTLuRcrxL=L}ws`*2vO*A#QOmB9ja`pjR4QqMMQP8C@KJNlY~fT?lZ9dM+Vm z7`P>s@Oi*VddO{kyGs^3Fw}qt;2h2P`2HOX`>#K6mN>y?3)hMvG(afbLx@;9M7gn^ zQN;CvL&Pwkhyk{K2!{Q=!%(`Gg|otY(HPi2|49xEqE1f{u*j2%_r_lcB$$C@ux0Pw zzJB}i8NLZYU>K83!We8B+!zZaV?)Lmdmv^o-o17C&dp2GM11yS5J-0V`1Hx62airq z%pBTx_`vAY_|Tz!g9k?UP7KkC_(MCk3~cY&vt`rHO*HAFyQ!|duCl43q@k>^uBZSo zE00Ht!+z1b=mN=rv4G9wvl={RoySDoiEfxMjRtb*Kr(|%XL4wbG=0%vwi+!~lg(~( zJDgsJJ79MQoZd)jMN>s}n>UcM*g{?1yC)`3ZtEQ$otQCN{Z?nVwsF%i-sbe_iGwG% z_6`=6)tGD^VaO~hojnvQu50R1>s_?vCU3lnGS84B(`DysvvRe$GA)p%P@0uWvqojp zYh6aY$7&9_Tq%E`G7zZ?#Tz5}jlo2dKiTTf@9-4#xKrC*MZ4%OS+&nsvoFv%9%|Vi zYMzWV9E#Q*jn-h34qzMweBok*b>|3shIZE zo(?yji8su+i*{>+t=d3~DZ0s7v@6~?Rkrz3@#br>j`QKx)6sV5RJ855zxt4~bW|VT zA@_IXxm$7_jk&fug`>d~>M#dd^9;q=>Ug#?l%?=x$=#WG_TO^hvBbQO979&NE-Q!D z^#IJoW}9LnK5UtI!i+}IXga>`w;Tib2fwH^L^PHHy`xy~EY?~J@DO?FKuIu1pe_r;pVOS-0`HN)P*?UrzJsHAn@(K826oH}&!)Xdql$IhQU zdHy`>%q22mS8w0Baqs@!`30WAftx;42aKWe`OD>J&sLs4fAos_5`ivwFF*^yy7wYn z@g;l}O9B{TumsRzjB)bXQ+jTcrxfxNUBWy)S$pz~CdZ2yu8X~w0N4`%Z0+f@<;Q7j zCFu2dNsNK5K772giWZ(cqSoNR(z85JA_v4`hApiuqh$MqlDZH9u=m1yK@yEVrJoN= zmmlANSa4u80EQT6X;kbT@J8aRxC@be8@n_JtokG#h-Pj{=whC2bYKiH(Tn)u3+N^M z7H*HA6&oyeT68F$UcwC&CHpWgC4ez$pzj|)(k3k8hARP#V79)s7>h_Ix-lhyu>deM zB>@aI9FWsmua_`Jr)b6c4GZLp5if=o#C?erz@mNsMm>iDVE^q;0vIYKdLflz!=Qqg zHykr^qyS>_35JpDlDyZ3!@v9%x5iCzCC;K`=HV(5nnlfj(gIktu{7`|ehgfQ_r~J4 ziVqXQhflu+-ZT2`EBvRDoIObP;>j9qwkh_E=5aD$?BUWp50#1Oi}&Uq+@8CCbN1ei z`**IfC%bX=+~o@=FP%SulIJd_dlzR8uq_iiM-S36A0S!(&cU5q2X<`Uy`^hscl)-E zX7O-zb$cynQ(RM=UzHy#kJH{RDO!5b8FpF%Hlx?Vt9$63I*n7Sg%3mN)C!)VMz5zy zjCz9u&dh9eSZofP)8+7Z-NAq_=JUh@f&B9F#)5*%o}Rwa@&*9RXbCu6@mQjwqPo3( z)2{IYC#H^`9U7bJ-nyr+u`RM82hL1k z1lZ(Ci$)EAIkajU0vIx*(Qmd!+}^@axGEB_4ae(3iTYrEQ!v%$E9ms5Hak+=?8Q4A zReQZnQmwBbD_$!zOs{!k|UPFL$2}}f7z5X($&z`-qYJyTo)^;$=|uV zV|;u^YkN&eMM+zCPoliu7_4&@4frb#I+Fu3b5)K$o~!leiv88Hm3EkzOpQOwka89d zdCHEs%Hh&>E6qj0{CXWdFdorb6Iw^9&ePy4*;~H(Vqy2CQ0tk*rVGCM8MwMc`>907 zsbJ%bt9sH_I%dot&_(-9i9L8ld$Lz%t;;pjuA8uB8Jb9@I*_UIXDYoJ3RkAWnVDzH z%ClzWnzCiaOtNM4aJ1N;OqnTmDMLxKKeE-Cd4?>dS)uonA+rLqHe2TA*s5r)=0=I^-=M_LL2RVE~vdwHvsC z+JU z=RhwwFwu*6{o3t&H}5^TGds_7=$SNN42%@<=J~6Y=Py>Dzj*lKYa3 zOHa_|65JJp7`R$}L>>-TJ$|zM@DY<3<>KlZ(~G?q$1G_UBIrflO9UboGYLT>K!~;n z6F?#|G0&(JLuJ4cPfdI$;&tPN0HVtUy?`iY6$1>FsNo46>9e1STc2rM?cLXpA3nW* z|MA0z&#+&xV(;I76{BA;TlmKRZG8+3C7ZC%pU91+55Ih(rJh7L;E&I|kr)x{`!^C2 zaG%8?pap>OOhqcceFdw22zvdbOQ_?KVlj{=txS&^<`w{!h8A&%O3wN7$M+v%unqTj zqS1E%=?87%Mf!>Ok6(ZX@rE89qpQBbhtZDDVxA#{Qyj2>7Kt}F#m!1*QAq&%^N)Z2 zfwMS7GA7An&?k~>WT@)k( z#va_ge)sm(+cz)WxOV==)$>;_oj!Nw*!goO&YnJY`ozqstRbFYcc?K+_iw zh((0=4es7I&^Nkg$KD-Vc5UhE-PE?NqoupKzP+}xwW_SKyr{l3MV>4fDGdAb1MZ~H z756y84y(^>^qOe3Dwjda3w(eZPC$dCb?S9agWh3)Co|YhMu(Xf6n1;u{(wIc3`C=m ze77fLviVHbfW;cNIihx$J#T(EQJE@hXzARsvwvcA|FMa~XO5q{8850+=-hIx6Ow5h zd0I!F+9snlg>5pWB~NLQDJ*iOO|Gz7EIzZ@r%=$NW(uWIp|U77c8%U`wMV@Els{Ay zjFtuCHNj+UDA^P)=&6x^0=D9NV1 zo4q+2XO7CAqjF@cT-myq+)?K)+2^a6vBvvz^@YV1%_q;CY;LYSc5Le1hxhr#)ka65 z%2w$w9V}=+6>d2lZ8@n9_2s&{ZAF8Ho6bdB!LSp)#^b(*W8Rt>Z`EOM*#Sr4s5Z1i z;qA_~H)mUGv&|Km)WMj_)FlMWf|=C8=+4e_X6M;~F(@Njp9#N350+^%b2J%Q%B*Zn zR<1rH&ybO4%+-2S=BV15ue2nU#)wSo%~IGh+w5i>m)E;+gz*js30bu^JpR`-K1wY?b;0A1^{tSmo#xU{+oEiNxFEH9%(B|Qg5{fDn!F{OTgk&fTJ ze91Ks2OtfQ1K|>KY+}(V7_SenUvKO)B)n~yg@`m}7`P<~#9|?)W61Qv~IBY6rUBB(4>48u!06q!Z8UfF^6dMOVEq*nKvw8iJL{t zt>KW7#<7&lF%u2}nK1E6fEmYNn>0>_cZeSoA1425_}9c8jPKvQef{diOR;t^i>EK* z>(t8fqUacyUtXG9TAW>&r#+)l&OW$v_s$LI*3GLou3x@>?b5ZY7q47CfBxL5vu92~ zr%oO{b!_Iuk*Q!`14t}3l7O;r@c%94@dSg;`EWs-%Q7N6AsTjnwATt~%Q9E?>SkR2+y`0b{ggRkGQaZ1)vx@)m4&C;C0f32(uauk3`k^thwsn6v7n ztLB)iX4+Rh9Io8FZDil2d)GJhcHMe#_vPz1#g$d%^(}=}tbv8dsLuk)?8Ht9&`SgwEgLE1w9IA5dEB9D&lV?w->pC-?TX9i7_!zyF{9 z+tn)&d}AFle>$1F2I&0JI^ONNYU0ak(Se;=2J9} zvG%aNY(k$LPz1KhJezVIZF!c4JWFkkxjX|T(f6-Z^bZvDe>mXWXohh>trF+ zG7+mBaD-YMp_<{z6VoTo9zA^;VsxQgXV}HFSFc~Xb?4^n{GA1QikV#$GfcRpw87#4 zrRXpuZmm29kmwWwahSe}vB$VV3mot%hFLlW$=G|X>N9-!5I+~4U0GuxM$P=nLjoAY)B&j2 zZvkTv7zQ%oFpVgDr+%AWtpiL#fEtuI#hhbqA)mznBgk!7mwAW=$6|CrKfc34aSRm4pGwd5MWaD7J@x2X4S?TW)A}iF`q)s zM&T3(%qNr_Fg&;hC5yR&WPvVNA{v|$4Eu#@X*~{zO_(5Anm`*%Mid&vAp*|X2(67V zm7+(HC3!Lg|Mg%0;s81PR`E0P=LU)2(MNnEdG|Z*PbN+JfOz_%m>IkJ_|eLvwPk)j z8ZZON7-mee`}b}^cWz&YKr&$L(#5lvE}Xe^?ldj)fj{aKM@}7`h8Sib*};jC{iA!w zhk5#9Z+~yk?rod;Hg|5{lwRhet+t}EvZSsoRaKNIiH8b;-ekZX_c@~;d)Q?S*lC>1 zYtp&&YOh}J)@j{ZElMW>gTbXUIJA1J-T>JQW{1&gGg>T0o6YLA+k-Y+&}t2vEK!3s zp|`{h)|km2qle7g34%lTemZ!^=X%z~iN^Q~UohFOl4L*5i)tbjA0&lB3?@ z1HQ@`SM^ax&5W~d#$7)VX&GtQKGwB!sAv1G>o;d_-&^k5I#AxQ)fH=W74G(yP5aA_ zI1+mmmYQr`GDjDb>3ncAxjGL3mZJ&C%tbUvRypZR?6$Zo%4!yJ6BkJ!tnttFG@)QBO{2TvyVcH}r3vdk6Prm`GkNv^Rt&r~Eg zrgAmW92HG45i=OgnY4k6J}b|djaX*MQMqN>0NF1~zQPpE(+9z@3>kczMm%b!_$^BT zE0&o98wWpU%T;*gny^xzP#O!=mQszqQs-_kcw0?@PHVWw8SC}tlOgk!48&_ElC<~# z{%GC)Si>Z+6sR0YHXjOA@AH)pgI?}3DgmuP#lC3Wfk5RxZ`nw&dJLJsm{@iGP^xVz zzvW=4h8}i~HSJHePZxHeg~3?uP_k|$RJzmTttqJ3bnw{4!za&yUPn%yk^qL10Cw@> z`RmuO+`V&aZtl*)B5v+dHz4x{xMDsrt03+_xT0MjOQ7M_YXO7$w6D<=m1O1Ctz>Sb;Zj8UYZ**Ya-;2k^zI^`rDQ%lX z35H3`BcuUf-*|CFG0zb6f|y>AuwTF!0qnbYJ`8tQG=%`hD~&F(%Hj{WG2y^C2PF;x zFuVuG7(|_u;#!GSQVhEAAu~z5+!sa^*K?*+gK}dHbA_RTlIew#iNa@*h7y;c6lY0) z{z2njAQqP!dJzdi5NsAZEw14}I+SYoC0J4=0)`eOkt~fa)`s`SKPHzDK12L=@U;V0 z4C1x$VaR|nFzn@vr?f|%&=dSEtdneYWkJFiY}teRw`sr4d$(@ix<KJ z{@UgAew$}b9)V6BKYZfo)X~ESW)6-|O^zL!7?~U!1jcBY53x(xp6%T`H+O99Z0>HY z?`*1Rt*dA#FRCs|mgh%7vciZTo-E;afn>CfFg+Y?2$&4wv1pCkpc4aT^e`8VkU?6# zlh$B_Co|h=DPgC@7 zvaIb|Z%?A}aC!H+P}R68yjkOIF$6pHfew|Y#gy0MJQZy| z5otc`svNVH>@^hZQie9?dD>;JX1S|b?P=BdTJTPC^{E_fG)o=GQhBqK?kt5ZOYX>p zO;q}G)nS<~t}v(Mrc|D>06$BfE}X0JWy!6y%5awYKeFT*nTpIT2t3nfWf`(SGMOz~ z?i8z7MdZ4K!dR%blhWO3Xsm7`RE0}MLe-=3rip^KgD8X5G_DqF+#hWi zFYTNzZa+}ob*QLmpD(q=;3{k1GJ5dn`6DOK9y@ae0<=&9W+-Vs{l$wHZrr?f@BXd1 z`TI*NxWDt*5+esC8!xa*a$u78Ldh6oyluRSONi;kZ88_7lE=W-zv?~Ap5nt0)R2PXguuU zMJR!>cVfFsHe>>FoC9=G$?=zW zze7wrB(vXQbb(=rS;VjpZ$Bay^!oDY{b!t|xovO7p3c-QNll6Uoxgpgb?b2}lq9Yq zh9MxT0ehcm<{_<8PaT7wV3O7WCiyVYt@n-Yt>6motwfh^-+z7o{_`94A|m+yRh(My zKcw;-t?NNgKz}3sDVE9qg_6PZPupdw&{3qc*+%~2wU()i9UCh{SmIrkzN z2}tHl007rQf2^A=(FlnyS+`>A^?!LgdVWjHBwU9U>eCL42?Q~~xP5M%%fG>l&q{BG z*+v(x1B_i)8esn}Wa6Duzv6~&PXzewkf{~l7`SVZJsAuc^y(!%+2iNWXv?~1_$DVr zi{jH$AIobGm$-uw7@M2D3yj^nd-Kk%Yj)WT#IaIeBdQ z)bW|)M?kWJGgJEy?H@TXJ~%NtK#!E|6+1`o+_GzH*N)8{+cvd!x72quRJGQMouf+% zDpRyYSz*+lf-Up8VlI2wVF}qx0gJ(B(tC`w=%Nd5jAndjT`)o787`;RXovJ>tHEM7 z*z86-U}m$ptrm~f>a|$?W^2G`4j4=!wbrNBhgABI(hyRc!YU(ezbV(bm3oiH;L(|U z8l!jb$n>7!gBDjrZFI@CR)yA_ell9A7n^O8=n-j|Av@QQlSj%`7*sk3UczDvJKY8T zP-!Su6;9LzQ%(N-R&Rc%JHN-B+U6|ma}*Cc%Jz9`4g{+AhbzY-6{FFL@lf@+uV%ts zz28+m<*7PiFBnqU8gev=99=kD=gZQ%^Yp$voezd4TNTpSs@)|+-tsYnzr&wjy=}0s zrKcfT8tCq=>)X@T)>Ro#`AaK{KYaP(i4>Xqweh+MeQZ~bv&)j`EA2WFtr=BVEA$SS zv)c9@hZ=jvbk4#obx7-Nh&JrcZ$A}oJQ1ls8>l*Nj1O8%hJAI@zIq^S+Eq1aD;Y5t z^cxeq^pRd&ut(`^%Cl6-OeHzMm@b*EiQ*mRX+mmaJ}n1qERq|F@{GlDa|v?t=rBK5 z6UkA7VfM^C!*4li&?_TTmXVo951C~s;ml|`t1PW}!pxdM8<@H9Bg-@~xh|zLma6Sl z;&JJAPtn$7{b+u}SiE*9Rx=c-0=jm2OZq%TJKU*WPvK5)QJ=45x4(QaQ9lu{p8(!c z&4=Nig0ogCw1LX-l#SF{E+}a?rUno}}uB|-+&%h)&spK+n3L{ zgOO*Hy?yiI-S4k{fBOysNowW-!VZ87FTjj8cV_)@F~Px2~Hr51Fl4{F_r@E zqJ+RUl)UsJ;(z}90a3zw#~@-fh!_DN2OJ`kW-W?*aDwW8d;=}gmxzBv4E*~E%mH;Y zDPMvL#8)Ai0VaaX2tXIfJpHG@68k4fXpq}P$u-O{j*-t-;hk+f zg&H)AN{HJ>!0(ga9)D=~93cM1u_pt`2xDTMsu$0mynOoP1tgv=d-~+jqcwOkknAB0 z8TT&2kO5;fR3;uNdvNFG{o6NgU%vu3cKOn|OBc_cKX>ZP>Emb590$qZ$xa@fIySxk z=+p#nQ3f3xAKE`UFuJ#I@2+ioc5L3cwX1h?M{jpqPg_GrV>LWkeMM1Sd0`r6(IAs7 z;c-SB_K?lux0rk;gIGJ5o*{Dzn2A~VdY4{r)9LMc1LQCmEe4atU^ePaCWFOH=FDR; z`Hgy?$s96TLON4WYYwQ*v?#vH|H*Wk}Jcx8I0TnGE* z&(=nb{x)yvn73@g6z*|GO8Z837uLj+6~5gg9h1|&?Ohe&nEU$={7rrLg-Z;++Hm!l zF|kMK-yW{qm#p8XvR4_L#kc03RWx*s&zx`U>V5J4Q%hHGu0E{x)JALf#~V&WYfqcP zgIUI=OiO*R{!qC2Sg_$ppzesjcE(>b6R4Z2n@OgJvIL@}Otga-7$ZN#$&a2rT>H1l8Y}p2xp9;$ zJ$EC$Mg~e6#KK?g8tpN-wDu6_T6mc5{X+>!riu>{;1zl9#^MUiJmfCKrRC*?#pOjr zt7|BimRA>+R!ECW|M>X!HB1;i(e=cUbvPI5g?7{ zF49<6NhYuY8%Adt2^`}>h6E(h>(@`1KUx|JX$&nehOgop zpal?;rpN;}Qr9BRviL1YhYTu`xDffwEw*$FFct$$!kE-1TElzb_l(a0hbZykzjh`V)swAER{_nPkxPt(p3t+Zm zOXrrZmQAhoUCp&!jWsRRWsMcZb)~7QRH8HyE{udyp+Lgt2|HoStU=f^tI12Yj8?>V z>(p+Y#-UM>v}&Hs=%8hzbatKIqBB}_W{cM1Fu5IOuifIc*?d-;-)sqJiCbZ{C91YY zwU(&aSx{QhxpUX}fvGby$1Y7BKDT@Ccx_{sKb$gJeM+rOsk6y77P;E2(%NNUn8KJN zHvnMpVREHarE$pQ<~)T(p|-)&nQT#)ugDjv@JFls@tQ!g!C%ngPqn%8J6uWJc6a%U zMttQHzN$lknxld0WB#fsxGQ6@CD#y_86r74U$)Mjqk{u;(>hFQ@GNDGZFQH8yUHi6 zi9TDXvSsV0-jS^ZwV|q({MN3rnz~eBQS9oq3p;o23dL%z!M0$N$ zZN93ihOMKM#~NBU)wlN)*VLc7bm{8d*@B8zg*jmlcO`45f~5yF?k%~-+8lFDwEjT6 z`DlLIsr;5R1?^{(ZD-;wr=v|LL-j}f)l(put!PLe-=*~TgGx2GI&2 z85!zy2V<5gn^tkOWhtDw8ox{z%G1Zx<|3WF+~BD)`D!h}279#C74LEbX35R2#O846 zo>bkwg1WI-)ljT*Bvd{a2hZwZ!T>Nhvyni>o?!Jrq+vMPIFe`_Ep6Xl(z?%?=rVX~ zQ$Mgs#PxMQsSvETK4JD*PwVsD zAJX)DIy8_{sX$HsQ@)ESLw1^VqnqLISP|kA= z^p6j3Xqv`HDro===;A>yo?g!YgW$k`tM~6-GrH1x_xj_9w;$e74j{yQ;(#f|frK%M zUQ#6sF~qE5ZsAbE7zA{20s!{)BTcyfA=Xa({)vX5a0djI7*_xcQ)*)k-6Gcw8CT*e z&g2BHL=GbXXSrFv79|e3p6|S<CbSRbfF{B32j<=KErY!BorOd5mR8%zZv#X6H041*g3w@j9R-sq*}adY)K z^hlXarE%&_0gEGM_a@z;5`VnXpQsAv*ZY$#u4tPlvBj0_a~BQyipN7GheD+j-oib4 zPaW->r4MH7JXu<2j?N`F_+%RRkBHn>bIFFOVAZI<62u(~)=b74 zk3<@d!It@IXIz!juChr>e!tq?{F^e8p@}(Dn}apOp7IfU@sO!tk2F?HrdaTLq zxUSV`sTm22TP_r}A9xUh$7VZcX?F^Of4wnst z%l8&EjF+?@Drnjls~rkf>&@)&761er~8SS$Lo(V%n zo{TdkdZFaYR|LS;khuzX^_Y4BNsq)l3z{+b@X_N(Xd&&uXw7*1eUg8|U+Ke@rANRO zNVY0DFqQ-`lp7fadd)4ZE-bGyqL@_zU5h}MaAE{Aak%i0cP~LKq8HEwZV84Ve#s6D zWMcaT!F~Z?;1-wA+usRk0N6)JzzHS9K>8cTI7U6Eal*z-1dJ<4I?MDD03)i=j$$8h z_B{`V(L>506HL{Y&tLxCgnbgrO@TCA$$VmHp@yNwIb2Bz)LPnmAsIp?Vgl6$TgLQ4 z4T7Jd3-O=dzW?*vHs`Te{1V%umj zNcQ~YizhE%JbjKoy{9xhMp~nF7ooM4MSh-aap3_^Tzqi<_T4+z@87*~_tv$$H?G{d ze)0OHv)3-3zIx%*h10YU{<%{#uw^HY96Ww_@(8W*K_r{nKLU*H8`?d#w{Nt6$MEj$ zgFCkl^wQ?h+d7&-vQ3Tk9d$KL6{WRBsmlCVMKV?z3m1m{37;eGvc(+cs2~}yR^`zF zT}qc8ZcODMXQrk{q%~THMrYHStdP!R)tfB_yHRhmm_1gj&ukBxZ9yYs4_aMen>%Xv z#+?3SFj^W-Ru+{vwRi98A3ZdB;5by@x}~tRzP53bFI1RFRVg%9t1|?ES?%G1RE^Hy z$;mV2$c?uEH!++T>cN*6g>q6V5=fJ6h_ERe58zo@l)%-sXyTxXCeW^(41? z@;7N5C2~WQ?3dOBdgbap09c+D42$cWO}^qWcj-Y#$&{mTzctb8O*ND^H18VRGd3~U zvw72=fq{XM(So8XySK<5YK6&j6bx#^yG_YGrf`qmRu(O&3&)G|iz};|TYGlzYV7Jv zm6sNlmzUHwxTD2+ri8Do&s{p4=iVf9wpvoVQf-Hm4dd2Cmo8LgidET@^$KUH+*xBw zZjaSX#p;j3J9;XQc`By8WfOXD=Wp_;!cq~d9St>12I>#_Yp4Bn)1I1xjmC@3R8nM}?{I?7;WGFK;6d5ErRc0xF z%U1n{%p9%wgiYCbmTb9GrV8X~q6%F?WlU)-#ekW`(_{~}JEHJpn`yy&+H!19q4wgct^M zMxYWaWst!V6XJQEq3A_K!0}r8L1rKg{)sTN1c0T5ztTr@D>VOt*Slh3u>de;7)bzZ zera`XVV=7X>5(sJX?cEeadv)TVQFc80YC%Wmj3bk%V%$2JcZuBe(~-l^&)~^?_bg4 zQZzepeEENk}-^D5$f;x;bf)K=50-q!?jUdF_yU1xc!N7}35#w`*U7!WlJY<(ji zhJUDF6GnG?k%^l=3mD))^cE7m*o3Xel)$vu7yuhU7p?t)Lx5_1y(@qQOc5|6&xB0T zGVw_&QON<*2!Rw!0AqUxA?5@q{krRIN;SCfKaqxy;_J6RzNDYD!`Ffz^vk7h8y`Qs zgFd|fokz<+GVlyA1IE~s{jF<}#d8-yvV{kC@87<0@8(rt?AFzb5U*BsSuBTt?)2d^ zC#Ptq&7%iEGTx$$pNyUy+Y3VmjScP^+_kO0w`bSZF4{c0i#Cs@MTDzLn#v0sN(*X> z5*5jCNz_*o_N4rdnA;Y1m_k;A-=y`KG#;bcsZ%)gN?^i5seb;)xejy1WUuC(+!rwWzpWp|Xh)GE=tLe~TnHWy{TZYP(YJ*4raCUx7DL z?u}Nuqt(txjVoGj3)R}f4WYsgjWww-glOYOA-T>c)4OFFPp&p@@^|=(CtO7bTqTDc z#Z%7WeU8*-U#dP?TAwPdDk-Z4mA35|N|koGV{P8TK40;WGc{;V?6oBO&5^AJM@3P2 zM|o9CAX3mbG(2uSrgppnunJunu@RQod(&MbvJOHR*<{YHjN zo0(0kdt``}tAMUdF+v7g21AySDbLJOWU;bU895s9RJA2r=FE|MauvQjRZy;ps!T;1 zOR3IYY4X%r0xh<1mm}WeO!l}7ws=xop+xoGlIH#S4P(jL;c(gRSmmB@$u?V{))%jy zIeq@n@#9k`PfVYL4?7Kv9fiacMA)x$SFT*VeuD?Vcy6BLoETtyh+y&Y(}hP*mYzIY zq7Fk^_TnL}4gYlQ(X&U7pHuuO-Ny)=;1a$HT7E>Eby3fu;1>KA5CxI(66hjm33{;z zW@3>i&}(63X>MKftIM!obIbH57ghuwSpAO8{d&Ns@2{aSJ$PP)TPQU;q{P zgj3ACuOHcgq4LA$_jLB>*H7Q+(Jq=&pPo-IX329vu`pO0Ef<#z7>QV@L5V{MG1v1c zlu{-0iSs$;vuKKO1xcqQIMKKlFPSKqME75@s0ZK*V$lQ)aXIoKP=s@sUJx)$PHx>) zL84`pAP{U2(d9e*+|Qo?7;gGVNWZQ?7r!yE>Ysmt4Y&}8c%d)9eu7~{ED1bFV{(vC zDe7supjhB4O)mh5R`f`xG4r?uLe#pK!r_03JvK!e_dt^6f+TuT+J*}e;98MSLJbb3 z)@Wg^AK&pA(#I%96W2e7^!Ew={W8hK^u?F>Mg_r>fngvSF!uNn!EEgz&BDijb@3mb z7F~qq@86!kck99J>vyhSzJ24;?HiZHa`@-3UOIi{;wixF{F!6ayLjU8siTKr%a~-e z9RB_h9w!?g+C4tFYpj3AVBglhEuFoaTDP?~ZfU9OX|C<8uWYU?t}n^2FG|#;VkI$O zDg+Y=s3)MW|Tjed*HXNLDtxp{vwdY(+@(&_9P4P?`(t!lLmwhYo4ELwwAZ?YP# zCbP?I^;qqGneQB)Tpy4CM$)77%Z+hMu*I7i^c3#%mK^jHA9R*Xx=P?Ab_9yHdSV^!KvN{qSyZ+o zSv(LZ9Pktkdy2>G$w5m37#npYcbU9(?OR6vPygrtYxj=bZCf_)9NAmb-kc~YK7Rh( z%CpxtZ@$`;uqS)W`F)zm4r8>>UpAr()P~Dz{>T60|1^AfX!OWv?WU&f!+T$T|K-lF z%Ci-k!)<|zu|VaFr|ht+c%RH%|C>7HEbR|99SSxd4>g_2Z@*aFb*XgAh0<*o3OAok zZaSOjIumM|ag>ki61$bbO?j@yTuVicu_#9$%h85%)ShgmGgA(dS%1ql{+6T9AnAlN zQ`1&2*~-iuMMkzfBP$R3EnO<8`!N&DgNHL^WSKLwt(iIYoIGEyB9NzwDD?@IsZeDp z(>SX1o;qWo(GqHQ#yb6l+ajgl)?y5m+=T7l(aEi91_1GnJG@SPNY)$@X9sQCxe z3xWxQ8+-Q(Bt!g+p#{Nvp#+2&U{XDu5>|{sCBca$<={d-%K+n;=mi>aPZ6(qPb(`@ z<+qPyw#2ehFlVq|AHRMSGvhy`O&A5p0lKIJ>ORt0TEPAtZgXG{gNjSs^|*$y#L(iH z#WkW541)80@UmAQ$J1~JgT#f)WyxlXu3SX6e>2+~~czZbeCz0=;cs=rbw6F+V zChbS_pMRv^7~U5DMEI!rGnal}A3nT$|NeJrr_GlypTBtV3=*SdPo6$`^!U-khpWqv z9o!Ps$#7>*nZeF{@J8fROeC{gG_&9sw?5U&tFd1}g zhGyYUAD}fp4vf*pE+Ec#%7RFF zB3Kmh6$D%fuRZRzMr>xu`uo%ba1mJz#hE1Ht&=nKRpW4wY0jIRXijJ53y`Sg)LzX)i|S@T!|gN6z;i0-qJB&#hAZxG*CVqE*%XQ55-DHA|)fC zlKuX&1D=vechQ7BK4eRd`HClfMI(-AcR|(W!O5e0_DvR6SF~>H%C9W#*tUKDk&}hh z&3Z?^%35rWZ80WxX(Kx<$=&w&7H7Pss;y=3!GWTNA{gFyMNv&h`-MAqtJ=5f+(imo zv8!N*zwD5w^sp^|Btuszv)1@3$Afj#k;Y@;+UY>)n744Zt6;0WV2ihWPqgtsqWyTh z?PR$5n6GZyRkhz$K5EJD(*`=_&bnM{dA2b>TOZ5TM6%SuY!z&oCqwS|O=kN|X35Ak zXXY3QW;w82G(wh{EzimpL8fAT_cB$c*j+j^Lz|hY&&(p2Wr+>U$eF3aGEH1=NGdEv zDqE@6S!MP$+QOaAc(*IjBA>aA3kwv=Hxj7*vZpJPM+c} zL^!asmoHzsK@N;}Q2_%8SL?P;dRljFszgX{U6Kn#Oj z6SM=Rpv9F(ORF@Io#(Q1Kx;ug6w5y04WI>aAvm(Kvy4q(%UYB}^E@j3mG# zp$Hgb`;|@>whV{wAko3d$y~noopENoi8P6r?W~ zBJPL)pn(L&Xh;lLVtOH&^YN}YGo7DqNBFZp;n@BK=Z1iBNN15I`WTUnSK%Lo#Xl_R z$2VHnS!}kskz@q3m(L*p?8Wn^VAvCAZ54VfRuEoUoLgR)U7EeWh`)mS>1{S2+_`!8 z=JngxufmqyxO(y0mGhS`oVjrJ7rp3%m(ZCiH?yS&LnVNL(=!NKvvZ9Th+Dw_@VV6NJlDcAod z)1u5$7?lR6%IMBkm@@z~g(X+*kn6l)l|tu-(^BYy3LO|G0n950z;pqPJz)uzJHri* zNQ*Pt>5g?f5tFM zGEmg-h%`k@n~LjOTDEqdzHvUky0o^VE1aryM9P%*lrh+B&EIW|?KVXFtce|#aBERr zcQ}=wEKig)mX|lzl+;(pN{dSC>q_dIoYA5@bHp0mGhIfmCM#Q=lcUbgR%K_?RxjCE%B)O< zC`p;WDKj(F@MOP{^cetIL8iW0#!T3<97krZJ2TIltqIF?@jQLL+*qi#RcM{ndUvhS zU1#w%n4A^PK>6OWBU4At%$zuL_&5M|_VB5*)P*Q!b1=OwUcY|j=IxvJX4!#(Sd1=q zU~I*hNqmay`H;EAHAEd=HkXr831~fj3Rb~jJ*0^n02TQ*APN`awIHS!E@5;b27yr0 z2-Y&p88DWH6Ay9CF4Jb4sKK>d!;*3+f9c`;0?@T8N|0=IacO0KacOoLf4Zc*0NBDj z0x;~s;sUM2@fOBQY{V=vOrjc5>Q#DWaX#ddDJ8`cs8ECabx^&1_d4yvV80~cEX3Rb zu^3ky1Ev=aIY$bJQqU(t6pH{Rz{dVe?88EQ`uy=daDsrL#rQ$Yhg>6|MF3--F~Imq z=bt|St#n5sE|jj7D1w_Q0vvKq`mQRN2YT@gNw!&t{{q$eI*NSAIRao`;J_r(@NJs! z*SL=(zzZSf*F`BEGK!Fln9#EB&lnzj$Z4E|04?yVa2nU(6v}n9q&=2&_TTCSS5W>- zEP)8g$7t^2@xznp-o=Sw9x5YSHn@u>ee`XECj-oO z^>l9UY}wM<*x69iR$I|hS<+Bi0Fsp_LPcSJLBK=LN4xFml|HOSA8qWSaqBfsUD}Y@ z)Jl{@HR@*6lC*le&S=#cEqb%nXa~uhHg7nTC@ic9hEx7>&w@Fl33ZlSl>?G% zy>hKjq4g_?XFimu$R_PikgH(K5*c>oPXvmmAe!Zv+Nt-JIpRe-$A>S>T`Ov?_7{~|L&Z8z zsWH&xO6@c!2aJ&cQ)IUzvC|x=uj|@r^}7A>KwW#&&Y^+Eu8w4Bi9Z=Bs;!EZRmsgE zQ?S)jJnk+zqz`P*&=fn8eSz{xZ^^LA)s&--6_mEkKYCMG(XeILSYc(S+8mQxN^J3+ z@rGm3`XkZCW3k4guHsQ|**@5{VD*%%Y}8t~+Z5|jdRvt4CXKIIu)kg zmfVx04$8Dqg}y*#DpHe*b(S)nwGi)l|J0eOqh}8v2f)aLO`SLeHzuvYar)w=3s-Mk zxq0XA+#*{UiD79ht&7QoKuRF|h#JC=xRCghB(;w>iBqWOLn)K_x3KgO#%p=y5$GjJSh3aF`K9}d^Te=~r3Xt393!~5 zF!zr)FP;*d1hlw2kxNuEy1*oq8~{Zi6G{*Wr8HBKYj6r_d?;pTynFv9ZQ#X`8iTDFQf_Z~G zwG`kEF2(%Pj0C!y3oJ>=EKcBhz66yUS;9zwBuJn{4kvI8r%9PyLzU|Uk_3icafW!u-JwOiM& z-ne|}+U0ZHwRrLDiE}4spi@T=fn>a^3s3q0#wJGxCP(@w26vAS^o{M=vA1{go~_+| z-5tH1ty^0gy6P+2s!Llci<`=e>q}Bq1@Y2YC>8Xk05i8E?zBZfGK;}u)VK|5m!9S> z@>0TtG_}eBE2ct8lNfDUokM4^>y37UnI_^}-SA{~8Y=TUJzJb>mN(b8ZR_go-?DqOt9Nfr%a-O%eO7NQM`g~G)8q~SEJtYry<}<^a7ElA z6Xs*(X*_bZQ=#>!jRCDWWOPKWo|MC1>IjrOLlv%YwJTEZj=>ML*&}U^SeKLLDQtHZ z?4m{73r8IJqt4X0yXc^&csf`y1Ak^qZn4A~8vFJPpE?$dDS{SRWuiLtFXKhncAQp)hMz{9w2qX)YCIGC(T{!H> zAC_4f^Q_gL!ri{&5uL9+Qxj?5viHW^(wQ4KI<{`Pc=L8aMa|OF*Lga>+EME(98T06 zN!A~Cr-m~Pbqaf{w`3wxGZU_z3D-^etH#}>!;Zp!Q=(TDY?ry}a&2WiEjspHHGm9pGWMqm#vMfzz zwqA^r88foYS$U3Jr8iF#R_dZELmbjr3Ut$ zOSSy+aLTbYINT3EV2w{U-+ zpao)qTY#1XFz6p_zjz-@sSA-E7@vYRl8j?!5?3OSgnB*;rv(QFA%P(W!hv3>M+|{C zY_=epGa^<1;Tq5g0=Jl6e@Tprfnm5wK>!$$X+u9GJ=e_U>^-p!lK8}|;!0e_LJhM` zaE_prUe4+>(tc+k;pWb`VnpE*E^!Dva0{FXp(%zIB-tzm6-q!$;uZozmk0nb-h>4W zvN%SA5?Yu>dCc> zfL{tqU<|)&Y28JX{5;vSCy!q|di3n!L)Mdrt82?k;*tNw#f3R&e(u5C?0sPD{+-*f zW%q90xP9ZY=v};U{mS{P7fxL{fAYfVqi0VXhIqz@1hd1Fqtg?^Q?%da0Pj*Zv~wE_ z*}&GW-97ES9Zg$W>NYpm^XAcwWks}kbTU>N2^Ix?1zuOe?TET;A-gGPGy2SWkPHlS z>EXc0kXcmnwVWNvk$$)Fy+`Zn1jJwt&eJG+IJN zYs6#^n;o=FzRRB?jy5VI2%762?qX_u*;0GLW2P#Z$< zUMfQXB>*N<+U078Ty4)&+43}Yh0dii`gGQ?*_p6;3myIvN1)6Rta62F+|fpNtl1uI zcg8k3qdm^p7JGcVBe~0!8givZy`}s8Ws{zwVQ)!)xEeNSm%n_QyJ&~IbiiA_&s%=L zS267=IcQIg+T%m+{JqvdTfDqs@W4n<-=_SM{G!U@{E}38ZN=l)Yuo#GI)Vw6Ic^Si zxbpWpVtX>xWm-?Or?B6d=$Bioq9rXaKYtxRa-gxhwYH_Uv7@QHzUJ5e@ZU-sTGf^U zN2n)SJ`t}xr1$jvrYe&eYkb9HvDzci+N06BBca+u!I}g9stH&5h`F%OnB1lcwCA}S zb1l_5rt)ksa>Y^66V&y|(u%$C`*a!q1Ie064y5)z|g{4kk}CVBv7 zSz;IIEL|pmmurzJ-FfsFSwv|FLokR2M{LWkk%LE0PaPo#Hht{m;S;Cfz`!tG&le8t z+?A`BuHWK~m>C9ugajdpOdK;pqy!{Gh$Xsk{`$2vO+zwa0N4WgBr;X}Ld+*zg_4_s zm`of%9Pla5yuYx_H8}jYWCU<#K;6O$N?0z6g%)wSpc+_pcYYT1Vt`2uOE2aNVgX?6 zy&#&+u}&=J4FV<>*GQ)%I5EIDK#eHhe0rB&p@S=>E<_vxNT1%ON5Ve7p-r4coVHvH zu+P8K*}v@9`}dy^d>{hh-UNWrtx5n4Vk`DtJP-zqq5LQ?h5&%U9gU&I45Rw>iSm5+ zXL?Ec@|luxmW3ECAQQ~Ow|unEhf=+i$^DrS;|e7E`GttZa}E*wja~${uV3-DaSO)V zkeGxR0y&s52&5W*!<>VXPf3|v$!EC+l4>{;B_n|kxdsWSVdQXtdI==yc7Tc>UpMjt z{s|Ca6d{3=`OWZEWT#L`rzxM@)}Mc%AvR%rp#(6V0K%`uI7GlD1Xf8-4h?eWBjR6w z(5W=W);|{hZo$867&5kH{5;v~XU|?eefk_2d-Uk(+QX-!gHfz~v$8&Gcb>+H=N`=8 zzc+j5_S}8w)}5PIh-B9;+`Mw`%7v2`&mOyU_V`7fyLf#1%!z3t+2P4!Q{%@#vi&1d z6T@P^&4J0`J>&g5M*Fr7^==;6x@phmuI=s3z}TjSnhxHm3?wVcugs5?#6m^kU_ro_ z^m(E#N7!!hi;c=$I<>ts{cWSRavQus;ZQi`6ZQGWT+OndGqSC68cwxM>x_s)y(OqNvto|acqb5+; z?@JBJ%}xKEyh!6{idOB9)l9`}XQDMzp~{IsiUz&r7nZr_5b@kR{uHTGacOxC z00XW7Ezs+4y@=$%*lCef67+&##Q-+$A^iVWGLt|fHdSarg3~&{(p`(F$034^F_jGzUZ9-f!@84?Wp1j6AK_JLT% z_cAVV$R#6(3G_9+o;}D!&I~o8^4~fe`GGUEPs=b0@}=w7K}ehs17Iitr|%m!eFm{m z18CtazhSmwL^4|cH*K46>z4w$Ws6e64A;=B2yrG#By3FnU$?;d{PS{adYeMb_U5s`ypV0t4(PUP9y}2Ecy(f-R$ef3E*SCd3Tm z7T9<(#?TtQ%sRkCBYzF5{rdCgk6+)RpTFn_VeyZQ-yQ$d{F`Eofn%>PoMDOCt!tCPgy$5%0KDc}H?ybvrZeHRIqd~H37f)ZmbmsE;6Bo`L zId|&txs%gpjvwLx$3(VJTux*BWR z>ndr@s`BF6;=;;;WLY9s91Rx+{7H{H>ad4t^+np-g~rJYVy=gVrYr(uR+_b_wWuMT zNu@EUH5#Q_k*Ad9s$?>?Os36K=oM;{ik>=i>Ww}v$*VSaRR)wkh1Qj$#0}I6dO>on z6AS~8z%7N|uQY^!E=Xwz;so8ZFx$YLhaJ%eI{Gf z>P*@KC5~XJD_ri5R5-(x?nsS0+~A5d*&=PuShq8}-5K5Ci0lXy4h2ic1Lc#RvIBwY z8GrQ=U)51p$stGKerM4EXW=17!H6l;Yzr3zQn4eKrXD=GQr4KPXs8Gz6Bc(^ruQ5D z4eo;7&cuM++9|WN+Ty!hg?r86PNk)wyKf*~ln=Ys&|d%F|BwIu(KE-Y8*8f?8ydQL z0tGc1XQ?N-#Tnm`XROIkmADeU(TaV6;z3(A5uvV#@wHj};Eq|N4V!&TB?yK7G zs@Uf)+vhAAwIv74(H&ZUyT;p~v{&YtOJv4^Tx}vp6VFx0a#W!#g(ox5ktws$;9{OJ zBS)K=3u%7KQD%@o)Bh$T(exRWOQxX-GLQns*A$8s){h=MF$o8D?98F#rw$%JdGPp& z!zV~^U^6FAp1FAC(zTmcZ{E3me~zAF7QJvw>rRV_1va2$KCvWLK~g;@qvo$us9Xla zNIY+Td3EgpoX|R=AjTLjLCKO%A-*@i1co7CfN{W=ItE8r^~!h6jwF3l~{Y{U75 zrS!DJ#pT(#g;}%!FpCNL_vYuI*`)W!2f)L_V89YedZ<}E+Kft2 z3N?I+ImhTiz@Wk@95SvrU}ABMk^?|XVw=P;;lQZ>5aJme#41`4PgMT?7BOmoF=iMC z1hx;NhfqA+itpA8Fdhc``so81FVwHIicv>A6NlWb^cRo>fp934o=N}p3!UP#e2Q;> z2soc(ZWA%iGB7v+(4q~=;H%cB(L;zO@5LD703v7h{rk^#8bQ>EAc1r*hHy{k8k7*{ zAX$o~dTxXdA?Xr`>$#NbafrtGB~UUXzy`_d@N@}!1GohGgCN8)K*#<`JfrppH%p`u z@0r^NewZ{U8DL0HQ;Yfz>7R(wyhI6TG0FH{p$2b~;&pUU=6Zv8pKQhWEb{pW;aBH( zg3Be0;kU*!KHj`}_4@To?p*}Nz%Uli_yEZWX)DWX%S$VZbE`}9%VHM(?EM?i{X18I zu{$>|-?@J2*0qZ_ubjVr>Fm`Dr!SoY$!NioYJ2A9-eD5yaIeK8n=3QI6cJ_2^?`qlH*3jKj-(FkYQdQAZQC3${RF$7BkH?C_ zp~6rg>2pP0HnH>~c``9;kwhdTm}zWkz)WM-Y7H8VPOVWZHL_eq4voRkFifsYlb2`6 zlbdLrUs^Zcqc+f{ElRCJp|Q&~_B^dKPv=zV-D;ChYYyTbsxgN(W?I(@0HaxmTCZI1 zk%>*2Q8L45M!s0BDoH?MeKzQcj zv8%J^^DC0hV9;O(S)*E4r9HXBUN~%x^=BEH)UGaja<4NrXbN>It*OmB`+xrHXKh1G z@1E`NzW#ps=9T)^=922_&Aa;JrHv*}g*(2<7T&Bd*UHVc(TYJ|L9fD6nyU}xXx#Qd zfx_g;R5^1EF}1tiQ#=r;KHw|^#tsClrvjDx!_^bsvO#-lhauLj@HWXERe82bg}qAS zs*_vGGj;Jynus6DR(rA(j!d~#?4_yCAckr1(fuaVWy%fsS|C%q@bS|8Px{gTzZ1Etnb zE<8*dGF0N!UvLs@5ArD%*RwrJXM!|hAZif~jHhyl`G=_I?miN83nouMh+80B2~dGv zpcE&goLySEkFSChFT*bifFTnkTY~P-FEGF$I6t84!R-8;Sn&`w2o{#m8lW{#T3EP? za&h6_!or=o*|YdJXHljZ_V)GX zcW+6*zxjmAK|WFQ>D})i!7wr0_4NaY_4}9izav2T1MmJx3e zNso4|1B}*5+5jy`;u$$JLsK<}|5>b0`qKb0`5VDgMS>L;})8f1Sh@$8#v%1g{);>vU5FRux3uw)-x&1$$Coc(KYaT9{^Q5r z`8y3y`rr;mev*u*FFt#;1~JcI$d>U3wRj(zo4s@Y-p#ptw`mss-J1{Y+_(vhUAuVg z^7*S5&tAPm6Bo~)IezBkk<%w;P98aQ{P5)Qsfn3``*`}|fqjDq#`f}>Rl|FF2m7`% z$#(Q~^mesxZExAsRNqlw+ge@GR9;$JoT@Iw9XnbQ4Hg7EJa-W!^IP=rWFDi=ZPf8( zMTd?InMtEEXw*8jN~2UNZkQMG;SzY?Z{P;w}1~bSo|hi007IB zsk7iMvLSVLu8v5iAd;!H4xI_MEMj%!J3Ym2U$Hk(?)H^?167`2tvA#_Jd3p2qFvT# zk1KzNuc+T!G~_89^A#WP6i+%zM(u@z)`G3(czt1gOL=3H$raStBJfXUf154d3wqfL z#|(jOnYublWTzv4#F`v3N49C~l_k~fYtNocA3NN=z5CFygF6Ry#S0534(M|r;<~&18W^lM7;WO8-y!`zB!tJXkFI)Lzza%J0>Ld$i#mYyJ*xur0?{mSZl;HPPI~EH#lV zQ|ZgdGyj&S|1D4ZA2Q8<~U#*okxJ&R)KH@%qi{ckkbNK+E`&zgbq`=SfH0E*ZIT&^9cfYq)JX;JH=q5 z90VZK((2L*Ij}{1g@X+e&Wtg}l)@ngT(XeBLM08G!Cfsti?d=KLpl@zJ%&sx94^ih znE)^X6^MnB0S4W{k2bdeJ(yoaBfuCgygxU8cXn=eVR4SAwn(!OnMtpoKLKwzW{e?b zN^KPC`4r;{VtPr?LJiWSdZrfxjB`+mIf|ecq3g?f0EUT7u!r>NomeSRT>BNlr*~gy zpD+;sY#(WLLEY{vcMtS&G{_X@E3NJIF(NL zM2lC^qg`L9BN1m=oGf9Cro%z>*fQ<0!W%<_Rn%?xb6toja~)mWGB?YwhjJtW-i0 zz)-^ggZ}G3|AjVC&7wJt>+qAr7qajU>7)4h<=gj9U%!2%K>TR<n^63!yn$WZ*Uh#wzqHFz>ckZwr%e1?%3MVvbDW&b8CH9V|80?d1F~oeMzdO zFj0|=6otJ>pCj(E#oX4A)8e-oy%wX}NE?+A!?bFPPHobvOggner%@>tc{0#TmYpff z{7sgXNoyd{w1RA9Rt_+umC20?8pm=f^)98}4Jiy>KucqdYHe|iHKMjel*WM47!(gO z`%%htG^Jjl_t3l#g{7jV(-SDjftirgt}eN91Inx%Ev+UjR%3!K%gxow;r~>2t=4TY z1+Dg&%U$617CL;z$bX;5008=8CmD;#-`FU5@x( zcWT5{HsmTDbeBPUe3jchsZLw8%@ppmkZuh#~s+u}C^^ffB+}5>i&(_9{<~#HA50)Pm*R0cmId~?c9_3+D$cWI~x9%|Ihzp*T`;PyfjlCGWpvAr9i7HVC*0NhoE4*xt$5H7-LCYs=Gp7>thKqOid;i!j;<(M9m`TWf6FrfV87)F z`=v7Hs;zliSFXm1kDYhbaRduT51k}{9Rb7Oy-poGc4AsMFaQkYiSy^rUWNC+bN&7- zZ3DLQkToZuB_0+g0Z8P@$btPeUxWB07$(t+5C08s%QT&RW%cpWG7W&i6;bEj5)9cI z4OWpqTLryvNL_rWp-L)Ywm4n@)hJ%!Ucq@@i#L4;M9t4Hz+)i<*yd*!7vaFbEut4- z23*bKOX32YCD=^mJe|e0XoSrf0vz6-olnm~WHK>$P=ZekCj^o>jdR#tp#)u+TYSh@ zaSZ~niY*t{AekA)Q|eKV96pOvTq78k1|A=xp4Xj%aL7{`*Oi`d4}B8T7nx*SGTT1C zqs50H>RJ@StqRmZz+{p*wDFJw)DV!?&$7J(kcdfNzfy0ZU=`zy8N))1N{ZK$K{8y< zJOjXZ$_ePjHGBy(fLq{zc_7u`=F2e)F6lce#6Mm&@yGYS=tV$U7Y?}{KFbOG5`2n5 z_5CLqAOsRl03O635ScI$b0z}D8yW{xP;yiJa=-?YhOzM%mV{^G%Q@Z{aLb&@jcgP% z3<1h@O8xrJfBx&g{`H^#6muYP5zPu&Pv%Sxq#72u_5H_ZFpM^=TK{D58{}U!|8J2< z2Ju9E_GD`hmmpeYdv)>A%HrDc0S1sIE9! zor;ykgC)^GD(p)H+)r8r`PODYQmAN^2*;%<+8M&Dm zvdm1{F@#r+$jnq_12#GO9Ga0~$lcOb(GouCaby|*^$4^K{N9ETt$1pFn3A6Gd1AK zA9fdvISR&YseSh1eU{{4o~1?S>2eed*in-jhYxec`wXtCV6w8frs~q2t9MuKw{7j& zIXqHa+vH1DT0_;=NSi6xu68%5+_iddb)L~1EiQQe{?YgUdfU3C+Mn;tuL_;HIXN=5 zyLHQEncgqc<+}@ZI#YX;u9gf{QI@gXUD_Y6n+VlU`s?-wYA1cQ2YfXLJyi$16=U|o zJ%;cWwWmwzY*ScU6y~}-Ls7QMn~`VAkn6LQrW}<;rm^K|9CDqDz7Pn2sm=aGX~X#8 z)B9)Oy~ut|9yxaK$k9VbkFo=!hrlkv=3l>j`)+z4OF^$$5Q|5-9@3)kymXTw89?yd^UK#1WaUu zRXn~0rQx&=FvMscB@R)^F^ikx*6_wS=9gyPP`qxu_;OqYVnMJ_D7lim1aS%_@l4=~ zn?=AV;*z@%5l}21BZCA1McV?Rd=}#O!xusb2w*?(^Wx3pXQUq!Z{TmgMEtJtp8*Ve zC-#iyk__34XS8AT(=}c`_{l@kjrVhTPmc4%UlNyfXn0A{0mc8u=s9oh*`*4@|B zv13!~wvHxvvd#ut=A)&$tf9QHsvusTh!jTx1wn7z=L)-Q5jS9F^;v1_OsC0U1+alW*Udu=qV_vYiQZh+_Am6eS1}HXDC*tH~C~rYj&P7E7w4C?MPyM z_bgRrwmKtQ1%D=!8B{7844Ia;n(>&;L7Ow~^rc*ZQg?{f7xqS~+@UJ)%pPfUMq3@x z4qK$tp4jXv*y%|PdQ$sb`4jf!q%}EdDcGkA@60yV8~k04{5_zTwO|~jGc{_9^x6XT zfkf%8h1u0tPm62o6D1AqP=z&A=Sp;0BRvLxr`p+I@HJ_jg&K!FQtGeoDz0it29maT zu|HDi&M)^?H7E0{qRwbIN8|Jq_BaZ*%Pdt{$^!VdV8uwJdOTP;>M0&@rgk}s_P9!i zTxBEfvQc;Gh&?rE%O9}C`;GoyovTxAtI5>_GxE$?3S*YaoTIVkYHTts4?w!verYU$ zwk^B%O`q6*_~ib>px1E%*wJHC$Bs=OKMwl^fStX3`P}vEm+#!Udhgzyg~fYIE9(Fg z9&7a>tva|u%MZeh0cp#RXqpC_Fu)16MmhwyXy9tSjGF0rhfG(a7!X=;j_?}RNn-ogio)}sX0=`=z##zLCBZD{@^-@V! ziN~lJIW%zfl?)a#At{qD$88-kF8L-lFhlY$0X&GV60Bu_;SiP5RS&{1O{q zm)ob85EMisQkxt@h*1McbK?0G(LOF`>L8Gag%}XRAqQv)5*&n2q(vQ3FI@=no8d|X zsG;{JemWN38%pZrT%WRt06!OEl=z(jWB5HnU>NlF&5Jj$pTBtim`L_$_37FQN(dNx zxI7Pu)v6vWf@BZwl0@&~y_;9>T)%wt%DL;8&hVBlAX$1>mkp0arynLeFm`Z!hBYvH_L_>O^5WW}{K|q@Su#=>@h1cB zgx@7RnKfXy`Ya}w*=RHB&A^!6V9*+L8oqbcwsiD1xA&G;w?`7? zHdj=xw#gJ`-ZMHYR|{q4s33SUnM|+9Go~dssZ>_lNZJ}SJ7acl%IPl#%v^yoSFqd_ zs&s{F-H}Fz*kQ{Z+hPy*I->oK*oZYwBVH=^rW{kX!PjO9Z#GB!%*lRB!Js`g;z*3R zV|{^SS5@ndrk*}WxXcx)cSc&>`P;pz-84?-?Nm9Mt>I3kHGcNi<-2QFPhOdHhV-e5 z=;mF`RZaPxh(tqS!{-mGEH-yRn%a`zuLDPqAKC!0<7dyFzI5rrjaygl+`BP5cW-I={_-m5MG}u{(Uv8v zs}GhIXzfAKdC22oIE4~?f)KEnVLS%LV`+%tdw2{CnqNqBh!Hgh_${r93GQ%d#ISU| zNML{=U|jvL6DU|%VEe^_t%7Fp-4CyV3q|HE?AP2p=tcI6wD@3d{@#PR`@*QP_o85K zeHJ3K3VQYIF=Gj08gb0rdiyesx_7T$ynik1*K6dY$GuSb;SKdA@`ZHj^-I)n0s`O) z!KZiB^@qw&G<^fydh_w^YnGVAAu8X#M#-%D^8Rh8 zw|fXNYQBkg2ywG$N_t%`Ip7w!Oq-!~N^!FU7{ZtUk8pvE9EK1s;ija3PvH;^;H~i- zNVJFZd?Ca}4FTQ&*WeOdAYKC5{Exdg)9(a70)MdlD%3jJS{l^E{}B8(VajO(y!UV3 zzIplT<?b+jp&mXTnez^Q_d0}mJ5g1#Ve*ls#&_eik7Vh7kgCV

CJ5m~(E8i;Ep!!;_BKijwt}?iktjiCsS2B_B8D|LHLxj$No=9OjAX5iZS75s zO?BXjUEoPMO--=MaHT(6fZk?v*bt(jDwb1}Qd(^I0HfW^tmzoOP;VrsoK?m%Z3;gQ zIlBW)Lx=>GBU6q_VN4048bR75qD>3{80Q>jilB8Ws_e3sHq9WFvr44^Mw!ShW0U_W z!XLrJI1Yk|!`a}W>9BH$1glV8fC_*KS{R3Cm(lBmGkRtlq3HDlLI4GGR;|L|~gDSVXUwSd@tjQ&990^HfqLICMIp5tYF> zBBmTlZDMT7hWp8}{)-+z>>V8x!|VsRd<2c?LeMT0ji6Ud<MeL;0#AEXfpCf{4W_5m$9<->)IrCeHsD!NZVE zqL(z5WEPR2x3no)sWe~Xe{{kXPvWc)niZDR{;-otlR-4UgSb?YxFvIzd_k0h$5fO! z6c`4p*o#joM`^@W5r1f~Z`@XwCz&`cM4-YX!c^KIo-~>Bb)3&Az5pg6Wfxyv-1BBq z^0m<>pF2KZ8+{E%2mH=0Cl=_Egu)DCZ2CarU%2I0rDXj*HuN|6IvPI&T{x6|J>Ak? zwh)w?-Fo%16EX!8t}u8bO%@E8StA6yU-rJV@xwQ^f>eaD*FJ>E(J6%}2{Ic(GzDf1 zqZEOZ5E0IO1qB#NrHNa?i8R*#*VegkwUHxXbpG>T%p3DI*kIlp2w`?J=gjZi`_+|1 zC%ZnCN_DAPwxQAWrDktEVt}BSB*iN zNUOmxyvft^#<0a%39rercyWa}F({cv0FChMLMF3?We`PgP4re27`!^pYQm%AoSLeK z>WT+I0%inX07Gvbv~}}(H>Z!BuIei_u&tcs+MDkm%=h+ZJG=O@gWa44OETxTa)*>A z+LT-s05p<0iw7rwX^fRz-R{qek60Wj!Q3=6;@gk*Ageb#Y6udcwzU>0a30g0HQ ziM>7^AH10T`@_9U@G)wv7fvI_(=<#hS!0F*VuXe-&r_Eh_5li_6R63$^jf;m3QY`)vP@%(a*ZBJlaKZ?{((3LOk<@O8 z>^)7^t9C~&#nWbW!;X*0HAt2fflEA=uFzhnuAAkCfaE%wjJ@1Zk`0VqFE7aq&SfGo zH$rKA!WYs|TRH7T9m#yf>*|7lCa5;P{zV0z%>vlhQh2NsSe9)7Ffdly>hz2v{!xs~ zI)!M*cwi&C2GydyP+;e=gOlUKPA`ob>VXirB9CX2JORm3=4R=wFQs*Ou-M-}KGOTY|~}E@E^@Y`5u|H&|DuP^0KYLIEtnC%g1D zCIpE;0#3jKXwXq$;ICTaFx1%3cZzGpN(5qKCrXqZe~vXQbzjGSKL7g1t8mp@!z;oR zK*FY!Pyi;Pgp(f2E9{;ZKP6dW_JUp|%6ZqA^rB~E7G&b}Lu;P!vv)2U@pPCV-g4Q4P7A&(Pcysb3l@T=*>FD-?xdVOh=fkm%x{jwU8OpFnrx7^FgK<5>k z*xKB`+}+{-b$?G28Q=u26k%?f!CNq`A$Zvk7rJVZAtX~#$t_6+dom5!FL=TK;0Mx# zH&I&GP)dv$OfwJns4i*>W|3dTs`cuAwZaF1MX$}x_2YVde{*wtb#=E~5^S!o@5_@^5y zvDNfe^)oejK6;GCotw9yb|?gQ&`kJRhH@Np`1Cd;r#G-tZMLg1`S$!#$XxfU;nwisg{t$!uhY zN{#+Gu@v_F$necr%u`TiKL%37Zu8ViG@hc*w&~rJ2YReMOVJC<2o6yDnJT@nXS`E) zaq0hf#?cSHzvXNiYd}$G!LTrGOG~t2(%!U=#pNTK#KMPV8yWGcFm_S?C5lnb5k8fvPus*gp*Vwzy`pe0<9Le z)+~xYJv=zUrgzxd*$J+oMpj|Kjd~225gZ)0OCSm!Je~6tVhOqsj{?DFtPNseQ_ivD zw6#E$)O^0TGe6j#?Ue;=*q^g4Dly6mb+rodf6d850&pd|24hA>#u%H#QgeUze!r1n z-yiceG76sVR`xcEWmuF`O&HQjMhk={sEhE5jEkYb;yb-CslzS=_}Jte7@mQE0?lIJ zBw!pkECX7$YGK%~Mh#DwL8|&Bqj$KO2HF^j9RAqRAl9ey7_1$O8I?@p9mIbNXv)x^ zaWEaWVZHXnk8%7zfTutOZ-h<8{SE+8R6bgVdW_CZK z4zU3+#%N3i41f(Vh#b7cMP&jozu}9aX3$Kw`i=}L&h4##BC7JF4S_aUiD<(U=Uw36 z8(LsYP3uL6l@F7Ag$BGwK{fKeRBTWuo4F{q1G!{`T$J z_&tXi2SYRZ$=bp?HaM0rVy!<>%X5GkU>pWcA;$ZWZZcswgcpHkGDzbOr|KovV3;)0 zeq)km6ZIr9Vt04b41Vm0XD_&=fv(bC>ztfghhPn0o6Y0hT}=SOumDVG8LVzDji(;F zT`i-x*z5WlJ_)ejpargs$>ULDtBVV;ht3<^a@r7L;SCzwN_aU>2!{x2MltfMW(u=n z9_ZDjG}>K~K@kk2SdZ0Y;Awt8_m!mRYG17G{eT}$w&5KVf*FEpYV@j8Ss4^+ydVhhdJocTj2+YvW23i` zG=tFzp8SY^Yo*@j(n}^rUd)k~QAvOqkW`!z4}i7$ewq#MzLViT0E^YAipM0-@FPjR z&zR1$_`6W#7ok8-ho9)u?31@ZSC}{q_G;*7$d(FD9yWBO01zA@d^@CeuoZm}Z)FtaxSrUJ{%aDp5U92*`p|MytJ$a@&4tkxf9@(?-o#Gg#o z!H)&>*qAdEU06##f~(pzPZFvTIO{0DB$mO5X>$HhdPRO+Ua}V=Y)UKx z4dEr&65~sLA*YI70hmh%v0y9!JHJ3yd8^5M>FWe;^{K^Lz`?(>Kr33RuN$O}JP)X) z-eMO#+)|A#Y6_7`ITW3AeB?Es09a-b>95~2g#sW%y)*(*#3Ick8Q4G%K!S`6GfA)) zId!yO=E*QbSlwGI3QTSpK(a3dh8io`q+r764I7{WHwG3M%bQ!QbT22U%HAfC=NVqgYilOF6uGJV@b zfxS7A_}J7Nt@e|GTD3vYDAnnO)n*DlUY}7~{>l0I(LY@n_C5F9ivr`X`rFeKgeAg? zMs>xI)L@JP0IAnB5$2GAAL9tEG-c+n2$#wlP^d|3c4>PN4;oqHrmb!gVtim($ehtCDiZC`cn%opEbdqPU8^>TN7IL-n9p$?9tc|3 zp7^UzsX1!9uN?|AjEvSc3t*1am`F%heNqn3vkW-pdF%UO(hJ4}GvC`P4_=Hv1k9g< z@6jKQ3)kW!2wX zqgQo4lvzAwpS2g=f-a>Po+oa1l5SH7W$S`j*3B4|;JE2H=QAy_nFiAL3Y;ph$lY&L8c5z-S zvy!l;4LuX41z Date: Sun, 27 Mar 2022 03:34:09 +0100 Subject: [PATCH 12/13] Updated the ReadMe file --- ReadMe.md | 43 ++++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/ReadMe.md b/ReadMe.md index 4dccf15..d078f4c 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -4,6 +4,8 @@ This driver and its source code and the accompanying Arduino Sketch are licensed under the [Tigra MIT license][license]. Essentially, anyone can do anything at all with this software, including commercially, without restriction. Anything you do is your responsibility and not the author's. +If you find my work useful, please consider [sponsoring me][sponsor]. + For further information, please visit the [Project Home Page][project] or the [Git Source Repository][source]. ## Project Description @@ -12,13 +14,13 @@ This project serves a dual purpose. It is a fully functional turnkey solution de To begin work on your own driver, we recommend forking this project on GitHub, building it on your own system and then striking out towards your new driver. -The project consists of a an ASCOM Switch driver, plus an Arduino sketch. The two parts of the project communicate via the USB interface, which acts as a virtual COM port. The module can be controlled via the ASCOM Switch interface from any planetarium or observatory automation software that supports the ASCOM `ISwitch` interface. Alternatively, the driver can be used directly from a PowerShell script or any Windows scripting engine that can load a COM object. +The project consists of a an ASCOM Switch driver, plus an Arduino sketch. The two parts of the project communicate via the USB interface, which acts as a virtual COM port. The module can be controlled via the ASCOM Switch interface from any planetarium or observatory automation software that supports the ASCOM `ISwitch` interface. Alternatively, the driver can be used directly from a PowerShell script or any Windows scripting engine that can load a COM object. -The serves as a base implementation that can be extended to build other drivers and to understand the operation of in-process (COM LocalServer) drivers. +This serves as a base implementation that can be extended to build other drivers and to understand the operation of out-of-process (COM LocalServer) drivers. ### Cautions and Limitations -We have tested the unit while switching 12 volt power supplies. The limitations on voltage and current will depend on the relay module used. Commonly available modules have relays rated for up to 10 Amps and up to 250 volts AC. However, switching mains voltages and/or high current loads can be hazardous. A simple mistake can result in destruction of equipment, fire, electrocution and death. **_Therefore we cannot endorse the use of this technology for switching high voltage or high current loads_**. We suggest using the module only to switch low voltage DC power where the consequences of a mistake are more manageable. The author has used this technique quite successfully to control 12v accessories for over 2 years at the time of writing. +We have tested the unit while switching 12 volt power supplies. The limitations on voltage and current will depend on the relay module used. Commonly available modules have relays rated for up to 10 Amps and up to 250 volts AC. However, switching mains voltages and/or high current loads can be hazardous. A simple mistake can result in destruction of equipment, fire, electrocution and death. **_Therefore we cannot endorse the use of this technology for switching high voltage or high current loads_**. We suggest using the module only to switch low voltage (less than 25 volts) and low current (less than 1 Amp) DC power where the consequences of a mistake are more manageable. If higher voltages and currents need to be switched, then the use of contactors and/or solid state relays (SSRs) should be investigated. The author has used this technique quite successfully to control 12v accessories for over 2 years at the time of writing. The project uses cheap, commonly available modules to create a computer controlled power switch. We used an Arduino UNO R3, available for as little as £5, and an 8-port relay module obtained from eBay, also costing around £5. The only other item required is a 10-way Dupont style Male-to-Female jumper cable to connect up the relay module. A 5 volt Arduino UNO should be capable of driving the relays directly from the USB power, but a 3.3 volt board would probably need additional level shifting buffers. @@ -28,12 +30,12 @@ You must accept personal responsibility if you choose to use this project. This ## Software Architecture -For developers, this project demonstrates some best practices for developing ASCOM in-process (COM LocalServer) drivers and can be used as a template project to create new drivers. The driver has been developed using modern object-oriented techniques. While this may take a little effort to understand initially, the techniques used can be very powerful and save you a lot of time in the long run, so it is worth persevering. You can always post questions to the [ASCOM-Talk Developers Group][ascom-dev] if you are stuck on any of the implementation details. People there are only too willing to help. +For developers, this project demonstrates some practices for developing ASCOM out-of-process (COM LocalServer) drivers and can be used as a template project to create new drivers. The driver has been developed using modern object-oriented techniques. While this may take a little effort to understand initially, the techniques used can be very powerful and save you a lot of time in the long run, so it is worth persevering. You can always post questions to the [ASCOM-Talk Developers Group][ascom-dev] if you are stuck on any of the implementation details. People there are only too willing to help. In particular: - **Reactive ASCOM** - the project demonstrates a transactional thread-safe approach to handling device communications, using the [Reactive Communications for ASCOM][rx-ascom] library. Command/Response sequencing and thread safety can be a real challenge to get right and there are many subtle pitfalls to be avoided. Using a transactional approach helps to ensure correct sequencing of commands and responses, while the Reactive Extensions for .NET ensure thread safety and provide an event-driven programming model. ASCOM drivers are essentially real-time systems and this model is a good fit for that. For information and learning resources on the [Reactive Communications for ASCOM][rx-ascom] library, please visit the [project home page][rx-ascom]. -- **WiX Installer** - demonstrates how to perform a declarative no-code install of an ASCOM LocalServer driver, without running any of the code being installed during the installation. Normally, registration must be performed by running the LocalServer application with the /register option. Our install does this declaratively by directly creating the required registry keys. Our installers use WiX - Windows Installer XML, which is free and open source (it was actually Microsoft's very first open source project, written by people on the Windows Installer team). +- **WiX Installer** - demonstrates how to perform a declarative no-code install of an ASCOM LocalServer driver, without running any of the code being installed during the installation. Normally, registration must be performed by running the LocalServer application with the `/register` option. Our install does this declaratively by directly creating the required registry keys. Our installers use WiX - Windows Installer XML, which is free and open source (it was actually Microsoft's very first open source project, written by people on the Windows Installer team). - **Aspect Oriented Programming** We use a product called PostSharp, which is an Aspect Oriented Programming framework and tool chain. PostSharp Essentials is free for a project with a relatively small number of classes, and most ASCOM drivers fit that description nicely. PostSharp allows us to factor out a lot of 'boilerplate' code and replace it with attributes. Some of the attributes you'll notice in this project are: - `[MustBeConnected]` used in the ASCOM Switch driver on methods that require that the comms channel is active. This is done in such a way that the check is only performed once in the case of nested calls. @@ -49,14 +51,11 @@ In particular: ## Installation -[Download »](https://bitbucket.org/tigra-astronomy/ta.arduinopowercontroller-ascom-switch-driver/downloads/) + -The installer can be downloaded from [BitBucket][download]. The installer has a minimal user interface but is fully functional. Upgrades can be installed 'on top of' existing versions and we expect that settings will be preserved in that situation. +The installer can be downloaded from [GitHub][download]. The installer has a minimal user interface but is fully functional. Upgrades can be installed 'on top of' existing versions and we expect that settings will be preserved in that situation. The installer has two versions, one for 32-bit (x86) computers and another for 64-bit (x64) computers. The installer checks that it is running on the right type of system and will not allow installation to proceed if it finds a mismatch. This allows our ASCOM drivers to function correctly in all situations and they are compatible with operating systems and applications of all varieties. - -End users should install the Release version of the driver. Debug versions are for diagnostic use and will have much worse performance than the release build. - ## Driver Configuration The driver currently allows configuration only of the Comm Port Name (typically "COM1") via the Setup Dialog. Other parameters may be configurable but there is no user interface. They can be edited using the _ASCOM Profile Explorer_ utility. @@ -65,35 +64,33 @@ The driver currently allows configuration only of the Comm Port Name (typically The driver emits diagnostic information using NLog. It is configured by default to emit informational messages to the Trace channel and errors & warnings to the log file. Live output can be viewed with a utility such as SysInternals' DebugView, or Binary Fortress' Log Fusion. -Alternatively, the NLog configuration file `NLog.dll.nlog` and `NLog.config` can be edited to emit logging information to any NLog target, including a file or database. See the [NLog wiki][nlog] for information on configuring NLog. - +Alternatively, the NLog configuration file `NLog.config` can be edited to emit logging information to any NLog target, including a file or database. See the [NLog wiki][nlog] for information on configuring NLog. Note that NLog supports _Semantic Logging_, to services such as Seq and SeriLog, and this capability is well worth exploring. ## Feeback and Bugs -There is a bug tracker at the [BitBucket source repository][source]. Please submit any bug reports and feature requests there. +There is a bug tracker at the [GitHub source repository][source]. Please submit any bug reports and feature requests there. It would be most helpful if you could quote the full version number of the driver when reporting any issues. ## Get Involved -There are probably many ways in which this driver could be improved. If you would like to contribute, then we would be delighted to accept your pull request at our [BitBucket source repository][source]. Any source code that you contribute will be covered by the original [Tigra MIT License][license] and once merged, contributions are irrevocable. +There are probably many ways in which this driver could be improved. If you would like to contribute, then we would be delighted to accept your pull request at our [GitHub repository][source]. Any source code that you contribute will be covered by the original [Tigra MIT License][license] and once merged, contributions are irrevocable. If you want to get involved but are not sure what to do, please check the [bug tracker][source] to see if there are any outstanding issues or feature requests that you could work on. -## Buy Me a Cup of Coffee - -| | | +## Sponsor My Work -Software development is powered by coffee! If you've found this driver useful, or you're just feeling benevolent, then you might consider [buying me a cup of coffee][coffee] (or several cups) using the link at the bottom of my web site. Thank you! +If you find my work useful, please consider [sponsoring me on GitHub][sponsor]. -August 2016, Tim Long +March 2022, Tim Long -[coffee]: http://tigra-astronomy.com/#coffee "Buy me a cup of coffee" +[coffee]: # "Buy me a cup of coffee" [download]: https://github.com/Tigra-Astronomy/TA.ArduinoPowerController.AscomServer/releases/latest "Download the installer" [image]: images/hardware.png "Arduino Power Controller" [license]: https://tigra.mit-license.org/ "Tigra Astronomy Open Source License" [nlog]: https://github.com/nlog/nlog/wiki/Configuration-file#targets "NLog Targets" -[project]: http://tigra-astronomy.com/oss/arduino-power-controller "Project Home Page at Tigra Astronomy" +[project]: https://github.com/Tigra-Astronomy/TA.ArduinoPowerController.AscomServer "Project Home Page" [source]: https://github.com/Tigra-Astronomy/TA.ArduinoPowerController.AscomServer "Git Source Repository" -[tigra]: http://tigra-astronomy.com "Tigra Astronomy Web Site" +[tigra]: # "Tigra Astronomy Web Site" [ascom-dev]: https://ascomtalk.groups.io/g/Developer "ASCOM-Talk/Developer discussion group" -[rx-ascom]: http://tigra-astronomy.com/reactive-communications-for-ascom "Project home page: Reactive Communications for ASCOM" \ No newline at end of file +[rx-ascom]: https://github.com/Tigra-Astronomy/TA.ReactiveCommunications "Project home page: Reactive Communications for ASCOM" +[sponsor]: https://github.com/sponsors/NameOfTheDragon "sponsor me on GitHub" \ No newline at end of file From d5490e8be536d33ed882afe3bef6dbaa79c30b03 Mon Sep 17 00:00:00 2001 From: Tim Long Date: Sun, 3 Apr 2022 20:41:19 +0100 Subject: [PATCH 13/13] Removed defunct reference to System.ValueTuple --- TA.ArduinoPowerController.Setup/RuntimeSupport.wxs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TA.ArduinoPowerController.Setup/RuntimeSupport.wxs b/TA.ArduinoPowerController.Setup/RuntimeSupport.wxs index def1294..745846d 100644 --- a/TA.ArduinoPowerController.Setup/RuntimeSupport.wxs +++ b/TA.ArduinoPowerController.Setup/RuntimeSupport.wxs @@ -28,12 +28,12 @@ Vital="yes" KeyPath="yes" /> - +

?p5=PrZv`+vp<)_Z{9pa%g<$!06t| z;em;vJtKQ|4)$&9-?n+zmQ8(|0ke*6T`gVBwe1a+%{4G&MYSabRfUQ2{Ah73kP3N| zes|pK4tbnDht+L1I}ApL+2*u4OA55+O@NL z+W>f$DycWy{0fcL?vCiq9+lRTohv#Ob9FMAPOY}&=4x|tG&wmqH0I`+s3fl61P${T8Q1)6NZR$H*s66!LA+GUnfrLEZHtFi>^O~H0U zsKW%vC3o55d)@KDK*2z)Y)_(OSEz8Ow_vBcV7IGak1I7`iS1N-J2mchM|`UzUVrBH z)pK`d4xQTTi<_!j3dd%8Tenuaqt^b3Eep>tU4C#zYj@aUjiyLjwz)LVTInj<>dfy_ zIg6F{h_|33Tvl(3m8e{?9CIkgT%d9{xl(%_sZo3Ws4YJ1i0?A`TXVG047n{^ZH5CA zqhEqv_$pxVsZ9X@%oi&i+JA8W;bRA8jvYF3;=qw(hiCxo#G#`{0kET|X+JOk?ELkc z1hD(FcNdpuVYwczJy>3OAT}$RUxAlenO&wGki`D5vyoY2C+vFXklq3%^_S!CTu~#3160gE2mvZ-isSl? z3<9fA65BrgwHV`9lpg^$Q0nXVFX>)H+!Hr`ua|@x)HA3Ma{}G&*LeUTMkT~IQ;73% zIS1SVgiPF;Ie+8j5UxduLvD%#vTQ#96_}x4KGJ#z}B>*~pnK&gK zuEzivEF1mfA789v{OkMoFVYW-K!A-Cw<(ycKODYi`Oq-xOVCM)r;pYo;!8+ z)RD8NW=@|teDau>yLgyp;d2M${?UPnk$zeTe_+?(?w$QRx9{1pW!LuZ?LFUUYo;fcZIy6l2qB?-m$v6=G@C-(k)}}Q$^d`5?UdOMvL8trm}K1SvmUbTmw)2 zK#(I~rcgQ5IuC6pZI9YrNvEgK?Je>6%UoVKvuanU#u2DAxr+020i8Wz@f10N<+ebj zJy>fC*4siY=0K+-y3G~a;Z5xJCHpVy~Ex9{GiGnwuIZX{^mSexz69{C}`JuiZy6l0MPhPuFjEsXhk9J8VSE0FB|c=0^(pN&S;}CB!k(?NW+|;X z@TTd`L%%}rQyG1*xh0j&BNJ2mr;Z++Id%~CYi8!)kt48Q(BTs&cooD8*YN-5_O1JK z(EY{qhFj~aD=n?}1d0)_)xBww4ML?|Lr?PlFj2>Z5uSqB} z)4hm1zJ-`;gjJ#$7GMlN_yz06;zK})hr1-pwYWqNcrp1P#4NF1)DnaX*#g3T{neVt zVTK8Gfnf{KgW1J@fL?FFD)4E2+98~l)RD*lLx4&^==Ia5OfQJBghRjsVEgd;<;OR) z9u+O;LEAdN;55*M8OGqjAtQ&yFk>2V0CA=ia3%t@#+je#IcS=QPm}CLKOqtrZ%9bv zPAfHLYw?BYKYJtJSz(5J%EC;ATGMCcjC^?2W^M8F-x{7P~6vQ`r9P(Mj zxOd|pV@v=n{T^_Zash-G^&!0bi_U!SKrw<|CU=t#eEzLh#S>y+zS#$Sp z17l#A7$my}j1kPPUc7Sg4Daf4{`4_g;N$o-JQ*-{Yy@&~X3G!QI>U z?%LMh*Ry-arX8Exwsto4wAOVsR`VJk%@rk$Wkq!*g;lBi;%KBW9E$pV0hcG>@`Zfi zcr4YsefNpuXF|bPrkH9k%T;D)gIF{?#$t@EgNtv-|02V&(HRo66hdICv}-eE9%5(O0qoSv}F8Hgr|)jIG@$I8sn zQU_)>&tueQ$&5L2vx1&rbL&k(lQm*<#GRf3r@zqYE3~?k8dE@_^XM!gvomh>%g4-OC9gh3~N8zxiXvA4CWC-n2dA6Cu{r1=(9FjA> z$)Bj$)Z2ad_<`bzWV|pK$q#hz=;|Hl4Hp(DtzK)m!5Z#Sxtf)Z8gr;s=PyI$$qQ%y z@Bgp=`OJ+|shXm2aqQ>+=Fifmns8A?j>fCBRyq^AZ2801#E?1Cn{6o0RCqI$cAyIk zV}Pklex=c;Gz9Qd=&ix#j_vyn%p5p;8~{5ob9Ddo^yJ~guwUGT2!Nfwco6`*a`Vp3 zd$YL9lc^E_gXUL>Qep=apolz{=uV_%EM}LN?l02ffy6V~on&npHnf>mtrAAYU9V`~&o2fbql2Ko?5xRAhjm zeMdfDLYZQ!2yT4b0)q|WO1{w}#{H3nN|dPN zm@yzFql9oj<$A;$+kyBLpG6Cj|KQ}GKfW`%B!5ZhthMbhlrzG%5Z8DiShZFu*LU2zj;!KO0;PEM`CuF>0wVS0z& z;L>PqPET~(jzO~{kf*V*{R)Irl{Kv;Wj4>)2uowp+uStg)^3*bZxSry&UKvL{At@gaM1&>r9I2)BD!Vj&QSl7J*E7knFjDEw&G@7(7fkT8apfi9#0btoUq-=AGz0boz5|M0~# zVC>bi$1k5gLYXGkdUs-)Vb735{fA`2h*HEM#t(_m1vtTY!HuC_fbG>wT!NUeC+cyP z$oUI$qAB<`(QWwl4N33`H2@M2MOgYBe4>1&8c@Vyo^gqKB&1KRuLul*D|{6KIHb== z{*Zp+he3h>7-I;bgrsY~e}c85wLiYR6H5sT*M(&0t8imzY9qi1cramKzChnTr>BA7 zRW@2KzU6U=J0Na_xV`c{nsb06rV&m_;`=oM)JrjoZ=(?3UbzM(=WsHFN-nvQ=>>D~ zUHpRsqoF$~Uv#E%e;StrfL}=Y3!g}4A)ntr0;vV0aV6KIL=7Yng>#UP#u5MV3v@v; zGQZM#Rk-}ew}1Wli(rSeue5kE+bjeilNi0@rUaJOEgC0?2LD1AgiDy>^iIUTU%!ME z`vrgz#c3I;U+lf`!BD);FtI`vlWhG90l#zp5%{CPZxe#8fA{X~`wws4h`AoGUOs*K z;>pYBPo6(ngP38DR+rXR7FKaHS)5y(yGN5g@V9*b&g{M0(4Cw7BpG!1`lT~0#@N{t zG~I&?+04OXhYubG$nM_3?OXb{cJJ!$+}TBw zKDM?ubvMFE968FoJb9i>u8=ELO0`C%)2j4(jSIY;qWlcD>PMFu3$O zhfe442J`#+_ti9ZMGMO1DlJ2tvyt42{c&(9hP8^IRGH-w#9~Qi9u^}(3U^wF6eW|+G#!Fa8Z6)U4B`u zGng{ElCDU-uV9-i(T7Wv_6DuH!5pZz1R}MamEAk5D;uJ*Vt-XzdAuwZDfE}tCp&jE zHFY*B4Q?m=Uv#@YxZAdrB()XM7I z3ZaWT7|Dt)Ev}Dm(RzckbMR8M?G{+YSJCA(?zMuPIbdv_%+})43TzZJjD;8?2L=w& ztas68DEbmX9oQy%Z!{`K#tSCw{_F#?V)H;+dKLx`XrYl=@QFshmT!xnh+DXE_W^!D zh#c4hp1ZMd4={T$cjw+Lbs^5;)ffH&3kAJ?`t;S4C$L}Ke+XQ0Um^z#Fj{2_7()&! zMVF(r>@PB@k8!=f5he29udiqSx3iq^H>Kx&ym`qJ5fN~jG$ZljTk4+#hZta7f*c>= zx8Bp%mjpS%KXPDi)6a)7zzAugYZ0OcrNvx~k37BpBQ2KrQ9MsZXN3jiSUgXip6XSla_Z*jMx2_0fh5CnkFw~rrwd?x%54#n+^g-gIN#uAf>t`#wEe0(=#Fd&xF z5c8dp@0ikk6XN?OCrdfFM>8t;EVQwGNqk5-H1Q+-kGl|me*5~zH*D3u%E7)pMt9Me@O1=#pP1aN?07|K6IrPzAx8)>~AN)zsg zMVG8oir**aAm&RLUEDrO=@4*aFp(n@W|RlU1m1{VboA@nFEVZPnV@BE6Ow*jd!pibI3xDHcgW0?H?%uqA z?-t6tcW&Iie(CPbE6~lW7p`AAclE-Vi)T)pKXvT%@tG4xr%vLYcI3c`qX$vWOpQ+; zr02;d$Myna(8R!=k-i;+JGKvO-?C?G&+aXoc5Ld{+}hOL+}KuETVGL8SzKI{UyzK% z!oENx5R65VB}L^uo3@ROOnN*4l}ZOUmM2rn;j!czjY_XpYBWlf8d3meN{v#XQ7F_3 zxlTphhWsizW#{R$ay4wuglORp zvB$saw=6|Qwh||STI#TMZQS2+XUDx>>O#D?Fh_h^214*(in|>&&S5dh=1>AE^We?=-T8$(AldvPmGl5I*`_;l3-{)M z8G;l8OwcL~Gc>|lXBfq|@4|IG0Ir~$_hw0VAD{%-?#(XVeXu~M?$6)4Hwz(#Y5T|P zXHTG)PaeH~O2&&w^Y6wBEMdm*TJ=OMphXCW-0_IBf5Q^fNUHqXA=i8m4~I!-IoMe8 z#Cnu~2Q9|&o;nO+vlwGcnol3zeR%i#``_RE{^r$t01Oyg?{9>$W5{hZRbPI8_YDDR z-n|EYc#(Sw)+geB{+%j$L6A=$fB!(-dh_AkYXqFbyFY)Y;3IV;f>Ll=1U8{{T=9L4 z#U$gH>!lkXO56%1aSj?mJ;b+2)Z@;}nNkgeHl>(v*(^@u5{J0$av%x!-!EUjz%LNF zzQSn%C%Bc12J$|$Tk^x}LOT0)a{<`l%vk&e7V>EH`&h^=QH}BrMdglf(cIn#1bJs569(GDB zRdq~E_n1C)dt+jQv-?;Hdq37S1b@nMIt4M{HmgohKibwnuhMGx~_ua`e3xQ zq@vZ~N#w|lWX^K6Vs0ca@vh3sqTRMKb5wu%FgZ}G=TSO^(x}#0bw;~1V+o=v-&I=7ZrROXwl zL1(zd8rg2}bYyD_GE~%mNDfSG&(S#KdU_aKPD`J-0WgCj)U#u7^x)C)!-vPGXAaIB z2g3lcLr3W;=EEmW96x*R^utCl+`|UH0)Vl#;sx4ip|gdR+4UJ2v&$u zdk=0C%;uoGvoxh1z=nXX>$mUSz>hD$_K(+3pFnS(Q4b+aM0^gOJw~w6jWKwn%~lv= zESkZ%K3WDEAz&evj2GANAp+EJG6w(^VzyZvv$%%c4`J->D*%i;15t7SR{j3=_4{{k zA$r>M&8rV$9YtmsXEO67l70F8chHM5_W9j<<%a%4(uWUdd5fwxy<6(tCga04avh?8X>p z5il^M8qQ&U;99&HvO&V%Kmr_MZxr%9gfT$t`_FG8Mk^9FNbJA>Fq|O7h<(KfMcn2F zdU1)DlimQoAL*sJE7tftIf9AL#*^$#H4xc)H_&C0-Pfs2`G%>Y*?7;ZQ z{lmc6t{sEBcMk0A-Mwwg&hDOV9i82+ZEf`pb>-z{sZ@SE9tnm59>3r1cY`%Hx5H$& z8*LVy#ilpgv_^|YYtz6hX{~BC0-FY<%BogcR1gBSRi#2;0@5^U0-J`|X4Pn|8Xc^V zMQgC?EjE+gYIfMHZoAFnbolIckHPFQnEWPl$YKo|jb4MnqceESwvgLj5J^-Nl{JB6 zbxoVgtJ`71autT`JYBY24~AvQXk~XXNT$jJ%yLNpSgu@WFgi3^i!6_JmCVTzOY$oX za; z9%u2OtC)7nG=_F6T^$-E_)FYc`DXxTa1F}HSkb6;Cwb*#R-CR!TGuZ(XW+)`3g z;0?kx7TQA{*6?PPy*gVH%~ZI^fhir?YG;ndMGu3gO_)b*@j8OZoqNZ}4jrACnHirt zynhPlIu7r}17HGR=TBb%z+lN~1_$@H-Cs!WR?NMKG>Kz5y{;~G=q*scBI?tZ?y(}PoZr*tUt`Tc__3@wy+L6j^o>|bJ)sWhiWKEFD@D+z2|`Qr!P z287oDpLjM03G_knDDc?`Q>|DJacvgZDb% z{d%OYMDKoo1yA<+)id^FAQ^iy?pnlc2RD}VIy(>U&E3B<|KKjoUA%MS{_PuLsO<99 zOJ{hu=u78LT{uh22cJE4^z;epU_6Fz@KgJz4~`$296K;EJUKqJZ=`?U$iV2{Jwv;8 z4)yiz?d{#Ob!%TwPfts0TYY^^MMZgWNq#II^!hz^m(yZ*L1vrBY$uuQ9;4Nx*F#=| z-fuE`jCz+|>oVw2+BIqiEs9Uum08s)unkm0U{NUmHj7dvR?62|G&-|ZZ`PZPdb7!3 zF&nKmi_>a#)0SsOpT+Fc>0Gqqw9ch7cy%VP(HgY7;h7TNVCw%%*L$#Mab)efb6w|r zGY%M(vxLamU^1ATgUMjP1d~A$h#Zx3mJkv`Ig%Y_zPHo9`NvHqUx2gY}miAA(U}gr!mM&kP zlAe!m50gZhVc#VE^P3r8eVg>nwAATInaQbn85uLPv*+gIEzHeZl3(yc?#z`4vg|o) zvgWMMoU<_ln9bXkI&W9T!ULI$4i~IAGi&9A>?LPX=N+FuYk%te{n<;7%v^S2?(##+ z)@|K&c+b9L`+oRw<+h?yb_&;(O86FI@n8{G#GTl}(_pZE9(3 z17NmL1&Gq%q0ga5is@!#yCJNz_YDfHqqnC`SHC>xZvfK_3y%OKyDBDt0jETUC1OnU zqJ%%~cJ!Ccov1Dth7Rj8;nn>T!)Zp7wK|aeZevB#NVttI@Br+-wZOi5ka>o`$UB*;-j-Lx{b z3qKg#LVE$QKYbM{+p9IMe*28_VH2bAP?u6CfKQ2W8UY3>6%2<^98;#Mhq&@-O@ax5 zWejs2CX*}!UGPOEwSu}5y`;b#cK^oz-|>yiIt^v2;%V8_N6#ML zfA;tuf=nbskYP@;%eSsxx^em9^^51OUp#;H{4bZzoIZQ(_{l?u4<9(VcjvBcn>Mdq zxq9jR#f#@IL;-wV7Ur8RDV(`rsHJ)YkG!T z`ai!*{jYD5QZn*4ZrPobnqx5g*YyAT=ePDyf16r4?Vtbr?w|jh{;#iQeEoIuv}raD znw*@Io<1`>YkqFtqWqc5^30ZJ7yghvdrju-_35*bW!p05?#P(8J8$U;pS5@*W$xj$ zMTfJN9M4~Ndgjuf=Y0Ru!j)SWu3WwFhm|{z9Q@_xuPe8%U$AOr!J?IbFmwLitc3@Y zXKnje%F?fr=Ka_7!vFWXJOBp0VAwaQGXdDN)WYvlXU)i*y>;)gOE>RcE4hEY^v;dD zr4BH=15EPk!L#R2$||2%+EbY8TiO~BEH7=oUt9Mpw2p=cvG!MJGMmQ%#yWd#2(j(e ztCp9Yoro|P2CK-7C$&Sb;Mfpi0-_LG(p!lD`y15^V7BH{S9^DNb7wo&)X_#6i!fVJ z4Rz&XgEm4a;U#q07di$QyC}8UY<@=zcxIymMs@?RMgZpWi?Uu<#e5V0ALE1llOxb* z$iUzlD-mGh@dzQMXr#TAMmskE7S``jE#-?+_%cQ0D+d$0LMA1MLUK`xVF6?8l20iG zW=ukmp}l+>p*g6lw^IO&52^m(}K+#^obsVlLPGi$9Geo&{ZGb zA-^!Y0QP?J(}yV~D^s;>F^*5sGz}q2dCN{bKRDk1@jIW9T_>{7%RGZ>H4J$*M2>J`P?t(PoF+>^3Au zm21{5U9o2Ivek>s)+|}NVfm6De^`cXT)uSO(#5M6Em$#c&eB;k?eQ*oS@Uu-=43&# z)WVFEg0!T9RDWVwauNW`O9E^u=&;8W{OEG4}lHGO7MYTk_G9O_L^&Y6*tH!V5m>!h4-l5@XK%Kd73&a{+*8Bi^);G2|O zL)!GrZ)apJS-$?qt^1~@O zEO+V2nahqAe!s6^$)>q0wrtva_{Y5m7OY%9d)fN@C0lbA@5@|#D1E{H83h~vmAvSy zq&Wag3JidKol^L%UHzIpJ$=rM^f_6Di;thZbotipYsGgAV0Z4^ynUz0?*P*Z^bejs zds<#mR#RKm0Ki)5!A*Yo5TXDk1=imE%FJ#ewmX75UiE-9dlaOh>t(x%dR_D~9R^D% zjTAnF$bTS{=p|ec5ws{Vf})pH6`QRcT>#95m(dGrY;Tnr%p!r+f;CZmkz8z`x(r&- z3uCXe8h&$28%F!4!+=>wXH%OI%O-~Sta@RruDQ(tHZ(XsIAB-8h9m7|^h$t}B4Mad zB{-2IiIzC?o|3(Z7I1}$RcahZNK=B6L6j7jam$yU`Y<{6DPAVn=mqfnwrD6~TI&5< z8$X*?cG8bE{&swnO_ytvC^m3H$tD`^GsLpN zKpKpG9oz7ruU{3G9)?($1e`EtPaTWx^9RUB3n1-NG@0I)n}P>&L_0PW1Qj-S5itDr zStF2&*kXywkCUm!IZ$U z{^QFt+7r&m`TXhMI3J_6_Ek}JWmE}BP$Sw@gfeP2?%We27@NUY+%Wuy&CGxfCbwwB zUYKzUqBvAQOYk9fbRcVi_u-E}NwmR2Bacx^&{EF-@d@{s4o5_0$0f()P^96)A^3Cl z0Yba<=6`lFHgZVah^AJPl3-|@Ql|EGT)kuL4eumoKTX`xPZs@Z!T525y?YDE?AI8M zZi~joMu!Lb5oB+4g-jR8G-VNs1X+7?b5mVYV{KDiwFH^n6J1>)O;%n0y!`niVeH|( zl85}Jzgv9o_N}|cH%g1H7hStlbnWu>OBXL+xOnlGbHDt2`pk)wCl4Jux^Lg1UAy*d z-n{F_jXQtbxP8O=9UIo~{&B;eO&fOqxPIq`b=%jj-m>b44c{+ay?DV73+F7KKWpin znTu!T&(F)5mzy;^J7acMdSQAhlBysj#U37=lw6RUl9!yEo218YCgr6hXWOh0(?OXa z%?B7WQ!+9QW;y9;$g;c)w=|<(ZcPZiHrLVpUo*)JZ(nq*S4B)ba^bkRA!gWY}F47M$T8?q<-^F8bUESIX^9JR%X`x zEPJB#(!5#U=N5jSJ9|aJyft}qHssCSk~e32&YW$?vaAKWvKH*iU2-^g$&vhJM+%l5 zEL?tI{>r^`mhYIed{_RW-Fb@-Wi2^@rO)3#Eqm2h$@Bj;W7fZtOnAv0V6$upF>Q8I z#@xaM%dZp_Un?%UUQ%-7_HFD|1h9K|A3uEX?8(!LvZsCvb4^oIeJglCl0z)xldgf; zg{~fZIAllntB!7alBC`5leb=%%zs*#+KIR zw)V!BHhb7~duL;7dqaz{D#)+erq-IqmIz=ILvU;O?dZtVh^Z?L65_n4uOIgZG()eU zf$^b!qfP?1gf!o@2<6mRG+-D&B|i~q2BdiUhSCxkdktey&2pwbew_OB z=`FvGKibR@Q)$0{c=zY$50H$bOQ?yR=KD1;=)$H6GM`od>D~L^Kf)E=&iv7k^ZE1d zA3pr~;lsZ_eDpy}o5V=)&ri+_2xN{eu4uQN`O@|H|Ni*#kN59YMNbiO-x!{cKNl`QKoHbAwpmlh!z>lQpqc5OyJ` z78I1J*M=gLAt5mn*@0eBgx=lmJA>0Uf1dvujsE*jn?>>;S_9Sor`aW(Ab-X;(?pTJ zp%MOTu(2niMFWE-<6^#I@&io=}ky>ju_%jeHuI*%qh_4BdA$A8*?{J_3r`}ZE*x99MlUB~zCIl5=}Pdm2% zv}4nC_Z)e#?HMb zm;JCgD{uZc)3f|>{yz1?Co%rZZ%yd{%3pGL*775BR~()F{h`@t zvc<>q7N5*ndM0!6sgzl}zfN27ucSHuno;<#B)jw#S?VkR_MOYG98pq0+_g^(jqajoL0^-!=AwpfJtdJHn$+R9AGVttu6Jf&5dns4Xv%HOvDz5 zs&8h~rqtsT5w|FbQ2rxA(df|F;2RALP7Dv&+(N%$S*D9*4 znHnGPGKw3198UPEA}lGWO-ec1752)@fH5D0G~pH5$0>VwrYk()6z&hB!~mG$Dg`scfL5RS z`02AN88M3tDv4?_^sIS`Z)v6FW$ z(x5@n{vuW-4mPU62vh{Ulp3SN=O;r*)*GS|BSJ|eyh}KIA|Y8H0Xf>GAe*2|9~>nH z!@}s|+bJ7bgkj@jLnFienzbmH1x*&NkO4EhldQ2017o^QM%hqP3CSv6Jl4~qfth64 z;|F){mloeGD!P5+M)9?4MOUw4*M7Zl<-#u)&;ESz^r`cwPMkY={OqwKzZ^My_VD2o z`}UpKzwhX7BiX_2+xBkWgfiP4DTOj;Ml!t0_IV#U$!Xb;EG;`dB{MB0E6oQOQ&S6* zQ)VTl&Yo@;kY;|D2G#PWrxYZm&CbYKylC0x4Vw<{J9z%&=^LlcTt9g9{Mt?X^5-m1 zPM`I!Z`1!@XPCk4+cfjP!8C(0>6`D;zn+%vw^1j51<$6Zb1tcAg&A3M{bsTyd4^Yk<=WflMyDe+puH1$DP+bK}juk9DIdkdh{3WOJm!8R4bTT=A z>o+M2zfPY0RT7|`8OyI({!q}_)6?eyu#~KM2ao=I<>sv$C1y8EN{a5>DY|?2&cg?i zUr)+kJgY1(tEm#e>ROt>L*SN^?4_06HsU7}ji6W9G?Lk-UH1}Ba6pTI)X^0!bz$_1 z@86Q)ldoD|A{`z4Zfe3h+H}S13%A_InmNe?;pL-+b_W>r!kU^}8ycG_@zGn2t;Q`i z($Lmc*U}~C255TU2F zIBHNW5D}tqh{z{LU=vZam(n(2n6Fb6(d*N19Fe%?3u6upl`?gm>MQZpOX92jzdak; zl%EeRlAxYcy)7+--dRR4F|JK&DTv8uFI4bdAN`7v#jQFla7w`eM_AMX`IsX53$U@j zKR8x2je>*9bU2}lO|^h2jzhDOhVhvgz|?H`<3x;M2?SE9IK&dV#4~Lg#$wLlkWb0m zrMFJOV0zUd8DkSuvV5FS9plaa?elxx$ibI3U@T0*w-u@eUc)fW_z=nLV!Yjl)B4h% zI|5%p3@3m(B8$Qwq}3^HbAvQqnS$QZrIA((O`NURqjyM#k*abh}!XlvXe!wE%#n zq|Z&uT#%WyIIrM`!Z~XeE#0(y&GsGpP98XZVc*enyAJ-meC_txi&lS|n*aZNlk(5+ z(!ZLKIW0B!t7+-}w3ieBHX|jQ((Z}=D#@qdr+)Wc=Je^=Gg5Rj+1%{B1vxX9=FVE4 zGiznetW{YycX31RyiGatwjlp9=kCdxe<*v=iR^_ZvlkxEU2r5RXYIFX^S?oICC@}M zieBHQ&G|NM_B6`W!s+R=(sSpZK7ZxXjT_gBuHP)VReZaoxb)8Ldv}pvXs<^vo;|H7 zdr@ujtGclsdZEBzhD|B-OJ4$*TldSJ-p=kG*J05GE$BrFj$)qKFks*cOcItTwK5@f zThK}IE)4LnsT@o5F+j|i)E-^*f;uW?Mz7BH)~={7hGVnj9bJ%8~1q}jw=ds9a{ z%Cf$-wXUUAloGVWElPs&BaF4Q+Y^~1ITh1OBpdGQ16>F&U!-HeFg6UaEE#A4u=u*y zAoRi}$NC`|CUl8m)@*`fOmgs02BayOQg8}EbD)|JAqrr&=@Lzui2y@~VQqSqJuFlkr9rmSW0Nw5J?ftQL06VEIy0bsv<`1nUW zNhEMc3=0*B$do1%w+&C71)G#LW3PXSD2h}aA_f%Y+qiupEC!zp`NsU=B zZYOl3svG)Tx?pR;XG0KFr>tb91yjDC11Dn^n&lkLjAGF^p{H3bYu3SL!16!Gjs39) z1c^_gkk`#J55baxk5MB4V(Tm5;A7j3q*S0QUQDA2jnme24iy3u9xWgTq5_wBq8BukIl= zM%nkO>s4o)Fb2TFa*H4h2bhH=@XMb)e(~gC+2hC0A3nsM-oNi8E52KN^KQw_+qbUz zEoDx!3%^`GclPqRGZ#*uJb(Ncg6!v?4xT))A3=6}-`>N!cJAN0<-oQr`?hS_vuWe5 zjqA6sTZ1gyxZ-o(kddV6W^ug|7&{YcWL5+N|lBb5UUU z$yu{!&R>51^3BUPZeB0GaqG4L?9ScN+xJQzJbjGzlKd*Kt(N?%Z*7JU0E`lJ!3ogS z(PNY8v6ptm%ae^Ju?zeN zOJhU*5^Aa?EQwy2aK$dQBPJyV!^k1%!lb}VkjZfkCv?3V8*>FV@pfVydL;r3lLFJf z|95Y#bgGRDU?SPOx8wSqOZnl$)aMU&bxoJMWbjF*O`m)pX{lhGgG1#v&=q6sqb=Lv z+)^nN;ggR;Nsx9hf-?C4hEn;eVvT(Mjb|Ip|9VutDmL)RI6`ow>` zVs(Z?#Ky=YdY9nmL-M3{-ICt?godqa<`jyTbjhOt+*{``ads5-`305FXrLJuC?c_17Ey4-Er_L3 z4(K9ouj02);t&=NVYL$8gv7T_#wIx&NNGBj-qMhd&&Q-2IW$>OzP`pX{K<(CzT2VH z{Cf1x-LTtJsS&&5X|1LQ_zi{5XMc=1q6*$9eNk*UjVfN3jQxIxjeVhL6ciG?BcxQe}T48$5{Op;_ zvJ1Y?p1C};@cYb}KV%iI$u3-C|t69_R{4u7k!^muplXGF3|Ej zz)XQn&zO^xHEZLxeZO8Sx^nZ@wW6EXi*6L(F1~a3PU!;x_UL(41@eostfs1}p{}N> z0R;xM#4sr^IWo|tDHsBnv=_kfRSj)kMtg@10D>PGToGf)ZR_atDeP?iWzGdAZn23I z?NY^#_9pgrwhLOEl}M(t5r&1ig{>_hupU^&SHEyDk+r$aW@G}tYXWrzcm@YC6JbL`&@Dbu1`=(dMO)R^X5oh$$ZSa} zS74X`h6!N*{)}T26hQ*O5SHYGGGI)bGFXBoZi-&`8bXXrH1bO(>Oj>eCibD~9PzDZ z{7ui^G=K?Ll%PxUOAND9{S?gy360P~Xj2g#PVEOjBw$qGhzhC=5e`RdYLHJS_}WwiUq?|gC8x@+#2j}bfCUHR`>C%e4C5>9 zzsal&>r|N<8|WMC>lu2}YtM=HRfDzuJ%Y@CI!9|QQZ_Z#*4NQ7RyEbs)K^y4l$C+8 zsuxeo={g_XfA;X+!+RwU?iSm`#XGl3i>{-_u;S~N!PvE5&s{!$=GR|-K7ab;xt~v* zIdSy#(ZgpCANu*gfs_08o!GbU@U9&PcWm3Ybu%QBAltTfHJU7bP}!n2i|4OgFnh(k zS>MkoSW=j`s4!=KKKx0;3jG#on}~0+EV@XRmz0t-9Y5JDDJ285#j8@&l2h#dXj}3s zCo3&CE2AJIJwH9YAS0tNEn{{XD#xyw%>-jJ3}xFIiDIZ_(U^-!EFa>bs;&aP?nb*{nsk8Cq-6R~bgDrK85a{x0L&8M)J8 zZswef+y$9=i!$?<*dtwLF3&AokzKg7VBWGhOO`KQy?XhE^(!}RUb1Fg&YZk6- z&zqJyZ(7FO>6x=r^XBe9e&)ipn^$iYT`jtGz4%s1>7CMhckey4@k6v1^g@1B*4K(& z5;`ygTnSwoLUgCA%`S1-MK7)O4zVP{I=gz>I{+98tXl*UkOITVrEGT65K&MG0YWmx zmD7T*BEcDE#B$*!Gr!d)$Ez0d3u|a<61@a4Nkbf41<{u`3{&Jaeu$&ZYNJ;hMqE=6 zW&a5DGAZUFEK*x;1om~{BWr>0=LFT`h5n65i2C% z11cHGa=c2U!vvv7OF7S!6UF`NmkBR-1T!=u3G9t3`a@nQfyW0}_J(}QaCB8+7ipAHJ7^%M*Jm*Q zhpk&72B>-%*)xgs`|l+D$Hos0OA#vkDqW)Kpuy28sX=Y(+&pe9)B&snjoz9y>jVl_ ztSLWBp$kU@^|P}GX?jH@%h=>4=~$F9MdbW#FPr!wj`39tAJgYg@BiR;5MRZQ(2HLx z(IqkBd`0=jzT;=#J0qD7Dj3iFPO_1yiP5nkd$PpHz?-2ruWkMNo|k>E=-Ar3?LtWh z7}Jaok*u+yrn$DZxvrM7v8KAV{6!5v`d>V&eE#&slZP*!Jb3>2{?mu|p4=~eeDC&y zJ2tv_=hn578&|>Djmu`2&!4?`_GeqI>g0)EjvYCD_@}c+4xc=*PlD{w&h0<#+`fP7 zW?;5w)5aa^S8rdpa?9%Fn^!Ft$<{7euzJzFm5b(nKd*36VeY)V%=x+5vokdj-$+)F zlAM>6l%H&+V3wPdWOqi-NY)yR*(qt6$!XcCHgPeMWvSWeepgurBug(yPs>lwC`?V8 znVvB_CA}~yy&x%l=BZz<&YZjKyOgY1^Ox>EaCFo5z4^1}=gnHMYVGF5%T^=HrYC28 z^=&Fr%+Y1bE&9y+6r7tLC@bny?X zR&Dxm{r0Ut?%K6}+s?(SHe?nqnvpqoTH4%i(`L_r*RvNN|K-xJ*K7#!%8eU0iVR?P z@85g$^vTom7cZ(S(O%FCbO~U90dDyMPB!4?YY(Emx;uM&2s*$_X`yNCN?6xRd&cog zd&aRne6rog744ZOFVS1B(mG9(ndGto!!NLbFa+B>np-Wx7X@g!N{h%xNl;%P0EQ03 z_*U`bh%=0M25bEWFIqr;VF0YD8Nao@skx!qrpsdiU|54Mv{CDbs;Y0SZNfom*(hRt zb9-GAX`S_Ug{-9>HP+H<0E0J_QcIZpDSL9t@PzIX8`fI&!~ClN9_*zGP7E{T7kbO+ zB?MY^-2@HB+%z&7{2;1q({Tlg0Fv6o5#;1!Bz%51sTqkT#o}bEI57deq{Cpzy9rwk z(Xcc*A>LpHwn-wk3tS<;WE10~BAG6OVPQ@OrPg44KRJ$ln4&eiz3jugw;xEe6{NHP zhpi?I(jrS(Yr}3d{_y^j#r;Mxzn#lQ=bTbdO$JCfZAvUeL@$h8B#U8`#yRwpuYVt| zR3&z!^3@?m<_ER=%)FM}@8wsy1TdP#U|2*)4uO5LThnMTv2h%g=0G@~?qQCnQOfXD z3$r&N;S58>GHo2rkScX$h%yZZTAVKaX9~o&OgT6KNGb_Z62#OjCA(CMAQ2oz zC^036O&x-WzG;;Dy2`?Ldu()gbYy5`7(q6G4fOZ*zj@vFy65%lo}QlW&dzp9zqhBO z%?Ehe`F-3_FKeu>Zm6oFtgEP~dj7oP>C>{uk6t`_SO&}1bCP@+Ml*M8!NxQ#y_lJto|%%7o}7`9l9iR3otc`Iotc-FS&*Go zm~M}dF38B8{ll6~+4*ySSi5Q0{v*p)t_NW0IRz=1`STVoU$cJO%C%cotlBht-uD^V zv-R8-44!>6Ju@|9CguNQv+y;iG4-oy>EF)CM%X3W+QeXNPTs8f^A>-YQq zee3qUd$;Y`zkd6k!bK~Sv*vx5HWvkk8e90o#?!xEzj~wi#;xM(H*VZ4x^??*>AeT{ z0T|k=qOJz{Roz$*4**y_nkHK6qN}kTNVK(dy=?93_NCvuTdeE?U}&$FcFiZWu|)9T zOT2fsboitC{W&HQK=>NOvtdI-7&t_A`8{4#x13I!-Ws6AcSR<8kzDULAvU%m#oC+O zI~wdBwP+qkBETs5q14#i3>o=Py_=m_OPi3UC3wssVb zjrC1TvWb0~ocuUGVdl$9Y2Eth-#H3w(yp2LEjME}sEA@iw>jrNy_@1F@88?cTl=-^ zlkcge{z3zfmj4#T_GLCBMlYid>y!6BA3XTcyCK97<)5EE{q7phfRwFbrLWGZqR_;M)mLsM)*4hVt<`t9>)c0!8(AhBGNQQ9Rj zF$|I9EeC^Mw&Jj@MFM*)LTfq)m24`LgrKO{r9*31qWR$rW->cBKcWCBr4?m*JIc|E z!iX!9SYk91eAU&vfv+>s=Y_G!=S4{*yjSx1+OUfp`#?QM`Rrno?;9mP4yG?8rk`kh zp(iKCFu#p#2!;W(p~3#a!TvXIUibFCf@Hm~d%C;3fEgHj+1}RK+5*PfoA~ux*Hlvj z!y2lp>np9SEw89}`mEyVWD22>-~T6F(gQX2?$+US9s3 zoPxR8`Ezn-&R@Q2LvlvWcZj;Q95!doTekT7wcoGY_`{mb%U5ogHE#)N89B2u^XBFi zF8p>z=0CqlwY$o`O~d)>TL_o_olP{!osp84o>Q1Vd%=RGD^{-CuyO0=ZM$~t-oJm> z{-3t){b}Kf4M|z^re~TZWzE^L=g9f1Mb~Z=U%y#&^X9Fh;^N{vw;w!u_~_Zw7Y;D! zC4e=yw>3ZlyI;7&)_{jhQ0FDwdWHG3xJ+zm%n*QyPqwUkYkNy)w;r9`+F^r=fmW%mtpTOgKb?-pm;+=LnGGM(9~!E z!$5^fF+(s@DHG?E06(A$CK)97fhD_g=IDY_B9lsCEI5%Gi*GWsWf&b-YF6l?6jgP&ZFo5w-U2AqgHMm88 zp%pq@X-#2M6Qg>N%KNwDzMzzK6ZXVHdWv^OFJI{cL1wZ{%1oUICX&&`Bz8kC^4{Bp zGz6Sa(-*PCDnO!$EHDP~^l!f#np*$uw=*ODF!f^eX!Lp-Csg;xvCx7hxr9SXDKK+B z*nQLBC*UeRba4K|A?SNev zX;VHq#wtGz{Qv&*kN@+ZfAc2%=QmqM()Ri}=v8Axl&Oj;wM#ilRsud2c4@Dw>!4~u zL0)D^lfy0?;%Y=DpIypV3u;g;vzNF`zP=uM8_8jlk~k53EHQ_#lQ#9eBBJk`eVN^~ zX@d}av&Tna7-|fMFFel3$k5Qx02mt>?C&3Z)7OtEd)3q1-Sd*pul;3PTUTpKM^jTf zKdI~MAsIRh6VGbP%k2u;^XHY%o?$N@J$ico{^PrMAKtn1sI>HcNl9tZtvk1_6<@!6 z>na#Kk6pQNR@ceS{e0q=Q^!vqKXUT$Pe1>3;N*clCl2g9z8{QjJ+y1{zOC!`Z`-hE z^V;2;*6jLm^^OfIx32kN^Xl(6tXQ;W>Acm8=KL^!){1$vmd={FcqTB*U67YE2U(V# zIx8z>W=2v$Iv9&cmTPMYC)upUBsP(#A2{i0BPOtXhPqM5@91jpvNU$dgfY$L5WQ^j zx+|yFPMgqZjU%3HhM~3ar5!zjvI88NoPu7UDO}1TMWri*8$y57DUe}@Qr zYgf_8w<~IIC&@8}eRvlw=i&WD_z6tUf+?;XlVWr|0L+6L*bMiXQDVU3zdwD}(i>W~ z<3Ari{WkR$6ptLL zWzFEgx6*H9ra?+N+%Mg3%q?;-YEfD|Rtz{K|Nohq!jz^qsf7v?t0>tSoQP+!7*chO zAO72?O2P<>``IQQnqVS+RFZ&^iIJl!im;iu7l(YssmrFC)n3fr$prkUx}8Z3DpmKF z79EaYXo0|S;Mhom8(+~0V1^(Y9UdPa z#RRkd{=UAxUP@ayxVx+OW!J0r_Lr@#U9GKnZhXV1zXKYIS)-qU-f5AT#bxKnhmdhw=JOMd)e@rLD#)-GGHYSFwO7R*^Tcjm&GIrH+;=jNu($w>_)%TJq;pE@HS z5jMk0Uqm=LKQ$$5`gC8pYDQ*Kl1=(ZN=Z*iO;3emSvgs`XtIp-oXqsxEE{9YPtV9r zOV3G8&GI>q04Wb@u$C^v3<|8Z>t%~Q zNzzsb1Wpb9sFBu=&bCflpAZM4-~%ub4#R2k(M9&!^{03qASH0ppdZ%I+M=sdN>h#l z4+YkYfh{m*$_b3Hjqn0yHj~hz*Qo6*i^*vW&o?Jr?ob!*P9w^#&pe( zc4`_Ms%vY=udT0B#kz)ijLqm87{Cym*c7M&x5A*JHUnLP4#S8ezc4^02Zl+I!756r zF3Mn&!$WUJN6g0TdYB>2(M7Wuz8tl$(M23Z0GP%SHH4T5s=zIruqyz}{0V#B%Ex!n zzjGUD@%i)yFkgd?2pn^y*<|H+@5X)na2$pa^tk`djRz7{S3bRoj7>_gVVfq@?3$Tv z3U3auPx0y=CX)P07)UUl32Yy1sVa-(`*kl2c>Mn9%WqCNkE`#qZq&I2f&SO;wyYGJlpM~^!5_;BL)4#Q^toyQfJGwg^Cw!i)f!zf zXfOGcsv@6KU9)_}Lr@*P-IwJT!xHHwpI(|O%8c@T?MJP)Wp_LijJtkHrVj-5Gr==71FPX4stFO}^% zx^LG{ySD$dd;5W1TlVkRxO>a$-J4hK+_Y-@h99=9UGd}U?>DYox@Ose9~RA7zF@Xr zD$83qGaH+qpEWl(9gG!brr4wp8(l;S*|S}+Fu<6VG(9^dDKlk8hFNlUT3U8`dOEO5 zv&BBL*z&3QNVL?{%+%EE)U=$Gl&l#^8PjKEx!J=zlTra&_VkqO?`#p_?60P0eLW-R znawQk*}ZCiHi*|Gb;-UCMu9zM19$DR3eS0rUEn4UR* zTKe2&YqtG*{m!*prPqt@+$_0WTvAeWyX4`M$Ir`NRMpnhG$KK4-3<&F=!uc7_RKAN z*1jHpEG$u4#Ganjfr&}RnRW}ZOA5?UXP3JSU682_S@lxWGw_>`Rz5|w(MAZ{)D-Qg zDHm9+jm_{z*R%{^Mz2_hQKi122?fTfa>52(;M4}vnroqsLrV-3#xNq3P0h%!W&l># zfYVZ2--H6IYmC|v!)hDqYp{BRm|X}Hy(s@NI$(T44~?UTMh3yv(3@Vd3X+Ll#Kkr- z2_K38B&i~Shh1Wo`S5S>jW8y3iBI@)5Ko#tXyR#N+!UBY%W|ApI-(ecg;^Vvz)bYQ zvCw{4=6__y7W_A`}^o-o3T?8Xw+kT=4@v3!CrWeVm%Ild+{5?IC30 zL1NSeRM6tLw}u%q*`zBI>OOfpnlSPyk%-oNezHMG6cxR@lT6@Lw}meUrA1#4V+2uK z)t;a5zCbYI%)sOKfd%0Ox+u+j8a>UT!01xd|At=mPkg^iOua2Z8HZ3Z9kJC-=GGE_a5IZeSn@QDSmLf zXwA|ED;LdOv0%1cDw|!f*k>@#$CW6q0G{4LL)rO#!^VP2V-V@mz0St`z|?W+KilU z-KHhwO-s)IE_LRNv_dR14}kr!V(pI`w(QupYwzxThxQ*jzJ2#k3zn@<%Uw7lb8b@h z{G{x8+xH*8a;x;}t&(fEN^TUF6yLsm=iXfbth%mNH-6ENH?+0ZH8(f3wl}tQG<7(N zT7ghUYkOC_J=W3&25sqE4CaL4!RFS+me!UI#92FL+N<*=4jG6ZmrbqB9X9R4W?r=0 z1j5$N4x3Ww59mT~83^5>!Nw*uAgp4u1HZYsy@?1;OS?!0y(pVn+e96^2G-V62Y{Oz ztNFHoD_)BetFb8>282K;FzQjaw$8W($zYiAtf7gQT-(%yRW~%yh*@)EWo=DeV*@0U z6#K`>n>V`6Yqa0A*Kq%9DKN?aFawg)D~KuyEU07Sfj)#tj!Gq~mNx0p(@pKeFu29hrNaWfEcnr;ELyJ`cd3>icewIHcPvL~>{UY8 z#HZAmgiX3^<=|6YC7Z-$3MvzyQk$580pa!e^Z)++4@8))K^)V9OqnCcoKT%o2*KEk zuPRtL%6|aZZy&M${0<;L$^Y~7hyVN=2=NZsau`&^I92i~c@;AGlrnrZj%ibe4rzKV ziMv8|-m3)vJ%qyiQ?}3D9RD<_Vjr=6Z7e7YnKt;%m(#xzd>Js%C3=NT2{ny3V0Ni& zc$nXmT6qU&e0XSNXb@4>k1Tuh`gQLsJ(;Z2r>gP$8{;Q6R$oVFQd3(~RRzN;?IKzE zlP6f&cyXf@g4MnUl9>}I-lQFEdt);W8zAaiIzByi{kT&5WhTr7t z$D3MeX-14;&3@yT%C-)38X9bZDpFk5++@>z8XH>c;S$htdSQ?ZDAKrw5M?k}B*rIQ z00UhTWNcF6d!&&T)RZHwA@UpT7J^`Q-(o{uHS)A62H5!EAOI6xG+!goi!#z-04biJ zK`Eb7#1d?v4#{#Duh2Gy(#UnXCNP#W)#a;O+` z*cBSVQCyjF^g-JXk@p|spD7WXh+_iM`*-g=3z=@vlHo@|Z^Y9~eo@L%L?r;j0cP*e zWDYRC+x$esreN6U@YvXhX5mA!f&M;B80&u7>9@V|6WvJWolmWitk$M`)K^w&x`)rd zH;h^N_~Fz0cOUz8virA-?v>oq6#N^PFQUn={d)fD#dDX=ov|xqKHcNY@x!N%{&eQ} zPbUuVJ91#xp?y0J?%B3~*OuMeHbOGWotxKf|8dQ>AJ+ggG}(sL->+M_bk+9@S1z5u z(yx;(pFexqoS92z&0LV53(SyZkPMrdo?4KelAo5GXO@(gYSTS@(uds~os*Q5jTzFC zv+P-ADe1|{=@2X}D?K$c%@!2SOi#~Av!xlceIPN^6J6*E!+8W3niF`!kA$Zu%Gs_PrT70{~W8|F^f z{D*PNSBf%*Ijb~;C^aU4Q5vFrNDw?oilM{gD2IF;h=MOf;bZvXP@)l6sZ0QapIAkk z7-`B8uH<0SQaYb#L@_o_OfbU{&op! zj0Q=?Z2m}`DQM|rL@%6(YCcG)8=rM(9J*k2-xv-Fq5Z@zJMrZ4iNlhxsYWn1?Hm%2 zpcZ5y2cI|&n@YAJM8DzsKfVBeIJdyRL`QXLB=LOMCDRd=^ZTdwpbKcpK-cdd-~HkD z4r5xAkTkVSEtyr67)tnzi1X&ND;!ZJ2}G0-e3>?NCYV~YPtaWZ#6>CpxGfHKtk(OO zRSqq}lj9R?Mlg$&mhs82epy=yf=t3oj!nV!Z+>9dTmD`61Ib2)2W4R*{+qsDyPwQ8 z86@lKw5KEjGkcIzQ$tH#U2|J?zQ7yN~ad-Y>C*gYVpe zWY>$XUV&tS8M5rsxziWU0JEdNoH}ym#G#W%_8&dC8#}yzCnOWh_U+ufd+P=S+4fCq zO_MpvHm+H|e)(d|M;GU^fO?T1G)?MnOt?K9-c0KRqpfT5A4x zX)~v#+p>pA+4EEL7Nr#|PR(DOlDjx5dtp+h0W3LtUTW^VO*;-;x?X(sRV$=}gyYbPfk)gMv=3u74#z#L)MB0mFVGkc@@vl_#_;L8x%RgQFcN^amEgHG` zH2ukm_Y{X84p7q}5T&N=pJsSNKeGQI!IyQZ; z{S3$WFTEQ^XGvP95?YW?U#Xs2+UuQP7lC2;;+9GqJap|PfCUA{p?v`etNZ(J)@55$ zF=8nbef7U`CHUuO;st(uCn@%yKR$u9f5&U-x&n(dE+wXRsHk9g2{PVf;^9CQBccQ(|G3$-E2HnLy`7qRJ30Ao3PjnLN1(#t zd?=;ED1|g^d~5{Y1`;RrRkvFzqkjnFV^e;s2{{<(QmGjqL6CtlU?y1x#yZ>Ex>{@& zeq(jDrr@K-8mnvSe7XlPt9o)Zr_Zid)>$$q(V;q>{_ z$1a{dL3#G%VMzA#(Ss)s??1AC7j}5>cI+S|b4?aVwr$NimgMt3qLr)iQq^m$YqxF!uu{-2`PJCagc54C=YF|(idG10Z0mG} zb!z4K*0#?85LvoW=nXM*9Q}T`C=55?=hngG^yCME@EM zDsOFlMH(@HA>bgNb4#U&70SPD3X>Xm44`5c#wI2#30*27Q?v{0`GO#npZu}W+WgJt zci8izfBW$MqpwXxe`LL$-_t`cgGDnz_%RN0d|HRyd8Qxc-d#p%e~oC9-cThSqIy#K ze^X!@Fr@T}`?dxL=VQy~12F4P>1SyP*J`%l`In~?1<<>U(E#j!!yHCsG?Jn5f8?u+EId<3dwS`_mAK4IVGBkUOS}= zuLxbCk#L5bwn`$r;d1yC^yce8M3gT_IVxppFhr;;BO;4hcEK%yMJa<@`Wk>G6H<~> zUP^mm__QFBCB|*;#@GlE;>NRy@kyT&Y}(7ghFNfYY+`H_ZcX@nMVX{nAQ=FQFxK7G z)7AO1y^ZdTe$MYuZ8SmVi+aE?Eg4)vAN}msw&*)W*NbmlxpDQvwadR;KL7Ktznr>w_T>4~K5_B*;h&HGbn3{#6Nl^~8FtiV z*@4|#HO9De)4J^&*KFIcYWs%OTi2}Gv~tD9AHH9^Y%wHTy?7xcTd`p7a-a91Wvk}o zWEJ}8Vqr#FL3(NgFl1S3QVwQPEZMGorKaYlr)Q_70XJx0`ERW2LTr4Xq zKRc%|Gj~>Y!MvPVi{MlCti>4x3sQ6ErsU3@o;fQeXC5${ku_&V7XIw5dkwQ(!))!6 z?u?#*Ln>n?nVJ7~>f<{@mvzt|KKNs%-}#h9o0u{7x!{Ot=(T5@nKJi4OHGP5*MUjxn?-LVSF}zc!$%KFAKbf*-M?FMx8&B{lACvmuiq}Zdh^<^x32wq{qp%Mzy5OR z!kLTbPoFz;;w+l%)REIC4xK!9;Kb4WhY##Ld|(&l{@q*mZr`$J+ooMxHex$|T)%C@ znyu^CY+1MJ$JIYzYnLxwyL`#&?-wpxFl+JLf0Gm^8@l5;cCW@cv==4KV<<`m}T&CJa$$jQme&dEy8&dSKi&dABc z$;!*hDab3FH+#X-1xr^gS+Q>6vQ@JeF3+2{ICJ*G^qKQh^5&%H&zrSq`PSVBFW)G+ zR($(<$?Yq*Ze1(Bb-kqM=ADv<&z?T7ET@lduxAsu+U2YEj;0P{SX=k2FdN?HaoB|} zd!oPJfMpNU@_V){h%$qGHhAcFW!2lV&91S$)L5cM5f#C)GK?0QH9;$zJkg9ovXMPB zlj$&7WjAkGg~nzZ{M3|p3_<0y-hoqngH5KdMQ=ek9|o+J zma40*HmzkjuEUUFb{R~D4l^kR!)hTMISnTA*wxTfTi+M~3{VMRm^eg)5@v)*WbtUB zU=w&FfJK>ckWA7a_lOXUj~~T8GbhgS^$#G zGn7NAF-FRdTFf3B8yokB#hAv5F(%aojWptiB?8PG2Nh|?C%-mEzA{5ZIh62*ZbE$r zj=HTxQ$*d9t)mE~5M)!6KudHnl{PhHNOOQ$&@Ov?`FT!%r!Eg)ot;dZbfD~2pH9&F zN67U4oz1Ox1r`{FC^Vq@`Mh(T2dl!W{3?ABbQ>8%fzcq2+7G4gih6lUSz<&!#wqFa z1cPw4lya0W6AqQE7W9fRg4(5g?WLqaMR1g&{Nplu2|_qzQmTajDx5^T8LpgXii=fj z%F(hNn2jR(c!rrji2`UTO$8*R z6n=cuW$|OWx~ih8vJ5LPd;a{{<7ZDFK6!lq@gsD|-G}!LW_L@AO7Gk%xpmD+cD?Av zkuT{zx&X>UHf-!+qZMu z?(Lg)g0U?dwr^g)W#ih->sN1F`@_aHKdfK1eD(4rE0--=v2@|GMe~--pS^hAtc7!C z&YzV(cV_OK0w|SPn3rCdmoYOpqaZtdc7D#Bg4}t9`SS}4=FKdaQ;aN zdiBPw+jno?xqZF3_-awnwc;WG2D+b=zj$6%S<~3q(%EUx7Kv|9hFF+<6Ja)uzSHDa zyNx0uwp?=YOTn&zwfRk5IE}4s_07O38YiR-+!DiN+SOpUN0|Avzy<&ouk;jM7$fc@ zem3q`kCyV$zq-aoqnABf(w8x8L~^%ic#yqthmRQ`5vi@S(Lq!fYOlJv0d&EzD$T{H ztwF0%g*3NFctI&DM*#B(n-({8*#ILvvmrzYEC5C+k`WQl#5OsU03*N#ir}a;M8O_% z9AJWwc46Aog)~vez$4w}FjFKnsJ%F}i9sybBTC`Fn;50Rkj$=$VPn|)i7!KcSkPF8 zD7z|V)j#l$))kwGCF9?xHkB+siDVz`<}kZvCL=-|sAzAT6O9}yg5eu@kYWfXc;gz& z#slBKv)ju=3(T))SYPvQ%Fy!m?FSoad<#zOt}-8Tv}ckb!t5C?(fS?qXzJZCb*9=> zNtZ_#CP%%k`cMw{-d1;v8n*`Hi*p#@4gKA(-y z^>=#NbuXio;6!x+EYXMvS0Wbp5r^=#i5cW*VR8cbHRVfBSwB-Js;?k0vr6o5?Ze6`~{Svb5+NEEv{(9!} zg`Y2+J$~-YF-V3QGeLIv;E@A+5AWY|Xy5Jwdw1;LvwiQbt$TKE*|mMs_AMK>L9!p$ z{b3E}FY&{;UOaXU?0QH*a=6Hh*@( zqIt6x&z}wImMxs?s4JX5s{pDQ!!on-GBR`0({r=4^7HcM%$>J%>G!MGtlPAC>$dGX zckkJE@X(>7Cr%tYefrde^XIQzxmHwEbf>iB?%iU8bIG-vx2_iz-MC#WfK|{fBW`SM zTw_(eKTRK!Nq)(1XlZY5>1b)~Y;EhJv};|>c0(~3({Q3q-)Lz?mZ88J+YDMlS5t?t zu^T@+Sw5yAL=fflitaMT0@4)s!97%$neOGPYiz0pCr!5eZf#>rePe4~L$hu-t^-JZ z!&X&o4FapCu8u~e!0MVQ8*r){>MQGNF>=H?LzP_#Gwmf@Va_U=vN;_U)isqhbrm&K zsUz|QU;$KOm^LZDz$^h^kRzC}$GN4PKrc*=s{E~P@I$ls0dI1ow>SZiBc(-7xK4(T zBLWFOAOr`5P#U*lENN3ECd{xYQ$pCQ1Y?*Kn*%HoVe!>3EI=z5Ey#ghl*WemiipZ! z>XmTlUqB1}h(XS4A&Dqy8KVW$VF~l^AslT|k?QIJ>EqPjg_enggW7?x_iukkHYF_i zA^#75#x!P{kKWaO=G#h-)cx#_?T|sQgi%C0y82cfH$?1M9-*g}PpP=_F?II>fHLJ1 zWD_5N;S3t4R3Nw237UXp$`qfT5ZImhZGu=n9CksKZH3;iwS_uSC72D%!-@jP`mt zJ~BMvKkW4L&YY1E;^crU^cHn>G0c)3V1n83@bJipl|zHJ=HkG>z?;6;{jXlhz}V}T zHVePKtwj^@_2ZttvA(Xx1z9<23@dx_1VQ%n$pZ{QhTXecVgrnKfmzY*qH9?3%}ckg zU%YwEu9IE)^$daxjGZ}kb_O4jnjpXy2g&yMNlh3zF^Iy)BRojA5HM zuE92}{Q-<&YgR5>wPFbd$-ZAQf62l*@Qjj8@V0XKVs@=wvE+xP3s)>zuyn!P1+!-& z%Vy?e=4YknWTfWiWaQ`N%$qlF*|Ozp)~wsSdF#%dyAJF>c;v{DQ$L?Nd*S?rE0?d{ zym7M_ewCKqEiEp+ed~6~&648lMYnF=DY^IL(X+~O1DFl>p_3v7hJi6uj$md}Ia;Fy zGE8{I3t@x^rA64)-hl$EZ;8eUg9sDAOm)R(Q!Q+r+~}?>86S)yu76A$vFY;5q>|+{ zHr6*a>Cq?EaLcXQ2KOu(AW<=hFdIK~1!m)iZX6W(rS%>w>uShErI8Hk1TYCN%Bt#G zj8C`Lqu4NmsBCQX+>;x{AFvvKPaUPb5NJ9xJ+^K|7L(nqjQu>_#1?9ln|<`S;YgQ zC{+cMuXe&FIl-vT*@n0rwH)40r6~ai3l$SLNzkSu3R04$O!<87p-nlI;hR9I7I65; zh$MbbWaLw_mz^>Q5-xyo1SL?B9GO_9LnlVWr-)Lq19EUENq|5w$#wy@QTsPF+TYJt zoqt*O4`kGmF%onoOeGP~ORWtJ4M8sh7>@fxgLE%%hF-sZ)7?GL)6;L`iZ5Svcget* zKSs((rcST6rmCj8vZlHmhP`Ng5oUty{+&nnZ(}gb9fMLzHYE*|kgTJNKu73HoF1r%uw|}{Hvf0|%)zV?J5dCu6mr+C+NP{0H zynHxO3QXLBSOHxaC<@RLxA>4S#ck4jlRfpny0NLIp$T5vom(-w_#lIiLp}flS~hIx z&*!wuU_K$f(p8#JM{;FV4IY#dv1p~Lt{%N5tFEg@ewA18Evfy7KowYpK`$5<;+XIT zVBm+S^LL8@hEI;rg#jA@Obi$TjRIcGEujuaIdZ}-w3ieZCV+{2%A^EQLYI~g@JnA~ zwx-k=vdktWYJDk!Y}(_^{J~~{TjG$VIm|>L(a3iBxFrVymXH!tvV@mJQp6Q!47*5B zkj?iKwyHgyk$NR{G4wU~^el8+>Ym6khd#@fyi#?Yi5NzyW0?cV;(kp%SMWn5^p)xy zZQ3F7E53?Gsbf~)Yq%jUL{b9A_NnOqKb+r zNM>jXpZox!kU*(gIGPYoj;at;b(v~uS7=$rCiZ{LS5ODy1n?;_-cP0JjScp}gl`LeXiA&*O>ylNERtegOMJo!l!7P(6;~<1XfLHqnaUB0 zqPSg4{_+n5$Ho%l7ATbr@Pb1eM*uSsHZ)|ziRKK94)hQA^gYn1 z*{w%SXaG7oIoO#xgk;yRT)2Aa+~tdBFP%Sg{>-Vfr;ee?P98gS;^@I+hxa4Mq{)C8YHat8&5#V+ z^5fc#>sE?nIFJlzVK{8EmmGuN&aHd4Z{E4($4%>2ul?bB7={ij%*{fC7362nn>%~y z(xt0culaHFrtLd->^rdU(2+yOPoDVY{JCE*U%GPb>Mg(7tMvZ8;?g@n_{N>$tHn2A z*qw*>A3lGI9EqXQD(&UCiso*JVQiwnnrvCZ7E@g?%te@KFH~0?u`6L6cE58#7s5-v zh=qYMS9`YCR9XzM;0RjcmWX8#a)8N8;4Oq)~zQNohxEk{(~mKYY=rwk0UM{W)b zOc<7i$A<=uJvM6torI`DfdMBtWRt1*M@T~AKg(dyOCpRoxK*9lFzG|Y;3%YRr(nd6k;mGX5nE$Sq zse_aGw2Nrvg%Gq3)Vp|H^or&*#u$@h4716H-l5Y4QyML(OFPCeA30=`2CZeFx zKOD#o;lQvXIu+z7g25XM@Tjj>bt2lUO&q;BILfiO=i6K4uf=$rfHY3{xBmeuj0h$& zsT~?ov+Pw}d-K`!OM2|`wVQdd5uDikat<+@_1;n{N3Dg@BUFrX^g@*8@#u#O7OG>! zd3BToIToe8Sda6~(XO|Xe348SO-)Qt3TBdG`ht;W)R_>dqUnXfv}qM$2_+}drxEaj zqY{8k+61U*l!AX9{M!k*nuse3T^J5#%i9kQ!YrGvh&wPqVSDYlxMuv&9O<_!V}mxb zXe0|5qtpT)jxqW`yIkT6HSjyWTqG+mds^}0@r$Pq%AP%hWY3@6eew`NRt&~q0VInw z*^SFLul`>{rt=6<7a<9cKYNIFoqrZX)l5dJGgJBWEp(gv2|k*Wa1gN zb@Muc>?Q5szFkKS?)_=+&I7x5?Ag9$%lfsemoHnoVD9|Fg4qSRb7mJTS~UNMAAZ=d zVdK{ATXvGOZ_iJMe>(Z|DFN)-jq4@1Z{IGx1Hej9V0UicC@H>PTy*PB$(@G}pfu8? zuEnQUw6!(+nuozOcqps0#V?}i?9q&NA4Sw~qOOD)+Zi2%byHLSLw!IsIWZ>p?C81aFj!2H^ntLczjT~l3C>%)nBob`2vD;Hq^ zjM8rKvJ0WLRn^swIvX&g0`*;ifh)vW9cJ{ZuBkwK@t-<_Sp+cYtw1cpRXnGI1n~*q z5*$vVh@hfc0b>@Ie)3Wl1`nx-u_*^r0?BG8uu3NoA|japhLNumm>3$EvL~}dcdDV- zfKAYCI2vpu|DE3o26gP`WIPPWKT%3HgNzf&tm=Sz( zI1>^im;^R8!X~w}8AwL5&KzHDq6k43+`=)q`r#<8Itct|t14TBe1acrFV$6-W^uw% zf}`p>79b{DMV**ngRl3Qh)QeZtu0Zgy;gE=@y%QCNEIn< z!++MuXa@r@l-k7CrXnP>Nt<%m?=S;w(Jl*4PLSwTi9j*Kl8{3VCCI^{6l^dNhzgX% z1I)C`>W+@sG07b0POt53zx56xqkCT@$C`=n1&GV+`d^-e50hO z=+5o?Po6%ntgLNns%vi1(~X-DUVhs$X4Cu(U~M?A!)$t?4Iw(QpbZQQ7r-zf%`Sj7 zx7b{X#(Dv)CVoJP==B$KfNAisz7aSfch%4M0&>1e34XLZ(Am%}5Qg;-sM^lYdvud1kRu*+cZ%Y{}X$gs-lDt^ew zNT{f)RQw;(UYJl6QOfTO6We4$8cuX2%x~usV3a0+iBbTA5?`BGAQq8CUkO8RdTrB< zHUW>Z%6%EWfJ8o-Y7?^qX)JMkcw*ED2WEsZN~mMXDZZ#Cd+&>M=sKBQD&wE-FzU@N zq+x+xkVCk#`(XU1sKLy0pcE`2K{-U&iw|#bC$>`zHZ_$Vo z<2Ez!{X0Da`r})>^P03^mhTFWX3g<2K$O$x4{v|_Xth4Qrvt^Td$oQw9;@`e)pB+;}BGX?pQF<2x1&Xopq>-FHWdIHgy__6d_K@E;dzB zn^-t)ndQ)IY+6r5wX7X97TVD!Rhl+6HTmI7LX_ie|y3{*OE@hKn5B7mLSKduUbty$AJ|;G)h$*67+6-|aD#TG^ z0aR{)2Y^AQF+Lz6($R(nfMaE62k)!IPIAbG7 zD?`-4z!*YmXmDcKMAcZl#1y;a$fwlJVPThT4!p61!G2(-ObmwU?y>$iuQjfyp~Xa! z#V~8}=^hQ=X7SA{Hvj(m zr5jf-UcGbJF)ZF6qYPY%aiNdS3 z9W52BsAjwF)%q9JWwYJeIvSc=WQ{FtwT(>}a7rW=Ehr*W#DdLVCTQ?RJCER#Ng#KO zSO9~BAg}-l5#RKSVGUR#WmSD+bwg84V{=tqGMF5H0;eKl6)#$EuXBStO6^db^4#`nMg77!%|CShSyd{QK0m|r2o00vM|M5F;ua7Cg= zh!St)P=+gHlybr@QA*8Xp?$?EE$Fq>V1%Xd;W0KnqKYJoTVj|wJ_W=l#5A#I9k+7ybgfHZ<48K#Qnc+Qtb#-od5pUeQ*Bn-p< zV9#4|)kS}8QVid!1QWVsHrFG%yZJpdvgw5`suBSfdPy95S^ST0Y25B)2rjkR;?3LleEfko{7?x1oYP|)? z_5?K;CV&w{Hj$un3(0b*u9CfGHp|9Tkq?k+nx#4NJxC;?pc>K3!PLGsDfJc!V9qe( z7LMc>r71Uu5Xr`&*oRN}LKH0!3`QjERf3ELFr<_iCTInu0Uh9F8!o3{()&rWC#J^u zwPYiZsz^y@qOV=psLvxD8HQm{(Ee};@~;DQQQCN*GfaFEy#mZcCY!tA@=GuyqPWsz zY=SNn7$v?og|slhh|}BC4a~Ya+cm(5`E0n_#yWbuau^25V3^snN6#PMfA--1>dl`~_ewZDH`R%@^}!v!SWQ?j~+(0fZ2)uBq9ktvk9JeG&Q~!UDat3BUkG zOesnj^hJj`!^{LZaZV8h?c$bS;;N~yudat-X4Unk)y!%DPBmpM0COPuWvpuGSOv>! zt1D}(D(b4rYAY-FL~AN5;29M2x?+`}g(-p{lP0qvL;)#)N~I8@T|$@Wg26m|(E&GI0~^~&NMsmj@dPJRjILlr#4S@%fn@B8OVeKQ%zN9^1v6J*Izt>A z`Wv@LVv>n7IWi2fz{z`?-(gNrU7#WWiB0W&KMqS!TJR|Xm~evQdkru+L}&*`rWU4X zWNZ{Z*~KkiR>}qy^;j}Pkz;AhTYz))Uw)I8h7fI+Uk{VoBPYUG!gwR%;}07Qv}cLA zXpkE4D@NYQ;AiGKOr#K(6NsId?9xlC4B$u7Iu(r_{-Zy1MQKy)=YKgesc5h(T@_VLmkKDpu{l zFgyPMDt~F5o>hsZAwgg6&t9xw-ZSBay?Z;3K`*uQn?LzlRrKcIs5)^>aep_aI0$b; zBDcIA5jG=bth%Z~Nl?Rg7@GnW2{LkskR!wQ3tf@SdTaPICTWvWG%_dQ>et(`iK)@? zx8%gkGf<6;I_jc)d`uJ^2U~28qRFE8=aE%NcQqpQ;d8P<*(X{v9mt!k*Ltg9-= zs>`2OzIa;s>{*$wwfOY@{U;CZKE7Z2@LtLNJ4JVI+tMDGNT!Qqn(lG&+|OvTvp*mE z`NWZ*j~_mK(5{djJh*e;zHJ8%>^OLE*Wp9^P8>gk_B#K|&lk^~p}cVJ^trP?pE`c@ z@J|Q!?cTX(*Y>@8b{;sm@942(Cr+8_0$t}XUO;CV9;FQ-y8Oa< z_~gm+aui8}4Ib(-UAEZ#%a#tCf@l}Ln%f#tS8Z*!JV#3lMjA2;bO1122E%kWn1=H3 z>yctDtpKbx1{I~|uZv^>WB4^%me9%M_bJx_7!4s}b#_~z0rJ8DA zKfbEIq0-jQFx~*I%F0S(7keE)jyk_ZES`0WrnW&vzc9wG3J8_JEp6Iu7L^rpB7i|7 zI3X1kh7Cc5pf&jV6`PPi!H^@gh+8-$C?{~sh8bg?S;Upo|8*Cp69{E!P!{NgPYIA< z6_lbP4n|Xy){eI+o>9fLmpc)0w$htrkx~BwvRk670j&IQbG)^mL)0#niD{ z-$|TJ`qoL~mPFVGpRnM4Ze;3J<EBSG!x%~5M03v*(zrMZGu+7(cL8^f7slM=ufg&a0k=Whds z2_g)bC@tjs7~nWNg&9z!(jnyX%X8qCX)ods3v}7u@kvJ)WD2z~9fx3u%g12N*x-O3 zUSU#fXvjt$V_XS5!V(T9?ZsxICi`1X2nKpdicw0LA-`~9j71X{Uv_o4wZCj{!C+WR zL#?d2z6O}pl$BLIe_rwQDfZ&Y!>14LVPNd9Q}Ays0-6`rPT0XHFhF zdF=4<;|Gr(-FNu#-Xll$9XWj9j+{Dm;>_7IpzFe~7cX789MFa7(iilK09J|?yCa@GefF$^{<#j^e7T*=$b_N2 zTH5OYm`#^QctyruTePVGkVUtG=>izsQrxCt;5WC{HaFF@*vv*iC9#DiZdU8L&+!l< z*4W%AdZFcj8GI7kL@Y`$21PLV^tTcnhW4tgYjpD=L zrAfEpL0>X)WNOqz7$$D1l!-m^i3dsQYNQGkVbuUEcVZDY?msw-e*`P%)nd@{VLw8l5$LF138N z2m-}~*OVRQ^9Q<7>qF^J5g+P{KT?;b?4H@EJ0|DtR5XQBIh0-{GR0#*BB&y2+?w^E zAt%1jr3Q&B0U#+yz)%oBa=eyd%%vD0`;AQLEuVyf{L&On7-nympOva(i3d_dK`gv3 z(E`b(>t6BourJAS$Pq{|y}I`RhL4!Hm*c*R63}5_(PgWpPuXNtQ)B!t_~?%g@Igy! z77itvPJ_lxGda3+EOt?T0g^Kb$k=0)fzvoJGsD45Ho4h)h9r#HickXBI7}KIF;?*h zy$o80y|EEkWl~HQxE1IHfDl?^R(*JE$Yyic;NcMe&`g(MHb-OFC?x|(ltE*OWD-?F z1GYSbizU9Y>ldR}(C>T2)qXzOZk z>1u0kZ)wC@>g$?nYZ|Jn>#8biD$B~BKPi9q}JWWYehE@WS4BZ$E6FGFP{4qjdk|tvu95HeCp_l2+$B!L4b@J%hGbf=J+`4x4 z*DIGV7{h+O@awPVFI+fx;leM!LbXd5f4%%G=(>LM8g{GrW>Lv4=mom&J-C1W;RBg4 zCZ0Wf{OI|M7XVDM2^6)ocYv~HzY=CjtEJV~Hbk8H`t&Wf*dV!$O~_9aShNO*kVbM{ zV{=_ov!*E`!s=R@ZQZ6=cwzEG3Bb(vHKO2?n~fRzDu{+c;s8txV=v&raHPh9HUcL` zBO*1R2#le?98t(F|BEhzp|oQCq^2-SLvH~vcA>Y7Pc{z`s%u7~phZO;NDlU88a>#+ z4}vU|O29D~xUq>c11AcqWRtiA*6=`YqKyuLvA*Gf9`**KmW;XqTC@;+8VtmekKv1F z+Qcyy#*~6dLX;>aZY4UDL5+DPI&5^x{*gzZ5~2cND1|OjDgca4B0ru|m}qKT2a-cj2MWff4jPV&141ZuKB9{f z@S_}m!j9g5)3}B%d!tC;ogv>#TChu2r1SnkCG+3gI~j5?s>p;WwSc2iCe>w&?T*Ga z_C>wnNTNlXx~%J8*8nh6U}Fd;Q&&c>csimTB_4_tv`7%Tz?c9Acl^TGFmZy$p?>}$ z_m2(^7|#az{rUzIy_`%2GXRDS4Gs{4V%X3?1TacVvl$*1Czfd5{2L4(CH4k;4Zw_H zL6E(IVgF;ght2q)KW}NW)v6k8@dqvNQBiL9lRba-=;@OOj~_vkJF@$>;$m@0@r~l5 z>$h%Ry>b0Aa1x(>y?E~YIRw>7*|}eS4)RMm*RK6~)$PjFi`TASx^eT$jhk12*3F_D za0|O#T2gw?gqOJW=*eU3!6UqfoPp@|^!YRO<}j(LrKP#muJXYub6Q)Qd@(2BfuMp@ z7>+h&K*bihXl(SgoiH0nq_l@_HMP_>HdR9%S6Y8#n9wEp6#yoKOdKMN7Gn6?r3huP zfR^&g3XIocHx#YBtgj)v{6@E6-zE_ioG>;HMR95Ra9E0 zs_1a&FmI&F6c{uTr7$^^e}kDEa6%kkrPw2`u!(PtkU97o16@P?JrZONEtP%fFoK~? zm6%%7QPi3ul$ee}NksI*Oqu!MAqJm-6M{^jQk+c(RiwIPqzPdBg!GPJ*cj#l3nT>j zC0xlSe7z4$yD-6nQdN|I53azB40=U#_hVlU{T-R=_%wtFazrc=D6zzfZzs(8FlBAh zQyXKXz{U)LpQeaReSlu$6Yps@25Q7GTOHV|V19?0)ELMSoDdxJUnby49-qK)5MlJN zu1M&S4P$hviGykM<2VEZzErjv3F~)wzgJ{7DcV+`+u>pIU1h0V1D)hf#F7fajzg`oKzfroV9 z@eQ(*)uC76zw1vPZ@g8DlFkn9t>`gfd^XB0H`Es^?Llo#%QsZ+6sAVc+O`}@F4`Hj zZ>W@g68&qNQZ;RgoJaKd9tgjxujfJu-XII3cY#uhTI=*{$=v5PipE6L+k`TKC#H5j z7Jl85k(8#KjB`d*pmQ^wq_&7)d;n;6P>M_>T+KXK`bbvmZS9+QApTAmN)MI*K zyj}u~U#*~5R6-B>fb`vJ{x(G3>nB&+9mRF6rL77>fCZw-Q9Qo~A-*-S+f9hU&mYk3 z%xty$#gKn->7_iWPUG|m&JMcU=5&-)NyEFc2a7)kh^nQ@w@z9|(C~d|tiCwD;m#OH zvf$$oP>z)gC{D&-#%jntB&!>2h!~4e2zY>Jjc2<;6#qP}t`62P+gS%ygKO2X*+x7@ zXqzMwEMo?!qgrB>=VV!pk(RUzK?KV!#{(Fb3PJxjbv)<;V-bwN#UTa;2TrQ8dHCKt ziT>c#-n$Lt&hbO+mfZ13ruMQuBJ-Gkb*AHE)8(#X!KkPIQZWN$qUi^WZA)pxjAPW(EcqY;LpcfR{xhnby!K5)2k7XwA~V5tnL zH$FtROb2Krb%`(dE1JMLEfzzMp=U z99VdoDBq#6)@PvWtqw7ysQ7+n%#e3F+_0p2XQk%zoMJH5+Q7eyRflgIJfWuMSjqiFfCmx1N%H<{Mz(ISY{g+>?yIbgu{JoEZ;P%omy%q@;cIFSo^1W$qatE!%gi;l zkNHjy1Z?yGtn9Zhwvg7gg2-JNS?T-sB$2XG`9eAgo+&&+aM{wRf5cr;Td`{IS0fr2 zWQg-tk4jPldr0K?`*4yQu!g91A1L!%8`&38$q{F2eE&jiGV+6jAK?ju;o4$`QRLtt zvJ?jBSBdxXdVlR^H_3ijm)58)~A{EYwiD!F5hG&ER{O^D|QW>Jp>s(ydsF(jcZRaqhGJvnkWE}*YfrG_kH02 z!c~Fx)T2-$JST0mcCewb6_*yvIk~2n;Qroz4*>Mkx$db8xmA6Wp2J{(v@0SOl_iek zFl9Daheq%OZ3uJ02>Ait#5_YL2^n&)8$$qz%@7xdc9<49pY^s8d4F_}aL?mqS&y{y z;@aW~GuXdj3IA^oAEJ-xD2ZM`rWyTu)flG5*mlO5pEsh0VOysu#MITgK3e4(ru)yo z;7rnH_&Y}!>P^Y6RU2UH#b7?fOfaNKy(bas9?mlo{c>zh=?uVodrWN#^U(1Y>~mPs zWnmj{+NY5}?1|zau~`h(x%?d@16~?ish{f&?$?V-*`UVCEkp^c zh8o?^(;5{k64qjRkwp7TX{sn8TR(o~C^J#o(ggOm`PHU7wIo_$D2Y;bS!MBg?e#gW z6(=eH-Cah-{(zp_pg`Z8Mrwp15*M>>QVmv$@tR6gP1x+EyQ~h0nxpQ0Z3X)t2Xx?A zj{7JiX;vEE6K}W~1?5u7P0NDF5jvM)DU`VfG~KIi{!}-J-cwaoYL}^;nCB0MP?D`A zUTF>bakis#X?}S?Zr*F=7ct^RqvD;jy7Ya?8?2)U3i67G2!Y55e)32Sib&Kvm8D#Inc7UNrO>z{um)#oX44(PbaAC4YXg>=37swtWSsYlX>H`L%DHjwsvN z$UTKTS$iUEj0w&ak_l}m6GAMTqU<1fh*sU)sc`*yWA_&WyJa@Y>tPL54;LQYcu|6R z?xf5YO$AP8E@L_v1u{U^yO1Qi_qwM!uegl!-l6HQ(n0GF82dsIzS15q|PQ< zzOl{*T(Bom^4^GoO2p%{dM7%)xQjXzo`nQLHD1)Jtd&_lysDWRr{i;wlH(T${QXq- zSY9&{3Y_E5Jy{NK(xokr;U%T+41?l>{$;WO#r+d*@1$fn@m~8no#q_<2nkRykX+N{ zNt2G{$r3ESTfio(Z>1j>oT;7bZf7m4Lz4CNgDV^HJ$Ef$+gVr7fqbPO)N+@b%r~*f zpk*24jAn$heoLxpb4Ptro?e6~tB~FI!clQFDG3s1!CR3h@BO^lnw-^dwt@@gK^yia3YN}!pJ)J|0BQnJ+1x-Yq2yp-+&Fa2w|D(L!(ZO8!N7NYBH^4pEtb= z{YN5gm)&0re(I)@lnwtazhMuzI%Q<$N&q%T(&_wK>l9V-9%fF6w1ZT6SPuFd3 zMq$bb1*_FAUjmB5_s_4dzV5$n)uc3;CHDo}Lol#`K6h1Sy+l20j&?qQDQd}4a8uek z=vtCG8PYYsZ6bSQPm6qPx%hDN$T<=>&-~<)Dy&hzv#}b6?z6zAxT_~^8NYxZFzPO; z6RS*<6{IkiS)LQqNED8H!VJ7*(yGN88maB2b;#J9Mbx)L@2U$0u>f8cM7X*)t%O_o zRn>MZJhx-&XuQq;sS>bw>Pf-iTxsMh0Vbmc5)$v?)H$}9-9AQG*?-7|$J{JSjZG*z zF77X-?%Kvwg8-25hz#}^Fep#2H7~t zJQfQhz0%x%E9qujTuz6V>MT2mJ=%2rCxCCMqSVlQ4qo}LeEKbQE5J=8|4QkjhuiUk z4udno_j0+SY2~vAaJP3K-x{!0FI(BCa-f(6s1BDn?fiOjz|#VWOCrN<{3+O!D8@K) z6)nmYIFsv&)e>P9=*-`-c7Hu5C9}V3(|rYESFpVQ(r|#hdaIFTq;$xGvxz(BWo1oJ zb>&NJCZ+@qMl&4mk!wk494?6!BoJ(e^L_Ye`zwZM?Z>0^dvVv&gC0EeYgEr4X=b9S zJB+{u9Y$0DNRuGzt!OI+Ut)a1z2E^ZdD9{`7Gj48=FTO1=7Nh%$@@fI5k)!rJS|ok zO#0w7O6o#Ya~kgdMvhcehYfo+s5}XJXTMpOhkP9a_OsGoNRiPABzjvo~$)Ium!?T4mx>6r$yA7k49a%}Lyu=M$L zMA}UJXH>QgW=;Y0y9MTGiJC?ZS9@ZC%^2({emce{!CNrd3~mo@UalTSLR%U(G^&vEBY^ z!YoIW!#;IUo-g6!e|&J2DlwMqG~QTDhdN6K9(IIc+ahbG_B?icCxzmqVC@tVA}Sme zd8Oxt4ykXB8T)Q8TVHK8^>MP2zfu14haI6CDv~8-@h>kTE_vv#th@S%SXb;lDs=N4 z7S?9@D4bNpbuL32Mt^vxsC!@u6$~s6lEA%bvMHaWr)>l3Y*sr4Lk>V7YR`5u*MwFuWIlz6CSo3isiV`&O&dYxy)P)Zg&@T;J; zdsIP0LFT0%Nc;JJ+s#76i5;#iu8j^`m+U(4LsfYU7dDQ}VzqFB6eaAJr?+l!`6n9vZZ+LhEYD$?&_-5W;hELG4YeT?7|95tT$ z?xyhzIH6qX62-Xv`(ai1L}xkw8<4;wd;)O1QR}0sR!Fz`%yTpDuO+xwN#6aueEm5J(xZQa)oEsb^>1dn&=% zU7Mc@sK0)GdROg_7wc%p-)FntTIbC*JRXDUTIK4@>XHhh&CE#?5r6aV2V5L+LH6q> z$J+xtPoEvXo#9^o>dUtj8d>(|*V>ySJUNKt!5cPmpt{I@^IHo^pFmn39~J6pUBF9% zcrl1~#G!5{vZf2m>o&#k zP>lDVdFx9QwSt)kW$1$yT_fMg1{I3s0_#mkS={X0Oijk8Yh`U}7b@${zVcPRvhY`W zCN#hdGgDq-(7U$zY)8QUuQ!4Ypq^m9qmn<9!m-%r7_VMNP{4pwu!bCXh}_4T%G6yr z$<;H+JLy@5#yj_@4#E%8LXt*GGXz`BFAq{i&Cis@3CC1o?axG9?c5Q)FdOY!$m>3_ zGQpGZm$#oDvy+y^-Ku*`*e#E&uOZZ}cFT-m*VGfZV(i7~qbw_d-x$H4@8;a5wP_+T zODlc*asMw`Nr8+%QnG6c`_*0i4=c@B|D!S&C ztkN@qEH0NB{-2tJmk>Vgpzc8#JY&R@fkpIllV5o#VeFXa!PKPxTwinJD}dmbZ)be$ zWK`i;cbN@c9PMnPws?Um$^1Q`7=EN9xD(dy9lqcW2|Wp|;+`uq^@4>$Clvp>>kgqx z+f2vMw4zwo6x@Ba)29x#-8B+>res5MT}DhwD+QdKZfsT1-BJ4QdApChCi$m3iXGRx z#{_6e>M-TqY2ivSg=f9WQz05tn*2Uw5%TH9O$6iwfTuo&7>4m;SJfV;lbyf(%^M6Y ztaf&)b!)K$@P8me`YuFg=G)pvsJxE0p_F_~htZ3_D$dgL=rRvi*0$^ZW z(Hb(gfP1rByr=e8Mf%QO1S)tdpWayEc!Df+DY~D3!uQ@CzM7Zj-3WCfeIQpFswFl> znq9TbZ3vKBB~JUbg*z=ziWWP);goIc#=Rw7J1q7H$M#N;cP_r+MU{t0F>~_k_ZTb; zOaZ-#t-qNroK*1GrT|AkEvX%~1T{A&s(_!kQz@@mpP%Yf6-T)&Z$Obu-Zs^In!WVs zcYS(CDoh+YcHQ;$lqk{ZC@rMh%BvxbI!(O*n#;E79{Gd8(ykzy8)cE~{XlP-@%%7I zG_re1cI|5s86Imqfn*g5(@>_=BNgR)M#S~>O(BO9S1ABS%j-*$G!h7%e2*U<5G@)c zatIAprU;6*!B1czTRMSUkRNpxNgD`NmC%q3clE7xo!n>;iLPwG1>C7C%;skLwc)3y zyJY_%y-z>H+^GN(Ohne=?ebYzLNhFgQRZ~s%xuTv(co`pd&7LWAyq-&tAmYq7O$(s znc9#7I;aK!Qm_t>lt&>5z@`*yVpyxl+MVyuxpqyzBc)I>D_iYx#@#pAwcs*@V{20P+a=Ws#!mOWfUHOdp*xoE62&l7}Sx z3hDu>GIEHZ8ewiSy~J5&#H$l+=t{1*!8>#;sIKU?xrCvBv8D7vbild^+-Vn6!lir; zIYGZUs<95+ldQL`;}yA6pX@$ArKU&GPzC(dG|i1EAdMII(Pl(jxzdw4j{zK>BH~t} zlH&O1L*LJd4KiHM?**9 zslw)z|I^GkeUj+hoW5wghjG%a4N>+ho|+u0o+hCR1DOu&=8`vUCOPjN%N}mFm0Xm* zq2Z#kGHBj~TL7XBjQKh#ubN!TqY2JQ- zXu9{0amShA-M$|h!9eV@*ZvDv!ntmV!D58#>dR*8lveL0pa1HbKPF_H%RVMvs}NtY zm1T9!@u{m*eH=UU8vXFL_Cw#n@^4MfL-pmY?*z$G;B8(&>&!j-D_qB|LcyE>;hVVE z@XLT)+$Lb6!BgN2(K&sf}cHT<3*jSn?$ ze!+G}#w*>c8&w3Q7H+7^NS`+~TTqYM%#$#BDS#CGa&;^bKo!}_Y6jXiS|pMdm0;L`<*U`I$_%! zpW?)zTvoVw0e3ZhLMrKbDfX9oQOS!4lp5Bz`z+2eppAupL%qsO|L}WbNkTsSoSqq5 z8yOSd^Al0FiO3R1^>&?dyNc6pRhk>C6v z1F#cGrp_$MSab?yy>v34I|$&v@*$|1-yVXjT*A7uFc|g+byX@lTd8f);XFcj#^~Pf z21uKzH5Qc$>a;#jFqHn@^Uc7Z+n@SF`6}0sq-Whs%tLRw3tBcFP7RJnV$L7xy*Yy^ z$w|I-ckh!yGGzUI))+jXg|>NNY6aFi46{;j%)^Gz_zG@N<&F)wFY!77qmYWH)8NkN zJMjPLVlMa_?+V$LP$~BnDSRxQB!Rz01zhr$NaR+5)r9lu4T0+G^#A5vV>gJd`B^)p zm%IK=Mx|;yu!!|3zttyWYkb65J`@pQq*h;Z6``E`^`reFem%qL?_LReZW!*(9$ zH+@k=cxMeDUVf}1q|nAqg1*zzqudbn^tM7P=}8}gTF-!B7SR z_U4k}^7qBn9iTX~hh2raXS82hD6Q^WDY=L6A+@grrwfzQG9bkGJWNg$ES`fr$cC~( zEBKPK1mMtD(<|mNFOBkm*VZ*OI1|`%aQN8Mr{hoeip<}%)*bO4+Ep>kF&IRg3u6w5a;JI|9L4VDx3=t42ad09Va9i#Mwyia6duw!*oGohu3kA0{lzwwX&qm?$!Qm{_(JdCm4nCfwu)UWyi|6l^TXjRaB93Tis9 zgg5w+c|}BX>s7L%vIhrV6vMK^5QGj%dpc#Kk)mzx^MutV z-!-ntvn_CnazSY~5Kmb>%@oGt;(7Yx0;?w_IUxENMUrvJaYSMj6edfQMWeZ*jFXNg zA#*qlLHXCW4hY{J2?ZbcPX=;7L33x^jx~ytL=b10W`<;an%X7CDhjboew!jg0?ub{ zK^D8Blk0`0RHF3hoFrCG;^|hh-@DTbkqZk8xI~0A#l3h*UppQ@BINBC?5yMY7e570 z6QLswUTN_z+cZxJ338^gyN60+noQCHJ?dJ;lF>&we%-MYVEXB){MCjI}8lUQXVc0mh z#C$|1(fqe=eqSBQor(w#=5vE5WQjK-Vk*vy~-(i zoTpmxxTFq@KZ6wK{8Iy)MVM@*O!f@UOOj_CkrXg6M@Au3e0PEj&3Ge?JGCA%%JQr^ z^MW-5Hk{Mnf7$1I{!?74=@*FPBS?%XE>D(2p}Zm3A9|m5NHs^O+W(Lk zYkPbJCvIS?OAeU)TJSpN*rF_kfzt5F&y2X6cf+M%IS1`(!fO{o*&rl?K zr%aor;{l6UcT+G5RKX!XPmu}29%~g&u25DJ&SfLg&(2QIi3GROlK0GBwV5@=XIcK+ z`t)jrgSUh?o19FD2&B2YX>lRhPKK8&ahd}=t$=80qt0Uh{65i-(>Ak*^?kj1Tz~Dg z*fV~%%(co`R&PE(e+UYC<~tbwdikXcugsvQ_C=lgr>rc`2YQ=_3o<#9Aw?a0EX4#ERB^FOubEnFFQ|@* zNRJs$ij3t%ywwXrx#OgEk$NL&ZMI?9qsKM-7{XCS6HH?Z)Z?ZJRZEK*83vfS4+tIn zs^Cr$Dp&6OKK>%u&Xn!XStTWeNY=Xq zrqmJ%euF?3swddztViW@%YH0U3)Ek$OU;H~H;XA=5=XG(<}&gjm8K9hvBD4qq{J@o zPXNs)tq2z0;?6YJK6RA%e&PJ1n$Y+995;EJ13`H&$!zTImvclqno3`w?GL`Dx%CZ> zHi0*go_~@bZ7nFSd}DXW9E;=izGeu7O7O~QKOg>iKX#2O-LG)(_<>Z%H&iGJ(VH@| z{ZesR9qtgKR~f`IFv>ejnztr+khs^Tc}n6rbAOmNI6iUN48it1=2d?}W$31FuIq|@ zbrbq=fzi-oyZ(=>AxA@>)lpd1t#LK_Czof)a~;d%=8$Y4ye)OO8- z-sa%lZrf4ud3IJdwx%KLVT)%~4^Qwjh$nQTI@={C{WN2M2pGj9Ig_&{)TpS(h@% zepsJw>cJ$DgIhwq>=sk*;i22Eff=t!)I;RZuRo3?R_i_`p zH*<4)q|Z1&@X|_kLLBz*vb119d_(;6%M5swIG(FITEk57x6z95O)`%OZ7XqVpBM;K zr804z!CHBLxH2Mz=k^0ABE1J8m5`oprWlC1Jz$AW7sr@>AgIA_-YhE>*H}xK6FWy( zdnKM)$gg}3rTP4IvLVl~yeVXcTXJf#&a8xd?E|qC3DB=tCS8)9Qgg+i8-n7wjNo%z zDtxI+K2%7|$Iq|+jrX0I{{t;rU;D8EWriU!Fl9fThUg1ZAx%jwUnpHg4E#>1co5Tb zO_jcjcBM+yaW?wJ#-ce3Iqq&yIze)a54yX7T0bT)xs0)+GRSHnE4y;KEK-5o$7P1^ zl7f{X7;b3sFe?3;=()x2l>}duJDS*SD05j_IWpPsQ++pv&%f){!t_Y42tbV&&+EC` zV=IN^v3#v6YP9FKX(Ac567u+1%LlVsuJu`{edy%p~Av|9ATS@Uinc)Wgr*G zzVd40u~mwMlD1aWcV^8`EWN{~EWSK}$=DoT+8+ zM&R^L5S+si*FM%i988`brC<7sTMHG>$R1k_C5xlUoR5HGHs+s%q3%f9M`W3%G2Yc= z1+~S$xU0i5!_b!E_d3y5&k9EX-{9jcO!Bby7e?x*DT&KEy*EAK&HWjRZfVPe`6;6bg~zYr2D+XmmJWDKjSbQh!b z&lvuvAKuLWyDHn=0qh4WY$jdsGHl#TGT1f9%C|^XsS85ol_~A+%%*^eRDN5arvdqlwN(yT=}SAWHwxYo2Q`O z+TEDA_hMJ0;g9E4K;KwXYBUjl2{jY8w&4|zR+Shgp~Kn7-O8o-G2QHf#5z|oXZ0!0 ztoR=>UX`COTMil5E>BCCmcUAU3MuI!a`GLTdUvLy_NphROaU;1IPSfxK9=(+5#MJ_ zd(^YeyIw#8;`!Z?AR%L+%JQ_5#JCrIbMk8i;#)E08<6^xJ=$pG_0)z4y(_x)P$a!HJ55hE2Yt&b9USA&ynLc*2ONOTJ`lR`KCcxtv6>s#>oew|lGVh<*3#4}q_JUa5d zHAqJ7&W%$5@fssF zh`Hz{K}IuT{=_!;!k&?wz}(qk6c?&7dh}^r8P_tE_K0P-Mo4PIjHvBNuvr$dZYkk! zeV!}cnPiOwv6JI9+@h<*Xt>6ti)`s5w0)ibs==edd@Uox+p&5!=5h#wkzUewcrK8b zMm&kU_;Oi!v7JEP$sn%{&;;pD9ch)eqKmp*(QTGAb78i6voz4VS{$$r-GwJ)v9QSY2DqFt-_SmnC;B5 zjEwS+9}QUbJfAsRBtc%wTuBMa{8KHvS5CN}Jf5H2j3E=ub?2T+!2F8Tt-t)Gi*>(I zjYANZ={?>7VmG5)+C zm;peJ6hR1kBxk^Wfc%%=RBFEQXJ-lLEcN6VO)8LPW_v`D`C3h|A`c5Jc6Sq@Q<|Jd zp9a-CO;LA!sjki<1EUjww|ohTIn?JYwwZ8?3*1|xZw%J3hBsLmh&ZP3!G;bxLS$)7 z(>$fqq5;$z6s7GRQMVqrIa+DtI^oehC-nfouYK990v^Pb#L=-Ptri(*)YU)?282KY zr%$F=UkjD27wLN)2Y6Cygj%>*;&g({xO3cR=m(MFCVgM$ zd{-DxrQgRjYufmJq$O(+cc;4(ThMU_DROVjDcA}_n@9$HW*wn&9W>8X7L>mvLJ3lChMtuM%j9?6o70I$fbE(__)zdXk=Q*6LSG) z*_R|e?|wH-sd{;>L=~69D9CKt8z(o>wEWOM`9}=^!L#oM_6(Uf_WS*!1npIKS4aA$9SW zHwMgcf&Xq^#*_c0xH60N#zrF;tr(A%A4&EmcIi+8On67;%Ps#K3U1@3wBC9L<V{Nh`>^io6Rp)q=9=#Yn9fO=24L+oS-JtV9mu!TLz9Z%Jw+nuS!SkQb=8Mll)|9N7&W1O;A* zqg>Y!sM_n*A8$<|9j0m{NQEiy_Im8gv=@yiQ9fw>ly!YUQ0m`ow%;jTeOZO!JWfSz zguH%PzvW{IltqP@e`{;&y`h5zrHJwP7LP^^HIHjD)^00A8{)kaj^J{2i zmvR-Hgup40v{9vI3Z@d>k&P5zUOT`)+qAz6e!-7YUf3iLiPsk=0xo z85aeIVldmp3wpbCb?B}?cky5O4Nenf_5h1Ql!GbZA`KE!MRoa}zS)|QkW6hDAX;52 zGfU~kw4^Z{;lX%!V!XR_{2ge=m5+k`kqGyrzOQ3K5_`ro@G=ynbFSMj+uLR!owGM= zm8w}gfqS~1bVHp5E1OU$N#rQJ{JF_WR4jx&zf`$v^*&Dn9*ViTPkJ1 zyYFKDy^mHAyi#e>=NnobIVRg309+cWyiH>haaR>6v3nP`??@cMeX*J3)tjJURsky4 zaOZwDXd4Q5DG`f+DtLJ9%CV{LM=#OX9257tB<;!0&Qy%-v((SbR8=#hPk7o zj=jP%mcPZ8JA+q?shH@sOxU=GEIe^+mWl#c=9(M(7|geOl?OY#K`ywd{JFAw9esb2 z+7(R*ehM5<&TYb&W)cmp6VfR0C=xBv4#duvfZm(i6vGV;0!;2^?mDG zza!*~u`J9fRW1)hDL#w&_+LO2S(~)0R(X{?iA7;%#KA?sz-|H!7ja^c#D->8FZgv( z40rMbH*FYZ1!B~pOs1t}E6xQ2))jT}h?}@t{B<#5A*=PoHUa ze2KiRG9;x$uRVD=-_~L3siWwqF8+V5qI^bdE zWXdP$a)7KTGNnp{r;Teh_Xjj;y{M&7s-|}0=X!>%y+|FZ3S|^+CX}9GL8VJ*_xM>7 zXujh4OMCndcetJ<8mB(m9*hmd3n2I+&@MMgoO}U=%>2)^!+J#l4m^5vcomoXX;S}-n&E|h#xv#O ztY7Fb^*bgnkQTveh?pjM*MbGIk8C?}q{ieyVAIeQzk3QeYMo2o0GFy_`ltwisF+D{ zHjlTCL0UUU;%@k;hYt&OsYVRr-}M?A!doem4#wZmS|2ikOm*9hd0bRH*bHM!Q`oeX zu_aBYd%}TAXT2UGn8Ge~+N?I75|aUSlvNZ~al8E>DCM_qayJa(t;kGZo9;Ps&l4nxr z%-sj1BtRxf5PXzI2C&%uOB6zjd;@(>PGY271l=5D!n&+H(-yXja&Qj z2tfIDmon3e?w6UyA{}S(TtC>qU=9gjqzFag*Jd-T$9!b`ihP?oq5 zsEFxZGV(4=&jG-6U1)^UZ___PLYBhkNqm>2Pf-U#C9}7-f*SgpQ1~c>tf1LU23Twt z`;R;rK)ySnG_ON@MPY=in$e;Gf%x*Y1};>MlL`mjsTakm;e%U84y!vQV)T71>@E95 zrO6FqJdHYh^2ChxlsKSY43ZqMjnD+|OxaAo*v+4N<6%U7b>DgLtb~>NqW7-i;33M& ztu}RT`ZK#NMmNpatHW0IPzQDxM`=4v_wSXg9APHG3dY|q)E;_0o2IO*DxQ}~xfDw1 zH*Je)*2X5ed+D?rGbaLhvwp?QrJQ{e%dadJ!{jPZU&o-LjHYNX@Z9sPS-CbQg{NmWB3z9++RowNCWTMhj7={0cJx?LWU-@F9F$cxGlk$!LXveAJ z=bOtqD}?YVT~sgv_PLL7q=?~@9m?+F!Fy>x=@P3E;FspErlGzlqZnjV_nMT4jDM*zO+|($m7LKRTjiMJw`08aq?rymw)yEh3)s1mZ`P6^zl$oL0k1t2}To_^}-PHMj$@ zgYC;7`m4_1t-V3SbyHX-C#@0Ie!<{Q=>5$!nuB=iQ=TDUUsHV$NmVanKT2Wl!AvL| zM`dRf;7K6Od?U^6_9g;s zrZh7zHsf^6!UDrwr8ghHsa|f09H$A zWN!U!?g`}jx#UNcFb=Ft+vs$F=O1Yweo#m#TTBp-wXXe3Y!qP1CmWeDxYfn~!IPiR zb4jN}DpLDPU)8>`JxgA8d|TLska3{zzLTc*{Nh&gsS0`}b0JfjZ7=Z~J-p?Kmhs@ZrM;KOFjtwk|$*ZQxrWbY*5Np1V zsS|$c$X0uKs!D@=syYf8x5k__OUuee@5XyUY~1SDMMV!qMcriW`@ee>_S;RxDsh$` z_h;FpHEOl-YDz(D;^Y`WI3W7qMUag*5h&mD#8@ToiZAIJ`8~><>LsqXcSL$rH(=f2;@t^a2UGHLanjDgIocWdeA!u)a^q zNsdZhE@)5Ng6C4b6mM4)ULl_UkHqNAyHz(he8z}3i)$PZ%|jC=XX^UCXpHi?O-3XS z{jh_O&sVP8W+(Yz!;^HnV1~u|k+7Mp5Mx_+zCzv3mb*^kGIC24dCCk-*o9vt(bFTP z2z70B*NMQ1J|tTRtPA$_?nTkl)DlYz?rg1oaQ}$uA5GpY?wjuS-O-XTy|Pp7=)8(E z{q7-(2j!yk8$Dw`7LVrJs#D8U*eQqWmq9iC@!Mb~n1kp#C%+ae%bnl3^R?FJ*^zT0 zb`PgJOj%=Yj_hMTBy#X$CnnP9Z%TG3U(9GL+-18*WmbEw;SB)p@37l84u_ncJQo<| z*U;3EhZZm$KU^8l$b;Rvi!AY)aIG&1TVEQPOX?A$2))>Lz*FN32L!lpZPpJD=PoD< zk|jVxOP6vEAlsj?*U08ZAa`L-X20`q;jo$S53#a0`D7q)P?gC4)L$ax;s^FI z7sxnC+)|@Q!lw{(LTt-|T*~_U;Mv1d>WE2|sgsUj$4?q-HrH_5V^ThvL?~N~KrhAH zFp`NV(4%{RIK2zUR#)s4Smt7d928Gbl&pVx%4_Zim55mTJlHUAzI}S;Nl^8znqyYJ z^e;B}6f+h*d5tDUcJ|azKT!`2NQ<`E`?+`UW_f;Vr$#LH9W#$8SnH$?-B1r{3A1Xc z?HZ%|f|HsKHnvz2c4~^%0yTO+iF+b!i<2(}Sz_ZRzkSp2L({k~`$XyMpK}!SPS4;> z=)JBpqeVi~>-fmxNs-7cf;s9;dBl7+$R=Y%OhtG~w`>ATw&qINR9&9Zk)A}EH&_zI z+bGDt9K@wcCE3J6#~RV4Au^nTO5fQEB8&>d7OBs5@Y-J54!uPu%{tZ$W9*NaL%oCI zf4yJ`=3wm?4kUkcBOby6rpPiny-{cRW;vGUU|=AAgWvQKS`%i2&b#3NUd=}l?*z=wn8-QJ_g$@IaKk!->7L6O?>K=XlCb3}6& z0N6?zJoT7XbxbSc63J6(#J_E1f-)VOGu^~wYw-sG4YoKaNiUP6Ne`RQTV#+5)dm5y^@%|9CeN7EgI6pnZMU4k1A%AqnJvW()}?Jze+w zf{UBz@S4;6;_=xTm3krIu9pdWs4w|qg@d18?=L5xf6Js}hnmW)GVPsCaUp41R#K1- zdsK>_JeR0kioI$woEHMmY?z$hxNVGXdNsgv(A-6flp&;51f9@hE!3>1&S8bg=5|pr z1#zwg<$;@NSNyw=8M@14#|}?l1ZBI^mB)6D)S`T{u`f86&l-tXSr=ayTAilwfE`HU z>bvyN{@LHeg1Ub0883e)MCg2dRxj9xSME(+!}opXe_!ngBO}f{yX$UKJSi;QV%gAbzlhAjwXMeR%l1o%Ca5?l@-*c$Im(7;0fNB?}XjL z)j}e~5~FOUsGXdb=slw`k`%d<(@stQPy`ks(Zo*Xq>>k-di((-+j zZrSyqEWHdlTVZ5_$gv&A9U2KbU zF)Rq2b}>y3<@(R*=jb~}!}uinpDg4Zgc@kvC>L%Kzj{#}0RuosgNBV>EovG5nX1W@ zQ*#ouhEJ0ZZ&BO!Wx4SKKvGA_RjbdkQ=mWwog!-Nh`?;ZzV8n9fYDNmvJ)X;7AbKx zoXC@6b4t8P)%}NT8pcWcH(b`sNn0X2$w4D>llCx+!_cVIl%QxUC;t(B1ij|*GCb)A zI*GgDlLb{qxe%{MqTW?S?F=)|gUr3HggSyjo-AB=5}X)${$6n^f88Ip9Cr@~?oSTS zHQgb>+mr?vK3vv0&L%2RZ&1R%n!RQ20>%l}1Y6+vKvM?s)SHE3a z9~d~=-Nk49jxO9Ja!%b^Fkq18UYRbMOZw!*(M0k4Gs*RvjT5)bK{q%TN(G44aXm(# zq)!b`E|P3L#orr!CF1AH173K}Oh|9>rcDmMp8V6;u-2LeBPS$jb-15n{(#O;X^BN? zSceGDlU)-rk7jFO=KKpCuATwpC21AnZ1fTnE_G}Uh=6Z!G2?NbAeI`HP~Rc{G74i1f>>?)(aS;=L#>I(srwRd+25*jmuSh z0bAsrmF?0A6aJo&5jx!GRAkCb>q6D@4q6*52oV{cV_rV5$i>HDXd4}TLwc;~LiOMR zq*60B9~*qO%tKXb%EdbF#!613_(2&)!f}LXTyJhqFL3yX#489LKWO$~dt}=r2Mx}8 z2ZDQz6HWV~s>4gx`ct7a!qm>QVLm?4>FeSs%+&uLmkIG*v_H!h7=F7YFhS0Q4(d4TSq^3AWj+KB8xE8 z&LMrWt{=vvnYkD9G7AEklw{XEk${7`*>sYJ+&39OfK(NRe-*d(dlYrs3*ZkZkL|%DtrVV`r4gMRI%;l` zW=F+3*EdAY?PIfLN%U|}=YIi}6Kd?&Z=5KUWG2+2slnGTUjjdJj2xcHQPd`Bs--IU z;!_|NmKdSL0@7&5>yAv?>bJJ&tpEnh#(b#I@Sw}PC`v)52up+ZoRKlRrJ5iS5sSFcB30z2LCC2yBnd@?5>p%lOTwGdNFdWH zdfoAuWZFv^l$JY#PAsrT#pnr>MzZ0-aZu`?7X;!Xpq#K_=q0#x!{72Efo>#;pW^z3vg8z8C<5WP%wc zU!#k(W=_v50A}(FDdr5rUimUkSmH1sW&lHhbr{CFJEF@}1~5x_`Le5%1R2C~y7*