From 28ec51d5c82437b006b42094e5d36e8834dcf48f Mon Sep 17 00:00:00 2001 From: valarnin Date: Sun, 1 May 2016 13:15:56 -0400 Subject: [PATCH] Updated PR15 changes for support for #14 Moved a bunch of blocking operations off the GUI thread Revamped logging, will probably switch to a more lightweight logging library later Added -console command line argument to show output console Switched to .net 4.0 as required version --- NTRDebuggerTool.sln | 7 +- NTRDebuggerTool/App.config | 30 +- NTRDebuggerTool/Config.cs | 2 +- NTRDebuggerTool/ConsoleHelper.cs | 33 ++ NTRDebuggerTool/Debug.cs | 25 +- NTRDebuggerTool/Forms/FormEnums/DataType.cs | 12 + NTRDebuggerTool/Forms/MainForm.cs | 300 +++++------------- .../Forms/MainFormThreadEventDispatcher.cs | 117 +++++++ NTRDebuggerTool/NTRDebuggerTool.csproj | 57 +++- NTRDebuggerTool/Objects/GateSharkCode.cs | 1 + NTRDebuggerTool/Objects/MemoryDispatch.cs | 12 + NTRDebuggerTool/Objects/Saving/SaveCode.cs | 28 ++ .../Objects/{ => Saving}/SaveManager.cs | 27 +- NTRDebuggerTool/Program.cs | 29 +- NTRDebuggerTool/Properties/AssemblyInfo.cs | 4 +- .../Properties/Settings.Designer.cs | 20 +- .../Remote/NTRPacketReceiverThread.cs | 11 +- NTRDebuggerTool/Remote/NTRRemoteConnection.cs | 14 +- NTRDebuggerTool/Resources/log4net.dll | Bin 0 -> 304640 bytes NTRDebuggerTool/packages.config | 6 + 20 files changed, 436 insertions(+), 299 deletions(-) create mode 100644 NTRDebuggerTool/ConsoleHelper.cs create mode 100644 NTRDebuggerTool/Objects/MemoryDispatch.cs create mode 100644 NTRDebuggerTool/Objects/Saving/SaveCode.cs rename NTRDebuggerTool/Objects/{ => Saving}/SaveManager.cs (61%) create mode 100644 NTRDebuggerTool/Resources/log4net.dll create mode 100644 NTRDebuggerTool/packages.config diff --git a/NTRDebuggerTool.sln b/NTRDebuggerTool.sln index d2975f5..a5010af 100644 --- a/NTRDebuggerTool.sln +++ b/NTRDebuggerTool.sln @@ -1,8 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 -MinimumVisualStudioVersion = 10.0.40219.1 +# Visual Studio 2012 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NTRDebuggerTool", "NTRDebuggerTool\NTRDebuggerTool.csproj", "{86AF1318-9584-4CDE-93BC-C2F0DCF958C5}" EndProject Global @@ -19,4 +17,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(Performance) = preSolution + HasPerformanceSessions = true + EndGlobalSection EndGlobal diff --git a/NTRDebuggerTool/App.config b/NTRDebuggerTool/App.config index 8e15646..5353446 100644 --- a/NTRDebuggerTool/App.config +++ b/NTRDebuggerTool/App.config @@ -1,6 +1,26 @@ - + - - - - \ No newline at end of file + +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/NTRDebuggerTool/Config.cs b/NTRDebuggerTool/Config.cs index a73a2db..a8b7ae9 100644 --- a/NTRDebuggerTool/Config.cs +++ b/NTRDebuggerTool/Config.cs @@ -233,7 +233,7 @@ private static void CreateConfigFile() #region XML Stuff - private static string ConfigFileDirectory = Directory.GetParent(Application.UserAppDataPath).FullName; + public static string ConfigFileDirectory = Directory.GetParent(Application.UserAppDataPath).FullName; private static string ConfigFilePath = ConfigFileDirectory + Path.DirectorySeparatorChar + "NTRDebuggerTool.config.xml"; private static XmlDocument ConfigFile; diff --git a/NTRDebuggerTool/ConsoleHelper.cs b/NTRDebuggerTool/ConsoleHelper.cs new file mode 100644 index 0000000..c283f77 --- /dev/null +++ b/NTRDebuggerTool/ConsoleHelper.cs @@ -0,0 +1,33 @@ +using System; +using System.Runtime.InteropServices; + +namespace NTRDebuggerTool +{ + class ConsoleHelper + { + [DllImport("kernel32.dll", SetLastError = true)] + static extern bool AllocConsole(); + + [DllImport("kernel32.dll")] + static extern IntPtr GetConsoleWindow(); + + [DllImport("user32.dll")] + static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + + const int SW_HIDE = 0; + const int SW_SHOW = 5; + + public static void EnableConsole() + { + IntPtr Handle = GetConsoleWindow(); + if (Handle == IntPtr.Zero) + { + AllocConsole(); + } + else + { + ShowWindow(Handle, SW_SHOW); + } + } + } +} diff --git a/NTRDebuggerTool/Debug.cs b/NTRDebuggerTool/Debug.cs index e01ff41..2bb1a98 100644 --- a/NTRDebuggerTool/Debug.cs +++ b/NTRDebuggerTool/Debug.cs @@ -3,38 +3,15 @@ using NTRDebuggerTool.Remote; using System; using System.Collections.Generic; -using System.Collections.ObjectModel; using System.IO; -using System.Runtime.InteropServices; using System.Threading; namespace NTRDebuggerTool { class Debug { - [DllImport("kernel32.dll", SetLastError = true)] - static extern bool AllocConsole(); - - [DllImport("kernel32.dll")] - static extern IntPtr GetConsoleWindow(); - - [DllImport("user32.dll")] - static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); - - const int SW_HIDE = 0; - const int SW_SHOW = 5; - internal static void Execute() { - IntPtr Handle = GetConsoleWindow(); - if (Handle == IntPtr.Zero) - { - AllocConsole(); - } - else - { - ShowWindow(Handle, SW_SHOW); - } NTRRemoteConnection Conn = new NTRRemoteConnection(); Console.WriteLine("Connecting..."); Conn.IP = "192.168.1.29"; @@ -57,7 +34,7 @@ internal static void Execute() { Thread.Sleep(10); } - Dictionary> Procs = new Dictionary>(); + Dictionary> Procs = new Dictionary>(); foreach (string ProcFull in Conn.Processes) { string Proc = ProcFull.Split('|')[0]; diff --git a/NTRDebuggerTool/Forms/FormEnums/DataType.cs b/NTRDebuggerTool/Forms/FormEnums/DataType.cs index c37db51..043e68f 100644 --- a/NTRDebuggerTool/Forms/FormEnums/DataType.cs +++ b/NTRDebuggerTool/Forms/FormEnums/DataType.cs @@ -28,6 +28,18 @@ public static DataTypeExact GetValue(string key) { return Mapping[key]; } + + public static string GetKey(DataTypeExact value) + { + foreach (string key in Mapping.Keys) + { + if (Mapping[key] == value) + { + return key; + } + } + return null; + } } public enum DataTypeExact diff --git a/NTRDebuggerTool/Forms/MainForm.cs b/NTRDebuggerTool/Forms/MainForm.cs index 1479a79..6784b36 100644 --- a/NTRDebuggerTool/Forms/MainForm.cs +++ b/NTRDebuggerTool/Forms/MainForm.cs @@ -1,11 +1,12 @@ using NTRDebuggerTool.Forms.FormEnums; using NTRDebuggerTool.Objects; +using NTRDebuggerTool.Objects.Saving; using NTRDebuggerTool.Remote; using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Linq; -using System.Text.RegularExpressions; using System.Threading; using System.Windows.Forms; @@ -37,8 +38,6 @@ public partial class MainForm : Form internal bool FormEnabled = true; - private bool LoadAddresses = false; - private Thread EventDispatcherThread; private Thread ButtonStateThread; @@ -54,13 +53,8 @@ public partial class MainForm : Form internal SearchCriteria LastSearchCriteria; - private Regex HexRegex = new Regex("^[0-9A-F]+$", RegexOptions.Compiled | RegexOptions.IgnoreCase); - private Regex ParserRegex = new Regex("\\(\\*(?
.+)\\)(?(?:\\[[0-9A-F]+\\])?)", RegexOptions.Compiled | RegexOptions.IgnoreCase); - private Stopwatch LockValuesStopwatch = new Stopwatch(); - private Dictionary Pointers = new Dictionary(); - public MainForm(NTRRemoteConnection NTRConnection) { InitializeComponent(); @@ -255,7 +249,6 @@ private void GUIUpdateTimer_Tick(object sender, EventArgs e) { if (LockValuesStopwatch.ElapsedMilliseconds > Config.LockValuesDelay) { - Pointers.Clear(); for (int i = 0; i < ValuesGrid.Rows.Count; ++i) { if (ValuesGrid[0, i].Value is string) @@ -263,7 +256,6 @@ private void GUIUpdateTimer_Tick(object sender, EventArgs e) SetMemory(i); } } - Pointers.Clear(); LockValuesStopwatch.Restart(); } } @@ -273,6 +265,16 @@ private void GUIUpdateTimer_Tick(object sender, EventArgs e) ValuesGrid[1, PointerSearchRow].Value = ThreadEventDispatcher.FoundPointerAddress; ThreadEventDispatcher.FoundPointerAddress = null; } + + if (ThreadEventDispatcher.RefreshValueReturn.Count > 0) + { + MemoryDispatch MemoryDispatch; + while (ThreadEventDispatcher.RefreshValueReturn.TryDequeue(out MemoryDispatch)) + { + ValuesGrid[1, MemoryDispatch.Row].ToolTipText = MemoryDispatch.ResolvedAddress; + ValuesGrid[2, MemoryDispatch.Row].Value = GetDisplayForByteArray(MemoryDispatch.Value, MemoryDispatch.Type); + } + } } public string GetDisplayForByteArray(byte[] p) @@ -308,7 +310,7 @@ internal uint GetSearchMemorySize() return GetSearchMemorySize(ThreadEventDispatcher.CurrentSelectedDataType); } - private uint GetSearchMemorySize(DataTypeExact DataType) + internal uint GetSearchMemorySize(DataTypeExact DataType) { switch (DataType) { @@ -386,9 +388,7 @@ private void ValuesGrid_CellValueChanged(object sender, DataGridViewCellEventArg { if (e.RowIndex >= 0 && e.ColumnIndex == 2) { - Pointers.Clear(); SetMemory(e.RowIndex); - Pointers.Clear(); } } @@ -396,152 +396,37 @@ private void SetMemory(int RowIndex) { string TextAddress = (string)ValuesGrid[1, RowIndex].Value; - uint Address; + MemoryDispatch MemoryDispatch = new MemoryDispatch(); + MemoryDispatch.Row = RowIndex; + MemoryDispatch.TextAddress = TextAddress; + MemoryDispatch.Type = DataTypeExactTool.GetValue((string)ValuesGrid[3, RowIndex].Value); + MemoryDispatch.Value = GetByteArrayForDataType(MemoryDispatch.Type, (string)ValuesGrid[2, RowIndex].Value); - if (HexRegex.IsMatch(TextAddress)) - { - Address = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString((string)ValuesGrid[1, RowIndex].Value).Reverse().ToArray(), 0); ; - } - else - { - Match TopMatch = ParserRegex.Match(TextAddress); - - if (!TopMatch.Success) - { - return; - } - - Address = ResolvePointer(TopMatch); - } - - if (IsValidMemoryAddress(Address) && !LoadAddresses) - { - ValuesGrid[1, RowIndex].ToolTipText = Utilities.GetStringFromByteArray(BitConverter.GetBytes(Address).Reverse().ToArray()); - uint ProcessID = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(Processes.Text.Split('|')[0]), 0); - switch (DataTypeExactTool.GetValue((string)ValuesGrid[3, RowIndex].Value)) - { - case DataTypeExact.Bytes1: //1 Byte - NTRConnection.SendWriteMemoryPacket( - ProcessID, - Address, - (byte)uint.Parse((string)ValuesGrid[2, RowIndex].Value)); - break; - case DataTypeExact.Bytes2: //2 Bytes - NTRConnection.SendWriteMemoryPacket( - ProcessID, - Address, - ushort.Parse((string)ValuesGrid[2, RowIndex].Value)); - break; - case DataTypeExact.Bytes4: //4 Bytes - NTRConnection.SendWriteMemoryPacket( - ProcessID, - Address, - uint.Parse((string)ValuesGrid[2, RowIndex].Value)); - break; - case DataTypeExact.Bytes8: //8 Bytes - NTRConnection.SendWriteMemoryPacket( - ProcessID, - Address, - ulong.Parse((string)ValuesGrid[2, RowIndex].Value)); - break; - case DataTypeExact.Float: //Float - NTRConnection.SendWriteMemoryPacket( - ProcessID, - Address, - float.Parse((string)ValuesGrid[2, RowIndex].Value)); - break; - case DataTypeExact.Double: //Double - NTRConnection.SendWriteMemoryPacket( - ProcessID, - Address, - double.Parse((string)ValuesGrid[2, RowIndex].Value)); - break; - case DataTypeExact.Raw: //Raw Bytes - NTRConnection.SendWriteMemoryPacket( - ProcessID, - Address, - Utilities.GetByteArrayFromByteString((string)ValuesGrid[2, RowIndex].Value)); - break; - case DataTypeExact.Text: //Raw Bytes - NTRConnection.SendWriteMemoryPacket( - ProcessID, - Address, - System.Text.Encoding.Default.GetBytes((string)ValuesGrid[2, RowIndex].Value)); - break; - } - } + ThreadEventDispatcher.WriteAddress.Enqueue(MemoryDispatch); } - private uint ResolvePointer(Match Match) + private byte[] GetByteArrayForDataType(DataTypeExact DataType, string Value) { - string AddressString = Match.Groups["Address"].Value; - string OffsetString = Match.Groups["Offset"].Value; - - - uint Address; - - Match RecurseMatch = ParserRegex.Match(AddressString); - - if (RecurseMatch.Success) - { - Address = ResolvePointer(RecurseMatch); - } - else - { - uint Pointer = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(AddressString).Reverse().ToArray(), 0); - if (!Pointers.ContainsKey(Pointer)) - { - byte[] Data = GetMemoryAtAddress(Processes.Text.Split('|')[0], AddressString, DataTypeExact.Bytes4); - - Address = BitConverter.ToUInt32(Data, 0); - Pointers[Pointer] = Address; - } - else if (!IsValidMemoryAddress(Pointer)) - { - return 0; - } - else - { - Address = Pointers[Pointer]; - } - } - - if (Address != 0 && !string.IsNullOrWhiteSpace(OffsetString)) + switch (DataType) { - OffsetString = OffsetString.Replace("[", "").Replace("]", ""); - Address += BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(OffsetString.PadLeft(8, '0')).Reverse().ToArray(), 0); + case DataTypeExact.Bytes1: //1 Byte + return new byte[] { (byte)uint.Parse(Value) }; + case DataTypeExact.Bytes2: //2 Bytes + return BitConverter.GetBytes(ushort.Parse(Value)); + case DataTypeExact.Bytes4: //4 Bytes + return BitConverter.GetBytes(uint.Parse(Value)); + case DataTypeExact.Bytes8: //8 Bytes + return BitConverter.GetBytes(ulong.Parse(Value)); + case DataTypeExact.Float: //Float + return BitConverter.GetBytes(float.Parse(Value)); + case DataTypeExact.Double: //Double + return BitConverter.GetBytes(double.Parse(Value)); + case DataTypeExact.Raw: //Raw Bytes + return Utilities.GetByteArrayFromByteString(Value); + case DataTypeExact.Text: //Raw Bytes + default: + return System.Text.Encoding.Default.GetBytes(Value); } - - return Address; - } - - private byte[] GetMemoryAtAddress(string ProcessID, string Address, DataTypeExact DataType) - { - return GetMemoryAtAddress(BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(ProcessID), 0), BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(Address).Reverse().ToArray(), 0), DataType); - } - - private byte[] GetMemoryAtAddress(uint ProcessID, string Address, DataTypeExact DataType) - { - return GetMemoryAtAddress(ProcessID, BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(Address).Reverse().ToArray(), 0), DataType); - } - - private byte[] GetMemoryAtAddress(string ProcessID, uint Address, DataTypeExact DataType) - { - return GetMemoryAtAddress(BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(ProcessID), 0), Address, DataType); - } - - private byte[] GetMemoryAtAddress(uint ProcessID, uint Address, DataTypeExact DataType) - { - SearchCriteria Criteria = new SearchCriteria(); - Criteria.ProcessID = ProcessID; - Criteria.DataType = DataType; - Criteria.StartAddress = Address; - Criteria.Length = Criteria.Size = GetSearchMemorySize(DataType); - Criteria.SearchType = SearchTypeBase.Unknown; - Criteria.SearchValue = new byte[] { 0 }; - NTRConnection.SearchCriteria.Add(Criteria); - NTRConnection.SendReadMemoryPacket(Criteria); - return Criteria.AddressesFound.Values.First(); } private void ValuesGrid_CellClick(object sender, DataGridViewCellEventArgs e) @@ -629,75 +514,68 @@ private void SearchButton_Click(object sender, EventArgs e) private void SaveButton_Click(object sender, EventArgs e) { - List addr = new List(); // 1 - List type = new List(); // 3 - + SaveManager sm = new SaveManager(); + sm.Init(); // Get a list of all saved addresses foreach (DataGridViewRow row in ValuesGrid.Rows) { - addr.Add(row.Cells[1].Value.ToString()); - type.Add( - (int)DataTypeExactTool.GetValue(row.Cells[3].Value.ToString()) - ); + if (row.Cells[1].Value is GateSharkCode) + { + // @TODO This will be different. + } + else + { + sm.codes.Add(new SaveCode(DataTypeExactTool.GetValue(row.Cells[3].Value.ToString()), row.Cells[1].Value.ToString())); + } } // Set the values - SaveManager sm = new SaveManager(); - sm.addr = addr.ToArray(); - sm.type = type.ToArray(); - String[] parts_ = Processes.Text?.Split('|'); + String[] parts_ = Processes.Text.Split('|'); if (parts_.Length < 2) return; - String game = parts_?[1] + @".xml"; + String game = Config.ConfigFileDirectory + Path.DirectorySeparatorChar + parts_[1] + @".xml"; + sm.titleId = parts_[1]; SaveManager.SaveToXml(game, sm); MessageBox.Show(@"Saved selected addresses to '" + game + "'"); } private void LoadButton_Click(object sender, EventArgs e) { - String[] parts_ = Processes.Text?.Split('|'); + String[] parts_ = Processes.Text.Split('|'); if (parts_.Length < 2) return; - String game = parts_?[1] + @".xml"; + String game = Config.ConfigFileDirectory + Path.DirectorySeparatorChar + parts_[1] + @".xml"; SaveManager sm = SaveManager.LoadFromXml(game); - sm.Init(); - String[] addr = sm.addr; - int[] type = sm.type; - if (addr.Length != type.Length) - { - MessageBox.Show(@"Invalid size of the savefile"); - } else if (addr.Length == 0 || type.Length == 0) + if (sm.titleId != parts_[1]) { - MessageBox.Show(@"No addresses found"); - } else + MessageBox.Show(@"Filename/TitleID Mismatch."); + } + else { - LoadAddresses = true; - - for (int i = 0; i < addr.Length; i++) + foreach (SaveCode code in sm.codes) { - - if (!IsInValues(addr[i])) + if (!IsInValues(code.address)) { int RowIndex = ValuesGrid.Rows.Add(); ValuesGrid[0, RowIndex].Value = null; - ValuesGrid[3, RowIndex].Value = DataTypeExactTool.GetValues()[type[i] - 1]; - ValuesGrid[1, RowIndex].Value = addr[i]; + ValuesGrid[3, RowIndex].Value = DataTypeExactTool.GetKey(code.type); + ValuesGrid[1, RowIndex].Value = code.address; // Read the memory - - - DataTypeExact DataType = DataTypeExactTool.GetValue((string)ValuesGrid[3, RowIndex].Value); - - byte[] Value = GetMemoryAtAddress(Processes.Text.Split('|')[0], (string) ValuesGrid[1, RowIndex].Value, DataType); - - ValuesGrid[2, RowIndex].Value = GetDisplayForByteArray(Value, DataType); + RefreshMemory(RowIndex); } - } - LoadAddresses = false; - - } } + private void RefreshMemory(int RowIndex) + { + ThreadEventDispatcher.CurrentSelectedProcess = Processes.Text.Split('|')[0]; + MemoryDispatch MemoryDispatch = new MemoryDispatch(); + MemoryDispatch.Row = RowIndex; + MemoryDispatch.TextAddress = (string)ValuesGrid[1, RowIndex].Value; + MemoryDispatch.Type = DataTypeExactTool.GetValue((string)ValuesGrid[3, RowIndex].Value); + ThreadEventDispatcher.RefreshValueAddresses.Enqueue(MemoryDispatch); + } + private void ComboSearchType_SelectedValueChanged(object sender, EventArgs e) { string CurrentDataType = ComboDataType.SelectedItem == null ? null : ComboDataType.SelectedItem.ToString(); @@ -822,37 +700,7 @@ private void ValuesGridContextMenuStrip_ItemClicked(object sender, ToolStripItem case "ValuesGridRefreshItem": foreach (DataGridViewCell Cell in ValuesGrid.SelectedCells) { - string TextAddress = (string)Cell.OwningRow.Cells[1].Value; - uint Address; - - if (HexRegex.IsMatch(TextAddress)) - { - Address = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(TextAddress).Reverse().ToArray(), 0); ; - } - else - { - Match TopMatch = ParserRegex.Match(TextAddress); - - if (!TopMatch.Success) - { - return; - } - - Pointers.Clear(); - Address = ResolvePointer(TopMatch); - Pointers.Clear(); - } - - if (!IsValidMemoryAddress(Address) || Cell.OwningRow.Cells[3].Value == null) - { - continue; - } - - DataTypeExact DataType = DataTypeExactTool.GetValue((string)Cell.OwningRow.Cells[3].Value); - - byte[] Value = GetMemoryAtAddress(Processes.Text.Split('|')[0], Address, DataType); - - Cell.OwningRow.Cells[2].Value = GetDisplayForByteArray(Value, DataType); + RefreshMemory(Cell.RowIndex); } break; } @@ -885,7 +733,7 @@ private string ConvertCode(string Address) return Address; } - private bool IsValidMemoryAddress(uint Address) + internal bool IsValidMemoryAddress(uint Address) { return GetAddressSpaceForAddress(Address) != null; } diff --git a/NTRDebuggerTool/Forms/MainFormThreadEventDispatcher.cs b/NTRDebuggerTool/Forms/MainFormThreadEventDispatcher.cs index 19d7f09..0cb6bcf 100644 --- a/NTRDebuggerTool/Forms/MainFormThreadEventDispatcher.cs +++ b/NTRDebuggerTool/Forms/MainFormThreadEventDispatcher.cs @@ -1,7 +1,10 @@ using NTRDebuggerTool.Forms.FormEnums; using NTRDebuggerTool.Objects; using System; +using System.Collections.Concurrent; +using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using System.Threading; using System.Windows.Forms; @@ -14,6 +17,9 @@ class MainFormThreadEventDispatcher internal bool DispatchSearch = false; internal bool DispatchConfig = false; internal string DispatchPointerSearch = null; + public ConcurrentQueue RefreshValueAddresses = new ConcurrentQueue(), + RefreshValueReturn = new ConcurrentQueue(), + WriteAddress = new ConcurrentQueue(); internal string CurrentSelectedProcess = ""; internal string CurrentMemoryRange = ""; @@ -23,6 +29,9 @@ class MainFormThreadEventDispatcher internal string FoundPointerAddress = null; private MainForm Form; + private Regex HexRegex = new Regex("^[0-9A-F]+$", RegexOptions.Compiled | RegexOptions.IgnoreCase); + private Regex ParserRegex = new Regex("\\(\\*(?
.+)\\)(?(?:\\[[0-9A-F]+\\])?)", RegexOptions.Compiled | RegexOptions.IgnoreCase); + private Dictionary Pointers = new Dictionary(); internal MainFormThreadEventDispatcher(MainForm Form) { @@ -60,6 +69,42 @@ internal void ThreadEventDispatcher() DispatchPointerSearch = null; DoPointerSearch(TempAddress); } + while (RefreshValueAddresses.Count > 0) + { + MemoryDispatch Row = new MemoryDispatch(); + RefreshValueAddresses.TryDequeue(out Row); + Row.Value = GetMemoryAtAddress(CurrentSelectedProcess, Row.TextAddress, Row.Type); + RefreshValueReturn.Enqueue(Row); + } + while (WriteAddress.Count > 0) + { + MemoryDispatch Row = new MemoryDispatch(); + WriteAddress.TryDequeue(out Row); + uint Address; + + if (HexRegex.IsMatch(Row.TextAddress)) + { + Address = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(Row.TextAddress).Reverse().ToArray(), 0); ; + } + else + { + Match TopMatch = ParserRegex.Match(Row.TextAddress); + + if (!TopMatch.Success) + { + return; + } + + Address = ResolvePointer(TopMatch); + } + + if (Form.IsValidMemoryAddress(Address)) + { + Row.ResolvedAddress = Utilities.GetStringFromByteArray(BitConverter.GetBytes(Address).Reverse().ToArray()); + uint ProcessID = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(CurrentSelectedProcess.Split('|')[0]), 0); + Form.NTRConnection.SendWriteMemoryPacket(ProcessID, Address, Row.Value); + } + } Thread.Sleep(100); } @@ -244,5 +289,77 @@ private byte[] GetValueForDataType(DataTypeExact CurrentSelectedDataType, string return System.Text.Encoding.Default.GetBytes(Value); } } + + private uint ResolvePointer(Match Match) + { + string AddressString = Match.Groups["Address"].Value; + string OffsetString = Match.Groups["Offset"].Value; + + + uint Address; + + Match RecurseMatch = ParserRegex.Match(AddressString); + + if (RecurseMatch.Success) + { + Address = ResolvePointer(RecurseMatch); + } + else + { + uint Pointer = BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(AddressString).Reverse().ToArray(), 0); + if (!Pointers.ContainsKey(Pointer)) + { + byte[] Data = GetMemoryAtAddress(CurrentSelectedProcess, AddressString, DataTypeExact.Bytes4); + + Address = BitConverter.ToUInt32(Data, 0); + Pointers[Pointer] = Address; + } + else if (!Form.IsValidMemoryAddress(Pointer)) + { + return 0; + } + else + { + Address = Pointers[Pointer]; + } + } + + if (Address != 0 && !string.IsNullOrWhiteSpace(OffsetString)) + { + OffsetString = OffsetString.Replace("[", "").Replace("]", ""); + Address += BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(OffsetString.PadLeft(8, '0')).Reverse().ToArray(), 0); + } + + return Address; + } + + internal byte[] GetMemoryAtAddress(string ProcessID, string Address, DataTypeExact DataType) + { + return GetMemoryAtAddress(BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(ProcessID), 0), BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(Address).Reverse().ToArray(), 0), DataType); + } + + internal byte[] GetMemoryAtAddress(uint ProcessID, string Address, DataTypeExact DataType) + { + return GetMemoryAtAddress(ProcessID, BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(Address).Reverse().ToArray(), 0), DataType); + } + + internal byte[] GetMemoryAtAddress(string ProcessID, uint Address, DataTypeExact DataType) + { + return GetMemoryAtAddress(BitConverter.ToUInt32(Utilities.GetByteArrayFromByteString(ProcessID), 0), Address, DataType); + } + + internal byte[] GetMemoryAtAddress(uint ProcessID, uint Address, DataTypeExact DataType) + { + SearchCriteria Criteria = new SearchCriteria(); + Criteria.ProcessID = ProcessID; + Criteria.DataType = DataType; + Criteria.StartAddress = Address; + Criteria.Length = Criteria.Size = Form.GetSearchMemorySize(DataType); + Criteria.SearchType = SearchTypeBase.Unknown; + Criteria.SearchValue = new byte[] { 0 }; + Form.NTRConnection.SearchCriteria.Add(Criteria); + Form.NTRConnection.SendReadMemoryPacket(Criteria); + return Criteria.AddressesFound.Values.First(); + } } } diff --git a/NTRDebuggerTool/NTRDebuggerTool.csproj b/NTRDebuggerTool/NTRDebuggerTool.csproj index aabd251..16a3956 100644 --- a/NTRDebuggerTool/NTRDebuggerTool.csproj +++ b/NTRDebuggerTool/NTRDebuggerTool.csproj @@ -9,8 +9,24 @@ Properties NTRDebuggerTool NTRDebuggerTool - v4.5 + v4.0 512 + false + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true AnyCPU @@ -27,11 +43,18 @@ pdbonly true bin\Release\ - TRACE + + prompt 4 + true + + False + Resources\log4net.dll + False + @@ -45,6 +68,7 @@ + Form @@ -69,8 +93,10 @@ PointerScanDialog.cs - + + + @@ -97,6 +123,7 @@ Resources.resx True + SettingsSingleFileGenerator Settings.Designer.cs @@ -113,7 +140,31 @@ + + + False + Microsoft .NET Framework 4.5 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + + + + + + + PfPR#*)%04# ze}N3nOZQ?MNATI`v@MRyWXNZ%fgF?S<7g3m(DMk0SSs)=8BGqd+RB7n&Bf*l)OnDC zO^*NE1IR!hDECL7lkYibN+bHp*_BJQtS+T#!m^EzIp7(V$1|c@ZP*JugcpiiB_1v| zh>n;A{i zfhD4xdefbrltX&q(Kjw zRXMkNRw8_p1#Bd8>m!i<;=p)SKIBbT_aOlnZhX(0}>eU=I@ zqIee+(pf6Gdb)cY;`#0#C%F_jA+N&IA@~<~gbhzahk)>|QYt37U=6z>$0~Edd%2G8 zFcY)gs_|oF3|(bI2k7m|r<6>tAFw2~>t69@z*Rdd#U2S!?zCEDPa&;@NUud#k%wKc zyz%g%5k>vGB?sqf>qzNCi! z=rLO>IcIM4tcK?09SZZKrB@4*Y0fd&FJK*J;;0^6{ZHvuQq8SeqOTiMA-J)z208QB zt&9kDH1@TP^#GRbT$lA=F*wu(1GF3{O%0*5Cs*|;S5-;<2JEB!-XG0>rC>b=6Pb-` z8UsSi?h-8b?`D5P@s$-QI}Rfms=AJ3OV?G;voEEkyU8g>CFr2m(%0!K>5oow6*pou zH#$ob=3$*+N9BAy0BMO~Ijl3&T^cY0;Im%w?-2T6T2T7D9y=9TQQ6zwTaGph%-*>E z-u`I2M$N&C%Dr==M>K>=5p?zSilW!u6=ncB)dM3t&_?W$q{Y#y7g{!aLL1WuQ5BQ? zf7FwPZ?S*1(h- zcgB?Q7-`QuyV6v&3Fj!Vxb)2F)2?`QnpLxZJ8i{cZ}#ozL1QlUo;}(>iu$K9Z_Uj8 zNanm>$oHKc!M}E#so%%t=3bn$@j*T~DZi2N+}D2vYB+?tQF>A@RhH$GDc!B7`j<{m zFRY*+Veguo2@^x`#7CPE!e5%0o7ednY907g4<5PMx$&I5hnwXGAFJn)m>(wf16(CEL>-6FfMCb>n*4VY=mg4=Hs$G_wj) zI)Jv|eKCI567R&4={qMg(877IRjkq6TFf->Dk6iE509|TlWgEPv|7M3$h4c|1_Nou z`yTxeU5ByG-UiEBZfLsQvWOcBJ!tq)Y@s-es2C0Jty5;S@l>QA9RdO@S+DEdg88!f3xu9QZ^R$v(6A65g_ zV91S!Vd#+}W1}&YQK-=le8NaUB|x4av8ywvmg#}lQ>^T_)9nH_1h#6sSpZv}wX&m- z7;TyU2z2B|3p-;|7IwHj7sHx00WuZK`L zfIL1i&v|->ZNLeoUImiLC?SF9BDLpvCn$rl$XMC) zT!n{^3cy-jPto%7A;zQa9B z=Iy9w9r*|o3Ez)w{jePcGoD`^|0Q@xY)P8AFPIL&{{UkP*O+uQuP1@HaLfmnL!=_M4E;K4B$d+dQid?+ufb4@cbkw2 z4R>DR*l;Wc-{2aaiyIDdNGuy}Wj76HoY!32Z~CXC?Kj=y+Wy_R?JVEec2E4QK>VX` zgLi>@h6dy(d^f*)lkf07h`>mP?ttS2{TPhQE!iZ=^_%Px-%RXp0-m}WYj`P?DAU%> zzB=k?vygqYcKoRrN0v?F$aA5v`I@6dj%|G!8HMmN72{kh`4N{!IA5%zK)eoL*z2nl zuqwD7-y#j+7g2Ls=>hKud)09gLXHB(qD1tAD+Dvj9swHNhkTQC5|9A*TAoclAIp)!B4j+RX7x(Fa5&( zpkK?JAZ797Tk}8yM;s_qSMu;8jrR51&{}z1?sih`m{D47KaIaB{RuotIrkaVag4}; za@Xjs$en)j8fW4*8i`%7XV{AlDdrZ;)x&kP=g%?=4$ZB9yyWM@k4i^XmgW}hnWWD) z3znn6hK4Lfyb`_M=C=ptYD5=DsR{FT_vp3mCUm&tk$i0}V@9Pt&!QzzTVe~4lLu_{ zYj4)QB#yQ1_vxE!o2s*c`xsj{{%p(<1chg8<_fXw1Ie6Q^?uf|LX+M?a6eiG$`^4E z5ML?|aMDhmlw?eU6nGV-E7p^@Lby+taBIU zyC1~$umtNl6`V)fQODvwjL1a4$<`p6h~~iphWj+otrC}?;J_K+-!cd++k$*FgWH2L z8~QCC&Gg} z%r(*H(FLCB{dGXfR9_{fje>h6J(aVJY#p^%OqqOf6nCz#(?w<<3DRkdAAFX|I~e1XkEB;rDa}dN*Riw;UI|S(K0Fvjs^a(5QEOTC>qLAiN^E? zqQZqpVU+E_My#<1u_cVNdzXVHA*ClfYN6c$^PXq=&A^E6#jfVzyBpE!;5s&4WYCqU z7lvz`!7XYPiOU+TLNE6G7?7L-B8t~uXv3=kWow)w(KC#ea;{7vuYFx=36S_CG z_~BmvS;_qp;`7p}@p-Tp&H_FsOTUc&-1S>u*oPq}g6Y;vW5r79TZ&n1 z+g9e(BQk9D9Lx&g+d->xU(hR4m~=uH?D4(wcof$Z??XMO*#5_u;)V@|H=g9Y62l?7 z1%ImF#Av!^ob9vfE_W1$XOFW7QZZ`7K;iuu4}HB*oHz;Za&bsRbFb(9B<@s1m*Z3B zBzLqM6Sk==nw;@#E~8!Z_Cm)ITZ78e<4xgZx{lmcSvHJ{TF5f!u>njMczd!t8I_a7 z7|QNSJ(S-MAn&Q9sgs$L=5RR<1u-V?C!=c6PNH}@Av1AFHkgY@H~=5Whx70?)UUtj z^%Y(ES>C3@REl-Mj>dfDZ74lxCVIQf_>dd-ey7OKYapkRI2F=Zo4fJA6KET*F}+Jr z4CtHX@UXWJPT8)67pwhoyJiI1+D3Ce{LEZvE;1LJL(N)vKR(O@SeetbuP8$?xJq6ocq2!Rbzp&I3tq?-OIJP!1ax= z#Z@MAhTAZ*>P&Na^m5~&a=8($!~F!9Dxu&{EWsl5t;iUyx`8G)9)L?sht?0doZD!; z#t1AvqF9ADpoldDsa(3ml(wi`qI~^R%eK7|wb=_5l;pNykh*svA(B)Wo^gG{S%6U? zR$_j6TksCBW=W3m{vVJfcqgF$ZZNYLeFGVg2!(c`r)_|*?Pq;D!1 zp?WKCHt#WVjbnSQ;R+)roM*+J=9{wtQ}tQp6)a!DM?Wh%T7z-P6luC43s$IoRcMUa zI(Y|7#UDQegW;kLO&&G^axJ?=><}FLn2PvK+g-w((3zZzD>|Q*l%PgHB5=6Q*n)EF zrQMPmt6ONs26C(LFN}il0JBg%z=+j^jF~#P1EW3M3}L6>eTYZVZ|&RxjGZ}EFI!}m zy;S#3$e*anY)J3{;o!38dPFuM^Ad*)gdu3$z$DL3F?M1!|8=KmqI=kS+e_3V#n!dA zDXvt$p;Z{SWakn&_5t^O`b2Kfb(ZZ0Rb5xc-F6$1wRGiJ)zKzBWh;d0tHQ!htucB4 z8`CBF7rHC`hXvw;i~YEE9M*f)e8wm{aDSw?zKxj6ecbxn_$kvJV1P$teTk~g8A@kn z6*|iyW`_LmOEMSG6%b2@r(p1RRrb=W>073AV&cH~3UUE|bU2LHwh%Va^m004zrIuY zHt0{};Qg%cA3O_b8z8mY3p;wB^D*FkW&_?pfGX!I2q=(2Tp(!c74-vwdI1l5XiMzf zI<|oK$qPutM%7Y#>{9ITI8#$25pX5_LCih!IxD^(!nb`T3AtsHf=VqK*)N9uJMLkQvT;!o*AW%Gd$fW+#RYE$nDqPffR6+tM4ey z&)5VfhAd7ncp9wnh!bPO1%PAOTwpN$EbU)OA83(o=Wfhd-x!F8?%IGcKHQ;tx=fX{kX*m~e|od(LUj;Dc4@TjDNL@^y9U`eBYc621%0SnjdD=DA`pB2oHw(31KnR~n% zaS#$yz8(M=SPOy7KZyR*2n7YPCTDL zD<^%m@@D$7U0Pq489X4N?}cdR0PFLIru&V%A*lK|Y5rrAD-IW@t7V6z+T6NB++IV! zS+ZLD!|~)xm9I(NL_RPCoayI{IFfIjyz~1+a)Q-X!=1N!qW{HWdMH>mF%_I(PCYJ{^5cb$@u zypzG`zV$F)*ZGB4$7)2y>C>G!`XLDzZp6T*a%O-&jqUKo5)D7%f?uVA2;!{}`PC94 z6Iw!qU8OWprs=7L?;Kd3$Ri%qmoI*gysvwXZ^G}nq(`IMX1@DFq?A!*j@uC9yFu`E z#2`8eX&CC=zVn6%I3bQSg$S!F6Hc&gY-RN^XDiE^F9YZECgZFa3l~hrz6Of1Hcz@T zo}F>vKHUz!O~GadYboCiZ|B=CXIZ8Ss|lnHnn^R1@mNVJNo%oCFn+$xQP#GZ+AqF& z_#>{3zUY=4rHyb1UX0D3wl@92+nh@{_qAqswT(h6%jMjLhLsbZ!Cv1%?w*Qopxl`A zU0sQ()i3W;g!doPV+VYs>Zz&T;>6x*n)rCLfek-|DY((Kp>>%l{O}VF)_s6OH;j!mY84;TQ+;;3I+s>|K>CqBgSWyL!Ta#x z4M5wzuKs?0mg^7lCteBtV9Gq0N(4wo0dxp}Nq!2LMUWPo5<`|hpjMJOsmBq4Bo9NW zJXTL5c1a$F;54E7d60HTPyHbT;dlpPsQv+d1|LLQ0Uuz{Kc4BuukzTAo*Faja!laS z2F$f7F4Kx!uMtA}GMg<@eTLnbg=;-|GZhDCzK~Roy_NR&+#2Nv=kTfOiWiTV`9QZO z48rfDVxHVdBhV59Cr?g1IgtYxSFi}Pt&scD)|9|Z6V&b(wUdbp_f(i1f71c;64KA1 zDwNeZlREVP>%-xNpF>rKGUZL|g-xjd!zlcUD$iwXJ$w*!Z+0S$9%LIRNp{;^&yKLa zMq0rPEX+*!*i=9r%-t6xFsWY;G~>AlFsDW_#<71+0&m||@b-ZIIyHJRyg74s1>RSu zYVM1K_y7I@cp1J=G?{*TQeO|hJ{3UMA9Lrq_U;tkf4q2j9oQFXf!`A12WRGAn+hU0 z(DLE@-5iekZkXelUjRfSZ;ww2)WK}W+cC_9w;!JhsDs&#w_}*(?Ws|W+ue@0V|c>b zQ=%8cYscG-@cwhE=DtXH-}ndMHS%JNpYry%rvm8uqaANI!TaWmhu6s4F+9iH-_JJKk=B_tcAr*T~y3JjdHlPX%#m-u@*(H1hVu zlt5j(+wpb`GvV#;O$F4!Y{%O%O!D^BD8{_gj<;iY!rN1#7sG4E+l}zPKUH&IB)n(; z0eFqP9pk6G{llpMy8dX#+fDF(@Z#Y$@^%c*@%D35L7bYme+3YYy#4%?KwZ1r@pcR| z;q4zy1=PW8$J;SX^7hmy#=O&xw_|w1+f$+!!)wRejqrXlRdZh?ydVDq@EUnL#!q?s zXHx-m{n3uMo8bNQ#lvgl?HHcp?H8tkIGMNCj^lKO-N@xq5gWO3cC-F40@xD$5PxFx z1=syP&OHH++8CJ2=TYEncq29|b&snT#)njbzGs(?^1~;1!p7MVX#2ZV*10uSr~AUZ zMI%9RO1zlIAKcvueN+f_VG%8-0Qzu<3)cZ*x)qPkh#og~rsZp;1#yK06&6RQOus48F2si)AIT%4JG=iF( zAlpl1aVs*sQVt0;;3j9)zK5ggY$+~9mFpkDM`Bu`U1bsQ1<`$cL^fd@UCRo zJiVXki{CVyMMeHTn_sLda4%}DD!Jew+BO`$`TL3%@cT{H6;xx0EyseyYhjymGmPwj z7gO2gF41Mkzgg+dM#AcXo!a0f(xTz4j}F8^1;pC&xH2SY(n!4$M_u}aG@~Cy(P-t3 z^x6`#6>=1bg;BCoYc7EvIDf?Vv z)NwbMh&jEQ6tjOBQ(cQDg`h1*1IHGIk^$e5R|%uK0!i`*heq-E6OQ8(YHCZQ2j%xc z)RrB{kZvNc(0-~m&2+rJaY&g5k@zY0q!o$agikP-seckb z$!0rtmVC)bYpH{)_0?Fw)|W9yqP`g_O9^)v5{Qr>1N9IOoXl&CG&G7{hBL$hL5>e= z6<&=+1thkhGxdK(2-SZYKjP1r`)gID2b0SC%=BtZ6b{pxK-R73!8kU>cNM;TN)B6s zUv`97Ba|I*8a4d9Euw5KrDLv6x<8Ij<+h9<&s@cW>N9`~dU0R=$G~|Dapo={?!EJ>VCjW#*)jO4L=~p>XEkt5Z<-;8(1uThSu@9&<8vHTq5S$nbG+sMFSdz) zv^ieRWq7qOCGi=v7kg93?b+yfFE|r_#l=AM#W@%o!8r)aEpb8Vv3Q`$h1oiB!q6bf z7%0TV>!`D0Z+fQAiYUx!3%?rmu>SJcml0bY`wIT{jXlO3CR&4z4(5Y(%IaiTT>VCy zn_@2pCMJ5ji*0a7JTb3e#y!`e(U*}aeHFmXV?Acw1~ZRmOGw)yaH0${qr^$tx5#*c zpwK=^C$@1q15N2{N1V<8(sOLOg-^bLV8988`9?UamloaXMzpBJ2V+)uFzO_!Ad8 zq+lJ9hPC%(ShhLSF)eef2U-Cxc1oq0xCXX|`z}gn+YliY+nR32E84c>&ZHf9D;{+6 zB8h6>js#Y7JDOoNw?iv%HT)y(xT0-4J~+7@64kyP39ROJG{b7!4#}9bgLh;Xpg;6q z@HOKd`fhndT}`s(Kp!)W6D@ z8vh0xq=yGjhQMRKOn40<=<~L)gyYG{#H)1vWftKk9u<`GXRv&OcZB~y9vO?S?A2P9 z@ly8u6mDNbBqZ6_o6BHZg)*4QQpUluGMM>oyf5PyenGGoegG(1$Yz5vAXTm5kE}AN zm(D_4UL|;VNvc3#8*}D1q+i4I0S=wQ01o+>;sEzDOQN`T&C2YUeG|sjtPcI<;WKgD za+1mB&&!=R3!CM$`~j$f@Zb{MfVz1v)+)O6{j$(>_RFa_x+p0x=(-1v;uaL}Hyi=h za8HuKl`c$l^3w@-G;qs7-K)c#2$(CSeUL(h=s&>L>M;xF>%8DvRCV(hFvGh72Lh58 z)DbhB6SONc?Xr#oWQW4Oxlo975 zBAdM$@zS{i$EUd=`c|N=`nKM2A7z_7o%jWQhoYTP_`Wu&EDe;$0ETkGMSua#8?)01 zX7owaFkiga@y&{Rc7uAyH!IjsK3DNQFw*wioQ|7$Ye9X~!E5a+dl@^=2Roe$c60Z& z2jPUt&y<6=5J?I2x_}#-sdhDtS*uU62@UafEVE-8;;r69A~wWdC-kVX>m+{dIDBkd zm6A^RQU>omG@jjr?hnn=ll#xbiM?>nU;+SyL|*h4&}Gu?Mqh6(s-D|# z3X2lIuYW{6V^R-v4vGbOp@r*EIBuUnk{2EWI;#7ymry|UZ7OD?16~V<47jycSX{z8 zF;b)#!UuvEspY)9@Kb=#qHJ_<>zt5H4LO5sblBvavjEeWHR+sk;+`lT0zpsI3R!rV zo=bJmB9b?qxijEvXAeu3qX9P?;Q)7|BLXx~+_h7F{u#AguQYHDplwOlc zZt!`M1=ml(F?vl}V^F`Ik;@yuG{VaXUT_0e54h1cJDU^_e~0led1-wStJ3cgQ{s(< z@E}kaX;Qi8_XY0*zm_WJLBn_)nDmJoF|NMK2|T!$4G%^!EY6%KL=<0aa=inTcg{T_ zS5jO+X-{^bK&g@kjyN$|q3H&)%`-P3d_#&3!zJ8(x0iC=`M)yofs>CD(fNuge3q3e z$KxRN_0m{y5$d1K>mjd2L@LkTaArb+I6oJ&4W7%g)Ibq|1K(#cKEC-1@WG-8azqw; z1sFnXy|M(&8?S5R-N=K7!B}~6^LTfI_mOP%k`>ELnBiZCOkI^%T0F#~hNSLh;Dya% zA`wLc7jEp9uF5gSI%1c#=riaBu0^fH;evGD>m+K9Z+%N*EvjBab@dq?iu5Yjp>Rzn zAE)(lrw_Ia+zxV!)1%&XwvieI7c#KYE>pQ29yd5OFp9 z9~zZf`esTK%k^1+(!^f4Zz$5@d1UjF!`$hshJ0UBctYhxmwEXXCoeh-TtOI^W8uFf z;^-?ENB%0vM+;vMD`B{roR!zdqvY+fm%v7=f(2f?AXvPf?8rA*BI}|1*8oOtgUE}p ziti;^5#`A90h=e^knAm}=fgu#M^|U6jy32bjz+39cB<&klS1&Yuouw62OP+cAqT!( z_o#P;D$ZDDuQB=l^(8OgnO9Wsj0;8;w622qoS=L|M@e%qU~wBrP&J)>>#240_2fqW z3g6^-ObsFGYt!)y5~6=`1z|d{wGzJ&OMG@gZ0&yzfp|Li>pwtH-@;l5I5!EO1RsPX zD8L%U#BA^|=P|GLECSXPExHNqXV0qcNtky2$(S{W|0jV{V|=(bPztfgF39u>t4$p1 z?Cx3G*him7=3osn$GT|FAS-=^^Q_$nR>HU12m)(G*w;@T(<@(p7(1|Rhsp&Ml zgI4_=MtBLLhdAgNZ*tw9^!p?g3?~&#H~GHsugEVBVbEbGW7FUd2-&M!EC~O^)`9r6<=R~%g9M2I6fvpEotHb(nbD)x-y!sO{jhfb3yB< zzymlIELl5z;fkBo2a~Y2?v8x$VRBsswi34=1lN{u{zLRDyq?E7#4?RUF8SNv|IYPG z#wHrdcaMIo@e4XT!oQ%~?F$*11qC|+ zr9H~)8281g$(CP%GO<0D$`qVm5Yy=Ifapgn-q5Hkjl2#tz@8p7u8*J|eP9N0xKTN= z9PZMj=mjXG>FQdgZd=#{o5btwf50M|~2Lh;`y_ zDFz?@!vhx|VJDKtIxl_Q%>JQSj{cGN3swQe*Q<=9SX5g)rF7hklqXxIoX>heyfx%O!+~plpEWo+|?pw5I1vwh(4&60q1~zlTqP4X}bavC*Mu^DoThBr{y zWWySMFiY#;MTzGq^VR102f~s`ta>_nzJOtekZp5K4G_b*u()S~Qp5VjH-9ga`A(WoV5wV=fH!w;cO>+VYROHXWS*eOr9wJ49H zX;Txo#%NMeo*2^vVGrE*P@aI>Wnl!g>~m~c%;YbCPzjTxedNQ-@Ov|4pJn-mJigqk zFIIwF;@y@u;>XBfMqS(*y-+V_Pq62QV<&vo_G|6m+J>N~ocCaL+W)2Qt!>}D6nJ1h zZG*=V&^H8+b@)i3a3q4kQTPLNj>eB=#9Vj`0>s1GeDSU?;H$1I=<9iv%hAWMO|m_r zJjZIX;{#7@w5sz*kWUJCMzIWzHe?ljBb9L_yUk1a6*b}c}PdM7+a8fIT z2$#6aeKdgVtTmyQi)<&sQ@#f%)rYL)*amp=th_ZAY~ zY_2cGgW*eCl;23JvC!s55MNc^G=2o5{r^Hig7APS9I?OGYi zDKtHc(Uu=3+jyB^qsZH?HJ$aSK!uRNRD1kVA#Ey@iV(+VTb@X?K;TrfT zzVqmt<$ybhkJ`c${aU(&a|5ijc5c`;T$F4H@1%L_#qwS}CbTW7&QXrrRet-2_(}RA zea@%$GbhJH?_mh?f;c2+eri8&$itB2@n!#7_K?)f!~KBg(37$sKv3Kd=)8pyc)ptD z_U>k**@xv^3f)jpMZyjcE5LSiYlbCPKAlUbGHwSvvlQEF$zd$Ji zzrpb5jrQ4p6Lho0l<*V|Wb?FJpLpo`Ob3q_;cY>e=TznyG;Lv=whJ&$7Z^){>FF50 zfKFU>tZ?qaV4%J9(-c*hroPWS+3;m3rm*-OUSLL9K6*JaPJY_C zV50Xr2wj~+)0-cuN<(-G89Ni>rFv)XgoB^4-=Tu+*l&rP%9|qEBf5960WDT(Nxp*| zwefESslqc{BGY(gQOii$nMe!Iav6};SpIA#pW~8Un#k$korHa^OXD1l4l!?JAC3Mu zkW`%!96_*T&MGLga)6&Ly0R3vYjO3s(v#*-|UYgVH* z49${?tnoq@sby$9^HAHyq&6Hdi#PLkUJ!>;NMylMtNm|OYZ26<&L%l+4I9;KrY|zH zVI_uG#`ginzW;*n?9JRzm8n+rF@+PEaLojDS zI^NX3CetM1rPf1-PN9sXKp51czXpm1h6^Njnn$-bA8ph zFuNv?=1EDIDd3y!Y&lpU5!~0|(n}7VM3Gi(F}v4d<|UXtn!>Dl3CMH}A0_HC?5|4^ zj9(~H`{8OcDL30_GanV@~Ot#O{@i2 zXI+k57M-9*i={CY3?;C#RE3xK|M3Yy}^+L=BCry1KkXur?mpAFgwhW zN&+*5=PB($h5&g=E0D4dhv7ekr|PzEVcSh`1qyoMm%#c(9<9_#q3Kj*gYQ2M`580a zopaCJiZ(-%>wYLGCre9MZ+4(V)p8++TnZ-Wz_3fUc^8^o^$1j3%7^Rl<4Sg7qvUvm zsT@sMIX?Lr1F2*tPqE@CXd(DLWL#IJ)3YCjo3%>I0khv}N=w>?W&-H5lm)?+Xm&Ni zA7Pf!SX=b#e}FK?xv)R-r=$KS{OEojW*RHkYLcZUIcm%hEOY_|dB_Ji)}nfXb5sR( zf`6yt#Nn~hfUsYjSV?(vAkctg9uWV}02bx%q#d8z(Do>ZT;71Ak6;lAhNwxx4z7`+oWHk69A=JWdn7e8ahKZ+Kfoq|MW!o+pW;bbR>PiB`rbV1sCuo zOSHp<^cUc%qu$Q?9Fhc%;I4&CvUFg!)+E$vFhiz+V*>YsFd)3ih_%5L>JiZXO z<<{HWnO)CtXKJ~~ZKr1q_h9p%=guwOBbb6YCH@F3fTzwtV+d*8+;=Uz1dq#Z#ss8c zFZ?k%3!8*ILx=na;i6FZ6U6z!o@_~9u`+-XoU&|*Tsj#qhONip{2dt-eFFKejq^c~ zcke(9q;Q7S0%n;s&XxVJ-R6Z`&@p&natSVGMf<(U)~0i{R2-e?B9RM?jQM#tQ`%eo znXVnjZoWN(MCx)i;M~lR*B7CftbIrSf>h8D$iUG(1J2t_Mvtwno#=WXOUmk;&WeBq(1yGvs%q6Gy$%=}A1*7{!&?Z&fRM^Hz=*r!d7sd5=Z%5ZTf zF;}6awr79jwRdQk(&`S)KFGWU=exXc1XL?l@*?4^^2mATaKL!G$V7n-t8I&0Km<@d zfb6`ImE(b)W%$L-o>hpuc@9zqBKu;Wsd3sj#_2%8DRs|H*XdCTA5M_6mS+pWThwW} zmRG$k*ar}VJT4wdI&+JWnHT9YWxw9u$}mIxJ)BP)9@p_&HfP{^lFTQt2D31 zJX#4DeQyJysB!iNj}5Skw9pRh!VW*xcnt@xH@S3`Ip8tWaSv(EdpJyJaSvynslp*S z&W31)`09-)Ub(G(;DLCnmrLlY+TOeIQNjQIy&J_2TevCTw|Jev6wlQ;b?x|EpeQ>e zW5ghBk>L5^`5^MWqyZ+cL)p*;rM_%*3S?Wb7Qyvr6z624GhHw%QqQK$%|_?CgfrHc z@;Mw>;1(84HreoM4j41?S&$ekKzMSX5%1aSxsf>ID>dWY%!oq}m5nHkyRO|Cdu&P4 zJ9Q6tjvjlFTKX_5*FdT0$#@E0YOD<5+`t8_O@f{MxH+rUWA|(|s_KH#eYQpPP2F~H zI6(L)QvjuAVYd@9#-L{m%<^-lRr4o17N{m&|Im{VFJ@`j;F@}`z=$ivX& zJgg>x!;ng_0>3D8Zvc(#m}V_X0}RnCFpddQwFpEMqfeqms+xK=LP{llJ(WbzsidDK zNeWR5do|_@P5?jGi}>RBr_4SV_?)hDPJ$0+uf@QJ`2ZOq-uPxHyaruUJ(**qGH5D$ zcr_N%2V9Y@$Bf0%Q00vH$7V8{yu%jl*a(@_iQ4S#$He}4pU{LjP_yhdEvo0va;n0tXb^<pt9;g_%p`J8%93M1}KYz z0^k+CQ|ZYiai?rrb43N3(Q1e=S%<8)8GU=L8ZuuC?v3KY!wiPFn1E1&?4s9dyZ#E^ zgyiUAuA2{L?xpx6v^d8!CoK~|DuY;F)-TPO_I2gYZ!YhJD-{6S%JQOLHJ4xR%4w8vED8gUE2iZQVX0lXb} zcWw9u=z=M-$#|yBe~@*I_M;1xY1~|Z10jf? zY}sOP9Vf6B4muqF!WnBd+dg>7;AAicgp(h+ZaM+0_9DekvN1u4Y zDFf?HJbB=>Q;rxKIQfW^PCoJQ(+*?wkmNf2=u=KT`RKK$F~)*ev2@_@i!Q!&^QBvW zVRfmEMPnA(mMt2nUb6A>%LiU@(Zu@L1}Tt z{5)@eZ}B`pKEf5}R22G(%Kurk;?jSVEvLAosx*IoUb(k;agndoi&7zKetDHQyP`a= zxHSJ-&e1LxRp;+f%JZ_zy~uZdX*OaO&F4DnwrEfW-~8+X?{H52ALXbhqFQnleBNx- z4(ZqhL0h0b?IIMT47!l{zA|Kn+|jP(rNsrw-t1B;A435bJeg`lcPol=5iO^tt_vu{S3hy-(rn!YCcLLaDbfyC{3Uk9v`EF007N)2)&0U7Y9R7JwOW z#%L@gZl}VnvpAm&3ppm{qb%I9WqJ7}l+?WZdFa~`UnvG*xi_(QN_zxAe#K}a)%s3K z73F2+utVwz7<8$x%uW(%&h-_cA#(E3p$(D`C~08VUs+rc?@dHL@wh6DPYN6%7$np% zi}G_TD78}WxBxq`3*)OqiSx^-EGTN1gGjxV0ZTVY_f+`FZ| zdA`z8B*0o4l7-m|D3ikC+a?1r^*N7?s|l;&N|6eqnw&;-f>$iszLt zCQB>h9ML(s=mdK(a!Ph>R0vqBatZVD=U0?+0CZ1*uYpgQF!vf*%s-2tT~wtCjee;p z;Ndc_w73u^n3I=Xgpxbsr5wYujOwRyKppu`fyQ~>Y_Dn~PA?gq5l~6H#DA+RhEWMh zn(Hm*;_151hf$y&xZR-EPV?#NE>g}NL$}zg26Le=H$U53URBbt?$e4(7yQFfEXGZ; zROOz?to=hGzsRnNe?X`P)O9P&&V_ebl$~FYJ-5L231kV{aL^@XY>nu7R0BgS+in5B z*F#%iR#E-}ZcnurLL+xHZgzP&O>=A#lrojqP9qVv?yJl$EJ5Cg3BM1kS1~DQT1kly zBcT$btDtysQs4ke_m$=^LXR!-d8t*(8Z-;p0%ddghVZHuu**P}00*Rf_T20;y+PPSn zw(=gjzXL~?of^%9zA|_v?u2Y)S6qMrgeF5C^Ye?44OOyX-~ZE7+sUyrLnAvq`}Zc) z&VVdicOj>*XOvQ3VRpVVQIz>gvP;=ysBPE}7Wztk1yyhWMGLs`=E8}Q!4zc|`p|gA z)KEwmbN{^T9G*a&aX=cUW&cquXiI&?^8$N+7|m#UC2-lEZ`ddSW7uvD%F<~@Jpi@8 z_ZNlisDa~Sd(PD>7AGmH8s=QC0nFlms(|0fs1-2l7o!Ucs_bOSD(1pN-#`-dUVJ9cV_MuYW#n@R!~G~}*1e=_~KJ}lSfp*8HpE|bqc?M$^E z42+j$yr@g|#yho&w-cjPAT9p1yM|f%3gFR8i{Ye`z37U$*;u!r{EJJeIf_uj!a}Tu z)ZF8x0bwVljml{(YOC@xUO@7|VgG<}*1&`RZJM&vYM2XJ!CxxOf%!1&`LOM>awHcp zpP_KPw(^!$m6iJn%N&y?*N#cK0&cN1JBO!G9Yh%m&5LSHLxY6t8`$z>D~?-n>PN;v zeW4d&)Z$nZ=Tu1?8VeWxqxjp3 z+^ITMj%?=tUKs^8Bl*n2zvb)ALwV-4#y&Gxdppuj;F=&XI1L;cN%E+MCg za`PU8R}NT6qNZ33miWrCaC9sYb3{SzVoa;au>7JfYyxGdHena6jY{X^vb4A=yP&+P z%e+z_C?89}Ma4Pf-|e>WyO{#DgCvh`@6-?lQx#?e-#?vS@jRy_B^7fK8EpxpEh)%` z)jM}kY&8#~&2H|8ThI8oh!;Lj|mN?0)JQ&`%R##OSgAUvyF; zI@ec%fmY_lPKBltHd5G889XfJn*XxO5u>u0LmrhJKI4gDq174ED8JQ;v!lJ zP(b)ZELxmx0DNA4sejC=2u_{U4q2~TPy@9XY*;*<$71Radv@>Y9X-#Bv1%ujUsQ(E zg^F^g_66{z^Hm|T=VQrLhW>=(qXh#ts)_!&%)b&ZEiNnT!mUO%$tkX&RhD8HK(@Ca zdvRGsemT{)z=xG1%??4d*?tk)bt7vx^9bf*#6=x%(5+tFI;jn;RDVAs0vi5zt=FZ_I9(=1gESYo|R5Mo!Jw8#10tdUkYbSD=hBRz*Mkd zw)Zx61$hU0xf0n!*zwxb1pZYXObKpPw-VxG(B~Et(>j4_N{vdj!rV=(mcU|A(toe) z-WHp1Z05 z^{Ep9a~4cBFfCmM6rt3Yoy%KPzXigcFVnc>tI!rcSR^%{`qN81cIc`uTnlXBoi+6T z*t&t~T)v^X&Hi3LHam1tfiD}w5A#xBI(p3c2QXGpnD7R$!ysSc)ur?|xWAPe)GVMM zF5kxitJ?+xz?np;g&Lk{dGqJ_y${W)^X)U_%NbE|X#;!J`DNSdLa+baOikbautT&I zjm8Gm;#CH=kIKbkqA1PnLiUCe2tJ=G!~Zz*!;agF)rT*;w5vA@CQhACPVF*n9nkH3 zVy^b$v`*#e8Rswl({NhH{H;KGq_GEAdv)#o{8LJHZZ7#-Y_Jxi2mPiQSQxwXx|RNJ zG?yC`)i)#>GSW_AOR5&ZKp6|K9R;RY{8vjul-gYwWeKQJBg zyxfle=v3+_`@qkc)j2`R+fKvYf6>yOr;&e@!S2X_bvjnLYVA!1Wv4{p{40XL?;dQs z)iZW)-pcA{4ph@&7(@1yRo2xzr3h#CW!!hZO5~N3PaA07k@(BuRDv2IFagXW0jFdB zh4cS>6lPZf&VuX(ra;wEg+{-qg&~a4UP59kdASFW{^>7pm8n){Sdqb)*bZ&WQE4E3 zf4jkO)#Q;;Tu!a)JT9X0;NVwny6Na(KJVY*wpHQEDlkpp;F)(KYE0NkQB<9kT7amd zS1e_1Yt5dIO*;>QDm_|wGlwTcIoMV>K9UOLZj!yijbm4Y&Vg}w=B#_@AkA00h@KqKG6;yagssz) zUp_Q;)|qxsIws@a=9c1o23rq)UPTjr8O~JcK?ZG2aV}O~jHIi$JZNjIOmbkR+S}OW zQm4RV#?;i#$$~w$Y~O@l=7RzqE?{o3-Bn*a2ghj~ZC)`8A>1^qR&g3s<%|fYw6Ij( z0rL?HZO;N619vBHdr)M3vX<=cIPDGSR9=@B4^eWxbUtL)$mvYgp!7%uPi3%fcNFj! z*!#jwVKRtM%k+-UjQ0*r%N(8QH1V|2S)(RQ$?{H1n>;x!BWv{VOfOyv2zW7H#+M|wxtoHvoeNf zs<#=^>_jG}O~$%(%DA-2-icEtPn?iBT+PPnIb{Jo!9W#C&_4NON965ueKh{?egp5D zof#D!SXx|yr#&zWuJkmfK*#h|cva(`4Kc-U~ z9;)o^^QJmH5wZXiCuydWB zD?p2&Z`G1Pb#Znf-Y$R(@>h|f+ixfM-%}_n!7e!9a24S(y0Cpvk1XIM^ocP&1k6>b zk}IIp=&Thb$2h?ul{&FUuRBJ-kFAv(^7kq?Ddrv|LF1hqE2@G64%MXr&el$c?JS_H zF7sgCE*BYh0h*XnpI=;zLt>oq+375%M~iTvB_(JX>g2)_%qDmsg=ZlZIL<>{ET-pG z6sh-gxHo8mgjr#YZKtA+4(MS6y{-`0CMs)R84QRFk{0xA29A&NI}zu=K06mrRngzN zHSi(|Mk(7i-QwuFZuV&C-_@IzLuaBi3~hf*Wli%h0Rslev^<;z{cZHxRdM_+V*g{k zM(z*KD3hH9YffGOd^k4}_AH7;4RZUY>htCK@o<>z)o5Pp-XjD~0#91@Lt_ARu)vFoL0^se4fcs&RE zC(2A0h#HMswb-Aszl!{x4fZ{DLYPk2XVG3pKSHG1+PBN_^xE%Rxy1Acf;PH3xRa0? zFRFS0_Mn!yd}Iu3p`{*=e`;jiKJ)zTgQt+#K`#{YLY2k=4N#{g z?Sf!*SMb{~`U#yrn1-ju=?UympU+|;(_jsS=Uaq zH%q59wk;3GOL~}fFZaftUYMs%oQOc9rw^dMq-LQ-hT3{IeAke4TpSwZcKTSlX8pg6 zf@bBnI@l>WM-p~j=N4lWmEwE?i&V9H)yJDOgy!Y@3UbSEoSg&LgEmA<&7~)#KCDmT zXUuXQ6Jz~F2ON4b1Cd2_)o3gu`gAD4s*g86`? z42P^R3hWA;lF&Q{b-=uCr^5aVW2dYNp1x9_JFC+~0vrc)^-e>~f--t0rb5$!BhGRh z|4v7b)WfhLcwAZxv#(TZQurr~0@#TCWEbU9QxSPPE|*=FGKv|GbqAKCxj0apk5{>{ zTcncv_rk3 zR)2Q<=D{p&gxa6js|zYvL*q;KPW8Xd>P@5o&YPl11G%2)Zr=8jdr+GReNIoOZ}fx< zeMK`8#t8XL?bGZ%pAQxtaCT5UmrptaPokZWuw(x*wDb-{ zj&=R^N3T0~>5U$H~jhr%?J~z7u>_Iy1h87ghrNHG@Q(Y_~r@PTqSAv)q;tcma8aN&39@DhF@?&H%>{5y3Aag7fIqeLn^ z-f5@z^zmZ55cpys@do&9gdL7+3PU>j{046GKVql_Rg3;d7WfO*H4hfIN3D+v7Wc4x zD(Ze*?_+s@S(sT1Ar!?Lmyr8cWG-I?E+%237f`Ob7dD%na77Tf z6;Gs6F5jh6E&2?yl0!xMAS&A&mbXI&iyKB#m~Tg|LEImjQklOWLuH;hcI4Pl(RF;| z@y*3I8OJi3ipG;D{SPuJwJozKyl*zejmiFfPO!Kto36Xfy+0~ee0dF(v!a0R+`#hB zqA!br#ht|@j~3JYYZuN~7%V!LksQFXc{$ymdL5-)#&QkI$63C^@+3=h35991gyQyC zLb0YV8MP!>EMvKuK$xr;TWF{h;P;L^4YsWFv9& z^%UkI$YAlz^%VDgmS3|xdp(sZrkd_|X4xIGxfoe}EF)OVuBO^;tzJ?cEcUQ`g~P-y zr|?~uQ#)kvbtYfuLxzgTF4UXl%c=a=K^rQzFQ+@7Eg!WcRGj8(*A0|HJC@y8j%Rs) zCf&b|uUFhacCwkT_wjW-%i}D6VtJmWxq|ZQyn@P;xq?!7a|Kz^Z!5@3`_zzj7|S^< zOIY4fLm|ITqFiEbr0Z89@%0)j$--N(9JG?g!UUFcS+3{%53qa;GFbez^0SqpBI+g@ zFJ6}2Z=zT;`Fa7%W<#k3s&1lOHb91o{VZFpBL6Ub6_ue7GE`KpqPR6IYayG8_g4Le zQT7?j(<~!yraNsRL&fzsQ>=Sfehe8bnyjV~*LF4CpS^n2>R^$#n(}>iHIr=OoJ;bh|5|*xMJRa$@yb-dws9kd`qq%r(&7L*Q#Yeaf6^+*Z zgzGMA>3-(gfoq$J@77Y;&a<4pj;?bcgT)`?Dc_Up-dz_geur!-#@tHxD{iG6Z-8tn zcJdu#J>6-~@+!y)#=q9nczJIc#2?%hbf?l8-%Z=)1Gx{a(NaTA3cz%p$UjjTm{eb*-PGrRcu_f5agq1l1v4w6#b zi~pMoZvb`I6vVp0B7=3o_zt@WF$20F#0p_507YUhipQM@u@V$5qC{V&%^WgLOlR7~ zArr-Xfv+kOuOUUZ=pu@kK4j_xq8z>uXOP2S(t+r^!&Af%QOc==Ny^SWRO={ZNm`IF)%wB~nZfZ*cvtl~lip;vLqlgDx8M z0nn++XF~x8OG+ zh>kGbE^b2(_-$;2bc?&heN6a18qf|Rgv7T3pbpQ2C|h(l;w!{HlQqD5;eZn+C-puiS z0wv2)@>Y&_iQ|ou8#rX+pj)j(=(cglL{L9DPS$c+(m+9Cocxb*FWMzHs4Pf;9_ElY zK-V3#lW8NTk|Fn~l5xC=@)?6H`4z+p5|iayoXW8v8k^JPdz`~*P!Q-SQ)n>JO!*B` z5h4NP7CG_{j@K0=!~zht{3s5&K>o?P8LTUmhDqhj*A&E5r74(cxu!6aa##-QrW^5mpg3`- ze1JnP0=Y5zKuG0!4*3L#T4GJe2IRkAzRtPd0o`u7U;fM?@8yv7vb9Ay>|}aFw#RUY z5c@QBv?$HPOmE6$*8P|1J=xQu7W^4BNPHmsvCie9`h6f%Ey}%_3t#Idj>w^`>jw$~ z4P%-NIw?PsBboA;K9{4JmU76?%P|XHPbh87VCax`cC?oTy9F`lw80R3yL&O%W|e9P_*&0tYqq`sfx=o z$W61_&+=NP47bmnVEidpTLL9p0!lP4$Xl&ywC5I08(8-QCw3BsbL30dg zJjN6jM!8Gl38r?Mo@5%T>1n2^nx0`Q*7O|LVU4C2m>vWzF-+qX4taoemQm02IcSby z83&loYuy_huZhR!PKWLwTS$_pJB|W^jCZ&WLqI{G!{{*~CV;jYF5`3VzgeJdMkC`} zrc%~L7(a0;H-ON}#u?VF1qFeAVci3s$DwOtoMYYFtZQQY#`LA8KbU@DYHD0$3J#}K zni}+-QW2sRXsglGFoI~rC20y`U0=`vBhqNhl*ZJmx6*o zUJkidQ+p11M>u)tzD76J-3tl=^#~%L^*9|bV8t;z$nUcT8rea9pEXF++X#8w7-G!h z{J!B-(u^fs>Ytg08Ou2b(Worwf-&4!6+|;-Y$IB^jWTZKvZOQ`Ol)jKi6X>IP!Q-g zPGzB{&8U2Ys6@C3bCR(e`3bQCxV{#dw!> zXIVGfIM39iF@>CM{K2UtHy+$5!JKXUiT1#%1ZO!xBG+geOd~Z7x*##%=*Tn{G#;z1 zPQlb;SArtUe4{f{E{D9vNC}2J6-$wdThtgsS+@@PrHPw}pxX%=Bvu*eOoud$ViFNb zH;(gL;_e=iV5~AGVn(46u4pprrbZC0Hm0hOOt%kv1 zYveE;&^jN})G$hOosq}%736#hX`>ys5?U5!EOCW6Y{&a8~3p86{b6l{{+*h`iNZ~@N$&;X4XB5uP38AY-QSQbZ2^iLq2Zw1_@CI8YG@Hu3+8!9P&wHXb6qX zAMiChL1M2lE`)X{=RtAeIb#Bc3~ff`eBPMEsk8?T5-%E4m)tmuv+i}K zqsDzqA2WS!?BqIp!?}NLJV~xcTwvV^V{ZuAQfMUA;XC7%5Nhj=pnlf(#xc$zm37}6 zKQoO1)tNsSzi|%PtoyXIkY! zd#P0cWRunlA-%0B-<~YfS%{H``FGPue^K?eR9GJ>BMc zTwh>mwN>@nFQ-;_ZM#uSt?mywsd@yY6pPwY_*>dW8NtE#BIMNS|Fn%YrdID}xrgP8 zEMH~$7R$pdzk;-5ooqV-v3_KEhUIydmsna}(t21nfs~@Nm)f=`Uk_$E)*Fla)4f!- zzr0lDMsX`}r+FM*w}I>fk8`V&W8;JYW}Ik|fW4bYNU+1$ceW;s#bk6bq0nqt>!|jn z=A`P5kljVU_G=Nw-vUxhZNI^^YjmmYF2p^<@<*0UymaS0U%%L%u04FG9@jXdYX2DI zhb)h<{FLRFEWcs-WBWY_bB<+j2MXV`!(Pai9rmCkJ&~FegIP}ZK8E!D{biSPN(bt% z?j5P`2C^K_l6ug#r5PQmHMS=Ff;y6Ab{9U}=`L z^q)?m^j}U|1+B8rx02T4`opA+*xOQ?__dTy_v<^bUi=n|6s=jV?o2Dbw~|PEx-+Ho zXJ<-N-D#QJ2`dkE-7cA8Q6EWhWAaqoU!P3j?@FG5>p+`4l3W=ywfZZTCt3c?@;8>3 zSO#~YFp-dU55{(xiaT*EJFx7`vM0+lmZMlsWI2W9RV?SQEM{58axu%VP|m5^p zn}eyfNuFf+Gt1vtUSb*Cg|v~7{?=ZGJ8@k|c3|0=WlxrAEJv}N$Z`tHt60uqSM6x3ZL_YMlNTj}lIO+%(uC$%N{K3^Y!w6$OL4#oXnSYBf3?n8H)u#9Dy04c@! zzLfr7ERBA2?PA%OWem%Nel&jjupHhm1F@#^{cM&6{isG|{W5X?hJI9wb-3SMZ0)z! z@qvT-XCU{XEJs1w`3B~-wm;>52TNs*FZItw$T$0w&rvhuC%Bg4O#gh`mjh_l%N#)0 zGY4#d?J1w8JT}d|cJC}7K(W+Z{LujNIlBf@UeB_8cc9;EU6o4reW?`Yc1V>%cX2j# zq025q%R!Xdu7THKWs)?g8ZvbdRt;k6pw(Cd)LgMq;Oyv%g|0a9=oOUCYgYuj?YN{> z*LIk@2UEzWSo*`;{djP2PxsX7PgtI0d5)zqgzh(G>4mh*JYop7Kb5MF_&RMfX1Z@# z9!aL_-}w3~zCOwFFTV3LUt2>d%q6~d^L1nwy3>fSo3V^x*_LHTmR%v^M314JAO{bn zx{rnQ&%8TPHvi0P*Q;@YCzNK`CZT_ybLoy+FO>{ki1vJl(=>-s$~2qAiN<{0ie(bZ zUc;t`+C4>f(nJ)be}nWlrT-opEbdO!X80@U&_S+3@@^`#o`D*_c;7Q>$yoQ0-o1`2l1T(PV7nkS3zzSWkEp z(R(a~FCN<@JWkY%r4jeo*ni<$?A5w)@7T8CQ>&k6`6{Fo2gj0C9~(=xQ`h6h(e*Tz z>Q3#rjhN%;+7jRK^&c#IjZZ)dJI0eu`q$^(MU#vS59ON)ZCnP`s3XfR8I)K53@X*o zj0YhLGfcGkUfj3DFB#jzRl7~9HYZS+(`{_;Bt@?Y_I02&VjaREcd(>%rdGd#>#5bp zAe)G@6BfdIgifT?A}3OLT27=p8z;_dBtM7XnlZ0z?N?eLD#<^0C&5#%?vLECVxz76-w zkWQQ)9m?CQk+LuAIfQ>D%N}Jaj4DH%o)^?UV$GDF5OVXBvyf^%dGC}R7%w}g{Ej=v zSgTT=IBg-`ewsaP5#%+~u7gxwt700}^oD8GxO3;US7BoxOsm0l*XcJyuAOd%*>!*F zs_${GxTNA%#?*EO43JsdJlOqgBWByb$5ke8DMv)5vST`}9P=|96X5eJbYX6Mh6*pm%ByMoZoHaS3##vEevi}Rdgg#Xkc--ztNnP`99pOKp3?_Ee|W_l zYX1=|$FrOc*4&3K?Q9P)Acy*NIAjws zDQ8;qI8mKLb-XEu{PPCfj}u#2ZqNBLtcmdD?m)v5$l6oiYt5%HiOlGd^11zUCu~r7*BwAI(jl`+B9oIh5NSOYc!v{pYnuJ^X(NE`GA+?f+WgC`BEK>`qtWqMfJ{rBI-fvBkG-O9cxnc$RaAkB*-SBwuok;CyTZr*6X+<#bK6e6}>+B z-e`Ng#C6#gJ+*pc@ivs?sp6wZ?XBWdxN|>zX&>=bu@y75`uAd*LEI%|MQ;_8J#;SV z71LczE_ng+t>PabJC~e^X(k`tu&M_=nGm8rsCA1_cmQ>Jf@YdTU+!+$ZAb@w-^Lk!&L8nxJ5e7 z(ROIs*J2FF6HlqsyWeUt2`jM#O~+bH1Ep&Ero}AK2t|_05+cSiop4hfLPV}6szZn< zQ6#DEE^$y3)!ilbwWIt_NUEP(q_!ujlV@7w;!V((WRgnnmR+r4}mC^pq|lxu(-GXF$so$@4LxB1Wun=n&{+Cr(pP-^Pl3{Dcr$7PW4yDAz=- z8!OHyvrb-&`JI0qiYX{OHeR$AMO}zivVFD@wTfI%#72oWV!x&Xu`!^7nm&cDtvIgf zG<0pnX-#I!DB%^ZuAHW;Rm&Jqq^91`#ffB1qo9iu{WQ&hE?!L3v;ewzF;mlRE#qZ7 zQLgF!mK{OWnx1G`B@)C|O|P{)1lpnLla^g%d$CW`Pc3_b4rnr4Rf!Jb3r*3j4uMWF z)wl+>8X!9gs~gp!#x8sI#J|mqV`M_+f%si;>uRTWs=y>|89DPEo2(rT9MhSL#6kF?5>DPld-a#7bRRHTR! z{K6Ui>g$(G2bq-3r-)CPRBxsTY;WS74RUBtp>1yHai;x#I#d!yT zf(NLQ(TE!)JWMNHdEOjjkVw$9$eRaB(NqK76=Ia8jnG{ovNUb?78!#@fu={jWuQtX zRk9)C*g(o}h3f@xlo%q;GO3mrB3!AY+aeOMqhi)^5;%#$^ zMb7s@?NKDO57e}v^cJ5Zrol_Fn;ZTLN17V!5AYF70L3rSB-JvR!x<0p<=w)qiGpZ z882LeIi9SEdlNKK(^|yK5L-2EMw$~u@(>krTihXIk|@!1f80?qS)5kn-idN%3M-96 zy7w_fE0S-c6s`Lhbync{#B`Agg}BTHlrRr&oA_mwe49CYYgW2z_^ zrgRrjqiJG^rjYobjA`O!rsbk>{88xMb?BTiT_mSdyyc=bbXVb&hUiP#BmPfghS;IV zJw4tqXNl)ET^k=_&KB?LklW(J%{k(^xJu;{=;n&9nl2z-ju@<|Rl63Z zPfXC1+U}^BCuVAz-L926UsN$EZ!@0~#9w{*sdg#QslWQ5^X;neF0M^7Ary2A$6Eo* zy3Lp`b~BxDQ@lKJSdpZ7dHA_Eig`j(ygbp1=}UKV!X6_}jAK%%IGS3z9@ER zr*Vy_R`Iya3dAO*bCD$%i9MRgT8qSCO=PV_;;bgJ)*{h#B$cJ!Mb=s@+A0!ctqVo6 zCbHI2k*bO8vsBE~MD|%GuGK{LSuSqUME1EzY|=#bxmfH_FoyNV>` zzC!dH%Q{K9*NAPJDEAuS8mDw$Bjk;uoJqCIO0m_US$He`0f(+PZxTmTJf59y7I0#m zJIzivi*zQMoo+H$i!7$PAv8PPBJwgQq-xzYVhL0I5SnGykU~_84c>zGTTDM)-~P@3 zy1o5&bDb0N@%FXmdU2LhQ6qJOh@L=dnydDi8$^nxMc$V{shVn_+bFU$ZG>*4n9Zc- zquWF^6U|4jnYW3pDkS&HZKAdTJ?qdcahrI}q3g{};v`c&x6&37F_B89=I|{di%D7C z?P8N6p0&4%2bokqY!%NqG)rt1hZVWHb*K_|h*O$|b~pq&&!p14Q>09y{8U@tCDNHx zns|9&oj$TM|A4 ztzl9 zmlW~7s#ct4TIp()cnLb!l@xNNt4CsxRV$h*Vw?Dnh;2a04mGv@Bd&0$rS-6wqlo)& zm#EZ4{kKchFx9(9B_>#ph;5oO6O%x$t0?z6K|94q#U4#GsvZ@m9Euma#gG{)B<+tL z6RVi&U9`J?Ol;RgyX(h9;!F<7R`<9Vs7TIE3>A-yahfWb_GqHH>Tz*EQw{69vp5yG zo~c69Hl|9Z8rMUK-K@vOdQHzJ_6FU_q{i(N;$bFbpHGP64vn*(5b3ii2hvTko)TG1 z_3r;BMv1+mK+~zj7*M4O={lEKg-_nD*A$#|2((R8a?&j8S+Pe`|D+tyeobVb&xs?N z$UdJF$2E;ey2jckE@+yTR048cO(jz{_`HamLsTcIm7W*vHBmo2F9vF&c6nZ8X`=pn zUhHrv9-r$ttBG3oMKLN{;I9rlccLAds8?PT=b36m9)9rqMPbe5kg_ysvGt;;)O0=Q zCE?0dx>ZR_tye@Fhmx#1(Ti!5*pjrudR2^LQoT|y<}gvqmss^;FH^lp@ARPcnmDT| z19VU%`6!2aL8mH*L_bYec6!n}B&KP~?zGQ(Ph6#mcKYv&5>3~1dc}HQtk+cB=|lYD z^lnWnI=yLuHLdFOzI8KU=b9qsQ+_K&tIk!R?V1u< z7n#R8_7k6pwhqN0WM_v?TAz!4Otd>YZG9<*JGvP0UrGXh^+DGsU9yfV08zhx;}FfF zej=;$Q>)IdAU{#bz7bg}2iNA#;m{Rm`cLO(ph{I1@mlBDpp)XXro)|=THlM*e9BVo zB2S5NO!b0Fc1rBjL?!!4)M=vJe-g(uQSLv9&oxo0e-dA5qEi1PzGhOs;3siT>nMkx zMDR6~dp+Cy8R5}HIh+yOG*J#`#1on*hcn_SO_akK@eGs70dEp&9p!LFBrovia88tH zq8!c%t3c@}hjSuN6XkGDoYX`)oD)3?DWuBboS4{vW-_T$m2+aRCh`U6#Bqn>#jhfw zi1XuB-fv=)B3|X47Ze7^v+%4#WuohA(D_t}2+Q|jcND=1u)S$nFmr41-i((0rTJv2L zdlm62_L7J!rBu{hd`ToKl6lF)f-Z?uOdCXb@;LfreU_(<~XAUwj+^i=YEdVycl z^T|a)E@|;M4Xkv%*5wsYD@}*HybkK1h{vB>c5Oi8nAG~rEz330D%LIcs*tGPhe4t8 z0FzozgvmMhaG_lXk1S(Sb@#|MOtk*|G{_@&XjssRmQs+ZYa&jmG-wTk%kwUIoaiB4Y|$qSn3^tG{! zTtsQsyXo|`vGg*j`bEeZrIWPdYa)+nT7Vpy$gIWwvNVx%6uIv28ikORnjYyI1FF&V z40KK9HchWV*HqSO`T)9Sa=)f8plc=%YNEL~QXbbtb8)0R&7|5oN{*|fvM4)?lIc}U zyqdw|D*RQ8P2TUjUI=O~r?F18U`shyh2#^nma;q`9{tL=iWl82D7clpDIi{Jxm}TK zaJSIl)^e|=N!=nqb((UzeTdK09@A9X?IM zCR&wvWiO^0*R$PP1jos7nqKYJ8Z=$gC*2Z)<7J7aAG>t|En!lv)J}e}gmO@Q+fJ@p z%EYadAh#*vv6&zbE0QuLR3ymiWn3~IInXJBpSZ$Ikf$`IC8vYVYsyHT7TjJ&@TQjh z#4J#(B8;Ql;0`jGNtLCe?6;h9P~}XN6PfDZ3l;9PXpSgLq3!eC6eV~O;4o6fWBZ-xp$E%D=5D@LA&cNa+N0XQbcZMwJ6S5lfL-OeHZj~Qd33uDA8T6*K}j|7|=FNo4bD~ddNMRc6L7s+OO%A?q66v+t%}| z;1TjTld`3e^2lvU_h`>=gGb7gO++=~xt@o_Xt{T@q65fbjQnDYqC-7@3LYmDZ&!4z zXAC}tet4^*Z&0!fdGHQJXQ9iGwRb6M((7#S1o`LPL~6}G$+p4pZhaC%CQ0u-q&wkO z)R#$FNjpqnadG(Fs> z3ZHSlUDLik*n`Mzn%?TuD`dLdqv?x213>#V{em>Flt(m)zA>QVn!@`=iL2xVO|j5j zC0*N99Xj^?P|T2CO(}hkf|4~&?VA=dQ>JUm={piMQBz6ZDltpuX9hc$f)-5mJ^lk#raa?`y6e`*ajSJo<$ zKO%>@a@75#+aMn9x5CPiC5rewBv)=?Qr43zcPe6=$dz@P$R={-yPBwPee$Fx>RX>Y ztBLw{p7iXX{8qZCZ|6yT^o41B|0pqErf8bcKL(VlDIdB#nWgDE=<;NpCR#J(%VU~o z&5$ooGO4;>BQN}$a!@06fn4$+k!pzray^sU2``YfOscj8a-Sj>^>l$etciNMK+dV< zRCpFGlv@??3|lC7GO7FuWx{_{Nb+@sGM7n>+ag)XMEM=Xr{Iq(5@7>kM6s-Vh~h05 z5d(@sO5_nuv7m*r-@~L^>FPM33cqYUhiSPOFkqimDob{f?u6WhU2>W1wTnX{hl-Fg zS)+(^D3{xrRLBZB>Jd9+sHl+FI5Z2iNfDo5Es{Gm(FxWfxmOdNmoJv@YNGS<#qt=F zn)@qd^rMu6YWXVJnThHiBdX*mMJ{@K<61dK6TQ80t-K~6(Fx0L5Eg_ER`v{DR&CFK4h6Z;Lz5P>*Xnj?h9Ei(;uUd8$|JdT_G#vYDGLA zZj^U1(N6fNxY72zLB0V`hpd!)Sa(7`I3V0yCBq)4RFo~5XKJF_ zu9kV49vhG&Z;{oS>IS?Na*JH8i0i&aZgvQ7Psn?jRJ*K|JDI4qML}!jiw+$OSu0<6 z=>3p&@>7S7hTJMoI&?f_gS_C-_aPf)#1m8_O7rKC+hj|J{tVeHJ7{V?@Oa4Wa)3iW zhisL@nN&;MDf1M$5(h@%`xUA+^&J=kTBB(Mba%-enr1_Hm)xys(ZDLPO&-uxJ@63d zFjGBB_H@YIvS1IDbGcYO@ad3$$+J(|WV!B@iBBoo2HpL#d@qq2jSt8hnN&F+kZT*z zR;ClONoph415Uq3r?zm_%7>khF``z!>Cj6d|BtM%>RK&&q=RcF4)DeX@>; zbhBJ9$by$`-F(-6S;s`WKSN%Y5p_z}d|-;JPL?|~()Fr5$h1K`o%(agYtmCsAvcIa zsYgRzm+vX!5&ot;%|upUx!#n=U!#!AMfspxU2n;W2Ncx~y504T+^6ZyK`qQf@(`2q zrtdix^7){DxdN%y^}eI~VbG(l!vXZH>qCbw4*Dthh(nF9c*RBEjYNO-;qh0z5kSL0 zN96@o7S{>TC$it`6mq%CJ@^gRF@%6@P_658xmOdF>|3bQOSrk!hlsv16O8tY3e1}4=6h91V>i$WtIi%uI z9e$Df-&aI+I42_xE2295Dl3^*ij2W+-M`8sACOL!`n+^~NVHtc9^BFWyFC4oqJ@K> z4!IytA60ZC=%PIMiJ}c4VeB}@#Jyq|UudFUF^yKAl1{aRWzaS4B6|(V6_(M3byRnJ zznRg`p?>Zlqf(LUsv$Wt#8|JXV8}}$A;vaM%Z5}5m$66FrXhzw``=XIoL1qE=8z`dmujB2)E(tO6* zQgeR?;{wwb*Y#;z-5rfqUr-KPTX?h3L-8iC1 ze42KjyQh)$rNE!Ep5Dg6uZZYj)}3Z#eywt#^T?q_r6zh`YN&BgQ%zhcbde`i z$hC+!%$TWZGtx{qPHWm0H%N>ydVQlp()%bQjXjF^eW_8#0ZsHi$|&QQ4*6!>Y4<4O ztk%){D5H#slbnj1-bWc_tWhL?iTl+(+KB#E#u_Q#DIL9!GR_#n zq~4GkXN+^`oH5?0)kJSdO)yR{sW+r18sd9O9pI9@a!}NX;8R%5IzQQ4XC(2Ls zBy^_n0mq}anVxgcG%hgFJ5hbbEW>+>>TrVJiJE0B(nRrQ8P!bcov2yHRwk9oEaPD& zdMD~-_iW=ihYq=~HV!J{x1h3(Q<~^4sBFXY1LarmA{)#$k~NVHW*cKPkqyo@rYXW( zP~W<9ja*G+gFd5N6Iq?l*rbW9Zl3YDCbGKu#*3QB>hg_)n#k&|F^(zXx1bgnr!|q) zEikMfxtxNmZh?`Y$VFDSz(~_XR=2>&&>_j{3XB;J{pBt+@|e`y3$;J|E-@tu|^LDhOR}?9=qbu!_(djEM6pl_!QR z4XrV9H9b4*rqGqfc86{ay~#MH=^)~*GE#n5@eU&1YNN)XJ3`kOUpRDM=sF|y4;Au5 zlzP2UqUrNtLBZ>dT8DOpZZM8(Is@HCqt%}(-kD*$LT@vsYYIyDg>EuRH2r}3Z8mBh z-JZ}bMxCSE6S~!iyr5DEN`F4|P9sIr4}+c$-DcEiYJA0k(0h#Sid;?8-vK?XDJlH} z(0-;3Vo3V2(0>`Fe^Htn#Dw%OK-X!S4Z7E;VWM66nb7-DJ@q^2i zuC(EaA$yDzO%sMk;k!U5YMMR#5yYcUN|Ajo8otNaW9-wkYWN=L4r`(n(jMa!(+aU| zco@hdRlHqD^GV~RBJtAjBG}}5r;HkW3XXF4nu)%VgNUB=K4qlyL)4Y7 zGpt*$>966>hCOAR)I?7TpE5+SibqchpE5j5_0luqwDq(Rjn8}`O%Xd{f7mldKZoi; z(=~M+5hb2AN;IW0#o!ZK6fbK;D0GPq9Rkf{!ioHdGx*-618xerT;w9;K4U9B4NkO- zX%9YuMX9VC@lM!2BNCsjB)WUVvtiF03z*cHe%_v|f+D-LFazmg*b9zs(a2!W{s0R1 zyc|HyJaqvS>v=7J;yrIVr0(xhDDiKn#h(~m|GnR_r#dT9ct!jY4*Zrxha)JBV#>n%ry?hd*aR4HIXf~ zH@|l1Vps>$YOLasEhUb~OMT4E z4qXiEYwpoRw$$G|?@+jBpqY+OC{rqTk8I`{WNvaO)-%LB1EM zF>I8XtBGuBj9KeYxM!Ss)}dye3^N^{#ijge(MprdZ4SkIrkEdVB3qhno^$A8*p+5v zq>4wjG{co^o@)CR(kPn@5;b9m>sbl@2+CLU+!gqoBxG zmEYmfABqYyS<{!JkAnI!sWt5)ZVCIGVX-DUXV~Paa;SOQ-JWY5icfpUv(!AU(nRi0 zc$S%wEh)cx`P=ACp6kuiOf@cJ%(I?q)5R~7)X8RJHi7zS>NFo9!FuQkm)mrLx-G z7ob~X9thB_F{gU%G-Jd%Gmi-)9Qobql&*xzmFB<98IdQI6GMd44H$C*~TXbrvByr8KvqcVK2>FPwOC=d3GIhje-?-?_f zsouRV1MjSxOEle|fp^veN?jwKHCM5&4!@a^8otjw=1`4z!92yJM$UfoY=CZmKq{NU zUpBjUrn0EqUo}&iD9ugbubPiCsZ0&q@z@7#36Gnlgi0weW_`NxVX@h7zp*H*nvnU|s zPi7^Ps{2o7WG_lZ#rw(J$MlLhV#4F$Kbv1OsT!Rz4>PH{pE1v?kOqZ3W1j2nFUv3H zaV8b=7xOPBmBTM)cprbrb7nM?YQb}6?*QGe<{+)37W~y5AD}yLP7lzXH=hsC{bBB8 zQn~-3`?fwPG^0j16h31@l(=B)!WT54MGc6?`vvn=PE%Qd6EBFox1T773+72x77?1U zR9rM8`%-P|-IU)YGg%YmcgalGv}-~PXrd;{U08XV_ChDDa!phgX|2&jzDHVHnN)2J zYiFvzbq#BuL-5W3HZ4O=C$YuSeh-aBlD}IPwmKYIgO=QAnS5dz(t56fwJ4!ir?7m!!iN8R?KO zOe}5G)SD3-T@7fjBA!#5TkmS3IkmZUj7jC* z!ulg1UbN*J%5BXhi?-S`soKU^DFM0|Yf6AF*2+^lZi!f{Kohk@tn~tuves7Cdk!5E ztt|X#3TnU7Mep9VwxTuByLYXv1Wg~qLfTlVn$E&P+E^o))EiQ5t#OK6WY=x2T&<(r z+v@hL3yPVvv{9T@r&3{?XlM0Hw|nJ~XlLzIotfpG%I#{0Jsz$Fs*TITrQswMu9bu{yRF;m`#L;%{p(4qe;m{#ao+8&RnNgyX zRjujv%oxy4CY4HOYsq*@MUA*Fj`cj8`Euhf)~&2l{g+~GV>%&8mtq~upm_L%aOT0r zJ*}Dvis~{yYTU;5-ih#}Ud$ts5~S-}x$mMfD(x`t;piWq9ORm4vRhFYnbuFQ&rZZngrU%FjCetPUs z(5$R5x1T;77Al5YyEz^`(M*aMZhfZGK`%6TJ6ww zW3;u8iJoYtMU1hIF{vk-W397_@I%KK+SdlXn(G$&?RsxfHqB+w_ zap;^e%UYv}o@icey}_iOXwI>YE8-`bbFIHL(G$%aD`F<)@FhRd^jRsI=!xb$YoaE4 zqB-9x(nL=*^Q`MN(G$&UtXnnF6U_zIHcj+Iv%s;)Q|(%~9O5UMexfIn1=ceh@Bd-% zz2mbgy0zh%UGEe~LK2dY00{|@gpd#ts-QF}0t(W5LNB3%5~+dEJA@KN35rq#1wo~1 zkgg!`fCv~Al&VNkEC}j*tu;G$ZbhHZ=e*~8f9H<_zx$eXty#0C?Ad$I%-(xK&myb( zXBZcl(G$%O*I>iwM&(pbGzS}<9Y*N}8@-vSCz^weamF)m#(|0E+JjdGZV+71Cb?l3BKmQg32;^;mWCMFxLm>uBV!loGg9Y$|pPBBI(Ch5AA zZH#jmU6-aBlbG%EqPI+@8p|CvAC^;%mzk;S^)%xxHwzQfjN{A>c&%<5ET$XR9JZ-# z7}#CK1m!owNbAY1Bq+a`#&~Ax`Z?2>$4s@vOe2rk6-i&7%rb5`={{+@RhwPdugzO+ z^ZjQVzjGY*I&U%8@a;u8T#*zv*J#R2waa{C6te?f588g{zrdK|FuUDxu;mUb(JoUg zG&VUbs@(~&T@I_#u7+4-JaAaUcAxq$GJ<+@jl5d7I}aA=FxrD?u~E}uv9^v2SQMrePEyW&O9<6bhVFvFO(U2*({xPk#H-QafKVx^HY zu+YmT|CPobX8Yvic29V{Y+Q7+;^H;q9y4_`*BIV|C>-#+s%%H(O=L~mbAk2ejzh&w7;djZ`9+q&T_5q@OZ%c#yE$) z2bOPabJ(p8Edur!cO6!&V~cbr>D#L&gz@(UHbq0aLZ* zqgll0XdZUQ(a}6?TvF*I9nBAownNkzKu7aKwNh6ixvc&Tpu}6W?dzh-x>m7sqPa0d9?UV0zoEPwkaob@ZfSooH zhLhz!`6<|^Mt^40#7(d>#zD=#irrxyYWjQI{L z3wGXkUNOFwe{QUIvoXa!H+H(&%K={)N8D^(zy%|81eJ4|t5&B>@ugA4VeLDe0ITD$ zk)1yD|H?SxuyLKX1bk&&a@f31FN67yLFK* zn9+(+54mF8b{O@LD@K)PR2&_Lt41EPg(9!h_JFHKfx|X++7ocysP`;cUX*(}ozT89 z(%mdqyJ2K7%NF-L;Cx>)C?*F|}k6D(;2D@tv8%uEu#iGt91AZ`0F`FV*bv_^PlQCx; z#Z3|GJ6{U;*|@|k%cXaDA>f`7IiBLOToGWu7+smE9&+Cp#%vnDi+bOf;jm}BoD=tr z9EZ^tG7pRm4x_XGfw9eD^w#RH#&L&bbqND2V5Z(-{mpn}0_Cp8D8Ctb+zhOpR>I!KZ6UpZR7v1|cGs0nXf7i@Zhtd6AGeq71O&V2U=#(48;Pvfm=&*|2Y6W_kuGuQC5#oGJV~%1^Bd(aae6C{Mx-|;)H@7Y&mL&#uYY|w&thbEV zLNU2po4`PG1+y%%s#~YPAhYdqm2OkFo`EIJLk`RDHXtz640?gRxK4G;6yat)#l(-@ zMg@kOrr4+WH+O9DQ-sTYMA~jsJ65gTc=n}vn(?zwYR8k z#xhgu!nMuF7mF-wo8y@&%Q|KTGu1A2%o!e*b{ zk!3xzDKlkR&+N@iS=KXu^{{MU-te$&V7l_i%K<^ph#HtJ9Y)WH8k*ghDKC$k1DUCk zH8DpqQ?+ek-u^?}&mQTTnCYvE%Gu0p#Y~m6nVG>%<;p)XKQl|GqtMO z+FaoMRQEXjXBv z7Xmw*8#zyk-w8}Nv)3rg+1>L4 zdznFNi7gb*cRv)^+Z^Yxtzdo3M(Zd})wZwM-(ghSe&#A>su%RWF23^I>uV^04A%XPCb z@r?PFo9(fmHIFOia`gxnW6Wy~E7Kzk>^rxmx5zZbMlOqJ+~bqLOtZkv3Id-q@4i8C z3q{u+mjcI{P2W^4!8EMkMAiuq=n z*;^=`8r@Gb=P*;pZ<@JUF@B?Gnz_qibbp^_9 cML6BO;4u1%aJu=mVm#KEVY;?* z$@q!%Of!-hz%bqvSGE@0IZ{BuW8bK?}{_hrfdC@%MW?>@F?6^&}b#l}NW0g6~VKVI` z*f_;dhjZd(^M+#BeI_#K74yM%PA5Xs;(}J2n|3HxF6{?%wVAV1F&d4oHpMQLL(ixr zSPpYoT-s^zs=3W!Ut{02SMdi*$x>YvUp0N1Ep-h{YZ&yZ8O`hpR&zR>E=pRNU1#d=QH`!(^}KV?I@8Bt)Gn`^K@Q7~Dxtq_ z#yaeysI;IB=3@?95f!3uFqtC``jkJ2*5+h(@I&ZeCJo5xIDm)(bjiHyW=DgrnvD*qbXn==g1#|x-0V`&E%Tbg z<|FsJW}Sn|a(?=yxH%MB?-Rx+PVMQJ; zv^*E&vWB_Yr66BxpTk~7?g3WlhsyF*ixY!Oe~aMOhEr>|9WJtHqJRbeDqStUQP9M(&B$T{l}6RK;p~R9Ws$UlWvKEqAjw zgQ{8A9CiS?*R*PWtSk?t?+tpyn&DE2z2kz+s=H{}9x|>Ux~KsIhQM>lbF~d}xW6?I}*34=t@a4x{toNh^cd zG(I0%S*smJ=R<4j6tgM#lAu#?Ypd(O$jd_E)iW*lX=}X0B6{`(o1++iE#Ah0nR~8Q z$Y`!MIJlh?M{~8&!5!R;=1yI#7ugGydU0@9Yag>|{H&+Dbx|>Xp4#0~AB;~EoqA$# z7%TfEm28^m)^k;Gcgyz_u_>Y_;(Ayu6mt#lxhA-W)!SiHdTs<8#!RgOq**hVU6f0D zZq?GPJY|WpydRuqT~N$*9zJ_oKRfI?v*w?0ey}_e+|%mHOnvd*+xpcVcQ&}U<$s#X ziR;pZ;67H+r^K>EVy~;geXa7$)N#k(NXNgz*=`}D7W^@Ipu5dV*8eRy!_BA#hgmh* z%TiajUR_HLw?;W^FxUud6SHZq^}Tw@k=7xH(f2tctqTsL_XI{-KRb+SJJRw$qe}gD zudO~KtypHN%|=>XR2=HwtK>*)0W(#HXRVmCly0eOZ?7RGpS2!w*x6nqz#2L17UITO zT^#l+;>K9L9p=+}NXblVtixh@j{wV7Ow{fDY{}=WT~1tnlOZK1SQnhQpvsfM63%h% z0)IiZxqe_3Sd z=gB9f+l07K#awoucS|m|sxYI`#Uii8RtqPtM4!`QiPhU-bi|fe2ti~QmgCdl%G19%eXI1!cLP7`+QPzne{HmsnN_!);?x5n)$NiOV(%1 z=t=KZ?Ir7yV*KsuOV&>gqbI#DS-&`z>sykg_66m4#p~(%#JnAr-sc*8mSCoO&r4Pr zW`(&YFr(amhh;-2oyxt1VovTo9Hw&b$*j=l5N3rw$1yt~=o^5Stoa_6E3Frpsq5}a z>!_QBiIvuU#dvq)JS+AB*GSTy0eMy{W(VZ(K9705VqI~^T{B*@zIQY1h+<*EmX5S* zT%Sy_&I)zdtUj^!I;)Dqp6?TkxTX%H^KYG%=CIfM1c$7%#xPU$TW8H=rs}uO%3-!t zH0qlG%Lfj7vTxOp*DdiC<-SyG>Q*ykqvg7!Sf{>^g}iAkci6zbO+q$X!!E11F@2v5 z*E?Eo7TDP%*v-?6k%*qZSMkJFVr4iS2#kitVxvDdu{= z?+)Kx)&*u+;*-A3z!I*J&n$7FZwgq%H;Uct8z$bfS~=|3zWqbqxAxsoaU)v|5Bb3I z{+7$ax$m{YnW>i8YsE6VBG1|wdz%KHPWaErXC-Afr&hjVUZQ`dIBT79SYrP%#m`#aKX49S?fZ8QI%kDCY(oEf z0R>h~hplDS(P78orNA1k82_b@0&9j7_dDV~x7ISd!hgZ$bL)^3mpovr_PKSG zR)off8s{*&mfx~+9QJIN5dD^w$4uQ#SbFpf1fOux|%Rcbyy!}tsFLS z&{F+JE5l)nIc~)Rl`fCjs9zP^HE6BRkJcQAo#41v9QOGj)B4fc;IMBH_mj2PVIsq{ zezJ}zCW13|hx}|U_>Fyv_>6ra_pE$})kEAbmiS%8Jq>o>igZ}7j1NN|SoPfOREV(C z+^ir(w+%_3uPznOWn2xh?Ffgxl<_TCO^4-Y{21bG&vCO~LwxNEZf1lQw^KFc<#5In z!{46dFxq=Rz)sLr+@~2np(X65%;=h2&bNf!pPA}e!FCR_g~D%0#n52em$wXBC?bX= zhlbi`9JZ~^Bcb8;9Fu%vKgTwWLQC5Z6yv)^S-Y4;acZ_y)(&N+&iAr*V~5fC9%*-E zre;g!>`4xz>u$8Y$zgOIjJD4(Q*)>+LyR56OwDX!?D~rFwIIfBeb-@45LeCq&0(~oX?5Gh zTRy4zbPansGc{JMVH?G{WcAt)-4a^UMj^!{jGEgI-4*(Xo23ms7+T-WGKL-rZD9NI z#!*y>z+1RekOtn&DyCySL_r`WtW=pYteI>N9J<4Gr!wS3`+n+E~?b6uZ z`-gPrnHBoH=A`@e@z}7&w&1O)mbxN`C4z-8E6lGdv%+-slqKG7cpR2#Zq_2Ki9N~9 z+J-f=^BlILVfV1+_AWQ;16JT>gTq?b4;*#`K3m!m0jd`qY1ks{NxP1lwGC@!cXhL8 z!=AP$x!J_9Hg=wy%?N8}zvnR8-J^qj&|zON`^3#mtAqW8n{D*&XkT~Ocd+ba|Kw(- z)ybA6RLN-PkIuHQ!&Ww29M;8-b+bO+UF>>pmf_vi?&z>D>MjoJW{+~SKHlBzIc}EW z-Q8a8Ftbr^SPy%j!@jMX8w=YPPZSp+U?zr9F1MF;v(M}_S>=n!wibsa63L9kSJFM}r^^Z0}%I_c6ncfyFqiQ_lkLk#-A*b?bRLY@|KXVR+ls z9A%Gj*rZ_vVWaHh%vA29?E)2tbL?W+X#1|iB8OcC^Wn|eRNY78oW@_x9!9v5@l_95 zX*^L`DjOwlVf!77569+1uQ~n?{#(zUxt#IvcAY)kXAS;rox7Z#_WxW~9=zC3AW#!Z zQ;Idwtf@L&LoN+j^G`faXG_AunyOUuS?}4l4|`k2HY*rkWn9C!j&UR7W;bf$U6yyd zQFD&kUeuICv;^{}p1#IuBCyf*r z7*%~AuF-#2E)SQ=v;Du~GTdPFlvN+N^Ea`-vYt>A#)zUG=y`lYpw~osjtv=sUL~rq z{D_CWD%;ZM-LB|&C_Q;*lR+0@RWzKA61^QEKg#jD}W|uK-R^4pdpq3 zP4Ut{h+WM#3jgd!vQJHHVjETFhiyFTvK%ce1tHE0PIUmNiH}%TvD6x>cDgvpdgZ}W zU%>h+jGlUB|4%fY?fG}T*R$lFJy!LHZ@HX5av6SS*&InNOnNDNA!{O-HL6~J=gm{^ zDXS8CYCL7cMoNLd>=UVpra)b^0vdwa-xQsYZ{fY^;oLp_c*+mw`0s1&nO0o~RF6`! zXY40BT}7%L798T+cR}Sbm3b4{JVTS)D1Ko= zMUMUFCI7EksWKfwvO;zKnxhKOJ}Eq}mYyEe6<%pP zulBy2Hr|bzPm6xXnRil4juMM2`?`r2+FJ-A} z?J0YvRkCNQzmq-NS=p$2-#c6$Pg$MO^mn?X*uzM&Cg^WkUDcQsgqK@{ z{ZL(R2@B^tMY88{m*N1YrCuk+Nj~D|fx4hOqam)bUiBPx-u+qDgvv{ueMY!FO$>t^+i-)I=)B zD!JC5WL-S^ml|wL!TP4a!ZE7y^S`tNw6|W!bhcQ0G=y{Lu97U*}MyT<~LI1c8@Yp?0=U=@-Z!3r+v7De=f=2+dpjiu;xGYPopVK?Eh2U zrBGvIg`PhDYdNY^o<~Z_hdEzQ*)y*b9IMV#HMa4zSE)ShRW53VuH-M+1I^2%@RU_r zW#fsS-oExI+rxSNd&`IIJ-vCR{Rz2fq8*Q#NH4|TX=uG#cdif0Mt}Ctn&KWB@+sMK z;Z;RxR7)xhg1si9fQ472|D9j_|1rN%BM@h7uUeZ?X;g1fHcC$BSWmr*RqIzI7tR_y zWlwJ^ttbB7YVALnFRODz&2#B~t^Z*>Px`-_Ype2j-X%TncSZ7F&9!TJw1BFG@}^MD z@b@UhC3(p$T6wd3Fhx_cg*chsN z1mjcPN&c_(-v5`W)ZIjlTK`iyifj6xrurxLo_AZ%5&paUB*Js%9)mJqKF%d6l6B`f zm(tYph<$=(@~;Vsm4CpZSSi$fpN_kdHKAnBvU$q?+;S{+{_`btqG7uKEL0no%)c-F;4kGwqF8vBESbC=X zzoji~f&XpWqF(XGp7}qg->NH;x`Y4SnK+ZrTy=f(yc;fnUK5Kswn+Y~5#Um`Oys$n zs=K-ZkgSPJz5>6@HoMrH=e6`8>rb%WGk3ZpsOLw8cLW-V{Z;OsR~waTA&+}0_rfPi zo;FJUJ4>ZkwJ4Gck8hEtuvBFE&tjENg~xi+l|*?{BTUhUG@o*7C>xTc_?+u&>f zaSvz+Gm}>AO8_kq4zvY6X@|WUT~G@YzJ;RN?a$BP{{E?4CHTQzp1pa>G)~h*eb%dc zy1ENL&h|<^$*XE@q0t==)Y_WB_6#TwKL3JD8eI%wjanrjL_c9o7UMLwRBxN)uttr4 z=t+H{yX*AXp9xvlL(mZS#%=&1c znq6XTWF)=kmITe;%c=#&@?G`eCp8aiQaBfN-&c2e)$(d(mF6rOza8{fV-=N`y4I=l zOSKHih1aNt?Em3wlp32o$+hdiH6mFPLs+IBi}@GJo~`XEtFv-Err2r={u@ z%8!y&Y>~du583>G$?Dw+h04AN3!h-Byp)Z~>tUJhuu?qEHC1xaS@Xy9QQbk*k!?9v z7cR7-FMbsIL-H5JMKSyW@C(K-3{q+Q>WC7+63_*UR-&AU!~a&|QE^v1hF>GF$MJhY zRD-sbcv>`)?Z7*Tj!L-@K_t8EmUv^NmGiQgvt-Vvv? z?Z|UG^4yL*w)G6 zbo?!}C>uB`su+-Vc?lD9Szf|=+S?^e(EihL_-nZldM!cUN4LhlL*8N?G-*NW@SS3a zzK+wbgCFc6BWTx`b?`r?_&WF}4ej-^PRwT9fY>NOyW&I%+K*Z- z6pUViWG}IDd@tEar~Mz(_3h(#mGTnPpdX+g8h^6X0R7|f=StwGLEA5E#HguaQ-0aHTXVcZ>Yhg&R)+x(vJnN$#Qk2UwW zN8RHdo4X56o+eU4krM5FjMMl;bV{%zosET_lsf=qsziGlHZ zArD3WY$m3}e*}3({7E3~+|>;2a0c?u_~o*hI1!%-&3VSJ<1aw}1EW^yq;VKE@)n&q zU&1h!uNfrYHue~=Po83&Ft#)-6LG>gHTh8FMc5yUOqTSeAeH}Cl1MXUO8uy0<5>OXQPONOrFGOreejfA^rF#IhL{)iNmKellLO4< zo{-CD0iBP>EorWu5-$SGf+=rANuzb0tx?0_`QxYnd2`C?r~%Ta_IV)Xk}l2cJCG-Z z{KWWMRJz>Ww|Kb#8Irxbtkj~i&k0HuUM>?hC&V5gu7`R;cB67pChaB~XFi$Tx*XM| zQ@LbQ#$<|G=D6%0m;?U zmsT)kS-C9Py3UK`sC`~7x5rqSJ%w75@mma*ZdZF4dcv9jBVG*^4Vomh3V0G)g#h zYM1CNIg#aAEH7cqW6kRRO)w`O8%F zRkRY?*(^Q{*B`S=jdQ^GX?fA<=7bt2#BjtOx6;k{16W)y^NmwVya%L=Gdr(%}5aK_^my{zz|&4F8IJY6x&%Aesf!z`*-lto7{ z&cWYi45(NOsfJaIvP#Vy3#>GAa>e=<-5Kj!^=8hjxJS}>V2`BH!X8PZf+(x`%qJX9kNClInXxj+#k0cjn28t&z)6uM_g^nde}+hw&(|lcWE3=0)i5 z%{(E}S#ucPu2noMtIqna;$c~T*3T7(TQp)hED1BMx>NPoTITRsezBR>iYPsHkIb4? z0;Qr+N-kPpG&D38N*8lyU5ULXR?QM|+l~AT-?(H+V}rxuwOJ#IXYmnC*SE~V`N%s} zWFhwxBFox8YhBzu`SGkxah>!tvwF!a>+4ykaWAHE*Bu>Ke5t<;3?;&Uz1tb=E7QA>U`yO=NG@9}XO?VJ;*(Jl*jimo_uSD5(jLZ0_H^wE7RhpbFT(M23Fpk+gyZr8WV*`D zPsoyM=f>Jua@*XO61H0h=e}8qN*?Gdwexd#qf{%R_9xI4`y8&@G+x~!sSGqK!`RQJ z9X!2keO}wjUUrFjCq$GMH7^XveO^mux#2vF8SK_|dRC6JC(X;K9Hq^l=PgJxr}90q za^7i-?x^kF87E#`MlT*$o$ePDhtcBq*! zQ6}w?bk^kZh&q=?>6>LFVpqw;`TMQS@{##IRqCVNB6OTP^8>1Emc8aDS2--^&);07 znSHGOP9Wc%?HA_vlF8b!`unS_lH2DWgXM?wGsR|E0B^a**Yi)q(rdwIRgz_i1zUaY zU@x#6@blP$Ok6{nGY(vknmimn>n7ikq`4zASwDTjQ_w7ejCm1u>d7@WF4&NqYwTPw z#UR|1Jk!3h;B(+_3r>q#+J@!@5w&mKg-jZ$d5?JZJ;U;X(hdnC;}=q%1lxhM9QZIrUd?y$(e;vT#2q90OPbE#Tu)aG?y zKRB2)d0K0&6ZULtt&Ltp*sW)XUI!(?Rmf~Q!NgeNxkXDc!kn`R_YU3r$%>&_GG~!# zr|T~+lF^67tBa@&Kc2NJm9DxM8RsWZ8GcJ`#$ykOcJQm#%-FOjq#BKlBdXOxKkQlU zuze%Cf3*`fow;H5)kV0o+jQ0(wrLE%N75bVu=o!C!)$XgU3q9ewTJf{-6LsMwMWvd zsuS0%lNP)f<1sCou?pj3K&jE+29g^6O`u$Z_8%E;v|JpFYtfL!In~bEQy}Nc+{Lc) zxpF<^0mi$FPm6{2M~e%*bB(tv0Oi%i_)EU>ci>@BEN3HXF*j;UwOm{w->){@D3x=t z+I1YqFvPALe<~zhqrE)_pj0=j-LdmC?pKSmpUiPpkF(q71OmI~gjV0I_suC?UAm^` zq*kXhw03ox1%#oTDWNT@2e{~%w$^A~6Q%9Vp|kQBFhHYG;&81(vl-P1=T%Qe+AuL3 zX_r*b)b8fs+(g>V)w7^ETAhy9>FO@50aeDTg-cY$FI61DT1B2XC5wyI;v3*vVQDV0 zO_Txd64AhX5ewWWDgzIRs=ymWyp|JhGCM*FiKL|F_Qd@ zljL)fq+GIPW%$WwKl|VZ_8OIEltv!LXyjp>MwXK_@{_Gm+8O98E-^DlY#l#bl^U14)Bn+5O_pe3Oug806e8pea~ol zkPEO!F4{_454@zk3B0Cl1>VrM18-~ZnZ?D=8nwv-jq1`=f7)`17CIfZRyrNE-a6H; zzs~KWbNlF2yHPsTZj4T~8>dt4Ch1hW8Eij??H90p4%;th`xR`T$M&n)eyvWm+n`hJ zHtAHmtvc0in@+XcrBm(lb*kMyooaVT=U$;x?T+hIyHh&V?u<^gE6}NS7j&xKCH*~M z3xmqv%AoSMHK_a@4Jv<{5pAP(9NV8`GdOk_$Br_%b_UfhpKbQB%^|kAZBSlK&1YQ2 zMOX6#a2U`f7MPS*j!AhfHz}_bCgqi9lDE|+d0T5zTlrd4i%5(5WF4!qH|#A+wZfuQ z*qsiz+M`D2GJ!4; zRkqLs%RqnMv7yC9kniMBTt9uub4_3J+{pJQ=v(-Dg=wOdZ-uZ#>}AtSo~=pYAo(SS zBjq<7wvk6T9E)ol#eXHr)u8Zuv7f{H;$seVS-_!>6l@lB$Um>LUuUu#t?+r1y5WB;0 z?LbUJ=1-RI<%ClZhHHJwQ|ROUWcgQ^zgT{+!@u$f!?kxS;1Bb#zg`@|kFS%j6JAG1 z<%%w*^m`F_p)HM(K25a&`uD@TW@_*a~8uM=JfC%ZwVMFfSLN>4%3 ziMvo3jv(G3K60cA)0}V;o>Mn3Rz|ykFkCBEDH6}iso&C@X%sek!SVm13RgSfq|K@w z@|-a8E#)U>yJP2s`*tbbXtxS`=d19N6B_#z&vwGq2NjPwq{6%-Dxb6qs=rQh!aOI; zcft!!h=q3U*O5+G&k56p5YX6Hao%Y=m@t@*JM;gcqFf zk`s@Mp(>9P)^ox%C!FMjc}|$`gcqC;kET?5C#>g$X-+uF3GaMn>%r7PB_U4@em98 z2J!WraFP?|J7HzbyHpZ>$@rzPN0^<$}^@YwK_@Y>;x!&`@U4(}1(D||rs(D3Z==fm^E_lJKJ{#p3_aQ}#q zh$<1aBAP_Bjp!1Q7STImSj4!9mm*$`SRb)3;&jBth|3XQN8FD1G2%glR@yFIymVmc z(xnqir<8uYbo0_rm+n-$XX$liJ}&cVnXk%REAw5MAItcZEmyWy*|ufZmwmJByJZJQ zj*QHVoEo__@|DO9k((lSM1Bx?KJt3xPm#YyYEif`N0p7L7?m9LNL1sf_EBk3gQK2} z8Xq-1YHrjEQEQ`iMtu-IoLF{+2fpH0OkHkF@*E+6KTzXvpxS?^+#*L4g5w{@jg}D5< zGjU(URg6!JuO2@ter){o_=WKw#h;146#sL)T`9RztxAn6b*+?Msb8gME6u1hx6OuN@puwsC2E;txCUDG7?H9luM|TkepCA;faJ+2}2UbCQM0~nXn{beZuC1 zqY38|t|Z(@5S6_v2ULEn^5d0TR_;=HRON-0U$4Bk@<)|Fsa#O`X64^18;L%N0g0iB zk%<)&lN0MCHc3oN%t#!Wn3*^&aZci*#OD)NC%%(-II$q{dg86b9}>+Z-=x5#Qc1B% zDM<~I+9wT68k>}rG&||}q}P((OWL3GS<+WYx08NN(yN42sZr&LDg&!zR>`iCTV+j^ z2UTK|ndMDO|IIcYMZK=RhL#> zQ}yktd#fI+T2S>`)nBSwDJ4_Nr=+H|NNJnWBc*@Jkd#p=nJJS~a#D7s98LKo<@1zl zDQ0RwYD8*GYJ6&HYSYwqshv~PQv0P2P92+?l{!6jPU@o6<*Bcy?o2(9`bp~5)E`q_ z)#9qvsMfUFQ`I_D8&YjdwW-zSRC~VK%hk43`?%V*YClvfRz13UeD(U(+f?sVJ-zzS z>SL-;uKs-Wc=3Am^VPqqe!cpw>OWT3Yk1Z0t5LE>M2+@%lb{3Mq3DPi_947oaTu$V zM}(iy@H|?GeveL)LL6jNvZtn0hgP}}u^rk1AL-B$_&jSqVNGI3(mZTavr8!SH#-xy z?qy()PJAtm5?GiY*q9w)%!@LV!P^Ouc$OapO?i~3GS;pV@kT-w5h!YiAiQ-DENY9A z;t>%p>SFLz56}4MnR5-c`hlZt#)@FX7u(Q1OVhvwo{ z@uXNIo)+sd(Aa>SHj3`zP0>SaMlNrOo?;7fdPnpY@8Qjd_mSfs(I4$R0PQ?bd?W^m z6Cy+W3%Q@fn-E`$;o_<>b`65N`6RGl`s3Q-Fx>)^uTpkfEO-__3wKU{xY05d$lJlf37fUa>MEc0*Wik1JEG}0_Klz&Umv6`*xk;9k zJ7kF5DMRIMSxUYyBV@iTEBDDrxnD-f12RS)lI7)L^w&p2FbEd6LpK3`34I4>hhcak zN`!p?RIy=U7^7#lIRtaJ(bwu~1l z#h8UPI*>qqjwOtMM)|*3`8Z_HS{#qO1x=Gg@_CNswk&)05RpWFY{mdaRUYM2VUH^H zEcCZ3RNpa-s^pWaG=_d=l@>r{c_4w>{8+*iXf9TM0az!Q{MV=!Vhho<8p&;|k)M9m zs9qykGleyas+ES#%4$^FU5quVCqmW=EvG$(o-S zMJ>wLtkoU*;3zBF%5vC3zsHYBIDp(?O|Q?8%UMi_HCd#I;#I4ZA<0c+3q*!KWIm#J=$&)Fu~8j z08sTSb^ZV28ASFS(I_^5nFEf2sF8vMbZ5WmYq; ziylV#vgdCYZ>3Sbo+VfQ_w?L~6~(oDw%+SWbzB#H3z}uU=~}0*0IKgPn{Jip+<&R} z;*vP)8Fw(2Zc3Wkj7=GT>HQisbpv+;JNKd5DG!s=zK6!<@xzXmbUo?bfN)Tsd(cl# z^TtZ1iv6Y!mHCH0bQO|)scb6u7%Ln$asBA*R%ei^SGNJA$rwPXmJXm6*fD_Gf(P$8ZgOxT}sGUM{WrJz~M@@B@vgXy|@j^(cy zRla|J6h^_r*rBI@>bg38D7ApPZ(eS62YRmtl<(z6wZd?H9`+b;&M?aNa-*ME^J^GA zZPV~3@mZk6j7-P8NXLJdIHwuVe+JYrJ2DaL4fMyeIGQ(o1;pN?m_KR42j~)4vBK|< zXLK%TiXnwd{G@q9^D|IlKIH>_aiBlmdGbZQwxJW0q7Fnn57VV11K?b3x_@t=n~(W5zyZRO3VjKLthi< z68FtA&_4i5%n!>#UmNHzN?VbLjR0zRdmsw2b%Fk(vt17QPC$v-UNmAK1xisLwbVpC z#s;VpcDQDwci%P40|^_W1`=~Y!e%Hnc4cLJ0wtB09};%PJX6EFm4sa|*OZuz5_ZQs z@)~BP)gY%~?ujpg7}HT3iMeAfXnLUr*!dKwVdjXxE04J&{$@O8jgJ9`qKpzVN5YXP zorc*X;V8UWFEN9B9P%?LofOXk@kIy9s9_e_95_|91WprA0jFcGj9q$FY7d!movn`3Y@B2aC#<&Ni z*2D*x?`n7^KNzw5ff`mChC==r^IlCHWjv00XyPo&E-@c|7V<^L%P2d(&=6yx{}!lW zhCCkfEueSC$9x&z;4otL3605U%el~7 zj9zj+^xllVav}6SjK$<)=!*k2Q9>?(93q!NF3A`nbD=2>)bQs13y{kKagN9rA(sc@ z?2s#gmE|gE5*btFE6}7cR+FznUmd848koo9@fl-nxel6IjE~6Ip|1l(Uy>VvUFDm= zZgMlQJ7)XnMe=Rfqyf=GFz-hX0cv6%=KeUQawp^*#-&&RkYX876DzO^AjKdbuCCK^}x=BTy4>V1+=6P4XkiZ!&JiS^;{3JO=$cK=cHx8c4B?@ja{_ z;LB>p_vI(h=QDmFKZSk|P>Ox>Eabh62jypwKa%HxAImQgdkl#0WaLH2Cm2u4ub}xC zP>N6FWyq(1_+n6Ag?t()#aVeB@)^bg`3>X?Sig|sB2W`wVhsad6ES{`bqwsh!1yiJ zGNic4cn|9t8oos#`~_a+rc3lUMwezn?*-KG7K#mw(Y$~aG#}{WwPKLt7%ORh&?ErSi?jg9i9mc&rUgQ- z!dO)ch9(&(MXDA8Ifb#B76wgqAbOV;4!I^{ZLKskwHP1K%0gd<@lh=b`no_V>S@uC z9|KC!Kr0WqK2VBAT1ChWfl@Tq;vhfH*hH%YO;ezTcWf#{Zlxtbeu@$AZ$a}kV_Pi+ z`Zho*+H2Jyw*yMiQL6#D0}$6wtrp}?jNPYqX;&|z!fwlE#p{c89LaxKuSRV^b z6Che!9}jG!PXxBtvw)rTDZnoJRA5(qI+^BB^zM;Pfd=u|UqCNF3z|H#Gz%BZ_z_<17z<2bWz<2fCz-{{b!0q}T;0}E+ z^4bZ+Jwo3P{8m2*yr~}s-qJq;-qw!-OB%<3A;t+{sBsb)W_$uHWqb-OXPgB_8=nCy z8t36N7Ko!@d;v@}E&`K`uYgsI%fMvgDzKVy9hTLB7&#c<0G~9zh2|;7HpVSzo@VT5 z+=0FmV;AFl=sN?Y=wbW-xjSQ;@e?%ZjJ=F|(D!8QYutyv9}pt}<5$Q7fSMR={0?~t z5XT6AnhRHZ#u0{&QRHyO(FU$M;u#=zrZ8;CN~xhWr`hd7~^epEG`CL_z;0<2QKw z348P~-ZaWX|1D682S!E6_kmKl%s9w45cguU5@at%U$Zjg05b{t5>za=NA2sX4@-ZOBZ)QUvzO{g+h1mph zb0DrxW;4j`7`vOzA@?*}0{h_2ESxW9Yv4e$4RDaz4wzwfK&rt&T#N9o7Di%b7vLDP z8}yk#oI7R@-~=-rIN9t4{S?OOW*=y#G0rmkK|dRaZ;Z_Wke4y$nuDNO&iK4J82T0F zP-tEN;tFOChx{UAo;ecotLA9nI`diJJ7y;EU2`lfw*he;nd5;w%!$CAW)^UlIR&x1 zff%!yQz7qXJZMgb<^bcz=1jU=L6513xS`Ti-DKTC5XKO z)WlVD8RTm~oS|keP+BiQqX9ANv0j91S}P$NjAgA=&_ptpvtEHdiZR-H75W$;<_p#u z$cffE$dwr%vtEbX(Ao(7i`JWvS1`U}ZHBzw+5+5Yy^Yv67~itqg=RD37Hd27TY+dX zYbS7nQN7 zbqx5Kbpm+aItl#T`ULoe^(pWx>n!lH^%?Mrbsl)t`T}^D_Qri?A^ zdyt>B?*pHzJ+BUXXhMrRZz>K<>lX&n^Z{e<02j z+YdO{4ge0b1A))l!NBM25a2jF3^?8n2WH!)fm7|Wz!`QFaHbs%oMo2>&b2E7=h<<< z6?P@yi*{w;OLh`)rJW4Svr~X?*wuhL?HVYIJl1eSo&BAJF9*0Q7PV0(!d! z1ASaWfxfQc@K6khdA(~SWIx7O*Jx-eGA6p7g`DEbL~JS$^JUjqU@g~pU|rWl;Nz|= z#5QJZ>Y4&g6QC4NxTZpG2E?q^H63z$*Gyms*KA-H*IZy%*L>h?*Fs>9YcX(%Yl)8c zQl*ZyhDW6dtS9LiZv*KCY$SbvjU|17-cz8{WQM=DRX?l$l=r5b z%ek847rrNYRHekEzDYAu?x!@C$7Du%^aOcAPUP^UT*l!i@-2iyKBm8sK=YgW`a1}P zY^d)>SWhn0ze&V0oy^rklPJCE*RYR-ex-l=p$2BytNhc3n$W-Ep8>vny%eQ%V-gZz zhUAA8Gx!#zN-e}1B9>g;|D?d@bNKg1-GaZ+jl~<4f42Ln_MdgLixuFF!av)6GVss3 z*~RK&l~etrl9gD3=UkPYQbMLL(0%ZuH8$$Ow4(y`;S%_T;QfS9{KD`ng=@+ub08EqO3sG#_acNdOVKs+mfap z5gVwx;!J&0qN(r2?=*g2C$%%SrkHwzRG8IiIkflaj6RQwjG_Hfhx8eh*gGRbG^;;s zSf3%i`;2gF-HK)nMrRBvVowblHDKtFrs+d^XLwjQ96F+pC^Tv_s82?pQA3A_2BZ7_ zAM)NkMy~6;6Fg+|(WJzdx)nuMM8Yl0TuUpdMN*RWj#KQeCJX8pyQ)QLWNoKdRoz`? zJz7=OBHJFr-6VstXJX74fMFLz>;11 zb*b8`wi^R9U+DCk)7@6LS84Rx%}%uyY9OaD81$Ogwg!!UDCp)I?=@QU)y++GTkH&a z+sTMl2F;dcOOvSN$BfrjqsCzcJcP7jXRF=lRR`Ukt5nxr^t#-r))zai?VNTB{Y{Lo z(yP`QmK)jz+|}Af^;)YDFf`lk-Kh5J5w4s-*{DxIJ{&B4`P6BCn+X|@?bHrK6P#{kNMUZdJ}Xt8*+)(~>ROYM4jP#rYVNhl3! zY_u*``wfSz)>gmyUW0|*e6!PRS6lL2>Y&f1Uboih_az|*TS%|A%G-TVbpoBfmO&AK zdfVyiY_-;G@l}SIWX@MR)pcSU)HaOt`9{0jOD5W3Zp&boq@%^H!RFRL(2CK=lekjf zOiC@IkwGH^qa?;PN?Hu)TPHG`o$GEH1d8VrvV9uSC;3a=W@q3^Gr)1B*=`Wy)mHMh z(g9w3{V1i}9t6nbWoxhjLTJ{i!U;@TYSylAZO$~qd{-JRh>T=JWz1A#V8TG(rdv%k z<-<;G^W-vlFVC!CuwCrEUyx$dOgOt)Qac0w6YN3*5{wv-X$mryRR{cKw^ zi}P`1_h!2lzlX*$1w#fV<~huNs0F!ER`FqoC@r)LA1+_cek40C|4pyL#F%htGz13 zZ;xUEsR6uc2oDmVbZ2etTd2@m?<+GW(mfI9!sEHJ+=O?ggfXSJ%5gHJw?dpI^x8>~u3XhOlxCSi*UCYMPIVNP%sil7R z#m}BQpH3_{ft^hC62w~Et$)?8#FUt6bhZnvRw{F*QET?8wf!W46MViTELS`04NDLz znxXiHD=Kc`-Qmow z7BzW(W~olKGuR%gC9^o3+U)Gz(E@m&K3qj+e<*n#BZtnArP*G$od7`leTw5t_^j`e znn@ayY&Lu^NTJjMw%eN_X=PB$rmA@IMWA){NsQCvjTVEZm%)$iD#Z44UvQN;!71cg0yxe52ESKHWjet19$RJzsBH?K0KNlh_@l%wcVS)$%O6rtCIDxxH9 zHzXuuE{O#hGC(Y1K#3t!!i4UT6-FkaNIW4wkk=dAPV_Hj=YksHU3yV8anNE?HPx5C ztZddHTg7q@xoBp3gBq(Y2vMU(nhU^{H?{`#?u`R%qhxSsa=FoO4013W+T0TYGZb3h z91!;N?5@faRaM{h;T6Bv>~%YBNb=ck3&f3r8$&WEDm9chN58TDM^-o3#Pw$T1cV#uM7Xsq^Bd*@N%w+00_GC&I4^2 zq=?i?fDo%S^54Cjy|UFrlp=BK(aIK7ac6xfeY@6b)-;^sitSB0D@n{m-e;N;K&b*h z-eyEI((9#G_ga-sRvJDrev3B;4Fqx!o-i9u;x^(ZbuAK5yUgiK6r{?rt*AOE=9zy z(C;_e*IL`=3l7mLDa5?P`I%|AfWH)=uHCP7d#&a*j|iuRfjS!6GgMp6FA5~C zl)Q3;^PuXDYU|?ma%0V-s?h6Iw*@T`@nKwv9IBjml?xoHr9@oj2bD02r%It^H`7(I z>((2CRocuBN>m@@je_Sr3`IGx?`o?(vHMg$mYZKhls}a;U%fe9MHGfn$0>=*%rcnG zg6x8n(cggDlzze+^HMBNFj5IDp-$>$aGf;ftydQHk6J*a5(4dY@6=914fgaIJl_^YOW-@=t8}p=% z5UY_{W3wTNr6~UqL4s%>fI|e=aM`K?#a?-=hdNS*-?NCVZyvAudt zR%?WO+pD!}z-=Re71JoA_1^)!_Uf92wpbqa-~3j8a1n8ro0u;}QG}0BF*EYLhC$Fd z6o{OTN)}ZVGOnRSmIRHK8v|M~eH!URX(lPJy@buPZAwPEhR_w;4P_-sOSRjuKPi$t zh~eGKJDEBNRVl}HmAD??wdr&|+;`Dx2<3{o#4_15wv*L#ESF7VIoL0X(Z!DNg>*WU zSem&O#+aE052j5EMGFWNJT4CW%(Vzycd0?w2-+DsA0*<$!J{AV=M**qqKofEDSnoR z(go3_PLqrP`AJ+}!{SlY)JzkKJWgn@QhfTsS>J2WOR=QFhlSv~C!W0s-Wo3LV%G}24s=J7lmyLm&X|~-8 zRU8dQEEr=UkR~;BHI_^-H|q$Vim{J%xQ$+SYkkAbNxh3LtO=lC-CgQ6Q0A>htJS@M z`dhT7*1?5UH@#i$xT_lgOhzC<4jF(xdH4V)Y-w;5Rz~rB4ei=9;?1@KFVuYvp1Llf zN`tWGeKk&Lc;if8OqyX{cw=5-eD(#J=#{x3=%}C2YG@;>kS=UWeY&tzm@ZY`!f>iI zBk^6M>x*w9mR7BKM=}uci$MXK+i>v-L#bch?$m(r4hTsNFD5K^y93SV@(l-8;sXf5 ziM@qS80zAzV}%oT7bf=R;u^l;vklN^yZauNbLFexTk4A{6>8L;6UZ(hv=cTb2x`pA zWY>wwiSA`B1b$JoUFk|w6?o7bI5?@vXp}$#_oI(x#ZXa-Bu2ma9{s7v5rLZ`Sjj6z z>wHRpCKmQAk>F|15=7vhnP5!ViooWcB@E5`6cGIHneQj&fPBnYUWwqSO{Hf{sVYNC z2^k6Hl%m-$VF6t|c9+ahUVnmhsVyY2)q{63aPy$71?m8(REVi*pX@`n!T>hEc!As8 zxVhhG;9ttjT041w1mc{sVoIcg#yZ!C^UrX@|lS-%7a3UivgB?8Vrn z)v}bnC0X5&A*x&&gp3FgwQ^-|kWmzNipEup`914uzE0Rc(K z;D-04z2iaoVVVLvL3}Ep3K)>6A+JfZ->2@RO z86vi)Q4$n}quOk5we>xSoHiEKnwS*zA%tDiNg$YXLMi>qX@>!rSP}NjbWDzgACmlR z8q3XNx`6kjO#IG#af?doL))|3netZdZuM%IHHkY-%`~g)9q9084Y6y#|Eb8`Vq!B~ zqF}Wbx;zTG5Kju$_G&wV$~!=SVZQL@YVnQYLS=68(&~J%TrOO~#w@syt6l@`Q{s(M zxl&jK;Vl%e7MJ%fNRq*P8T5WJQzp&On?+-cGD8u7PKKJG5e)2%vr!c z%GWHkAoj0x>JmQiIq`E;%E>eRaKt;shD5^i{5|Aym}p$V>82 zZVawmh4I2v3Ey*-0ni~Dj4twYc!+r7dAiza(fV^2u@r)(B}AO$N#+N(LtT>a ztqJnRkBi$dFw2d`^+lMpO_-~Aq#)Gjw6SCqk_3A)8ry*JtKZt7d`e@S&*`dy;Gd;Y z|E$IN;=ABuBKtUz$qPfdJvgV>$5wZR+PmDV#5brA1jzdOY+d17y1}=0;hRrd3-Qw= zdYSAQQgnl0Xs=Ka+YE#71#Z>II%`NHm|krrX`I*cMiqX5N;W@*LTmP%X+{aBqp>$7 zDZ@BJV^ywXxp{2txe0*U{u>^XM%iS0nSf`zG}Nl~TQ(#I3%$Cbk`N~^m$*d|G)?_< zsnOvMTC7(!yOIE)tP)g*HHH8nLMJVFNl9l|gy=y0y1s1ebTvew8hlR*B>fe!Nf%yC zZ5w+CX-iL|BgW;OI&4>~y$(mZ&_yadOYGv}ekbTc6p@Xa?)65m(`eC0?!iOCUg4Q4 z3~|_%SUTDO+&(Z3NkIrO7EEIgTS0I1-O5&NleRtRCRO-?n;mSr1^gAZ>P-N}B3!Tn zVCVGfyngw_XZ7tl{d!)%KC53ZklhWXq?iQ1M11m+Ja~ITeKic%yJ8#Fe(;&t%;h+N z{H--mE_hVFTu4Y&!b`}(#EZ7*J1newV% zM<$O`0=F#I5Qq_t2NoJvTBw(uI4pp~$yD+I3_C19NP zu+A&|kWNuZxz~3Ii^)*|d1bB;K$02WycR;2Q@WWJq*dSaJ8D_cKXQ=%v9tt%tDApA zze$p!iJ&A&A$X=OfJ`h3$4OvW8=Acfr1p|DB+3FS_8cSZU)}bb#)Q5}i7-eHxaK9T zc}GOKOKNa9vi(`6lwl9iHlm6+i_|#bC4{mQHN`Mb=lV*IdW}z5IKmV5!fhc);dPn% zU|6f$s$v%idJ=L)u^Zjq^(!nY%iEeN(9kxb#i&sq1R!N^7o;z}7IkWd5;+tm`UO}a ziTIuQu;pmHabGu?X=_tSD<|2P7G=OV7V(2($-B>|C7-1EGO09{lksDRx5n0`sZ0_} z`OW6#!M3-mQVA>p(@j_!*kPZv(u=mZFRkudfGsdO+^j|QrP^?6q5cJ|FtC%04N5gt zj)JB15 zr9XZ3(6T!jBj6h%AOwi_BTL3I`+^Q}D!uswA|SpvuYEzr`IlZe2U{S+=S(o%W1jM1xzge$fbyXQk3{G=yXjb1`f0#@nTJ1`OSCPy~)z@ zz?AZqY?D;Z_Ro@z!zP#Ej%$X!Fo$X*F`?O3DuE?va6ugV9SqV!CW)nJ)rk?zHj)?S zELHn`2zw12BrlR<+FR67q?^S$P%zL4pzbuZ9mA6*~UH%*-+ZB?yqrmF7#8;&K^A`1Uod zdN$i-uKiRIa_oaN-E_^7!i1=dpmk??(8H_`#$n%KJBXT!5FM!ubU^=^ zR^Sb;a`DiSZV;j{!aIDdkV2vC-9XP$*wbSNc5G*rh%@-PUd~{0{K+wi&v{;nlZ24s zgiICR6?W!wcW$wz>(Iok#8?yX5VZ2+I(M0bc?=p|U^=>-^}*<*@AKoXVT8$^!bfFgbr z2b5au>^qV|`dll~Pk90xGLmFo7KY&>o`a)1az>PUjjMHO2B?Q#^;=7a&;XOJ+Rvm) zT&-D~g?0t|Ybe}aWUa~hKO?N*pF+8)a+V&XA1tF|Uj@rEWQ{G4Lea%{5mk`IO3ET` z6>;6oRqV%r@6fA2jq`O5K_q*QvKD(%J1!9=NghM1XrR==`96>b-sl7{I=r~H2D*}S z%BvdOoW(||7BoJbSP%+=p%^(1vSJ@9d;(rmAdlEH+~{3Hj8)!Xk3%+qC}o?94$;4O zhLwzX#9Am$q2IU3;umyTfjB~|@()EB7<4+%i{(+dvAcpXk`aV^j zm*-sNY*;;9-=24rk9j@Xq!tmKG2Yd806g0NV0lmO^xGo65lPsEqx0VuE= zH`reyW900h7$jK8^d%A+HuuMrirw9j)ZSiAvLbhhZGxMmRo|q!SkR>Y46CIiZLyZp zI76#0|Go){b;66H0A?}I6#lY_OsYz!i(3ft(=ik7V#HaQ05(P8f} zy&5;Ike^5H`t&@Olh44<-Im2DO%L{=@pHXDpIfT88)w@0@4N+rkzeUKc$_sxuwHw^b zMdgBlV&v(9eq11)xHAGY+?A?44-gb8Y-tHG+bMbuKhuy6+gDP)NN|u&#m*~jU?AcD z_?b}pr7zeNG*xi|Lc_d5P`WCX%|f8i)3MSA1BVnn!GssIK$kY_*}8l5wzOQFExqZA zbMv|fRG$1MPUIc(E|Inn|50R0`V0o72T52K41^ZgILGFNI2F zc@^7BFJX_UJXcESqf(e(($_icKb`YAmzRr$8GXjJW`)v%K9^>&LzSl>r2a~|xV%u9 zFY4R$T%lan$N6IA@}jRkTf*LG?Ygw!pF$;AC@V#gQCP-Y^M?=pBd3SP*k_-UMWu$h zGn|{e^lbS^c4VtWSqvjf&sbz?wZ*5#{Nd5MlNab|x)n%HRb>sc<2Bn1f4p52*h4e= z9@Y2b%o|Ib7S-Soy)P}CZqN3uPDEmj(c{xY8=4We*JGb#IO9y#)&kj7NOp;+ik}nA zS}hDdMKGui+e+Ul;-D&cu?vM6(#4jIJW`m7c(s*Y^RuOt~CZQ!OAd(xzSJMk@ldJiTD_f zL$FzhCq8l-5cR~ajrSNsV@~wS+#)mr&wMvj_%kWF-$lxYH|{I4?V8xu%l(QAxO=OS z9Apq9x7NV*QgmuI6$FUDsk6B}Dp@%mDE(4g@Ofnvu6^76Wt|H#v zypg3@kfC~;pss*NudHaV5;yYHuN#x{a{znd6Da%nIJ-Ftn#f|Q1|&#jD+@U}Llw+# z^v$QLSl*>@N<_9;+c;B&lR>2+OqEgSQc2baZ9|F0^oU)|sD$3e#D5{>R>Ic1N)2aOY##2Qot`n0GbWL9k zhON*i_TARKEP`ypYJo?Nu0w|lCv?~KCau#?vhXkc!K}Ccvy%`1OW&jO}R>i@!$xPuvC?D^a3muXV~E? z*I`X>z)c4$an@DL;=wCR+NyP31~kM$V$%QZ@xUcC`Cjv4USw*HIrX_23B>{-h(o6; zMdPq_&^;$yCR-~Qyd;n}WRZwZ=>?JvE)FsF$UB^8OP5xb#l%~!6fU{t;=)XE85cS8 zrLeRlujv<#UesWeN1AP`H0507ttI~?2An1? zFD_QJ3JpnlVn164%%$}qgO)jo!zHJ+kOjEJG0g8IqOSomz?m)nrUpQrlwL9H&!pl}@P=Q_G zg>AvCko#@)(pSGEhgd(Ofa2bx9Q-Am0Mt;1H)zx-w4DwVFz9U>CMr)7^H3m+mFTuL zi^!)7SU@nC85eQE`Th;f^OS|-URc@c<7&C8Os`;riHVDt>axoWJ4SI66^%+iAnfc3 zFXGIFS6m*5Jsb)040`h+F-GxH(f$CKyZ{)8BFtrQ54lfFlkp_pTWJ#lrH8-{bOSb$ z5of-H-V`7K05a!r>TrsRXRKaqE_O^*!^B98KgguSbc44Yy{ZKd4uUphoR>@FK^d7?@VYb+v8 z3Rv~nhV+d%o!?vw^5&LzZc^*Xco=*p=v!?PHgga#lEPMrT}M-8u?57W{q(T_f?7Hk zA{_e+a`pA%DowT+qJUl?jY-wv) z7z+ZY182+}KPn?W*hi6Op*k{I|x zH3@*>dsFSTZ3ZJHEXo~-Jy09T2B(v8#}FE3Xw6(@&XTx}*acXY);Lq?l$JL@_%jky zxDYzNIGl&(<9#0KnjpwbUva-N9Pu-1QA*Dsh|ZIi=$=Q#bOF^PL_zIIuuKPtty9UnHz?vFeLaUPKB}x`Tfo9EOg54T1QF*?E%PyiCSr`r zLLk>{g)0maJN6d#eX%&`})k-`e7Nc=9lp*F^GCCH)c?%Imd=_F=!31*+ zt9G_H*vFw8Tr{a5h_N=*vLC3WhXDj|b0NZZQwSeyrIDW_0iy9g?fL{rL6#Kal?Y-! zx8Qm+Sxd{K-$il>OW=@eG7!>n`oSnm`Oe-%2678Zv=gPsBh@&c#Lrm@Ol?SD=^Iw~ z=AXfRy8a{OtYs;XT*Xi3=DKuU3VT7!fHep>5DlJ_8p&=bKoV-Ex{%%0s|Xt|SFqTK zo!59?TuL61ygFB0NZuEhBMhwa09*=oCD88@{QSEnx*metIX$?_rLL@W34Gb(T%)Pxq>%*cq> zSjvxva91+c&HQUp6R6`gbNJe%!tGgb8If-Emra4sk!&diaU`m%gadTA#m;t{dPU$nL}M0-e;4K0 zyEg<5KnzRD1l&cr_!5=8;sLFCSxx$GpS!3L?rix$ln`C$lGjOuKZ>q{=Hl+~b~iZt z0QefZyav`l8xaDDSt#j;m#G9#xMoRwVSnJB+kNjl@BHnJ6VeA2v5? z)sR_k;RY@0c-S$vpJHJJznWAjzDc2{*E}x3+bz6ND9sfv;y08eizEiy-Y)!L5MR%v zF>u37uw95NQ4S`{1zdb-YDOr-+17-O8azu?86EfIGH;U{q;_s=th` zo5_YONEI<8^~jlc?eJ>kC!^%W%L2Rfatdd?I=EQ?+TULWZ5uw7hq1E~w1}OdepMs$ zp0kTG2^8q2N_mAT+3m2bdfB?U$<1u3^nf*V9o{^MJLxN`>nAb+FCHm1JNY_;088$h zKgP{d+(v|7OmljVp!^&V53$>7VkQ}Y^0EbVz6Qx9xDc+V(2yx6r}XKskx1l=@gfWq zkx@*pJ+jyh{VgYYo#01lOI<6396H>x3(;HZ;B*Z31fu}_a?RFHnB&Q&Q-*4=kv>l9 zI{*k0ak84?Zs-X!iATg&&93o&+c{oRtCu~X7VK_qpt-Sx$wIPA%z40WU z1Fz^M(KS~^w=Fk7JWekt#7to84i;!}PYZn>*K}~+yEo(@08T8pHUb{lujdA+YxkaY z;N!YZ;|4^CtWi0C7qj3neHSIh#M>=B;llK_dmR;NLK+OV5lcex@x@o@mP91oY3K4T z<(L69@xDvg*c+%Xw1uV4l-a@g2GPc#`R z10{DCINJ^z?a-g!$&?&K^fD3ri(&${zi_+|Lb$kv z6EjxD4|E7swEK#OHE21hp@@NP#C*8jOhCfq@S%Fm~5b9$x`vjAdhU{rSb-0XI z?xQ1V3AUhM!zn>6%Y}Z@gxj0};w zxS@##k`(f%r88%J(6EfPO)NX}iEtIB|pYo+ma{~-E=twX@p7hu0))4%- zh=@)Xkz$7kHT3Xx1p35Mz{fd0o#)2|XA=bi4VNp+vIXrRPIDhtUJv9-A=Ct?%I@SE z@Qxk0sxWL1FsUAq1T{<`B~qR^Fd|C_8_|wFV2q5xa_mW?|01K5Qe}!DX=H(2(m{Jb zazhsB8wf4%J}R6M14Y7^A7Dl+-DR5xE$MV6-*L+cNf7A69BEz>!d9HxBA@Y-+;IfB z=#&!$ezA8GItFqGzxKgSfk1AC^gpH%_J3F-I2D~pa$9)P?(B_=pZ1KQ+GDdXD_F{; zo>v7So@kVim5MR&X<3K@qytA|&u!KmmjUnt1>{UArbrbBGoU*>Y2$KL8&#Pwf=w+1 zF?5_?ML;~hmBj0n65Qat8wfQCGT@#P(R)N=qo6GmMeVxKvOGCVDPwSL6?t%~>Nk|6 zTbn+#h}$ir%sKqj(iVg{O13t=#n2JqUGVM+4#M`@;;)1TU>t@Ncx$bME91rk{OrP>07QM`pHB8Pl z`n6tD_DLs7CHc7+Z;20QP(t}l#K605vmGu)mAYppm$Rz)iOfWM8$`UG8Mb^ONa8BoHG}cx}Sg zFg&3zp$>u&5cggddq`pU{UW*#xH>K&K)~z0C|E*%c|)J%ur*z-J|qnqB^I%KBv)Ep zqpw)Ooi7&A@qQ9~1sog?Rrs5=RgfEG1@I7JjKBzvTMZhxsRg&ULCqG>1%9jt7}MBN zBD70=;sX0J_;Y5&ZXhXK2M5(4*O(+j;2eN7DWq}viN!ZHh7gUE#Yh%m>~Tf??KCHL zJbv6DH3kn~GA8+1-Y`TrbCK}!(z`wnFlo=Sl>xmG`I4ex8&Q2>Dm>jQO@(Ao$qGEf zo*1dlC?rfV9N1?s@W#xXpT)ym)Mz@0I3(#vf;0Z+ows%aXXr2^Gp3e!H=93cV>Lrs zRL`HF<6QCwrx3P)S@91Vy)G7@xSc~cRS>P9Fy75pS3JZiaKCZ68pDRktwtm&To}~V zd#x``I}VgvM3SFpn!yor+^f}#go$1g`s{_NI%b2NGi(NNqxUBSp!NNAxa|H6bNKmR z0^yY#QI`tqNeBWu4!8Hv=khnZA%S{RLaLH3T2$|QlN#R0F)W5jjBI z7_g~k4cGZ~%jCx#Nvh<0(7qga6B=7Ado_gL7Of7bx=J&WVXyKsU;To=gu#=avqeMk zgiC#X(Ne|M6vRm6_gvDlmRORT2@!DD@!A_Uy!YTiAzeh5a(0r2CD$b8z()xe@_|R$ za8bq8YSaH_y*%QIJ}er@ZNGXCE}Tam9l`z)`Oz^S7OiwI>uJ9N_E+KdsYb)UI}iz& zWR|xA2E609-SieT&>flwsX=N0A*4Cp1h|eL>*)C3%3#_owm!sZif@lPl9`xy9sC&Z zX44bjg4n#M2-9*{gi8ugsM~w|-ltjoJa0=^FLF}K)1{ICIG60!@~01oGHwk~@htZS zFX5LoaqTv4$fVJB6_G|+r4o9JFbq0t^ceKPG?zLs`sD|J5Ucc02nMR9iGrVfj-0`b z8bTs`#;nQIN6-HFW}-ZWrA?Dc1E?fH%icgmB`R}SUr3xQ=J@GfmP@7i<8WaDnOlOp z$KU6ubmzJ^L?OsekI0WH2$5HCeV0V85q+ilQ_7bMg!CLKu&js3RSit485@??1aIFR>g4b`o5LQ z?2C?z%^ zuc7*VxoO!pJP2#!J)9%IXN>$^%LLc02_f~O80(}9JM{=M2N zcDnm?8M^KR;-Ls2Lwe{t3dCL_+x>-R+8KF3MM!w3$pbjTZUi8qgD{#gn12;{D8Kh9 zzE2N^Oie4&Xslwh3PU}>@H8C7Xs<8iHsjRTSKzOel3zyxviK`kP@8IIqMod8u>miw zI4|k@BbXwkR6w&1Xp}CCDo&XwzwGL*u_2^;(h)a{$kcNFvKzGMeKS0%62k+mD-Fc2 zqyN;Zt`1kC^|()3 zgdGV1r@(>et!o3A_qvcLKMY}dil9>EX?0OC98}@jwO->rZtYUFBSg=#Z{hqP2ovY+ z^}IKwIig_rNwV&io<1vYsZEAf6qhF4c!1kGwnl3Z2~$)lWaOY)^ht{29xQHPX3r*S zauh;&6APsXR`G|s2&v#IXa=b+nCZ(Y@(AO4=L5kgQ=W9`Z9q@6?^FT-@Ciy}^poty z@Q93APNjYsYkE@ja-+2g66GDdD;;X%KK7+@lOHbnvU#BoBvtvF9VzQV#gJNr6lGLy zV)fYd7Zlkd3A9Y|N<8$j_y~5F^75l_lA!MZx@W>rQxXN{SpdC(vjOmc9UBuQhCTI* z*x}eah-m0%pYzqc+fldRwai@=b=Hi0Tv~MqkN5bt-vGi6XymszP95Ev6hsldMmUeFbx`>MhBKD?c0kq1Vo13V^Boruutr85v8LLF-0~bicy0K z(Gifay^{Sy6G20<^j?N>`#p@W(Hqgd8c{*I2hc+|%28?fK{2 zr$4Q0dgpF__T0I1FTQx;>GRIhIz&|UY_#lG!oqoIjf`M?bOTip=7>apktBc0 zTP_gn!93oBv8L1tR2iHcAK=YxT(m()5?%1GpfPz};;rJy6OXIedG>;aXBg*$_3YsL zC@DhdF(Bn>MYaI*FyXrF8;O1$ocfHpeibhzWpqYi3Vb2kx*kXMt2CTF@^a3K6P zce$+|rMeKs2olOS+;{m#T#4WU6+i-oF`aRSL5;d3d$9*8SZ(PgF0w*avRf^aaynGc z9!X?b@E_}sX(6&|{k;$yxekl5(ei;3{C;ZJwnvFbO08tfm8Ode<)T|ytl-Jv`p0S(7#iHSx8HKH$z^ z1e5sN0(8Uy?m?CBYbX`4;ogmVX8p3ejuM2BIPAEWQF;MSlSr%LHxP++wr99qLkfEx z0GDj}KpZ?#7-}m(snBWL?!hc%WI_Fq!8sKBY3O=#P z!o4PaaB?{LEh({tylZ%Fx|(|(W$;TB=${kZLHTR$1^lbJ=aKuo`z-o-2|YZA+;i?l zJiD)?nSta=7FFhApS9H3EC)U_%2d%lr=kJK6;`qxdnWnhVTCwhJz|z*=PniTvzs-% zkrfqllkNs4Pg#i1WO?SrkY)RKhuj&G3gZ1q`xGb&2}H`sJI<8~VBs!EorIqyyubu= zfG=hOimDp=Cks*tKr}s?H#YW6SP7?l;-C@>=!FovM^{jTm?T3Qe%Tj=maxOyWCv}J z=~(}l`8Rycqc&T>mJy^+<>EbtjjThAlD6F$#X}iy6p9Kx&X3}K+qtvsIlsiD(AYMy zvGecqhCo8-1KlkzyK5;zvZ?MzNSg$TDYYrp4nm(Y$1vNa2g*_^yYdGC;0tLw3Zk${$BO_^0T;EE(B^!elOg7mTN5xE2B z9^z@D;|v=j88 zyz^Qoa%ni}BR4&2E|}AmmZJx!THs3 zS?_9TGzDt2ItV+E^_4s%28?l<$swjhUIC1x4uyt21=>>XPN%g|g0yC&!};KJaUO_w z*QUjzHj{qRB3?$G%CSY%Y)K3GaN1muw1|J}N9QmLy}R!$TBEvErQ;sr?A{nss_r3` zyK0_m5? z*2;2hB8q41yT`-?`wXWW1U-Ryh$W3ZBOam?D$D{75%7J zry3@hO4)%bt#Rn;SL(otT%u(IaAR98%+6=JUYlm36U)klG0YL|KT2+);xaNG z;_>SXfS%Hpa&1#S%{C#{X&I_LM>)!w_y}HVadDqs%;zOt5Yt9el#HoZg_y|Zky2W+ zENvZ*n=>d5!&fSJqD6NVbEd{OE_BVbO&8>s6!SPwsh_nX1B}#D0WP7Z>a53b9+Z~H z*@zuC(;6H%Ma|w=q$K>BHIvsx0RVA&)e}pT&0h6XU{lJO+Eb%}gAYb!wztnY_rRi` zWNZ0xSU*p}J9|MscMf_3t5M+uVI5^iUVq+KLb*6vm?Ik*TKR>{8L|2(1mWi~C%jkfCrU9-5vm ztOiMt3>SKHM~QoQrAsJE8-*GLXV;U#QEsa5@DvJ?W;KdNvZ0mBXroSa&^0R8_5$Kj z)S8txDWRxClz0_1s#rxVCpg5Q6p{4c)XG%N(RYtJxApPEPKbi;3X0zliC#xOkH1y? zy^OzSoO}E3prGClxNFJSsnw~OIBpH!C;`)!uXBXu58k#(mp$7&dKN6?9#}>n4A^Yq zPl?PmjVOtQKt}XFHf7#oZTcCoZ?=Wcprm;V2FI`~h3N8QlkRc1ggI5J>kGTn2I+}e z)w+R2`B11wSmb^^omT7#+H!E5Mt9tNm*fLxqHAw8Dl84>>$M2d3rmK z{sTX+U=}tJKcl)(>fbx^LctmJ_P}|>Mqa>7Fci%{#!Dnjn;YZ$@S|otA9qLzt}x0M zG*GVZjK`6C3BOvmY7G)Q>1cx+r$Ua)rduK((G@bciY?^FE!;TA5|?$LOO5fVswPeL zpyIVu3o)Wuv_-SPoeh+!vz|3DM8)oWoyKo$L71^jLL^a8WRg4?*qCxx(0oJwR)8vY zeib=A=;)F#2o=rV#74#^FhQ7bamf}!U_ET_1x=V#vwA2l6%vZeK+x=iDol+$+G@d| zq!`ow8F(Nusxge7U*ZIt6=kJ3Rb-$TN;)(|FxMDpU$}>+FeUo$Y524AaIYwG4($wz+p+CVN032099F5h%5*Y?y)`H#}xuEQw-@O|!7l2ES zIX1#=rc^_iDN8_%Hmt47cMfP=h8CsnTIdPPYP}gh z>3GU0fpgz7>#<+1(t}tEaa~F?V%4MudM?kSXWDMs+J1eu&KB)`873nfj2D0t`@^-CYTK5Ze+X$I#{WM?GkjKHljq9+(qI9OBzx+m^V$Drh+p^q6* zFsVIk#*khS7JxllD#NHaH8$MGC58;sew954~>%qPXr@tmCLbBU*NW-KCn$zg@$qHa@p%fvHZ9!@o+Df`nhd#bLPaUo_M*XGQD%*Y^ za**rOvPS(mLQLwTP53naIGY-MqO@Xa9*nflSpU$CvqEKDzf{{$x$ter^x#BLj-C~s zCtRdezJ=8~zLTzN$RQMGF?zO$t2$sIG$fa+d1_BL+@a6WGNoRq`F$Cr)vyhPVlS`M}5?@%`kaz@864xCJLl9 zj0P2nQ9}@M+m_3bQ*1K|uKi>KUkn!PZ74vM@4j$1=u@5{<-{n`8Ers&2Fa}SK@I#t zk@rFS2&gGwh?MGWOcMjohMol=k34V?k`G3s#yp8gwXo$^k3K0Y zkiR9`+&lmD!%RtDSd*?JE?E-FsYQ}DHvFhq7`ajxEGSbtV+xXcWJzd8gQ7G5qRn%S zeAUndJ8q&DS(Q>t9YA$xRh8MI{1gVAZlC6whU?Y<8C?kXWL#ocH@po+tS}+mK0TbD zA6{3Zg`5(L6ydRFZ90|f!p3x6^mq?qkQnPF{bJf)7&fDHX(E)Sp~Mhq3WGQ9#!#X$ z9QKzexe`az3R##mCZ`4l9c>b9PQT}4iqN*z%p!^BngK5nEAjIG6j~4ZJEkgPG??%1 zrF@ZZ=F%GQ$z3u0Ce2vjj;6;4tx4*NRTm-dz?5YG;RZf+y>lIVsMSbxw~BcaKu}a2 z$3rBV$Wo?))5Dy^s!5u-xr)MeIOR(GRiKuPk=C!D0SPjW5%(3)K^@DzRzxXJ7wD2Y z?b*F*urBp;==aqOWc1R_;CMCFZ#gw}eevgMg$7pEcw@znD2DkU{NN`l0GI7!Ag;L8 zJ#1;B75b{MV;~-SYO38|bDzqL;!`q0WBqKdZKYQ7ni9j06Tg754026Ro!2x5(*Dm= zIS@Pp936Us0+_5rd@xR@v0*CXH1^!iH}VKB4kN`V{b*#MZr=?7fsTZd1!Xb;dlRPH zoT!|C_4gg??gZzWn07n==)>c$B#dUvcrfATEz444h)e#NtUOeF4o&!(Y`GxkAmM7$ zAeh((qWq%-V0^+ycue7X~j_{cta zV*FTumJ~*b%WYF>PbVuJSc7dV5 zKzdDFWnEWOuhGP91ns4~wkROtdReSmC?jfTh=p;v zD8y+$T97S|meMotp8XJYc7FHZhVx<+ieRq8sUD_To2LuYGWsCWEr0|x>fy=urMrPH z4GT3s*nj6XDgI!PROv2)S9He}Wk#@+R9eu&QGoX6ydm&kAPm7p<4)TftA6q2C zR-OJZ^%VeD9c$gO=kc-1vaLM6BE(_g(~cY{!d3mJX)tKjc-$H!93C~M>H6?UEr6@u z+TF?QG@0$eYwvzMedXEld-N#VOJf~m6tE0>%Jl^v-ZMwy6L%jh+~3!A&ky4wOJQjP zO*HdSVXY_Wqpg7wX>j89xty_>-{@ABP)@ge(KsX}u%)|ify<0C9y+Y;!Rs7N(lv(41;0W9`fSW77V2s6;=^7 zw9B@#ZMY|go%g(vD^3Vo>;|XY`LlWTvT;jSyxaav80Cg3aQZqYc=1FQzC4IzB+sxU zF+^t|zf@{$xn^Wm$Wkfgw*`g}MH2^^vhY)Fqyzs{eD2{rTP*7s(lo-r2&soVZ^)SO zY~{C<8t0P*&>VhQ1hq{N=GVfAWDkU{4u)P2td-eBrS(ba+Uq_T^rt|VLB+w4Bt`F4 zCp9uz$x*&CgPrrIEBuUW*fHkdatx0u)#4}fFca|S9?i?I0JoHT6t%9z8O-PPfDs*` z;wi61q36%(j)2g+E{WW=6lfnrOMzSR+Wdgfj%Rt=eUkmpVLn1Y){G1pUzPd8s+BI3 zu3*x-C1qsg>D`4y8GHWU*aaJ;c}i78&B?9U8kb88^K5|SZoAG7oM_Esd+y^hdpBlb zT6DNV7Immp<1GO6DCIb%oVmAgd=RwQ20>br!^nP=!sx9T^s&EP!4MKL#xNEg1=+xeGy9jcTe5o>rmKcKw- z3a3VGIjLc(nGCWYIANJhcvqy{M_ab@%P~*v*XvZ|df~kKhojUyG{!!^#VQS@`vDYt zTAP?jZXDO(H{+3PNh4ddmj84P6CDQ=%r+TzO|w=9o3W_8*-UEXnfbq$ehk)#QpWHs z=LG>{wcF&#N-?1B zEOkEL;#JML1QK_A5gKY1*Nvnl(#zPmQpDMW6=*Z}KoP4RJm+}{p9@$9dJD(1X5ole z@HdBNelouz+h4gTU%}tB=AJ4e?+wYv9clN3^P=v=Rg~aKQg=$7Vb(#J6Fjmo3roh` z6G4IFCroD>71SzdS-_#G%UGw>UM`|0`*heasCi{VcAQWG+6Ty;)Rnrl#%pHW30p98 z&*o#^@^fPrvW$WY*Vi7!ZS&#&L0&yt!YEGA|SqF?WPU<&*z^&)acsy&$)4Jo(?5t(9a8Sz`kK*lv`UzU% zgY^P??b#0j4_x$o>0W{qJa}~Ogasd5ZfG*mTxZi7fF5SrXAy08TmuH~5z=gMx`RoG zQGW7qPzxn>1&}X;2FZ~O&5{F_Uo zfr@XxjGic*HW2`0+oU@aGA4T5_zK!14=43MIXvfV$&L-V2X)7g9`Rv&gvp(XC5sy` z0V3VGMNb&gd*|N{i>*eEgBKI={xX?P9?6^t)txGQBPz(8Gs2|%OXQ*;hu~%Fn~H zK@rFS>WO^DxIWl`vgim#1Lx+?ez|jF){zp`FLfx7rX|kHur_rj6TTcOF~nmdkRtEW zW6PgVN&uTGGD*y8WF4{_eqtFsjd(1bk)OsH_l|TZ=7r^S% zIMDhf99E}A>PC2J!k6*Jd#@;8^`9HJC;N7f+S6X&uCQ0m-KM)|bVRh1hOLF1eUnoLWa_)diaknku!2BON!*Qj@ye^zV3l$f(Iy{xNI!k+LF9c8WX9Nt-m$ z-GhM&NRxgS?}OB47WQWph)}w5T5c`z8rcudiIfk|?A+Gvu)!N84Sxw-`DM)Vm%y8lH#pkLZL#hi zO;=e2jPyTF`Iwf-oatPt2wtIa#Y^inp2CvcyR2NpnZ(r<_i>p$9Q1M{DDyB!zKPP* z2Ty}$NG;^CLuax%>RoC-*yZa2cX zgvk&0z_8)yMi93-VLOf72u3%~7Go-KBZzp&<*po^8^Qj!k$LnS3--Zuinn_aK~ZbIFSI1q_M`etehc!8TuN%=PD?j}7}%-Ux^N>mK|!5}hNn24<(36}W8l4BpJMu4&LmnCrymJ$Hz--+UZapz7#H>hkGp4U(%%@() zh=~nq12_J12Al4om%(8%b$MF4=Vd>0X#GL9kzG}DkGu?c(o`LKP0`139#y^I+>NjX zs`F!9Hz|i%FJQ!Gh3GsP2ETxuJ}}HwQl08Q&ZF6o9G&haOdsWB?86ONtC!Ia`NFhw zDDeeppFNSXi8Zw`m4mtE{tHOq!3XzHfG&mOBx3so==3!0GSQIl`YC&tlV^idQS#C6=};x8{Tv%x0kXXcx0Bp?_Q9 zp!Y?~nG!oW$M*b(X~%soZ*7J1%^e6_N2kTc5h#Q`&mNk&ygC(W7kJ!~o$c;Z2!Ym(y&~ObLfXZ^3Gq zPOoJH_X=A$qM{+t%YslEr+TxMCowVP)*+k{m3kky&qVE?C%aNzGAPM(4Zp{~Ef5bBr{aP+nYgZ5cswvSww3z+yFTQ{%|S-x?V-$7V{X##1h3i4N*cwcCz}yE<4|4 z$D9gIj#^%%RLU9pm%+1(o1uTr1_LL}CC#et-~>`Ksy7(Ar;f^kVcJ@CcV3BbK?o4@ zNX(a%!V!8N+dFT{ensT50BflEc(mIY@tXVSEg4ereunSlkKy%Tt7A znAN=!78gks)ckkX4n}ql>B{&1Sa{yESKM-(y*6zBTIk~;we?Ab>+xul3urzC>L<%* zOE9vb5gW=@ySu}%&VEU6$~(&B=&h)c(!d*^5*E}k?%kq_FI_M|E2rYKDXu{Ard&WD zi(7!h$(4K<1JB58;XHR3AuZ+*cgVIz&Cjt(JzS@=cRdyGYL!risCHvb<}gZa^bq40 zqZ?N{G`b#sJZmAiC-cN_o?3zUT&2J@tJhS8sTSJtR1vWlr<76Xxf@S^&W6&@;LTu9 zw!1wJ%bNVcn=2^pZTUX*tE0^NHD)RD@*Q`ay{gohd!^u;vauUjTO0)+WwX z5@bscLHi^%kV?D*%a)e`TZrR?K0?3rwx}-6k36tVxqDPCSo(a!yJX4l7M%{Qr)@{w ztH!zI4G@J4E@QkHwQvr?u?aO0vh@Vt!nrn+CgsCAH@Pjh-b2J|j?aZH{?yLIBn>%6 zleBlvI&}``o}5f`NLK*?>&`AK&UkX5y<5 z$uayNB)L+g(3~d(But09#?p48F+g5vBQ%tGrr=wMhIUHqz7Y-?wQh` z&X}5~7|{cSie{x^kfU+y%Ve7)IE4b$Ga16w)BD5mHdbr??K5HdBu?7EA1QUC^6=pe^2)Q=v(L18KbZwVu^MN z5Kcx1L)K~Fg?h9R7%R|&L%Or7h%}Rnfhq1Lvg4uVw_qQ2+x~a#A(zv(XpO`Z2SqPRM#n6pc}2Zj}UO_)?#Y zf`@7PO<}f|9TZxk6+&Ed?1mXxrGGLn4i(5Iw1AOSm!!TbhVa7~v4CeU8oSEt(bQ2O z`Ir^a!zqqd2@-E-Npo@NA(x2n33a%ZAGeJ*p3NJd%~@c!6kS9No@NKMCx@x_u~1*h z!c5_-0SyKqY$Z8&BoeMLnm0TISV{XC2Av z4>N=LbVhDhV_*xqL2dmQ8#y=@8XJyX3;kV>CH#lkNpiRP1oO7@Kao*CxdgG#0u1E2^TuKoqztzMVD$pdh+BCa*b;Bm?E+|-@UsG;Au(Flq+Kx z93YKS>U-)9a?W1+d-9CpSZ5I_i;zu0W`irmqgNS98OFXe4pGAM0KcJ)mDNHF^9QHm z{}*WUqi!vAuV=+?gRAM#Tq( z%$Pp19&xmrFbvCE4Hf8U*tc051;DFrJvoR1f)N$!AHFw+mv^uegFOUJ8Zj<*x!((5E22fQhRL$S~ zd1`6Xd!W-4PEi}dQuJz^-JeH#K2KLp1IN0pn(YOM6X+i1lX^Fog(2)}boW?ZdtslA zjP03&$}s93{mu{eS;klGyO)MNBx>YzDb91Sg_sYCC^xlIO_A}H0*Nb1M#kXOFQdBQ ziZ91^@cu{*V=%g?jy}Q&JO4{o{p68!y!>r}VKuijQbG12u`B73oVgW_KV{@H7gIiV$ZemxK#c zY}bm$deus1+n_1gSrA&xi20|psHKcnX|2Ae{v3y2%esrwSA^1N#fJQ{;}H!<2Gk>&y6lk=vBKfp5Z$W2VI^{p2`A#7&x@NOFuBQYl%e z0Y=f$*Rjdn9i5lYOZ+?=n`eq!4R9zicmX9h`J|mN?b8UghQ0_by#Wd_&JQDgBw^dA z!VM`TG73$=f-Ra1zo;GV?or{{M;-pU_Gq%D%90;ZE8WKRsAG2Qr|HY8DH;1y{-l=aZD6sodGOSKVrAv z6<~H1V0zEt^CCWrL)&P%^GNGe04uE;-KwB#bhhQrI3rs&?Xjr`MY_u>!v)M1shRvv z8EFBmq|YlQ;XhrG(rtdB&;9G}0mIHW%IK6zP{S-7oUQj86YuY1tB@v0Y6P0tuj8Fw z3PT>8L^FkG4i-TuYKzAUP`c9KcK$`y7FEOM|7);*hnP}}i>TJ%(BBWx{v~B>RvVD( zRa5Iy0yVBp&Ig?oP8qib&?}OJ} z4D_Q&e>5(rC@K7OcW40dK)QSK5(YqZt?MfV41hzh+p;wFO=}uv$fM~UrQDg2F73|G zp{*L)3h}KO)Z~Py8I<-YabD^9;TlUQ%@87ma8O5VhiX{Rn>hm?;sg*d5={#M9yK@O z5uuD2Dc59LIa-Qvj?uW87@^SDb%S&Z>WV=f;u_9j^0S&5;|h!2oQaB`C#sWlt0XYM zC09(dD+AL$% z?JYKK)MU?t^6u*Mr>kF0On5?!-Tn`7N57f%KJC=2GOz2PA(Xg}CDizp_Zsh~;aOJR zg2QdcWcJ{K+#M{GgF&W;d+L;quo|#G8b3S|NK6zklx`)kg-SeiR4v9Z1vEV)%pHC} zBr}aTJ~0e~Owb5WcKjXp4pBGqD*paESkQcTi*LLC!F?VI^PGFhe;54sjC@}}&eM3> zLj2a}lZhr#VcWMgBYP(1UHain3(G=vs(}nHnE4TEOH{4LK=Ka;I>(0T%3` zoXcHsrf6BmUne=H=4{$n@# zZ@>8YHy(cOr(YYv$+csXhYn5beh-ghNANf{^0*s2j)yZyJbY~Qh&$xm5&UyUC*8#E zSGD+8q*;SKETCZS;XQwhkXViZ*Y3n{90Y?xTW>Z~rQ_7;RR%Omuk{LDmEJ zYuV%?=tGUy(MO=E&Vg;Dljn$$|BMbEKZ5yoM}Sp#>F?`X4kPE3wWoE%O4XB-{prq{gL42 zyYi{ee|+TdVGq-fwP*R7*!hXz>HP#xKOWzCpD_JcVEQp1-xq-2*J|%eI*Lr}{53!R zR{`Va3dYZ+rzVkQCz)+EKccsB-?C8%}Y-0CUY^k%n+=Gn|#J6$M*>x-R_-J=xXQdrzdvrs8kaf!6Kt$Kp3qg&n^0N6pC{9tD~Tl z-QULlI^f?vj&U=cuj9Ml1X|>E6z?p}zD6~hUjocOLmpmO6{-iL< zNKgfi>dm90k|}g@lPU7?Z9Lt1l}vu$kvUYEOcT({?lSBs#{JA)87fecumU|cJr6Kc zUUSK3*{unAShUz#yY!4!+G#C9ylOaUf?z z1xZcFx6{z2NW!RY|GUG-PU9P8N2NAN@Y|d*q~P<;tDen%M?~eB(;_^fT`}LMPs@Zt z8bA+%^#6A33^D|lT9}3n(*G-G4jk}bp+L`!!GIZqC^`dTIW+ME``-OanUcTMDfvrO zf(?9HW`Zwh;lIhCXiV(>K&T0J1Pc8_OwYYg!8>1<+5g6ApX$~A?oR{@f5mD)!N=_- z8P{Kt{DG*6EB9xwx*D~cuEx@rVp00B#_l1uB_Bu8*Z8d?P?138EeQ09-4pEY)~ES- z`zHc8zaTfS2w=B9jZD(o#1*g+o=-Yp?Fz|#B|N@$!cu`tj2+X5X+W#^y#15WKlt40 zSH^#I@@1KR`a=`Dr`Y#jAD(hx71%aZTBr%K`N8B_@tx^0=l|;ZduN3p>0pz3=?HGZ zY5ZmX*gL?Rxbu`!$L&86TA|3CxbqxxAnIV0!2fHIP(fNi*zPzI$I?u9QnxUYrN(ps zHp*W~?X$+HIjcq#6BBOQ#$3$ajVc-+297i}Aexb{KuR_Izfu5Tn zd#AB^lI|6~_?Eku0cl&tzc-F@+|Okx1`td<+;5Q)TSzz=mNoBX2W*OK;iI;|Jj#d! zSKLRFDq*XG@aL_coSwKsWi)Z?Clg-|k7p*X2sPdM$@uPr6IV!@?*sK?o|mt1wr;%- zUgsCQYZCeUD(I~uq1SB+Z`+ka2 zVa@vq4ie<$oW7hByr`gM9hzdd&*9_FWnsMg<@21%!rP}!Dc^=3{{}=NP$07AmIO6+ ze~$n`F{z%r39$zoPC8xEuZn)XDFgY5d`gUB_xB(fC&tn5Eefn#zre@t@4>lY((MXA z-V|f5APvB5lU6^WUuyB)d3ECUsElp&IEBqT4MzE1QbfR3@m3;AdSsCCz>~kh9w?k{ ze?kU4dOyk4!p5ZV`?LGaK9NnZgQF)I*3#h8{mMAuVDSB9Kd!j(lTrLp3+0cJExF=! zj6JWpUtt71dprm%`gA;0veG)XX4wI~ zUyC!jJP@)bSXS4^I2LA-Rp5O7P>5>hhrqJByE{LmOouD^L)h66aA1gu-G>nbf(Sf~ zFO&yC{SbTwgZ0qF%ESt2{Pty9n=}CnBsNUW?wL{8JGcMYMC0^5ZbToTu0^#pPRnGY z1!#kb+uvea#~s+?55Tz&!WAtahWXA8VBR4NCFb4tP#Q49zWN?AKnX80k^x-}za7-O z^S2NPhepI<9vKz>+xc6vGedHlqIIE&AhuyVumOCIigourF#+-7puOHFVZBeij!!21 zSWI1sp}fVsA4}ek*)x{fU#u9-O%SH;2K$KR<<1W67IX zQfhoZA=9_}1lf1@2_p3uY!P)ROK$(1FZdE37uR^=HouUBAg+}AIj79Oo}RdKzsb5g z_Y;tbG$t4(Kb=jA7gT;Nn;ABP0iHYmPkZMdTUUAB@pI0#eXfmtu@6acx_i@0m!Nn} z92=67w8@H_gqDp!nm7QR_3K6+#gTB}@MRyI;NgEc_j*ShS zl^AK!8Ka;r6Ws5~B8SlmO)S^Js72M_CA6-ci4k7tW%BGx@Q`BE?S0$)Wjhz1?)dC~f4GA=1F+N3KAnQ^8VSA8t=$1KDeSHS zpEC>)uNjt<{qp#f}E~creKhbDvc)V zwIGeEV8qR4v7S;LUYiPQsabZ6rCuiJC8C9M6*n4KlZ~2Mic-PF*w9;@3w#hnkA z*PlE8+F!kOxUu4;BQN%Rcl+iax4-!9;DMypO zI{xJN7ykavAD{Vr^27uG_78u0@0mw`_TArj{E8Lj7k~b(zj^LwN0q~!YrB< z+b>r{N!bo+;E4*@4z`6d&3tf~Ql7WWpoJu3^~tGh*aDNlTSZzfptG!v>Ht@E_KQN3 z!`6Hd^#-$TLzd55*hJO+S=f0-Y%Bu<_J`6pE5Fi^BFuo}{RlbK{5#Q6B({N;#Yi z@?cGftQ=;Y6@Zd+Ii{x@mN81yj+x?-E95%EHe=>dUr@-YGTmxuGXS8~;BHonr(V=b*zb1Q5VJ~|bH@g)qnWvm?> zI_Sr^a_4uB9x4v=9PGTDGDIe80%73e!!JA6SQAW+zkHnfMW`D`Fy zw1*i|l_6Ba7NYzD(;-O|l^~dtbS6a=IFq zMv5~mWc5H?9EtarX2z?V7+hgz2EtSja*$E zE>%WpcouucVje#Lglyjy*Bsf5S}BdMEN+|GJ3hAW zcjLpu<-6j^jeD=VuC#XF+Aj{SzjjSLux@?i4+mX4CnrjirO|j~Q+Xuz!Q4V77q<6? z(Ri-sK!J6Hy7AYD@79j6H9~b*u8>e(0WD-94 zW2^6d{gbs#s~>4i5XP&g>mv{%z?bS$$U9zwMuF~N>jyi5p+iHGaZ6p_dZ~3{i9KL|`E{fG5MCxWH%~kh(x(p`)e3kXhc4yngT}__aFwa~2@3JkO z^~1q^F>D4MVQUA#e#h_v?%K-mBvsxAvT$FPp4e8vfrKxxh}~fa9zO<$%$QAQ+^2HL zYBeX)4xKda>kLB*X4OqW&V9%?#Q6#PH((~GtZ`%d)S*3mfmT*4W74jb#2iC3#Q}@A zB&9H_CnQ}6WT0_<;&-MmTBZq!h@Se7TqN6RLnGOIjqt53J8nVyl&&}o6@CdoAcR@B zV`>Ec{ETi<{RLZp=_*8CHfD1=yEv+!aZ#VmrOSIsOH_Xns9o5H`9e2g!akV^Ys>MWHJy0HzWDqVSxhumCrkB`gqCPeetWd&uvCT8E zhkNR;_0(T?y`F6^k_n}LC*R2oP@xt@1z;q!-->we2ABaM*%WFoQ_^N|)?oTFg$-mh zdhT*C-)d7z4XF8^`oAoZ(kayw2{AN2UcP55vSn;)JobltZ-b^cG(J|E-X2etr^k?_ zhvy_zacoxZmiN0do68fWvB|l7GzPKK(_#oc;zn}CLXC_99lR%MbOuov600ANrYtU{ zKm*_Ea;4U!D}t;WA*VOO7A!C;oJJ8}=X=*^c>lx5J~F6leXn2jc1?_LDo^eo8=a|? zq#-Pr&E{LSF3jSI4&VFg$JFU>mWnS?d%h6QCHmg>OSUsKIdWU6y6?cR)n2nOuigY` zT{%G%7>RIDHigf%v%-ejS;xZ8Y7+%Ao#lH4dTQ;gqp`D5{e1{A*y4NFf6VCS7W5K> znk&OoIE)25_gj2T<4s=Ct|2c5B2!)cSGgdE3#xu_PNE2}>j$$@>KF2X`7`0FXN5dz zyG)A;4aQtKcDOl~R z0#QRU3^3r{T+bPmy^fRK5t2f%l_*`QinTMdJuP>`aW0lmq13yaF8hg%y z?*;6P3~8hLc6R%jrC#?^Pk*f)sMj^Moz&b{3?GURWu(x$e#vf)Z$2h@%@GjNVT~BK z<&}l|Lq?>S_FqHc*V>-uYjjhT;G1t^4=jfmCJm-M+sU3nzK~<{q;}@|+Eb7f!u7W2 zBfaf0QO!UohAFiW4XVr7ge=yIm1-OT(e2~MSn6dud|7RWqV_+xRyu;Gq49P>YH)%RZLZ`GON5L~PALMsJ3Wx44 z3HSa91Bzu@0ij9lL#-apRtLae5xO$GEJ}wE6(6!^)s3_ui?3Fjl;l+;iG!mb#p^wH{}K!l@nC}}Yp4Eo+mHMpq~m#Xo6 zrG;&}JjdVE7-Pd%4=&-9hj!|>OI{^R@U&@W$)V-GCvG`j+82)$_a0_{G+|6VE^c#M z-`UMeAafg_K_J<-Gx>qj$Ja`1v)iNbWW6oPdRguu(;EfBbgL$Wc~;y8S?{Fp)4%C^ zOJ`xT<)7g2b-M9(dJ}0K^3_Ae=kuUT{9V1``sqIe|za3 z7ebWYjrAq2I734Ts-}@gATbtPBbB<69q)?CmCcG^qFRi?u`>c=BzaS{`^}jPr#SLo_$EXmCw&?E|S0WbGKX5@D!5^6ZL!wfFfZg%W zMCtdU8=*>6{~)^2S;@pTo`*xS`ceYHpl%ac-EhAqJ4^?p9pV)Nm|%stH|)L}VqqJ{ z-V3DNz=jc-ly0-i+X(OtENR%1hH<3wbxFG{X%}u)zHTCK+H}lxC#nAq2!N+y$Og8} zEximl40D&0N!>PL+{HHNEU1@uLx0iMy!fCgr(l(Z87hmRVAe$T!nn*xqEpn#Zi23m zrn^nk#GklfHbLn+3dr-T zG62#5s6rAsf?Th`q?Z6+U=rBwn>Aa9{ZdqU71y5h@g-pwvM+~&5|l#2IHQwFhNM=i zCxX(<4Jti}l>t3J7hcXr2*Pv4w-Lmvbd1^N3{KitY1kS&iVS#UlORQgNUOzhY3dYM z@~E%NEQ%nju}8N(lf0MqlRm-7{>X%2`UEix;cQKo81MQKmTwr3PFdyi6pYfRB)3mp zUTnP}{)KR{gkww#RJDoj#BpMJ2XK4_-;IXC+)$FllwW6}ER^;y>9f#}8^NJ0Edq{c|(c@^kcFvTu<3Rm5_-$lSe-fI1QZYC$pp8M+R_-Z|==>}J!wtot zj&SNvS`}sm#Z!DD;zSr3SYK|WFqAw7;hx5EieiQDNnaN@8*9+8eQyzK$ulkxk9ayF z5!%p*IwfX+@AFwL4JYi4JxF${oJEw;SeG~KWLF1etrIW-g4R?NEr%OEaxBOK2zMDw zkUt_tnzvv2%7Q3QiUf$6c{7a?;Olyj0Fwf6C2lMdbBD^J;X#D2IM}{wT;y-H%e)34C(^jsgH4q*yed zvIhCa2EfL2Y_)|6ZrOzcguod(Z3WKw&F6f~>M-epI?v0(fhN{RFzVAPkZfa5WDIv1 zpa2U0c|=rt9)uNNX|!1TbfK@A(YrKP{IyudqQ)YNEb79R1aNzM*})Yumey-mGaa!a zC`o2~N=BptbYwd^peQE01WIzk>q#PzNfa0I#zBsQh~O6^f{Yar4QW2wJSZ%U0%Zag zgH}N2h(|LxLfG|Xc1D1ei@wP?;VyFF!Gkywf$+-6jqLOgm`7LGPB~8L$+VNP?cGUf z4$zU<8TFxwWmuJDW|F%|s3vY<4D)TSJ?SrjA=fBFsBy-K++S}WsrmaQ%VU;d8*;}>7L2H|sqEnu6+6obI3DNXPw=Fsewn8~4C5TTt z^uCX|=bh%nK&{FyyB?@L?t8VzhB2HCO_la>+fm+My{A;c6IY&@94Tp&P@Gj2i`qG9 zyKqCLG!frZuH04JJ2QrVXMd$UQJlVevRH}l9+QKlIC$OQx`FirMJ!SWs@19KFRflp zet*gO=r31BS65`mT3wpnzna$7s_s%qS654;)2j#jujwCLyL}V?))h9HAqt!Hy{t>` zAKrw&)fMh{er*9;7-S#{08;M(G)>+z_x+#9n1k;7^>*o1?? zgS%%Wo+wrBn${#Q-5{E@OnbU=|1IBJeo=$_F?;pjyk&R+WN|TJ!tuSf?Qyj<##`|^ zeJ`9HfWaiNCIOBfTl2i7YI`{N%x#s@)Xn9|xgFl{flB$FX)Eh_zy0rfZ&hKrySMW@ z|C1K){P7n2-kWzk{Cg|zcxX%QYu~Q+zw`MY{^1*{vhPc~XS>|3RoOkaD!ccNP3~r~ zb~DV~6%4GU>9|?6e`;heb*G+d;p#rWuW+#$yYOCHP|oGtxv5;)JU+e^8>VNzw>a(} z83zP>{&Trkyxv0pI~Uy2bkys4wF~=mBJ&)*NX{sT2qh0H(zLS;Q_4X zQ{v4R7pm69PXOzkS$bXGIIZX<0XmYYx7$y9chh>&dee*6=buU*+pV7@f@!U^Yz58mlwd&rfqzCq=>9_e5dvmPKc=J7Yt7%>5 z+NUWw$Rn)R@YD0n+kqh*&)egDZVsO6agu|k%?C8JUY`c8s$cc4rv2vn>R74%m8Fif z&cEnY7)qr^D6PLO8e@@Nch^I>O|I?+ciR z#Dyd32Y>W#6VH2yUVVGL_9)PEZ#tX;hMM6hILUi~3|lWuE3ys_t5;b_E7E-Rbnzls z{CYTyB=Ju2rlW;paa5?&y?TznV(%%W*hTF(U#W5F6=>3rUR>c`xG~>m6PG_Nu3T?x zaLX+0bYxf%ZQ_n%I@Rxyw($A?`L!58K>7A>#C7W5y&Y?Q1uw4W@fuaMvx~}Kj4cjV vJl+=}oEidq^$61ZD_}mpyrZ!uZVBce`+2g38GGLMzx=Ve|DX7O90LCZ>3(Tg literal 0 HcmV?d00001 diff --git a/NTRDebuggerTool/packages.config b/NTRDebuggerTool/packages.config new file mode 100644 index 0000000..8c1f1bf --- /dev/null +++ b/NTRDebuggerTool/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file