From 58be0d416cb0c5d94884bb8c81c7b5a4da1a3518 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Fri, 4 Oct 2019 22:02:19 -0700 Subject: [PATCH] Fixes publishing --- .gitignore | 9 +- Projects/Scripts/Commands/Add.cs | 4 +- Projects/Scripts/Commands/Decorate.cs | 2 +- Projects/Scripts/Commands/DecorateMag.cs | 2 +- Projects/Scripts/Commands/Docs.cs | 2 +- .../Scripts/Commands/GenCategorization.cs | 6 +- .../Commands/Generic/Commands/Commands.cs | 4 +- .../Generic/Implementors/ObjectConditional.cs | 2 +- Projects/Scripts/Commands/Profiling.cs | 2 +- Projects/Scripts/Commands/Properties.cs | 2 +- .../BulkOrders/Books/BOBLargeSubEntry.cs | 4 +- .../Engines/BulkOrders/Books/BOBSmallEntry.cs | 4 +- .../Engines/BulkOrders/LargeBulkEntry.cs | 2 +- .../Scripts/Engines/BulkOrders/SmallBOD.cs | 2 +- .../Engines/BulkOrders/SmallBulkEntry.cs | 2 +- .../Scripts/Engines/Doom/GauntletSpawner.cs | 2 +- .../Engines/Factions/Core/Reflector.cs | 6 +- .../Engines/MLQuests/Items/Teleporters.cs | 4 +- .../Scripts/Engines/MLQuests/MLQuestSystem.cs | 10 +- .../Engines/Quests/Core/QuestSerializer.cs | 4 +- .../Scripts/Engines/Spawner/SpawnerType.cs | 4 +- Projects/Scripts/Gumps/AddGump.cs | 6 +- Projects/Scripts/Gumps/CategorizedAddGump.cs | 2 +- .../Items/Talismans/TalismanAttribute.cs | 2 +- .../Properties/PublishProfiles/Linux.pubxml | 13 - .../Properties/PublishProfiles/Windows.pubxml | 13 - Projects/Scripts/Scripts.csproj | 11 +- Projects/Scripts/Spells/Base/SpellRegistry.cs | 2 +- .../Server/Assemblies/System.IO.Pipelines.dll | Bin 48368 -> 0 bytes .../Assemblies/{rdrand64.dll => rdrand.dll} | Bin Projects/Server/Assemblies/rdrand32.dll | Bin 8776 -> 0 bytes .../Assemblies/{zlib64.dll => zlib.dll} | Bin Projects/Server/Assemblies/zlib32.dll | Bin 401920 -> 0 bytes .../{ScriptCompiler.cs => AssemblyHandler.cs} | 86 +-- Projects/Server/BaseVendor.cs | 4 +- Projects/Server/Buffers/SpanWriter.cs | 298 +++++++++ Projects/Server/CityInfo.cs | 61 ++ Projects/Server/Collections/ArraySet.cs | 51 ++ Projects/Server/Commands.cs | 2 +- Projects/Server/Configuration.cs | 2 +- Projects/Server/EventSink.cs | 1 - Projects/Server/Main.cs | 10 +- Projects/Server/Mobile.cs | 1 - Projects/Server/Network/Compression.cs | 280 ++++----- Projects/Server/Network/Packet.cs | 546 ++++++++-------- Projects/Server/Network/Packets.cs | 59 -- Projects/Server/Random.cs | 592 +++--------------- Projects/Server/Region.cs | 2 +- Projects/Server/Server.csproj | 49 +- Projects/Server/TileMatrix.cs | 2 +- Projects/Server/World.cs | 6 +- Projects/Server/app.config | 24 - Projects/Server/packages.config | 2 - 53 files changed, 981 insertions(+), 1225 deletions(-) delete mode 100644 Projects/Scripts/Properties/PublishProfiles/Linux.pubxml delete mode 100644 Projects/Scripts/Properties/PublishProfiles/Windows.pubxml delete mode 100644 Projects/Server/Assemblies/System.IO.Pipelines.dll rename Projects/Server/Assemblies/{rdrand64.dll => rdrand.dll} (100%) delete mode 100644 Projects/Server/Assemblies/rdrand32.dll rename Projects/Server/Assemblies/{zlib64.dll => zlib.dll} (100%) delete mode 100644 Projects/Server/Assemblies/zlib32.dll rename Projects/Server/{ScriptCompiler.cs => AssemblyHandler.cs} (66%) create mode 100644 Projects/Server/Buffers/SpanWriter.cs create mode 100644 Projects/Server/CityInfo.cs create mode 100644 Projects/Server/Collections/ArraySet.cs delete mode 100644 Projects/Server/app.config delete mode 100644 Projects/Server/packages.config diff --git a/.gitignore b/.gitignore index 2334b70eb..a595e413a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,13 +6,14 @@ /Distribution/Saves /Distribution/System.IO.Pipelines.dll /Distribution/rdrand.so -/Distribution/rdrand32.dll -/Distribution/rdrand64.dll -/Distribution/zlib32.dll -/Distribution/zlib64.dll +/Distribution/rdrand.dll +/Distribution/zlib.dll /Projects/Scripts/obj +/Projects/Scripts/bin /Projects/Server/obj +/Projects/Server/bin +*.log *.user /.idea /.vs diff --git a/Projects/Scripts/Commands/Add.cs b/Projects/Scripts/Commands/Add.cs index fddc3a453..4b9c110e5 100644 --- a/Projects/Scripts/Commands/Add.cs +++ b/Projects/Scripts/Commands/Add.cs @@ -101,7 +101,7 @@ namespace Server.Commands break; } - Type type = ScriptCompiler.FindTypeByName(name); + Type type = AssemblyHandler.FindTypeByName(name); if (!IsEntity(type)) { @@ -241,7 +241,7 @@ namespace Server.Commands try { if (IsEnum(type)) return Enum.Parse(type, value, true); - if (IsType(type)) return ScriptCompiler.FindTypeByName(value); + if (IsType(type)) return AssemblyHandler.FindTypeByName(value); if (IsParsable(type)) return ParseParsable(type, value); object obj = value; diff --git a/Projects/Scripts/Commands/Decorate.cs b/Projects/Scripts/Commands/Decorate.cs index 003d7345d..8ba35751a 100644 --- a/Projects/Scripts/Commands/Decorate.cs +++ b/Projects/Scripts/Commands/Decorate.cs @@ -1016,7 +1016,7 @@ namespace Server.Commands int indexOf = line.IndexOf(' '); - list.m_Type = ScriptCompiler.FindTypeByName(line.Substring(0, indexOf++), true); + list.m_Type = AssemblyHandler.FindTypeByName(line.Substring(0, indexOf++), true); if (list.m_Type == null) throw new ArgumentException($"Type not found for header: '{line}'"); diff --git a/Projects/Scripts/Commands/DecorateMag.cs b/Projects/Scripts/Commands/DecorateMag.cs index 229654383..cb99856fc 100644 --- a/Projects/Scripts/Commands/DecorateMag.cs +++ b/Projects/Scripts/Commands/DecorateMag.cs @@ -1014,7 +1014,7 @@ namespace Server.Commands int indexOf = line.IndexOf(' '); - list.m_Type = ScriptCompiler.FindTypeByName(line.Substring(0, indexOf++), true); + list.m_Type = AssemblyHandler.FindTypeByName(line.Substring(0, indexOf++), true); if (list.m_Type == null) throw new ArgumentException($"Type not found for header: '{line}'"); diff --git a/Projects/Scripts/Commands/Docs.cs b/Projects/Scripts/Commands/Docs.cs index 90c37761a..dc4a627d5 100644 --- a/Projects/Scripts/Commands/Docs.cs +++ b/Projects/Scripts/Commands/Docs.cs @@ -667,7 +667,7 @@ namespace Server.Commands List assemblies = new List { Core.Assembly }; - foreach (Assembly asm in ScriptCompiler.Assemblies) + foreach (Assembly asm in AssemblyHandler.Assemblies) assemblies.Add(asm); Assembly[] asms = assemblies.ToArray(); diff --git a/Projects/Scripts/Commands/GenCategorization.cs b/Projects/Scripts/Commands/GenCategorization.cs index 6e1aaed50..88dd2533a 100644 --- a/Projects/Scripts/Commands/GenCategorization.cs +++ b/Projects/Scripts/Commands/GenCategorization.cs @@ -144,8 +144,8 @@ namespace Server.Commands AddTypes(Core.Assembly, types); - for (int i = 0; i < ScriptCompiler.Assemblies.Length; ++i) - AddTypes(ScriptCompiler.Assemblies[i], types); + for (int i = 0; i < AssemblyHandler.Assemblies.Length; ++i) + AddTypes(AssemblyHandler.Assemblies[i], types); m_RootItems = Load(types, "Data/items.cfg"); m_RootMobiles = Load(types, "Data/mobiles.cfg"); @@ -315,7 +315,7 @@ namespace Server.Commands for (int i = 0; i < split.Length; ++i) { - Type type = ScriptCompiler.FindTypeByName(split[i].Trim()); + Type type = AssemblyHandler.FindTypeByName(split[i].Trim()); if (type == null) Console.WriteLine("Match type not found ('{0}')", split[i].Trim()); diff --git a/Projects/Scripts/Commands/Generic/Commands/Commands.cs b/Projects/Scripts/Commands/Generic/Commands/Commands.cs index c69a1eea2..95e7de3f7 100644 --- a/Projects/Scripts/Commands/Generic/Commands/Commands.cs +++ b/Projects/Scripts/Commands/Generic/Commands/Commands.cs @@ -444,7 +444,7 @@ namespace Server.Commands.Generic { if (e.Length >= 1) { - Type t = ScriptCompiler.FindTypeByName(e.GetString(0)); + Type t = AssemblyHandler.FindTypeByName(e.GetString(0)); if (t == null) { @@ -1108,4 +1108,4 @@ namespace Server.Commands.Generic LogFailure("No house was found."); } } -} \ No newline at end of file +} diff --git a/Projects/Scripts/Commands/Generic/Implementors/ObjectConditional.cs b/Projects/Scripts/Commands/Generic/Implementors/ObjectConditional.cs index 502af3c1d..7650366f0 100644 --- a/Projects/Scripts/Commands/Generic/Implementors/ObjectConditional.cs +++ b/Projects/Scripts/Commands/Generic/Implementors/ObjectConditional.cs @@ -90,7 +90,7 @@ namespace Server.Commands.Generic int index = 0; - Type objectType = ScriptCompiler.FindTypeByName(args[offset + index], true); + Type objectType = AssemblyHandler.FindTypeByName(args[offset + index], true); if (objectType == null) throw new Exception($"No type with that name ({args[offset + index]}) was found."); diff --git a/Projects/Scripts/Commands/Profiling.cs b/Projects/Scripts/Commands/Profiling.cs index 0ab0ee23f..3cdde3201 100644 --- a/Projects/Scripts/Commands/Profiling.cs +++ b/Projects/Scripts/Commands/Profiling.cs @@ -290,7 +290,7 @@ namespace Server.Commands int count = bin.ReadInt32(); for (int i = 0; i < count; ++i) - types.Add(ScriptCompiler.FindTypeByFullName(bin.ReadString())); + types.Add(AssemblyHandler.FindTypeByFullName(bin.ReadString())); } long total = 0; diff --git a/Projects/Scripts/Commands/Properties.cs b/Projects/Scripts/Commands/Properties.cs index 6dc60e5c9..176cf75e6 100644 --- a/Projects/Scripts/Commands/Properties.cs +++ b/Projects/Scripts/Commands/Properties.cs @@ -418,7 +418,7 @@ namespace Server.Commands else if (IsType(type)) try { - toSet = ScriptCompiler.FindTypeByName(value); + toSet = AssemblyHandler.FindTypeByName(value); if (toSet == null) return "No type with that name was found."; diff --git a/Projects/Scripts/Engines/BulkOrders/Books/BOBLargeSubEntry.cs b/Projects/Scripts/Engines/BulkOrders/Books/BOBLargeSubEntry.cs index fdd0430a0..88e2bf298 100644 --- a/Projects/Scripts/Engines/BulkOrders/Books/BOBLargeSubEntry.cs +++ b/Projects/Scripts/Engines/BulkOrders/Books/BOBLargeSubEntry.cs @@ -23,7 +23,7 @@ namespace Server.Engines.BulkOrders string type = reader.ReadString(); if (type != null) - ItemType = ScriptCompiler.FindTypeByFullName(type); + ItemType = AssemblyHandler.FindTypeByFullName(type); AmountCur = reader.ReadEncodedInt(); Number = reader.ReadEncodedInt(); @@ -53,4 +53,4 @@ namespace Server.Engines.BulkOrders writer.WriteEncodedInt(Graphic); } } -} \ No newline at end of file +} diff --git a/Projects/Scripts/Engines/BulkOrders/Books/BOBSmallEntry.cs b/Projects/Scripts/Engines/BulkOrders/Books/BOBSmallEntry.cs index 789dc5913..f60bb0d27 100644 --- a/Projects/Scripts/Engines/BulkOrders/Books/BOBSmallEntry.cs +++ b/Projects/Scripts/Engines/BulkOrders/Books/BOBSmallEntry.cs @@ -32,7 +32,7 @@ namespace Server.Engines.BulkOrders string type = reader.ReadString(); if (type != null) - ItemType = ScriptCompiler.FindTypeByFullName(type); + ItemType = AssemblyHandler.FindTypeByFullName(type); RequireExceptional = reader.ReadBool(); @@ -97,4 +97,4 @@ namespace Server.Engines.BulkOrders writer.WriteEncodedInt(Price); } } -} \ No newline at end of file +} diff --git a/Projects/Scripts/Engines/BulkOrders/LargeBulkEntry.cs b/Projects/Scripts/Engines/BulkOrders/LargeBulkEntry.cs index cd64581a9..37c884a0e 100644 --- a/Projects/Scripts/Engines/BulkOrders/LargeBulkEntry.cs +++ b/Projects/Scripts/Engines/BulkOrders/LargeBulkEntry.cs @@ -104,7 +104,7 @@ namespace Server.Engines.BulkOrders string type = reader.ReadString(); if ( type != null ) - realType = ScriptCompiler.FindTypeByFullName( type ); + realType = AssemblyHandler.FindTypeByFullName( type ); Details = new SmallBulkEntry( realType, reader.ReadInt(), reader.ReadInt() ); } diff --git a/Projects/Scripts/Engines/BulkOrders/SmallBOD.cs b/Projects/Scripts/Engines/BulkOrders/SmallBOD.cs index ea84d4f05..7f2d85f3d 100644 --- a/Projects/Scripts/Engines/BulkOrders/SmallBOD.cs +++ b/Projects/Scripts/Engines/BulkOrders/SmallBOD.cs @@ -201,7 +201,7 @@ namespace Server.Engines.BulkOrders string type = reader.ReadString(); if (type != null) - Type = ScriptCompiler.FindTypeByFullName(type); + Type = AssemblyHandler.FindTypeByFullName(type); m_Number = reader.ReadInt(); Graphic = reader.ReadInt(); diff --git a/Projects/Scripts/Engines/BulkOrders/SmallBulkEntry.cs b/Projects/Scripts/Engines/BulkOrders/SmallBulkEntry.cs index 0d52ea1ec..d9b5b3e6c 100644 --- a/Projects/Scripts/Engines/BulkOrders/SmallBulkEntry.cs +++ b/Projects/Scripts/Engines/BulkOrders/SmallBulkEntry.cs @@ -71,7 +71,7 @@ namespace Server.Engines.BulkOrders if ( split.Length >= 2 ) { - Type type = ScriptCompiler.FindTypeByName( split[0] ); + Type type = AssemblyHandler.FindTypeByName( split[0] ); int graphic = Utility.ToInt32( split[split.Length - 1] ); if ( type != null && graphic > 0 ) diff --git a/Projects/Scripts/Engines/Doom/GauntletSpawner.cs b/Projects/Scripts/Engines/Doom/GauntletSpawner.cs index 4386f012e..57c4225aa 100644 --- a/Projects/Scripts/Engines/Doom/GauntletSpawner.cs +++ b/Projects/Scripts/Engines/Doom/GauntletSpawner.cs @@ -299,7 +299,7 @@ namespace Server.Engines.Doom if (TypeName == null) return; - Type type = ScriptCompiler.FindTypeByName(TypeName, true); + Type type = AssemblyHandler.FindTypeByName(TypeName, true); if (type == null) return; diff --git a/Projects/Scripts/Engines/Factions/Core/Reflector.cs b/Projects/Scripts/Engines/Factions/Core/Reflector.cs index 4ebba7c36..2bb26a161 100644 --- a/Projects/Scripts/Engines/Factions/Core/Reflector.cs +++ b/Projects/Scripts/Engines/Factions/Core/Reflector.cs @@ -49,12 +49,12 @@ namespace Server.Factions m_Factions = new List(); m_Towns = new List(); - Assembly[] asms = ScriptCompiler.Assemblies; + Assembly[] asms = AssemblyHandler.Assemblies; for (int i = 0; i < asms.Length; ++i) { Assembly asm = asms[i]; - TypeCache tc = ScriptCompiler.GetTypeCache(asm); + TypeCache tc = AssemblyHandler.GetTypeCache(asm); Type[] types = tc.Types; for (int j = 0; j < types.Length; ++j) @@ -75,4 +75,4 @@ namespace Server.Factions } } } -} \ No newline at end of file +} diff --git a/Projects/Scripts/Engines/MLQuests/Items/Teleporters.cs b/Projects/Scripts/Engines/MLQuests/Items/Teleporters.cs index dbd38a210..992ded808 100644 --- a/Projects/Scripts/Engines/MLQuests/Items/Teleporters.cs +++ b/Projects/Scripts/Engines/MLQuests/Items/Teleporters.cs @@ -88,7 +88,7 @@ namespace Server.Engines.MLQuests.Items string typeName = reader.ReadString(); if (typeName != null) - m_QuestType = ScriptCompiler.FindTypeByFullName(typeName, false); + m_QuestType = AssemblyHandler.FindTypeByFullName(typeName, false); Message = TextDefinition.Deserialize(reader); } @@ -186,7 +186,7 @@ namespace Server.Engines.MLQuests.Items string typeName = reader.ReadString(); if (typeName != null) - m_TicketType = ScriptCompiler.FindTypeByFullName(typeName, false); + m_TicketType = AssemblyHandler.FindTypeByFullName(typeName, false); Message = TextDefinition.Deserialize(reader); } diff --git a/Projects/Scripts/Engines/MLQuests/MLQuestSystem.cs b/Projects/Scripts/Engines/MLQuests/MLQuestSystem.cs index 67f02bb59..5535c8969 100644 --- a/Projects/Scripts/Engines/MLQuests/MLQuestSystem.cs +++ b/Projects/Scripts/Engines/MLQuests/MLQuestSystem.cs @@ -47,7 +47,7 @@ namespace Server.Engines.MLQuests string[] split = line.Split('\t'); - Type type = ScriptCompiler.FindTypeByName(split[0]); + Type type = AssemblyHandler.FindTypeByName(split[0]); if (type == null || !baseQuestType.IsAssignableFrom(type)) { @@ -76,7 +76,7 @@ namespace Server.Engines.MLQuests for (int i = 1; i < split.Length; ++i) { - Type questerType = ScriptCompiler.FindTypeByName(split[i]); + Type questerType = AssemblyHandler.FindTypeByName(split[i]); if (questerType == null || !baseQuesterType.IsAssignableFrom(questerType)) { @@ -157,7 +157,7 @@ namespace Server.Engines.MLQuests return; } - Type index = ScriptCompiler.FindTypeByName(e.GetString(0)); + Type index = AssemblyHandler.FindTypeByName(e.GetString(0)); if (index == null || !Quests.TryGetValue(index, out MLQuest quest)) { @@ -183,7 +183,7 @@ namespace Server.Engines.MLQuests return; } - Type index = ScriptCompiler.FindTypeByName(e.GetString(0)); + Type index = AssemblyHandler.FindTypeByName(e.GetString(0)); if (index == null || !Quests.TryGetValue(index, out MLQuest quest)) { @@ -638,7 +638,7 @@ namespace Server.Engines.MLQuests if (typeName == null) return null; // not serialized - Type questType = ScriptCompiler.FindTypeByFullName(typeName); + Type questType = AssemblyHandler.FindTypeByFullName(typeName); if (questType == null) return null; // no longer a type diff --git a/Projects/Scripts/Engines/Quests/Core/QuestSerializer.cs b/Projects/Scripts/Engines/Quests/Core/QuestSerializer.cs index 427df976a..fcec07493 100644 --- a/Projects/Scripts/Engines/Quests/Core/QuestSerializer.cs +++ b/Projects/Scripts/Engines/Quests/Core/QuestSerializer.cs @@ -63,7 +63,7 @@ namespace Server.Engines.Quests if (fullName == null) return null; - return ScriptCompiler.FindTypeByFullName(fullName, false); + return AssemblyHandler.FindTypeByFullName(fullName, false); } } } @@ -185,4 +185,4 @@ namespace Server.Engines.Quests } } } -} \ No newline at end of file +} diff --git a/Projects/Scripts/Engines/Spawner/SpawnerType.cs b/Projects/Scripts/Engines/Spawner/SpawnerType.cs index dd6582ed2..70d83b8d0 100644 --- a/Projects/Scripts/Engines/Spawner/SpawnerType.cs +++ b/Projects/Scripts/Engines/Spawner/SpawnerType.cs @@ -6,7 +6,7 @@ namespace Server.Mobiles { public static Type GetType(string name) { - return ScriptCompiler.FindTypeByName(name); + return AssemblyHandler.FindTypeByName(name); } } -} \ No newline at end of file +} diff --git a/Projects/Scripts/Gumps/AddGump.cs b/Projects/Scripts/Gumps/AddGump.cs index 118456163..58136f741 100644 --- a/Projects/Scripts/Gumps/AddGump.cs +++ b/Projects/Scripts/Gumps/AddGump.cs @@ -133,15 +133,15 @@ namespace Server.Gumps List results = new List(); Type[] types; - Assembly[] asms = ScriptCompiler.Assemblies; + Assembly[] asms = AssemblyHandler.Assemblies; for (int i = 0; i < asms.Length; ++i) { - types = ScriptCompiler.GetTypeCache(asms[i]).Types; + types = AssemblyHandler.GetTypeCache(asms[i]).Types; Match(match, types, results); } - types = ScriptCompiler.GetTypeCache(Core.Assembly).Types; + types = AssemblyHandler.GetTypeCache(Core.Assembly).Types; Match(match, types, results); results.Sort(new TypeNameComparer()); diff --git a/Projects/Scripts/Gumps/CategorizedAddGump.cs b/Projects/Scripts/Gumps/CategorizedAddGump.cs index 8a5b5ce50..8609a35e4 100644 --- a/Projects/Scripts/Gumps/CategorizedAddGump.cs +++ b/Projects/Scripts/Gumps/CategorizedAddGump.cs @@ -20,7 +20,7 @@ namespace Server.Gumps Parent = parent; if (xml.MoveToAttribute("type")) - Type = ScriptCompiler.FindTypeByFullName(xml.Value, false); + Type = AssemblyHandler.FindTypeByFullName(xml.Value, false); if (xml.MoveToAttribute("gfx")) ItemID = XmlConvert.ToInt32(xml.Value); diff --git a/Projects/Scripts/Items/Talismans/TalismanAttribute.cs b/Projects/Scripts/Items/Talismans/TalismanAttribute.cs index 971c0a9bf..43884bb1f 100644 --- a/Projects/Scripts/Items/Talismans/TalismanAttribute.cs +++ b/Projects/Scripts/Items/Talismans/TalismanAttribute.cs @@ -33,7 +33,7 @@ namespace Server.Items SaveFlag flags = (SaveFlag)reader.ReadEncodedInt(); if (GetSaveFlag(flags, SaveFlag.Type)) - Type = ScriptCompiler.FindTypeByFullName(reader.ReadString(), false); + Type = AssemblyHandler.FindTypeByFullName(reader.ReadString(), false); if (GetSaveFlag(flags, SaveFlag.Name)) Name = TextDefinition.Deserialize(reader); diff --git a/Projects/Scripts/Properties/PublishProfiles/Linux.pubxml b/Projects/Scripts/Properties/PublishProfiles/Linux.pubxml deleted file mode 100644 index a0558d267..000000000 --- a/Projects/Scripts/Properties/PublishProfiles/Linux.pubxml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - FileSystem - Release - Any CPU - netcoreapp3.0 - ../Assemblies - - diff --git a/Projects/Scripts/Properties/PublishProfiles/Windows.pubxml b/Projects/Scripts/Properties/PublishProfiles/Windows.pubxml deleted file mode 100644 index a0558d267..000000000 --- a/Projects/Scripts/Properties/PublishProfiles/Windows.pubxml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - FileSystem - Release - Any CPU - netcoreapp3.0 - ../Assemblies - - diff --git a/Projects/Scripts/Scripts.csproj b/Projects/Scripts/Scripts.csproj index fab983540..ec0097b1c 100644 --- a/Projects/Scripts/Scripts.csproj +++ b/Projects/Scripts/Scripts.csproj @@ -3,16 +3,11 @@ Server netcoreapp3.0 - - - NETCORE;NETSTANDARD Scripts.CS true true - ..\..\Distribution\Assemblies\ - ..\..\Distribution\Assemblies true x64 @@ -22,8 +17,7 @@ TRACE;DEBUG true false - ..\..\Distribution\Assemblies\ - ..\..\Distribution\Assemblies + ..\..\Distribution\Assemblies true x64 @@ -32,8 +26,7 @@ - - false + false diff --git a/Projects/Scripts/Spells/Base/SpellRegistry.cs b/Projects/Scripts/Spells/Base/SpellRegistry.cs index 0f985c93c..d147db96d 100644 --- a/Projects/Scripts/Spells/Base/SpellRegistry.cs +++ b/Projects/Scripts/Spells/Base/SpellRegistry.cs @@ -147,7 +147,7 @@ namespace Server.Spells { for (int i = 0; i < m_CircleNames.Length; ++i) { - Type t = ScriptCompiler.FindTypeByFullName($"Server.Spells.{m_CircleNames[i]}.{name}"); + Type t = AssemblyHandler.FindTypeByFullName($"Server.Spells.{m_CircleNames[i]}.{name}"); if (t?.IsSubclassOf(typeof(SpecialMove)) == false) { diff --git a/Projects/Server/Assemblies/System.IO.Pipelines.dll b/Projects/Server/Assemblies/System.IO.Pipelines.dll deleted file mode 100644 index a09ab12a868f7688f0378eabb0a5d6315034adab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48368 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 diff --git a/Projects/Server/Assemblies/rdrand64.dll b/Projects/Server/Assemblies/rdrand.dll similarity index 100% rename from Projects/Server/Assemblies/rdrand64.dll rename to Projects/Server/Assemblies/rdrand.dll diff --git a/Projects/Server/Assemblies/rdrand32.dll b/Projects/Server/Assemblies/rdrand32.dll deleted file mode 100644 index 67143266da6c0810e1598bdc520e155f6288bd0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8776 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 diff --git a/Projects/Server/Assemblies/zlib64.dll b/Projects/Server/Assemblies/zlib.dll similarity index 100% rename from Projects/Server/Assemblies/zlib64.dll rename to Projects/Server/Assemblies/zlib.dll diff --git a/Projects/Server/Assemblies/zlib32.dll b/Projects/Server/Assemblies/zlib32.dll deleted file mode 100644 index 90b0e6fbf249723d4342a9e9da9e37df2974a357..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 401920 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

ag1{c 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

q)J5|w& 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

7Oal z7j->e<@j=wIf`**2hRt_V1ngza>h=zB~J#s%V}Mc;CC(6)|Pk?@YDW|-&!I*Mi^EZ z_$(3_Lk$MRZolDGli%TXqc`LIuwyP3i4u>vGMaEHy*lg?--YuOFc(}gGz44-?*<%I zrMFZ|Qs+C^=-_;Z!zYgAv*FbG;2M+_(NQkHF&b4S* zF&OowIFqIH)Sz5tpnivr`eo6Cix41JeO+V$b+rxVa?ql>mIwmrg+MyE(BVKFN{d)1 zv2HSaxSGBMo`&*=?n|KRFy)=Nfmr0Cl^QMiLl4#CxKkTnXPy1cz-hCu4UCMp2bS6jH<=&SjjsIqQsp#wyukf!GG^ownB?nr{mI&GS?^VT{mp=@^6P5@!|Ixt z6Yh>+%a`$b-jO!%goY`N6}hNBRP!8a3fIt)D>~>Irhi|}~6i5Fh*s9Y| z5OK{OMYUdE&KtPr-f9bn|A1GIyila}Ul2-;ZzvzDGM9Vng~2{{!+aZDT_wX?sLxj- zaCk}LXsf(>VX+0vUd9`s|K6|X9cioZpymk;Sx~PD)jW*6;TlFdL3^)TYIJ~n_xU_N zT#Y!54j@)~2e1ySUI&~?#dkmp>A##Eu;=Rj9pFDd6ozk-NNIU?xD9`m3FX-@zKe&z z41D2(G8|v_^9%by$BQ|^8296ZRUa2W(s5-!Bm*!1`RoZ|R;oO1bOmdPcExgbg{xmz zO!%$d74yxmfQub!&mTvHUgtnV$~#$B(khzORMyv7W{A&hLG&|pg2Ntboin$32RwRg z>;D}grs;0795#_((JN>)bqLdd8(Ji>PL!o%o+QDEvP?QTl%vfjt?2HPS9HUGEQT@1 zE01!niDGDc{RuM1e>IgBU<_>y!NNZe`mMMwihGgD$=oC+ag)edA~*^T5AYeLq3R_X zK8p#t;2*62IcptCN8}Qb#CN&%i_6q?S^rEQ^BtM$$z4tL9Pav#3mSZwH(i)FotQVd zpQWoes4K{EA1C!{4k-=e9ONV^<=C}+GcbmKt_>vd&tSN~^b0{J(kc%VMsi!UfEdC* z)hP8U2X|T4U;!2fYRQ?%$U>rDA@>Oj!K|K^^{|#4ilor2LA^Sa<*^F7FVCU>&oVys z4rlfqjsUfBS7G-~7Zup?p1DjKawdwO&c)=ID6eYaP7f=65lrKP4arc&(q7G&+ZeG` zMeuLq+7C-`l{4`&O7uU&xns1%axFQO7AA8XFM>uto`XtM$WSK z+RLJk&Dh`?pnipOG8mQ2`VjZKQxM1!-3}d{?5I&mkxM*`?(S!Fk%xRyqYJMz3z5*^ zn+wH`ZNdLg-qB-!7 zkcP=hn;z^w*8lUHIA79I;aCd?-ua!e0&1>vpqYNOkKp|zYhO;IcS2V|PU~9Ov^(d8 ztl`TY*p+m}rUObJUS9?2o)rnNPJ>SARi0y!&=1kN&=0Ai8v5%*o5dn~Cj3Jj;r-!d z(lg^|o#PUCqzkrNm9N4od*cQ6PMssW)|yAt`mdlPVa(-KhtttPF~Ns%CY<3KfvXpv zhc+as6VdLh_g*Fh%p%ntoS&L%s}pG2o}1IMs&*_XcR!j*~8=2Fx zdStVnI~`8i*L;qxS)CQ4(?3c8K3vm_QXU`vq8!d2OT^o=vCGtxAUZ(kG17dIEo^Ox z_{9>=F}e5*IfOZ5c`B$eYv%ib%r{lt<=$Fd#A=?vAxY(;QR9>Asz>$$wwC;aEs)AD z>HGp{wbi3YE^S!tgYp61@>ex#rT*W9er-$?4#8I==p03KGIxK>IAu69`78vrG&XG_+kvb?&Aj7o- z+cVsSBaS(?=bh^1g*kZ+skBl8cU3Yny-3eSj_%+t*lpnO8qOG=uVqKADg5#=wHsTp z&fqx~kp${+dzSO1@(nQ#GPiEjs(y(e$+Ix1qJAW(+o>do;kN;3K1Aw54BE6Sl~lY` ztt*s+76Cm9#Y&cHVGu@(3dbMG*uE7O;%`?aJ0zDjjw@2*3jW4TqSKrJj4fd^;M;5_{MfCOT*H#Nv4VSas33>IB0EYY11Zx zY1%{((U}Uzh?uOr;>}jBCfztp4A|9`jzKd`+$p9GxrUJSOU|EznNYVe0l;1=e)NOe zV5uQK;N5#0PVx{}T^Z#SH$$ZWQR3VGg09915IP%YU>{}wJUIbAfvUSep}b&2CO*yK z{IKfds-xl<{3BGqiMOhw?RZv3MN&Ce=0JC!E|lC`;aoE{1(OSBm8bAUMrqXN8-BVA zpXB5hE=a>>s03bs$p6dX=u+51FL5qVmQ-%|4COuxOs*@mV*hx$d&^$;7N?fT!H94P zJJ)nUPN$LP`{9DqpYH?6N~bfIGvg6V9AYc39)jB)p}PnTZh*+h2&H@nJOjYj4<^)h z`gF*i!&M-Vgu@JwrTq{11omlv9Dm~weD(^7;LZ6TW#W)0d|x_9Q+cUH-5I#BE)Nr4 zAj7?7Jg3CdjIfkr>+W_Uk8?rR`1$TFdDfh^HUGrq2!A@t?uEf^&S1o`>Ls=8U#Dk0k+lp$tqjq9mi(w~mv?Qu%wW{AIqT`U?5Wj7{~o@YmR^NK>A% z;<7{L2tLarNAM_hB#Yp__rnn8wE?z2W5uXwfzGSV0)#uL0795RM|LbM>5v55JlwS^ z<9XC?6FU!@l|C(Dpc0?@b;iFjZ0EwuS9l}NN@z}sdG|1;Bb=N3gT;QzVrObCdJ9ef z-yenVIVpTXAEl#}Wx&ts(sr3tGS4WCZL>u`iI@)J;S4{x4PHeqRSqo=&$CgD*NStISY_CTP~AF` zIt^gej;sho6t7qO29roB4!GesE91c4qsW0QPhk<&56NeG#JS%@mvvL-gY#++E*N@! zC0_iMxj^zn_5G{}2J3r1vHg4i!vy+1VDpHUEr7da(cDW`*v`cV!KM4q^Z5aoG zANG}q7Xbiuv9ct(NuAs+7Xl28n+VzfxlDxv@tC}V-2~u`6;Hq$p)PH5>2zVag}=W! zUbRo0H`fZE@sLWn=+h-rPP4muAO6@y>JtLx2G( zTm2a6yjLQ)(6zM=Nej~Pj(BH#Fi0)1d5Fqn+&0QfoUTAVd0pxBikozDKt@1|I@IQj zd}p4$)%{X_L|0_5ErrjZNNOf{3VB9}=dplcGopL?^NK$Vex<$B4FO1B*OE^%FI(R^*6ER+33VJl;xVOEMy}RIE@YTKGt9vD1dBrI3 zWQp1#UWa!)uz}iwL0_sBqbwqb9Y7H>Q*XGC7bJJWagL=5f+d;hWjup3z2a3!2!s&U zArR9?SQV}ekD_u^7rGX;%65W$?rOQ;Z0&#TmVxjduno>5V|9pD-so|lcLf##1ZFGj zWGvuf5D#?y7Faen>?+{gorn19hhYw>a~D}_rpa2%-|fd*|2kJ^t%dj;$69akGgwPE z2GK9Q^T62pbz3nn)*!FanN|&21-I%g+3vt_Xkq0Av0FIeg%$xF`liNEz7f8&1D+D~ zK*sy3J9a6Wu@fT)-u6LG@d`FsKnT_vFKD0=1~h=-qJ~bmBt%H?w3?=)_Vth% zpvoobWRT5vx1Jtpdrl8kj&f@6w3UlmG(#}qRt#Vj1T88@SDaMCMG`K}yx;Fyd(TV) zsP(+(^ZVz==R;=iwb$iYYdz~(&w8F`JpY4PvZ z#(}?qz;_b(GRivSL=9EI{}x(C@g3xit7FCbJL1qE0MhT3%gd9p6>AQ+Xv7MzgXNL{ zHLmA!@T5F%ed*7=?ir@3%>z4(F_9D(ieC);bvV02zzljM&VOI-I~YZH-dW>vPMGK) zjN{b+s0=8@KAhJP?n>@>M+!448s!@z4^glp>tqwE&Ku%&ZhzdaGs{Q?*D^2IInjS5 znHIa+H!fLi>#lU12>Hk2FXCDz(n9Nu4S}oWDN5mSJXw1g(pq;31fV0~>NP=^l3As_ z3=+1}`Z^kpToS%^_dd1vD{^LHwRZpd6pWrRZdU}W zU|3(ba_$?qN`%--^l98mRB231mt$VhD#lta^($K47)2}fyS%-i1ogiGakCz=bW{fV z=l~(Q(swNXz`Tw#o}#Q8O(efTB9cjp&=8qS0c;tR`WdsuBLKSG=maMf)qaO~6|=>E zA;mZZVs^ye-_upoH?ISs216BC9G3eU#Lo|tN00U&C+XKSd?SMy9K|O%8@4h? z@DgmYNuY44P19`Mf6BbRoFnf&+{? zOZ4_R;$_N%AG^(|h=>q)`<4c5y2=6k^EW351rk8u2q8v}e<&117r^wfs@E*z&^K9? zC*Teor)*(k5{*b6wCa)Kq)Xi0mR*z||AG6^m#GZ0LQImS1^9e%x+UtzVtU4pVYhHE zv9IDrA_nhC39Csf@T`-G_>sb6c~>58Urqw65lxv!&)Q4NP+|U9{zZJT-Y?b4SN`?&=VTvS2-7&A(-pxk znBT_z7;M*__B8du$nkIlS~C*SvyA0z^qUeQ7D5o}efAA22=NNVS?GpsT`{^notmy2 zsQBs^6zSA{r6y>PI@&k5Z@r__W>FLCryN?SuQ76O+TGI6c5x6g0@p5b6T zqsBlyQi=_+!QCkSSw6TLeb-iR<@9?$hsH zQ_*{fK>)9SMThV;+d@!=v(3*sxEq;p&d)No!?_x6Txd^jUp@D|`U6^M4G|7vUX*d8 z#?BVhh~JtMT~P*zW@l1@U9P}LTHF=21i$HWcsc?eu?xUrkrnL~^qbi10JFpoBOXYp z=0rQ45A=ReKEMW&Gd_yWN-*1z_RCNl*mUYi_A2Geiir8t{WS9U?HX@xL98 zMqf_#PdMvqt_3+qP^I%Ot=_=w1kXFQdfwm14je@Mi24@+UohHVtLH&G7#*P1KPMkj zwfd*zgQnHf)FT*mWBo;4xEvqN@TZow7NQby&s;RjedUw7+gff;$qHN(9eW=JOMK@l zfG^#K|3#%#^Rrj%#{GQoYjo^*)LSNg31J}-#s53g>o$79cbV=vs`x2yZ(dg>pOSZCl+nRr-UH3hO9 z0)*GtZbOKNqa_gp4S+K!KRExA9rx^og1`%pxDv$s6<&?8Si3ANKt&e<-+IH=h}%0Tyak#V72OLINF55d7=%@89T zeD`)l2zg)^;tt91All|T+}8$=fi{cVVui%W@jQ*$FpIhp4D|H75vRc{zJNFm&9m`N zF$2sp0MPneC{xJ`dyMNvNg}D(>xrWQ%y%xhJ7% z_&bsAAWvfh;XVSv1UwPS4TLwK#06rbJv}Aj(Dx+COxr30C=KSt4HQR2G;tbV>>HU7c-4*?(HGda{t5W9leHD$+(>i1N$$*YhYVYPn9x)ot;^W~?T%9^v0zIf#OuPv*MbZY(en(dq zwdXhZl2=!pSY31y_S5+dt1H^`cdafuF$tnOb_rFk&owUA12uHVRx`9S(l3{OyDS%0K226*k z0zjp$5V5Q-I42eSq+9wF*LrI58Qht+xfD zR{u5yRF$(FHrg@P3+ic0U5)CIveuEWR4yCa1lccgS=V zvDWH(7Waz5(gu&>;Jd3IN773K>JWnK|zl%XChHnhLgP;$w#P(<*96c_B!phkmO)^&3qa(4G z+Qb*~G}f0=sMM!lTUqzrPA`m4{OLwt=)F)rIrv=}WTpghZq$1?i#H12h;IB3l$H*B z%5D7`^f};H%8XT%ivq_VoH!2T)qlS+bs63&DP=4-R!Mkp_mQvtykdBN(7(+rA#QSW zaTu#=RdG8dt13OMyKAP9U({soMw;u-$fil4yn(Ir{45a>&%H2Qu{vc1Nar z&@n=a{dgSryBo}!}RbPM6PJO0(mzcnER7*-;xAZbrzjeZSHpkj>* z)y_^tED^W&$QFuc%SvDxa(ZN|w6mo=jd4%N_z6VhiOr6+Gx8RT&4kFo52RMKHUlMS zVe5+R!1Llekt8>~i5b|cR~$FK&oc__xAY3!$K0t0p3^IS9onVU-wq;dPIc=QhoCMP z;;nXN!EDzodJY8ppO%x#`eJLJbbm|&cDA|f-pVC$=x)^$RTBicy`Z3H=B!ZnO+GA7?LU)Ao zD)#cld1mp)<0?M(k5pDzL*R##R#@pxuJOYsOS`L<6{lc#HEvMgZLkjJ*OOpV>V6R{ zmm>w6k7Jg1R!KFPndoMY>1;6w2Uf;zN2@O*8NAC2%*;}Q-k$P7#{0DsaZzQ0&erkhnSh;Ul)dq8;thf`lr$tB0t2R6vPr!>2*lK*=qL4Eb(M{^H zN9FVZrgYznHd;w(DU%vK$`-2058=k-*hXrnH-KBMS$T~q%K)rOZ<)<2)%3TPagj$^=h}-%1&y zQVKmOORbamHb0)y;8Kr_xl$Nn<8vDUAF8v1xPx&dlT1D60G?G-;og*@1uVSuQ@)_KfB z>yUKj=|rC8onncV2PTiD!bb=q2ZJxM9fwvQ;&Nb#H=$fpB~FW?SP8h%ABPucyS?Hj zS#-N0iy|JH*Vn%cw2jA_14}T0(6+aOF+fs@FB>$%D_%l!MmzbYhHS5IfSvonpRr{2^Z8 zMz3#{o&3{y@=abJJU^;>>f_1dILP!^F1+HQZq-llVvt!N8TQ8U0)_TCBY8qR`3`%W zkvuA%Jl!5jB=_l7{oVFx;>+m(`<0#11b5*T7iNn>FiW$=a4M3C7X#%3WZHf301DK) zh_dau?Zy?6%r(8tNi7r7m-JelJegGZlSppuSx?}Uagz2tNvl(h6SdHTpNza`EWaS} z+?Ng7Yy?*WJ7MV%xG>3B4x3ugN0|hM0;JG>cH^Fw{XANqI@*37qfZ?J&~%thAOxjm z1g)bBiJ);8Pgp~3THZhUM>Zv9xj|QJmWey@%VR*NK4lpwFq?i%h(#Qrw=DLM!EuDrK}M zrP@kauTsW%QXaHYe!!HT#H9hm1(cw#=ngAq7rL;+mbU{}ksDN4Pm*YtW&~@|F`P6niFUxXcT#|J3jGe^ zF%j)pvK!hFsh+$Dse)*9J@H6ST~Fk}+E`DN!Ma#aM8TR^PxQcgXkCcLlos;KA} z*AdXz)=!@lZt+6^8#DOur7>w`w%~aS1 zvGFLQFaVw%eiz|>Al|^mG}q1HRy)woVSg4bf!>3{F_#nSs#%gc0Me=<_{#HW93p_N zJf%m*mR8?KJWdk77|sPitoLW*uG{qzL|habP%5@yM=j4sobsp>LuEA66K=CS-J__( z=z@Xo`*I#&Gf0)g{p}8%hc>dIGAuwW%Qo=_ZkR&>;f6nkoAtVTQE;9w?H;U3c#w&t z;DgbD2$R8vmiz-99mYA+^#aXlaW|=y+wL6?qn*Hoj6)c#VAEOCwKdo<1j0I)TrteC zSByjk`4yj1*sxU^Ik=s;55$j=RXaJyO1>LoZ0ANNldNQV zy0CL2`J?YBLUPDl^|Y*Km|af`zMxC1o|VbN?c^7%WS*?N)y^!;u{8%zSzkzvz18XV z7qAhbcq4OU^TQ+u(B>5nSY_tPWYq|unqws|U~;?>d>JpRnvl`RkSz-K57RI#Ni z@fO|8Areo@>NzYzmya9@u|hs_^@tig26tR*?~bt7OIX}5%f(%6ukAk%vDY>OUlyQb zWH8n^VUw|az!Osq2#a%kqOk)MzK-|`7imn6ZjoZh!ZvKC@)3Jt>@txgM<5-s`w6_Z z6c|iBNUFFF?naa&qpV>71hK&(LV2Sq2!6wjvn=l=oCF7RAnzQs9s_YTffuQ;%h)#- zaHU``>v`{Y^1{MqIjOWJq!nqr$qIVfyOK?&i7m`3gJ7>4ir};KSc5j-%s*3Aa7(Pw zQ)sj$?=3XiuV7re zZTa)<=*@cBY~gM=JG5Peb_!IHcjKg1+$O1&8iih8Z1IuwlDW z+mfZvMLhbdg1Hx9B+`_uZ5dF7UVg$D*tl1b6?kJ|Ubu39XFR?y=w|*dREHR@{_CaY z>^5Ux6(*~{wk5}SvkLB9214kgZRyL3+EI;+_ZoPM;!68+bhnL>lIXZ>5^BX;um~V9 zwYD~VGpD;fVS3ZCEbU`mz-;8GS{zK&Osmc;F z(-Q<9YGkem3U}Q&LO^{$F2J%qjMTMlM2+!b;^H<#ULcEauD5Qcn<^}k^>g4_XVQuZ zrpYg5Fg?d5oP?V2<7Wp{0h zRei||jXp4&Q1 zwBW&whx(R)Q?Epn(m004A-l)uV}6&W-Ok+#tk=-21rq?Wn;jvWZILa0y}v6c<4)* zGg3#<`)2g2-3%?`+!cC_nfG-ZzH(RHyD9C_Xk9oNTQodb-S#XmT?Epvo;t6vbs1)9 zwkiM-?;P>XhiSy3uUm>5s4dn)$IyNxBx z2q#E|Xe4D_TWH;nXO7M?W2X1gHF#z&2rMWQ6zg*?a*axF{sHqYH0BI8LczQ}@M(0h zH}CNN^8z855Ja)jzkooqQxZn(Ck4rY=@`0;AZ#rMp!r8G?o?pVC9_|rMjJjAJ6eLr zq@P>(EUOgjT#_Wfh(+BVaSpVJLS5Tw^spzUkEA9Im=2L;)VCCvey_rGPE%}_=B$^q zluAsGl&Z|Ya<5qakcF3DGhV~pj?cx(KXqC|9~c1~a?J<6*gc?(nH@Ol?B0RN1MCiP zvn?&7I_PORZB+#bq_!51FE3pHg1*1X7+>YNEihE>msQ3in2{C90WG-Qg*z5VM7;8r zND90c?@odyeBsNriKT|H)R0)I-U+2prXjc!;adVDD1WgY2L|_{as=!)Gjh_tKffV#U?Db|c>hayr&Jhuz{?77Ly&r#4_n)yKGO|dlDWc#gQh8ED*8}8jm**& zWxfH`_s&m&T|4@VF@eM|wUl3`88Snfcn`Q2NfC>2s{$N&!BltPmQr6~wRav0QSmQH zAh^*qh~ZfAU|OmPQFpx_|9;WS^c!mZUaQllB;}qab=3}haD;`l_ z@ANI4Exrf-L~b&Dd^gS(e(TNO-&Z)>mu453p$ZK0_3~vYO&so$KJ+c_AXz*B;lhEn z-P_l}>VTxSyU6YoNb&+@;_0tq{0@nK!%wNP^=@n*Vl<4l%8k43Guk^2+qB8vf3bPU z4HyPM41WRqO}RR)Fp_VRrJ6b7gKCQ`Wy6_7s-)JiVj`T3`EnIHL z0<_K4fqxkUss%nn?wr%}X0*ko_~-+=djBA>B$My60@f9|&p2FxWPMz>172Mpa(*gY z1>|uM&Dp0%-!w2!fXS1wd19kz13kj)=9oU}$2i_Q>SKTaag`FU+Q0 zK*e#oXra#iUy-O&i60wvKIQKGg;6I14u;5hyp9Pnb!* zFlB*1LYU#rI0RX0>`-GvZZc6pKNzw;xGus}DXKdYHA^}d`8}ip8}b{_LZE;(j!6JS zvjG_fPr10~|IJwWKB|1dLLLb&xxz!|yRGn^%#ejo{YOcB>VqE}pEjUtz^8kAlA=UD zHa>ik6n!HB=K1$ogV&2)8jF5MMg||f*Ad897VZEye>hx zesiu{zhK1)XG_|aUhwkiFDUb+EHo!QMX`{ld5OC&d>AGlkv`_6SNNV<7e0%3ZOg7; zxF!67%XvbT3+$!b$KL#7OxMpa5M*G%bp0zHzZBC|@g%!H-_EZ3ON;@{sDb8H)-?xwLk-0 zct;qJr7oQz0*6ruHh8@s<5)J`tN1aTFQ5)+BTIHbhbowAupWQ5Lt|Fc4c<0J9 zBjE+$EeL`w-OryD*XMt=u8S<6e_JAp=l>m@_QU3yA({Z~(~y6J%tVktVUZH6uj#K<*$lmm!$k#9KrcoYNTUu5+b znTj>~Xksd%OZOE9obzO;Nl}^j(KnpOqq`E5Vs(#|sh`(D?XzC#F3d$%O`IdO}}x+MYA5V$KbsT$)c+pSDYl@6c8|G`p< z14y5UEIu|dV{B}PC8lm=rBww*?u2L@J;(dwKPObK#`{ROBsoSq6O(LjV&V^pscMX# zN=%B4k)D{U#%OW3BsoUk?3N_Q$eWlH8>8`7YD_go6WWA3*W?s(U|zf;n?h#s0ag?a z&E@99Nz0PqVt#op1P!=90$ethy7lF`;AM)gWh_!=heX^Khr=fl#o-9dFt-z7@9U|( zGF?~1r15cS_)WjX8axWBFtpieOT#~e$2;8PM`C)jQ%b`dl{6eKVvcC_WR_>mW{a?M zwMF1s{eL4FYFz7N2EXhw(3`mNha_Y4m9hgFUgSm=f)BfKM$vEz$#{X#)2{vC=lIRv zRZ@c37l9$M!YBU4Djd@Bz4d$eW4gW;@5W7@?U3j{00!FNb^OZaG`kNY*$3$bYDROK z>_fAgt_qNA90v?T1}#FT4drSy1fqErp@)VcFy0I8FhI#wZllQ^MmH^J>pP4OY z@WE&@?{DLQR7&$}PbgZhB8f&C%0wHV5!oxfAo^dPZQhe)z-!qGcT@6cWFD|)Sp5;db6O<%kE2)T6wV0kTKP9*X~K-| zT6#t8?PHhqjyRhfqo>!7EAV%8Icmq>97u`6q;!a}$NXp5VNHVR!r8oilq}4iCF*f< zz(%_;AAT1s*b(y~J@F(4f2Y9>Ph&@gxFUy(0~f%%^iVBQ!k=Wr;ig%S$5GKV)U?wP zNYCH(;yy^GBXGs|g2R#Jc=6A8gQTYp_jWYL+eL2Yp?)XoK4gC9IepXfD6DV$HU5gS z`Pjos-X4-GDi)CE5mmp!nJUCEjuWw&t@Ni&#OT!`y1@pfIrMd-LEPvwN#8UEPukkX z;D!a*vK>?Ob=M;Sa+cMn!N~+SJOL&Qn&isn(35-uSo)^N@#J|&3#H+d0clcwZ)Wn; z_hzM9=meH4c&gx8IFm4^CFdW2#p5vqs$Zywo>wo4Cj_z;~Wv>Lzu6pTG593r~BPJJ7NQ2JWt4W6rkYm05Helh)K zB;V5T%3gwTu11q~*7eXboFM|8TeK+Mx9A>K?3M;&w{HFfrL@q0;wwytLhOUFmXPJ0 zG+i6@&{jNpb}#y_=Tr?mT(fyS^c>P~f85hplYu}Lcrgku@XJUEry+Y}tYfZ`>)3;X z!Y~Qk!S@Z>Tt=f_Z?dHss`yM?`d5Ic_JU^-b>?%%dqMU2K4vgYmfRA?BO2tLB@y!1?B=#pXM&Qw@`vax>ehuO*^bv(5%Cp7mr* zKWF`1w^?T~d(NTORu{hG)6S{1rk&H(bJ~e&v1w<9*t8Q|)iq-sbB$cbj&Rxu-KD0T z#S^EU?>(lSz%rDX#4ynJzQ)drW}emm4`%-7W8}>1n>g)0SF01KQ5Q|d9BcKHxPa{S zU!Ji3O}YLLYoTGtfmyHbuhxHmwf@st4w{8?SpOFN)3!DFol*ko8-7n-i@A*`h?q-j zIc^Fyj23gkW1fRGn(_Qv)}!cK1Qd(I;4mk1wYd;c0x{%`kevQcT;Y$0hL0s@wCk$O zotVU$u??|3iC`(3~a^a;s}3|qLzcvq01cM50a&`pFf?%MkrJAk4ynN z8;u8#>GfmTLtFyUL+ra;b$WSq1NsYijjKG2T2z)fm*^tqqt0FTJG3fc=Hg-L! zCc~U+lY~@#6NerrHVN~zJh^`ue+|Q6?vyF$_J&R(dEA%vu+t&0r zo4ukC5-VdHXE3-U$8%nLY%ga>;yyT}uYrBiL)62m-kG5WJfk>iUp2QAuUK+3r#5R% zqa2l1iY`5;{O!SQa`W_mXh@`hYDN+;$jF;Ip54as2v=4wAA$!Q(~R97IW>V}kPHA% zSvc5PQ={pR%f_NICGu|)AcAWHlz?XzKp%{j0Nv8i>cd7~Ajz}#*jut+Y}aUxW2i2n z^r{KnMBIp>>{F^5i~aAAq#7n%#qFJ-?z`&t)LOOT!@@Ldt%aYdIP)rSQntMXBamHmR@O$c~wO z2E&$Wn#`t4&H_@AUWjuiaXyl1m~tUT2}9t=&^(SoV_N-7XcZ0iwVMLV zWHq%t|3IuZ0^aYyq{vQL<}s8p6nT^YO!b`5La<@B@J=F(LL)+Ntq2ghZ{LU>ay4N1 z0)|}Ed2$J=^{s`jBL=E9j=_8>1nx}yg@d5OGD(b;0Bh)HYL}e4=j$%iVzc=|JFjZNcW+W*s`2%PHH~h;BE1gao%2> zP1fR6$lLGWG~=Y_Y~Wp<`%+mnwnDGapHEn!t*zvIWRr?9nr#8u`X`dPLzg0SO<$PM z_326Iu5SCHgs$vq0R1_HP7OPEgV^|T-?iw<_pi66RuQ_7Mj{5IN1mjPMU|jcEBV-Y!vtLnw zykkm&3|Qq5i|0U7%i-sxmlonRo2X7MW+c)V8Q?mVPRQ9^5&C?`8kzM0!SL@G%z%viTcNF+s(FER=KYvd&Kn1WH*Aj->qZe!2FynVQEvx(=~+U=te z6v??d`_``q!S{*a*>o`Y>E+H7ps=A^LH{9qT-cQAfOXq^@%N)j1i81{KPi8tRM0qK zB;$r-vSdUiBkt!^mo?1qjZ$a<%`D7Rx|QC$mwYA$jNS%OMX7jj8s1VNkSd=rERfnX z)$NEN4om}5%kh!~^=@PBcij$uT8XG+Vq=f`z5qP4J_{aIzBp6fH85`V-0V+XcngC# zz&;oEq~O>r@2ruT=5YtaWEh7bg4hYhx393_Q00rP@}oVsqP+ZWl}A9Z%$YNzxb_`vhJfy?cs0B(#7+*LOA6d%)F9TFfUvpDYu@G3w;ji$#D@~y zBU(mU7?FR#GP#27b78DViPwA-^0ru!GCf1ALlJQCO&vf}r~!9*cIyML+_kXdaQ=Zx zJwt+)ABA2NJwbfGPX53jD9_t7CYhNApfrEV#MwT_to(+IBoOry5F@zjn6J-mKrBqE zhn-Mqv?CsLaK8h_d+^~OY<01J@Hy0s!630`mzqNajkS5r8do!@8&v5$fR>6gBQOf^ z0tx>Jb2|a$PW?80iW`v&5Gnfb!bvu$p0i6P8~Y)!Ksa+mw+?%DFS`Nq=Sk+6mjNt{ zK8-=fZJzUb#SSzZ=si97u?wJhwlDuMlHysuqb6xGgzy=)1 z0MCVRSGc$@t1NyURdyZ}{CX_^Omh)$JwbpJ#Y}6fZvvi}cP0U7(=}c%-f2$9z1wy< z;5%R{Im6*8I=v*tm_+qRLvZ9eji>qKD;_U2q60sC; zz{N#Ix^qDhjA=vY%o6V+xNwXvnc1r-G6cA~cpfnKO!@hcH0!L2w7Fc5ITHk#avo%#&sWiAK4VkhVe9p)9c z(HH1xqo|?d{?i6_o;gsY(+N=Ec~F(P!r5pP?|_FS1SWdJ5qxN;>rNmo&~>`L z{COaWUc3V+0Y#zSj#UFZz`gp@la1{jXHB*_ov5Ss0K{V~^f(ut)cfJEtQi@>2?p+| z1jA81BX9z~_usHcMR$U4(L;A|oCEfJww4N)kq+=0&~yZKM_?UzA;le!$-1q@DgkNB zG#ViamsTU@gph@cW!SYSvnqY(LNxgPFes3WJuh;HI`|%tu=s*L=T_IGg?b-#ErgKB z_UqdI1R@Z(@iXQk5^kpDYY~Yd7!9g;$=A+%?W-lKXRp{K5bya6$TkA)6v)eg#Fb zheBdCNME)J3YTbVOp$o&U(_y6T1I}bS+XkZzE_g4SvHj3)mH{bTCyhI)WbCswyFB9zUxEFr0`1iK2-v) zhd5ds14@&OO{^^cNd7KKPp|{z{=nI&yMBNnm}I==F_}3atlncOg;~hz{em97FR=P> zx!#vqy}wDpoY4E|LDhS#v|h$JeH(#7fSE2`f=92A(1&j#Ec)6U^=-dy@(EmGsvhEq zfm$C?;%%zUDZ4Uc4r9(!E`4n_a)7E|Fth820bzq3(%o=hqLBd^NI@M>g3^<8MA-2WuL+CjPGL>zt77}_1 zOJoBWo&qU=szZfn0^Cnx6RLsyhNS0ZRs9+!!HPg}zGni>gzIjre{!^@c%YKN4TGqf zDm_(+tcVZ_6|nZaV$+opTNYMsls7|gku7wfkN z()lJ9p$e>3vI&2dGbkooRm9ipAs`9vOJ&030k;6tWe*^$rPg$JR6f1 zl79+Dll-T_cNw@-;g8HVOI-O!N?`_pEoP_UFN|i22OGIQ-vSGuyZ(TqZJ-rpVDZo! zm*u1!c|n~knp8R8s+HKtlTx#sEB3)&i+~axS}z@LW`RwdFQG`JfQkGdwgxx&Lg#*q zmrI~eKY^GmPM@~^8J{}tr`?>}*d1V< z6^@>we?7$6Fd1S32n zpT72P|CY)AJ&lyh^{-TM zwBkAiAo}M=ZqIg8stU9phCSOCIoY*MgaE$Hdy~UAC*TEv3bU1LUk`CGtW;dv)Fn_c z`Uf%ZS&mWE$o`qWmP^+reTR{J5$U5GG2bG6tXHdF$86XSNoMAL7WtE4xwd{0>c^T% z{RmFvzd-#w26j0J?OV~F|5LoQd-rGwXTHstLDLq9>v@4*FxxOjkA4^q9dtr~y5CcMmh zBzAd4v1%iM&R+Fri_S{WR6#6ZnI9#aL#zXJI=mKs^iow2|Is626WdD2$5L{sSZyBe zZ!MS@H}Z?Us!fUI4|80A<%Q@OvHV`VTZ@@9A{R5{$cf9D=@&0&+^IlCivPiK2LI!X zwRo%5;w8Y9P|mVCcLQMUzKQ&OkAgLk`da)Sg$0?w&s{J8y9UA#+9TWiwB*+;@-r7< zyuhrz7H9<_r=fa`f8;e++*?64@}Ook=N|xf3LP(4=e*ap;wz4`xT|(tWIP7I=DNXv zAA=!Ak+6>W#w|wXAGB>@OMfkEf#w<()Wz-Q5Zt703!bkDWO$Ze&>n;Fk;8LDd+Ztf z2G1{A#t~o${z=Z^HKjp(0*tCJ9dY>6EGEk!xkLKq5bB0F1+YYBg1n7x_+tY zro9CYA8<9x6W+)oF>~bHW5G|rcOU1mG82q*aeKygu>5**@FN~frlUGG(-{r?!9bgH z>1{U6d<3VCQ@_HgsGulwanh89mHJ?^0N8XnRb-BuLs|F>NOA0*>}m$hwT|6hv9ezR zW}%41mEYIX-b)WHrHr&FN7*_7WAW-09Wb*n^Ig6KAN?>ZdqD>K4@TaA52BaH81 zFow6U8WNuTBh~jo=?2rgS^7MecxW2}uJKm0R!=Xwtv|*e_(1oHyKaQZ9~h6`s*UDJ zGy-?Pldo2PGxErXtL=xr_CqH;T;c{Jt<<6`EnA*K9pMWq+^|`Dd#zOUZ~708%RW7{ z48P&lY$Kdt_jceV+wKjwjH0oG|vHn6%$X^ehd$=N`-Y&D@GqQI647 z)^7_rh~=WX9uUE*;z@kP5GtXn-(ANYp_Wbnm1&$I6}FI|OOrg zE#eMntKTNCVq3&q(jt!9BhZl^7I8_0$~`z>h$hsgIFK@Pn#hDtFeTh?y`i;K`QfMb@C z>j*QJs#HqR5{j+F4d7<#G9l4$WvwCYf(&WkXUJi}UU@~L-JAOM5@liqQk|b@_m*$j zz2)UM$Q-chP(~Ewfn&xx+!Ns>cY}tx*^y;gyyfqL5gb(P%4R^8l4@h98WLWp z8{zq)^DBXp^D7P9IAowZS0oy^b(><@*96nXe`t!g_wF{ua6TtZer&9u_6DYJgMklq z=alK2G-0zB`aKDzZ)=GXp0~8nhZw|*7djm!*b6>T1EPJn8u-t5mw~rDm-jw}l;<|w)5$6TBWj*I;@FvL{WC`-@muT>|mh)&^ zd+j0HA#F5ZNzE`R3FdCC2Z<}T37gd)+l0+Hg&xVeVG)c9u|8=p%esyB&$nY6fPUF_ zY#+PApJB&l$m+queYPbVaioVO+b6pdE!k`{KHG>*5(jmlRA;E}OWepH+6?Jt#zq2% zeRK6aE@j5XMa9L%q2Yd7%^l)1%-D$Nmoa0T0$6P`HfFo{982(cj{WWmE?{CJ%-Aq2 zOBNa1_zfpLgdS7YKB`--{{bdO^1i>~gEVk*X!SqiaZ(;Sp$R=BkFb}v*E$tA-ntPe z(A_$VUc6OZIEhk1V#tGAHw%nSL<3Mwbu8r)1JNw#g@SM|a#<_0)7&V#z;0aNgAMK{ zc(K7Xwz1;R16s~3O?{q^6$Q7heQyj{6poPE4hWS+*jpK3SQ(Nf7-29&+^&rH_1Si1 zB$;u$GQR!4u`8pdU0?eg{$9eaj2~@duLQd?CMVdH5qN1=##(TUk6D7r;>xa!j~>{S zG0R1EWm_@NIHLYTc4c70z{GGI6swhBgu$Uzi>?8mEkpr|3~);n;nCE;NLldaNd`$- z32Pzx)HBq2!~8NVa?JihEy6$rXZSy0xnNl^M#lF@Fhft%u0bIu+Wb$jlt4=uU#tPq z#-~JkvV^RyKf3E}J#Ws3`{exN%Awq<~o(e076EOCKSfPR?ZF4d$ zSOSF9|CDG_HUSxw<(N%dNLxu;rhR$Z^5Lsrl(t;;2;fVgE!ty>9kl3+v<_8cD@`xd zP`1|CWad#x8u$rh<~x$i@FjuFknQSeEd??YTd@VPLR_)Iop|kTE|n8&0@SBgQXkgY zo%(R#F~R(xq2 zl4yllUK-GLCmpXy(jk`%a|A?A`B3vMl@NRZ;HD0EPj;h0%ig7 z7L?IpTWJyfApckfD=o-3=UY}n9q-3%#Xz5wx$ALV9@0Z+j7=;gS0wDlq~-!r%9_5= zax0~d)gid4#L?>V9lFzksH=yq(Al>kW>Dr@Kf=IT=2}aV6kTjeyIGe2kmjwyciNZX zz`P5vORH|cj`5d|mOOeNEw*AXLq=8_BeAflPb9Aq=%r&Ya}SD*A{iAR(vL_Gc4S>_ zvb7{>b((FmwUi5M5{|jcIJlQF+j7cVSxVpmEJQwf;$c@x0}fll?9hDAp?4XP6e#;MG5-0G!#&#Zo!KPlDKO6sI8zmhc zmI&pjDmGTKQR>1S(Rf}7xE#P z(QJr0vw#KJ1%b>(8g9ahX*C=G+^dXy4Q?)}H~P!VP{2b5hIkL+?Q&KSL2T^InttLn zzKy6vJfuxKWpz&9fO&LU{8#L`FZ={8B^Obrk6Pt{!kj1q?%KQYg^j2 zErZM{NGQ6n#BEMNN&^Ivjqth(;|+iBDhO%ZC|u=f_ctPhA>2Gv=7r}+`q733!bj<+ z9PAxYQK}iG5ETx-A(w{pu;p1={X2xR0-DUgU@|HBkvuI6I5sLn2??C8??}zEPcAT&B=h6UQyu_cz{fl{a`Blu^leo z;5XP`M0a^w$QdXy<)@&)(79)pYe51sShn;syL!@|NN1dTOm&n7rpp-E1I2;T7;0>J)kclm zq@R}eUnZUu1hN)qi(kdFJ%MakbAu}@THnR`O`K~QdSHyObgY@q3NFtAU-%T#G3Rmu z+r?YAVgi@DW$hTgKCqmDCOZui>DjmV3Q-tuY80A^%!EUXpqy+(eknnq!3WSP?P%H~ z`FZCtTEooZ(};!ossqHm__WckZFb^yGhPA96wa2PLFHV)(*1euJ@2VgZ8Dz%PR`NR zy$n5wfNe{;?r+%$VFH4QBmODlr~Y>nRwsjr!<5Qlj5FR0pG!5GgU4=vU?+mOu052M znso*-T$B7)mx&udn98xd?~uW*0#}K$xfr!r_+2p{uPQEVa9=bb_$mZfj4R*uy9?by zv0sh#V6FFH8^UtqWmzBVTn1MF3sQd^85IR2wijvIoG|vGcWtq)z}vO zutI}dqKE15ae9(x--@GzD!x=^m*yYY%AyEO!p=DxLDlBso%QV8kB~?0ptZ)BKR>qw zHzbSQdHX=_ZkA+?^qN$yMcZixsbIl}k4_!ziu{uCv)#8WYS-VluDM{9W zycYimK;||l0i{ky(y`pk@+80jv!U-V0ZIYPNSfjL^RLmaMav|H(HAB+n=^hy`p)DY z%*`MV7LnLVvbCO&U2Z4&SnebTtevFA+DW#<9r*nCoT0xUAmq%07!l}oFd6u$nsPIq$z3TgX*;=hwg&e$tw|2S!)lf&X_#X?z?( zcH+<>)b2UFKWd{szR2B{dZELy$}(`sK};CqrT|^21;MoiNECI^lhNraP<`!1@7c( zakDqJK@C9cdVr~XQ8oNp0g4?2ZeILvHiu550s<5~o4n}I4DENXIrr((&z=#^Kakhd z(Sa#Pgm>$*tZc=zPg}JfMa=A5^|fs%4}CNU&q+N*4}+c)OKvuz-cnAqOJwHA6z8KnH-2J%ECS>>Wd_$_M!B0I-HXRBt>k9T}=YY^6^_V-v^E*kgn^ zuKPdHe%Iyfgmakw_hK)KT3rBMMP+m1Dr5p;M>nwx=&4NYp1FUi`f8Pk!00xi1bpgr zuUTa-6OAgLAsrw><}7PA))G23Gzxz_U5jsZp42zB0}xL~%_zf^m|&y$TE3}LYV;3! zx|U3|DwU(>Jn3m)GOR3Nni8_Bj4O^9>p1?Z6=M_YjHFujbrK?@G4CyF*8jSASlMi2 zpVh55WUDI=t2(XumcZ(=O3yos%JsF!QK7z0unVU!`=^Y9#yX|}pRDCKK+e21?-4`R zpn$S#<^q{|cw ziPgF~p#^7P`Yp746i02(NfedHs{?KICneezDs;9-l?@uIf_5zkhyF1CYNh31oEq)j z3tpzwBDjzcg0B0PhaeU9wCAly?#*;aMzq-Fo)uH(dP#6vU59w zkAUb8!QGV^1;y?qh|-yK=8mjEu0Xrdloy6ea>aH61YAciZnsVba(5HUze#B+?6RH= z%R5VSv1J|UN^z$9H^8Tkaf8J*ad_?`{7b~IbU*$%NxTIrreo;e1K$~b6K0GjH@dnga`&jb2k zF(IDg>R1jQ1xr;2-&x#WFT}dHjJVf z-y_8gB>0pZrz3%WCc=dvSgx1|h%lKrV%-p3lI5M{Es@;?mko(o?m%`K?$FTXe~ndl z$u7&oRgCejXvK8ELK7%1F`>Vh6DuwX01cQi>6{RQG4^4^f{*r}jy=m-o8&)$92w-s zPX8E(iAXNjDHw(HGVu$UkQMAYws@52n#Mk6qAi?Jz=(*iuAtP;|3Rr}s*yaI|43Z;A$BOM3kbb zvP5c{$8)jRG*orQ<5hQ{^sE96d@!Okv3kd5}wK~Y5k;rk|r zafwYz-*Gp@yEsB@M#Tc-76l`0Np-pxkcNkHTCx7(d1P!EyYIx(r9;7*t;mFb>_GPV z7M!#z8s(4PTfK;)sWIfdZj*%$vR?4u{l@@w%uJ{O_F9kt?+Uuqae+RM?w1JUnzTF z6r|f@QIH_kV+f=hd1xc9iVdik#~@f}mX&!K9b#k=qVD1@g7gmiYa$iGA6@%n(1qIN zr)Bsfkr4jqC{MgnLjCop)qz6}dtDo~qzQ*M-fQH!EeF&i3(`#;2YvECOZnGB9dd{} zTy-t}*zslp*`+07A4UveWc83AIRWWZh9bNdalXoQr#SFKtb!ex1s<(F2m7aCG7}E! zUaN|dXufzgN78Dnix72h*lOF+hP{9v(L$85${18&;|Y|Q-@Qq#{!hrkW?K>6%ktrS zU33%M!Z2n>Whbn%!&F%S>c&B-Lw81;!PgM=?OH&Ju#S->#Qh1XIdSa-bl&dRJ&aEG zSiFUuJzEfGJy?tzu&>+%r_wT7jlPZJ=LM2eFg6^n!2g0gXuS6t`F*uh9(k~D#Lk7! z!Crtnj*0`7^?UnVj+Mh>wXuh?=i22t4uATzCg%<2T}d5>j1#!P9>@-!OJAH)yS*&p zghFI>-$~QZ5H81NEqa%K2EdVvcxIBVE6_JerfNV_lEW+kv$+PreD7S{XR7DqqLYac z$Pn(WXTzB=?48Ca7I!6gyoFot@Y93V86T~Mw>&!mMX&)-1RF*p1RSL8(`-JjOS%xtgucsZ9GzUH_kr{WAbk`IMIq5w2@#=+!nH!_>G~Ax zy358D5ApY%ghA;zgje`1fJzDgF2^m{)AAN<&Md@RhDZt$p834mpHdsN2Nx1v^J9?kC2_3J+I> zwb`Y!N+?#k5yv7BjF=PBSbJ%)B7ggh1pDh&d%0+jJxF4svc;pfv4`DT+{rWv?r&A` zSc_vWYB5XoaBZx}qpApwW7$>@ha~p!!B~4au^!Hg6~0XszC!g-9?ME)lQ{{Uw3-|d zE9F+DW?4<5lh8^gcCurl-N|^P?=wwya@Vir7$r6u?9pfmFPLZd3S5B;1S@+lOM!#u zn$)JE3rP{@>Y@t>HUr`aCu}xTB-Z1k3M9gDAcn@Wik#1^A}5h)5Qw|1$kLasD4~YwwqA>(d@>k+biHm~J^>L`;ioWRC85H&TvG z;`eSf@TQhR?aS7{t9#vBh-1eio%Sdu6i>i{MpO?hNcb2pyZLj9ZI`@FC+&GEsZyC6j|%wB6*TL zyJMw@_XmUZrK%gMPI+t{Eat{x8xPoC1h2EQbu~C0=wQlho#*X<@SS@gw#b)ai|x?F zQ*1%K_E~I3-4dzR4r7C(S{ec1I{iB%`Os!71*z8w*0cCDibA0c1vZqV6On{-J`_RF zX2*2df7Z6ViKM)ig%n}HU?V|jWo(bFZ@E8@OY&!W5KS$uuy%sm5jbs4VX62=Ho5`n zeyTW)C+Ny>7Pmf@P;=x)7|nGMp5Tlvq7JFr|26EAdw#>J)bHxwy!19n`MHd>)Ik_$|5h=5Nih{Vnen)O*Ro#T#mC63p z!#CvUDOtbZO)h^WesEW5(&4tlyAGcSPJEp}XrTotY4*-~EG6qj+#7eamg8OJ92j~1 z7rgZqxGK0T7ehZ_6f5w*`u3qCH?*uy$&y$6A|u3e*CEc$l`8A2D(lP4^9b`$j~Q#L z9XS))60Kgn+O_>hqZjzyiT|BdT20HCDs4qW zl{P2ED?glTsnQPa{)JTO-90gy;czTlUZtJdJ@FQZa#m(kX>Z(}>v|h?HCAaiMjy?6 zv5nZb18fOL@$kzp@7aD?+EAxyHnW;D6IEztg0 z;YDzQ!K#eFhfW*A^cb~IqE^^HFqMUen8g=Ld`V`py99jtw{GA7P%xQUrAji73(ps< zb8fM)O;l{nIH{OhT+6kAI33n{fV8fxbT+IrGIsfkv2G!w-7@Kq_iP?cx%)M}j;~4c ze+82Ek&v{*Va)gs7p0DWe@Sxk2jiRZ)QG31@y7xg4A8wlf7ke9@F0Zxql=O|4ja($ zF0=&lpa`(@TG5;5c99MZ0}R#L;SvqX%?t=@a>S>nmPgc@yHI9GU8X@+AB7AxGzF$deI?>8MEQ%39yVn zn4^B!S|uQd%8iQQp(85>K>*r?9S7hYiu4V3MVEhw6ZhXSYq;gQ3@&wYG2)1MaSSFR zg>D_Mu#tj4o)E>;o>Kw0FL_?;KAAmf1ZKp zz*%@+L6KPWZte1qLB2osA6iqARDZy~f6cJ*gBH2Rzoo5Oi5i?cYYQBKPwe#BF8j86DisyJRM&evo9 z<@0Ru37;7!duL2gbj|k@1Vx}vSW{FLy?+Ic7lB;J&{fEdL=Ma=7Ra;5@QZW?_R_=> z9!VKf*1==eE_%5XL@@=Y7Jxe_o1aoSFPR=fofl=kTq0-(Y%K6Mq2m8>UUo^KYw=$7 zOquI8wwEGIrE#)s|Ht`JIMW{49By@mk2yzngg;0b`C3N1bCEu# zuo7J(4zlzCmED}O66srMQN@HUs7(7^xGDqYb=KVG@0tW@liO(AFGgTyTIeq;c|^D> z{GLnO+)#y~smhRvDg4|}1=9!z=d`w(F?)V`a9yvf?;T~!&|t2oDds>1K4 z;K^=C+fw8nML>|vYP+Mz?I?t;P?`i#+2F{{8;fI<1I&Q`iir&9NV_)J0kSZEhVv($ zZ?wvXk9Iy3VLnt4&-a4kUWWble`O-e`v*;wEoXSbf&Ny`t!#?rFqqw8d4YN>RTfji zvY0FX7cC1gR9V!^vh0vm79g>~LiGc zw>RMQ)1aYlkx+M7x#2J)ED~xDi>!Ed7-2M|r)DKB=aDm0`)vj6 zelLt_0H+^20C&sM%gTZpVi|&ML&|(<<#2wu{P?L~!7cLP`(aCbeAMkYN5&1}AtS7U z6#H#BQrQAwc0zf(fn`HMrDXlZ3WU0MZ^vk6&>M^PTj&jJE+JL`f_J+BDh$5caB<#? zfP;e-l*$iF@bXbN!Ht7?iTnbVbqJ?<>~`iB-Ez+^eX+0>C+jm*+Z)Xzx0`n&tY|op z_7VwPWDw3kg?s@`iDbS+no{N2?oT$}F`8}iIqD+v+3#f%+DPWhBy5qCmq|XM#CUU3 z_#^ko{kRY)(nf~E@1Ov(sn zG%v(1mCf_hjA1Vw*%EFYfH|o<#}W4r!7sNL4K~3p zqbt()6$j=l(#u!4Fp}~L=g$bg$c}=|#%y%kRJI2&8~3W&C{(jC99~(3-hpVx8BOI? z7}W%hrZoIfPVl|kp?fngNjOkh4TNbz26xI zK{V-kzW?X>oq_f4{qA>P)>?b-wfA28R({^Si3F}a>&l&`t{jALt;~I&B!(f7uam^^ ziGG}|AfAKz&yWkl9FNgxwkHW7^w zR+6wo#87-A8mYLV#8E*-i38hE;?RTf|I=L<-p8?*`ZV&pD=CH_$rarg-hoL(UJ~P2 zugO}g(PIVs#J`q(sOqeSw$)5lL>3hDnklvRsFXT%nLxE|lOL#%$~iCPck)uM#KKpp z_k@xIov0tK8r@2z$RdGJG=mi&gSQ39YibSPWUO}N70QV_8LRs^1zOu9DVveUwF4lp z-FLeeAtf1GEX0buzD|YZJY3FJlbo%tRAWqE%>-GfX#^>zxiH625c0g#+*=Z+xiuuv z=a^=)VSbsR#EP8pxV=-kVXyJHqrPSex1ph-y5Ll9Jl@Bth(tzP4uPziDZsE=fi|UD zY{P!eoG_olNUMCuN`glC3^J6%Giv?L^0U+tIS8SJ+72g~`%Yf-VVAq_q^q9D*};7$ zS?D7~+k^+HX#yoj%+%~OV=ce_#1t&~Ws+oPc`e1c7e&gcgi8|^C$sZ7nU&%!!7Lq* zv;@fjdt`u!v654f%}TX86^6qK)8D|y=oCzVmKCh1Mx(|!4L19fix7n-_iquG_X zSZw&Q+~mHOhp%C631e4VdYq}&^f+JHt5XT?)nY7_6~;J~@O)Z0fB683dXS{AE_CWZ zIP1!UVUR0}ViHMTE#~c`BCcpMGD!`q999z6u-d~)V-Q&FSRB4)Qip z5@S@vz!>1p#h5cp5@Wrcip@RIuz^$*P4~+ns!2yx8$t_iDCEcosRYxz+}bPcev5{A z-$)GKj~w@D4B~CR^7&`MVUpMwEtG=*WY)$h+I!IiQD^UlEs(v_K{P=2PKO|4FmK(A z-U8$fnn=tnH6wx%h7#)7@$j99e|x9BEc`yF-3DWfc@k7NQp@@PrWjdIudDVN#i^~i zZtLEnWo>Ii|5O7+*;vnp{FZD)*JSwhS%|JlU$i60Y;!NCeP||aTOeoTV;^c|I%$2# zCvp-~k~seaN0lFRzv#ZpsUEi(uKED{k2K{&wsmYn>-DGYjHfvh_wqJ$FKX=Ar#J5ndKELzK%aT0 zc9NxlhH{tt3Iz@vfcC`K$Qw#*4MDe`HIzdkr=*4w*LvI%86Qer+76Uhn){BF9J&!D zjE-9)!|1fvXXl4ty2Lvn#{gY|VW%XuCEdR>)F@4@n21)G&eAXl)8n{a%Jejr?i)rQ zIbnKZ6lD8g%nM`saRAn;G$9Y{&?C{us)SvB9<)GUVVg88H=dQFCu%4ndGClWC^i?h zRZDwnw?vZnFjbPEht)pPP|lP{Tpqd~)Vd>2Dbok|9)h?#NDU}NAqjmHP?CBmuZD7z zM&!1Z1SNdyEWQ7Q6tkT5s*qXMzIpBn#ZaLqPO5g+`C=Q1Zk(m-xotAquSEBvZIe-C zNH5?f72M^cBw^)Qc#RgxU_p)c&PdYAHsSaLTC*By8VHHY7xXwVu@Xr?Qx@jWrTx!y zBBRzrgeKy)9voX#7-T46GPAL0iguK8%Wfw08jGmkUaDv;qKyf40N*AoP(foo%H$VJD zF1<6^QkD_@bGUg|H8(xia`V9r%nUasDkBluylMp8A$Zo~>^y|tF!}|ym}jeM4VmHf ziOR=!CMu&FU|zyHnrpD{fIozqw-aRnhn8RoNbZ%Z2(EnYdmxotdkr#3w)>LuzKcMv z(OA<?4F>UR!(@1#zG~SShzEyzaO(lW0g+y5yVUjdisaL?Gk$*;k}9B z9Q_;IKPu$-pMpPNGp_|ui5#P=W3(%}^(lb8O5AjAmR3D}jW z><50*svoQ?lDG@Mz3Y+8C1p_wxblOM&|Wfw&S+hjd*vEvU6RW4fqYsR&Kb=ZTZE8h z6tajyYI{^UxB{!qL2Qw?R18LQ+ z(GI*uvN!=7PtC+cWmG9bmu~BcP|)Cmh*=)i6;otU=!?i;i>Agp3IYhkLQyv&5UzNF zV64+Z`kMVJSjwql)6@y!yMZJ6fpj!IJ8x!Z9&IwY*6W?~r{goGsB_Eb$Z^gYzbz#Mo zb!K}Cf|t+Wr*=LiyAOP#nBmx`@;vtK=o~p#mN5}>%Uu(IZe_Y0u%SmpJUy@HP|ZKd1*Ax&bWi@42%8YA_9?CH9sKXHPtp)l$|U)*=t8fTukW4 z36-T)6~(3<#KlI+)XMY4+*rj*HGeS`ANg((NIUW=Jsb0q@$}OwB)X+CCLDD*58f14 zmUiYDHwjP$6U;p%%Q0i8k*aPjxE+G?GFXN*bG~D7uax4p>s2a!Jc*CI^!CE0=qiUs zydNt?S*04wTdcQf$tv`N`Mt?vZKbHF9j!sltgfu5ieGuPs&VJt@lo6wjwPy8E{hFQ<(S^7Upbkrm6cW5lZ(Et7rGU#EAyv$IO5gN zOZi@jld;AL@A7J^gDVXN|c(Z@?tE!#Yzur9Cpm1SXzoJs~qX^STS4HI~gl; zhhTB9O4}dxgIS!nlF&6(;_+B9^GQ|0#e-G`;{*j3tJ$Tan|3nCH^v(AeH5Q=m?dIY z7P0>KyRU4T(YCl!Ke>X|FGogc#nuPwV8xn7w$&2z zigPZ?M64mxHxE|6I1Hjgxk`zrzPXR`#eV}^<*FC(OtFvlGHRFN#1n0b-sGT-q`N5c z*2Ckj!0H_!hLooJu-6jTKEhF`f)>@eYQf1WEFwQzwV3C1t4loQMYH0x^E?Si0tEHsLa#Q^GF)NW?L-51A&RXE}oo7qwr~ zCo;@LN0q~WbhJ61?jmuh2a#du)m0d)9`~TeEX6rRVV+{jbb!BzX81t`uB!R9x^c&} zr}{=#Rfbhnm*a0ZllNMo@|S4$BO-~~@dPz3(?$QEg7g~^PnnCBa`RiA}+;;)h+ccS`UmTd#7N< zfk|_ohMm|>q3U7T!seLGwy+Jx5DUj3XnUGw!w)pS4yGXHneDich7gg+wQ!XYixI zn2KCTC(yIr0o(z)d*DZ%W-_rIz~rtT&sJ;>a>hk4=V7{ z(N&dH=)I2ip7D1F5kXKL+&oN?yzn2cB`@Rw%jxHtdxFnqc~u49D#OYQBK?}$)5;pO z(e@borc;;*)k;uYEM^}^^N+^iGu3sA=xTaL6LciZlitZ^Tx%44A zn?WaWiKMq{6*k>c9SJiW#U`bb_4*z12*VTd{8Vfys>`ig4HVlNOhW+9MASHAy^$in zU^x{}N0RvW(nCd$f%ND@kN%MTx~vq@+$W_k*6Q40c1)3*?Qx**oPr?N&?plPLb$GF zy5UiU{)(u@2_XZZi@I_bluhcwYuNW2SXdQ=#cn6`C9$t}UIuy*)^besUZs_%IG6`wR+ctzEhxqmr#!{p?6{E*_K;yM z38vWf)mRvG%S;7FRRsaAQIVmo8inaiG&7tp!-)&HybdG>i1_A=vu)vn)BG~pRD^?c zr$7rqc(kF}wBbQU>Al!k=UEltijk2k+5-{ggj$6F5j6+#M44X05L&;(!|WPmS_tbd zIn(_`nsz}mig4IABJo97Xv3FVDk7j}1Q3;|VFT3wS5DAaWGK%~%E|y04m`F}HUeZI zk2!IhQ8o|_h%?()RS^`?^=G5)e!j);c$|g6EwB7{4UaPS$}$HW3fUz zpfM09xQZ!urq5~LjsA2~E#)K@Yz2xaB4Uc%^eX@GN9`(nXe`EQ?ysYAAsn`2t%VII zCTrlu5GY1l7U+fZrArU-rAvdcGI0@vdFA<|gCL+BOsK~YUr*06&#=1E`$+!DJjT}b zsUeap`ae<(B>K?#AhBnb%*yJjLD-K}TSJ%?+bdU9a1?O}GL0V5`bQc5FkX;X30RYe zVg>OF;j1*ffsX}&EumaC^#aGCB1Nv}774`gi2BO&xxdqGYAbs9v>q#+ZeDzhNjZOA zPc(wyhhUadD{2UA{8~m;w;FdWh*(z8=v%&GG!9bs+KsF98UyQ5%W$}n-Sl!(V_<_F zMh031+7BTIw(_&MVUKojRp_xHv%G3l^CtNSkS)mJYr*_+fG@6j3ftH-7-DlKAYPTOA^rAkwNreMq!lyJ0 z`xxjR?m$J;8lD8=Qd&b)=^d{xhO0yt{GKWwm5y3Tw&E zl-7>$({mnBvlQzGd9lXwQ;b+K*JH$ufQUvRGt=HfTozn?4HF6Zc4z|l>s3sf){_@i z3&jH2hYbWOzH@+r-_5?AFb|gepTP^N)07B$>ym|~ZLv$*=tqtm*A6^;H1nj;u~4HlX- z82$$=G>b622^N}Z8GZp4nra#TtHEwt>t(7TGQCOAK1glt-Sp^8ALEn*=1I+ z8)u1tO$)U>D*Zz%?=(A9`G;2B8Dm+BoPxb+9qPnIs>Zf;0@_IQ3JP&_h}{xbQ|s?n zr9l~vKD)$ThM^W&s!)V8mf2xe+Bm_5i(&;A#W>^FnF(Ty{&DbK1f(T~{}`y}qvwtL zEt#r-MkY`f7y?zSH_)mZffZcX^oXpER2`0Y+6IT3cspUx3DWNF1`kfi7pmz8|jBmKh}>I2ck50VIOp58@IX+9>L* z_N=P(X|4Sn^hPEcbbYWv|3exw>Xt(`V;ZN)$hJ(&F`bigta3XEMBcw+`^9mhOk-dl zQ8!dpnvVkl_Ahh9yee$6{jKu;*q{bFLit`9Vz&Rc~XygSv?JJ7*h z;&Z4coyBCAv)LUERTa!B22RQ?*ML1leeM~is=q+sn(YKp(7OWH)Ad z(`U(j4i-IQw|*d{;;BTUSPFoi6dQJ2v+YlH@CaW8`4kha8>dl9JMXzTKp8!GR3=>y zbmID>_r;xXTLRu`1b~IXhTuNin!(IO_uV)WQAZnAP1}gO^ma!R&L;ys><}P1dZa(` z-Y**dIddw{Q$3|)tx;H<4JA$GJ|#_MG~8`nNqYxc+Tjkrop`BiH~MN9ql-@`GeuL~ zcBKdFmGeF;`m6RhgpRgJp_-%1x}_AWhN*ObjYAlVuwx%p9@EXrrph}@^)+h?a`7F0 zSwW^@7nNgY{;|5iA9+Fc+!_TaEXbt^Un`D*mJGr6ie}ngp|s?J6C2dvq>3UP$IO}= zv{)r-JN4zGlBV>7ie=;vzGxzG7Wm<0p;K~(r z6m66%p6F`DplVYG^YN%iQ&~L)g=ce!wNLZZAl@^gkmwajS`|+enH_B%onfe%P!?2G z%s`nr64)FSiE*zf7tuk}gc%5%=~)ci5EF|BNTJ?2vH_5#TLFa&(&v=$-h@SRbl}9@ zEc(tkk<7#I16GU^-o%MGa6;#PgeSkCfmC2b3`fEZZ2~3=YiaSLm01-=OTQYSK#(N} z)KY^|6tz>}w~bBxsw%+27cQ{eiH@$l7hl^LB%lp~Fd)Gh(UMoXtT!pjbG(ecWy>Ek zD{&-2>q>f2zDVx4JYuqdsT<{sAK{Jl5uWjOpbn%YQfYXCs5-^2mWJAsWoTblcvhZ2 zR@$j2PBp0LYhFH?#OjLS4gv;1Qv8c=5Wl%t@(=_MJdfXm?uzHJc_I}N##7dnro6oh zf8^4}KQ|BL4dXddzr*x7JG#`PtMb81fu($eMWWjf6>2I&sfkXpr}auy?_&~uo0O}D zGMNY zkR`Og*%6uvC`l6afeJfa7K~nYx+h>b+vySrnM6Ny_R$a)dbX~_G0erf5Y*9Rv;@)S zX*BTzKMICdqRa@NIPKP`^MYe9{@#n;@5H+^e|M&Lr$oEpKIp4dR4q^><}K)h#WFbA zKs5EGXptF`fTDq1W3ekbS3jy~BZ31~0n*Tb7PHXM4yL@Zm@gk^13tFo1>FAk-qzNh zfwpD zi*v+|mBjo=NAsfB3|QEwG`3!G-H2GwC}Jm2K3)wabl1)h zdMNSGxg|P<`BV}T8Oiu#bn5f9vvu&!`MyVXk=zkE+cTDisF(SY@biM|IH z>V|Gq>IT671b?}%51#fqMdAcIoea$lYwbT|RQH#B^kzPKkPqwxpk(%=t<;+=+X6Vp zG2le`7Kq_kK|>7hfisFW7aBOj?`$-#L|XcX1-g>kuNGr8#^vW=N?h*6zEYLYZKbQi ztX#z=JTN4$^_i0?uHfyyl`aTrbnXxMW^d)2%f^)`CVCvUVQKNv+H+aYDT*3ntV{3iq80>6&;;UlRVB%A^X3TCA@gN?C|~HlZdzgh-hJ<&YrRCnZTY&?3v1*ne3@$&!z0SoIP{ca}|58X3yu@b1i$WW6#&v^9}agz@G21 z=SKGYggrO0=a=lcl|8>@&qDUx!JZ}TxraT=*z;%htYFWh>{-p8C)v})o^|Y5&z=qJ z+033T>?vS$+v+K2PX&8Av!}?OF6`;bo^+B7_|Kjm>^XuxN3!Q=_8iNe|Lv;8^eUg+0sEll0lk2sA=}oPOce~WH{Q$-$l74+EHKV zDl_8rvpZ?EZl*I1&g^NJp^)wMy^_^ys=jc9?}03nbZ~0B2oYb(wWO_>DoPTD*og^m zqYw(Am~2M^On?4BV6)E;bo)=jyYwkvZKBP%_$2{E({enaddD~|9C&$?TPXiB7v&VQ zfA})d;OAj94Q(nz10_uzVVg=qJ}JP2Xp1nV87QApJ_jWo*U!>IO~vH^9RqMOI6uA) zehh1w6Z1$6cRonp3K2yPw{Dkh|!q85(@xc)om59#peec z=@g2phf}p7`lULAp_{c@Uc#A+Cw+dpWa@!V!lhcbfEMXi55%dUqU}_Ir?ajn-sMd- z$d0h48mX8kc(}-Tfv=Grm~YJ~o?kgv{51V@uBbGQ%1_G8>zP;tk3$L5jJSMFZH-4EmJE%MM* zM80)fD|?Yw48qAY zS8%b87U<1FHCqmmf^MB`CvF(QT~Nwr*U?D(ic0zHe)NEIujC-Krk`?~r>lTP9m;24 zfNSju$Tm3bpu;pYJuklpBApk;6dQJ7*}W10pro?~s7CsdUqPw=5Fwj(5lT2djqE$Q z{Sy}B8GB7{Op?~h3$o?;JqlLJmD|q9G&qhSVNacf5U=z{Fg`YZH)AW=C{S?QdpTsahP)$~?G zZ_`D*{zR{J^qQe6SUGydmV#_&rgX%&kmiEyX5=%hUB?XsZQ`ako4D!K8n?n6NfEac zWVhS`&RDK%6ED5l#7nQ%c;%QJUf%DrG6NhF3$j7kN^ndxo0QvXI&!zBGw$Lp_LCKI zv9+3Kl(yd*$JIS%^0NTBlkS|MoRyK!P*`v<#pU<)$7QV^udrYq1q}$jmL4qtMWtMH z14w0LEk$N)UlU}vdb*wDLgx?SJ9k?XWWRd4y~S_A*ggf5FfEUgIfoZNsYI?r_Dh($ z7!Cmuuia~cT31hR4VkS!Yp1)+f($_r3|?yO@m+sjuD>9^dinhppu85St=)jfM!;6U z9)KmyH9@k~(`7cevG?|PaX;Lx9W70}s48fcGec$*P5f1Nkyoj#q}=m4_?&xzp2#jo zK!}J(qzaFPqwz@e!y`QukL*}Hp2@tdT-gIK8{Sq%!Q09hcw4y`-d1M7+sY;IwsK`= zZY{;xWW)-eR^3{VpXIJUuhL&Y2x~G@MEY86MyV!$RZT_=U0N~ca6t|R865L_pdNBZ zof(q{G*ZPib3_VF8(x&S!q$h=C6h{8k9PtIqiEEuG@k9DO_T&AE8jS26ZGK`NtJRT zs^iKYfZ0?)qu>Nu;10zGk&H)nEFRBf;=^LNfj&Hzzzy^jY$o~&w$t+w-Mhdo23dR7 z0TTej`2AlU2`$J*rB*$nJEgA~svV8}q_y^1rC~t+K>aScey5yMga$>%OMB4tnYyMn z`EDrz?|C3e+;+1KT?N6b%xm`?1MYF8P(9ZSSUr%1!c392H^mGY1_?GpcR9MY7VQwE zG5V^?&6r4YR&Ex&O0*c?V`TrY!UAV(Il}PDxPUre&|tzJ^|aa9MxvpdCTA)U3dgM& z%?cbs*=)RkdwlX&G?PtXJnx#nqQ$pFtHJSU7@2pB8AsQLp#{e`98S{dXDl|rzTpPu zqZB@{WyKaX9Km^zp}U{Zb>Zk@HzKY3l6ula9=o=vbE-H=SP7E|-Mi6*^Gz{B3Ehfo zqM?|-L)ZPIcC2!9InG+Z{goJzLLc!jV}WxpF$WWEy9|3f;%>!3;vKuI1I5vVHK$9l z*busW<*GPXfE=?wY;kn9ST+sDeW7d!eoa+-9*RVRouL^DSlZ$y8gOkwo$-RJp)Z}l z_dC5&HGiZ@0|+g#MW!uuHCg#JqH)%p|i2z;%}! zaNXs$xZW4hcE$Bem;nK4x6k$eun17rF$|QrUe~Usx?ab1E^2s9UD}nLiQ=g76R0{b zGqfFy4x8RwhGjx1e2_DJ+R0faWo}qcehV==GkS#n zC!v>#I?2hdAmREuNImZgE}(@Vs;MzRh3EOStgC$b9Al`P)Q;zwmo8~_MSHmKMpb(j zg{Q^L%?5uHVQ%_MF#ipswVPnRpLw}`%>Pc|Ip#C#c+I}Z<>~Y~w96I5bBhc;OAP0d zG`lNF`Y__`s!k8#WOY@iyX5vU41+A(t|xA@ZT_tD(4BJf97Wr;6ir}WZlBv8HkdaM z=4@www=w^ThFe`@{t@$X`YQuh*Q zx$Vk0hsIJ8d(RMi&-^6?<9CeVx@563?-28H`$ZZTo?0-UX>QMDa~E9hQuGBN&Kq-D znMXI;cZb_2XnIrP_66ehg};Q`&r`Hr3y@^y<@ULKZyV+_FSqCR<=f@D;~uQRaO^;dwck`A2(h|8cwArWHtC zaeF$$`SvAA4=c{f%`=hG^j0sNA9oQQ#r9+H+GB7s_#dYXIsTVqNC8FIb@5MOUT(km z-$&u43_0CCLr&jrh8)CRfvz%SGro7H_-9jiN!XkvZlC>2xIL7k)m8Ctq4oUTX!F0N z@DjJrx99fx+vRo=;_QmsGZ@adU;GtqIQw5BZeRLKxcwijqP$7jet~(p{jwcG;U#W2 zw&!-^?Q;8fESBtw+lTSJJ7xQI3NMxI--+9FIyqNB-lSL9e^0S7huK7!- z4knbkmY?@AFSk$iSuBaR;yIq_Mu^FK&oHyWmcW{oS@RH=bLN)QqUs4l$aLI1t&xF-JNr56ThxmYUvpufH!@bi_;tr*$cCf?s zNgQfE74B>Xty#qHrjeT0cYmX{E_YCruhw=Q$fo_H<{$(f6mFpic4~_FVv_CykD)8i$m}}uSqV3 zoRNzGcu%<~7vF1?i|bCy#TU(TaZ|lqtp80e9zG=(e>sbV1Q+DuB)kvD`!Kvu#rx_8 zxtMxVE-tQ>i!Yp)i+eB2#V=0C#cz24jAtj6n2E(~ zU}r>NyXDO&phcLtoS`cU3YeGfQ1B>=p&7-?fO)|(!$R?|FHdKf*7|1U$;j2;-78Pa zStKY=E}djZkV~gofn2(U+_;+)(N%6><1{j?JGt>4i-G5cE9C|zl>h45O^0ZqSly&{ z`!HYKtlj6C>KwV@)>&@2b)6f0vit^ulvaUtSvPdL?&O5-Aza9UI)RBpS%s|Ls~If^ z+7B$4)PDo*f$UdV6L-4XCJg9LdE1G%kjPC$VCOwP|va}ki%dAr7?POlMtT=-R`#LuN*@+y^ zqX;0vfPDa(K*K`J9sUW*5^b_4< zdJzft*6JF9_=|JlE>6Tvnt>*+^6pkH{FmaOT)5mm7qI`UI|Ar& zhFX`oFoAjLMlLjyf?3LiCd!4TKa~sG6zVfYX7xbF)!<#_0P9fPa9}r~saEE~?8#!MgESqIVm@ z6Q@iWYm2PnN4fb?Xy1Y`b*Vkme%jJ}$PjRxvg5dv9TvR@(|52@hOOR%^-52oSNcp> z+2PF8>L^cGU`X16&bxr8En04@0w-+&)E<4>DLro5H+_#{p!_)9zB-)lUUdj&h;>;V z?qgoMQ5|YYuPjxEv&8?if2um%yl=XiDXwo;B^F8Q?e2^ahEN=o3+LPC!ujsy!Y-!8 z?lKqNV_v$E3-J_zlna+A7cTw9xnR$UxJlD+R8oF-Cl_9$I4Bny+vh@K_j19Xq1I(C z3}IfnkqcF%%$9QDcgls||5Pq?-8AGd_5981!DGxPl z)wS|$1_h_8d*ucSgDa#kpiV9n2Gr%f6@|fK)-j|#CpXxHsLY$jyx<;I-sb!%g@J;? zva+t+9EPdXAWWqy^Im82HVo6LL2Nqp0{U*Xd2qx=XlQCx^swNE5;+O?zr6WLLu-GBz(8gVv+;L zk$AKF?>ZOhtDmSZL>z~jaYsO%^4mkQBJ+13-ltGs+Is0T+&$P-iE|&;1Ug^E+b+BD zJ?OA2EOyw{f`qIrlz5jFqufj<|CAZ4uj3g`u#q!7zy$Z*;9EJk)~h|&%-|m5oPs!2 zB$|&ZzctE=a6jQ;pVEnRv=16QxO&`2-^N@dg+VoCjO|6URA1{ z!yR>Ir-~>XP~eL( zJju`=Aj3|l$UTjyb96fv#>~f^F$GgwaoNSxmWjpMakw4h?8Fn=dsdy)9>>BIIQ56q zAvih0X`lI}g)z)~!PILAjG$M!(LzS2*Fw;p9(5xnE=H~xqugR=D8s3f+QEi;9; zT#v_+p-RyX3@=So>Pi6cYKD2ph`3yF@rV*}<78p&P)c?Hj*FC)n71pxEtJuzl}KyC z9p;x=&KqfA7hU}U_WbX6dmKo(>>y+UmIGb@yaD(Gunq9V6$jxU%zA)hgM;7(7zdaI zhy^SMybkyTPy#p#s0YZgH(Lc5510lB2c!a40p0-Y0F(ia0qOva0C}T>FaR(DFbVJo zU>+bHunO=xU=v^`paNh5Gy~*K4uS|!0Y(G-0O5dz04-n*;0?fMfI>hS;5gtCK+)_V z3<2B+co;Ajun3R^SOr)Mcmwbmpb&5v&;aNIzKj4&1k42_0G0w)0sann2T%l{-K+j+6MeJgqWkkQtD7|dEG0PH%C#46tio@ayMq`CmHzhC20$~Q1t54hh;o1kZ~?di+yLRf zIEX5k9)J;mk$};Fv4HV_NdP~kOpG=unLgkpCMGdXqqW$x)$!VlEXf7mjzG&{xewpH0N#N60iJ+|5oi)37!Lb#z(PQ5cA_?J zQL6eLgpJK!WMe0e+#|$lmu0Fm66v!Lo0B;-{vo{`HHYa#la4di# zjg3psNMDwgq0^|4cWO;0sw=tQgGVer@cisTLV30odAAy-lVqfZL9mEQN;fkrIUCu= zGBPtOLyIg{C*UnpwukCqeMTU6YiN zrG+IKQWvj6Y6jX7n7VYxAvD5dr@Z4PN=kC78cqUw023#s>rzwEgvTIg`**ab>eSTa zOii)|jp|6sVEjhfII7Y!)Jx;lnN%O*Gj&2-TBa~k#qlD)3@@0#i{V6WiK!WJ#!Kb{RB%RuN;=u#sVkk;x_Zh?O zOXvfvF)>TVja3OkM98Bdv!g-;3rASCB8)0K!^)6YDPEO2UZX?F(4{A5q$4bE8C3!+ zu6U2nu-M2Bywq8Vs7CmLJWAK4k;M`%*;!h!3@5-NJ~esb#5fWHlej%IIi0#u)Q7ou zz92lE2$WWk30Vp^4IcFe9mFBe+gV}!A@qlH?8MOdc4BF|owy3`&*A-3yidrm6U*@K zhWBv1AH#RI3iP4zJ`L~h;5`ZN{&;^1@4w+)HDwAVCCu|izgzl|9n0DUY}#P%SkcdZ zUdRx#1T}1la9IRf7W3F6JKEfF0);>Pui?CGCA_T{cBTw`MrE2_BAtShp zKzA6CTTqsoRT0bkbhS1zE>+jgEzIIZJfd(jt<7LS78*o!1j10IQHBDSvgjQJ+z$iK zqJZ5`j`pHFFfh=8eh-coLdnMn)%ehPJru%2qen-D_CVoODex2&u}QJ`3BuCMrT8g& zz_o{ zmoxO0fYKWVAom9W^zJXc2T1S4V+u1@au1WtD3}y~G=S13fkg470aSoYfEyqSK)B`r z2-jT6d=@6T>j4zcDgcFl32-mqE$RJjn1t7R07~cI0P?p5KzPxunDqS+fWEteQN)+X zWDWJM1H8Oc0dvDAszNffDs_5>ZgCPdQW;sxRN4%*Q&L}n`k&+gsin@!%E%feM55kl zkb7~UOeF+h{N%;Vxk9)w5w;N2P%TU~@;C$j7NeG_K)o73b$1!ww6H;P;h6@0q~eeXWfhytVrO zyN&&28~c~`ZGLb?u+=~D6mhX~O8I7wlDc#Z^a8NU1xH~Ov(w0ue_MxldL!9kk!EU8 zmcS?%gn*2!K=g4#vohk<8jT>FZm<_A?6BXsx#T;U82!CWyc6$3058IR2JqY&nfMxj z{4Rw1-vedh_kgoLGSP3WOnmc*Oxz5J{e}A>e`QjfIg+^;rU>WW; z>}7HX#~zBFy_}qT_fd*>^zG-;f51T3L4)sfyKBf$)v&wWJv@isGveO+yheJDx_|To zV|>OwIPRhG6DImjn*8t-KmVx#(*lF0&zSkhqqBlTW{1w18x|fB88t8ZvH6eVsQlQt zMbIlGE>22Lc_K9}JtOnUER9x|y=3XKr=DKE;+d6#IF`31{y{QP1$(Hyqe%AglKs#h zGI5q}qGZI16Pq2DNz>{^-Zw1BBVk#UG_Ou$_B2YI0~hw_x}U zflD}Inak=qk0V5g5Q5=8SD1-3+Tsq!JGs-%VZO|ro|6IOD+YN#l9>W4-(k9RAvhyl z2uJ%61)WEDl1>Q9N*2Q6v;w{*#4Qu(J2T-&Ll*c;=Qe@-XE8^_iEzvx!s@b^4W~HA zr3*poMM7{~mf)Y61#=lrc1{PR3jVsqLYO*Jm<`2CNJh3WO&w4Ep?_FLVX~M7@gi(| z5=?|oPKAl^Y8Vs;u!Fm9F}ln+>KENP*71cK;> zG8Rt)ej`=E_^HUU3_oGUjEQM!6RBn(e#n<}n8A<^WQOCN5Q)MwfxRce1$=<)NQM~( z`9hsL9xefIEEy?$+dGd(gE+Vk9v}4y+T6k+*K~-t&BcNiFJXa3s+ zS@0!bE8tr|Az%lf1h5D2GvFxTB%mJ90+2rl-7CNa;0ka9r~n>-5rC0^(SWgl@qkGH zKfnw?IN)&r`A-0(0H)$-h!da!kpGb|#{;GT z!U0KurGV!F8vq*tn*ciibpTc8N9ga!|?ll#n& zX=G*Y$>|BquJ#%|dNeuWmpKu%0M-FE0SW;}0rdc9U*HKC3zz|T9FPN82iOSs60igC zGoTt!4-h6HF99mRSU@-+2|#|IhxrEC0XqOk0d;_8fMPQD<0hHoVa@`?0+s{T0w|7< z3>E7s5$>~@-kHXI>F8zQB`sNtQ8{FwN~4QUQYB*StirG?Avp_ud-S~!#_|ngc-8@! zNh8869Rz8DDp8lth5$@02){GaGj-bgGjv)QmQ*d_6V%zs@htYZgajzgsW$j$Emox_ zYqaRmWvFOi54XUj>Uh$kr9rb~L40Z)(jwfTdyrI8gjal0a%zG~LQIVa=c+Xsx-6tZ zI-CsXosv_Rsi3aUj!RA@T{ogfIBWls>4(TIlsKW$5MvV5>B-=TAW)hXOe6S^+=`Di z9Zr-GM7Ti{sL^VKnQ1@>tOa4|Pq6ejZzZoR{Wu#A&(x@FU%|s{C>xP>)?yv0nhC#f zum|eDWhz9R&N!igT2iH1rU9Xye@8rVnS@DJGPE$NnfK2|Cpul5m61x3VD& z8;FZ63SpY1T(k0zGNN53%uG#HFOEx9Em{UPY1B{Z)ajs@&%?yWYlMjKAa7F4komy4 zS%DEDGXrK%3q;!%&m?*TTKOPIbmm90KOl@l?=28gK7{qXW}`I>B*x(v`Y>c3bP8)> zmH@;lm@@->3m{!XGtBXRkja2e0Kp$J6tDqM40Wlq@{Oa7bpoBHMT#=vF+`wrdclWxQq^ zvqf6p98c=y5T?|ZqW(k@-qpZ20dJNViC4EmGanz4W@vG{u!POc_(eJ(4S1anO;Uz6 zG;y1_bo1~$=d(b8E!Lb5H%ogdqnwu$3e8jH8mP|0QaYB=qBn5XqCckr-?ET8$0Pw% zEV*S|C~Q39pnkCyobX0$#1G!5OT-t_k5L(>o^|`2;WW0_fm!N7d(09Lo<{T;$e%@c zF6{)rTZzY(Lc)U9iLvlL0sUdlMT`E9u(FJ=JLfOCW}?1kz#nP;yulgbL1(p? zN+$HV68|k}h;Z}IQj^&9&rH_%hlI_<=%4g+G^S6(oP|1!&E7(PCzIR*q2CQ-jmj*V z@KtN@jrx2P=0+yzKKcQmMD#~zAX^=UUQ@;rxbSdrpN1AFh_&d5k912EAKU}esZmat z7lwIdb{h1803y^$2>EKJz*ctbNXb(vhRA%*8i&P-3tK)ihrP6`vsyDA(Jik#Xy z(!U^0PF{F&nmQDHoMesKUqdV+2TIwB8#!2Uw(tkxBQ)x)X?)h2Cm(_~iNe{WPk#8M z7U4!c86ZG7SVynt>UhWniY1QQ_46N@rXOW)ou+zAwPmZ#bL9w5Gv)(==sge#4S7 zmP}J;t5d0~Gc7r8ae9UZD(en$@)Ck6^WY53VRKzB@es;yo*W8K{1elmW{5)nnJ(A{4D*WQ1wUE3cPLf+EPHil>I+WzeAZtc$!-j*KB zDBs4Pq7&--VlkKqNo+~QMR0+gyNa+|Z1nw>$hCU9-v6yp+vZCY+U(qBXUB@c|KpF2 zId7>0w^l0tf?9yN56hpOaBF{-@0_zZ^VNQF-{t(W+y=R@WRq zaq`sZGp5?J=DKs|FVtVWbh+WT#-`>gzyHy4^;&DUCl+ozad1l$3;);j|6ixyZT{bE zV&}%+*~HHOHT`qj_48HG8(3x=hoP_53;hWiuP(+jj_H+2VoYMX`ZiY;Mhf(m<}hj0 z@C1NHW9e)KDb4H9ANBpHN6LS}7{SD|xM@tCh>?cs26L;|V>k;T7cqRehM&f&ls1j! zNCS}061d)t&&V#u*oNkBN%P+^oHt^jv2=SsT<=fxle;B;T6>WSzZMssGL7RcE&{Mg zVkwcCjP$t4=TWF5+5X)dzG$?$nDyDnq~G;^Xw1%Mjg#3L5I)n>xj%}7Ms|G7NJl?3 zyUa1Rj36 zRYAAF=kyoheKBI{7{3m=-dS9nbDjCuATF!{V|0?XqO;t({(Hw#+CF?LXj}@~X(?Im3gX;e4`B&o9St_B8{n%mKh%4!C3h)NFC5X{$f2uFG;T31E! zX;^OZnn${-#Q@UykzSL_uBVWitvu17o)X6_G|+4%(aUu(Bww+1?K(e%6UC9uFz@)C z%MQ|4cJ__J(h8JCQs~b8aD9`CahFOD{jSG@bZ=>hg|O!(jQrC)tq!sCJnt+V*TGQ@ zA)a-Nmn5tTsS(dfr*$KL#9gjUpVP_G}4#S8Y3>HNZwo@2l0WIOFrLz z{r7CdLM_!(@J0E+c}n$!S~zM!`5MG@_AMQ*ltx>L-^2 zyv*|Q9?x0^a%q!)R7WT+>XDG%ocayd$3b~b>!>V#E$yneP0LEOk-nJP9x7iJzZUsV zdU_R;RfHE|PHWdl-)xH^xwY||w5C)8IKQcOQK{u}y{q=a_8aMIIAz37OPfQIwSAjo z`^`2?$F^rU=%CWj*7i^zjbtL_CGmtPTnszaV*0iJZqYcC{1SwdAr4|7G)ob%H{00V zX1BTfNp^qunFo6aW~ZjYo+P;kz`h*z$FN>u2JEXO`%KuMhdltUVX(hp|<^0^CWu++?T^13jc)LM%V)plEUth z?Brf2*(qH`IQKIf_K}jEa0{30r1X7WvIoKbiDVCi{b$KeylR&0R36+Sc$~B{W|Cwl z+#Z+gL|2YvC!TDO?36D%Bs(ZS0ixTD;Th8ioh#)4@4PdlT$bjtTE?nf);~CtG6Ur^3eG06Udk;+H%M z>p7sarL27pyzBv5$w{68|h4do1jsz<_wP6n3KRQP@|*{ur<%I^To+QK=k! zYvW#F<6aMYILZO#EAhfYm&?31`&ig5v=fgk_JIiF5B)RgqGwB{v-4o*9^yE;v%*_0 zlRJx|;w}X~L!dZ?+cS$8@4ax>6AsKS_?Y{nn4%r3X{rbS+_ssqm9R2KH>0!)|^l{U~E72TH`_!CeN8XKl6YhB@ez)s;7d)RX|0(mruTKnp`0Sf8GWsT*OuttAQ;PGq ziDQON7$vh0e9W_X|C5oA6cr!tfrMThwNVl9#Yf8r4|~CH@0!a_dv~n5$H~0Bc%A2` zGy5X6-{7jl;s4sRJudp_#~(kw%Xyl^Z;JwpKDt)#SNX!mvYf$BxW|Li@w3Lfx+_Zm%hX3s#@+p4fmtOYxwO?J*=zFGp`OowIxtoi3+t0f=C#mus&+HWiPllib zCH!$(|JWtvr%~(f_$o(8{OVrSzWqNOT9G#8eYfB(KOM__^YCQ<0b4?Lmp%Dfzmtd7 zPV}37e9FgHGL{4nKmB%Qj6Lxo`Rg|F;|z zr4Ku9+h8i$cP66n_nI%J*;>=b_3=MGJ1tE) z?2=F9smOjt&wm^;k62}X^}rI}nL|GF9y(n${?k{>_x`@-$WO;Y{#KY2@%Dn`FY+h# z^>{LH1*V_;-R^m0V0zSNi|RhgzxzVfAMb2Fd7)L81O5c3RN%Q&gR);+AfKACdFYl47qCOBW3@sDI(7HYd@9z5RorNY>qDb`TIZSJ@D*S*`UB#vI(WZgFX>{7<#;L*0Q&AN`1?{|5Mw1 zciO_&^T$73F=*M|tn8gj|Mm5$Wg)V4CzrT*8*thi4 z|3;RiI=%VkD}r&x{K;#+f23ht<=kM?ktcr`=60oLZr~#+6(1d1KC4FY#{27a!s@I;PU<)`(+y* zLhN?y-w3_<>Cs&yKb<`Oq2QgGvc+j<9XGC@(|k#`b|3UEgHHSX#HT&G6=bx_odham5#GeIy|F=);PVBjK@BOQC z3H_4;mn8i0+kq!1XK$#z-(^MOtOlP^7q?!1p|`SM^14}?jmqJ%e*Nqw^;-Spo?+ha zKXjq=@R~0l_-3mAtSbjo9SkK~?HrCTKlhKhJK~BLeN=JyxnpO2w#FsZulw%xJ^fOC zF&22U0weY_jeBb6TlWrV=rv{L<$WK#zvNx_@85fN{yTf_&k`S8Iql8wxArUA7&2y7 z>8Cz#eY@@2C)s0$%^Ef4r+yEA`O>w_ag~pMllKposaFT@32Lqye|rCOJ(35O+Yi2W z@vDbF`}phPjPnY&?|CEY_fe5wZsn5Zk&_SAJo(!FXMX7!KPRhd(8kY$9=q@0-lO*S zU8@S(Tj0^}o=^9?ZyEHBe23Q_$1S_f|CxUD(VlPawm`kDWS1 zZg4rZ{aU}4RtM#>_{CSp{gRj+TJ!ZHNAN9f)8fIs?DiMdIF$Kn`W~4w>R<03fAfpD z<45D~`&K@D-TGfL<6iYVQS`OW$z|BcyN1T5^xOK5@BVzvii@$o9@@Rr>(^w*ho0N& zanAAOM05JgK^aF1Ue-OUT{!Ob^dBDBvUc1LQ%97%uqDU(9c+AR>q^L9~ z8l(x0XppfKNzzD>6iS9t(L~Wa_`TNIXW!v>-@QNI@8|pHy*w_@b**Wyy@q|(zV%5n9i2S3;qXv$JcjI+%PXcXnH2n7 z|5({Hv!tr^W0Jlc54!p7+P+t6p872-&m7v;Df<0w%)>KRZKvNWKey43Gx+cWZ>?5I z<+c5N_js&m9<#&QWb%={a!oQ5Y^L_l-SgRG_+@L&aP7z2R;9#68YrB9q7`RS;T<8= zqOqSWl<@T!bfF;DKSC@9Q%H)z6qaW&MU)u=B7+zLqQe*hVpp)^vuTxCui@ zd=W!PVmU)d(t{x^xr!kywSgfl9mf!sNoI)1WH3Zzix?tu6%0|iCWff|M~0|^FjGuH znJK2I#S~MT$z&-lWwQGFFK15H3h&>U0(Z9wu}J9}^d=nj$^;YkH&z5z&LO)m#L<}U?Oj(fZ4^;*ygKUs|zjp*kzRaWp8iM+u5oid` z1WiEFSLPt;OB-+wXb+P633qTF=m(N}iVzT8%!mZZeL@UKhH@N8?yV9*YcK^Q_hxCJ z3z!M61M@*920$Sw0Nw%x!D>(lB>P%~!6xV;;9F1>{0fSJLVg$*AlY*-0m?#`1l2(D z>u4iDX>bB40~&&4z?p(_AlXAB50X7J3ZM7(PWcXt|fRdmFs0J2OJJg1xJD=;3&`v z91YroV?Zvb1xABo!8mXncnF*TrhyZ|Tu=`z1}A~#pgvd&P6k`RDPRX^0R9B0gJJ;~ zH()=|5M+Z!;23Zws1MEp&B58A9cT=?gLA+ja4r}L&I7lD^T9;W6g&Q7@S)d&# z4!VPqU=Tva3&}egnEH$AQKm= zF`y8r4~l}bKo)2Yii38bBCt3Pp$ zu*4EaKWm})@=+F15+2BlCr=iMBl~rUBQ|=9K73N?$bNd_i1nB_cYb>6n}K+r1iw6D z4|1l!+tueTtM$zOPK2A3r_W9Y7rYJc8_JCysgoM(EGiSMx}opb|&y)WnhJ z5X6yZrNoiv&BO)%>wKtsktaaJarwt}<=2xu`y$RA&)$f0_}BB>RXp9BZ+|EDbK<=C z`N*z!;;1L{)c28z?!`~<#V?OM(;#jYzuX}H@yT-<;>dFz;>Z&Wid6l{9th&R|J5E; zyf;6b>@pyZw6hmT_MelMAWv7QGbQIjo;OgoMKUh5U|S@g$7F11@$HmkJdnMfCd27D7#V{#Eds@NE2Ke2{Qr z6D4DW_^se4<3bD8O_JURy+-_I@RRYO1^Ck5s<3|83#myxNxT+P8^IsKJ1@#lp1INCWZcqzGImKn zl6q3#+A!v|CmF+}ZlpfmygD!7)tP$UO!W)(u8sw~b0=e*>b)G zlkra4t?#*z@lW@iBd`9{amjq3>p%&cq^3<{#-ts%@#cMCTyqL*^9eWzysH+#;or-o^5Zf0i?Ntw_c(8S7LZ zkmuQCOp`XE=HXn11^m>!B9?bDZb+S|dXT4Mq+}a}Q}b#DuN|p5L#3zY3>EIf%S+E0 z(x&983#l_zV{?S`97EI`pyqAQaW<28j$GsT z^PJ5a3)JThc?vcvStUbD)n+zgvJhwkfZt zsAF65>Or-)DgSt+y{ThR$DYHVo21RCHm0s8Gx+uJ#^)J*Wunh-7OzjKV~}?l(C25$ zzZQ^VQ2kCFVQAL1PoU^> z$=fFAG}QBC`rOGqCRGkKlBsg$^SmZqd1v%UZ{8!^ zg5Q@^|C95ij!T}h(SGWg9~DkLgQd@r)c?=w6VXv$CRhobeE!yhYr$6V0!VB=0w5!j zJdZ^>=t7_*bn+Rb3~mOA4M-T&fKINp#1=$sLpsopf>XhG&;%r(;Z|S{Xb+wSiH(7L zu5zJo1Bneu6by$>Y#79rBnHMnKL+jr?}91d8So5v8_WlHfu-OjuoAou)`PiVEBFZP z0xLnrddfB;2^K?D1|NXLX2k+Epx*~|z^C9;um&^%?|@cd9%v6<1-W1~7y=##qrtOa z9M}jR0(XOHU=x@N7J$XzJ+K^X25Z45U<=p)c7S!@Pw)mvY*6Z;*apf*Lu^aL_S6qL z7bLbQO^^-U9b`Zk2gX1*1(ng>+Mqu4Ku`?v65uT8dq8vW1ZW3lfbJl<<^+M~!AP(W zOhh@vR<#{^3`lHGlSnvpVl$FOxsu><=wvOxM*LVX6M7Knhj?YM5c)ar7DztBl@Trl zRzo)fi7jme*aY1ZOoKicd<)$HWJ8w*ze2|?8_$L)0}4e6%kBkbK?_g^>Bt0CgHGnR zEb5~Lj({FO;-Tw;6QGBHA<(CQhR`>F`p7Q_5*rx@G)4Fp&Uo%0;mQ(7PLXRdf*7?5uiEZ`+*an zFCp>J6+uJj)}SevNW#JGpgWihhJb0HJ<=oXtc1Rd#6uqn)2`BGOY)}Wf zBbb8pgTSfK?LiZypFjvb3A6{-fK5m@91MZ(0Y-zqU>qn2rhw1DOfU{C1do8Xz-+J@ zJOws^#^77f52Wsc$T$1x&u#~N_R@Yw+&$5LXWpGU^*K&<_0r)UJWB)>?#a9Rr~F>L zJABH|#homjo_hNa6;9SnbU3w3jtckh5l-)KBx_M}=Rv2Z?gFXwq5L|Ndn;-c@6==c zPK8ka$&N(&{*k(Gb>x*v*#Rgk5q1AX?VF_5q-2jD`9}Spyp*kgtUxH+5!t^;#t}I# z-fYV|U&?OajC(SAEll#$ero?EwGJo$>2R{I_m7`k8z|cac`qcHVPri-?#;+fP2wl3 zL9#!b_B-GcV^e-l9D`0n?bxKk{dnVm@>7-?%1`Y=rTo+w zqW$FBMy=0C57BPxemIX{h&5QDsu?PWjzf=WZ~5a~3ldW4gmyd<35W4iGDvWK7cdt(s&> zBDua$wiUADp7@D<#EUmRDLVyKAKJb^X(S!7X?gMLMA=cic-I@sZbVrsDSHxSy`*dk z)Oe-rK;%EM*^qfcl}g<;QC31?JNy$)?m5Ver)-sEmXT`=W$z*XX*(SG1_JSuGO0eJ z{Nz6gC-aa_L&~J)17*LV>Ok4>C`&J8!y`MaX?q@J`K9mQshRS}mO_pGKRPvXY5N~# zEvD>$l*O2`@leO5>;u&Jqx@7oDL?s7?w3g4P}XJ2hDW{;Mcr?bYaf;4k51*HbYctW z8Bg?{@uX#_qf_Zg>-^D)J(BwN2X${vU2A(@zk7!FyarR@WQRSu`VyNI=?QWS>a&7` z_fAi2kaRl`KYi}RK1bfrOY%~-E$Wko*b>RvQ|(B0cK`7cdnsjgr|gYXe^a(o$_h`} z^r-%z?4{)U6qIdV3$-R=l(HdF|9hT8&+wk-K-oxFqrI^fz$~T58Fl|l<|4WJ(D%bc zCnNZePV!M{-Fe5S{NxQKba)_du2JDZyw7mTZc3dWd7~wI<)dH zc95kvTnA^o5apvuX@CBAi~jNV@I?+56yvGnr?2qCy9}DVz~U!V`Jn7q60>s#O~gkc zVBNnMl5DOp>jB3mM}Dww``~H3{P;(e_vb$yPVrCudxz7S&P>Wjv!k1zZyl58>G&7F z-P?Dg-mlb;}tO@ z?JL|cTYme|$HO_1Ga?RWSD#vQaign$mXskc1m_}U_(gA~Wa5C&dw=nBHgN=9Ldb=f za(GO6^^B10opVC66_5{S|NNQ`FF|p4_rwzSAx9s}-0tSkzTf<^=++Q36cfUmogobD zJLU<$_zuoG0Xo-oL#kEV`8Ag1r%5cPJc))BJLof_R0gfnZP~<+XY=F#g-A34;v&1T zst1cfo{PNmajrk)gZ+%7QV?>R#8}$-wPdi*2_~QGF<$Y$cWTU%2J*wZZX5zV$n;=1 zIQjA>QJ{YSHF-!N&vkG(*Lwj8a9s(~U3Rk8wDk)_-u+6GMFa(n0-GIZv!AI4YNw5Pwr3Zu%+CrU#X`tgG;g zHHO!;#*aJ889b}*>yt3#PkH1gHzJd>+Wg#zZJp5VKfE1$D2r3Q*m4l33H2*>`K79u z!`bV$T`2O|B*b5j9KJi3(|N-2?wL~jB28r5ia_D>oaD7f)GMy_M|tyNgS{?r!hBNX zTLsmSzh$AsqkPT=(}m?P7&sq8jiI^YFL5SXyG`)>pojdaR_FH?aBePKt+7IS2R-<#jZt{+F*^UQRqtDKCEsIu8x2TfyC1}Sp#uX3upcYhcl!Gvxm{M(|0Qye_P zkagzwR7O*mn$DLJj**j!)Xh&i(-`KVGJbomahwBGLOE@?KBVMY28}G`OqgGIopq12 z$M5eNcS<=H?k{J|WNS}j=&z^*@#Kwh{RmpH);oUgsz{OxIFv=Rl8BIvRU} zQ@KCk=a@b3rs9s4Ys0?Dxoc(Un8wDh2$`#O@6El*xjsJLeGC)lmvYbbDCZU@S$*@S zt2fxw7#&L_rOR(|8dEBcg}3 zzr6UaVi{>aZuQ~#a!$aRmwSxQOHX6ODLDL)yUUSC$cTS3L1h|4_Sfm9$#*${+?qo5 zHK?C`#G+|R_c$%PwLf|s)czQ|+GcPChY{ER^_z2|IR2Bt zk^3t+?g<~itPLEB^I^?iCSJ)|H_TFfnHSo-^~a=0lSJ`@-&X_SW zHLEz^1|J_G8=;8uj|&Mfv%tm1@DN;=~)8NbXFDY5$M!z#`d zF`1%<*HbVa3Q}_l%aH*k=Gva z^3zNUqjZ{;x|B}S@9jfgdYZDSlumPm3#HRERHt;Bl`Yl0{50)PQaVj{FG{ERbquA` z4Egkcm!D?jB}%8sh@y0wUl&q3&5-{5{CxU7ucFR}&!%ijr&$|8=`>9iQaa82fs{@& z1>=*92bwY0D4nKX0;SWm@t|~?`5a28nIcc=G#PD`yz*(*mQXrP{r!|qQ#O#&Y5L8j zbehGQluk2|LFqJ`a&bL?qZ#Q-=``7+D4k|;%ROFtn)b<*PLp9v=``b1DV?Uyqr1HP zG>i99I!*JXluolrh0 zLzf4gK{n_PN`hQa0t^Bb!Elh+Hlx7-;C7JM()WPM;31IMh>wHBHhcyg3g&|9U_MCh z4GO_wU@@o(-U6}2B4!Qz-b^5mK@OCTUo)cCUf?*ylcgA0hLK<=7vAgO$?x*;er(Ux z!I8H<^Y(RiC1r7)sU_}8Cn{p4d#Il;R&K6HK;m5k`0=4SjFq9f5Ff@$EdGc+Y^4u= zvB<#{FGD6NY1gri^6_peu#9cz>+~8H>piUe1R0|Ey^p~R4r3joo6*he7VH-7mgyec z&7oH5WNjz_A@n-qPZR%( zoef4s(QB(8tGsD>>TQu%-F0*0gQz8mT!rE^FXymtj=$dCcG+rX$Lv?f6>)N!CiDH1 zlvwO7wvWLISr5||Bm0K|{%%L_w+K$1Q!OJi1-*#PD0; zndjWvajWbaXIDr)s$V+o{^>J1b(&Kc4Hl6WHMf);DzD^q(I%0#Iox-woT46Scr)jyKk29)YE#m)#S;($R93}g(eapry z|G|0ZMNYI_NgiLF-+J`6XvlE;3{&vjbUyv6o$o#UByPA|JGyu2J8 zxN5aJE*lpz96!F>E5coKf~k77OKgL6sm!Mvb(t>aZ5QNU=ND}YkGc4>ao|(Oxmu4E zJHsDrcQLL0VdId!;GRX^lpsdov1d93)kY^8=hf`3o#tJ7|M-utM-M#PJZAo^^O;~A z<94<(-~Mr+me8yh0|m#gG!;K}J6!51_86O=G7=arD=Sg7i7k11Sf0Ce&PHE0tJ?Kq za*M+~>2D1y5^vXy9GX~}nVVK~v;VZ5rR$|~wGHepUpULXRLqXbe|J9T$^pq|=LHW` zWd%*1^YHb#;HtxlnooqHlznexs*kT*@ShjrLQ#aqn zi{HMr7wwo?bfN#l9hvs6#~wY3*nR&J1vnI+B#H9tDN zJ#@@-mH2LNfpihpA&#E(n~iRw0SeX(;SKYy?Clqp|14v4)*5})^O6U5RPB-~didf( zdwuwj#wQZhRS!1Jcvk)4YtB=5pQy)!? zxY|iD<+_txc6wwuetppG?;?{@tFGr zKkqfq^L|FX?V~zZiAKW?gW5@!8HMTBlL{KvRb(0|r`*`{C){;wibav-ho;-$M zX4R{_v|FU+?nvtft1E7G>e^whIr;M(N(EHim+u+vJ8DvqMDCFtlGjulg>7To1+>T& zz(`khzy?RXan~%hMhji%I?wJ3Ub`vPcFD~IBQvqBb+_ggl-%Fi+Wx()uIss^S>Bli z5gBg3xtFiUFTd3pUb>UpZAY=kutX)i_0{A%^^6;{MVH_3xAJ?Z z0gn$o}zEsRWM{{YJ&K^gjfX@ zqukC!w`TS>$L~IOESrO^mKR)7U;Cs-DTfD+0{4( z415{t)sSapm>g}k)J9%fX@I(-%ws=&je|z&(^9>DxxBP}89t0vX6>wBx$syb$p0mjum}x9t>AH+p^5k9#%J zD7bb`jovuu8wOv$V^LdWrUvOAuZM6Pt_RH z7LY*_J;{|pW6yWGty$!E_gNQ9vam?YU8_5 zuRCW<{2utKF8``M%DA~%ufa7%^!hp{t5&O_E}aWrbY=@2FG*K*i;vdPOi3P@pK-nA zTXMs%DdnAy*8FO%DD+B?{AHWHe>y8Ud!2st=}Zl^F&`8~Cyp~7H7GDxS2VZT&*W33 zmxW%GaaeHna;Jqg-^*lPHdmGBm4Azku4$SlpKwk>J@))9zm&sUj0&QSm#Yhka`jb8 zIf}X)rKLyANHlX3Ot*?C{vNt`eVL=_;OqM9S9GZ-9!{0csZUTmrOL2+VXJHQbHAfw zO|50g_M< zE;kqU`&pSP#fjRg8Ic{&xu{X;_f@gX!@&6EjIiKe%ksQj>bqHrW8+gF&CI-(|?7Y@7hC?^sYUg$V^wB5Pij3H|ODAo!4Fu z#yw@qjgNcbrIETbeb{f^_TjgeX=$1+a8zG2JZ0$6{V&;yof<<%AFwU@AME`cg~Tc=(S)K zE~_!=e?)Qa!oimFLs!Mm`{~qRR>o3Wxa)$g>4~R_3la~M8lUSBne%y};q0p#8)nTK zch@M;M#gZ|%egZKZr?W3-2H=o zR^9)Z#NGEhU1V|h7+IC?s$sQ1W|SsgG6VQ&-C7OSLH!*h1NxZdxi<;;)8#B$7#

!EwEM>g&Gdb2RO;%r1xf`a~`Bcb09Yxw3RDhLPfpI4xJ zaP9rh13DA8#EPz*zkNls)DDkr6+7P^j@%ZzOs<_c}eQ@;@t<9s0MinPs!mzjei z??0|zZ&kiK+Ucal#wp7EH%kRP+>}!JEPdZ4cG^85*Hhnoj-L(>d6O|;e&jj%Grnhs z-8g$jdHsjfv2VtoT)lYJaU;%!6Qv`+rgYAna^%#n@MDMf6&*ue_U( zSVZQ(i(6s-wp*-I@6YAQTkmt+Ij*B&QvFJ=VHfpl4!4iUy}s2dVu+NofED7l4Za9e?2qfR`Hs~v#B@TW{L%@()7J|*Kgg~ zy^6|mT0brv=Ok4sZyw%Sp)zA<;L$Ve8=1G~go#Z*H!fw_tsTmFZU*9&jLq2|`sQOL zSH9i%tYhiM&HG+VyT5spOK#JYr?zH0D>x&@2XB&XdHp=tW|36wJ45#?7GIBi9o!fF&edn&*E%xc=+El}b%Edpu7gi=u9DPAO_PTOHa>}|I;(-T12Hep6(GhxFL8HC`sc*N)0amECmD3LJS;$iXxvzwT3_@2t4)2R|ds zUEixtdc0)8@QczT4293%XwN);EJjjICG*Mpbv162<3p-OcMbO0E%-&#z%}kbR19Zq z{5zZ7BdzRby`C7LzX6F(o9fxm^h6*Kl9=Lq+ zvS{s9<`q4k+_RP}F~tK50|s`Fymvxw)0zuG%{OK4*2(TlD>^gESZ;v6`sx#rt6Xo? z$}+?3e`iz#9K0QPXXuCH)^ie++tVkX{Z+m~Znnt#1*@I5e7F~@Ijg?a=&Q3u=-6)) z2JJR_oTX`b<FW(-l)I8yywqE+_xm)FCzvKwA*GCnsj&FLd@Y!zJucd8s6Q?i!Fhpbncb3ES z>Qnc&-Ka>P6rpdl?$L71Yd$$!R);@&f2Y*<(ZHqRSx1^%2KDP)ADTA5#-mIjTRQl( z-I0=ulW#;YBY&qKda++oLqab_&&NV-N2-$RrV{_h)5kRUj+uM$!JdxwLae zl{z*^J4@AMdeuy=r9MBdeSXq*GTzN%aC&BW*geUhJq{OLKZpo7kog}hs*~_u+F{Io zmc=De@6rK&o?ScJoK8$ka^8DP`bo^V(E9x2O%K}!?W?MbVVyS}9g!7&`BlD_Xxx>7 z@dGc&I(ufaKXzX9H;FDXYEXGxz1I6_%bTw1Jd3CY8*eIb6PGx9r4|2j{1&#=<@Vct zOgl3t5pLagnQ2b3Vp5+BeAu^4J!Drrv^Q!w>gFFXRj}p$e4*+&RZ<&&oe721>U`)AHV-b0!(m`oRZdcxt zoKp3QOMCa{Up^r-LLfhBrErYc4avIfEQvOavA*G(ZQM=et~v}necn}T+Uk0vIOY?7 zk;E!?Vf#bbQT|yQw}_n28=QQl-zFrm(sndUCn~S=lqwMOo~9M= z%-#3W$&TseWznUEUya)6qEq|Pk+F~~viF@T^Te7BVqI51$&^~VWY*n~ztCpBttkKX z&xiRL$qs?=IPu?ei;V326n67aaKFl(^~2r&8g!&4vA^4i_*wRU{!Rds~vd z$=W?{7~6Ma&PCU1);))oPRy)K9D1`REq7_owEo(;QtK~VwlgTc#69~i zKZSe%hDe646wR)@^)S)0XRaTiF1vp1+Tm$gAJgs;jp= z7~LfMILy}V>Ado97aM(d6t#crf1zlmeddmbj~*RsJ#v3{gnn&FsafO4MfVHbKAbGH zcH`uUJT=MIn_nw6`tdn&RZ~5|d7q7h!t5LE+pnd$H7?fm+0kz7Q50I{kh8teHA-ce zZ&k`7_h)+LlEHfmB<2VX6;QgkSXguH^-Bgt*_S0ojLx;)WtZbAR8rHOnpat&JEksa z+p>m?fd`#SGT%CV)Li9x?2v%>Zt+7bk@PpxdYk}JH~eI zc~$*gRXYy8cvvJAUf+H};z{F>O%JN7KU6=P;r=w|>)^*xKI@B=?tZ?gxy&~+xLNta zoZuKS+n3!ko_?+(26yC`5_UUXlDfY-W_UPwbw5zzR?JQje-=_BRrP+MP?XhV!JLv* zH%*61d!;XPJ?1Q!?i2hZr<2#+cKPy0 zwL6zewp!-w*3rm4cJdN_9Pe(8$Zo3!>yhepZdY<#!?a5s=H)MUR}~oLJ9KGml3fbDN1X{=0vrMc_s1|mUZf~AzgkC9NLX`X=l_do|N~ppITyG zjc` zV22N_%_mzsD_>n}h|+j`J=ROwIQBylY&4k+=BW9JDX>ERDrFLVF;#Ov?bb;YX_135>`gJAxDc7Zj z6m*%2C#3FFh)uX>SI%I~uF*B|`R=$axY_c~rGn*F$5Ob8F|nLS@d?uV8fp^FZ0$p_33-r?f}OcJFn1}0}ZY68kU+xCo4(I+sG)Y575x}dpu3u=%C9luheiD0IbVc z!xmQRJ2T@mjwx?Vel|X}e8{N6U-oA;n$P8OD&Hr|M`>+hWpi(vXq>LJRDAs-!g%B} zmtgm?oY2pD8YUM8vQ&eFfB!1E@~|>Kyu2)B zTGUp(?+4;V3$hBWLef%QCL2U0&L5hXF3!sPep@!9EM{f#DuC#X@=WbAm^!83$ z`I)bc)CI0`{jSyq8%6HZtC_Py>!rvEM&9*8)#zw{qpd3Lwgt;(2Dc{Ka_j08waf-d z>P4&^uBvrtIz#R0#YBdDN|dhUwhYI(U3r%GpLShWDsAtwZZApQ^SLhJVTNd7+Xc1Q zv_rZLUK?QmxZ@T2?t!1lnXk)LeVdI(X}dP)HLtranu6PZrv;rZLj|%sU#O;+9M_4C zcN>|UqSZh= zj}-rEaIAaTuHLV(`La}MGyWPnHBC;5pVZz+69?3T;YJSiJ!8m~CjwqL*BI_gUKJHq;hwJgwI zVB9o$=a?FU+q-s5k@$L%Gwc1->6@Y@rWQ|GG)=(VMQ=ran@NY(`c8a&O>cs7I#bvB zO0>@2hdJXOc)cDk$9$^c^&)Oq`p(qh?Yh4;wU*shcU)jPG-dc2_RIZ4hiG&vjta>g zG5S)&;E_M=jYmuu_t)}Q>l%}@`kMBqTL;EYI(pXcKy0zU&8shggO+9l)Q{gEynC41 zY74W`LH$1jta^BGcEpzYkahFVo2``+Qwpze91AB0{`Ur-?{RHjd7HSN!Ecwj>n;-T=+vL+cy67TleZ$rVf1NN`?jkVE+=cMot-Z~ zcO5Et$*svF)}*G4Jy-Ea|M`}K7tV`c6>8St^mCyatIX8)!mb60Pfr+^9!Q)c(s6FK z;lj_eHfUTmx;t)`p^Q!7jJYpI&D^$qpw$O=^Tp!@+^km>PG5525zF#x@%BYiP8FDk z_j_hh6!FmZ+2qz`Y|F-_uJ1P49N(O^{7w7>yOBQxSNP7hU3qq_ck@Km$fhs;7oKHR zynh~eqVDC?9J^P)>%3m%yNzoJlM-&%oTvZ3g)Q^;Xws5*_FWFGW1qFOy^DG9=Ct0{ z*B*A4e<|d5{JdXv^Y=b(Qukt!^zSONV}8_zseVf;o$=K!V^t@k&E#WA)Vhx7X__C5 zt>wB{MteS$jXw4zcJKGkX5Dw|LYCXtUYcb6_~#bsC)1x#Zt(w9*qD>N?dhi>RrQnR zzo_w&tbLU3+FspWd;XzT_WDZ4<3jgS?u~!&($BL>LuL8(6~ARm5A7L#&drnueotsLheKPEYYC5o4jXM6hBb8CvZ_K z{#=4#ocGV*U884c?`|70AmQZnL;IYqPVXK1`s1Fa$m_|4H@_xDoUJ&duaI!~d+3qG zJYS9d!NLj$bqnSl=)Au+cFRPa?ekZP?vQF;v9n^E$JWThZ@10(@??w9+zl}|)bpYa zILBZy9ew z!q1JApMTc(jQp9iH-@EtSg(9?{F|}IS1n$B;sVDgS)ov!+E8F zmAN7VUY$2gExNGb?w0JkPb70>vJA53$~b0jb6H$aGt~W(qRGm9%g-Vg;}7W;Hf+tk ztkx8D#dgKxqQnXB$ofCO(9Pu(>((~;ymRk&I_|Tc)X*_*nAghs!!`OBujh_vUn^#| z)%S9fa}5jt^B!Hv|L9r!w5c(8yp5CW67vDp$*m`JzJHfZ?l{@$tf#xj$in(S-CPvrJ{BC(ZHQEGHN6>RFPt*}A#DpKpE=+x^fmb*=Z$V&#d+l?!9lFN{u3P`*BV z)Vh>Qzvc`OFk*+xcJ17iX43lQU_YB_>S-Js-GOoEw;cKMpx^2W&og(@WQx{_Hj7-d zk6w}DSM^e@|Ansf{H3OfjZ^QJyxQmy5!tk+Y^?OPU=y!0DVd{zS?)I-gl>+k%TF<# z<(v5F=Y#IJ_pasBmA*K9!FgfB5yvyzZ>UMe99#b+Q)RMS&AQQ5A@RF?26q`~ zei4j15a${{mJ>5_x6QlUS@u?vUqy8XEl6uT`Jv*{?_G^=jkWW)SRL%|_I9|RfPaTc z!EMvA4NtyB>Nw4Qwb+Z3a_B+S&2Lxr-1~=al?iBBKB>&E**s&RRkz{i*2G~M+hPKh zCbcUGZ7}>=IDPoxA#H;-_Ad@G+SXKaZoFOQop(#m8!Uctf5ja0h|KP{10FgW4B0Y zbhZE7kz>z&S~zdq(AAw=ljIT-M;C>#_tgyy>AF3?*d#-{>KC)v)5!J2mxL8+W}_yD zE>BL__d@-{#|2&kgg@0p*uQeTzhh;?`8Or39gD*9+9tU(jO!|40ElVSeXZlPWarRF z-y9BjCJBkc0C0tQwf1bTkDj6!%W`1A!UHGnjqJX#W|N%E&E}w8vUPVyoheGwA0THO zd1AGC?G4ve_F+uffQpRYcLHx8v_Ae}XuER4oL^@rr_YvKQNDV?dy#t|wm8+#(u{Tf zYSj8|Y^a6N?m-hQHM1VSIq>L8&bJ$F60?tNAJ8G~c*N90bm~EiqUhmzPZDaQR~^yo8nh5v-_+tw{7XK4~wTK zayN(!sh;jI>&CWwry?e$S3Fv0r0;W0b9wmcEjguk-alG8@R4uxku34feuG-(r-iOp zDD$W}9W0%FvE+yyGvdbNL+QUGH5B*1&`Z&i*r8_Ov&mH{b^2rfk}~!;j4!ViOR53;CtscZO&{PXkH%Xvi$+t;kQxvx8tq3oDV)Pt+3r zaL82XwKyN_U=ia&#z4;pB_Z1(rqI74KXz}3ErQ77_{VU3>~ImovP^6o;!AOS?3@w9 zP7*QffMFd6vExH*17rsD7UV|*irGT2qldKz$Dav*7-S0cY8+nyeox3K=(!+i&#jPo z(7TWyJ9xyFK$IAUI28ra@$lmtNn(14FURq*<3|kJV8pP)hIIxc?Y#+N4E-(gv*2F= z!44qSAspWc{s_o)==C^0b{L6a>y4N;^g>V?vIDXZ`cDSc{}#~YaQ;#J{`ZHji}(_h zPwMLc83O$%$b_ti7(suAcv7FG5bPvk?c(=;DD=tDtN8toZ<>gWgq{tO`fh>Dh5ixw zNq;VeC}JQBFsc5>Hdu@cwhW;A)N&hd041|7w-~Vf& zW6LY+F~9%4p=&|E1d{O-3t0gDJMxqMCu2qd=YNgg|AEla53C#f{wHm!4*euZ(nmpN zLVt<;r2m&e(9Wy`e*dq5ZUFrezyH0UV_dV&gJe8ygUpBi8TrZiSVQ{v=zn~>PHYn5 z@A3QJ4f=5C86Y{{X2=}q?~$Lh=Sm3XEh~xN|JcqX#)00z?|)zDW1$y;WIXMJm_h%| z@BjZa|F5Ea(*O1lHqsvf8IVYbA@pX%lm54XC_|6u_kRdpsNZNBNWFGWS$WQwJKh6KU{Qh@E8cn1>3zGKU1TlvG4*5y{uYe4Kewg3?5zwbY zf6DKFAL!c9FN4yM9gv04fBnP!zlQQjeH|b}kp39Rgsg`cL4S^TQlF)e0nm5%ng0*? z{qKSJk%-R$Nqx6K=0fj8e$t=+Y5te-``-m=h9UiFkhIrE$ZY6uke~Gba>zjF2l@TK z7Wy>kPx$@s4P6U*0VoBDg)D&n1Nlk+|EKwXli&YNNTZJQsUS%o1(^x`74nn*Uj|Wy zzK`GkYoHrIui^K<7xdB4FMtw|ZIJoUzaT$3pZ_%fEBO8IhBU*G{v1e-w;3`AdOPxy z_N3>3GQa=n`QOOze_x~-i}Y7O8OTnE8T4+3tT2<&Uzo{M5SC-83NvNpgoPOcgqcE$ z!bXgN!c0S1VL^tnFjJtP@DPTYFq17W%wnkEg}6$>>lucqx~#AO@~=n!0VKb&oUka# zFQO>yK=Rv@7m*^rU_W79l3zz&Sc>GAR1&^Qz3)^0yH5G< zI_1CXl>eJ`3jGV=a=dkoJVOD0sg`5KzLm0Yvf1d+mJ>x2a$z0Eb@ko#< z#1vtQF(sLJvo({=)L|Mj?WqC;1cih}M8(8dEOBuO2}w99IB7T;I9a}v<2!l2Q{cOP zeVk$+r_{&w@8gvJ!43Ear}7U@_3uuN_q*6a!onhOqHy>gJj(-|p$#9skh$Dt~W&RaLeBr5pIabPS%o zRv5ES7_(fMHyitbk`OhB07M=_?sHTiA`m5rG-MEj36X=aAOj%ePZ1&o83+-CC_p42 zst{2~f5`vV37`Pn*`mDvnIo5ro|kJ|qt;3_PIBOduU@dK@#^LWMnX~`#gHZlabkDzj?yx`_Y?IU1R?ji#AV*0-d(By z|9|Qaa*9OgHmBQ~ZezM_N&V?_pwEMx3#M0XQBU59WY5U?3O>c7mOt1SkP+1Gjcn~}YE(4c=PrxUj0cZdgfCb4R(X%3Sme-MylW&@7%+pfM8t(9gd_!}1f-cV z4E8FYFb_YruC|UYd#0~nXn=>Cdk|Z9@??FjaXLB^*mFF%T$e!h5??OY!6%5V#dZ%0 z@|!YtY;bU}cCd$!hqr^9i?)-m_t-E~564+tE)K=8d5CxRLX4~Mj$AMj5(ha1$%GU` zNZhbMyx-H+dCD;7=?vdhL2O@FwzrG7Z$K!@n8Ic-h6R#8ybBE9MfY=Y3UYB~yZAVh zWUd}u7rcMZ2VYP3ap1CD0s?#krm#JHT)7TGF6_Xd02c>uwv%r_z$(8W@|}8bzW|rO zK;(DE_vxwRI7Wbr|0IR_hee3A#^6%@&KNhOUb@6cva{vETidQ32-f9P~hcnxe z>+9sj4hr?-wF4Cv7~~s(0;nje7}NmoFYxtcdpr1q(nb3Qu$?^u@dg1Wv{k6Lqc0cl zwBwiSFhPZ!7zbm5&N9p{MV;nyy}#m~ioMAC7*d|Fy;Z;wE{qQH%Gl$Nin7OyU( z4s<%M2inDfJCEFk>G0lp(67!e|0<8pLxui1&cDLR$-6oPupJ$oym<8> z!vcee?e5~>>=J;^av>3`e7t;ogMCm8HC8-)eJ~h<+{v2~=z3thJNpLnI{#nk`K6#! z-RNpF=#m4RNOO2Q1Uca?lRoruc|(wYR8lq_&Tm){lH ziaB70@W(is8SinxY@i1<9ZqHhY4@H3-oqzwm8+|VlZOjtGJmEyA_T3#n?WQ!sgJjx zLy(6f%3O^hjN_5;o^C=@Bp%#RYbZPLXRR>fXE|9p;r+_|II|X-v#g%^NL&ZfCH5&R4SH^m zvPhbLS60t_q%1L(h-^!rvbu7l%L>Ug}^6KM!p`XGh-g8u7oJ=c71hrj;qVp}HjVrFu+Me2OF3$UJ#~_n`3?$uTCVqulvovj#ctW>$cKN-aMi8 z>OS#Jed2rO?~-B4D)4@Jkinqy*Y?Qo(~l{;9zyCu$A|ZbC*hCR|2^J!L+|*W$0zy6 z$M%lD)u(*z9lhhr`^1;U{XKqFeDC3?;Ef85Ak8Cf6qVi zAL3t}_i^pRe@gp+qZp$O8y?d^v>Voh0FdPuXVR~eBbt)eedt_?UjFzU-^iN zZ{d%dp5?E5Dj>TPLdGFIzI%>;5`ObZ@A#hiNxVnL-{Y0}@&E4lT3-ZYbs?l2`uKg@ z-{@EG_`b(aWD5Q@|2FZz$Lo&k9bejKe$CbC9pATpuG+oh`_^y5gx>Le=Wpr6-tm3& z=j->5@7q78r~W-Yb=u$KCI2Db`XAy)S_#V1eK)a(zwdcGoAdX2MEpbignx+7GX8t{ zZGGbV)-QK!@BDq^Rd)P6K7M!a_`dygW9?zQ<4ahxl2i|DJ#D!`|_I z>z7~AJHGGnkF@F28U6{Q4ZfZ~VHC zf6uS+y?1=yc`oNny{VfX>wU}r;nq98XZwm?5Rz4g^t{gXjNfu!NcIqf#P@V)BHq2* zo!8{K69YCx{0tXF?1eC+^p!BvS( zrokXtWf~*RJgj?hL)|nR=`4^Q+e0h;5w`_?U*z+{vkhcYIi?ZPVpE`C0gHa6mM|TkALLwo>kpJZD$$6r_ z#UOEpIA255+aBl9bPsLMKUOBrLkALvb1{U(q0a0Mgy9@|I&<{N|JU8Oz*SMLeGjlT zN;33l-q7%tiKYu0+!v!3hB-sDr>$+N8mU(h`; zZo(6zK_ARvZ6fYR=JO_>IPgN%0^Aq;Q49V^!G1aB&;H<;d?{)i;R*0f_`T@ELi7c7 zYPW&Ez-Lw9v&vA^2B%ko2R;U0e-3;H{0#Vi1OEx=2!sOt0TD2P;Xo2F377`V1{MM3 zz)Qex;2>}U_zs}Xqb(p55P?`A9dH2;0ds(bz;a+M@OR)#15N>F zfggaYz#R?EsP2FS!~;&?VPH0}0C)y?4tNpR0UQR-02hGEfIoc7ARrVFfLLG>FdbL~ zQ~BezJNXYPYM zX>a6&?m_-*J#tUv`JXc6$?in1aIO6WP!D8eDv-U~fQ;D?WMLjc#xxCC!)Rm>i;(3? zM?E8 z0sC*`<({MIls7Bj+j=hW7Lu%t??e>Z@fHtpx+AZLgS~}AbF$oQvabp`YCMQTPGU;F z?^GND#|YCm9=fuoIDH54P7?R`wrC#=cRKTY1qnC1FAAgWaJsKnB62n)E}fl>pgG4T zlMr=AK~CDu%0&L=r4ctTPNF6|-N~R_vO5()YHIRyPYfG7X$YLT5X!c9bMwi$v}|mX z8%vU>p)5U%Bml@xZk{s-TW4+t`D@3_Cr{7FMiK|d_`xy=c%*S>PyzBoIqtzE#fXy_bCZ&x zIT^V(F9jFhP#T^}QzK@?FuSsPW<^W!z2b#ii!wPs?@LV~NK?Y*L-n24x|?Nbg3ZPH}=_ zSUmQ8k+qET_7d`L(Y5JO_TomW+cVj|9n!$iobg$C)D0!^snc#+NLtIvv+3d8vc3YA z(8F7JeQ$(w+8=I1E^S)Yc=;a+n>5w5ob$E+hr++8%>PBXr*BC_tPRa+(l=;4LP^kM zFv(}yDsas893Y85`##l(J5!<8kA3B2YsaKrp#Tkp1Bt*yzzxg;%786E6;K0w0sH_2UcvK-KySbV z;(Ia5GVl_0c(MM0QqD)$bumAhG)>4+tX+t zbZiEBN%m}sNWQuMU1|{2jb{}nQTO>nn8l>#yFH5m&y`(28v)D5UK-Jk-K44zFOYKEE~Ff>2XIjLasWTz|6 z1*-%yaecGVIhl4B)1wO0oOvW4j%G+#C?^^JU!Fc>-`$<+au?(gX_`bmiuS#I&UFn2 zoeEq|-+kPqc5H5XLAKLF5xi>Hw#lfx*HI?`vj!Hqor$?g zS?SI}cua@7+|0L|nA>=s`o#}D8I+ropPTIj6JVWX*=x>QL|SW7V^ADLMFoIm^K4>J z5%#`^fCI@m6Wrqbdn07}SuYb;qwc{Qh}E!5c*5Hlz?HLvkFm9%1; z7f=;s(NJ@-YHXv*Q%bcYt-_*oMLIK5LE)G|LnA3F9z0tx#k1Hw74vazzTaRNy&e@@ zXzvfs@|qw~g&0ZEpUcSo>@uHa5<$)T!*LQd$JZZX+Q#8=G-@&F^T?=JLa{gOd5W{m zr=y-Zn*sp_Ud#cj9Q#vA62*~gqjIKZxpH%e5#}KT>3fCE<2O6i!ZU}B*NjPZWf9jT zf(rVJGf7k>xsO+35YC~f(++Tgm%#?PUD+OvaZw+Vnx1YXVqKsotNd)iK^SJB{rC=6 z*f5*t5+FbE`#1J}ywk&hw|X>0BkT6T%#cT@d`jXLNQAttBy@~U`{(K85_&+`NwJqZrBj0}c zaQx0vEPjhgzW)4=@0@R2>WBKxn+Ff_6*SrUg*G|(H+KDT-CvFSpEX0S`&aYv&#wRX z&iUT-x^e4iC-g5r|K5H6!)vEbN<#>0a%R^34`fft$<2EZdZJ+Jw8En4o{mQh926Nf zcu4fnVZ&o$M~sXc6`znedQ8&TaY%0b2Ymee9kv)-7l3&DtfE<6y?uItJj8|1n)ROT zqpNGLlD+VUi|uU%>c9E?iRVK-r*HWCDDolX6Ykw^`)}5d@Ya6~_1|Axx3(j7W^Mgi zBm@5RX>9-DHTD&wno-oK6BAE_QpqRoKf(T~Hu7E{9{;Qs`3&Y^-<3C1`5!8{aXt7- zJU95uWfA&6)PeuU&HOK45MJsLebf>9iR5ehql|!j`a(bK@AR+ni1$OIel_a<6@2=} zmlyWj~$C3_s-L4J|9vWdoT(YUp| z4La;|-UIJuIh4E~+9SVGPkz~cGFr>R8+%T)oP#&ta#7E1*P-zq4vlxl$TkX~5Iq@y zYkl=2aZNt*Qlyk!p(oex&!7eiF!)D4y^+!L zv&ZMQ>*k=XY|t?kJ%TII*k4k2AaZ$rxGx#iWWZC`H)eA5$7}G*;TTmG?v{==5k|s? zEhJrr#!)R$7NhlkJD@kkpa4j+j=qzoZwjC~@IkJkonYGctQ*oP;mO*ynuIzRr<&mL7Ro3U7xIKFC4;k*>5y=Ht0r z9d)F_|D6vO{3hI~gj>Tq1VPY+XdzyhCOj<66P5^@g{?xB@UBoNd?WlM_=%mwZeo8? z7URWnVy5U47mF*!7sOY@!{RaVwD^tKMd~Rrk|w1})zT&Ds??uE^`jPm-xK+nx0@{;>c+#o0-ncWtK7fq*GG8Bx&*5ecFfQ z+Hm_nb(%@z?&rqw6ND5YUC0!&g*?G66bdthVxdInEQYH?)#2J0?QOk}G2SRK_nN28 z-^lfGWZv*-57Uy3;NBDN6rYnyl`G0A^9%E$nPxpm1XYT6?&&~!CjB-&n7M;fxF@*` zai(}k>?FM^tx*=Vf89*i*^_oeSj|pmm8n zSDr7I%1h+sa+zEX%2&vnV&>iTZOduP^Zee$^W4Sc$ zE|IFSAB~|F^Xa$)>Na@Z_0FIlhv@giJKXro_2gt}skBB)QeRSKZG!f@)=BT957U?H zm-JtCKjRkTcH?hG2P5BDYrJIC7{`onjUNrlj5S^640E1YW^OfqF@r4HT5Wx7+4O=J zAMJ-{f#@al^YkWq2j;K^(}wBF^kVuk3X{y_GjkY&r8tJ0%$0JhxmUQo++pr>?h+To zcjd$Q{(Lw;jIZFg@hAB@{uTGp^x>Q}GZUjZPsc)zU)lbxO>d&gbCTN-#p$);zC1~TdR4r4> z)uw7QwGwSUX0J?pQQM@wqV2}~eWHD)HPc(@t@L(!XT7`LTW54xw=k2jdZIo-PuH{c zY5EL(mOfv9O@CXzpkLJ6o6nlho7>D=tN~V?^|eKX`VrQn*3*7WbLI(VG@HrRvP-!& z++O}|{xbh7f49&_ND#&f-wUN;XGxY0NcVvEM#|&lWO=fjD^HUjksp_zlefrcR0Ob>SeXN)*s_a0EZN6voMa8TD3OPm}tCa+-BZyK8PL-x5ij* z>j{gZJ^eXAzfV8GY-0{HXPG|SMD7i)HP7*J{60QTm@BLi?h@0*4Pv6yMJ~YVx<@&v zbWk;IqP9)*10S!_H|Zz!X5gu=#sI@Gh8yFI46OY}aK{Tqu-V1zXPRb=nPe83Yt4OT zHRMWw)ygra%hqewKI@=$fvn4LKYS+vK6Ep>71m}~`fl2wAE#H*I~bNV*?4vm z`z*Va{g}PNhH%}vFpfyfXl^7okK4l?<$mOTf#mGW_u?5|;~(Ic@#XwRek;G1|A}uS z^c4(Ym{2afB(xL5L`{qqr;87Zv&1>#JaM7;y7-=WQfw=QNZqC0ko8egjFccfBYh#Y zmdD78!Gmof%cH@6^OUEQrOH0#9p#*IQF#Ycm$2?rv?A?{)>@C$bM^0y&gKYnteImz zWG*mInU}!w z1MJuA&ukB_4>yQ&a@kxySH-=}eaE%qL-_7|Z;aC9hhUtQ7~^(+H($l?=d1Zc{4xG> z$jrIIYGJqVp71+X*(h<0I6=%1vqd+?`kNRf-6wr2{VGiXN0rJ;}I7}Q>~}1!`8R9Zoo60_M92?5c(l{ zE?r7jFm2hckX#%)n2lqnu!ZbG%-R9=7<-oW<63dOxHvA68;cRm<2FIxIrv*KYm@jz zd>Q)x8Q)6iE({PNgg8iuslr3xz&C_L!smiR>>~CNIdQO9Ag&cZ62AjS_LgNiK~9mg zFh?t~E`E{&6%9If0yOR}%N}$Kn#dH~@-zRh(%`%b9y^wl^%rndm z<^X2wR`wotD4WH;z;0s?vX@wYt^;)BAZ|RT@)n=W&*Yzj)p1e?LH`pm6M5oO;%0G| zxKFGWkBYV8_hN5prLpX1r${H_k!Y z_rRK*U}l;H=2CN)dCu%;b+-mt`4;)|6|g3?61sOZY>rv5IuT*ckz$$3;1XGP5d7IAb)~C%liwx zg#M8GQ9=xCu?GZ~P$WDFYpg=pB?O7B#5={iF~77JE=GyN#PMP>2_}tixbxv8mtx?v!Rxvo}BdgZ7 zHK04eKNIP5bRe^sd4)*?m$cx*_*`+Myg+#nI^!vQh5ov}Pw#9fn4zskoe_lD8EZal z9yUKRKQl*?cFO(i@2Oct2eL1~W{nnCh+m7E&>0!N%LD+ zhW_|I2#OM6IS+*GJVHpsYD^I_U|G6gSC(mvF6fGG=n;C9J``H;g1*3b+E{9=Fjg6B zjP=F_Bh=hrZZ=2aWlC`x!K$k+yd@tZYd}7pYW&n)BG9!9DjlT zp1;IT5q=h~!J=;_-YVV>o@y&D5bu%tL81$iA{kNyB>P$E33-A1H00h2d6m3IUN3is zWxiQ?S=pxSQ1&QqDsL-PxW7%)Rnl)tj{d%h1cdDc(o8w`IIdodYggmSzk}CK$d{pw zf0O-{=E`kKOQp4Pr_xdBqI6TvEAOkUwp1&GeQO$B%@Xq~^IeNd@weYw?MGwarT+H! z4ej7Q@Ll}93?tmT%HTuFo7;21$|B++tf#vBmv%%w~ST})Iutg*g zZw3H-aulr6&=V#QcV)+8&}DzF}c{q&Tz%Gzwb z0e(gY8~km5vp0R1K27gpM!~i_%LYPk=W+YEZoJGdgf&vnpXV>~l+X<`oFmK@N`>XZ z^TGyrqdSFa;dZf?m;^mN7jym`?2%efJ`kQ~x^!NmifO@S(fW zed+t@Ip}j3^jUBAes%*ibshT)I|)|&25vuhjSGQHSNSn~0l$F{hXhzDya{c5Qb>T^ zv_X7BJSf(S&7}hAIq4ngjFbk?Y@2*U9G zHrHOdCDV;bU><=beuW8O?_h_s^V$9EWwsR;%aw4;xOce=+z>vAUj^;;6(1{PL0dJ0 zE#(v+6+1|GOL5Y8=$^LnK-k66%5Q2%c;%T|7kvQquS?&lf1`JTB^++0Sd|tP9zboy z{X=M$UQgH4JDC%VgT0gO#zwIt*az4}?2GK{xO*)d3j1gzm%$Zt&v4H{vwp$-#NEQT z;RnE`9n7cmPlAssp;OQD-|<002O(S-EjS^Q=L?I4Rj`z5gcCxoa8dY8=n8E*Q>+qy z6$eQR;K%-5+A8goi=f{ghsW@y8V0L%32cT9+IFo9UP3JN!9R>7a~iCldcr4h0k$6L zLcc>h+4=Ab0{AT9ocNvSCk07G(qbtdvZ#$R4mwrR78&niHhP*<%`2wE3bNY3-bEWJ z0eAwQqV}*KvFF)lTqn-t;<*R7N4Vv%{odw2F!pARd8~Y>st*E4;)9l&wm<8lz=s z1=?fUQ}Dt!XgjpSu+IbGyK#EBJ^~)wWc@8zNd1i^&{*Zhe#pacbGSJkHqkV2(P8r_ z=rGfwN&{^9+?&3{Tw@}*?-94S#;1u(5FM%!`$%h{TQ7qKn-oSJU{rzz?;G(%MwX-R zu%puG96C+7UtkbjT7osgz&hQozN>zqUR49MTeVV4r~hQqg9s4oV$uhw6-ZG?9qQBUfp^|ShAc=MDIY_v5x8ognq^R{#y0Z%W@$b@#E zY0NSf8PC9?*krs63-5vuK7ObQ3pHmTSScltU#;1)fqk<3olNGR2&75GQ)bn%7f)I+nQ&s zgrBp{B9WiHu%kbO$5Rho{{!KN$^bk`1M7mmg$|-aY#(npR-_x&^?bUVevLj!-^R3N zhB1>E7xN^u4wC*`rWsaeCzgRdFbV#Ii=D|{ps!+r|1|s_4;-+yk zxD|*$e9T?p`hu%+_{IE3uo2Gk-|)?aVEBO&Y?=sR0&JOC!UAED@Cy5|T@*nXrA$>`R6bRHS2`g&k%m~r2KBJ|gW3*uyN<|1JhbKnZJM@1 zTL&)Pf=I&`+6C^90x`bxh~@ZMw_vXBv0`n%Z6`D<=AkNpgbt}t`d7L){LWlv zJM%l!liwo6!6!ToFRH(C1aZJDNQw{CYtS%#v{m}|@R=H5FP2zTO#t4A!E1exrK{qx6_X5!S6~x=7W0jnhR)ZcJwU@M=kW2@(L)r)0aXSJd>b;C8L>FH&J}|Br9T8iY z0`B}67Q~$xBWFc`8>!j=YCrnc25awcknzdP6sCxo&#Yup!7-2WkMm36m#pDmf~09J zOc$OOc0x)Xz&w8-9v5dxPe`Sh-{+;5qz|QAWLAzx zN|Z`Op*}(+prsnBh9UMe3Lf-Z>PM;{)^-@Yvhk3yS%@mVsr>@GC{VvcpQ>Ne{Sk!= zGI|+b8Oe}0#jwKOfMwX(T3{`;UbHq@CoHNV0B-`}yT|AOv_M;k66De!KyUm?_hC3@ zI5U<>XR?_RW&`s+^Ci=l<=F?hRq&{m`Gzbg4^tyZh&S<@}dG2;1==z~Aq29X$<9!5_9 zMT_Z0u*6=YtLYPT2gVOt$WQp2&=adFUyvkI8Z3>F#z^qO=*x+t~PZqr+19meT# zwmx&%an`5U)$sK)h=o8~!?Jwcw5PJ*`i1fJYA#PcUXO3j6r{EDz$ z_(8Y=Pr0?&4l~+c)WulP@d0s~xJ)d=tbQzhCf31XoDD61AADR{MPtPty3w3VI0e7a z0X`TjrXl_?3m)~C;$&$C>MxW=B9=8xy`VbKKdRJ2x9Q-h-?#z%5T&iUOWmXGvh|t+ z@264J%iNbjnanC@k5p9O1l8SMO5!Rc3-AjBJbvI62rn_wO7W2@OC z?B8HPq;a|2L)=1cGk2V8-~>JbF^6${HeZVP(NXw>pYx^=Ax=gPWuN#dc;d1cCOsg% zFP)Zt1jp}}?@|^(W1mu3jna?69(5Z}!DHQJyk$^To_>hT1ZbLPk^iZdnk%)KG0BK9 z_Cwaxz$ZV6>_|Oy;YG|HWi^Mj(;6DFi`4`EKW&N7i36=@YlM{uyE_G%G23!kh1SDZ zQ}e7+*ra9FTC2j^0u8y-s#53ZL;u=^jpEu@324nS?Dod2*;2Elx{B{dPZQ<~z!D0Kn=j03E;Y;$*@-^8{ zX{Ow&+^)1z+9JQzS?P+{$~{Uyg@LY96hnznqLiVCOOH}U!!Eo}NmZQ6S7d&J@s24r zvxO%h`JWb+!oyvK$liMBfX%|o!Zu`H_Q11vTR4cA zNO(vE(9MjTiFmj#BlMBnNeNYYAm7$kS*Cq}$UAu_qzCMb6ef>xBTiR>IM#ev6BSG) zvlY5-H{uKXnQG<`{K%usapojb%hWOT%z37Pxd?yYDnqdjHjoWsgV{E0dp3j(WqTl| z*_WjuYh_kv!`VnSnvFq(Gm#z3PGD2mbohMPY#!@I#B&B)%$Bfo;Zc;rR$0!LvE}SK z%)}hv7Oztbwh-%7+Ylg!ckCtQPI9N_&buRhd#8N}v*?1S@Tn_DV=2U(gDi3Pnc_DH3t~7$r_gRK_BDk%E|Drjm`weidYN zwQ@+QQI0Cdm6M2w*D3Xg;WR)tUO|?LQXRacZJE7O}(>H66K`Y?U${W}q2l2E*cRZ-$tmh`xrwZ>3EhmbY$(n~|`;V@&dc zO2L?xZuwk;1O)Ak!krS)Xw!$Vm1beIwxy-BZsoHqGl}PBw33{eZrQls8 z@YQ^HNoC?XaT9Fl-Qs@OS4WX!sT0qO7vZfr;6t`SzNLrMSK=id)^!Z5>j{WP<=BR6dE z5>RUi^26&8LEj3B?T4jv6#3vfQ0=086?6*%hlD_C^abs7a77F_Vgl%wt++wK5@kMU zSf;E46}Kw8LB~Vji<97q^PuHb#Q|!z0T=WD2k@Y1BxXJlvz`vBy44w=>wI+yD7y}k z?+0~{swY9;^Xf%V*r5f1#vxh{P??7>5Q$hvB7A{#(AurdXv{&bLk@B)a*+E$ z^P}2HQ2o4i5p;LxL7;qy-UFT@uj}v?Vj44%ZbX$!5Nlb2IM6!e=eFv*_5H9oj>31W zL(KXj;x7(Zplu*OdO&vYkQ9|yj=MWmCD~L=5%E4IWp;+NGR(Cj7b{tl93V1dT8T(>n>r276<;c=kB12yV-mQWD zsYO=40sKp0wFYCQhJuG_tk7_*&N%RK3RY#FQm7PzmrJ3W%9RRO+uN~9tHII7u{!Iq zGOvKE1F<68+x9n&br=rbj>Gy(!P?6Me;2EB!Qso*a`1Six*c3zt=53gYt?#i`W2PZ z0^x8S~NI*EO1-bHVq^VaHS;3gwBE)PVbIwR-UX6<82~$PBc{ z8VJ*A+h>o)IvA^`U?t=sT2-vi)k~3mFGp6bQs1suAzoXfAJ=R3dPGLAz=scn7vCOo zJPa~ihWw7k6BJ`1w=*HL3yoq(?NY?*%Z&=i?d?Vttfv}eacYfv_TfXsi9uR7atu>Y$-6LOVI2nc6@r5q-dOWBCbq0)eU|zmY&u zg?tGtu`@uynu;2Du z)t)$6ExvyPLkgtB=xEqubLk3rNA<|}gfY=fCM=I7usUjBSp>s+h=YYt3M-%nnm!oX zJPr}!QmzuZw1EreX+$jYK)p?f@g3r8K-K1U+a*jXES4HrDGjhp+IwvgVt)|bdNZAR Xqdu*|$Q$6<_kgUMK>VZsk3atf;Ene0 diff --git a/Projects/Server/ScriptCompiler.cs b/Projects/Server/AssemblyHandler.cs similarity index 66% rename from Projects/Server/ScriptCompiler.cs rename to Projects/Server/AssemblyHandler.cs index c17ec1822..59c3ce852 100644 --- a/Projects/Server/ScriptCompiler.cs +++ b/Projects/Server/AssemblyHandler.cs @@ -1,6 +1,6 @@ /*************************************************************************** - * ScriptCompiler.cs - * ------------------- + * AssemblyHandler.cs + * -------------------- * begin : May 1, 2002 * copyright : (C) The RunUO Software Team * email : info@runuo.com @@ -21,63 +21,31 @@ using System; using System.Collections.Generic; using System.IO; -using System.Reflection; using System.Linq; -#if NETCORE +using System.Reflection; using System.Runtime.Loader; -#endif namespace Server { - public static class ScriptCompiler + public static class AssemblyHandler { private static Dictionary m_TypeCaches = new Dictionary(); private static TypeCache m_NullCache; public static Assembly[] Assemblies { get; set; } - public static string ScriptsPath = EnsureDirectory("Assemblies"); + public static string AssembliesPath = EnsureDirectory("Assemblies"); - public static bool LoadScripts(string path = null) - { - string[] files = Directory.GetFiles(path ?? ScriptsPath, "*.dll"); - - List assemblies = new List(); - - AssemblyName[] names = Assembly.GetExecutingAssembly().GetReferencedAssemblies(); - - int loaded = 0; - - for (int i = 0; i < files.Length; i++) - { -#if NETCORE - assemblies.Add(AssemblyLoadContext.Default.LoadFromAssemblyPath(files[i])); - loaded++; -#else - Assemblies[i] = Assembly.LoadFrom(files[i]); -#endif - } - - Assemblies = assemblies.ToArray(); - - return loaded > 0; - } + public static void LoadScripts(string path = null) => + Assemblies = Directory.GetFiles(path ?? AssembliesPath, "*.dll") + .Select(t => AssemblyLoadContext.Default.LoadFromAssemblyPath(t)).ToArray(); public static void Invoke(string method) { List invoke = new List(); for (int a = 0; a < Assemblies.Length; ++a) - { - Type[] types = Assemblies[a].GetTypes(); - - for (int i = 0; i < types.Length; ++i) - { - MethodInfo m = types[i].GetMethod(method, BindingFlags.Static | BindingFlags.Public); - - if (m != null) - invoke.Add(m); - } - } + invoke.AddRange(Assemblies[a].GetTypes() + .Select(t => t.GetMethod(method, BindingFlags.Static | BindingFlags.Public)).Where(m => m != null)); invoke.Sort(new CallPriorityComparer()); @@ -87,20 +55,15 @@ namespace Server public static TypeCache GetTypeCache(Assembly asm) { - if (asm == null) - { - return m_NullCache ?? (m_NullCache = new TypeCache(null)); - } - if (!m_TypeCaches.TryGetValue(asm, out TypeCache c)) - m_TypeCaches[asm] = c = new TypeCache(asm); + if (asm == null) return m_NullCache ??= new TypeCache(null); - return c; + if (m_TypeCaches.TryGetValue(asm, out TypeCache c)) + return c; + + return m_TypeCaches[asm] = new TypeCache(asm); } - public static Type FindTypeByFullName(string fullName) - { - return FindTypeByFullName(fullName, true); - } + public static Type FindTypeByFullName(string fullName) => FindTypeByFullName(fullName, true); public static Type FindTypeByFullName(string fullName, bool ignoreCase) { @@ -112,10 +75,7 @@ namespace Server return type ?? GetTypeCache(Core.Assembly).GetTypeByFullName(fullName, ignoreCase); } - public static Type FindTypeByName(string name) - { - return FindTypeByName(name, true); - } + public static Type FindTypeByName(string name) => FindTypeByName(name, true); public static Type FindTypeByName(string name, bool ignoreCase) { @@ -142,7 +102,7 @@ namespace Server { public TypeCache(Assembly asm) { - Types = asm == null ? Type.EmptyTypes : asm.GetTypes(); + Types = asm?.GetTypes() ?? Type.EmptyTypes; Names = new TypeTable(Types.Length); FullNames = new TypeTable(Types.Length); @@ -173,15 +133,9 @@ namespace Server public TypeTable FullNames{ get; } - public Type GetTypeByName(string name, bool ignoreCase) - { - return Names.Get(name, ignoreCase); - } + public Type GetTypeByName(string name, bool ignoreCase) => Names.Get(name, ignoreCase); - public Type GetTypeByFullName(string fullName, bool ignoreCase) - { - return FullNames.Get(fullName, ignoreCase); - } + public Type GetTypeByFullName(string fullName, bool ignoreCase) => FullNames.Get(fullName, ignoreCase); } public class TypeTable diff --git a/Projects/Server/BaseVendor.cs b/Projects/Server/BaseVendor.cs index c4101f302..5a9f023cd 100644 --- a/Projects/Server/BaseVendor.cs +++ b/Projects/Server/BaseVendor.cs @@ -20,7 +20,7 @@ using System.Collections.Generic; -namespace Server.Mobiles +namespace Server { public class BuyItemStateComparer : IComparer { @@ -103,4 +103,4 @@ namespace Server.Mobiles public string Description{ get; } } -} \ No newline at end of file +} diff --git a/Projects/Server/Buffers/SpanWriter.cs b/Projects/Server/Buffers/SpanWriter.cs new file mode 100644 index 000000000..8634d9e75 --- /dev/null +++ b/Projects/Server/Buffers/SpanWriter.cs @@ -0,0 +1,298 @@ +/*************************************************************************** + * SpanWriter.cs + * ------------------- + * begin : August 5, 2019 + * copyright : (C) The ModernUO Team + * email : hi@modernuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Text; + +namespace Server.Buffers +{ + ///

+ /// Provides functionality for writing primitive binary data. + /// + public ref struct SpanWriter + { + private int m_Position; + + /// + /// Underlying Span. + /// + public Span RawSpan { get; } + + /// + /// Underlying Span up to the bytes written. + /// + public Span Span => RawSpan.Slice(0, WrittenCount); + + /// + /// Gets the total length of the span. + /// + public int Length => RawSpan.Length; + + /// + /// Total bytes written to the span. + /// + public int WrittenCount { get; private set; } + + /// + /// Current position in the the span. + /// + public int Position + { + get => m_Position; + set + { + m_Position = value; + + if (value > WrittenCount) + WrittenCount = value; + } + } + + /// + /// Instantiates a new SpanWriter instance. + /// + public SpanWriter(Span span) + { + RawSpan = span; + m_Position = 0; + WrittenCount = 0; + } + + /// + /// Writes a 1-byte boolean value to the span. + /// + public unsafe void Write(bool value) + { + RawSpan[Position++] = *(byte*)&value; + } + + /// + /// Writes a 1-byte unsigned integer value to the span. + /// + public void Write(byte value) + { + RawSpan[Position++] = value; + } + + /// + /// Writes a 1-byte signed integer value to the span. + /// + public void Write(sbyte value) + { + RawSpan[Position++] = (byte)value; + } + + /// + /// Writes a 2-byte signed integer value to the span. + /// + public void Write(short value) + { + Write((byte)(value >> 8)); + Write((byte)value); + } + + /// + /// Writes a 2-byte unsigned integer value to the span. + /// + public void Write(ushort value) + { + Write((byte)(value >> 8)); + Write((byte)value); + } + + /// + /// Writes a 4-byte signed integer value to the span. + /// + public void Write(int value) + { + Write((byte)(value >> 24)); + Write((byte)(value >> 16)); + Write((byte)(value >> 8)); + Write((byte)value); + } + + /// + /// Writes a 4-byte unsigned integer value to the span. + /// + public void Write(uint value) + { + Write((byte)(value >> 24)); + Write((byte)(value >> 16)); + Write((byte)(value >> 8)); + Write((byte)value); + } + + /// + /// Writes an 8-byte signed integer value to the span. + /// + public void Write(long value) + { + Write((byte)(value >> 56)); + Write((byte)(value >> 48)); + Write((byte)(value >> 40)); + Write((byte)(value >> 32)); + + Write((byte)(value >> 24)); + Write((byte)(value >> 16)); + Write((byte)(value >> 8)); + Write((byte)value); + } + + /// + /// Writes an 8-byte unsigned integer value to the span. + /// + public void Write(ulong value) + { + Write((byte)(value >> 56)); + Write((byte)(value >> 48)); + Write((byte)(value >> 40)); + Write((byte)(value >> 32)); + + Write((byte)(value >> 24)); + Write((byte)(value >> 16)); + Write((byte)(value >> 8)); + Write((byte)value); + } + + /// + /// Writes a sequence of bytes to the span. + /// + public void Write(ReadOnlySpan input) + { + int size = Math.Min(input.Length, Length - Position); + + input.Slice(0, size).CopyTo(RawSpan.Slice(Position)); + Position += size; + } + + /// + /// Writes an ASCII-encoded string value to the span. + /// + public void WriteAscii(string value) + { + Position += Encoding.ASCII.GetBytes(value ?? "", RawSpan.Slice(Position)); + } + + /// + /// Writes a fixed-length ASCII-encoded string value to the span. + /// + public void WriteAsciiFixed(string value, int size, bool zero = false) + { + value ??= ""; + + int length = Math.Min(size, value.Length); + + Encoding.ASCII.GetBytes(value.AsSpan(0, length), RawSpan.Slice(Position)); + + if (zero) + { + Position += length; + Fill(size - length); + } + else + Position += size; + } + + /// + /// Writes a dynamic-length ASCII-encoded string value to the span, followed by a 1-byte null character. + /// + public void WriteAsciiNull(string value) + { + Position += Encoding.ASCII.GetBytes(value ?? "", RawSpan.Slice(Position)); + Write((byte)0); + } + + /// + /// Writes a dynamic-length ASCII-encoded string value to the span, followed by a 1-byte null character. + /// + public void WriteAsciiNull(string value, int size) + { + value ??= ""; + + size = Math.Min(size, value.Length); + Position += Encoding.ASCII.GetBytes(value.AsSpan(0, size), RawSpan.Slice(Position)); + Write((byte)0); + } + + /// + /// Writes a dynamic-length little-endian unicode string value to the span. + /// + public void WriteLittleUni(string value) + { + Position += Encoding.Unicode.GetBytes(value ?? "", RawSpan.Slice(Position)); + } + + /// + /// Writes a dynamic-length little-endian unicode string value to the span, followed by a 2-byte null character. + /// + public void WriteLittleUniNull(string value) + { + WriteLittleUni(value); + Write((ushort)0); + } + + /// + /// Writes a dynamic-length big-endian unicode string value to the span. + /// + public void WriteBigUni(string value) + { + Position += Encoding.BigEndianUnicode.GetBytes(value ?? "", RawSpan.Slice(Position)); + } + + /// + /// Writes a dynamic-length big-endian unicode string value to the span, followed by a 2-byte null character. + /// + public void WriteBigUniNull(string value, bool zero = false) + { + WriteBigUni(value); + + if (zero) + Fill(2); + else + Position += 2; + } + + /// + /// Writes a dynamic-length utf-8 string value, followed by a 1-byte null character. + /// + public void WriteUTF8Null(string value) + { + Position += Encoding.UTF8.GetBytes(value ?? "", RawSpan.Slice(Position)) + 1; + } + + /// + /// Copies the span to the destination. + /// + public void CopyTo(Span destination) + { + RawSpan.CopyTo(destination); + } + + /// + /// Fills the buffer with zeroes up to count + /// + public void Fill(int count) + { + count = Math.Min(count, RawSpan.Length - Position); + RawSpan.Slice(Position, count).Clear(); + Position += count; + } + } +} diff --git a/Projects/Server/CityInfo.cs b/Projects/Server/CityInfo.cs new file mode 100644 index 000000000..70e1ef9a4 --- /dev/null +++ b/Projects/Server/CityInfo.cs @@ -0,0 +1,61 @@ +namespace Server +{ + public sealed class CityInfo + { + private Point3D m_Location; + + public CityInfo(string city, string building, int description, int x, int y, int z, Map m) + { + City = city; + Building = building; + Description = description; + Location = new Point3D(x, y, z); + Map = m; + } + + public CityInfo(string city, string building, int x, int y, int z, Map m) : this(city, building, 0, x, y, z, m) + { + } + + public CityInfo(string city, string building, int description, int x, int y, int z) : this(city, building, + description, x, y, z, Map.Trammel) + { + } + + public CityInfo(string city, string building, int x, int y, int z) : this(city, building, 0, x, y, z, Map.Trammel) + { + } + + public string City { get; set; } + + public string Building { get; set; } + + public int Description { get; set; } + + public int X + { + get => m_Location.X; + set => m_Location.X = value; + } + + public int Y + { + get => m_Location.Y; + set => m_Location.Y = value; + } + + public int Z + { + get => m_Location.Z; + set => m_Location.Z = value; + } + + public Point3D Location + { + get => m_Location; + set => m_Location = value; + } + + public Map Map { get; set; } + } +} diff --git a/Projects/Server/Collections/ArraySet.cs b/Projects/Server/Collections/ArraySet.cs new file mode 100644 index 000000000..bd044bd18 --- /dev/null +++ b/Projects/Server/Collections/ArraySet.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Server.Collections +{ + public class ArraySet : IList + { + private readonly List m_List = new List(); + + public T this[int index] { get => m_List[index]; set => m_List[index] = value; } + + public int Count => m_List.Count; + + public bool IsReadOnly => false; + + public int Add(T item) + { + int indexOf = m_List.IndexOf(item); + + if (indexOf >= 0) return indexOf; + + m_List.Add(item); + return m_List.Count - 1; + } + + public void Clear() => m_List.Clear(); + + public bool Contains(T item) => m_List.Contains(item); + + public void CopyTo(T[] array) => m_List.CopyTo(array); + + public void CopyTo(T[] array, int arrayIndex) => m_List.CopyTo(array, arrayIndex); + + public void CopyTo(int index, T[] array, int arrayIndex, int count) => m_List.CopyTo(index, array, arrayIndex, count); + + public IEnumerator GetEnumerator() => m_List.GetEnumerator(); + + public int IndexOf(T item) => m_List.IndexOf(item); + + public void Insert(int index, T item) => throw new NotImplementedException(); + + public bool Remove(T item) => throw new NotImplementedException(); + + public void RemoveAt(int index) => throw new NotImplementedException(); + + void ICollection.Add(T item) => m_List.Add(item); + + IEnumerator IEnumerable.GetEnumerator() => m_List.GetEnumerator(); + } +} diff --git a/Projects/Server/Commands.cs b/Projects/Server/Commands.cs index 933cf7d86..bc51f8e28 100644 --- a/Projects/Server/Commands.cs +++ b/Projects/Server/Commands.cs @@ -22,7 +22,7 @@ using System; using System.Collections.Generic; using Server.Network; -namespace Server.Commands +namespace Server { public delegate void CommandEventHandler(CommandEventArgs e); diff --git a/Projects/Server/Configuration.cs b/Projects/Server/Configuration.cs index 8a813cad3..6d7743eb6 100644 --- a/Projects/Server/Configuration.cs +++ b/Projects/Server/Configuration.cs @@ -11,7 +11,7 @@ namespace Server public static Configuration Instance => m_Configuration ??= ReadConfiguration(); - public List DataDirectories { get; } = new List(); + public List DataDirectories { get; set; } = new List(); private static string FilePath => Path.Join(Core.BaseDirectory, "modernuo.json"); diff --git a/Projects/Server/EventSink.cs b/Projects/Server/EventSink.cs index d447e4228..15d021dfc 100644 --- a/Projects/Server/EventSink.cs +++ b/Projects/Server/EventSink.cs @@ -23,7 +23,6 @@ using System.Collections.Generic; using System.Net; using System.Net.Sockets; using Server.Accounting; -using Server.Commands; using Server.Guilds; using Server.Network; diff --git a/Projects/Server/Main.cs b/Projects/Server/Main.cs index 91faa1579..12ab3138a 100644 --- a/Projects/Server/Main.cs +++ b/Projects/Server/Main.cs @@ -442,19 +442,19 @@ namespace Server RandomImpl.IsHardwareRNG ? "Hardware" : "Software"); // Load Assembly Scripts.CS.dll - ScriptCompiler.LoadScripts(); + AssemblyHandler.LoadScripts(); - ScriptCompiler.Invoke("Configure"); + AssemblyHandler.Invoke("Configure"); Region.Load(); World.Load(); - ScriptCompiler.Invoke("Initialize"); + AssemblyHandler.Invoke("Initialize"); // Start accepting new connections MessagePump = new MessagePump(); - ScriptCompiler.Invoke("RegisterListeners"); + AssemblyHandler.Invoke("RegisterListeners"); timerThread.Start(); @@ -513,7 +513,7 @@ namespace Server VerifySerialization(ca); - foreach (Assembly a in ScriptCompiler.Assemblies.Where(a => a != ca)) VerifySerialization(a); + foreach (Assembly a in AssemblyHandler.Assemblies.Where(a => a != ca)) VerifySerialization(a); } private static void VerifyType(Type t) diff --git a/Projects/Server/Mobile.cs b/Projects/Server/Mobile.cs index 4b06f948b..ed68aac3d 100644 --- a/Projects/Server/Mobile.cs +++ b/Projects/Server/Mobile.cs @@ -25,7 +25,6 @@ using System.IO; using System.Text; using System.Threading.Tasks; using Server.Accounting; -using Server.Commands; using Server.ContextMenus; using Server.Guilds; using Server.Gumps; diff --git a/Projects/Server/Network/Compression.cs b/Projects/Server/Network/Compression.cs index 8f2ba1ca7..5a7feb77e 100644 --- a/Projects/Server/Network/Compression.cs +++ b/Projects/Server/Network/Compression.cs @@ -19,6 +19,7 @@ ***************************************************************************/ using System; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Server.Network @@ -47,7 +48,7 @@ namespace Server.Network // If our input exceeds this length, we may potentially overflow the buffer private const int PossibleOverflow = (BufferSize * 8 - TerminalCodeLength) / MaximalCodeLength; - private static int[] _huffmanTable = { + private static readonly int[] _huffmanTable = { 0x2, 0x000, 0x5, 0x01F, 0x6, 0x022, 0x7, 0x034, 0x7, 0x075, 0x6, 0x028, 0x6, 0x03B, 0x7, 0x032, 0x8, 0x0E0, 0x8, 0x062, 0x7, 0x056, 0x8, 0x079, 0x9, 0x19D, 0x8, 0x097, 0x6, 0x02A, 0x7, 0x057, 0x8, 0x071, 0x8, 0x05B, 0x9, 0x1CC, 0x8, 0x0A7, 0x7, 0x025, 0x7, 0x04F, 0x8, 0x066, 0x8, 0x07D, @@ -88,23 +89,12 @@ namespace Server.Network static Compression() { if (Core.Unix) - { - if (Core.Is64Bit) - Compressor = new CompressorUnix64(); + Compressor = new UnixCompressor(); else - Compressor = new CompressorUnix32(); + Compressor = new Compressor(); } - else if (Core.Is64Bit) - { - Compressor = new Compressor64(); - } - else - { - Compressor = new Compressor32(); - } - } - public static unsafe void Compress(byte[] input, int offset, int count, byte[] output, ref int length) + public static unsafe void Compress(ReadOnlySpan input, int offset, int count, Span output, out int length) { if (input == null) throw new ArgumentNullException(nameof(input)); @@ -121,8 +111,6 @@ namespace Server.Network fixed (int* pTable = _huffmanTable) { - int* pEntry; - fixed (byte* pInputBuffer = input) { byte* pInput = pInputBuffer + offset, pInputEnd = pInput + count; @@ -131,6 +119,7 @@ namespace Server.Network { byte* pOutput = pOutputBuffer, pOutputEnd = pOutput + BufferSize; + int* pEntry; while (pInput < pInputEnd) { pEntry = &pTable[*pInput++ << 1]; @@ -192,183 +181,150 @@ namespace Server.Network } } - public static ZLibError Pack(byte[] dest, ref int destLength, byte[] source, int sourceLength) + public static int MaxPackSize(int sourceLength) => (int)Compressor.CompressBound((ulong)sourceLength); + + public static unsafe ZLibError Pack(Span dest, ref int destLength, ReadOnlySpan source, int sourceLength) { - return Compressor.Compress(dest, ref destLength, source, sourceLength); + ulong destLengthLong = (ulong)destLength; + fixed (byte* dPtr = &MemoryMarshal.GetReference(dest), sPtr = &MemoryMarshal.GetReference(source)) + { + ZLibError e = Compressor.Compress(Unsafe.AsRef(dPtr), ref destLengthLong, Unsafe.AsRef(sPtr), (ulong)sourceLength); + destLength = (int)destLengthLong; + return e; + } + } + + public static unsafe ZLibError Pack(Span dest, ref int destLength, ReadOnlySpan source, ZLibQuality quality) + { + ulong destLengthLong = (ulong)destLength; + fixed (byte* dPtr = &MemoryMarshal.GetReference(dest), sPtr = &MemoryMarshal.GetReference(source)) + { + ZLibError e = Compressor.Compress(Unsafe.AsRef(dPtr), ref destLengthLong, Unsafe.AsRef(sPtr), (ulong)source.Length, quality); + destLength = (int)destLengthLong; + return e; + } + } + + public static unsafe ZLibError Pack(Span dest, ref int destLength, ReadOnlySpan source, int sourceLength, ZLibQuality quality) + { + ulong destLengthLong = (ulong)destLength; + fixed (byte* dPtr = &MemoryMarshal.GetReference(dest), sPtr = &MemoryMarshal.GetReference(source)) + { + ZLibError e = Compressor.Compress(Unsafe.AsRef(dPtr), ref destLengthLong, Unsafe.AsRef(sPtr), (ulong)sourceLength, quality); + destLength = (int)destLengthLong; + return e; + } } - public static ZLibError Pack(byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality) + public static unsafe ZLibError Unpack(Span dest, ref int destLength, ReadOnlySpan source, int sourceLength) { - return Compressor.Compress(dest, ref destLength, source, sourceLength, quality); + ulong destLengthLong = (ulong)destLength; + fixed (byte* dPtr = &MemoryMarshal.GetReference(dest), sPtr = &MemoryMarshal.GetReference(source)) + { + ZLibError e = Compressor.Decompress(Unsafe.AsRef(dPtr), ref destLengthLong, Unsafe.AsRef(sPtr), (ulong)sourceLength); + destLength = (int)destLengthLong; + return e; + } + } + + public static ulong MaxPackSize(ulong sourceLength) => Compressor.CompressBound(sourceLength); + + public static unsafe ZLibError Pack(Span dest, ref ulong destLength, ReadOnlySpan source, ulong sourceLength) + { + fixed(byte* dPtr = &MemoryMarshal.GetReference(dest), sPtr = &MemoryMarshal.GetReference(source)) + return Compressor.Compress(Unsafe.AsRef(dPtr), ref destLength, Unsafe.AsRef(sPtr), sourceLength); } - public static ZLibError Unpack(byte[] dest, ref int destLength, byte[] source, int sourceLength) + public static unsafe ZLibError Pack(Span dest, ref ulong destLength, ReadOnlySpan source, ZLibQuality quality) { - return Compressor.Decompress(dest, ref destLength, source, sourceLength); + fixed(byte* dPtr = &MemoryMarshal.GetReference(dest), sPtr = &MemoryMarshal.GetReference(source)) + return Compressor.Compress(Unsafe.AsRef(dPtr), ref destLength, Unsafe.AsRef(sPtr), (ulong)source.Length, quality); + } + + public static unsafe ZLibError Pack(Span dest, ref ulong destLength, ReadOnlySpan source, ulong sourceLength, ZLibQuality quality) + { + fixed(byte* dPtr = &MemoryMarshal.GetReference(dest), sPtr = &MemoryMarshal.GetReference(source)) + return Compressor.Compress(Unsafe.AsRef(dPtr), ref destLength, Unsafe.AsRef(sPtr), sourceLength, quality); + } + + public static unsafe ZLibError Unpack(Span dest, ref ulong destLength, ReadOnlySpan source, ulong sourceLength) + { + fixed(byte* dPtr = &MemoryMarshal.GetReference(dest), sPtr = &MemoryMarshal.GetReference(source)) + return Compressor.Decompress(Unsafe.AsRef(dPtr), ref destLength, Unsafe.AsRef(sPtr), sourceLength); } } public interface ICompressor { - string Version{ get; } - - ZLibError Compress(byte[] dest, ref int destLength, byte[] source, int sourceLength); - ZLibError Compress(byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality); - - ZLibError Decompress(byte[] dest, ref int destLength, byte[] source, int sourceLength); + string Version { get; } + ZLibError Compress(in int dest, ref ulong destLength, in int source, ulong sourceLength); + ZLibError Compress(in int dest, ref ulong destLength, in int source, ulong sourceLength, ZLibQuality quality); + ZLibError Decompress(in int dest, ref ulong destLength, in int source, ulong sourceLength); + ulong CompressBound(ulong sourceLength); } - public sealed class Compressor32 : ICompressor - { - public string Version => SafeNativeMethods.zlibVersion(); - - public ZLibError Compress(byte[] dest, ref int destLength, byte[] source, int sourceLength) + public class Compressor : ICompressor { - return SafeNativeMethods.compress(dest, ref destLength, source, sourceLength); - } + public string Version => zlibVersion(); - public ZLibError Compress(byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality) - { - return SafeNativeMethods.compress2(dest, ref destLength, source, sourceLength, quality); - } + public ZLibError Compress(in int dest, ref ulong destLength, in int source, ulong sourceLength) => + compress(dest, ref destLength, source, sourceLength); - public ZLibError Decompress(byte[] dest, ref int destLength, byte[] source, int sourceLength) - { - return SafeNativeMethods.uncompress(dest, ref destLength, source, sourceLength); - } + public ZLibError Compress(in int dest, ref ulong destLength, in int source, ulong sourceLength, + ZLibQuality quality) => compress2(dest, ref destLength, source, sourceLength, quality); - internal class SafeNativeMethods - { - [DllImport("zlib32")] - internal static extern string zlibVersion(); + public ZLibError Decompress(in int dest, ref ulong destLength, in int source, ulong sourceLength) => + uncompress(dest, ref destLength, source, sourceLength); - [DllImport("zlib32")] - internal static extern ZLibError compress(byte[] dest, ref int destLength, byte[] source, int sourceLength); + public ulong CompressBound(ulong sourceLength) => compressBound(sourceLength); - [DllImport("zlib32")] - internal static extern ZLibError compress2(byte[] dest, ref int destLength, byte[] source, int sourceLength, + [DllImport("zlib")] + private static extern string zlibVersion(); + + [DllImport("zlib")] + private static extern ZLibError compress(in int dest, ref ulong destLength, in int source, ulong sourceLength); + + [DllImport("zlib")] + private static extern ZLibError compress2(in int dest, ref ulong destLength, in int source, ulong sourceLength, ZLibQuality quality); - [DllImport("zlib32")] - internal static extern ZLibError uncompress(byte[] dest, ref int destLen, byte[] source, int sourceLen); - } + [DllImport("zlib")] + private static extern ZLibError uncompress(in int dest, ref ulong destLength, in int source, ulong sourceLength); + + [DllImport("zlib")] + private static extern ulong compressBound(ulong sourceLen); } - public sealed class Compressor64 : ICompressor + public class UnixCompressor : ICompressor { - public string Version => SafeNativeMethods.zlibVersion(); + public string Version => zlibVersion(); - public ZLibError Compress(byte[] dest, ref int destLength, byte[] source, int sourceLength) - { - return SafeNativeMethods.compress(dest, ref destLength, source, sourceLength); - } + public ZLibError Compress(in int dest, ref ulong destLength, in int source, ulong sourceLength) => + compress(dest, ref destLength, source, sourceLength); - public ZLibError Compress(byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality) - { - return SafeNativeMethods.compress2(dest, ref destLength, source, sourceLength, quality); - } + public ZLibError Compress(in int dest, ref ulong destLength, in int source, ulong sourceLength, + ZLibQuality quality) => compress2(dest, ref destLength, source, sourceLength, quality); - public ZLibError Decompress(byte[] dest, ref int destLength, byte[] source, int sourceLength) - { - return SafeNativeMethods.uncompress(dest, ref destLength, source, sourceLength); - } + public ZLibError Decompress(in int dest, ref ulong destLength, in int source, ulong sourceLength) => + uncompress(dest, ref destLength, source, sourceLength); - internal class SafeNativeMethods - { - [DllImport("zlib64")] - internal static extern string zlibVersion(); + public ulong CompressBound(ulong sourceLength) => compressBound(sourceLength); - [DllImport("zlib64")] - internal static extern ZLibError compress(byte[] dest, ref int destLength, byte[] source, int sourceLength); + [DllImport("libz")] + private static extern string zlibVersion(); - [DllImport("zlib64")] - internal static extern ZLibError compress2(byte[] dest, ref int destLength, byte[] source, int sourceLength, + [DllImport("libz")] + private static extern ZLibError compress(in int dest, ref ulong destLength, in int source, ulong sourceLength); + + [DllImport("libz")] + private static extern ZLibError compress2(in int dest, ref ulong destLength, in int source, ulong sourceLength, ZLibQuality quality); - [DllImport("zlib64")] - internal static extern ZLibError uncompress(byte[] dest, ref int destLen, byte[] source, int sourceLen); - } - } - - public sealed class CompressorUnix32 : ICompressor - { - public string Version => SafeNativeMethods.zlibVersion(); - - public ZLibError Compress(byte[] dest, ref int destLength, byte[] source, int sourceLength) - { - return SafeNativeMethods.compress(dest, ref destLength, source, sourceLength); - } - - public ZLibError Compress(byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality) - { - return SafeNativeMethods.compress2(dest, ref destLength, source, sourceLength, quality); - } - - public ZLibError Decompress(byte[] dest, ref int destLength, byte[] source, int sourceLength) - { - return SafeNativeMethods.uncompress(dest, ref destLength, source, sourceLength); - } - - internal class SafeNativeMethods - { - [DllImport("libz")] - internal static extern string zlibVersion(); + [DllImport("libz")] + private static extern ZLibError uncompress(in int dest, ref ulong destLength, in int source, ulong sourceLength); [DllImport("libz")] - internal static extern ZLibError compress(byte[] dest, ref int destLength, byte[] source, int sourceLength); - - [DllImport("libz")] - internal static extern ZLibError compress2(byte[] dest, ref int destLength, byte[] source, int sourceLength, - ZLibQuality quality); - - [DllImport("libz")] - internal static extern ZLibError uncompress(byte[] dest, ref int destLen, byte[] source, int sourceLen); - } - } - - public sealed class CompressorUnix64 : ICompressor - { - public string Version => SafeNativeMethods.zlibVersion(); - - public ZLibError Compress(byte[] dest, ref int destLength, byte[] source, int sourceLength) - { - ulong destLengthLong = (ulong)destLength; - ZLibError z = SafeNativeMethods.compress(dest, ref destLengthLong, source, sourceLength); - destLength = (int)destLengthLong; - return z; - } - - public ZLibError Compress(byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality) - { - ulong destLengthLong = (ulong)destLength; - ZLibError z = SafeNativeMethods.compress2(dest, ref destLengthLong, source, sourceLength, quality); - destLength = (int)destLengthLong; - return z; - } - - public ZLibError Decompress(byte[] dest, ref int destLength, byte[] source, int sourceLength) - { - ulong destLengthLong = (ulong)destLength; - ZLibError z = SafeNativeMethods.uncompress(dest, ref destLengthLong, source, sourceLength); - destLength = (int)destLengthLong; - return z; - } - - internal class SafeNativeMethods - { - [DllImport("libz")] - internal static extern string zlibVersion(); - - [DllImport("libz")] - internal static extern ZLibError compress(byte[] dest, ref ulong destLength, byte[] source, int sourceLength); - - [DllImport("libz")] - internal static extern ZLibError compress2(byte[] dest, ref ulong destLength, byte[] source, int sourceLength, - ZLibQuality quality); - - [DllImport("libz")] - internal static extern ZLibError uncompress(byte[] dest, ref ulong destLen, byte[] source, int sourceLen); - } + private static extern ulong compressBound(ulong sourceLen); } public enum ZLibError @@ -379,9 +335,7 @@ namespace Server.Network DataError = -3, StreamError = -2, FileError = -1, - Okay = 0, - StreamEnd = 1, NeedDictionary = 2 } @@ -389,10 +343,8 @@ namespace Server.Network public enum ZLibQuality { Default = -1, - None = 0, - Speed = 1, Size = 9 } -} \ No newline at end of file +} diff --git a/Projects/Server/Network/Packet.cs b/Projects/Server/Network/Packet.cs index 0bfbb39fe..fab9f6d6b 100644 --- a/Projects/Server/Network/Packet.cs +++ b/Projects/Server/Network/Packet.cs @@ -1,273 +1,273 @@ -/*************************************************************************** - * Packet.cs - * ------------------- - * begin : August 2, 2019 - * copyright : (C) The RunUO Software Team - * email : info@runuo.com - * - * $Id$ - * - ***************************************************************************/ - -/*************************************************************************** - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - ***************************************************************************/ - -using Server.Diagnostics; -using System; -using System.Buffers; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Text; - -namespace Server.Network -{ - public abstract class Packet - { - private const int CompressorBufferSize = 0x10000; - - private const int BufferSize = 4096; - - private byte[] m_CompiledBuffer; - private int m_CompiledLength; - private int m_Length; - private State m_State; - - protected PacketWriter m_Stream; - - protected Packet(int packetID) - { - PacketID = packetID; - - if (Core.Profiling) - { - PacketSendProfile prof = PacketSendProfile.Acquire(GetType()); - prof.Increment(); - } - } - - protected Packet(int packetID, int length) - { - PacketID = packetID; - m_Length = length; - - m_Stream = PacketWriter.CreateInstance(length); // new PacketWriter( length ); - m_Stream.Write((byte)packetID); - - if (Core.Profiling) - { - PacketSendProfile prof = PacketSendProfile.Acquire(GetType()); - prof.Increment(); - } - } - - public int PacketID { get; } - - public PacketWriter UnderlyingStream => m_Stream; - - public void EnsureCapacity(int length) - { - m_Stream = PacketWriter.CreateInstance(length); // new PacketWriter( length ); - m_Stream.Write((byte)PacketID); - m_Stream.Write((short)0); - } - - public static Packet SetStatic(Packet p) - { - p.SetStatic(); - return p; - } - - public static Packet Acquire(Packet p) - { - p.Acquire(); - return p; - } - - public static void Release(ref Packet p) - { - p?.Release(); - p = null; - } - - public static void Release(Packet p) - { - p?.Release(); - } - - public void SetStatic() - { - m_State |= State.Static | State.Acquired; - } - - public void Acquire() - { - m_State |= State.Acquired; - } - - public void OnSend() - { - Core.Set(); // Is this still needed if this is done async? - - if ((m_State & (State.Acquired | State.Static)) == 0) - Free(); - } - - private void Free() - { - if (m_CompiledBuffer == null) - return; - - if ((m_State & State.Buffered) != 0) - ArrayPool.Shared.Return(m_CompiledBuffer); - - m_State &= ~(State.Static | State.Acquired | State.Buffered); - - m_CompiledBuffer = null; - } - - public void Release() - { - if ((m_State & State.Acquired) != 0) - Free(); - } - - public byte[] Compile(bool compress, out int length) - { - lock (this) - { - if (m_CompiledBuffer == null) - { - if ((m_State & State.Accessed) == 0) - { - m_State |= State.Accessed; - } - else - { - if ((m_State & State.Warned) == 0) - { - m_State |= State.Warned; - - try - { - using (StreamWriter op = new StreamWriter("net_opt.log", true)) - { - op.WriteLine("Redundant compile for packet {0}, use Acquire() and Release()", GetType()); - op.WriteLine(new StackTrace()); - } - } - catch - { - // ignored - } - } - - m_CompiledBuffer = new byte[0]; - m_CompiledLength = 0; - - length = m_CompiledLength; - return m_CompiledBuffer; - } - - InternalCompile(compress); - } - - length = m_CompiledLength; - return m_CompiledBuffer; - } - } - - private void InternalCompile(bool compress) - { - if (m_Length == 0) - { - long streamLen = m_Stream.Length; - - m_Stream.Seek(1, SeekOrigin.Begin); - m_Stream.Write((ushort)streamLen); - } - else if (m_Stream.Length != m_Length) - { - int diff = (int)m_Stream.Length - m_Length; - - Console.WriteLine("Packet: 0x{0:X2}: Bad packet length! ({1}{2} bytes)", PacketID, diff >= 0 ? "+" : "", - diff); - } - - MemoryStream ms = m_Stream.UnderlyingStream; - - m_CompiledBuffer = ms.GetBuffer(); - int length = (int)ms.Length; - - if (compress) - { - byte[] buffer = ArrayPool.Shared.Rent(CompressorBufferSize); - - Compression.Compress(m_CompiledBuffer, 0, length, buffer, ref length); - - if (length <= 0) - { - Console.WriteLine("Warning: Compression buffer overflowed on packet 0x{0:X2} ('{1}') (length={2})", - PacketID, GetType().Name, length); - using (StreamWriter op = new StreamWriter("compression_overflow.log", true)) - { - op.WriteLine("{0} Warning: Compression buffer overflowed on packet 0x{1:X2} ('{2}') (length={3})", - DateTime.UtcNow, PacketID, GetType().Name, length); - op.WriteLine(new StackTrace()); - } - } - else - { - m_CompiledLength = length; - - if ((m_State & State.Static) != 0) - { - m_CompiledBuffer = new byte[length]; - Buffer.BlockCopy(buffer, 0, m_CompiledBuffer, 0, length); - ArrayPool.Shared.Return(buffer); - } - else - { - m_CompiledBuffer = buffer; - m_State |= State.Buffered; - } - } - } - else if (length > 0) - { - byte[] old = m_CompiledBuffer; - m_CompiledLength = length; - - if ((m_State & State.Static) != 0) - m_CompiledBuffer = new byte[length]; - else - { - m_CompiledBuffer = ArrayPool.Shared.Rent(length); - m_State |= State.Buffered; - } - - Buffer.BlockCopy(old, 0, m_CompiledBuffer, 0, length); - } - - PacketWriter.ReleaseInstance(m_Stream); - m_Stream = null; - } - - [Flags] - private enum State - { - Inactive = 0x00, - Static = 0x01, - Acquired = 0x02, - Accessed = 0x04, - Buffered = 0x08, - Warned = 0x10 - } - } -} +/*************************************************************************** + * Packet.cs + * ------------------- + * begin : August 2, 2019 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using Server.Diagnostics; +using System; +using System.Buffers; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Text; + +namespace Server.Network +{ + public abstract class Packet + { + private const int CompressorBufferSize = 0x10000; + + private const int BufferSize = 4096; + + private byte[] m_CompiledBuffer; + private int m_CompiledLength; + private int m_Length; + private State m_State; + + protected PacketWriter m_Stream; + + protected Packet(int packetID) + { + PacketID = packetID; + + if (Core.Profiling) + { + PacketSendProfile prof = PacketSendProfile.Acquire(GetType()); + prof.Increment(); + } + } + + protected Packet(int packetID, int length) + { + PacketID = packetID; + m_Length = length; + + m_Stream = PacketWriter.CreateInstance(length); // new PacketWriter( length ); + m_Stream.Write((byte)packetID); + + if (Core.Profiling) + { + PacketSendProfile prof = PacketSendProfile.Acquire(GetType()); + prof.Increment(); + } + } + + public int PacketID { get; } + + public PacketWriter UnderlyingStream => m_Stream; + + public void EnsureCapacity(int length) + { + m_Stream = PacketWriter.CreateInstance(length); // new PacketWriter( length ); + m_Stream.Write((byte)PacketID); + m_Stream.Write((short)0); + } + + public static Packet SetStatic(Packet p) + { + p.SetStatic(); + return p; + } + + public static Packet Acquire(Packet p) + { + p.Acquire(); + return p; + } + + public static void Release(ref Packet p) + { + p?.Release(); + p = null; + } + + public static void Release(Packet p) + { + p?.Release(); + } + + public void SetStatic() + { + m_State |= State.Static | State.Acquired; + } + + public void Acquire() + { + m_State |= State.Acquired; + } + + public void OnSend() + { + Core.Set(); // Is this still needed if this is done async? + + if ((m_State & (State.Acquired | State.Static)) == 0) + Free(); + } + + private void Free() + { + if (m_CompiledBuffer == null) + return; + + if ((m_State & State.Buffered) != 0) + ArrayPool.Shared.Return(m_CompiledBuffer); + + m_State &= ~(State.Static | State.Acquired | State.Buffered); + + m_CompiledBuffer = null; + } + + public void Release() + { + if ((m_State & State.Acquired) != 0) + Free(); + } + + public byte[] Compile(bool compress, out int length) + { + lock (this) + { + if (m_CompiledBuffer == null) + { + if ((m_State & State.Accessed) == 0) + { + m_State |= State.Accessed; + } + else + { + if ((m_State & State.Warned) == 0) + { + m_State |= State.Warned; + + try + { + using (StreamWriter op = new StreamWriter("net_opt.log", true)) + { + op.WriteLine("Redundant compile for packet {0}, use Acquire() and Release()", GetType()); + op.WriteLine(new StackTrace()); + } + } + catch + { + // ignored + } + } + + m_CompiledBuffer = new byte[0]; + m_CompiledLength = 0; + + length = m_CompiledLength; + return m_CompiledBuffer; + } + + InternalCompile(compress); + } + + length = m_CompiledLength; + return m_CompiledBuffer; + } + } + + private void InternalCompile(bool compress) + { + if (m_Length == 0) + { + long streamLen = m_Stream.Length; + + m_Stream.Seek(1, SeekOrigin.Begin); + m_Stream.Write((ushort)streamLen); + } + else if (m_Stream.Length != m_Length) + { + int diff = (int)m_Stream.Length - m_Length; + + Console.WriteLine("Packet: 0x{0:X2}: Bad packet length! ({1}{2} bytes)", PacketID, diff >= 0 ? "+" : "", + diff); + } + + MemoryStream ms = m_Stream.UnderlyingStream; + + m_CompiledBuffer = ms.GetBuffer(); + int length = (int)ms.Length; + + if (compress) + { + byte[] buffer = ArrayPool.Shared.Rent(CompressorBufferSize); + + Compression.Compress(m_CompiledBuffer, 0, length, buffer, out length); + + if (length <= 0) + { + Console.WriteLine("Warning: Compression buffer overflowed on packet 0x{0:X2} ('{1}') (length={2})", + PacketID, GetType().Name, length); + using (StreamWriter op = new StreamWriter("compression_overflow.log", true)) + { + op.WriteLine("{0} Warning: Compression buffer overflowed on packet 0x{1:X2} ('{2}') (length={3})", + DateTime.UtcNow, PacketID, GetType().Name, length); + op.WriteLine(new StackTrace()); + } + } + else + { + m_CompiledLength = length; + + if ((m_State & State.Static) != 0) + { + m_CompiledBuffer = new byte[length]; + Buffer.BlockCopy(buffer, 0, m_CompiledBuffer, 0, length); + ArrayPool.Shared.Return(buffer); + } + else + { + m_CompiledBuffer = buffer; + m_State |= State.Buffered; + } + } + } + else if (length > 0) + { + byte[] old = m_CompiledBuffer; + m_CompiledLength = length; + + if ((m_State & State.Static) != 0) + m_CompiledBuffer = new byte[length]; + else + { + m_CompiledBuffer = ArrayPool.Shared.Rent(length); + m_State |= State.Buffered; + } + + Buffer.BlockCopy(old, 0, m_CompiledBuffer, 0, length); + } + + PacketWriter.ReleaseInstance(m_Stream); + m_Stream = null; + } + + [Flags] + private enum State + { + Inactive = 0x00, + Static = 0x01, + Acquired = 0x02, + Accessed = 0x04, + Buffered = 0x08, + Warned = 0x10 + } + } +} diff --git a/Projects/Server/Network/Packets.cs b/Projects/Server/Network/Packets.cs index 4dabd698d..ed6be7279 100644 --- a/Projects/Server/Network/Packets.cs +++ b/Projects/Server/Network/Packets.cs @@ -3781,65 +3781,6 @@ namespace Server.Network } } - public sealed class CityInfo - { - private Point3D m_Location; - - public CityInfo(string city, string building, int description, int x, int y, int z, Map m) - { - City = city; - Building = building; - Description = description; - m_Location = new Point3D(x, y, z); - Map = m; - } - - public CityInfo(string city, string building, int x, int y, int z, Map m) : this(city, building, 0, x, y, z, m) - { - } - - public CityInfo(string city, string building, int description, int x, int y, int z) : this(city, building, - description, x, y, z, Map.Trammel) - { - } - - public CityInfo(string city, string building, int x, int y, int z) : this(city, building, 0, x, y, z, Map.Trammel) - { - } - - public string City{ get; set; } - - public string Building{ get; set; } - - public int Description{ get; set; } - - public int X - { - get => m_Location.X; - set => m_Location.X = value; - } - - public int Y - { - get => m_Location.Y; - set => m_Location.Y = value; - } - - public int Z - { - get => m_Location.Z; - set => m_Location.Z = value; - } - - public Point3D Location - { - get => m_Location; - set => m_Location = value; - } - - public Map Map{ get; set; } - } - public sealed class CharacterListUpdate : Packet { public CharacterListUpdate(IAccount a) : base(0x86) diff --git a/Projects/Server/Random.cs b/Projects/Server/Random.cs index f4720b1e2..0171d0b84 100644 --- a/Projects/Server/Random.cs +++ b/Projects/Server/Random.cs @@ -12,6 +12,7 @@ using System.IO; using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Threading; +using System.Threading.Tasks; namespace Server { @@ -26,46 +27,31 @@ namespace Server { if (Core.Unix && File.Exists("rdrand.so")) _Random = new RDRandUnix(); - else if (Core.Is64Bit && File.Exists("rdrand64.dll")) - _Random = new RDRand64(); else if (File.Exists("rdrand.dll")) - _Random = new RDRand32(); - else - _Random = new CSPRandom(); + _Random = new RDRand64(); - if (_Random is IHardwareRNG rng && !rng.IsSupported()) _Random = new CSPRandom(); + if (_Random == null || _Random is IHardwareRNG rng && !rng.IsSupported()) + _Random = new CSPRandom(); } public static bool IsHardwareRNG => _Random is IHardwareRNG; public static Type Type => _Random.GetType(); - public static int Next(int c) - { - return _Random.Next(c); - } + public static int Next(int c) => _Random.Next(c); - public static bool NextBool() - { - return _Random.NextBool(); - } + public static bool NextBool() => _Random.NextBool(); - public static void NextBytes(byte[] b) - { - _Random.NextBytes(b); - } + public static void NextBytes(Span b) => _Random.NextBytes(b); - public static double NextDouble() - { - return _Random.NextDouble(); - } + public static double NextDouble() => _Random.NextDouble(); } public interface IRandomImpl { int Next(int c); bool NextBool(); - void NextBytes(byte[] b); + void NextBytes(Span b); double NextDouble(); } @@ -74,48 +60,54 @@ namespace Server bool IsSupported(); } - public sealed class SimpleRandom : IRandomImpl + public abstract class BaseRandom : IRandomImpl { - private Random m_Random = new Random(); + internal abstract void GetBytes(Span b); + internal abstract void GetBytes(byte[] b, int offset, int count); - public int Next(int c) + public virtual void NextBytes(Span b) => GetBytes(b); + public virtual int Next(int c) => (int)(c * NextDouble()); + public virtual bool NextBool() => (NextByte() & 1) == 1; + + public virtual byte NextByte() { - int r; - lock (m_Random) + byte[] b = new byte[1]; + GetBytes(b, 0, 1); + return b[0]; + } + + public virtual unsafe double NextDouble() + { + byte[] b = new byte[8]; + + if (BitConverter.IsLittleEndian) { - r = m_Random.Next(c); + b[7] = 0; + GetBytes(b, 0, 7); + } + else + { + b[0] = 0; + GetBytes(b, 1, 7); } - return r; - } - - public bool NextBool() - { - return NextDouble() >= .5; - } - - public void NextBytes(byte[] b) - { - lock (m_Random) + ulong r; + fixed (byte* buf = b) { - m_Random.NextBytes(b); - } - } - - public double NextDouble() - { - double r; - lock (m_Random) - { - r = m_Random.NextDouble(); + r = *(ulong*)&buf[0] >> 3; } - return r; - } - } + /* double: 53 bits of significand precision + * ulong.MaxValue >> 11 = 9007199254740991 + * 2^53 = 9007199254740992 + */ - public sealed class CSPRandom : IRandomImpl - { + return (double)r / 9007199254740992; + } + } + + public sealed class CSPRandom : BaseRandom + { private static int BUFFER_SIZE = 0x4000; private static int LARGE_REQUEST = 0x40; private byte[] _Buffer = new byte[BUFFER_SIZE]; @@ -132,63 +124,24 @@ namespace Server public CSPRandom() { _CSP.GetBytes(_Working); - ThreadPool.QueueUserWorkItem(Fill); + Task.Run(Fill); } - public int Next(int c) - { - return (int)(c * NextDouble()); - } - - public bool NextBool() - { - return (NextByte() & 1) == 1; - } - - public void NextBytes(byte[] b) + public override void NextBytes(Span b) { int c = b.Length; if (c >= LARGE_REQUEST) { - lock (_CSP) - { + lock (_sync) + { _CSP.GetBytes(b); - } + } return; } - _GetBytes(b); - } - - public unsafe double NextDouble() - { - byte[] b = new byte[8]; - - if (BitConverter.IsLittleEndian) - { - b[7] = 0; - _GetBytes(b, 0, 7); - } - else - { - b[0] = 0; - _GetBytes(b, 1, 7); - } - - ulong r = 0; - fixed (byte* buf = b) - { - r = *(ulong*)&buf[0] >> 3; - } - - /* double: 53 bits of significand precision - * ulong.MaxValue >> 11 = 9007199254740991 - * 2^53 = 9007199254740992 - */ - - return (double)r / 9007199254740992; + GetBytes(b); } private void CheckSwap(int c) @@ -205,474 +158,91 @@ namespace Server _filled.Reset(); - ThreadPool.QueueUserWorkItem(Fill); + Task.Run(Fill); } - private void Fill(object o) + private void Fill() { - lock (_CSP) - { - _CSP.GetBytes(_Buffer); - } - + _CSP.GetBytes(_Buffer); _filled.Set(); } - private void _GetBytes(byte[] b) + internal override void GetBytes(Span b) { int c = b.Length; lock (_sync) { CheckSwap(c); - Buffer.BlockCopy(_Working, _Index, b, 0, c); + _Working.CopyTo(b); _Index += c; } } - private void _GetBytes(byte[] b, int offset, int count) + internal override void GetBytes(byte[] b, int offset, int count) { - lock (_sync) - { - CheckSwap(count); - Buffer.BlockCopy(_Working, _Index, b, offset, count); - _Index += count; - } + GetBytes(b.AsSpan(offset, count)); } - private byte NextByte() + public override byte NextByte() { lock (_sync) { CheckSwap(1); return _Working[_Index++]; } - } - } - - public sealed class RDRandUnix : IRandomImpl, IHardwareRNG - { - private static int BUFFER_SIZE = 0x10000; - private static int LARGE_REQUEST = 0x40; - private byte[] _Buffer = new byte[BUFFER_SIZE]; - - private ManualResetEvent _filled = new ManualResetEvent(false); - - private int _Index; - - private object _sync = new object(); - - private byte[] _Working = new byte[BUFFER_SIZE]; - - public RDRandUnix() - { - SafeNativeMethods.rdrand_get_bytes(BUFFER_SIZE, _Working); - ThreadPool.QueueUserWorkItem(Fill); - } - - public bool IsSupported() - { - uint r = 0; - return SafeNativeMethods.rdrand_32(ref r, true) == RDRandError.Success; - } - - public int Next(int c) - { - return (int)(c * NextDouble()); - } - - public bool NextBool() - { - return (NextByte() & 1) == 1; - } - - public void NextBytes(byte[] b) - { - int c = b.Length; - - if (c >= LARGE_REQUEST) - { - SafeNativeMethods.rdrand_get_bytes(c, b); - return; - } - - _GetBytes(b); - } - - public unsafe double NextDouble() - { - byte[] b = new byte[8]; - - if (BitConverter.IsLittleEndian) - { - b[7] = 0; - _GetBytes(b, 0, 7); - } - else - { - b[0] = 0; - _GetBytes(b, 1, 7); - } - - ulong r = 0; - fixed (byte* buf = b) - { - r = *(ulong*)&buf[0] >> 3; - } - - /* double: 53 bits of significand precision - * ulong.MaxValue >> 11 = 9007199254740991 - * 2^53 = 9007199254740992 - */ - - return (double)r / 9007199254740992; - } - - private void CheckSwap(int c) - { - if (_Index + c < BUFFER_SIZE) - return; - - _filled.WaitOne(); - - byte[] b = _Working; - _Working = _Buffer; - _Buffer = b; - _Index = 0; - - _filled.Reset(); - - ThreadPool.QueueUserWorkItem(Fill); - } - - private void Fill(object o) - { - SafeNativeMethods.rdrand_get_bytes(BUFFER_SIZE, _Buffer); - _filled.Set(); - } - - private void _GetBytes(byte[] b) - { - int c = b.Length; - - lock (_sync) - { - CheckSwap(c); - Buffer.BlockCopy(_Working, _Index, b, 0, c); - _Index += c; } } - private void _GetBytes(byte[] b, int offset, int count) - { - lock (_sync) - { - CheckSwap(count); - Buffer.BlockCopy(_Working, _Index, b, offset, count); - _Index += count; - } - } - - private byte NextByte() - { - lock (_sync) - { - CheckSwap(1); - return _Working[_Index++]; - } - } - - internal class SafeNativeMethods + public sealed class RDRandUnix : BaseRandom, IHardwareRNG { [DllImport("rdrand.so")] internal static extern RDRandError rdrand_32(ref uint rand, bool retry); [DllImport("rdrand.so")] - internal static extern RDRandError rdrand_get_bytes(int n, byte[] buffer); - } - } - - public sealed class RDRand32 : IRandomImpl, IHardwareRNG - { - private static int BUFFER_SIZE = 0x10000; - private static int LARGE_REQUEST = 0x40; - private byte[] _Buffer = new byte[BUFFER_SIZE]; - - private ManualResetEvent _filled = new ManualResetEvent(false); - - private int _Index; - - private object _sync = new object(); - - private byte[] _Working = new byte[BUFFER_SIZE]; - - public RDRand32() - { - SafeNativeMethods.rdrand_get_bytes(BUFFER_SIZE, _Working); - ThreadPool.QueueUserWorkItem(Fill); - } + internal static extern unsafe RDRandError rdrand_get_bytes(int n, byte* buffer); public bool IsSupported() { uint r = 0; - return SafeNativeMethods.rdrand_32(ref r, true) == RDRandError.Success; + return rdrand_32(ref r, true) == RDRandError.Success; } - public int Next(int c) + internal override unsafe void GetBytes(Span b) { - return (int)(c * NextDouble()); + fixed(byte* ptr = b) + rdrand_get_bytes(b.Length, ptr); } - public bool NextBool() + internal override void GetBytes(byte[] b, int offset, int count) { - return (NextByte() & 1) == 1; - } - - public void NextBytes(byte[] b) - { - int c = b.Length; - - if (c >= LARGE_REQUEST) - { - SafeNativeMethods.rdrand_get_bytes(c, b); - return; - } - - _GetBytes(b); - } - - public unsafe double NextDouble() - { - byte[] b = new byte[8]; - - if (BitConverter.IsLittleEndian) - { - b[7] = 0; - _GetBytes(b, 0, 7); - } - else - { - b[0] = 0; - _GetBytes(b, 1, 7); - } - - ulong r = 0; - fixed (byte* buf = b) - { - r = *(ulong*)&buf[0] >> 3; - } - - /* double: 53 bits of significand precision - * ulong.MaxValue >> 11 = 9007199254740991 - * 2^53 = 9007199254740992 - */ - - return (double)r / 9007199254740992; - } - - private void CheckSwap(int c) - { - if (_Index + c < BUFFER_SIZE) - return; - - _filled.WaitOne(); - - byte[] b = _Working; - _Working = _Buffer; - _Buffer = b; - _Index = 0; - - _filled.Reset(); - - ThreadPool.QueueUserWorkItem(Fill); - } - - private void Fill(object o) - { - SafeNativeMethods.rdrand_get_bytes(BUFFER_SIZE, _Buffer); - _filled.Set(); - } - - private void _GetBytes(byte[] b) - { - int c = b.Length; - - lock (_sync) - { - CheckSwap(c); - Buffer.BlockCopy(_Working, _Index, b, 0, c); - _Index += c; + GetBytes(b.AsSpan().Slice(offset, count)); } } - private void _GetBytes(byte[] b, int offset, int count) + public sealed class RDRand64 : BaseRandom, IHardwareRNG { - lock (_sync) - { - CheckSwap(count); - Buffer.BlockCopy(_Working, _Index, b, offset, count); - _Index += count; - } - } + [DllImport("rdrand")] + internal static extern RDRandError rdrand_64(ref ulong rand, bool retry); - private byte NextByte() - { - lock (_sync) - { - CheckSwap(1); - return _Working[_Index++]; - } - } - - internal class SafeNativeMethods - { - [DllImport("rdrand32")] - internal static extern RDRandError rdrand_32(ref uint rand, bool retry); - - [DllImport("rdrand32")] - internal static extern RDRandError rdrand_get_bytes(int n, byte[] buffer); - } - } - - public sealed class RDRand64 : IRandomImpl, IHardwareRNG - { - private static int BUFFER_SIZE = 0x10000; - private static int LARGE_REQUEST = 0x40; - private byte[] _Buffer = new byte[BUFFER_SIZE]; - - private ManualResetEvent _filled = new ManualResetEvent(false); - - private int _Index; - - private object _sync = new object(); - - private byte[] _Working = new byte[BUFFER_SIZE]; - - public RDRand64() - { - SafeNativeMethods.rdrand_get_bytes(BUFFER_SIZE, _Working); - ThreadPool.QueueUserWorkItem(Fill); - } + [DllImport("rdrand")] + internal static extern unsafe RDRandError rdrand_get_bytes(int n, byte* buffer); public bool IsSupported() { ulong r = 0; - return SafeNativeMethods.rdrand_64(ref r, true) == RDRandError.Success; + return rdrand_64(ref r, true) == RDRandError.Success; } - public int Next(int c) + internal override unsafe void GetBytes(Span b) { - return (int)(c * NextDouble()); + fixed (byte* ptr = b) + rdrand_get_bytes(b.Length, ptr); } - public bool NextBool() + internal override void GetBytes(byte[] b, int offset, int count) { - return (NextByte() & 1) == 1; - } - - public void NextBytes(byte[] b) - { - int c = b.Length; - - if (c >= LARGE_REQUEST) - { - SafeNativeMethods.rdrand_get_bytes(c, b); - return; - } - - _GetBytes(b); - } - - public unsafe double NextDouble() - { - byte[] b = new byte[8]; - - if (BitConverter.IsLittleEndian) - { - b[7] = 0; - _GetBytes(b, 0, 7); - } - else - { - b[0] = 0; - _GetBytes(b, 1, 7); - } - - ulong r = 0; - fixed (byte* buf = b) - { - r = *(ulong*)&buf[0] >> 3; - } - - /* double: 53 bits of significand precision - * ulong.MaxValue >> 11 = 9007199254740991 - * 2^53 = 9007199254740992 - */ - - return (double)r / 9007199254740992; - } - - private void CheckSwap(int c) - { - if (_Index + c < BUFFER_SIZE) - return; - - _filled.WaitOne(); - - byte[] b = _Working; - _Working = _Buffer; - _Buffer = b; - _Index = 0; - - _filled.Reset(); - - ThreadPool.QueueUserWorkItem(Fill); - } - - private void Fill(object o) - { - SafeNativeMethods.rdrand_get_bytes(BUFFER_SIZE, _Buffer); - _filled.Set(); - } - - private void _GetBytes(byte[] b) - { - int c = b.Length; - - lock (_sync) - { - CheckSwap(c); - Buffer.BlockCopy(_Working, _Index, b, 0, c); - _Index += c; - } - } - - private void _GetBytes(byte[] b, int offset, int count) - { - lock (_sync) - { - CheckSwap(count); - Buffer.BlockCopy(_Working, _Index, b, offset, count); - _Index += count; - } - } - - private byte NextByte() - { - lock (_sync) - { - CheckSwap(1); - return _Working[_Index++]; - } - } - - internal class SafeNativeMethods - { - [DllImport("rdrand64")] - internal static extern RDRandError rdrand_64(ref ulong rand, bool retry); - - [DllImport("rdrand64")] - internal static extern RDRandError rdrand_get_bytes(int n, byte[] buffer); + GetBytes(b.AsSpan(offset, count)); } } @@ -687,4 +257,4 @@ namespace Server Success = 1 } -} \ No newline at end of file +} diff --git a/Projects/Server/Region.cs b/Projects/Server/Region.cs index 07133e68a..63fb77949 100644 --- a/Projects/Server/Region.cs +++ b/Projects/Server/Region.cs @@ -1072,7 +1072,7 @@ namespace Server Type type; try { - type = ScriptCompiler.FindTypeByName(s, false); + type = AssemblyHandler.FindTypeByName(s, false); } catch { diff --git a/Projects/Server/Server.csproj b/Projects/Server/Server.csproj index 30fb37b92..c564d5e6b 100644 --- a/Projects/Server/Server.csproj +++ b/Projects/Server/Server.csproj @@ -1,4 +1,4 @@ - + Exe @@ -7,7 +7,7 @@ ModernUO - 3.0.0 + 0.0.1 Kamron Batman ModernUO ModernUO @@ -15,54 +15,43 @@ netcoreapp3.0 true - - NETCORE;NETSTANDARD - TRACE;DEBUG true false - ..\..\Distribution\ - ..\..\Distribution true + ..\..\Distribution + ..\..\Distribution + ..\..\Distribution x64 + 8.0 true - ..\..\Distribution\ - ..\..\Distribution true x64 ..\..\Distribution + ..\..\Distribution + ..\..\Distribution + 8.0 - + + zlib.dll + PreserveNewest + + + rdrand.dll + PreserveNewest + + rdrand.so PreserveNewest - - rdrand32.dll - PreserveNewest - - - rdrand64.dll - PreserveNewest - - - zlib32.dll - PreserveNewest - - - zlib64.dll - PreserveNewest - - - Assemblies\System.IO.Pipelines.dll - false - + diff --git a/Projects/Server/TileMatrix.cs b/Projects/Server/TileMatrix.cs index 49c2a4323..e9e0a5a35 100644 --- a/Projects/Server/TileMatrix.cs +++ b/Projects/Server/TileMatrix.cs @@ -422,7 +422,7 @@ namespace Server public void Force() { - if (ScriptCompiler.Assemblies == null || ScriptCompiler.Assemblies.Length == 0) + if ((AssemblyHandler.Assemblies?.Length ?? 0) == 0) throw new Exception(); } diff --git a/Projects/Server/World.cs b/Projects/Server/World.cs index dafd0cbe6..ebdf4acf6 100644 --- a/Projects/Server/World.cs +++ b/Projects/Server/World.cs @@ -124,7 +124,7 @@ namespace Server { string typeName = tdbReader.ReadString(); - Type t = ScriptCompiler.FindTypeByFullName(typeName); + Type t = AssemblyHandler.FindTypeByFullName(typeName); if (t == null) { @@ -703,7 +703,7 @@ namespace Server } else { - Mobiles[m.Serial] = m; + Mobiles.Add(m.Serial, m); } } @@ -723,7 +723,7 @@ namespace Server } else { - Items[item.Serial] = item; + Items.Add(item.Serial, item); } } diff --git a/Projects/Server/app.config b/Projects/Server/app.config deleted file mode 100644 index 33a3bf96b..000000000 --- a/Projects/Server/app.config +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/Projects/Server/packages.config b/Projects/Server/packages.config deleted file mode 100644 index 3299dfcf0..000000000 --- a/Projects/Server/packages.config +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file