From 8986ddb54b00347b9507fd45d72117f61e530e83 Mon Sep 17 00:00:00 2001 From: nattthebear Date: Thu, 18 May 2017 18:44:34 -0400 Subject: [PATCH] some waterbox cleanup+reorg --- .../BizHawk.Emulation.Cores.csproj | 16 +- .../Consoles/Sega/gpgx64/GPGX.cs | 1 + .../{ => Waterbox}/ElfRunner.cs | 248 +----------------- BizHawk.Emulation.Cores/Waterbox/Heap.cs | 134 ++++++++++ .../{ => Waterbox}/MemoryBlock.cs | 2 +- BizHawk.Emulation.Cores/Waterbox/Swappable.cs | 104 ++++++++ .../Waterbox/WaterboxUtils.cs | 46 ++++ References/PeNet.dll | Bin 0 -> 120832 bytes 8 files changed, 309 insertions(+), 242 deletions(-) rename BizHawk.Emulation.Cores/{ => Waterbox}/ElfRunner.cs (67%) create mode 100644 BizHawk.Emulation.Cores/Waterbox/Heap.cs rename BizHawk.Emulation.Cores/{ => Waterbox}/MemoryBlock.cs (99%) create mode 100644 BizHawk.Emulation.Cores/Waterbox/Swappable.cs create mode 100644 BizHawk.Emulation.Cores/Waterbox/WaterboxUtils.cs create mode 100644 References/PeNet.dll diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index e7df197953..0ff66a8a21 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -110,6 +110,9 @@ False ..\References\OpenTK.dll + + ..\References\PeNet.dll + 3.5 @@ -208,7 +211,7 @@ C64.cs - C64.cs + C64.cs C64.cs @@ -220,7 +223,7 @@ - + @@ -1247,7 +1250,7 @@ - + @@ -1269,7 +1272,8 @@ - + + @@ -1281,6 +1285,8 @@ + + @@ -1346,4 +1352,4 @@ --> - + \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.cs index c54a7d7892..6707e53448 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.cs @@ -4,6 +4,7 @@ using System.Runtime.InteropServices; using BizHawk.Common.BizInvoke; using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Waterbox; namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx64 { diff --git a/BizHawk.Emulation.Cores/ElfRunner.cs b/BizHawk.Emulation.Cores/Waterbox/ElfRunner.cs similarity index 67% rename from BizHawk.Emulation.Cores/ElfRunner.cs rename to BizHawk.Emulation.Cores/Waterbox/ElfRunner.cs index 0f6f1dfaa8..d72ce948fc 100644 --- a/BizHawk.Emulation.Cores/ElfRunner.cs +++ b/BizHawk.Emulation.Cores/Waterbox/ElfRunner.cs @@ -13,9 +13,9 @@ using System.IO; using System.Collections.Concurrent; using System.Threading; -namespace BizHawk.Emulation.Cores +namespace BizHawk.Emulation.Cores.Waterbox { - public sealed class ElfRunner : IImportResolver, IDisposable, IMonitor + public sealed class ElfRunner : Swappable, IImportResolver, IDisposable { // TODO: a lot of things only work with our elves and aren't fully generalized @@ -41,11 +41,6 @@ namespace BizHawk.Emulation.Cores /// private Heap _invisibleheap; - /// - /// _base.Start, or 0 if we were relocated and so don't need to be swapped - /// - private ulong _lockkey; - private long _loadoffset; private Dictionary> _symdict; private List> _symlist; @@ -55,11 +50,6 @@ namespace BizHawk.Emulation.Cores /// private List _disposeList = new List(); - /// - /// everything to swap in for context switches - /// - private List _memoryBlocks = new List(); - private ulong GetHeapStart(ulong prevend) { // if relocatable, we won't have constant pointers, so put the heap anywhere @@ -72,7 +62,7 @@ namespace BizHawk.Emulation.Cores { using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read)) { - _elfhash = Hash(fs); + _elfhash = WaterboxUtils.Hash(fs); } // todo: hack up this baby to take Streams @@ -87,12 +77,12 @@ namespace BizHawk.Emulation.Cores { _base = new MemoryBlock((ulong)(orig_end - orig_start)); _loadoffset = (long)_base.Start - orig_start; - _lockkey = 0; + Initialize(0); } else { - _lockkey = (ulong)orig_start; - _base = new MemoryBlock(_lockkey, (ulong)(orig_end - orig_start)); + Initialize((ulong)orig_start); + _base = new MemoryBlock((ulong)orig_start, (ulong)(orig_end - orig_start)); _loadoffset = 0; Enter(); } @@ -100,7 +90,7 @@ namespace BizHawk.Emulation.Cores try { _disposeList.Add(_base); - _memoryBlocks.Add(_base); + AddMemoryBlock(_base); _base.Activate(); _base.Protect(_base.Start, _base.Size, MemoryBlock.Protection.RW); @@ -130,7 +120,7 @@ namespace BizHawk.Emulation.Cores _heap.Memory.Activate(); end = _heap.Memory.End; _disposeList.Add(_heap); - _memoryBlocks.Add(_heap.Memory); + AddMemoryBlock(_heap.Memory); } if (sealedheapsize > 0) @@ -139,7 +129,7 @@ namespace BizHawk.Emulation.Cores _sealedheap.Memory.Activate(); end = _sealedheap.Memory.End; _disposeList.Add(_sealedheap); - _memoryBlocks.Add(_sealedheap.Memory); + AddMemoryBlock(_sealedheap.Memory); } if (invisibleheapsize > 0) @@ -148,7 +138,7 @@ namespace BizHawk.Emulation.Cores _invisibleheap.Memory.Activate(); end = _invisibleheap.Memory.End; _disposeList.Add(_invisibleheap); - _memoryBlocks.Add(_invisibleheap.Memory); + AddMemoryBlock(_invisibleheap.Memory); } ConnectAllClibPatches(); @@ -306,7 +296,7 @@ namespace BizHawk.Emulation.Cores foreach (var d in _disposeList) d.Dispose(); _disposeList.Clear(); - _memoryBlocks.Clear(); + PurgeMemoryBlocks(); _base = null; _heap = null; _sealedheap = null; @@ -425,67 +415,6 @@ namespace BizHawk.Emulation.Cores } } - /// - /// true if the IMonitor should be used for native calls - /// - public bool ShouldMonitor { get { return _lockkey != 0; } } - - // any ElfRunner is assumed to conflict with any other ElfRunner at the same base address, - // but not any other starting address. so don't put them too close together! - - private class LockInfo - { - public object Sync; - public ElfRunner Loaded; - } - - private static readonly ConcurrentDictionary LockInfos = new ConcurrentDictionary(); - - static ElfRunner() - { - LockInfos.GetOrAdd(0, new LockInfo()); // any errant attempt to lock when ShouldMonitor == false will result in NRE - } - - /// - /// acquire lock and swap this into memory - /// - public void Enter() - { - var li = LockInfos.GetOrAdd(_lockkey, new LockInfo { Sync = new object() }); - Monitor.Enter(li.Sync); - if (li.Loaded != this) - { - if (li.Loaded != null) - li.Loaded.DeactivateInternal(); - li.Loaded = null; - ActivateInternal(); - li.Loaded = this; - } - } - - /// - /// release lock - /// - public void Exit() - { - var li = LockInfos.GetOrAdd(_lockkey, new LockInfo { Sync = new object() }); - Monitor.Exit(li.Sync); - } - - private void DeactivateInternal() - { - Console.WriteLine("ElfRunner DeactivateInternal {0}", GetHashCode()); - foreach (var m in _memoryBlocks) - m.Deactivate(); - } - - private void ActivateInternal() - { - Console.WriteLine("ElfRunner ActivateInternal {0}", GetHashCode()); - foreach (var m in _memoryBlocks) - m.Activate(); - } - #region state const ulong MAGIC = 0xb00b1e5b00b1e569; @@ -533,7 +462,7 @@ namespace BizHawk.Emulation.Cores if (sec.Size != len) throw new InvalidOperationException("Unexpected section size for " + sec.Name); var ms = _base.GetStream((ulong)(sec.LoadAddress + _loadoffset), (ulong)sec.Size, true); - CopySome(br.BaseStream, ms, len); + WaterboxUtils.CopySome(br.BaseStream, ms, len); } if (_heap != null) _heap.LoadStateBinary(br); @@ -555,33 +484,6 @@ namespace BizHawk.Emulation.Cores #region utils - private static void CopySome(Stream src, Stream dst, long len) - { - var buff = new byte[4096]; - while (len > 0) - { - int r = src.Read(buff, 0, (int)Math.Min(len, 4096)); - dst.Write(buff, 0, r); - len -= r; - } - } - - private static byte[] Hash(byte[] data) - { - using (var h = SHA1.Create()) - { - return h.ComputeHash(data); - } - } - - private static byte[] Hash(Stream s) - { - using (var h = SHA1.Create()) - { - return h.ComputeHash(s); - } - } - private byte[] HashSection(ulong ptr, ulong len) { using (var h = SHA1.Create()) @@ -591,132 +493,6 @@ namespace BizHawk.Emulation.Cores } } - /// - /// a simple grow-only fixed max size heap - /// - private sealed class Heap : IDisposable - { - public MemoryBlock Memory { get; private set; } - /// - /// name, used in identifying errors - /// - public string Name { get; private set; } - /// - /// total number of bytes used - /// - public ulong Used { get; private set; } - - /// - /// true if the heap has been sealed, preventing further changes - /// - public bool Sealed { get; private set; } - - private byte[] _hash; - - public Heap(ulong start, ulong size, string name) - { - Memory = new MemoryBlock(start, size); - Used = 0; - Name = name; - } - - private void EnsureAlignment(int align) - { - if (align > 1) - { - ulong newused = ((Used - 1) | (ulong)(align - 1)) + 1; - if (newused > Memory.Size) - { - throw new InvalidOperationException(string.Format("Failed to meet alignment {0} on heap {1}", align, Name)); - } - Used = newused; - } - } - - public ulong Allocate(ulong size, int align) - { - if (Sealed) - throw new InvalidOperationException(string.Format("Attempt made to allocate from sealed heap {0}", Name)); - - EnsureAlignment(align); - - ulong newused = Used + size; - if (newused > Memory.Size) - { - throw new InvalidOperationException(string.Format("Failed to allocate {0} bytes from heap {1}", size, Name)); - } - ulong ret = Memory.Start + Used; - Memory.Protect(ret, newused - Used, MemoryBlock.Protection.RW); - Used = newused; - Console.WriteLine("Allocated {0} bytes on {1}", size, Name); - return ret; - } - - public void Seal() - { - if (!Sealed) - { - Memory.Protect(Memory.Start, Memory.Size, MemoryBlock.Protection.R); - _hash = Hash(Memory.GetStream(Memory.Start, Used, false)); - Sealed = true; - } - else - { - throw new InvalidOperationException(string.Format("Attempt to reseal heap {0}", Name)); - } - } - - public void SaveStateBinary(BinaryWriter bw) - { - bw.Write(Name); - bw.Write(Used); - if (!Sealed) - { - var ms = Memory.GetStream(Memory.Start, Used, false); - ms.CopyTo(bw.BaseStream); - } - else - { - bw.Write(_hash); - } - } - - public void LoadStateBinary(BinaryReader br) - { - var name = br.ReadString(); - if (name != Name) - throw new InvalidOperationException(string.Format("Name did not match for heap {0}", Name)); - var used = br.ReadUInt64(); - if (used > Memory.Size) - throw new InvalidOperationException(string.Format("Heap {0} used {1} larger than available {2}", Name, used, Memory.Size)); - if (!Sealed) - { - Memory.Protect(Memory.Start, Memory.Size, MemoryBlock.Protection.None); - Memory.Protect(Memory.Start, used, MemoryBlock.Protection.RW); - var ms = Memory.GetStream(Memory.Start, used, true); - CopySome(br.BaseStream, ms, (long)used); - Used = used; - } - else - { - var hash = br.ReadBytes(_hash.Length); - if (!hash.SequenceEqual(_hash)) - { - throw new InvalidOperationException(string.Format("Hash did not match for heap {0}. Is this the same rom?")); - } - } - } - - public void Dispose() - { - if (Memory != null) - { - Memory.Dispose(); - Memory = null; - } - } - } - #endregion } } diff --git a/BizHawk.Emulation.Cores/Waterbox/Heap.cs b/BizHawk.Emulation.Cores/Waterbox/Heap.cs new file mode 100644 index 0000000000..1d83e7618d --- /dev/null +++ b/BizHawk.Emulation.Cores/Waterbox/Heap.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace BizHawk.Emulation.Cores.Waterbox +{ + /// + /// a simple grow-only fixed max size heap + /// + internal sealed class Heap : IDisposable + { + public MemoryBlock Memory { get; private set; } + /// + /// name, used in identifying errors + /// + public string Name { get; private set; } + /// + /// total number of bytes used + /// + public ulong Used { get; private set; } + + /// + /// true if the heap has been sealed, preventing further changes + /// + public bool Sealed { get; private set; } + + private byte[] _hash; + + public Heap(ulong start, ulong size, string name) + { + Memory = new MemoryBlock(start, size); + Used = 0; + Name = name; + } + + private void EnsureAlignment(int align) + { + if (align > 1) + { + ulong newused = ((Used - 1) | (ulong)(align - 1)) + 1; + if (newused > Memory.Size) + { + throw new InvalidOperationException(string.Format("Failed to meet alignment {0} on heap {1}", align, Name)); + } + Used = newused; + } + } + + public ulong Allocate(ulong size, int align) + { + if (Sealed) + throw new InvalidOperationException(string.Format("Attempt made to allocate from sealed heap {0}", Name)); + + EnsureAlignment(align); + + ulong newused = Used + size; + if (newused > Memory.Size) + { + throw new InvalidOperationException(string.Format("Failed to allocate {0} bytes from heap {1}", size, Name)); + } + ulong ret = Memory.Start + Used; + Memory.Protect(ret, newused - Used, MemoryBlock.Protection.RW); + Used = newused; + Console.WriteLine("Allocated {0} bytes on {1}", size, Name); + return ret; + } + + public void Seal() + { + if (!Sealed) + { + Memory.Protect(Memory.Start, Memory.Size, MemoryBlock.Protection.R); + _hash = WaterboxUtils.Hash(Memory.GetStream(Memory.Start, Used, false)); + Sealed = true; + } + else + { + throw new InvalidOperationException(string.Format("Attempt to reseal heap {0}", Name)); + } + } + + public void SaveStateBinary(BinaryWriter bw) + { + bw.Write(Name); + bw.Write(Used); + if (!Sealed) + { + var ms = Memory.GetStream(Memory.Start, Used, false); + ms.CopyTo(bw.BaseStream); + } + else + { + bw.Write(_hash); + } + } + + public void LoadStateBinary(BinaryReader br) + { + var name = br.ReadString(); + if (name != Name) + throw new InvalidOperationException(string.Format("Name did not match for heap {0}", Name)); + var used = br.ReadUInt64(); + if (used > Memory.Size) + throw new InvalidOperationException(string.Format("Heap {0} used {1} larger than available {2}", Name, used, Memory.Size)); + if (!Sealed) + { + Memory.Protect(Memory.Start, Memory.Size, MemoryBlock.Protection.None); + Memory.Protect(Memory.Start, used, MemoryBlock.Protection.RW); + var ms = Memory.GetStream(Memory.Start, used, true); + WaterboxUtils.CopySome(br.BaseStream, ms, (long)used); + Used = used; + } + else + { + var hash = br.ReadBytes(_hash.Length); + if (!hash.SequenceEqual(_hash)) + { + throw new InvalidOperationException(string.Format("Hash did not match for heap {0}. Is this the same rom?")); + } + } + } + + public void Dispose() + { + if (Memory != null) + { + Memory.Dispose(); + Memory = null; + } + } + } +} diff --git a/BizHawk.Emulation.Cores/MemoryBlock.cs b/BizHawk.Emulation.Cores/Waterbox/MemoryBlock.cs similarity index 99% rename from BizHawk.Emulation.Cores/MemoryBlock.cs rename to BizHawk.Emulation.Cores/Waterbox/MemoryBlock.cs index 5bdea3a105..beaf8b45ab 100644 --- a/BizHawk.Emulation.Cores/MemoryBlock.cs +++ b/BizHawk.Emulation.Cores/Waterbox/MemoryBlock.cs @@ -5,7 +5,7 @@ using System.Text; using System.Runtime.InteropServices; using System.IO; -namespace BizHawk.Emulation.Cores +namespace BizHawk.Emulation.Cores.Waterbox { public static class Z { diff --git a/BizHawk.Emulation.Cores/Waterbox/Swappable.cs b/BizHawk.Emulation.Cores/Waterbox/Swappable.cs new file mode 100644 index 0000000000..d6046dbb31 --- /dev/null +++ b/BizHawk.Emulation.Cores/Waterbox/Swappable.cs @@ -0,0 +1,104 @@ +using BizHawk.Common; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; + +namespace BizHawk.Emulation.Cores.Waterbox +{ + /// + /// represents an object that can be swapped in and out of memory to compete with other objects in the same memory + /// not suited for general purpose stuff + /// + public abstract class Swappable : IMonitor + { + /// + /// start address, or 0 if we don't need to be swapped + /// + private ulong _lockkey = 0; + + /// + /// everything to swap in for context switches + /// + private List _memoryBlocks = new List(); + + protected void AddMemoryBlock(MemoryBlock block) + { + _memoryBlocks.Add(block); + } + + protected void PurgeMemoryBlocks() + { + _memoryBlocks = null; + } + + protected void Initialize(ulong lockkey) + { + _lockkey = lockkey; + } + + /// + /// true if the IMonitor should be used for native calls + /// + public bool ShouldMonitor { get { return _lockkey != 0; } } + + // any Swappable is assumed to conflict with any other Swappable at the same base address, + // but not any other starting address. so don't put them too close together! + + private class LockInfo + { + public object Sync; + public Swappable Loaded; + } + + private static readonly ConcurrentDictionary LockInfos = new ConcurrentDictionary(); + + static Swappable() + { + LockInfos.GetOrAdd(0, new LockInfo()); // any errant attempt to lock when ShouldMonitor == false will result in NRE + } + + /// + /// acquire lock and swap this into memory + /// + public void Enter() + { + var li = LockInfos.GetOrAdd(_lockkey, new LockInfo { Sync = new object() }); + Monitor.Enter(li.Sync); + if (li.Loaded != this) + { + if (li.Loaded != null) + li.Loaded.DeactivateInternal(); + li.Loaded = null; + ActivateInternal(); + li.Loaded = this; + } + } + + /// + /// release lock + /// + public void Exit() + { + var li = LockInfos.GetOrAdd(_lockkey, new LockInfo { Sync = new object() }); + Monitor.Exit(li.Sync); + } + + private void DeactivateInternal() + { + Console.WriteLine("Swappable DeactivateInternal {0}", GetHashCode()); + foreach (var m in _memoryBlocks) + m.Deactivate(); + } + + private void ActivateInternal() + { + Console.WriteLine("Swappable ActivateInternal {0}", GetHashCode()); + foreach (var m in _memoryBlocks) + m.Activate(); + } + + } +} diff --git a/BizHawk.Emulation.Cores/Waterbox/WaterboxUtils.cs b/BizHawk.Emulation.Cores/Waterbox/WaterboxUtils.cs new file mode 100644 index 0000000000..74540e47ef --- /dev/null +++ b/BizHawk.Emulation.Cores/Waterbox/WaterboxUtils.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; + +namespace BizHawk.Emulation.Cores.Waterbox +{ + public static class WaterboxUtils + { + /// + /// copy `len` bytes from `src` to `dest` + /// + /// + /// + /// + public static void CopySome(Stream src, Stream dst, long len) + { + var buff = new byte[4096]; + while (len > 0) + { + int r = src.Read(buff, 0, (int)Math.Min(len, 4096)); + dst.Write(buff, 0, r); + len -= r; + } + } + + public static byte[] Hash(byte[] data) + { + using (var h = SHA1.Create()) + { + return h.ComputeHash(data); + } + } + + public static byte[] Hash(Stream s) + { + using (var h = SHA1.Create()) + { + return h.ComputeHash(s); + } + } + + } +} diff --git a/References/PeNet.dll b/References/PeNet.dll new file mode 100644 index 0000000000000000000000000000000000000000..f2c887f476b22c8d9d2cc56f18ecc145fe246fe1 GIT binary patch literal 120832 zcmdqKcYIXE9{)Xic5`<3q>#;SHX(s*3JIItB#;D>kkAReBPA381ym4NoK+CxB3Mwl zqHygB7VN#CV!d{(*WL^2_1dlt`{kl`g@+|_5ATfnKSS2e5ao2XU^G) zbG9%iW6Xtrzx~G8-MG@j6_zhKF1E4KGpd183xahJ-^XR2cHL@Dx&||J79@iSSp0a3>3!#`aP{ zbp0#USQcd8f8k&~y1E^ROBwSdxqHB4lDO{ZCC45OKKVJBFUqS-x1|Oz3+s5CFM_~K zo6PV_&`tUq%Gl64zGQg}ij-D{G>foa`<>qKByYmHkjfQ*ls1iJup4iLeW-(_`V=aE z$ylw0OBge>cnD?!p}3s2j)>+A<3{Nb#{7LXHWMMi#g|sq87qa)SQ!i>8qs6ruw=Sp z6(mHZF*tm#3Rl8blcl+1Rj`P#^;mCMYoCjhXq^Th->Y?_T=O__6JePiem*3yrahk;esfb1O0@?N?7?&mIGuj z$qMRBpa!`#R~Yv-nm`U*T1FV6XaXha(sEo0q{^j*5u6?wr*#^j%35btAQB!zK|_?O zL_?(rE!EN*CPi)~8ZJdhlBG35iqNfCqIN0jrbHv92pyuOHA;%Im1wjSd6ft~fJmxO ziN;D1O2Z0koD}6L5pIL<=vSf%QWQ|4i6k=H|D9C0_|vp7TC|>^@`4>TP)|@!U`Mmo z6I5uhSCE~G2KI8YQ^~bbVc3hwPC11g z{gs}eEW%zycFG&<-N{awg1wOJlpAD0^kJxW=q=HQby9r@|NE z_$1`H#;#_vW*kwC=X*Trz#lfy9nIE)@CVQ8IH--7!c@yE=-(x)l=kHhPd zru$WzP%)Czi*6>VEPDLqWZz2x z1R|oIq=r%Wm&16{4#UOJ%9GMj{D)zvOvuV+R!(@h3l%bcNBVpP|9W`whbRc-D}zl* zNmKW~9)@}6%#^_!rA$_tH`1rC;19#@+O!@q%M9IZA=-!Rfss(rJE1jOqN!4Z#@`*Ae-*qUI7^_2h4&hR5qkhTB4#ySs z9&@YSkXP2asshoz;oX{L@3pSZLGcw-t*eD)zdpi=s&NqVTDhKFXy}hx?Lp*O1k`yB zV$@^LBAgCA_8czp7bxDp7-yff|gfXMhorMxGkI|h)5-@4eoh1@5&Cs2pTuB&LK&6r} zZP1;i>k+mTV1@tzO;V)*eLe{^TY$<*0*o?J14BFsP_d){qd5t3Z2`tM5|r8kG%^wl zwFRhSBtSxB7$_8-3JT-3S%Sg>0Rk}v!U92=B@h+}$}NGgK!7=d=|xx|=w%6n1p>@2 zObuay08_2b?2^`jW|1GS2Isa*%-_fQ487e?vCIgIUh7<)3Rg2o`A|%y_VA^2@a|nWo?LmPTb*v2k0w`U)kqSO? z9=i1-zzK=~_QT0eA;W$c*(pejAu^n$5NY8DeN$`upNxv0sUgkHE)5wf%=ojco~W@jGANQY1+EE zxQ16CtQXL>9N~F{2a_=$MlgO9T(VyXP`{MU$?x*SV^Hyi<1qbLhnf~$_hl5&vOMb3 z3uwI=UAGY7`7(TZco{S^_w@3)YTQ1TxdijpV6};H(0C_L+aJVCPBY0JL6Sh2Z45Zw z+}hAsKX%BulogV9XB#gy*J`L~M^S&KjI1qx0jKGC0Uk2BGPi_6SC3d^Xe z*3uO~qJ`A7PP&-+iDqgdE5b!uo8cOH$nLBXAb}8FGDQoO6}fY1g$bm{r3Dj609{ZyEmhQ6 z%ZjS((!{`!K=F|t?iE%%G(L?)8Z*Uwg`z2F?3>5-=Tp&|iO|DtBmz^CmADC}D5>Dh zY*S**Y|oVK)Rn+Jqr0(O#6$g@&nk;x_-F*R$E}6^D5-ZMkelms^i5uxIx&WxL3pI} zO|kq5k$D%8OQWWr)=81nW}C_)0nvadENIM>Qj~%r%Z`F{)}W!HI1G&J1tK97Kh1kj zwBm`Qh>XNBlzwx^%b8e3pmowEz7UB|pfD_f7Csdcb3W!1y{T!>=-eTKIE~6Jd#5vEQZc7!8_Q%X|gM=hKH*EDM3t>gy zql=QWg#B7%PFE+)bRb5YXcEFR`e0G2W-8P5!B9RK%GB^1v`#AV81;TOpyDe)MHE1# z8}lTCHyJXMAv+nmB|~m97|D>63}_`PQq*q+7?>5H?JLMnhF~(FH3&7T1GMF-Ae;=< z$$-jhjvG#fITm%KSa+a#VFb*tk~KE`Ba|wQ1c~LmUg@HDPtpCasY~MD>GCeR|1)(- zEOmR?X~6J;aEp+J@R?AHe*`1^vFU-_^hlLi0nS`X^8nOzbM7Q8^R@6vP&KC+RAHRq z?_owT-f0Z&gyGI%9Yij)G7cD~J+47u?CF-Ng{cm^V@IM9iP@7m7s_HeMXXz?oI4dD z9NbNx7GER0VXBq6$F0ZKf+93Np%Ty^`lJlpP6u`(M5Dy`ijQm9$X@-w`}G+njD>^SPWcbn1qo=@~TDF;JLKesQX4`ZLmt$_v>ggMjZXF zQJIw>xhIUiB^pDG!FDw6Bb;dOgznzud|4 z%33#?E`=APklezjyD>{fCWLwnJ+~1YH2OF3h(PAIlJyv7=66nLe;gwsR?Z0wQbwgS zfjdM~^*Dw?BOwwi#@@($%^9R2%fMO!B}i)t6ruGD2pb(NK=rtj+-firplj?~RAqC^ zOduYF>6>-TXix&SyVgnJgmb9YOYx7eCyBG9`1@3Gb`Xz#T6~y0im<+bYllBW>)eDy zx{G|SIUV8OaJ&4NDZ2tbOqXAb*MoOhk8W1#XD(gV@L8i z^m$f>ix7$5YqF}N%)@eI88p8&V-jNyIt;e=PYBtTklWm;Vc{Z*ZZ9N(B{!lX=&y|kn3CHuvaiHyZ zfpol3I9^1K(`?6!rQFU99 z2-liytc$LN2TwsqR`dZqb{*{Iow=R@%SfP2yJ*Av2Exu8g-NpbYD%8Chv*ha6a9kF zyjkenB21FSix82S%UdCgAPoP@KGB7vY)G_u0`(c8FiIfWLq~JGLln@RFg<9n@e>j0 z4iT)W-~6^7Sx5cVU8LtqoPaP8I=Wc#C~-Z-Vy-m~N59ow#6vowKJ9`Zls+ldI*X!? z67)&}Jf)1W^(&*^GF<6zJ!;%~QuCA|Cnqd}3$FBc0y;nnP?USi_t3SAUerFVlhPvk zJU^Q4-H6iXmc5Gy1utr>7Z$3bQMZ&($q%@k0>ceZ0T@9)k|@G3e3>W@Gga}6;Mbq! z%ZgnLOU-gvw!`9C;At$<1GqaTdl$SIpNpOnA96ZcYZ*}5+~mIWL9 zXU7a!lxJTiZgghLQOJMFJ$FEWe;NkE_=C0L=JZ2*_+o{~%#T0)rpj zBC+>99@ipdTAX))j|ZWG2lQI!L$JtF%fi6DT?7~7)D_xwhW$u&0Xg#h|(j|X8~Bt)rjYD6nre7!uu!0krQc1dJZ<+155}+ zbHV%o*9@8&$n@!K7Sh*4q>r>}(IlUTCu%>TEM$v|MVom2T*~KmiNQ zl^%W0vJTWQ3N-#Xio$Ha)MLErj##@F&cuu4#g%vo7pp$ZM%+C`+$3G8b&`%KBF!uV zPZYt3+-KrQ0%f;0GY`erAc`*=GAfT{@t0vzfxLoiU+kp9`YNon40?^O^vFS2;16^4 zF^IQB#QQp2YtU}rAT4YQ5o_T$Ns93H=QqLwmL{4OdkeAzsqHZ`HFx-JvN7q=T-Q{y zoMvW}VqGJq%nsqMGC{8z@Ynq>5RE76&AW5PWBkmT!u6|Ydp@_NANAWZ{!{sh<%I;rib;21YsDM z7y2?{2UC!r!4PAhFC+XP5};ZbG)dG&hXD_T5Y+D8la;)G%J*Rrq*J1dObWsfr+(aG z)sy9kAs|DXnaTExp|X^Q%B_B{H_yv|rRCG-P%s}!rHqbmc+DqN<~pR94W4c8!O}h$ zhBsDD_k^-k$(`sGL<%c;rm|vAV@i?dFQ8{19I7)94rTIUXk?*56x28CZo1CCDE1{Z zYr?_oXpzV5HIEi$d3aA~iqgpP7Ib8Lg>J*1XakN|(e$BQj$s&}Os!-e$vu9TagMRaUKf1^?C@M;%0~>^D>IJl9E)Y2c5C`bW>1XW-La_X4HfFSRml=%zdM8DAkWa_yWAF{Ro>U8LCDukA#-vZ$@$xhHx#{OcqC zMdz&Bf(q-5eT{Hx^Y~GS!+AzK+IV;`B+*Ri{0+c}wyfKFU}e+URLv6F~=nUyE{vCvsh5TJ8#4zVDD!cQaZF>>#>9pjdGp%Q+%f)L-Opp?I>po}}* zwx4nyRZzjFD(Jw*D9#zXDevnHz;W2k1FWL-&W9{f2W{{cQfpGnt8Q?7CutJ0Dg#q zR=z<&8^2h=K)zGKApVSk!Tdu7L-@}MhVp_;I|ajdy@KI+!SVbG1quG3f_3~|1t;)dZ75xjk%pJ$S@D)`AReL^ zYb?fRD?W)huJ~l)&5E&9VEh`zSWhtiuwpC_7=K$a%?9{B#itYJ`|b2>B5qXtH{z*^ z&mdl_7}HqBuTzYPFXOuuW5UV!eK8JX=V(hgs zzCrPM#8)UjpZIyj7Z87^_(Ebwz8&91#6HCr6NeOUBd%4vow!Z$CB&l@UrIbf@nyt| z6kkq!g5n*-=PSN~_)f)F62GeWDq=^_PXE=!m5Q$+9=H}wCO%&=wrv=HLh-%CKPkSCxVX^ve?M^_#SajVQ2Y<#S&APdjw^nM zc(dY%iLX)o2=T*;A0>WU@ngjM6hBVv?{24WH*p`uPY_R3{3P*_ik~7rMe)BdC z@dJwACw^P;2gLgn|BKky!%p9a#8JinCLXEyBjN>$v2aIySB%v=;}4WV~BXJ3U_z*DA(R82yW4Ed3Z?q8Lj!^v{a1fW!S$jAa?)_bA574C8}h zEXo-FS}_)8jAxeE>G^@UQt^+(gB1TnJVWt+iB~AzM|_In{}ErV_-EpK6#qi}vf^Kf zzgE1TI5T9Y?>FK~#dN5Z4^fO0gXoVHYsAMWb`qbZ*hPGu;tb+P73;+BDs~h9tk^@G zUuvh%OI)wmAfBukdsrwh#aYCsD$XXpLNT60qQ6kwjreWFxx_yx_7Qh0v(uADT&>to zJVJ4R_z=bU#5jIy_3uIA^A#5m->I11h~qCS#^XoEzf_DTl#F}J?eL0;D-~lGoAF_a zdlD~FTta-h;t=swic5)~P>iFFs6UF!iHj@j_$!D9DWcRK`%S}YT_Y^Bg984juM}w7*9tTKUXn5x#kZj#=}y^-&2gkz35LA*Au%d?f4sr zyDM%ajwe3qvE@Wrz+k>e5B&LiBDC05AhX>?w(8A|_5vR2Yo(%)*V^{( zyxF!F@yWKmm@lyHJ@^{i-jknY+e`RWwjG=9w<$3A0}3+vs|vFCX9}|UuL^Q_X1$fd zP&ZznAeUDt@bOv&d3=ZhKcA=|z-KAQ=Svg>Io`gI_ajumH!CRQ7c1z_?^IC4pI1=K ze^Aha`x@-fdh+oKO85c=A%3cYQhtkqGX9K$a{hsW3jUjdUc7gs9Zw~nte}dYqM$dw zPeGV}q@bF6``H0Rc&&mcAFrT>uT@aXFH}&+pHk3=?^Dp1xAnJ!uIG58!YbYdewKnp zez}5v`~e01`I`!w_)iL&dG{tev=-i9!2mv0K`URXpp9RsU?6`=!65#&g2DVd1w(jQ zvmMV+K3TyqzDB`teuaV&{CNfK{1XKu`91}scxHtw2QZlzD44?gD45D8DwxKPRB#aApkO*bU%?Fipn{qF69uz) z_f|X74n9J`Y<{GIIefE%xqPRBdHih!2XjZ89ol?et6%}2s$d~MLBS#X1_g)m#}zE% z?_+$ku`7sJ&{Bi}W z_`?d0;vXpBJbSPmTAWuaIGPW!p;T0{@#F-pAi!mSJ_M)>2%@Ag4aqJox zS#j(Y;KL}`AuwVZ3><>-)ZkneGLPff;`naJi!ZYHGu(L@zdI%&Kd|D(iJ-UK)_c6> zIf-oMFE!6E)48p|h`Z8?+Ypgz;y?zSJ1Ta2wr1;j&aS~*hY%ayvp-Jq$N9h>#{c*E zph*8;&Ik5h{=d%$Mf!guA2SO#4@X_bO99&|3!K}6VQdr`XmHL=TQz6FvW`t#!>E_^ z0tnUXFzP@R>VWA9pCO8N)7_eLrF&V&D_ggTLx9U%D;qx7WjL#gQbMmRbZx8bo`G1f z{bbM)D~hB820jj?Iq_YfFlxIvZ=vEcgE(MZA~Z^0olM`K`N_x_@9LP2R0^NFOVXyY zvM2}1EzZf|g+(O*(gAs>!Sp?60hrk@$MA4H!fE;IAeBl1XIH76B;UPLx31-+PT zR1kU(vQb&+Jw+7a3@YvV_D0gQQpSd|WwUdcbKS?**AG5|Wxu|V4pC+zFO}=bC2Zj6 zeK->aN-mfc6y4o8I`ozUo!IF(F}G6d-v~iLN3y7?G({)Vrp@q?RgfLcv)*68F=2#M zFuUP;Z|!7Fr_ZxQ&2XFhTX-rwCAoC0>|d0GnbIzTj%M;T812lXMVfo%Y|qLLyeGJF zg)^Kb>x7fh?mU%)bKNJYxj#hZo?QNalY3`48<}50^^?wkmf-59df*g?x8u3E1IC_g z^<@$BH8*<0&`crp)G_Q8z8jX@#P?Zlz$clF4qcp>tH4@|+l3WeZ6K-3RUMwn3wGgbtbP#{)} zi}|rLnk_`cyA?6)ksC2=j2pH2y3-rOmbl^7V%P~cV%YvRs_em6w%fF|cCVQ8QF)Dq9>y7;_%5D-qAJ&@Og3%BNBlNz&Gyvd zf2X%5h-12_60*EByaQFRY8%4g(5_~c_(M~+HoUpc;R)p0y zhP0LnzCXtdvor&8R77ZhjZVJ}H5FEJZ7U~j(>HxUqYbqjPQ$Qk)rLk6>sJrKiav(5 zpfA8iGTojQjKFw?C#>ReUrboVlgd+sRXk+9Pgvo>P)Fio-|Zx|)9`t}D5B7|9Rg{l#@YPl)SG zezv$y;+Ko-DE?1z9n8NL*Cw7hocz`CVsWkF72;aLM~G{XFA&!p9v4@g-$GY9a86x< zIk(i8VNYY^XHY{7Lf{v9X(p|2D6akx&A z_L;cO!@ooE?+E-`iGN4qU-Vf14AK$dZwm7hVSXdbpM~iiL9PYDY!v1YVa^if5@DVo z%(I1gg)r|C=8M97QB8#{G*)H zwH*J@@I}sBaUG6-lvDKQY!3cKvGaiNjp$6?Ca#nCLE<`!$HjFpPl#(1KV4kw_?3MYq;7FV6mqO1AcxiN?d{j7XX=!G>%ulZ4u-sqQ(9)+sGp#F)((JLrK3(-a5*jQ-&KU z{&C`^Q@piH$rNwsMkXbToU|~|@g@kpn<~|c%vX8wUQmiqsv<|{Sve9GbF3eU`p`h- zjJzAPd?~|wk1EWP4tF8m9Xu2h*H{!9=9^+>x@Q;8Ykmo@%G5v}ZlL5KEE;1mm0*n& zCc0^i;(R0J4niaGAIy67PBJy#rO>o+J%R{lqaol;_QPqWT#JBXbudgX=Jtko0f>sV zYd+0SBH>#eNy#tlSm~ryVi)Be^7~1t%J{01R89#4%2ND@)_FdPkX~w{Yed5*E0T*U zJOwc&$Vn=s+=)=Gygw7u&I@GP=-MT1_!^U$ zIC3*J$;XA#2VJ}RD3w0Q&D10x7fBy7 zFcJ(n-`XDz`Gh%(;ryuI5(-q%|@}oV%fLxZ?>k`8-_Z2ts zJFFUvkLPu%w`Q$Oxp^gNs~4o{s#nOcwC5++CK9Ksx}mJJ6(h^47%2&%+m5-4o?6c# zl~ryNf9KCKmeRwN$ly{UDX~IJt=BTtVX%}88AH~b~7 zldiSFl=72VUm58lT^Yunp&oh5^i)&O)!9i~EqYg9&J|{dn?5d?sV;Gq;>I2zE;y%) z3q^6jxX>=?mUf9NeBij?oGz}?KZ&bX+PL~2I4(G+i>ue4#D(4?O}<(V92cC^#TEXO zxX|yUiEHSAl9S4pJ>SB_$P5;TuPI#g$Irc>SB`X_OonxgefMjPkEjdEm*Wb_e3vqiyzc?pZ71JmwPMvi@ zECWeZ&q=Qiaa#4<^y(0&RnJSW4slxbKzenE)2av4t3#Yt-7c`yl7Tp_y7etueETYC zF%(jZDOwZi;(OqzNUUfx*6#GcGFjPLk8Q`UaI)N*NN=w!Op%w$9Br>msfnR-OHO;j zE_Mh-h`$uSw44i`EhjfVS8msioC@RCxox|Bn8xJIhcD3F7~Y~hZHTE-ln^!$bQ;;itMMor^vo_PgBB2 z_MJs(>HxCuEKVb*`BRTHa+>S(Oe073oh51H$h|Y;`{$hB_&Ggl(0=tA6@J< z=1&%goA{I@m9(SH)%F_F=_=}o??cFmOKF3^>B8zbBVK|h!imdharrGjF)6Sv<5Hz& zevA^^ct#a~e9(vF)F<^t+g*q{t7EUhjx-~2IYk!A-HZ)aEwKX-G@`9qCy8s(R7s*E zEektzd`3p>Q0$1J&$Q&LlH__phk>u5H$RMTLnSpGoXMb*SE?;x)xRxO1t&IARl1YP zI+={rWsJ3x5R6xY|?TS5tYRnHtAok}Wcns+oSVOgGq?&Q&OITb*hbb?R)=sat(*7j^1` z(y3cra2IvznoRYSc7&c;EIYb1-F{ZnO;wg_uP(}1MWyQ$ws~kU4@`yI$&ICp^*|7e95@5S0Y+@YA2I!{Si7s*4XsLZm%&? zB09pVb?M`omu8(4T7JNI=2;=8#IxLzqMvt)Z`1cjKhFn@l|vLhCC0mqe`Y6657~0* z90kr9hylZXruH9sT4IhpTHr_CmeF{01qKB?cXW#H$~93uhbPC=WuOzE2X*0t>(*y6 zqeUV~UA=?!b;cOguNjr(_#mz*8dg>}@$K8Oq#^SPdMC zU#w6;mwxKRBPpElrJvgq-!P-`vn6@_3?C15d^27P9|KDmr$F@Z(Xd7P;`8$46wc7X z_@0z5J~_Dnhd{(orN`GnhEL4JHsC6J>@ljefN5h9GhH4wafbP=Im}V7q%x<6fWiX7 zRhB?lAh_BR2uqV4FAh&cS~Vw909%+NLi~P4m_7n(CJH^DNyyy#1*K#*icCW;lHOGw zG4m#VS;BnIHUKL4=i^r#s2+rIHiW+5stJo(+pIfnuFYBz4xK~P!uV{KUN}dbr<7%8 z-cpRtdT^QLzATKx*#1r9p!MPMyH2?=NK&s!Nu-sa zbO}$6@H!bGUH=avB=x@@AqFrJe#$^8pY*5hvC?LVm_cKp6mg_XyT#MT-#ytvot1N) z=hDR^pZBH4gWg?6^qPz)b*c_$Imjm$Af6Jc$66vsDao@QYj%k$c~v0tlo}PB(?o@^ zthmyap8X&`Iej5(0i3q<;3}uFDSj}{nUmY}@mSCBQ~X$K=k)Q|Yv>d|Nss+Iucumv zZXzKpb8rNK#$4n{3qOcf6MmAK&T8phh}5Vow>*#g16SEOr1hMKn=ZCd(|U%h^gJJf zGNr?c6lL%PrHIZ;4MN|GvBnq2VG(?OR2(!ilj4p)10|XaHNwg5jXe#-r-SJu*jo58 zK*MYJL0-6-{dk5r_bSfLCl6Lm8l_w-&EbhoUYf%bZ$v+`u0J@|L_yFTYBti+Mq_8Q z)yL3Wt;_me6F*p3Q>*i-(6WBwcQ=yr=kqsoXD>n#Z$p_yfwuHAG2*58akhyKMEs$} zm_?P~i`~gLe5Hrp$f$LBGNT?*271H$_%QBEsPNB<20S4Jr6^v|MR50qMs$i(=qJm*KRRv?;w$yDcyAPX_ zTpX(JN)fA$XnwLbiDj>_NqmrA945JenhomaXDGu2f$0?4A-+~GRBkj?%%X{x;sjEH zM5cmy-^_38qaI_f^dUl`vav$CKzP4#JQ_ z_&droiKGM7Kg_%3@3!rQE4`VAhDO#Xes-I#rTb~(YM42|t8;iELy!Lo2c+%!q_lNe zc9`R`tdeG7Y^65>ljZ>1QjfA>CRnuSrPQNr^t-HU^f;vv-MXOB-> zpLeOiI`0ivb7`!FbrdJ{^*xf;>N+20tJtgOJ*jIdoQIWbs%{9PWOni}Weo`Cn#y!H z2Q59qomgijRVV8E@b-Zi($E}6S}FhIu3hyCI4du{(=M)?w9X-5>K*8c-XS&=*93tS z-L8d)fz}O&A%2;61T6dYc9`*zBwJ4|VH|RfuAoMB2b!JyIZK>DG$JeQmw0cd2I)%d zq)WJrs$@!^(@73iM~N0e82bb_I);P%Mv>Vp@OD-?d?qLs^LgGuDAS?T_bLzT@RkA6 zfL{^*8kYU~QScETE7D3X;ciH)q1RxYPDyg=u_K@${lA9@q;)N)+$ zz33Ygcgc92Y&_x}CgP>O9WTs`hh7}-D;QKYdYiWkp^}ey6#~r03Yj~=kPWPz3Vg=;SQ(zc(`>})6PLA!BcE9#TL!QXSZ?46z@LahZ}IkD^=mC zxYmBMCkMaV9Grv=6Zz(_*%8b4ovK;SQQ{~*6AKu8Q!(STjiMdB^S)N|DC z4v#n90MD_5pk}?CxXih-;SKp?1@fNUi;z(T6ZheYw~LZ`0!J{jF%$tI5@D*5ne#%s;yB`&6AZq%#{KRIVqNa2|B1-*AeNYBbUr z=TN~H>=WO>UHqtuEA~1%0h~9FTM>vJ!+bAbF2X`9`3IFJ?#P2wYPci#))YESykG@W zxY2K|xZ)KE!SpxZ^!JeT_b~aZiw}qUdYovd9}*Tf0yFv83y7V6gAx~C_O~U@30)f~hoOD{;{yhuQT! z2G+u>U?z@&AQlbCN|tU#J6>`Zq}j=P|(3c{fA?#;Mp`3aGv z&W%Vm{hp{%i~S6O*wOG{S_{Ol{h_}RN=LylfmiM5R{&SjMeAIHOYB$}iM1pM{VD=& z!Ab-NT}Tu=4n|hg2VL?R+hB(w*kk@)9=7pBxGJ8;=cEr)gMKXLcd0NvB{~sq%gIy( z_&GI-V=ZOkc-RsN7+UBTk*H`t?RetwIv99Q2fv&NOZ)^FiS;n>t1wg`1;)FyEo=Fb zem20R_CfO=n4)^_l%p z6t@@ZRCf6Na?Br3gzX(YG7R_IMK>CM52ASKpSbbhmG;dfZ#7u=iJ~t+sQ9H>c~fMv zgOqGBEK^&fj7N&%C*g7&^}!mAHEe=iZ$kSUF{n|66;&5M4IDJ9jS=++#qSVemLTq$ z_%%Ytz3ZG2j*Tol5fAf*(Z=B+VcdWFn0pL^W|6GaB$aTKfDX^2s+~Wyl zVbQeg_wv%;Fr8ZPBF0r8x}yWW{Dj5Re-NHiv}tqWg!2A5#fa+{bhXmsN{|?xj*xER z)qfUvUHlZ}as3F&Xp{2{H0fe7&svFWucB;!O~IRGi(AMhqHLWp{DKEw2o}A~B2+e! zGPBzqXF6(~G%lE;y7(~^5RE>Opp$++xWp;ujx_cSKWN-=2Sa7RUl#tY?pN2huCZ@p z{Q#0=u;no4p?X%VW9&&>OJ~D=(9wM9%ERNN@#$N5zY#aQV#YzN1@GNq#A6ksXN<)> zf{g*w%ghzSm&XnzW&B|^=9o2PN61?O_@ASZe%y~@Ux-6(J>*}E)fl;0D|Eb4PUA1R(?58pZ`06k)rvP4p@zS0eaMY=3NESIKSE~{dXssN zF#lC~^9VmX7Kzp|5v}j9voD4DoG>rzO_JrpJVls8g#5?K_YlG>!n{pL3=!I#Do0dj zk4+wd=ScTdQY<%XTZ0CB%UL_hV2g*5*}Z|xK6Rw?j{#4i^nM&hv7Z7>osH5+KBzaD zte(u%oMhHDky+iH%wE07TvkTr!;zOTTs7&)jvrS>)dzL_u!_s!HGn7GoFYHU^dm?w6GRU>RNZaH} zie+IvnY(9_*%={oPN;U2&WceE1{*wv?AI4i2&^xKc?s+}?A{1TrVkY<(I_QfyGXxz z=&U{l8wFEmdm+(Tk1>?5H%0D@T9Q08lgy`(Q=J_zO1=uYyN`{)1MoEt^S&&aMy@-d zLv_fF$f>T;f4OYm^!<~^3OoJwQD730hTe4p9>O+FCd#L8Xu$31i58K+bNUnY!2T&w z*$AQ#o>Z@gzoEm3>hOG=+)fdibz+v8%Ptn7)T7Oi=0Ez8W`DMfc|ccY@1J}+XoYAB zQ%d$vUW@0dF+tA@8Yt;8LBl0gk0H&`k}473TFfm>f3FI+DUv>zL2mOv6yIk$#kWAX z<+6{5P+E>;M~S=-6nS64R*O9RT1IXbwU@pe(b*bygK#^~`Eq0|=w?w$Hw|*O7O}Mq z%UtAr7^sAGGOV3JwF8~4u_rVJtS!JU}tM9=n+Ag2xTznF+t8cZb8q2MzMA5NkRFbaiFIK9glQQ zVkfX?1&u;{)7XjZIYB?RI$LLgUJz6-=p^=%pi7`Rhn>t`5fp&ie9&ux{)I3PMZfq4 zTaQ$qtvOrAveOv4T+kEHJdAB-?+ZE=sa^*9mnhG@HMiG{#cxf2Bx*?CDA5-7xp1o= zJ!a%s_ILKBxJNJbBRZRXBk0t2lYS8N@CcKB78D<9Qi)>&Vt=<+k5S~W3ahtV7Ma>( z)cbg5-dj-LY@+j6ji95u5uMNa3wk@pq=AC6{Y00rX@ag7nwPM}g1*T!-Bt^lBs4E& z*9m%5xLwM23W^GUm$G{VHA~G81brpqyOiw{RBTX~mol$Lss6k4mm_GP&vYvi#Dv@B ztVGZoBEBowJV8f@7_MZ?1syEhu3_s01%2{IMlO-L6W#(FTp`>M)tE^=YNqSkt@HEJY(ml&b zDSMs>Jv7an#l7Iph`VcsgtO~TA5Ci&1JG7l5>D|?XrNa1>oken*a zFNIFCkna^b+aW2FaW!|R7~ksgnoOsI{jcp!#Jgbd9+-Uwf7nfDpG|Jd&~v-hzVFak zX8BG{XU|NAso(0qIdkUvfg-#iJyM!d4jzO60y%{XGj8)Zsit^ksoLs9XxgfcH zq6g*&6SH!w*do+P2m7SveT*4{GRVAFBl8N_%UJgwxw#J3yO``JPv3;QJiRB~!6hBt z5rSE-?y06avqscs)4Y5f-P1XfN}yv(OwEskrfHs2*$b|wU)2_Ri8j)Ul}~L$sx}l- zy&5&89&d+@EbgUSp-mR8=48~^dN$Bmomr_ZS4O7Yg3e&;fn?m-b1GYd;I%a7oJK7Oi zOxPk8?;~@T(CjWG6+)6FQhsj*xqeYX=J}Jzbc-|(5@Fto*sU_jiR^%D zwJ^s7ci8f8tFM7P7$Gx%_BFQr=jt0F`Bs?K5whn9Gbqe|_aVtdQ&LX$t^LT%pH1ck z2a$QXa19A_OpqkOS!B)Zc+38KzZMk800Da;KBb zpR3877$I|&>v>xzSpEtmp$M6?gjo%$CiCAxGB2nhGcuLTYlo8=@{xHRbkH&I!_gTDq?vJ{q5DB zFQIwAm&}KS{XJoRm_?E^3^HHICbM1G&k(NP2uUD^!W`)&d9F@ojW8QrWS^8n=1MP_KMF~O2#1LaWd%e&< zM@WVXO+AZr)|!$$vd5wmMCi9JY zGC!X|=HWGDP7~(f4zgDY`2?Z=JkC5I4fvMm%=Iq|U#IsY`}rX|ajDc?sDQ=6W(A`Ma0Qdvr1{5az&cWZ#ud=AcY6*Z9bM#!cp^EHW1fO{YQj zpM~oz5!(NR&XXd9NG`d?h3OGGn}q$p!ga2&zbecf!hBE2hY9;v!n{wIxx%a$@y-rk=jp08h%0AD5nj$BM)WeA|-El$y_Du@l3McBJAhpkp1NhGS>@x zUn5uerJAreBOmg$I+^<%WEN!S`^wmadT(YKd$oHV%tv}OU@UvRr~&qW7FT8J?C+rq zojQBLaUI6Nn=5Ig``ba^!<<}jGhDwPqhZYYct%!+&R&J-V0jwNF4j3obBT-Wzi7|E z{<-s=Ov(lI4+EV=h&^AJJz!FQ67mJvUe*hy-_Z-HGRIJwKj^F}SO>|GVr-@PE$M&e z4YE5N?|aGK0AC9n%|4y^Dood5kR0l4hB?+X$~UDH6MD9>&@p^3Qn<>dDL#$8WRmC0 zu`_*6_Ku(p?8C8pGo0**a(H7KSh(&khl^b+Xg9k%ns8*W9$3AYVb1quu&E|_?rV?x zylkkg)6~i9@jgfTYtVcm}B{dI!3babl2DT69 zD7>s+C54GK_`v7kcB~}#kXJxYO4>5;El?KLx1@Q}koQ0fC9N9x5$H-u#}4`rXt$)? z*1e#YCDpe52>L?Oqpd%K3TYz}VU8Q($n&y!lAau_gD#UaXiyetucW(&_(1*WAQ$}Y z8B_q;BI)$OJwY!E+UU8or2_P^q*c+Gh;N^yi9VvNY6@ke=Y#>(&!sV$!hFz9=@x=pfZZqETHqF7k4d*{ z`i{ds^0U(I{=WI3SEbvGUgPi}VP4z*o|3NmD-PC+XG?XMqdZ zZ_;h#)O?Vq*393}$X|DsD`Lo`LUo^35{o^c-B{w>_LvgR4v^P=oY@nqvXc5~qq88z$`L6r9$d9`e8 zJ*Dhp$LLDzLa_CM$nE;PKCD-Ra_h^E5k$GYHLou_L(pUFg=z=B%y_?`^E~UP?#gRm zj|tkqMpx$J1aE1h3Z);b5oC@s{n))W<>JZ4^Co$I8~;FF6MJ3KYh~kD6U(P#JSf3` z4<#y<^qiomr0s&5B;6@!n56#+njq;kL9-B2Dd<^Am!K9ju{R}AEofpNOQKrP#J-a>p(Bp59oZN8qtUR5WlQ>C)<#f~ zBpUIWSZ_)B7~`5)KS^JXyBai15{;rwY?34z8=Kf%Ni>Q!u_GkWXxPM#kwl|m6FX57 zjekuHKT;%8M&n--+a`&|zb1B_BpNrH*jdE$>|IGTS~RgQ zByG(|VAfKI!k|07*Fn@SsaUwJlJrmwxm_md?eO=mCU(7~ZT-mYc0n6FH}%7lI(DDw z#%`^DBCnafBI(EJ&*rtT9?cZrdF-OHCo)>t6iL^D2C#*aegw6$`z3t}YGZ{hBAx7s ziiBez!>?_-CP2POw9<0(bp9KU_TGsm(vJj43o9WE^IvjKO@Gxcvish%rY{iI`1gfLlEV?m;Wf%*LJ(x$Jvd7C@oPxXD`@p7y8z)#t{^X zc^}rW34%7TyV0MmWw#01=-J=D#lM!}{ zc5*YrJdQO8qI7Qd9nU7)ZiD^DvmvWUY8#VL%C$WB`$lnI`Zuxck$?U(9o-RMke+qkLG`XF}4sKcQ z-^k{TA=+B#9)7g{H1^CAqK%#ls@sjz*xQm07WAd0$HL_Hn@LF7vGA9B82LMoJy-BV z#_6nG(yjFg|0cFx(pwl|&tRw7ZYTNi6j#!=j7|Qt*u2BdP_|{9<=?`tm2{`J$-kBL zI>L0jQ#;H5ceYAW2>#AyU)Xe({~Xq|lr*=pwHfF7&t($?od>$ue?D7i(+>ZI>>R1t z%Xz(j8@pY)^>W_szl=R=(+>X*d_Lcdy_fSI|5Xf+oJ9?bYL)vw78Z0Ko+*Cpzn{&M z^o8py|AXuyNu|*r{g1HwmzyaojcS3%*pre%aNEu9U17R~;PxbYQc`g=C-5{5ikWUB zYDxmnvSV%P9r!2v!lu4~=h%Lm`Ujq8xiQOMYv2V|Zqty!i>#kb?SYrr(USVsObNWo zP7`!CyE!@|@EZG2QhT4dfj96mIWx?W(L)1ov4N82)IRTjhb@*g1#WxTE=jTKrGfX^ zYm#=ApXL96?UgjMqJQ9D?Dn`BX3>aMfe+dJk`@=V2L8=%J=%0TtZ)CoM{MyiCM_GY zI`A>OThhMKs{@~~tktI5g)$rF6lp$wgi4)O_G+? zwHrUO@sf_K+Y`X^0|SZ*iu0oJo%HifsQtbRZe!`sqvG7%-H|Ss*e@%i5&gc zj=g(JyYW9e_GrtN!2ejIsp&bSd~V*)Y^{kft$l|rKG$4R|Yi4tCDUT z-EL@(&n4YAdJEh%(PeM+^r~++oQ^_CE%jRhPDdX}%-wFd9L@?H4 z9&TBVVoBFlv>VxudP%ocYzbuBrJD$}8##9Ao)Op*$gxXzW`4WT%`V*|^S1=LImXCP z{tdTW$9zfq;Fjw+Mv$3zUrOG6cHUQ@J^1asuSI+C+j;-Fyxj=cdDoH7fa3xg!=jRQ zBj0h8q!lGw0{M3ScKh0mpq;KAuY6%zLpTB8YmF41ckm_uDbvme_f} zFT5pCV&|Rid&tf^-S?1v-`}mDn^$Vz_b=-gfRgWfS;~Dcv&&@_!YsGT*)%+TneUa2~^nSGJi(9(aSEE^)t2vdO6z69C&#HTN0`-) zS(09>+Zl*B&XDv~-7e6hlKwWP-H1AVlyupcErF;bdV(2BZ}dGij)jt%(D&3h&X@G8 zHaD-<@vNk`v;`pNdedL#jGcixM~kGw8M{C+Nj*w;2KqRzl+?F$7wBzC`{CBtk-LH6 zZ==VDy!UmCmeewRXQ1A3yrl8dcY$_F`f13{K!f8`Nd-f9fkG#mq5Q+SGtlUmF6mk4 zF3{g3U4{7iIUcn%k(PdrUnS{?ufL=JNoFV^#Mj?JFCkFM-bPQ`|rR#SL}fa3cQ9Fo>Im}TZ z+%|gF2IuCDa5PIgCAa`ILDGlKbMx9A*0}jq^8%1HralO_k@kr9B-}>YBi?R=Im#aK zUPPFq>=yn=%iO%tb_;)@WdX=);a|bu7`ui43V&l9hsv~M70k^W>sTwPxL^TjtCi|W zbMwYIu9bA=qy?adBn?7*;~lR{8in}AJHD2bf!=0oxbo7_> z7VWqzilm<17l6Ky^i9*;yn`IhQ%!%rH7x-3ko12s z_a@*`S63hKy>~K`1t^M%;OhbiRFHiKrARU}Nd~f!Oacfx49P%7CYd-h0pbe9x?+nh zZMC9erB$o7TD97`SFN?hR;#VrYQ>7y*1fe>>(cLc&b|L_W}@x;z0dc2@Z>k=o^#i8 z&pmhfZ}0i;u8hj@=WCfPc>tlKFVLa4;rZI-0u%Zep08cv_F(+e_R`_8mk!$oX+~dZ z+aS&8D{UJj&%VmGLGtXY?0%;i{Y1OpX+}TM?suBeSKIwgGx}PuN*`lI_`-EDKefYOWjiZRwr9K_ghLfEdq#gCyt6W9&v+@M zTWimF+mUXq%or^_iF9#!z6rg8ba8o=37r=SRjiY@o6yyfot5k4J`QPpc6#*LX^+1t z<5rJI*yC@(xEMm#_`7-O>JjVh@%Ql37((vV(*}>OH`u->J0?`oZTp@bV|G?{+xol< z^-S9O{59&Cw8zT)g{w!LVvm)Ug)xMzvGO4M1cEVy-g31s3 zzjMp3L7o@O$tH9UWM7swCiFC9UzR7D&_S5Bzaslg=<}Ghzaq~wp##w8PI-k1y$gNr zw7s{lF;sDh?Y*lScUE2^Z!Rrw1OdTGYa%CE{7O=#(i)g!(p-#4L^GhzrG z^krS^xxv*VcFAK*r~xB~0}k?xza!Gv}r-8bcS6S^1aE|qth(341aseH?XZpWJTGI{h)oy)^m(_SW5n9$E_ zLlxhW7n;!i+MSi(lJ|2+`;g1!!IyA4KA*VU9-B0CU1^U^nz^pD#|q6{SJ`8QX0EF| zGuIx^%(cfeb6xG3xvsWXEGoQu#JBAg%m0L92w5wZ--T9>xW-r~ONYu5xJGoH+|8lwWv8!rvhq6l9V6Sc^7ob3 z%kLZ6j+Ofnvi9iY2ft_Qh5X?6SP{ob%w;ANhmJO(Z*yn{hqPX9 z^2`r6+5U6t)YT(yw*BXVsWF7Mm|WsG-MYn-?iP8!k&Qq4JbA0^+NDdMdi2}=TWuft z1FW`hvwh@)SZ&`X|7~KH<8=9US^9OI?yyNaD{r^`C#}+dWcyEArT@tGpR;h5aEI+b zL(t0|w*RDahC6NlN#_iA+AEgy(on^Z?G?-UOLtcO*j}+b(GaTmiM?X^Ys1dUpU8tu z%}&4y;x2iN39Y~i;x2iD30>W=dc@tb!-Rg^5JSjX&Cpo6$M&r>R_>9#98>qhz48*B zj_1F7<+n{Pmsj3e`G9=FguY*S2SVx_T1!)=-&*-oSz$s8rr&{(C3|4Sk{>mj>n$)=W>$?)nm{6b9t>R=A-gX zBfGik*2;bI&nEPXsyh%G^-W#tt&lw?mzmI|kUb{1noz9c*2-VW+e|3aaR)+wHK9-H zZ>{{b9DS+Ir7Cg-12?$Pun{;T8Tex zj|bYdK4Xsu+O!U+G9e3tV(x9mE2 z#h2vkru3Uo!b@_}<+?7xsY9w>lE<6SrAHrBbwDoVkgnOwlHy^PHSGP`M=G7r(7G*$ zIH8{|tEzg%Q|njkTJKY#idXGg{~o6fugV@S;oP!DtOx%h&oZHtu^#-3+-X8-$o?v? zHleMM{Z-z|p;yYOF0aXlOo;08n*5!Kd9Ux0%Gc$eO=zEQ%OS7J4@~H_QMXpUA&2j# z7M)x6!KgbB`n(D4gzQcE1rxdovNvTrhh8bC_Pr&y7}>eu(FpD3&^GZj%Z6XUTH^Z- z-;%R9M5l}s5Yw8uE{KLI{$^|9^61XWzuEma5~rwtxBKrHoTC2Sw&a0%p^A5HOFnLbudWC~ZQUrch|B37t1(%OM}xyNUYHBb6W9yNOkyEr)z8ziMK}mpoGWiTth! zU5gfdBJVPxkB?eX^@)7SgnqLyRPl){yGpm{&kJ`V<{}e%U?r}T$dCy=xf0h&WTOck zsI03Js)a+_#QabLLTmRpJ*|}6pDAVa^e-{SN|bdS;Tias5@nr4eT-8azp}2q48gkG zudHh?uV8l_P}a4V53#!rsC``Cxn;2l=gCr4cC~Ip--NgQrD_6)wC2lHJ%{Mp+0=?M zwaUcIG>7oQ#kdL8HvhVOh@w2`s(Ler&M~s7sPz!jB7FtUiuto)Bpaq~F)=&FbW{yf z59tufTZ7Pk4s8=6#CeNHgRbF zUMk^dWz?ckDyl;~Zbzxj9HP>vLUz6mmDM(1P<6PvjYGJa)ciGsKC)w8S#^Y}`VQB+ zY!|NQj8St;=pxk230;d3K1Q9$GF|!@wNA%GdDm8rQO4@T(vF*|#;Tl_iE}6Yxaw$i zGl#Z`8zOjobjF>zm>`a6fVi}~_-#PnZF*ux75Vq-YZ2Pdp%>*-)f2@6^(u$7oh|URZ-E+moo><7 z@?PHpwUk5D2ESOSx;XTroHIeSHqj#F>xkZfvk%htBV5%YZ`JEOW{=y9s<2Fg>{`Z(3hA>Av-d1`%}TFtWU;$Pw| zlwgI9ly6lXuR2*qZK(1uQUf|vcHOu~Di^CuOehOqzF6JJA+49io)Q+TU$bmGYV%&z zV)c?qw+bHR1ofH;(W%%8>hC&)@;0I(2%;?gj!1~4yE_P z;7P+n2_K3&^z3OwCy%8!%zPz8?|@m-NN+sqT<-8+SYYw-wC^~I`Ee6*nx|8o)`^5y z1|3>+{%?_LsO#xPU7sJICO+{x<;2G=*hstbXfG=9`)1-iK9BIG8j8OL zsWdIcswqV4a!WX^ZqWcV06j3L5F^M_$KGu~KnnU%J;ykXE&gYeOD}N={ucY{- zd8;qRLH|DSlSy8VTl#-R`@|MkU+Z%7IqtH2;@eA|TCHYF&^Ghwsb0xzi%;Zpr1<&- zCudy~vcnSAgTFvOmhEZlrTE@@QhiEHD!j-8Qr|K{t$$6w#r^mkkBcKgD`VAT>nP@t zQ!P|N_q*oM2(mcZ2DF_FM&GX}{ttbW+hDa_T}x6Yrcd;gQ2j^wKRcC^C*G)td`iU0 zJjRRX<`>5y&wzLkSSlU|mWen1gHp8K++}Hw8w;g{oUx^(jZ)UFn;zrhyXiyGJ68Pf zvX&lTbeHRtUWd2FvGOmhR?RL+3MC%)(OK94D2}%!zKPruAIu#PqgkFupq-zq4IEUnm~MaTBmd=X3r<7 z-l6E$xnpYD&-z^Y2UY!*Kh%fOR1>w7l z*Nc%$H^{4zLyx=#sWS3<`I}LjaYgXMW6qS@iD#ng`6KVfm{jMxQ&DY@lX*W0fR0+515F4HZTsAizY6```11^W{ud(oEsT$W2}S@Th$ZtU&~i2 zs`Ejp;i9A7lwB-6hjABUIrmPv9KPyHs#=~u_Cocdd~MR#fPv}X0`91}O8rGnn}4e+ zm+!3n5$Km!-Vgp;<9`M`WcsgwzZ(BM`0p^ka>lRJJM!m~URFnNKYk$B*ZvK(?u#pG zkMa%W=jw*CCdYG}Blw+8NAUZd#!Gr{!+1&WZ5S`<>}if^%b%JL_!hwivLeJfpCaje ztATTlaz0V{`Y~6^s5}6jOyTpcDUwdhrbs$ZnRlzt3S2(~AVX)uD@}ixmGzX&=hkQb9Ql@UCiIjoE(?3oB25|CC8=gW$9k#@8$S6 zGUrA^Q=Z%8)T!^5Y?Hf=dc=PlOK;=&w{e`inR5p6zfzvTwta?tb@>``4s*^iG}-+1 zi21hvA&&nLr+tX?*&(Tv9g_NJ7pL0AsdjO0J0!ioYlqy1H+t=m^hU28lJ3OVA?Yc) z9g?1`+sAqC<2?6qo=-97DMM4vdszc}x$S$o?KiR&-Nu%AH(Ta5`M}Ie0#aQ&VRxWh zeRs;Y0|%=+Ctn}fCbup*6Mo}!OYaRF2F{uCA^A$jz2N_-d0*fm*yL{l68Rq_9^z6S zLMhJ%CaGJ-z8IiZzZ#gS$TDZD-*x;Wuuy&Z*bjj{qgCm0@XJdVs@nF0fYJJqr8Cuv zBabS*fOCs;ste@%(`S`ZeHN6S%A5hlZR#w4q;#8_q2=3^Dzaj-}$qiq23kk&%fD%E-HZp==vUX()R~d=Oq&_JHb~ zatiP-$M%(tl?Tu(+vM=0`XRle_9AfpGWo%>Cs4{S%f@qA;}!Xz@rp+16mVMAcy;BJ z50LYsqbkZDRZCYaE*~q;9lcl1;rMen{v3{voLB8f{yUCZSN^V`_AWvkKjtRVz#@(r z;#46+Qz;FK-l*1~=X8~^Q!9fq#$cnIZ^uRFkYet_-&b>{3s9IR9ny=iB!q3P{9yA{24XSbra z?(A0d)}397EP0nA8{VZR&v+JiV{P@28&Sh`h(lK&b}Q|BWzFS7rbxP0u}0FHc|K5c zM&1IN-psQ`(v^ZWlCB;c!OvW;k@RMsHIm-UvqsVzdmch=S;V3D^X%icuaWe|o(9<1 zyK;@BH}*Wm{O3^TX9H^_z4_-U*3TNgW+8plt~HXbE=0LqW#UyaX=s^vT}%VM%lN*S z4f-Ro04U@afF-g9I8;)cgCt2SB}qrIbd01N#hQi+tY&F7f>U81mf-toJvN^zAb&Zq(mxb9 z%0C=#qTJ`NP0&e?2heUk2>+Hvx10<-jfeDDVvb3gA}%iNJIG zCjrm*uLbV#cLI0%*8_L?lfX;4ZoB;{(0lx8;9h?Qc%8o=c%y#{@Mh-R=06?uo&K|c zcl);i@Asbre8_(u@aO&ufsgwy20q1Ye}>!s9Ou8E+kU{m6Vg|?)vt4V-}QeDocI0T z0Dk1Z3|JB%-IfJNw?hNFVPlm6vaV49vZx~hWItm9WIy8rWX}@=WY1FqWY04KWY2Q~ zWX}r%WY3ENWY0?iWW%8VS#N!SthXU>6>@F~>;*;x*8^7uZUU|e+zMP9xD(jTxupUP zNYxiu4$K8QfLj8qfoBBP0=EWE0iF}M2l3Aj{1mt&@Ca}xw&qzw*$uk-wm7qd_NEZeiVod_luI!CSX}< z3vg&@EAXJwD6q1$130R5CGd#S6M3U7S8@Etj>;MnPy_cQKi6crqwaS7vE#;uHd zG(Cjk>|wm0F*x*V;B+#+G>oLBjb9-C zHpV@TMBmT2pHVasXD#DajUB|@k@#W-do(MuTD zGHzwu!zg+0_mDlnyI9yewSSTDGF> z^s>v!ZYq1C>_Ayb`9bAJmLFR_t9)Vkvhwco{_@kyFD?IJ`KXGy6)hDTDo(99uj1m0 z{T17XTr}kNAwM4S$&mjUif_l_ELY)MMhD|saTTrD(L3?QQhZBenfMT2!TMM<;u|SVSe-YEVX_4)^X1}5*(%1$HZe{{aU#?% zX2=dPN3IZyJD$furj4+$QiLKk-fkFXI&V zg$@G-n??h_zT)%1W0y_=erdvN;A1Q3`vlXModEpdvRdGk%Nl^KHLbuYD^~)4;XfI8 zYE38b<`qfc@il4SH4FNIxye+@@`DMtFFYMMblf)JKbpP-tebuT@Qsld1D_gA*fWZ7 z5##+ch)$0uOwJ>WEGImerQe%R^jVBSj``i8#QDMs!co%*by?pXN+sUVMrD0_;U&PX z#%}^AH(miubDqA2y`X{ z9-c+?KN#;mFyR+Q5Z=x7RgA;9<_~fkb^h2?>+Ki;8w;(V~MVtMEE{){x*&1z1+s*xYd7Dl-m*Q#Gf;Uu!>VPM~Oas3E|^D z!k@Bq9P{6-`w}=qxGnD~qHi5d_~@ z^it+mavT51@gJ`t{ym)P80H*W`zSbL4F-2{bLu$C`O&3>TIV~*5dTS*Mi&zQ%RxdtPW8xrknK&!znbkwm-tKOKg5=h zDHwx&GOSl=F?t3HLDlG}Di=g&e4*_=D;5s4(U8c8Ks> z?2UJ>{0(T`>SagMXss=$9JHONl|+wPN&e?H#_uxzaVq7Im`w49j(Z092#<~<+2*w^ z)w{;dj-`~(n+=4kxsUE?pd55PZ>fA3blr5qXD1VWYc62}TmG-Ah~CY(se|alB80z~ z{w1K!VSVIz(7M0eV_Dnwwy6~J0`^63)>F9wuEWI*2SDG#(s9cv&MRF18(9wr)lrW> zx9m0GA9=j2qLk-k_7xA$Bl_}r9|A9FVOyF{ zcrfE#EmW%uIOjL(iGR@)!jnRTi6w-0aVj}l;=1T-3n{m!xp!WzECc5`ZpCo6sDJZV z$W5Sr+0;xiuWTNMIDh0g8c!T^C^-LOkEeTo)?pNL+DO9F7vU4?Qs}z7~X`e@Hy>+fy1%eqc8v9@d<=S0!QGwtOECNU?twi zs~{T;TQY&#G z(kbknw*z+|uEG`d^MGH59QS)bqVT=9i-DIQr0})3OMqX)e3ocon`yrmzbBKJaRMZ46)10V?qv zuJ23nJWz>OutLT+bbtz9n!6qNrnm$6miRGnqPz>zNkD}!Xx#&P8c>Pp@;=ZrfC}Hz zdI0n+pc3=sgP`XFVMX#`&yVm`~$F2J`Ze?F94h6i@-Md65>aJ zO0>(DL3aQZ*6M!-y%MOfX8#N56M+hA_t!wHns7<3;{iBsjjL1%zU zWN|r9;;ddug>PH>KyLxUZlxdeX+YSmECqcA5OynZJzkszgx$&^ptk~Hw{jThF9Kn= zayaO7fUsM6Fz9oEuv>Wu=<|WFTUiDALLlr`js(2}2)mVsf&MZOb}J7Dy%Pw#l}Cd9 zDiC%H*NpFc0b#eeXF`f^0AaUs9Oz4duv<9+^tXVpTS?y`+zo`?%1NNF1j26RWYBwn zuvG+&YS4E9mAG35LEi&Z;$9gBeIHQat8R6m z9{?)xQyBsMAW-2N>@v^~1C{uhYy|xXP~ltM&7dCz;*Nc}9P}@NO6-$updSM&@hjO5 z`qw~(FHo!i{R9x-Y>>DcMmz~r;wiZr^lyO*Ux+&i^wU5ko{=%o&jRtRfsBLx0}$g~ zc7lE$sKg&-0`v<&CH^EgfPM+6aNRWt`eh(|g4_uD&p?Im%JqQ$3s8x_;(aX=Uz1CN zeqEjl`VAmFhJ>|>w}48#E&D;g161N~ax>_^0~Pj1xI0Ju1E|D%@^sMu1S))5_)O3r z0+skko(=kApc0?RZJ_@Rq+8jygO)&rkAHs&v=6B8{pRyP`+@kRy}AH&DG;-#x(M_T zAZAZ>F>tv03OEM=F=MJrK#u@o##CPeT?xdDslE>SP@obc)i*(p0xEp``!di+0F@Z6 zE(bjZsKi)x1?Z!JN{mxifgTT3VuHFF^yh(?dDS(bCjv3^s_%e47O2EzbuH*AK=@U4 zJ?Lpb_*HcS=ovuxRrP()vw%v>RzCne2Z%XZ-2!?ZP>K2KR?rK83eQ&E4*EEt6344M zKraHq->M&jUJQi4Rd<120))TCHDvf(ApEVm4|E8q@I~hbK-U75s8bJut_La+Q4fP& z3WUE^kAQ9f!r!V#K{o;6Z`ChBw*VEsa{L(RRvFu^8t6?xcwO}d=q*5aUG*05H1!VfboF=O z8R{Rvv(-NlXDbk%R($~6u090k93XtG`WW=NK=@eoZ_wuh;bZY)Pxx3Me5~?;-T{P< zResQ42ExaxQqVhr@Ui%cJ$x(>K2{9@y$c8*tA>I81`s}04F`QG5Pnr140<;ZepMX; z`br@Ds;UCL2ME8aMuPq}5WZ9$2Ku`|C9YG4gT5XJU#gA-eFG4_RE-AxeIR_P8VmXd zK=@KM4)iTRJa3{VfW8$7zp9P_eLGNzJJcl5cLEje&X^4PCqO0cQd2?S4a8FtYC7n9 zflAz`W`e#SsBrheY~WATTyP!)!n>;ZpdSXpyQ+o2U#R1O`_vb}e+&pOs!jm?YaqO+ zss{cRXPr{~4yeS_Dhzy9)q(SSpb~#j5zx;8m3Uq)1N}#!5-+Gm(EEW(yr`N%{|TtX zOKLgj13)ESR&AhP0V?rl)ed}BtpL8RR)PNp5FS#k2K^Qg9#WkI`W+xVq>2IGQ*m(q z2~^^J)d~DSC4m1@8^He%2!E)Oz<;ZaK;i2FUjpF|eQD4>ApD{4RG{CN1qOWmz*664 zNXvlOS@>|*j;H`)XW=^?INWz8I0pgY6@6!e9sz_`^lbxO34~YlZ3lfQP>I8QUjqJ* z?>yiUz6*dy`7Q#E_FW7-#`hJ(oCt)k^IZZw*7r5wWZ&0;Q+(e9PW4>|oZ-71INNsx zaE|XP;9TF;z1pY8E8+cn_F7QWz`M^5^3xPjD z%vJPL($i_W7tK-s7i>nWCXQxmU#CVs`VO#iGQ>Ceb>m}g&boBcjjyzjR)fJ z>&G45LcC|>?{RvZHJb4ICR`$yj5rf(fHU!JX}mLC-3Q-zAAH|^;z{*O{JkMQ@!<-A z|1foJ>EY@qHC7%4uld)qi`5|&*NbB+-Vm2p+@g-DxLrM40nN!__(QRg#_GCotTxgR zjx|;X>myC!SnJFg_*YaidoaPAK?IQn^Ja)eixPrQ}Jwe<}Au1pUcd;M6NNur8T`d zOUdUJi>H~W%FKBr?x@bCYm=!&W4x~~*}H*~X#v%C<^qb+S}YDr3fqC!AQz_vItR+j zNs#X9PbIj)PCS-!kqfEF!i?M7oX9gd4#j3-Ln0SzNc3*VbyMwa8M3MF>LM1XXj<1y z2Ps8cef3PSBGMEKhFhbt=&BZUdAKdy+7S-L@DNDPxn#PR(gf3~RKg0i#n&fv zi(T2}(iwyrlGz-7+PdR2MJ!9W4uz+4?b$@vOhIjHO~8OQQ7G#Pal4bJB{aW{sYQ$D z$6}i^@jkS4aZfB(o9vCJQUf!^=IpH4>{<9pcW%UQ%|I@Zji%cpy*Y&15;;SqQ;B## zv5JhL6~S<0q@}H6mNx#mF%VvDGOI70B~{N7wf()FYiFS?T?za|GfDpG?}JWfiBOVt z6VD7Fu#RGJi)VRSJj>JKSz_hf84H7nOfI=T*%{9zs3NAhI$a``Nn~{*L%Nkvv{BWK zvu77;Y+LwYV!5n?v7gB9mzh%`H})w)(kZ-CPmt=_)Fwo}W3dSVEH2wzNa& zsv1J3YM|Iq>#JwY1+zO&KV<0iTTCsp7vR%UI#J8AVB37LZoX(=(cBVitL_NLRyH=y zoV9?nY>(D15bGA?4STW?>N&BfkzLc`Vuds}gt%vl$+RHY+-NG-P+iv+i?&t=mxaPL z?RBB*Xthb!7Ho<&h8ttG)ve6+`X8!%tSwU41Q(Q-DA*K@wKqkYBGE{7L*&Hb5e5-Q z>)V@_=?qa`w6(o0szbHOM5+tkoplrL&1D8!(#hT&ama6YIYktYj2ml;DI{DI6m>x( zLCu?6qLJpN>V{Z-sCD)%OtE#5L8SBMc%-e(jh@6Fp=Y{oXNlWUbnQgh8vnaT%H$@Q;Ua7$(x#^;MRrn^B{f@Yls3tLvwH$ zn0aQ>7Hw^As%xrl4C{_}tCOuKh8U5S7CSp`HPw@BrHH737B5Zhje|&=gXo5~RfS^9 zG%+u>7FKiiteQx)HN3n%LP8pzkq{dRe)=}(ISiyWl2AiK5V=$bqv6&_TQq{2LWMPv zrjY1ZX+`q%9(-q5v^T*#L$P3UDD3JNvV0fIlPnmvVlq3tG8}A=R@Yz^#}&~|pt=FN ziZxWX)>)CQriLPIK^lli;3|+hx1}AiUHnL6OEXppHLGIOQ##+4_O^OnE!MUY&ow?+ zSu8?d46YMsr!hjKf>#}_vFa7jygMJRbF4ZP!osAjP;9MKVFbZuJ7p2&hgPB1kzlN* zx-D$`zDR8(SdGs;>3Ul#SO9X1;yt^sbQHQd+?CR<1r zDc$X{DjW>g8vh)Q#%eL>>IPR545uwz@6M%WRW#g&ayr7TZSaHj5iYE{Ef|Sdjj^jp z2GzWxEf#DaTvi8J6V^5EGOU_5&Rej|@S_dL2DVfKw{De#Hp3g&!KYWZxtVq3NL-Of zF-<&XW6d444Q{(^Yeb&zqS1fcAo?XQY=t9PqUxiKCOOY-P0dXm&4$7DXc#VI)Scxn zp}MXP28FJRK{GI(Mz_#vd39@}Z7Of)Hpa!i*L%&fM7Y%b9=Ez<06 zQ=Y{%c!X@Q>@!faSS`&sZ7ZsAb<^1rHo;5>6W)6nT_FSH7yM=kqV2(ED)}4Bo6ed#q0#zG>dk&@DJE|)?>yCQ!IP4>)|-F zv^!o~n7hfFIMm$cWsv`%PH2wS+a(mSgcYI2Sf~}IXVs#nxg9RwxYtm)Er_`;+H6S& zm&Sn!m>rw-)iS^A+2&A?qOw!tx+SqwD zCc0dQ8|@a;ec}P8cl=^u1k2{+eeJ!ebi6BqAh|$Skmi-Xnsk4!BeX*-v(pfv3n*fT zO)D`Z8e8lr*7OH;N22*lG(FG7!tg(u@ zwAO_lnrb6;1&Q?9Ge0Yu1oL^}mAp2}XFH`*omhEARH5tR5f|yM+Gf%m^c=3k`ec>Z z6i@XhVliWC+N!V*H79DKwUZ9kV6wg8-cFn)ba9Z(gN{6!*VE}zGM)mhCDe<>B~F_5 z-sGUE3T53ZI-+ek95~n|*Tl0ZnS)fEE9jJAOLb-Jv^d7XDMi+m+{@`}i?jrBXtOTf zxsem~wWL$Y&H)dPiV1J&O!U!llbv<*`t_(zG;J5{Vf3v?_C_=P*_<7}HNM%VbuBH9 zqeP2CCE69Wm=vvm$#v`PD&SM(a1lPMEEmt@il%_#i%2L9Z*LQsXxd$y0%pdvF|#So z7S_3r$2op_vYqKnD!ES7q|#un!>K{1z(HeF-M0u*Ud?WGAQ8R5NQn zp3;ZBnn&>xu^v07MVn=eb0V0XR+s2aWRRgwl3E|nq;&3ymmWlA97MU}4Fg!WeX+h&qU-kV2`x zTw%{Kg%LarX-F4FXiDT-`+I9M>BhFr@xDTNYoaH;iMme5>M0%z#@wIC7N(A-vet}P zMB1K772(>gDIzodU8EpP19~1Uk_s-Nc|BjDE3g3VEe4Y|#yh)V_SmB&bA@F>`S8Sr z{CXVd7INGBv=KD-rUnY7mX8i4Gq@g=&U{)FEVTHXxFDBUGF#K1Olgl3N(9qAJxMGy za`9AcCXt|NA={mXnB2>!h{+RKVoHdaw{v6h)J4RUx+9s%^~Y0~RnU@XH%5_N?jRyE zek?n9ile!c%$>qiRd=|11(?;CSnxv^O+AJKLk*^Y)30f1l(A$}S=cen4&6yS5$s86H#G=;F5`%nDmN{LU+atm5bP~e$q#?lT zMTJeMZ*%sv_SOb$+i(T47x6H6Cf6sjIjfU7*Y@7csCN)+Ws&72vSy&yz@cLGdR0g8 z21%+{g0|EZq-!g1UB+kN`U(m_f;?7~uK1aXBs+fg!al)uPd~G)KgSI4XEqKk|2CR`uy?Mh*7Ozu@H$IGHv@ckQGGKuxcEl#w2UL@O+pm~C41J2BKF3j0r;ov0BP;JiXMjqm7#FNVtQT;Dh@DN=37WECiR7U;23E~I@tkEJE>=TwT?UuVnS&jSO;dT< z)0j<`XUJY^D2duI1VCyh*MR9qTeY5wxWQ&xf&)w?tgQ`CRPbc1n<%Y~ut(5L?9E)E zbZ?6Cbld^2<(tx`9L}Mi8rRmD?$c$Ha=2h7!dv=yjm&|%M2>2~G;BB5_H52) zQlkr)L2P-`J=Hm^)YkRqbcVdD;C$dI6I;2OI|F zL>`_CV1hX87j3o^3Z~MCYAWj*(9`tTPUPQo!HrnwQal&qVNh}29uqOlNbWSz%zz&C z*j~8a|}k8-DiTfDo%)Z9UI8)I6NfoNM@5Bo^{L_P3GKDBRSm6 zgOw1D7IJW&Y|2hXcA^Y!-|C5HHaa40{IwZ$5N3Cm089NmD-*hoiA;U6t1Hp#vf(1~raSBSfN5*h3zvPLt}v{Ps(u|D3P z!fj8qr*+u1srZJh6VzS8Wnw3Ya|0^CCAX@MvC;(#brMWKHlZlXGsk_w-G_{ zn%85t!mTebXrWi>MCGV#BFKBwFJ|9(569sZ0G4hnqF*~zbH-vLq7LZsL2S#SiLU8i zzh1=F5z-+(9X-&%VPEM?f6St~=CNQtI0j8&UWA($4Y)R<2e-hjS;5{7FlwyopeBJO zz9w1{*i27riRWlMH^y`1vNnid0z(A94cG$E+KVO)3L9r`hSM}-_AJ4Dh`1rhbCakr z2M&7KYVI7R#amE!7LnM4&_dHNs3Uoj;?Cr5v5WvQu)Hzx&?+2rutK*rn-2w z%NkE_z#WY76n=u(Gt)0sTAL$$Au*`qJq(@^1R4>>l*5x9RwHysBy{(hBO}hqqA3%L zCclUjRxp;-M@#|?teQ9@d!tjE>PNn?ly1@2iA^Ip4VX{2SZ@(MbcLmx3)8pTa)k|v z!w|jtYl(M}B^ovqZj8b(sL`f7U72_}Faes;Tq$(cPM)4{H{Uhwirux@m9-s6@h!p_ zDqYzXNwfoFDwESBRmyWXRiEUx<@3yL0^59n{h&y%JB77johoq}JAm79;S*@aY;HsQ zcxCJAb3Vv$b-4~xO=^>wY%bc}-@B2;t{_R9afnFn&BdlJFT$qSu&hov#On3y={$ab z&U!i1Vtn@K^>vs-;weFgDK<^cvJrQscSE4-zz2?;lko*K<}DJ(7*s>ctB@7KbM@x1 z_etms=wMPejtCSiV2tdOO))7E>CIx8q>QC^fx_I2MQt`WjRI5+JyuRkWatidonIbH z`)Qav*vg;%yjbLJM4sVfY|4fiJPJ-)98`(@`i44xM9S5!l0(W`ZlgcbhOz zdr)1i{&iWGzz$(Xr@dmE&G23ka`;(01`W~b)P^(;AG&oV@(*db@B-#~I8d$&TU}ef zuD2bax<|6Kg%L?>GsDpnvCgcCY{)3h5?FMxm{0ona3Y%CnCRuQ^LdzPQn*~%iwioD z@SI?GJlU%^1Wc{K*;_(0ohgp%rI}PS+i7bSS$7`Gj6>QU=r~Jp->RtYO=9nx=!$fv zdqrI)-QUL)W!V@%C7tO=kXPYKyTc^kjLKjuV5Clnj<4+Hw^nFd$T%y`DCh(!A4_DH z$rHWBrIv8X9xlgCVz=kva@+#0ov)dx3v$lm+j-~l?cDSDcK*%S$6|4ZWg%N~K{lr2+t z1+4{{vj*482c2QpX3Uqlguc_)^6XgHnkQBSZ+o2U)jZ_wk>lcXbIh5#Zi*GqixTVT zO6ZdvJIJ-de9D)Vp%y&-L92Z}{IM_6i0aG+Ja^NZYwpkCGD^I6L&A~quA!KKs>I8@ zj1!r9B%fzx?!?k-Ki++2l3COWyHHwhbEkP04-IKGIh-A%p77Y2AXq$R<)ewhB zns7x$63aBNFP`Z} zh^&|NphH;p$2Z_oPG;5&y>6z(RwLbWVuIvN3`zOuivu{)&f!w9;o}|^zQ@DEq{w=~ z)Y6wwE`rxdPCR4dN$GNm^{8aiOG^#e6GN4 zwF=S~8{8~9jewtZvtqeI9_5Dxvg^du$`W3okn66IuB_Igm8i$_bgD;2Nxjb5B(jtO zd(6+qVR1*gY|)CDZ=;4^SWmZUSc$#0EfRyW@tTm8l*_dZ%T=nWC=P)1F=^Ur6btlC zr@W0Wh@i*Yr^TS^e3o2S7bmC#dSV=;n9!%h;4E}kS(oy0XyR%4U{b3uwJxnBmYzLa zTeq~6;+ubX#o#TcxJ)P2lejh0yV4aG=qe|=3KAsDwV-?fm15Sp`Jz}xUxUo&+ifz} z*0dLNRSgccsEAeGlq(iLpG##F<8c=GeeNxKFsWT_S~bvJc2>9R8_O_rBxx!bOll{0 z4j7APFu2^#f{(6>r!Fe86XGtN;>n5#>_lEOwpwd#2yvStdG+>QGl`kY>v|g2SJZh6 zYFU9Lr)kt&ST8Eak;1$==ExHHlc#nCIqL zG|bJsj^~jCP2@4{e)aI}SuH<-v6Q@QY;}1uvF>P~JV<5fjQa%JoEW*74yQ$5cc&|4 zc%Hp8fh%%MTUY*x@7YS5C*g^2j-H(@f_npxEWucQ%?xAk{#IT2tTRspIHuW64geJb57>@y% zi(Vw7%CR-sW14T-vqV;s2wpyc3l&H}RVw6CHWrsI)D(;D=JSfcs>gs8TQ8#9b95b+ z%BoA`%r=lhT58*OcA9sQ!A;3y;W9tn-(a6+P!)8W-Iet=%86rc&}?3>S=9187AmM^ zy>`a@8VECrGDT`_S(D{0rv)bQj*J|4sB5(UKX5+Yqm(l_K_KaxS z3C)}14$Yirg-}NwX&t?RgSEtmEv#NcZQ@&AS!OAwbyK{$w~KaRUiG;7)azKP^y#~h zoVfYCSa)6|Cju?(oJ+efUW#g8pfzEgzl%!+TNUM__=J7Ji@lDw!o}p2p1022QJONY z%D$alb15dz;ZAf{(4=u+kJ zB^7c_foAP!#pL_9bb#t>CRS3i6{84~V$wnkk4kVg$h_TQen*$LX z&xyry-AQdx_PC(SS9CwW?t>!ixb-lS6O(GWW&hY z%y@?#-FcxmK%RQIHbxxZzQxlmpe`&bi1pHZW~@fn#BQ{{`_DUO?3jhCD=u9x3tf9C zk>tIsn?st_lS)1}e>3G#fVGJBR>#tx*c4k=*2~is^YVCC>KqZ9`MH1_ z%b6QJlGuP@xLW;e9*whtwD~mkP?C3urrDDa&5={!0(U2SqpKPBAc4zV>_ zbDg$39Fgc`UN)WXX};CrI6+Ln9O$_skA=DUq&C}-+yak^rCxdW^--5nBA7WcR&I?uAEJSR>lUte@^Sz zqA8a|EUTGJG~qtYL>IsFjfa@AI_*EY2eNpjRm$RV$L8@UM|1akxLL+cve5*O-wbGl*lV2fTCGetFk-RehLg!W=?0gTwlv_+dho&6d+(W75y zhh;bAjKbht&F#ooGT?fz(AT#_^SV=Dg?JgwvflLOUR?3xVAlM$VNVKa=Q?c~0!x(j z<{nvXirjqH@q1e$$D=EcrIo<-ezlo=-$yt{|;UT@m>d!4=aTb~;C7`K}}r56@!KRjGK&grQzc5PGy4R>nCnG90R4 znx774Js8ry6N+o?ek6%wc^H&~x#J$=K;L@L$;^%S#N<2hMY@liJRVt2LVNht>e229 zmt8tHVo!#rhq#DBE|p`uuD*h(Xs5+Q!+F8noH2Li;66ayYvTm5)3WTDYf78a>J+XJ z&_zWq-pk>lwe#~vGZV1G4EJtIVk^V>P%0P_Woh3mXu^G(T{vx9&;QzoA~2=@gS5}#YFB1dW??E)F@8y*Rd`r<+>S>72+AP=?l`28N$8HfJu8Yfj#>8TYf%hEsGBxK5mK!?S(u zz+6lh4e=~Y&O87{{tF9YEQRTXl5_@1KU9NoS2D)|az%EamK?pnU2V9nhxZnALl*CF z26T{OBe&KB9W-D^N|#B~{W{Aa?qH(n%8Uy${Hz%4@;)^N-y7BtAE5krLNs);7dJTK zNu5o&-F1uYdZR=yT09#Y9HRIsIV|dlZp7M&8_AE&_a-)T@7jTu^k(~k32Pz73pdPK z=7AtPNbc6UGRNZh7SbupX^(>KH*a~lINS6zi&~t=@+>%XENnd!Tj*}vM5bmyw50ks zAkP+bD|)Lslff@_S0t-xK6@au(hst+jLpo1F;aM6vn(+nbiY|%0lk9z8FK@kvkd$2 zm(HKM=}A$}(f#Ns>(0ZV`9ZYd7HzuD;As&jrtPoix&-G?$mM1gy;PxFOrjzeAsnIi z8iT`kc3bx06$|yGhxcGu_meZ18i4n1d3fA1_q7PzpWB-&632TWhfmw+t%EnF-E@@1 z&dRG0o2&a-pW<1)PBzBJdYWPR4JR8f2a|00R6Gcae&z|c7Y{_}5c)Ti=%lg9Rv^MX zeTZXD?gr?!%!kavySL}!Zx+5MMBlHSDa7z@k;DH!ybXFf{)=+@W^D#jcfsb48HCZM%_ZdR%pqs$C)ViOz?{8(KiKO0pEh!iPALm zw*|jhyc;}=-!AAEeT~=LPs69r(yZ+``YVUJleHLm6&x(WF)w!{aVf`*UOr06Af*_l zf3;PJliJbu8}XOM`^kIJnjTPHC`|hH|0((*S2r!9XahR7MWPQrs>t!e15`N8N~{C1PfAKBXw0ml)lKJk}$RYP5w$ z_5el@X-wx#eU>i|K}w@OgIv+hB01C{Mh>;3T8T-8IcRy9b%@)k5$`ml5EBNA*$y9& zX8#4v4H~P#9SgmmU+)IwL8GKtjcHV9i-jB(mY=p7DLc8{me%9=>|bF#%7?sTLEIvF zdbL0!4t7=~UJH8yOIs#hk@ne^cNl3t3meiUw4g@Rv*?R)UP%Ofl!Xsm4?jn8>Q_-^ z#UV@G1f6Z6T`tP2e}< zOAM#rmpEbq#k6WLXspq?m4nJ>7WR_keY7ppT$@B4b7%ubbP)@4r=XUg_vaSo>m37}o;Y;(ako3`onxZF*lA{wo@Lg7#Y4f@xN2!dU3REKk0t$M|$%VtHlxX)F&O!3=7p zZ-;-!>dSa=wH{Y!Xhws&c!!Oi>Bg@x=BeDFCqX$R!X?oC> z=G6nWq_`g361N__e8*1Q{8p?vExoz5`#`f&JOeK`C=eK@jweK?XreK;~(ABX66*Rp5o;d#kg zt68Pywcm{2d@1W-P#M}gh>UeHs0?;9h>Ue*R+ag6F*+Ho+m{TjI78FW<2TH{We1UcRFjH{YtA<<;CWubsFhwmyue-7;GjMptfK z=ow}m<{_*SOi$EcrlqxTo-Rzz`BJyd6v`Z%$(OlprcmbSCSOJ^6Q(8kGFx|p%FS#u zh}_oH*uoLj!aAZ=Ft2KDUFkV$FkN}2UR~wO+`970yt>MlL05KryfRxKcHepBtjj@K z;vIjMW~_GF_Euzk1+k)`ofm1UlX}aPumYR}*4|z4Py_b*+_LjVcrVgycY#FD$Ksem>$6%<`(E0;;6YV< zv|Pt?czW0A9^bk)NyNu##V{Se8a+U#C{~Df?YF_NkrrRKBu_dzzkPY~$;(kPwHQae$eqR|X}xG(>D-092^demZ< zYxfTOaTB8NMmi&etUQPFQr$bP2=%kIS!sj1XU)2ccDtRhEgn@Ko*7LZp6U4`2k+5Y zI8oOn>zs`Zcz8x9hg*H@?LBMPOEyoVpvOK>`;>Dt<4vqlX|0YZh3-RdPGTJSh0m}e zPn}KAd3ZF6p=l4#^o6}Kcnw3e>678AcFzs=}uxr}q;sF5YZ#^i1^ItllC?Xl{wzML0v&Pk} zaM`-2PmIMEIX~d@2BQh;0joEtr(ns0NSyv~r_pt=c2#s@Vdds6#o_0d;+42daU|YS z$O4L$;^uox$(J~#xFz|eIQuqtTk`j&j>hsO?oyn*Oewa#k*7|0+hbdlS7zGuDN>X; zh}7FQviM>ebo0F$%$GQAb4$E!%U|oW7ES%~W!|>q58 z;^rf#B77QM#rg2mrdIBfZ9iQkFS0YoH#ub+A6+!J{F6#2mE)hSm7pUtePsJVucWxn zyf&zFu=+<^fK_*|%!7`(m{1slR-bg%NvnPn>+r%@q)R$=5IE7PM(Gh?6Y5c<7T9$ckC9iG$%Dl! zQlmjjwd*yh0sAX_G7CPP?!joq|7x+SSpBAdR?NJ5&i<_UMe6&RwXy3xcCg&-UOi^8 z7-yL?iPSAa`lsCKbQmHE6AG-t}iQwqd`kURvIx@*O$(@a5F1P^`59g zgZ4Va*+ZDQ&R!)s67LGl;d@tNZa&&kBp>%&6>(jSv+G@?R{1M2rxbe*vsY=3%$~uD z)WSWZyK7-)uOfBO^KmhqnOV&)#aVGs&Q1!4PkFhuyQKpP$0f zi#LVCHz|xJt^V+oGsqs$TNd@OCza8ro9`{l@;shYpR%8W?o2JMJ}#cpyRR~3n%Ypv zS%0%mTq{FI;!UOd+EbdXul)UyyN8|p+}d~7z*`Q59DB*Hog*=+Fmurvr*#6@0-r_q z7}2#CyvLl*NGE+-4C@|Pj#=csFZZ12zC)(?9XI+;Ky5!bV?{rbW^(XA8QU(b9v4Si zl%-R5Y%yBbI)e1%zv%o?Us0laLNh{qLCf9sYXP5XKwdp(EK%S6MYBK`G($S!JFuqy zH>v5Ad2k(znZ@#Q_d-GGlM7SO)f)2B1#!pexKY%duEJzd6FqOzU2!R`iwQbTaT~CD zSeRIJR};;AUQ5Z3RXi{28i3{5$OiNLk!vJ560e1mO&5p z90|`?E+62QV8j-c@SNq^{W@tZFKPKBZ`})bU+$FNQ(kXM%dZu$PyX)9$(3?(&SkuL zQpmgib<&wRY$~n2-0Nd&1*NYq>8pv>o=wc874?6WVi>J^=(;)GjVQ|3@!ASk!bWzo z71LhOy4#!9UShZ&_r2irh#k2B6g^2m`?w5B*CSgPzLnPISLyf`pZo%H9YW6|&`6`J zZWfL8&`7#sMCITO(M-|RRm4ApR)9psP##^`f#-4YXvET0H!&=Q_GA&FYqDa9=67=` z7L8KMwg17j!hbt>j;ocSi$>Iypxhkqz(?2dOXx`t}ZQ%-099xtB2ZRbRVA(?8T>=)1UuYd`FiNwrZLY z#7M2(rQndCX+TTpZgXMml-5etvqIi_)F39!sd(@Fe-#_GF#crlyvZ|Q{+z7qHh4Tb zJ=y|2p$7kPT$FFx+=S88g4KgHJ6e|3#FoZ0oUt^E14}bKl<%QvCZPEx37xp__7TH% z8)z2jgoRih#0u-3e*SvEo5or*T5Y7X^aL3BXK$Z4qtBWHC@xtiT{pM=xv3MSWj!0O zW`&E^$;?|;oG8k-^hi8U{>B4pKB424&{LlxMcrIwNyiHYPQ32s%lRR95102^@76tEK^ zumJ7(An5$mQwGB^d zBhF`jHSk4n)Ol)I)eqvDeSH~R=FfKz7vs)i?PM2tRm1a;2JacBm_6~SbpENGomkF6 zcn^c}OmW!yQ?jWVL!QYz&m-vdom>l88MU-PZAT~mLDZgyEj|dUUy}6)&I2fa-hEh+ zd$J54V_VhNiQ9NU__TLL&LZCtX!j0iY~iB>C>uT=bcN=!MUUKOwK*)I1j$T`J=QAmmzU{FaVNyAl;{XaW4zKGstxs z{BUi--Gxd;i>blXbC%B8b8dyYbcA=eQUYaqW{kR&UsIY*r~j=ZJ*#s zLytgxYHdpqdlK&?;L6Ra(hoV>DeB4?^1L54J_@boY9(h_EDNgy0mth7A~~zG+F`ZPt#+`#a;?{5ss07zXs@VmVwqg|IDwM*e7y6MRQ+k>;tpke zX2o%c9qFXi-Vco@pz%>Oq;vFH2ChgJZ+~Ezt0%M(yyBA?DtHdPb_TvEdRzdQ;n_M+d;)Jmpzqk0A{{k1w_Drzb(proT-enR;zkuP)&|3{OLg4$6pB zj8B0>S#HhKb;P;;iqWH+#uKpZv?A0{mX12WbMD5WzVa<2 zRvY&~ro}ZKJ8G!MUHVCIWk(+?6SumMihSLbdf4G#g#4%xlqvO&tBP%21{~G`YBUcm zJBHqH0X(Z=_65Fyf!MF0zpeJXql0fpxz9T~>eM{zL$r5hwEoBixuw4|OmpaDbGadv z)A&?67(PcS0!vY}eXRq{hTXoymuZ{^9#e?F&@Rw61{;oI@7#p3odARHZ~ZcSToOg3 zlfkAdax%pib!X&*rjz6gg($y}_#9)xC52X3X3G9NAG>fo%)-6v z7xCF`=7ifGId*Z$9385AMMBS@X7k7iIczIZ?8d#1?rcTo_eg)I6>~qe*Txu`yeG_$D-O>>2*sEe0DX)B07|P=TJw1 zfm6a;qcEb)ib6Z3JpdJ75Cz~^$2kJc28{?qc5LMg;T*0G0E2T?JIbktduiFdhTKs% z58RyY8Z36Fy`r%6J#(xr3&Jt$N2)JkEMN^fH3t8i81puV(dq% z&2wHnCXRPbqvRb^C8T0ygSe!{w=l7Eb|!1KEM@xynSHNOXZ%NA_@$jU9(7U{5PO*= zAL8trcQdSSM$d=yFFWU@w?%V$4r3EXXlgDs-5GWJ<{mqb;F=3eZEZ{58q{}um>3?z z7Rcxb<~Cc@S23!)JBaK%r==Ikh_$7|8(Ve>X{10O()J4Qir=68$8h=6t-qMPas1|Z zW8;4gt5T}8muemQ0JUKTV**niPEHv=E+d?@-u6?Kw7!=NC#^U1aFX5e>Z-2mrd|q( z#tRTK{Yd`?(p&GEx(>Zm)k%MZ(adI}qf`l6T_JDl`?{GlqCC*LW22JRM=o&J1wM9x zPx3$(xD{|T~*ePv7xiL0hx4SZJVS?$N6%C_{_7yoL^#!P(?GCk9ZXJ`a$E^Y$j4S-7!lh|@<5INF6sC9EQo8}F@S@{*z$`d#d1bVpk1swq$uoUR1FEA3e z(I_&T0pnjWI2%7TdZbYw)TT|0Nt=}sYBR_W-h*1}52D&cvY0G38eSP!p`xDET0bo- z9U|l@-3Y@$T>>`^<^_%ic-WL15rl?I{8N05Mxcyt*gU#HqzTBOHW7dc-Po)^N{^s9 zpG66ouXNLo!3CHw2};U*oR6C*@S1*-g~oUR7zBYPbB$|I86 z?s@}KS<^aX*cDZ{fG*{EO_{x=kQAfC6)p$L&93VqB(I@eOS_8)gX>^z8Z^c>tE~px zg$=S<*DAf-_V#epiBUb(qy|Bn^%9uENzVt+*VdnQGt&qXi6u4ES2Lu)9v867;B zo0y{c}yWQ54NLAMLp5O<{!BQbPr+7KZqe_f$RpxvW^pi0}6|Kg}r zZu%8yzUa}N$dsd8r|$Hj@3gg@YTmj74HCo*1d^;_F|$T9s3h5FGs(t69KGi-C?RSh ziZ%zaH>6mGzv-##8C_lH}OWa0(vNH2w>0#uqC{Es{ z;XkkL)UO4wtl$tf3pR*)l#C{$xC(vL;T*2W!5jIRsTGC=hP43bpK0_VjQ$ zEkSajy?Vr+wvv8wv_C+@Cre4|ugSM$-WiaqB-87{UCZS>0Y)*LR>jg&%D#^lIj1RP zNLNmX?4$=|;G7O@x}3hDgU~8>T=h~t68A~flGcx4BYz|V*xM0mjf+}_QB04F1Sv+A zcx0p;l&Z~ARdlNa>shTvY&gZ_R`>HdBoV!#@(IB~O<{UqeUmV%Vu z_83!0y@u3ljJ#HeypG80jJysms8DcV3>3|E(Cl8`JF|OK(yMkvqg#+c?Xr6nYdp?D zZlc5Blqr!m1pq>@!GZLL(h@|twG2bd%1>>ic$yLv4=2cIIZZL;F0=pQY zrm&yv@GD?q1@_d*dL?$w2IBD#D|D7<5nKq#aHXyKS76O(e@NyEyGj3El> zJWma9*k-W6r*X_hLm1ySgMJ}#vu2NhP^Ik$hmiOKQwN>G=ujAbF)R#2K5KETSWCHh zOE7+>I8Gy9RmPkzLd12AVlsrfiy=ZSdo@RpP&WcJscw*KfHHFYaonW^>qa%@5VN}w z&Px~tz6oX2f(%h}+tld#)*i~aEN-68PmovcfU~ONp;x6yI}Xa=DdVzDgXGY;!ax7L z}}zmVi?Ajb|#*2d)7LY2ChX%}d@Ku!pGEFtnFX$aW-2&68i+W-jJ0H6(kkXJ?y zFCd5rIO+4M1bqbk1Tnz?L5&~*FdA;OGH5Iacu*Nk`%YI85*o!3sf(;0D241h)uo6MR7MA;Db&%#r~hB4yQHv~`e| zDZw;BODm0;Go~z__I0QuT``f;8_HrvV!w<5#1lACDko=fEaSL>V}(A}YXsK_UMKh_ z!7YOC61-1v8@OL);5q`U4BRDni{K`~I|T2Ua=>$o;0D2)rE+Z&#}tm;IHqyT;5dL| z4y5{UjNusKFae9)%8)DT6J9YrOS0qQ9Mj7(WnZH2G1?;-BuFK4jKNU?CD&6qy{m$F zh6%?A<_O4M_8LIz$2nSdg;57EAIz?qa+T-n1gJwTgHUSOn*@+dEkm7a*-Zk}xt6_0 zaEk!as%76Nq4(+A+gT~&ZWH_!!QT-4nBW6~e<1irf}aq4NboNNACt-_j>-gP0Lc=f zuJ+|o7#Vpv)V_=`y6WU;V29y&DD^O4ilduhIzY!`!g`;5WlZPc)cbTrN9Ce*M=p*N zwm!D$hjD>9h`>=v_=qsu4O^QWm55IS-V=D2(W?@?&fu3Nc$>i$34T-HEk>M?;QI_- zk>KkLE=%w=f!`H)jWC-QIM*j00JILg!|4R0Zwb69@Ew8g(Up!dH%V0hHxV-r7?P$h zv2j3@EEEV=oiea=-juvI1h&em6g99epfr39x^R^5Xor*AY%95MU#S8Q&Kuk(dSuD^1 zVA%n433M`u6Fogs5v^~xdv+|sTp>Hg zR=1QE$qKSj5f;IsWLpNukUoqZID)l{LaQy2@94uXwv=H3+i_PgGs(T;c8HR2w|lFk4nTR0`CdDD~Zzr=SpKL z#u4ENa2SaV1&&zi6OmA{>Y!FLhw(u~emOCny@C&g z*dRVvg|GCb_yAJ6gpUSYxR@@VJ$doO#aB~&l`S2|r})y#_^{0C()sl4`E=hF+&_R1 zsZ^p>zmQJnEIw{2XqB|TE|&iA-89`ku?<^W9?@#_)Y7h9+qW$}v319;sn2emd}88> zttTh9@7Q|!3i@*CAK8GRa77heRwkyhTp z)g?S2#NXtG%`fmw*^fX-gFn@3@NczRI5KnO{LRN(UwG-(f$#nC&42&eSHJQnl;O2)|c?)Q2LT@G)NW0h-sgPty+%UjmiIA;YH-K*GTXbZYbkvoIBpLo zza4avGEm<_eKhVQ^JzTpJK_!`*fz{Exe>dpJd#V8C9bBn;7g9)N+mYdc3E`f7v*zx?K*#`6_<%xPj$uq>f-;21pWt!^Cq+a literal 0 HcmV?d00001