From 0610efe2f0563f0fed97f30e62414f3f3074e207 Mon Sep 17 00:00:00 2001 From: Nir Bar Date: Tue, 21 Nov 2023 09:39:36 +0200 Subject: [PATCH] Squashed commit of the following: commit e0a9ec5d3e02d2471d496d1a59c89cb963bd01d7 Author: Bob Arnson Date: Sun Nov 19 21:11:51 2023 -0500 Remove the deprecated DifxApp WiX extension. Per https://wixtoolset.org/docs/releasenotes/#deprecations-and-deletions. commit e5ed750c9fa3a9d4c1a91984a8917754b9432c64 Author: Bob Arnson Date: Sun Nov 19 20:55:45 2023 -0500 Clean up. commit dfb7512b85536b7726080648f2228cf8d0153724 Author: chris_bednarski Date: Thu Sep 21 16:03:28 2023 +1000 add firewall extension decompiler, make msi modifications work, add all attributes commit 80e604761b4f43b9b79a4878fcae360b071a7c35 Author: chris_bednarski Date: Sat Aug 26 18:51:38 2023 +1000 change firewall extension table name to Wix5FirewallException commit 6e974490eeabc9a3728aa2fb9ad07e8a5adf4fb6 Author: Rob Mensching Date: Mon Nov 13 12:56:15 2023 -0800 Return intermediate even if compiler encounters error Fixes 7854 commit a532341085b0c8d9065deb1557b8ae0c0297eea8 Author: Rob Mensching Date: Mon Nov 6 21:46:30 2023 -0800 Include duplicated inline directory symbols referenced in subsequent sections Due to the handling of redundant symbols, which are only used by inline directory syntax, the symbols were only defined in the first section encountered by the linker. Fix that so at most one duplicated inline directory symbol is included when referenced. Fixes 7840 commit 4b9bbae262d7a3c67e09c66d7b5c37c44df850c7 Author: Rob Mensching Date: Mon Nov 6 22:45:46 2023 -0800 Fix duplication of AdditionalOptions being added to command-line Fixes 7837 commit a886df0a02f26a3fc30cf836a5a4cadbf4ab2bcd Author: Rob Mensching Date: Mon Nov 6 22:36:57 2023 -0800 Correctly handle top-level AppId element Fixes 7738 commit 96e9c0f76029f27bd1f2a777aca385b29e9ec21a Author: Rob Mensching Date: Mon Nov 6 23:08:10 2023 -0800 Avoid use of Encoding.WindowsCodePage Fixes 7612 commit b84202794f5fd4f21e0fb1fc74c2f5d531035db3 Author: Bob Arnson Date: Mon Oct 23 00:17:18 2023 -0400 Introduce a new phase in the build pipeline. A useful point in the build pipeline is after all the files in the project have been compiled but before they've been linked. The WiX core and extensions can operate on symbols across the project but without operating at the source-code level. This phase is currently named "optimize," after a moderately-similar phase in other compiler architectures. The name is, for now, a stake in the ground and a better alternate is welcome. commit bb691bde8bff680ead1e6b0cf41cf3af7736331b Author: Bob Arnson Date: Fri Oct 13 20:22:34 2023 -0400 Random typo fix. commit f5e164d513772726ef409921672045ae9cb10e8b Author: Bob Arnson Date: Fri Oct 13 20:22:21 2023 -0400 Add cert and x64 tests. commit 0014af66faa541f70f84b22dc7aa5eea0d524d37 Author: apacker1 Date: Fri Sep 22 14:41:57 2023 -0700 DotNetCompatibilityCheck: If running NetCoreCheck.exe fails with error code ERROR_EXE_MACHINE_TYPE_MISMATCH or ERROR_BAD_EXE_FORMAT then don't abort the installation, just set the property to 13. Fixes issue #7737 commit e570ce580afa981d3cf7750bea1d129309b48a06 Author: Rob Mensching Date: Tue Sep 12 14:08:34 2023 -0700 Update to latest signing infrastructure Fixes 7546 commit 409d3b63bff29df0859a217ba2843b85d65d2efe Author: chris_bednarski Date: Sat Aug 26 17:31:08 2023 +1000 add FIREWALL_EXCEPTION_ATTRIBUTES struct commit e7656ce03e5412b3f12aec7ddd879b3ef771a065 Author: Bob Arnson Date: Sun Sep 10 22:52:33 2023 -0400 Remove unused symbol `Version`. commit f18d7e628361cd3f2ff14dd3326cbeea68df004f Author: Rob Mensching Date: Mon Sep 4 23:40:46 2023 -0700 Correctly process build -outputType switch Also add a few additional output types to built-in backends. Fixes 7708 commit e29b4aacf89ce060509b20a5f81df200f7d2fbc1 Author: chris_bednarski Date: Mon Aug 21 11:34:51 2023 +1000 remove windows xp specific code from firewall extension commit b3deb46def7d303a79f4a5eba6a921e45d5f16ef Author: chris_bednarski Date: Sat Aug 26 08:31:28 2023 +1000 add firewall extension decompiler commit 537e79d3c8b99e1576db48b19c8071c0922342f2 Author: chris_bednarski Date: Sun Aug 20 19:49:21 2023 +1000 use WcaGetRecordFormattedString to get firewall rule description commit febb9c943d6c6c0db3a660de6f96b7d9f5941b1a Author: chris_bednarski Date: Sun Aug 13 11:34:57 2023 +1000 add integration tests for the firewall extenstion commit 6f520b9def48f302625906ad961e1afa28edb3d0 Author: Bob Arnson Date: Tue Aug 15 18:05:47 2023 -0400 Properly fragment NetFx custom actions. FIxes https://github.com/wixtoolset/issues/issues/7677. commit 59f37d218f58ef80da541a11a1d3825554c00d3f Author: Rob Mensching Date: Mon Aug 7 15:43:10 2023 -0700 Fix the use of ModuleSubstitution table Addresses two issues in the creation of configurable merge modules. First, the ModuleConfiguration table Id should not be modularized. Second, the ModuleSubstitution table was never created. Fixing both of those allows configurable merge modules to work again. Fixes 7559 commit 2b429e95e60062366630a995ea5984d857f0f275 Author: Rob Mensching Date: Mon Aug 7 12:31:20 2023 -0700 Remove Esproj test The npm packages in esproj regularly encounter security issues that are not relevant to WiX. The test provides less value than the churn required to keep all the test project up to date, so deleting it. commit 9607c3aec6d99662d9efbd2f14fa5ae285c0aac6 Author: Rob Mensching Date: Mon Aug 7 12:07:39 2023 -0700 Ensure the Font actions are scheduled for TrueType fonts TrueType fonts are denoted by the empty string in the FontTitle field of the FileSymbol. That means a non-null FontTitle field value means a font is being installed. Fixes 7593 commit 6d5c4be037087420dff69d8f3ed6c7b528e4125e Author: Bob Arnson Date: Sat Jul 29 20:57:14 2023 -0400 Remove legacy permissions support. In the long ago, a share could have one user/permissions pair. That's really limited, of course, so support for _n_ user/permissions pairs was added. In the move to WiX v4, support for that single, legacy user was removed from the extension side but not the custom action side. Remove that support. Fixes https://github.com/wixtoolset/issues/issues/7632. commit d8832dbc91cd1d93ebb13c346aa0920bf44b4466 Author: chris_bednarski Date: Wed Aug 2 19:39:25 2023 +1000 fix stack corruption around cbdata when adding a machine certificate commit 5e9901d7be4953333b0f2c3a25e8eb484d5673d6 Author: chris_bednarski Date: Sat Jul 22 09:01:55 2023 +1000 Multiple extension support in unit tests commit 1c50eb8ac6d693b910eb2bd1d44526d9e3f10c50 Author: Bob Arnson Date: Fri Jul 21 19:56:59 2023 -0400 Fix mentions of dark.exe. commit e0641f1479c6f67f6ec119d448b66a74ad5d6b88 Author: Marco Stadler Date: Mon Apr 24 11:49:53 2023 +0200 Allow custom package comments Fixes #7369 commit 42118ef58ba698280b5c28c69f86029c9152072f Author: Rob Mensching Date: Wed Jul 19 10:20:19 2023 -0700 Fix out of date references to Product in warnings Fixes 7631 commit 7a603e4d5a9c68f721464df15da2619b084fdb18 Author: Rob Mensching Date: Wed Jul 19 10:19:35 2023 -0700 Remove invalid references to ToolsVersion in ext wixlib projects commit d20b6d41283f2f9decc8ef98cae1d36b09198159 Author: chris_bednarski Date: Wed Jul 19 10:11:18 2023 +1000 feat(build): update xunit to version 2.5.0, fix occasional test timeout commit cef14c6055f85e470ff9ce7a33b53e80d1160ba6 Author: Bob Arnson Date: Thu Jun 15 15:40:37 2023 -0400 Ensure extensions get the same decompiler helper. Fixes https://github.com/wixtoolset/issues/issues/7548. THIS IS A BREAKING INTERFACE/EXTENSIBILITY CHANGE. commit 164c29aff8d6581a3277c9fd0810ea56356c3e69 Author: Bob Arnson Date: Tue Jul 11 21:19:08 2023 -0400 Partial fix for the weirdly broken... IWindowsInstallerDecompileContext.TreatProductAsModule. https://github.com/wixtoolset/issues/issues/7607 commit 713f286e0f82d6ad79272082abca7f987791f60b Author: Rob Mensching Date: Sat Jul 8 09:10:50 2023 -0700 Fix typo where Level was used instead of Value in Level element error message Fixes 7603 commit e53c658973fa0ece0b64e7be7ca9ebcb7e05044a Author: Bob Arnson Date: Thu Jun 29 21:16:35 2023 -0400 Extract object fields with modularization GUIDs. commit ddae99c27fcec6c90696f6df66608aae155d6a93 Author: Bob Arnson Date: Tue Jun 20 20:09:19 2023 -0400 Handle MergeModule.CABinet for extraction. Fixes https://github.com/wixtoolset/issues/issues/7568, commit 9a550ac1bd6dbe1d3957fd3069115ac9db78251b Author: Michael Stoll Date: Wed May 3 18:04:48 2023 +0200 Add more _NODOMAIN properties to WixQueryOsWellKnownSID commit 35d30e03027cef5c402f01d671fc1883514e77a9 Author: Bob Arnson Date: Thu May 18 20:47:27 2023 -0400 Improve logging to remove `(null)`. Add detached container runtime test. Inspired by https://github.com/wixtoolset/issues/issues/7490. commit f4740666c9eb2512640b7c69c79447ef8e7daa8e Author: Jesper Hansen Date: Mon Jun 12 14:39:32 2023 +0200 Update WindowsInstallerStandard.cs ordered sequence Ordered standard actions by sequence and group for more human readability commit 2daf18981fb28a691df95e7b071a0a991bf515b3 Author: Nir Bar Date: Thu Apr 20 08:44:54 2023 +0300 Allow customized AdditionalOptions for all HarvestX MSBuild ItemGroups commit 783b829e1178809ff5c520adca7f6169a0935dd1 Author: Rob Mensching Date: Fri Jun 2 11:45:10 2023 -0700 ProjectReferences to wixlibs should participate in DefineConstants creation Also fix documentation in ResolveWixLibraryReferences target. Fixes 7512 commit ed0a765c3294f89d26af16a215339e8db3142749 Author: Bob Arnson Date: Wed May 31 16:04:27 2023 -0400 Downgrade bad ProductVersion error to warning. Fixes https://github.com/wixtoolset/issues/issues/7522. commit bc9343ad5c6133ae5f2d5233837beeee7041a292 Author: Rob Mensching Date: Tue May 30 08:28:14 2023 -0700 Obsolete removed PackageState.Cached value A package's cached status is no longer set via the PackageState. The value was removed in native code but the managed code was missed throwing off the enum mapping. Fixes 7399 --- src/.editorconfig | 3 - src/Directory.csproj.targets | 5 +- src/api/wix/WixToolset.Data/ErrorMessages.cs | 8 +- src/ext/DifxApp/DifxApp.wixext.sln | 63 -- src/ext/DifxApp/README.md | 2 - src/ext/DifxApp/difxapp.cmd | 21 - .../DifxAppExtensionFixture.cs | 46 - .../UsingDriver/PackageComponents.wxs | 12 - .../WixToolsetTest.DifxApp.csproj | 24 - src/ext/DifxApp/wixext/DifxAppCompiler.cs | 155 --- src/ext/DifxApp/wixext/DifxAppDecompiler.cs | 98 -- .../DifxApp/wixext/DifxAppExtensionData.cs | 18 - .../DifxApp/wixext/DifxAppExtensionFactory.cs | 18 - .../DifxApp/wixext/DifxAppTableDefinitions.cs | 26 - ...pWindowsInstallerBackendBinderExtension.cs | 13 - .../Symbols/DifxAppSymbolDefinitions.cs | 37 - .../wixext/Symbols/MsiDriverPackagesSymbol.cs | 63 -- .../wixext/WixToolset.DifxApp.wixext.csproj | 24 - .../wixext/WixToolset.DifxApp.wixext.targets | 12 - src/ext/DifxApp/wixlib/DifxAppExtension.wxs | 20 - src/ext/DifxApp/wixlib/x64/DIFxApp.dll | Bin 153080 -> 0 bytes src/ext/DifxApp/wixlib/x64/DIFxAppA.dll | Bin 707464 -> 0 bytes src/ext/DifxApp/wixlib/x86/DIFxApp.dll | Bin 122248 -> 0 bytes src/ext/DifxApp/wixlib/x86/DIFxAppA.dll | Bin 364424 -> 0 bytes src/ext/Firewall/ca/firewall.cpp | 996 ++++++++++++++---- .../FirewallExtensionFixture.cs | 597 ++++++++++- .../UsingFirewall/PackageComponents.wxs | 43 +- .../UsingProperties}/Package.en-us.wxl | 0 .../TestData/UsingProperties}/Package.wxs | 2 +- .../UsingProperties/PackageComponents.wxs | 53 + .../TestData/UsingProperties}/example.txt | 0 .../WixToolsetTest.Firewall.csproj | 2 + src/ext/Firewall/wixext/FirewallCompiler.cs | 631 ++++++++++- src/ext/Firewall/wixext/FirewallConstants.cs | 17 + src/ext/Firewall/wixext/FirewallDecompiler.cs | 351 +++++- src/ext/Firewall/wixext/FirewallErrors.cs | 29 +- .../wixext/FirewallTableDefinitions.cs | 32 +- .../Symbols/WixFirewallExceptionSymbol.cs | 142 ++- .../wixext/WixToolset.Firewall.wixext.csproj | 4 +- .../wixlib/FirewallExtension_Platform.wxi | 32 +- src/ext/Util/wixext/UtilCompiler.cs | 13 +- src/ext/caDecor.h | 10 + src/ext/caDecor.wxi | 6 + src/ext/ext.cmd | 3 - .../Directory.Packages.props.pp | 7 +- .../burn/WixTestTools/Firewall/RuleDetails.cs | 8 +- .../CrossVersionMerge.wixproj | 13 + .../CrossVersionMerge/Module401.msm | Bin 0 -> 192512 bytes .../CrossVersionMerge/package.wxs | 35 + .../DynamicFirewallRules.wixproj | 6 +- .../FirewallRules/FirewallRules.wixproj | 6 +- .../FirewallRulesInterfaces.wixproj | 13 + .../FirewallRulesInterfaces/product.wxs | 32 + .../FirewallRulesProperties.wixproj | 13 + .../FirewallRulesProperties/product.wxs | 57 + .../IgnoreFailedFirewallRules.wixproj | 6 +- .../Module401/Module401.wixproj} | 9 +- .../Module401/data/test.txt | 1 + .../Module401/module.wxs | 36 + .../ModuleCurrent/ModuleCurrent.wixproj} | 12 +- .../ModuleCurrent/data/test.txt | 1 + .../ModuleCurrent/module.wxs | 36 + .../NestedService/NestedService.wixproj | 14 + .../NestedService/product.wxs | 25 + .../ProtocolRules/ProtocolRules.wixproj | 13 + .../ProtocolRules/product.wxs | 23 + .../ScopeRules/ScopeRules.wixproj | 13 + .../ScopeRules/product.wxs | 33 + .../FirewallExtensionTests.cs | 853 ++++++++++++++- .../WixToolsetTest.MsiE2E.csproj | 1 + .../DetachBundleEngineForSigning.cs | 2 - .../InscribeMsiWithCabinetSignatures.cs | 2 - .../ReattachSignedBundleEngine.cs | 2 - .../WindowsInstallerValidation.cs | 2 - src/wix/WixToolset.BuildTasks/WixBuild.cs | 1 - src/wix/WixToolset.Converters/WixConverter.cs | 4 +- .../Bind/CreateIdtFileCommand.cs | 2 +- src/wix/WixToolset.Core/Compiler.cs | 4 +- .../FindEntrySectionAndLoadSymbolsCommand.cs | 25 +- .../Link/ReportConflictingSymbolsCommand.cs | 4 +- .../Link/ResolveReferencesCommand.cs | 13 +- .../WixToolset.Core/Link/SymbolWithSection.cs | 25 +- src/wix/WixToolset.Core/Linker.cs | 20 +- .../AppIdFixture.cs | 76 ++ .../DirectoryFixture.cs | 47 + .../EncodingFixture.cs | 44 + .../MsiQueryFixture.cs | 33 - .../TestData/AppId/TopLevelAppId.wxs | 19 + .../RedundantSubdirectoryInSecondSection.wxs | 26 + .../TestData/Encoding/Encoding.wxs | 14 + 90 files changed, 4107 insertions(+), 1155 deletions(-) delete mode 100644 src/ext/DifxApp/DifxApp.wixext.sln delete mode 100644 src/ext/DifxApp/README.md delete mode 100644 src/ext/DifxApp/difxapp.cmd delete mode 100644 src/ext/DifxApp/test/WixToolsetTest.DifxApp/DifxAppExtensionFixture.cs delete mode 100644 src/ext/DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver/PackageComponents.wxs delete mode 100644 src/ext/DifxApp/test/WixToolsetTest.DifxApp/WixToolsetTest.DifxApp.csproj delete mode 100644 src/ext/DifxApp/wixext/DifxAppCompiler.cs delete mode 100644 src/ext/DifxApp/wixext/DifxAppDecompiler.cs delete mode 100644 src/ext/DifxApp/wixext/DifxAppExtensionData.cs delete mode 100644 src/ext/DifxApp/wixext/DifxAppExtensionFactory.cs delete mode 100644 src/ext/DifxApp/wixext/DifxAppTableDefinitions.cs delete mode 100644 src/ext/DifxApp/wixext/DifxAppWindowsInstallerBackendBinderExtension.cs delete mode 100644 src/ext/DifxApp/wixext/Symbols/DifxAppSymbolDefinitions.cs delete mode 100644 src/ext/DifxApp/wixext/Symbols/MsiDriverPackagesSymbol.cs delete mode 100644 src/ext/DifxApp/wixext/WixToolset.DifxApp.wixext.csproj delete mode 100644 src/ext/DifxApp/wixext/WixToolset.DifxApp.wixext.targets delete mode 100644 src/ext/DifxApp/wixlib/DifxAppExtension.wxs delete mode 100644 src/ext/DifxApp/wixlib/x64/DIFxApp.dll delete mode 100644 src/ext/DifxApp/wixlib/x64/DIFxAppA.dll delete mode 100644 src/ext/DifxApp/wixlib/x86/DIFxApp.dll delete mode 100644 src/ext/DifxApp/wixlib/x86/DIFxAppA.dll rename src/ext/{DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver => Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties}/Package.en-us.wxl (100%) rename src/ext/{DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver => Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties}/Package.wxs (85%) create mode 100644 src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties/PackageComponents.wxs rename src/ext/{DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver => Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties}/example.txt (100%) create mode 100644 src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/CrossVersionMerge.wixproj create mode 100644 src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/Module401.msm create mode 100644 src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/package.wxs create mode 100644 src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj create mode 100644 src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/product.wxs create mode 100644 src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj create mode 100644 src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/product.wxs rename src/{ext/DifxApp/wixlib/difxapp.wixproj => test/msi/TestData/FirewallExtensionTests/Module401/Module401.wixproj} (56%) create mode 100644 src/test/msi/TestData/FirewallExtensionTests/Module401/data/test.txt create mode 100644 src/test/msi/TestData/FirewallExtensionTests/Module401/module.wxs rename src/{ext/DifxApp/Directory.Build.props => test/msi/TestData/FirewallExtensionTests/ModuleCurrent/ModuleCurrent.wixproj} (53%) create mode 100644 src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/data/test.txt create mode 100644 src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/module.wxs create mode 100644 src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj create mode 100644 src/test/msi/TestData/FirewallExtensionTests/NestedService/product.wxs create mode 100644 src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/ProtocolRules.wixproj create mode 100644 src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/product.wxs create mode 100644 src/test/msi/TestData/FirewallExtensionTests/ScopeRules/ScopeRules.wixproj create mode 100644 src/test/msi/TestData/FirewallExtensionTests/ScopeRules/product.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/AppIdFixture.cs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/EncodingFixture.cs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/AppId/TopLevelAppId.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/Directory/RedundantSubdirectoryInSecondSection.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/Encoding/Encoding.wxs diff --git a/src/.editorconfig b/src/.editorconfig index 46148b8d4..472848c7c 100644 --- a/src/.editorconfig +++ b/src/.editorconfig @@ -1,7 +1,4 @@ # Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -# -# Do NOT modify this file. Update the canonical version in Home\repo-template\src\.editorconfig -# then update all of the repos. root = true diff --git a/src/Directory.csproj.targets b/src/Directory.csproj.targets index d2e0c4c75..ba7185e89 100644 --- a/src/Directory.csproj.targets +++ b/src/Directory.csproj.targets @@ -1,8 +1,5 @@ - + false diff --git a/src/api/wix/WixToolset.Data/ErrorMessages.cs b/src/api/wix/WixToolset.Data/ErrorMessages.cs index a8d9d9401..01515ebeb 100644 --- a/src/api/wix/WixToolset.Data/ErrorMessages.cs +++ b/src/api/wix/WixToolset.Data/ErrorMessages.cs @@ -55,7 +55,7 @@ public static Message AdvertiseStateMustMatch(SourceLineNumber sourceLineNumbers public static Message AppIdIncompatibleAdvertiseState(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value, string parentValue) { - return Message(sourceLineNumbers, Ids.AppIdIncompatibleAdvertiseState, "The {0}/@(1) attribute's value, '{2}' does not match the advertise state on its parent element: '{3}'. (Note: AppIds nested under Fragment, Module, or Product elements must be advertised.)", elementName, attributeName, value, parentValue); + return Message(sourceLineNumbers, Ids.AppIdIncompatibleAdvertiseState, "The {0}/@(1) attribute's value, '{2}' does not match the advertise state on its parent element: '{3}'. (Note: AppIds nested under Fragment, Module, or Package elements must be advertised.)", elementName, attributeName, value, parentValue); } public static Message BaselineRequired() @@ -867,12 +867,12 @@ public static Message IllegalCharactersInPath(string pathName) public static Message IllegalCodepage(int codepage) { - return Message(null, Ids.IllegalCodepage, "The code page '{0}' is not a valid Windows code page. Update the database's code page by modifying one of the following attributes: Package/@Codepage, Module/@Codepage, Patch/@Codepage, PatchCreation/@Codepage, or WixLocalization/@Codepage.", codepage); + return Message(null, Ids.IllegalCodepage, "The code page '{0}' is not a valid Windows code page. Update the database's code page by modifying one of the following attributes: Package/@Codepage, Module/@Codepage, Patch/@Codepage, or WixLocalization/@Codepage.", codepage); } public static Message IllegalCodepage(SourceLineNumber sourceLineNumbers, int codepage) { - return Message(sourceLineNumbers, Ids.IllegalCodepage, "The code page '{0}' is not a valid Windows code page. Update the database's code page by modifying one of the following attributes: Package/@Codepage, Module/@Codepage, Patch/@Codepage, PatchCreation/@Codepage, or WixLocalization/@Codepage.", codepage); + return Message(sourceLineNumbers, Ids.IllegalCodepage, "The code page '{0}' is not a valid Windows code page. Update the database's code page by modifying one of the following attributes: Package/@Codepage, Module/@Codepage, Patch/@Codepage, or WixLocalization/@Codepage.", codepage); } public static Message IllegalCodepageAttribute(SourceLineNumber sourceLineNumbers, string codepage, string elementName, string attributeName) @@ -1318,7 +1318,7 @@ public static Message InvalidSequenceTable(string sequenceTableName) public static Message InvalidStringForCodepage(SourceLineNumber sourceLineNumbers, string codepage) { - return Message(sourceLineNumbers, Ids.InvalidStringForCodepage, "A string was provided with characters that are not available in the specified database code page '{0}'. Either change these characters to ones that exist in the database's code page, or update the database's code page by modifying one of the following attributes: Package/@Codepage, Module/@Codepage, Patch/@Codepage, PatchCreation/@Codepage, or WixLocalization/@Codepage.", codepage); + return Message(sourceLineNumbers, Ids.InvalidStringForCodepage, "A string was provided with characters that are not available in the specified database code page '{0}'. Either change these characters to ones that exist in the database's code page, or update the database's code page by modifying one of the following attributes: Package/@Codepage, Module/@Codepage, Patch/@Codepage, or WixLocalization/@Codepage.", codepage); } public static Message InvalidStubExe(string filename) diff --git a/src/ext/DifxApp/DifxApp.wixext.sln b/src/ext/DifxApp/DifxApp.wixext.sln deleted file mode 100644 index d212c773e..000000000 --- a/src/ext/DifxApp/DifxApp.wixext.sln +++ /dev/null @@ -1,63 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30611.23 -MinimumVisualStudioVersion = 15.0.26124.0 -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "difxapp", "wixlib\difxapp.wixproj", "{5066EB93-D8F7-4FAE-B687-024D7A81BD95}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.DifxApp.wixext", "wixext\WixToolset.DifxApp.wixext.csproj", "{2256EFD7-E678-4485-818D-986D590068BE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.DifxApp", "test\WixToolsetTest.DifxApp\WixToolsetTest.DifxApp.csproj", "{883D7BA3-1ADC-47AC-95B0-221BB0B7788D}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5066EB93-D8F7-4FAE-B687-024D7A81BD95}.Debug|Any CPU.ActiveCfg = Debug|x86 - {5066EB93-D8F7-4FAE-B687-024D7A81BD95}.Debug|Any CPU.Build.0 = Debug|x86 - {5066EB93-D8F7-4FAE-B687-024D7A81BD95}.Debug|x64.ActiveCfg = Debug|x86 - {5066EB93-D8F7-4FAE-B687-024D7A81BD95}.Debug|x86.ActiveCfg = Debug|x86 - {5066EB93-D8F7-4FAE-B687-024D7A81BD95}.Debug|x86.Build.0 = Debug|x86 - {5066EB93-D8F7-4FAE-B687-024D7A81BD95}.Release|Any CPU.ActiveCfg = Release|x86 - {5066EB93-D8F7-4FAE-B687-024D7A81BD95}.Release|Any CPU.Build.0 = Release|x86 - {5066EB93-D8F7-4FAE-B687-024D7A81BD95}.Release|x64.ActiveCfg = Release|x86 - {5066EB93-D8F7-4FAE-B687-024D7A81BD95}.Release|x86.ActiveCfg = Release|x86 - {5066EB93-D8F7-4FAE-B687-024D7A81BD95}.Release|x86.Build.0 = Release|x86 - {2256EFD7-E678-4485-818D-986D590068BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2256EFD7-E678-4485-818D-986D590068BE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2256EFD7-E678-4485-818D-986D590068BE}.Debug|x64.ActiveCfg = Debug|Any CPU - {2256EFD7-E678-4485-818D-986D590068BE}.Debug|x64.Build.0 = Debug|Any CPU - {2256EFD7-E678-4485-818D-986D590068BE}.Debug|x86.ActiveCfg = Debug|Any CPU - {2256EFD7-E678-4485-818D-986D590068BE}.Debug|x86.Build.0 = Debug|Any CPU - {2256EFD7-E678-4485-818D-986D590068BE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2256EFD7-E678-4485-818D-986D590068BE}.Release|Any CPU.Build.0 = Release|Any CPU - {2256EFD7-E678-4485-818D-986D590068BE}.Release|x64.ActiveCfg = Release|Any CPU - {2256EFD7-E678-4485-818D-986D590068BE}.Release|x64.Build.0 = Release|Any CPU - {2256EFD7-E678-4485-818D-986D590068BE}.Release|x86.ActiveCfg = Release|Any CPU - {2256EFD7-E678-4485-818D-986D590068BE}.Release|x86.Build.0 = Release|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Debug|x64.ActiveCfg = Debug|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Debug|x64.Build.0 = Debug|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Debug|x86.ActiveCfg = Debug|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Debug|x86.Build.0 = Debug|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Release|Any CPU.Build.0 = Release|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Release|x64.ActiveCfg = Release|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Release|x64.Build.0 = Release|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Release|x86.ActiveCfg = Release|Any CPU - {883D7BA3-1ADC-47AC-95B0-221BB0B7788D}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {60A3EA0F-9313-47F8-BF6B-74478A57B577} - EndGlobalSection -EndGlobal diff --git a/src/ext/DifxApp/README.md b/src/ext/DifxApp/README.md deleted file mode 100644 index 49f30df83..000000000 --- a/src/ext/DifxApp/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# DifxApp.wixext -WixToolset.DifxApp.wixext - DIFxApp WiX Toolset Extension diff --git a/src/ext/DifxApp/difxapp.cmd b/src/ext/DifxApp/difxapp.cmd deleted file mode 100644 index 3f8224532..000000000 --- a/src/ext/DifxApp/difxapp.cmd +++ /dev/null @@ -1,21 +0,0 @@ -@setlocal -@pushd %~dp0 - -@set _C=Debug -:parse_args -@if /i "%1"=="release" set _C=Release -@if not "%1"=="" shift & goto parse_args - -@echo DifxApp.wixext build %_C% - -:: Build -msbuild -Restore -p:Configuration=%_C% || exit /b - -:: Test -dotnet test -c %_C% --no-build test\WixToolsetTest.DifxApp || exit /b - -:: Pack -msbuild -t:Pack -p:Configuration=%_C% -p:NoBuild=true wixext\WixToolset.DifxApp.wixext.csproj || exit /b - -@popd -@endlocal diff --git a/src/ext/DifxApp/test/WixToolsetTest.DifxApp/DifxAppExtensionFixture.cs b/src/ext/DifxApp/test/WixToolsetTest.DifxApp/DifxAppExtensionFixture.cs deleted file mode 100644 index d132952f5..000000000 --- a/src/ext/DifxApp/test/WixToolsetTest.DifxApp/DifxAppExtensionFixture.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. - -namespace WixToolsetTest.DifxApp -{ - using System; - using System.IO; - using System.Linq; - using WixInternal.TestSupport; - using WixInternal.Core.TestPackage; - using WixToolset.DifxApp; - using Xunit; - - public class DifxAppExtensionFixture - { - [Fact] - public void CanBuildUsingDriver() - { - var folder = TestData.Get(@"TestData\UsingDriver"); - var build = new Builder(folder, typeof(DifxAppExtensionFactory), new[] { folder }); - - var results = build.BuildAndQuery(Build, "CustomAction"); - WixAssert.CompareLineByLine(new[] - { - "CustomAction:MsiCleanupOnSuccess\t1\tDIFxAppx64\tCleanupOnSuccess\t", - "CustomAction:MsiInstallDrivers\t3073\tDIFxAppAx64\tInstallDriverPackages\t", - "CustomAction:MsiProcessDrivers\t1\tDIFxAppx64\tProcessDriverPackages\t", - "CustomAction:MsiRollbackInstall\t3329\tDIFxAppAx64\tRollbackInstall\t", - "CustomAction:MsiUninstallDrivers\t3073\tDIFxAppAx64\tUninstallDriverPackages\t", - }, results); - } - - private static void Build(string[] args) - { - var newArgs = args.ToList(); - newArgs.Add("-platform"); - newArgs.Add("x64"); - - var extDir = Path.GetDirectoryName(new Uri(typeof(DifxAppExtensionFactory).Assembly.CodeBase).LocalPath); - newArgs.Add(Path.Combine(extDir, "..", "difxapp_x64.wixlib")); - - var result = WixRunner.Execute(warningsAsErrors: false, newArgs.ToArray()).AssertSuccess(); - - Assert.Single(result.Messages.Where(m => m.Id == (int)WixToolset.Data.WarningMessages.Ids.DeprecatedElement)); - } - } -} diff --git a/src/ext/DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver/PackageComponents.wxs b/src/ext/DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver/PackageComponents.wxs deleted file mode 100644 index 9609771a3..000000000 --- a/src/ext/DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver/PackageComponents.wxs +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - diff --git a/src/ext/DifxApp/test/WixToolsetTest.DifxApp/WixToolsetTest.DifxApp.csproj b/src/ext/DifxApp/test/WixToolsetTest.DifxApp/WixToolsetTest.DifxApp.csproj deleted file mode 100644 index d7176efad..000000000 --- a/src/ext/DifxApp/test/WixToolsetTest.DifxApp/WixToolsetTest.DifxApp.csproj +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - net6.0 - true - - - - - - - - - - - - - - - - - diff --git a/src/ext/DifxApp/wixext/DifxAppCompiler.cs b/src/ext/DifxApp/wixext/DifxAppCompiler.cs deleted file mode 100644 index 6f32a60bb..000000000 --- a/src/ext/DifxApp/wixext/DifxAppCompiler.cs +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. - -namespace WixToolset.DifxApp -{ - using System; - using System.Collections.Generic; - using System.Xml.Linq; - using WixToolset.Data; - using WixToolset.DifxApp.Symbols; - using WixToolset.Extensibility; - - /// - /// The compiler for the WiX Toolset Driver Install Frameworks for Applications Extension. - /// - public sealed class DifxAppCompiler : BaseCompilerExtension - { - private HashSet components; - - public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/difxapp"; - /// - /// Instantiate a new DifxAppCompiler. - /// - public DifxAppCompiler() - { - this.components = new HashSet(); - } - - /// - /// Processes an element for the Compiler. - /// - /// Source line number for the parent element. - /// Parent element of element to process. - /// Element to process. - /// Extra information about the context in which this element is being parsed. - public override void ParseElement(Intermediate intermediate, IntermediateSection section, XElement parentElement, XElement element, IDictionary context) - { - switch (parentElement.Name.LocalName) - { - case "Component": - var componentId = context["ComponentId"]; - var componentWin64 = Boolean.Parse(context["Win64"]); - - switch (element.Name.LocalName) - { - case "Driver": - this.ParseDriverElement(intermediate, section, element, componentId, componentWin64); - break; - default: - this.ParseHelper.UnexpectedElement(parentElement, element); - break; - } - break; - default: - this.ParseHelper.UnexpectedElement(parentElement, element); - break; - } - } - - /// - /// Parses a Driver element. - /// - /// Element to parse. - /// Identifier for parent component. - private void ParseDriverElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentId, bool win64) - { - var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node); - int attributes = 0; - var sequence = CompilerConstants.IntegerNotSet; - - // See https://github.com/wixtoolset/issues/issues/6648. DifxApp is deprecated so warn the user. - this.Messaging.Write(WarningMessages.DeprecatedElement(sourceLineNumbers, node.Name.LocalName)); - - // check the number of times a Driver element has been nested under this Component element - if (null != componentId) - { - if (this.components.Contains(componentId)) - { - this.Messaging.Write(ErrorMessages.TooManyElements(sourceLineNumbers, "Component", node.Name.LocalName, 1)); - } - else - { - this.components.Add(componentId); - } - } - - foreach (var attrib in node.Attributes()) - { - if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) - { - switch (attrib.Name.LocalName) - { - case "AddRemovePrograms": - if (YesNoType.No == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib)) - { - attributes |= 0x4; - } - break; - case "DeleteFiles": - if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib)) - { - attributes |= 0x10; - } - break; - case "ForceInstall": - if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib)) - { - attributes |= 0x1; - } - break; - case "Legacy": - if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib)) - { - attributes |= 0x8; - } - break; - case "PlugAndPlayPrompt": - if (YesNoType.No == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib)) - { - attributes |= 0x2; - } - break; - case "Sequence": - sequence = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue); - break; - default: - this.ParseHelper.UnexpectedAttribute(node, attrib); - break; - } - } - else - { - this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib); - } - } - - this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, node); - - if (!this.Messaging.EncounteredError) - { - this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, "MsiProcessDrivers"); - - var symbol = section.AddSymbol(new MsiDriverPackagesSymbol(sourceLineNumbers) - { - ComponentRef = componentId, - Flags = attributes, - }); - - if (CompilerConstants.IntegerNotSet != sequence) - { - symbol.Sequence = sequence; - } - } - } - } -} diff --git a/src/ext/DifxApp/wixext/DifxAppDecompiler.cs b/src/ext/DifxApp/wixext/DifxAppDecompiler.cs deleted file mode 100644 index e41d8b983..000000000 --- a/src/ext/DifxApp/wixext/DifxAppDecompiler.cs +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. - -namespace WixToolset.DifxApp -{ -#if TODO_CONSIDER_DECOMPILER - using System; - using System.Collections; - using System.Globalization; - using WixToolset.Data; - using WixToolset.Extensibility; - using DifxApp = WixToolset.Extensions.Serialize.DifxApp; - using Wix = WixToolset.Data.Serialize; - - /// - /// The decompiler for the WiX Toolset Driver Install Frameworks for Applications Extension. - /// - public sealed class DifxAppDecompiler : DecompilerExtension - { - /// - /// Creates a decompiler for Gaming Extension. - /// - public DifxAppDecompiler() - { - this.TableDefinitions = DifxAppExtensionData.GetExtensionTableDefinitions(); - } - - /// - /// Decompiles an extension table. - /// - /// The table to decompile. - public override void DecompileTable(Table table) - { - switch (table.Name) - { - case "MsiDriverPackages": - this.DecompileMsiDriverPackagesTable(table); - break; - default: - base.DecompileTable(table); - break; - } - } - - /// - /// Decompile the MsiDriverPackages table. - /// - /// The table to decompile. - private void DecompileMsiDriverPackagesTable(Table table) - { - foreach (Row row in table.Rows) - { - DifxApp.Driver driver = new DifxApp.Driver(); - - int attributes = (int)row[1]; - if (0x1 == (attributes & 0x1)) - { - driver.ForceInstall = DifxApp.YesNoType.yes; - } - - if (0x2 == (attributes & 0x2)) - { - driver.PlugAndPlayPrompt = DifxApp.YesNoType.no; - } - - if (0x4 == (attributes & 0x4)) - { - driver.AddRemovePrograms = DifxApp.YesNoType.no; - } - - if (0x8 == (attributes & 0x8)) - { - driver.Legacy = DifxApp.YesNoType.yes; - } - - if (0x10 == (attributes & 0x10)) - { - driver.DeleteFiles = DifxApp.YesNoType.yes; - } - - if (null != row[2]) - { - driver.Sequence = (int)row[2]; - } - - Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[0]); - if (null != component) - { - component.AddChild(driver); - } - else - { - this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component", (string)row[0], "Component")); - } - } - } - } -#endif -} diff --git a/src/ext/DifxApp/wixext/DifxAppExtensionData.cs b/src/ext/DifxApp/wixext/DifxAppExtensionData.cs deleted file mode 100644 index 5552717c4..000000000 --- a/src/ext/DifxApp/wixext/DifxAppExtensionData.cs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. - -namespace WixToolset.DifxApp -{ - using WixToolset.Data; - using WixToolset.Extensibility; - - public sealed class DifxAppExtensionData : BaseExtensionData - { - public override string DefaultCulture => "en-US"; - - public override bool TryGetSymbolDefinitionByName(string name, out IntermediateSymbolDefinition symbolDefinition) - { - symbolDefinition = DifxAppSymbolDefinitions.ByName(name); - return symbolDefinition != null; - } - } -} diff --git a/src/ext/DifxApp/wixext/DifxAppExtensionFactory.cs b/src/ext/DifxApp/wixext/DifxAppExtensionFactory.cs deleted file mode 100644 index 3932685d2..000000000 --- a/src/ext/DifxApp/wixext/DifxAppExtensionFactory.cs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. - -namespace WixToolset.DifxApp -{ - using System; - using System.Collections.Generic; - using WixToolset.Extensibility; - - public class DifxAppExtensionFactory : BaseExtensionFactory - { - protected override IReadOnlyCollection ExtensionTypes => new[] - { - typeof(DifxAppCompiler), - typeof(DifxAppExtensionData), - typeof(DifxAppWindowsInstallerBackendBinderExtension), - }; - } -} diff --git a/src/ext/DifxApp/wixext/DifxAppTableDefinitions.cs b/src/ext/DifxApp/wixext/DifxAppTableDefinitions.cs deleted file mode 100644 index a6c26444d..000000000 --- a/src/ext/DifxApp/wixext/DifxAppTableDefinitions.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. - -namespace WixToolset.DifxApp -{ - using WixToolset.Data.WindowsInstaller; - - public static class DifxAppTableDefinitions - { - public static readonly TableDefinition MsiDriverPackages = new TableDefinition( - "MsiDriverPackages", - DifxAppSymbolDefinitions.MsiDriverPackages, - new[] - { - new ColumnDefinition("Component", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Name of the component that represents the driver package", modularizeType: ColumnModularizeType.Column), - new ColumnDefinition("Flags", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 0, maxValue: 31, description: "Flags for installing and uninstalling driver packages"), - new ColumnDefinition("Sequence", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, minValue: 0, description: "Order in which the driver packages are processed"), - }, - symbolIdIsPrimaryKey: false - ); - - public static readonly TableDefinition[] All = new[] - { - MsiDriverPackages, - }; - } -} diff --git a/src/ext/DifxApp/wixext/DifxAppWindowsInstallerBackendBinderExtension.cs b/src/ext/DifxApp/wixext/DifxAppWindowsInstallerBackendBinderExtension.cs deleted file mode 100644 index 41f01175a..000000000 --- a/src/ext/DifxApp/wixext/DifxAppWindowsInstallerBackendBinderExtension.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. - -namespace WixToolset.DifxApp -{ - using System.Collections.Generic; - using WixToolset.Data.WindowsInstaller; - using WixToolset.Extensibility; - - public class DifxAppWindowsInstallerBackendBinderExtension : BaseWindowsInstallerBackendBinderExtension - { - public override IReadOnlyCollection TableDefinitions => DifxAppTableDefinitions.All; - } -} diff --git a/src/ext/DifxApp/wixext/Symbols/DifxAppSymbolDefinitions.cs b/src/ext/DifxApp/wixext/Symbols/DifxAppSymbolDefinitions.cs deleted file mode 100644 index c1f9673ac..000000000 --- a/src/ext/DifxApp/wixext/Symbols/DifxAppSymbolDefinitions.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. - -namespace WixToolset.DifxApp -{ - using System; - using WixToolset.Data; - - public enum DifxAppSymbolDefinitionType - { - MsiDriverPackages, - } - - public static partial class DifxAppSymbolDefinitions - { - public static IntermediateSymbolDefinition ByName(string name) - { - if (!Enum.TryParse(name, out DifxAppSymbolDefinitionType type)) - { - return null; - } - - return ByType(type); - } - - public static IntermediateSymbolDefinition ByType(DifxAppSymbolDefinitionType type) - { - switch (type) - { - case DifxAppSymbolDefinitionType.MsiDriverPackages: - return DifxAppSymbolDefinitions.MsiDriverPackages; - - default: - throw new ArgumentOutOfRangeException(nameof(type)); - } - } - } -} diff --git a/src/ext/DifxApp/wixext/Symbols/MsiDriverPackagesSymbol.cs b/src/ext/DifxApp/wixext/Symbols/MsiDriverPackagesSymbol.cs deleted file mode 100644 index 2fd91bc84..000000000 --- a/src/ext/DifxApp/wixext/Symbols/MsiDriverPackagesSymbol.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. - -namespace WixToolset.DifxApp -{ - using WixToolset.Data; - using WixToolset.DifxApp.Symbols; - - public static partial class DifxAppSymbolDefinitions - { - public static readonly IntermediateSymbolDefinition MsiDriverPackages = new IntermediateSymbolDefinition( - DifxAppSymbolDefinitionType.MsiDriverPackages.ToString(), - new[] - { - new IntermediateFieldDefinition(nameof(MsiDriverPackagesSymbolFields.ComponentRef), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(MsiDriverPackagesSymbolFields.Flags), IntermediateFieldType.Number), - new IntermediateFieldDefinition(nameof(MsiDriverPackagesSymbolFields.Sequence), IntermediateFieldType.Number), - }, - typeof(MsiDriverPackagesSymbol)); - } -} - -namespace WixToolset.DifxApp.Symbols -{ - using WixToolset.Data; - - public enum MsiDriverPackagesSymbolFields - { - ComponentRef, - Flags, - Sequence, - } - - public class MsiDriverPackagesSymbol : IntermediateSymbol - { - public MsiDriverPackagesSymbol() : base(DifxAppSymbolDefinitions.MsiDriverPackages, null, null) - { - } - - public MsiDriverPackagesSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(DifxAppSymbolDefinitions.MsiDriverPackages, sourceLineNumber, id) - { - } - - public IntermediateField this[MsiDriverPackagesSymbolFields index] => this.Fields[(int)index]; - - public string ComponentRef - { - get => this.Fields[(int)MsiDriverPackagesSymbolFields.ComponentRef].AsString(); - set => this.Set((int)MsiDriverPackagesSymbolFields.ComponentRef, value); - } - - public int Flags - { - get => this.Fields[(int)MsiDriverPackagesSymbolFields.Flags].AsNumber(); - set => this.Set((int)MsiDriverPackagesSymbolFields.Flags, value); - } - - public int? Sequence - { - get => this.Fields[(int)MsiDriverPackagesSymbolFields.Sequence].AsNullableNumber(); - set => this.Set((int)MsiDriverPackagesSymbolFields.Sequence, value); - } - } -} \ No newline at end of file diff --git a/src/ext/DifxApp/wixext/WixToolset.DifxApp.wixext.csproj b/src/ext/DifxApp/wixext/WixToolset.DifxApp.wixext.csproj deleted file mode 100644 index 75ea81ecb..000000000 --- a/src/ext/DifxApp/wixext/WixToolset.DifxApp.wixext.csproj +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - netstandard2.0 - WixToolset.DifxApp - WiX Toolset DIFxApp Extension - WiX Toolset DIFxApp Extension - embedded - - - - - - - - - - - - - - diff --git a/src/ext/DifxApp/wixext/WixToolset.DifxApp.wixext.targets b/src/ext/DifxApp/wixext/WixToolset.DifxApp.wixext.targets deleted file mode 100644 index b389d3a2b..000000000 --- a/src/ext/DifxApp/wixext/WixToolset.DifxApp.wixext.targets +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/src/ext/DifxApp/wixlib/DifxAppExtension.wxs b/src/ext/DifxApp/wixlib/DifxAppExtension.wxs deleted file mode 100644 index 430c604bb..000000000 --- a/src/ext/DifxApp/wixlib/DifxAppExtension.wxs +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/src/ext/DifxApp/wixlib/x64/DIFxApp.dll b/src/ext/DifxApp/wixlib/x64/DIFxApp.dll deleted file mode 100644 index 69a44cc86cb43095ad8b1731be632d3517e6f11f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153080 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 diff --git a/src/ext/DifxApp/wixlib/x64/DIFxAppA.dll b/src/ext/DifxApp/wixlib/x64/DIFxAppA.dll deleted file mode 100644 index 994580408cef7e2f9c55364c0e1a678b6e0eba6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 707464 zcmeFa51f@%oj?8{Aftjanqw4hU2Bpl6e+CG(VBq^-jM-EW>6|hZ~%uyn1vZdL!FwT zoGw#rQA@6E)Y>jvZn5Pz(cBsZ6=GCUt4Up@&22A1F1D;rtvSE<`+Uylp7T8SdG5?0 zxZm&Z)uY3?=bXC(&mmNw{MLI< z4(>YPku$fCsC(qh#^&W~QZ1`jUA=nowW+4XD_5>+ON#ED^w5h+Nuk$&UpVjxODSv<8 z{U$xP?^j6wWBk)L|8AR}XVQ7go0{3T&ZK^35G?uh=-}C(zVQ+*I~2Svb<%Ms1i_|~ zAQ*p~DPA#sbP$x8kL@Fv@H4884@Q{3(ai8UbfO{NXMTJVN~%#nO5%~W?n6E=RXyJ* z3GPL0^=C?gLxkUg@jr->_LcFE=I`dUEU1 zwXLYW@r#%e?z51dApwS=_o91#3^mKidF<|AWo^$34|S&@;J301fV#L$C|= zTMFQ+C$C;JV$);m(m-;ho`W~B3w`rqISK9POn{Ke_ zW}6;&oAh&{P2XbEj7`t8=|Y=++@@=7`e~bf!KPbn`U9K(#HM{VeZi)$+O*8hCuP&~ zY?`)dy-ioz^j4eRX4CC9{f?#EPAi{VZMw;(?Kb_mP3vu%w&{5`t+457Ha*U!zxk@r z=}DX3XVW`vdYer@Ytx%;+HBKCn|{EiXW8^*o4#cEk+W&9O@Cn1tv0>W&R6C0)-MTO ztu}46=?83@vgz?QeSvlx&yzOYZqwUs`YD@UWz)1xD{VT~rY~?Ez|(8fZ`pK%O;_6V z5}Tf7)01sFextO1=?juRYtx5p`emD5XVXPCt+VNQHhr^AkGJW*zmonQu<3Vf`dOQ{ z+VsOVP1`hO)3G+~xA^^=O?z#6r%gX+)9Y;7Xw&I7J=><=v3MC`;h!q`(EeGh=l(O< z+MP1BKQ_J4rf1mn_tu_WqHwm8)i%F5Qht*i&yLo9ip^VRru}N0x7`G%TRU{3O^>tb z;lGw1p10{!Hr;E}T{gYfrrT_Kn@u;`bh_bSts> zSHCQH{obbgZ2EJX_S*CTn{Kn|9X8!;)6dzo)227tbeT;T+O*N8m)Nw<;Rn?7aJUYp))(@NX^eKviY&fC^2pH|rVT{iuWO>eX5r);Y53oYF)vFS9M zR@!uhO%-0#@t2G-{%o~P@3QG3n<|{9OFl5#z-ykV`p)!#-+{la=Zpxpo(Vq=PuYjg z{Xyl@pPuq%2xk9V#*N!|QQi5gE`0oyPktikx%7q`?>_rN=`U^5W}9xcX^%};TqJO1 zHtn}*g-y@1X|+w$OIIvyT^a;)SIt{`?W*hWNuF7&RyQrRMVBvLVI0OZs^;LY0e`QI z56t}fZF<swk%plv1iZ;WVN5Pb1Fxt^6%etOEc9t+y9yno`! zUyJ1bI+FitB)@px$dCM?8to5C`_=p3H|HI{e)NnOIzDo@Xy>;D{EImEf+)ou3I_>(FlQHU0ch=OIt5qvFfVD zD`u@&eDxaENI5DaMknJ{=SmnY=PDAGF7mh4 zaCmU}Jo?m{j}<%xPhzQ=*@`@+gh+$Q4=F^ewiwzho}b7#HG)>D4IB_XS_x`Ww!|x> zL{nx(t7KIrm6euUfkpbm+CoZ+qz?_hqfal|_iHgLYMWTKTJTf6=l>1<72-pmiS$#P zJaHe?{vCaK%`z*{)v#7af{$-|s8P<+QH#XZ6QAMtl~Suhi(0rhBOeR(@#x@FXa(XiI9B5qO0j5F zJQhx(Uq5`DRu#kPSmCqG(;^*T*KS{8kJb2LE6g1sb#EyoS+Vh>2*;j3vK!z|jCwm4 z*wD8f44Y%8KXZ&Vp>HTQioPKIj=?Z1wC0?KK?}P8R_4Pb#<`^<%#Zj>9x`q z;x0aHALR;iwWKOc>Qz8DoJ=VRx;*$wxW9Rar;7UY27}1%Be;1l45#vMifsgpAT%jaF zMh{sv>z(*K+5G3QC>%d5KWZan2R0Z5qxgok{%BCH0hGQLG+za|rJU6n$+`wI#9eqB z<{y3rn;*St%I(#b$J}A2@*I_TB7N|yOu6*tR$cK`uSXBux6wYIU zvwZE^8#mwRiHk%7qOwVEKVEagypBdWRmYsXG=Z1SH{tvxt}F6%?V$U+uss-x-w~EJ zmBFFmt$H#Sax@QrjHzD*DPkm-Poe&V@r#QHha>)BJS1i)7EX4+jB8QGRo|4NBIEyi z;|pa9$M@}J^4!GNlT|x9GqqshnGR(*q+iv zycvxKCgJbc z@Vl5PkYv%@ke*QE54F{I(t3lOizyfySta7 z^im88$Dar8@MZ~b#n3to9Rr@I@{SA7ODpp?gXF$T@_6C%+o;bI9$n6CwJ)ZH_=n|} z7Ut-kVp3X)ohA;B&+C7J=u@jWe#heMweTDvY!i#|PtIGphyLF>O?>_7Rk)hSxrb7% zIK7U(wEOX7;!u2iO85Wn30-mgeES)V6H&MQ*}4@@_Xip&NRFNlMjy4lM;3h@EP8z; zaqHsrdTscI*V>~IEsmqF@6U1nA|4zgE?g720{Rgf-%Dd8N%mF_E{rpG!Lp{x`3>V~ z;ajfsAavKnGZKHl?)K2cLhvfoZ^p^wK8-|c}tA>Qrc`MS(Txsbfy3dbHurRd(6oZ%Uc>}Lw; z7~XH|s#i?D>D|o0NYNXiycr;|V#QlzjQrI5%<45pcZW$c9E$xWK1u#%^e#2``7SQc zJIwXAwcM(6vX_LB^L!aq@O|V$nGl&Oq`B*3sPh}1MWKxAxr>{vNC5qUsJ6a7b5+?I zihc|}-{Q27?obAk=Op`;X`dwcxwk5e>HIDD0mW zD=atZBD<>Sj-#+Yx8D$d_5YO{qr&6j^KsI9bUjP87IEvjPtT(}>fpP#IDC%%oh~_x z6q*$Bqb19;}xzCvUe#QwU~W5^7-m1G;bE_m@2_4aYu8$gWWlDR6aKI z9r_(3he_f5eSK4E4b2aU-VQlh`xD+NnrKOOEb$Gm0!O|-89Kh)A8X9{|8F-`hPR$1 z`6<4i`}*HL@i{q^`H-LgH|~JkJPP$E4qvz9(VdQ14Bg!%`PI7nmA!2kDsETn?pSbT z=iM6a4|z^1_px-pB{x!dhlICPc&a$G_lnfY7qhp%y&H-Y^3KfB*ljr*?68aTH~e@; zn4<2~PWD~G<@opH^xk?Q{|oP5@NAYho2~(!87n70eE#U25q&d}ag}JSiTh!}=S+Wk zG4aCi{FJsL1+RVds00+w-yh$fC1)*f2+2)EIk#rKh+4qfWuOXg1NzkG`>T9!t?+DK zBTyPOjE+TJ@NZw;fINF4CwST?v8iO7D3@Gu_1=JD+8VmiQaJzN%75WLo9iYcG0D;? zvOqy7KK}6hjp%wnin^2Aqj`_1nEllC+l`!jW?V=+7ikPrFYX?bU=fz+LV70SlYC}; z^zbUg$Ct0+@wd>@>Ut38S<2ePyF7)~sBkCZ>#R@F;`k5u^m{OQAMWY*VEqkF-*DWg zkndc;TQAq#!ur6WGJY6I{Gu(JnVed21JMH>vgH$0tSHQ~fyDS*_ zU4c*Gn4}+%=3OXa&RgqotFqcn-?|q{Dpyzctpj3P;@2h0aUs6Z_*vnMi_vqic-qCF z0q+y?d_v#sSb+Bz>Jfpy6yKmR51!f_O0=Yz7-abA%IJ!awG_;zX3twkr44Za(qPc6n=hRi~9pM#&|xe`5* z=2xP8uEC=Q^shsHzRA~u(sMCl8YLXF7TD6l>vJsVStzlA*=2>T0_m&wdZ-7~6#aGs zeak8c&c;0yKH>UW@I$x|E)T!C#CG-2X8OnMT|6?F|24S=udmwj5p5YVP3u;g|$4r z)kxo5$Ot9Z$vj&O9slTfg}Af7Sr|Y14Hy~+lkfKlk54X(XDWLLpPziEOKpTi-1O{D zPZz^|ar~L+kFwi_ROYWcC+<^ZZzDb?>87-y<~Yw&p?H&tJ~ZD{przuw9=ey&T}w+u z{&inTT=rIDHrXZd7)lZB4-#G41bf7(*uVW`N?tJ%^G@8lo0XX9j+ql zHJBf7ny$fr++h-X-XmBNoQXW6K-VJAGV+L&6kfAewp7iK2*zJRdPT-nZs(c4oZPc7 z?q!{X^4rx!lLbTeUu>@{QX|@g$4!X_TLeaa2C|uI$yI5$P;YS|iqqmY4999A{I* znxnG~AhAbFo@FOM+zX|eawd{b%zTQ5t)Y_u#c(d#4XuT<)s%9d7TOo--)OufS&8Vs zi#JJ+Q7rtWXepX2Z|dv4D$vBw29Z{NeUm zgpI>Z$I>xWy5wz8c`I1Hl^P0D%D+|wZPrs=l8|6Ovj?9N6mJ(X;@3U?{29Ij&by(&Cs(Jf2J;;U1$;I z-F0H7G7{z-Yh-sD@43e&rEz`8NX9v4pu`(3#b|Te!jjZ7WMNB zwVizD3RjP|d>fh`maKd%k?#-;&qd%bhn*73&(&Q0K0kscYpM7ZB17t(QU5uL*h^Xw zd57C+h{Hm(pBPfBeTXntVcU1)mQ^?$*4Lrflgc6#e5Yqwr2k}n@x8pEuJTT+RF2~0 z)9+c&`Xu5`%O*aPdZc064rT>(RMn1R_Q1!2^9!#bM+*=7pJ924v()KfSp|QVarD*o zQP*#3Z6n@-i_Vc&F`mw087}0iqi?bC-TD)z?Q0n~ZoKe%qpNh>8Y63MSf=9EfiQ%V zy1;xBk;LWIZ=ru4<}mjn;j>mh0x#cSTX^P6dDO^&+Ct7nyrd{c=s{5q3gt^}M0gJI z?frM9ErY(`xc{gNb?-0Jd2(SZD~9{)C1ZN`uMI5 zC0tJyeTyS|3$;7(SW|k%Un*w%Xn%NDVJ$`t_Y<{2h16jDf*zLJ*StPfD7tTp(_P_N zp*)h#Vf#<*pfBp%7PU%@_{!T(qC;%yOOD1WmBL&}+&3HvKiR_BW%ek1$@j|X`q&O*i1w5t8u(LS_kg{hGPKBjc`>RJAz6n)}l)5GRe&XfM zZ3tUqxhUU*M6Pp(BP$baMfg2Fw?54)s3T>=`*ferVcx~}Pk4Re><^<9vh#9LYKeHb zc%GwtF&*c5Safbt$|xq1`Z^=$Hvaj8`<@Z8Zj2?WOvFd2+zcen?kuzViOKCnCa7Js zyYekgA`3!SwZDUXUs=3YArcg}r@H1Bqp9emt}jEGg~X=aX^BYsIR$4BVF?#YQV0I6 z!tG0ySlutUNS4I%wA}5gBu1r@JPSQ&JX~5hNU@i~e}&T%5#mY?=xxPtD|ddl1{RS~ zOWq9PIMit2lI;GY?L^lZuU%{UCx`Who$59*isIw$9f zl0H%Rq<2IJ%O?t74@$@{n(!ot=gk_?6c3!%jvkzU_FU}FJ}KwyuvmJQiG0ecrO{I- zvwlp@X)Ey^EOu1Rufg!H&j{ zRlOCzob~;&K`;`(U3>0nL2$#HFjflnIEsGkJwY&`ItcEr4}!1b3sXn7W2~>EpFQXw z|7E9-2o`^N1aLYoc<1`#f*og%#BU&v3eG)obnwLw9UqkA2eBGXJ27}W1{i}M$Nhfg zX~A2Uy$N$k1(#h`84T=sPf!|E2i@PO4@PWW8k`Wc2WQUwdhmyH_uw~_`76r2CnHfp z`io0UjuAroJM@>Xht#Zw95YXyTZ2{NTEr(w_2t+Z$}W@r%r?46JFo)uqP*z$RkAi* zKgUWc?TbEYANakp0@v>_L0U2ieX$kes8OsY=vuGIamBb=~Mio zHJ$ko@<@m$}Gz z0!hlzUd!D}*7)#Ye8ZM6YWEyHrGJ;N4Ot-m1{EKc3Wqr>T7q~u{%3OoKlqxzJ zZB87VKe}|daOH9BFhRkT$0R*$)4r!A-wK?`SAD|kgpSMK8RVLl{JrPeK3?jl8%^Mz zi?YLqa;H%^S)mKLK)4LX^}pv-><~wxZ!YI*@*RY-n_(M1PEIZc)|5t}oiB$CkQ7>| zsEm-W`h?ffWLXWvg{jEC!u3hi)KP`M$Ljmqi`{2c4Cp&Dg5F?!QhulWa`2yfDY;il zKPh^Hgl~0Gd+2-dyNLZ$RXp3_RuD_IF%s+Y!dRrcWSp6SUJ<&WN#A79kl8axe~ z4jNyKdPbONdwlPWYqreC=YQe8hn|7HeWf?A=%b}fJVth%ywjt4=0`8%#}jXv)>-Kn zM>qfcmsE3ihn%mX9=>o$chAbN8c4b9QE2~2eW8NZ4?b`I?P}RMD5lhh@a)3&Jf4nz zfAlPi^+tWAa{#}j6E8saFX`oxqgzE9WTNlj(`j)FV44eLwTWASNPxbxut zb12-POi|YdmmSh@7GOn6-Hw|w7yU&;`o>~YX{%QPf-)Y}-q+e6qf#0fQ42*GpJDWd z){d5$@pR(o+cVjp`?qJ*t_!@ATY)5ZB_2v^u*S|ucKD>df5$oe&0rF5(wP@x7Ur*%&-xwt5)X1*(4IxYXBeBqxf0Kz_3cY}xHrc0+*t`ZzQkA!Szin7t>XsyFFuX* zc%@Z9@lW-nPI;!Wn{e-bA6#|##LJ)fyuLojj#}+ya=#X>d=l3`??Wy%fBpz=t}+Yx zT^0Ra3GobhmzZmbcr30Tw}xJp@7r%7Z%M`Rg&G}>9aH+`?ksn;F8Uvh#s8d^*O-@yu9m^eQ_@> zH-Cj@#e1qm)ZXvwop>LIy6(?Isjs*=OlT=;OcYR7d>N7Olsutx;n}`e0zz>8q~6Pj z@|&{i_3;ir*E!xDC7t=5cTL!JIKNPA{Odd4!Sts%wZpU?9;M^uM0s-L@)6%dpJz?C6Z{ntH%qZ+>D#qeJh&82+4eal~*REXCx_HHk8H@4nDu%4l^A$$w zgi6eFgtd4t^?jyD^0gRKVpNj%F_4z#XXodyTrLA#I&)6#%4K}FZ!%)WJQ37KcJutL zE8eD9j{5NLi|fzVqj`EYe%XF?L+h&5OY2rOEpA=DYULGyS2%0=$|aJmU)*%f;;WZ( zJg>fHNny2LpI*9RY3tHR4`Ulfnt0jv)si-^k+jjK8xqpZwtVLXfnR7-o%dYW3a&x) z5V?n;EYL$|q(bA&;$g};jI#!MZu&MGn|K>qaeZ@MF{4S^r~3NQxEXy$`X*Q9M~?Gy z7{{LpiC{eCa_}Z?-n`@-tmHI+W=*Y2En#(XNcDWaxb1Sf9*(ZK)8nKY|Hbc1>8&DC zO~(-bhW=6Udq`pU^m04X^wR5=H!X#3Cf##qOoLo>K8t91xWBmZ3tL997JI%7RHeM| z_v!1+ZjoLhqZVPg@!uct-1Vf6mM%Ou^%mpS!MOSO zc(Cn}v^(;7DYi~P)1ICkdB1W)Axs%ku5i2~o3HCRo?mX9;mf7`euK{!wKu$_!}ZJc zPCGz*6$edjQ_oaZWaTTA0l&AQ+6U=tIJO~~4wPZvE=Xiov5M16zXd76NU*}sZ&|Wf z7mHb|R@bj+ySirOlKK^kZxBPVMqgyNB3B!-4CHH^wRdq}o?fH^-^TOCl(s8e0~D|D zIJ6e(SLoYqYho;zws!iF+z-!niJSUz?zVE_9!>ZC(OY8SRUy23`7%a}MXA(&T)c<7 zY8g*&>4oQTbn&MI`ln8Um)_|J&raTY;_A8-xXU?47&lUx`ouk{#_iqtiCEsKm(Sk9 z@7>ZO3tfZ~+|%k?xbz5=K8(0YxyF>qIgTyg8>>5I!7-U`@&18I482CVpD%VmR+r@% z$E}Bj@)4E;;kC*YW9G_R_coBILt=3UtT&{5`tGww`HqI8t8 z@b@{W-l;!Eeo7RV@+A_^TOC{hSVx;CeTA)MkoUrTpO^aKzmYF}4;^23vo1`7=yw)| zEs9{KbkH=89{N5{lnT@lc@I^zY$*LVnn-x^Y~A`9?oFvtNH@hQJa=l1a)SI(If;5D zicivLVO?AdKDC5APVR>@=wJPkcx)(*Vin{BjF>rlAeJuK`ukRMX!sW5=`2SS7w)~B zrz>X#jNB3{pMqhW6{k3P@#*c>tT2CMwqdHrN#s0_ca#nPoPl?x>APQ#e>tYS6BMV- zVcd)3MEl6Mf%!XH7ppEu)ir zB0oC%U^`~ThxbDK2t509>oolr{}hp0!dpJd_m3F=_oIN~n!?z!-l|o5k#s+I4#pvO z`3-Unp|+_&do5f|;`c-0-*Z(PT#K2B^^ubUJ=3FVsoj}{@SPdtt)JFM4`3Xitt$exA2G*M56=o z?ex78dXaADC=qGd@i@CfZPzzMoczv&9LU*vy!YeddGxg>{C)y0Pt^MwjxL39JrZqt zE%?OiRv4$SOblPUBz`S6gZ`ZQS>Y4;u%}GVK`bb_9v7ce*@~{%#Mb$2?$(o&Dee$g zgKOfaMQ2A1a-)lf>b{GMv!@REa;dAAFQ4;pGlSo1OJB+D#C1(r0xg&QZ=rAO{PZTX z+HoYg-%xy}XS(5WUgPv*@NbXy?Ll}9<&;_n=IMPp`cQ`pcQF3=vP+b6ELtJXC+dN} z)=_JLSD}3A`6qpG_nt`fK9-w{BjC}Mw`Guc$~xa|b$Fa(DB-`~=xczBH4`iU+t!CG zPs+O^k*0XMhV@4xi1PlQFBy)S$5wy+@s(dMJdk3_#d?wvW_>k)V0;xCI$p%*1P8t%cv^U#?~ zIv4Gt5VU;s7P#I~f5kJ9$j)n_z?m2_j^5l$a-1+t#6zMD5gQzR&rh&YnGes=*=gTC z4bML6%1%m4yi>llj~K=O))V#4-RIMG!!f>YiK@6+i>Ht@XIdoxTr^3R;_VApWwB)9zeN3l22X3q zGp-jm*!@*wUTTwYbJjW>84Gh&_hf9O2C_LNCj#Q$i z>RXcL;c>;vyMJpjilaJVY1`D(Q2!--A}u?7eZQ1mp!)_*(ucT&sT0P*w>179o3p9` zwUgF3S$|}Ga^4hg|1#=G%*C_zS*Oek-IUEL*ILN^h99qA|YKtL>oN@Y`2~BT;J{ zjdO&taHm5$s`xdWBdruykR@gvlT!l0m#{oZR}7+ZuoSw?8DERp(-v}eFbNT!9u*FJ5#qdvVU5|D5YfPL&d=N#snL#ozX|7 zm{Lny&hG`$@sq!I%$Kvcv$m_ibAGFgoV?MRNGyXg&3T@KKlz>%i8qK9E1a2PLJEuT z=F^yO5s36qBWsP6`Iw1jG5SI+;?9X)0Z)yDlH`J0>nNwP{>AZ^wv(1FnI_Vw#)?EH zcwqd`VU6CH2{@OG@J~-$dr)yinzl^C%=DOlwJ7 zMF~+W9>$H*;=b|1_fk~fj2o&cXXtz4hhA*=uK6;_M1F$B!B)mqbRRxVY2Z zF!xp06cb4q|L00d%JCC*IJ$mE=T6^=H1@wWHB4vc!8jRkdON(8g&OC)UglO9YQ)Qs zv%;K>QYcIbn{YDgHZa^hWr7-!otruf%8mG8xNw z%TCJNZ@qfT!@5KFfMB8F?sFM!F2!yk|1x@d;ZFsyUT(W9XC6`N1# zXRKK05{>HU?Bn;d)DdaN)t2jP)E^b!rTEzhTXOFb_Wx>asoU|>J|&-FsD?HHMs5lY z?*xNbIBqaUI&p@|ui})7|DGaQla(^`e$?9!-`5qo4Ng7LFr}EIjc z79USnu0nr-BQlb}z9~UU2l8GEU)W{|AHzBjM<4fFnUu@IUZo$2^N@>vk8%B}|ERXd z$C3P2-%(CG87*>pl#_3q8ZLga59cazE_%{+FFZQOaz4Gz zAdKx$^~L8WDL&Nkhcap$KPdm<`{dEvoc=rpIp}`yH{OLJj(Q zGtCMm`%GG0Vx@dmU*6{}HEb^6#RgKrqrZqp)|;PxTZS#o%lQ+jUSXG@_<$sr{l=VP7Z- zXJ<22qTEa+_A3-tOW;#lI5`7aB_7ud(4{s+J<>(}HL<2aet)g@)QuM>bHlZ!es4*0 z7HX>;Ch423H}Y1mMpfKeqdP8*H*oL9NFe)`-TSdvi%7#beAQkLKKpnp=(mg7z!`b| zIvEqKQjd>wb}}vd^I}pHchVB(bJV{2_{DRT^D116)eF`hEC2okv%9-q#%3QMhyde16vIv1xG;W-WkJ72@d zqd56KI+jk>rQzE-O9-1ZT7S@AHz<4IxS9Gk$!Bk2ZVcysiAu5{G!*_gNfrJu#u$DJ zQ|%dLDEj@Mj6A2!s-pVjR!NZ?&DT;A~?YTp06YJVgGukE9$nVph~T zx9d>(B;Uka7rdps!O%e?p{!}N66@pa;*mlTCyR=g#BC@QVc(dmOcQ9yZ)g>{VWd%h zr&;eh)WCb77wFcRm1ZvPMAhLEudhzNl#=o;LgBZHixnD<#KrN~jYnE@??dVmYw9UK zISL&;Op@iz;Y0h&b!P=Ii0W1$7nOUiW-$6D&$rmfLXo)9;>T0{@mEms!f1hYXBppL zlKpZ!G{)+wE53Y**C#s_*}?iW5z5QI9M$#39PNIz$M983Z%B&9 zov(&RaJp2S%1R^YovW|!JCUZ8C+9^8KhtK_RX)=5kXyyh{yT2V-PAaLjFy!nu)VCQ zh3E81_y3Y+>(k8fXt?-FBu#J&|7xOYnaYs97cRUMACGl|QLRm(l)x zDG*-pU)PU*D~|e3az8-sakbbOIzXNCMR3+b)%QMvGYzZw!Q-`b>_ z9qqNSKesw1Qz(93(Z0jbcV);dgjVW7+HLITgo0Oc{qecii$OC-*~QC%9Uk z6Ir>OY=*so!F`*B!Mm_>zf0L_aw6YS#Ba~7#~m#0ggJgKbbVdPIi6+g5x19yI6^P%u z6HwY$`R0ClcKSrejn1X8-u1{nqV<=8maTTDK%bJdzZww}xv^ge&wJ_Od-Bch!hLzP z|1iAlq2utV$86pBGe8r$>6|q0Fh9d{jO$+qldZNKq;7jcsF z#-vv0ul3TFr7P3RSL17fSFOI`(yKm>4?t*M>x$Zy%Ukgc(M_wCENy6Ay?mwl{%MrY zSaog7;?+yTRdZV}Yg_8IxA}sO=eEvRv1-lISU*wiubj9wL4%1sHB@e)YxGF=lgu%C z>tdtJARF8-==+geYu&y!nFgf4FUh`l${q@B3MHHtk-uI*k1-la=C4i4GyHyehSD0G zY1@Z?`-^xwTM))G>LZXADgka?P`ny#JgULY#Qk2Fc(wFOG=3ExNAImO=13~Yj!a@t z&g&v&6oS@PezlIP{u1+BoX`BnDD%DDo%9Yw_t~ldr<3hTubJ zm0Uj^kj3g5Q;n;ihcOnQfBsjG80}y%{LM1qE#vFQ=J(zf7#2}(=m%bn|0rQxm)G?>cq`_QpvJolYl;Q0?_d9K}+D9=`$!F9~PQ!%iJFZ=7sMhA`QG_Zx^5aa8B4|TN|9OaGQsLJ(>X9^*B zTyL1ewSNIT~aL+Fuldoj{jw0}* zQNOp|!QwNTZM9le)~ov;7q0Q&C{#6~5DhXaAduz!TrS5%|6$@T5mD&*8)V zQ^==S9(jllegZhic<{u3Z4r3k^WhK5cT>HpTo%GrZ$Un#1zsA(e;eS4e-3F<|Kw-I<>CGtkxzO3>PN*VDxd9xz?WU&`saMc zBcIei^*t&NQ;NW|zdIuR-#G~UP7j{+>>UI?YEKRi0{`TK@O+;^K54#&{~kQ~G4?~r z@T{*#y*~WZj{FoY@X|cLJb2QpuSox_f5n3*exp8|j1T!W1@-z6zPboJ>(_elY`GEn zY1)C8syt8oNVxw1`IHBzACurSgTSwg^uM79d>IDY<-wnhd}iSod_zLvLwu-zV?XNf zXZ~#DQ-$Eh{*b?mJb2pAjYZ&DKlWp?K0XgP+UxU>PttetYZL1AA;0fHKBWa-O8nXX zE)SmkJ5&Vz1k|Ulbo~>bX5>>yqYwLMeUArkS}sb4C%zff>%)9~0etlbp%ov1<*!ya zrpk}CUVF}Gb3uD)MR?Yy;7@Rz=K(hk=``evtp|5S{EwZ;r_e6?uz%BU1pZ(Vc%wg8 zx%nIUKt2=g9C`Lnen08Kv;FhPC+QpUX>4-+6MiA`DWuUy`|pgvZyE%CR|LMV2z)sQ zUE=T|{kI~YVtM3IdOmrLgE#BR(qw($e53HyMc_{b{1VjbGZr5XBcIX&FC{*NZ&?I7;$Me+()vgKZ}8yR{`MmMlRmp5@VO%J#J|jw zH}*ds`4rOVLwXY51s*(S(vEx*{_NkUC-Hj*@WtpEg&)77ID8}O^`Sg1ECNq@_IU8j z?;Qj_eXZ-C^KV4H8fo+)eb}GB9uxj{z$ej%_4^|Im#j>-Z*lN-Mc||KCw`rPA1eI` z-&+Kp^>wQpeVDI6KFL1E!7m&p{FWl{M*cl~n9m`fLK=P4o}AI*@F)C*$fu&f$P=FS za-9cH`}Pd-N$VH;YxzspKl!&2`4rOVqxkIg;7b5>2>B#_vH#5KaR1H7r=p!Bul;ZJ z;7>&PF65K?r#+am#`Vv92Kf}y=)?X=k9H59^y)``Q4|z|)CBcDou=lD4f zp7adblKUro8uj`Rej)PJTHvL`=VavX^58k2itCE=H{B8LzX$M1^dvvWUhm*(uj-JO zh$AxILwpE-dj$R&svf{w%m+-l6@fk4|?#V|H2!S?dN#Hqh6mkVAF4XJ8 z`83J6NXW!)DnO}JG7<_w7;X`=h(K1m)}-x-0w1NoE==%q@ZJ`bMs$`$E< z1nPZ%kNA~AKT}Af5Bn!RzWy@51n^1tQ{J|C`aS{qMV-m|Nc&p9-qDBj+=6^H(&$5c zDDR^_?ckYThkQ#E7KCtWupCI0fy?vjF*Kq|t}-oruD_Jb2=L@NbIid-|*4{#PKMr0M-{{}KV{<+>CMt&pG=tF$S|JH{cypa#&w?%=GCp`O0?{e_;-|j%ZF9DwVTe;i8^HVeO zsRZ~pp}fa~KMVO=f0B$3>DRl*_0RlapPH7vJZsZ_%jD@{1fDpJmcW`DUCeaMIX|K@_xGq&-`KJtE0fk6Q1k&l7Dsmlb#2WPofX?z4uuM zPkO$B{9dHdhy8PXZ+Xtav;VSvu(uS9$U}I_+w-W`hxniUtK{{I_V#wv>qC0ohkUaZ zcq#j*{51cY_$Sp!Isbm7TRb@ZNOwcfS-=us-_X}tISF*gZ=S`^BhwE7{@+mFw zQsr;`VFyq8?nQoq2d5tiPx;^Y-wvMs$u{Iu3go3q&zuKO`fq+I8J_*MzwG*_er-m+ z((6}0vVYS184sTFRM(Gt1qu32`_PMeeK_A0e}McXz>`1c{n5dbo_8VNtQ~l%(zE)1 z!tg!Fw|H>+QR$O@#lh3RJ&b&h0(mLn3Ay!E2Va7G|DTfWC;3(9!85-C`4rOVlhpq{ zz$e+~+32KmK=frH(hbNzGomEuAtNIX`@a}vTaGU=`?a-5KZkr@NlCDXh(#X4lO9{f zS$L!qk-zoilAu0;U$h_3my#;-P#(@J1H2Y^Df>?$zYX>J&_CREN=c$TP~Lh^b?~&e z7rvn+kv=5D^QhN{`B#unX@Qp#AL{#sr#X0j>O_942d5tiABRs4@JamoD>U9x?)v`% z@|ABc30mm5M;`WX{O7kgcg}$7>hqn*_aluy#E0wAiV6qM{nugSli=xZbiTvEQ-1D3ehSj)!~O|bah8LpeOQ8g z68+i#^Bz3;ecHt0@U5uVhxpuqd=ftN2UC>}{+-B|y)&6#m8frjmxG^-e9xqkpfZ79 z#J~O=2T%Llj(i4b^dWt?-`VBCGhaEmByoR7`MMMJ`jEe8p9_1U1zyVjDPIRsuMh3T z&M75{>(@He?|rv}zXADe?=4B(e{sGW&v)>gZx8Yrq|t}?j7MSF1rDD6$zJ65MS+ng zd?nKRsvP`T$iH%7Nl=oYkHn|$0}h_}tV2G7H2ScAV;?+t(*ME_CexEE%YCTVhvOYa ze!CWUDf_29W~v=L<$nwETRb@ZNO;B{rqnq2k0YO(0ehGrZ)c!>!Nm^#Y~-h9N)p#! z(&MgL2T%N-L4EhG4NyH-@RplU7q z$#jo<@lyyfWJmuN$w2-1Oh?c7Ojo)hmFcdlNaaQW_l-4GzboyW4DdNs|6bbp4t%K1 z_U873pLGCQTi2bgXvuV!XAZtPkbNZg?`Mw+vWG7EEqX6qe>?uouB%u(@NgIY&14r= zq-wh7jF>dLKRe^_q=!%1b<-)?U&v7JhP@Ghsz0q;SoMj+w_MTni9?yDhk^0gGi0Rf z4ve$!fEni|GtShWOvmnlO!j}4{r3(HVeG?Fv>rtpGu;ij zj$H$XO7EXuHn6Lv>cLx1$Yf8cg4rA13WcpVV{HnCug|m%xflcFfGF zJvCK*>n2n!IDE_LT?-CnvZa{(s1I?7DHtMkENo4(%Wms$v`T~GF`0|bRv0IP6-7vN3I- z!has>xVUV@fr~QPAbUkg&2}zg17(?PF0;O;?fBd;U>$n17njs^Upzk3J!gE^%o5}V zdNNIWGb10b%l;(y&eKK(Lf#o5@A{rw#%8i7WwK8QfivARA*aV57@N*c$3!2^U1ey% ziDp++Ov`{<+183`nYGL{(^Xed0&-5HVx){>WKYR-{C2!!B1UmMMB8b~4K%CF3OFPd5a3;GKwFBj!L6s>SYYKM_l;4DsOt#+?zKmXL zvrihxYf+xg_SKDiuH)CG*PUJqCU*P+^&L9~O79+%>0Wp7ac#dfrT3$BS^E5QOFQqz zr%d+v(!1YUlYMkjhQc;!2Nd;0lK#=$XJMU6?=A)3j_dftKwCN0Z)#6%wqF#mcG9CY zBOk46+MUUsoaw%BLMHo*IU{%H7M?mPfQGcbx1)b->pMF7Pj4;n=zm*lSx0|;>zVhA zt`6FBpG3!2HLo)tPo~0N!;dvp|GI8GI;{H8;akeOJ_LTBT$6o>id}kOoQU)c!oe6o z)T=208M41V1KYEJGEnm|s@D+tQWq)Bz*ffVu}|HQ8RvwqKQAcPbdPrnlpM$Fdh#axXZz?B%}9gr_ra ze+~$>y%iWY!ir~qmiw3ELGF<+WU`0Qb?N#!SOliNlv)20hVD6V@=OS4_UE;*)${*^ z)nOnb@g z(J5Hf{l0=_$7HgPLV>9A@i-t^9y>w9jl zz!)|67&}>CMmae?_s?KluPn(UImkzLu*}b_P zux|(6o}G8NYVS>F)NBu6ZfmOc-aNWy``(}=DW*4IeYHub?+!Kz_hg0{B3CHIpU(V`-9mD^EU^|LlBE1xw} z%#MJ6au38Npv7r9R5xiK>`v`ZUvZ}Av0N$9&6d_x{U+0W-h{gBqmbh3Pnz33YH{xN zlSc&yO6sx?=6*kpmd4nNF*PsUx(Km2ddCa=NRnK@#vM^xj&2Tk@ z1$oM>g5!R2gK?8~AjwPY@ldi6UP!UE?mob+L{=j%Yi6p!~*PzB(X2fX}eH>@&4p4P|q> zW{jWHH9OUC`4yQ@9^@X(Ie*#FA0+Biu^@F;U^^US|1kBXsz+N_&gq^#zApQ~4+mg6 zi4=J~Q2rh)8C4IhtIurCRPDIF7XP%BEbF?ff*bLvyK`@VEM)uWAXYupI*G2|l&Ozr zcbW34huX^0*&X+Si=(oS<;DVZV|GvO;M>3(jIhCso|)R4n|tD@AoIzc#PiCJeMGHt zm=Af+HA5x;Wyg|=6us3MYYiJNM3QI2NO6wR#A^LOY3F(%P&28&^~3z<+?uNX()C|P zk>yBt`NUt-HvdrN|kS zz}19Rp$*A%zqhxV@>owMW{jgk51#VaT$}wv_NnZPwQvQ%uT<`XKpLLtxJlO=x>O*^ z(*^E76$CaNRz@2{1~h)UKcLqk zxU+}~+6)%etAfIGcxz(!xHZ25QOY0r8D++-`X2*zZbqS5=l_Z2p!mtg#0~5-XVE7a|7kqYi|RsTn}1L8u&%Wu2JwCo;dI$h?ZH4I_T9~I~M12 z(yY~V1aMA{tI5JG-v878%$r#l*zBQ655vS6_wE-Nh{m`7K#_dI%&E`URJ~HV;aTWS z)s2TsKmRj)=(_O`R&rdGe9NS+OH9X2yV*lVrdD0(#Z7?+C)RsDuDpW za`xTyQ*0gB_hmx(uSqYZ>_t9~;z#=!pCe;-Ue(mVX`+D(j3*C@S%b7F7l5dlYz8}; z-L2S}&;hB-_8k~GbL!J`;E$aKwcNDEsAV@2shzqTRi$6LfBkMOfX46b>gQatBWtsJ z@|rsm!%pF9SVvE{21CA)#!dD*dvdR$#@dYqluYg)t5pnS?-7rGGj<{^*yX~V`8~b3 zfv&Z=+AR9QB&r?@O`=1sBzC@BbP{vmC|`Cc zQ}uG|sn#ZDUlsG)eZv4nDV>EF{+t5%w$R*GIMs6#r0&JZy6&&Qin^vH6^m-_B?;4$ z>bZx3hcdnUytmKE?yt-KeiC+v`_m`w#qRm%x$Q4e#NGRqzt$WFMrL_(c?gzcp3=weJ0y?98C5q^bddu#@+lNyX-!r5}^Q3$9)g#5!m4FStI6TADIIJHthvurh9C2?m^6I>f=>U zt$Q0v=rz4ryrxXko@HI95&23Rp7@B>z$eg?>I;3)6QBd5b0a2TVF$1->9CR5bJOqj zd@H!V-QzydVq~fniIaNDG?u}Nn~dn>bkfD|C-=KUH8~i8U4Ywp!?GCxjRN; zLJU!K9iQl{86Rx6ndKrcw7@-5*GZYK*@yznhV7V*PG+aNYfkK%QCZtHy9a-}@V6I# zefZl41+TB|p52qnEiua`NwG*tL3>-4r=$2r*{8%Q%EG$s$vw_R8D_&o&kG0%eNmD6 zF4&Ity}KaG`@GhfD;AMIIJU;=qBZ2#%Zb(f!Q=a9+$ z{P%VaSoRyaV|gU^54YMGz(BwqOPB$m7iHjRrUuGC*Gtc!FN2N3HFVL8Cm3pX6u7q# z^5y0+7rB?x6^qJB*MFZYOZT|Nee~4c090TGx;Ip8K=DBNNaU*?F8$o+1n5Eo^unGn z(6h+HU)qdjX*L6a-e3TK_fug^L#BI^=};WyZ@lQ!teP}i^BGIC>S8nlZLmuB=DxCs zgBSur@Sg*YV1McQNoFIAlJ^3kjmL2HylgCVRTVe;HZee>y`ih};>gQ8RL9bpJ6QYZw7~ z0dPrK&B)&MyFHbZO}K0dR+voz{L(8wmS6Jdn^;?0b9oK-;{he|;m(Rah>SJ42vz(( zZ4B({+p|9VH_O& zZ~-t!KhtvW`yKg;$(?_5egRmGvfi$nu>cIff%*{-!PD7Uhm4mv?j5bby!_l<)Q5*l zJICUxfD;~dEzK6=F_>sv^r)Ik6O9jDbM2YXg|l+s?j4Cx5!$x{ql*~#F70e15xUDS z#MY|@>U#SNl=$xXIZs^BB)ZBNWiAdAf=G37kWIp)L7-?Z1_9Y5vM~shHPFS8 zHe2=LAZB@pfVlnj)Smr4V2n8p!GVKu5`Ju)1W!gXxl<2_laM+86L}e#i?UuE5<){za><8xyqFZ-;@r1@2&7_vlk0Du|ZgY~zB~6F`^aGLs%{d$AU~o%d!Y-Jcox zPzGVKL*V_rl*>%j1J|EMQ}YjqVu8`?%Jx&=vv4gSC;ueE@p&%85RO|8BCKxAPu?rQ z=|>er?gjuFub>4V@?OD(GyW_|YI9?h=x9jNb+~jQ`>Xfthit@i=V9F3Fx>eOK7_ba zem2}_uH7xU-=IBwHpH>)`8J&%WT)ls_-i8?)uo%TXKlpMccB_N>8`l|0m&OhZeFIB z0J*vNw`Lh_!pWUhgRbIVBfSWw-%uapRv`C31fSH^Jm7sPK@PSI6Q_} zV6GM+U`(4@&&?8@&f4tBxex9LYu`!S2+e#1-KP-@0vG~Q#|GQ<+B3= z_qN(>bM7a|a=EKcpMT?_($2r5Hsb8NIeq>u$bJP`^0b*6T1^e@p*sFEZ70=H_7;0t z(aws^VpL55>vGpWZTP&&R1dc1Z8E*bK$YdUtOmCOxJ?5TX+^eTRC;=1MLH{XnLHK* zR&KVH`(BaE`17+U(X*dv;?^Vn>?7zV5c zM-T>NysPF)xpL>-Xf;Pcay{7w#(HooiGi{9krEiI>%OSza&Ffdv-%J|<|V%>@Hbay2ssy>+S>P3-4ptu%DKGkx|3Z-{ZQ~HM(lq7@XVvuCD8x^YMvBKERCz zRJ_Mz$8|jP>Ok(}KVm@W!PXI!ps%1LyTO3vzVyt%KyG0tc8i_n-gHO*$kx+-2<(HZ z9lXRix^(>=$Q&4L%5tZ-)BYk*`*{?itH1TSx&&QqM38KteA^EhyzO`>$653P+ghA4 z;9es%XBPNmPBU-|cay2hFKlRQ7pRUNwCt>?L`&S%M5_#1A^z~lEx2B`$&}|?ZO3GT z{eL;0&K8OLN}~`L?Wd3lCXU!y!39qMo^}A$9>Bglz`YKjAMDe6;|rwu?XGsSSBvcz zN59$CX1va)KyC!!qYhwezPSWY1>iylP~!EF%J(qA0c`hrD9Z!I1f?NOJ@`zR@nE}*c9I({mq!PY;5rONC`8Jh{2gN- z<@dmHs@%WnPa^}KOWND~rFew}l12EMs-Km1o`C$!?q$c-jC`_7ipBq!{!{84L=#x& z2Qc@A7J8lEhrN9^iFtGojQ$P)Por`#5a4dY7t_>A@zvjT14DH}J zE`N)w*VaJ(OE)Y;Gu-|t{d@yHm>VGGHGt`)Nr{>52Ahsvi6QA;m5?gNds;NpoD#s7 z+F%qS_w-()vS?x`cR$o_L&Y?sc2w3HRaT>REYGW5CVQ9Z0)cCg<9Rm0@m-2%uY5ZS z)c!AA)KqGp+lLuHS!RwKyDwT!#Ik#q{ntOVj-Jp{GvOihz*m1rF4Myd`0ME5GLL4z z`vrRV0(v0TIZ>S8c4LG(T(7_!$LHs`F74*H518a$e$39%z;wtQGYNBKxi`lR73>1n zRDdC09*xfNgC2&niQyr{dk4z5{@~Stj{f7?-j(~_Q{16j!q{ou<~2H|y)GkaFG1`F%D;2hs{@dgc1TSG z&$XPl(ZZ){9G-mu%*|Ik4UEMzM|zkgGmIz8LwK?a!LyxBphM#Z%Fhx!dJ6HlHIK)< zJRXb+@9nk3G5{8dLkUQ*JdZ?VqMP#ryjblf%Jn6;LdP&Lc8pX4Ls*_P#@758-QE~n z0&^ughJmqT1PNoXJU<5A4|XB)NKYK{7&1uJo=IEy1eiVoZ<^Mj8NCY_tRAoaLe#Tr zpH#iq6Xi2a6=O!-PrOamU4E-q`6Mbi4#faf zzw@f@F;(&k+fvU_`?_sHo}kH7Ue%{j_432}aLCm9cD3a)X8K`=&>}$XA8i8A<#(c- z>&YS#Ka1tjL`CSXWV&tWz*IHjJq37p0+_LU*`6R@EYI_$4t_y3{o1|67whUYmP`S9 zm2VA>gExRMf!@@-%iI#;QR>6@qmTB1@;kl-jkIeqE-}K0%7WbL&1WOf-v8bciSj1n z=;*rjnTH3oaq0Tg3;@h0(8xUqoy~wLbc@p2iw~ut^&1V=IQg|OBd`?R%XcC3B@^%y z7(DAG^e&P}V)mxTCuUHVa7E8XZMw_<%0uyYSgDB}eIj#3wdNj9zGiy~3*fr24@?>Y zjY$t|%}=^?{a6!wE?HB}YSZU0D!cjA zY<&r5upoC9tdGEO|Hjq`)3rc8Fisyj;W(pfvkxAah`V>DlP%FsT5`YI!%omH18qmc zMW!D)>Jj6#&7k~3pU2gp;1Ih1D-T zT+(`C$4|;^o?Vn#hgH%}L$JE+9X52{n`{3n#7=a#w6h%8UNjQ_v{6*Q>51x3!Lj`> zVc?5SIxg7Pb`z?v^JL|FsK)5Wm9BprFtqF3>@Gm6BF)cXkv<*5k+n8U3de^6{&vW#=C~lGky*u zwHvJ*Qj>tx{&r9>4UHiMp(b)0rF7=~pqklAZ6&hkjOoUKgPL9@MJz4nHXEW0}g-O=Z;-Tlbx?gDoA9F-dZ6!ue# z*Qe}GXBsG;-|4uEhunRj#_V)vqop~^o{kUsvuwOCo!uj-Kkkk7sFBe7>=JQb#Xc*f zyD%(?X;KiSl1qoK7Tx7z{+Sd-#Nwg9Lr{%zji=CnQAer|vT0R?)*R+M&r zj~zqMx102_++~}wZOPv+%KxP!*2-sAy1s}C`EH>)YF4DEM^NpOKwOXVJS)V&+F{pI`USs|PauSfZ zae6-fQU-i90(A%gMihZ7l_|wK3}_?>-R(ko?l*LxSZbhg#9On5!t`L|tY&YUgW;w0fMc}{=K zyX&|+wg*;O33ACq;sgnZUL_|{>|5%fU{`KK>4jGg71q1EOmVQ z$bj(f&ICkRo~JMb!N$kF`(APfIf-wIB#Hi5Gr%U_mBSvT+OBiv%^3qD ze@=rWjY!hj#{~L~o*CEy=$D_HF!0I$F!44B{375mP(A@mJd_a5zhMOLp2@v_dms@y z43%|2&f$3g!OPO-0K(nD0-CrN4s+%XgxotVb#yG9=}*>N>@;smMk4xS+GloO;k3U~GbEZ6V=Oknp#omFUR&OmO& zCmwHM5WE8gnV0X~Su3>*U2S{5)^2%C^C|~0Ef0WAzcl{~SKH4hvF*HGY6mXJ4~^HT z^R^hLwHrN_F0!#e{8!FljrDYHvUKI|)Qojw{4IPAD zX<-AF`VBV7)j*3_KQy(l4NLtt-m1APb`X~O4I~nzh;5FY2}}Jpb)E+kJ4jz-kUHEb zQu@X+WNQIKaNSafn~NQRr9Mhwe`ag!G+64l@s`#8*g;t88tiX}sAsShs^*K?*unBd zZZE`uJ6P=a@@I8;FT>Wj0Yvru21aqV6t^XDP z;G|Ds&OcL0JEqV+UcW-^SCwTKg11&ax-R=l=bx1KpWXJUJdU zp=ZJltTodBYE}{zXM4)p_<&o z`(ug0QooHS&YNQgVX5CBEY4G6XTnmyjVI1qV+UcW-ykf`JfSaCW^-;IT74I(vELp$ z2uuAzJaOI_I}MhG8|1}#SL_HZ^&5o6nfw33X|U99>w<44fenL?R2>|81rxK zeKqkm_WnLpioF+9a_|4HHTecc*T(2L#^mSxaTu21R$tDB$0u0*M}F+or0WM!HK~l9 zKTF+oLTb_<#mg9RmWCVT)ucU^jV$#Wgw>=3;i*Edu+(qksmZk1X|U995LOf37AYKr zrG6VvP3mK3!cxCMSWPNp2Vtq-#bLRKWI^mSSn3+=KQYDq>cTG~GXG-;5Uf02Vd5vcPTce48t>-q8n`n5NCE3E z-}o<1nD6`kzyQ4)2?BUKi3PF9veb)Fi)A27{RUwL$;A%BQooI-AX{Un!BW3LSV8(@2Vtq-##4|?>`YkdHwY_8 zNvxO0QooI-AlqYS!qRX9ry#K-j4v1=uOJIzr@>Nxgs_5C#ty<#zm2CLyJDxoQrBRA z`I`$Agt0AAkS(ZG--uDW+=RckI$~g~j+6nuP)AsrABVmXI}qQfGQl_c%k550uKlN| znxvw`7*~g-`C-CpG9|VFOT!KFYEm8BfTezeu$t7zwqdE?##56;u?<-2HwddqOKcmK z`fWTlX^(BdQoli1O*Y21VX5E7QJ6^_r+ z{P>aX&8d>I{t7E%oX;Sy~tTWwD&UY^wko(84TLKywJHn#a5m=fZ zftO1+(&CsK*wersF3g>gpv5h?wwtvJ^Z#s(TAY^XFvjArG(Sw(;cw#7DJsox-Mae89g{D0hi34B!5_5Xwr2%8g;5nRAgV~wIU z8q~x=osmJ_NFqT+Q|l5%F)FQ5W+YY+a1u*=jHMQrR$8&u)>>PsRg1U&=bn2mQ{81;9A{n50!(!m z@N%3jImj@ zFQqvPFg07CZ3<4r*shhE?#`0wd02v(UJm_h-96d#;Yf$ii3OThd$h0IoBeo*E>w>~ zp`T{cd+PLRr2om4{^>)iky@k={aH5uMx-luWrVN++HG^TYH>ZhyX@KYd*qbK;p`}d zbM~64*}sEWlK60cSRC$ytD@?gHM~)Sj~p zQ{81;>oee%#t{D)%$|C+E^LA@jCCR2J6iFq?BmA!V1JjHuwY;XWWaRTj-S?Gu6C6vIY=PE7j=5u$+G0CU-l%YE1Cx^(HzA=&9=yL=l@~017D}$ z^Ws}?u8{!9aO97*F2w|!j=L2Q2l)r$t5xdQ-76s;l&fvrH~x^FbmeL}b{SuS9idP{ zvj;hzNmrV)08_KrWC3T=g>x2Qs=I)9(pBdy!&G+}*QBe>S%9hT0^UhipR){8-DO;p zZhFoFOm!FVPP*AS%P`el#x?2YxYn?Smy(;3d zZnHnsSU1}rDB@Y)vp>{Zm)jqxZCdBqA8M_b{aS6EX1|tOWp;KN?yV#24-M9Vd~Mqy zCs07_)|vOw?@)DxF(7%M#LzN-oi!6@L-oNEW_}2#l(>D3lP@Y~4e^4`)mfJyC-;gTV|LOvy-U+TDsTt{0RyOH@l4>yt{jceA&C~- z#wS>HDp2f_8G^si*bQ5edmKccWWUx~L)EKB^kDl#jn&`&Ac*d6f2g;1-Yxa0*jww2G&T)RCZY$4aWLq^_hI5yW_EXr0u9se(B6 z@aC$Mp~l??tmh~rH5MM>@R?*iKL9WT&2w-dfDpqdXP;27o|HWDgl2np}ABHE^MUsY3*$CGitZ_2HOJd}t={^$olT ztVN>*f(r+Ow0N#-93J~An?a30vPPG5b5*?58J=HVLYS8%;Cv2T+oO4`YvNsvT0q8{ zVt#lh>$G{_L)YUhItF*145NynlnMMur;1cX4lJB>22zC|i!e0_zuLB<7@MRPbq(Br z>`AoEUIN0_K(wbPQD6JD&dO7-dJ=v9W1XkQvec_KTl~fTP;afZKgc9nWPhl&p0Z!7 zt>4+N<<>kqyKu@o?GFvs5Bb`5C8vvnh5PGsVWC;4da-abQl&p(Yq(vjVI6P3)>+?D zuexi4><=|oKl_95hs|B=E-vvjcN6s9!^Wi(SyLCfTobR-Jm)&|heOsIkV_9|Zb{{h{7E$^IY% zQ(}LpwFcX-)mDG|wcP4yXBX&q{z${qV12^ZwpEbU)nSHi;FDxF^wZ29W++wS`sx|k zJ~hiS2S&VDWVCryl#@!7|QC zf+|;un^3}glAs+BW&-Q6hOg<0I{rsp3d1^wFdXz=7_&g}sIbei}fi#AP?* zmt!%mA_gX%jPEz&dnS-a`1~VN(SE*2s?wL&?2lrpSC?EK4}R^wOe0;F^rK4L0fIHU z>)U>Q-G|=&1^468)onlbfgk0%?I(zp7G>owFvuJeLCkPQ1q09*!)C+FcX3~ee8#5NYonJY0eJuH9;SGm? zBNgJ_j_XK=axEAjMF*M-jpk8XP)9PS>Dr79N}W?pJQJn~UN zpwnm`11z--N`9Dk(?^DRDbg;2NNAR+i&t>f8;(DYF2dbF)=^yCjONL~%I5KCYN(MJ zRiudv!qskwOYWKJeBVx3-FaoC&cK0xDlul!?k>(XM*y~-M)S>p7nk=YaH4jlwJ#8? zE=mGT+m}@t=gL`B18E@ zZ^rc<6{j#Q#tW0NwEN6gV&)3m_=7S%tnss$UCzSv#0`;0@}i@|NbsovxTm%!rbIVf z@x-H%rr&zxzI^V;wc2-I{7nku+6Q!gBGHZmot&L^PnbNL1;SO zyoHOn-;FlcZW>7ixANce}ZD?y~v47U>fIZdy5Zn}Mp4A>&bW3;h^`UVu((KmXCa$IUX`G=v<8UqR z@Y+1(IL!f%WS20q@#1O^2jnRPeR-E$T&iTn4QRpUW~)}Y&zY$UKY|qZVFRI&T__+m z*eoF4aR{Pd2Hsq84JntZ4|U!TlyB9CG42mI8KF`u+^IUStuzpHf1uJRslDB)O2<mh z>-4i8&q(Ub-cV*6bkaQiq(d5u%-7Ea`q_df)nh!UeKNcC^PM1B2E=Q?h+se-MCZ8B zR)V|N^G^e&L@ln+%mfa*hKt7z(XhceaOkfAGakqL@&-^8Iu=YP?$1z*!Rf!&=#mJFMQJ*^b z#cx?zk;0*9ms(7w!?h~K;91#HOm~-Z=?Jq?VXh)f_ZBg1VSHW}tuWnPLq*x#Ww-bgL!cpv zt?-s?T;f(vqZ4!C9OQ3lhfM|Upa?xnriAs$Bc5}RZ^C2_%RBQ&LL2;z8}VDtK}tI* z+UX9S#`%R1E@;H5Th2kAT`wotxk?)!1ADRE>{qwR6hVD94YXhgvh%@9+5G18 ze|FnrwCls*R2~a$NE9K6Dh+)=3XAgwXFg$l%6W2ajepjsMf&90`*?ApOb$bo$tQ|w z+heEH^N2$9s0y+UHW9XP32zicykQ_4%SFkk4+lx>Kv`x|l^wceUzAt2Qn*5`D}eNPPUWEE2^ebnH}(M9HI( zSl$H^neMbi{>Unn2Uk%JBrZ*5yECJ)BNB_c=nm7JMrOB#v8$a4JTiV)=6QVZVVtfc z#XN|2>){{LSASUo7s&-IS7QUvnA=a^q4r?sj;YOJcgJAo(jg&9jv9qQ2Zh(Q+bHCw z-p4m<{7D9lzb&1+CPc_|r)#t>hn3;Dmia?#JQTRV)t_jxBl1c+w;&y1y3@k!w*1Z= zX=e_hgoKWsY zX15LNM_TyBW#S z@SLk^;A&R`HP#0==>{Z&Za|JlPKe5}7uY-N zSYj&Cr?8R+j(1_@W3_;~`rFVM2pMUnJ3!2Cdk92Dy^1EE3pgs9HuK{OR;)84rZxjmKzXjt*^m?9bbf6>wu3Co&?-fJQnJ~1BeK) zfm-VoWR%clQE1?)z#I&a4R1RZJ`PL0xF`UTSr>&`C+20J^BpWAj2kR*sAL-U(b>QH zOknFc=X1OoYk4I;m%0!9u;oAiK6t`jF-=i`E9}*NH##uY zxnOb+{Jk!?wod6t=nr=R7t>vEJxUb7whbD5wzv?hBbVaogb2ExJe5~K+~pOp9qd}P zvZv0YR{(Uk3fYs@1uz8Axz}0~F-0L3g$W2UH4Z=~4q~-61k)vQ%Cf{bZe~^k#TP3t zP9eLa(3L1u(^3z~E$E^oSqD=iM1}ETERqefv9H30hOJN0h{}WbEz?E7 znNkenD8q)9${MhY8}iGtVME)I>Z!!A9+65=PKOPhE%i82zpH@-3NBKQvnO9fVBB5? zHP+=)54{S}`n{+`!7&|^l>!{f@5)9C-P9S5!yGt(lbQI=g_&jwa#(gQ!cF}()>&sk zw}^7T26U!2z!}nQrHlBtV;z-?juZ&B(uHM-gVccKxdv=Ca<(yeqZ+jhrwOoeo$~@$ z&R;R-eB`vHPF2|xuJvp>vcL+Vg5hmqqaqqG7@o_Pfb=YVdPv%Gia6qmux6%bi?r7m`lAqLg%=>DeM}{XhtIcNooYF^0b0 z1;*E)qV)bM-EyVBOX^AmsxDUDYRCi*?6O;7muC1V$~oN{dXZ097AUaSmNAkeG?KLFv^`ey8?6wpiXW7oWi#sJEAdAhx3Wc&i={2iBJM?X zS;LHXEcq?l6a(OG6C(@);Heh`z>}9~1y;s*!ge-U;-dL>$ZNz^eGIz5cvyQk0bt}&!|#>&4J+}h-}Iod_%-#| zfQM(_e4J~lMNnhJ+%RGJ!egy6wFi{w71_T)AoezSb5#Rw?Rz_BwwqsKKM-39SEsQrW)@tI zhwB#j;EYdch>DL+X7b{P8L4xv5U2Ig+r3Kj~8 z!685fzVJfqA$>ZQdy?k{;EHocOuUv))s1HC7wqc%QC#(d7k z^BE}YK8VHl>a=53xRIyL4ww^=tl`n(@+wTQORO z*{|DH%%i|8u;mvxds5v(ouS(L{3;2)5FZFHsOlc_g&e-?&VANfLUj04xel z=#76;9nZWk9p8b6tK(r}vzFS-I>{zvK$Am*$U_**FvoHOdPoQ0-b6sydIyu6+@TzE zDw3-1&IP#Cy6aTp=^|bhJH9>MM`f+UMkvUuQ~$C&ELs8J<3(jJM^k5X6a36MOC~24 zb!+`*y$F^n1h|;;D))3XTRBZR^Ds>@J+H;|oK(swDm(aU-`?x{qq#HD58oe6oHv=HaXvi+IBv1dY-TF#LBjUS^!p=FbP zMI(D%3{lB%GH~}`9Hr}af%_s_FtkO()VBmgQxW_ojae~i6dFCRP%FR{YUzEE-*tBy z;xR_eMeM{7WR($;>jcj#>KM#-eqP%g(gqrXifmVty_f(u5==Q2w-HP$cilulh7u$o zbH>}XtBAtthQsXWpU{%7Q1a!CAS!`_E$R5fIdW^i6hm^$PnFx8?Jb?pg%4Aj2m@=WH0mbNh>o_3RTsA=o@X{q`& z44)#xVn#9~v%1^EY8=K1U_k}@%N#DTa007{VO2tZFm@bFw#>&R2y^EWmDJPG6f4PK=E^KhmIjgKwE)UM?D0%7YxYXR1FaI1B+V9dQt-bn?W z8}mr7kdus5HTa(=m^8EKr8shXYujQ4L}Ci|p>IOiE8S+fH5(WJ5b$AI$LUsTmAQZz zXak|Sho{FLAb3W!Go0BW01W9fq#5aJ*jn|yY+vWs>b{2eR0ps7;9?C*tJ-~y3JbjR%Ixyb6iZC!C5ij?Sl;d4pW=OcSP3A$Ve+I$^6>%g~#XYGfF z!{pVb3Hf}Gd|r``$QeQF&U!!&CQcHjus~k_>mfcLBszFlWo7;3T6pz}0Gi+G5kN6b zc8FX#SC?Oz2_zx{ef$_eUYr*{Lc}aouvP@E{Iy;|3+&}7)&SuzEPoC8TP=TUk7fR*_b~61JDlnk+r@B! z&P(#CoBs}8t_2kjUYXr9fe2tRnp*sgzeB1qbTMW=e$D(jex;1OrWFlGg+{keEoT1l zi{MB)A`{q$MZlU^Dj}slhtFHOo4FlQ{><@6NiNIt&%6*XEM@}ZE2As|C*_tzck|P9 z4`XQBSpQAvlWE<}Ptx5oOQR+t=W^CU!s9SocONIS25UJ7AAX&(tZ#XhD-{yyD-;bt7%4S5V)6j{fT>d#Xb<2$x>$xIRGIv#+C5jr+ zwzM?&p9MT zyF?qBNKChTlD@R70&Zp{W3}LA!DDuc=I$;S$aj^}G!QEn@Ivuzij>_AiYT-*`%%vtly%Lf8iCy zHNE}GKXYzD)skxqeZF81&<#CY0Pu>1H0F&=MS8M32IMKgXJCu6kC-gV@GCt)GzZZ^ zkf8`k;oH+>R<**cY_YTRFz$YsMJcSd9HBV0(xr%oZ(rKB4IoAqQu>dXFO$EuW2+Ar z|8cL4uiTt5aA$4hP%N*vez_|%jk5dxXZZizJ#PZu`c8m%e{xYbW9Vy%w~Wv$P_B|~ z-6Bu_z}Iv7gysXHp_Nl%Rr%j`L#vKmQY*L6XiC9(hE$-8OONh}_2C)$xad6bFM#1u zEM=mCfv%>L7&Hi(z&Vg@Fw$Iv>M-p7#=ipH=2G59whnI|^shrL8vT6zUt!)q>pQ64 z#><@IM>SNe*jgVUV*HIKAq)0232~9X@u!j{F#U%Lg)ET?{0#6jYae6Y(vvSUk8tYP7B<1zdFEg1_7Ki&Cye8LCs1;r;GyN#%a7xEuY7FJQFSp{=s%RZn!;zSIz zcR1dw8Zv=qq&qXyX=xHt1w?zGP4Io3Q$}(d)p0}pKJO&m^iX_wxCp2G3C9Hd06iXL zPj@68j->GIU#0toZ=X^eP8Z1Ie?MpTF!eDKvx;TqDqCeWT$K+NJhzw&9!w9g4qglM z!z5Y7`Gu?IclSkn1B)2RZa0@@h!IhEGIc{3+*KDgTu4PY_p{ z22s!B-Iift_2JL;{Br~UOyZw7|0D`Bff2)G$*YA3axBpS3j-F3vK5)Y@%XZR(?Kf^ zhm8k|Zmq`nVMvCFL4GzE=+*-h@_o3&hhRG<&Q)03d4BI)mrgz7qj|_eYv*h{x!9Lw z;5HnNC0Ai*q;`5`uiAT|URO5P%^X>Vl!kd_+h}R2mLmaiFvvr(wF8D5nP6mOL* z5Hp#N#R#b^{-zmB zg?QdK)sRR0wAC{~MpowqT)`*^i_qA%Fu*ijz}`Wy8$=~IdCvs}!ckHXUKJcximUIdXgLYVxRge6)9tWCC-6BX&4+cXFSDFwz zD)H7($rDYLupAlU>QdFTE#6C7Jcupw7euN|pdWr!VZQ_4(A^hK;IEJQ3my3*esK=f z8_As+ZVApqLM-{U^vYNtMNPH@+zFCobge$&`iOs^_n|0ivJLKL$K`S z$btd*{EYudEInH}Et$-j!sJX~GFkuzZ-Ek2+AVPo@LUW_{p6m{V21e8SHWPPI24H` zKxaX!CO}v+dM1{=Oq(jrIvH5_+NQ>={9k&6%B4e$U5g%u|W+$(1-* z8Xtv|sl#!EFLmr?({^S2Pk|||G@y(6|9sv^pLN+1Y>fM#Is}Q4-P#kHEi(p*}$A*Q47!T`UkUb=NyA@w8C*2}eYK~@ZZ*&nwW=ZCXTn|*ABq_UuaRM3X277T z%fs&lwPMElfesK6DqCswp?ra{#GD3O{Y-dDkFw1bHSPYpKqKS8jXxZe>|!_2TwIyL zMgbOh>?vGZE?a+>USh9|Lfb|mjB>U~u2!QE==+fRZL)TduPk$D!(QTW2iY;J@N*`xP8iw_;`k)H5D@JtG)EQcUbZ>iKNGkczp&2-WA`k1 z%T|67eltBT={TT$AhzmEy~hq;$p&oRrAA+X#VPtaHiAMBBk^SHuSJf?n3^g2u|wE>Uw-LU*unt#K&b0anQgOy;qn9gRwn|O0s8ZhOU z+UiY(ftIO%^rm8*nR=f$74wa$O*&QYD8lUYvA^j-U|S5MD>D*BH{kW=txR$NVwbngQs3_9?mIDA3hl#@f%h3N8k{0FnQt1MjUGaNr z9R6dv@IH(T2&9p0Xh$%G#Xvm!18X!19CURBJe^2aPyMG1$^OzG+21X(9zTir5e+;=z2I#V{A$!pNOyJrhxeERV z&G{!e6F^Q_S5{kNqhjj+zs{;e#-*59OF10MSe$-9JY>PmPTNz;>w^(ga+3DJsFnCD z%0H@l376%97#=R~iyD`g#R~-(=Ao_PYM~vF-Z8jPA(~6Y&0FoQy+dNy+H1bK9e!4D zoA_045IUXFAQ4uO!pFDM)s#!<+3+35v!Qqd!Uh%Rb@ub9 zu_oA!!x3l7!J$c8rwvq&9>tS%gUd0hW_x;n&Yo!H>;Na92T;)5)hsQ{l{nGm^v4yeQE(xi}v?_}AV5!LWC7ad*65 zh4<9xywKXo@Uf7?594sLfVmPj-pbY3Yv`cZxs?~WC)(@bQOZpx$FrxQih|yUmFC;n z8{f4^C~7+%4n@rsvxiuwAV61zK25}kQ_l_&`rsDJV&;Hiil&Ygmfy2jUvL2ixvd+h zEGMZBq_2cBO;{&l;h-E#%ZrO(zmH@REU5JvQY*cKg7gkLw>@U|ErvbfFsMNYghGd$ zYuo*|rBI%lW!4c0&OMRP+9?xBJXblyGkiqq>~5NJmtxusL?{^>mfw!d!V(F6I^|oT zYqw52wE0>>G5p$2Al!Z^$j`DV`B@a!l>A4&<^sk)>m7gzfc!t=Q4|+YXfAP9CNKuP zKvA@_<$^x^4=``Gwwb8eNX-$9VlG<)PtRnkLfh%f0A3mkZKMy*T4!tOOT9IvU7^-k z`vH2jcWmz({m%wJJBNO&c=koY{YtZjA4gLO=b&4M8^SV0wUKmLaZ^#ECuH%nz^o!B z=;Z)|@d-kIjb9TnTk*sOHGqtd700iGxI4{3oeoS`Pn<0iS=k_QYBn{+53O78u|Vq8 z&f+|{<0fHLn)sFNYrACx1~k)Zu3Z39^cmaVHvD0DEiJbWJr6b>6CsCM1-?h{73S5b zx!o{_5Uj>oNb!I;$qgc%`vwp`_%P5zvYvwNk^7+u6Q5ug7=opt#kjXBRUFkxWq^~gxvB3J|qzIhG|qYUN| zxY$G%Ko^oF84_N<#oq&Pfg=tP-J0&OlaE?(Jibo|f%(K~n>k4A_5P>2AMt9pUDId; zO?O8xgRoFwrt%~u%w)sI0ENjVhONC;ns3;qbr=P=^hAR$!+NawyM=)2DjO=eY$C@< zx|44bCihts7X2tn&So-g8gHlBCkIR?*9&`c?w*Dig;w;;M&)jSLd3)bmoxI2c- z<#^1(lZ)+(Y~&P`9>Rl-49Am=oXYQb(m#@ooQ~%wMiP72nP_NjV(|0TRD;ZA2)&jv z4Y*ra7M!PX>QHQ_seZGcguyFt4p}3x-5@qI*v-1IJoU*0K0TPmByEDG4S!$w(Hulm z2Fi!q3PA49R0~lrhGz$+)I9vKCb7}E@(v6vKoX|~UM)PP7s37#`XKQw`}Y8nOrru3 zn15JhU55u02s$+x$iZz!I+REpNvzi(y*1YQD{0gtOebeyx*j+|)h#F^lM#j5@ou1M ziWbj=@dpcq0+(N`CDj71!=c3=L{pXF@E+)|DX4r5XD;*t3?rFt#y-(F>G$zmBlj4RZSU~ zGdXoLi=>kD(?-%#*|BIz(u8J2`bC5vw3i7yjXBTlHU6pu;^7T|T?hCk>FotDdy*jm zB-I1^hCjMa(24$+t+3`?0UP2bj!ORpP;$1+_-Yym$sgSW`)@dXSXl;~AS~wpDE0-S z>7tG)I8p&)zH9_6IS}!bQ4?bG0Y$_|Xl=Y_CNSjyu~>WjIv+P{Y<~!yOum!l@zV!vt?_+wS`=wMazh(WRDbBkilqYK3o^1R5n2xG7%KWd=(C&t$*TKOzx z<-?Jc=1KGL|GkJVSyA7P{dmm3nCX-E4CWF-2g>{Bd{2#-Cuog4EwKrJhE!nRI&h0t zy7o=a1fJa=KVUMdMEo5K_^ret|1Eg(u~ou|Ec=T2M<{1a-yC?!~B9*T}W@9@I#AGIx!?&DQu^3_&wKC2(+1C3PNAl;xqc9=BUp&OB>fmTu2Q-QJBb|;|Sm^ly? zz%+caQ^{KE%?eiS&kcA0&MXVjf53o*zpxun4*P}>`fU=#F6^Bj#^=y>U@|Dsea%53G$p- zuniBFnIDX=%2#oHdjjX|a07rNPI}y&A%LqjG*Ea2#vU43y|oZjgvclqHmFE33ELOk zy67aDdg>x$sM8GQ04(HUsiHWFlN&aNxv)RyTmnHo#X)8~esTk*M1CW?55Edg_5M6D0Eh8&-`F4ik`2qa8HVMt0#O&Z- zJx$c>RfKU_o-O;8*k@tX!9MM*F99t%|U1pZs%FgcbBr{@_+A;MH=ov6185`AYn3)n{-s(I_~9 z0bPhe^xJwHhz>2AaxT(;aj7ePg-Q>}S_e^ULPaUIDJkJ5+wu~h88`=ih%ppLFQlH0 zkiIj4i?Qw?7)Vbsh$@9|mVyV;pn=_b3bce+`HS&1smoUk(s9wbm}M?YmiZUaCV55) zTKveN%dOjfgE0q}qx6oBF9v!_v&b=&pBCq;s}^+%6`T6?=<#2$`C0aHbDag>DD(RE z&=>y7FOs|RrXjvCY;Y^Bn@;mKkUqySW0nzGosBO{H5#Xy7+?5Te-O?(7Y~FU=1I=+ zYe2wzD9umhLk&zJ-8Zz2SYxG0jigpXR>_O9~g7}xU2>z9j-rVu6 zdEE6wSa{$p*MK3wu}4IAgEG-aj(i3YHawkQY5uhmmY4y+?+69ja2vEu=30F6-?a#u zu|5-BegY)rn2D&*D;@sZgX^GB2+T$OxpJ<6JfrQ~shjXV&IcVC&A~tG49Mtfte=XU ziGDLAy4(5-k=zl)HGNe!hX++Q8$l(5qq9Mtqx(B3t1?wPh!MKAL3!@+0^6&iM7@B; z#~8mU`Bes=_kpjoHI<(cl35u{jU9;dJan;W6FADa*4hW3aV|17BCpC^WsF}3BY@SL zJ}+-hLDcx3jOQIt;hPc5n^Xj+A32erRER@ZyZWc~tSQAsmFCOz6oK93^@SGz2HbH_ z3H`NKY{r)us%baoN6nXDc9?QB;=Jo`2T!P|;M9l1cG8lm-x@EhGGByyce)3%!{3-C z&Ve)dXq@9gso2nU@skYm#n{jn!6MF1&GE5rwsR1C!23)Pr=848a08D)D`v$oP;TKL zk0*Eq2cwWXDF{}&$Q}iRvL0!!jD=o-ZmNOq5s@B`46U4E=x--PM6a(L`f}yaMX^-( z{xLY74~n4q!U++)_OpG^5nev=SJdWdI@)}It3}W?d6UCc9BU=C98O&-_^U6vk6qC@XQgBmi2&GA3G381WE`M9=sZ<)^SLWwsI4D?Y)G;H%&u>1Fx*CcPm|~fhM+T-^6Kr%X-fjVLoI5*Pzzo$^Yxgy z!)h20bBupe2Iul(54}tM;N`Fj1kPi=Yt+xI&6mEM1fIBZ;m))bri-3I0)z7vI24#BoOS|_+fZ9U)|={g=)=Oi55&XS+yM)- ze!c=MdKp8a14&*7#zki7|b!iGA3JPYpvV4{j?*!{|mj5GkuwpenSz{ z5r-ls+|j(b9o~I#1US>|3CD!ty8=EJ<2laLzCa~z0ey>I6biW zv=@HBD)+Hp3Zxr$QUVAS6au+C5M(h*jj7l zHFA9PoJ!LVVQK}SG}kFOV+u|d{e={j3d^pRT4c6%(PL;|^gWPWC}>NFIFPS^xeDhh zPUZ2T#ED=vi9RV~UM6s3PiQxoIg1x^07WvhdLuLv99Rt>qp1*p&o*EnFlK~toD0T> zYQeX*85NU?;5G@tSMt8ByIgDCR_6k?OSMT1mOx}q`A+#;(pPZCN9#1UVO-Jzf+lb( zlb>8E%?>{EA(A$gqTzUR7Wc+t8iCb^!`&Ys6{^&J?$pL&h8s{Hwm#^phkBLN{+2hj zRHZK0sag>On~`y@M+^jxv%itFt?>Bf1=+E__)-BLMC>vtfT?;oG`v@Z&)epJ&fjb`3-_%2>uP5+x9q^Mf@-6>G|5ex-aK&Cw z-sS>gN86jj4xT`7)z)KT9>C%TuCUzt0((fDwfzKdnunwUcaF1(Yu$zaRp@)|^1VRc zTy8Cjfe92QY*P6C>Ziqtukm}Bfc%VYDRQjTEXia2L4S_P{KRe=ZF)ey?A36e40n>9 zr%VZkl{$h;B&0W*VNiRmH4q0=W><168dC9c>%6}!cDjT70}^mK+17st^BjBGUW~yY zh%#Jw6Kdi8@4~c;|7)ou1J!m(DZ0LA#{kmZxv~mW7MHk}0`}_V zq;T%0EX1`Ug8bVdet;yysX*i2NXV84a2SGC)13%AALKeCKYxk4^JK-*+5C+^alT!M ztd(F%B@u?&iBHw5WMCVjrn0nQHDY1I4n@Hhrl>86YU`^HWx^JTRZ$w*7Zu68gy!jT zJnKA2M#t~jLEwo@Ty`ju%o-~+5MX0tS5iQ#YptW0Vj>O$`;9$W1gitlSp6j#MD85+ z0z|deGa~5x%Ld6s=x(l$b7gRD0l?4|i*U3|N0)T%2RJdz=n}@BK|8ng#X|9Kz|`({ z=sld;1qb5c%4w zo2zimla3#J@eKf?gIn)R;KQx_k?yhRll=ic_QTfT2goA7_9XPT6b!613)^GHUU z)E2tm0DAO%FJ}0gFSy~lZrtAC9wXluER2S{Qpb>|0lRNI0JD@eFH#kHPh0aI{`{Lv z`sgZi$wFXKR;*I1b_rbQFvIqXm|p<*-+*@E>9>C+OnTwxzmII`isy*|Y{CvwldwN{ z7|0uK`>Yq4Pp4mqfH!vMA3?hLMYIC$XexMVskQROy~W4s=iT_Y^t_Jvumx2F%alQO zq<--XB%Q%C5a21lK*vj5_7b(HIQaiOjjVMZP~?@C-?3+c90n}fi^*06Imssz^EEDpkmhYKV2YDYP%ee;~X ztQOP3*Y+NnCR|A65(+Q`uy{Ed!Qa-)fh?C7Ai)uCT@5bJ7@qJXFjs@iKj0#y%g}$! zqP>9fHOXBt`ko+3dXXu0gB-L54F*;5 z_6tzc6PM*-XNd?rZ?DM4x0i52YhmE2Q)gq=?B#TPNY?&6qhNuoFu#|nzZZml_Fh(t zy{(G`DQm5KD*8KYe01cWwx%x#Zx@ka&p&EGnV=BhRY4F9+XilEHGf<_^3$yqH7)ai9g&SOF|Fn1^r? zwf_ERzDo8>b#{GcGFfsId!MEJ1D#v;f9x!ZYlmZ@kNu4+L4`5!;l>y75^X-ND;7@H z-E@}>Sm0M-dyc*x-HSPDo~L#1-Ei_6>m})n-N}nYlt4-E{tKD4OX3%%{!;)>?mL^n zf%{f#?#tiSc||t&WmT9gJ(p|N>u~uP```X?UE2PXU`LNzvy9swx&&6e zLV{YtuLeqKCUDh<-(a`iq5zIlCs()0uXJH#(Z~6b^A>jzGUvSq%e z7SchvdeT{C-t8utklAsbek>X-MAva>P;qu-5RJYq5B-R2Z{32uNq^&=9Gq0(c)+KC z`^_0SDChqNxI3S8Be{4lfK!U%<=EcEB&mY$n#8t>nfrjog3K z(J(KP0}Z5dw{3lrs@Kgt^HfH=*W zku$QbHBZeKBNdp7RX$~`wGIvwDrn_<(5Uuq7`l1-I7g(1J@s)qws+gs0c^7o zbyn#cx17$dYa?jTN_M9*2=34}6a6tzbNC+v_gRm-$L5Vuf|HJuyaWFgxDSxMX+0b* z0Lto#fd$XvMj=-WB}(o>utl54vQM2v$^W0pf7c(~Kp&YK=uVvJD(nVFp2M<%1E$zO z!!?F@g~^Xw?t`#mCwKJnHx35j@v}R*kH4`8lee{Yi}!=hcw2QI@7Wuk-banqjrupv zttPj0#}^}FW|AM|JqPKVr3(FxtJzfYS!vQ2^^bg1T8t#Wfxve^zk$l>%EQ9Z7KdaQJi7M8rlf*6PO)#q<|8~qa# zbPWDt!rgy=5=Uzbx5Mwo$H=p+wXF#t>(?LP6&c#Dldt&bYr7Ax(rg;8juv`W6j^|D zbSSzMM%4oZhJ`>g`lFY>FF%0ZJWzdrK$-pUHa_66LZ2vN8%7zcEM25w{R(YGLF=XL z*I+Ny+fNjr2(=RA&nq6L`m-kVQ16j0+G~@NY1C2*yer!$*yE6<8Cp4514bc3c80PZjhW9CFa}EUJo{ zl|Uu4z*QExzCbQT-k-xY&jkkr4FXiWt8{D7mWI&&K{&o3n8hIL{Oa?>3#gbTy(YU>F6#;!U9{dHhR2DjvH&~_qcA{W_s=Ma zQ2y3Etgu+6eXhv1kxBcGG?$>+A~Xwzb3KwUJj1QNI9>e@;h^U}>gJ&DMRKzJ4jgnz z+Yv&MxVj|JdWtQ|yjK1XV(KlwbAxowUVyZqAI82-6o6D9aJ&uCh+Gi;{|Q&ecwl-y zoD)qQR>unf6!&MS1ZG43O$syo-=+EtukDYWLwBquW6(#zJL-^ZGE zUOd%S9nZy^OLf!^dZ&6*wNiMbH?>r$iu>x+?D;8upZC2u5R5$wTs91MNdBqgAKc$N zrMNa0+U{@s07Fp~`oQ1#7G4-KK`WHYBB=}VU>7Wh!+8?tUxvPv_$(G$>u&;LF);#T zPOwKUh4l!ets6Wym#EMotOlhZuPb1V3~GBftAcu>vaklP9^?%Nu|PDYN?JACYKmQ_OBg;Gf*J zWo_+!u##+Frc_c*c)!3=PoQvEGPaGlVhc{#bPrXh}wUwIc1{8s&`k+q1z%m7z>YX|TnkrMEsZLiZ&a|vU zpi_mNZ6~;~^DJbB|0~!z5SqNT@t4$JabKSv)=$4}1AeLp@cjQ9fQwdp85D1-c96w1 zw_6S9Xo+@s28}vPj?VIosHZb0K~DPjj{?m2_Y^wz>}MsQHci?F7cjeLV<;EFsx4sv zaT2S_Tq@TOt+kfI+k=)`je^UO(dkpxZtDr<^v`Gb;Dd{y*G9H2D~jW6N1)|IkQ4gj zvpzWv$>z4?``vM>q#hU6N1)*O8=vNyAkuJPvGUCRjidxla>S7*P!c`U{ro{L;iR(; z?B$7_zk8Rp&fmSOnn#dRQWNgHVK%A(%XRe7_Ix-|)AT-`2!!r$WdyeKCmG>?TFH!d}%Xq+KiuFi0!3TCBl(%sYjD^^Dn$93GusO($)>kD8MgAu0 zVyTgNp>`Mq+66cn>RSaQeOahIb_;ZyGIm?!hj;8~xU;WV@$ z^{C5YgPd}|M*bP!D24iG@~-shJLFxd)3>rtNcGUUp99!o0FlWHOX;SN59pO zk#>MKPDJS1Gm%G4Kzhur*v1iTw?}X~K3Y#o8koP#J_a;6-KU4Ip1LrsC_rCw6*Xp9 zfXtOuh;IY*jm7HD&Rur2&-VfV^`(!?eq4f&k_e~1Ffyd~Q(5||M}a)hpK5e%F3J*K zu?-Mj2b5~-iHyW$T5e5)r3dXpW9QI4d8BIly`!j}tF#%Eeb-tqBZ;+z?cO`Jg{=v8 zZLhs7z0tM(1|`{(dt9~c2VDrYH6qF6Hs2wzOMy%1g(IRw0I#CZneqP<7Y=Oh{8~^I z_$>lCD)De5=6)8&pC9j9#Q$v)zX;EqpH!vyq=AdC4EJwwMU6YSA}-`64~HT?6NF|f z;xQAOw@|=wXt~YVyxsggTLWK@HqKwuh*A#E1TCJa8msPvErLoW_{>GWmRAZrC{>Eu|i8i0?+SPRjpnyl@8XY$~ z6?=n-zjx zz$kM?`h2~R#2)$#dGyM@B!nqkYN3~pS;d`Tam>WN@Yt2|i~GW#U|;xs>qZnn5Pi8)$saqb+t1C=_EOJ*pl=PZin(Rw%hM<_p=!y2k5=y*m^`#TyfkswGSky z?X9oNzVYK6-Be&_(5B7nigS!phsM#y{~q{LJixEQTDvFUm9G9gv{B68Do(>7Xc~Go zrs5i^>j_cU6QZss)W-6h?s{Xn=Sx)Am+6gVs_S2@P$`(_*jT2z{*F#j8_QJJ*Q*p~ z4nKXkji*tE=fG3P8Q2L?IWl;Mxnl+yXaC*OmY%~8K;X!MDwfPT2q;|L*$Z=i@K30@ zBYqvp6=PlC@S)^k|GGYmhF+1KlW#(7*mEC5iCk5P zI(&{B9cv(o>=_;6)Aa&%3L68$-*y6*;8ffVei9u}45=M4FKyOakNyJn-hTZvru0=m zad&E`NGyBiM<4gVnAtnNbFhy`#l=>T8})B09Nct`r0Vk3IwXBBSjoQc(EFKVpc7I& zg!3{&Ft=i_uIfC*J8#8a-4O0>mb&)po&o!T9Vl@SWp_{s31o8#kha>IcnCH-CZet= z0!WrabBma7ElPJwzLQ79N7XJ~wuQKd%4JmhbDmgr}xewOQJ7*Aw}_Je-In;lQ(zc}l(^Ll)grZ{Mqf%6~RbVh`!+Be~g)OYG7h9mXZ|@CSkE$Vpd$}kj z$Ee|1Jy=tjfHCGf++oBJwsCL;fy7ulYUFc=e)=@V3iY!HPhf74{#mV`HTqerpLP0K zk0-J>;6Vg1yY*U)Ml{)Sz@D_UtFj@9I{wt#j_G6H-5SzoQ=?S)XwG? z(1Rn-BJ}VUHo>CS4XO!^@hk94b@gI&)yY)l$#gn?shax%U8?5$s9}S0lV8G+b|)%M ze%a06*o>FZYyQR=lF&UqCHZARyf*n|ulRS9U-n5L?$4ZJL+lnLlbdml8XLyxYm;C0 zfF5l&$~VR`=82`>!m`4zRmm@V;@-J03lp&Hs4R-gR^h62W;n*1{A5HW2fWGew@7s( zLm$KsQk|I%G+}K13Jy3wp+8>A=X}%A3lg4mT5G=># z3K8>Fl>ZXtN17kt8@iF$4;6Puo7iLShYxM{5&RinbF}@9ci@Li!6v*!E1)^YZ*i1n z&K>@ct@i0?R!t=Crf-y$OWWJH-M$P7m_pg@_2-~Rvg-q7e_dwLQwozmJP_T(F$-+F zOY(6JLcWJDW+e_K6v7hOY283=9wj5kde|vLM-j)HLAcN{DfiOx{9*jnY3X3wSrI2< zE@{J7Kadl+6+z3C>^=VgsmHt4{gc-4hFNZydv^tMC$WrP&b-$dUd~i~oxSP~_oTV~ zoPC_|P?2Y&zqX2OA0bwul%u>bjYkcix`aw{!DD!I)R5<)v~?1esM*keQ#au6i4l6s-`KwpT#M3nFT6yW6F#l%F76y`k+-S`-rLU}jKc>Bg1qOI zIx4B!#c*Yic{>fcSE!{ayX{?(fW!obC0(EPYp`B=2ej{2NvGZil@wx8{Ay)Z{5jyV zMWTyyLDoSe0uvU59iJOAk6s0}s)}HNiv(dzKzz>UUE8|*J?Gxmh3|}p=v+dimBy6= zbKt5Ai0D50GyXIYDD}Z{2dfOAAbwu)d1$JZQtNRfa{3Y*C3&&rXm;p}Ir%x2f*;&;dGit_!LgHzX$}y;R3lz3ux@My!{c5IKFB zwD;-0c6+D(588WAWS2cqxu`w6M3xn^t)|0$F%WKg?zc~to>RGC=wd)G%MC+E>X`}v zn2o@4yVDjc%nej|>{th53MnadCmin{C_Mnn*B+c)eg zUPTpqLCWnShv8S$a!a1Si6OIi31s7KsGCb~E$v@ul2K#uR?Ror zO@mF0+h4T4kN&Gz-zB!QtZ1i5f|%Y*n5E8IVsUlG>+r1Uy$~v!3@VN9m1-$&bd0`# z>krBs$4)4l`W5iLqg*|mfZ1q3?Xx7s8qWrZ2KXK=w=RBKSB+Jka?NwJQKiOovu3f@ z461;QzT6idqCTHJ7zB-`eAYyKf1Z*_+d}+SUt657XXC4EF2BlNl~{kk)gaP?@>7Sy zX^^rZTgy0|7|iD28Ht*B;QCCLQE&r3;c5e*6Bd0vs)DSrbi+ZTKH$`nMMHSe5MgNV9)E#QuC4yGLCbG2tneeGg^A(at$ykUn!@6D8Qcj8`V(9~gA z$G%DG*kMygwRNy0Y*I7}JeFF&7TFE2^&-H@p6F?RkiH+RjTj=RZR1E_I^gyYNVsX- z*@{unlyeQbqQ>xHe2bWCtmxsC;cOvoHvx<62{}Rps7@TJ19wPY4#f5CWkYfbS_9#E z*OM+-?%!nT?bJYLmdlL=$~}ABSb%Sz$Vv!t>xzA@;wcyLT3K8vJCb)FeF$&9r>lv& zBh%e5I-59T<8 zYCp~lt0e(=V~l^@NEfCn)Afv^c0CISr7$jo}tTX8Y}iCKtfTPazR?KEgVMR}Dg)=*VtM(p@5rW9fnYoVDZaK6_a# zxcj#`{i+4P6HmCz3-{Md8U#h^?y+DCDrkL}xy;vr|598- zW7Z*-tn~pn0)v>BkO6$|FDlsZt6iDT{rkd~1HT3@kzYlD1$Ztb^B}3zTRZEeU$1cK zUWZg`7z8-*Aw;a`gYiEByB4;p^0=TtN{xpC1~#jU{B%DcdI&(03#zd8j7(jfCuat9 zhDxwQ44zd@hR2hux8lv=d0fgQb)q*Fbi=&o>r^M=C|1M{!)a`E)1zpH+-1xXD&Cen%5iVu;pNf+ak$TDhlva z&>zE6Z_{C^FUM~K3My2lk(K6|MOEjQ>p{6i+K8WMNLH;c}^Ydo=Glq%p1=oUG-;$q)*09ZRGz zlD{P3$601zHB%&c(qbnE)TyXi%m`|^3hRf4EXn=V48*H%+PmDGqE&eT%*e)*HwLE;Lz&WD`;CR+ymNPiQ)vUM1 z`W({HY3&UU5d=!+guY=4!$f7#2?)EV7L zk}RAF?D_+&rGA~t`aed3g6|-5eq{1luah-Ys?;|j01@h?Oe<&4%dN{MG8SZ9qCBSp zlbmu7Fpu^G`Nl~#kxC+KnhhP)zJ&1Zmv~)d zfuVF9oenvw_mG3aBWN=S7Zo&PfZ|pq`Y8&v$xcmI&_d1b>jEO`EwZRAi@4Fx!JAbq zj0?A0T=P~p@uwoYgIJYw)sTC;P4A86(9}s zoInu#`9k7=NHA zFswKJ)GXji0i@LO7t~02x$;kgf!h+N;}f4VnMJ!@VqEL2y0C0EP~t*s_D;jmk7Dlh z=X5WZZ3d#}dDM|bf$qKb$dtZ5uug=ub!z6cLJEKdrgx;ZdohsbOJCj641cm@yGGFFE#534T^c)v7giM8IEvzFijfemDU zD8WfIX?!MgJGy0G6y=U2p0z(WZjO(jEJl%^5&`~{XyFX^0Q$Q7?5kB+FI`Hmz-VEv zcQ4zV_Ji*|45Q$tbip%%1hmz_>Fts9JMfaaP8qVmaCQ(KN!-I@%YR|sQxl|B*zCpi z?!fkBq%ea8O@i;4dDQNGSl5z=1MDS1=YpEBbIYl|paxQ$5*JwBq_A|7|3T7~OY!R+_~nRiXEllT6HfgOX=$Rcc~!QI&Zm25WR7oi=Qc z_)f;EL8@$?geAFyut+O@w!?-wDjaJDQ8iy0HZo(7{enUxbV13aLD7oIrHTH)xCP6B z51Wa2J9SbXcHSlzCJw7?o*c%qT+S8|%=>^$py~Ira>YV#B|gR1azfp77J8h)wMI(| zLz9dAw<5wRDBW+3c^wS2`DA1(lx7BE0}R!lBMosO#E&blh2GGql|wqTk{MIV5d&oq zqe)!f?Y(poSE5Ytf7z-K@Dw@2_7{4fDcAp*zE%HZS)I`LK3=2s|E**jd6)Pka9n=*?K~n8Bejd? z?k(Z7g9O9f>%{O_dAZ?4qSE= zPfTcrDFkLZ9Ds;Cn}OzGq>S!}ScCgykt?)xN-yKySZK-QZi$`~njhImukLcF*Y(KfAL~~$!q;QAd1-6w% z2RS3tk#&q`C9(fh2~*bQSGdB+>+DO2Vw~5dwID1@2rZ!XisjP%c%{`|hdhudPc|y@ z6N4l3^UQOLn0_$Q8*$=VT|=~OIpi~*ovx1p8N$JlCw{ezF{b|pYx#?^u<5gk9!~1! z8?tI}<@NANr(a>4+11+jYV;cq77bFk2oKltQm(h2O06_R7v0}^7n3fbWXn~6?yeFn zaEE-=*?1AIGlcxXwXX#!224b|M2vE80yCE(paxorVr z3NTUy_riK=G~@d5SdbIDPbP5310;d*K}?~7JLPMB7|}g=!PrVG?^W8*q$RIX4O^T6 z2VdT=#XB^TAJsD;9*zKV0jUZ4kE-9~KdNDQ)PGcXfwDs=>)IkLL)yyr9M$CJtBX3D z*;0v}&DRgxla=i?U>Kt@x*lX%@_7_0`G`4Sn^9XQKeZG;{Uv_|4?XcvdEH>XW?gle zlrk5faRXN@&m$130_yU}?=NA#({(-{7SG+~8>sV%Z_aM&`?OZIJ9`iHwd#DE_K@#> zoi7NzX?O5V*7+nn!fxOjqw~$*Lw!f;d^`4#FLNpTYxXqEK5`k=iuh4ffC}1^;lezl zIiJ*5Z1P&DNMZgmM451ef^(C82gtRYcNvQ{inKq9 zB7;NwgNKO(Q4}b_^BGPw^A&3%cr+%=7-%3+H5^-3woqm^#g3xD=XfIjaFzc@Ehyeq zkyW}#iz?Df7oq!AS4DoRi=VEoKxw^aYR5vclR%8NqJ;=3kOrg528su}J zk-Q3HfVY5>PjK^Z9`2Vc!U-LIN&bdzUcTl-40_6dI4FZPMExaPpEmQggUuPzewjV`s0-6}1O0MTTd>1uJ&3cC$W*V#b4 zds7>x!Je~08Q^FgBCTQCx8~4MM4}`DAvii34&)KF%E)|lBoYiL&yB#u`P&d@AI+Bc z7%e=B>Qs;AL$x1RfvOqt;N~q@obV?UURTWu(JdgIU#P@74 z>?1;u!8^1eMLV?7A&cOuLzXNU3%(DGwY|bwno0>ZYe1~>ry*0MstT>ldHhHe;m7T7 zsBLLPut336v5s!}*T9Lb6kpp=fz#_A_D?_x{DBssIg$(*Ir)k?5;Wct@2%E3aGg@7 z2aVKSWJVMOgVy1N+yqGUuV`XgqIau2;Z*}tt&%B%nEB%dSw8{_!8`uxy->R*)J}1^ zZ#L+$=xdHn2){w<#`+H2)L4x2O6&DjObo81=m&uJUVyvX@;??5LKS!Ku8IzKT`CyB zUxDYpU=fBXCJ3DNd*ozJ|AJrP;mrMf2P|0Lakp!-0XHZ3jnt3WFbr4LmFKcQBHMB~ z$Z{L*Gb76LY^s&0#Lz-*p?1W>KHO)x&V#$muXCfKC*r&QRfwS9VG53e+;HH8H7YWb z9O|Z)TX4%^!7YW!mhIRRoLof9IX@GZ`_hODLK1>O2S*4Y*#Z;OVY$K|dW23@yq;!4 zp*p)7(KDjUsHQ-ug*pj)ssu1&p(#gU*JZO&acLnn5UD2yxMv&SQUV0#KCY&PNOo3H zW`%a-u_I*54GBaEB&;IrL}Igj670&^8xpkc;n0f`uCSoaSfpe{ZaGw)FBEMmDU&H7 zoucGZrW~bHlw`}4fjVUqP{;+>unKg_Y$xUOajIq|hcnOHIz>tFOj)Z_l6kxK3cwpG%cvx8iSbOUG_yOlfJ$2FK2P(dqM! z5D4l?J9VTT9B`Bb5ns@p0&^NnQryJfLv~kPdHKACFHqI{LK%7Cp^Y88_5t&h*Vqe4 zRUD)G{B46?-c?t=8T~FiLlQS2&+#-VK;zgzS#_`)FN_Z0JtX#A`>j-Q4b0Q>nY~x3 z4fD)hj78zm9P*Ak5Ip2fA3m+=1p7S1~B z?KM_v?sXAzv(Zaz6|@&}X{7SMCl*ODKv(E#%+9O3KM?$s%Xq3QKace4$h`@C#(a-5 zIELEu0LwYRY{zT20TtEyn%_is#KHb7vQFb@xDGBBf{b8z=(Qclx{O_gM-Md!0!wrW zB;Ijy1dtq`)T6{#OE>9p;LL2~s7~YH)58QuRirY6&8uQqKUk=Wle>2+O|)7&8#M}G zTkmjLk@QKHYHV&CXp=^*!u)02&DEoHQM2IW8%Q)*eCi#m@C6wY9CC5P#$pv_xJro2 zk_d8OEsbO?!dKec^5AvBAiOp42JCD3NA)JvSyR-{o;O5i5oN&q=p40lo#3jXDls`1 z0jr^rhjX!6jx#hHQAvo(I$#uJ4Bvq`Mk)$=2pW13pA-U|A!G^H==_GRExb#PEFS-4`(VH-PLO$sFQSX zUx+bd$R=y(<%J?hGT@7S3uQ%wO^pmfZg>ccd65#P%HETyvUg*u?7obm+VU960(Vax zAyo8pTwGLCo1P?du>*@;kMk&7)>B->?x%4jsaGX0b5e0fb~Pu|@mrwSu0!b~?CH{p zFLERM#J=pYWKjMph(JRs~_C*1Xetpq5T4=>?D$ey)z0EnK7xZ+hY)^c7Eo8&3 z0YbK0zpxjjcOY;1XbMN;@HH6KMBEns_KD_fQ);j&832o$ihltN{Mo@W@TYJ|58MP5 z1ktymJ~jX89jO`wACDeo*)!!4Cym=ZHY;qW>6xWn2;BHg+S;VDMaFx_9V5hOT?*vdN zVLA==D3#U{5F6Hau2V;dX0@^$^ay{HFx8R+!crPY`P-&p`(C{Q+{682LIDUNd41(; z*G>p)NL8@i>DU_=z*K~X{;(r*Y&GK0oPU5})7i3_JMls&|MSX!Onf$ZFsdbBJC}t? zlX?dnk&^i#c*wb^*nhdcaZM`E zlpGJm6T5MNu8IL?kO>S43j)iCz(HYjFii7)7(yS$QA782mJDfXFSFa|`aOkRwa+hy zPFX?ER`2#WWT3QCCF0LU6sMmOq!>&@*=;JUp_9_P(5w(JtOj~-Iser054Ptbm{EzM zsfP-$xCNIqub}oUviW^az-0+y?2m9A4K1TEdPEu9cc4ABN)E*&|tLz7O(8*M9Vs?pnR7a=KQ}u4y%qUAuB+w_TG$JL?(?v1|3& zUGsQ^Xtl`Kyi~X#j2HMy{rL~hPV4H(X# zBjNr$gG_2Qp_WBnE*w@v1q7T4n4s^TSK9}oTEcyA>AU~aFGy%cO7+OHY%rBQpIiR6wr;tVogy4d;!XdrIqy!9rRjA#uzW|!UKJN&k zY27EeN9W?~>{N7mr(8%E+Tm+Ku1YB4&C(y*HnLZ8-A_jucl!OW;?y-o$wFocoDF6F zWrM&OqQZ{I5gb3)9%|f}Q+#%)fMX=Vv7bvjPWrOS5*Dm@r?Ak4V7?vcqCCbKIxD zwzj-pJ$O~vo=|vGi&|Rz?X9N%ofxARdlQ#mLE;ZS4W2L>z$a*lJ%TBMe^-`?u z=hOooMfo-Q_9u#-*&&6dH2tnp&m)N)G%2kG3Q>bKWJz{zxg3JsIMmNY zM@plrDd@D=q91-u_~?`JBzit;Aw}~&#a^$Bp)F>Kv3c4g!a`gfoi4b9hOFlQ20;OI zaTwCBS_zor)Y^w-733Bpdcy_ZX;sx|q06X_Jq(LqXi)(<=;+D+3J@aon5S8r0W0)o zfYBA)ZE~dEjRSAlDN^sQ40H!peCdXy?7#+>3at}91EqvIq_5=>sS9ti7R#*MUg@Fr z*s-r?5JNEtF1h7g_X0vD7cZ1i$QA{ly+j6~@3J;5+>nETgY*0wJk--6Msbv7>PiX} zoa$wu24Bm^W`w-!afFbD{tv)m1mwPuBtj)LDwM6&4~X`5ka@>_Eyd(^KxQ`6&Z1il zzyAV=?FG3Mc8*l5b@Adk_?=^IdDrprqWo&Oa5Ocl%vzUFuFs>*&_P9YPV7Qnf} zcjqg3Eb%A)FdDbh9>s0t>%Qstv$XGpUb*8!v8{n-pq}$anAr z(X;=ICuQTR;(7Tys$&bV1B$Bi-^7{0JTy@G`s5!ZAGh1!RXx5cC%HcYeD#^4#@`Q5 zWaL(kiq!`Rqx5UNX4~8KVr>mxiN)GtXvyX3JbYpANbaM*KZ4)upM#_-8hKWz&mPY+ z)}o#n+W$4e$m}1laEX~vvLP8z?4|oj)=40VCG3umBvLP|KV_I(#`*)#Gi-Xr8v~;y zl(60r8?wRv%CbYnL+d(x&F2@g^7+N;pyN`hlNS1#X`A6TNE!cNYYdQ9!^`nZe3y8) z;sxIM^O9N*or3PEG4~lgly{u;^}_trq~8l4#QC_-AQHz$(7jazD42Y$%4M0u6ZlPC z$vKXLwo!wTEFh0$9N8-ux&VY~ea%%`+F7udNINg#;*xeAM}K4o8GCs3WIEj8LGSl7 zz2};ze)Ln*dszX|`&w=bV9>R6dDut$RSw|qKIl4k{&)zg z7L(NoA)bzVkA9%e2HA9W6p3Z(($&&lF;2SRB=M5u9+*sUIZ2DYR%(fezRQ*GUZcr5 zvQjk;4|@-3VvpD8p2=Q(iy?>1+1m#72*2l=EV~`hMOUiQSEX?Tg4hr_lIMDXt&zkQ zWO`lma5)K#&B}a15@hpKF-~#$;WbnFmAkkEcL0={h~Po`W9JxgXEdXAV>EXSAPdP~ zMXvrmaED!bIZoS(pR^hrr)_=3R^{4gFMC;X_aUudG#PjeUSU*)cYb2vC0_z7o~C@$ zkH&hHhFAL_+)=@J=pJllAmHI*His+FBUgxEa@}aI3fFnuG6acrm}gtfRr}Z6U#gu} z?=O{g&%|6raS{3x(q2}zRC?oU`3L)%C>pxEOvGbxaZSXj`sIH5 zrQiJ$vY`8p{Xj zEGc@AL~XL<-3su3}Y(|fjQDVo*NT~13je>kD9jJNPGF&iYYXv0&xJ)ih~L{VeE2SC zp#UgBSj0}uT^@VZaI=j?$%Kbbu#FXjYb1i|c1lhN`$kPXSmNE!5(0)qLx4CEjhwq* zA0N|D6R*Z}Xf`Z0RIkH>h2xXPtKXH-yo}uRS0JX5|E~8nom%QwcN;o|T;o_R`m0UP zfmCY}_6+nAK6%#`bJnb;*Xf4-c%!|3GDeI8wciF;w9bw{+VVkKv^4Cy@tX<9Z(!HH zWx7_Uik+^B0}mF({_1SgFZz0-UrYVzehp{8$TDF3-Ki%M>e`tX4+M?Gu&aK)9UFbe zl~&uU#(nmSNWs3Xp?&GG6saE#Un@PY`>WPx*>oc9q#DQoZYX_pHQ=5oG#zZ*g$_0X z5c|KYanzvt;82e6638Yq^?C|e9P>M=FfA!`1J;_MPs%6J@6w#Z#hC5y1Y=UnIC6Tu zd3@7zsnI(#ru{QW26SkWRU8nha9UB5UzGmA{+o8T!iF?_6{RRJ1zY)w$e}%v&UjY$ zvV4GAe9Z$y451g5TG+;Y6R6FjK?=qLs+=#56?>awTnUnD`utXUBJ@jd4WSd5K6lzW zzSgblz5V3)^xnRO?%e(}&JOPD&(y*UT7Q-@V@Rv3c&u0WY4Tca)DgJ--`fbp+6Ys5 z@zvbhc@;ZaP--$KKfC~UiT0tBwnxMV4B?;eo8$ou`(3a}eMOCWb704znv&Xladgp2B6lTFn zH3U^)7U=Ccws%m^Js<}_56s@JF6%@M0=A6cAzjpo!kS2b0e11xRt*d4pTqD#tDtUZ zu>IrR?L)-{-c3-dCWM#b(35*~@g--9^;W9S(32V1vyoE}HLwl<#3!-4j%ux0FS2PM+1ceCP z0t`Cumi(Un=qpA;lA@lzQccn5nv7JqL{~uhrW$kw47&QO8II5sKwXM*sEe~_jY?xH zdOV>-y!o1U0BCMr-T7qrC8Z5H?QfwN!?UIQUtEF}f2%%0jHDg6--S04ZH&tbt5pkW z%}ej)V6S2~HS3prWJV@L^m7MUWki-o_Uft&Wf_chJG#_D3mv-cYT5SJT67{E-)XD;pcIKs<9;_!{ zr3%pTg3Y+3ttWIYBu{{0@DPN|P%+Q>Xn3YU&P%h`_Pcqi_$4k)%hZv&*|A0- z53(x{X+0p*W`)xx=wX49;lp*g4YPMw+l(GWl)Jw4O@{#<12@ZQJ7yq`rre0h9QnTK z+T9pBjy?xX*DQ9ece-n2H?wavun;}fRr}5Rr)$PqnlN?*VNv7p4Krm_$69fm4YfG0 zxxI7oUIOim-N9X_+f*jpBy&9KS6JeJlyZdnjZ}3>KztLF+Hgdw4dH6VKMsl!&PX{( zqTFc^=kK}_kRaMv66uiy%K_F53ARi|WCIETrPBIvwvHClXQ$+_Pi9g$v#aZYGXh7w z+n4tuEj2hXrtC%LEYmq~<#nHsggu*_Ay!|E>EQp~S}qvYRQ1j+nf1aLr);0P;3$?!{oIG= zSm0Lbj54J3NeCGtY(%ECw+9||ud@*d(>|+2E!l#%j=IbQ98JZQP%#{LK&d+PVQC#6 zeaqD^z7RvMVXhEWyT|1vjLT=cO}=Su+9OF+=f7iBzO6M&qOzTCM%2YLUS;yGQlEfQ#Kn^(xTVkcd1Cz{q2=`HX%ReJ3);d}52_T_6vl5_wF+R=+x+VN|d zx(2pIsvEO#ADSaixu)~gpDA@x$SWh!1t{eG?m>CvXdSg*kt9}AjGg;F(i?Ac!6u@W2z zff{7%9;hXyOGF1DQB9aWYtup^3*N z{sNXsDXJHl?$z!`r5K=_USwEy=T-xu)vLf837fCWY9K=EPAG$X)uD{vl3D&wNdlXZ zq9bIj{-0pge|ni=F71;HbK%5wqoWv`#DGM`4%yiyz%7J1cwDK*Qua^yYovu~VxUwp z-Aci^kFZ%|wS>SIRIgTXHB1x~u{e#XuxzVm?n`ChM-SGgS9j8-ytOmkopj2iEsw<^3AoL_+zAoy}Q`YKhR&Y1Pbqyuj zg8`+}ml7a!f~jvZ;upB&%+e{u1_pk|Pi5d;GC6O>`iqsSu7J_r>9&v<)`3L3+HoqJ z2%#PSJ9t1rWCp5N-@XpVH4_C38IsV2lUj95SmR_8OKY4UHkLfpI4Nh>KE5}D6KNd4 z&%%lGcvo?v$6(~@o#KQXG%XRiA)bX3BN4evbPc-wu{Q&f&)7#j6SXs0q%EXwGrYSQ zPe(G8yVGh(;#zco*kI&&*n_L%qYB5K1JlykAuZE4WVC*JK@G#?(JUOKx*fYXK(jE0 zQ>c!aE#oR7Bf*3j&IxnB-hRde5SBC;wjd)AaTC&!+Y{%&mzq9ET9u~sp3IjBgAfAN zfrJ^U7x6-&B#_acAVfV1#x||t4q21(Z#$DozW>_N8unE^Dneg4{-}tc;W$?CWC^OP zfvkl-0-w5DVHoB)4~DjWa5h9p~3VBy}h z8rBz9$4)NIi55~MegjrR$3IEgPqKoDui74fFfDL$TY1fnR1$UqbQ9Cr*aBBxowkZe07NWP5B|zC)_{5sK`=O0DS)wBES2kOHNaM9jW=V}c7RfY%N!IrdzrfZTZATH8z9#QXmixe8;Bq0 zZbWbJ3amekTaj688w_si3k4U^7rD(|eCdN^cSU~_4bzUc@uj`mTI=d#-`6^4McNn0YN0sBLq zwiAYMpu-UM7+O~n?KQL{!w&wg*}*Yn2j8x`qb-Dq2!4PMl@A^U09x~-s5NXa3)`>S zYxSGCU=>WWWCsC+)1-;R$!}==XaeR=l}F&@87&f%P8&LsyLn5RiEK_-js%#&LvTi$ zFfCCwrfG7N$JA&_KBfhADaNTa>~c37(M?kh;gt3OGGjCAp-@-QcJEQ@8JQulv5(2j z6ww&4bQ^+Z%f#FeIYKwby)C5ng=42gD1lpNW)n>ZzmX5j?BtGE28ijU$JoMTW}>m; z_99G69ke=hmB7Jt4U3vl#&x^JY1(ut<7|*CYHcTFT;lRWLY9CbWipq=FOCr+oLw3x z2zRYIhf*2^wp!I+0wbc%84!zO~ zGcz>!wQ45B__Y7x$^8-1K-LKW0coA8hF-JTH|=T^s)}FJ0g6K~cpMyQ5DXRt%nXOx6`kMyeo7IGy~VaosF2t=OUdcChjTgCURu6%=s z5|$%N5xl3tOq`>G@ShG*6Ko0+&bpys@-idzs332Df1d z{d9o#!5BfPavKJ5V`Zpv(&n3w55*_(`yp%id6Uz9^tJ}QFEd>}>$L5uD#$~Xi$d_K zbxuDVh04t7hlBVNC9tWK?)lzb_WZ`9+3Ul(!&GNsL#u)PzxZ`H{ZIj|WiQ5rAn_A_ zvdyLaTo-`uyPyL_Z)a-a^Izq_E!L?hhi|aaoN%+^Up4`V?tB#Y^!j&&PCl^bpx1ee3gy3IH56R!gl`k?jw&@0&iYeN^X^`)C1o@rBJ3A-Zw*z4z( z02k_K*W-YTgldc}h5FnYIRNwTAmj_S;)SvLLdZ--N3NDThE<1qIdCcw2)l}!y+Cg; zE$A_7wl@}M7yT+{zj{0U0wq>1fHzX2D1l_V=vACy>x&xn&1b%=3+}mRJEBA141qRY z8^FJ^WWHs?^`pO4xioSxzlJ1lf_vjhK+j=sU~f+$_+tZ)X;DV!9B{!7Q!>b1OThe- zxn=Ba-6S3p+DbrL1ma}GtpD>%>~5bJLqR7BTJ;^GZi^phEywddxm>|*xTJU2(qXw- zV7xAHX?6h&l7Wa5MWb|qu%`fU1epWt>JkiI)*gMB;5&TM<={Pq;ARF&3X;g{2!_ly zYR_<}ARKC&JaF(e--@Rg{hAluuy|SDAr^KqUg|L99L|mJ2|%K_cmR?f@AlT_}TzM7THyPLzB}WgnnbE+3F&NrdtFtxvF-d94Kd3>MOWpE}`wpmaz6( zqD3OgLe=o#)ac6OMi~k>*#`s8K+3A)NT_ATVYFYPA9+XO8L@~eT^5t&+!=6p#q3cc zHx4us55%O-$_N~~KwS|!9=gZ-{xz=gb|z#UR~-T61)A%JEV1JKEf@^&uMC+J$0EDU z?&p`_&+z@?qssBL0{?(dc^%EMV^RMF)%bh)>OE1Y%-`;vd7{vni9n=q_o@BrtlE5=rNVF34)g zWH4$ZMR#>R&xzH>47^snDG)jf$Ou5{5kHepxZ;~bI{RLXwb}PVUdY~N*-MkYD^i1e zFSO=Evzwnc&c+GO%0!gNO?VQ2-~GmFf#v6U-`~_H)4z8qDa{LcjnifQ18ptf2Ka1&` zvhrvBq)Rf~mHb&FcbXvUr}sECwjca%yGxLD$*DqN-UL~fdnxQRLt#f<)n$ULW27NN zUtx@>bAqfLA#W=?PmqN@1CwgT%RWJPAh^ar=#CD}L3R4GzUnTBa17BLZ2mj~FZorL z@D%iXpjEkbVy|OcleKeTLXZQzp}(EPx+X+x;*lU|_hmI27L}6vt^mgcjksE-?3AuVd%lil2ylfsqqvX*dY8 zWVCCR?1fpf#+fB+q90bi8R=VNFXlW+F0G0Cw6G~sZG`4Pw@a7FCuBIRczdQ5(gqHz zu?m6LY^B4oTd_&O935H0u09T|E84pnx>ynunpY+v+k(yHt$}Ngu;#y8fO%XU+gf<- zK#UdM^KYNRe4y(n*MZ}K^~J$~M^+@EKy4Teu4indZ(ay^+29r}EF_ynBSGGjoB4nFMWRq&h}M}b zHc?cwUgV`JTr%=fI6kh#N{uYUN^+V#Kw0tAK@ELQiysGANQSz=#F7k?-{)>;0^SGp z(bB?S1BE}bRqb4xj)Q`8%gp;W=%5`briKIXXgcJ7Q^J%DrdEgdU`3r`uL8dq>9tubqNgF3+@VXVR@um!@*nI+WrF_3E$7x*4 zT0P)9WPbvD%PH&i{~EqG4Rhn0i$5Sfyc53v`aR-%Y!~<*Zt#t32H!UbzEhG|*unQB ztiqf@90`062flG868Yk|>`uCX_~uF(zYZwHx^L%el)|u&pYfA{(y>T7IF=~AL9g4( z)QA}xrOVXfJfaj1JCduXOO)<>9%;CS?f002=3kme_nf>-aJ}>Ve;KZ$SVd>JhU0K2 z{b#|s>)n|RxmXe&cWU1wn!9Q%1n>(TxaGWM-BTF zfS^1|azL)f%g-0&MhetRVz0RGOkDlaPJ!A{EBBMXxl3jXH}Q!&Y?)Y2WP-$Po1=<4kp-P`h@iJyVH(9TtSNOso#Ko@+D&Ev!KZkQ9aa(`G&nJ{GY*_?S}i$j$u-?ZiUy7KzXzUd3`BYu4c=(!k%!;_mJ zJhHw@)W;s4!kdX7<>ug+Ec`3by8kSh+dXzzCt>;ts%C@Lm2c4uyehdb=4DnGjZoz( z-?Zb{nbXi2rb7}_>Jq0vR(gb?^axA39$|^vLyxdTM)(H6BO_dfA9{o(?h$^1L2-m2 zwEk*l(lx>%V*w~a>~Q>;u@l_rp<P}GC#*>etuu$re{JuSNfWL9;4jZv`t(1%sLU9#5up-$uf!h}iZ4au?^_0kQ2xa`zdW>XXH>?R|VL+ej0MVRzv@PD*o6+A@370u6zK0SUu* zj0RBN9t@x$fGj*hbFin)Z#bE6dl)}r^LrtOCm*S@A5f@R$29Tm+jQ`;u&uYf$+;G* zGf;p5wpp54YO&bhP+V4HjnWwMVgcLdU6{vlSD_|nl6~clNQou68upRs7!fqoU=&9< zSymtP{p2;ILhFw&?Zqko4WKtvv<(Qr{6g+=|K<7#h&M;gg>QKpq;eWAQPjRn*4X!O z;Tr3t;sb9RJZh^weDgeRx?!t|0a3to84%?rFl#RE_G(jelPGlaq4FK&I{A9|Df0`WOd3(SU> zj4v&r4VM<&YHF76#=h(&(`e>{GR3~^D|ZtgmMQjSKe=0clT5KM3$-sVrr1q*uP%W1 z1R0R8c`Cp`R}A4mb)b5~eOj5+krM&`>Qes3GIF5k1va9c#7)6j*g9Lwo~}iv4Nq;c4y^_&t%?9PrLtlKfsfD zBA*K`)hS=fuLQBa7M`3<`G0T-jxTjEO+m{vJV?~uAR6QZ6mos@todfCd~=k1^R@Q* z0QA{uz{#|hO(XvjP;kcgYis~h@}jS=`*R#Ivw^I{b;KK%7`G3Lob?UDltd|$HU$wA zC{GXBq~5K`%SnvRov-q?tZtqk?PIsAJeWJ^R~rDih=>M91*Tmd2WCb#2=~=qh=q3w z%$w!#(Z1+BRJ4RnIlGgy!g`0Lm?tL7ll^M!f&jjPkvZibh#&a$)s+7q2Z7ku;h5TOu5 z;R^+JD(8(GA=80begZqNuX!^lD)u3gaKz+CFJH4ye&7}S_#qAEMh>p-QQyS^?w9%O z79vErCC7yEHSNIo>Y1G7>%fqc6EH0C%<^-I<i|qSL$3)KJq@Fx^zWyQ!f1SfoCV zs^zD;sd{yax2Y++*3?Sk3S+^JuNhUHyQy;3oNnqo(^Q>$W29$PM8(cWl^n-*K$@l< z%iT_e+ArPCi&T(+C`*m^w(}Igvh#LaX>34r6L63|ofeh;x#=Bh**_^KiSoQ_JFI&p zu$5r#IPl^FfjYmgjHbTUB%Xk!qtkXa3iI}PtdZI@OLhODFI7fr}l1fx0jq~B~Deb zrsCY2_OxroKYh_~rqe-YwwNl31&dSBUNNgU6=EJTSUYNX=ngYgu!2>FZD`qh+X0yI zUsW#T>DR7Wb{U22cQBWnjgyQw^z!8%S;W1KAz&wyY7`;!J-}Zb4c!;KX=J*w9)y9O zmV5Aq=RlAG&#R$OF~nHH>XoQV5vINNZQXYvJTPar(yy0B6G$#wUlGaW6I{|_x;{>+ zC3XFqLc=S6q^PcsYN+qOEuzb1bYG@~OL4p#`NbJjH?MU7mhPl1jOcxGgl?M2a48w{ z4N#iQm^%%)#se9d11s?~@oQJfRCV%KlYy{W%_W(U#N>lC8zY@mx4feXLA zowmxeflbVoE}Tcre#Po2Kz>vr^p$nQqAEEh!KMd<%Q( zul-swkS^g8u-(|A#@Yp4h^?_4+am!hR+$qq#>V4iLjnfBF(t9CekQkTJIRo!pTL@SuN5lE8IzHB&Mf;YIB)BlbV{XN`xo~Q)Yq(@1 zqkDC11=N%eaNG)e0;i%GaZ2VNB!Ii5w1R(v{9{!mqW$TtTst~`@l^bqfq%2`Z#Mot zUKOA44A$PM>LVnJoWb(-{Da_|my|a0Pg70&(b6gCKo}-GqL=qPugI&muIZpLynoz0 zf5w!bgDcrL%d0!s0=B-`<>(;J=oMJ}!*`R4P4X8x776vxM}ojQSvHUIJ{_6*A=j)w z0BTI`AxGC=gcm(n&zaj zq#Q@l6e3WWdZ38OQWp7IkWCTwe@j2LpJIO)Wix&jWl{fMXQ0>kpiWhwt26XzdWyFz z)I1!Xr!Uuqd|$6-;!~KfSa)20YO{REe$||UeienimL_qk%PQce&UT#iMBnz*4SbAj zbnIJzN3uHjCgJ}DVmtC}K;1jcbgy2d?-eS5?n!^@)ff2EbnWl*bC%z2ZE`=7$&(-$Cs8dKPbo=9%=jo zvK}vF-A~BcBt-@BHq64m+4%Q(INtb-L{af`U@Tw9KlS_r+8$5Z9$(r-nw|oXG3KYH z=_d_MKUq54Jl8b+q&Xt_tUmST(Dd`aA_%eCg_-g5BEq~*JtPkWf~I)+G^F2G{__yjOTq+Zq`ZD9hzTmf9?PwzB=R;raJc_+}TdIG)kE$;*(hn|o` z`SR0YcrbAtn-r1p6hjYiJm3 z@H_0G4(x$_xaLDzA;A%dybs>t5WLf=?s8{3od&o{|Dlmf|6fPWVCit3dg7PqzCS2G zcd_rzs)|G(E|l+dF45j`E`2U!RrrFj!-~v?!`8hp#NBJ`1uqW3@YQpFNzn>HYv}Pz|$aws8R2VrSnsW zMOLC{@81=m@`7SqT&BqY=(ifji)oP53&2Xy?-kR!px@mpK)=RznJHS|x#$Y@{)t+I z^wzq`&Z?D&o`a$!25b$sM*AnMb5s5mdjeDgNs)mU`vW9YIa@v;ynHP`lqn}`_X&IO z3{sx2<#j_(wW3Y4GSREc4gJ)rMIrWlD+YGn9hzz^wHHPMs|2jhpqUlw>`!(5w8GF- z*2AGdVG2FG*Nmmx0*;*TE#O&8s-c+v$2+kICLzjPfh_DC4X``dAt@7je|xVJc4if4 zVJDczj@Und9XYudRELOiLhQUTRb!_@O+3MaofkU3LD=~f1iSw@b`D`Dy1>p|0K0=7 zvJ+yb`rS_0`Es``?1=5Fo~VY72eTes5y5-Q)l|^~h@Gb|(%30e>yGnaXP=M1LD(t! zCQM+;;Qg<8jRJ(dl0M>_2+7anD?|c{>+rJIWn(Wzh;Q*CF@`RT(*1Iw)cXIgC+4)>+ z^t_b+t^U+UnF70Ioh%g1I$sOEhYSlH*7*c{+ZG?eP5sOlkv(O7c?h4)n*pBO{uBJN z_4nA8#Wwz8K3F|Bh)c?U@Bj?o?m&*pXrFn7c$EAeB{!DQysyjFZgyIW9%ZVwURQ8m zij3Hnb&q80A{&i)6Y`n8gIP?0YwT9MT*QXacV;l{lk(S~N(ewCJr8VMLYj^>`e8}; zB^-S`t3-ynxOU!O+RD+9#2CS?(|-C{h&;f4Us)jSJv5Y5ElX#I>aT`Gi){m!P*__VyDV;9P)DS zL}Bkzn-Nm}roJQ=iYB)RBqkT07ZG^C2pZ71*O+&liFtlq?}bsXbnzG{mi1)NFrZkt8ZHx%(7y^+e+CFi>_7f- z62UUi!4L4uMF$o7X^r=(rJtVQeHzqH1Ky{Y?VG4sP6e`dreTH>7xY8;5gJZdv;-aI zHDIoE%jA8zxmMtc;z3-fTd}x0`~eaw3eoDqYpc1EI(Wa@T*;d7@kVp2%$2qS7TapB z)a-bVLsKj+f%wrDi>p`eM_b|e(PX>u0v2DI;dQ|#N=n44}p~5cr{iTl+ z#J4OW`{}e!{R_OR^$~|xJ&#|VdDU$1Q^Tw7@IE!XD&l?mzs##{n#IWi=0cj{wbfiX zEqMQL- zem1DxyXfari2LerE}Ft!oQtUHhI1W#j>EYIWwp|zex>Co4;y(O{(qRinvFy)itmPF zU9emarCW}*=xp6oxqAK(?|{lwu#2Ytq_d!R&#{vC5X25B-EuyzUo)Xk& zvhov41HB9^b(`12(Od+M>DzXBuGjNYJZx$cRD!%1Mz_})EvH&c@ zGj$>$NVsF?>_`PE%&<6Ps!={Nl88y@S+0vjCUH8HTd4YRDI;z-PF!#QixVA69Z+g0 z)!C?_T=b(Og-e9#TM9SD#cCxCQ1-exlw>O3j`XTr7d@bI9h}r*qpyt=>fR>v;zzp{ zT}Eyl%&}OusXA+!?YxM}N}OKAI={#HSl1$({oa77ry_bk!^y#b3bGeTMOfXks1+BN zBcE2`#FbV&hAKpE=b^Oy=il!T*bDfTCNR3w2pv7-ecGU(+TN#)`f1erv|K;E$osU6 zL;;EHEYK88<)Pl77mQfsj!}|WrEl%#RVms7|dyR=qI?_ zzqi~K`@j5Xdnz%uk8B%$=S6JmK;4B43V6zm0GadYqtbA^6{rKqrSOJtBbaRYv|MM~@~HMV@_9}TZiap_S>oUdY^)}c}M$>-`* zg?e{y(Y2|O`^!c1-?SHxi!A|g)4ezdy=cD}J$)rV(02+H5$14K1aqIL4eXsH&&q=F;{txDY>8c z?bO(OIUA9e$9JTaxG6>FxtzZUvo`bq)bBLO{n~lBO5$O!IvxGWXWUUOf zFXqET@ldE8JXEOtMZk^cP<+ix@SYqb>Ib?{B)V5?ugv5P${xPg)|zg<7baOdl>=*n!?Ns=lwySFAWpykh@;>^ zrvGpUe|^@E7fP{q~B7RWZ2ZsY(wNa7Q9 z^B_SIs&bHY?>s>gDfJ9|>&4SBsqH@xhR1Iso>p_UN)-I)+RPkUiyTX@1TdP!O~-~S z|LUvS@=d_n7cK1WAas|j=4t}l;VX~JO%`8a3H5;p+*{MDC`+nUcsRqxk_tq`-p$i) z{?i2U)Mv2JfxETBzCj{*80$RpQw@RTqs`Y$$L}f#ONE?@M{_C;om|GfwiW7iqzsjX z#!cRg;n1Z3?@XXB3V3H=7X`diFuQ=v!R5^a7LO9u3>|g`6#Qsk{J0Q5pqfIYfNn$4 z@A7iwmKi#^Fw!?1w!V1KnA^ZLVt2&V6PhiRcyVsMNWFLm?Fo5=$@d$ zr$#u--x<~5<7XSWBwB-apWvOt<&WXp6Dj%CQLf8|_@3z_CL(IK=W`?!I@`ZMmxw=v zdR?Ke#w^8}tB?v?3%R{5H$rpp8e(@hZDe6pTe*9{s@B_jDDdw<`yXy4Wn;Q(YF4iz z=pqhQei!2hj5v$aoIRUtIxP)d6!>>^@mO{--N90H5blz5gk}n!z7l5z)+A2LSG6O* z0W1gsesDf8HzX&@Wm-jVad-Z*;e@W7r~-g9$pj}@I8~M2_0F6jw7XOa>1&g0?XCmk8&rW&DX-%FlpWK|H!Zr=@M8pnthr2t2PycOUvx0j#%5a zxiqU(e&HMWMdI=;_8$;m+_rRlAQP&hOsxgLsB4u;{G2^eUu6?QNc6*xcoRZMfUNM6 zF?7VNP{ws6px*7XLxQg?!?*Nue*1^8ra8w1tidb7_IzFNWXyiL7KDdh-+}DNz)X;< zI3|oZl?Bxh>2ktJp}APyIhR`}ZP61G6UMe{otd@?d=xYeM3&ki<_FhD54^YohsF8X z<(94MnpcLgqt%I(gMYZyK6Nu9bi6uwZ${`adl>5naOAr1(CgE2I`#lSmLqf!hJ1Z( z*gh3H3P(HvoPdxHkjmccO|}3Is*QJU!pvGG^eWIpfp7f$!hswUIAd#n8MStUfU}2A z)#!Efk+WH1BzDDHz}6cUUYPgl#ToiTrfp0V-F2JD8F%2~VR4C~>-3vO@0$iXN9W^o z4(B)I8L}1N; zhzUB`Y;X1;qh3G#oA+r0Q&LRViSea46*3-n-Y^Wk zN52I_Z#Zq~-H*4vVt+BNp~Q`)!lR~@HUWF8=26II&XJ(^wniNvKoleQ7GRvvY_V9FSK)O>=7)4~B_^ot@zJ(68Zztw#QGN@q z#4AU}UV)b)s0k2HdBofa_>a+dV<9fMa-VlP8pWL$P6KCKsfz+Km3k@wO7FggY8{rK zyYH*@5h>5>jHG}wTkU_^gNUA4S^?ORdu)bc0ZzV}Ouk9=%M}i1UZWqL;bPimDzj{C z<#C?Hu18Sx0?el5VMAJno?1L{V2yns1P?}cj}{@=Wo&+7<*CKjew^$*+Adwhkij1? zK6>-DFqjN!<CWw3(BbeDP zqMy0aa_@`aE)r}HiHN{Jy+va;73VPY4k8N2<_BPeP57U~fnQQ6o#51BtckmVb^uQ=^v(x^J2yl{ESzw*6pDT5i&MOTS$dj2Y`aBf{oD5F=TjFj;e zhe7OQQ-*83mGXI-lD4xv=^(p&W~#>YwqTC0c@4&mb#V$V_yV7RntjbbiTWlQ{)H5?Q7wxsMC2}n+N&S!qi@k zj%iv0Jg@_b9UDptO|rKz0)6*?jAI(wO1}SzZr*l!?#T1%4-hQC3o;Cy0D~`2Y3r%07il16D?kgnZA2l;I*ivB9(rk6w6MzlsQm|m z(wXv>a=@S$(sDra2)u*o>aQ1Omeq-91BAdjm;+)TyxxM>8ZY0)%dib6Uc4ol$kMy$ zJ~w)vmphqLZYXxKw0e=$seoAS7DWcyoP}0l{wj#aHkX7nyEpP&Ho`j9L^-L4zGR~; z>-%h+@pWdha*;j}NBwwSU93d7wgOkYUu>?l^zwcku5-k5K%46MtQe5wwZvQl=2~X1 z<+uX16}S-KEUu`l$kafOjW`^R;tC|Mu}MM-Pb$QA*3`C2SI=NIgh zS|u6&XzX)la2Ci}lE74t>5_)f&cD}9XrtxszlP8>cUWFXI5wLz)y6wKVH5!ZU)>E; z2c-U1!`Lw2pX~| zyqU42Yrva1?|rw$h2)#%vl$6s;Oo#IyYaP;-2Io~YgU2A*9?QNjprDAO*a@4Z90u1Cx87k(X!R4z07=KxESK+ z^=AxzMCx;R+EKr4m?}#a>MgFx%;nyC&fn*%xpyWfv7$0%#0-d(cuO#!XPe0 zj-1TGTdVK>KX2foJ#hx837eBvm9K1ghkIx8LMMV6a|-h)t~Veull#oCRaMgkFvx=f zlk@rQC*W2`eC{@%VZCG}DQdk+#OJxVxD5J@5UhW$-#qAj1MeGS$Zv#IL)|i!hWt%9 zp%|@6YmF8>y3@|jU7RJ;I*;R@%mNuz0{hIrC8vW@+z`6~LDcrJ$9B-r*Pwp?3HPh; z{Kcb$y&*Nt6Kl6gbW1ddU^KpFdJaImh>c-M1dBcJjcwqbuliax;>D0wFw}JXb!0Y1 zeuP5bt*_!00=uJ_6ZL)3r`uD@$HgkohsEzBKPO2B8xdJb zzQ&Y}PLRLS8%+ncxcScTweP)NwP5{#2UMNrNFHvuGNZZ-I&2EaNk+S>ub3o2Q&$W!#4p$gY zs_-CB)XS-ifV1HS;LyM;Np0XSpD5bz3IUHF7Z-T2s~gs)yn2+``a>!62`;WOOXcdURf)q${P#D=|c zJtS;ja|sGqv0+nSj>w7bhF^E`m#33w{h> zkg#M@nK53LzT&<_sidScj^U z#iQ*Y46gnM`Q+0<5OSqEc(Mskw54tXA7}c9?o33J?9NqeIx%d)Wkd(uB?{)?mkT4X zm-Fev-lswRbei{RdFri1rqf8mbi+2?Ur3Y0o! zIrb^Ki|~NJr^F?@D0iI9r!Oz{V9(+l zu?YJL0wbuF0`{Co0-JjER#JGnIdD_2VyKL}G>(nbS@1k7Ny`Rb%UI5C075IvJZ=F2 zUPM=5Y4UdvhmQSBXigCSHsbVO}*AT}35_Br+PYEqoL3Qh{ru^&R<;06P$;s%4R zO4qU!wbWp9L9gfu|K}Ek8&`Bsu2RRK1|k!O6jqHUhA|J`MnP>dUwZ(m&^tY#NPi^# z;zhi`!s?yjS%?z0|MemA0}$LTUy*(InqR^2LzQp)ntA3T6#p3+i>yz2!;0hMp)qi1 z&@{NgBh}zjYxP`T_@5mLc+0mj5;7sv{S4np4{+&d}%m-DddXG&H|$q1vC!mZ&s zl%{$Fa?M016@8?fzRqcV1kRs`bWQ(1`y^-@cU~wB_PncvYQ$k33V#(7$l;?dK|wj!IHs5vCM9H`>0|`k%(AZ_s-wOg|Oh= znbsX79~aW%e1aYHdI$+c<1P?5U4)BE zu!K_EKQ;+x;tr-GcQ>PxlsxT{*F^eB$DJ=ybVd0D7^L18;EG5gkgyG?hjGq&2BV`x z0cW>AnP1{9Wlw!3Bs^NCX7f#X7a}Dd=So zQbw?#c2=|0TzQCdOX&4%^uTFft%JvdbRATN#mPB>f_`T$PNF@y-)H3Fm%wzTMya`F ziLYf0W*54!u%D}Ewdy$2v&{sj?iqB;bkArcFkn$3-7TO(d%qAaha)a>q*q7oc|ejG z1)d(9f!?vmSx4sst z?4X@h!wCZ_1M5LdLOVfXt2{l{v*E!26#QGqTE4TfmdjX!yEv9xya~t&1?YeUO2?Ii$PO+#=q{C@#FM}u;q&5f2mLsBp`1%3Clxlr`) z9mSvwNQwyjLNF(LZHTT-W)9nJT#Kh*Brv!aSKC*(^D8-dN}LrW!`-WCar_hvX-JAX z2(o+OoB=fIJ*`3C;c}@b-)rr^N5ymv{ROT}ft&Il@sjA)_e#DVYVdOd_@g!;*9qBp z1J&q*J7UA>+6g1-JT8fBqQ-ue6k1P)J`E~r5_wt4LhJd#ZXK~8KHx3%BCH3!W2fW<00*RN zK&M??)a%z(+wi_ZQi?rm;s*jc_8**i$Z|dOG*P_dlU|9 zVF}+G4vs*_V{>UmUlh3l(B$&!WMqZe7r7U1tfrAXoHmk|4%Y@Z9&TTuAj726!{Jhx zUh3$*<0kdjlE>>DvJ=s1q>(yg7eCVohNT!<$fBTR_DtvQH1Z`T6IbTavK~tn z_-^|QG#N|vjre1!e!k|v$X)+PAA5UyO873EJEo$#HZ}s)e3gi+J&y7jP9z4wWzd? z{hS2!bgs0FmDcS-r6{vK+RNUaym2%KZ?t>VJ9;-~XgGO`1?pZ- z*IP(mXci?4@uo+I3tktu5BcI?4Q?P^a!L1Ki@dvF{gR5*GZaQtqtS_lt3R z4K`aMn9qr#lWT<~9gju9f$Lp-q&ynb5es2WqonB^d)O_j z6e1r2MIWsc_Z53l4O5v;6BPX$hbg7kwx`A_N@g5(3IZEE-PbMi4&*jRJUy zv-7lM#QPjpBdYIVvA^vQ@xgZaa&;rqW#k8FU#RmnK)DXl=bT+Pi6zZA(i+gU89>MD zKwT;=R5i^>gL^bjF^nm(Y=Zmk-)M0E7}XQpk06sEVLgS-0ThR)MW;sDwPeQyX-0l( zr2I6aFe5)T@~e#e)R=}|9zPWTKz`By$daE>mqT#WR2n(nwEP5KCgTU1xGn<@wXP_9 zX*i^Vsh<;~>bs6bv6Q#s%B6fXK?21Why7Ajap<@HliwmCSu@nYwICu=2*q)-yV<;g z%AxJ!#n1{Q`?i4ns>EfG47J8qjWaAR$-ap9g~B1;NEO#0jGC^)DA8bILMW#e=Oc-h zJ1AJ_q<12{s^XWTUH^S2aE&(+Qtwz}IwfO9r(_PGQw6S0p)-8E)6VE`O}3+5=?qR9 z$=s|hW^UmZe+_?-#PO9U!qf!jQZEui4Y1nCg|J?YgE||s-%-cDk*kmLgqjyc`-kj5 zfi0^sB|OaY3szybieMh9d?zvhCwflAn;J0Oh8hI69+UFl@GCjhBUSFnDpBru-Jm>6 zX-#r($?)e)8!tFvNO&K6hEgk!ONG%%h^r)B`}7iKh9~L&@o9>xZPAm#J;xE~P#5a; zQ108MHgF;e2;# z2u(8WRuR4Szwk72cOFzd3%}9~zFAnIeo^UtQ31ZHUmWOtF-6FoRrNJ5jJy9cd;!uU zcjY-Z_1GqQJtCUPL_SFrJ@g!8JpWg}#6+?cVxdHC1{r@a1Q4a0&;~q5l3YF?%jqTU zpgP@=RqDQrdFazQacY_Y{qw!L>QcHuwOU}6x_NWf+Flk)y@4Q5$-XK7X=ngHp+Thl zui-bJouHppRsPM_yjc2AM>bc+SQ3m!hR8@T=`+h+l#xzz>NqEtyC@?a?WqjTyAU`T zaytTR&4YM6i!^4C%#2);_q%OJ(Nk0rH3-k&vBP7n%!0FQ(%NEIOK(oQ_Ej(8=8U@K_Hp1{S)2(RH%`Mn34D_P;IU z-siwlZq9Q&cds@K7VJ;*6A`^h&E`YW&>WIN_neP1c@s&U8nux6X&;MRu7k;d!TOqe z3C-)3TkX9ivozRR7}+TortAlP?`xJ+Zw`x<6N2PQM?4{r@wME+zM@k0Wv7+u4zrT% z(YXmDQE(Hjk{QDL9Sk37!s`~+%-`%zM%ROBy*?HF>a3db? zI>IxPV8xM)kfXFZKB~~zR5BYD)p3}m;xtR)nlR1CAFzHrxR4av8$x&h(+aBUNGL4WA&8GGw`?O~!*Wqi zIooBqfZrA6KZ@BN=})|^^zdT!i_uA)?G*xQY<>XSBkNNBxxWCj^zojAU!L;M#sf%i zBj;8CrfSxDZ9)@^*xqnt(9(KMVkD;VVuh>|JZanN)(r9;Aso9ptoa~jh#?O_`?Af` z$ZaJWUuqp)hxQjUhVJZNz|~fd{R^nLbhx16LR^Rnvr*P0VFrwiE2r4lxcGzXbd%cB zMi}ErC~RDO>e#rBUaW0gd`25rPJmyG4!BKR_FF0cbwAhEtp*Ic3+vVhTDL+j>lUpb zO_U)ogd7J@XiMErOk1aG)7E|HD-LI}+mFABZaY=&>8{E)Q@#gNS=#2+2(V|_ykHR( z$|;Aq9mI$yfil9h+pKaDKmC#1B9QV=#_R`a^oxPT=O85 z*JKCHWgI8`c*1tukToig?j|r}{?mw#!XENZBKo($u0ixX@&E_Xhr6r#mk_OWaZ$yE z5sE4+Xl!YUT2L?6h@A-pxLA_(Tes6>(#rUU5Or5SOi>rUjpx#V>MC@ZUo6E_ z#B9~^3#w6V%KsDCYT5TQis2cjdp{GU5L$xn1B2$`%Z>KJgXUMx_r0(%+NTIku2Yiz zaOpDzo^q!PE5$6u2DHG;+3v{&05vgEY|i^-N_Ulv3T zk9}DP+w+(GqZO!t_`~&0%s6CUb>Ejk7kA$WaB{yl6t@a&McRF8>=g(j#Ebx|Qb=os z`Hy95y!IntF9R-y&z&19b?`62Khiiw|H@)tmIwd<&D?5xb*i=;AC@_zTfY3**39oA zuHSCo4s2%{^bDb*p|nV<`N0UFZY!@!w_VBu{>j0`#~wO3J=SkL6MB$^;{yYo937|2e^S~L|6 zS(EY~iaptHaX;u|E6N<#PG3+>bfLNAUDS(sLfRa)h2y|K9+Z#way}lN z{y2Fa?J~7Si(IDoy}b_AqKQM(r9g%QtOQ*<*uCT-RV^Pxv3x!&&B(J560+p7XUV>Z zh3%UHDgL;m>1^VLb9qb3tEd5XxdV0~*0+>@(|ynZ5xZqmcb|7Xy1??f zv&n-Yf%6UMgmFc$n!!j@lYEjh-Bqke7dLGYSL@h)5dAcPwl!qAI$=dFfOCH-@c~0> zS4LD&mdJqT(>CUcz@Nj34Sl&XjlvH2n1ANGy5RDI$$kC(?%*tLx9nRhuGR0C@~8qtT{*JoSt(QU{D>8 zHSmFbtA$c@1CQt0x7PAEYOlj5sNgKzhNpsdP{jZgZNNQhYUGFTsj+Wu!~+N?mz17r z=`Wh_V8|L2FGe}*b3|^iH&@x)B#0FesJ?_h6E&kL=p~F%yuiK!OkrvBHCqLk|1X!$ zz*8g&J_&b>F_lM}>i}3a1p-m_Tdc937!r9X+-jV!q@qDUqPvCu~+(eYC zLgXMsS?wK4{IFN@$nem!O3(7OlvAlj@rOOdN2ZJWT6RN;>dHU*nlE6H*uuP5j^fP1 zj^#4)2P@^j3)~zO!r)jKP%rd2z(qWa5^4}3Nodm-D{Nm<8b&v&{vUO310GjZ?Qy3~ zOH)di0G$%3K!528m9wQQR@}83fBvY zS{0>GK2loxL7}Z6P$^(lgcC-f0=B_I=l%WHK4<1kCV;-z`@GNF=V{KFefHCF2SY$tqm$DO#}`Nu>Kr)CnopCt`0# z=3mH<)M!=ReHO3QyOv9fgafPOUZLt@WR)xYI~tD3qaH~kMkBlix>WEM{V zDIQ5xc0DmHTaie=ITQ8q37V?bj`2&4*x+$^Qz4jmAAtuj0j+{Y`nksRBSO=QVQXyw zA$8DF+5=}YXXNU?x}1AJ=~m{99lYC8{WE@2FuwKC;i-eZisuRrd5_BoY%Tt#%x9Xyj$%HMTVvJPb}W){y5pmHxtsDO_8p(@m%!Ne)iE|!L62@08T`O zqT6Ub@!W}i^xFY0M!J7S6%DbMuR4Hn9?eUn=Le)DV%x5&iu7nTh+SUW9QlfL0Rdea ziLp5@&=)@%(vLMw?8}qbBdKagY(#|vW|+dBZ;U zsZZ~~BHU~X!S4E?6+Js9cr$!w70BW55#|>x2I*&wO^9D`&*pa=tLS-cyOf5{N4lS2 zEK7w_RuE;6zqqZd$BCX9tjR^I{6gJ}$(Cf@ZqYhAS?e384`_~3xaVoUC)ncZJrprA zn{#;*K^gIdjNu|9_x&rIlS1}e{OnU*cIriCWtCy5x6;;(0E>qD0zY>|(p=NG-pwrm zR%O}h`w+;=vZIj$M_OFbT=WP&LbGYu6KjeVs?186uWqYNYSo#$LW@sGS>cN_CckL$ zHJOwSyosFB7+c-3Tf#1V-}p^c+y6Gr&Fq@;v5rccr1W<2&Fo(6oJgJ6F-AY_3zzAr zhoshZ>^-yV>fy6fqx5L$*d?))EiUY4*@)~;3A1dd-VnKW7|7C>I=4P@@9IP* zv7u{V^pyuBy0%w!B>DLRJYTPZb0+S}R`T~@{jB3IwRd@XN%=#%D?lPz$N86aP2PR?zso~q6>m8Tfi9siHhucPuZk$Cg zbJ0KE>K1-b&z706aK`#>a5Kp^{ReL;V@?k&dt-RlE5i^=Ms{u9o-OZMJpxt5-Fz~M z)by@h^lyo2K^alN3S_trbz5Q%BTK zxpqtHP-w+OkVNij^ysM(>DRN-T=bI*(9s^py)`cq&N1z0_=oGWHLNj zVfm04Ez^xI(-LJ$@8sA@QV?7!KM26M%z<&8ceHRNz0;JIJTtk1l*bKxI|05s6{wmF zU9&mgKPKG_RM&Zb{H1KRm)A}ZKj55zZG#DpS(|$n5_ES=R^*~()(b9_ZHztbj=JwD z#fRMZeD@r4<9lLGB6iZ-Hyqb{65+7d&=$=emQ2e2b|N)!sCF#7;8&}|7!?jffNt17 z+N4?Dw%&$D~z&C_wftK<2ZkVeDT8?u+J{QI7oh|4mX2yUFm z(~bM*`IR0p&nspjQti*e@s>$)yE2uzObT?6cu;_^@4egjI4b_ooN!o~`M|ObC9L&s z2ey2#pVIbrWd1ga*7vpn^m2f*$jwE0XfD=zXTUW1oVZUatzeB;8oNb`-g-TV#njeb6jpin%GVK>b5s_ZzYs@}qo9(S*Q zGU-@3r~<+Q*@@3{xztY7FE;iSJUD>b$_9n+d-5Muckzq?c@g3LG7Y7)V+bX zF3ZWt?H|o678J}5HLFI}uNjV`8mcRs!T69b)_TAD8JLi%JRvG{eE_Wk=qlABn0O_> zK-XUyibOlfVNBx|WpX(_<#P0pL;7Y(9|1}kDmAhCv!nn+L|UyDzzuxbpu5s$6YzFZ z>Hr^=*z`BMwZA@-phHsA(!1C%xQZf|JtT}dBO~|zGaD7+jNvVhH`7^h3~#2>DQ15# z-V`Z%k-?CU1sci6Uog>(_|y75cZC32aO+Xuhr|^`W%{U?=_AJqcsKM4cmo0rF<__g ziyI{`fzW62*&z36<#3<(cAt;;iEP*0251bRjF_}3duVvHqLWPpI@vULt)r8rO*UQ> zQ)f{X;~iH_CdI=wWi9BfE=$2(Ec1V=wn#mtMTT)n*WAYudda^W(UF+=<}Z@leh2$) zO8;H*S+^-H()*I>&D}M|$CTruX53eaXT{btv%zS zbxjxbNvSqrMmbL>D>r5in@mSf$&5G^D?{VNRmtBCOkACqxGs6oGAc}F#-hVRMcc$- zsO!K-=(DzKV3$a@He6i;<09Rg?d1R>R@h5(q-QxVN%WZ#zoqNnO>@AdNsoEoWj_mQ zX*1<&5qGs(mf8!o{K{Ua<@>yd8f=1)k89MU@<*74zkdDQ99(?Fbj3<}A~A7geYuy5 z=F$>O{T%?C+zELw^z13IB=%}yn%>K!Om=wsv0#=ip8+PYJDAnje;4bgI}lj+(>(t^ z$X<6v_vYsfGPPh)GDi??*{hAR$AGIXfqDztkMr^B-cgH!wd<_%cs?vvK04lQJWA zm5=Xu6eVM3^0IqlZVjrEMvG8Byonl~*PlvLM_Mh7xz&vm)#S|HLr=|oWZHG36LbHm z>N}$HF)wfG-A}H==8RmP?5)zm0cKy05dreA)&cdJMEa4u5##;%n=OSHzpARhD(QZ) zX!z!g7jA+GWX|C8*WTqle4et5&5CbmFER{$SUZa%uANK*xZ7Gud*Ov2j#jjj<7_8Z ztMSfHxb!^VMRGwN`R4XP-Mip7LwC>V=})d0Dra1 z-g|1>jN4R>IM6n9?;TLI>2J4>L{y}lx7Rtt@Sb6-Z@-qF$LRQ>^4^c8=Gax^*YSX> zk3GyGkNQ!OxpDMPitD&Eoa3d9ELIy5nJb6E0ndFwj!Hp|Q_r>f<+)aL$H2_Ew z8e=O{2NXpzc3r`ghB2?IFfybA?-#l*CJ@upg&4UjLx(C94PY}mROuU~-V|oE+C_nl zu^p+gTZUZ)Y6ru+%>{q*6cYVJ<==WhkCjL<^RD@ zSBwh}HHf#Kh^-561vS>US+km^fJww@vFRB>5QOOWcHwycI`8%8!V`1H+5cA)GwxsO z?W%qSNR$PxE^!}wV=Xw7o|Jm>H(gpG281z5Hsw8E<0JOJPLRyYL;Ix`zyF3WCskSe z`62>$IEBE(!QF6l>>`}fp+8|e(jqglmp8n{ZwD`_Hu) zb4t!`RBHGB#P0>ptXiL5=X@G;2g)$^LyYj_Q*|9qYX7O?EvZ=ALu&$I?lFd$_wQ6) z{)Zj8?EZ7#Q;v?k9#sD9?(S!*V(xqT-7$R9YZ^n3*o~Gw^(VWBTVU6-(O?(r5@|XY zjebRvV?gO=oE1z+2yFlB30b4-S@KjKpgwyf)m%`5%v~W)8(N+7&JwmJ+u4G={j}?E zt=jN}^rUavX_U&}?_>P(2_7K@n0Pl*`n~SsV*jJ>SS)P^$~R8Z5h|{+SWz{2#c_9m zOMO_-DiooXJJ!Dtve^Idrt}d^#eb;E2C8HT$BouTW88HjuV9z9VUF$6+%=KWqsU=< zjee5FE#v-H?Jk#1V(cJl9R*$D8*Nbl*!6X~j2Doxamp8}2%neBeiTu1N<;OPHH~RW z$?KC-4(-_0U80hRHB{>sm1O$3Re0iAkcXWg7Bcql%b!V`EMCNNJVv@Z_${X#5KdF# z9rfM!a!Nm)ba|{0U*dTGL{P_3lb%dZuTE_1s1Dt$^6BbXd(TKWR1A5s%4SfYF>_jl zs@J4?PyLr8Rn}((C4f{X3m}+r{CPBn(TFGsohs23UnEZUjwX>U)qF?S+Pvy&o_IjD zk9$wmiE7b?JKh4Hz$ue?ehP-jeoGs@B6QW!^LW=4g#v0hNP z&01@OQKm+lwy^hlc0qDtn0KuaW%%Ujzm12c6)~atxgSWXw%7H%GN{{X7tu3h;nonf z1^dCgEyC_Zocp&jt-Xjp0*$ZfszJSQ+unKgf=uAJMmA|-PNRhUdvGxeH&`_&TUy@y zG2ZeN3FWexbRP~V{?P7HckxpLkIMS}apHkWb(%#>cGLcIxbQT+Q$1(RBi;8Hh}U^n zq5lG8m8_e1%3b{VDl2;b!^Oh(xHNWzT*p$hiuJZ?db#{R+}(i ziC)K@Hq)!U&R23$WbM_&h9F7Jw^FkX!rVdC{n|a^H!vIa!RcwUYL5J=n)cV5GoB*T zKX4sjpWLIPSumibBgBBdNg1v0G_Kk3Im~pcssA2I(A3wc$rw>9$&T(AA^fGrWy_FF zHY(cnhE3sJC+)`t9lgl!==R^S=Is;oE)(kAZ#0A?mH3tlO{G<~;YbUqv-3l;-t`|$ zj>LWZDM%-KLSW)|c>dF!uU)0__wNAFCv8PoZ}Sgo)o5TBZPGPGoxI8v+s9LTT?{bG zuaO5-q`Q}52taN1Y^~zjU$r)|ziP>{?E_;Ixkq(5TAa0N!d_*=%?}xJp(|?|v=@fw zs7|B*OR2F5@kmCDH^@Xc=J8EdIbP@U3YP@1E?EGbpdXu+$d8&PCSSP_!hrsFnJ2hT zF8WA^b+l&z^gd`f0IK0X_oe3S`-qL1cctkxO|Fz>t#&h;)xO|B7>UdxWlMSq?WWU|;+?yxt; zxqp5f!9cGbZUg=5IyX?_<^YKNK>xzmU_dcok=@e`v^)fW14&1kJfnzRhVOuOl$1q) zaBqg7iCMz?H-fo=<;HEG7uXOYJ)FeFX+nGJ*c;GSo32k=2sE15_KEpu`2^4Zd4-lw ztZoU>Gh&a}-i-9F^&IreMDM1XrUdkU@&uh9>-g-}eCn;F&S2@@*~H?VfD#L(@6{e= z{zcO8|7!8zP-$DfiT~p@N`j1*X{oxua);C(x7D`5xa11Lqf`u#t!t1^LSW}&^6-3{ zdfD#c3kslm0dINM;4>%tkSzXS3x$0+!vEk4;F?UE8+T&D*}R-}i$E7oYf)1cukTx0 zP~07782j^<#{tqGukXDKKZci3R^Bdim$1nigrA6uqP_H%Ow^6TD>}aHq=HazR#xj` zWk$gPARiTTh&)!Yq=O)Ysq%!x14(`s4Mh$`=!c+l^Y1bLqQrd_^ov#C9Vu{KAF+%? z&jI%oIhMM#I=$5nHVkQ7z1Csn98yzL$xIYdOv(bN3*1 zXp+TC`+<#g#8-zVGxOTm`FIN&P#-8D&E*m>?yl`5i=KwtJdGZCikLGEI|q7CQttF~ zF7}^G{AZv4T+Ng08}u^}ajz)XWJ$OZ?Bm{V(Rk?N7BYFiX&lCCiQ>~j2(I;xm=ho$dZKgxY&M&Usk$d=c;M%`h9Fo zFZi;bxnblk7tQw{YB{18?0_Liy4H%lK&)Y-%O)$=pbh=8P`#<&2 zAV{NSu228tLG^;LCPa|yzLhC86_~EVg;9{^Za%$CbDjPjmrP1^kKHhc^EmD{@Z4a@ zLaS}XYwy|kPFbl#)Sn^7I6|{$@Zm&#lBwHlKYT)I_nv0sU(k)Ud5`iN!eRHKCTXlr zKNk5vCM4-KG7-CQMNnQyaljYDjC>a?X*!^U*-ayS#dcY467(caE! z#vS?0p_kdu((C^LvdqfDNBKP?z1`(JN;#i$F)L43&Pl{xt=~@eC2o+HD*L_|T1GFi zCI`^DfqBu>+~%9qCmF3}OHwfg!J@vvUqJdZ%$p^^7WxI(!<(gg(tW%tCZ6X2Ge~ z3J$Siefk3@fXvsTU*c~wqq(S4f9C1W0{vO&U)slRgplWt_@yAW(2mz*3E!e1n9A%kYay zZ#123hfMfcX4kRrOP8}N-;^c%i|VEU7?2DNyiN9-N_uZE3^!Hhy~OWOQ^AGjL2C+~ zkIyN`>J@@qyj4O$1)x@V#Y(p|qF4QUk&=nNp6|@_kLYgL{TjQn)rqcatA<^_MeoPZLTW3OJFxetP||HuB;;MBeV& zD)oSY)dU^JS#2B&{#$Fc8HMbs=uIEJVTW`YUCGuUf44zEic30{Me7a`g->@Q0Gxw? z_nY^O-Yt3tRuBAUPN+(hKRQ@DV;&8~-wWbZdU+_`ZVfSvCR_ZX^Yej6Id@Zh=4LT_ ztgtQ%bi^7ua>FPjiAi>hO6P(U@p1t(fF`T4H|^mtj;=~>YjCy8rSY%)k_x0pw($sy z9&S&uJ0nhHW(@NZ%kY=XRDSg>G5Cuw5fk4cRw!aHcUQ;7cjpVtzJ?_mSfm08+134NaMXy`EG-z*i2j?V5`Y|Gb1kEMB)# zJ{SEil_6C|dU{kH?5aKQZ5LdXQgF7@RVk23()(Fjh+;C$S~uLc-VNyDv_6d&M(v${ zgn0u6yKdjZMX&>fpII#r{6{->e)wF8$NSN|R3y#%)8Y#jHGqhqTN2_$3sSi#s^6)X zx*>G`hH1*JLYwg^0Q{$sHXG0Ju-TB+9+PVW<*5?PmGq#hgtA(=9eJt3b)c&H!Wx*!iDF!&s|mAM{ApPX0oG_Q@fu>~8J{hl#jK z34Pir%cqVQ9_dW&Tj*Kz6-?D`;Ticbx~+rh3sEIJAxkLim?rU-R(%Wfko~9g%k7{} z8AzY__QU1`z6$Ta-5jf%?REER;sDE(>+ui#Jo$UC-!dsTv-cs>FR@DNDYRm_mSzbM z+UCNPNvFK2y)|n~$3^ev6hS2yJ@;Y_mapcQS-4eaQjYKx^IxK}*eSSeZ{nr*6dW{{ z&Fnqy#L!sJWvrP~hkN7ki0I#!T<=%auY;<7QdE^W7(A1l_*CTHikY!ps^lQiH+&{n zv%k*%V&wR~u8s6G(xXV~(u`^HIq?UHB?M)Dm3cpSkPV^5lVTes&DGyX6^1OdC(;Pd zT(r+f1P0p05Y_j}-qmJqpy;Bkq<8C$J|UVzp>y5w{xZ+F>U>|)Hlu}8zv-}FdV@rV@zq*s zm?dDNVfM>38yd?+{#d#m*r6Dxaf?-G{KY!!uc<sc?0C~7`5fLfKE=O=KE z#Qp6=^i=VhKnEvXRlKCosrf=9U7_95e+(H$+WCy`2hSLx;O-YtFO)B$8s)!0P^r2G zM6v@zBRN#_45F8L_b%O`)9}rj^lSxh7@h_Bp-3yVe^*^1c=K6=TWkR3A-+`9IAH&^ ztPIY9=qe^-fhFp2gZO*klKNS`_%5lZD^o6dAl-MCUSKp%V;RWq3$M$ftCH$}(zc-2 z!|1i~Nb_l&MOJPB=$KqT1!kFI!yCQxpF!4V?kB5l`u5W27G3ldouctWGmM|lEWAbc zS22)cl?VF@`QYvEPCU5ig%Kxs=i{N-0_fipUCfa}U=yl=by`VLH|_Ctr*10KGBbCD zmf(=|nD;>{S*tf75oxW~O6-e{HLSU{)RS~;bsstE*%LJBGADRea}$SUIBwF4yJ2JR zH##}7I-|F1ww-vrr?w7x&ejFn`Ap&*whmhScWwl1bmaGWgjRC&k0WX^EJ^TV3mx)$ znY1akJPfu*-^nzuA{_jAthu0vKNkcT-+aUrC1cyIK-x3pX+q@@|fiiD4WuO++YX32d>8b}C}Hr1!I_36LV$Fh;02dtvR zk}^S-+0tex@}{__`bxpjR{PZ8BKger8A7!_;X$lS=1(ao_4dN=Lw>xxhq7b zL(y|GuRr$f$bFz|*kwb+eAc^ApCjhQd~Qs8P3b?&@fa#@Njw-i#ALD7B;N$i)+7;v zqdT7uBeY{~kb(|PN$K))vUrz&bO&VZMefHOH-;PBBHdpkS;nmH&)G|Pq~|Y&9hE=Z zF1nBYm`Cn(|C|)tH?_hZ&Z3HbUIIDuJ=q$#$?)7x)ZNBw1A1&|Q?G0p-I>>a+OhIg zg)^_Kicghu=Jna|nO9WRQyOCH=NzF9UrbaZH$vm~`#>BzX|zXT2|cGD>QXMccyOu#4uw`rd6+W>j6>^$`Gh3ioO?kD_Yv^1{JfYg)CBosu{YSLOq5|dl${k z+|RhVnOZzI7m}PkH0V}%(NL3x8tIulYhbEHh;8$GxU1R)WwWZ_(+=NO1^AYnh|1%} z0NM7$ZFpyn%ocF1vFr6=9WTs?Z3{;*aJaVWx`TuMy+7DiFux8X(`*JJ_ix#|vaDi6 z8I#Q&A|VvL=3EDc-HX9+F3C-pEYr{2w{rgz*8ZB*ztRW}uTV4V zxY)an<30rn(!q~@SO=F-u&jSPf4jDqN4mH0t7|(<=M{T_>Ac7btYz9(V>-w22r->H z&Gck(5VXgB>oAeYUd`CzWy+;|9LpjL zi*-JG!T+KLY%~Xa7>L->3I~Nu;NZ?TIUF3&Z*Y)D;fPTX4+0^1xs z&KoknKTPZA!B^3XUe7d;aSLuQ|4c|B zXW7bB-l^~Dkw4@SB25Ug@@DttCjW~s55zHZpb}`+AGAbsq=B3xQ{Mx%owS-caWtH2 z9&bv~zD-Y4rSM$j|Gv|IF6K%0CHe_FQ+DqMuR#2X-cQzNP6XS3Z`=JbpEiZUDUvZ- zz3Y_2$Toi|N2%N}$a*_?^*sY%&PcCdQ{b;qi#}ydj7o3of1ODIh*hJ?${g!Kr_tOl>68ej93d7xI#82)*wi3B1+ z>54K)YZik~dUaR6mwUJjtVElGN))Kop)w}5C; z{BZfhwtnLURBw3=w%;2Mv&~dK_q_Dg_cS{NmY;i-Mwp2{^Cw?Bow3hbkdy_A=3D1hLLIEp2m{^L6W+BrQfh#yaZbY$F<<&f1N?{0Rd%F3nqsfWP==#W z4TAuggjWas^?!+1;sVSEWG3?6cP>*hcZF!PAZO$)W%;;)GOTidX|%Tvrl2sT@V0P_ zz~Vhr*WcPDl*B_q$+$Os3P(7T3$EO6an7k+_qtK`Djp%VMqN|-5H?IR6pdOQ>WTC! zy?>KKf^4C#B?U~Gk*-B$;S9ZX-q*f>Pna%^s}Y=%-VyL6`jD*A%mLK8BDG|l_uiMC zTGG~cGmdG7OlommNtc@|Dp13A*?`|iu0~no{xS?aT z>S#bxdNn}_tiJIoN_4DiFet>Mkg*=7M7U(5vVru{u zOjd~WCVRJBCdwER2scy}1Hchj9XORbt{+!(Upsm>II-Y9JIi?ruf8w(G)vWaN^f!@ z^tZp$R9eO~HYB9HDlbh^z7pJs-1WxR$ zrtj6O`xno<`$&Y^08c0=ZPFuu{Ho7yPz3UcfRh#znYb6W3Btt<{?wGdqgL_kq?<{< zVKLYndXK9m-dtw7v5{uayTRBzJLkwgzRx?KWd!`*=0*I?=Of2F><4v3%n zpX%sUFi7bhQdQ_4W*?NxZQmZb-y6ep&mIJ(ccBd?tb^8nH~l{ZrgwmaugowBMbk0A z(9Wg*sdmH(G#v0MP?GFJGjg1=lS=s|^BFm}E3i@r+~Cy{8K$=t1xaT|MdbdAYwIdz zRU}r8s0C*5K^KA~v>g^Yf53it5Vphp(eVo5;jHJ+Ht|K&AMCV3SN+I0SdM|kz7;0# zBN`Am#dIcB+;M|EVi9qO2>J@rWAg(@kGkU~b~#*L5NHwJPf$b4f{&Q5E*HSA z?AS%WN69bhSshHCqYT`KuuSr{7&+dx;^ybwZmVRZXD{PveYPy>!!P-OLGSbi!^9LT z#&llO8=ANmc&Vmy^M#q>c0XCv?veb`F)L4aMPqGNxA&`C z4X~4uXLM25bX`pOM;(r_d^F#t<_{^rH=^HQU~rj|Kule(fTW`CPcfIt%*jCRn?_qM z@=t6>Ij7fF}^9?nBUL1TS2awCFDx?vA@&dDmfr5 z(759zLR?6!Naj{0V>_;*x2}8HuLN)ELaVy4_YZ>c|B<*r>9s?`K|`(&kk_zmcL0z% zQ#Wu0RUeXn+h@o+C{Dz{b?koFnfwbdrFR9G_S_Bq3HJ}OiQqD@l^t|pzCTNaxp*Ky zZ-zGeeek>ujX7Ze0;c9X&Ak4-0;~=X4N|nK&K+9l9KpTI?eq~KP|N{} zG{Wjd&zD%bvI*ygdpi&y@;}RMGSF&a_odA`uR7G`9YIA@zpdhlPn!BP^rvC?{t|Sw@j5kdC|7PxAO>XgWG6ef&0>1{H0ZcZ}V=yKti~5 zCg0&r)6NH5B-VOo4Y=KZDa!R}z;3G7Q>iZpC63|gCe8s|_QDo3grYkm4K zMZD@qD#(lKg8+)0_9@k~DzxS4D!QIVGE1?%vUz7fg{n{bNnd1^K z|IiE9)Dy(2)1Wu?a^ z@Y%H?GMFAUWGGw_x#e_p;ROkW3y6F{77Va)CA~AYvibc49dt{$8F-?vKN|=_hy9;- z@fQe%g)aV3zW`2)_ZV-;r-PhQInW`nCcf{3RkFDN*BE=A`|D+UX6@jZuvQ6j4$GXy zQtqY%nZn>4hR}Zk#yX2q7{F$Jg*<{1>AwX|BJzqQ0#kH~h@38Gt{N`P=+@r5{B@Yd zY*YVs*WP0&8*oi`NSOV^ROvJ-buRs&NY4|9Nd)az=>FKdk)C__`JhuZKk8J?+6;Jg zL=&On)2<6c@ zM|>?4ov_OHl09{@Yk4b~5MmG>0;Pq2U9vWS$ zj6MxpTjy=%793NuV*-wYpKSijA_Yo=-C7iVU~`;s=i(u4kEt)Ib4%SY6H8!l6c10& zqb_$eXurX=eue*5rt59{xPOY)G4H^UqlkHfTuf?D z4J^1ReYcr`SVwcwT0jV9Eu4|5tp`04Q^wX3q6eK~c4v5EwnBd}WWH2izBSRc0}rtV zecMUPYIcPFHi3qV7@v?tRI&#n1MyN-{p_dwfO8LjMr%ClaZ7>HO-dA{yKq(Fz5h3a z9u}U{^J}%*Xz%@(HmB9BbCKG$OqEJ~kGs2vLV`m25BF6wTJQ6hQygSqxAT}HO{NIV zSoy}!;SjwQU9GyJxiayH{nB-9_}KNyyowRxP-PA-U@limZTb<|ADfs*I`#q{wvr>E zR~Bc)Zpl(xux@_{!*xLYv&W|T^r&j2Sq-5-@ z3A3uZZm28MMrpnGqnn9fjv%|z9ENl1WC13cOz%b9auAB8gAk@2 zZzT6Wf3o`CQ_pB~+>ZQcMU1NxzJdmeJQ45cOPH0eL->D5MVU3Vr?~fe?-*;$#G>_H z@*NIPlr}VMP(!&>>x8rId4+D_w(G|q@4ps+`?_31UKz19K~p_ad8B@TD`KKCp#is0a)Qp%>ZOwHk6EA%N}G6Q=aUKF#~|Y zDbZsCu)JTAo?gGCLZ7$&DY(rak!*Bkq{j}M!AYx{8R-+Mbdkpi)!Viu z(<7c~>^*_ye(W`x<`CN6928mPEpKa4<#)sMnHoA4KbromRwwwF1dK3Obt z(+n`yhs{H00h{z$M`upTsghGN^?Oz19-B=O(Mg<<^X&3!xD@AVuGhONuI<`Z)?h&4 z+jp;36?R(0zb2Bkh=_>3lk8~#pS|08w2mhw%;)GQZP)QJ9(kd;yuNp4buu>{avXJ1 zdKWL*dkVlDbyDxqz`_W$=E@L(4oe3F+6B+oW#mkKo2FePF(_#F`<)+8@2%Lw7ic`2 zY&@xxtjpuw)>F35BiY|95c5xpQXgKK|AlN_Fa{Q_W?}|+bGUtEysXo^;7nUxY*P{s zqk>=oK!STVCT;4vW(3MK!ZZIpb;Nyd!*z1e=Z_S3VK2)YJzRfm+7 zT{XVzh7rR$erKLc0ss&v1|`jKuf%=(AQrjNbzom>(J&nzZYaVh%DPSj$d=&A1vaMN*zE_cArU` za?ypn6uVp6IS*Ywd{J4U2N;2-*V2V#(n0_7Bds>kP|b9nk-U0~cm4 zHBX284D!I{w;!{~-7QG*4uujaP57!23Rn3eh1}7T<0zNtC8!&v7F#L03!?ZLUsLVt zy>Y5tS$fDa={5Cq6g@4^e0C?pLmQXLlucxS>6gD@1D{7t>H`$Y5Nhlj1oKH=V%d&y z^khZ8C%?MMdIELM+e6fG4a1COulPas#7U@A=2N6F=r1zU4EhF&Shrq33|!b(`7SQX zw~~CBQ_H6MAzrEJ@Ycwt2E64r{#~Uxc|5|LJjK*mHP@VWSJ{Q**xa_+;Bc$*2Ih;#V0Ga0Dc} z56xvx8SYJ`Da3&~9re_<38Nl`}h}Tjs_%B_K<_#^0_x?4&ZdU^`LgR;Ix)v{tX}Tv)gE19qBOvfX?u?45dj zE=NU5E=!H`QSwR6{W`C!N9fW)lijXq7|X$uHD+(=idW>MWo&|^5eG;4n+3%owLXOg zil(P%lt@3)lms>&mPXqd`iFwuIrV1m-g9iNS?!%fglTPIzfA|#nf{x3@%#DtJU80d z?SQNUVBzi_rr8pSxE_zyxQ${yq|;8xRn%{roldGMbUi!L`4O^HjYEv7y<97{e~RZp zA_OBx9SUrrsl(;-^4kR`6aAaGyqS>)xcodi<`P`~=}Uuf`KZecm+xI;xV)IhkhqN7 zp}2`5^Q=@JnfpZLAagry{fCjc_lkcPnZGNEYA9s>%C$ov^T>6E%)kB0|98mzDgxpH z__KE%C-L47nY9i$mBJXhDj@&=5SiV6OKe$Z2t+Kt;!aE%O>!|uzCuG5=kcoNvdn~7 z@!$S52z_T=YUn$#($M$sJbd(BtVRM>9O!d=1pd{R4S}b_jZdYiOtRejMdy$R{9#P0 zUv3$BK0Kf{;lt~&mKYya0(^Kif8l^z^efMYwIt>F@a9kZsH;47m}7pe3VW+&8|qro z)IL6cJ85kIpMe{|-c`Wwmq2Aq zzU;2Hg)xEfMB$q5_9Z2`u{4 zp6y`2`(?1H8Oph|t8WB}&2Z&ti}V+xOq_n2X;6+t?@l;SXd@T#rt)19X|rM|v+o+E z+6o>@eosHUzZ>8;s6l>p)}f}?v}Y)UsohM^jTy{$L25UgW1(=ECW zms#uG%pvCN-g;9gZNK0B`@NfcP~*r}S&E?r^g=RW$^BqaV}rq&jy^oN8#r|nY-J%| zbujlEVt_uXs5{~#Y*Ff5)SX$jO$qK*$vfZryyr|-!$suR{#QYXTz zOFRUhfJLLjvU^R-K;Eo{pRMD}wUj;g|J|(m4NkF=iC(`N;{lt3FJ8^cTL$HSYn*nO39|vTPJohM14$2g(2%r-M`%T4w;QcAS4laWM1YU^ zN}>+1{cN4Ld86^op(e9%09K6G_Pb)&iTkuX8T*hL7Oh&aGTlAixX3XqF{zIzqMr+w z`!h_LP9DGZO0*VRvu(aelmgTs?B__$ekw^EVd7lBkv&OKDBx5UZYkhYndlKqwVKVh ze&nL3xu!y`Y@;&QO4PM7oS+0%XQHXmTCQI zODMV|Yo310ZtA_ewv)NiQ?iww3;gFoo(OP@c!+Xmd;9zn&^8iE4}-tOj7WMnzN}SD zBuvi5%Xk*7fdtpK$OKS73%rxg8$1;(>&kyma4y4%hdx_XTQaf`x zK(}4K=id&Xwv*lu?ao3Si_fcubmgqLOQ2CiH{_yg_`DasJB#Bgf5}@2^SoESL}#K^ zjEn2~mxb!O65Z-{acvvJt-K5NgL}%4c!aQTHl4oZzCfn<8mpmU-)t>BbhF*N@EITb z(6$#Zhhd8*AZhbgt`O=`OJNp|+zV71U(v-`xLz2J%8p7-uSk7+GT4)?)|l$slhO=CTMb?c${k$Et%Z?BAGd;g{Ga0=z`>m@{8hUt^b+sz!YWA82&I7TI z*YWWvv0^%0=51-0uIt@l+&|3U>yPH|h#L-{0aO8WT;r(o?*5ymRq@TksgLz5m0s_! zTygJ3LRS%p=N!lEqa$9iu}_wN-7d!)q%-5=(AXqzX-3038*O23;V6#iaV?VMEV zxN|{q9-I>Q73V|R0!1}W{DdWbi@<_V6CC&mS{+U&3oX!W2$ zC&NA>sAeXv|H}b0`}miF@LY%4M~Cr={KW3bcb~sDd%t~6m%+jo6+W{EhM0cVt&xwC z3j+HP78RGN3D3QdT=P`UD4FOwl_bF@0Z%BpBN` zGN|uUXaBthoXRVHWfOQAkI)1nv{tsbFQ*lMi4(t70(lFk7}?FMT7Qoo|9Bw!!;~g_ z2OX(>@;I`W`^QGFMY@M^YHg72;U|bY z{wDv~dtFmESyN!uzo2`_-X64fEbU1+2y_qc__a;>H){J{zBXy7{cgp52yD5;C!&9$ zTc65T^aCn-AKk;lM+FQB`2P4X#Z7c4seC3IzFaB&#Edle2pe_Qd3PcA(7U__qSEi; z47&L5Xdr&}qX3;3IdpzM4MZ}%qNz8I{eAGc%f*^y*_n81IoEcBtp?%M>j{UM{sULk zCep7bGxKWr=uPDYN%&Ib&+ax9{V|U)6W8^ulHB!_Fr}xssh)lQQ*wjdZHt??pCt9Y zvan3qv)O;5I=0`fJX!zRcxb^xbbWoowj+cvJdVF4K)|jdXv4b*r98 zhjI27JxjHSWh&qMsr7d&k5GTx(koR0mvFWuf1}pMG>&@5!bhsahTFU+KkBpXsi~ic zg_%3fTLIf11=~(^Z9=_KAA7N5Z)ol12W9Ck_ip^0Bz}p8{m(E)i3Cy=Xk*i9zopz~ zBuex~$25{9toBg-1|?T$fcpY!x5F95=HV7ArUfjthq-B&K#H8~?_vD1pJ2%%--z_< z*|QT5Xv0Ha>JnY=4NFbX-|G|n9dSd?OnBmcL-% z>SHgbE&wMGG^|{jfuSUl=6Z4iNS=wF@=zeU&bfGpTll6Pb(bJGH1JY2+G#U#A&++} zu^+O#n(CQdKwYXl(R&2jtvdRc+BFZKk8UdAXNdfvHH(?;c?Z9u*y}hkLzwETW1syB z+~l0>-aQ=PJGW1l!<~uQhXJ^}Vx9M11UPp@x}Qhi%IG@vk>o`r1J`;@?;>i!wV+S`idl6hXnrF!pk!`$8x{uJI`F$`TLb4la6l?M^HBGLH~FG>aZy z_UU0i@}sH>$8%}+mL0;HFR?^1PU?P-ObFR-RGmCG`%lk*ZtM7DIcO)qHg3%DDe8fZ+G6>KDPu22x__%~WGe6Y9|Pp~c!U5s zn@*6)F_sm|2}-2%zM-?ds}Gj!gil|6`ot}HneCNDVmDhG;U*(zKxDdgN#W5mQ~S~9 zy1-8LnFI;ZjlP1n#rqY70L+;o&69L2AxcnJdYWP1zVN`91P-rVx3EY)G@-JfxGE|P zLU86`4RquPX6-}@X%pWP+zNc3OYt#mO8b`UBXsa&Iw&H!wpB=yLaURhyz0jWtacuG zVEGZhGSPGX8~y;-ZTCLIN@^}D^9*v10*pcE>j97Wy>6Gh_ddOrtkgPKfB1m&USh6; z4czM^@Zm#sC4SI2rK2i!wU9e5V@0jV95|~vLHV-3>`v~QY4WGvCw}u|J zHz)#hxYmF|R{qYUD|dV%uYu-*@&ZfNM((!S0g*M4ym{pH&iNw<$SDOQiGNFTvoDua z;Ae~~w7uHQBOA@rz@l81ar++|;w8+YZy{NNvEn5#ZsZ+?aXW4gVVo9G?qm6pL${>& z8qTNALgEu*(tGG(f9STSC=9*WSsNUS55_U=qyp?(Fx+e-lVlqipH~`x{pZ2j*!o#a zBd=vIa^B15u=8OjbTWxqG)0?a8F?jpqHh@?m_)&b%egM~UN}jdeAh~$fj?1^)A-~* zV+{;XzhQZOlgMrq;5aRYYY?K)+uszGJyT}=PLHIyHmNIbN>hP=Sr@`**@Z` z-K7f+1o!#Ra!hP5Bp+3iMN%$&`tRRMrcZJ9P5S8X(m6K^S5q~FSv=ejRbZW}z}O(? z^pVaYY4alHmM5b@x1Doy4aS(l?saGbI<$l{*_jDh75X%4#C&zTKu+xpU~|1Zc61}& z#zi*SzvGc-&*+eSUmiK}z)~dw^T+x0;Jy=xv;^`ncFohR(C(f^1^8H`wt0%HkX;xi zCZp`$-@YkIqry1GYyx9UyXrS1EW zb0(x6H@Cl_0r|uIK-KTj#RjA-b!iYvr)O*GvuIw^%s)poCDnT;pJPIB{S=rVzY~#f zE|-CNLOo-ykyd=N7SwotVB5@XH-&SwhV#2TCLN*nuuY)+@Xme7ux+f%^B`I!*VY*F zBS#9S8`Ab-rQd8 zP9AXya=QmQ^?u*b=_@?)=v0n1u?E%x1(s({8Ro*!azKcyX2xXBtdR%G-Un*o-J|Q8 zw`+pfzsTL(bl{4aYA4~aqqUYf8|b7Q zmxwo;^8XLS!l>y$&$g`Ueucx$MbDr|$=+!-y5OhdkmUZ?*5sm>yth54g9ht&U_XhT z?f+WFFTypCV;~$gtr3^zYLCm_-JVk^C&|D+!Ggqns#|i0TVibS;hYXx@-lZ8HICtH8j}l9dnel z%{rljzvK`#`R;0pwUUc|%heRQPyYJ3=qrp6u7-%AgGk<-RXdyl&viy#X1Qn=MF^gu z>nqlKO@}-0qc(r3+QFIxHgMGDc4t}5}F)vhBMilgy#m>27$Z)-15Hs zQg3X~!S-~k86|0c5^~XFEiE-xGZz5;3b4VJ5=Um5b_eObG>QPye?F`j(zgyPg)}-) z95IP|co}!{&8o>8r_&=}{4Yp*lHGVFratL4!Xe&?-G>l}3$b{}kt5Fk$^5U&e0F$! zrlAH~j+eNvhE3&HpCWleV%}vQ&l;Zn{C}1IS^obmv2xmLBWV&p(90Gl)9>Y?Uw&sh zcW*|z|I4T!xn9<2)F&K-;F>h30iMDZaX;1=r)Ghxrl=afMd!J}Lu(BWogDHPs9f|? z>P>INoN!g<(-Sf?;>6z)gqRZ2MrJ;{YxX?z12$LCdh3K-4RB1bGoR}dnbU^lqLb`{ zE-dP``mzVfAkeyMr)qV#_j(xPi7-Y=^?niI_4*0v7f7k$!lA<*8KA|63~n1x(;Aoi z{kX_NcSJ%Kx#&YePYduYaO;@&yB~EX9WAEF0r$_(vSy5y~zS!&2a_jJl^G{YR3Kp6ASnF%aJ4a-Ge+N$~7 zQeXax0ZvZg>MP3)!@t))lIs~>>SKQ~ZO}RS?j&7z@+Zxz1f$qruDHz|HQS%&3m_~1 zF9X@wpmSYR>5iJcqsnzQ(nfnO`E=AQ%Wlegc#bl1)a*&i)(7-glf?-UE6Ie2?q5#y zzGCR$qh{~pO9UPcrF-^wcP)X|*<3ksdLzU*PDZVF0#aEksl^mK3;e9I!;Pf3TRlWJkl@Wela0t1SW1`dvzl65-N&_kP7tXSP`)5bFKjC5-7?-J zOFE5m*(J5gNla|qc9*{OxqRiI&1H0rY_inR?42Cc!NygqhY5gt2ep{?=6z~GHl94? z+5s-=JY$QBP4>Q9t!2j!QwP#@$h+^U##Ji-2ID1$#)h|?TmXc!!e6oNVt?~!<{SBa z=zkS*KS*xHWPImPEi&_+#NRtC0QdLvm9e}PtmBD7U8lIZ6yqr+t_W{Fmn1bFFDo9; z+C78uC_*&7{zRedWC6Ku$~7AQ={Ej4@4J@Yb`WH)B=aO#Q9N?%s_bZ*8=2^;tu2#( z^Jt^>qsd@1Kam%yQEm64F8QnK@;3oet|QXOfGx>O9OQeegy$rzF;SU*< zK*MNg(9Uc&nOK3ud%kY;dp(a3{er=jm$@$&hrjsY{F&tzV7ay9A`Iw7*Qb>Z)FFQ; zG)xhoS);mMtsTDi` z+?d;+B7K1nFbvfqp!@pd_xB0`~(->q1Q=H+xkfk&D?7B`L)e( zwRMao{=nATmKRbAoyx(D$3K-rz0Qqil_u^&jSuV=v<3Ao*3TknMgH!? z{xd#w@{18xPqK@r6JHCmQH8tZqCb9(#eRUjEdkF|9h}w}5V87w7cw;+((P%?J-f)P zZm`(#73?Uhx^l#u8V9ll$e>8Gh73PBIynPPQ1_4i&AOkP z`~G#`(30nq*%{6r72A#M?zK*@??31p#uo}#xe`07P%Qc9{UH3t*t*n#Ty3=lexN_D*WaSqdB+td2Cv^LG!p+m13!M7H4;g)F3_KL0SQeE zUAB`(?cU+8zbtvy%MF6gWUo4w%S~~`@=-Hx%dm}I=gl}lc-T?KXAR5+a}z{1sAZ~e zv+4~ZO7b3;#8%HT(JI_)vxQ`}cji9~7*`j7vDW*^UJ}d6i3^QCp^~#gP%&xk1EI2! z0;LnG)DTp}@PuhoN*mN#6lzdEKL~?3QB>5Loi(3bXbRYG1Rk=E=;?=}+-&WON@o!l z4M^%+YJ|WFe${11P7=`z63v1{wd;_@-GFxUsLZ<#f(*)m0wbRzDZEr`-of0uM{Y&w zm`7tl#F@}J^6;Hw@V<7|P)TjA2wx_(rAL1C#=OMV%2#~QnuzlyhkBeRM^4-8c2#VZw}yT=NK4b=?P?z=-(zCxu@7Va=Pg#{1bH=!35f z%v0FnMaIbx=KL$jQ2ZPXFJ{MbUym`fU-9sn**tmS_~8@U>NC?uJ6WG19q?@~{Dqk* zde!;2!^;Rv^(C4ICF4Of8@2(uIqx zsut1adn)oCqNhp@_4M0&nVxka6Cwy#>1(FjT}8%ZE)v`vThr}i-Y9l9ur=qFBB96? zxYaq$!QAfWOatJYT>xHqES=V;$C1F?t>ZQpC4R_QRvQdfP_78-N)C->ZMBW%4vmGb zEl|DUbBrNi%_Mo#_OLN@*IGtAkbqj!``EFty4x%*6?Mq)t9cj?z{LxvqU6M}&DlxW zSNIK7sd*Y$SOAieyg%=5oX$Bc2|W!+rcm`}VhPnngmbB*0HgKZZ^!yP4?6ZIei5B5 znRq3B2(UH`4J;*xfc5=7^>e*9m4?B@7hAL?cBgQ?o(dmAo{dz_C0;37-@AZ zJW_n50=BZj`WptKu@xm3+SL#Xu&EmgHcBiR;vm>;wzdWVRf#19i(#Yq)I-2V$%Q`l zpU6#k5_#GMomL^s0s!G%0cQqvWaAQWj-k03>0O%`5gDUxc?fNt5{8h3g#Z_}4ApHV zmUNp|L!gZh-EAcox?K#~G6cO6%2Q%VQ-eTTX6Q2rv`Q=~SPa@KYp`Vcm0aj!f0k%= zf@-r@b%YO1DWtJ$D3sHaLS>8VKODEP;z02#nVtXR8vYUX=>0kv<@{mC6*K{o`$$JSTYStF7&bg;@u^{ZD+xqonFr0 zIXW2DHD#pF6K-`rdEc4B6g8#Y`Pf7{zJ-NiGZl&X-(Eal*L**iuYqI3^EKbs?mEds zZs$XgpOOom697Y#Y~vX`$r{aI(P7Xew+{tCC6*K{p5z*%(GmbExwwx7Hnwr7rj%IH z)SyXjA8K$)EGbw#$(`09QFYW9AF2qJl+(^ebI z(a3rBQM#+xQ>l|BQ@Pkg8j#=DUKvw1{s4 zRa6#NVMRe$>kxe6DC^5mQ0^>+vh$ZpPC={C0lbS**DC=z3Z7eQm7E88J+A$;``==8 z?yXr8m+Ow>?vz8(l*PNMu#RPA#Ns;;)PbyH9#y6C$BrQJNqQCg(|ueiGl zO1f){v6A!6u$F}>ZP8F*Qep`*4x+RHYikgRDzT(sYtgE!Qy`-+@p?C5I0XOaF(-|>`9vxNX6>51 zwR_`{Y(b-sJ-a=}{Kku?V8c+oRANal2Tj4^q2Qv#l7hukFoE6;!H|_)7+&#;Hra{{ znr$VPG&N`nl0y|#VoAZ`DQK~BB~zf}LLd9D*9`=)A^~1Bw}hv6+{IS@RVE_Uhxzx9I7cLmNYeJ z3ho@Lpb|?87Ei$vD_7D-B^UbGzkM`@`0eb#6=w{w;(%I8fRp)E8nJJpG;tA?|HW&95_FMTi9{~mbQ(ET3gjf3P< zmHaZvP3gC!$5>5=v=R^zyl>mauD;!XoUmF2I`w3+tD_%iiy1%GIdje(Jnp-mv2h>p zkkmjjC)h=W(dWJukV5if#2C>`=Ay?u1yjOy1;ddouUi)ybPZgS8k624Ue*6~^~g2u zr7Lg=!%>U;3p8q;>M$~P$F2`mP*834pP?kWSI3&%sYJZ8%u;6E4aPIL&;NK@eeO6Y z7rp&ST+ys?*X;xI-TvBPbX)d4UoBEYC%k#z!}PS<(o)_EY)bb=4QF2b zQ(IQ*=2h>hxtb)Mw47Wufs`^kJegm-1oH%w!l(_oG?@I%edkxQm9G{I>^qf>$-_H) zx-zpdnUhTLu~d?H=vxBoOgPyYIMs2!gwTKKH#K@;4jhCgJZHG8OnN-QZ@Ji+s< zTnX@$oF6N68rByr9I7cLmNYeJg6|xvpb|?87EkaJD_7D-B^UbGKOCkV+aBrBF(xTQ zFOmdZfgX9u1Cf4i-DQ6awQ#A za-pNez-$?+DJ7OPH3*n(LlsnFNx@=Z&bD$TeN=Lxk1T16SjuD$(X#=KaIjvo()W?% zZRflyb_0FZAs_ZO)KK3$fn`0O-Fea`8Np=o3M9G4*yD2DYFj7QEwV45pj2-Mg)yQ^ zx$R5d_~RetqD0^Omas3O68a5?h^sc)@#GbpGWu8`5M;2BXc4kpus{L~3DC6Hhr z?Bi+nK?{PXlb=`x1DW8TSOIl7Z6V4OM1h5!Jetd z&?2M{CAdC0J3^U@`t7OT=@N`ra;VR1$1*jy*$gF-6_es;nq^w?Wl1G@n-TQQtx{7d zaS;ej_8!~YOl(REOl+rq!I{`{`zr?0;V}MBAMXrNcha!;?rVNM`Xw;MT}`w1GW~b4 z+Gao_D1p4m0Q!_4g{p`Hldv)BrW=Ea?Vu+CUJ1tJ^i}5nI!C9M{^XbiR|003e$DEs z#L|f=nvxbkImDDGIX{>M{gbf@_{OLf@4y2MFs%E|7&V!^#m1B+6seH322pE=yow^ zlS4J7#FC~4fp)fmXwaM}v7}%zXj`nol0GWA(8vB|Rs4h^ar=fvvRIkox!4#bXuj7S zKy&=Q#n3F+DgO24y;-m+n8@3Pf{hYOhFCle^M=MAB^QQRJPoslYD$SEO%0lc>Y+$O zi6sS#r(vEoSTYStF7&bg6Olaiw|fWe$4r<_)i*e;W}(+&ENmS+n>P4Syg}hc-k~=+7c!#17%MkK%gvI23G@IB19i=5O6luuto60xY)Q}ockWe+2bPJib(@(MnRBP#+&-jaMR%a-38m%k(fb!EVrYleoH zl5@Q&z=Kko)It4Ma(;>Yb-ZpUJW%2wPz}I?aYGeU;-G?scrbJ5Q7O5wkFhKsR1MXX z5(hOEE5w6^fPWAkC~;81LOkfPa)aQg%XfRUKbm4RUYm(@Yy?H5 z(#0-Nw~xBoa3}UmqWGzIBbSfBkP(~WcO%zNEl;G`-!XdsILW_4DZOcju+PKpQ07gB znu$L07j7Ml9A30O(%D2pon56S_j>Eq8h_JYjURxN(WA3M%`Mz#m@84pas`OhPl>{% zXmYcXv%||u#bNKBJI$2Aj3g*(hs~UmlagkPZFH9HuzqwTCkcmW!h4_!jZ z+5R!8d^E1GA_GXh5(mxn05q;1s-O}F6)Z&Kn3WrZB1$goV=Rlt%|kV%#6eBP3emWA zsDeryRIm_@XIi;IeN=L;kG-#&4h}+Q$=s)YFpEd$ceoAPDLV&PWO)KCnmcsuO3u}u zMed)R`YF+;_t#nE_5$h}qTo){k-t7XFkS*rLZpC|Fh3ZwPq_p$=TMx>paH3cIXmH&M%R_64qOh0V_d? zgOFvwO6VV|pb`faEL;giK!2$9tx3sS-}#&Caw{^Rk4hZWRIG3%R18&6iGvCju7qkU zH)tg&IoHSD=S6ozWP81lS$5-^x+PK<7^BCFKjElI^dFkk)|(-WjnMK5!7d&B+zlZL zj@rR7d*`;OkV?je?xB)%JuJYD=Ala{Iln|cZnRpF0dQC1An*;qjhRCgRN|n5g}Bjf zdLFuDPeI9o zIa@n)2_@&+D&%bIt;m2mQ{tdu4Vbh3p$aN-P{G1ED`FK4wVt&&wzQtD$bdeUtH8h$ zu>o^dF;qb%4k}nUXVq42(3~kb*GELJYN_2#<7^sGXKf@@8?0iVW71D}zasFOhKhZ@ z(uXWzU-DG!dWQg1%U9QWdcsXQwrQB*2aTXMbnz0UBg@+!d#wqD9K!q>=A!&fDo_%1-~={NE8E zQ3cz~=|w`(BC#!Xdr~#j)^`m7BU2KdaUFJhLR(IIm4JR3xKqx#1DIgyVZ8_M4G+n5m3tGc{jzgck+*Gm#UvJA_ZgMt z=D{S0Z^nHF9Uz*2%S$U~nj@n1*`Pj;G#SNO#6uKo3qDXk`YrC1f;df(8Njl}zwdhU zS$eLnrdC5}u0AW2&@LIJO@iFGti-XG`3@*vJkYzzF6O)>?`w`MxCjm3R6Fv@lMQz$ z=A!EX?fT;U4OROagK&or2jLFqpUq(>?km@i#GT}D`FRQ)(rmjkE9vUV<;5!pIPF+& z4jvL7z{6Qztk7S_fVhWi)ioXM@(hl4AsjQf9X_)H$G+TxhyR!>Cj8%u_*XEg&aLmo zmDM;e2CTl<^iO?B!*uOTcD`prx`tc^k;p z*J%EPEi6&i$spA&ZE!1{SUs=*M&8Xnz>h_8&s=*qQKdPvzIz1C(N;0DqxDS~meq1# z_aMdMwI3v}%J2MdNz7;3%Xr5t8Xi58r-Td}`X!%e_wkAJRAnX_W5~v_WdL}Ko7T{$ z^0{Q|V=5@|BdZKAYIFG^6Gp;J4R&y{5O)mnI@``eo=a?n@SGdGi?k|ze()5#C%bWF z=2F@HsV9IJO~er>YjCL2;x8b+V8B$v%gN?2sM$aESx_s8>exc}OTh-&01oH&uH1+y zs^jMD?44W8jbv|gJzmy{>bO}^9XIDib!_oh9&d6}A*GO$k$k5dA(TWb!zGHtl)fv+xZv4ZRi>kNl38@CN?Bz* z8%9c@^{qKe7I9(~=0!BKc&yGB$60tqY?cqJn2pt3&y_QZvd5>|Ko|4K4m2>GA^wT` z_^bSnlFri6S1uN12ts>&_lbba2-^aAQV8dtcTpfu8fT~XITM2uW&b(Qx71%Ra`dL! zKfzULjfrg2lq&bfx*7vY?)FtfRTXSa5XLaj&I_%{z9&a?{_#s}T@^!aUy+?$e9eEH z7Eae4(C)r#aF~|T%nypOnW`5(3GK+Qr@8@QHp5Syd>R;Ovn^~r7in|y8B!3g_77FF zVp*`x!Z8k54hC?+)r?OD0|LL@9ZQ-mMsL=$EOtnRzNNIe602Ik5)N3^IDAX3uLm`E#*NkpD_jt-K9;jzk@T?A=HNi8+ zlb$AcsHes<*DF>^llO+&Ow@HBF!8B+V~~7rC!hZg4jZ)R733!Vw?2JIaU&7a#-^Lj z&O~Q{Gm3-dh_MC6mW%K*NDbaxcVl55i!jR>jsN;5pJe_j>d|{#3A+z>VL>scl<8Hr zg37d1naXIVcULk6HEaxOxHJ3lLyV4`eV+Q1umE*r4r0K~Uy-+Si1}TQewE5BH}2ytB(-BEdi^gT zABb`4OqvpleEt~EE+OCKc3_n}L{3;H52v0~{7Ym+Hf5wmWP;y)}|Oe4i9UL#vwe$CXc3iB8&lO06ywZe-{?}j7Vlj@Ow&t*?g zZHMI#{ZlfE`H~qN!geBXigZ0mW3|sD_r!}(tNCu-+$^+N;eY!h{Ghzm`%^a0jt>Hl zFyQQSj49-Ve1~kT@xM#pV6rIO>_>Q>7UoT(3JYM%xg85rAiRa_+-4aa=~^x%Vf>Ox z1ncb($xd*oSXc4Y}GZSwy;4>lx6)f73aqHM{83& zJ`Y@X{~U1HekzEN8kRku2*2bz9GES~)wLSfbx;G73L4Oz7XdIeeF)&4sD}0~0A9AA ztBJWCwDtK*-C*t}q*M@KI2gqgoXX7Cg%nVBWgc9}MYOTa( zhA|g7xd^?dP&pkfNgia~ZL#@pBxgA14&7x0a5vry3DoYiucG=c<^Nz!5k8@qmN`P;)`_90ou}Nxu~>m3@`D>%Mcqs+sIcfq+e;>W7%T z+!_=rL;6GGrB(RK`%a- z?kafg{h*IlbKhZ#3nLVWKhirw3Y7{=w+n8@Uu0)|)|0HNb;!iW5IiS!1jt|22=YIz z4rxpYwubciVT&1(+|l9o_sOCRDH@dTeI|d6U-5*n4%{$I%8zM1Py=*^6uuzake*^a zivrWkcCG?HsrX90vRb}U&qMnXV#_L`fak|tD?ID-<`M4JTTDwLMp{X!VIcC||U#XL%caiU*>(Sz&OIHIqF zs=PSS-=TyAY<(VD`~K5ovfaDuhr!4^>I~HHGyHiMNiTwl1XHCeo9p#-2PsPO_e3TJ z_ty%_GyGqr;dhGd5X6Q)tHzMyR33TA0sSaD&V4zm@C!Q_Xee6ZK@p!TiNv{zwNtK! zYW&gntKUP$hW?QFX^>TsssA-L^bG${hO6MnZMoRcGf;5*OD~c8RR{v-NP}WS&#@M> zv7s;fGx4}Ma7#xcN2`}xj}6`GPiAOyg{rL%h`;%Q8Jq;?1_Mxa&+IW}Ha7GO|7uG7 zpT>r6bFrZvZfjz9yIKS>8yi|5@}lSEYaXW^mBpx;-#3hMv7tX&j(*2tL%*$GiVaLN%j1B-s9|9E=>PSM z;XLlCqbfLyhY)`YXAD350o-lC8N;bW42Jz>&lq;%ri(K~8unHw&J-%L3&y?8GX}X8 zOh78c9<>Xo(o1{rfz9tGjX@|K{`WPSO_; z+GdWwpP~rr_!&HD^`ERl$Uz$o=@R)_vDLoVpZesrYw6^e9hVxxK- zJVE2H*7&RaMd-f81sHv`8aslMD~7VIy1&vC)i7Qq0GY`yf$p;W5OZ9(St;5jFF z&JCXPcq;#Vo(Wcz^7~bl;B!1Zt5UJp>r~AG#;)hW;Mo&AHH%7L%Tv_|MtWZtRKGrW z`oXh5cy8pW{6zv1%__hDd!ho)t?wpsu1L(Z-%GW5m}0=c8R?v*l^@1{|HMj_Z93Fo z^$w3bShXtV^_xMcW`&ODh_A`JtSFQnTm2{Q3FNcMmmi`fA~S(4#4)!Z@Gpz$oig0N z;XlX<3Ibo(TSP+s+`shPQ4!T$x{!%3Q3OW|)eAyKJlmB_J z7RMT7(5Lvt`Ur!`H!GOD(GmrdzmS0{3Q{Xi7frlAecdQm@JFs-XwsL+4<^4i`3D4( zPx#5-h)J?rM$6~FawZ!`sQ!8b!5^J7VBY(K_l?1`h+Zo=d?`=mzcY9)2%ZarXHW24 z!BhFy>Rk(tr+<~Avk2hxt=8Zmf&IVpx!_;*03gprk~ie|_StS{yIw`|BFPW;SRfWj zUSEPp@>XIlYY;fkpv9!QtFqK9&Y>PA#MMJcl!dC$K!5f@d8EmS-1&jz*$0s^7f3!( zTON9+R)Mo@$O|Xm?9bDBRv>BFT^)|x<6_DGlpR7rEcu)4a=e6<=|%x2uc-nVwi!`A zfn+R*X&`>(-hoVGJFP9QAH|Yi%>r^u<@$SVsi4Z~+s&n1=2G$zEFMOb-!xeZX0?CN zzZe!P2JN`;bzeH0N6%-t)a~+9!(;pCNjjFM%kAp&`_>i|l_G9^2)Nz=U(c8B)NF?YlDeuw|cCdpYpwLSBaA@X#KrGmh;HMLfm@L zdb0s609t`~8_3ZG8Me=|b@4%Fu7MY@04Y~oy``vfEL0vOT+Ay?Y_T> zH#_ktSPtp3BKKueWx3YZLw!KCb&{sXaKNzW{V&OqCg@o`s4n}2&) z33bbo)^Pudu$s25Rg*PyZWaIAx|wrJR=fIQhoSF2jo$W-86I_bC?yoXC@J9s;%@bw zEh1Q2=e;EZxRcEQPR5>WtVRKHXV|=CU$-V&Gtu5}WDVdjJqjwmsajn2lw$wx7i4Yv zX5Vlfr?J%!%-{Z^LRg5wYo#*|)xY&_(mIlb-^%Xatne$KMrL0_jg35n8i97HS<+;)Z0^D%>SH=trF&|# z>dsuH$$aY!4AjVzkl;&^=x1O0C=kTv|5KpYY-X%0GG@e@Sut?;NnhI4mty+T`*Xk` z2~+s1%J&T_pJtW2Q{#7z4W}^nztn#_fna*$)T^@`)t^`8;YXM~WdHM@WQYZ?k0p`L z@6oH^4MF(Fyh$Kv=a~Bq1B{hT_?G|*L-)d;-! zV_2!++sB@7c{X|Z_iay`oZ=vp$U^1-M)Ij!?%oA@eekE7rSr%e2aQ8p#25QY%qY)c zbpaO~IMLv}Bh-%x6;3YCJT}k*aR|NXke60CvnsU1YAD*4yquD)L z+@qBTIV)(E7+T8d9~X5?>YjaUN&S*X-jc$Y*Tu}!b3T)85^C_&lGM9aFtzpsuUf!L zUK>1Z1@pc>c=vgdy=VYQ+4T+s+F;tUi%OK z5o(dfm?fPm)&crUfw@#uJ7{g^q%#(=0bnt%_FrZ(V(b8Yh;CoSg5fN4-6xrc%~a}} zP%aNKS$0y&a4-5TGTf#NWt8u|gbYF9CtcxhWWP12Fjy@FseMLU?d73~)NDf4WRGd8 z{V)79&qS(~0n~ZK7%saU#Mk0fO5=nTSsSV4$z9_ZNsXS4F+qWm)C)3^8Y2^__`<+O zs!j$@HW)3m>RvNC(Ju?M8OF!0_OB&?h~;3-Wv!&tu>Zi<%t~sEgGiF3ESR7A24}??c6@+oH<)k~tYjoOz}=DnS5)R>1W z1m2NW$$_qz&eh#ji@Na_YvULg=s=w%%D{D7{Xe3#n5&;PSyQM)))eYE^>7}wm^IXD z|J47u?k9I?^j11XdK^blOz>a-0qyvrG%3e%>YcpMScW)sOSY|MKcTj?|8EKFWvXLR z%56{F9!5OQZXP%ycBQNMVpTk`V-}HKlVgLsFBpxCSC^~(^Z%xD$*;M-%x|>5d`3mi z=iI%TLrCu#diO3V^@Qp@dtwj01F;%WKvhX+DzlTCMljaSbU7Da?SB(%7wR16>YSxI zR{JmfU7{{n&{tv))rJ-lqmzqfF=5%arF!!M#zG)e3{GDEx=U(iYJxj1yV@k*4)C^{qGG7P6U1bEy52nNvG%SEe2Qs0F4>`3bJYa+*BztCtH!t_h{~Jtz4(~ z8hxfAgikg;YgLL*hVtP-Z7rW_-B*DE4ny zw`{(T%oh5H%;NE`5L4&yY8tvAXJ9g#tT1+c9~|Z?H|u# z7A+KN>Ck$Gzxourl+cs##%jIquMZ{t9kJ43iEb>Z9!pmAcf?CG*h^&(lyGETkjY!D zrnAm5?XH>#cj@3u8O_;C8GG+)^Rp|D?EH-C_+lv-iMnWwKjsJG2EooXE2-!!t;uO9cYogSw(}l(R^PuE zu_68pSvS5the-95%4z5;5IfdE&LvNsI860jk5lMq+6u(~LI}Hd*!>*nFfa~0MtZ}v zbz&Jue@n?sxoU3vLPD&F`4)qW!Mz@Zn=P7ydqrU6ZA74oN9sQA%Ct?&t7qa<_L1T{ zWmCJ+X(&K=U%9IhY}&-MIri%lga z!ZUt`mJ*%JM87G*wgX=;feGPDS(%oywhMgU43cE!I>4--u(_nu9cLM7qAKyy>#v?`X^X zE*{xs4iRkf>iHU794JF${*#x0PxQA`ON*TuU=XKeTuSkG`~~AOL~yqu{2f>`*bD_p zcPh`D2;+0TsinG*r&`j{Gq_5iD(v$mi%gn|ZZLRBfju5qz;@aW=LmxVuknAjcqmBS z89=IsVSNfnDO;9>WZCNwVB*#qT`aqC2Ln?Fk1Uv+VmN@*CK#KBGMD`R9Tz)bmFIwk ze=e)(Ca0|Y*Zds3q*?S|#@HqYuQ`I(L(1deHP^wb@;?q<_W7s>fEThbd*?UG^SZ_U zAue2|+rf29(Ce@#3}|cJdR%d{wH|!V7cdGTpe5T{H|g5`NY@Xk&^2~_eq-*0Fn~c< z0D}dB!F;Z;sR!foVW2O9k`nzFf0lzmzY<>9m=A*)N?N2m4hAz-5&C&Tc&G~d{23P2 zT)XJet+u^)(}@v*SHzBW=svixkw}*uiU5=7t}p7l-m*>)vyL8|^@uR*8J6|*FzcAX zS^v`()OwI*jfGjq7G|A72UZ1Hjr!$@dxAD(U#l2ipkp5`_+C?Ag)iwW;73LZW_hNQ zDA#ATzK4CmL0me9>=KWDka#aHNH05#Nu6E%5{l6W!?en95 z2HZ`Pj;oAxzExtgapS)oacfr#U%Q3UB5rzfTS`x~@<)FTSL}x5X9g3vhT09uLu?J6 zB*MmqVWipTAZBFB`*s{$AVIC%R9=Hsm2P5hfgH|)+jzMXpRFzOZ_{6g+`lL*fN@QL z*?R;)uJIp3jU=>Qt09JT5GeuEe^UH0=sZF?xK94R#C#GRdrI*oO&XFo~1IBseq;k`Ky31JCFoUl0HX<`w`Gp8|m7 z*%0ZTzI%Tq2a4p|Mr@2mH~%Hm;%eB|&P6AVq9m zAl30i##;*3Of4;5nj%j2sPvh`0d%IEj9}FqO_+Kmi z-!C!%50F=cilL_kTg(7>WcqXf%u;3)?vPtB-i9Qjy}XGjIleP$OdbrK#w)c{Rp&VrEYc|40uAmFkVA?7bje_WU{WD)T*57n9607F&xy+8z%k!}YaQD zhWdqIs7mrDpR1ut7Q;4wMbH<05$06**GYT|#u?K%XLDC8H_jT3^Bm=IAaV45uDwyDNUYb8_MpxqjetFWZ6Noi%G2TKl4+&$|@}$0}T%AkZs$8ckzP+ z?{k9p^}+jGdoPv=E6_#1Tyoh=n5eeZD>KdPr`RYa1yg-x)SBU#FgZ9!byxJ+`Bre+ z`It7TGZTb&Z?5pxO|Fl9`YouZ>gQ7pdqVbuU#VbU$X4u?a7U+u-*Ra( zDg-A$QVqbK6)3b>KPKS;O{d<D~7!hMiVJyPotB>(z^OEh_2mZF8U(8Wlb* zTeNm67q$ErY(t$n@?br(hQs zOOB}To=q(yDyb>cT*b*Dhg(?Hq~}u@C_YhaP+Z0%fMU6N7eKMq$c-B!@ z`+ViyptxJJHU#ECus8s<%G^Z9V&(>sg>p{6HpLk*LOcV07VaD7_C?$*d_okMx!mY& z!B~%lBa~#})Uaq`QlwlE7%=DQQ@ka0-LY}`c-*djLJzs(%&@v!N}-3Q8pM3r++p1XZkXCas%Zd~dQzAw0()s_@l_qBwvjr^9BP;uFiMDq z+9jznSwnIv@uiDUVwp8VY!L*Vfj!}mKT_xROHx>dtLb#K^C3*#|004cTg=rDa{O(# zyUk=*h*+aP)pAJzNtvlvsrGckA+3i7AY(?oy>Ti?X+9 zAju}vrsGA}fMu`&6n!U4z0@qQRLC6{SFfM2EMRPdTaGaw-l6_c>CtuGibhNfxpz3p zb#v7sl;!(ck+?a)aG&oDMscq`Z->DV2W64Y1)vKjEj{$KDAM(7-e65T?x33NPWb5p zC&NuOVtG?H>8k$ZNp+L1>`%t(CZ+n5$JR}{x<7fOlw}o--WstBNAhF->K%X+_GG&{ z8155v?r^nUOkJ$d2}QO-D|r|;IlO7LBcKV>HhNRudsx0UCM+NONJxlU{f9aoA!-#N z8taz8hor3%C93PbuM|A7Yddy#MOr*F6cP(RdAKQpkxHW*nJ5{5jLSs7e}Sf2^E@Hw zqxZlk1IbdtOd)1{9b$BSDj-C4P$GlHvBH8GqI*c+S)%d&w^^4uQ7BsN3{7@&B3Vulv&Jsk-2oBmH|0CR_ zd|TGa6~atJQfVYWoqi&{LR=K^Rj3mXb=J#Btue$#9am(UW0I>PUDv1(%wOW9B=eqQh%wVhC0-SzraU}c)i?Tp~}*(@)~ zZ@LYWEJp-c4tDMIWph11uCV%g=!$Fo_MmK)#42vBTJ=FEF3;wgO|GuzuQ^ML1_@V& z4=kDrRT1-hJn%aZ9D}Xh?45 zNl-4Sje`E8%2S|@sKPs!O4#Q~zt9BJibP#q|J(PjP#y8HpmI4-F{bGh^4o@p>S?I` zI6K%MZ?eIDk4N5MTisx12ZL?(AH?0ey3wz0g&Sg4A_Un8FRQa%v0d-R)>$KheQ1Hyf)91!gDlG_XjW!HURox7SxUgre&U}D#+ zBP_}X{$Ox2+}CHnIc1&5=`y!Sc(jF7k-AB(fo2S-l(>dBzn|BzomGxxzS^*?Nf_ri zpuxdoMF5ZadP0F>f|wHhi@S2bC{o8RdNCguGX#v7@;G43binx4N(T)4d_OZ~lsd$> zM3ziHdYcU!HP#!_J=aV3d}+7_Pcr=A^gr*61LQP)`~b4e3Gb@H6W)uZwSOZ^q~3qe zCgM#V*@-}mawxLyGY%dt{w|oqibxq8zz>59@Ic?q_%W}5aYFm@vo?i z?izC;>PK$=rmO|R7JJ*A?ZDk!R1lQr2y1t|h8Yl;^d^LE6ET{5hd~JP@p0C00M?h^ zWw5O{I8k#%pL2yl6n`jeqk%xhYR6chk{8WLxdR7O|n&24=o(Z1eeU0WIZC>!4A3X02o(qEKLZ0xR z9v+%5W%pltjp@oA^xSCxI#)aSmHyA}wMlb(i@Hf)=yz8N)iwVj%4xaIvjQvq-`x{V z@IRBRgMwKW2bz#S)g1igO?4lWT998Tsd_d0AZt!U96bAX1RV(WKifnA;u7b)L$A+7 z?>yCIgWivy-|u1X)G3{cZP`wM;g=_%=hgn7 zuNNTQ&D({1Z%=qwMnhOK(P=ai7-Ao2sauoxu}Hq9?`(u~L02c>Y{}XGpQ0+LYgg*( z_-MP-=)i!vZ@UM~uq%3gbKrNTdMmYO7R!-XwBw_)E6aO#0~YQI7^Bdn_nX~){W z$wu$@{F_nblb=Ms?=Xqsc?8IuXK?~$$XD8YZ#m|Tnii91!Nu?;i=QBIuR!GWkO!+DryiNFNY4qM{^j?OC$KN!bbu16@ zEG-%eh1>QTNpeQs_@KGwnsJu?{dTs|KaBFQ#YdZR*mFb(XX}Vnc=T9qFFJ$a`Okod zA0YHrOYcR6PRFg~mp*Hlbleb56x<6ao(z(f;S;8y013g;dpU9CPI`ZnITrQ<# zRSn)3`S<6y7xQlMmpciB;T$N=%1QSQ`EKl&Qgn-iMw=m&KVXEJhEcP*;s zz;{xCj#)OR#0|*meBwHIYo{O5`pgIrrj*mRMsHIhedykA2u09zmh8+gu%t1q%`}cB zRKz}f)aTGAFa$;RQubHF)T}aEscT$nV|oUaTnfZ2?*n1pKp8EaX7@2dKeeJuV{*re zBDcR0#q$ATyZR9Si{OWs5;=VR`Cd+)_ZgjJSm)BwVRxcVe8{PwSNqd`8JLPI^nq5% z#OHg9s9|f0&4e$%#iq2)Q*4f(xlP4py|>C4xQ5-)aY%F=bZ6pYb?L7a*FGX8=Yo?% zCFjwggKh}_>W-n5oH+Gd6S?VUbk=b72mAMMm zP<{V`bghe6p!#0pUr8KcIVkN2z94?06%ZU#N84Q`)ZZxK8&PyKM`*kIF4WR@aAlQa zhL(ubqv3XtG);4;6}Li)aPHLj|M1U29p`PF_*m^D$%IqsEkF~6DRQ367CowtGC)&2pqL3WI4JAX%^^aaE5S2Q9S;cszrbY1N$SWl9U z!`n#bxB1b)Y2~EJ?d0k(tD15FMAvx zc!q$%Z8mVP&U=PybdBDl4e560ZG3rhm+Vct?c{E}cx6L}kGJvogStQ0NUb9i6IRxH zPuJBxgU9h%wss)Ofq&bFt!*B7-reUYwTP~^c1&Cz`RXiZe0`0-;zU1yz^3JX$u^NPE?#>7vX^+TqQ!TL8%IIol1p|5GvX`Fd|%qlX;1n4p2FQQE*2^?fPm_S=*8 zdih*_$9X-y8e}AI(>C} zGChs8PbYV8@Sbk0U3bNf6m0Mw_jjn_>UFt&3@t9({gsV#1?+YgW1cK4rfe!hVhW zzw6gE$84ov32%v_YXy>ibqPp<)Yb;(gysR`Ae=vzjiw`<6=cEQ1%WE=ake}8RDCjI zfqH)BDXI`qWfpLFVQPg--K{XS%B2nHLxn*4AOm&`G2N)wCnLH8Ig5f=v+nR#3`B zw-D@rA$Z9znPw= zZ>qef-&ZQ?=yf=dkocOidb#sW-B##tMYd` zKLD;1x$;qO063h?m7gIu7^ZM|&~}w3ZKl7gYrEv~3hg>Q z%p8;<*R&>nt$^bu{)FQ-@f(@=)Nc5r=gsS9(j#5HzyQ+G`zTL`^2Em4FH^3No-+J+hs3gK!1;~;cuDyVcF5( zSFiX4oBZTxLVrcNriwPo-QF3KHOnEo!;PP3lpslvPtNCzA0I+KTkij#VfxU>f$@-c zQ>6&F1cB)Y5oSlmdtlQM%Wm*52=CKo8+VQX?M;+Iv$1HB9^`_ zh7G&@2r@gWof5xKq|2U@;GS8o0Kj`EYCpM}C|8W-@BVF8sj=L?QHcqg`qns+phi2# znD&4mMNT+?6~phG*_*qG+SuJ%5kC`s#R5aHlHWg{WpwjNnfSc-k@qg5P_Pf&eYB*$ zNS7&!((Z%EwKWr6T`P^~dKo&j1X#ZxNyudS?t8?xLjs)+=v>0rNtoO5I7S0( z<9|d>c4_0B?70JWYR8I7Qdg`uLXn5~SHuJ)Chc_qs*U7W?<0B@Gl4ei`C=}4GSO3x zvmNAU&0Mp$j62H^F@5r@;p#N9{lgL;+1bQ;xov?hOJn-bYq)l0dd!*DkrX|cP7lnZ zWu!|xSJzj7?`Kbt-1tZM0ly*m!dr;vm)wpiqv$<}= zPN|WtqTRA@k)@|savG1U%o85nl-0VAN9KP7EQziUBAxfp1$_KPI&T-o$ujT9`r#aT zRr}i+k4;B?yO_l`#{W=^A^%*cTKH4tFMIFfOlMEz7M4&TNaSmn2l%ESixX)=&%y<^ zGM&#S8&r!Ei}JD*5YXINQC72DPz&yfcgPJT=Eser5r6YrB9o%6hr6K&6v!Acm$>=e zym2@RxuqVcjAVtp?>YYSe>R9lEm4qX4!G;js?|$ByRy{(4T#>PR%!n#bWpUnYNzT` zWa||jVSFOrYxBTa{1j90ZR&66J`!(3^$?mo577T>U2e}r_@QQhYlyY&E@`wgMUdN| z#m#x~W@F+eG3_^M+D6o$0=8$WLx-l%NP(H!G!%%nyf(bHG*h(Dro zSauDV^y2i~@&;Rgn;^#+yU)`r{iN;^%m6y5r$u^jE+_IDcpDGh!CiNxZDcu@L=w(K zzs2i9ZSwo@B5OC~tNjbCWAw4wzh~penH$$>5!pJ!dnYNx@lEjRl=$X`DuJZ=pJpJfES z|K(4|9mW)Zg*yra9N}#Pn2uiNkxSrVO5YZTHz7=Z06fIQO`p!i6EM_$Qxe4s4q;5JolVKU2jQgt_4?dB1x1a0L&CjK-=0l$Us3F~hj9luvW(=UlXwe^2u7DgHgpzrQKwWCbA|*2W*Gfc5-gI2q?G ztE;@Mq^bL&6`AP2swI#wN$r}6{_ryb+8Q*3!&vM{VubJlY7mt~_o=Ac_u+eb2A6`4 zX2Kp6vekJ@b?8Smdl*Xf%Le4nb?GS|O5$CS=$=}^`H^cOd0V5ZN}v9rOak_yV(9rl zgKyu+L|>+MN>&6FK5m^^XQ$^EA`Aaj^vBg%g%xM?8?I!evyP9l8}^nto4)AG@XNt` zSw3o<`q}+OG~O4KYPQ+&Nw&Z73r^l?=QC)JjPn%^@Nl+KAlEznp0s;jL#T}FIb7&! z%D8J0STadAZ%|!QB-<=BYS`2_K$MAw2AJa#2R26mXSJZJ4I=qgHq_h(z zcH|4=M*j!;G6M6x-C0HMB!w~Y(-{w#_D2BR11eH3>X7iSapIDllm^~ROjK|7FL26= zwOSy3IK2mj4-|Q}UE-D(Zz|n)#I~|I&RFJ50KRwzCwFe4K^F@A@eDaW_**j~q_nCU zX7bCqAtq0^Q|7$k{n&|6>NO{Mml8VBI2EQ8^?+&HgSkC)bpFWc^wRB(Vxk1_iCkB0 zPn12t4SBM53(^6OL+o`PSj-B!4-?}AO4=$^q_CvS5D&qjInQ3YH8A@a8@2AIrDqxMMN(0*|syANqhXQzaBDogM0 zhZx6cMXQiJ;sJS^%0$P1x+bR4#5Ou&lia(nXa!V@U|lE$H~@T#l@-W?VVn0dyiYN# zXIP6(-V$3y{?n=k;uQ=Jq|iBF{^&MLu+eeL5pR#@bEfPD82eO>^QR?uZq78?BnqK!+ei|^zq(r0!q>5QgyWEMKZnnxaU;tJbJMOnzAEG`` z8ap1?mq9z)(s3DEWnF2fM-Sx)pa-Al6Um zBJP(beYHHrVf3y#naD(cb}&`=eTngxy88*O0@ujx1U5{_!@a>!vD;K6J_ zi&kb?D`bT`sNhgT`t)`3n3V)79UJ$Lbhd!SnPnXtkBD?OX>o0w2xqY$dqp~H`Qg@= zNNR=u4v`5WRi-{+m-24p`mdBHyvxTWI}9yMnF! zb`6O~UM{voP7^yemR_+RgrYPP-4~9~Xc9}Lvqy;HoyuOn6tYpJ3r^1yUeeKf@9diN ziR>0f#2V6#i%T<)w{iA0wK~BmXZNYFkKS>_Rlep8mnOpCQAr()g_+vkIf4L&6_71h zA_clc+$Sf?73E1|N!5j0JXspC{8pkPdI|!e(Frl$W-;C!J}<_LTOGJAgmci9X3nP@hjI@WdWS11Do0JrXrZru z(F8NPE!mT(w*&?JVDYeIso2>~=Lmu*IHZ@#qvIxjO*5`;yDIY#=&u!{WusTJoS!-r-Z2m- z)>Ns^$qPvCp8RM2iY!)P3-bHP_t+b{js$idaAi~ooLS@a(MvGvanLfxAl&!V>+ZY8 z<&Dln*IQSwWsa{!z($nmMp)^-7L2&IhJP{sB@kW(L$;el6SHNPRRftFfs>D%^RY^> zHah`hKbM_=0U}LqeseP*Jr`{V{0DDu@b(X8&0%jc`OnXAdemtu0gc1|!?A7-{z+>c zhklQ*!y;W>yiA(>Ltc`n`mt#sm{;-`Z-U}3f?}D+TPE6dph5Dt`s9^7Q;_3Jmg6Fq z<1f5)Pd>@zJEkCC-161Be0y5HeeLgd{LRhGj`sHd-^`q(3D@Z_<_BZgS0A8WGfC-^ zBX85sVmBvwyW(JvW^yX~l*f{v(fW)9R14>StP?uNN{ug+;OFCLPeLx#rwkxk)$7STe zs_4t4+m2+D@^wQPWmPMhY}73sy^su?L%6T-p`PT7;L8Q}< ze(kd?TIp09BsD?_@ZE?8)+V?mD0)yDR|%C$fp;%t$%CUeVGSKCuHB@D5xgV;ng&C?*_ncU0cj5sIT3SIzn5b)rqvT z<_lduxbx=Vni=p+_=%~)XtWZ2N7qfdzCTs{Da)0IrXSih#%O>%8TI!{m^bT@@< zdQ-XI71v&Vqt4~!NPJ??q^VfrZ3@QHT$fIiYAH7>9FX#V21aP6g~(+ggm}L&`dvT{p4p&&DvcLKdJ{=>)|!^73sv7?k2cRAl|nLW!tT}ob~fu-Z2`M z%1Vee)4%!82oo6MLjGvL+VvxykJ@*$NObnsB6GoE)a+){N3E5dKYAD2;ey1B;R%29 zpRhj65-B&bOXb;$;f-W?c9L>$1#`w!&udCwS`WZ7)9WYAM#OuB#aCba9?k%UN4~K_ zhnSdLWNrAE#1AE8#veG5Q}Q}?qOCT=Xq@qHJ05b&nfmUjGvcP(mPWu1hgvhy8Tu#}1;s4- zn6OAE)?eNSD#8)qevrU|Izb|ll+=(O#flBRwi0P9?slO zf(WQbRYJ)MeQSdbxNo~f7F}G~Hs*>QKERe}cybJ5KZL;*^^JfH9-;!Mq*nRG`>0=L#E`|8SMuUYQ1o*Z~Bh|9tZ zC$iiJ&(wEMYU+Nl9p1}>>%Mx-b&q-OfwRvHwTgmr?pw6TNN)PnSSEViUUU_9gx823 z5!E~S%=+|YK45ymIL_ue52I0W3wBvLNsI0!$m#qP!DO8|{<;#DwIR~^-{GR=%k}&F zJ+=&GVUh5zLtH)@rk1-uJyTw}N*Sh}x|E>jxZqh4Jav^Pye?H8q|FGPGlOSa@N5sB zb9h4X=JF7$QFed9??tSj7Dn+PjS#Wu-RmUnI4bDx$PC&!XQ|3zsRBR#0x=0h#>t~p z|M5QTzSm`6KToBCPSKEZ3gawyHO!)c<8MqLUNAH1?XNQk(1d z_?RbheDaEd*_~aUC(mRhj?`?EI5XT`jLdks`4cn>@UY94vL#&YmTwf>r?gP46Wg2jaKODAG-%V4%!m|6C3z; zP|;jN;=U4lNFoaM+}!MRl8|#-0GSqc?jq;N8RCI>;SFm+Vy1bj++VCjNFOfxzT*M1 z+re9HtcJh|f))x+MASK36%*)s;i}l4l!SM_R)q}b;}1Ba7M7?!FuIF%in7C=kkO5{ zjGm&dj*SE(dW;{4U1uTPCcNmWJTjj}J>r~p5mrOHf~WEH=l5g2tp2tL>{oSUc1@k9 z6)<1r9nR$Bf_c^|l94^JTp*L5VSGB+p*Jmpb-NP3nPAY0nQ^h4b$Dyl(sy@cVs^#^ z+uci;wwYc(;ooxwcMrM`sT}BgCZB;DVE>gzNPmbAIIgt)UDbLRIjip@tQKx&ICx?S z|0+E(czt zjURtvfVll@G8ij}-9e^2cB1iteUYvzD1L}tX`HoDDnRkKc0$~&&=QDg#1NIQ~U+qa-7EIb~cW;^fm_f$>1^Cl%hjzh0$og z!*UI{%|gdmdfa1$d#rVjbv)wfsbip9rL+S#^4*7i_u#NvEUJhF#iNu5IYrrc<2tz# zo86A&z6&Sm5r(ia$Y(Rrt^bRn}(npFUc< zmgITjM@#6O_|c4DZy6E@B&0)Jlg5!^jw8h!N4k_ka3s2ZDX^4bGHtC_TX%B5BW_l6 zI-)FDG?BzE$<{W9h?>7d?-L<@^_9ubRXg=J>Le}`{dh+#?Q{o6 zAxE<6=s^|SLUsRK2eW)Af%$F8CcHU#(Jy$|)*V*j@^d7)NQgI@sZQsukPle1ji_?9f>kWZB_N z#|{_ms!w2}}h2R`ogvPvm_N0_Hnk-WEp;pk`cgd>&W4`Y0e%U;CdFZYP{XvRnog zHfsWwzwDP<<>5M92v=Tc-}5+UU!42{IA)$hF7$#rF}&do)u+9fc$o1@Ijr>F;S5h| zL3!OOE7vID!O975c;esUsMnTbBpm5Hjs*kD<|q5>rIF6@yoVx6?F(7Q;pehq5CIcT z>%uP-Upfrr&kWYbOzqba-S@bwsyx>R?|$&?51t!&(pe#!6#)dAR{u|T7(hA$hQNwr zv#?;L+boDl_`3pAHVfKDXy3Ea|FXF-vJH2_|IK-#rqX}WKW`+XR{H73+ij{4|1C+NFTTi&(q7{h!X;jl&BlyyPyTo^oig69gJ z6j{q79JY%158ZCVMuiym`Jaz#%(9j{AnbEnFyLz#V_*Z@<}Z0MH{hDE@Xvz6HGc2J zV8CJFdHCG20k`=LG}<>-jkNibtpiN-ZjNfAdd+j5AyCAG8(q(ej0ZRr%6{L$-B3Wy zu{Ll_nqykKrXSCs>AS~JF2L+t&D#hVEriXT-3Bq;OeIw1@R#+7&uPb(;99bAkn-=O zGGV4M%$5FV^Opt=%Y()ZfKnDB&Vxqs%OU=vWe*+S>%0@xU|t1l?UptA3ru=-=rpmk zsA$8wJ)YX{9i43KJ|sBkO+^vyq`qSv2>~$&*FFItU>Ni@9||@CS>kJ0Ig z4{A3P7sNxC?Gs8f%Q64;6C|FjmxwrOVy0K~mX#1=w4HUZJE+;KXf`PIV@d^{D_Z@7 z3E!xr@s>vX9rZAl`*ZT`! zmw4c-iz6mx`l^v#V|^nh_RzanvHn(YvvyGT)@=7thPCk6ew(nuS1YUhZ(xNDy2%pZ z-}35(n(+z$G7^obwEFMehGHhOG;R{&D9|^=mO9klPPs0*@Tb%)oauTJg5t2ymP{gV z$p}a6=-!3Q&^Gc#&U~e3))GO_jGdnJ%tQHAWla@$R-La&fkW9f1?PjDYnk;#nC(bZ zaQrp1ym8VMTxe?nhyUtS&rkR}954L9^pN8aF~r76SC5l9%o_i5cnZ)Jx2`ct_Lgcb ztn?33{&aNin~rujXU?t=Q>>STURv|q7=x1-r{Z->@kwmSNMNFNOWwMN#|tUTQ z9ckNzSicT(zBG#E=H0BDLvvI2SK9eEhktYVH;;ew^RA`M5<|<{YOJ6j+Nqd3wNF~Z2Or;40 zWrt4J0vE1FOPmB@zInTCsjlatEtTCt|BHDsg)JmJM|`|Qf94Tj8Hbt;Pi**CA`;_t zX@&nFOQF#W1|yxc?ZB_5+E*i;XQ`-?gefZT6$!bV^wu$Ba_`OjsMazjS)-cIE5{@tH6kPZ4h-vGk4D zqh}8;=Pym2&09n5`$kpSh5c2yQ=6=;l9GR#B3U9;osan<;CzTqdN17Mj z>Mc$dcL?dfJr9=bz1KH}fyKS|>(iGE(=L7CM3MOSBc1B79UA9u!Y(a5GY-7^LQ}JJ zq!5)1ZT4oMy-VQdZgqV909J>ijhE+sUd&H0h(q%KwKc}g|G3Y_9f09^w+sI2@Vub9 z9N7WKKW2EYM?Rj>R=J-q=qK>_zv)Tl`^MDAEC?$T~T z^WnaXfAA^-#&kEc$!@M*9;XjBkHAA~e2DM%fuKN(MY-TxfWk8tbfCZ`%*_@lLNAY=4WtjIRK-euMBB!M zI1;zQa+eW+NpAS9!50+x=Ck?v8x&VMmbE-$+J6*Exl zIFMI`RMvF_^^JjZk>&Pcam|%%f>UoL#$UkhGkYh+E$ScR{vzal1vYzIY5UPn*Y<(i zYJ2YiZDThtv1!o#7>5!kn;|5dU142BLlhwi9H%mDflBknj9~oQL3EiEFkk88Z4?kl zI=xbCScblvm!6!`av z^Chr!_Gk>Oj!jJXuS%?ZOZ(e7cw2!yDm$$g-k!_2S13jZX|$!eF*=1>_W_+^%d z?wcJ+b>3~dj@)ggpr6Qn()N$D_}4vfZxkHo{Uod4(EW3K3dp0tk^F0wL%%6iB7HOb z9=24Z)xeoWr}T&0{>R;o#&?wWQSY5%xnykhzrRA)_#<8ONWsU#_BcX?78za7*BX;IzzM-cDk>)g)xGjpX`2#e z;mApQ{SxUqa6(Ys+ou)49%H_qb6k0Qmn#d0^u?;BD!w_gB z^HAN#6%u)vNtgZl*T{9z?=YfF)U&c07fp{cCkLtR%)vo*_fe1kMslEN8{Q^HW}BPQi~&VC^QH5(&j&3n;?`uqS)s zCG;lQ8`$ppwV_ca`r!v3N|$uuc#btRCuHY@P#;+|ptvYYD^+}2i1m8c|Xi9;tEn^ zx}CP^PnM>q4C~eQ4oE%6w#<)0k-UBx^erHDIul!wiMEiLDTy;yE!B!eMPLIFo&38& z$l7-!ot@RrPlIZ8kUL$KJ+Df^;uTb(^RuW4)7KK*T;h<$EI@5`uq| z41HMKQaOIsRE$kb**rYk;opwe2Z+Ya3b=fO%00Q!*5r%i_~1q5*hs>ItVM3d3U@U| z;cmQ&XU@h!zz99VWNCA_*VV1Y9v9Mak_*nq72wa)h_0 zuhj4{Ufh$es~%pv^y(A1cQUs2{VT^#k9Y5!%q**Y|B6u$O6us_6;qk?c1gUGPWXqv zJ%g%UKD#(_|GL_@l96IWvA#yzKqrRnEDiDi&pE35zi-NN3;u9mR@RN*$GSQvhV@0kra$3sI z^tr{uEh-%H%XZLuZM5n6OlnLa-y9E9|DyM_`G;NMdsw;vt~$j~!;SB1|8d&z){*~^ zzWuxvjxU|A=)=tAZj-OfkQYzZyEtB%IY~mdn@S${}(c942eYBGR z+5luM)OKazi5^U+lP;VdM7*uS-RbYxx2U0`G}C}E+{ocPdaquNFdI55D|vt11hxil zd90&-g|$rWNBjV9Y?H@r`lbE>tVpFMIlE#W``%@OJI03V109PNNlfep3j@tB_xjxg z=j0Kwl9+aB8lu+d^H~~P5s2P(m!+td`&qi$R7pNW3%oewcBsYva4 z!$;MrqM|EzPABm7xF4B179Wx5I3bg~3j|}?HirUzp-+p@=aO{>htWQ+4&rt_1U=yL z*m_mk(YmgPV11jdGk&e8D6y|}Vyr>?gSdC{;Pc-sqZ5|t?|SOeVY(G#dCc+&h=^0K1GotIu>-QYEY+^^=CWvwE7ox z>USh>rBjZc;DOY8s?mG4uJ-Y(O43u#?mH#!JsHOp?1V=eFT%*Ip?EDWS}$6G2sCSl zru2v%ZXB^ge9j2AbiKo_d3Q>BXY?*T4cb=e-Nr4?eAd5-iC7@x$MY=MX@H^ViS7@g2yDus=|0|sL6k~8| zc&s)2PwOpSnW*}CHH{_uoS=P@^*;Az=DcsX@7q7VkDrf+WM-b{{XXya`z-gIbI&~&>y5aN)Pe@T z;j14qormEk9@$2#`G%y~y@QK<3=c&{ruPTK%MhcHh4`i7<#W+?8``#4OzeYye=)gl zy5bL5KHPiCJ`EWB9CcjF?zrDDzH~%n#^1OvNMk79g?<|2&4!BdRV~LDdQ^*9xfy}? zLel0TyzYlwA2R8k-u&Z-_z@3Bo8Qfu3~Wti;DPV})u1_2TD)c5J{?=v4DAQwx+Zep z6m`dX<=fC-r+HXj;Iysy$tnM-`Bdb21kMd8|7r4Q9=pVl0~|VtrkPv_xilXVSy+d~ zdq9wS%-UW=SQ^^T>&><9L^BcmYRVF*m{PasH*9EXRw;*>2QX9dhyf42xgaq3_D;f> zgr_-h>KC2_SURt`<<&*T(v>jflHSe3P}a!jh|IuQn^4|p1nJ{XGr4mwltk8CIPY|x zkEt=bhuhuq=Y5`LKHS6`R6fLAEIc?6Mf-_N{}Y>3{*Jo?7H6MCaqtPAxf!#vHa&U` zp4Bd)SGJ?C+lCuwJUznTe!SDZe@)7L60R0+{lvu!11I!O$CtbB`I&S8FN$9N+CdeO z1vvj1oy0EHnZ-OUcQQ+`TlDy@_qvXOASPw3@&!D(m`7_70!%)=d)J=&u1I%AU4^f3 zvKmZ@uz`(tcVmoPM<-%$99RAo2nNnKH#ZI1mNotA{OnM|ZQr?j9z0{&jyBtV4jRNc zxFqgvp631NzWlrvbT+-ZE_Qo3chGVK0?NHH+~(f48kgN?krGdDWAL!pNIt~h%U8B+ z6aF4vc<{?aB&c?W$YZ;I4t5Qp7_wO+;Ska7@ zgWpo`(WAwv8Y^(NkoSEdA3(i=JKdMRFg-r{%^@6skG+v38i8>Jjo>%?x{ZL{&CNiw zry${)fTMbhEdGBZ~JeNoGmiZSW&p& zEqG)ZA<7K=GZH}N_!GFVn__O`MCtYKc)VA*l%)U%johyTADeee4Wu-F!nELAv?`E7 zYc9fea8rJ6ANrroT zo$tk$n7J^o>!@kl3n9=vblUbl{C7`0w`r~kC!7GITXuhOWbeH7UHxC&A0A;0&lLbW zWSV=o4{~QHqF&W_&-G(13d?b(GXLTQv+rf=Vgw}9f(0h5Okjvr#u0L7yk?%u7lB0A ze(nuCxZ%#6hP;O6jN56bYn7?jp3lS73;XF&)_g4x%Xik;2jfnhpTuWcnirR2`LGrP zEgse5&6S;e*~bB#Z?qJ(*RAVJu@$L~p@`>HoT1XvmyX4lEAqlugQ`0X8zSaHq=r^}OMv6kT_3UgRq4`i#;3k%bZZ5yci+xUw?;6JL^lE_&vG#ZxP` zZe09D(WP(y2+u2rZK!HLuzJ{!&RRU3aH1(_9(ZBv#)tg3dvJ%ATgTUqdLA}6^2o|v z?(ZIPyK_PD+7S$NvGsKx{KAQKc%wBI$K5y6B(}WTt2w{zvma~HvkW&2Dr_qjXfcmmMlU6^r{|<(|KlW;(hb1x0Dcu-j)% z+xlMJ`zX>AaP-V-Oi5B}IOtq3QLHDBSs59cy0dgDY;;qYN@67%ZW3Y1gL-$3FfkZX zomyTy>?^)wH>$jU83xzhExS$Vdw0bhJG^nhd-!8MW?Jz47d3aMtrj6~m6t2CDN; z{OZj{QI=->jthoUbe1=#Pns<)-{3AT21K~!;#?u%A9dH*1!Fc>uE?_iM=(#Z5EVYhkyDnNZsSnJEbsbQRRrCD)aSBcW^52N2KNpREG+qx-P->>G zv95?|G-k1+9*t!L>aJ(+sabm)d5G5pqus-KvJEI3^8lN-5C0IaT52+JKcGq2eER2J z*i)Oi%C=n}Et+_wu@=1?TbpESdF*uVm_C)MlcPMJeuMsjhiIx(1*KTJNPWbkYq&YW z^I?Q(?65S30Xcl&L)mVI7B}XBK0t%FWXjdX>-CzW%T7k18*eTig8@qr$0`61Kr$IEaS#`P~;wLi!Q#->+EYvYq$#DZ>r$mc(VhJ zPIQ+jDtQ3Ce!>VWGo@g3df(m%GB#7KtB8#HfIrrxcH-+& zU1Y)8WjK!~GMxvRZ9m{}?+iZFq)tvaILHS@7^CKI`HDXUkvJAMv~?6i4r5ttz^K8~ zuQlnD-DGPw*ogUD0vo~btoyJft`IJQue+L|^%y+y+MWDHBu7@bA}&Vv z0jGH%Rb5wWW$F#Hh%@1K4q%k)BhRM!4gpTHsYPfi(&rZPeS-v&!X=YBVN!pKaNDU5 z6h*SHNwen$GyznmKFHtAve5jg!K?-w78X|z>!``!#?NJ-;3Mt7>fecNs?fSq>Q_Zh z{yLMaBDE7*!qQE;BY#@J|n5X|@utQ%;>$ zH1+zje7uPTW!GLbY!ISS*|n$J9aeH1a$68zit9!8#U}fmk$q}u_bHo+fXC!Tf72S} ze$uRwp+0d_MQ+^Pkm(|u)@8d$^zs|nJ@oR2dfm-Mr6ahLH~*ME9hU>%XbP9Qy4zB` ztJt+4H4Jf(9m|pHyE_&%6h8e2NqCHbhr_eoqwLdr+Uxd?Jy01Rtz zOwIJ?GkgeSk!NWY+KO426g{BN(3u~H8|uwz{A=Pd_xj1V$_HTkK+)u#utxhwWIBA4 zS%JY-b=r?SB8#-$h+i?ItY|yFf2Mgt^|<5vJNeijyQ%rW)cKf!oQ4kl`j2=ObgAjn z&pfRUKcRjRMhKNiV0IGl<+TiNYDJSS7`7+gLxts(N>rmLrSWzZXIuo^2hBcR)UoYO z{?9P9DCF(t_heqJZd+D>b8Kczz*xap<}D=hlNhFOc$$ZS_bi=Pir5`qpGJ=} zU^*rrnSm2vsCzo9`!cd_ypqnx^SH}Lm-WIOab7Q}Ta-b+-7sV&)=CDo^j$H!v@gck zT}6?F=s(&=W1KrChC8d+C<#BIeyC9&VfF6Hd)bQ7{h1Aa?F9}a9xrI?-wO+Ii?O=# zMX#2xSBx&=@zU@NF3LE{^~2_)u>B&z_v&%i=~u?gF*t9>d@XjvYx3MShWTYR;aZ*71+UOSaxuuoO?Mp;Hzgtqs>`q{*n9&2Q_{A*SId~1 z)M!YYfp#}0Mw9T+dl!G~cD%u;cO8%7y`1>kRnqpG{+I^Vq|o&ZczKpP#eD7`Y}tS( z@D&vgk%8;KbTUJKhu?GKM(jXHEk?sa9n0^)n%HDsMc55;lOczfp7CV$m#nERyNdzi zvNB9;&qD%U4BQKetGzrcOv<4Z_=-#mM_EY@^pfoFCgHD~tLNcEyK#;+fAp@e?85V2O|N#E)~uPw~V@yW)Fz;vJrNOCdeQ zBm15;)4osV9jK2fkNc8Pye97*Ud9;s*;2k2dRQN5?ZPuk1BV**U+`==N#`ODtOFbb z0|#*K+=Y8fQv>e98U@Gb&c7qf?I&!)S0m)`Q|oWi0XfkJcs0Woy}%Pa#}&PSIra)* zscAKh#BmI~xdZpeO`%~GseM1Q9%7mRYM*s-NOsQcp5fd*-p97FXaen~I#q!s#_g#R z+)={=Kh^o?U<2|esr;d+r-M$27T&RUWctlWSMf4B4vfh7RlS9!*X83_r&qBJvH76Q zZH0T_Yvy_0gq9ij{0BeqUd+vvk;VJ{cx`@ORsKJ*5wqn3K7ggM;$`$(2m$7mW=?}P zyf@OLdJLX61bJwdt43WbkCA^LVaJ&ADvhY_Hdv15f2ECSgs-u0#J%XntsM+l*L zm?YZOcM+fWh@oQ?y+}MeK=5C8`93rXo44#C5<8hqM_uFEM&>o2+cwf^`5GtwU7fhD zZ1@)3a%inD|4riBUt*IM`o?!73;SaQeHN_2HjB39y}_=*of5Z`+?kHV%}N|&7sqMJ z3H)D)u3!un{`Q51IAYli9b(jdKae}hUoCY5|2$Uc&7xOk;Ga<1*?u$If8%mhhWq7U z$S=uPqn&9nF005diM;CY|GD^L-8%NK_hNF(N}O?j$Nn1VDL=pN`k&4Cu=O~6Xu)zV z&e%wwiaf40c`WTZ{94TJPD0JvcU{+KJ*>>U4=Y`P8VF>a+rc_6hWlnqnD>U_RN;3m zXwL3I3LU6=d@=o?GCiuSI)5cyV5+6Al`r$)a-sFPB zOq{)$E}Y3%jr14{8TQTN=;9<>x)Uo8kp%-zzcC*REg0}eoVR8U7>#cZCU_mlo>x6z z!OA4xz*vLtSi41sG6}6byLOAibJ4T#%2H-%^SikM=4%{}{4kO55@ZHm1a4gh-}KV( zK5XosUXv;AIsn%Z^A$Ui-OFfo5#NB|3~-+Ldp`MY)yTU9th;h$+ii3zZ`n*2-iwOO z$5`M&nGalxyiw0YNF}zcFz1@SLC<0_HoMEt)M2kZA|IIOWa^8$vv?C5AES6TTt%_h z8ZqI@wo9*WrwhmMWelycz1Nl{y_yT@3@-z#Hs@^3EJ0EpNL-&DwNvf5m3T+lzqVm7 zea-foaVs!TEkrlgRl>uNm6__Txc#+w;&HW+CwZ&wzoww|jVY>5V+%2Ma~Hcu-QvBM z=HT=8k`)PlFf=cHG8Q~X_pe3|#rHJP--%m@?z;%06`78T7ubx7bYiE}y0%Yo{7gqh zYH>xR=I_|mP!oBwgI`yesVVQ6a&QG_K7`A-0te94r21B5PVdgXe|ogY&+;05H|odp zygH5X9=FT(!q3}K@!AXD=Rc?g-p$uOe0(m9wFfY{e$U!Fg6li4b)`CSr)$Pv;BBh# z&Q_fIx-@bNx3KhYdJS9AUN{Xu;n7leE7HcdxqX{kJm(?Ag-kS?wbcd%inijc6_muDi|8WucfqbN!fQGuxO-@pQHuC>Chm|S_^^ef(~}W}e(t(`=N(Ae z_5<1(R)Shuao794X)qC^kRw+Vwj&`h2F%k-`SF#^8Z+~ab`A6v{a$=Klqhqkit3b50S3jahtRe+IVXa z8-%do#vFz*oZ`Q@CAz~D@Oj=;*XKdqsWWSKm=sgO!nRC)%LUTjKl0sH-mDblCbFpV zvN*8qgrjl6%WK|G=*WiFyPvY6aN7io@9-b$&9r4)pw`V>uPt});ltf0KJWM&lw(UF z{eiDNsTKUrg}2=93iCksc53Hp6o}UwV;uFjT<_oAMK?4=22DqiBZ%b#&VdOnyE%&& z7dLEOjC*1EOYrmJ*NQv0Aq!U`GxS_bORirw=PzTw<2yfOvIj8V%vfL(XD8Ks$d-(Uyw*NOS+lf{OgM^_!i! zHTf%RhQD5&dd&>?I;+I}8C)-FF{#0tcy($mO@m!MX11B3gR|CUhVGL6EbCaTI`x5> z75#w6;LL5(1|BXCr9seXrVQ@rUQ8T5GxN-@<9VLD8#Yr+#2Gr6cD_gJ5xlM!%>ae2 zt-xhwpb1`>sB$|;`#v}fPFBw7ECVXle`Df zP#l$l&7&h5+RNLv{nThd*{cfE4lepW)_Cdm~^UQg*bOE9;8;Q=&CQ22K_C6%#^(D06FBa>Cw*U9T8alK5!v#$$pK_N8r(L2G`;#H9o!YHJZgm zfuAC&MCoE0WbS^O5wcY(nV~;h)$MI&=pot9+_$(-1)qZgA zSTo&=!a%-E54;tw)ui^zyAq39@U0FFm@9m}yBli&*Jd=Gq=V^YGOxM9ycY!WxT@gB z8Y5hzxRKx!E>MLXSGa90%I~Mbl?zMT+(zp0(uU`-qo`{zU#*M*?S->ofRpyVwsoKZ z6z$gzgoEFW^TkoOi4!d={V31+&1V4J?4QDSW=z``pBr z$c_~p(*b`()x|zOe8K)D{QClHz#TWdw~P}^TgE2kdZ)o}beDa?eG(njDhbuSSv61i z;W6GNJP$%RSRI!aLNmpJ8}@v3MLjST?*)qvH5aYso$>jAA?DEJlzT4~F)lcu!W`wd zys{vQ&iAa>VTk)oJ+>@j;SA#6KEXZryUy0NiJ8|No|$=W|3UcBKZ-8k+lol>zNHP- zk?TIddB%`U#F3(nBydqtcnE5mBD#VW#VPgL|&OStiFfT;RJ@MwwT~nhl&tKPo z2eRiS@LXlvuZ#1VN4AYB`U&&Xyu8){c=8cj6j9fE_wMT3wi5S77q^cpX{an;j6qiF zbv*w81JI%hv01#UcLuLyvDa^AynS7bcTLXTGeSVItbiRen^S*}EbKIAtGyRlxGM7o zU5e(}h8^AoGd{fjU;aMIuF*TvS+ONilIT{9F0;9Rbz3W5LsVGNYuBz5U)$$+{ zT_N(~eMC4Hqc`$v*(Wpb?`Uvs@k3hnc>Y8bt(%HIKpL20<}xw=s#kX}#55-MI!UjGN zd=szpd3%hiv4sgc*V~r$9$8a*yg6GaGOMu&GwG`J&(|4=#Z&e`Q@RdqBeL+-$by=p z^=+R-x=`CNKIJno`gc^1>)_p?>B4i6s4}vkpjQRnnQ4w$#L7WYWcr!Nu>wy;@M|Pq z$Gs}t#EDGrg&)m_-y%EnA=&-m#O@D$yFV zT@aa`kD_YZHZC%K3=(6dGuC+n5?81C;?#p8K6-*j=y)FVR40Wkr#SQrm#kh5BP(#G z<9RT(BJ#p#{VF31H%}VMFFIH=4{lcB_taAN^GJM7xAdx5`xO@X;$6Q_eUEKc@vgg^ z)PBn^z}*H6qE_SayKkRB)2~Tim0=6ajfEGYFr#A8VfYs>7N{&8ADMAAhNRe)k$|f( znsY9Sv^n^QCX0c6=P&rzt*`Q{Dq0FE+E$_6?Ojp+e(DFlqFiqjMk=>iepOEYA~K!N zafDx$sqdXg<$g!PsPZ43)OV3vK0|~P@xz<mILS0rpkwSIaD~$SlXdIPdbB z^*n9sbfCUF-=alqcV$09b?n7inZ?ZXse>9|;<+3H6Vb})oy|witSr3yoXV7y5h;M(-Ah~9tSS39xFj`4@1JPei^)bybL#g zum`UEN4$A_*ivWhwn}t?-KE<(7`m}za|AAxT#}n2i%`q+5TmAwMf_XU^i5Zfz=N*Q zhPIB=tJ2AD8?b&-&q2JfYhU+mG@N8tmhIcMGfErps6kg?szqcH9)K9h(eL^hSCjq| zH=APNUn-|l^WLTmxGFX8R2_Nc>TOUNS%^Oa&2N3G$Kf*unO9?%393KNelougs4oBM z+9GG`$DC;qD~?R;>+0{F!a(Pm(h*ghqQWeEbrmn-m8FWd&$d>UZ>x-)whfh~i6_@6 zy<0(eko;Q3kk?b4$OPN-S65_KSCqeXeIc@G9>gmmE2^>43x^P-wxvhK+P00nu6O?O znW%wpbgeb(1sGDWB0fHC1VWry%Et6XoU2!?K%LA)+Hj6L9{Wq59m8O)D874SIu0hw zKmn@o%-uWhFe7Tzn67@6P*~?ymEj%FyN0hyl&|ToYN>CoElel-be+*M0FN|K%V}op z-Bnq>Hgek9X+LnqK>>}p?%4DT=W&A?huiBjmhy-T0UZ7sPuZs;4elf3>1HIvMuODV zuD&mH3vyxZ4D-L*$yDKLESz&;p+;e2CR9Lql$*s&D5;G6bydwc+){go)$%X&v#ngw zxwEK@=eKa#Y$`%LI7(dSy1NZ6&h9Wwzn7e;**yokQJ_GLGvK#hKVK93wza zly5W2i?DLN<<)|gfrgt`pLjw`AT+$Ad~?frmF1hS!$|T!6{#)g8%|k_u@aP@i)ZlB zJ7n-6&58WeI6`W=ZV(SSlf38RTpmUpPkS0YPX3SOo3HP1Pn192R2BBQ%gxth`5w>n z9x|!XxgLLwF$~9fW6e!Vb29qzZnu|u z9|Jk=^yv3^sK8WpuG{9`aV0*Xs$i7UP?0*cbogrx<(-ikGdSWnDjDw@ItLNNSYfBg z^waPO&$oA=T+x!F?f|EAD1L2d`|*&LeJWDBa$^|2sr=pUwlLz_zu?&9u3ggoZ%4G# zXF6*zuX~$YVApITG_)$Uw<}ax{!b&tdxjE`H17pMWD6>`e%RH2bh`h&kgrUi>#Q-n z^EB=@FxZG91SmD!gBgM{DnFd6UI;OH%#ErO0j(0eIuOq!k!o$7u;2V>DciOW*|Hel ze%(*k4#dk=;@4cr=L_JU|4crwp?&|Zx;6}=dbQ%Y5ll;GmY6@h{si?g99V`iL=5xL zYoU+#y$&_p6)Bim(uIRA-30tp8z(5hsZxcDIN;r{SS+qiUGBdlni=}#OWm`@%+Ph# z=VjLC`Pt977iQv#yB_Yl#(4WSLW=R->sVOD`2a}D$L5UNyk+qXE!dS@`7#$R2FZDC zV@jeNHf|bQ7AKl906WOQ!GK+#49{#?+^czD`)`W2EG}-of>&PKKKTi|$J)n~q(+zE z_qO$4x2^1r(|G>EPx7^l#a5)RUgW;C0?+rY!*hq}ih6v&=@jTv3!oa0{9wgm2~5fr zq}3ehrB3X(H#4@^qR6H5d_-&O=#nC6ch49|;rX^RiihE)p6O9I)F(eRx-_%0{A=9u zzAl2NA~>Hr+2L(nwQWCTnuoOg^i%Wx=;Bx7N3&e@R@;U_&f@Kb&gE~%o%}skcI|}c zrTzlCWmHkL88=9=?=L+H+s>+30_7H&{w~T4H%N+-`~A8Xa-T1=KA&ZM z9%X&Df8WjeeHZKVhU{lw8_YfLU7b1ygG*i`#B8@FJ-UDw3C#*2)ex@?{t}OKWS0gj z%z8w{kdDB`LAw1zmg?Ymph}`aaXb(nEDqx79iG|mXm#+-H?8|GZC~P1|2;~1J*lV` z6JA8Vqy`VIMMk}IaZPI9p*)hUEq`ayo(&b#Hso!tP2Zb`{n!=Dv9AoL3vRASK^EC# zpuDX6etW{4x?py@;6Q?D@x8FkBy#6soWp~Kz-7_%ytSKLvi3Bu4dM29sL;7|M5rc_l^PCx&as%@f|(bcwB#aVwGKS4j1qjQGuKz}T!|4j%$|7QGY zA6uWQs?X`?-%_>pbe_@guzm+WLBA8CKbq5zO*^cAJ^r-MnTmf?Gx%RO7wlJ@vz~uT z^KbNTwD|U_QqHIp-;oh^u68?O$A|j>FFxy#4*F-~Py5)iR8?8de*P_0TSmV#YDciz z5%>veN95Fc(ZRBQwi>jjOLF=bK>+&i$Dj7GiBwf0r=NdI)h6f!qrZmr*Wf4UuL;r5 zkIi}Z69k}tKK`_itxHwa<@ED!soFaFCmLIORU_+f#81%Q7@|L()4vh|(BFYS?PFV0 zRjs+m^KYrzR=Sq;&zOmCT|2KZfAJCJ#J}V+%Eo6!;l$J3yRbQEh0ncLQM=tN3GSfv zq)a2j!orRknK@!LTM+5O`j#Iv*tnam1SqYn9e4#`f^J=dotHM294q-nG-wZ;N}5e$ z%R6+MD(}$cDo@ZDAGft9=y4q9p39l5n&f}{HD1o0waic3R61vMxaU`iG3Ib3(VzI~vw%d*+vR%kEgA!S7uO?WOW4 zZGAJy`=n3SpMTOP+mpX9bo;%#)<=EZ)ZFLt?Fb0(=xU#Qwo6Lz5FuSS?ALfN19wS@ z>;+sZ_%FZD!fMn$1E|E8K~6ed8>Kxzl+uP`wDg73UR%%CjH341M0;%vgNPII@E~~e z?)>S_UU=raFRuUS`1ANeVGRUg-FD_ON{xjx7?~`tw0lP028}IKR`+}Ul%KTjx1N%d z@j|~qU+ZZzzv?2Go5GmNZxYX@v5c&3r1`3RBfY8edV0*qZS7pqi|CPFc2)3~)gqi3 zk+V(GCi<;H6BG-~yS)}8UsIB?_S$HwDw-|HXtpGIh+s;x41aOSFB4{*!G#1RUkv|n zUG+lG32d!<%8>geeZ{+7z?=?RtB(Jd;krwKl8TVF@_;q`(+(M!^D zysd#By$%U#+IQ%#ArjpPGeh-2?&?JPluHveLrd)9l1gj zP!C=!xo>py-Etv~j@(jE8>e?d_}3~=&}x;(=}DDi?5OfMU8(W}ou=|Q9ij3BMN}TA zuV2;T2me(L|5XnERSy4E4*z}JF5LvZdZlatvh>~V;V|q!%{3Asj|y5sPw{h9JG?X` zX{}&VyF<_TsN`8Yw?qupP-`{L4>`WxW#?j*XfIe1Pa; z>>RiO7ty94g5npW#aH;_FR$*Yu^3K_;&DLKF-KjWlHf<1=q9XI%(l%Et+t*n?V;DU ztKQf(R@fyx!+OG>*ZD0I8tBC(GA=%Olf&I2jV<3u3kCDXzMiD4)b7yscVxHg=bOfB z*1H$hvD<^nB}sd$*0FpEJ-^tFfbCt9J`l|B9m_}QYLQ0D-y_(Lq}#6NYGVy zmyPYAP3!4iQTl%U_4MH@wr@SSso%SA4XQ!)^uA9%mwOtkIsfEWO3IduO@Btu^trrKwQk-2@vpXbg42GA!&``Dv!~_-)Q!=(yzrZNZL1TaR;}KvvW!OoNsc_vB5ma z{MP5QA+Y5gdO8QVYT-Z0pEyUaJ-3AL2_gKbkoD7CG_uwwg*yvk5Kt2J*&w7O|Tv1Uq;O$jh#Q+ z7bE&AI6kw_)@ldKx6*xqLzG5JhRA!h|D2o(+rCCB4wW~pWA7mOXBXJ9?-`$Ii%sh} z-IvTVB0ZOz=PbMz!WvB3obN8uc%7Si)KQm>rC%PriRyDYY<@rMFFGqL>vO`~@pQav z?5N8`IBmY-@>&^)C*Nj;{`R;!#-bZ}$jas3-1{9g*^fzk?vv;IFToaJxw@tpN(cVEIGGC>c1QXt3fj7?8z-ZxQS zDJ(8?jr61=Q-Mk=J z0T#?2k<#d&ECt}peLP2bL13Pb+S1Hxf;nz2W?hZ3tBtgOkJNsB@g6CpJtaP#r9A@c z(EKMv+=Smrddo*GOL|zIq>Fs1v-!fWB%S1=mM-uFT^Pdqs60u7ecaC7p_PwIKmECH z4B<0X?$AR%p36OLwjNQNOwfZL6wJ*me{=}{*JHv#TfdRd50>X`Q1oet{L)}<9e{`)4Nv=`fOdy zjraLNgDu}kD;^2={t{oBtOlQV+?(J1iQ*kBYNU5x6rr*$_IaO1_k6NXUp8-tuc3W? zmf208`Qv{H_Kx{$KAzK_N|TwR$OJZD&%7p>uVa2_Fki#Ge=uLk{L6X50Xu)gi-P5i zehQX1_N@%&>pA~nHC%t`6Y``*_a0v}^vG4-5Z#a0=%0*u7aHd|n_&&v}}J zc1uRQZ@}ZdG}Vt_j_N67RN<_@zrtDnm-hwx z&t2!63TOR~DV+7sQh7a%_i?-SJ9Mg#TD8B&Wx}D2_ex)Ky3*JT+dEhn2BL9#*e7k} z1sMx^>A$+FFyG)1uBoy#<`mRFX}QX=Pszt~(cuN08XpzWaRpyjs* z`RUbxPh^5zULKzj$WclUNhs?GxD&!J(zx43Dr6GNK8()jHtC%e3yj{%Xk`fBsB-jw zDu@3XckQ1hli2nrs7yj%{Nhv;!b?@2paPYn|DUbI&$WNCOk&#)|0R_6d;ZHLQvM5JO8=7l9CAI zXaN7ZMHuhPKSudd*vI4asV48nr^A;dXJ9IQKN~nsCdhG~Dc&HV&wwNysB!lm@QE^s zrQhYBrbP^T@Jt|weH$bc_IdujB9mD9F;i}kP{{Lg@eL|(qyt0vD2==R50Xi2`;ydK zLSdih-^a5={On7iTfjHS1a<~7`lEy*1D-%vsXR^>gz&-;et^nj)Jx%B06t2I0NDOH zG($q4e-8aodv;TNbpP8BMT(E$qg{QK!<;h$B&yiaMpkIHLkD@|8<6I~R-r>eY_ z>U}&H{*?E)=EQt^Y2MpRkoiA6!hcdj_A#$0 zpDq#fIB4rr!Hh$2%iwbPYvORE1aXhO9+4Z z#^C7j#@*W$&ibEFxba`%EI&cvEPtwx+tIJ1f6vgYucKn0v|T#9;=5UqXMSf0pRe*L z%?{xsR9;5O5dQD!n*TBSo5Fccv{~g*TBC5D8_!ob>z}RiC^adZ^(RAkOyx=XTbmXi z+&lAet9F^=0O<~yAjf$;_x20+waDM^qU}gwU%%|oF)DARpNH@*Hw1gfSM%Kz`BZu( zkJq1(Dsuj%%yD*fM-XTIPfOUtzuOg_a^riYFGzy+%(&hP;S)pnEy3L6KOvZ#d*`PHb7SA(!QAyfm>d0HO%?I8Mh?90cc+hv{?om= z{@kV$g(v45Md5AxpIIJa6R$Vq#AQXt2* z>vjo!-X-W5jk^m1r^zIC{-*f9yG}UJgGU18Vc)k>SlZ`K_*eUqtUt-0x$i4u+zoV=0sq6Xf*BNr)x#P zat0uQ=@EZ?R%DsY(A*(jFQJSWMl&5MFQfZa9;JGpb)vmt4Yfe!N!oag^iIk*QdG@9 zN$XYldYZ2C1a&+kg6E4*Jxx{Rn`o*k-%16ld@Ds&?od?KUq^Wwcl(oRzY!s}>W9mJ z7sye5Qzf)(A4Z!8`lu+q^gQlOfAzEou$4RH2W#@kefh72>AupbqlZ=Q(2W{T-_Q2F zf_HQ5@L^uwMt_4QkI~+RDo;`$l{eDoS8M*2(O_wu&;Lf+pvos{iOLhypz;_!Fkb}6 zmp`6=QstvGO6B$Rd8_7sJ@r=QqqM;%Z`ZCyTIQpoc48HxF@#T7IG?0frf^>6s0`ty zA-urHrFWlC(PGy~H>0(Wj-p)ritF1tb0cxd{zjbr}8G6 zsdCgEl{b;&<2mnnmiSdmuy=e9_AQ0;7Wywj_$?~O`d0`)HH2TL@+h66aQ5#ImDkbE zK5j+Ny{bIkECOhA)2pY0I7ja>34OgR6<|=aauD; zIOpRr`Z9#i4&jffJWjJT?)fj1SpFlvH4+N@y+!?lWs;nH$}Qi%L7Z3MzMQDVCr)o_ z+_nENGD$9ft{<}`+>!m4$|N~?&;IHlZq~4_3bvnDFxRL&LGu;P`rlM}j2=@t%3tGN z`O73Z|2cj&67DE|2g@Wm`R?+U+!}WB2Hz)}f&<9QJa2^XD^=b|sStjI%A06R2><#@ z&HfnmQ{`jyq$*!VZ-nqGRUW0&Lipt>FQYLkkI^udH&H*8H&WLGEq*9}g>(IR)W_}W zXQtGr$^;JyW&W7Z{DU~>|G0$Gey{$^B({E2ewPJvlm96}-1slyj`H7GCh3v?7ng?k zFS&jBbeA2kkO`~|Fg{I6C=CQ3AHr)w_@O>-<(|HuyU*2)LGGdWo|e#OT^Zf3aaaGN zGKrNx^#5GK9{P{cxT}AROd|Dvdx>zahyJ%U?&|N7No@V_UqYY$C{5J3t3M@^*!rV% zl!QM0Wwe{dUH!vk5=+0!`$=wBUvE>*e(UWZS_;sA-_~F=*k{Yvx|?EN`<=b8CFQ^Q zgUwj}f7=u@?v~(9G2NSiF8=ioej|>7`=9+vrGx!S zy9M^^`$Wic`SNt+JPDDn&0}USqTsls-Ra`*WfDuj%U=lOXz;(2&}Sd^u!ZpR zH16hqoJ?Zbhy3@G(2kCKHQM)HCAyj43h1*wMj!X!Zf!mb=UC%~AYZh-m1%FmJDm%6 z`nPxPciH*f?*@W0pT0N^AE%TCE)J)uJVD=GsLA8~7pgqo;h@SpwA#n5SiATCCdvdh zpUD@WC+-mewYj;0IU!iy+^^d$kmCmC_ZMj1$LU>_M`>4ST#wROtI8+nDV3MeSdF{4 zi*A`46d$zp(=~Z4{C!`q`R~xXDv!~wGIO8*4y{$?lk}9v-TSS#_>x!^02i0pcMI=* z2GmiL${k9o9M8w79Q(h1r3DcCze4zYjk}%s=`xA!f0Ab3rTFj4*9OaDZB>)U|H75I$SuX?~L$rRRtc$o!M4e2nF5gXLQ(CZVif?$~{ROk(Bl z?gzN-JQ0E({P94J20U9rnLl`w%A05pjk_I4?VW+~YocOJ9+S^!&lS!|``pXrraJ=l z*VBAeem-9S9uJgvcbFY1RoLL#9xrrjAjit}o<8kzsF$FhOJP}hkl#&{cMqVl(#7gEt8h4X!(ziHgF#{_cRbsH<8EMD;KXG-g3=|pLuDj%ii6?uMG>K=vjy6bZ)Z>2dJ zce~GtGD(m4{ydPwzU^md{>SKp5dOW&F?Uos{8u^r*SP1uOw!YT$wl*Qr4c?VD?lr) z`?(gNR{FQfn`mwbe^%wKbf=G7?xFXb?4#2982z8h%jlR8{`b>0@1wLOg#T9Maas_< zf1&aOO%CDz7s8KGd7SoCIs8v*@hPMCR34)RDo@Z|Dv#4-l}G6;m81Ms9-}=~o}ewK zY5vFQJ(Wjkfy&G1E|sJHt2{wxsXR`{s2uM&S9uw2IaTvNM(?RSK?_tKr@K@hrO7HU zqq9^VqhnN_pgmO{r!BRb|518R>#$X#S)BQ#txSAGfb=4$bvZd3AH>c$Fuq zE`7@|)bt+HNB9+5`mDf|N%HhAt9g3?Q{;NDm+p4wrIkZmY^|VOk zNt&y2hgwx$PjxC!Qe5Q@m8iUqUUD@5>u8Wl`iJiZBE9YL*g$kRu^4;3e!Sd#A-t|)g<6BRoq_EF^JpXv2$XsyG{-rXBZQmNU z@9Z|A!sd0%+Z1_T@*Nk<=QIDq;@a4w~=LGk9{s(0e zyZrLFe2<+fRM@%w>o?m0ufIx!*sfnj{=`6eT-`q(DKhufpBVL)!aeu~P2ThW zNs)!HkK4x|q>3ExE`Q0b!IPI@uuPCsz>td{0ONsp zpo8~w2ldgF!US8tk^g<5JUXCh5=#5Qhbo-6EEFm{o$lZYde?6P?Vrbd$+1Bk1EfDm zDD86xSRYLY@*nblROQV8=Q^3hj-TO!gShcuLZ5x+0({r6gZxXI4sOXYK^)t`K9NxB z2cMzwbd=+Jp-f`?XZUr&+zgP;58=IoILGI+qlI(Qe)j@D`D&5Gwy%-xe?Y3RI0jgY zC6xNXFIG6)SEcZDI>znyz1BecOb6Uss<7>=rvoIE_PGP3B_o3LqXX?VUR3TK$^SK2 zK2Cp>P|9O~SEX={&rpS@(`JCaU`mkvX@|>i!|))E0muQDEB;}C@re}n*-u_^)#K@8h}JnQ|}ALuG;-_hyHML7exC(xHlX?uN!*f$}c@lT?w*-?MMA z; zsPY&+c%cZ6&%Zd0)8yUl`t?$U9p6S8Eul|;Jq=NLg8qC+uzy|!m@bpp`6uW>34Qs; zsm;f8(w_DMWdfUX@p60ougudJp^xDC}-m&~=3inPIT_Tg%_D$t$^8OJ2*oousJcmIEeGxU)KCiYM0F)drB@3 z=6pV2kyP#rphI+!CZC{{Dv#4Vg|q#|iv20KdHzwVu;XLmH%)TUf6nI7QK?LjQ-I}Z z4)B{Fi#JSI9HaLu?+Xq9pW}4)Wg1UV{`tZE6W>_;^t@osgR@Hx4A$=js8S}$+3&q= zy)=lk{?QVO3c&tdd9RkgiEo}yMa}@uV8hU01@;SYrH8x+px7#^r_&VN)0AME2f z?^5Y{u3oQ}3I}tX?~TTOE1)mD*i+G{@U&SxS^P^;LoEI2CeD9aVE!&28q7Pm`mg#& zQ1y4^4+xZpf604-?f2sI$q)NkZ(2$V&;LG5{|@1_kFZ`C$k(p|RX#@ZRQWoZ8Nwe@Io|)S@&sL^@;Fth+@aDCzViRH_|((9 z5WY<14n3rD_^)#KuX6aWa`>-ul)uUov~h1OK5<&6a`>-u_^)#KuX6aWa`>-u_^)#K zUlQWK%3G;X%ql}uvw4=%qTkfQ^tl(0wpE>$_+f2{I2ZQM)qAMbxwd4e8NIr=}9 z$LJ!JqyJNRoJv)W@>e;^e^1SS)PI#X(L*8JQF)TeRNhEMA-q)ONh(lz6KxzQ{kLi- zw%#oFQF-+$qstV|v!5Fko;J_46w!eqjm-bOLxP9Lkf$&9kk1X>s z7YvQdnjEoyDQi<+8XE7D>frvr~Q4mgarYmxb_MLiiynPtwjlZd(_nFL&1>hj%!J z@W(>e&`lzhijr4>gidN>1 zx<5gckI`-_FQZdc{doVYPu}v)J^yV}u?Sxeep?8CJeZqF+2bdR0QAs*MW8&EWcH9y zM$bK9ur^RX^9P@=aW}qcnZ)uRr9b;55u6_SlTui6SN~x$ ziLJkkVj=oB?;@Pvk^WUOiLF0Q%@Rs^?mJYDH9L*F{?*DPGXI!_zWlLfsd2CV50D|S zGbp34E42cO(rT6C-4Ysi4;Y*!lUVt?J5Fn)fj#)<{=$JCynmoP8ptzJ*cZTh`g*kH ze}bM=n#vtIP1T>IBUB!zXZnfY`TUR5>Ja{<#@+Ip-FEfvDJ9{NvJ z*HqHlmCo8b;{}I zsYhzA%~1N*@Q(H0q3U;NQV72_gkP!hIPI?T7=71A^WUL}Pu}w0T~q%`D(Jy)58__s zni#~rHTzpa_=G@?y61bBswf>#|KY*%W%O=gaCCT5`;E$DG$({VrExdDx5y-Rd>3)& ze^dxRHJF=wB8LZaqkorRZsflzkRh@R#Eyf_C+qwrMc&(R zysI?Owy&P9@yT1%-H!h8XMsBgiusmGxl~}w8$LujU~xp}?c>8y<5iRA$*@ejT|@XcdD42j z`Lca$L-~qIef#7fp2o;wj)c(fy(#2uyecGySA`7U;*31{>|1;1wG6^nO<=6LhQad}TUYTT3WoibmgH)C;Z$8jTU7K*)uPKezq|AQ9+EiaB zJ#g5|KV+WI=ZjT)94|E)!l`Oft7}p-HsipDpu4W?p`5PhAgt z1fRoqv(+T&!W(b(%tT&a5^5@;^_ozHU z&xP=FRNh1*L-<&gC+KLE*U>Ue?%Cr9x$_Ac517A^9 zH@Z(=o@wV-ro4839X>>+_i@{K#cxbIKMsF#?Ho;cK$!~;5FqKK=kP@xO}ztu%-V(5 z)N!`U52mTR3DnlU60+T`J=xvb>tT@F+8>|V-P-RR;kEXp+uGeU+}it2>rOKTX~J52 z&)!G2c6KJDwU3zMwf01|wTtrhB680OLFI|jMgbxe+~AvN-gb>AX;}zw)VMp^tCC6V z`e;UL7X)%#E-NLJ{=>ggjk`7G)osE>JAW<&`b2Wk;2SA2K}6SQKqGA}*LafJeA;D) zk)(rEj{V;u{9jvzchWw0v3HqFVh6z73|Jq?dH<(`Qa|{E3itN6SIQ(-{unWglhCI> zPCKbQK|@0LiY-cf(Bb|$gfCS&_P?qe&;O|0p>Zlt(rA@8(v_FX`e#SCl}`6jS^HXP zV&&G$Vu`tZ}#d=p&O@{<(Z`FgJ7k<^L8g*z$&N2;%N&kZug( zJk`HcLSOC0*%2zo^G_;oq$-tTE_JCaKg&Cegbx~~Ox1BQfAl*M8lUwJtx$PAeb*>+ zm$j#!K0HR_NgAf=$KG+3*V805e}{Hb<&*TUZ#DnxY4;HQe^%v_bd$>K>6uHk_&9X3 zD(}!iK5mzO9gS7B*U$$)7jTRk;uF$yqXzeL7iDjS58-lp^WbMvDoadScOX#b; zaay%mvp+$dAv~?}BwZ20+f|;ROI04HYLz>5u*y;X7t8XsqK|>ou|6u>ZW9d}E~O=J zq({HjqKkW&8c*NP1Fu7663af9J3-tVSA6-EFu{^X&%9bfU+t);E|oXZ8!B(2t>a{T z?A#Od_)x9qjnfsX_Bibt!VlB9d+6aI(uACS-aU*bHU&lxZAU_1^y2h*4{p|Z&KQej zo;YTKPTL7rU5k@3T6V#w>-ke;dIn{VS>C8C%=E7ue{$2mMqdAM!C(O#Ec0Lu$eo%m z#O&Ui`#IF-OLv*ax2!UwqvtYD)r<~a<~h%C+Rru1JnLbKJMnvVV)vx(fdk!%-+4|= z>J2ROxM_IeS3IdZ&2>nFiQgI4G7s_-6T7jEa#knoSy2_^$+45#!D5e3QMz!~KmX`1 z_QcQoMq0^TK=neQWpS0{AvFW#Kp0{ zrXT!EDU1f*qXEyqy1N1Yl|N-0@U%-!1O7Gs$Ohc#f(r!bZop=yxdpTJYy+;M|EU4r zkG9&Q0rNta+kn5D(A_vc87v#Hn}!?kX;*fqc^PT`-!x$Mr$Tohi0j~k;ZG>UA7n?ljQ1u+T{laaqmXO zs?TMJECp!b{r1-z_!~ZHe*?cVgr_v_Ht?DI2@`Vmc@4b3RFUI6`W+@=k1KS)9=t~b zU)|E(!2ijgvJL$Hi%kQ+2Y+M(zsUtt1rQBCU4SYg2 z%|B4A|Gzcxe!o>4cwU*(z%NH|v<4ngxkJN3`07tJ{n(=z!rxFi)(%wONGXlG4fs%* z#H!yecY?Urz`xueU9=QnabssG?Q0;|qvn&A4Lm`whwuq1uc!CU7NzgYzn=a&ROff8 z@(DUb%^&_NJms#8Kl+IXU@m^%E|gRd=cTVLXKD5)=w>PG^WUM%d_0$X8l_j`qq20c zM`yh--KV{Y`m6FyG+&i(r8h%(QwX1>@+KOua`>4{Jevy(lUu% zK6Uh%gueLKQ8I*&S9vSdsJw{|RXN5#KAyAQySP62kqCgz&9d;VL7eOU6B7Eoucx1@ zypE0v;isy+o(@;I*E#l+No@ZXVdzR-{}ldP)1MUPkGJ`#-Tat89>UWh{E84>8^R9@ z;RAd;=f1ZEtp6SXV=vwxd&fUyY;5nn?d5OouE^i2$>RZQRN-FL*)sY6vA&+xkFc~JV~diyo^rUO$1;1=fkMqvX;?w9c(?j?b!F)68uMOnz@0wGCV)4`QyXoSG_OdV_hBil{>3)nx&iem3M$i9cmABIGLimim zgY~n0@4l`n$;l zJ@|sRMF1=g@86ZsXT3vLt2{w-Lik9PCuwX5-@aBD@3Rm4Usd@!dR~#|hZF8mIG65o zDo@fJl_#i0e{7bf?Pes9EI>ovHE!jqveY>8IR9_4nTr0m^Z< zepIFCxqZ#2o(|DY&A`R$y+W39Ua0ycq7uE0uefHPUi?3<%siXH*4*yk-v2~snzdD+t%GcA`D(7eGbp3m& z@+kk6n*U97ZwOzg@;bU(<@Gd0y`)lXZXK^xzQgzUYO7$KF@7^&9?dFgNrW!YzP~LCiZ9oH347Rgx5`ofHSV_0Gi4I1e31XK686Y{FO{SJ zTPmD`ytgOh?20qJjhn+ibVlyC@C-b+w;Mhz=MQ}=+TP4`?vL7mO`6k3o4p~|;!k#O z$c!XfCRn4(E)Z-kS|uLgOPD0-soaJ)V}|Z-5^?YIAHT$Wchlf0KF+Tqwah%XTamx4 ze5u^gITJc6%a=AE?4({c+P!CYiwnBK2INX5Co;tihWKdZdmSiKZ{ zk_FpCrHGxijl`BWeC6Um&atD7A$(>q=OU%X5I#MaoBS^d=EnZYU~cLXbp-lnc!89+ zhTGoLllj{MJFM9ppij33aSV4Kmbv>HWFwst!W&fXP=n08hyDWk4T4s@5)>fV z|G9)he=6O?@;AvOxeAs_&t-l|5a(^kH%ch38#A`cjDhft>x9 zu!nsODsQ5bRNhDjYTP|&F<&OJ{aeZX+n-+y^e@Wod#{Ynzm5gQ&&aP1;;D2a>pv(Y z|67CP)2@F*0_73^J`(nb|K~3V=Oj-X`y(OwKPXjL@#XTDQ0hnj*r0NhzsgbmDu@3n zNBe)?@4pxjI(%RY4+tNw_6CH{@rS zaXwT?{_iUKQ|{~ZCd(vN1;h&G90`Se7*O&G!!a^RP97Ho=6eQlzI}JJghD^_fjxM4 zht_@mRK^*3!uyrz#c=-A37_LbWO_e$YWtTFrYCyk7cjqGfqBT>B6axdA(N5 zo5beI(~HUvTSS$$xtRf8h(HB&Scdlrgctng>uQ=XV4#(No@PL>}W|K zNB)13(5K(ne}hb7>o>LLzz{wvn4A7+!a=gju`<9N%K|Aa4FsR}loB9xXfs3jLn_Dn ze?oX!2(Jv`r6IgP<#_+ieCdBKdN}?A)t_#X33A-qEc6HYeprhmx;IMU9??HU<9 zR{5BSrQhXKz7q~u9OKJAntt#{o)p5uKJO`jn`9EH|6vJtB!99@V#{NGFQJg<`Tx!; zPtt)Q{Pib-{qr_!9TE8URCl|{Uf&88Is3i%Tq3i`ao$RIql7;HTIrAwev-yr`>qUp zyD9b|_fh3d_x9=I0sf`k?(wETj`_`H68ikZ{72)i{&6yi9lts{NkXaLt^ZdJ7TupM zAE!Qwyw|=zeN6aoj|UOJSAA5D$C7ku2%q8O(!5K2RBDe?Kb6O*>rrXDl#kI)s=PzP z4-m1F;YH`a&)32Fy~j)%r3tow4!slA^vCHEDJ)`-v7{=UpliPhwvP8I^z~`?N9XZJ zbotj*o}lmLi${IYi&1-s{Bt4l)gkgNA@Y4gFV`igNN< zo}{Tek;;AL-$cVyj`CMI&i{E>I4AUb^>d|6lC$5d-}8d`Jf1n!1alL=LxXrW zK1EcYdzVoz|13{ZVuu{@>nD{9|M(e>u0I9)&$n*gP5;w>xQU{NqP5t$pz zn-BrhU(L?Fn#i`_<4J1TAxC{Km&$w8=Y3S(NdI|21kWdry@Lw(>hmI*Bxk=@pXUbg zY~ErdR1W|DKf=xfyozdT!*d`B=_H{g6p0EN1u-CM zq-a3UsE83!V*rhc8mghFNU>1_Aqv=#qM+zSQ3PyUibh2&Cx8; z0g7Xk<2i-1<29oG~~Nda1j`s+YJcEV{0b8Ky}%e_bCVg7t|U zpT$}W7INRuagpT!Z)v^99diDA@O~U=FUjM))zl{af_v^>3Pl^RHh2GmRAex~%^oy?Xtp z1)e`-{RjKY`o~`>33$?RZ2Zf@e_bh@-?9Cp&@DWn&h>9L9>eBVYR%-xV`# ziJuVE=5lp(&dFn4ber2IpTr|E5WJe02T1W9r5No6FC* z#ioHjzzpi`g7vA?8wTn8#={FtF`|Qc?zSf^9mL)2f1~Jgta`rt-za(?tDf!N8%1wo z)8%2wL*^ef4Uexrtm*%)F$8|yJ3@92_V@HNgZw9B0gZXw2yTo&zty9URnKudM$wyC z^<4MxbX)s5?l!BQ>#nlta*t-FX%Zg4$>l{{pCf~G{RI1CEn^=J`|JFC5UAsOJ8m$8 z8{^9Z#06Hpz|FGidG5c{EaO-1?SJ2xCgJ??vN!wxcCha4|4*5^aeydffD23me**>7 zvx0PfuhBU3ubxH>P>wtBtKbguX>u2R2F$9y6TH_|Ugnbg%!G{5ZbNEV}0Zmf6H{`9B$~duQMaf^_CL-~6MeM*qC| zx9FN*y`cD$We5N3QF927>%a`tz^{7~I3h@Ag8x_3*!_>|z}gLF>%M!&_{)VQ?h97` z5_hu2pWpnmr93!3^%WMK?VoCGKgX?U(RBizFq`m?pSQq=2kYJf$qdq&-&pIPHqCKw zwdk7PpHqw>IxfGjOxOB~UCq`d`ZJRQhNoP5_w@(H0QlmI|C53KxIma;I-BidbQ+t^5qh>; z6vaO?!rzx29(cX`h|#r(=%wy~_l>Sa=wD-&q*pA6E6RQeI>lg!S?(3*1vo(acVI z*DJX70{0}FKh7*4Otkb4`}L9cjINpO!~b2YKh~Djztrt)^Ow)Aqs$Qg@hNpLwD{}z zHZo0o{_=8iqu}^??vZzG{V#F9x9Yj>Ef3qqH{X5M<}Y9B*3=B)&)>T_cXWc$#Bq9~ zVE=etSso1b_io-j7p%|Vy@UG$b-X6_?kdap$-~`If&TL6NO}e9UjFR^bsSkwGDTzk z>iRf1-WWgQ#Fpb8UTNt7cF=7$U3SnL%?5lEgfsV?=>Ell{_>(rh3>W$mhq7ZoEhjZ3*f>idU2qRw=qJdXiP9KOgh@~ga6^N#^9L#@@4SP znkK&S6McEG{t0)G9s7+Y{QjQ4ZcU)>?cl}1@jd;>LqY!70h*Z3X8)kSZ#o~RZ?oxg z`de5+M;;97zvvCk5Wf867bP$GC&(Z77Ur43 zBl0hEw=J{fpYP7G`Ime5mM%0+{P}r$aj-s@>+8q^LHU<^dc$D<1@u2)`uh)n<%{{7 zYu}j${scXJOprbq1Gw@X+W-~1%{~j(>7Q)|Hzz>yyCA|OoFMPM{qKHbc#HtNd-tAI z&vu`SqTg@TbKIM(daiqsMd#h!|NI%8KlR5x2-fxX^w#?f6W{pAR}HKT)bZK)Ia4&o zkL}lr$S)kdT>fnOdFB|(YEm@ zbic6bMeb`6y1(^o_pu1o%s$&a$ExSLS4GkP7-h>I-~Vs*&vW0f`scXoqv*q|dWqY@ zcDav(-8okOeD^A=p5vZv)zN>ep6mWT(l&nC?s}`9uxYb(;rttORRcxb{=O}FZW?%rWW=Ogkf zayQs?8NWrQiNF6P?le<0uW`>5uViZPg3hbgN$GzBSa=|1x)jRma~> zw(8jbtvdF9tB(EOrtAK1n)t^L`@bogdPQ;f(j-(6zW3*Bi}y~rJ6(`Ed-nll}&)Uf?dV>iFAvRz2SxV$}=XtF3yG+uEkf_@$aA{{EM^ zdk0ziFXOk)H1Yf6`qvcA@yGa0v+4!z5SuRdnlnrjU;FZ`Vc$Tb3&-iH!TuGz7q}V!<)KnzfG{dpL#}+&f{ZiQ#9J=dt&KU9q0c6#^6Qx za+of2)q`|NgfA=erxMdZD|- zsu#J_Y`To!VAI6k{}T6VQ#AW885DbdT)D0+h^`Z-oT&#e=o`?D`~|0=chz0`fis^jk;MbU4t>SgW)QS@uA`Uv;m zJ8b!naO>Ip<=A=QHY0>@d_+HOVUUgo-EUdjFLZB+qTglHrTu5OTG~H1y8n$f|G#cG zf}8t>w11M#|E=i$-)}LR@Qp9V@2=?n&j$M!x#!yaac-y=p@&CZ?rmEGU>^Uua!A4NZSt1bTmw}I8az+GYUmtPUe{?2H^H~*r? z|0h6a|9V;Ddr$F)nwrWi4Ph3?ZfUEWft z_{K=l7hjGKa|3l8U(UD0*W+8=2oqlexb*qE#ArRD19|RDtDf(^9YrsWqTg-R^W5tq zbYJ%6**rX+YZ@G>2fP2?XqfoNr^sz)jbGp{Go8)$WqzKFF!48#>)sQgn%B;`ZX>H+>{7d%IrA;LOG?-^4x{Q0^3UaOw#-VmYtqL=4#=b!qx@e+wo z$Fcd24YtuKb+3BPrsug^dfD~+t$MyYD~f)RRmZhs6#ZziEkAr$q1C^@eb44E=cd`F ziEn&GUly!y;<>wb6n#XXj(xM2DMqZGT(`Yd&vzSH^*s0B4Yu(sbx&U(tmC);*uT+c zi17GK#cKej{aM9^#5af{*A2u*#ED#`D6dL>e&CSI`)67 zj{Sd)*}iXem1pzLWU(3GIQ>YW5x}o|cTV08zB zUmT=Q#+|K@DW0f*4Na5d`gfqaF+_gd%WreA?&Y^USoi#A2J4>xNK-dHTvqbqT@%y5 zmmm(`o2FV8Fcv`O!C)PKnw;_fy)s|`RR7M@eF^g3^oj`8|LK_eO;)|goi#2vLHhTK z@b`DW)SdK!k-Itn`1Ctus!hjt$8@vn^K81D9plUteEEsK=P{#+us#{R>tu;P8E3DP zExLX?@PzjR;`7N&6PrKA=Q7hdVs8I;g%LVpbPL_FHeG(Z%kpkMTQtnc*DKe{X(rg5wvu??w2BvoFV?XI_MA9vQOTt~Oo1cj&-m z*ukGJZ%?z|{^*C_hURz1hz(=UwUM7M;hoPF6j~J=v<~xgo2LYo|+W{m1VPTlE}w zo>k9tAGGS(?#)&m{kQ7qzg0*7tvdSOHA?@jI{I(b(SNIs{#$kQ->RekRvrDf>ga!$ z;Qn)cj<@JspYyDGj{Bfh$M23?^=!A3RnK)#w(2=<$g1bLKU^H#e;(i8x9RfT3_F(@ zA$-Sg(Kk*A(7pZN5}$gkO_%p6f9xC(zg*hCJUG89-q}7gik=aaf4O{l%g%S~?SB@m zd+omxtS?}Gj|A!ZKIxC00@}wPDdVO82SGa5?+>PEULD~4_`X%g@!zWB_#dJBRtHws ztr2SE)k7_tE^iC39Ba9HIBNZir})mcd}HX2>;1!4J>PvHihgMn{Z^}<<6dmlv)xmz zIPH&tvcr4s$>4GI_BT1WBx5V=jY@0!Tr;>8s?iO;p4NuG&3$p z=ls54ipL#4$69q9|0DEp>*eL!dG6|L8XTwZXlHcLrz5+0V~kV7aoPQBIv=M`ilV=0 z(bniTs~8 zO-%psrg$R%TTBzvzpE*p$o~}6B<#;`#rZVPK0ZI&bQzxyOp|bYj?asxc%u9sGEGeX z+f4C9{+&$|)4#bXp2)vOgh@Dn{sq(*&o{;>tn<&rm5j9PK;;e}oXiXK7rkqsjs@J; z6wMAmkGJXN@ofKO)5Mp*=pUUI*gt${vnfWjpW{xn>bdUxD0+ca&vW}m(c`1&&8&K^ z8)Mbc|8tGOG5as$_r7W38(+-Nd{d0@_twXQrb*ae*Wb-SIv>k-F-0>zcJO9aJ;#l) z>C(R++8RR;&W|5{SDT{QzOH}MBwlZ*{Wnd*{?+{t z(mB85OfjPWxo%&pp5u10>C(TGO_Okb>|cy2n(fQ{{?OVOg0R2#@BKg>^IK|)MtnZl zDzNC@`nT$sf2)r9x9K|nrb)Pe-u&kpoj39?*Y$6jg#D}MKS=lH-xSUG*uVQ)b-H)s~uK%riwmaUc ze+6rRY(6@*v1F_x9aG>RY(7=I{I(b(SM81`Th0G;QYP$x9WxN z%T~R>on+N>-F{K@%dC37dxljna}#X3ymzwW3}Xn){WsR)&%@)-rn7Nu%W*%BP|c%D zjyu4r=eZ9@(OX#cT=&u_`mP+K>*mo7y{l#Q&vqBu{N>3`$$-G4W48Mrn?F|P!&W`d zy~C>KxR+Y>Z1;4lp6k}K>Ur)jr`yI4^Ka4lrNsj*I#<`jRz26f!>Z@Gms<54_jId{ z`M2u1?k}g=`k&{1Y}Iqz|5$bO->RekRvrDf>gc~!NB^xl`rkZC|E)UuZ`IL%tB(F# zb@bn=qyJVN{kQ7qf3qn4x9aG>RY(7=I{I(b(SNIs{#$kQ->Rekr$*_&RY(6VI*$)m zMA2JB(UYwD2zS>h!TICKH?M9#F-^i}N9MQC6pix-^~q860a5fTtojJIg-w_I<4qGY z|6M0r`j4BpYi+u`*SNqm@x>Q?VidhJNcWEarf7^W-#oa(s$>0Ib*%pgJ)AwGe~}$L zI=r=g?o)QXN#9_dzfm*D5}&s|uC(d}?pap7#J$X-^EZyph@yYdG&q00as6u)y*!Hk zvQ@{mvsKS``$f@HEIM9U=ia^ZB%_P|`OkL~EdJj7KVdi@w>m#HgZr7Bl_ZJPM=_udJf5~ySKEHuT4_6yysY`VO+ zQ)-&{+ppm4CI{<_spmw|KW}UdfiFJxo?WIGk$-{vm{l)w7e>*qvgz_xTB&K`%TM&= zKpjV)7N!`He~G)kk5Xp+)IZ^ax6jQT=s5qcrUv;V{{hzg zytm#8OcP&x99>(OqS-&pZ<0-y-{*H52IVK~^OHcG>)#a3_GSN?Xqx!*$7d%~jPUo4 z4+W-)&tHx&Ie|KEye65V86W!VSw`oN)7M7P7us}ra^B4}@#pWo*-;v(Bfl$5@woh2 z*mSwE`+26(MSuI=gGo0~NBe6{@woOE+I0Di#%`vGzkTmF!b$^m_TLoE_RFid|LtxN z*gsE?H$(W^NBmu;b3}aayW*ypCO&`pF1ZE4y7wpRx<%1TgY_J~`I8()&k5Agza&#M z`^Wy*HwMqt<=)Q})5PC@@2%YhfjZ((HbpZ&^Z`-yE28KvqUcFc^j-BV{YQRlt$L}u zFp7SaMaQ?~^8C}%H1Uluey8aQQ#@|`T3Gc`H_57F{_EQMU+S*4>Ur)$t6u6(w(6LF ztB(F#^*p!5aeBd|p3Ty(Ef~8yw_x(lE|bT*I7W1t)HS!Dyx#X0{(E$Cc}WZgeKO7q zQwz#td%bwz=q{&V?CRV;A7XG(BK^y-532v3u>Te6-|WQx*Iawu^_{NmbRE*jLmCC; zO?o^YatbD|EtnizfS-;QW)_UC$SjyNei_n}?YYMG?YOinD1UMR+q`Pu=oqEjXV;H;xm zyS^6L9NN<6km{3O?~t0+h@C6285To!KmOkJ>xhI2%M z-WObbYnmLF;HW?yC(N0qXvT+rp;a$*i=*gAQY`sn0XDSym$>iR{N-lfx2B1||K0?S z3e<5sZKf$k^uNr#(5B0mk6v$@_}ia~gSLAx*%$(!jvc6>=^W8M{)V^dZ0d5e^;^@# z7hm*IfjTZ&W}2cIANqw>y}&Jwq8~{zIv)`~-)(61&v)OA;=kFd7r4uvwyNa&Nof`{$*}MQ;hKU*6%-w#t{1bOWe(-X!_#=|8lF2{okg`0q!2t z#NYl1x7ZXT+Rt~}S@i<9p;a$+4{M-xH|g z1X^s0W_(-#w6p4^ZbO?c^ZQRNV+eftVgK7~ie~$=|Gi_H`2BJGH^m5lZ+`DFP5k~P zZm}tv{+Qo(Rz1&cXwzl?`zJ22|0CSZrWnzFzPsG27q~O6dZ|0orpx?XZ<_eWr^sz* zie`Q?KMhP1zkiu~AlB%7gugdG-Yl%dH%ENIRDvnJ^z^|{`_(NGsTGZasIRFIR9C7od0SVoj2p_ z`Oh@*=ZEv3DMt9q`Oh@*`{Vp)iV^;D{xePd{y6`cqUq1`pH;{CFJ$Y#oc~M{fBQK9 znWEW#d5(AfGfjN{qTds!^ZaLuW_+IitUAtrHeJtujxhwj{CNH|MYDZ9|CuI!f1LkJ zF~VQYf2N7wALl<)H2r!0v+6ki*>pYs9sTzx?)YWv9Y25jIRBZV*?zgh8}g$}6Q956 zPY3Fl-;t(h#>e~?TlG@6olTedZD5-C^27WdIAV0(Y+vU0ThqkvU*;}1#Rz|IexEi? z{Qf2GNK-WZF~7xDJH<_G70tB&)(P1p0kY2wR|=YLZ)+t>5I zY2x?C`QH>H{N?hp#0Qdp^^5jE@)JBRQ~y3;|K;kx{KWp=1IeEHRJ5SH zG^>0sSkIPIh8*PFWW0BkM?;5^g7KLMV; z`H#Q>DC7m+-%<3L!FmZV&^8YYoM12hQ^EdTes>4!F8g;~6#c-y!2WHgfBj&8PhTGB zj}yRmrf41jp^vfZBiv`A=pAjk{Dr6MOcVe7=5qcH><#SyCa?d&{+_-(*gu=`zloxc z4A#@=|5OycU7(H!h&PyG#Q2xFhpUXvo4Py!uWyF%kKbaB&vG+_U-v%XeiKC>8LWF3 zP)|kC+Xd^(nBR3#^aH;eL*UQ9kT3W25B#c&@`=kx z`gy_nMDO_gTVVe^{qJCX2K{G7(ccc%y*GS{qv&@B>m{7OhEeqMg7qrz_!mWAzB^!i zZ~@ExV`h-9-}Cx*ppO0H8B;X(AKCvtxHpfjW-Q|24&k{>ky*H1X%>onP(_);D>_zhK=v|D6}8;{~5AQ#A9#`TO6U zM(0gkUM&2^H1X%}U7x&d>c>9d6v`Wynb?Q$0i_VH4G#Q!KR)0%yeiDXNr@kD+?IL; zU3lCZm+GH`V~F~X4*P$HlLGyh1o+Dfmz}Q1XPhGB(XG7W|N4cT%e>DxU*o6nXB^%H zlkKaF?fKaE@EIo`GCt#!@krJUcN6q84pn!CE1z*Z8+=l@Z0tI`a=Audxm?rroZmXN z|H$~1GXh~cwg1cel*16mUb)=+*Ri2Fg5&w5y9&KmF2#ngT;_-Sz6}N+cP$LRa(S#p zHfMg$VejN^N{bOY7saSNwy=fHR8gm!^rcJholF0E@J8t*Oi9288t;bV1dN(ZKQmbO zM*Wf~`p#bh<8z|i&!Xr%EIMa>O|b6u@13(lV0|u+7pIvzc4_Pc zIR)h@DFZ`}d#LL0QT+ThEHMc=zvdi1d=w^Lq1`zfpT&Qe8s(~W1Alw0K+x03+@RyAw<2ay3IEc)!*jP zdI#3*XI2Zp*nf0QY-2C(q?A}jEKhlaZj)k>uw7<5-*e(<0Q6?cM^NVl_kW4 zoS0iMT$jW;Xw(^ZL98Sz+x?g>f~McHxB=Hp-w)He=p(R6*me$!p|Gb6aF>Ml(y3pI#$8uW#4&qVkqI1PH#DGMdm@a8*IJI<-yx0X{IZPad)RF-vC zlGCW~)lQ?Hg-)ZkS2>MBmpgSUGb++_o_XjBrNudEeG{BCteLbP$z>8F2{96#+C!7d zys>)-b{VlwM(5PBl#=AaB#dcR^LVU}`dAP@+g||NgovE0=jM(vHJt(Y$93z`8;b;t1;zyZtJ?-+q4O#2CCC_f zcFC|yf?c9hcW7E!7RRSeT;crlW1W(N$UQsG$;KEqW*>Vbl~r#?Q(j@4{O4SS`=-8< zi@DE3J@@Mx&QX+cAj|Vwr_Pd92Wtpp_5juv;|%#D}Vt%Bo+(sfG2$`Uv=@XM~)DTO5aZPep(J#5Ei9k+Dp` z+{JtSsvgUBZDXBs{A2qby<JwNlw<#dKJ}vi(1Dzf8Zbe$OLa4 zr(zAKIGICbB~{x_Z5iwA#Xs7THruT&Vx6@-=O;xri!VqThHUYhjCs%o&k zUS)Os8*^fv{rJcD9=&y&gms(fqzz3j%W4|yq_myrq=Y6oaV4@3@uNn19dF;r6-rk!SKX;&TqjQlNGJcs-!@SHhlUkg^=)IK2i|Tq1G4 z0a=b{-5+PM##yWWyFiXf(k;RkAj=gX;|>5@elPo2XOMeYcaT1JgDlUgE@Osui!n>? z5%2BG+qJz(8uw+8zMq2h{uN}l3AYN*0J;4#kaqpRKi5n9^($+5wiki4xgDfUImq%B z$ebg`I_WO-Wa{&}3MeY#C^9S^eaFM?0>7ynm4mUUY9 zj=e+W*jowztmZi8h3YyPRcYH(E0Ze{%MwcBaX#T%r(Ru{H~)>pv5}?Z&3KO=qOBtQ zl)qJuc~5{|`JdFOv-ppZ&Jo91FkJL390#*P@u7^e^pZ5T+Y93jy$!;%FU_!jeR96o zUYsYf`+?L#b#Xpvo6d8JamMz}Lp^E~Ch)krF|I7OBqn@~(G1rZ_}3Y6$@DB7=W&dy zi}i}*h@5-SKI50erYc>=^bMSES>6Mw`OjffVSl1?7`IoK>hW8Bt$7Z69c}O&#+bCN z=4?H_9nj-l(`~X})1D>0VZ752*C5!(D&s0*%4(L>DD;l0n)^oBG1fkiZD-srY@_S} zQXdK~&|{#pMUIU*AhpPKS%uiWr-(KdWSOD$tQOqo`-QSXB_U%i70R){DiLFpli<|v zI~~_3)13ODDNgOmlnP$s^1RGddg1VzPOZBn2l6cZ8>V&g>WK44Hb#tjPDLN`x9EOf zJA6JUguZpHY(EUL)YX0P6x|0;(|s^hzm`+Kb4F!aMfjS^yN(%N!->VYK(5WZ;oAHP zT$>jhyEe~7SpV97KyzA(oW|)IPp^mT(WUX;Icl-$mC(C&l68DP$TCms{(XEq>`U{- zE};RgG5a>abz6O>!NxjO>Dy%ltIx@6&Wd#=<;pyh33YK@))v>Q)4fj%CDnGBINy)N zKekFH)W@|W?CK8GHI4Z^Gr`Fm-W%7_y>MPD#^;bC zC%qzkomEyp)_JZ0K3~9>WhuwXI|s_=A+FanWWhO{0-Kn+vL=n=sOpO}#yXIB?*TjL zzS#$483Iz90&=#W((SWAwvpZ>#=Dl`bu`;9)7WXH;-9N51ZiKU^{HB441SU*+Aff7 z9R*pklVtlvAh-7iStjdtInLmE8P|f<$C{yM}h*%jlpsmHEd8K)#CacG>EYo*%m zhV9B<#r6k~<*%JmkKA9Kkc@3&Kgs1xaO*E(ThkTa6p($*Y8j7f9eif$nda2PT8Lj7 zQ|29u5u*p%piMW8GZ6H~8BE?G{v$w^a}b}}B_PW{ZSQ%lzovEhELHvap_cdgA^nVG z=M1dx=J*_QGCs%D-55TubG}ND%byLTz2;a)ENvS~J-u0?(+qyu@T;@2_V$#@q>6;H z_!9a})p1yaeA$n6VC4^T96JQEeENTS%sV;WIk|6br%BIL9M4jmK^x+ziF-Cyg{VvzAmLE2B!?F)5#rEYKfnb>y%X&qW`b;cnby;@ z6P;}A4~>v(N{@u?wJKvPYL?aT_N~P_W*=#LKZBoqDe;1?QMRj3t-+Gx=^*pDRC$MP ze;DkxL1N7ZY4f?(!`E%$<7rw=Srae9kL4qc_cO?z$KEMy4zhn;mA8R-5y%;@d=boE zC+&6zS#AT_{&0|6o&*`=ZIHg-f-GA=j^&B+%h&uqMtqiEK*p?9COjSFd|ax$1El4{ z%Kw0wUr78*K$aUo#ux|E_eGFCYgGRX^z!lDqbSonK1ICILsYlTvD*Ivd&a6YMDqn% zzZ9HUDsgs!%qO*<)cv0~wj&Nd7oO6#Mkph6$Vu8>eSDN-BlRz_)alQE>>>Z{FA0C< zn27p#w8zgJEQ|3uWD59}Zeu>T;pfOQ7x#In?fO&h`?UCrE#Te}$e-TR`f9DG|08-I zkbZ2FWje^5W@-Hct*_Pkao0Dve@Xuzpp&7Yn8O9K?L_w%^3{G1ugmkr&b#N=8Do+W z?_~7Exdqn{8ExeLukC)((cD<)veq(Jq+G+|`nB!l$6v!X!MPZp15>sqRVGx_DvK+L zEsVi6o_C$3IWlo*hZ)2Plh{^IiCNA#(;5FgK+J<8O(WP2-+cHKex4F(zK zQIK&LfgGuIAluyoGLO`|W1USSr9XQ>#&$;4@Y>1%8M7J4nCF3vSpYI-G02z$LB_lf zWX!1``#KY3nGZ(J%~Xt!i}y*mz0SR2=O4cc=nGV@1X*M~gs%arbc|b~4=mk4wmT4{ z#}trxy$UkV&p}%52HB6~dt|Iyg6wBE}Bf?o4x$H`jnuem&;do_z zFdZBMdSlTt*=dQfI30aDwKUFYiq8`n8|9vWca5lH@;Y*1Sr2kde+QXI?NKtHXDhD) zX?ef$IgoRQ|;OfEB zx4%J_10ZwmcBhQpLm=15DZ;!@$pflJnc|Aj|nbOT9P9vPtW5 zEz5hY;cM-=8uxqbZH#*a{NxAmul=L=p9WG(uN!0dR;uqbfE zvec+4^$S53bDf1_OhpVgB(}Ng+fieU(|US#JU+uES3hGtc5kFY+h2>m^?X^zvl3+4 zruCCwk$NkT<8y)5Lwrs+9P1v>$eQ4~vBB!drwwo)XWUr1UV9m2IWSJ@CykeSTaf)u zZ=UEh$GxGGaUI(P*Rj>>$U83}?x6?8?(~Pm?;MSLy~e#o>oOPo?4QhM`p4$t0nP1g zNS*=?$_zLF++nEk;{?2T6=YAbolamKei8*5_#5 ze+{)AeiOIIT6+~_kvYRN=B&18dvcmyd6IE@GDIK0E!`J{yPoiF}5RcRKJs z2iHoawmn6-GJT=idwQXIe{!;S^j(3dI_%k%#GLWORNx5H{IZoQk1F08jeFVtW zH3Q^z*)r8PslFdPG+owX=f~xK-Ay2U`e}VU$i6Jq?JITrCfy$UgxKHmWKFM)yFmKy z1({3AQ{vwi-fzs9~Ah(PI znR9xhINU!=cT%T&PguQU(NvAUOXJVdxGS_y&b>wa4}xqv@mAS4&jeX-4YHl?Aj^Xw z+Z(5KxhBB=(Ib3KP@(NMm>~T+A7rfSmG^+dOC-*VAj_K|ZN3J%<>Z^SU*0uGq7lDJ z<3FSEKh?OuYMtzMgZMuLvP{={1;}>RgIt?CwZ0dmWooh5cLLeZE?Pg)HA;4}>=X4K zmNj{<@>;N45Ah!lvb{}OPj8vvocd$aswUeTRc2K*D63ymuduG(2PxEe!{E>II7r_& zK<4@-$n5@5)|n{V&jD$74ahPKWbTiHw0{Hi{6X6N0kYJYBzEV375k+x`#~NNMji}# zzR!U4T?W$kTae{1kZoig61(;w?TSHK+zYZi2huM6ltky0zH&^{>-EZ*3V9y>fcAS- zjar`VEaeL27I55diSr@I$Qyo>`aaNWX^+%T23c>Zb=fcKIjI}N`^92yuc!8Zxbg|G z=>H_ny&%g(t-q%Ag+GZd`*b?av1v~2>EV5PyT*P?V}7mt3#|L2__hOCx@f(h)*EVD z@?H<#>1vC2``RRxr8iB)wMHFYYg8p~mwWkm=fK;?(^4d6okw&omDebTDIW(puWu;7 z)a`#L>r7UE(fSjr ze+ROSoghDx{;l<__2Pdu$YXgQt*19na+(isfb(5_oR{n2d|4OoVP-h76>=XjA7fGS zk@&s>GP`%Q{+-s-J{Db`p=J8+5zBo)K9ej%oaOLkpRSrB<8mj+c#kPx2f1&p*E)Wb zbqLb$cWkd%D(Bc!-;igPN8XI_e3IXa@y4YN$QaE*`lM$k;624Gr*Y3rT%R<+DYvc@ zQzm_zi=1eaQZD(N1u~y2m4iUWD%U!GH1c7+%gfTvuva9X4?y}G;Uw>it?;fdG?#^Fi*{?Z&0Wf*M$@oyjPX0?VSIZw9^2btLNUDxV~kalR=jDdfj`G*5z1H`?%}z5{-GQ#(Z4) zhVo10A7EcSAI;VC(PFKC26CUfr@pVWSbjx`##;C@wobfo8%{C+h>EL2T82OAZ^|SnL$mxUwN9| z$ILo6$vL&>BCMHL@f_Hmzd9Z0`o%?P^tuT@FaQt3cX42Bv{?w7v_ZU-Aa= zI}2p|?jZf{0_pb+$g$cDHUJN3z0pR|dw?9PJHSTZU0Q!i_1a&?cw^NZYzqAxt@i{O z|7(zW{0%by246`Yc_8!1YFP{STd&1C?%f^lEz?3-e-B{&-GYT%cY>V9t^`@yJS=s& zUd%Y*_2OdPUq%up^D* zP4Dq{)_eZ9f!toEb@_aR`<;4^3%}2G?DJ7tn#6ij^ZH8pr?T!G$-k|Vc{yvvrz^;e z8tFBAN09Y zqKrptkmK>F*3+BC<9)gmyib?x)afC2RT;BPW0oNX%T(oJ?OP>SdWpn(5@hs)AWNf5 zWqaf^__-Q0^;wCz2Qi+|cf6N?EYo! zAddImw(~tZ{yqTLa*57Yd-R)a_W~JXlyVlx*ejG+3+y`3|kG?=SYdLB{ev7vOzX@A>n-@coOan)7J1#WGvD66En}tMZVt z@e5+t0c70XAoCcloUL4`+zK+zA&{lXN>q9}_UwB08-LoZLKagb-NdNTH6P?rX9KPYw`c-wehu_iX99HOf^g(_s zW0Z41=C(??O?g=LCNE0AI)ZGik8+H1j&c>qINLy$!yt2N@)GuyhLYdwAj>+Cw)jeF zFXnxXq`%WZT6_Sqzu#)T4DX}Uelp0i5M=Bxbo(ydo}}Z*HQWHlW4u4Lz54yjD((M; z$cMf+f?Rj^DWBEt?}E91%k@WpkT#=1w*Q#cZ~I4d|GTQ$cyBQ1T~%r_;nWu+bVm4v>Oiov_abHw^4E#3o^U! zwSEYsZB{GZAI#!=BQDWMr5|F!I5det-Wy~YqV-u?uLRjvofV?D z2HDoNS|6r$J}W$>?X6Bd{H}^Q8*=Two&CjvqVFEfFLj~xraNBqwRsdoTrUj(u&P=er!LX84z9dk+Wiq^>GXgc>wAGbV^(N= z8_2R;-@gbN`?;D^H*I4e$o@@Hz6vtZ=gQs6cB^zd z>l}ybdXqPBuGQzVkAdFYf%JJ7WIj7|dlks&X?U*87*~QU4}$F1IIX9jo`m0p&cyw; z1~`Y+cWUE#j(nn$T=CMlXMZ8uX1Nh$yZ3=?_gRpU-&KAOiltmPKsr|E@rb3GyjEg~ zMt-hfskY<2Bo=&ah*yGGZC_31bp-ikfhWBwd0wcz5p0a@_i6oE<-5x7l}D5(y`}!j z8%XbqrcX^T$F5)# z=*3ze3(~&=fn4KHYyDl2`W}$&HY(D*K<0HPNPP^*_jM;}{Y{YeKY;9e z=mwoX@1B056E{?T=c`2Lt{7v$cq5fFLC*hjt#4KyP&WK8-YdCAV!j5__HC_i(Rvdd z(@r4ufm#o`Zl9{T#;XLpetHi5L=0kXgUX#JM1+Hdc7?2o^P zRH1GDtugB_mp0E+UZ=bpWKK_M{cWv(12*m~ZCnE~he04$(ZgDQRrN1*dpphTI*>6( zg0vs6b$N!CY&=7&(mek}dn|QVNSJ;ltV$Ueb8$k^x6km_JLme6?iYHxs20jkT%bO^jQYddL77^KY?uHH?60f zCVDH7_B}xQ4+B{q2ie9-kbeII87Jm+@oNs!@-mQq{Xv#TK>ED_((gl%eQj}u)VqO< zGYDjUkAn1E3Np@@Aj=;h*;)7K;BpP?#UJE8aM}I!E%jq7|4C}apfBz zk5ykP{{VSRt@FO{9FWJ>Ym~!49`hbozM8t zvRn%?rvV^+9|RfeX^?Hd2C~ilAm5)!uP61vAoWK<+Ajj>zYb))Js?YJeH|mb=aIRw zZdLfsSCThY59nCs_Fxoz&IUQ=Wy+}_BP~`|>h>y-CG8q{cRv>_ij%e;0vY3ZkiKt& zUT#|7T1)hQL6(N`n&WAB_j{wf`(6E(F3o=ZT+-vF|&dzI-Q%J{biIr3M7 z)Q5nyp9Zol0XZKVRNt$5`fAZzgVe7EnfDNozpFA0WV|Jy*FMOy7o>gqN20d|sb3AU z3<0T60~v1#$ZN0-pqD>L`}8&1K1lnkK`(#M%U|^+s&7zzuj=U^t3T-ZgNqN#^SK{E z#ySKthhL7!^ZtK9)@vUXy(P%Dx`8Z%K*oAP^(CrrP<@~3S(s_Y84q%-p4R$nAR~PS zGVV^0B`G9x-Ug(86-fO~kY%ds?|_VZY7Mz=Jr`vC3Xp!KApItSEH8u1w^H@rR8OfX zdMl9nwIJgZgN$X_q70|@KKcEfwEA+6OZ!CTI~QckLXa`b zbo*40eO#>DD|LGn$m4C=r(&NAvJ`?m)|Bb?sk(hJ$ZN?;-Cm_k`waK))$h6XVKqI>_8E(E4RM-UGD$ z7|5}ir}ZVO`|nTZV?2ZIPg7%I4jd)cx;)2>!(|D^A@aKvT4Nh+uLhav5Uo!GIY;!K zy-CJmEWTTTWgN=p=|;*=5>bhGLYN*fz^F_^&83c@o%M1GeFwR2f5`VknMj8(q|HUS)Kx!)0b27+1xRdf`-TolRv7D!TU-chU4}F2_ zrqzh_8?vZgCR+U*0GQ-hDit~|0h6&h?%7ri0$g;hdgS%c=K4dX;`FP06wESA)jb{Kpu~_osO>r`6xDc0c-7 zfbERk6hE_Eq`XP#ZS?*3x^7>u{9Rdlo%o-vybAoJLh?Qcvc$hHwqYGw=QEw#}S+p~lDGqsLh1 z>R2yApIFv`T$6jWuc;ek|7@k~t{e=~<57_PTBLQ7pBdIE_kg?(PTeSMrR=U8tb7#Y zSTEB0I*|8f_JI67KFWaN_)URZFE0Fiex@&!~@=@g? zGui9+_!^#-*2DRn@$$J7nqIhgS5T^JQ?**wccP#4d+zU&j1;3IM@uF zp!Ki7=BRJidfReYv)w?>>HQ$b`Z17eZl2Z;f}Fd!M@2syWWAl%Z`JxJkaId->q}MN zqTBxuR2{NY+AalA3*cC116ekK^pAT; z{IWsj+8X3IU##`lR9_3S-CZC{(pd4o0Hj}cknIlyX*UIAc@<Gk9AJHn|>{Pgg5 zVoud@?~iey%_AUvUr~MrvhO>UiJN5n&IGyra*+1@LC;^ezoOee)9pKTd*XLue;o)6Syr)wA z4tNE|fBrzx*MTfu2dTYxZ#isRrE_(Kj==zs@h2-6f^2uKa+hvT+9G4t0?fWcVqXo? zcK}GAdqJLGAJh6l)f?kGtGwLP@xG3%8}I%~cBWi=T&A)6fs8jv`7+43pDKR^IW`Gf zg=c`=H!jn9Kalp5K*o6)WV@e&wEGq0F)Cr3@C?xN2N|~?==p=5Kj`^``9~zzyFqG? zfwX-Qr0)ulvHs9{`cctagS77nGS(Q7cJF}9kDK%!$8J)3S^vg zj^$AK-hE!j73x^-)SMH)*EJ5(?{Z~--Tnx;U4J*R{$a_nDahEJw0;f9wr|&Z9rVp> zo4?CAytZ>v-&Cg|-eKi;2Jk&i=J9~$u|V7TMB83N% zRXu*Y`h)CO0mz(6LHbPu8E*l|+&=+n=Yq70|3U0>K-v|6v?~Q^HxZ=W0+8`O0cq!g zw2S{y>~cWb6@auW1!*@Cq}>9L@jd}*=Yq70|39(I0clqN(ykPw-9(Uf3qZ#E1f-n{ z(k}idvC9EzR{+wk6r|lmkai0|#`^@MoeR<~{%5hv0clqN(ykQzNq@KV?4M;lbOjl+ z7f9bBAY(lY^4vXD>x)!h2hx5I$k?enWWBTnXyO?Qg@#USl(2WdY6r2R`E?bm>`-wiT;>@Km- z0cl?V(!La={X~%Vi$L111R4K-AnlKWv~Rjw>@NaopVcM-_sRN&8uu&>WwyN|loaY4 z@_w(f7w&;#f6c&!0_`T~T6js<#v0`gka6R72v1X90y3}LLC;^ezogsO==L4DJ?yS@?sq;JK)1xWuMApMtuY;U9L`&7@|B>H(E z_3J>ke>X_~*{U!4F63QzzY8+nj?H2pw?*tv18HymUOB$c*!O!A+cU*xHO7PGCotwe zvTY;iZPR*IZh~`C+Y-FKU*v?}sKP#iHIkMUerGT4R~h5eKt{Mkc{|AdOi;e0T%-C9 zkom^#)HzgM0@Ckxkntvfw0lYQHOd_z?c#Rn8Ukr|3CP~vuABhU?j?}%)_}Cz0aodE zLS5Wh#_$G^ws(Sz@sZYlRz2=w8LP8F>cc?pcN4Y#9!UQ!Alo_wvaRM_#QuDc=l09B z{t!s}7eLyt25JAB>I1rlyw7C!fo$({koLcUv`@W6>~lft?X`ZQYr=fY8Dq!nrX}7f zQFZ}&h1eHl>~WxX4@J3JxBmpvF6KA&2N|ymIQIgHy$)n?LE3h1C;46vGG>2}-XpX= zOZ62X?RSGL$?YXxR>u^lMc?M3(|a}xo!a))P@PcYQ23k0WG$AVUmNjokGb5Uxjm$O zUiksY_&;CWAnu|Ws<^kkG&IJc<6TfL7%WSR7T+843!TTcK zyFQib|E~IfuRNkW>38&Vv&5^nMdFQe!_@ybEA)OV zK74zA9T1bHH^^BW4KmJbkn3tC$dQg|j-ETmy*^0azQ` zbF_Xh$hG<*$Tj*E$a`WUa| zEfs-WWBtJMz+qaS2-5EbupL;b^^;b{cx$H=L{bG-wk-$9UTE&bgX=Th)OkoA5b^`}9`Sp{o$T){Vj!TpMvJZ3w8M%+v$0+A0SAkr|+mwevuIDEI%69yC!eekp z=(VBs0oji+$~nqaAlLUc| zCI@4^_1+QWc9v=~4hz`_x)&GZx}T$51@aiYP3!pa*fF@;pLrdIPBu9t$C{3ym#=b+ zat_F2@G9jtko(7Bt>edI$6)%icySL)ypGB~Adj(QlygAtFRQdpzv^SKKh8Gj7ehM? zdU20vTxB1S`^6aL9OWwIHjwN7u-5UTXHWXuX>wHKD*J%^TP9P2`KZ0Jn zAdmU^^QAr!$>Vg+z`{`g8@H(yEuloBS*X|~;0NktfOJ9;> zbrHy8@hw`v2V_1IK^}|W(R%!UV!X9@9mq9$2Y4+wMC%hk`pp4v0AJSnA0XG{g$rW5 zwRjbH6Y4i;eK1JByFsq6#UR()W{{=k%X*CW?#qY2@3#cU^t}JcdsQPqmI+#y-~GBh zR4>#!bfVv>n+o5JSd?7zjYG2bJAiDrw{kSdsI!$TL9X+yT0aERzHtrp2Wj6M;QWHpyv-Vzu92^m(tHyK$f>a+N=dRX5WBRc7q(Xe?aDX z6l5D`ekJ-X|}rtidW6iC0>ApKT>^b3E_RjTowcollSUXH%AY}PS3p!J3^vb`P1IK^OQrNrz6 zdIi4=%eFd#EU)VC#-^W^ReJ3aQyjG=ckJ2_~fsC_4>m(y?Q62<2HjQG1 z?UlWhqd*=9XK8%}$m8J_Fd00kY!oN;_8^acy|g|GWc*p+l+UD(D?pZwAamORa?45o z&)A*7YdNhC+<$6UySa988Ynx>8br}xN`r(*0}4kJnIdH<4x%zdlnf0VrIMk9LW3cS zGNcHpJ!5G;Tp{5qorEOG`=-%h~KF^?x}SAFF|8m74`ej@+`W>$I*Z2(`o;C zbJF<2xp9r6D9zF>FMtCvdmGi}iEz0qqM#}dDG-mIpKZiznHR`WF zlIFdKmLJgA1qbmx)kPZSYHr(iL-mza7yWJE-hKA!S~-1YJod9N@>z$jy(iqKblT5h z=-Q`;*Pv@pLa(WX(Y_9|`RLmFlqtc_?3Bm-Xn7PJvliW7m8ofe`=V=%o0j(V0UCQ# z)Mrmm{mnQoM(PsB=`^&QhuMDr=V#TEvB$&7#r`wGe}wm=`8*%>kHViqWAB`tVmF+U za=#FbH8$$+M15P-E5)7*>iPMP+JE`^j}4Jm^|I+&XcP8EkIU8Q&L)Nn(A)9asP9Hg z^>S%nZP1q9=)9}ZGBNrWMElxk-yQAM%ct>e(9#>-+tp~xMD%(80yOSgwCqO5Rp)Pn z_Zyv#$7r-HK#%EGbT2=mJ(ccA_eF(hltED+hW1ZJ$FD%kT6B#fcc$@YqQ~GObi{4w z_yuTr6&=47jbCO=8ea_^(Hb3pK3WE&<0qlx-$diDK}Y<6j;}K|jXw|_-vb@L06jL# zqJG9*Y5s-ijFIU4XV9_;o&Uezc~o)VbiZ;K$I@~-I_{dNPm20N>^d^VxCAZtNBza9 zZ;X1n_V)S9Yp-prw5Z;g)Yh1q=czF-2n?tFCK8g$$)bX>K{u|7JkSJa21uRTqO zy866iez*o}87KOy@wZZ)-x^)FSJa2%BYo5HUyYV;&|{b1FP-ahXuTa;hNH*ue)QUU zDC#Sszs|Yoe(ol;+>5TgFxodp`|fDp@4Pg=DOx(B<1dW%h3K((4?Q+p(PLGjfBL=9 z*Ui_Uu*o%aE{&Te$xSr?>vSEBPKq3v_gWB)pO z%=0eH%Z~N_xIgs|LA?Td(;k;=7Fx-i*QI+o-&{k+}r{VJ*Qyx3e82cQP?xTC5 zV{byo{+h?${H+iFZjjFbRz@CI5~o=Foxb$@=zsp(ez_Xy=lb1@wag9Q3x7b@*^9r8 zRk$pDR<1i*CZqqiI_jsr9-pNvES)Rl`xCO?BYXO{zbb5Q&0@WSiD%qy;h^v?biYrd zKa<`KzYiU+&e^IM{OI1BxGH6ZFQM*qLj zvvS(pG=404Y!;yTrSCB<$@iG@_o!R&82I3d1JmbM(%*xw%I66Ad)ym}#otBf6UTla zd$x>;W1ybLC&QKK{~!wiqPbiV^@q^8&!ERI_Tb-N4*Cce;7J`COZBDbljKd zo_9vQ=DjJ-QRuvj(0TWv^Ik^Bzl9!?wNcOAm*Uk!^X!DqAB@g_5S{-zX7kY3?!St9 z+3_jv!DwEmp>c+yai*hj-a+H+LFX5nnBvt%^Ew`#e;GReE_D8j==?9y`PuhD#rFhN z`u?}S?(6;3qPPxE;`~`IMd#j$-U4Q$F;|4&h860h>+wKz?USN@X?SNiJ6sWd8&;?r z^TU(EOVRc2#F8UZ{;kk*1e)8?XiG^bOlb4AqeNB2E7+Lxm_euCZ)ZI62Oo8o#y zk7NI+&qVLXUWj_>o73^$7hUJ?=>6E>sDFUIR{3SrE8mjpe?!L~hUR$|n)jXPKAuI( zdd$uf-(Oq#>G*BL_~t3k(Y828PjXBgw=&#@mWuUKdoy&MuIRc0qpt3MO!#E9uSDZ* zL+{5c)=!UZlUD3N6$8 z-&2fB&@vejDu-4k(dpb$VL=ZZziSQU4Z=S^kW4?kc18!=m0c>gPxO zy{K1>{T1-Mugtso8;TG7?e`Rh#Xg#_u6yo+t~ns;qr+LzzC7w%(frFbN;V0*gagoc zqoY16TpsOPqh79Y8rKAutw`teCp3qqD^tBUTE8ml_ecE|G=~cBrq5j;iPndp*VL_1 z{}(#{OEjl4tJ1gw(Q9;2)L%o#y@QV15&cEuGt1@B_C`@ZH0sq_^PO=$8t{C)9?!=M z|M-0TbUxF~G2TsF=bp$uEtiCMgioMX-`i3D2A32|pP4FG++FdS6&j;Y)K{SSRxFV| zXVMofgQ7kvKh>9@^Qtv3#qYvi_xs<4O@H&895;~Tr(8^qE88UH*f=}^&Fy0Jdb>TG z8NP+C^mWwBHcjIihbLe*KfE11?laN*inpTu>#*#BX?)}G1hia?Z|zF&*PguFM~OTZ zLXW}I=o&wvIX2jn>L;W1h3Jf(Xs$>9l-j$a_5MGn`T{i0+Nke|`t!e}@AaUkSey)C-Nol&0~^|ev2wJG&?K+A zk9!^sUyt@L&}>Ta+{-u(!_GMDm2|A;p=B+a%kfK6{W3I%E70~~QGYaYoQKB#0?no9 z!6}Ez=yh8d^}EsjC(-dM(OkBpB|Glv`>MM7m}#=dy-^uH7v7ZbC~v~o71Yc9_7^YG zad(Wxb^P3n0 z&Dz!Zzm^N>|8*VjZ+0J=UQ@5$GT8=wOwv2N8ht%@Vz?mM*P@S4ccXEtw@S9bVUMTt zF&`}@XQuOV;;eN4azC2uEcCJRb5VZ_&2=MMDm;<-4Kl(ZZKS%Rfhvv5j zcV3Z>-I-UWV|hI~W->Zw0UBckdK5m3df`>+oE(Dozc3`-x35Nz^~#~?Gh-Xj`rcQk z{#NMtJ!t%z*QE81Msq4?3;ITpdzkY1M?I~B7j&rrc(mqOqOm80^U*ce zguB9Oho|<|VXts#I020_AC12T&2bm*JTv9n@9*ij-Gte3!|b@BYc@SA9k&i>{W|no zzBlS8o}E5}_Xyg5_c>|)Tr}SM=$h&C7H9Bzi*A4Ud5dO+MRGUt#L=-;j!4&Q%kWe* z)>YwsXx7h#tD}7fTB;nG`dgy&PDRUA(SBdFKNsz*!yUM+Fy&jWRyr!SaL=${t-v!j1i^nV=vUqt`c z(O+0Mu0KDE)T1`H@%_1t@B63Qc%Q;_?d^S3x)u&W^XM5~fu8?+!e_$w!ym)F+oso2 z4+(ps&-->nGmms!sL7aFf+ra}<{uxobK4wKn2t|# z@-xrwXpF((I5hU0a8W&@pS#mJ_$8{q{ra)xJ&d z1r9^&XKqX5uSa8M-@|myZ{MlCh}^5y;4vxh4`#nV*eu{GFqcf#+`dv3 zR>(OlDS`CLDcoG@M(0{@1lGD zKH4i0!*K`Wuf?37J~r+7-SB&KZccI7XX*ABe;rD2%bR6%ee4dVP z{mtn-9E|4B4{aF}^_QdnwP^nc&Hb1yY1~kB-ZZp)i1z;&{Y~RKIV-N4^U(9^akKP6 za~+HB?J;yu3(@nsEb52H-cO5TaUHt1DQNlM^IBNz|30twne*?@Ysqi_cwUJT)9#$sSuf?3losjlCCtQW@eS28BOF9P4!|rJRVDwmx zL*vW|SD|G)mfe(&@9Ahc56yKv+Ojz6KSckoXs_^DI&VYKaWm0*tI<-1>&3k_KwHj6 z`|m=_1oXUm+$=|K7Wzd zr>M72UQg-Dc|3UU^cZHZ6Vv^E3pB4D;pJ$CcZYMs_oDv?H1EAmO6RTxx_%FI-sNb# zyU}rTvFwX!uNR?xBhj(5(4U`QqQ|PpOR2pqI<5g4<0Q0y=c4p|$0c7*^y5&j^Oy2|ObM|38c}b7+F5)$(KEHp>sZX)4=@<>;7=6z;`YCAtmFV0DqkqiA^f{u(?oZhJ#f?|?nYvHKw}jjK~E#p{UXb1HhS2S)w<;;DZ-TJ|oH<`t<_GFPcb z*<2<5HdLi<ruu>C{qsra?eWs^&S;;F&RY?F ziHClmH%vdFTWmIKOfCu7@EVq=zZEFQGX-) zzedN`doH~{b1+&z11*oE*Gl<$sootuC+T~|%4DAj;a)9!?Wb)Vzh>;iFI1A%lAs-o1)`S z#9PXy*L9yk%Nq1p>_OKkS1z?zMd!3b+XtgPW6+=KohqbyU$p;jwEdZAe<#|1#H>_I z@#>-DjzW7*N9SLUmQm=sv!Z=zw7(neKSn)QkjAC+UDofg8u;t^o*d`p(%Ao<=pJX| zvb;3!YqT89dlmMbj+U|L`UN%e`8%!k_?yA|=l=V5*0>*88L^i~?5z>IT<^3-6ZGDy zOE@6fM~Ab*<>6NJc2Ms0WD_)>F5v*o6-hbOL(3p^%sBMey@#&Zp=fF!h2F;AL}MSq zULAiz?D>{B2I=SAE&u!8%71^(Gg_6X#4TuMd58| zPLD_Z&G0LbCA=2&rOdR?tHTJMUMM!eVKYni8@ z<#x=jsfML_t-LDV1+n+G${Pw+roYx(CcBSn#<6xxslTV&YD09*&fx{<9&QaEMX!d} z!!OXilsYTf5Iy&uqkaK8{#G>3qiFos(RIJTnM+chd(gguSJQE;kIp>;U86f1`}}38 zelyxX1C6~Doxd54UGDWXzA9QTXk0eexL>tg13rUNhrd--<@?`WiT7u9pEwq!`=s0s zK;s=3UWl$UDtruG|BdiVG|$p!Cl5gLJud1OqT@%QaUMhCzk%lWB_12EUr$8)oad6mFmBsYn6IB)eF$^P0{&X(RhO}I~KJ|@?OL~xr)F2UAF9J%a}L@ zCC^E>iw5Db=rwtM)NeuKJQDR~;g)DG**E5g$D%)P&kt{j_D9e-%c8y|>LvTd{P0+G z-1*@x;Ul=|A8Ah&uT9r|2XwFJp*ashkHO5Szl)ajXw2f*rT&)a_|wrc1U=R>qy7#$ zepj?NygrTVkM8X{^nI(bQU5slccb(68v-^;!|1FNu5or5OXn8c+{a)?8_)KewZs|LD zw#9YOcVjy4!_i|pHR_A8@%bsQKA0VEH1?Wk|G)Artds6@Ugz9dz6eX5o9YeG{dSJ} z1yR2h%l1ucwn9rcbj`b?{&e)OiS~W_rEy20F{_p5yQ9x3y@=;t|NVPm4^ z=!SE<_{X2#qjQYw_`Bc7@z4DZ{Et^hdT(?X7g(nOzr9B{BXVDgj2@ppz)SscKk3qeiz4lbX+IQ^2aQH%<_-^ zrP04R`tv#G_SeT>&+}2#S6@;h*A{n#RW2=&Ye&6hcq(?FepPs1v_FT=TaCuq5mp&k zB6t5W=^Fk7EnCnvkL#3f1J|QHPe*+V+P^j0bH}Flqw1sME<|&`A00O(`U^UzpCt{^ zV{jXKO)f#_{fy2#@VGRu1v;)Bdd*!C^%>~A4d}dT$ESJ6qw94=$Dfa0llMh^B^s~j z32FXe=={skbst9OKaS3O7CmR5MZIR16!%m#&aG%3ub^@EpmCaNAuc=#%bL(#k~lPGYyTi9?h%5$tljUXq+3+ICIcA z^Uyf&ptqf}-BSH%G~dB!+?i7~{TtEsZ^k+}9vkE1QQv^B z_YJyUl~dEW-gqGOOQZfcI&MBXZatb;rPESg9nie4Me}+V&1(yqSFK(tuij{0x1)KD zMdLn*#@&U+ZQ47ZN zGY`%0J2cJ#XQnu3pm8on%RkYdW&XUeoQ7?2EVjd0*a2V0j`&X0yK`S;|G>CUnuy-V zyoi?UXXA~3{Mk6npN$8V;{Cq2fA@YL&v@f?Tl@Pm-TnG~DaY{7TyHPoGn@3Yk;^@I z+EpcTL#Uf~EAGoIr=epl&L2Wu$A|OK9e)`0o#@P}m!)y7(E4fNkZ2zt^?B&?qYtC5 zzFxf(U8m}xRBsiYhFKoy^QiIBJ}=roL|&rK?Tq%SgCh_0b33PnL(p}`NB_KN|1jEj zMtjxEOJv`X(+acs;SkK`qxsB>`iD{9iH@&&MY0th;QHZ^a6C40e$+oi=j}w}SG_Xw z$80{@KLoS&qkmr1KaBd$s8{8jnqMpY^*kO%eajHupT?3ylMV1l>c@uXV_WLCgpWk~ zGIZV+G)~E@lMQg#0qL6Gf|mUnrQ1XkG>3E0p0QD19R16peI0tO6m6Ww9fr;ufaX33 z?SDJ^^P8mp)@c8cX#XB`ofb_~|9NQtMQHym=ruPPJ%+zTd&>jUyn*Pt525pBpyQrF zuemKzuih-h>yEB>J38-0blzfg{5tfSEPYU_w@2e$f#&lBI)5`dzuLiReob^3a#`^?~SN)I_uR9uV zBpPoN8mGje>3gBBMeB>vb$Yc-^+9NT2D;7$be(Fg(mKbZ>x@A6{{p(sx9B=Qpz{xC zo#yvN=iiU!`8GN~zfGFo7M(u`oqrWNe-^s_=jiZl!jQXgfQvY~#{;TNvzo6^4Y@61<0A2qfbp3Vc`sI#J z>sLb8IS7sOFdFAyXq>9;Qk>(^IK$C6&!cg^LHDs8oxgYcH2*|&{>|udoR7}`9-ZH) zLz;gkI{zGW-AU-Y_t1GII;MF?q4S2I>pq6gD;1A{4?};Z`18eb0eTixKnvj2v-uX-H4&sl+%|9*a!XNf+?e$tSn8Ve^R6M<-Wgrxf~emb^+&_k zqy3Ap6gm7FzasM{T$`Q?&JWk1pNZTRR=Y0!ylWlyLi>ke_BaTQGe2B|?rRqgtDDZt zI<%Ckm(E*xbg!qOx%5Rx+=CwZSEK&#=-(6Vt!o1^EfXZ$?!yjohJ$K+!47>z`) z>j~)h<2@Yp8gXn}$1y(#J%%IEQc$;Su5Q1*a<%w<-WvQ}$cj(@_HKFhej?YJ$GH0S z=~%Zx^XVO49Zn1vglogyVfA4#A0H{3&QWy??KSErmQSxGjz!mcChDI?y+no7 zKMd`kiRM_)q)e_!i=+6J=RsIFpNHoAA-a#9=>DpXNXNbv=8C0b)fz1)pkvNM=S)C*K0ssrt$2D(a&?JRuauwa zHPHU8XpZ$trso#7p!Z9!p?kcvRQmqLf1&js~^!gd*75iB&T zdve5mF5<05W9$g4#PM$#o{FC5tD=4%y4G_zY18-52=30kLmLk7o#!O zqvN(waOMK^%W06q+-p&#fdzdkc1_oG zu3oyo8^^U~nG@IGs&G4+OXXXV&C%o29i1^a9Ebj_niHxo?h^?&vWbjK&*>-UrM<*Ik9xaXT8X@@*+zb2MIe z^w`N6ND{nrC~o^hNU=j@f){N&8~V=3_Sh&X|wce9Y!!HXqGnYPcBNQr{TnjY+S| z)DGK+ebI5lF`JL(u^5kaKAK0~*px?Y^mw;N^XQ9~;b_Jzh>jBRlv8aHozid!3RrQRNm z+ZT;69F02_jk_2v8_~FV6L`$mDBb^kkB+I(INcA{MelPCMrR$1#{N6Hmj}@MnAg!< zDmF=<*{g-tr=#}`&qh7hG%vevD38wH7mar~8vjf**Xz(c9z@HFXs(;kxIg0ln0H`& zpHj2DTpjACqx~;oJ=}%fN9=P@UiLlFwb1&pQC}GKFQeY;;M9KwI)6GE@1y2<*?q;A zXx=-~yeqdzc{fLo)5&PYm!bKOMayh7{}0f3*Bp|U-FMuI#=8%VHxE4yYtVQ_4^8oE zqwzYRr7s%qRy5uV=xevTu`O0ob*@C$c@T}f2;I*on3coR zIt|cuhN0`+fo<_=bU%yG`;fQMbv{DZ`59fO<`HR~PH5!w(RFS`%OmK1R-)@1aAaDi z6}F{*2D;9L=zYczbe)^fb!MRJEJOG69U8gPQE8p#Xz7Nob2Yk;Td*z8MB^_&?>m;E z@jpQ0??B^MZJXjBjYd2N-N$gWJcPzyhQ|8@eN6E!8t-Q`UX7zuyd%+>XQ6S1q2)m| zP63~buGOMO`u&@MrTUbN$4t%QF;gAxvn(CLeprN@Jm!R`Dq4A1MO6$}?O9wRHe)wcT%6&CjcAz+Ky#Re#$AGz&6pjtCZ%|OeF)F58|VJ_v1Xq*ZX+Y_>F9BP z6^->-Sp5F9&$?kpbnSD)k!ViS!&lKmb-vG{ zUi_cw{r0-(ypHJWCFi2gM@ORTO-J*170vH6^w<=CFzu%6<3^+VehiJf z2wmp`bltDfJoYb@_I(zb-yP__-$e6nQ9A9r16qF@J(nLxy+xU{?+$4H4D?(+7xj

2|?MBzHSvKW!6q;WjG~XN0eNRElBFy&Ppj2+(B89m>elj{e$66HE{ljq`yoSd3 zJS;IeJvOQr9uuC2j=Kph52I_nhThM99+sFA^U?9gpyfPt{7vZihtaHG!)$%Dlz1qO ztA{`BN}u&^vO9hDyBoUi%h9>_pvPks8gqTLZ$V>jM@yAGDbC^OxT-&;`L)q;P0?~9 zn&V(}+N}&q`SWSNqtNmS{$KfZjr{7duH_hXt@EOO zQ}}TB8hR`~k9vuROXTj3-+6czElbfD8_<@WQExmy_1}!fn24@AH|ifpe>L{+z6PRY zb{vnt`i%Xs$iEJGSURA4?H7(fkJYrOFTo`<)A2ZIR*K&j&G*Kr&qiZxK7+io$n_jpHErGQglXg|F9hzuo~IcW6FkA5Zl`=$xC-JnoA6 zE7AWmIG&V%8lOvZ!n4Pz%=N?J97ozL7je4JOSU4HI z-(D1T_5OSVdK`0)rg|az^P_FpCme=8R-7CzLVu2I2y>66{zA09E&6k$5BfQpVNstP z{fp3e8_@M~kEc8eap%-@tm{up$Lbt(&qL6byQ2PT^#6?Rz2fwA%^rZ(yQ5_~`kup^ zQ7`du`n{rk(PMBdTCPHm#gu4&6wU2<^k?IHQExsYeZSi===(?AqW%=R_vPs8@tdMv z{*g5PaJ2sv^w?aA*|9;Nf8QSUXQF={I=;xGY5rkoKG&j;Wi~{;I@hB6=n&WDV00hp zyEzWz_y3#n`~OY&JW##geI6+N?5)@!-S-{Makrd}9_t&>qcSDxFNdFmMP{bQbhXf9 zdo+4|ogMWX!YSd);V0-Gip)y$YK2FKXNNb0Q_y4ia`*}Q9$k?qlC{F4(Q#*oH=wU? zPKo-<;U{5{*|C0jG!{BP>NkW_!k5EO!Xi(m<5UY9PfEvo6k6^?kKyxZ%X{d3!{<>i zbARgZfgbg9(PMZudJM;)&pD<p^8Ld>oQ^!i*H_3xwqpns<8rZ+l% zF?v1a9!%Hgdh}TCK(E8gC#U*Y^jI!MkKtPMJ@Oq<-)~Cl?}dIR`~^{;gs!sy3voHt z!h(lVy*1i@6V}FiqrMI6QqOU_x4$lWT#iAH<1n;L!|b{)^lyt_mD{(+6}hS{F3*)I zGAQ@o_n_i>ZpV3X>^X6sZVVqn&&4az|0zx$n&SR|u6OL!>3oeu>tirmw^k{h?^fse z?p}ZVd)2%zIxyDFdn(kdcno2Ewl;&3Cn_q?Z*wb5&!J!bRqmVPOZ zZ_rZw+>~E+bj*$D8uy}WJQD5O(5z~mmyYi|H1-=&|2I0n+99QKwfl|9?bqT?-rF0M zE4eb>+v9h=C$qnH1a;gEKy;mx&^VW({dY$H?C4*C z#`_k%-B)-nc_7+;5@z!;n~&~&HX45gzPEQe?$!U6j!QFi>@n!vGtk`oqcN{QkNZtg ze=_tOeygPTN2Bx4LE{ZT$B#zG&qBv9M|0bbj_*}9-Dh2bKF=Q(^~q>| zezg>@5*qJdG+s9}-XJtyLESRBx-A;;dys{H{(XP$2XYP5&(p1OY|70`$Er!#1&uo( z9F49wD_oB5Yin3;e!7h`3A>=La|{Saqdx;?h0D>$23x~&3({v?nuJ}#0qD5Vn9WDy zE=SMHRy2=t3sZhg(7d~#$729`JVv9Bfo7rcmZR~uqVdW-ANiy4x}f_VfW{k*#+!x4 zTaL!tipDGVLW8h`xipDLsD8+4p#_fW}9f0ON8jU*(jk_F;yA_RF z?&T7>&e#Nv-vy070F6Hy&3hIae>oa|D;mGtD=B^xG=3K}{s1)IXf)m|G~RMF-c~eT zxy3176Et2IG~WSeywPa9S!lk?@hsdLmRl0XKkR~iosa#TkLThnJP((nd2L1WD)(y2 zs|jZ3AI)n3X6GNxYZjWyU@5-9iQUfgT|eQ#$AWT{RNF%=Y$lu6B>5_ zy00;4+&O66kI=aFyYT%l*a@xQi0)@Py3R6mov+Y!%Ac6lX@TZ{D!R_K=sJ_pbrz%R ze2vC!c2bJl9gTY>8g~L3_jxq`Ptmx=yQa8}(6}d}aW6yTPDJCrg`IJI)JvV5)@h8c za}v7FAatF3&~+A~>wJvnU#weNr#`yQap*dO(RH3ckIOq~+#k@mRl29RZP2)V(740V zxR0XwzlFyA7L8lAM~ZtfdRrTbeem9>KOg-k_2l*#Z=(5qhvv7}sVTpfXnuXrc-Nu(or1<&g2vm7#w&MPiq{N{ zcM2MBD7xSK(Rj*0g2o++#(faY^A$Ai7Bp^|-YITVG;VsWs(h~G zUB7)FM6-se@1nT9-xjz3$HOOz z9Q6yLerwbpjr!|oeqW&ZmU@%Fv3gtD?=G~j^6lw()J30{w2JzL=rf7yqyEC^^m*Rh zXwG}xk$%VObhJJM&1qD$FO2pNqy5WhKmE=akJ)(i`glLuzmN7JW74>q=(wZMe9uPr zl0FN2Jnz-D`^(S5j)`+spFLYTq4WEPH=}W9giF!uadVjeR{EJ!KkS6=vwzfY4rhc* z!_DaP{ru(0`sizEox=X;^Zc8`8R61!Gde#1?U)~S3j3qa`)>|s;J(zChMU9u6{)>G zI=&N{SAX>OcQd-*8R&6XiXNZM=<&^8$#dEp(y@LSE$^XYzCq{IzA;@hXQQzuqDT8f zbdBo6(>Xj~WUBW=kKv_JZ*x=ntn6TP&+nu6A(d}Vzq>FGeGTNGTT=a0blkbe$e~fc2=}8tJnHw4O5^9D@zk42B=`Qa_$BhkMMmkmyF%U+(2dlPj1u~($}T+G(Z zK95?P&!g_o=TQs!JZkk^h5z|H>b6+_^N3&KowRrTn&_eMQer`R|1uxdWp9cl5fsGU~-9ljS9k!;BUdT4m%%KL1IlphYjW&saP0r)v0qtcQ7Qh?OUk8dz4s z8h(bxE&g7zE_%InM32k4(LNH*bvnB4t2ll~dJp$2w6Dm{^tq6IF}r=EF}{m>Zda>Cabr=sH*qj5H(@$*)vb!(%gJsPJk z`Z~jKblz0V)<@@UMDxx2FwLutj%$y$^u;WHblg<5EJovR#6rwl6ZxYf+N1OOqVtBM zWhy#vF}lu1v?p(E8ebc;Po+4`8R zkM`t!6zgNQK3e)>wm#Z26|?m*TOTcX>r>p?*p7O8bY5R{#Bg-pRCL~Av}{E4$@@6w zhwU+&kJ)_8=3_P=v-z0K|5qAc8|`V2+5XY-!_hJo5C2=b&L2n1D)joVSS5XSq6s>; zJvyrwn#-l=TBFd%G2^3NvugURM`N`ACUpE%bpESoyv=AXrK+WM_d;*mHPLxDpx5f% zQD0g;#o2_$DX~wA(*TWg99nv!aeAY1u1D9uAD#Ciy8Z@qUeSHiymIKgD(JjRu@G;J z`nzbHZ_zjfHBy}BXq=vC>4U~O7mf2II`3_C-Z$v_6@(a_vy6C))=)7~$c_Yy> z2Ay{gI&Ueq!?oBRH${81S}ER1XuN@Fys>D!r_u5P8t)Y}UiJO+vhT%t0Ik0l^&+)X zy)JrOjzQ!0N8{dt#(fkmbJ4hOpmCO?^S(gmm9CTKHA3f|fRp7@a*sg zbo`X4zZ~^XqRy18U;WuuMuv#`HolPd=l+NK233IVU}Oi z&yM;HQJ;cy<2C6Y<2CBM>gm0S^61<~XzUJA?;HJ>pvU4LXbz8}<32>^?Ld!r(S6dm zis-l_&~Z1RqKWj%&Pc8h1Q8?i6%fKXlw3=(xwwc(0@5-b2TIijJ#L zBi2R7%|ge`L&v>_j@ypLt5-9P>xho)ijMm`I_?&9+@brWaXry-eb8~2pyLV(^V54d zEe_-TuvUEcZ+fh?A+D`gI0u$b(RoETrgOJ{*bb|fPO*+eOJ{U!542@O)bEV`iRjud zMgKu%()h#C(h0NNs+Gu9>+#>;GwYN6Zf2t*xqZi{$BRADbxucT=1oZL>3bZn;r)w& ze}4ah_xaiqV-N?~H9m=b6xo#aS1UXkJr8GxH=xIJO89cLe}d*vV@ab`TX{@Yk@ z*}NW$j_Hraycg|Rg~q&{*H&zwh>m*}%`NTYCid}~pslOZAKOpKOqP`E$_l(;R z&9xJ{ZhthNE6`jE{JT>v&f_zif6x8#8z|FlU^2(oao5J)9*DiZfbM5K8u#b0#+Gz! zjtI|0^SCyAAbcVE*JCyxU8lwuY5Wmr-e;oy*P{IoL_bYgzuIrHUp*c##JKfnoS)Hg zHNH%7jzIG|6Yaki?SCNpUx@zo(f@Pw*Z3;tV>TbN`Iya*{uiQuef0kv{WZRh`RII$ z^DTe1k27Q3wdlA9&~Y!I`&}RXKSzI!t*QSAwEs->cw8GkfUTV$u1CLH;pgbD@lEPK zB0Mv^7LD^j)L)4D`tWD$K!1&ITimUKM9@R8@;yAN7uRwo%bmkr%1;%Z+~=NdvxB3=)5z~dBf3p z%h7pXq4|_KCe3Sv&N~#H*8!b(5jt-aI`0v5-ZFH(E$F=M=)5AG(!2xEc~7JB-a+Sm zkIt)nY?@aSo!1y$?-X?2mFT>C(0R|I^H!tleTvT8hR&gw9)t&U+1=_Z~WL51MEB6N=_q;qmA-_&s{<73-4fjnQ%K zqka|oJs@-OC@ghi8dn7!*EH&fN4-_oqS-ar3GKfJ&2uiA=lf`$|3>pHa&pSE0-9$_ zbY5q4-udXfThV!sq4S2`8hcsjcFHQ}UiVf3#<*WMHD`+OJk(e~5P`4)4x*sj^Ri~dP5Z(+<^7wvnZ zeV^}Byu;9Vr=#(%iS|j+zA)O?Mf;v;-)DQ|g;`$s|C(3yPl|a9W8S)G-xKZo{1ACz zmKSDuMf;>^Ul{G{qJ0m#|9yT;9)`ZRc{&>B8Z^!%G~b0-ST~*L>(Fy{J9^IUL&wfS z=dMI!SFM-oEz$nd(D8lI`In)wC!yoNLg$yRpT;*r#~+H0?|_cK2p#_nI(`)ze>*z< z7j%5t25EeAbbL2-{6KX477uva(~jX5Fe^P|27eH^|k+Nr=b6aBl; zxYc$>KIrT9CDE9%vD@%%TQr~Meu+j52JcvVN&xHRf_pvPbWy4Gva z{#mqdi}o6|(!7h&oNq(t-HXm!6#d2aPyMyg{-$XEY3RC_NB_9!|7Y~S8U1^rzk2O7 zzb-oeBy|2%bp2PNe|hxpi2h%qzeb%jzX3YGCpz!)Xum$%A4cQOiT-z^e|_{9)Xe8~ zl%u$w+T=?A{`WZJT57|ww)95#dv!Pwy-pW|Ytid>cUXOQx-V@L_C|k>UL8(EpFb@K z*M_^Jzxtk-kH+ndu6H$>$3%4B3(z=g(fGU3+f((Q(!4h4yxy4QkItKj+4|_bwdlOv z=z7(EPV?HJ^LnH6u0}t1FcGu)n9av*K4$ZOiTRk#$80`2Zz4Kx0XlCjX2%cBxB7q5 zyf)~(-srklqd%J_VzxeJ>tnV)X6sWkP8-bD$83Gf*2ipp%+}|>+4`8RUnI?IgW39+ zt&iD!%;sY@AG7(G%`Y1BF`JLhvpCP%253IVqH!)l*o-(KzeTI1MYNIGxaZ z`lE4fM&mq&#(4vcvlT5n(K!1Sq&PRC*VbK8e+13%O*HOTXxuWDQrxC!+!N8bm!ah! zXxzzYevhGXmZNdDqH)SqPH~!{ak`>$2BYOVG|p5s&Le1?*U&hhqj5^?mEtr+<8(&j zT#S~h&^VLOIB%eFwxDrJ^7&=sG(eBn@o1cj&^ULXWda(fpk~Qj&3>hS{~FvtUxVwz zedgqnY0UTN+{a6$`WtBdqo}9f&pDRg&*{YP=N!ZD=d}IP@8^t(``}%18>*Ibs)Ol&oLbs&|t$57GY<|>@ zZ(YrEX!K8r{`pZ~gXXa-tX6`*r9-_n*2G?D|IlzkI3M??eGS&eUFbU1@>3qIv23?= z+|NXh`$g!OyU>^)ME!^8FWNngZ-n*_M91HO&c8qUUy1&rJyL%m+TRr2a}RX>rO`h+ z`X@#IlITC7XPSQ@I)4Z{e+oMP`RHF8{ad2H;FQ$g7R~SP==_V(`FBPC^6396`gcYD zey67SOVDHeK6H=3_P=v-z0KkN)SPe|7Zlh<=v%KlhOxzp@b@v-p_B$1HyI zKNtP0qkl*AS1A|sF`JLseDpZo7d{uRM!)NI2Ofb{%BOKH!&Aen!uzltvEz$K(4X?s1f6UGgn%`O!>r zx}(#&x1;MmhOYYty6%_gx)s}{@%y9uYKD$K2^~KW9X}QwUr@hHu71Bdx!OHy^E-F@ z^B!Z(-+t$g#}eD(K5_4gM&tXu!=C8<@D*s>d%|a;{r&LAaPNY2+c+fb8D4?LxhH%k zd>{R6;*U|^yHc!==G_y|SejmEn2nb8=>Jt;mj32W3pBR}qQ1}TMY3ag2>M?Cgs4A< z=CIcrMY1)AqV-v5nTM`fja&-O$-e)R&%FKicYq3;@Ey;k`Q5#4CA#|fE35BciqFW6 z_}%9dOY|w;EWK})^%J)z|IX&0IgaS>S1rTd``FuU1NJ#xpKN+Y94k+kM7`b9Qt^4PPhtvoVq=%yjOY- z);#Qve#U-qI1c@M>zr^E`q}yIVdcH^v(K|O54)qk`#Tu@9dwJIcO6IFd2`TstI&0} zqmQ2}|1IU!9L={oX8S;|`ElsJ=b*=96?&Yuqu)VWxk|Em*gYJK^_?HiiS||D_GqtM zHH~YI#_Jvqj`nfkoM>Ma_3dHhYOy}LUiWZtI4+zMt_rtfmVfn_kJ}QQwZgp664Dm$zSj z?o_NDw#Q!7`-a2ubm~*X#nHYIotIabpEFMFuswSH^hK|q;pp`<6}^5Iqu0+y^t#Tg zm9C%Km`}Yudj0f8ub<)Q^)nT{eiq{ikEi>DJJ7xv=-3y~xgVghzDBRj;xp6lhtx#Z zZh_`<9GY8SG}obM?z7SFXZRYuZPc1oBs*rOqUYdowEY=${9<(ek7&F`Po(&NN7oyR z?sX}e&(COn&1R>3&qMQ{fbM4ny4UhgruAB&=lJcY7k?_{QyOg_g$LlIsOLSM<{gTj z>%-7-L!*6Wv_BQ?E3hg38=`*foHYL$bp9}O{`1lPZM6Ro?Um-H-vcW|$Bjgf(>!$k z3(>v~525~b)O$RW#@&pLyB(eX9Jaz&qh9sdBH7=msfXD<(8rLYqW(R)Uft(XoCDBt zU!(2&%}ecd(Dv5Y7JEefBXnGa`Dxr<=(vN>_I}ZRL9`#SAhi!f^S%Nd|9-TWT$tL+ zq3zSqIIE-mqiEla-o`t>n8sa&j(ZG^I~(mk=B3nsIodx1?VpME*I1PLk4O8jL;HuL z{nMiV-RLj=a_TRQ_SZu5?19d|Ir?vp_L0Im1%9WrTly5f zk4Sv{(X|Q3`5nx*D zKRy;&#-L5VYxA+lle|1%r%itDeCB(cq=W$862|d5X>Llx+=e5BI?l;WTvJCFr`F(ESx_nAWX> zuG;}!w;yK5A6<7Ey6zHm-A(BJiXD*Ft%I)H0bQpby3Po6ooVR)mZ0lwLf0wQD6LZm zv-6Lx(+^!|1iH>Nbbm|GbvB{o2EnE_A3X8Rf z^N-p2$L#!LcK$It|CpVB%+5b%=l_s6|CpVB%+5b%=O454kJcK$It|M&v!Bk(M+4{*m%%hvso5n#T8g$*6=(-!w{TE!H*6oO{dnLN= zW9Yi;(EXPkmexH2UH39{#fQ)`16}u3?1mpiz3mMtkIT?J9zye2h31ieW6Glyy8nyO zJRU&vcn8g+=$XDIy%=5b0kk}XuDb{?!MCG+$jvE_^Uyr*L-SaM=J6AnN0VDp z9%rL@+=b@x8k)xrG>-vlocy$(HIv(a@oqU-K8F0Feky6#Z)c+EoB{TN-h!rf`z zw&=Q-qbp8F%VX%e+wci2c~7d3Mfd*-n#XoDk2?3JJWfONxE0<13uqqSpn2?nU&^C9 zn#Txq|IeU#e1T?AeSFGeKQxcF=(@+F>z;zHdp5fNOVM?&#_W1Q*BythI|beUOmyAn z&~;xy*IkLOxDG8F&~+c3kk*}xuKN}&x_hJR7NYAm zLf37LuGj%BozZpgn3UF?fUY|Yv-6Fv`vSV|GIZS!&~-mS*ZmgV?{0M6;`gU@E28Vx zL|1HxmZs>shoe7}`}{N2SE0xKV>FL1&^&%X^Cqy*plcyQ6K)w1_P#{cE} zA&zsOUHI3FfA00}VZXfwQMD+q=N*$?Tc9g@KcoSJUj1F0uR#o?t$3&W+<3fH?fmdutn2)6did)9!`_`o$8`Ad|G(KJlvdGJmrtv$eHUpPODiOn5JVD9C?b-P z4B1R3grd|I`(8^?T1zaAT~k$6YYm_ zeQZPX_KdLHrP?xpV5b6yiP&&h6R9_t}!9{UAo-WRLT zyl*z6d0&<6;pRH$UXOM&s`9Zfn&+TbPdB4FK9AF|MoPp-&|Hisl zwwLwsGUTsWjU0VkFV^~dfp^i|ehT{GB7Izh=GRtUan|QQwprizpO5DD^ON0N=UUSg z>*G18*8b_LEG>=~mhjl!o(LBC0(LCP! z(LDZ-(7Znyq*?b*JbLl*d^GRhXPnmk`YM|DYY>|E>nP4e^UpLi&!IK?IA0&%(#J3H zJZYY5jnF*zI-z+^+Asps^>Lv-UsmVxTWHShip77-zq2;~nAdMw{8%u%_>Z}d{-dq! ziq{p}^Z&5k{CjWn&;Q-rDgSZ#xE1ELaSr^)de=(+W4>0He~RaprSH%C_q{eJ6#U2K zvpB})pR!~A`*v&_|76{~nLfr89xP=iJz1AH%f~p&9iKD#$+}aseT+;_ib`XjtUI^B z$GF7~)z5sg?!rQvb(s^Ntn0DJ$B1Iy*?+9-!@4!B%l*f?6|9@hy8Hi__sZu!MlSOT z{;@B^SeL`Tr2gZw3s@JxW&hWoTkNO#=lRbpt4e>_Rz}GLIa1D(OXU`MP@a)DBtOt< zU7xHf8_TY;zZ@+;k*lO<@jTZw?hlTS`KLfWl6g{_8E5BM+wGHE?Zrj3^`g(lUZ_;+$T@S8}gAXtJ_ma`pF;}DwAcVoGWu=wvO9Qou659h8!mQ$WR$1 z{bXfXLAuL}^R44_Om2~@zB`LXOJgJgACTHcs$&B>E14+sdl)X<2cKb@|_?S)P%* z?uQ}pL|J{kY}e_^R~-uIZirdR~aNL$C=)YbD&+2ZFP*;KwF3-x@~ws<=Yap>dO|FM3E_4#4CwqfRb4*m=? z|L)y1URv@B;=2-#MKX#b*QFBzcE`^zFd{tDzt znI|{P>bm^f@{Qu#tVT7)QL#85-kEh%~CYySD6(3yHb>I`+QKMleZFI= zE&1_GzWb@`N=!+!Jz4$KlWniD<#EgJoxv^{pUrjOK57i&C%Z;``?4NKiQ)WwhY$} z89V=dUHcekY=U|FB8{uoXSluLPKP}?zLnjU7{}h7e7rt5nR}I$e6RKKI@b!5?jHKe(xx=uD$w@ysy6_eO1 zF(y8ZukN&-PyXBb7R7T~CZ}`G6kmxky?DKOuCPAL7T?Y`kiQ}1-+72;cr@!eq{P{x z!<{kC^fbd+ygi?@#&8Mt)G?5|BGu+_a@Mae-iDp{KW)>uc$>#_Tz5<|x19s%Tm0ET zhb_iwvxYoADE8vd{`+MU6GLMhF-hjp$u8dF@gC@If4s$;#apyUwlJE zR4)E(Ag8tKuADm7o_F!*Tq8TgB-zXdOY3wy$8k#W=gf(&&llgnb@6SYs+XwMTm}7o6Bqi1yrc;K?d}*%b z8O<>;x_NS3beJtEr9Y=qdanqFjSCqk&Che2(o>5s#Q!_;U)K|9gtv_79NIiIxNclx zqWP22&6+g~=+ZnYv}NA1jO~kLdns$pcb(OgeiT9nFtoi$5CZ5j`L_ z%^sVS%J(3QX3=S!bvXwj}d@Ge(-lXZSg7^HxNsrP^Zcz3s8l3A!Qt z9d&e6Y^wP>=HzxIx<%W0Vr{ABiw@r(@Q6-N=9u<1lGqzgjFe>8 z@Z)aLuC*VzM{CUx&!k??lmQ(557{!QS9EN;BRVN2gJ)NcK%y-suGc^(_fiV`o6?K# z(78vaCF|VT%{pgFj8WCIH}_Er$H&HuUNLd@6mxg^+u-QvRCQ^$=-#|oaYvqEAJS~L zzV^5M`1jAE2RQ8Jd6+FY7i5++;F`sE8 zQi4*_TDq?Cmbw0YyTg3V?VLP-7fZfdZ>|eTN$H!O+A2NS^*Y=#nP*{cqdT7oj7fE- zJ9q_7cJeA_Bs)1iuEYJEr}=nI=^bWEOG$UcvRChW@UZRsft%J%VLx+^TadJ(3hte}V(Pm3E+|4aprJJuO z&IDchwwt+*d$+lhSNdM*PMi5UGu+S%)IauhoO$U8TT-gIwJzPuqdgBGbA@@lChJnx zo`)H(y|$hVjLxp3!IKlyQ#?6E{_8q_G=g~5ak{2O8YMifC)Ix*t$W4$YTniSoPf2D z=Aia5sj0k8VRjb}`hB}?Ku6bGKI1pf&dEvtwq})iJ2*|#I6ck1PB1?XPe^gN-tAg9 zY?!%+|2U@UhWWnNx?Lk&+Yd~0+LHdqJ$l~U$CkBwMoc{TPScJcT0p9T|bV zr;BmethZF`Yn)rF6h~5wvpwfaOuTttwl&XL-t(AGt^=N2&p!@ARPk}NM;fiHt(#lV zzzJ^V#dJm*_dL0Y_TB?^L(R7U%wM2m)}H&Bn{N1cMaJ;_m!TyLyW%*UN0CD9o6WZxp}Nw(%`=AkjmIO^WU7L#i2QYUjO^D)8g zGuQI7)vnLFZl2NJ+WRn@_Wz{obHyJ{@aUNCOikx~R@h+_|HTJ?1?hnC@`!fo^ngoDpxHNiF-E8yKT>^j#lv^qs|zgHWDx%@-D4xy-GT z<8<;GCI8p`!&g@uJi=n^X*}p2ziN0FZ`qzN#_XxZ_hlLz8`I7ELC<04>18wOd4vS= zIC*?r=eoAA$M)5`_m$?yj~^q=jZ>~;>w4H3%RO9gd_rxG-saiMJ6qR<*!}(gI0Dwy zaR7{io)NrI+LL()rNhF{-~40C;+5xkq*^byagT2orYHm^Pip3u5-PzW`n`hUTeUbbh z26~KYjq81<`RbvM^>oZTRO`kTZ?@F@Dw2nW!){9pPHrB{+j?Vw+dpoGjW-u|Ctt^< z#X9V%yngZS-MkDBzyJ6|P)uy1@wRynhuD(ioe8cZ(ElH^n9g5%@Iu)<)_iI(58D76 zAJ`0sx%d6~YRft^|9f^s%73q8Pn!q5&%5a2GoXff-9d@*!8}FtGfeDda@>>W*poa1 z#0Bvjk`iyM;uYSE7AYC7FIFOrm)*4`t0MXP$H0UbM+m!T9{X}0os%7|uL^krF~4Tz znV@rc%dq0>O-i%7PC-u|=L1unfz2bD$8q8Z#w5nJiAhT^zkD&DCv_L38N7U0Ptp;N zbn|QCNZyBsbqP)i^n<^KXSb@ zHot!P&p!jRUvPapv+Nf>uD=uYWCL?4;Cov4S$tS;{y)R!-<@CJ@AAz5hwopkYswPF z(u>9XNf7h@lnx4RmBF`bn!Ap&>w~aR^LD10-|DfxxDDldSgsdjeRceAYtxLd6zkhu z`mFK4FU?!P|M&cH`+v`_{6D=Xvnv|I%$t8=laEVdt<;XV|Hlsbe*R0HIkos%vF?@f zdmsDz?{xErj{fn-{JUlIPu7dp+}ZN+CY+dV5C8uAEmoL+&mX|@H$SK`42N^MifEpV zl~_JvdHiRgd%)w)^?K3|d>(heywZ<5bjLG~yK+&v;vV+N?B|QS(w40+TJ8DW-j^r& znZ4+G-ocl*AMFrO>DGdcskO4c+%?}GaJc(lRepPEQpXpsjtJ=Y$&WJwpZ1zqWA%c7 zKfYTSbbWZa$-_VXI^ese$Cn=ZJNUJX?MDMrcAuSadD!08o2O?r-!iIi=W2~6-b+0@ zxW$&!lg|7x|Ie#KS9A(obg}>WyuupwMh>qURK4sAEAD5PJ-=(`gP^O+j@`L;_1Ct8 zW*%y3%iA;c>805VUp)Ust1`A1N~aGWo!)#m2lU-nz~cXxGf zGJe6du77u5dTUXoZ4pZ*yc2Weukl^SpQzG(>>oeJub6rNPPOko&+UGCSaQhTPiIvc z=N{H`XO(nruW=ynK%VvI&u0DJE%oCUspfy~H|rYLUXC;>#aktryqqS`>o{M_n zt0T9Y9e(D`k*!~Dy=vF88_fciZn7t?_WJgn(N~)_e0NKWLBAcJ@!b!Xnr;8gIgUw-TA%P4@=~|88KkQ-&2RbJM}^17YD^w32d-!RnynU9`XOU^{gD@uOFM7 z%8c@Pd2PY@(Mvs=>>k;&h4-d8>F@kpw{gRMujIe^v+s@IDP0>a9kX>?x<%oy_Qg*s@Rn_C#qV_)^>2TQpW22UupW;Et1WY6eXTdv{O`|aj<(jP z%24Sq%gVE(tnIeRg>slol~K}s?0d1ee(n=_3UIwXY)D0{7IVa5HAGzCK2>6vcQOJ@K9||4&9DXKF)!UeC|!`nZtA zoRfu}-*Pje=x*4T#k{N&zhjx#!Q05iXWq8fS43a6KbCmM%{Z0J{@`4e`yYE73vnBZ zIVTq<`nws2BfO0nIH!@DvD4fJn>2AVHf-=Vg76@Vxj)D7xp&=+#1wDi75st4k3NN8 zy~n>3LvO<|&8*up1zQDhUF<^$_B5O8O~B7sE<|!0u~l<7BaihVxPoN^>(}6AmK?jc zaSMC3V*l51SqyLOW+bqm=I`@O;(h6=20pI$r$e1w2Y*{X5^Va~_XEIHgp^Zn}} ze*XJxijOf2*DrB1$}(pQHeG7nUqR?(F^_E~{>ftAcF$!T=PWm44f{|LKW16TK4)Uc za;}U0jKKE%9GyS+X)2CmF>mh_4CH;Yd0&|CpS$jIGeY^dYkFb?@2%(cxBgw82m82< zHlDrqyBSyV+>DIj+;*IMi23Qb>Ct4V_f%XZzB%-{mg!@;or5vcTTw(BiZKw zobU_RW!}Ho|E!yl%KE|R`KxtamB!gD=DE5MOP}MiTvr9`be?mYj>4ZWaGp3hhB)+^ zn^E~oZ(}63yulpShu~fobIxHLb=%Fz8s=?Gz}N2Z^QRo2>NtnRk9}B()9!ID_T*>J z@vHmXMz-IEKR)DsO!GF*VxvdQS;cL^9ekD1ZKb!7hx6UsjSTMJ#rP}B7LIKJE^&7^ z9`^M%R$;VznDY(yKj&@?i}Ep!;g>JE8+rA7T)*dMCI7~; ze`^|Ftm1Cef8WP2|NZgK{2OH_I`Op?{@B9ZINOt-bwm&TO~V->KCXWQvHl0{#(l2K zAA@_i8-q`=Z-?Fdu^x+>OI4*dB+oxXx$v?&EGm zam;66A&bGeaUXZ|wT?+1&P!w)^Vni~lDn~xIfF4gnI6o!ir=yv3+MlZ!2bQ*jh^vr zgR@xtnZFRnrMVjsy*dAJ7mK+Mc~~pm-3YaL8-BPj!`-N~oX07iW2w*j0<1F7-6%`f z#gwPF0OfRmhKcx420m+{y^V-)AfUH%;{tU8u` zIKfOTJDq=HY%z~zeDhOxqv8*&$HFhT?KSz@7gw*~T&l*;c;dIKI0xvRn3TTf}1uU&?hi7BBQRD&hFO+}F&UfxY%~o^TE);14Y3bJQtJ%Hw!)-#M}D z0d6n%QAK>=Am>IjbFlg$&L6ryUS+AyHbr>$Fvl&75?#Sod=)rx5+mCX5 zxUO8Re%#$~vc5iEU^&M9dkw$%f$iJ#7{rPvnERPG$DQl?$=#?x7h&U{-HqJt-bMfp zV=>t0Ox()igE=7+S)^cv#3jU^^cVqi7DVJ9xjehjHz7UOUQo z7%QHoU*qSR@x=-rM$W4|C*WKB-onGP`F9*Kh~LHL)7-}h!A3PbjBTHAU*Muz9!5nv z3(q$9FfyLwT*c>GcomvO8n^O4OzlkKc@Lfan47`l5p!A0bL=oK z;TLh4=S&W^OY<-?S)YI-Sj^Y%#rQjmdH+7d_37O9_qn~;V=(tM9f#A0co;po>^wZq z;(CnZhL1dq%G|CkSTx+jm@tVs_~8f-o~L#M_1$nQOCtNT6T463zV61p;oWK6_Pty$_WH!b=$6W5 z(Y}D&a+}vCyt&ZB$ePG=AVz=AIl%S__~}yiKbPZxb(V8|dw4Ct6KlBb6L{UntPLJU z+-}Z)?EbZf5ip+X#h<=m-^Q^GzVR*l!+WjjSYj*t!}XTNUEgzG+~WBPubIs;EW&!b zICf(>H?Y@k&TlT8fFt&C|9-%G6)bny!&tME=S)0(#KUMxU%*C3*#|BgfIcTZj2YX# zjk36ir7XuP3tv0M=Qvh=_zBClQ0_bY<}|mfGsh6?|H65b$v)t2mIUVHVbimmGwpf5 zjr)G(erJCUqvr)4BXnsze34^xgXcz^f0?g(uX7Bs-Zd_Nm6^Ee7RTp`x3K{;?r^SF z;Jq$Z|DEGc*T*UMcn%q3zVGrd-u;vNBEZK8!nYoJ7tkf$b$%D}wr6}?zZ1CyzwdZnGoHJ!ae21q*aqOv3Z6!Np7-*w z?(aIXmuivKF03`9Kz!Z!;gC!x!l*? z(D@^`k^LWx=T5T!BX~Z?qMtpDg`0S8!MM|`=eiQ{N0tQEpT#w2xG%Wg9PDw{)2PVx z#^G5ObAJl(yI(zx4ShI&u+KTJk50v17ubihoRe7MBDazCrSbSBX0mUm(6@l~v_F1$ z+0(dY=l0@y7IXd5 z-2DgVMF_;?wM&+r_D-!0#6nsU8caCm7i*YimxzWuD1k$ac>2+y!wh~m95-Ydtyd&cup>GEF2M=a*;%EUj_ zo)x@|zAW3=-ib3<%-64Z=<%GF;lnX6joB>b``!(B{RJ;$0^1kik&0X|$M6IWev$9k zvHeI~_>z~A#dBj8R(RRk&sWgv6))@i71*7{JeT6|%YS(p5zO3x@4d?HWj}*3m*p1E znTN6NYhK1|X8Peamb0wS#m<$i?uNN6uGeUM_jT*`24Oaf`P{p~>^HrPEoNg@WiO*P z$7c<`U&Y#{8}_Nnapst(V&!UH#tF`i+L+B^9>Wb-vpV+?bL!)3HN1>C_N_Wzt?6Zy zW@Zttti^ouc45!jUWPy0Bw*z_Y(v+^{Q6$T!$^)He$>E=|7Vl?2&?;YyST3U_)X^GS;-?xdmg?!*C(X7S?BBx5n1_5Qno_%wxU~Uu|L?!^&8-Dfczo2Vo40xjzZG zNWBe9y=(1H0QP1v=Op57t-p`m-m})n;cOOj&O&qqcp3MZpMka(9JdfIi_2Ne``Rz#pXSFMBP`}){{#lMvX0L& z?AqGP$YV}V9Kd2;b{Ia_#yW@duuL%f$u_m|7nX|bTLG4A$9X`%f_GVJ(+@E!#M+;p zxRxb|^*PwIy>-lk@Wm*$V|^v`@4{n`PQ{l#@G_>*i?LxhYac>!0n07+VKMG9*YiEJ z{rGBkt83v<^>{p^zKX4TSlhJ21?rXfNc~i_m(hd8oY@!msQ2Rq^%eB!X>C&yYpUyG zdzPIX|8VT9^=UX+Jsnr7*W-TmQM{_YjU{8O`Ojhvbv)xj8}w&QU1 z82n7V40ova;Cb~W^oXKO8l%-V9HJhDi_}Z-TlEe+%M!r%moDNXtuJBY zykarWhsxMg-2%t3ROY#HA}-hZ)tJYU$@+Y}qV_E9@cd!|zJVp;t@)*~lR6Sdvkc>Tdje)@eKzh^AH<958(1pAno}05tLtMMbtopN zQ!!IL1+&y^FjsvLFRHJhr`?)g3g1xI#8&DMj8i9Krg{Qqsk3pf`XF9b-$d^|*8FF% znz|mgR(HgBbqbDAPsU~H)woA}2rsE`qIX}-$7tL|DJ=)btI7&Sc zzhlYi&c7vtr?vh!bW65odgE*AYS>KO8e`S*_>p=Hex_c6->P@vY4vaDmSWBK!hfl& zU~_d#?5?)qaP=shuU>-RtM}k9>Pz^y+B=o~XE7h|)i6-q8l%VtSieFMul zH6QD!>tcI#2TW2Y<3#l&{8F8b2h<1gy7~r|N!NU=s;-Nz)E%(5IvGc+C*e|cHttp* z#Ea@1Sfan?V^wu+Y@-gr1a%^2swZHUdKKoX^RPgD4Sfb!^Gjnbb!}{?4#B?aL>#G} zfQ!|uaHl#CFQ~7fXNKluWp!-~Qiouix(|+4kHgQ^D{!}ZAD&ZR!4dmT94=L_!0qaNcu{=?-3Mtt)=<~P7V5TWSNFk>)#GrvdNuA-AHpl@oA~sH z*8FF%uDTw!Rd>XG>W^@)`ZN4qeF(3pZ{o9qt(mW3V|6o(QK#TI^<-SD{ti#7e?hk) z+BdAJu7{n}(Ktx`5iU}%#(nBTcw2oBpBZY+d;#mJ-@%URNK8==z{%=axLUmt537&k zE%jY2^N}_GIjo~@i0#zj*jJr~f2ayn2rfnQ`fh@?;C*dgd zL|mf&5_hTh<8AdlEH_-o2YuE47^;rKRCRxxr2Yi6)tm5?`XWA3m-v|XnJngWcx7y> z4#fm@Dt@A#ha1#e@R<4(7O5X%g%Q@wm(W+;7{k;;=TpfjJ>I|H&o{ekNIe1uo0`I8rWBF0m{1>r-x)F9(cfo$@fjCqBDQ;4K zgTJb;;Hu80GzI#gWsw5;;-t<_{Wd915$h#l17n5<62N$TmCtzM4@)kpD$`VKxlR`ap0x*>K@ zM_`KDiIdecaJ70P9#9|0>*~8$W}N0@U3Ek3pbp1mbsA1mPsf$&^|)Vs6tAl9;8Wu@ zA8V-_Vmoy>_Eo3hc=dE#sa}u!)kpBM`ZkuFV9kFPYp5Gwu(~70t5a}{dNM9kuf~1q zLwHGj6TK%|^UGj$bscP@ZjTA-Bpjulh)dKfaff<8o>yN*k4e`2r|?a6Eeuq*!&tQ) zhpWfpBK30oUcDD@s{g=eCtLGhz4jiYRhAY(TaGyFKuc!;L)O5|qnrdHcs}93HY6p%}Ps0`Jb+}KR zk5|-%SZapmV@Tc*%55^hl zdALEn8S~XAu~7X0%Y9n9I88kl*QqySzWO8c$wR z?urieAe^S2i|f>zF<*TW3)K&>+-%K9Uv*;)Q+Gv&dJs-i&&74>&6uw~iG}J1SZ#O}SR2_w>>I|Hs{sgntoA8MG2fVHR9iN?N&3_*2s^7*=>i02O-5;l_ zKf!GE2Fz0*!)xjyEIr?vUjb{Y{V+rwhJDnjn5mwES?V>It3Hec>Kj;Mfi?eW^iwy+ z&g!n1t{#Nb)N^s2dNby$PvTwm11$HMHUA~_RX4^kbysw#2jMjJT->PMjQQ%5Sg3x0 zvB(fR>0b7KMYYvV4~WI z6V%gig?b(CQ|IFqbs?5oZp|-;HPyb@Rvm_Y)Tx-Mo`PBGHJGbDj0Ngj=(EC_UlyyY z>th>rC?=>=F;hJSv(#%aSA7@@)HkriN^AbpSXEsYTd6x>Z*?+`R!_pE>TKMtK8P39 zH?YJi&BvHakP38E>&maZuLRDsJ?+EzSMlIs;-Nz)FBwJPQ;Pw3Ak9j z3U{jW@PhgpdS+YmOJikqZEUR$!FY8dj#N*;#p+eKM|}Vb)Ys8xwKcyCR#(@-HtP16 zpiaU}^+e24e~G#316ZKGjy`KNAFHeDU>kJ@?5$45vFb^IJw-y%m2@pTXbNkMQ{o*8ErTZS{NjzPbnYR}aNc)C+Kv zdMo~*K7+rjAK~*GH6PzrzlZOud*DFzP@JP)fSc4?@R<4(-cvus3Y)C?ub`j0DMqNf zp;J8=XQ}7m2K5#^rapy5>W5h2E6qngbyJK`cSEOoFwRiV!wu>!cuai?i_{OXLXPI6 zpSmeVsJo&=JqV|%=i)l`X3STg#6tB0EcdlF|0VQQ`(vm&3RBe?I7K}h*Qj&wu=)hv zQvZ%mZ?@(?k9E~=V+Zy7n5^!PlhmJJwt5pDRR4fC)J0hO8*6?AtgZIL5OoA5s+~AN zJp)&%H(;Ln7+zBsVd*WJkG0jl*j^omNoogUDTPosZYmg;?raYkoPbsrJRT z>M-o1cHlVmG+d!xhX>U8ctu@^WwvTQ)=~RnTXh)rQ9E#=dK#`!ufqfCe7vqM#8TgB zKGszGVq0|>_E9@U_MSF2pk1G#~4z8)7?kIQCVi;du3QT&Z4<`_)JB zs`?H-^}RK}Jl0Y-#CGa%?5j@0@#^WgQoSDctB>MU^&Na_yXIppbwg~Y4#&RgG#sy< zimTLXF;9I2uc>ci$sN}GXR(I50S2o(pf2ayr{-gAbps4h zcfv$f2aykLF`-bps4hcfv%q11GAd;R^LS+^5dR zE9yclm21r}i?!7Cv5h(u6V$0VUOfe~)N3$TeHgE*Z=ug#&ByBM`q)k#iV5me%v4Xo zmFhK^t3Hec>Rb5KKF!Bk>IT?e-3jgLemGG*6_=~m;&~R&&%BMx=(XRPSrT7Y*TClL zV6>_2I9xpzzhODdobU0J*8hrssNM4Tc?lNt@7i9+M(XC+O&x=S)x&X)dJ%rD{vLl) z|B4UQZU>mp;`(_EY^-jEk?Lq1p#BIKvn*WXZLG#UT7L*Hsc)k9L2KqSSWR6ITdO-_ zygCUp)e|vG{UzqA4`6}%I(i+l=9j@L>N?m`-5zb~Bpjulh)dL8Vy^lC{-(Z;UWYXw ztElT>OLcp+sgrP&dLm}2vvIfjAYN48z!FES`A=h2bzN+w?ts13$v9d)374z0aku&) zURK}068V~sRn>JdSlt18tCMlGdJ-;GXX9S=LAK2}xN#b9*@w5yYGta=hI zRcGUF^+CL-zJVo=X+Bm}*Tq)q4ro^=<7o9HT&~W>z3PK_S$zXb9@l)Vp{|R;>JDgE zC*x@K1YD+Gg?rR_ctL#)J%6y~m&VHK+Spnhf^q6Z9I2jwi`A=er#cTWsIQ^tkD8B_ z)wMB59fEP{J~&D}4wtA`;4bw({7roY-A`EaOW_;pn%F|!7JI4t;3)MtT%ulq+tvH< zH}w_t`bqQg4RuXyscwrlbszj#Jr0+sSKu!7K0K$sg6=0ZAFHTqVoP;9j8*r=5$f^y zg?c6KQ18d{>Z|DSvo-%Id{bQu1J%J8r?%rr^;lf2UXDA}d+}HGWpq1b%`b_st7~9$ zbuh-L?KoUL78j|P<4*Nnyr8~}Zl^ULUsu<_=IUUKQQL92dMqwdFUOtgy?8-=1>Mi+ z_~RSun%F|!7JI4t;K%B5__;a@x2bdSthxY=U#$5)SV>(S1JrG>r#b|svgXHgztZRTrRfUh}b%x;h4^+h9+1 z0uEDW;zD&6Zd2#tS#<##7c?I$sjFjvx()VJC*Ux3CN5NG;Wl+Ho>dp1@tfvjC3STS zP`AOJ>I5979*qmsOL41uH=a>n#7F897x`H!7W4g8ReVp~3VWz~<52ZzT%cZxTh+Vq zjQS!zQkS^Id=}Syd{5m9d#HQkQ1xhBpk9hw)w}VG`XWA3mndL9i)%iZiPM6y>X~|G%ipt#jWbyct(8@AE`@RVLpp% z|M5L_E9{}}jYHL=ae;a%ZdLEbGwO@@NL}J8^I2T;@jZ1b?4jWlbD?Rm}1c!kBBUm2UKgRq-A4hO48;ym?Y+@juzr_>klq1y90^I2T;v8g%;yQzEO zAoa&MSN%C|R&U3X>T~!&?S6y*H;Toa{{}Wzx4`b|UN}fS3}>qsVvc$%{-8dCzpEeN z^Ea*euj1S4rWmR2h6B`tafW&xZcuN*AJwPup86raaLbzi3i_#=VuZRI4p0xqS?YQC zm3j;Qs6K^7>W5h2w&vqI>ZTZ}?uG-@gK?I69)6|XfTmIc`ZV5G|Ao&z(tPw+zl)vK-7#G~1ZS(~ zV~+Y;Jgz>C_tk%4#lJNl{nhW9s=H%`dI-)`&&M3~w|GK*8t<$B!ixNBm*(r&ztCU( zuBo~^W~hhYZ1sH1QGbgk)MxN_^&@=V&6@uT`l*{@gt{9#)q`<{dLC|2Z^2{gQ&^;a zh!xy5AN|x#F+$x9o$A3jLp={SsJGxT^(ib;Kg0?invZ_!rWm2_hEDZhoS~kF8`PWe zxcVgCRX@OTp4R-A@GW&??5ysJ>FN*h6ZNOKUi}RoRsW24)PG`mFKhnG*ihXB!_^;P zn)*YWuKpC)tG~gc>Ywp<^`BV2gyv&IbrTF%e}MhfAL4ZNr?_7IH6By{ghlE<@L6wb z{)^Z^-3U9WyP#7&5ND|8;9B+9ctrgZ-d6vC&-!RS`l%aXgt{xHs|Vps^;}%1-i-O` zlUS&JfaOYB^It+=bz=-ucSVPK5YAN3#f|E3@CWtJ_`CW~EMH2;9~-KhV7U4NOjCb| z)778iCiOS?gZgK@qy7`iKc)Hjwz?@ssJo$4Js4-G=ivtR7Cfdtg+=OzSfR9z55A>t zjA81o=ui*Bnd-T?QN0Zm&g!n{P!GbH>bba1y%~?IPvTwm11$H9=HpxHCK#^%0MpbT;&k<=xL*AY z9##K@Me0AWLRoA6i|D6rgc0g4=u{8H8R|K>LH#uzQU8QR>OZi;vzm{7>P8r$?t)JB zK%AkTgB#Re<1zJ5Sfu^~E0oiG^iwy&2z3{9st4i>^&H%w{u+;|f5Ia5A6TKh=A)mw z5k{!Hpi?~%XQ=1kTJ_g>O#KrUssF$V6*M0ks2gE~x(oJG55yVjxwuZf8S~XAu~7X0 z%ROh!e+hlnjWJB!6&>n9I88kl*QqySzWO8OnY7Jr~!hH)Fo~Bo?Y4V7ZE#kG|^07^d!u4)q|M zrk;x%)tm9S`Xm;rA7Hr`H6MM|jWJB!6&>n9I88kl*QqySzWO8I|Hso{ekNIe1Kc0&l7BW7$`% z`4!Pm?T?}AC`?uN$4TlLxJtbN^VG-inz{%}|I3O|v8LJ=+pEK{k2)1I z)l)D_y#{mDhp|9?3wKj<{4b8`@>blrU-2v_DWE`!YgiF=gxLbV?FRO20 zi8nPLtE%f_u(~70t5a}{dNM9kuf~1qLwH4f6H8UL=0Afq)%CEox+BJ`Q*exWGA>iE z#y#pocu9Q|y{l+GR#Vr**6NNJuTH@+>dCl5y$1KI593w!Eqtn~HNPy@QrE|J>QGEj zr(&jh3TCO-V6OTw7N~FGQ`IydYpLsF8+9lqs8cahJq5GWYcN-R7z@<5(5JfQV=Z+9 z3|4nSySg8aRZqp`>b1C6eF!h9Z=!b%9e=E)u7|DF9Wh>=f@9Q^ahZBG?ol7YOX{2G zT~qV1nz|0QQMbngbrNQ(Ct{ZROUzXtz~9u@(WjO*zYJDU*TI(R_GnWl;VAV)%u;`e zx#|O0puUbiwKX5BtLtDJbqDONPR7ydNw`#O>r)o`_4-U*azH0sKvU9lh%7_+u4y9c-y?k2ZA@j#7`uFVrh>hk8GrS6@Ys z2G;zN_`13VHdhB@oZ5~f)njpydO3PEdkmueG&`R53roS=HpxH z#@Jc?0j8-x#Odl!alQH*JgWW~@2LO8@{O$dFXP+lCiuSk158tYh||@d;wJSscvSr} z-ckRFTmF<`e(eO{u9eLvF5*s4b+XWle!D`QxC+c z>N&Vp{WTs@|Aa;AKd?em%|}0VBaBdYL8p2kPF2srwd$|&i25hIt^Na_eb<`*0@hQ% zgB{h8n4%tllhw0uwfZYOr2Y|as_)@5?`b~PQ@?{9)sdK@9)Oe8vv9TgD?FtB5pSyR z;WN#w`Oje;^;_6p-5HbA={Qk66W6FW;$ii1yrsU2WdbxG>!{zt_Ug`Y4bZ zdLtfCAIIzJyI7{V=3^aoLu{uG$G++`9Iu{^E7j}qp!z7@P~X9)TUhhUV=Z+g^s5_xu-4DmAr{e7(UgNKNyDZ&ObFhZG z0S2o(pIN914#Pfb2aZ!u!xidvxKEvr*VTns zrnNP{9M)9(Vq0|>u4}{BqSw4#9-z(FtbDwpF2qv7nu9gfzSveBhJDly9H*X!E7a?7 zpE@6}s|&GATg}Hh>W0`(9gcm~X*gaz9apN?<3aUNyrI5>Pqnk=m&aP_hB!Th_cS-W zU1rnfZC{W3)kpEF`VKzTUURUPx*@hxhhtxL8je>_$Cc{!cu;*5Z>aC!(;ck&6|lD2 z4@1-un5cH*1oaGDrQU#f>SK6KU4*4OYChIh`(a0Q1g5B+I6*xFSE)B(o;n||s0*=F zs5QSF)>QjqTXh)rQ9E#)dK#`!ufu)ne7vGA#8RC!A8V?8v8_4`lhh6zr=Er@)a!7c zIv=m73$av~=3`BDeQc)=#lGrP%v4XoEcF`9RUgIz^)2)Xx8|3{TI%}PPTdLZ>V7y@ zJr$R$*WzCF5xlIvjU^+j`OjhvbvW$M+qM|}t{sc)k9`VtS$eFIBGX+G9a*TrCU2ehk`akP38E>~yc zUiCq|tiFLIx@bPuP}jv)>JDgEr{Ea%WL&0RjeFDwut0qsy}DZS%U~6C9c-y?k2ZA@ zj#5v=CF(D6m-+zyroN6|A80;SQP;ti>h@?;C*dgdcwDMpi96K$@x1yfmgr{9e+sLr zYhj?e9rjlD#nI~VxKzCocc}N{MfFwm=&t$rrn(jes@q|#x-X7akH;_6D{+TdiHujO1Kzt!HoOBk=QnD57`VKa4Wj8@0v zN9r;7xq2CHSMR}J)R)jb-kRx+uc@nHGj(f>R>$K<>M{74dKrGF-h;oWFX7*6?*!(v zxb`2Lsas>TIvzh#kHOE>%kVq(9{fdp3IA4m+nLYenvX5it+AIn9zRl#!Ozso@H_P$ z{6&2U-TUbH;2Y{{*h1YJd#U5`WAzyPOuY=hQ}4lF)R)k`ujb<$>T1|R-5PtTkVSIzHG!-5PtTg=y*xoUWdY zYt%V-SbYNTsPAK0r{-gQwLgZdqcBaKfz#Eqag90$535h$E%kjYo38oTQ0L^T8 zXW(@8Y+SF-!K3OEct?F7%lFrOtgrURP<0fhsWWi8dN!_6=ip)W3B0Agk7WmFKGs+J zW2ia`&u5e{n)3V33eaPqwY?9%sjiNJ>NXgwPQVfBO#DKfg*()_cwSwA9)mO=-&9w} zKy@(2sqHvYJr)o&p%(|G4)Sar2Ye+9cpd!A~sMr!U%O2bgBp9RP`L( zp#B<bba1y&3b>C$Uid0Lu;2eDqZ}#xQjh zrl~VzM zV|}$hhO476O`U<$)w6MpItLG{Pv9-}eJnph^Rd3#AH&sAn5NFaDeBp{MxBF4)hFwOzaGH7+ zu2z4Aht$XMy814b8Ewsf4(q7j!uIOUn50g}iRzj7rFtVCP#?$Z>bqEGjOJq<^;_6p z-5HbA={Qk69kbQz@u2!BURB@0r!uYi<*}B!A+}S8V_$U|j#p2|mFo4lUwss>s_$UA zv6_#*>W0`s9gfNBG@PWKj_cIxF<*TYud46hQ{yxrYpEMzJ9RiFtJ83jdOBvS*W*F; zQ7ly7!E)m@A8V-_Vmoy>_Eo3hc=dG5RZ5o=eFvYOp!wKT9f&>Du{c3J9k-}= z;2HIKe5Cf6Si*Rf#eCj=6W>z@Vh?pJ4poo91?n$wyLtznQ=i8_)gF^d7%#K9=3^6e zAby~Z#i8mExIp~{ZddQXbL#W>r`lsO^I2T;v57hmKTyZwQ1u90p#B24s(0WS^?7`x z_L#!)VR6mJ_tb&dLmi7l)&CcJ?*Z4vu`lco_F#*8@R zMLgpi@=sX#hqc9>VNda1aDsRM3=t25d&CdJtKxAmNj&3R(kHC+VQq0|*iF0_948(C zmx_nM{o;q=E%7**VV-OsSXjISbP#ujoyB`WAMpUVR6Gps7e5TIi^stf@r?7yKVjt` z))se$J;i&$3E}}TL_7@c5kCyCipRku@r>V)K4GN~Yl}O>ZsNV*IPn0uR6Gps7e5Sd ziO0bV3uODi!r~>MgSa#7EZz(HhzG!>;$d*V_+fZmJPxLaXIx1B2`m4wp13pYDc%eE zhzGzB@i4eY{4l&K9tTszGcF>1!lYjkI*Gf$?&2QMPdpHYiig9!;?XchJRT;CXIf0# znXuA_PU0@Gi?|2$6%T~V#KYkM@n{$$9uKv6rjRV^6T(U#I*Pl%?&2QMPdo@N7mt8Z z;zwYt_-*)BJacFk^(kS}w}Z9BU13*oPdHXQ2rdzifcwOcz-!{Sp<0rfW@cDa+z!?e zcZKfao^Y&q5L_Z20r!a?f!D-u!?)s@my& z?KQ$mAJ!Fb0DFq}ffK|h!DZsB-~sWY@P>E-)Z$sgIKBvzerf0=-T-zN?*skBC&88C ztKcE=qwtn^0@UJJ!%3g8(ueiL8^E68eWAa2Fbor44Wq=5!C3LTFk?h&n%Q7c@lvq1 zczxJIyf+*#J`t`E{}%2S{~lf!zXMamvwX|`B~1QHLPv2I*hSm}`icj_Q1NiMS3DZV zh~I*5#51g-{u3ts;;^Q8J=jUSCmbt20WKC_4)=&h!As(?FiBjk&Y}tsCjFwYx_BK! zad$XM+#fC!Uk-PQN5QM&vGA3+TEq2=u+oPP;&lwg-Qg&4f4ES5Iov581+R+7!X$CE zmh=fLedr)w2X+>Bhd$!|aH05exJNt+UKNjpN#bf9+lR2yhYsR(VMp;EaJ2Y%7%IL3 z?h-!;W5jR5WO1AITwe&2elb`>ye{k_-UE&n9}h#tSHQjE2Vso(P54^eW08sc?fNAVueSA0BNB)$Uf5_NAHqr>I*QkY9mRXV(ceZoo~I*QkWUB!FC zvEmcpV)2!5xA-A=Mf?_gE1q#P^^-8^mw*o9&akt1FX$s407JyX;2!bA@TzzmOcKwy zh4T+#r4MV1JHyW6y`Ycyco-_a0`3w&2rrA@gs;VIwz7W-Yx}?&;&ow1@g8ur_;|QT zd?1xHP7}=R@qsW%d^%h$z5yN) zKLKxxKZKbNO8U@FygY0u-VAz*4}?MD(_w`826#mL1iUN$5N19k>BBPO<)N#1Gw3Nk z5C(})hY{i%;1Tf?@V59vnE9}z56g&`hpytyU|;cpFi3nlj1b=dkBFaucf}vVY|)ZF zEF)eXHWY6L`-%^QLE_WlYVi&5nD_~JSNtK&d_>ZRcH-rst9Uc$DLxPei%*9U;v3*G z@e}a2_(Pcadr2SKiI<12;?1C^_&^vWJ{?AgZ-B?dPr%#a4`H^Wl0LK(FArVCn?X$?2;;;bz>LRI)6Wh|h?j+R#T&sM;{D)w@yT$7_!@Xn{5ZTReh=Cl zPfh;=SWLVubP;a^J;eLL@#2%=3h_1Yp!jhZFMbc&{2=MWlHz4yUGYZHL%bgxFFqND zi?4wP#gD^y@q5tbM@b(R6E6+xi8p{f#rr@%@kwx*_$qiv{3yI7o&Yoal$w54SX{g` zbP{g>yNmaMe&UnhGVxXLfcQ~(Lp%X$@vJ9kUlZp3tu%BJZvcCW_kk0{C&6XntKcE= zqwtn^0?cqy@(+uPmxfN_4PbZiKG08m5?m?13LX+a3U7%gzznA(eON@iG;|Vg0DFq} zfqvqX;4<-5@R0aXcuPD1YVoY6$vpIa18vTv zrkMp66E6j8i`R$U#CyYW;uGOg@o(XN@$cbv@jEa@Jj+?`{|S@-Qn0Rgeb`OBHykHE z5v~wl1rLZHg*U_#pcc=1j_pra^#?kMH-O#6`#?YOAh<+40`3z(0y-tGFlh7Y~9<#3SH7@gwk>cpOX-&v=3M7h%#b0UgAhVQ2AP&__G~hKPs3 zJ>rMqRq;5OB%bkS(kHC+p@X?Ym|juQ`nOU1+Be(}Tbs(2hs63=*%^a(3{=pgP4 zJB#;%BYqfO6_0~S;u$ZIK4GN~9mJhsXYpRpM?3(Ah=;*F;)mf?@i>?y zp7ApEld#f<4&u(Rvv@D)BOU-l#KYho@x$<{cpOX;&v=FW6IS}rLEIU37Viap!~hrvDKhv8N6IG7}!F^2RBD}Cr7 z?hHGN_kup+0Wd^74DJy>46lmE!6fmF*GQkR(uWS>&aj(!FX$s407JyX;2!bA@Tzzm zOcKv{o%9JSedr+W3_FYWfuZqXPB=L+lNT0CMhYsS-u(NnC=p!Bg zL&U@29`S=PM*JpB7PpC||A#Q?7lSp#>%uPLJ)p1nco-_a0`3(*2xG)=!enuqoAjR$ zR{GFUye{k_-UIrIkB6b+E8t%7gD^(?CVVY!bBp{FR{GFUye{k_-UIrIkB6b+E8t%7 zL-3mTE%-(}LtGYBh%o6Fhqc7(!LH)HppSR}3=t25d&CdJtKv7|YjK-+whv+DAJ!1B z3pDHH;2Uub^Cw99u$s6N>?GbDdW(;R z^Tn6I?c)33CGl(Uh4@>T?`~@PpTer*wV<1LSLh`^7S0!60=J9rgBQfF!589hVZM8k zKCCKU3%ZGSgZ!7pqqGC=p{ZD&KF+-w~OzC z7sRi@7vgVWz6X*%tSVj$x`}s%UgBfneDNi4yZAnMLHrtgA^sNT`$f`+RmE#TH}S5} zOMEPxFTMnB7vBdjh+l&*#NWbv4<&tARlF8-6YmPW#K*#g;!EI8@qO@u_%--K{4Ff- zNYaPZ#cLUgcZH+G$HIl;OW;oNeeja_HTX*WEiCX@(udW>Ye6^huFy+-ESxXC1a24K z1J8+Hg^A)x@Z%?`=@*9f;tsHlcxO0V+y~AT4}n|7_rP=FS7D-f63qKl(uelq4zP`Q zXEW&x(=P}si`Rgy z#5=;F;-leg@kMZ(_%3)x{4#tl{u<_fDe1$?;x%Af@s4n)_-Hs!d=cC%z6+igzYL#> zzlQ&KCF#S;;x%9^@s4nW_-Hs=d=cCxz6+iazYL#?zlOPAOZxCj@tV+0yb~NIJ_gPg zUkta4?}lf^ufS*GZ(zPRsp%JjRmE$<*5aMuF!3>Pj`(7@MSM3rD}Dt&6MqBqBuV

$E_!u}xd@zlOQ9Ncym{cn#P}ydxYcJ{ryz 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 QamHQqM;xl0Tv3w#4{F9q_y7O^ diff --git a/src/ext/DifxApp/wixlib/x86/DIFxApp.dll b/src/ext/DifxApp/wixlib/x86/DIFxApp.dll deleted file mode 100644 index 678a9d95fb13239755031344cf3203e1047ed05a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122248 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

O9y(X_veWd%^M(1r_UhwKjgNEX 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

baniPeG)D~{&t+|t3&;H zt63?*+vZ=Kuzcw2>Z*8JAHU};;$=kZ=K}i3#ZL=<@1AhmW`226sS(i??{475t8~6i zoe;_3tgEswaGJ)a$26pE%JJR283~L$N{Zd&j*==X*OhblhP8B)mz#* zKC>^xhrv1%fpK&jW{eoldr&v6d#v{rt%7ZNV)ZBUB!J|L^i|{%2FOTyh|p%&360N_ zIv+b!C;kIizz=H?853i=OycP|MOT;rA1&m~KmlMIa&sr+hO+~e0EMrXFZIpx&HeqM zkspwA`pQ&pVp<`=p8kQ*2#vKc3=5zERS<{D|40+TE*pqX=#98{QLbt{-qEi(%_~B5p)18^lK9NI8GmD9GjmJ-4zOU`my2 zJHi0a2XrYq6s4ZRuTvqgbQR3Yw@1tI>$krM}i91yVu(g=i&Yv&ZC+c)ykl= z{z#&M2y=scQ8V8*t)U8CQtaK2rRC=F?=q$duk_aX86V_Cc5@i((qdg-od?P=_7Aa z4?c-*8O@kOs>ITc|0pjd5wQGmWh6XTnRS7FIG~B&B>$v0Q($I&A^s;1r8YCR31@pE zUrw?ZahP5ZwbTh3hJqRjfz0g_0UE2ZOx(|JF*%)l+grbF(j+;m4Wr|*~dOjY$S;`;b zEH_(pMh=Y(6Ljv-5cS;};tDC1Bvenb! zX{xEIH1=pO&|Zx`EFOK97jPfb=5iElKPw^LtuwAL-uQvkso2wpiZ+swCrSNaJF#!} z!ccDhJ%a!Bm>t1L&Y4j0n`g)^J1py}4r(M8hB{sGE9Aa#vsC{rm;dJ^luz}S=Vt9G zk{#~X^F`vhT;Uo@75h)skBGmnt-R-QCESv(M@!kXJfre_cv%f4D@5>VdOUZCgbL~+ zgCE5%MfxUX_QXB$UnfQPcI3?%yjXy_`6n_TZTD&)^_wWk?gHgj+1l*v`;3JO`#!0h zB`RC-d3SK1`wY2)LMXmXTz3WZ@PRc~!2FN60t|o$F;L)&L4(x5RSohB7!(SiHvdlq z*MH>|+R9Ixj2d#D#dc#JRU++=^PG1|U-?p#*fM&*eLHx9@kg{?x?=r|Vw+gd?J>c= z)UF86TKDke*9UluKFZmOI6AC2KW?#?OI%i6@sh z0vGWstz>UvfiUc<+4CHCd3Z8%YD8|?X{HM4v7v!89(+vug7RxbVvjQ) zQ&n(Q?GhG?+2i>5jzRrL<;NzKhj#0^?i$i@M>KREClT7zA`m3zM7V}a5iC?LJ7gR- zN|Vi)zBs(&t(=EWSgUE41^BY=Q1VpR-6J6BNxig03eAEnF5>!;yTtpNGGT+z(3ZT+ z8{7MT^9pbRK!&S*huFWpaep`V+~gMS{JT%t@(R?f!2ilC#6(lwml)zO5C(*NbGs^l zC*Z#BcHnTpR@CM@>l=!#t#1fI>laZsrM1}(scTIBSKny;^$X2+oRlJWidBWuTYM&_%+=E!>N81Mgg zyH<`=T)f|{mG2*18L}Z{wI6d~^2@Bb8t$d``s=M4c+* zN$5uYh`u32mMCtrO1gYzC5VUPc87o{{n0aQ&6zR|cea;bnLBn(I>0cp_vFKT3b#Q- zCEVOx>O;k#rqb(OD4QC?gM*y=OO=|6DM7d;%`k7Yfc1Tx=MM7XL;p$1W}^9flPB<9 z2lEtK=D|b#TE;tvW-nK4PjJ%_GP{}=a_^*<0mrHEq+s0!#*;x|^eDqUy`Bm=ZPzR( zh`$ukq%`(%*v$10oVnjOLDCsEJmywCFt21H?Q!u%?X{A@V~#CG@ZgRbzgLTInWtA8 z?y4LfmPr>PsuCw zGueR|JkM8K(uB@GpTG28Xxp>emEAAKhSiHA8XMh4jjL*T3!i%ItYkU5b9}~3UVomK zJ>{~4GUoY*V&#wASX+fLt2_h6?5=#+*=#-gr%Fvywwe3=jqm0EYApkj5m}IvN{5o# z05vB3=hG}uPWxLH=v$VZ5_1g@*vN1*(t<1-@9I$29m-mN%fT~)Y{2HdyikUBJ&n(Z z0HLI$oB6^FyQ9nD`=;Z3s*RJ1sr({IfbFJJuz*m0kRlZ=@!gLkt)WjssMAMNr!@*H zl!zAl(^xX>>-hK09v{jaBgimlImTF%ZB_xwlM%XegyMdoFINrUB=MUU?p6pqj`&bL z)4!Cl=S|YV()2HR&d=3KK$U&d>N6HiKAocXxC)-?+Kl6Q}djE8@2DJG)oFc3zNO_mtBkJ|`;~a?kEjd=*bc_|VZ;qzx1U-Jc`NX&3v)t7 z?)G(rReyR_L>&5N%B2v@sSApUedY%QYw{z*E_g1q_H&-Pcvw5^1>-r9Bz2GHOYPp? z(;p7J4-A>s*LbvisKxQB+557{8`47)qg=wrI;snVi4`jkUTBSZbXr?9v_93^XH6`K zJ2BmB)BH@+m`(auF`Me;u^tBvX3YnyL@~Rkj!3y>p=U;}2Bf3~A+WCXnl3_~Cq=4g SxU@J{G?=9wHJRc{L-Q|~_D_`n diff --git a/src/ext/DifxApp/wixlib/x86/DIFxAppA.dll b/src/ext/DifxApp/wixlib/x86/DIFxAppA.dll deleted file mode 100644 index 3ac0838d94e4ebf5ca91d223512741bca0ba65bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364424 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

%VG>|WTop#7Hf{8fNhT*ND&snKqv02D+UJ@zVU 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 + ExitOnFailure(hr, "failed to set firewall exception name"); + + *ppNetFwRule = pNetFwRule; + +LExit: + return hr; +} + + +/********************************************************************* + GetFwRuleInterfaces - pack firewall rule interfaces into a VARIANT. + The populated VARIANT needs to be cleaned up by the calling function. + +**********************************************************************/ +static HRESULT GetFwRuleInterfaces( + __in FIREWALL_EXCEPTION_ATTRIBUTES const& attrs, + __out VARIANT& vInterfaces +) +{ + HRESULT hr = S_OK; + BSTR bstrInterfaces = NULL; + const WCHAR FORBIDDEN_FIREWALL_CHAR = L'|'; + LONG iInterfacesCount = 0; + UINT iLength = 0; + LONG iIndex = 0; + + ::VariantInit(&vInterfaces); + ExitOnNull(attrs.pwzInterfaces, hr, S_OK, "No interfaces to pack"); + + bstrInterfaces = ::SysAllocString(attrs.pwzInterfaces); + ExitOnNull(bstrInterfaces, hr, E_OUTOFMEMORY, "failed SysAllocString for interfaces"); + + iLength = ::SysStringLen(bstrInterfaces); + + LPWSTR pwzT = bstrInterfaces; + while (*pwzT) + { + if (FORBIDDEN_FIREWALL_CHAR == *pwzT) + { + *pwzT = L'\0'; + pwzT++; + + // skip empty values inside the interfaces eg. ||| + if (*pwzT && FORBIDDEN_FIREWALL_CHAR != *pwzT) + { + iInterfacesCount++; + } + } + else + { + if (pwzT == bstrInterfaces) + { + iInterfacesCount++; + } + + pwzT++; + } + } + + ExitOnNull(iInterfacesCount, hr, S_OK, "All interfaces are empty values"); + + vInterfaces.vt = VT_ARRAY | VT_VARIANT; + // this will be cleaned up by ReleaseVariant call of the calling function + vInterfaces.parray = SafeArrayCreateVector(VT_VARIANT, 0, iInterfacesCount); + + for (LPCWSTR pwzElement = bstrInterfaces; pwzElement < (bstrInterfaces + iLength); ++pwzElement) + { + if (*pwzElement) + { + VARIANT vElement; + ::VariantInit(&vElement); + + vElement.vt = VT_BSTR; + // this will be cleaned up by ReleaseVariant call of the calling function + vElement.bstrVal = ::SysAllocString(pwzElement); + ExitOnNull(vElement.bstrVal, hr, E_OUTOFMEMORY, "failed SysAllocString for interface element"); + + hr = SafeArrayPutElement(vInterfaces.parray, &iIndex, &vElement); + ExitOnFailure(hr, "failed to put interface '%ls' into safe array", pwzElement); + + pwzElement += ::SysStringLen(vElement.bstrVal); + iIndex++; + } + } + +LExit: + ReleaseBSTR(bstrInterfaces); + + return hr; +} + +/****************************************************************************** + UpdateFwRule2Object - update properties for a firewall INetFwRule2 interface. + Requires Windows 7 / 2008 R2 + + ******************************************************************************/ +static HRESULT UpdateFwRule2Object( + __in INetFwRule* pNetFwRule, + __in BOOL fUpdateRule, + __in FIREWALL_EXCEPTION_ATTRIBUTES const& attrs +) { HRESULT hr = S_OK; + INetFwRule2* pNetFwRule2 = NULL; + + hr = pNetFwRule->QueryInterface(__uuidof(INetFwRule2), (LPVOID*)&pNetFwRule2); + ExitOnFailure(hr, "failed to query INetFwRule2 interface"); + + if (MSI_NULL_INTEGER != attrs.iEdgeTraversal) + { + hr = pNetFwRule2->put_EdgeTraversalOptions(attrs.iEdgeTraversal); + ExitOnFailure(hr, "failed to set exception edge traversal option"); + } + else if (fUpdateRule) + { + hr = pNetFwRule2->put_EdgeTraversalOptions(NET_FW_EDGE_TRAVERSAL_TYPE_DENY); + ExitOnFailure(hr, "failed to remove exception edge traversal option"); + } + +LExit: + ReleaseObject(pNetFwRule2); + + return hr; +} + + +/****************************************************************************** + UpdateFwRule3Object - update properties for a firewall INetFwRule3 interface. + Requires Windows 8 / 2012 + + ******************************************************************************/ +static HRESULT UpdateFwRule3Object( + __in INetFwRule* pNetFwRule, + __in BOOL fUpdateRule, + __in FIREWALL_EXCEPTION_ATTRIBUTES const& attrs +) +{ + HRESULT hr = S_OK; + + BSTR bstrLocalAppPackageId = NULL; + BSTR bstrLocalUserAuthorizedList = NULL; + BSTR bstrLocalUserOwner = NULL; + BSTR bstrRemoteMachineAuthorizedList = NULL; + BSTR bstrRemoteUserAuthorizedList = NULL; + INetFwRule3* pNetFwRule3 = NULL; + + bstrLocalAppPackageId = ::SysAllocString(attrs.pwzLocalAppPackageId); + ExitOnNull(bstrLocalAppPackageId, hr, E_OUTOFMEMORY, "failed SysAllocString for local app package id"); + bstrLocalUserAuthorizedList = ::SysAllocString(attrs.pwzLocalUserAuthorizedList); + ExitOnNull(bstrLocalUserAuthorizedList, hr, E_OUTOFMEMORY, "failed SysAllocString for local user authorized list"); + bstrLocalUserOwner = ::SysAllocString(attrs.pwzLocalUserOwner); + ExitOnNull(bstrLocalUserOwner, hr, E_OUTOFMEMORY, "failed SysAllocString for local user owner"); + bstrRemoteMachineAuthorizedList = ::SysAllocString(attrs.pwzRemoteMachineAuthorizedList); + ExitOnNull(bstrRemoteMachineAuthorizedList, hr, E_OUTOFMEMORY, "failed SysAllocString for remote machine authorized list"); + bstrRemoteUserAuthorizedList = ::SysAllocString(attrs.pwzRemoteUserAuthorizedList); + ExitOnNull(bstrRemoteUserAuthorizedList, hr, E_OUTOFMEMORY, "failed SysAllocString for remote user authorized list"); + + hr = pNetFwRule->QueryInterface(__uuidof(INetFwRule3), (LPVOID*)&pNetFwRule3); + ExitOnFailure(hr, "failed to query INetFwRule3 interface"); + + if (bstrLocalAppPackageId && *bstrLocalAppPackageId) + { + hr = pNetFwRule3->put_LocalAppPackageId(bstrLocalAppPackageId); + ExitOnFailure(hr, "failed to set exception local app package id"); + } + else if (fUpdateRule) + { + hr = pNetFwRule3->put_LocalAppPackageId(NULL); + ExitOnFailure(hr, "failed to remove exception local app package id"); + } + + if (bstrLocalUserAuthorizedList && *bstrLocalUserAuthorizedList) + { + hr = pNetFwRule3->put_LocalUserAuthorizedList(bstrLocalUserAuthorizedList); + ExitOnFailure(hr, "failed to set exception local user authorized list"); + } + else if (fUpdateRule) + { + hr = pNetFwRule3->put_LocalUserAuthorizedList(NULL); + ExitOnFailure(hr, "failed to remove exception local user authorized list"); + } + + if (bstrLocalUserOwner && *bstrLocalUserOwner) + { + hr = pNetFwRule3->put_LocalUserOwner(bstrLocalUserOwner); + ExitOnFailure(hr, "failed to set exception local user owner"); + } + else if (fUpdateRule) + { + hr = pNetFwRule3->put_LocalUserOwner(NULL); + ExitOnFailure(hr, "failed to remove exception local user owner"); + } + + if (bstrRemoteMachineAuthorizedList && *bstrRemoteMachineAuthorizedList) + { + hr = pNetFwRule3->put_RemoteMachineAuthorizedList(bstrRemoteMachineAuthorizedList); + ExitOnFailure(hr, "failed to set exception remote machine authorized list"); + } + else if (fUpdateRule) + { + hr = pNetFwRule3->put_RemoteMachineAuthorizedList(NULL); + ExitOnFailure(hr, "failed to remove exception remote machine authorized list"); + } + + if (bstrRemoteUserAuthorizedList && *bstrRemoteUserAuthorizedList) + { + hr = pNetFwRule3->put_RemoteUserAuthorizedList(bstrRemoteUserAuthorizedList); + ExitOnFailure(hr, "failed to set exception remote user authorized list"); + } + else if (fUpdateRule) + { + hr = pNetFwRule3->put_RemoteUserAuthorizedList(NULL); + ExitOnFailure(hr, "failed to remove exception remote user authorized list"); + } + + if (MSI_NULL_INTEGER != attrs.iSecureFlags) + { + hr = pNetFwRule3->put_SecureFlags(attrs.iSecureFlags); + ExitOnFailure(hr, "failed to set exception IPsec secure flags"); + } + else if (fUpdateRule) + { + hr = pNetFwRule3->put_SecureFlags(NET_FW_AUTHENTICATE_NONE); + ExitOnFailure(hr, "failed to reset exception IPsec secure flags"); + } + +LExit: + ReleaseBSTR(bstrLocalAppPackageId); + ReleaseBSTR(bstrLocalUserAuthorizedList); + ReleaseBSTR(bstrLocalUserOwner); + ReleaseBSTR(bstrRemoteMachineAuthorizedList); + ReleaseBSTR(bstrRemoteUserAuthorizedList); + ReleaseObject(pNetFwRule3); + + return hr; +} + + +/********************************************************************** + UpdateFwRuleObject - update all properties for a basic firewall rule. + Requires Windows Vista / 2008 + + **********************************************************************/ +static HRESULT UpdateFwRuleObject( + __in INetFwRule* pNetFwRule, + __in BOOL fUpdateRule, + __in FIREWALL_EXCEPTION_ATTRIBUTES const& attrs +) +{ + HRESULT hr = S_OK; + BSTR bstrEmpty = NULL; BSTR bstrRemoteAddresses = NULL; + BSTR bstrFile = NULL; BSTR bstrPort = NULL; BSTR bstrDescription = NULL; - INetFwRule* pNetFwRule = NULL; - *ppNetFwRule = NULL; + BSTR bstrGrouping = NULL; + BSTR bstrIcmpTypesAndCodes = NULL; + BSTR bstrInterfaceTypes = NULL; + BSTR bstrLocalAddresses = NULL; + BSTR bstrRemotePort = NULL; + BSTR bstrServiceName = NULL; + VARIANT vInterfaces; + ::VariantInit(&vInterfaces); + LONG iProtocol = 0; + + INetFwRule2* pNetFwRule2 = NULL; // convert to BSTRs to make COM happy + bstrEmpty = ::SysAllocString(L""); + ExitOnNull(bstrEmpty, hr, E_OUTOFMEMORY, "failed SysAllocString for empty placeholder"); + bstrRemoteAddresses = ::SysAllocString(attrs.pwzRemoteAddresses); ExitOnNull(bstrRemoteAddresses, hr, E_OUTOFMEMORY, "failed SysAllocString for remote addresses"); - bstrPort = ::SysAllocString(attrs.pwzPort); + bstrFile = ::SysAllocString(attrs.pwzApplicationName); + ExitOnNull(bstrFile, hr, E_OUTOFMEMORY, "failed SysAllocString for application name"); + bstrPort = ::SysAllocString(attrs.pwzLocalPorts); ExitOnNull(bstrPort, hr, E_OUTOFMEMORY, "failed SysAllocString for port"); bstrDescription = ::SysAllocString(attrs.pwzDescription); ExitOnNull(bstrDescription, hr, E_OUTOFMEMORY, "failed SysAllocString for description"); + bstrGrouping = ::SysAllocString(attrs.pwzGrouping); + ExitOnNull(bstrGrouping, hr, E_OUTOFMEMORY, "failed SysAllocString for grouping"); + bstrIcmpTypesAndCodes = ::SysAllocString(attrs.pwzIcmpTypesAndCodes); + ExitOnNull(bstrIcmpTypesAndCodes, hr, E_OUTOFMEMORY, "failed SysAllocString for icmp types and codes"); + bstrInterfaceTypes = ::SysAllocString(attrs.pwzInterfaceTypes); + ExitOnNull(bstrInterfaceTypes, hr, E_OUTOFMEMORY, "failed SysAllocString for interface types"); + bstrLocalAddresses = ::SysAllocString(attrs.pwzLocalAddresses); + ExitOnNull(bstrLocalAddresses, hr, E_OUTOFMEMORY, "failed SysAllocString for local addresses"); + bstrRemotePort = ::SysAllocString(attrs.pwzRemotePorts); + ExitOnNull(bstrRemotePort, hr, E_OUTOFMEMORY, "failed SysAllocString for remote port"); + bstrServiceName = ::SysAllocString(attrs.pwzServiceName); + ExitOnNull(bstrServiceName, hr, E_OUTOFMEMORY, "failed SysAllocString for service name"); + + if (fUpdateRule) + { + hr = pNetFwRule->get_Protocol(&iProtocol); + ExitOnFailure(hr, "failed to get exception protocol"); - hr = ::CoCreateInstance(__uuidof(NetFwRule), NULL, CLSCTX_ALL, __uuidof(INetFwRule), (void**)&pNetFwRule); - ExitOnFailure(hr, "failed to create NetFwRule object"); + // If you are editing a TCP port rule and converting it into an ICMP rule, + // first delete the ports, change protocol from TCP to ICMP, and then add the ports. - hr = pNetFwRule->put_Name(bstrName); - ExitOnFailure(hr, "failed to set exception name"); + switch (iProtocol) + { + case NET_FW_IP_PROTOCOL_ANY: + break; - hr = pNetFwRule->put_Profiles(static_cast(attrs.iProfile)); - ExitOnFailure(hr, "failed to set exception profile"); + case 1: // ICMP + hr = pNetFwRule->put_IcmpTypesAndCodes(NULL); + ExitOnFailure(hr, "failed to remove exception icmp types and codes"); + // fall through and reset ports too + default: + hr = pNetFwRule->put_LocalPorts(NULL); + ExitOnFailure(hr, "failed to update exception local ports to NULL"); + + hr = pNetFwRule->put_RemotePorts(NULL); + ExitOnFailure(hr, "failed to update exception remote ports to NULL"); + break; + } + } + + if (MSI_NULL_INTEGER != attrs.iProfile) + { + hr = pNetFwRule->put_Profiles(static_cast (attrs.iProfile)); + ExitOnFailure(hr, "failed to set exception profile"); + } + else if (fUpdateRule) + { + hr = pNetFwRule->put_Profiles(NET_FW_PROFILE2_ALL); + ExitOnFailure(hr, "failed to reset exception profile to all"); + } + + // The Protocol property must be set before the LocalPorts/RemotePorts properties or an error will be returned. if (MSI_NULL_INTEGER != attrs.iProtocol) { - hr = pNetFwRule->put_Protocol(static_cast(attrs.iProtocol)); + hr = pNetFwRule->put_Protocol(static_cast (attrs.iProtocol)); ExitOnFailure(hr, "failed to set exception protocol"); } + else if (fUpdateRule) + { + if ((bstrPort && *bstrPort) || (bstrRemotePort && *bstrRemotePort)) + { + // default protocol is "TCP" in the WiX firewall compiler if a port is specified + hr = pNetFwRule->put_Protocol(NET_FW_IP_PROTOCOL_TCP); + ExitOnFailure(hr, "failed to reset exception protocol to TCP"); + } + else + { + hr = pNetFwRule->put_Protocol(NET_FW_IP_PROTOCOL_ANY); + ExitOnFailure(hr, "failed to reset exception protocol to ANY"); + } + } if (bstrPort && *bstrPort) { hr = pNetFwRule->put_LocalPorts(bstrPort); - ExitOnFailure(hr, "failed to set exception port"); + ExitOnFailure(hr, "failed to set exception local ports '%ls'", bstrPort); } if (bstrRemoteAddresses && *bstrRemoteAddresses) @@ -322,122 +768,195 @@ static HRESULT CreateFwRuleObject( hr = pNetFwRule->put_RemoteAddresses(bstrRemoteAddresses); ExitOnFailure(hr, "failed to set exception remote addresses '%ls'", bstrRemoteAddresses); } + else if (fUpdateRule) + { + hr = pNetFwRule->put_RemoteAddresses(bstrEmpty); + ExitOnFailure(hr, "failed to remove exception remote addresses"); + } if (bstrDescription && *bstrDescription) { hr = pNetFwRule->put_Description(bstrDescription); ExitOnFailure(hr, "failed to set exception description '%ls'", bstrDescription); } + else if (fUpdateRule) + { + hr = pNetFwRule->put_Description(bstrEmpty); + ExitOnFailure(hr, "failed to remove exception description"); + } if (MSI_NULL_INTEGER != attrs.iDirection) { hr = pNetFwRule->put_Direction(static_cast (attrs.iDirection)); ExitOnFailure(hr, "failed to set exception direction"); } + else if (fUpdateRule) + { + hr = pNetFwRule->put_Direction(NET_FW_RULE_DIR_IN); + ExitOnFailure(hr, "failed to reset exception direction to in"); + } - *ppNetFwRule = pNetFwRule; - pNetFwRule = NULL; + if (MSI_NULL_INTEGER != attrs.iAction) + { + hr = pNetFwRule->put_Action(static_cast (attrs.iAction)); + ExitOnFailure(hr, "failed to set exception action"); + } + else if (fUpdateRule) + { + hr = pNetFwRule->put_Action(NET_FW_ACTION_ALLOW); + ExitOnFailure(hr, "failed to reset exception action to allow"); + } -LExit: - ReleaseBSTR(bstrRemoteAddresses); - ReleaseBSTR(bstrPort); - ReleaseBSTR(bstrDescription); - ReleaseObject(pNetFwRule); + if (bstrFile && *bstrFile) + { + hr = pNetFwRule->put_ApplicationName(bstrFile); + ExitOnFailure(hr, "failed to set exception application name"); + } + else if (fUpdateRule) + { + hr = pNetFwRule->put_ApplicationName(NULL); + ExitOnFailure(hr, "failed to remove exception application name"); + } - return hr; -} + if (MSI_NULL_INTEGER != attrs.iEdgeTraversal) + { + switch (attrs.iEdgeTraversal) + { + default: + hr = pNetFwRule->put_EdgeTraversal(NET_FW_EDGE_TRAVERSAL_TYPE_DENY != attrs.iEdgeTraversal ? VARIANT_TRUE : VARIANT_FALSE); + ExitOnFailure(hr, "failed to set exception edge traversal"); + break; -/****************************************************************** - AddApplicationException + // handled by put_EdgeTraversalOptions + case NET_FW_EDGE_TRAVERSAL_TYPE_DEFER_TO_APP: + case NET_FW_EDGE_TRAVERSAL_TYPE_DEFER_TO_USER: + break; + } + } + else if (fUpdateRule) + { + hr = pNetFwRule->put_EdgeTraversal(VARIANT_FALSE); + ExitOnFailure(hr, "failed to remove exception edge traversal"); + } -********************************************************************/ -static HRESULT AddApplicationException( - __in FIREWALL_EXCEPTION_ATTRIBUTES const& attrs, - __in BOOL fIgnoreFailures - ) -{ - HRESULT hr = S_OK; - BSTR bstrFile = NULL; - BSTR bstrName = NULL; - INetFwRules* pNetFwRules = NULL; - INetFwRule* pNetFwRule = NULL; + // enable even when iEnabled == MSI_NULL_INTEGER + hr = pNetFwRule->put_Enabled(attrs.iEnabled ? VARIANT_TRUE : VARIANT_FALSE); + ExitOnFailure(hr, "failed to set exception enabled flag"); - // convert to BSTRs to make COM happy - bstrFile = ::SysAllocString(attrs.pwzProgram); - ExitOnNull(bstrFile, hr, E_OUTOFMEMORY, "failed SysAllocString for path"); - bstrName = ::SysAllocString(attrs.pwzName); - ExitOnNull(bstrName, hr, E_OUTOFMEMORY, "failed SysAllocString for name"); + if (bstrGrouping && *bstrGrouping) + { + hr = pNetFwRule->put_Grouping(bstrGrouping); + ExitOnFailure(hr, "failed to set exception grouping '%ls'", bstrGrouping); + } + else if (fUpdateRule) + { + hr = pNetFwRule->put_Grouping(bstrEmpty); + ExitOnFailure(hr, "failed to remove exception grouping"); + } - // get the collection of firewall rules - hr = GetFirewallRules(fIgnoreFailures, &pNetFwRules); - ExitOnFailure(hr, "failed to get firewall rules object"); - if (S_FALSE == hr) // user or package author chose to ignore missing firewall + if (bstrIcmpTypesAndCodes && *bstrIcmpTypesAndCodes) { - ExitFunction(); + hr = pNetFwRule->put_IcmpTypesAndCodes(bstrIcmpTypesAndCodes); + ExitOnFailure(hr, "failed to set exception icmp types and codes '%ls'", bstrIcmpTypesAndCodes); } - // try to find it (i.e., support reinstall) - hr = pNetFwRules->Item(bstrName, &pNetFwRule); - if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr) + hr = GetFwRuleInterfaces(attrs, vInterfaces); + ExitOnFailure(hr, "failed to prepare exception interfaces '%ls'", attrs.pwzInterfaces); + + if (attrs.pwzInterfaces && *attrs.pwzInterfaces) { - hr = CreateFwRuleObject(bstrName, attrs, &pNetFwRule); - ExitOnFailure(hr, "failed to create FwRule object"); + hr = pNetFwRule->put_Interfaces(vInterfaces); + ExitOnFailure(hr, "failed to set exception interfaces '%ls'", attrs.pwzInterfaces); + } + else if (fUpdateRule) + { + hr = pNetFwRule->put_Interfaces(vInterfaces); + ExitOnFailure(hr, "failed to remove exception interfaces"); + } - // set edge traversal to true - hr = pNetFwRule->put_EdgeTraversal(VARIANT_TRUE); - ExitOnFailure(hr, "failed to set application exception edgetraversal property"); - - // set path - hr = pNetFwRule->put_ApplicationName(bstrFile); - ExitOnFailure(hr, "failed to set application name"); - - // enable it - hr = pNetFwRule->put_Enabled(VARIANT_TRUE); - ExitOnFailure(hr, "failed to to enable application exception"); - - // add it to the list of authorized apps - hr = pNetFwRules->Add(pNetFwRule); - ExitOnFailure(hr, "failed to add app to the authorized apps list"); + if (bstrInterfaceTypes && *bstrInterfaceTypes) + { + hr = pNetFwRule->put_InterfaceTypes(bstrInterfaceTypes); + ExitOnFailure(hr, "failed to set exception interface types '%ls'", bstrInterfaceTypes); } - else + else if (fUpdateRule) { - // we found an existing app exception (if we succeeded, that is) - ExitOnFailure(hr, "failed trying to find existing app"); - - // enable it (just in case it was disabled) - pNetFwRule->put_Enabled(VARIANT_TRUE); + hr = pNetFwRule->put_InterfaceTypes(bstrEmpty); + ExitOnFailure(hr, "failed to remove exception interface types"); + } + + if (bstrLocalAddresses && *bstrLocalAddresses) + { + hr = pNetFwRule->put_LocalAddresses(bstrLocalAddresses); + ExitOnFailure(hr, "failed to set exception local addresses '%ls'", bstrLocalAddresses); + } + else if (fUpdateRule) + { + hr = pNetFwRule->put_LocalAddresses(bstrEmpty); + ExitOnFailure(hr, "failed to remove exception local addresses"); + } + + if (bstrRemotePort && *bstrRemotePort) + { + hr = pNetFwRule->put_RemotePorts(bstrRemotePort); + ExitOnFailure(hr, "failed to set exception remote ports '%ls'", bstrRemotePort); + } + + if (bstrServiceName && *bstrServiceName) + { + hr = pNetFwRule->put_ServiceName(bstrServiceName); + ExitOnFailure(hr, "failed to set exception service name '%ls'", bstrServiceName); + } + else if (fUpdateRule) + { + hr = pNetFwRule->put_ServiceName(NULL); + ExitOnFailure(hr, "failed to remove exception service name"); } LExit: - ReleaseBSTR(bstrName); + ReleaseBSTR(bstrRemoteAddresses); ReleaseBSTR(bstrFile); - ReleaseObject(pNetFwRules); - ReleaseObject(pNetFwRule); + ReleaseBSTR(bstrPort); + ReleaseBSTR(bstrDescription); + ReleaseBSTR(bstrGrouping); + ReleaseBSTR(bstrIcmpTypesAndCodes); + ReleaseBSTR(bstrInterfaceTypes); + ReleaseBSTR(bstrLocalAddresses); + ReleaseBSTR(bstrRemotePort); + ReleaseBSTR(bstrServiceName); + ReleaseVariant(vInterfaces); + ReleaseObject(pNetFwRule2); - return fIgnoreFailures ? S_OK : hr; + return hr; } -/****************************************************************** - AddPortException + +/******************************************************************* + AddFirewallException ********************************************************************/ -static HRESULT AddPortException( +static HRESULT AddFirewallException( __in FIREWALL_EXCEPTION_ATTRIBUTES const& attrs, __in BOOL fIgnoreFailures - ) +) { HRESULT hr = S_OK; BSTR bstrName = NULL; INetFwRules* pNetFwRules = NULL; INetFwRule* pNetFwRule = NULL; + BOOL fIgnoreUpdates = feaIgnoreUpdates == (attrs.iAttributes & feaIgnoreUpdates); + BOOL fEnableOnUpdate = feaEnableOnUpdate == (attrs.iAttributes & feaEnableOnUpdate); + BOOL fAddINetFwRule2 = feaAddINetFwRule2 == (attrs.iAttributes & feaAddINetFwRule2); + BOOL fAddINetFwRule3 = feaAddINetFwRule3 == (attrs.iAttributes & feaAddINetFwRule3); + // convert to BSTRs to make COM happy bstrName = ::SysAllocString(attrs.pwzName); ExitOnNull(bstrName, hr, E_OUTOFMEMORY, "failed SysAllocString for name"); // get the collection of firewall rules hr = GetFirewallRules(fIgnoreFailures, &pNetFwRules); - ExitOnFailure(hr, "failed to get firewall rules object"); + ExitOnFailure(hr, "failed to get firewall exception object"); if (S_FALSE == hr) // user or package author chose to ignore missing firewall { ExitFunction(); @@ -447,24 +966,56 @@ static HRESULT AddPortException( hr = pNetFwRules->Item(bstrName, &pNetFwRule); if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr) { - hr = CreateFwRuleObject(bstrName, attrs, &pNetFwRule); - ExitOnFailure(hr, "failed to create FwRule object"); + hr = CreateFwRuleObject(bstrName, &pNetFwRule); + ExitOnFailure(hr, "failed to create FwRule object '%ls'", attrs.pwzName); - // enable it - hr = pNetFwRule->put_Enabled(VARIANT_TRUE); - ExitOnFailure(hr, "failed to to enable port exception"); + // set attributes of the new firewall rule + hr = UpdateFwRuleObject(pNetFwRule, FALSE, attrs); + ExitOnFailure(hr, "failed to create INetFwRule firewall exception '%ls'", attrs.pwzName); + + if (fAddINetFwRule2) + { + hr = UpdateFwRule2Object(pNetFwRule, FALSE, attrs); + ExitOnFailure(hr, "failed to create INetFwRule2 firewall exception '%ls'", attrs.pwzName); + } + + if (fAddINetFwRule3) + { + hr = UpdateFwRule3Object(pNetFwRule, FALSE, attrs); + ExitOnFailure(hr, "failed to create INetFwRule3 firewall exception '%ls'", attrs.pwzName); + } - // add it to the list of authorized ports hr = pNetFwRules->Add(pNetFwRule); - ExitOnFailure(hr, "failed to add app to the authorized ports list"); + ExitOnFailure(hr, "failed to add firewall exception '%ls' to the list", attrs.pwzName); } else { - // we found an existing port exception (if we succeeded, that is) - ExitOnFailure(hr, "failed trying to find existing port rule"); + // we found an existing firewall rule (if we succeeded, that is) + ExitOnFailure(hr, "failed trying to find existing firewall exception '%ls'", attrs.pwzName); + + if (fEnableOnUpdate) + { + hr = pNetFwRule->put_Enabled(VARIANT_TRUE); + ExitOnFailure(hr, "failed to enable existing firewall exception '%ls'", attrs.pwzName); + } + else if (!fIgnoreUpdates) + { + // overwrite attributes of the existing firewall rule + hr = UpdateFwRuleObject(pNetFwRule, TRUE, attrs); + ExitOnFailure(hr, "failed to update INetFwRule firewall exception '%ls'", attrs.pwzName); - // enable it (just in case it was disabled) - pNetFwRule->put_Enabled(VARIANT_TRUE); + if (fAddINetFwRule2) + { + hr = UpdateFwRule2Object(pNetFwRule, TRUE, attrs); + ExitOnFailure(hr, "failed to update INetFwRule2 firewall exception '%ls'", attrs.pwzName); + } + + if (fAddINetFwRule3) + { + hr = UpdateFwRule3Object(pNetFwRule, TRUE, attrs); + ExitOnFailure(hr, "failed to update INetFwRule3 firewall exception '%ls'", attrs.pwzName); + } + } } LExit: @@ -475,14 +1026,15 @@ static HRESULT AddPortException( return fIgnoreFailures ? S_OK : hr; } -/****************************************************************** + +/******************************************************************* RemoveException - Removes all exception rules with the given name. ********************************************************************/ static HRESULT RemoveException( __in LPCWSTR wzName, __in BOOL fIgnoreFailures - ) +) { HRESULT hr = S_OK;; INetFwRules* pNetFwRules = NULL; @@ -500,7 +1052,7 @@ static HRESULT RemoveException( } hr = pNetFwRules->Remove(bstrName); - ExitOnFailure(hr, "failed to remove firewall rule"); + ExitOnFailure(hr, "failed to remove firewall exception for name %ls", wzName); LExit: ReleaseBSTR(bstrName); @@ -509,20 +1061,20 @@ static HRESULT RemoveException( return fIgnoreFailures ? S_OK : hr; } -/****************************************************************** - ExecFirewallExceptions - deferred custom action entry point to + +/******************************************************************* + ExecFirewallExceptions - deferred custom action entry point to register and remove firewall exceptions. ********************************************************************/ extern "C" UINT __stdcall ExecFirewallExceptions( __in MSIHANDLE hInstall - ) +) { HRESULT hr = S_OK; LPWSTR pwz = NULL; LPWSTR pwzCustomActionData = NULL; int iTodo = WCA_TODO_UNKNOWN; - int iTarget = fetUnknown; FIREWALL_EXCEPTION_ATTRIBUTES attrs = { 0 }; @@ -530,7 +1082,7 @@ extern "C" UINT __stdcall ExecFirewallExceptions( hr = WcaInitialize(hInstall, "ExecFirewallExceptions"); ExitOnFailure(hr, "failed to initialize"); - hr = WcaGetProperty( L"CustomActionData", &pwzCustomActionData); + hr = WcaGetProperty(L"CustomActionData", &pwzCustomActionData); ExitOnFailure(hr, "failed to get CustomActionData"); WcaLog(LOGMSG_TRACEONLY, "CustomActionData: %ls", pwzCustomActionData); @@ -569,60 +1121,82 @@ extern "C" UINT __stdcall ExecFirewallExceptions( ExitOnFailure(hr, "failed to read attributes from custom action data"); BOOL fIgnoreFailures = feaIgnoreFailures == (attrs.iAttributes & feaIgnoreFailures); - hr = WcaReadIntegerFromCaData(&pwz, &iTarget); - ExitOnFailure(hr, "failed to read target from custom action data"); + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzApplicationName); + ExitOnFailure(hr, "failed to read file path from custom action data"); - if (iTarget == fetApplication) - { - hr = WcaReadStringFromCaData(&pwz, &attrs.pwzProgram); - ExitOnFailure(hr, "failed to read file path from custom action data"); - } - - hr = WcaReadStringFromCaData(&pwz, &attrs.pwzPort); + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzLocalPorts); ExitOnFailure(hr, "failed to read port from custom action data"); + hr = WcaReadIntegerFromCaData(&pwz, &attrs.iProtocol); ExitOnFailure(hr, "failed to read protocol from custom action data"); + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzDescription); ExitOnFailure(hr, "failed to read protocol from custom action data"); + hr = WcaReadIntegerFromCaData(&pwz, &attrs.iDirection); ExitOnFailure(hr, "failed to read direction from custom action data"); - switch (iTarget) - { - case fetPort: - switch (iTodo) - { - case WCA_TODO_INSTALL: - case WCA_TODO_REINSTALL: - WcaLog(LOGMSG_STANDARD, "Installing firewall exception %ls on port %ls, protocol %d", attrs.pwzName, attrs.pwzPort, attrs.iProtocol); - hr = AddPortException(attrs, fIgnoreFailures); - ExitOnFailure(hr, "failed to add/update port exception for name '%ls' on port %ls, protocol %d", attrs.pwzName, attrs.pwzPort, attrs.iProtocol); - break; + hr = WcaReadIntegerFromCaData(&pwz, &attrs.iAction); + ExitOnFailure(hr, "failed to read action from custom action data"); - case WCA_TODO_UNINSTALL: - WcaLog(LOGMSG_STANDARD, "Uninstalling firewall exception %ls on port %ls, protocol %d", attrs.pwzName, attrs.pwzPort, attrs.iProtocol); - hr = RemoveException(attrs.pwzName, fIgnoreFailures); - ExitOnFailure(hr, "failed to remove port exception for name '%ls' on port %ls, protocol %d", attrs.pwzName, attrs.pwzPort, attrs.iProtocol); - break; - } - break; + hr = WcaReadIntegerFromCaData(&pwz, &attrs.iEdgeTraversal); + ExitOnFailure(hr, "failed to read edge traversal from custom action data"); - case fetApplication: - switch (iTodo) - { - case WCA_TODO_INSTALL: - case WCA_TODO_REINSTALL: - WcaLog(LOGMSG_STANDARD, "Installing firewall exception %ls (%ls)", attrs.pwzName, attrs.pwzProgram); - hr = AddApplicationException(attrs, fIgnoreFailures); - ExitOnFailure(hr, "failed to add/update application exception for name '%ls', file '%ls'", attrs.pwzName, attrs.pwzProgram); - break; + hr = WcaReadIntegerFromCaData(&pwz, &attrs.iEnabled); + ExitOnFailure(hr, "failed to read enabled flag from custom action data"); - case WCA_TODO_UNINSTALL: - WcaLog(LOGMSG_STANDARD, "Uninstalling firewall exception %ls (%ls)", attrs.pwzName, attrs.pwzProgram); - hr = RemoveException(attrs.pwzName, fIgnoreFailures); - ExitOnFailure(hr, "failed to remove application exception for name '%ls', file '%ls'", attrs.pwzName, attrs.pwzProgram); - break; - } + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzGrouping); + ExitOnFailure(hr, "failed to read grouping from custom action data"); + + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzIcmpTypesAndCodes); + ExitOnFailure(hr, "failed to read icmp types and codes from custom action data"); + + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzInterfaces); + ExitOnFailure(hr, "failed to read interfaces from custom action data"); + + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzInterfaceTypes); + ExitOnFailure(hr, "failed to read interface types from custom action data"); + + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzLocalAddresses); + ExitOnFailure(hr, "failed to read local addresses from custom action data"); + + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzRemotePorts); + ExitOnFailure(hr, "failed to read remote port from custom action data"); + + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzServiceName); + ExitOnFailure(hr, "failed to read service name from custom action data"); + + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzLocalAppPackageId); + ExitOnFailure(hr, "failed to read local app package id from custom action data"); + + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzLocalUserAuthorizedList); + ExitOnFailure(hr, "failed to read local user authorized list from custom action data"); + + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzLocalUserOwner); + ExitOnFailure(hr, "failed to read local user owner from custom action data"); + + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzRemoteMachineAuthorizedList); + ExitOnFailure(hr, "failed to read remote machine authorized list from custom action data"); + + hr = WcaReadStringFromCaData(&pwz, &attrs.pwzRemoteUserAuthorizedList); + ExitOnFailure(hr, "failed to read remote user authorized list from custom action data"); + + hr = WcaReadIntegerFromCaData(&pwz, &attrs.iSecureFlags); + ExitOnFailure(hr, "failed to read exception secure flags from custom action data"); + + switch (iTodo) + { + case WCA_TODO_INSTALL: + case WCA_TODO_REINSTALL: + WcaLog(LOGMSG_STANDARD, "Installing firewall exception %ls", attrs.pwzName); + hr = AddFirewallException(attrs, fIgnoreFailures); + ExitOnFailure(hr, "failed to add/update firewall exception for name '%ls'", attrs.pwzName); + break; + + case WCA_TODO_UNINSTALL: + WcaLog(LOGMSG_STANDARD, "Uninstalling firewall exception %ls", attrs.pwzName); + hr = RemoveException(attrs.pwzName, fIgnoreFailures); + ExitOnFailure(hr, "failed to remove firewall exception"); break; } } @@ -631,9 +1205,21 @@ extern "C" UINT __stdcall ExecFirewallExceptions( ReleaseStr(pwzCustomActionData); ReleaseStr(attrs.pwzName); ReleaseStr(attrs.pwzRemoteAddresses); - ReleaseStr(attrs.pwzProgram); - ReleaseStr(attrs.pwzPort); + ReleaseStr(attrs.pwzApplicationName); + ReleaseStr(attrs.pwzLocalPorts); ReleaseStr(attrs.pwzDescription); + ReleaseStr(attrs.pwzGrouping); + ReleaseStr(attrs.pwzIcmpTypesAndCodes); + ReleaseStr(attrs.pwzInterfaces); + ReleaseStr(attrs.pwzInterfaceTypes); + ReleaseStr(attrs.pwzLocalAddresses); + ReleaseStr(attrs.pwzRemotePorts); + ReleaseStr(attrs.pwzServiceName); + ReleaseStr(attrs.pwzLocalAppPackageId); + ReleaseStr(attrs.pwzLocalUserAuthorizedList); + ReleaseStr(attrs.pwzLocalUserOwner); + ReleaseStr(attrs.pwzRemoteMachineAuthorizedList); + ReleaseStr(attrs.pwzRemoteUserAuthorizedList); ::CoUninitialize(); return WcaFinalize(FAILED(hr) ? ERROR_INSTALL_FAILURE : ERROR_SUCCESS); diff --git a/src/ext/Firewall/test/WixToolsetTest.Firewall/FirewallExtensionFixture.cs b/src/ext/Firewall/test/WixToolsetTest.Firewall/FirewallExtensionFixture.cs index 06a877f6a..df18f0e05 100644 --- a/src/ext/Firewall/test/WixToolsetTest.Firewall/FirewallExtensionFixture.cs +++ b/src/ext/Firewall/test/WixToolsetTest.Firewall/FirewallExtensionFixture.cs @@ -2,6 +2,7 @@ namespace WixToolsetTest.Firewall { + using System.Data; using System.IO; using System.Linq; using System.Xml.Linq; @@ -18,17 +19,36 @@ public void CanBuildUsingFirewall() var folder = TestData.Get(@"TestData\UsingFirewall"); var build = new Builder(folder, typeof(FirewallExtensionFactory), new[] { folder }); - var results = build.BuildAndQuery(Build, "Wix4FirewallException", "CustomAction"); + var results = build.BuildAndQuery(Build, "Wix5FirewallException", "CustomAction"); WixAssert.CompareLineByLine(new[] { - "CustomAction:Wix4ExecFirewallExceptionsInstall_X86\t3073\tWix4FWCA_X86\tExecFirewallExceptions\t", - "CustomAction:Wix4ExecFirewallExceptionsUninstall_X86\t3073\tWix4FWCA_X86\tExecFirewallExceptions\t", - "CustomAction:Wix4RollbackFirewallExceptionsInstall_X86\t3329\tWix4FWCA_X86\tExecFirewallExceptions\t", - "CustomAction:Wix4RollbackFirewallExceptionsUninstall_X86\t3329\tWix4FWCA_X86\tExecFirewallExceptions\t", - "CustomAction:Wix4SchedFirewallExceptionsInstall_X86\t1\tWix4FWCA_X86\tSchedFirewallExceptionsInstall\t", - "CustomAction:Wix4SchedFirewallExceptionsUninstall_X86\t1\tWix4FWCA_X86\tSchedFirewallExceptionsUninstall\t", - "Wix4FirewallException:ExampleFirewall\tExampleApp\t*\t42\t6\t[#filNdJBJmq3UCUIwmXS8x21aAsvqzk]\t0\t2147483647\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tAn app-based firewall exception\t1", - "Wix4FirewallException:fex70IVsYNnbwiHQrEepmdTPKH8XYs\tExamplePort\tLocalSubnet\t42\t6\t\t0\t2147483647\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tA port-based firewall exception\t2", + "CustomAction:Wix5ExecFirewallExceptionsInstall_X86\t3073\tWix5FWCA_X86\tExecFirewallExceptions\t", + "CustomAction:Wix5ExecFirewallExceptionsUninstall_X86\t3073\tWix5FWCA_X86\tExecFirewallExceptions\t", + "CustomAction:Wix5RollbackFirewallExceptionsInstall_X86\t3329\tWix5FWCA_X86\tExecFirewallExceptions\t", + "CustomAction:Wix5RollbackFirewallExceptionsUninstall_X86\t3329\tWix5FWCA_X86\tExecFirewallExceptions\t", + "CustomAction:Wix5SchedFirewallExceptionsInstall_X86\t1\tWix5FWCA_X86\tSchedFirewallExceptionsInstall\t", + "CustomAction:Wix5SchedFirewallExceptionsUninstall_X86\t1\tWix5FWCA_X86\tSchedFirewallExceptionsUninstall\t", + "Wix5FirewallException:ExampleFirewall\tExampleApp\t*\t42\t6\t[#filNdJBJmq3UCUIwmXS8x21aAsvqzk]\t2\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tAn app-based firewall exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fex.BGtyMRGAhxb2hG.49JvWYz7fM0\tLocalScopeExample2\t*\t\t-2147483648\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tRule with local scope property\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t[LOCALSCOPE_PROP]\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fex0HTxATWjpC2PCoY6DB7f2D1WaKU\tLocalScopeExample1\t*\t\t-2147483648\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tSimple rule with local scope\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\tLocalSubnet\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fex4FeP470wYcFpw.g7fbIKiLnZPzg\tExampleDNSScope\tdns\t356\t17\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tDNS scope firewall exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fex4zTcT0Iwu3dUtHIHXD5qfymvpcM\tdefertouser\t\t\t-2147483648\tfw.exe\t8\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tDefer to user edge traversal\t1\t-2147483648\t3\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fex8vMfBplrod4daEz3PqDTeX6olGE\tExampleDefaultGatewayScope\tDefaultGateway\t4432\t6\t\t0\t2\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tdefaultGateway scope firewall exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexAMmHzFDyQmubTOnKS1Cn0Y3q_Ug\tINetFwRule3 properties\t*\t\t-2147483648\t\t16\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tINetFwRule3 passed via properties\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t[PROP1]\t[PROP2]\t[PROP3]\t[PROP4]\t[PROP5]\t[PROP6]", + "Wix5FirewallException:fexArlOkFR7CAwVZ2wk8yNdiREydu0\tRemotePortExample2\t\t\t6\tfw.exe\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tRule with remote port property\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t[REMOTEPORT_PROP]\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexaUTe2tRRcSYrPUTn44DAZhE.40Q\tExamplePort\tLocalSubnet\t42\t6\t\t4\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tA port-based firewall exception\t2\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexD6w20c5HfNi4l1vHFj_eet4cC8I\tExampleWINSScope\twins\t6573\t6\t\t0\t1\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tWINS scope firewall exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexeD3yox6fMflfRy7sDwSN2CMCS2s\tExampleService\t\t12000\t6\t%windir%\\system32\\svchost.exe\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tA port-based service exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\tDHCP,WINS\t\tftpsrv\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexeok6aI2_AlclZggec4d8PBLFXLw\tinterface property\t\t54671\t6\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tInterfaces with property\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t[INTERFACE_PROPERTY]\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexEPvcf4iexD1mVQdvxm7tD02nZEc\tICMPExample1\t\t\t2\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tSimple ICMP rule\t1\t-2147483648\t-2147483648\t-2147483648\t\t4:*,9:*,12:*\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexfzjTQsWwZkHQpObtl0XaUosfcRk\tGroupingExample1\t\t\t-2147483648\tfw.exe\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tSimple rule with grouping\t1\t-2147483648\t-2147483648\t-2147483648\t@yourresources.dll,-1005\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexHx2xbwZYzAi0oYp4YGWevJQs5eM\tRemotePortExample1\t*\t\t6\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tSimple rule with remote port\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t34560\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexpWUzK53RVnaluW36gSmphPRY8VY\tExampleDHCPScope\tdhcp\t\t211\ttest.exe\t0\t4\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tDHCP scope firewall exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexuanTga5xaaFzr9JsAnUmpCNediw\tICMPExample2\t\t\t2\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tRule with ICMP property\t1\t-2147483648\t-2147483648\t-2147483648\t\t[ICMP_PROP]\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexv60s7u2Dmd1imH5vEFYKPgEWhG4\tinterface nested\t127.0.0.1\t54671\t6\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tInterfaces with nested elements\t1\t-2147483648\t-2147483648\t-2147483648\t\t\tWi-Fi|Local Area Connection\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexVr6uHcOCak5MHuTLwujjh_oKtbI\tGroupingExample2\t\t8732\t6\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tRule with grouping property\t1\t-2147483648\t-2147483648\t-2147483648\t[GROUPING_PROP]\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexwjf4OTFVE9SNiC4goVxBA6ENJBE\tINetFwRule3 values\t*\t\t-2147483648\t\t16\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tSimple INetFwRule3 values\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\tS-1-15-2-1239072475-3687740317-1842961305-3395936705-4023953123-1525404051-2779347315\tO:LSD:(A;;CC;;;S-1-5-84-0-0-0-0-0)\tS-1-5-21-1898747406-2352535518-1247798438-1914\t127.0.0.1\tO:LSD:(A;;CC;;;S-1-5-84-0-0-0-0-0)\t3", + "Wix5FirewallException:ServiceInstall.nested\tExampleNestedService\tLocalSubnet\t3546-7890\t6\t\t1\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tA port-based firewall exception for a windows service\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\tLan,Wireless\t\t\tsvc1\t\t\t\t\t\t-2147483648", }, results); } @@ -38,17 +58,78 @@ public void CanBuildUsingFirewallARM64() var folder = TestData.Get(@"TestData\UsingFirewall"); var build = new Builder(folder, typeof(FirewallExtensionFactory), new[] { folder }); - var results = build.BuildAndQuery(BuildARM64, "Wix4FirewallException", "CustomAction"); + var results = build.BuildAndQuery(BuildARM64, "Wix5FirewallException", "CustomAction"); WixAssert.CompareLineByLine(new[] { - "CustomAction:Wix4ExecFirewallExceptionsInstall_A64\t3073\tWix4FWCA_A64\tExecFirewallExceptions\t", - "CustomAction:Wix4ExecFirewallExceptionsUninstall_A64\t3073\tWix4FWCA_A64\tExecFirewallExceptions\t", - "CustomAction:Wix4RollbackFirewallExceptionsInstall_A64\t3329\tWix4FWCA_A64\tExecFirewallExceptions\t", - "CustomAction:Wix4RollbackFirewallExceptionsUninstall_A64\t3329\tWix4FWCA_A64\tExecFirewallExceptions\t", - "CustomAction:Wix4SchedFirewallExceptionsInstall_A64\t1\tWix4FWCA_A64\tSchedFirewallExceptionsInstall\t", - "CustomAction:Wix4SchedFirewallExceptionsUninstall_A64\t1\tWix4FWCA_A64\tSchedFirewallExceptionsUninstall\t", - "Wix4FirewallException:ExampleFirewall\tExampleApp\t*\t42\t6\t[#filNdJBJmq3UCUIwmXS8x21aAsvqzk]\t0\t2147483647\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tAn app-based firewall exception\t1", - "Wix4FirewallException:fex70IVsYNnbwiHQrEepmdTPKH8XYs\tExamplePort\tLocalSubnet\t42\t6\t\t0\t2147483647\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tA port-based firewall exception\t2", + "CustomAction:Wix5ExecFirewallExceptionsInstall_A64\t3073\tWix5FWCA_A64\tExecFirewallExceptions\t", + "CustomAction:Wix5ExecFirewallExceptionsUninstall_A64\t3073\tWix5FWCA_A64\tExecFirewallExceptions\t", + "CustomAction:Wix5RollbackFirewallExceptionsInstall_A64\t3329\tWix5FWCA_A64\tExecFirewallExceptions\t", + "CustomAction:Wix5RollbackFirewallExceptionsUninstall_A64\t3329\tWix5FWCA_A64\tExecFirewallExceptions\t", + "CustomAction:Wix5SchedFirewallExceptionsInstall_A64\t1\tWix5FWCA_A64\tSchedFirewallExceptionsInstall\t", + "CustomAction:Wix5SchedFirewallExceptionsUninstall_A64\t1\tWix5FWCA_A64\tSchedFirewallExceptionsUninstall\t", + "Wix5FirewallException:ExampleFirewall\tExampleApp\t*\t42\t6\t[#filNdJBJmq3UCUIwmXS8x21aAsvqzk]\t2\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tAn app-based firewall exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fex.BGtyMRGAhxb2hG.49JvWYz7fM0\tLocalScopeExample2\t*\t\t-2147483648\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tRule with local scope property\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t[LOCALSCOPE_PROP]\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fex0HTxATWjpC2PCoY6DB7f2D1WaKU\tLocalScopeExample1\t*\t\t-2147483648\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tSimple rule with local scope\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\tLocalSubnet\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fex4FeP470wYcFpw.g7fbIKiLnZPzg\tExampleDNSScope\tdns\t356\t17\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tDNS scope firewall exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fex4zTcT0Iwu3dUtHIHXD5qfymvpcM\tdefertouser\t\t\t-2147483648\tfw.exe\t8\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tDefer to user edge traversal\t1\t-2147483648\t3\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fex8vMfBplrod4daEz3PqDTeX6olGE\tExampleDefaultGatewayScope\tDefaultGateway\t4432\t6\t\t0\t2\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tdefaultGateway scope firewall exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexAMmHzFDyQmubTOnKS1Cn0Y3q_Ug\tINetFwRule3 properties\t*\t\t-2147483648\t\t16\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tINetFwRule3 passed via properties\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t[PROP1]\t[PROP2]\t[PROP3]\t[PROP4]\t[PROP5]\t[PROP6]", + "Wix5FirewallException:fexArlOkFR7CAwVZ2wk8yNdiREydu0\tRemotePortExample2\t\t\t6\tfw.exe\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tRule with remote port property\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t[REMOTEPORT_PROP]\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexaUTe2tRRcSYrPUTn44DAZhE.40Q\tExamplePort\tLocalSubnet\t42\t6\t\t4\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tA port-based firewall exception\t2\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexD6w20c5HfNi4l1vHFj_eet4cC8I\tExampleWINSScope\twins\t6573\t6\t\t0\t1\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tWINS scope firewall exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexeD3yox6fMflfRy7sDwSN2CMCS2s\tExampleService\t\t12000\t6\t%windir%\\system32\\svchost.exe\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tA port-based service exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\tDHCP,WINS\t\tftpsrv\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexeok6aI2_AlclZggec4d8PBLFXLw\tinterface property\t\t54671\t6\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tInterfaces with property\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t[INTERFACE_PROPERTY]\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexEPvcf4iexD1mVQdvxm7tD02nZEc\tICMPExample1\t\t\t2\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tSimple ICMP rule\t1\t-2147483648\t-2147483648\t-2147483648\t\t4:*,9:*,12:*\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexfzjTQsWwZkHQpObtl0XaUosfcRk\tGroupingExample1\t\t\t-2147483648\tfw.exe\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tSimple rule with grouping\t1\t-2147483648\t-2147483648\t-2147483648\t@yourresources.dll,-1005\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexHx2xbwZYzAi0oYp4YGWevJQs5eM\tRemotePortExample1\t*\t\t6\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tSimple rule with remote port\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t34560\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexpWUzK53RVnaluW36gSmphPRY8VY\tExampleDHCPScope\tdhcp\t\t211\ttest.exe\t0\t4\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tDHCP scope firewall exception\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexuanTga5xaaFzr9JsAnUmpCNediw\tICMPExample2\t\t\t2\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tRule with ICMP property\t1\t-2147483648\t-2147483648\t-2147483648\t\t[ICMP_PROP]\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexv60s7u2Dmd1imH5vEFYKPgEWhG4\tinterface nested\t127.0.0.1\t54671\t6\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tInterfaces with nested elements\t1\t-2147483648\t-2147483648\t-2147483648\t\t\tWi-Fi|Local Area Connection\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexVr6uHcOCak5MHuTLwujjh_oKtbI\tGroupingExample2\t\t8732\t6\t\t0\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tRule with grouping property\t1\t-2147483648\t-2147483648\t-2147483648\t[GROUPING_PROP]\t\t\t\t\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexwjf4OTFVE9SNiC4goVxBA6ENJBE\tINetFwRule3 values\t*\t\t-2147483648\t\t16\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tSimple INetFwRule3 values\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\t\t\t\t\tS-1-15-2-1239072475-3687740317-1842961305-3395936705-4023953123-1525404051-2779347315\tO:LSD:(A;;CC;;;S-1-5-84-0-0-0-0-0)\tS-1-5-21-1898747406-2352535518-1247798438-1914\t127.0.0.1\tO:LSD:(A;;CC;;;S-1-5-84-0-0-0-0-0)\t3", + "Wix5FirewallException:ServiceInstall.nested\tExampleNestedService\tLocalSubnet\t3546-7890\t6\t\t1\t-2147483648\tfilNdJBJmq3UCUIwmXS8x21aAsvqzk\tA port-based firewall exception for a windows service\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t\tLan,Wireless\t\t\tsvc1\t\t\t\t\t\t-2147483648", + }, results); + } + + [Fact] + public void CanBuildWithProperties() + { + var folder = TestData.Get(@"TestData\UsingProperties"); + var build = new Builder(folder, typeof(FirewallExtensionFactory), new[] { folder }); + + var results = build.BuildAndQuery(Build, "Wix5FirewallException", "CustomAction"); + WixAssert.CompareLineByLine(new[] + { + "CustomAction:Wix5ExecFirewallExceptionsInstall_X86\t3073\tWix5FWCA_X86\tExecFirewallExceptions\t", + "CustomAction:Wix5ExecFirewallExceptionsUninstall_X86\t3073\tWix5FWCA_X86\tExecFirewallExceptions\t", + "CustomAction:Wix5RollbackFirewallExceptionsInstall_X86\t3329\tWix5FWCA_X86\tExecFirewallExceptions\t", + "CustomAction:Wix5RollbackFirewallExceptionsUninstall_X86\t3329\tWix5FWCA_X86\tExecFirewallExceptions\t", + "CustomAction:Wix5SchedFirewallExceptionsInstall_X86\t1\tWix5FWCA_X86\tSchedFirewallExceptionsInstall\t", + "CustomAction:Wix5SchedFirewallExceptionsUninstall_X86\t1\tWix5FWCA_X86\tSchedFirewallExceptionsUninstall\t", + "Wix5FirewallException:fexRrE4bS.DwUJQMvzX0ALEsx7jrZs\tSingle Nested properties\t[REMOTEADDRESS]\t\t-2147483648\t\t0\t-2147483648\tFirewallComponent\t\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t[INTERFACE]\t[INTERFACETYPE]\t[LOCALADDRESS]\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexvEy1GfdOjHlKcvsguyqK6mvYKyk\t[NAME]\t[REMOTESCOPE]\t[LOCALPORT]\t[PROTOCOL]\t[PROGRAM]\t16\t[PROFILE]\tFirewallComponent\t[DESCRIPTION]\t1\t[ACTION]\t[EDGETRAVERSAL]\t[ENABLED]\t[GROUPING]\t[ICMPTYPES]\t[INTERFACE]\t[INTERFACETYPE]\t[LOCALSCOPE]\t[REMOTEPORT]\t[SERVICE]\t[PACKAGEID]\t[LOCALUSERS]\t[LOCALOWNER]\t[REMOTEMACHINES]\t[REMOTEUSERS]\t[SECUREFLAGS]", + "Wix5FirewallException:fexWywW3VGiEuG23FOv1YM6h7R6F5Q\tMultiple Nested properties\t[REMOTEADDRESS1],[REMOTEADDRESS2]\t\t-2147483648\t\t0\t-2147483648\tFirewallComponent\t\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t[INTERFACE1]|[INTERFACE2]\t[INTERFACETYPE1],[INTERFACETYPE2]\t[LOCALADDRESS1],[LOCALADDRESS2]\t\t\t\t\t\t\t\t-2147483648", + }, results); + } + + [Fact] + public void CanBuildWithPropertiesUsingFirewallARM64() + { + var folder = TestData.Get(@"TestData\UsingProperties"); + var build = new Builder(folder, typeof(FirewallExtensionFactory), new[] { folder }); + + var results = build.BuildAndQuery(BuildARM64, "Wix5FirewallException", "CustomAction"); + WixAssert.CompareLineByLine(new[] + { + "CustomAction:Wix5ExecFirewallExceptionsInstall_A64\t3073\tWix5FWCA_A64\tExecFirewallExceptions\t", + "CustomAction:Wix5ExecFirewallExceptionsUninstall_A64\t3073\tWix5FWCA_A64\tExecFirewallExceptions\t", + "CustomAction:Wix5RollbackFirewallExceptionsInstall_A64\t3329\tWix5FWCA_A64\tExecFirewallExceptions\t", + "CustomAction:Wix5RollbackFirewallExceptionsUninstall_A64\t3329\tWix5FWCA_A64\tExecFirewallExceptions\t", + "CustomAction:Wix5SchedFirewallExceptionsInstall_A64\t1\tWix5FWCA_A64\tSchedFirewallExceptionsInstall\t", + "CustomAction:Wix5SchedFirewallExceptionsUninstall_A64\t1\tWix5FWCA_A64\tSchedFirewallExceptionsUninstall\t", + "Wix5FirewallException:fexRrE4bS.DwUJQMvzX0ALEsx7jrZs\tSingle Nested properties\t[REMOTEADDRESS]\t\t-2147483648\t\t0\t-2147483648\tFirewallComponent\t\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t[INTERFACE]\t[INTERFACETYPE]\t[LOCALADDRESS]\t\t\t\t\t\t\t\t-2147483648", + "Wix5FirewallException:fexvEy1GfdOjHlKcvsguyqK6mvYKyk\t[NAME]\t[REMOTESCOPE]\t[LOCALPORT]\t[PROTOCOL]\t[PROGRAM]\t16\t[PROFILE]\tFirewallComponent\t[DESCRIPTION]\t1\t[ACTION]\t[EDGETRAVERSAL]\t[ENABLED]\t[GROUPING]\t[ICMPTYPES]\t[INTERFACE]\t[INTERFACETYPE]\t[LOCALSCOPE]\t[REMOTEPORT]\t[SERVICE]\t[PACKAGEID]\t[LOCALUSERS]\t[LOCALOWNER]\t[REMOTEMACHINES]\t[REMOTEUSERS]\t[SECUREFLAGS]", + "Wix5FirewallException:fexWywW3VGiEuG23FOv1YM6h7R6F5Q\tMultiple Nested properties\t[REMOTEADDRESS1],[REMOTEADDRESS2]\t\t-2147483648\t\t0\t-2147483648\tFirewallComponent\t\t1\t-2147483648\t-2147483648\t-2147483648\t\t\t[INTERFACE1]|[INTERFACE2]\t[INTERFACETYPE1],[INTERFACETYPE2]\t[LOCALADDRESS1],[LOCALADDRESS2]\t\t\t\t\t\t\t\t-2147483648", }, results); } @@ -71,8 +152,70 @@ public void CanRoundtripFirewallExceptions() { "FirewallException", "FirewallException", + "FirewallException", + "FirewallException", + "FirewallException", + "FirewallException", + "FirewallException", + "FirewallException", + "LocalAddress", + "LocalAddress", + "FirewallException", + "RemoteAddress", + "Interface", + "Interface", + "FirewallException", + "FirewallException", + "InterfaceType", + "InterfaceType", + "FirewallException", + "FirewallException", + "FirewallException", + "FirewallException", + "FirewallException", + "FirewallException", + "FirewallException", + "FirewallException", + "FirewallException", + "FirewallException", }, actual.Select(a => a.Name).ToArray()); + } + + [Fact] + public void CanRoundtripFirewallExceptionsWithProperties() + { + var folder = TestData.Get(@"TestData", "UsingProperties"); + var build = new Builder(folder, typeof(FirewallExtensionFactory), new[] { folder }); + var output = Path.Combine(folder, "FirewallPropertiesDecompile.xml"); + + build.BuildAndDecompileAndBuild(Build, Decompile, output); + + var doc = XDocument.Load(output); + var actual = doc.Descendants() + .Where(e => e.Name.Namespace == "http://wixtoolset.org/schemas/v4/wxs/firewall") + .Select(fe => new { Name = fe.Name.LocalName, Attributes = fe.Attributes().Select(a => $"{a.Name.LocalName}={a.Value}").ToArray() }) + .ToArray(); + WixAssert.CompareLineByLine(new[] + { + "FirewallException", + "FirewallException", + "FirewallException", + "RemoteAddress", + "RemoteAddress", + "Interface", + "Interface", + "InterfaceType", + "InterfaceType", + "LocalAddress", + "LocalAddress", + }, actual.Select(a => a.Name).ToArray()); + } + + [Fact] + public void RoundtripAttributesAreCorrectForApp() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "ExampleApp"); WixAssert.CompareLineByLine(new[] { "Id=ExampleFirewall", @@ -81,24 +224,400 @@ public void CanRoundtripFirewallExceptions() "Port=42", "Protocol=tcp", "Program=[#filNdJBJmq3UCUIwmXS8x21aAsvqzk]", - "Profile=all", + "OnUpdate=DoNothing", "Description=An app-based firewall exception", - "Outbound=no", "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", - }, actual[0].Attributes); + }, actual.Attributes); + } + [Fact] + public void RoundtripAttributesAreCorrectForPort() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "ExamplePort"); WixAssert.CompareLineByLine(new[] { - "Id=fex70IVsYNnbwiHQrEepmdTPKH8XYs", + "Id=fexaUTe2tRRcSYrPUTn44DAZhE.40Q", "Name=ExamplePort", "Scope=localSubnet", "Port=42", "Protocol=tcp", - "Profile=all", + "OnUpdate=EnableOnly", "Description=A port-based firewall exception", "Outbound=yes", "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", - }, actual[1].Attributes); + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForDNSScope() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "ExampleDNSScope"); + WixAssert.CompareLineByLine(new[] + { + "Id=fex4FeP470wYcFpw.g7fbIKiLnZPzg", + "Name=ExampleDNSScope", + "Scope=DNS", + "Port=356", + "Protocol=udp", + "Description=DNS scope firewall exception", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForDHCPScope() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "ExampleDHCPScope"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexpWUzK53RVnaluW36gSmphPRY8VY", + "Name=ExampleDHCPScope", + "Scope=DHCP", + "Protocol=211", + "Program=test.exe", + "Profile=public", + "Description=DHCP scope firewall exception", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall" + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForWINSScope() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "ExampleWINSScope"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexD6w20c5HfNi4l1vHFj_eet4cC8I", + "Name=ExampleWINSScope", + "Scope=WINS", + "Port=6573", + "Protocol=tcp", + "Profile=domain", + "Description=WINS scope firewall exception", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForDefaultGatewayScope() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "ExampleDefaultGatewayScope"); + WixAssert.CompareLineByLine(new[] + { + "Id=fex8vMfBplrod4daEz3PqDTeX6olGE", + "Name=ExampleDefaultGatewayScope", + "Scope=defaultGateway", + "Port=4432", + "Protocol=tcp", + "Profile=private", + "Description=defaultGateway scope firewall exception", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForINetFwRule3Values() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "INetFwRule3 values"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexwjf4OTFVE9SNiC4goVxBA6ENJBE", + "Name=INetFwRule3 values", + "Scope=any", + "Description=Simple INetFwRule3 values", + "LocalAppPackageId=S-1-15-2-1239072475-3687740317-1842961305-3395936705-4023953123-1525404051-2779347315", + "LocalUserAuthorizedList=O:LSD:(A;;CC;;;S-1-5-84-0-0-0-0-0)", + "LocalUserOwner=S-1-5-21-1898747406-2352535518-1247798438-1914", + "RemoteMachineAuthorizedList=127.0.0.1", + "RemoteUserAuthorizedList=O:LSD:(A;;CC;;;S-1-5-84-0-0-0-0-0)", + "IPSecSecureFlags=NegotiateEncryption", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForINetFwRule3Properties() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "INetFwRule3 properties"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexAMmHzFDyQmubTOnKS1Cn0Y3q_Ug", + "Name=INetFwRule3 properties", + "Scope=any", + "Description=INetFwRule3 passed via properties", + "LocalAppPackageId=[PROP1]", + "LocalUserAuthorizedList=[PROP2]", + "LocalUserOwner=[PROP3]", + "RemoteMachineAuthorizedList=[PROP4]", + "RemoteUserAuthorizedList=[PROP5]", + "IPSecSecureFlags=[PROP6]", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForGroupingValue() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "GroupingExample1"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexfzjTQsWwZkHQpObtl0XaUosfcRk", + "Name=GroupingExample1", + "Program=fw.exe", + "Description=Simple rule with grouping", + "Grouping=@yourresources.dll,-1005", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForGroupingProperty() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "GroupingExample2"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexVr6uHcOCak5MHuTLwujjh_oKtbI", + "Name=GroupingExample2", + "Port=8732", + "Protocol=tcp", + "Description=Rule with grouping property", + "Grouping=[GROUPING_PROP]", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForIcmpValue() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "ICMPExample1"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexEPvcf4iexD1mVQdvxm7tD02nZEc", + "Name=ICMPExample1", + "Protocol=2", + "Description=Simple ICMP rule", + "IcmpTypesAndCodes=4:*,9:*,12:*", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForIcmpProperty() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "ICMPExample2"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexuanTga5xaaFzr9JsAnUmpCNediw", + "Name=ICMPExample2", + "Protocol=2", + "Description=Rule with ICMP property", + "IcmpTypesAndCodes=[ICMP_PROP]", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForLocalScopeValue() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "LocalScopeExample1"); + WixAssert.CompareLineByLine(new[] + { + "Id=fex0HTxATWjpC2PCoY6DB7f2D1WaKU", + "Name=LocalScopeExample1", + "Scope=any", + "Description=Simple rule with local scope", + "LocalScope=localSubnet", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForLocalScopeProperty() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "LocalScopeExample2"); + WixAssert.CompareLineByLine(new[] + { + "Id=fex.BGtyMRGAhxb2hG.49JvWYz7fM0", + "Name=LocalScopeExample2", + "Scope=any", + "Description=Rule with local scope property", + "LocalScope=[LOCALSCOPE_PROP]", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForRemotePorts() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "RemotePortExample1"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexHx2xbwZYzAi0oYp4YGWevJQs5eM", + "Name=RemotePortExample1", + "Scope=any", + "Protocol=tcp", + "Description=Simple rule with remote port", + "RemotePort=34560", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectForRemotePortsProperty() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "RemotePortExample2"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexArlOkFR7CAwVZ2wk8yNdiREydu0", + "Name=RemotePortExample2", + "Protocol=tcp", + "Program=fw.exe", + "Description=Rule with remote port property", + "RemotePort=[REMOTEPORT_PROP]", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall", + }, actual.Attributes); + } + + [Fact] + public void RoundtripAttributesAreCorrectWhenPropertiesAreUsed() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "[NAME]", "UsingProperties"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexvEy1GfdOjHlKcvsguyqK6mvYKyk", + "Name=[NAME]", + "Scope=[REMOTESCOPE]", + "Port=[LOCALPORT]", + "Protocol=[PROTOCOL]", + "Program=[PROGRAM]", + "Profile=[PROFILE]", + "Description=[DESCRIPTION]", + "Action=[ACTION]", + "EdgeTraversal=[EDGETRAVERSAL]", + "Enabled=[ENABLED]", + "Grouping=[GROUPING]", + "IcmpTypesAndCodes=[ICMPTYPES]", + "Interface=[INTERFACE]", + "InterfaceType=[INTERFACETYPE]", + "LocalScope=[LOCALSCOPE]", + "RemotePort=[REMOTEPORT]", + "Service=[SERVICE]", + "LocalAppPackageId=[PACKAGEID]", + "LocalUserAuthorizedList=[LOCALUSERS]", + "LocalUserOwner=[LOCALOWNER]", + "RemoteMachineAuthorizedList=[REMOTEMACHINES]", + "RemoteUserAuthorizedList=[REMOTEUSERS]", + "IPSecSecureFlags=[SECUREFLAGS]", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall" + }, actual.Attributes); + + var folder = TestData.Get(@"TestData", "UsingProperties"); + var build = new Builder(folder, typeof(FirewallExtensionFactory), new[] { folder }); + var output = Path.Combine(folder, $"FirewallNothingNested.xml"); + + build.BuildAndDecompileAndBuild(Build, Decompile, output); + + var doc = XDocument.Load(output); + var related = doc.Descendants() + .Where(e => + { + return e.Name.Namespace == "http://wixtoolset.org/schemas/v4/wxs/firewall" && + e.Parent.Attributes().Any(a => a.Name.LocalName == "Name" && a.Value == "[NAME]"); + }); + + var nested = related.Select(e => e.Attributes().Single(a => a.Name.LocalName == "Name").Value); + Assert.False(nested.Any()); + } + + [Fact] + public void RoundtripAttributesAreCorrectWhenNestedPropertiesAreUsed() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "Single Nested properties", "UsingProperties"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexRrE4bS.DwUJQMvzX0ALEsx7jrZs", + "Name=Single Nested properties", + "Scope=[REMOTEADDRESS]", + "Interface=[INTERFACE]", + "InterfaceType=[INTERFACETYPE]", + "LocalScope=[LOCALADDRESS]", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall" + }, actual.Attributes); + + var folder = TestData.Get(@"TestData", "UsingProperties"); + var build = new Builder(folder, typeof(FirewallExtensionFactory), new[] { folder }); + var output = Path.Combine(folder, $"FirewallSingleNested.xml"); + + build.BuildAndDecompileAndBuild(Build, Decompile, output); + + var doc = XDocument.Load(output); + var related = doc.Descendants() + .Where(e => + { + return e.Name.Namespace == "http://wixtoolset.org/schemas/v4/wxs/firewall" && + e.Parent.Attributes().Any(a => a.Name.LocalName == "Name" && a.Value == "Single Nested properties"); + }); + + var nested = related.Select(e => e.Attributes().Single(a => a.Name.LocalName == "Name").Value); + Assert.False(nested.Any()); + } + + [Fact] + public void RoundtripAttributesAreCorrectWhenMultipleNestedPropertiesAreUsed() + { + var actual = BuildAndDecompileAndBuild("http://wixtoolset.org/schemas/v4/wxs/firewall", "Multiple Nested properties", "UsingProperties"); + WixAssert.CompareLineByLine(new[] + { + "Id=fexWywW3VGiEuG23FOv1YM6h7R6F5Q", + "Name=Multiple Nested properties", + "xmlns=http://wixtoolset.org/schemas/v4/wxs/firewall" + }, actual.Attributes); + + var folder = TestData.Get(@"TestData", "UsingProperties"); + var build = new Builder(folder, typeof(FirewallExtensionFactory), new[] { folder }); + var output = Path.Combine(folder, $"FirewallMultipleNested.xml"); + + build.BuildAndDecompileAndBuild(Build, Decompile, output); + + var doc = XDocument.Load(output); + var related = doc.Descendants() + .Where(e => + { + return e.Name.Namespace == "http://wixtoolset.org/schemas/v4/wxs/firewall" && + e.Parent.Attributes().Any(a => a.Name.LocalName == "Name" && a.Value == "Multiple Nested properties"); + }); + + var interfaces = related.Where(e => e.Name.LocalName == "Interface") + .Select(e => e.Attributes().Single(a => a.Name.LocalName == "Name").Value); + WixAssert.CompareLineByLine(new[] + { + "[INTERFACE1]", + "[INTERFACE2]", + }, interfaces.ToArray()); + + var interfaceTypes = related.Where(e => e.Name.LocalName == "InterfaceType") + .Select(e => e.Attributes().Single(a => a.Name.LocalName == "Value").Value); + WixAssert.CompareLineByLine(new[] + { + "[INTERFACETYPE1]", + "[INTERFACETYPE2]", + }, interfaceTypes.ToArray()); + + var remotes = related.Where(e => e.Name.LocalName == "RemoteAddress") + .Select(e => e.Attributes().Single(a => a.Name.LocalName == "Value").Value); + WixAssert.CompareLineByLine(new[] + { + "[REMOTEADDRESS1]", + "[REMOTEADDRESS2]", + }, remotes.ToArray()); + + var locals = related.Where(e => e.Name.LocalName == "LocalAddress") + .Select(e => e.Attributes().Single(a => a.Name.LocalName == "Value").Value); + WixAssert.CompareLineByLine(new[] + { + "[LOCALADDRESS1]", + "[LOCALADDRESS2]", + }, locals.ToArray()); } private static void Build(string[] args) @@ -122,5 +641,35 @@ private static void Decompile(string[] args) var result = WixRunner.Execute(args); result.AssertSuccess(); } + + class AttributeVerifier + { + public string Name { get; set; } + public string[] Attributes { get; set; } + } + + private static AttributeVerifier BuildAndDecompileAndBuild(string nameSpace, string ruleName, string path = "UsingFirewall") + { + var folder = TestData.Get(@"TestData", path); + var build = new Builder(folder, typeof(FirewallExtensionFactory), new[] { folder }); + var output = Path.Combine(folder, $"Firewall{ruleName}.xml"); + + build.BuildAndDecompileAndBuild(Build, Decompile, output); + + var doc = XDocument.Load(output); + var actual = doc.Descendants() + .Where(e => + { + return e.Name.Namespace == nameSpace && e.Name.LocalName == "FirewallException"; + }) + .Select(fe => new AttributeVerifier + { + Name = fe.Attributes().Single(a => a.Name.LocalName == "Name").Value, + Attributes = fe.Attributes().Select(a => $"{a.Name.LocalName}={a.Value}").ToArray() + }) + .Single(av => av.Name == ruleName); + + return actual; + } } } diff --git a/src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingFirewall/PackageComponents.wxs b/src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingFirewall/PackageComponents.wxs index c712d8959..4bb2e192c 100644 --- a/src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingFirewall/PackageComponents.wxs +++ b/src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingFirewall/PackageComponents.wxs @@ -6,12 +6,51 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ext/DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver/Package.en-us.wxl b/src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties/Package.en-us.wxl similarity index 100% rename from src/ext/DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver/Package.en-us.wxl rename to src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties/Package.en-us.wxl diff --git a/src/ext/DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver/Package.wxs b/src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties/Package.wxs similarity index 85% rename from src/ext/DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver/Package.wxs rename to src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties/Package.wxs index 411893bc1..814becd1d 100644 --- a/src/ext/DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver/Package.wxs +++ b/src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties/Package.wxs @@ -1,5 +1,5 @@  - + diff --git a/src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties/PackageComponents.wxs b/src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties/PackageComponents.wxs new file mode 100644 index 000000000..05c3ea8ae --- /dev/null +++ b/src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties/PackageComponents.wxs @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ext/DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver/example.txt b/src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties/example.txt similarity index 100% rename from src/ext/DifxApp/test/WixToolsetTest.DifxApp/TestData/UsingDriver/example.txt rename to src/ext/Firewall/test/WixToolsetTest.Firewall/TestData/UsingProperties/example.txt diff --git a/src/ext/Firewall/test/WixToolsetTest.Firewall/WixToolsetTest.Firewall.csproj b/src/ext/Firewall/test/WixToolsetTest.Firewall/WixToolsetTest.Firewall.csproj index e46020a62..68acfe528 100644 --- a/src/ext/Firewall/test/WixToolsetTest.Firewall/WixToolsetTest.Firewall.csproj +++ b/src/ext/Firewall/test/WixToolsetTest.Firewall/WixToolsetTest.Firewall.csproj @@ -5,6 +5,8 @@ net6.0 true + false + false diff --git a/src/ext/Firewall/wixext/FirewallCompiler.cs b/src/ext/Firewall/wixext/FirewallCompiler.cs index 19ee0b6dc..c4a5318ca 100644 --- a/src/ext/Firewall/wixext/FirewallCompiler.cs +++ b/src/ext/Firewall/wixext/FirewallCompiler.cs @@ -35,7 +35,7 @@ public override void ParseElement(Intermediate intermediate, IntermediateSection switch (element.Name.LocalName) { case "FirewallException": - this.ParseFirewallExceptionElement(intermediate, section, element, fileComponentId, fileId); + this.ParseFirewallExceptionElement(intermediate, section, parentElement, element, fileComponentId, fileId, null); break; default: this.ParseHelper.UnexpectedElement(parentElement, element); @@ -48,7 +48,35 @@ public override void ParseElement(Intermediate intermediate, IntermediateSection switch (element.Name.LocalName) { case "FirewallException": - this.ParseFirewallExceptionElement(intermediate, section, element, componentId, null); + this.ParseFirewallExceptionElement(intermediate, section, parentElement, element, componentId, null, null); + break; + default: + this.ParseHelper.UnexpectedElement(parentElement, element); + break; + } + break; + case "ServiceConfig": + var serviceConfigName = context["ServiceConfigServiceName"]; + var serviceConfigComponentId = context["ServiceConfigComponentId"]; + + switch (element.Name.LocalName) + { + case "FirewallException": + this.ParseFirewallExceptionElement(intermediate, section, parentElement, element, serviceConfigComponentId, null, serviceConfigName); + break; + default: + this.ParseHelper.UnexpectedElement(parentElement, element); + break; + } + break; + case "ServiceInstall": + var serviceInstallName = context["ServiceInstallName"]; + var serviceInstallComponentId = context["ServiceInstallComponentId"]; + + switch (element.Name.LocalName) + { + case "FirewallException": + this.ParseFirewallExceptionElement(intermediate, section, parentElement, element, serviceInstallComponentId, null, serviceInstallName); break; default: this.ParseHelper.UnexpectedElement(parentElement, element); @@ -64,10 +92,12 @@ public override void ParseElement(Intermediate intermediate, IntermediateSection ///

/// Parses a FirewallException element. /// + /// The parent element of the one being parsed. /// The element to parse. /// Identifier of the component that owns this firewall exception. /// The file identifier of the parent element (null if nested under Component). - private void ParseFirewallExceptionElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, string fileId) + /// The service name of the parent element (null if not nested under ServiceConfig or ServiceInstall). + private void ParseFirewallExceptionElement(Intermediate intermediate, IntermediateSection section, XElement parentElement, XElement element, string componentId, string fileId, string serviceName) { var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); Identifier id = null; @@ -76,12 +106,32 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia string file = null; string program = null; string port = null; - int? protocol = null; - int? profile = null; + string protocol = null; + string profile = null; string scope = null; string remoteAddresses = null; string description = null; int? direction = null; + string protocolValue = null; + string action = null; + string edgeTraversal = null; + string enabled = null; + string grouping = null; + string icmpTypesAndCodes = null; + string interfaces = null; + string interfaceValue = null; + string interfaceTypes = null; + string interfaceTypeValue = null; + string localScope = null; + string localAddresses = null; + string remotePort = null; + string service = null; + string localAppPackageId = null; + string localUserAuthorizedList = null; + string localUserOwner = null; + string remoteMachineAuthorizedList = null; + string remoteUserAuthorizedList = null; + string secureFlags = null; foreach (var attrib in element.Attributes()) { @@ -96,9 +146,9 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); break; case "File": - if (null != fileId) + if (fileId != null) { - this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, element.Name.LocalName, "File", "File")); + this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, element.Name.LocalName, "File", parentElement.Name.LocalName)); } else { @@ -106,15 +156,31 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia } break; case "IgnoreFailure": - if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib)) + if (this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib) == YesNoType.Yes) { attributes |= 0x1; // feaIgnoreFailures } break; + case "OnUpdate": + var onupdate = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + switch (onupdate) + { + case "DoNothing": + attributes |= 0x2; // feaIgnoreUpdates + break; + case "EnableOnly": + attributes |= 0x4; // feaEnableOnUpdate + break; + + default: + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "OnUpdate", onupdate, "EnableOnly", "DoNothing")); + break; + } + break; case "Program": - if (null != fileId) + if (fileId != null) { - this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, element.Name.LocalName, "Program", "File")); + this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, element.Name.LocalName, "Program", parentElement.Name.LocalName)); } else { @@ -125,17 +191,28 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia port = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); break; case "Protocol": - var protocolValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + protocolValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); switch (protocolValue) { + case FirewallConstants.IntegerNotSetString: + break; + case "tcp": - protocol = FirewallConstants.NET_FW_IP_PROTOCOL_TCP; + protocol = FirewallConstants.NET_FW_IP_PROTOCOL_TCP.ToString(); break; case "udp": - protocol = FirewallConstants.NET_FW_IP_PROTOCOL_UDP; + protocol = FirewallConstants.NET_FW_IP_PROTOCOL_UDP.ToString(); break; + default: - this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Protocol", protocolValue, "tcp", "udp")); + protocol = protocolValue; + if (!this.ParseHelper.ContainsProperty(protocolValue)) + { + if (!Int32.TryParse(protocolValue, out var parsedProtocol) || parsedProtocol > 255 || parsedProtocol < 0) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Protocol", protocolValue, "tcp", "udp", "0-255")); + } + } break; } break; @@ -149,8 +226,24 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia case "localSubnet": remoteAddresses = "LocalSubnet"; break; + case "DNS": + remoteAddresses = "dns"; + break; + case "DHCP": + remoteAddresses = "dhcp"; + break; + case "WINS": + remoteAddresses = "wins"; + break; + case "defaultGateway": + remoteAddresses = "DefaultGateway"; + break; default: - this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Scope", scope, "any", "localSubnet")); + remoteAddresses = scope; + if (!this.ParseHelper.ContainsProperty(scope)) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Scope", scope, "any", "localSubnet", "DNS", "DHCP", "WINS", "defaultGateway")); + } break; } break; @@ -159,19 +252,23 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia switch (profileValue) { case "domain": - profile = FirewallConstants.NET_FW_PROFILE2_DOMAIN; + profile = FirewallConstants.NET_FW_PROFILE2_DOMAIN.ToString(); break; case "private": - profile = FirewallConstants.NET_FW_PROFILE2_PRIVATE; + profile = FirewallConstants.NET_FW_PROFILE2_PRIVATE.ToString(); break; case "public": - profile = FirewallConstants.NET_FW_PROFILE2_PUBLIC; + profile = FirewallConstants.NET_FW_PROFILE2_PUBLIC.ToString(); break; case "all": - profile = FirewallConstants.NET_FW_PROFILE2_ALL; + profile = FirewallConstants.NET_FW_PROFILE2_ALL.ToString(); break; default: - this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Profile", profileValue, "domain", "private", "public", "all")); + profile = profileValue; + if (!this.ParseHelper.ContainsProperty(profileValue)) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Profile", profileValue, "domain", "private", "public", "all")); + } break; } break; @@ -183,6 +280,196 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia ? FirewallConstants.NET_FW_RULE_DIR_OUT : FirewallConstants.NET_FW_RULE_DIR_IN; break; + case "Action": + action = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + switch (action) + { + case "Block": + action = "0"; + break; + case "Allow": + action = "1"; + break; + + default: + if (!this.ParseHelper.ContainsProperty(action)) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Action", action, "Allow", "Block")); + } + break; + } + break; + case "EdgeTraversal": + edgeTraversal = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + switch (edgeTraversal) + { + case "Deny": + edgeTraversal = FirewallConstants.NET_FW_EDGE_TRAVERSAL_TYPE_DENY.ToString(); + break; + case "Allow": + edgeTraversal = FirewallConstants.NET_FW_EDGE_TRAVERSAL_TYPE_ALLOW.ToString(); + break; + case "DeferToApp": + attributes |= 0x8; // feaAddINetFwRule2 + edgeTraversal = FirewallConstants.NET_FW_EDGE_TRAVERSAL_TYPE_DEFER_TO_APP.ToString(); + break; + case "DeferToUser": + attributes |= 0x8; // feaAddINetFwRule2 + edgeTraversal = FirewallConstants.NET_FW_EDGE_TRAVERSAL_TYPE_DEFER_TO_USER.ToString(); + break; + + default: + if (!this.ParseHelper.ContainsProperty(edgeTraversal)) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "EdgeTraversal", edgeTraversal, "Allow", "DeferToApp", "DeferToUser", "Deny")); + } + break; + } + break; + case "Enabled": + enabled = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + if (!this.ParseHelper.ContainsProperty(enabled)) + { + switch (this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attrib)) + { + case YesNoType.Yes: + enabled = "1"; + break; + case YesNoType.No: + enabled = "0"; + break; + + default: + this.Messaging.Write(ErrorMessages.IllegalYesNoValue(sourceLineNumbers, element.Name.LocalName, "Enabled", enabled)); + break; + } + } + break; + case "Grouping": + grouping = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + break; + case "IcmpTypesAndCodes": + icmpTypesAndCodes = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + break; + case "Interface": + interfaceValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + interfaces = interfaceValue; + break; + case "InterfaceType": + interfaceTypeValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + switch (interfaceTypeValue) + { + case "RemoteAccess": + case "Wireless": + case "Lan": + case "All": + break; + + default: + if (!this.ParseHelper.ContainsProperty(interfaceTypeValue)) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "InterfaceType", interfaceTypeValue, "RemoteAccess", "Wireless", "Lan", "All")); + } + break; + } + interfaceTypes = interfaceTypeValue; + break; + case "LocalScope": + localScope = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + switch (localScope) + { + case "any": + localAddresses = "*"; + break; + case "localSubnet": + localAddresses = "LocalSubnet"; + break; + case "DNS": + localAddresses = "dns"; + break; + case "DHCP": + localAddresses = "dhcp"; + break; + case "WINS": + localAddresses = "wins"; + break; + case "defaultGateway": + localAddresses = "DefaultGateway"; + break; + + default: + if (!this.ParseHelper.ContainsProperty(localScope)) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "LocalScope", localScope, "any", "localSubnet", "DNS", "DHCP", "WINS", "defaultGateway")); + } + else + { + localAddresses = localScope; + } + break; + } + break; + case "RemotePort": + remotePort = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + break; + case "Service": + if (serviceName != null) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, element.Name.LocalName, "Service", parentElement.Name.LocalName)); + } + else + { + service = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + } + break; + case "LocalAppPackageId": + localAppPackageId = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + attributes |= 0x10; // feaAddINetFwRule3 + break; + case "LocalUserAuthorizedList": + localUserAuthorizedList = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + attributes |= 0x10; // feaAddINetFwRule3 + break; + case "LocalUserOwner": + localUserOwner = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + attributes |= 0x10; // feaAddINetFwRule3 + break; + case "RemoteMachineAuthorizedList": + remoteMachineAuthorizedList = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + attributes |= 0x10; // feaAddINetFwRule3 + break; + case "RemoteUserAuthorizedList": + remoteUserAuthorizedList = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + attributes |= 0x10; // feaAddINetFwRule3 + break; + case "IPSecSecureFlags": + secureFlags = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + attributes |= 0x10; // feaAddINetFwRule3 + if (!this.ParseHelper.ContainsProperty(secureFlags)) + { + switch (secureFlags) + { + case "None": + secureFlags = "0"; + break; + case "NoEncapsulation": + secureFlags = "1"; + break; + case "WithIntegrity": + secureFlags = "2"; + break; + case "NegotiateEncryption": + secureFlags = "3"; + break; + case "Encrypt": + secureFlags = "4"; + break; + default: + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "IPSecSecureFlags", secureFlags, "None", "NoEncapsulation", "WithIntegrity", "NegotiateEncryption", "Encrypt")); + break; + } + } + break; default: this.ParseHelper.UnexpectedAttribute(element, attrib); break; @@ -194,7 +481,7 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia } } - // parse RemoteAddress children + // parse children foreach (var child in element.Elements()) { if (this.Namespace == child.Name.Namespace) @@ -202,7 +489,7 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia switch (child.Name.LocalName) { case "RemoteAddress": - if (null != scope) + if (scope != null) { this.Messaging.Write(FirewallErrors.IllegalRemoteAddressWithScopeAttribute(sourceLineNumbers)); } @@ -211,6 +498,37 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia this.ParseRemoteAddressElement(intermediate, section, child, ref remoteAddresses); } break; + case "Interface": + if (interfaceValue != null) + { + this.Messaging.Write(FirewallErrors.IllegalInterfaceWithInterfaceAttribute(sourceLineNumbers)); + } + else + { + this.ParseInterfaceElement(intermediate, section, child, ref interfaces); + } + break; + case "InterfaceType": + if (interfaceTypeValue != null) + { + this.Messaging.Write(FirewallErrors.IllegalInterfaceTypeWithInterfaceTypeAttribute(sourceLineNumbers)); + } + else + { + this.ParseInterfaceTypeElement(intermediate, section, child, ref interfaceTypes); + } + break; + case "LocalAddress": + if (localScope != null) + { + this.Messaging.Write(FirewallErrors.IllegalLocalAddressWithLocalScopeAttribute(sourceLineNumbers)); + } + else + { + this.ParseLocalAddressElement(intermediate, section, child, ref localAddresses); + } + break; + default: this.ParseHelper.UnexpectedElement(element, child); break; @@ -222,39 +540,84 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia } } - if (null == id) + if (id == null) { - id = this.ParseHelper.CreateIdentifier("fex", name, remoteAddresses, componentId); + // firewall rule names are meant to be unique + id = this.ParseHelper.CreateIdentifier("fex", name, componentId); } // Name is required - if (null == name) + if (name == null) { this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Name")); } - // Scope or child RemoteAddress(es) are required - if (null == remoteAddresses) + if (service == null) { - this.Messaging.Write(ErrorMessages.ExpectedAttributeOrElement(sourceLineNumbers, element.Name.LocalName, "Scope", "RemoteAddress")); + service = serviceName; } // can't have both Program and File - if (null != program && null != file) + if (program != null && file != null) { this.Messaging.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, element.Name.LocalName, "File", "Program")); } - // must be nested under File, have File or Program attributes, or have Port attribute - if (String.IsNullOrEmpty(fileId) && String.IsNullOrEmpty(file) && String.IsNullOrEmpty(program) && String.IsNullOrEmpty(port)) + // Defer to user edge traversal setting can only be used in a firewall rule where program path and TCP/UDP protocol are specified with no additional conditions. + if (edgeTraversal == FirewallConstants.NET_FW_EDGE_TRAVERSAL_TYPE_DEFER_TO_USER.ToString()) { - this.Messaging.Write(FirewallErrors.NoExceptionSpecified(sourceLineNumbers)); + if (protocol != null && !(protocol == FirewallConstants.NET_FW_IP_PROTOCOL_TCP.ToString() || protocol == FirewallConstants.NET_FW_IP_PROTOCOL_UDP.ToString())) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeValueWithLegalList(sourceLineNumbers, element.Name.LocalName, "Protocol", protocolValue, "tcp,udp")); + } + + if (String.IsNullOrEmpty(fileId) && String.IsNullOrEmpty(file) && String.IsNullOrEmpty(program)) + { + this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Program", "EdgeTraversal", "DeferToUser")); + } + + if (port != null) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, element.Name.LocalName, "Port", "EdgeTraversal", "DeferToUser")); + } + + if (remotePort != null) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, element.Name.LocalName, "RemotePort", "EdgeTraversal", "DeferToUser")); + } + + if (localScope != null) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, element.Name.LocalName, "LocalScope", "EdgeTraversal", "DeferToUser")); + } + + if (scope != null) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, element.Name.LocalName, "Scope", "EdgeTraversal", "DeferToUser")); + } + + if (profile != null) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, element.Name.LocalName, "Profile", "EdgeTraversal", "DeferToUser")); + } + + if (service != null) + { + if (serviceName != null) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeValueWhenNested(sourceLineNumbers, element.Name.LocalName, "EdgeTraversal", "DeferToUser", parentElement.Name.LocalName)); + } + else + { + this.Messaging.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, element.Name.LocalName, "Service", "EdgeTraversal", "DeferToUser")); + } + } } if (!this.Messaging.EncounteredError) { // at this point, File attribute and File parent element are treated the same - if (null != file) + if (file != null) { fileId = file; } @@ -263,28 +626,38 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia { Name = name, RemoteAddresses = remoteAddresses, - Profile = profile ?? FirewallConstants.NET_FW_PROFILE2_ALL, ComponentRef = componentId, Description = description, Direction = direction ?? FirewallConstants.NET_FW_RULE_DIR_IN, + Action = action ?? FirewallConstants.IntegerNotSetString, + EdgeTraversal = edgeTraversal ?? FirewallConstants.IntegerNotSetString, + Enabled = enabled ?? FirewallConstants.IntegerNotSetString, + Grouping = grouping, + IcmpTypesAndCodes = icmpTypesAndCodes, + Interfaces = interfaces, + InterfaceTypes = interfaceTypes, + LocalAddresses = localAddresses, + Port = port, + Profile = profile ?? FirewallConstants.IntegerNotSetString, + Protocol = protocol ?? FirewallConstants.IntegerNotSetString, + RemotePort = remotePort, + ServiceName = service, + LocalAppPackageId = localAppPackageId, + LocalUserAuthorizedList = localUserAuthorizedList, + LocalUserOwner = localUserOwner, + RemoteMachineAuthorizedList = remoteMachineAuthorizedList, + RemoteUserAuthorizedList = remoteUserAuthorizedList, + SecureFlags = secureFlags ?? FirewallConstants.IntegerNotSetString, }); - if (!String.IsNullOrEmpty(port)) + if (String.IsNullOrEmpty(protocol)) { - symbol.Port = port; - - if (!protocol.HasValue) + if (!String.IsNullOrEmpty(port) || !String.IsNullOrEmpty(remotePort)) { - // default protocol is "TCP" - protocol = FirewallConstants.NET_FW_IP_PROTOCOL_TCP; + symbol.Protocol = FirewallConstants.NET_FW_IP_PROTOCOL_TCP.ToString(); } } - if (protocol.HasValue) - { - symbol.Protocol = protocol.Value; - } - if (!String.IsNullOrEmpty(fileId)) { symbol.Program = $"[#{fileId}]"; @@ -295,13 +668,13 @@ private void ParseFirewallExceptionElement(Intermediate intermediate, Intermedia symbol.Program = program; } - if (CompilerConstants.IntegerNotSet != attributes) + if (attributes != CompilerConstants.IntegerNotSet) { symbol.Attributes = attributes; } - this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "Wix4SchedFirewallExceptionsInstall", this.Context.Platform, CustomActionPlatforms.ARM64 | CustomActionPlatforms.X64 | CustomActionPlatforms.X86); - this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "Wix4SchedFirewallExceptionsUninstall", this.Context.Platform, CustomActionPlatforms.ARM64 | CustomActionPlatforms.X64 | CustomActionPlatforms.X86); + this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "Wix5SchedFirewallExceptionsInstall", this.Context.Platform, CustomActionPlatforms.ARM64 | CustomActionPlatforms.X64 | CustomActionPlatforms.X86); + this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "Wix5SchedFirewallExceptionsUninstall", this.Context.Platform, CustomActionPlatforms.ARM64 | CustomActionPlatforms.X64 | CustomActionPlatforms.X86); } } @@ -350,5 +723,167 @@ private void ParseRemoteAddressElement(Intermediate intermediate, IntermediateSe } } } + + /// + /// Parses an Interface element + /// + /// The element to parse. + private void ParseInterfaceElement(Intermediate intermediate, IntermediateSection section, XElement element, ref string interfaces) + { + var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); + string name = null; + + // no attributes + foreach (var attrib in element.Attributes()) + { + if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) + { + switch (attrib.Name.LocalName) + { + case "Name": + name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + break; + } + } + else + { + this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib); + } + } + + this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); + + if (String.IsNullOrEmpty(name)) + { + this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Name")); + } + else + { + if (String.IsNullOrEmpty(interfaces)) + { + interfaces = name; + } + else + { + interfaces = String.Concat(interfaces, FirewallConstants.FORBIDDEN_FIREWALL_CHAR, name); + } + } + } + + /// + /// Parses an InterfaceType element + /// + /// The element to parse. + private void ParseInterfaceTypeElement(Intermediate intermediate, IntermediateSection section, XElement element, ref string interfaceTypes) + { + var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); + string value = null; + + // no attributes + foreach (var attrib in element.Attributes()) + { + if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) + { + switch (attrib.Name.LocalName) + { + case "Value": + value = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + break; + } + } + else + { + this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib); + } + } + + this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); + + if (String.IsNullOrEmpty(value)) + { + this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Value")); + } + else + { + switch (value) + { + case "RemoteAccess": + case "Wireless": + case "Lan": + case "All": + break; + + default: + if (!this.ParseHelper.ContainsProperty(value)) + { + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Value", value, "RemoteAccess", "Wireless", "Lan", "All")); + value = null; + } + break; + } + + if (String.IsNullOrEmpty(interfaceTypes)) + { + interfaceTypes = value; + } + else if (interfaceTypes.Contains("All")) + { + if (value != "All") + { + this.Messaging.Write(FirewallErrors.IllegalInterfaceTypeWithInterfaceTypeAll(sourceLineNumbers)); + } + } + else if(!String.IsNullOrEmpty(value)) + { + interfaceTypes = String.Concat(interfaceTypes, ",", value); + } + } + } + + /// + /// Parses a RemoteAddress element + /// + /// The element to parse. + private void ParseLocalAddressElement(Intermediate intermediate, IntermediateSection section, XElement element, ref string localAddresses) + { + var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); + string address = null; + + // no attributes + foreach (var attrib in element.Attributes()) + { + if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) + { + switch (attrib.Name.LocalName) + { + case "Value": + address = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); + break; + } + } + else + { + this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib); + } + } + + this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); + + if (String.IsNullOrEmpty(address)) + { + this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Value")); + } + else + { + if (String.IsNullOrEmpty(localAddresses)) + { + localAddresses = address; + } + else + { + localAddresses = String.Concat(localAddresses, ",", address); + } + } + } } } diff --git a/src/ext/Firewall/wixext/FirewallConstants.cs b/src/ext/Firewall/wixext/FirewallConstants.cs index 5ecfe032e..b7ed8728b 100644 --- a/src/ext/Firewall/wixext/FirewallConstants.cs +++ b/src/ext/Firewall/wixext/FirewallConstants.cs @@ -9,6 +9,11 @@ static class FirewallConstants internal static readonly XNamespace Namespace = "http://wixtoolset.org/schemas/v4/wxs/firewall"; internal static readonly XName FirewallExceptionName = Namespace + "FirewallException"; internal static readonly XName RemoteAddressName = Namespace + "RemoteAddress"; + internal static readonly XName InterfaceName = Namespace + "Interface"; + internal static readonly XName InterfaceTypeName = Namespace + "InterfaceType"; + internal static readonly XName LocalAddressName = Namespace + "LocalAddress"; + + internal const string IntegerNotSetString = "-2147483648"; // from icftypes.h public const int NET_FW_RULE_DIR_IN = 1; @@ -21,5 +26,17 @@ static class FirewallConstants public const int NET_FW_PROFILE2_PRIVATE = 0x0002; public const int NET_FW_PROFILE2_PUBLIC = 0x0004; public const int NET_FW_PROFILE2_ALL = 0x7FFFFFFF; + + // from icftypes.h + public const int NET_FW_EDGE_TRAVERSAL_TYPE_DENY = 0; + public const int NET_FW_EDGE_TRAVERSAL_TYPE_ALLOW = 1; + public const int NET_FW_EDGE_TRAVERSAL_TYPE_DEFER_TO_APP = 2; + public const int NET_FW_EDGE_TRAVERSAL_TYPE_DEFER_TO_USER = 3; + + /// + /// Firewall rules are stored in the registry.
+ /// The pipe character is used to split firewall rule attributes, so is not permitted in any of them. + ///
+ public const char FORBIDDEN_FIREWALL_CHAR = '|'; } } diff --git a/src/ext/Firewall/wixext/FirewallDecompiler.cs b/src/ext/Firewall/wixext/FirewallDecompiler.cs index 69f2c3f4d..7fafab175 100644 --- a/src/ext/Firewall/wixext/FirewallDecompiler.cs +++ b/src/ext/Firewall/wixext/FirewallDecompiler.cs @@ -8,6 +8,8 @@ namespace WixToolset.Firewall using WixToolset.Data; using WixToolset.Data.WindowsInstaller; using WixToolset.Extensibility; + using WixToolset.Extensibility.Data; + using WixToolset.Extensibility.Services; /// /// The decompiler for the WiX Toolset Firewall Extension. @@ -16,6 +18,14 @@ public sealed class FirewallDecompiler : BaseWindowsInstallerDecompilerExtension { public override IReadOnlyCollection TableDefinitions => FirewallTableDefinitions.All; + private IParseHelper ParseHelper { get; set; } + + public override void PreDecompile(IWindowsInstallerDecompileContext context, IWindowsInstallerDecompilerHelper helper) + { + base.PreDecompile(context, helper); + this.ParseHelper = context.ServiceProvider.GetService(); + } + /// /// Called at the beginning of the decompilation of a database. /// @@ -32,7 +42,9 @@ public override bool TryDecompileTable(Table table) { switch (table.Name) { + case "WixFirewallException": case "Wix4FirewallException": + case "Wix5FirewallException": this.DecompileWixFirewallExceptionTable(table); break; default: @@ -57,7 +69,7 @@ public override void PostDecompileTables(TableIndexedCollection tables) /// The table to decompile. private void DecompileWixFirewallExceptionTable(Table table) { - foreach (Row row in table.Rows) + foreach (var row in table.Rows) { var firewallException = new XElement(FirewallConstants.FirewallExceptionName, new XAttribute("Id", row.FieldAsString(0)), @@ -69,23 +81,41 @@ private void DecompileWixFirewallExceptionTable(Table table) string[] addresses = ((string)row[2]).Split(','); if (addresses.Length == 1) { - // special-case the Scope attribute values - if (addresses[0] == "*") - { - firewallException.Add(new XAttribute("Scope", "any")); - } - else if (addresses[0] == "LocalSubnet") - { - firewallException.Add(new XAttribute("Scope", "localSubnet")); - } - else + switch(addresses[0]) { - FirewallDecompiler.AddRemoteAddress(firewallException, addresses[0]); + case "*": + firewallException.Add(new XAttribute("Scope", "any")); + break; + case "LocalSubnet": + firewallException.Add(new XAttribute("Scope", "localSubnet")); + break; + case "dns": + firewallException.Add(new XAttribute("Scope", "DNS")); + break; + case "dhcp": + firewallException.Add(new XAttribute("Scope", "DHCP")); + break; + case "wins": + firewallException.Add(new XAttribute("Scope", "WINS")); + break; + case "DefaultGateway": + firewallException.Add(new XAttribute("Scope", "defaultGateway")); + break; + default: + if (this.ParseHelper.ContainsProperty(addresses[0])) + { + firewallException.Add(new XAttribute("Scope", addresses[0])); + } + else + { + FirewallDecompiler.AddRemoteAddress(firewallException, addresses[0]); + } + break; } } else { - foreach (string address in addresses) + foreach (var address in addresses) { FirewallDecompiler.AddRemoteAddress(firewallException, address); } @@ -99,14 +129,20 @@ private void DecompileWixFirewallExceptionTable(Table table) if (!row.IsColumnEmpty(4)) { - switch (Convert.ToInt32(row[4])) + switch (row.FieldAsString(4)) { - case FirewallConstants.NET_FW_IP_PROTOCOL_TCP: + case FirewallConstants.IntegerNotSetString: + break; + case "6": firewallException.Add(new XAttribute("Protocol", "tcp")); break; - case FirewallConstants.NET_FW_IP_PROTOCOL_UDP: + case "17": firewallException.Add(new XAttribute("Protocol", "udp")); break; + + default: + firewallException.Add(new XAttribute("Protocol", row.FieldAsString(4))); + break; } } @@ -117,26 +153,44 @@ private void DecompileWixFirewallExceptionTable(Table table) if (!row.IsColumnEmpty(6)) { - var attr = Convert.ToInt32(row[6]); - AttributeIfNotNull("IgnoreFailure", (attr & 0x1) == 0x1); + var attr = row.FieldAsInteger(6); + if ((attr & 0x1) == 0x1) + { + AttributeIfNotNull("IgnoreFailure", true); + } + + if ((attr & 0x2) == 0x2) + { + firewallException.Add(new XAttribute("OnUpdate", "DoNothing")); + } + else if ((attr & 0x4) == 0x4) + { + firewallException.Add(new XAttribute("OnUpdate", "EnableOnly")); + } } if (!row.IsColumnEmpty(7)) { - switch (Convert.ToInt32(row[7])) + switch (row.FieldAsString(7)) { - case FirewallConstants.NET_FW_PROFILE2_DOMAIN: + case FirewallConstants.IntegerNotSetString: + break; + case "1": firewallException.Add(new XAttribute("Profile", "domain")); break; - case FirewallConstants.NET_FW_PROFILE2_PRIVATE: + case "2": firewallException.Add(new XAttribute("Profile", "private")); break; - case FirewallConstants.NET_FW_PROFILE2_PUBLIC: + case "4": firewallException.Add(new XAttribute("Profile", "public")); break; - case FirewallConstants.NET_FW_PROFILE2_ALL: + case "2147483647": firewallException.Add(new XAttribute("Profile", "all")); break; + + default: + firewallException.Add(new XAttribute("Profile", row.FieldAsString(7))); + break; } } @@ -150,8 +204,6 @@ private void DecompileWixFirewallExceptionTable(Table table) switch (Convert.ToInt32(row[10])) { case FirewallConstants.NET_FW_RULE_DIR_IN: - - firewallException.Add(AttributeIfNotNull("Outbound", false)); break; case FirewallConstants.NET_FW_RULE_DIR_OUT: firewallException.Add(AttributeIfNotNull("Outbound", true)); @@ -159,6 +211,224 @@ private void DecompileWixFirewallExceptionTable(Table table) } } + // Introduced in 5.0.0 + if (row.Fields.Length > 11) + { + if (!row.IsColumnEmpty(11)) + { + var action = row.FieldAsString(11); + switch (action) + { + case FirewallConstants.IntegerNotSetString: + break; + case "1": + firewallException.Add(new XAttribute("Action", "Allow")); + break; + case "0": + firewallException.Add(new XAttribute("Action", "Block")); + break; + default: + firewallException.Add(new XAttribute("Action", action)); + break; + } + } + + if (!row.IsColumnEmpty(12)) + { + var edgeTraversal = row.FieldAsString(12); + switch (edgeTraversal) + { + case FirewallConstants.IntegerNotSetString: + break; + case "0": + firewallException.Add(new XAttribute("EdgeTraversal", "Deny")); + break; + case "1": + firewallException.Add(new XAttribute("EdgeTraversal", "Allow")); + break; + case "2": + firewallException.Add(new XAttribute("EdgeTraversal", "DeferToApp")); + break; + case "3": + firewallException.Add(new XAttribute("EdgeTraversal", "DeferToUser")); + break; + default: + firewallException.Add(new XAttribute("EdgeTraversal", edgeTraversal)); + break; + } + } + + if (!row.IsColumnEmpty(13)) + { + var enabled = row.FieldAsString(13); + switch (enabled) + { + case FirewallConstants.IntegerNotSetString: + break; + case "1": + firewallException.Add(new XAttribute("Enabled", "yes")); + break; + case "0": + firewallException.Add(new XAttribute("Enabled", "no")); + break; + default: + firewallException.Add(new XAttribute("Enabled", enabled)); + break; + } + } + + if (!row.IsColumnEmpty(14)) + { + firewallException.Add(new XAttribute("Grouping", row.FieldAsString(14))); + } + + if (!row.IsColumnEmpty(15)) + { + firewallException.Add(new XAttribute("IcmpTypesAndCodes", row.FieldAsString(15))); + } + + if (!row.IsColumnEmpty(16)) + { + string[] interfaces = row.FieldAsString(16).Split(new[] { FirewallConstants.FORBIDDEN_FIREWALL_CHAR }, StringSplitOptions.RemoveEmptyEntries); + if (interfaces.Length == 1) + { + firewallException.Add(new XAttribute("Interface", interfaces[0])); + } + else + { + foreach (var interfaceItem in interfaces) + { + FirewallDecompiler.AddInterface(firewallException, interfaceItem); + } + } + } + + if (!row.IsColumnEmpty(17)) + { + string[] interfaceTypes = row.FieldAsString(17).Split(','); + if (interfaceTypes.Length == 1) + { + firewallException.Add(new XAttribute("InterfaceType", interfaceTypes[0])); + } + else + { + foreach (var interfaceType in interfaceTypes) + { + FirewallDecompiler.AddInterfaceType(firewallException, interfaceType); + } + } + } + + if (!row.IsColumnEmpty(18)) + { + string[] addresses = row.FieldAsString(18).Split(','); + if (addresses.Length == 1) + { + switch (addresses[0]) + { + case "*": + firewallException.Add(new XAttribute("LocalScope", "any")); + break; + case "LocalSubnet": + firewallException.Add(new XAttribute("LocalScope", "localSubnet")); + break; + case "dns": + firewallException.Add(new XAttribute("LocalScope", "DNS")); + break; + case "dhcp": + firewallException.Add(new XAttribute("LocalScope", "DHCP")); + break; + case "wins": + firewallException.Add(new XAttribute("LocalScope", "WINS")); + break; + case "DefaultGateway": + firewallException.Add(new XAttribute("LocalScope", "defaultGateway")); + break; + default: + if (this.ParseHelper.ContainsProperty(addresses[0])) + { + firewallException.Add(new XAttribute("LocalScope", addresses[0])); + } + else + { + FirewallDecompiler.AddLocalAddress(firewallException, addresses[0]); + } + break; + } + } + else + { + foreach (var address in addresses) + { + FirewallDecompiler.AddLocalAddress(firewallException, address); + } + } + } + + if (!row.IsColumnEmpty(19)) + { + firewallException.Add(new XAttribute("RemotePort", row.FieldAsString(19))); + } + + if (!row.IsColumnEmpty(20)) + { + firewallException.Add(new XAttribute("Service", row.FieldAsString(20))); + } + + if (!row.IsColumnEmpty(21)) + { + firewallException.Add(new XAttribute("LocalAppPackageId", row.FieldAsString(21))); + } + + if (!row.IsColumnEmpty(22)) + { + firewallException.Add(new XAttribute("LocalUserAuthorizedList", row.FieldAsString(22))); + } + + if (!row.IsColumnEmpty(23)) + { + firewallException.Add(new XAttribute("LocalUserOwner", row.FieldAsString(23))); + } + + if (!row.IsColumnEmpty(24)) + { + firewallException.Add(new XAttribute("RemoteMachineAuthorizedList", row.FieldAsString(24))); + } + + if (!row.IsColumnEmpty(25)) + { + firewallException.Add(new XAttribute("RemoteUserAuthorizedList", row.FieldAsString(25))); + } + + if (!row.IsColumnEmpty(26)) + { + var secureFlags = row.FieldAsString(26); + switch (secureFlags) + { + case FirewallConstants.IntegerNotSetString: + break; + case "0": + firewallException.Add(new XAttribute("IPSecSecureFlags", "None")); + break; + case "1": + firewallException.Add(new XAttribute("IPSecSecureFlags", "NoEncapsulation")); + break; + case "2": + firewallException.Add(new XAttribute("IPSecSecureFlags", "WithIntegrity")); + break; + case "3": + firewallException.Add(new XAttribute("IPSecSecureFlags", "NegotiateEncryption")); + break; + case "4": + firewallException.Add(new XAttribute("IPSecSecureFlags", "Encrypt")); + break; + default: + firewallException.Add(new XAttribute("IPSecSecureFlags", secureFlags)); + break; + } + } + } + this.DecompilerHelper.IndexElement(row, firewallException); } } @@ -169,7 +439,34 @@ private static void AddRemoteAddress(XElement firewallException, string address) new XAttribute("Value", address) ); - firewallException.AddAfterSelf(remoteAddress); + firewallException.Add(remoteAddress); + } + + private static void AddInterfaceType(XElement firewallException, string type) + { + var interfaceType = new XElement(FirewallConstants.InterfaceTypeName, + new XAttribute("Value", type) + ); + + firewallException.Add(interfaceType); + } + + private static void AddLocalAddress(XElement firewallException, string address) + { + var localAddress = new XElement(FirewallConstants.LocalAddressName, + new XAttribute("Value", address) + ); + + firewallException.Add(localAddress); + } + + private static void AddInterface(XElement firewallException, string value) + { + var interfaceName = new XElement(FirewallConstants.InterfaceName, + new XAttribute("Name", value) + ); + + firewallException.Add(interfaceName); } private static XAttribute AttributeIfNotNull(string name, bool value) @@ -183,7 +480,7 @@ private static XAttribute AttributeIfNotNull(string name, bool value) /// Collection of all tables. private void FinalizeFirewallExceptionTable(TableIndexedCollection tables) { - if (tables.TryGetTable("Wix4FirewallException", out var firewallExceptionTable)) + if (tables.TryGetTable("Wix5FirewallException", out var firewallExceptionTable)) { foreach (var row in firewallExceptionTable.Rows) { diff --git a/src/ext/Firewall/wixext/FirewallErrors.cs b/src/ext/Firewall/wixext/FirewallErrors.cs index b2dac782a..523398e5d 100644 --- a/src/ext/Firewall/wixext/FirewallErrors.cs +++ b/src/ext/Firewall/wixext/FirewallErrors.cs @@ -12,11 +12,6 @@ public static Message IllegalRemoteAddressWithScopeAttribute(SourceLineNumber so return Message(sourceLineNumbers, Ids.IllegalRemoteAddressWithScopeAttribute, "The RemoteAddress element cannot be specified because its parent FirewallException already specified the Scope attribute. To use RemoteAddress elements, omit the Scope attribute."); } - public static Message NoExceptionSpecified(SourceLineNumber sourceLineNumbers) - { - return Message(sourceLineNumbers, Ids.NoExceptionSpecified, "The FirewallException element doesn't identify the target of the firewall exception. To create an application exception, nest the FirewallException element under a File element or provide a value for the File or Program attributes. To create a port exception, provide a value for the Port attribute."); - } - private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args) { return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args); @@ -27,10 +22,32 @@ private static Message Message(SourceLineNumber sourceLineNumber, Ids id, Resour return new Message(sourceLineNumber, MessageLevel.Error, (int)id, resourceManager, resourceName, args); } + public static Message IllegalInterfaceWithInterfaceAttribute(SourceLineNumber sourceLineNumbers) + { + return Message(sourceLineNumbers, Ids.IllegalInterfaceWithInterfaceAttribute, "The Interface element cannot be specified because its parent FirewallException already specified the Interface attribute. To use Interface elements, omit the Interface attribute."); + } + + public static Message IllegalInterfaceTypeWithInterfaceTypeAttribute(SourceLineNumber sourceLineNumbers) + { + return Message(sourceLineNumbers, Ids.IllegalInterfaceTypeWithInterfaceTypeAttribute, "The InterfaceType element cannot be specified because its parent FirewallException already specified the InterfaceType attribute. To use InterfaceType elements, omit the InterfaceType attribute."); + } + + public static Message IllegalInterfaceTypeWithInterfaceTypeAll(SourceLineNumber sourceLineNumbers) + { + return Message(sourceLineNumbers, Ids.IllegalInterfaceTypeWithInterfaceTypeAll, "The InterfaceType element cannot be specified because its parent FirewallException contains another InterfaceType element with value 'All'."); + } + public static Message IllegalLocalAddressWithLocalScopeAttribute(SourceLineNumber sourceLineNumbers) + { + return Message(sourceLineNumbers, Ids.IllegalLocalAddressWithLocalScopeAttribute, "The LocalAddress element cannot be specified because its parent FirewallException already specified the LocalScope attribute. To use LocalAddress elements, omit the LocalScope attribute."); + } + public enum Ids { IllegalRemoteAddressWithScopeAttribute = 6401, - NoExceptionSpecified = 6403, + IllegalInterfaceWithInterfaceAttribute = 6402, + IllegalInterfaceTypeWithInterfaceTypeAttribute = 6404, + IllegalInterfaceTypeWithInterfaceTypeAll = 6405, + IllegalLocalAddressWithLocalScopeAttribute = 6406, } } } diff --git a/src/ext/Firewall/wixext/FirewallTableDefinitions.cs b/src/ext/Firewall/wixext/FirewallTableDefinitions.cs index 04918f5f0..7a35bb594 100644 --- a/src/ext/Firewall/wixext/FirewallTableDefinitions.cs +++ b/src/ext/Firewall/wixext/FirewallTableDefinitions.cs @@ -7,21 +7,37 @@ namespace WixToolset.Firewall public static class FirewallTableDefinitions { public static readonly TableDefinition WixFirewallException = new TableDefinition( - "Wix4FirewallException", + "Wix5FirewallException", FirewallSymbolDefinitions.WixFirewallException, new[] { - new ColumnDefinition("Wix4FirewallException", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The primary key, a non-localized token.", modularizeType: ColumnModularizeType.Column), + new ColumnDefinition("Wix5FirewallException", ColumnType.String, 72, primaryKey: true, nullable: false, ColumnCategory.Identifier, description: "The primary key, a non-localized token.", modularizeType: ColumnModularizeType.Column), new ColumnDefinition("Name", ColumnType.Localized, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Localizable display name.", modularizeType: ColumnModularizeType.Property), - new ColumnDefinition("RemoteAddresses", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Formatted, description: "Remote address to accept incoming connections from.", modularizeType: ColumnModularizeType.Property), - new ColumnDefinition("Port", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, minValue: 1, description: "Port number.", modularizeType: ColumnModularizeType.Property), - new ColumnDefinition("Protocol", ColumnType.Number, 1, primaryKey: false, nullable: true, ColumnCategory.Integer, minValue: 6, maxValue: 17, description: "Protocol (6=TCP; 17=UDP)."), + new ColumnDefinition("RemoteAddresses", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Remote address to accept incoming connections from.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("Port", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, minValue: 1, maxValue: 65535, description: "Local Port number.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("Protocol", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, minValue: 0, maxValue: 255, description: "Protocol (6=TCP; 17=UDP). https://www.iana.org/assignments/protocol-numbers", modularizeType: ColumnModularizeType.Property), new ColumnDefinition("Program", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Exception for a program (formatted path name).", modularizeType: ColumnModularizeType.Property), - new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Vital=1"), - new ColumnDefinition("Profile", ColumnType.Number, 4, primaryKey: false, nullable: false, ColumnCategory.Integer, minValue: 1, maxValue: 2147483647, description: "Profile (1=domain; 2=private; 4=public; 2147483647=all)."), + new ColumnDefinition("Attributes", ColumnType.Number, 4, primaryKey: false, nullable: true, ColumnCategory.Unknown, description: "Vital=1; IgnoreUpdates=2; EnableOnChange=4; INetFwRule2=8; INetFwRule3=16"), + new ColumnDefinition("Profile", ColumnType.String, 4, primaryKey: false, nullable: true, ColumnCategory.Formatted, minValue: 1, maxValue: 2147483647, description: "Profile (1=domain; 2=private; 4=public; 2147483647=all).", modularizeType: ColumnModularizeType.Property), new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into the Component table referencing component that controls the firewall configuration.", modularizeType: ColumnModularizeType.Column), new ColumnDefinition("Description", ColumnType.String, 255, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Description displayed in Windows Firewall manager for this firewall rule."), - new ColumnDefinition("Direction", ColumnType.Number, 1, primaryKey: false, nullable: true, ColumnCategory.Integer, minValue: 1, maxValue: 2, description: "Direction (1=in; 2=out)"), + new ColumnDefinition("Direction", ColumnType.Number, 1, primaryKey: false, nullable: false, ColumnCategory.Integer, minValue: 1, maxValue: 2, description: "Direction (1=in; 2=out)"), + new ColumnDefinition("Action", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, minValue: 0, maxValue: 1, description: "Action (0=Block; 1=Allow).", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("EdgeTraversal", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, minValue: 0, maxValue: 3, description: "Edge traversal (0=Deny; 1=Allow; 2=DeferToApp; 3=DeferToUser).", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("Enabled", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, minValue: 0, maxValue: 1, description: "Enabled (0=Disabled; 1=Enabled).", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("Grouping", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "The group to which the rule belongs.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("IcmpTypesAndCodes", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Comma separated list of ICMP types and codes separated by colons.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("Interfaces", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "A list of network interfaces separated by a pipe character.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("InterfaceTypes", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Comma separated list of interface types (combination of Wireless,Lan,RemoteAccess or All).", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("LocalAddresses", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Local address to accept incoming connections on.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("RemotePort", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, minValue: 1, maxValue: 65535, description: "Remote Port number.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("ServiceName", ColumnType.String, 256, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Windows Service short name.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("LocalAppPackageId", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "Package identifier or the app container identifier of a process.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("LocalUserAuthorizedList", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "List of authorized local users for an app container.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("LocalUserOwner", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "SID of the user who is the owner of the rule.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("RemoteMachineAuthorizedList", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "List of remote computers which are authorized to access an app container.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("RemoteUserAuthorizedList", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, description: "List of remote users who are authorized to access an app container.", modularizeType: ColumnModularizeType.Property), + new ColumnDefinition("SecureFlags", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Formatted, minValue: 0, maxValue: 1, description: "NET_FW_AUTHENTICATE_TYPE IPsec verification level.", modularizeType: ColumnModularizeType.Property), }, symbolIdIsPrimaryKey: true ); diff --git a/src/ext/Firewall/wixext/Symbols/WixFirewallExceptionSymbol.cs b/src/ext/Firewall/wixext/Symbols/WixFirewallExceptionSymbol.cs index 620de9693..d6a542558 100644 --- a/src/ext/Firewall/wixext/Symbols/WixFirewallExceptionSymbol.cs +++ b/src/ext/Firewall/wixext/Symbols/WixFirewallExceptionSymbol.cs @@ -14,13 +14,29 @@ public static partial class FirewallSymbolDefinitions new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Name), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.RemoteAddresses), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Port), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Protocol), IntermediateFieldType.Number), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Protocol), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Program), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Attributes), IntermediateFieldType.Number), - new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Profile), IntermediateFieldType.Number), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Profile), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.ComponentRef), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Description), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Direction), IntermediateFieldType.Number), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Action), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.EdgeTraversal), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Enabled), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Grouping), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.IcmpTypesAndCodes), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.Interfaces), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.InterfaceTypes), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.LocalAddresses), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.RemotePort), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.ServiceName), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.LocalAppPackageId), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.LocalUserAuthorizedList), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.LocalUserOwner), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.RemoteMachineAuthorizedList), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.RemoteUserAuthorizedList), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixFirewallExceptionSymbolFields.SecureFlags), IntermediateFieldType.String), }, typeof(WixFirewallExceptionSymbol)); } @@ -42,6 +58,22 @@ public enum WixFirewallExceptionSymbolFields ComponentRef, Description, Direction, + Action, + EdgeTraversal, + Enabled, + Grouping, + IcmpTypesAndCodes, + Interfaces, + InterfaceTypes, + LocalAddresses, + RemotePort, + ServiceName, + LocalAppPackageId, + LocalUserAuthorizedList, + LocalUserOwner, + RemoteMachineAuthorizedList, + RemoteUserAuthorizedList, + SecureFlags, } public class WixFirewallExceptionSymbol : IntermediateSymbol @@ -74,9 +106,9 @@ public string Port set => this.Set((int)WixFirewallExceptionSymbolFields.Port, value); } - public int? Protocol + public string Protocol { - get => this.Fields[(int)WixFirewallExceptionSymbolFields.Protocol].AsNullableNumber(); + get => this.Fields[(int)WixFirewallExceptionSymbolFields.Protocol].AsString(); set => this.Set((int)WixFirewallExceptionSymbolFields.Protocol, value); } @@ -92,9 +124,9 @@ public int Attributes set => this.Set((int)WixFirewallExceptionSymbolFields.Attributes, value); } - public int Profile + public string Profile { - get => this.Fields[(int)WixFirewallExceptionSymbolFields.Profile].AsNumber(); + get => this.Fields[(int)WixFirewallExceptionSymbolFields.Profile].AsString(); set => this.Set((int)WixFirewallExceptionSymbolFields.Profile, value); } @@ -115,5 +147,101 @@ public int Direction get => this.Fields[(int)WixFirewallExceptionSymbolFields.Direction].AsNumber(); set => this.Set((int)WixFirewallExceptionSymbolFields.Direction, value); } + + public string Action + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.Action].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.Action, value); + } + + public string EdgeTraversal + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.EdgeTraversal].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.EdgeTraversal, value); + } + + public string Enabled + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.Enabled].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.Enabled, value); + } + + public string Grouping + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.Grouping].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.Grouping, value); + } + + public string IcmpTypesAndCodes + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.IcmpTypesAndCodes].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.IcmpTypesAndCodes, value); + } + + public string Interfaces + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.Interfaces].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.Interfaces, value); + } + + public string InterfaceTypes + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.InterfaceTypes].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.InterfaceTypes, value); + } + + public string LocalAddresses + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.LocalAddresses].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.LocalAddresses, value); + } + + public string RemotePort + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.RemotePort].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.RemotePort, value); + } + + public string ServiceName + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.ServiceName].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.ServiceName, value); + } + + public string LocalAppPackageId + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.LocalAppPackageId].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.LocalAppPackageId, value); + } + + public string LocalUserAuthorizedList + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.LocalUserAuthorizedList].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.LocalUserAuthorizedList, value); + } + + public string LocalUserOwner + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.LocalUserOwner].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.LocalUserOwner, value); + } + + public string RemoteMachineAuthorizedList + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.RemoteMachineAuthorizedList].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.RemoteMachineAuthorizedList, value); + } + + public string RemoteUserAuthorizedList + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.RemoteUserAuthorizedList].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.RemoteUserAuthorizedList, value); + } + + public string SecureFlags + { + get => this.Fields[(int)WixFirewallExceptionSymbolFields.SecureFlags].AsString(); + set => this.Set((int)WixFirewallExceptionSymbolFields.SecureFlags, value); + } } -} \ No newline at end of file +} diff --git a/src/ext/Firewall/wixext/WixToolset.Firewall.wixext.csproj b/src/ext/Firewall/wixext/WixToolset.Firewall.wixext.csproj index 8d1dc77e5..098b121cd 100644 --- a/src/ext/Firewall/wixext/WixToolset.Firewall.wixext.csproj +++ b/src/ext/Firewall/wixext/WixToolset.Firewall.wixext.csproj @@ -5,9 +5,11 @@ netstandard2.0 WixToolset.Firewall - WiX Toolset Firewallity Extension + WiX Toolset Firewall Extension WiX Toolset Firewall Extension embedded + false + false diff --git a/src/ext/Firewall/wixlib/FirewallExtension_Platform.wxi b/src/ext/Firewall/wixlib/FirewallExtension_Platform.wxi index ae02bcd0b..736a54b08 100644 --- a/src/ext/Firewall/wixlib/FirewallExtension_Platform.wxi +++ b/src/ext/Firewall/wixlib/FirewallExtension_Platform.wxi @@ -6,32 +6,32 @@ - - - - - - + + + + + + - - - - - - + + + + + + - - + + - + diff --git a/src/ext/Util/wixext/UtilCompiler.cs b/src/ext/Util/wixext/UtilCompiler.cs index 5fefed916..f7bb0614d 100644 --- a/src/ext/Util/wixext/UtilCompiler.cs +++ b/src/ext/Util/wixext/UtilCompiler.cs @@ -3123,8 +3123,14 @@ private void ParseServiceConfigElement(Intermediate intermediate, IntermediateSe // if this element is a child of ServiceInstall then ignore the service name provided. if ("ServiceInstall" == parentTableName) { - // TODO: the ServiceName attribute should not be allowed in this case (the overwriting behavior may confuse users) - serviceName = parentTableServiceName; + if (null == serviceName || parentTableServiceName == serviceName) + { + serviceName = parentTableServiceName; + } + else + { + this.Messaging.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, element.Name.LocalName, "ServiceName", parentTableName)); + } newService = true; } else @@ -3136,7 +3142,8 @@ private void ParseServiceConfigElement(Intermediate intermediate, IntermediateSe } } - this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); + var context = new Dictionary() { { "ServiceConfigComponentId", componentId }, { "ServiceConfigServiceName", serviceName } }; + this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element, context); if (!this.Messaging.EncounteredError) { diff --git a/src/ext/caDecor.h b/src/ext/caDecor.h index da274650f..060032cf8 100644 --- a/src/ext/caDecor.h +++ b/src/ext/caDecor.h @@ -11,3 +11,13 @@ #else #define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_X86" #endif + +#if defined(_M_ARM64) +#define CUSTOM_ACTION_DECORATION5(f) L"Wix5" f L"_A64" +#elif defined(_M_AMD64) +#define CUSTOM_ACTION_DECORATION5(f) L"Wix5" f L"_X64" +#elif defined(_M_ARM) +#define CUSTOM_ACTION_DECORATION5(f) L"Wix5" f L"_ARM" +#else +#define CUSTOM_ACTION_DECORATION5(f) L"Wix5" f L"_X86" +#endif diff --git a/src/ext/caDecor.wxi b/src/ext/caDecor.wxi index b17115183..256d7586b 100644 --- a/src/ext/caDecor.wxi +++ b/src/ext/caDecor.wxi @@ -8,6 +8,12 @@ + + + + + + diff --git a/src/ext/ext.cmd b/src/ext/ext.cmd index 0429f5426..8575b81e0 100644 --- a/src/ext/ext.cmd +++ b/src/ext/ext.cmd @@ -28,9 +28,6 @@ call ComPlus\complus.cmd %_C% || exit /b :: Dependency call Dependency\dependency.cmd %_C% || exit /b -:: DifxApp -call DifxApp\difxapp.cmd %_C% || exit /b - :: DirectX call DirectX\directx.cmd %_C% || exit /b diff --git a/src/internal/SetBuildNumber/Directory.Packages.props.pp b/src/internal/SetBuildNumber/Directory.Packages.props.pp index d53caac49..fa78e92c6 100644 --- a/src/internal/SetBuildNumber/Directory.Packages.props.pp +++ b/src/internal/SetBuildNumber/Directory.Packages.props.pp @@ -47,6 +47,7 @@ + @@ -69,9 +70,9 @@ - - - + + + + + + 1055;1056 + + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/Module401.msm b/src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/Module401.msm new file mode 100644 index 0000000000000000000000000000000000000000..4dd5bd09872d629b4ccdee9ab67849f2890cf516 GIT binary patch literal 192512 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

_xPn8 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 a$P~l^p + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/DynamicFirewallRules/DynamicFirewallRules.wixproj b/src/test/msi/TestData/FirewallExtensionTests/DynamicFirewallRules/DynamicFirewallRules.wixproj index b39f73875..357382f52 100644 --- a/src/test/msi/TestData/FirewallExtensionTests/DynamicFirewallRules/DynamicFirewallRules.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/DynamicFirewallRules/DynamicFirewallRules.wixproj @@ -1,5 +1,5 @@ - + {C587F355-26FF-4D17-801F-50505C348D99} true @@ -8,6 +8,6 @@ - + - \ No newline at end of file + diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRules/FirewallRules.wixproj b/src/test/msi/TestData/FirewallExtensionTests/FirewallRules/FirewallRules.wixproj index b1770b0f4..23d715d79 100644 --- a/src/test/msi/TestData/FirewallExtensionTests/FirewallRules/FirewallRules.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRules/FirewallRules.wixproj @@ -1,5 +1,5 @@ - + {4D188568-1CCF-4EEE-BC27-17C3DCC83E58} true @@ -8,6 +8,6 @@ - + - \ No newline at end of file + diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj new file mode 100644 index 000000000..c56806ed6 --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj @@ -0,0 +1,13 @@ + + + + {F153C27F-0236-4A0F-ADB3-50BFC73B4FEA} + true + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/product.wxs b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/product.wxs new file mode 100644 index 000000000..142c8f68d --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/product.wxs @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj new file mode 100644 index 000000000..275e34ac2 --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj @@ -0,0 +1,13 @@ + + + + {DC2C3CDC-112F-40A8-A7B4-2C7B758F4F94} + true + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/product.wxs b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/product.wxs new file mode 100644 index 000000000..1f9935d59 --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/product.wxs @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj b/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj index b1770b0f4..23d715d79 100644 --- a/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj @@ -1,5 +1,5 @@ - + {4D188568-1CCF-4EEE-BC27-17C3DCC83E58} true @@ -8,6 +8,6 @@ - + - \ No newline at end of file + diff --git a/src/ext/DifxApp/wixlib/difxapp.wixproj b/src/test/msi/TestData/FirewallExtensionTests/Module401/Module401.wixproj similarity index 56% rename from src/ext/DifxApp/wixlib/difxapp.wixproj rename to src/test/msi/TestData/FirewallExtensionTests/Module401/Module401.wixproj index 2418adcd3..978306447 100644 --- a/src/ext/DifxApp/wixlib/difxapp.wixproj +++ b/src/test/msi/TestData/FirewallExtensionTests/Module401/Module401.wixproj @@ -1,13 +1,10 @@ - difxapp_$(Platform) - Library - true - en-us + Module + 1072 - - + diff --git a/src/test/msi/TestData/FirewallExtensionTests/Module401/data/test.txt b/src/test/msi/TestData/FirewallExtensionTests/Module401/data/test.txt new file mode 100644 index 000000000..cd0db0e19 --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/Module401/data/test.txt @@ -0,0 +1 @@ +This is test.txt. \ No newline at end of file diff --git a/src/test/msi/TestData/FirewallExtensionTests/Module401/module.wxs b/src/test/msi/TestData/FirewallExtensionTests/Module401/module.wxs new file mode 100644 index 000000000..872743c7e --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/Module401/module.wxs @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ext/DifxApp/Directory.Build.props b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/ModuleCurrent.wixproj similarity index 53% rename from src/ext/DifxApp/Directory.Build.props rename to src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/ModuleCurrent.wixproj index 4697cf0cc..793b3e10a 100644 --- a/src/ext/DifxApp/Directory.Build.props +++ b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/ModuleCurrent.wixproj @@ -1,10 +1,10 @@ - - - + - DifxApp.wixext + Module + 1072 - - + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/data/test.txt b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/data/test.txt new file mode 100644 index 000000000..cd0db0e19 --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/data/test.txt @@ -0,0 +1 @@ +This is test.txt. \ No newline at end of file diff --git a/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/module.wxs b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/module.wxs new file mode 100644 index 000000000..53097acd4 --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/module.wxs @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj b/src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj new file mode 100644 index 000000000..a3c73ddac --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj @@ -0,0 +1,14 @@ + + + + {80635798-F904-4C4E-81D8-27A5106F3998} + true + + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/NestedService/product.wxs b/src/test/msi/TestData/FirewallExtensionTests/NestedService/product.wxs new file mode 100644 index 000000000..24559a332 --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/NestedService/product.wxs @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/ProtocolRules.wixproj b/src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/ProtocolRules.wixproj new file mode 100644 index 000000000..23d715d79 --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/ProtocolRules.wixproj @@ -0,0 +1,13 @@ + + + + {4D188568-1CCF-4EEE-BC27-17C3DCC83E58} + true + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/product.wxs b/src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/product.wxs new file mode 100644 index 000000000..6a28ad0ae --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/ProtocolRules/product.wxs @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/ScopeRules/ScopeRules.wixproj b/src/test/msi/TestData/FirewallExtensionTests/ScopeRules/ScopeRules.wixproj new file mode 100644 index 000000000..23d715d79 --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/ScopeRules/ScopeRules.wixproj @@ -0,0 +1,13 @@ + + + + {4D188568-1CCF-4EEE-BC27-17C3DCC83E58} + true + + + + + + + + diff --git a/src/test/msi/TestData/FirewallExtensionTests/ScopeRules/product.wxs b/src/test/msi/TestData/FirewallExtensionTests/ScopeRules/product.wxs new file mode 100644 index 000000000..776c86750 --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/ScopeRules/product.wxs @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs b/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs index 4106cd724..380e6f4cc 100644 --- a/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs +++ b/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs @@ -4,6 +4,8 @@ namespace WixToolsetTest.MsiE2E { using System; using System.IO; + using System.Linq; + using System.Net.NetworkInformation; using NetFwTypeLib; using WixTestTools; using WixTestTools.Firewall; @@ -37,8 +39,8 @@ public void CanInstallAndUninstallFirewallRulesWithMinimalProperties() ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")), Description = "WiX Toolset firewall exception rule integration test - minimal app properties", Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, - EdgeTraversal = true, - EdgeTraversalOptions = 1, + EdgeTraversal = false, + EdgeTraversalOptions = 0, Enabled = true, InterfaceTypes = "All", LocalAddresses = "*", @@ -124,8 +126,8 @@ public void DisabledApplicationFirewallRuleIsEnabledAfterRepair() ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")), Description = "WiX Toolset firewall exception rule integration test - minimal app properties", Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, - EdgeTraversal = true, - EdgeTraversalOptions = 1, + EdgeTraversal = false, + EdgeTraversalOptions = 0, Enabled = true, InterfaceTypes = "All", LocalAddresses = "*", @@ -187,8 +189,8 @@ public void MissingApplicationFirewallRuleIsAddedAfterRepair() ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")), Description = "WiX Toolset firewall exception rule integration test - minimal app properties", Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, - EdgeTraversal = true, - EdgeTraversalOptions = 1, + EdgeTraversal = false, + EdgeTraversalOptions = 0, Enabled = true, InterfaceTypes = "All", LocalAddresses = "*", @@ -213,8 +215,8 @@ public void FirewallRulesUseFormattedStringProperties() ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("DynamicFirewallRules", "product.wxs")), Description = "WiX Toolset firewall exception rule integration test - dynamic app description 9999", Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, - EdgeTraversal = true, - EdgeTraversalOptions = 1, + EdgeTraversal = false, + EdgeTraversalOptions = 0, Enabled = true, InterfaceTypes = "All", LocalAddresses = "*", @@ -255,8 +257,8 @@ public void FirewallRulesUseFormattedStringProperties() ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("windir"), "system32", "9999.exe"), Description = "WiX Toolset firewall exception rule integration test - dynamic Name 9999", Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, - EdgeTraversal = true, - EdgeTraversalOptions = 1, + EdgeTraversal = false, + EdgeTraversalOptions = 0, Enabled = true, InterfaceTypes = "All", LocalAddresses = "*", @@ -285,10 +287,10 @@ public void SucceedWhenIgnoreOnFailureIsSet() var log1 = product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0006 pipe")); - Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add app to the authorized apps list")); + Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add firewall exception 'WiXToolset401 Test - 0006 pipe' to the list")); Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0007 pipe")); - Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add app to the authorized ports list")); + Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add firewall exception 'WiXToolset401 Test - 0007 pipe' to the list")); var expected = new RuleDetails("WiXToolset401 Test - 0008 removal") { @@ -296,8 +298,8 @@ public void SucceedWhenIgnoreOnFailureIsSet() ApplicationName = "test.exe", Description = "WiX Toolset firewall exception rule integration test - removal test", Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, - EdgeTraversal = true, - EdgeTraversalOptions = 1, + EdgeTraversal = false, + EdgeTraversalOptions = 0, Enabled = true, InterfaceTypes = "All", LocalPorts = "52390", @@ -313,7 +315,828 @@ public void SucceedWhenIgnoreOnFailureIsSet() Verifier.RemoveFirewallRuleByName("WiXToolset401 Test - 0008 removal"); var log2 = product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS, "NORULENAME=1"); - Assert.True(LogVerifier.MessageInLogFile(log2, "failed to remove firewall rule")); + Assert.True(LogVerifier.MessageInLogFile(log2, "failed to remove firewall exception for name")); + } + + [RuntimeFact] + public void VarietyOfProtocolValuesCanBeUsed() + { + var product = this.CreatePackageInstaller("ProtocolRules"); + product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + var expected1 = new RuleDetails("WiXToolset401 Test - 0009") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - protocol TCP", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + SecureFlags = 0, + LocalPorts = "900", + RemotePorts = "*", + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0009", expected1); + + + var expected2 = new RuleDetails("WiXToolset401 Test - 0010") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - protocol UDP", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 17, + RemoteAddresses = "*", + SecureFlags = 0, + LocalPorts = "1000", + RemotePorts = "*", + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0010", expected2); + + + var expected3 = new RuleDetails("WiXToolset401 Test - 0011") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + ApplicationName = "test.exe", + Description = "WiX Toolset firewall exception rule integration test - ports can only be specified if protocol is TCP or UDP", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 134, + RemoteAddresses = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0011", expected3); + + product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + // verify the firewall exceptions have been removed. + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0009")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0010")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0011")); + } + + [RuntimeFact] + public void FullSetOfScopeValuesCanBeUsed() + { + var product = this.CreatePackageInstaller("ScopeRules"); + product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + var expected1 = new RuleDetails("WiXToolset401 Test - 0012") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - scope any", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + SecureFlags = 0, + LocalPorts = "1200", + RemotePorts = "*", + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0012", expected1); + + + var expected2 = new RuleDetails("WiXToolset401 Test - 0013") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - scope local subnet", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "LocalSubnet", + SecureFlags = 0, + LocalPorts = "1300", + RemotePorts = "*", + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0013", expected2); + + + var expected3 = new RuleDetails("WiXToolset401 Test - 0014") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - scope DNS", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "DNS", + SecureFlags = 0, + LocalPorts = "1400", + RemotePorts = "*", + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0014", expected3); + + + var expected4 = new RuleDetails("WiXToolset401 Test - 0015") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - scope DHCP", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "DHCP", + SecureFlags = 0, + LocalPorts = "1500", + RemotePorts = "*", + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0015", expected4); + + + var expected5 = new RuleDetails("WiXToolset401 Test - 0016") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - scope WINS", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "WINS", + SecureFlags = 0, + LocalPorts = "1600", + RemotePorts = "*", + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0016", expected5); + + + var expected6 = new RuleDetails("WiXToolset401 Test - 0017") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - scope default gateway", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "DefaultGateway", + SecureFlags = 0, + LocalPorts = "1700", + RemotePorts = "*", + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0017", expected6); + + product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + // verify the firewall exceptions have been removed. + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0012")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0013")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0014")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0015")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0016")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0017")); + } + + [RuntimeFact] + public void CanInstallAndUninstallFirewallRulesWithInterfaces() + { + var names = NetworkInterface.GetAllNetworkInterfaces() + .Take(3) + .Select(ni => ni.Name); + + var props = names.Select((name, idx) => $"INTERFACE{idx + 1}=\"{name}\"") + .Concat(new[] { "INTERFACETYPE=Lan" }).ToArray(); + + var product = this.CreatePackageInstaller("FirewallRulesInterfaces"); + product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS, props); + + var expected1 = new RuleDetails("WiXToolset500 Test - 0028") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRulesInterfaces", "product.wxs")), + Description = "WiX Toolset firewall exception rule integration test - three interfaces", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "Lan,Wireless,RemoteAccess", + Interfaces = names.ToArray(), + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 256, + RemoteAddresses = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset500 Test - 0028", expected1); + + var expected2 = new RuleDetails("WiXToolset500 Test - 0029") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - one interface", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "Lan", + Interfaces = names.Take(1).ToArray(), + LocalAddresses = "*", + LocalPorts = "29292", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset500 Test - 0029", expected2); + + props = names.Take(1).Select((name, idx) => $"INTERFACE{idx + 2}=\"{name}\"").ToArray(); + + product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, props); + + var expected3 = new RuleDetails("WiXToolset500 Test - 0028") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRulesInterfaces", "product.wxs")), + Description = "WiX Toolset firewall exception rule integration test - three interfaces", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "Lan,Wireless,RemoteAccess", + Interfaces = names.Take(1).ToArray(), + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 256, + RemoteAddresses = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset500 Test - 0028", expected3); + + var expected4 = new RuleDetails("WiXToolset500 Test - 0029") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - one interface", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + LocalPorts = "29292", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset500 Test - 0029", expected4); + + product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + // verify the firewall exceptions have been removed. + Assert.False(Verifier.FirewallRuleExists("WiXToolset500 Test - 0028")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset500 Test - 0029")); + } + + [RuntimeFact] + public void CanInstallAndUninstallFirewallRulesPackagedByDifferentModules() + { + var product = this.CreatePackageInstaller("CrossVersionMerge"); + product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + // Validate new firewall exception details. + var expected1 = new RuleDetails("WiXToolset401 Test - 0018") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file1.txt"), + Description = "WiX Toolset firewall exception rule integration test - module 401 MergeRedirectFolder - app", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = true, + EdgeTraversalOptions = 1, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + LocalPorts = "40101", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0018", expected1); + + var expected2 = new RuleDetails("WiXToolset401 Test - 0019") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - module 401 MergeRedirectFolder - port", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + LocalPorts = "40102", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0019", expected2); + + var expected3 = new RuleDetails("WiXToolset401 Test - 0020") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file2.txt"), + Description = "WiX Toolset firewall exception rule integration test - module 401 NotTheMergeRedirectFolder - app", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = true, + EdgeTraversalOptions = 1, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + LocalPorts = "40103", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0020", expected3); + + var expected4 = new RuleDetails("WiXToolset401 Test - 0021") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - module 401 NotTheMergeRedirectFolder - port", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + LocalPorts = "40104", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0021", expected4); + + var expected5 = new RuleDetails("WiXToolset Test - 0022") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file1.txt"), + Description = "WiX Toolset firewall exception rule integration test - module MergeRedirectFolder - app", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + LocalPorts = "50001", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0022", expected5); + + var expected6 = new RuleDetails("WiXToolset Test - 0023") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - module MergeRedirectFolder - port", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + LocalPorts = "50002", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0023", expected6); + + var expected7 = new RuleDetails("WiXToolset Test - 0024") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file2.txt"), + Description = "WiX Toolset firewall exception rule integration test - module NotTheMergeRedirectFolder - app", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + LocalPorts = "50003", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0024", expected7); + + var expected8 = new RuleDetails("WiXToolset Test - 0025") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - module NotTheMergeRedirectFolder - port", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + LocalPorts = "50004", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0025", expected8); + + var expected9 = new RuleDetails("WiXToolset Test - 0026") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "package.wxs"), + Description = "WiX Toolset firewall exception rule integration test - package app", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + LocalPorts = "20001", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0026", expected9); + + var expected10 = new RuleDetails("WiXToolset Test - 0027") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Description = "WiX Toolset firewall exception rule integration test - package port", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + LocalAddresses = "*", + LocalPorts = "20002", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0027", expected10); + + product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + // verify the firewall exceptions have been removed. + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0018")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0019")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0020")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0021")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0022")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0023")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0024")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0025")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0026")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0027")); + } + + [RuntimeFact] + public void ServiceNameIsPassedIntoNestedRules() + { + var product = this.CreatePackageInstaller("NestedService"); + product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + var expected1 = new RuleDetails("WiXToolset Test - 0031") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Protocol = 256, + LocalAddresses = "*", + RemoteAddresses = "*", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + Description = "WiX Toolset firewall exception rule integration test - service property", + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + Profiles = Int32.MaxValue, + SecureFlags = 0, + ServiceName = "Spooler", + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0031", expected1); + + var expected2 = new RuleDetails("WiXToolset Test - 0032") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Protocol = 256, + LocalAddresses = "*", + RemoteAddresses = "*", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + Description = "WiX Toolset firewall exception rule integration test - ServiceConfig", + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + Profiles = Int32.MaxValue, + SecureFlags = 0, + ServiceName = "Spooler", + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0032", expected2); + + var expected3 = new RuleDetails("WiXToolset Test - 0033") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Protocol = 256, + LocalAddresses = "*", + RemoteAddresses = "*", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + Description = "WiX Toolset firewall exception rule integration test - ServiceInstall", + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + Profiles = Int32.MaxValue, + SecureFlags = 0, + ServiceName = "WixTestFirewallSrv", + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0033", expected3); + + product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + // verify the firewall exceptions have been removed. + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0031")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0032")); + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0033")); + } + + [RuntimeFact] + public void SucceedWhenEnableOnlyFlagIsSet() + { + var product = this.CreatePackageInstaller("FirewallRulesProperties"); + product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + var expected1 = new RuleDetails("WiXToolset Test - 0028") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Protocol = 256, + LocalAddresses = "*", + RemoteAddresses = "*", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + Profiles = Int32.MaxValue, + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0028", expected1); + + Verifier.DisableFirewallRule("WiXToolset Test - 0028"); + + var args = new[] + { + "LOCALPORT=3456", + "PROTOCOL=6", + "PROGRAM=ShouldBeUnchanged", + "PROFILE=2", + "DESCRIPTION=ShouldBeUnchanged", + "REMOTESCOPE=ShouldBeUnchanged", + "EDGETRAVERSAL=3", + "ENABLED=1", + "GROUPING=ShouldBeUnchanged", + "ICMPTYPES=ShouldBeUnchanged", + "INTERFACE=ShouldBeUnchanged", + "INTERFACETYPE=ShouldBeUnchanged", + "LOCALSCOPE=ShouldBeUnchanged", + "REMOTEPORT=60000", + "SERVICE=ShouldBeUnchanged", + "PACKAGEID=ShouldBeUnchanged", + "LOCALUSERS=ShouldBeUnchanged", + "LOCALOWNER=ShouldBeUnchanged", + "REMOTEMACHINES=ShouldBeUnchanged", + "REMOTEUSERS=ShouldBeUnchanged", + "SECUREFLAGS=15", + "REMOTEADDRESS=ShouldBeUnchanged", + "LOCALADDRESS=ShouldBeUnchanged", + }; + + product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, args); + + var expected2 = new RuleDetails("WiXToolset Test - 0028") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Protocol = 256, + LocalAddresses = "*", + RemoteAddresses = "*", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + Profiles = Int32.MaxValue, + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0028", expected2); + + product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + // verify the firewall exceptions have been removed. + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0028")); + } + + [RuntimeFact] + public void SucceedWhenDoNothingFlagIsSet() + { + var product = this.CreatePackageInstaller("FirewallRulesProperties"); + product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + var expected1 = new RuleDetails("WiXToolset Test - 0029") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Protocol = 256, + LocalAddresses = "*", + RemoteAddresses = "*", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + Profiles = Int32.MaxValue, + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0029", expected1); + Verifier.DisableFirewallRule("WiXToolset Test - 0029"); + + var args = new[] + { + "INTERFACE=ShouldBeUnchanged", + "INTERFACETYPE=ShouldBeUnchanged", + "REMOTEADDRESS=ShouldBeUnchanged", + "LOCALADDRESS=ShouldBeUnchanged", + }; + + product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, args); + + var expected2 = new RuleDetails("WiXToolset Test - 0029") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Protocol = 256, + LocalAddresses = "*", + RemoteAddresses = "*", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = false, // remains as disabled after the repair + InterfaceTypes = "All", + Profiles = Int32.MaxValue, + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0029", expected2); + + product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + // verify the firewall exceptions have been removed. + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0029")); + } + + [RuntimeFact] + public void SucceedWhenNoFlagIsSet() + { + var product = this.CreatePackageInstaller("FirewallRulesProperties"); + product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + var expected1 = new RuleDetails("WiXToolset Test - 0030") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Protocol = 256, + LocalAddresses = "*", + RemoteAddresses = "*", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + InterfaceTypes = "All", + Profiles = Int32.MaxValue, + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0030", expected1); + Verifier.DisableFirewallRule("WiXToolset Test - 0030"); + + var names = NetworkInterface.GetAllNetworkInterfaces() + .Take(2) + .Select(ni => ni.Name); + + var args = names.Select((name, idx) => $"INTERFACE{idx + 1}=\"{name}\"") + .Concat(new[] + { + "INTERFACETYPE1=Wireless", + "INTERFACETYPE2=Lan", + "REMOTEADDRESS1=DHCP", + "REMOTEADDRESS2=LocalSubnet", + "LOCALADDRESS1=127.0.0.1", + "LOCALADDRESS2=192.168.1.1", + }) + .ToArray(); + + product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, args); + + var expected2 = new RuleDetails("WiXToolset Test - 0030") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + Protocol = 256, + LocalAddresses = "127.0.0.1/255.255.255.255,192.168.1.1/255.255.255.255", + RemoteAddresses = "LocalSubnet,DHCP", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + Description = "", + EdgeTraversal = false, + EdgeTraversalOptions = 0, + Enabled = true, + Interfaces = names.ToArray(), + InterfaceTypes = "Lan,Wireless", + Profiles = Int32.MaxValue, + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset Test - 0030", expected2); + + product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + // verify the firewall exceptions have been removed. + Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0030")); } } } diff --git a/src/test/msi/WixToolsetTest.MsiE2E/WixToolsetTest.MsiE2E.csproj b/src/test/msi/WixToolsetTest.MsiE2E/WixToolsetTest.MsiE2E.csproj index 8f07a54b5..44cc738e1 100644 --- a/src/test/msi/WixToolsetTest.MsiE2E/WixToolsetTest.MsiE2E.csproj +++ b/src/test/msi/WixToolsetTest.MsiE2E/WixToolsetTest.MsiE2E.csproj @@ -29,6 +29,7 @@ + diff --git a/src/wix/WixToolset.BuildTasks/DetachBundleEngineForSigning.cs b/src/wix/WixToolset.BuildTasks/DetachBundleEngineForSigning.cs index 27d4436b3..506f6d56d 100644 --- a/src/wix/WixToolset.BuildTasks/DetachBundleEngineForSigning.cs +++ b/src/wix/WixToolset.BuildTasks/DetachBundleEngineForSigning.cs @@ -42,8 +42,6 @@ protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilde commandLineBuilder.AppendSwitchIfNotNull("-intermediatefolder ", this.IntermediateDirectory); base.BuildCommandLine(commandLineBuilder); - - commandLineBuilder.AppendTextIfNotWhitespace(this.AdditionalOptions); } protected override int ExecuteTool(string pathToTool, string responseFileCommands, string commandLineCommands) diff --git a/src/wix/WixToolset.BuildTasks/InscribeMsiWithCabinetSignatures.cs b/src/wix/WixToolset.BuildTasks/InscribeMsiWithCabinetSignatures.cs index 72d9e872e..4be475329 100644 --- a/src/wix/WixToolset.BuildTasks/InscribeMsiWithCabinetSignatures.cs +++ b/src/wix/WixToolset.BuildTasks/InscribeMsiWithCabinetSignatures.cs @@ -27,8 +27,6 @@ protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilde commandLineBuilder.AppendSwitchIfNotNull("-intermediatefolder ", this.IntermediateDirectory); base.BuildCommandLine(commandLineBuilder); - - commandLineBuilder.AppendTextIfNotWhitespace(this.AdditionalOptions); } } } diff --git a/src/wix/WixToolset.BuildTasks/ReattachSignedBundleEngine.cs b/src/wix/WixToolset.BuildTasks/ReattachSignedBundleEngine.cs index d131402d8..0dbcc46d6 100644 --- a/src/wix/WixToolset.BuildTasks/ReattachSignedBundleEngine.cs +++ b/src/wix/WixToolset.BuildTasks/ReattachSignedBundleEngine.cs @@ -49,8 +49,6 @@ protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilde commandLineBuilder.AppendSwitchIfNotNull("-intermediatefolder ", this.IntermediateDirectory); base.BuildCommandLine(commandLineBuilder); - - commandLineBuilder.AppendTextIfNotWhitespace(this.AdditionalOptions); } protected override int ExecuteTool(string pathToTool, string responseFileCommands, string commandLineCommands) diff --git a/src/wix/WixToolset.BuildTasks/WindowsInstallerValidation.cs b/src/wix/WixToolset.BuildTasks/WindowsInstallerValidation.cs index 24e504448..e0077ffa1 100644 --- a/src/wix/WixToolset.BuildTasks/WindowsInstallerValidation.cs +++ b/src/wix/WixToolset.BuildTasks/WindowsInstallerValidation.cs @@ -53,8 +53,6 @@ protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilde commandLineBuilder.AppendArrayIfNotNull("-sice ", this.SuppressIces); base.BuildCommandLine(commandLineBuilder); - - commandLineBuilder.AppendTextIfNotWhitespace(this.AdditionalOptions); } } } diff --git a/src/wix/WixToolset.BuildTasks/WixBuild.cs b/src/wix/WixToolset.BuildTasks/WixBuild.cs index 4cadd7e08..0d455c464 100644 --- a/src/wix/WixToolset.BuildTasks/WixBuild.cs +++ b/src/wix/WixToolset.BuildTasks/WixBuild.cs @@ -82,7 +82,6 @@ protected override void BuildCommandLine(WixCommandLineBuilder commandLineBuilde commandLineBuilder.AppendArrayIfNotNull("-bindVariable ", this.CalculateBindVariableStrings()); commandLineBuilder.AppendArrayIfNotNull("-loc ", this.LocalizationFiles); commandLineBuilder.AppendArrayIfNotNull("-lib ", this.LibraryFiles); - commandLineBuilder.AppendTextIfNotWhitespace(this.AdditionalOptions); commandLineBuilder.AppendFileNamesIfNotNull(this.SourceFiles, " "); } diff --git a/src/wix/WixToolset.Converters/WixConverter.cs b/src/wix/WixToolset.Converters/WixConverter.cs index f3675ecc6..178b90bee 100644 --- a/src/wix/WixToolset.Converters/WixConverter.cs +++ b/src/wix/WixToolset.Converters/WixConverter.cs @@ -205,8 +205,8 @@ public sealed class WixConverter { "WixDependencyRequire", "Wix4DependencyRequire_" }, { "WixDependencyCheck", "Wix4DependencyCheck_" }, { "WixQueryDirectXCaps", "Wix4QueryDirectXCaps_" }, - { "WixSchedFirewallExceptionsUninstall", "Wix4SchedFirewallExceptionsUninstall_" }, - { "WixSchedFirewallExceptionsInstall", "Wix4SchedFirewallExceptionsInstall_" }, + { "WixSchedFirewallExceptionsUninstall", "Wix5SchedFirewallExceptionsUninstall_" }, + { "WixSchedFirewallExceptionsInstall", "Wix5SchedFirewallExceptionsInstall_" }, { "WixSchedHttpUrlReservationsUninstall", "Wix4SchedHttpUrlReservationsUninstall_" }, { "WixSchedHttpUrlReservationsInstall", "Wix4SchedHttpUrlReservationsInstall_" }, { "ConfigureIIs", "Wix4ConfigureIIs_" }, diff --git a/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateIdtFileCommand.cs b/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateIdtFileCommand.cs index 89fc81dbf..28bcfd4a4 100644 --- a/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateIdtFileCommand.cs +++ b/src/wix/WixToolset.Core.WindowsInstaller/Bind/CreateIdtFileCommand.cs @@ -81,7 +81,7 @@ private void TableToIdtDefinition(Table table, StreamWriter writer, bool keepAdd } catch (EncoderFallbackException) { - this.Messaging.Write(ErrorMessages.InvalidStringForCodepage(row.SourceLineNumbers, Convert.ToString(writer.Encoding.WindowsCodePage, CultureInfo.InvariantCulture))); + this.Messaging.Write(ErrorMessages.InvalidStringForCodepage(row.SourceLineNumbers, Convert.ToString(writer.Encoding.CodePage, CultureInfo.InvariantCulture))); rowBytes = convertEncoding.GetBytes(rowString); } diff --git a/src/wix/WixToolset.Core/Compiler.cs b/src/wix/WixToolset.Core/Compiler.cs index 7541969b7..73fd494db 100644 --- a/src/wix/WixToolset.Core/Compiler.cs +++ b/src/wix/WixToolset.Core/Compiler.cs @@ -162,7 +162,7 @@ public Intermediate Compile(ICompileContext context) target.UpdateLevel(Data.IntermediateLevels.Compiled); - return this.Messaging.EncounteredError ? null : target; + return target; } /// @@ -514,7 +514,7 @@ private void ParseAppIdElement(XElement node, string componentId, YesNoType adve { this.Core.Write(ErrorMessages.AppIdIncompatibleAdvertiseState(sourceLineNumbers, node.Name.LocalName, "Advertise", appIdAdvertise.ToString(), advertise.ToString())); } - else + else if (appIdAdvertise != YesNoType.NotSet) { advertise = appIdAdvertise; } diff --git a/src/wix/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs b/src/wix/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs index 908476db5..496c61783 100644 --- a/src/wix/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs +++ b/src/wix/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs @@ -42,13 +42,13 @@ public FindEntrySectionAndLoadSymbolsCommand(IMessaging messaging, IEnumerable - public ISet RedundantSymbols { get; private set; } + public ISet IdenticalDirectorySymbols { get; private set; } public void Execute() { var symbolsByName = new Dictionary(); var possibleConflicts = new HashSet(); - var redundantSymbols = new HashSet(); + var identicalDirectorySymbols = new HashSet(); if (!Enum.TryParse(this.ExpectedOutputType.ToString(), out SectionType expectedEntrySectionType)) { @@ -76,28 +76,27 @@ public void Execute() } } - // Load all the symbols from the section's tables that create symbols. + // Load all the symbols from the section's tables that can be referenced (i.e. have an Id). foreach (var symbol in section.Symbols.Where(t => t.Id != null)) { var symbolWithSection = new SymbolWithSection(section, symbol); + var fullName = symbolWithSection.GetFullName(); - if (!symbolsByName.TryGetValue(symbolWithSection.Name, out var existingSymbol)) + if (!symbolsByName.TryGetValue(fullName, out var existingSymbol)) { - symbolsByName.Add(symbolWithSection.Name, symbolWithSection); + symbolsByName.Add(fullName, symbolWithSection); } else // uh-oh, duplicate symbols. { // If the duplicate symbols are both private directories, there is a chance that they - // point to identical symbols. Identical directory symbols are redundant and will not cause - // conflicts. + // point to identical symbols. Identical directory symbols should be treated as redundant. + // and not cause conflicts. if (AccessModifier.Section == existingSymbol.Access && AccessModifier.Section == symbolWithSection.Access && SymbolDefinitionType.Directory == existingSymbol.Symbol.Definition.Type && existingSymbol.Symbol.IsIdentical(symbolWithSection.Symbol)) { - // Ensure identical symbol's symbol is marked redundant to ensure (should the symbol be - // referenced into the final output) it will not add duplicate primary keys during - // the .IDT importing. - existingSymbol.AddRedundant(symbolWithSection); - redundantSymbols.Add(symbolWithSection.Symbol); + // Ensure identical symbols are tracked to ensure that only one symbol will end up in linked intermediate. + identicalDirectorySymbols.Add(existingSymbol.Symbol); + identicalDirectorySymbols.Add(symbolWithSection.Symbol); } else { @@ -111,7 +110,7 @@ public void Execute() this.SymbolsByName = symbolsByName; this.PossibleConflicts = possibleConflicts; - this.RedundantSymbols = redundantSymbols; + this.IdenticalDirectorySymbols = identicalDirectorySymbols; } } } diff --git a/src/wix/WixToolset.Core/Link/ReportConflictingSymbolsCommand.cs b/src/wix/WixToolset.Core/Link/ReportConflictingSymbolsCommand.cs index ace2e19df..3a07d3662 100644 --- a/src/wix/WixToolset.Core/Link/ReportConflictingSymbolsCommand.cs +++ b/src/wix/WixToolset.Core/Link/ReportConflictingSymbolsCommand.cs @@ -40,7 +40,9 @@ public void Execute() if (actuallyReferencedDuplicates.Any()) { - this.Messaging.Write(ErrorMessages.DuplicateSymbol(referencedDuplicate.Symbol.SourceLineNumbers, referencedDuplicate.Name)); + var fullName = referencedDuplicate.GetFullName(); + + this.Messaging.Write(ErrorMessages.DuplicateSymbol(referencedDuplicate.Symbol.SourceLineNumbers, fullName)); foreach (var duplicate in actuallyReferencedDuplicates) { diff --git a/src/wix/WixToolset.Core/Link/ResolveReferencesCommand.cs b/src/wix/WixToolset.Core/Link/ResolveReferencesCommand.cs index efb90bb85..d95d648f2 100644 --- a/src/wix/WixToolset.Core/Link/ResolveReferencesCommand.cs +++ b/src/wix/WixToolset.Core/Link/ResolveReferencesCommand.cs @@ -91,15 +91,16 @@ private void RecursivelyResolveReferences(IntermediateSection section) else // display errors for the duplicate symbols. { var accessibleSymbol = accessible[0]; + var accessibleFullName = accessibleSymbol.GetFullName(); var referencingSourceLineNumber = wixSimpleReferenceRow.SourceLineNumbers?.ToString(); if (String.IsNullOrEmpty(referencingSourceLineNumber)) { - this.Messaging.Write(ErrorMessages.DuplicateSymbol(accessibleSymbol.Symbol.SourceLineNumbers, accessibleSymbol.Name)); + this.Messaging.Write(ErrorMessages.DuplicateSymbol(accessibleSymbol.Symbol.SourceLineNumbers, accessibleFullName)); } else { - this.Messaging.Write(ErrorMessages.DuplicateSymbol(accessibleSymbol.Symbol.SourceLineNumbers, accessibleSymbol.Name, referencingSourceLineNumber)); + this.Messaging.Write(ErrorMessages.DuplicateSymbol(accessibleSymbol.Symbol.SourceLineNumbers, accessibleFullName, referencingSourceLineNumber)); } foreach (var accessibleDuplicate in accessible.Skip(1)) @@ -146,14 +147,6 @@ private List DetermineAccessibleSymbols(IntermediateSection r } } - foreach (var dupe in symbolWithSection.Redundants) - { - if (this.AccessibleSymbol(referencingSection, dupe)) - { - accessibleSymbols.Add(dupe); - } - } - return accessibleSymbols; } diff --git a/src/wix/WixToolset.Core/Link/SymbolWithSection.cs b/src/wix/WixToolset.Core/Link/SymbolWithSection.cs index 08e01077a..dbaceb283 100644 --- a/src/wix/WixToolset.Core/Link/SymbolWithSection.cs +++ b/src/wix/WixToolset.Core/Link/SymbolWithSection.cs @@ -13,7 +13,6 @@ namespace WixToolset.Core.Link internal class SymbolWithSection { private HashSet possibleConflicts; - private HashSet redundants; /// /// Creates a symbol for a symbol. @@ -24,7 +23,6 @@ public SymbolWithSection(IntermediateSection section, IntermediateSymbol symbol) { this.Symbol = symbol; this.Section = section; - this.Name = String.Concat(this.Symbol.Definition.Name, ":", this.Symbol.Id.Id); } /// @@ -33,12 +31,6 @@ public SymbolWithSection(IntermediateSection section, IntermediateSymbol symbol) /// Accessbility of the symbol. public AccessModifier Access => this.Symbol.Id.Access; - /// - /// Gets the name of the symbol. - /// - /// Name of the symbol. - public string Name { get; } - /// /// Gets the symbol for this symbol. /// @@ -56,11 +48,6 @@ public SymbolWithSection(IntermediateSection section, IntermediateSymbol symbol) /// public IEnumerable PossiblyConflicts => this.possibleConflicts ?? Enumerable.Empty(); - /// - /// Gets any duplicates of this symbol with sections that are redundant. - /// - public IEnumerable Redundants => this.redundants ?? Enumerable.Empty(); - /// /// Adds a duplicate symbol with sections that is a possible conflict. /// @@ -76,17 +63,11 @@ public void AddPossibleConflict(SymbolWithSection symbolWithSection) } /// - /// Adds a duplicate symbol that is redundant. + /// Gets the full name of the symbol. /// - /// Symbol with section that is redundant of this symbol. - public void AddRedundant(SymbolWithSection symbolWithSection) + public string GetFullName() { - if (null == this.redundants) - { - this.redundants = new HashSet(); - } - - this.redundants.Add(symbolWithSection); + return String.Concat(this.Symbol.Definition.Name, ":", this.Symbol.Id.Id); } } } diff --git a/src/wix/WixToolset.Core/Linker.cs b/src/wix/WixToolset.Core/Linker.cs index a3d990392..5c021ca0f 100644 --- a/src/wix/WixToolset.Core/Linker.cs +++ b/src/wix/WixToolset.Core/Linker.cs @@ -177,14 +177,20 @@ public Intermediate Link(ILinkContext context) // metadata. var resolvedSection = new IntermediateSection(find.EntrySection.Id, find.EntrySection.Type); var references = new List(); + var identicalDirectoryIds = new HashSet(StringComparer.Ordinal); foreach (var section in sections) { foreach (var symbol in section.Symbols) { - if (find.RedundantSymbols.Contains(symbol)) + // If this symbol is an identical directory, ensure we only visit + // one (and skip the other identicals with the same id). + if (find.IdenticalDirectorySymbols.Contains(symbol)) { - continue; + if (!identicalDirectoryIds.Add(symbol.Id.Id)) + { + continue; + } } var copySymbol = true; // by default, copy symbols. @@ -351,22 +357,24 @@ private void LoadStandardSymbols(IDictionary symbolsB foreach (var actionSymbol in WindowsInstallerStandard.StandardActions()) { var symbolWithSection = new SymbolWithSection(null, actionSymbol); + var fullName = symbolWithSection.GetFullName(); // If the action's symbol has not already been defined (i.e. overriden by the user), add it now. - if (!symbolsByName.ContainsKey(symbolWithSection.Name)) + if (!symbolsByName.ContainsKey(fullName)) { - symbolsByName.Add(symbolWithSection.Name, symbolWithSection); + symbolsByName.Add(fullName, symbolWithSection); } } foreach (var directorySymbol in WindowsInstallerStandard.StandardDirectories()) { var symbolWithSection = new SymbolWithSection(null, directorySymbol); + var fullName = symbolWithSection.GetFullName(); // If the directory's symbol has not already been defined (i.e. overriden by the user), add it now. - if (!symbolsByName.ContainsKey(symbolWithSection.Name)) + if (!symbolsByName.ContainsKey(fullName)) { - symbolsByName.Add(symbolWithSection.Name, symbolWithSection); + symbolsByName.Add(fullName, symbolWithSection); } } } diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/AppIdFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/AppIdFixture.cs new file mode 100644 index 000000000..7d7fe07ac --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/AppIdFixture.cs @@ -0,0 +1,76 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolsetTest.CoreIntegration +{ + using System.IO; + using WixInternal.Core.TestPackage; + using WixInternal.TestSupport; + using Xunit; + + public class AppIdFixture + { + [Fact] + public void PopulatesAppIdTableAtTopLevel() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin", "test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "AppId", "TopLevelAppId.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + result.AssertSuccess(); + + Assert.True(File.Exists(msiPath)); + var results = Query.QueryDatabase(msiPath, new[] { "AppId" }); + WixAssert.CompareLineByLine(new[] + { + "AppId:{D6040299-B15C-4C94-AE26-0C9B60D14C35}\t\t\t\t\t\t", + }, results); + } + } + + [Fact] + public void PopulatesAppIdTableWhenAdvertised() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin", "test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "AppId", "Advertised.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + result.AssertSuccess(); + + Assert.True(File.Exists(msiPath)); + var results = Query.QueryDatabase(msiPath, new[] { "AppId" }); + WixAssert.CompareLineByLine(new[] + { + "AppId:{D6040299-B15C-4C94-AE26-0C9B60D14C35}\t\t\t\t\t\t", + }, results); + } + } + } +} diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs index cacf72bdc..3f4108cbb 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs @@ -273,5 +273,52 @@ public void CanGetDuplicateTargetSourceName() }, directoryRows.Select(r => String.Join('\t', r.FieldAsString(0), r.FieldAsString(1), r.FieldAsString(2))).ToArray()); } } + + [Fact] + public void CanFindRedundantSubdirectoryInSecondSection() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, "bin", "test.msi"); + var wixpdbPath = Path.ChangeExtension(msiPath, ".wixpdb"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "Directory", "RedundantSubdirectoryInSecondSection.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + result.AssertSuccess(); + + var intermediate = Intermediate.Load(wixpdbPath); + var section = intermediate.Sections.Single(); + + var dirSymbols = section.Symbols.OfType().ToList(); + WixAssert.CompareLineByLine(new[] + { + @"dKO7wPCF.XLmq6KnqybHHgcBBqtU:ProgramFilesFolder:a\b\c", + @"ProgramFilesFolder:TARGETDIR:PFiles", + @"TARGETDIR::SourceDir" + }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).OrderBy(s => s).ToArray()); + + var data = WindowsInstallerData.Load(wixpdbPath); + var directoryRows = data.Tables["Directory"].Rows; + WixAssert.CompareLineByLine(new[] + { + @"d1nVb5_zcCwRCz7i2YXNAofGRmfc:ProgramFilesFolder:a", + @"dijlG.bNicFgvj1_DujiGg9EBGrQ:d1nVb5_zcCwRCz7i2YXNAofGRmfc:b", + @"dKO7wPCF.XLmq6KnqybHHgcBBqtU:dijlG.bNicFgvj1_DujiGg9EBGrQ:c", + "ProgramFilesFolder:TARGETDIR:PFiles", + "TARGETDIR::SourceDir" + }, directoryRows.Select(r => r.FieldAsString(0) + ":" + r.FieldAsString(1) + ":" + r.FieldAsString(2)).OrderBy(s => s).ToArray()); + } + } } } diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/EncodingFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/EncodingFixture.cs new file mode 100644 index 000000000..f02cba75e --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/EncodingFixture.cs @@ -0,0 +1,44 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolsetTest.CoreIntegration +{ + using System.IO; + using System.Linq; + using WixInternal.Core.TestPackage; + using WixInternal.TestSupport; + using WixToolset.Data; + using Xunit; + + public class EncodingFixture + { + [Fact] + public void PopulatesAppIdTableWhenAdvertised() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, @"bin", "test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "Encoding", "Encoding.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + var errors = result.Messages.Where(m => m.Level == MessageLevel.Error).Select(m => m.ToString().Replace(folder, "")).ToArray(); + WixAssert.CompareLineByLine(new[] + { + "A string was provided with characters that are not available in the specified database code page '1252'. Either change these characters to ones that exist in the database's code page, or update the database's code page by modifying one of the following attributes: Package/@Codepage, Module/@Codepage, Patch/@Codepage, or WixLocalization/@Codepage.", + "A string was provided with characters that are not available in the specified database code page '1252'. Either change these characters to ones that exist in the database's code page, or update the database's code page by modifying one of the following attributes: Package/@Codepage, Module/@Codepage, Patch/@Codepage, or WixLocalization/@Codepage.", + "A string was provided with characters that are not available in the specified database code page '1252'. Either change these characters to ones that exist in the database's code page, or update the database's code page by modifying one of the following attributes: Package/@Codepage, Module/@Codepage, Patch/@Codepage, or WixLocalization/@Codepage.", + }, errors); + } + } + } +} diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs index 7160bf73a..945e2133e 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs @@ -12,39 +12,6 @@ namespace WixToolsetTest.CoreIntegration public class MsiQueryFixture { - [Fact] - public void PopulatesAppIdTableWhenAdvertised() - { - var folder = TestData.Get(@"TestData"); - - using (var fs = new DisposableFileSystem()) - { - var baseFolder = fs.GetFolder(); - var intermediateFolder = Path.Combine(baseFolder, "obj"); - var msiPath = Path.Combine(baseFolder, @"bin\test.msi"); - - var result = WixRunner.Execute(new[] - { - "build", - Path.Combine(folder, "AppId", "Advertised.wxs"), - Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"), - Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), - "-bindpath", Path.Combine(folder, "SingleFile", "data"), - "-intermediateFolder", intermediateFolder, - "-o", msiPath - }); - - result.AssertSuccess(); - - Assert.True(File.Exists(msiPath)); - var results = Query.QueryDatabase(msiPath, new[] { "AppId" }); - WixAssert.CompareLineByLine(new[] - { - "AppId:{D6040299-B15C-4C94-AE26-0C9B60D14C35}\t\t\t\t\t\t", - }, results); - } - } - [Fact] public void PopulatesAppSearchTablesFromComponentSearch() { diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AppId/TopLevelAppId.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AppId/TopLevelAppId.wxs new file mode 100644 index 000000000..25c0f1763 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AppId/TopLevelAppId.wxs @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Directory/RedundantSubdirectoryInSecondSection.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Directory/RedundantSubdirectoryInSecondSection.wxs new file mode 100644 index 000000000..fc73ee474 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Directory/RedundantSubdirectoryInSecondSection.wxs @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Encoding/Encoding.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Encoding/Encoding.wxs new file mode 100644 index 000000000..94ca33b32 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Encoding/Encoding.wxs @@ -0,0 +1,14 @@ + + + + + + + + + + + + + +