From b90df7de3d79cafc1d8daab413ae25e88728c00d Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Fri, 27 Oct 2023 16:14:56 +0200 Subject: [PATCH 01/23] v119 patches --- ...Plus-add-blocking-in-service-workers.patch | 40 +- .../00Add-a-flag-to-disable-GamePad-API.patch | 6 +- .../00Add-option-to-disable-snapshots.patch | 42 +- .../00Add-setting-to-clear-data-on-exit.patch | 66 +- ...d-setting-to-invert-tap-and-long-tap.patch | 54 +- build/patches/00Add-support-to-jxl.patch | 205 +- ...ays-open-browser-controls-in-new-tab.patch | 6 +- ...ORS-Preflight-Cache-on-clearing-data.patch | 2 +- ...ress-libchrome-to-free-up-some-space.patch | 2 +- build/patches/00Cromite-Branding.patch | 12 +- ...0Deprecate-Data-URL-in-SVGUseElement.patch | 4 +- .../patches/00Disable-BackForwardCache.patch | 2 +- .../patches/00Disable-Component-Updates.patch | 2 +- ...ble-Compression-Dictionary-Transport.patch | 4 +- ...-FirstPartySets-and-StorageAccessAPI.patch | 36 +- build/patches/00Disable-GSA-by-default.patch | 12 +- ...0Disable-GetInstalledRelatedApps-API.patch | 6 +- .../00Disable-PartnerCustomizations.patch | 2 +- .../00Disable-PrivateStateTokens-API.patch | 2 +- .../00Disable-SHA1-Server-Signature.patch | 2 +- build/patches/00Disable-WebGPU.patch | 2 +- ...ers-reduced-transparency-media-query.patch | 2 +- ...e-privacy-issues-in-password-manager.patch | 14 +- ...ble-remote-altsvc-for-h3-connections.patch | 4 +- ...isable-speechSynthesis-getVoices-API.patch | 10 +- .../00Disable-visited-pseudo-class.patch | 2 +- ...sallowing-MIDI-permission-by-default.patch | 2 +- ...ndroid-Dynamic-Performance-Framework.patch | 8 +- ...le-Document-Open-Inheritance-Removal.patch | 4 +- ...0Enable-ImprovedBookmarks-by-default.patch | 4 +- ...ct-the-entire-FrameTree-like-desktop.patch | 20 +- ...ix-eyeo-Browser-Ad-filtering-patches.patch | 129 - .../00Fonts-fingerprinting-mitigation.patch | 50 +- ...00Keep-Side-Panel-Companion-disabled.patch | 4 +- .../00Keep-disabled-FetchLaterAPI.patch | 2 +- .../patches/00Keyboard-protection-flag.patch | 8 +- .../00Lock-Profile-Cookie-Database.patch | 6 +- ...ing-attributes-in-some-html-elements.patch | 20 +- .../00Partition-HSTS-cache-by-NAK.patch | 76 +- ...ning-all-cookies-by-top-frame-domain.patch | 67 +- ...0Remove-GoogleAccountsPrivateApiHost.patch | 4 +- ...0Remove-detection-of-captive-portals.patch | 10 +- ...t-for-device-memory-and-cpu-recovery.patch | 2 +- .../00Restore-LastTabStandingTracker.patch | 10 +- ...Show-warnings-on-downloads-over-HTTP.patch | 2 +- ...-Add-a-log-to-track-strange-behavior.patch | 2 +- ...Add-some-prefs-to-secure-preferences.patch | 2 +- .../00WIN-Disable-TabHoverCard-images.patch | 2 +- build/patches/00WIN-Disable-sharing-hub.patch | 4 +- ...able-Network-Service-Sandbox-and-CIG.patch | 2 +- build/patches/00WIN-Fix-log-to-file.patch | 22 +- build/patches/00WIN-enable-pdf-plugin.patch | 2 +- ...message-for-unsupported-hardware-aes.patch | 20 +- build/patches/00add-browser-policy.patch | 44 +- ...ot-block-build-incompatible-profiles.patch | 16 +- .../AImageReader-CFI-crash-mitigations.patch | 16 +- .../Add-AllowUserCertificates-flag.patch | 22 +- .../Add-IsCleartextPermitted-flag.patch | 6 +- .../Add-a-proxy-configuration-page.patch | 29 +- .../Add-an-always-incognito-mode.patch | 116 +- .../Add-bookmark-import-export-actions.patch | 120 +- ...dd-custom-tab-intents-privacy-option.patch | 32 +- build/patches/Add-exit-menu-item.patch | 10 +- ...g-for-omnibox-autocomplete-filtering.patch | 6 +- .../Add-flag-for-save-data-header.patch | 10 +- ...nfigure-maximum-connections-per-host.patch | 8 +- ...ontrol-video-playback-resume-feature.patch | 10 +- .../Add-flag-to-disable-IPv6-probes.patch | 16 +- ...-to-disable-external-intent-requests.patch | 6 +- .../Add-flag-to-disable-vibration.patch | 22 +- ...-switch-for-unsupported-clangd-flags.patch | 2 +- ...Add-lifetime-options-for-permissions.patch | 125 +- .../Add-menu-item-to-view-source.patch | 4 +- .../Add-option-to-force-tablet-UI.patch | 38 +- ...-to-not-persist-tabs-across-sessions.patch | 24 +- ...-support-for-ISupportHelpAndFeedback.patch | 6 +- build/patches/Add-webGL-site-setting.patch | 2 +- build/patches/Add-webRTC-site-settings.patch | 4 +- ...ow-building-without-enable_reporting.patch | 22 +- ...ow-building-without-supervised-users.patch | 10 +- .../Allow-playing-audio-in-background.patch | 4 +- ...ioBuffer-AnalyserNode-fp-mitigations.patch | 12 +- ...Block-gateway-attacks-via-websockets.patch | 6 +- .../Block-qjz9zk-or-trk-requests.patch | 4 +- .../Bromite-subresource-adblocker.patch | 40 +- ...ctionary-suggestions-for-the-Omnibox.patch | 4 +- ...ble-Accessibility-service-by-default.patch | 4 +- ...DRM-media-origin-IDs-preprovisioning.patch | 2 +- .../Disable-FLoC-and-privacy-sandbox.patch | 34 +- ...le-NTP-remote-suggestions-by-default.patch | 6 +- build/patches/Disable-PrivacyGuide.patch | 43 +- .../Disable-StartSurface-feature.patch | 4 +- build/patches/Disable-TLS-resumption.patch | 10 +- .../patches/Disable-all-predictors-code.patch | 93 +- build/patches/Disable-all-promo-dialogs.patch | 14 +- .../Disable-conversion-measurement-api.patch | 195 +- build/patches/Disable-crash-reporting.patch | 8 +- .../Disable-feeds-support-by-default.patch | 18 +- ...Disable-fetching-of-all-field-trials.patch | 18 +- build/patches/Disable-idle-detection.patch | 10 +- ...-lock-icon-in-address-bar-by-default.patch | 2 +- ...media-router-and-remoting-by-default.patch | 12 +- .../Disable-minidump-upload-scheduling.patch | 2 +- ...-omission-of-URL-elements-in-Omnibox.patch | 2 +- .../patches/Disable-plugins-enumeration.patch | 2 +- build/patches/Disable-safety-check.patch | 20 +- .../Disable-smart-selection-by-default.patch | 10 +- ...isable-some-signed-exchange-features.patch | 23 +- .../Disable-text-fragments-by-default.patch | 22 +- .../Disable-third-party-origin-trials.patch | 22 +- build/patches/Disable-update-scheduler.patch | 2 +- build/patches/Disable-various-metrics.patch | 10 +- .../Do-not-build-API-keys-infobar.patch | 2 +- .../Do-not-compile-QR-code-sharing.patch | 8 +- .../patches/Do-not-link-with-libatomic.patch | 2 +- .../Do-not-store-passwords-by-default.patch | 2 +- .../Enable-Certificate-Transparency.patch | 26 +- build/patches/Enable-ECH-by-default.patch | 2 +- build/patches/Enable-HEVC-by-default.patch | 2 +- ...ctOriginIsolation-and-SitePerProcess.patch | 8 +- ...e-darken-websites-checkbox-in-themes.patch | 4 +- ...fwrapv-in-Clang-for-non-UBSan-builds.patch | 2 +- .../Enable-native-Android-autofill.patch | 101 +- .../Enable-network-isolation-features.patch | 2 +- ...-prefetch-privacy-changes-by-default.patch | 2 +- build/patches/Enable-share-intent.patch | 38 +- ...ble-third-party-storage-partitioning.patch | 6 +- .../Experimental-user-scripts-support.patch | 67 +- .../Follow-only-system-dark-mode.patch | 2 +- .../Guard-for-user-agent-reduction.patch | 4 +- ...story-number-of-days-privacy-setting.patch | 28 +- ...number-of-autocomplete-matches-to-10.patch | 2 +- ...ripts-for-AMP-tracking-ads-and-video.patch | 14 +- build/patches/JIT-site-settings.patch | 2 +- ...-allow-screenshots-in-Incognito-mode.patch | 2 +- build/patches/Logcat-crash-reports-UI.patch | 4 +- .../patches/Modify-default-preferences.patch | 28 +- ...nt-settings-back-to-privacy-settings.patch | 24 +- .../Multiple-fingerprinting-mitigations.patch | 54 +- .../Partition-Blink-memory-cache.patch | 18 +- ...-modal-dialog-flag-to-close-all-tabs.patch | 20 +- ...e-introduce-override_build_timestamp.patch | 4 +- ...ders-in-DoH-requests-to-bare-minimum.patch | 6 +- ...referrals-in-cross-origin-navigation.patch | 32 +- .../Remove-binary-blob-integrations.patch | 240 +- .../Remove-navigator.connection-info.patch | 2 +- ...Remove-voice-recognition-integration.patch | 82 +- ...ndow-name-on-cross-origin-navigation.patch | 4 +- .../Restore-Search-Ready-Omnibox-flag.patch | 24 +- .../Restore-Simplified-NTP-launch.patch | 34 +- ...-button-in-top-toolbar-customization.patch | 16 +- .../Restore-offline-indicator-v2-flag.patch | 24 +- ...Delete-block-external-form-redirects.patch | 12 +- ...emove-disable-pull-to-refresh-effect.patch | 10 +- ...vert-flags-remove-num-raster-threads.patch | 10 +- ...l-of-execution-context-address-space.patch | 36 +- ...-Note-9-SDK27-crazylinker-workaround.patch | 4 +- ...tings-for-cookies-javascript-and-ads.patch | 10 +- .../Switch-to-fstack-protector-strong.patch | 10 +- build/patches/Timezone-customization.patch | 10 +- .../Use-4-tile-rows-never-show-logo.patch | 6 +- build/patches/Use-dummy-DFM-installer.patch | 2 +- .../Viewport-Protection-Site-Setting.patch | 4 +- build/patches/Viewport-Protection-flag.patch | 30 +- build/patches/bromite-build-utils.patch | 18 +- ...build-remove-calling-untrusted-hooks.patch | 10 +- .../do-not-add-suffix-to-package-name.patch | 2 +- .../enable-ftrivial-auto-var-init-zero.patch | 2 +- ...eyeo-beta-118.0.5993.48-android_api.patch} | 5952 +-- ...beta-118.0.5993.48-android_settings.patch} | 797 +- ...tch => eyeo-beta-118.0.5993.48-base.patch} | 40857 ++++++++-------- ...ta-118.0.5993.48-chrome_integration.patch} | 2269 +- ...eo-beta-118.0.5993.48-extension_api.patch} | 250 +- .../kill-Location-fall-back-to-system.patch | 2 +- build/patches/kill-Vision.patch | 4 +- ...always-prompt-for-download-directory.patch | 2 +- .../ungoogled-chromium-Disable-Gaia.patch | 4 +- ...gled-chromium-Disable-profile-avatar.patch | 4 +- ...romium-Disable-translate-integration.patch | 39 +- ...chromium-Disable-webRTC-log-uploader.patch | 2 +- ...ed-chromium-no-special-hosts-domains.patch | 84 +- ...RTC-do-not-expose-local-IP-addresses.patch | 6 +- ...iew-Hard-no-to-persistent-histograms.patch | 2 +- 183 files changed, 27397 insertions(+), 26406 deletions(-) delete mode 100644 build/patches/00Fix-eyeo-Browser-Ad-filtering-patches.patch rename build/patches/{eyeo-117.0.5938.0-android_api.patch => eyeo-beta-118.0.5993.48-android_api.patch} (57%) rename build/patches/{eyeo-117.0.5938.0-android_settings.patch => eyeo-beta-118.0.5993.48-android_settings.patch} (97%) rename build/patches/{eyeo-117.0.5938.0-base.patch => eyeo-beta-118.0.5993.48-base.patch} (88%) rename build/patches/{eyeo-117.0.5938.0-chrome_integration.patch => eyeo-beta-118.0.5993.48-chrome_integration.patch} (79%) rename build/patches/{eyeo-117.0.5938.0-extension_api.patch => eyeo-beta-118.0.5993.48-extension_api.patch} (96%) diff --git a/build/patches/00AdblockPlus-add-blocking-in-service-workers.patch b/build/patches/00AdblockPlus-add-blocking-in-service-workers.patch index 00fe8838..d37667d5 100644 --- a/build/patches/00AdblockPlus-add-blocking-in-service-workers.patch +++ b/build/patches/00AdblockPlus-add-blocking-in-service-workers.patch @@ -22,7 +22,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/browser/adblock/adblock_content_browser_client.cc --- a/chrome/browser/adblock/adblock_content_browser_client.cc +++ b/chrome/browser/adblock/adblock_content_browser_client.cc -@@ -45,6 +45,7 @@ +@@ -43,6 +43,7 @@ #include "content/public/browser/web_contents.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "services/network/public/mojom/websocket.mojom.h" @@ -30,7 +30,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b #include "services/service_manager/public/cpp/binder_registry.h" #include "third_party/blink/public/common/loader/url_loader_throttle.h" -@@ -58,6 +59,29 @@ +@@ -56,6 +57,29 @@ namespace { @@ -60,7 +60,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b bool IsFilteringNeeded(content::RenderFrameHost* frame) { if (frame) { auto* profile = -@@ -65,17 +89,7 @@ bool IsFilteringNeeded(content::RenderFrameHost* frame) { +@@ -63,17 +87,7 @@ bool IsFilteringNeeded(content::RenderFrameHost* frame) { if (profile) { content::RenderFrameHost* embedder = frame->GetOutermostMainFrameOrEmbedder(); const auto& embedder_url = embedder->GetLastCommittedURL(); @@ -79,7 +79,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b } } return false; -@@ -90,6 +104,8 @@ class AdblockContextData : public base::SupportsUserData::Data { +@@ -88,6 +102,8 @@ class AdblockContextData : public base::SupportsUserData::Data { static void StartProxying( Profile* profile, @@ -88,7 +88,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b content::RenderFrameHost* frame, int render_process_id, mojo::PendingReceiver receiver, -@@ -102,8 +118,6 @@ class AdblockContextData : public base::SupportsUserData::Data { +@@ -100,8 +116,6 @@ class AdblockContextData : public base::SupportsUserData::Data { self = new AdblockContextData(); profile->SetUserData(kAdblockContextUserDataKey, base::WrapUnique(self)); } @@ -97,7 +97,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b adblock::AdblockURLLoaderFactoryConfig config{ adblock::SubscriptionServiceFactory::GetForBrowserContext( browser_context), -@@ -115,8 +129,9 @@ class AdblockContextData : public base::SupportsUserData::Data { +@@ -113,8 +127,9 @@ class AdblockContextData : public base::SupportsUserData::Data { browser_context)}; auto proxy = std::make_unique( std::move(config), @@ -108,7 +108,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b std::move(receiver), std::move(target_factory), embedder_support::GetUserAgent(), base::BindOnce(&AdblockContextData::RemoveProxy, -@@ -157,47 +172,50 @@ void AdblockContentBrowserClient::ForceAdblockProxyForTesting() { +@@ -155,47 +170,50 @@ void AdblockContentBrowserClient::ForceAdblockProxyForTesting() { #endif bool AdblockContentBrowserClient::WillInterceptWebSocket( @@ -176,7 +176,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b auto* subscription_service = adblock::SubscriptionServiceFactory::GetForBrowserContext( browser_context); -@@ -205,33 +223,33 @@ void AdblockContentBrowserClient::CreateWebSocketInternal( +@@ -203,33 +221,33 @@ void AdblockContentBrowserClient::CreateWebSocketInternal( adblock::ResourceClassificationRunnerFactory::GetForBrowserContext( browser_context); classification_runner->CheckRequestFilterMatchForWebSocket( @@ -218,7 +218,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b std::move(handshake_client)); return; } -@@ -248,6 +266,72 @@ void AdblockContentBrowserClient::OnWebSocketFilterCheckCompleted( +@@ -246,6 +264,72 @@ void AdblockContentBrowserClient::OnWebSocketFilterCheckCompleted( VLOG(1) << "[eyeo] Web socket blocked for " << url; } @@ -291,7 +291,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( content::BrowserContext* browser_context, content::RenderFrameHost* frame, -@@ -271,24 +355,12 @@ bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( +@@ -269,24 +353,12 @@ bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( navigation_id, ukm_source_id, factory_receiver, header_client, bypass_redirect_checks, disable_secure_dns, factory_override, navigation_response_task_runner); @@ -320,7 +320,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b bool use_test_loader = false; #ifdef EYEO_INTERCEPT_DEBUG_URL -@@ -307,7 +379,7 @@ bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( +@@ -305,7 +377,7 @@ bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( mojo::PendingRemote target_factory_remote; *factory_receiver = target_factory_remote.InitWithNewPipeAndPassReceiver(); AdblockContextData::StartProxying( @@ -401,7 +401,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.h b/chrome/br diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -6300,7 +6300,9 @@ ChromeContentBrowserClient:: +@@ -6330,7 +6330,9 @@ ChromeContentBrowserClient:: } bool ChromeContentBrowserClient::WillInterceptWebSocket( @@ -412,7 +412,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch #if BUILDFLAG(ENABLE_EXTENSIONS) if (!frame) { return false; -@@ -6321,9 +6323,11 @@ bool ChromeContentBrowserClient::WillInterceptWebSocket( +@@ -6351,9 +6353,11 @@ bool ChromeContentBrowserClient::WillInterceptWebSocket( } void ChromeContentBrowserClient::CreateWebSocket( @@ -427,7 +427,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h --- a/chrome/browser/chrome_content_browser_client.h +++ b/chrome/browser/chrome_content_browser_client.h -@@ -617,11 +617,15 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { +@@ -624,11 +624,15 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { CreateURLLoaderHandlerForServiceWorkerNavigationPreload( int frame_tree_node_id, const network::ResourceRequest& resource_request) override; @@ -495,7 +495,7 @@ diff --git a/components/adblock/content/browser/adblock_url_loader_factory.h b/c namespace adblock { -@@ -49,6 +50,7 @@ class AdblockURLLoaderFactory : public network::mojom::URLLoaderFactory { +@@ -57,6 +58,7 @@ class AdblockURLLoaderFactory : public network::mojom::URLLoaderFactory { AdblockURLLoaderFactory( AdblockURLLoaderFactoryConfig config, @@ -503,7 +503,7 @@ diff --git a/components/adblock/content/browser/adblock_url_loader_factory.h b/c content::GlobalRenderFrameHostId host_id, mojo::PendingReceiver receiver, mojo::PendingRemote target_factory, -@@ -78,6 +80,7 @@ class AdblockURLLoaderFactory : public network::mojom::URLLoaderFactory { +@@ -86,6 +88,7 @@ class AdblockURLLoaderFactory : public network::mojom::URLLoaderFactory { void MaybeDestroySelf(); AdblockURLLoaderFactoryConfig config_; @@ -683,7 +683,7 @@ diff --git a/content/browser/websockets/websocket_connector_impl.cc b/content/br diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc --- a/content/public/browser/content_browser_client.cc +++ b/content/public/browser/content_browser_client.cc -@@ -985,7 +985,7 @@ bool ContentBrowserClient::WillCreateURLLoaderFactory( +@@ -998,7 +998,7 @@ bool ContentBrowserClient::WillCreateURLLoaderFactory( return false; } @@ -692,7 +692,7 @@ diff --git a/content/public/browser/content_browser_client.cc b/content/public/b return false; } -@@ -994,9 +994,11 @@ uint32_t ContentBrowserClient::GetWebSocketOptions(RenderFrameHost* frame) { +@@ -1007,9 +1007,11 @@ uint32_t ContentBrowserClient::GetWebSocketOptions(RenderFrameHost* frame) { } void ContentBrowserClient::CreateWebSocket( @@ -707,7 +707,7 @@ diff --git a/content/public/browser/content_browser_client.cc b/content/public/b diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h --- a/content/public/browser/content_browser_client.h +++ b/content/public/browser/content_browser_client.h -@@ -1764,7 +1764,7 @@ class CONTENT_EXPORT ContentBrowserClient { +@@ -1791,7 +1791,7 @@ class CONTENT_EXPORT ContentBrowserClient { scoped_refptr navigation_response_task_runner); // Returns true when the embedder wants to intercept a websocket connection. @@ -716,7 +716,7 @@ diff --git a/content/public/browser/content_browser_client.h b/content/public/br // Returns the WebSocket creation options. virtual uint32_t GetWebSocketOptions(RenderFrameHost* frame); -@@ -1786,9 +1786,11 @@ class CONTENT_EXPORT ContentBrowserClient { +@@ -1813,9 +1813,11 @@ class CONTENT_EXPORT ContentBrowserClient { // Always called on the UI thread and only when the Network Service is // enabled. virtual void CreateWebSocket( diff --git a/build/patches/00Add-a-flag-to-disable-GamePad-API.patch b/build/patches/00Add-a-flag-to-disable-GamePad-API.patch index 6c1bf029..34e5d812 100644 --- a/build/patches/00Add-a-flag-to-disable-GamePad-API.patch +++ b/build/patches/00Add-a-flag-to-disable-GamePad-API.patch @@ -14,7 +14,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -7205,9 +7205,9 @@ +@@ -7331,9 +7331,9 @@ "expiry_milestone": 121 }, { @@ -29,7 +29,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -3051,7 +3051,7 @@ const char kReduceAcceptLanguageDescription[] = +@@ -3071,7 +3071,7 @@ const char kReduceAcceptLanguageDescription[] = const char kRestrictGamepadAccessName[] = "Restrict gamepad access"; const char kRestrictGamepadAccessDescription[] = @@ -66,7 +66,7 @@ diff --git a/third_party/blink/renderer/modules/gamepad/navigator_gamepad.cc b/t if (!navigator.DomWindow()) { // Using an existing NavigatorGamepad if one exists, but don't create one // for a detached window, as its subclasses depend on a non-null window. -@@ -430,6 +434,8 @@ void NavigatorGamepad::SampleAndCompareGamepadState() { +@@ -435,6 +439,8 @@ void NavigatorGamepad::SampleAndCompareGamepadState() { void NavigatorGamepad::DispatchGamepadEvent(const AtomicString& event_name, Gamepad* gamepad) { diff --git a/build/patches/00Add-option-to-disable-snapshots.patch b/build/patches/00Add-option-to-disable-snapshots.patch index 3e418d7f..e9435194 100644 --- a/build/patches/00Add-option-to-disable-snapshots.patch +++ b/build/patches/00Add-option-to-disable-snapshots.patch @@ -16,9 +16,9 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java -@@ -294,8 +294,12 @@ class TabGridViewBinder { - updateThumbnailMatrix(thumbnail, result, thumbnailSize); - thumbnail.setImageBitmap(result); +@@ -288,8 +288,12 @@ class TabGridViewBinder { + // Adjust bitmap to thumbnail. + TabUtils.setBitmapAndUpdateImageMatrix(thumbnail, result, thumbnailSize); } else if (isMostRecentRequest) { - // If the most recent request is a null bitmap ensure a placeholder is visible. - thumbnail.setImageDrawable(null); @@ -31,7 +31,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } }; if (sThumbnailFetcherForTesting != null) { -@@ -370,6 +374,7 @@ class TabGridViewBinder { +@@ -325,6 +329,7 @@ class TabGridViewBinder { */ private static void setFavicon(ViewLookupCachingFrameLayout rootView, PropertyModel model, TabListFaviconProvider.TabFavicon favicon) { @@ -67,7 +67,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -88,6 +88,11 @@ found in the LICENSE file. +@@ -94,6 +94,11 @@ found in the LICENSE file. android:title="@string/open_external_links_incognito_title" android:summary="@string/open_external_links_incognito_summary" android:defaultValue="false" /> @@ -82,7 +82,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -147,6 +147,7 @@ import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; +@@ -142,6 +142,7 @@ import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.printing.TabPrinter; @@ -90,7 +90,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.readaloud.ReadAloudController; import org.chromium.chrome.browser.selection.SelectionPopupBackPressHandler; -@@ -657,7 +658,7 @@ public abstract class ChromeActivity +@@ -658,7 +659,7 @@ public abstract class ChromeActivity TabModelSelector tabModelSelector = mTabModelOrchestrator.getTabModelSelector(); setTabContentManager(new TabContentManager(this, mBrowserControlsManagerSupplier.get(), @@ -102,7 +102,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java -@@ -324,9 +324,12 @@ public class TabContentManager { +@@ -344,9 +344,12 @@ public class TabContentManager { * @param forceUpdate Whether to obtain the thumbnail from the live content. * @param writeBack When {@code forceUpdate}, whether to write the thumbnail to cache. */ @@ -115,12 +115,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo + return; + } - // TODO(crbug/1444782): Remove forceUpdate and writeBack params from here and don't - // trigger a captureThumbnail. This should be feasible once the + // TODO(crbug/1444782): Remove forceUpdate and writeBack params once the following features + // launch: diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -69,6 +69,11 @@ import org.chromium.chrome.browser.preferences.SharedPreferencesManager; +@@ -65,6 +65,11 @@ import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate; @@ -132,12 +132,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting import java.util.ArrayList; import java.util.List; -@@ -77,7 +82,15 @@ import java.util.List; +@@ -72,7 +77,15 @@ import java.util.List; + * Fragment to keep track of the all the privacy related preferences. */ - public class PrivacySettings extends PreferenceFragmentCompat - implements Preference.OnPreferenceChangeListener, FragmentHelpAndFeedbackLauncher, -- ProfileDependentSetting { -+ ProfileDependentSetting, INeedSnackbarManager { + public class PrivacySettings +- extends ChromeBaseSettingsFragment implements Preference.OnPreferenceChangeListener { ++ extends ChromeBaseSettingsFragment implements Preference.OnPreferenceChangeListener, INeedSnackbarManager { + private SnackbarManager mSnackbarManager; + private Snackbar mSnackbar; + @@ -149,7 +149,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment"; private static final String PREF_PRELOAD_PAGES = "preload_pages"; private static final String PREF_HTTPS_FIRST_MODE = "https_first_mode"; -@@ -145,6 +158,21 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -139,6 +152,21 @@ public class PrivacySettings } } @@ -171,7 +171,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting Preference privacyGuidePreference = findPreference(PREF_PRIVACY_GUIDE); // Record the launch of PG from the S&P link-row entry point privacyGuidePreference.setOnPreferenceClickListener(preference -> { -@@ -293,6 +321,7 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -294,6 +322,7 @@ public class PrivacySettings public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents"; public static final String PREF_OPEN_EXTERNAL_LINKS_INCOGNITO = "open_external_links_incognito"; @@ -179,7 +179,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting @Override public boolean onPreferenceChange(Preference preference, Object newValue) { -@@ -316,6 +345,13 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -319,6 +348,13 @@ public class PrivacySettings SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit(); sharedPreferencesEditor.putBoolean(PREF_OPEN_EXTERNAL_LINKS_INCOGNITO, (boolean)newValue); sharedPreferencesEditor.apply(); @@ -193,7 +193,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting } return true; } -@@ -356,6 +392,10 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -360,6 +396,10 @@ public class PrivacySettings : R.string.text_off); } @@ -207,7 +207,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -5407,6 +5407,14 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

%1$swww.amazon.com timer ran out. It'll start again tomorrow. diff --git a/build/patches/00Add-setting-to-clear-data-on-exit.patch b/build/patches/00Add-setting-to-clear-data-on-exit.patch index c36926c2..1f553ff7 100644 --- a/build/patches/00Add-setting-to-clear-data-on-exit.patch +++ b/build/patches/00Add-setting-to-clear-data-on-exit.patch @@ -34,7 +34,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -302,6 +302,7 @@ chrome_java_sources = [ +@@ -303,6 +303,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAdvanced.java", "java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentBasic.java", "java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataTabsFragment.java", @@ -45,7 +45,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -141,6 +141,7 @@ import org.chromium.chrome.browser.profiles.ProfileManager; +@@ -146,6 +146,7 @@ import org.chromium.chrome.browser.profiles.ProfileManager; import org.chromium.chrome.browser.quick_delete.QuickDeleteController; import org.chromium.chrome.browser.quick_delete.QuickDeleteDelegateImpl; import org.chromium.chrome.browser.quick_delete.QuickDeleteMetricsDelegate; @@ -53,7 +53,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.read_later.ReadingListBackPressHandler; import org.chromium.chrome.browser.read_later.ReadingListUtils; import org.chromium.chrome.browser.reengagement.ReengagementNotificationController; -@@ -1257,7 +1258,11 @@ public class ChromeTabbedActivity extends ChromeActivity Clear browsing data @@ -484,7 +484,7 @@ diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1609,6 +1609,9 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1635,6 +1635,9 @@ Your Google account may have other forms of browsing history like searches and a Basic @@ -497,7 +497,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc -@@ -1568,6 +1568,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, +@@ -1584,6 +1584,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, {"clearedData", IDS_SETTINGS_CLEARED_DATA}, {"clearBrowsingData", IDS_SETTINGS_CLEAR_BROWSING_DATA}, {"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION}, @@ -508,30 +508,30 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide diff --git a/components/browsing_data/core/browsing_data_policies_utils.cc b/components/browsing_data/core/browsing_data_policies_utils.cc --- a/components/browsing_data/core/browsing_data_policies_utils.cc +++ b/components/browsing_data/core/browsing_data_policies_utils.cc -@@ -19,15 +19,15 @@ namespace browsing_data { +@@ -21,15 +21,15 @@ namespace { namespace policy_data_types { // Data retention policy types that require sync to be disabled. --const char kBrowsingHistoryName[] = "browsing_history"; --const char kPasswordSigninName[] = "password_signin"; --const char kAutofillName[] = "autofill"; --const char kSiteSettingsName[] = "site_settings"; -+extern const char kBrowsingHistoryName[] = "browsing_history"; -+extern const char kPasswordSigninName[] = "password_signin"; -+extern const char kAutofillName[] = "autofill"; -+extern const char kSiteSettingsName[] = "site_settings"; +-constexpr char kBrowsingHistoryName[] = "browsing_history"; +-constexpr char kPasswordSigninName[] = "password_signin"; +-constexpr char kAutofillName[] = "autofill"; +-constexpr char kSiteSettingsName[] = "site_settings"; ++extern constexpr char kBrowsingHistoryName[] = "browsing_history"; ++extern constexpr char kPasswordSigninName[] = "password_signin"; ++extern constexpr char kAutofillName[] = "autofill"; ++extern constexpr char kSiteSettingsName[] = "site_settings"; // Data retention policy types that do not require sync to be disabled. --const char kHostedAppDataName[] = "hosted_app_data"; --const char kDownloadHistoryName[] = "download_history"; --const char kCookiesAndOtherSiteDataName[] = "cookies_and_other_site_data"; --const char kCachedImagesAndFilesName[] = "cached_images_and_files"; -+extern const char kHostedAppDataName[] = "hosted_app_data"; -+extern const char kDownloadHistoryName[] = "download_history"; -+extern const char kCookiesAndOtherSiteDataName[] = "cookies_and_other_site_data"; -+extern const char kCachedImagesAndFilesName[] = "cached_images_and_files"; +-constexpr char kHostedAppDataName[] = "hosted_app_data"; +-constexpr char kDownloadHistoryName[] = "download_history"; +-constexpr char kCookiesAndOtherSiteDataName[] = "cookies_and_other_site_data"; +-constexpr char kCachedImagesAndFilesName[] = "cached_images_and_files"; ++extern constexpr char kHostedAppDataName[] = "hosted_app_data"; ++extern constexpr char kDownloadHistoryName[] = "download_history"; ++extern constexpr char kCookiesAndOtherSiteDataName[] = "cookies_and_other_site_data"; ++extern constexpr char kCachedImagesAndFilesName[] = "cached_images_and_files"; } // namespace policy_data_types - namespace { + // The format of the log message shown in chrome://policy/logs when sync types diff --git a/components/browsing_data/core/browsing_data_policies_utils.h b/components/browsing_data/core/browsing_data_policies_utils.h --- a/components/browsing_data/core/browsing_data_policies_utils.h +++ b/components/browsing_data/core/browsing_data_policies_utils.h diff --git a/build/patches/00Add-setting-to-invert-tap-and-long-tap.patch b/build/patches/00Add-setting-to-invert-tap-and-long-tap.patch index 92c9e378..630fd877 100644 --- a/build/patches/00Add-setting-to-invert-tap-and-long-tap.patch +++ b/build/patches/00Add-setting-to-invert-tap-and-long-tap.patch @@ -47,7 +47,7 @@ diff --git a/chrome/android/java/res/values/ids.xml b/chrome/android/java/res/va diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java -@@ -130,6 +130,24 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting +@@ -164,6 +164,24 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting mSnackbarManager.showSnackbar(mSnackbar); } @@ -127,7 +127,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java -@@ -249,6 +249,14 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { +@@ -247,6 +247,14 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { mTab.loadUrl(loadUrlParams); } @@ -145,7 +145,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextM diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -8144,6 +8144,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -8404,6 +8404,11 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kElasticOverscroll)}, #endif @@ -172,7 +172,7 @@ diff --git a/chrome/browser/contextmenu/java/src/org/chromium/chrome/browser/con diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -2019,6 +2019,10 @@ const char kMoveTopToolbarToBottomName[] = "Move top toolbar to bottom"; +@@ -2051,6 +2051,10 @@ const char kMoveTopToolbarToBottomName[] = "Move top toolbar to bottom"; const char kMoveTopToolbarToBottomDescription[] = "Move the top toolbar to the bottom."; @@ -186,7 +186,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1143,6 +1143,9 @@ extern const char kImprovedKeyboardShortcutsDescription[]; +@@ -1162,6 +1162,9 @@ extern const char kImprovedKeyboardShortcutsDescription[]; extern const char kMoveTopToolbarToBottomName[]; extern const char kMoveTopToolbarToBottomDescription[]; @@ -199,7 +199,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -326,6 +326,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -331,6 +331,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kTabDragDropAndroid, &kTabAndLinkDragDropAndroid, &kTabEngagementReportingAndroid, @@ -210,7 +210,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -329,6 +329,8 @@ public abstract class ChromeFeatureList { +@@ -330,6 +330,8 @@ public abstract class ChromeFeatureList { public static final String NEW_TAB_SEARCH_ENGINE_URL_ANDROID = "NewTabSearchEngineUrlAndroid"; public static final String MOVE_TOP_TOOLBAR_TO_BOTTOM = "MoveTopToolbarToBottom"; @@ -219,16 +219,16 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant"; public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = "NotificationPermissionBottomSheet"; -@@ -594,6 +596,8 @@ public abstract class ChromeFeatureList { +@@ -600,6 +602,8 @@ public abstract class ChromeFeatureList { new CachedFlag(OMNIBOX_MATCH_TOOLBAR_AND_STATUS_BAR_COLOR, false); public static final CachedFlag sMoveTopToolbarToBottom = new CachedFlag(MOVE_TOP_TOOLBAR_TO_BOTTOM, false); + public static final CachedFlag sShowAlwaysContextMenuOnLinks = + new CachedFlag(SHOW_ALWAYS_CONTEXT_MENU_ON_LINKS, false); public static final CachedFlag sOmniboxModernizeVisualUpdate = - new CachedFlag(OMNIBOX_MODERNIZE_VISUAL_UPDATE, false); + new CachedFlag(OMNIBOX_MODERNIZE_VISUAL_UPDATE, true); public static final CachedFlag sOptimizationGuidePushNotifications = -@@ -704,6 +708,7 @@ public abstract class ChromeFeatureList { +@@ -723,6 +727,7 @@ public abstract class ChromeFeatureList { sTabStripRedesign, sTabStripStartupRefactoring, sTabletToolbarReordering, @@ -239,7 +239,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1804,6 +1804,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1839,6 +1839,12 @@ Your Google account may have other forms of browsing history like searches and a Move toolbar to bottom @@ -252,7 +252,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro -@@ -2853,6 +2859,9 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

Open in new Chrome tab @@ -265,7 +265,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml --- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml +++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml -@@ -26,6 +26,11 @@ found in the LICENSE file. +@@ -30,6 +30,11 @@ found in the LICENSE file. android:summary="@string/page_zoom_always_show_preference_summary" android:title="@string/page_zoom_always_show_preference_title" /> @@ -296,7 +296,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c private FontSizePrefs mFontSizePrefs; private FontSizePrefsObserver mFontSizePrefsObserver = new FontSizePrefsObserver() { -@@ -144,6 +146,12 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -140,6 +142,12 @@ public class AccessibilitySettings extends PreferenceFragmentCompat mMoveToolbarToBottomPref.setChecked(mMoveTopToolbarToBottomDelegate.isEnabled()); mMoveToolbarToBottomPref.setOnPreferenceChangeListener(this); @@ -309,7 +309,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(Settings.ACTION_CAPTIONING_SETTINGS); -@@ -206,6 +214,9 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -213,6 +221,9 @@ public class AccessibilitySettings extends PreferenceFragmentCompat } else if (PREF_MOVE_TOOLBAR_TO_BOTTOM.equals(preference.getKey())) { mMoveTopToolbarToBottomDelegate.setEnabled((Boolean) newValue); mDelegate.requestRestart(getActivity()); @@ -322,7 +322,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java -@@ -33,6 +33,8 @@ public interface AccessibilitySettingsDelegate { +@@ -49,6 +49,8 @@ public interface AccessibilitySettingsDelegate { BooleanPreferenceDelegate getMoveTopToolbarToBottomDelegate(); @@ -334,7 +334,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -235,6 +235,10 @@ BASE_FEATURE(kBackgroundResourceFetch, +@@ -241,6 +241,10 @@ BASE_FEATURE(kBackgroundResourceFetch, "BackgroundResourceFetch", base::FEATURE_DISABLED_BY_DEFAULT); @@ -348,7 +348,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h -@@ -140,6 +140,8 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kBackForwardCacheWithKeepaliveRequest); +@@ -143,6 +143,8 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kBackForwardCacheWithKeepaliveRequest); BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kBackgroundResourceFetch); @@ -386,7 +386,7 @@ diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third LocalDOMWindow* window = GetDocument().domWindow(); if (!window) { return; -@@ -509,6 +521,15 @@ void HTMLAnchorElement::NavigateToHyperlink(ResourceRequest request, +@@ -510,6 +522,15 @@ void HTMLAnchorElement::NavigateToHyperlink(ResourceRequest request, /*element=*/this, request.HasUserGesture())); } @@ -402,7 +402,7 @@ diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third Frame* target_frame = frame->Tree().FindOrCreateFrameForNavigation(frame_request, target).frame; -@@ -552,7 +573,7 @@ void HTMLAnchorElement::SetHovered(bool hovered) { +@@ -553,7 +574,7 @@ void HTMLAnchorElement::SetHovered(bool hovered) { } } @@ -411,7 +411,7 @@ diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third event.SetDefaultHandled(); LocalDOMWindow* window = GetDocument().domWindow(); -@@ -651,12 +672,12 @@ void HTMLAnchorElement::HandleClick(Event& event) { +@@ -652,12 +673,12 @@ void HTMLAnchorElement::HandleClick(Event& event) { } NavigationPolicy navigation_policy = NavigationPolicyFromEvent(&event); @@ -428,7 +428,7 @@ diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third // If Alt is held down it will force a download, however, wait to see if // this is an alt-double-click which should instead select the text of the // link. -@@ -668,7 +689,9 @@ void HTMLAnchorElement::HandleClick(Event& event) { +@@ -669,7 +690,9 @@ void HTMLAnchorElement::HandleClick(Event& event) { frame->GetEventHandler().SetDownloadModifierTaskHandle( std::move(task_handle)); } else { @@ -488,7 +488,7 @@ diff --git a/third_party/blink/renderer/core/html/html_image_element.cc b/third_ #include "third_party/blink/renderer/core/paint/timing/paint_timing.h" #include "third_party/blink/renderer/core/probe/core_probes.h" #include "third_party/blink/renderer/core/style/content_data.h" -@@ -757,6 +759,21 @@ void HTMLImageElement::DidFinishLifecycleUpdate( +@@ -753,6 +755,21 @@ void HTMLImageElement::DidFinishLifecycleUpdate( } } @@ -525,7 +525,7 @@ diff --git a/third_party/blink/renderer/core/html/html_image_element.h b/third_p diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/third_party/blink/renderer/core/page/context_menu_controller.cc --- a/third_party/blink/renderer/core/page/context_menu_controller.cc +++ b/third_party/blink/renderer/core/page/context_menu_controller.cc -@@ -228,14 +228,16 @@ void ContextMenuController::DocumentDetached(Document* document) { +@@ -236,14 +236,16 @@ void ContextMenuController::DocumentDetached(Document* document) { } } @@ -545,7 +545,7 @@ diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/t mouse_event->SetDefaultHandled(); } -@@ -453,7 +455,8 @@ bool ContextMenuController::ShouldShowContextMenuFromTouch( +@@ -461,7 +463,8 @@ bool ContextMenuController::ShouldShowContextMenuFromTouch( bool ContextMenuController::ShowContextMenu(LocalFrame* frame, const PhysicalOffset& point, WebMenuSourceType source_type, @@ -555,7 +555,7 @@ diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/t // Displaying the context menu in this function is a big hack as we don't // have context, i.e. whether this is being invoked via a script or in // response to user input (Mouse event WM_RBUTTONDOWN, -@@ -476,6 +479,15 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame, +@@ -484,6 +487,15 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame, if (!result.InnerNodeOrImageMapImage()) return false; @@ -571,7 +571,7 @@ diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/t // Clear any previously set cached results if we are resetting the hit test // result. image_selection_cached_result_ = nullptr; -@@ -829,11 +841,13 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame, +@@ -837,11 +849,13 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame, data.form_renderer_id = GetFormRendererId(result); data.field_renderer_id = GetFieldRendererId(result); diff --git a/build/patches/00Add-support-to-jxl.patch b/build/patches/00Add-support-to-jxl.patch index ab7c87ce..7ec3e05b 100644 --- a/build/patches/00Add-support-to-jxl.patch +++ b/build/patches/00Add-support-to-jxl.patch @@ -16,9 +16,6 @@ Enabled by default chrome/browser/flag-metadata.json | 5 + chrome/browser/flag_descriptions.cc | 7 + chrome/browser/flag_descriptions.h | 5 + - .../chrome_accept_header_browsertest.cc.rej | 48 ++ - .../network/accept_header_browsertest.cc | 1 + - .../network/accept_header_browsertest.cc.rej | 51 ++ content/common/content_constants_internal.cc | 11 +- content/common/content_constants_internal.h | 3 +- content/public/browser/frame_accept_header.cc | 13 +- @@ -62,10 +59,8 @@ Enabled by default third_party/libjxl/README.chromium | 15 + .../libjxl/gen_headers/jxl/jxl_export.h | 11 + tools/metrics/histograms/enums.xml | 3 +- - 57 files changed, 2110 insertions(+), 17 deletions(-) + 54 files changed, 2010 insertions(+), 17 deletions(-) create mode 100644 build/linux/unbundle/libjxl.gn - create mode 100644 chrome/browser/net/chrome_accept_header_browsertest.cc.rej - create mode 100644 content/browser/network/accept_header_browsertest.cc.rej create mode 100644 third_party/blink/renderer/platform/image-decoders/jxl/jxl_image_decoder.cc create mode 100644 third_party/blink/renderer/platform/image-decoders/jxl/jxl_image_decoder.h create mode 100644 third_party/blink/renderer/platform/image-decoders/jxl/jxl_image_decoder_test.cc @@ -87,7 +82,7 @@ Enabled by default diff --git a/DEPS b/DEPS --- a/DEPS +++ b/DEPS -@@ -519,6 +519,10 @@ vars = { +@@ -515,6 +515,10 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -98,7 +93,7 @@ diff --git a/DEPS b/DEPS 'highway_revision': '8f20644eca693cfb74aa795b0006b6779c370e7a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ffmpeg -@@ -1209,6 +1213,9 @@ deps = { +@@ -1205,6 +1209,9 @@ deps = { 'src/third_party/dawn': Var('dawn_git') + '/dawn.git' + '@' + Var('dawn_revision'), @@ -161,20 +156,13 @@ diff --git a/build/linux/unbundle/replace_gn_files.py b/build/linux/unbundle/rep diff --git a/cc/base/devtools_instrumentation.cc b/cc/base/devtools_instrumentation.cc --- a/cc/base/devtools_instrumentation.cc +++ b/cc/base/devtools_instrumentation.cc -@@ -73,6 +73,9 @@ ScopedImageUploadTask::~ScopedImageUploadTask() { +@@ -90,6 +90,12 @@ ScopedImageDecodeTask::~ScopedImageDecodeTask() { auto duration = base::TimeTicks::Now() - start_time_; const char* histogram_name = nullptr; switch (image_type_) { + case ImageType::kJxl: + histogram_name = "Renderer4.ImageUploadTaskDurationUs.Jxl"; + break; - case ImageType::kAvif: - histogram_name = "Renderer4.ImageUploadTaskDurationUs.Avif"; - break; -@@ -122,6 +125,9 @@ ScopedImageDecodeTask::~ScopedImageDecodeTask() { - auto duration = base::TimeTicks::Now() - start_time_; - const char* histogram_name = nullptr; - switch (image_type_) { + case ImageType::kJxl: + histogram_name = "Renderer4.ImageUploadTaskDurationUs.Jxl"; + break; @@ -220,7 +208,7 @@ diff --git a/cc/tiles/image_decode_cache.h b/cc/tiles/image_decode_cache.h diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -8656,6 +8656,12 @@ const FeatureEntry kFeatureEntries[] = { +@@ -8918,6 +8918,12 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(download::features::kSmartSuggestionForLargeDownloads)}, #endif // BUILDFLAG(IS_ANDROID) @@ -236,7 +224,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -3043,6 +3043,11 @@ +@@ -3090,6 +3090,11 @@ // This flag is used by web developers to test upcoming javascript features. "expiry_milestone": -1 }, @@ -251,7 +239,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -7605,6 +7605,13 @@ const char kDcheckIsFatalDescription[] = +@@ -7709,6 +7709,13 @@ const char kDcheckIsFatalDescription[] = "rather than crashing. If enabled, DCHECKs will crash the calling process."; #endif // BUILDFLAG(DCHECK_IS_CONFIGURABLE) @@ -268,7 +256,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -4393,6 +4393,11 @@ extern const char kDcheckIsFatalName[]; +@@ -4456,6 +4456,11 @@ extern const char kDcheckIsFatalName[]; extern const char kDcheckIsFatalDescription[]; #endif // BUILDFLAG(DCHECK_IS_CONFIGURABLE) @@ -280,126 +268,6 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio #if BUILDFLAG(ENABLE_CARDBOARD) extern const char kEnableCardboardName[]; extern const char kEnableCardboardDescription[]; -diff --git a/chrome/browser/net/chrome_accept_header_browsertest.cc.rej b/chrome/browser/net/chrome_accept_header_browsertest.cc.rej -new file mode 100644 ---- /dev/null -+++ b/chrome/browser/net/chrome_accept_header_browsertest.cc.rej -@@ -0,0 +1,48 @@ -+diff a/chrome/browser/net/chrome_accept_header_browsertest.cc b/chrome/browser/net/chrome_accept_header_browsertest.cc (rejected hunks) -+@@ -11,18 +11,26 @@ -+ #include "media/media_buildflags.h" -+ #include "net/test/embedded_test_server/http_request.h" -+ #include "third_party/blink/public/common/buildflags.h" -++#include "third_party/blink/public/common/features.h" -+ -+ using ChromeAcceptHeaderTest = InProcessBrowserTest; -+ -+-#if BUILDFLAG(ENABLE_AV1_DECODER) -++#if BUILDFLAG(ENABLE_AV1_DECODER) || BUILDFLAG(ENABLE_JXL_DECODER) -+ namespace { -+ std::string GetOptionalImageCodecs() { -+ std::string result; -++#if BUILDFLAG(ENABLE_JXL_DECODER) -++ if (base::FeatureList::IsEnabled(blink::features::kJXL)) { -++ result.append("image/jxl,"); -++ } -++#endif -++#if BUILDFLAG(ENABLE_AV1_DECODER) -+ result.append("image/avif,"); -++#endif -+ return result; -+ } -+ } // namespace -+-#endif // BUILDFLAG(ENABLE_AV1_DECODER) -++#endif // BUILDFLAG(ENABLE_AV1_DECODER) || BUILDFLAG(ENABLE_JXL_DECODER) -+ -+ IN_PROC_BROWSER_TEST_F(ChromeAcceptHeaderTest, Check) { -+ net::EmbeddedTestServer server(net::EmbeddedTestServer::TYPE_HTTP); -+@@ -55,7 +63,7 @@ -+ std::string expected_plugin_accept_header = -+ "text/html,application/xhtml+xml,application/xml;q=0.9,image/" -+ "webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"; -+-#if BUILDFLAG(ENABLE_AV1_DECODER) -++#if BUILDFLAG(ENABLE_AV1_DECODER) || BUILDFLAG(ENABLE_JXL_DECODER) -+ expected_plugin_accept_header = -+ "text/html,application/xhtml+xml,application/xml;q=0.9," + -+ GetOptionalImageCodecs() + -+@@ -66,7 +74,7 @@ -+ -+ std::string expected_favicon_accept_header = -+ "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"; -+-#if BUILDFLAG(ENABLE_AV1_DECODER) -++#if BUILDFLAG(ENABLE_AV1_DECODER) || BUILDFLAG(ENABLE_JXL_DECODER) -+ expected_favicon_accept_header = -+ GetOptionalImageCodecs() + -+ "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"; -diff --git a/content/browser/network/accept_header_browsertest.cc b/content/browser/network/accept_header_browsertest.cc ---- a/content/browser/network/accept_header_browsertest.cc -+++ b/content/browser/network/accept_header_browsertest.cc -@@ -22,6 +22,7 @@ - #include "net/test/embedded_test_server/http_request.h" - #include "ppapi/buildflags/buildflags.h" - #include "third_party/blink/public/common/buildflags.h" -+#include "third_party/blink/public/common/features.h" - #include "third_party/blink/public/mojom/manifest/manifest.mojom.h" - - #if BUILDFLAG(ENABLE_PPAPI) -diff --git a/content/browser/network/accept_header_browsertest.cc.rej b/content/browser/network/accept_header_browsertest.cc.rej -new file mode 100644 ---- /dev/null -+++ b/content/browser/network/accept_header_browsertest.cc.rej -@@ -0,0 +1,51 @@ -+diff a/content/browser/network/accept_header_browsertest.cc b/content/browser/network/accept_header_browsertest.cc (rejected hunks) -+@@ -71,13 +72,20 @@ -+ return it->second; -+ } -+ -+-#if BUILDFLAG(ENABLE_AV1_DECODER) -++#if BUILDFLAG(ENABLE_AV1_DECODER) || BUILDFLAG(ENABLE_JXL_DECODER) -+ std::string GetOptionalImageCodecs() const { -+ std::string result; -++#if BUILDFLAG(ENABLE_JXL_DECODER) -++ if (base::FeatureList::IsEnabled(blink::features::kJXL)) { -++ result.append("image/jxl,"); -++ } -++#endif -++#if BUILDFLAG(ENABLE_AV1_DECODER) -+ result.append("image/avif,"); -++#endif -+ return result; -+ } -+-#endif // BUILDFLAG(ENABLE_AV1_DECODER) -++#endif // BUILDFLAG(ENABLE_AV1_DECODER) || BUILDFLAG(ENABLE_JXL_DECODER) -+ -+ private: -+ void Monitor(const net::test_server::HttpRequest& request) { -+@@ -113,7 +121,7 @@ -+ std::string expected_main_frame_accept_header = -+ "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp," -+ "image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"; -+-#if BUILDFLAG(ENABLE_AV1_DECODER) -++#if BUILDFLAG(ENABLE_AV1_DECODER) || BUILDFLAG(ENABLE_JXL_DECODER) -+ expected_main_frame_accept_header = -+ "text/html,application/xhtml+xml,application/xml;q=0.9," + -+ GetOptionalImageCodecs() + -+@@ -126,7 +134,7 @@ -+ std::string expected_sub_frame_accept_header = -+ "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp," -+ "image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"; -+-#if BUILDFLAG(ENABLE_AV1_DECODER) -++#if BUILDFLAG(ENABLE_AV1_DECODER) || BUILDFLAG(ENABLE_JXL_DECODER) -+ expected_sub_frame_accept_header = -+ "text/html,application/xhtml+xml,application/xml;q=0.9," + -+ GetOptionalImageCodecs() + -+@@ -144,7 +152,7 @@ -+ // ResourceType::kImage -+ std::string expected_image_accept_header = -+ "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"; -+-#if BUILDFLAG(ENABLE_AV1_DECODER) -++#if BUILDFLAG(ENABLE_AV1_DECODER) || BUILDFLAG(ENABLE_JXL_DECODER) -+ expected_image_accept_header = -+ GetOptionalImageCodecs() + -+ "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"; diff --git a/content/common/content_constants_internal.cc b/content/common/content_constants_internal.cc --- a/content/common/content_constants_internal.cc +++ b/content/common/content_constants_internal.cc @@ -514,18 +382,18 @@ diff --git a/net/base/mime_util_unittest.cc b/net/base/mime_util_unittest.cc diff --git a/third_party/.gitignore b/third_party/.gitignore --- a/third_party/.gitignore +++ b/third_party/.gitignore -@@ -179,6 +179,7 @@ - /libipp/libipp +@@ -97,6 +97,7 @@ + /libgifcodec /libjingle/source - /libjpeg_turbo + /libupnp +#/libjxl/src - /liblouis/src - /libphonenumber/dist - /libprotobuf-mutator/src + /llvm + /llvm-allocated-type + /llvm-bootstrap diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -411,6 +411,9 @@ BASE_FEATURE(kCORSErrorsIssueOnly, +@@ -422,6 +422,9 @@ BASE_FEATURE(kCORSErrorsIssueOnly, "CORSErrorsIssueOnly", base::FEATURE_DISABLED_BY_DEFAULT); @@ -630,7 +498,7 @@ diff --git a/third_party/blink/public/common/BUILD.gn b/third_party/blink/public diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h -@@ -142,6 +142,8 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kBackgroundResourceFetch); +@@ -145,6 +145,8 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kBackgroundResourceFetch); BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kShowAlwaysContextMenuOnLinks); @@ -642,7 +510,7 @@ diff --git a/third_party/blink/public/common/features.h b/third_party/blink/publ diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl --- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl +++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl -@@ -4103,6 +4103,7 @@ domain Emulation +@@ -4133,6 +4133,7 @@ domain Emulation experimental type DisabledImageType extends string enum avif @@ -682,7 +550,7 @@ diff --git a/third_party/blink/renderer/core/inspector/inspector_emulation_agent header.Replace(String(type + ","), ""); } return AtomicString(header); -@@ -837,6 +837,7 @@ protocol::Response InspectorEmulationAgent::setDisabledImageTypes( +@@ -842,6 +842,7 @@ protocol::Response InspectorEmulationAgent::setDisabledImageTypes( namespace DisabledImageTypeEnum = protocol::Emulation::DisabledImageTypeEnum; for (protocol::Emulation::DisabledImageType type : *disabled_types) { if (DisabledImageTypeEnum::Avif == type || @@ -785,9 +653,9 @@ diff --git a/third_party/blink/renderer/modules/webcodecs/image_decoder_fuzzer.c #include "third_party/blink/renderer/bindings/core/v8/to_v8_traits.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_union_arraybufferallowshared_arraybufferviewallowshared_readablestream.h" -@@ -88,6 +90,9 @@ DEFINE_BINARY_PROTO_FUZZER( - // Request a full GC upon returning. - auto scoped_gc = MakeScopedGarbageCollectionRequest(); +@@ -89,6 +91,9 @@ DEFINE_BINARY_PROTO_FUZZER( + auto scoped_gc = + MakeScopedGarbageCollectionRequest(test_support.GetIsolate()); + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature(features::kJXL); @@ -798,8 +666,8 @@ diff --git a/third_party/blink/renderer/modules/webcodecs/image_decoder_fuzzer.c diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn --- a/third_party/blink/renderer/platform/BUILD.gn +++ b/third_party/blink/renderer/platform/BUILD.gn -@@ -1827,6 +1827,15 @@ component("platform") { - ] +@@ -1816,6 +1816,15 @@ component("platform") { + sources += [ "text/hyphenation/hyphenation_null.cc" ] } + if (enable_jxl_decoder) { @@ -814,8 +682,8 @@ diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/re if (current_cpu == "x86" || current_cpu == "x64") { deps += [ ":blink_x86_avx" ] sources += [ "audio/cpu/x86/delay_sse2.cc" ] -@@ -2264,6 +2273,10 @@ source_set("blink_platform_unittests_sources") { - sources += [ "image-decoders/avif/avif_image_decoder_test.cc" ] +@@ -2232,6 +2241,10 @@ source_set("blink_platform_unittests_sources") { + sources += [ "text/locale_icu_test.cc" ] } + if (enable_jxl_decoder) { @@ -825,7 +693,7 @@ diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/re sources += [ "testing/run_all_tests.cc" ] configs += [ -@@ -2306,6 +2319,7 @@ source_set("blink_platform_unittests_sources") { +@@ -2275,6 +2288,7 @@ source_set("blink_platform_unittests_sources") { "//third_party/blink/renderer/platform/scheduler:unit_tests", "//third_party/blink/renderer/platform/wtf", "//third_party/libavif:libavif", @@ -869,7 +737,7 @@ diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.c diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.h b/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.h --- a/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.h +++ b/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.h -@@ -30,8 +30,8 @@ class PLATFORM_EXPORT BitmapImageMetrics { +@@ -29,8 +29,8 @@ class PLATFORM_EXPORT BitmapImageMetrics { kICO = 5, kBMP = 6, kAVIF = 7, @@ -883,14 +751,15 @@ diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.h diff --git a/third_party/blink/renderer/platform/image-decoders/image_decoder.cc b/third_party/blink/renderer/platform/image-decoders/image_decoder.cc --- a/third_party/blink/renderer/platform/image-decoders/image_decoder.cc +++ b/third_party/blink/renderer/platform/image-decoders/image_decoder.cc -@@ -23,12 +23,14 @@ +@@ -23,6 +23,7 @@ #include #include "base/logging.h" +#include "base/feature_list.h" #include "base/numerics/safe_conversions.h" #include "base/sys_byteorder.h" - #include "build/build_config.h" + #include "base/trace_event/trace_event.h" +@@ -30,6 +31,7 @@ #include "media/media_buildflags.h" #include "skia/ext/cicp.h" #include "third_party/blink/public/common/buildflags.h" @@ -920,7 +789,7 @@ diff --git a/third_party/blink/renderer/platform/image-decoders/image_decoder.cc #endif return cc::ImageType::kInvalid; } -@@ -192,6 +202,12 @@ String SniffMimeTypeInternal(scoped_refptr reader) { +@@ -191,6 +201,12 @@ String SniffMimeTypeInternal(scoped_refptr reader) { return "image/avif"; } #endif @@ -933,7 +802,7 @@ diff --git a/third_party/blink/renderer/platform/image-decoders/image_decoder.cc return String(); } -@@ -297,6 +313,13 @@ std::unique_ptr ImageDecoder::CreateByMimeType( +@@ -296,6 +312,13 @@ std::unique_ptr ImageDecoder::CreateByMimeType( decoder = std::make_unique( alpha_option, high_bit_depth_decoding_option, color_behavior, max_decoded_bytes, animation_option); @@ -2397,7 +2266,7 @@ new file mode 100644 diff --git a/third_party/blink/tools/commit_stats/git-dirs.txt b/third_party/blink/tools/commit_stats/git-dirs.txt --- a/third_party/blink/tools/commit_stats/git-dirs.txt +++ b/third_party/blink/tools/commit_stats/git-dirs.txt -@@ -76,6 +76,7 @@ +@@ -75,6 +75,7 @@ ./third_party/angle/third_party/glmark2/src,ANGLE ./third_party/openh264/src,OpenH264 ./third_party/googletest/src,GoogleTest @@ -2408,7 +2277,7 @@ diff --git a/third_party/blink/tools/commit_stats/git-dirs.txt b/third_party/bli diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations -@@ -4744,6 +4744,12 @@ crbug.com/1199522 http/tests/devtools/layers/layers-3d-view-hit-testing.js [ Fai +@@ -4781,6 +4781,12 @@ crbug.com/1199522 http/tests/devtools/layers/layers-3d-view-hit-testing.js [ Fai # Started failing after rolling new version of check-layout-th.js css3/flexbox/perpendicular-writing-modes-inside-flex-item.html [ Failure ] @@ -2424,7 +2293,7 @@ diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/we diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites -@@ -450,6 +450,15 @@ +@@ -447,6 +447,15 @@ "--disable-threaded-compositing", "--disable-threaded-animation"], "expires": "Jul 1, 2023" }, @@ -2839,7 +2708,7 @@ new file mode 100644 diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml -@@ -26394,7 +26394,7 @@ Called by update_debug_scenarios.py.--> +@@ -26495,7 +26495,7 @@ Called by update_debug_scenarios.py.--> @@ -2848,7 +2717,7 @@ diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums -@@ -64986,6 +64986,7 @@ from previous Chrome versions. +@@ -65578,6 +65578,7 @@ from previous Chrome versions. diff --git a/build/patches/00Always-open-browser-controls-in-new-tab.patch b/build/patches/00Always-open-browser-controls-in-new-tab.patch index 2f654fa3..f57402ec 100644 --- a/build/patches/00Always-open-browser-controls-in-new-tab.patch +++ b/build/patches/00Always-open-browser-controls-in-new-tab.patch @@ -22,10 +22,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextM import org.chromium.chrome.browser.offlinepages.RequestCoordinatorBridge; import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.chrome.browser.tab.TabBrowserControlsConstraintsHelper; - import org.chromium.chrome.browser.tab.state.CriticalPersistedTabData; import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.document.TabDelegate; -@@ -204,6 +206,7 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { + import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; +@@ -202,6 +204,7 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { @Override public void onOpenInNewTab(GURL url, Referrer referrer, boolean navigateToTab, @Nullable AdditionalNavigationParams additionalNavigationParams) { @@ -33,7 +33,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextM RecordUserAction.record("MobileNewTabOpened"); RecordUserAction.record("LinkOpenedInNewTab"); LoadUrlParams loadUrlParams = new LoadUrlParams(url.getSpec()); -@@ -217,6 +220,7 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { +@@ -215,6 +218,7 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { @Override public void onOpenInNewTabInGroup(GURL url, Referrer referrer) { diff --git a/build/patches/00Clear-CORS-Preflight-Cache-on-clearing-data.patch b/build/patches/00Clear-CORS-Preflight-Cache-on-clearing-data.patch index ad8aba8d..b8817d3f 100644 --- a/build/patches/00Clear-CORS-Preflight-Cache-on-clearing-data.patch +++ b/build/patches/00Clear-CORS-Preflight-Cache-on-clearing-data.patch @@ -79,7 +79,7 @@ diff --git a/services/network/cors/preflight_result.cc b/services/network/cors/p diff --git a/services/network/network_context.cc b/services/network/network_context.cc --- a/services/network/network_context.cc +++ b/services/network/network_context.cc -@@ -1129,6 +1129,8 @@ void NetworkContext::ClearHttpCache(base::Time start_time, +@@ -1126,6 +1126,8 @@ void NetworkContext::ClearHttpCache(base::Time start_time, base::BindOnce(&NetworkContext::OnHttpCacheCleared, base::Unretained(this), std::move(callback)))); diff --git a/build/patches/00Compress-libchrome-to-free-up-some-space.patch b/build/patches/00Compress-libchrome-to-free-up-some-space.patch index 7b4ceb5d..02414353 100644 --- a/build/patches/00Compress-libchrome-to-free-up-some-space.patch +++ b/build/patches/00Compress-libchrome-to-free-up-some-space.patch @@ -13,7 +13,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni -@@ -640,6 +640,7 @@ template("chrome_common_apk_or_module_tmpl") { +@@ -635,6 +635,7 @@ template("chrome_common_apk_or_module_tmpl") { [ "//components/crash/core/app:chrome_crashpad_handler_named_as_so" ] loadable_modules += [ "$root_out_dir/libchrome_crashpad_handler.so" ] library_always_compress += [ "libchrome_crashpad_handler.so" ] diff --git a/build/patches/00Cromite-Branding.patch b/build/patches/00Cromite-Branding.patch index 45b4407c..5ef0f3fb 100644 --- a/build/patches/00Cromite-Branding.patch +++ b/build/patches/00Cromite-Branding.patch @@ -83,7 +83,7 @@ diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -170,7 +170,7 @@ by a child template that "extends" this file. +@@ -171,7 +171,7 @@ by a child template that "extends" this file. CreateProfilePrefStoreManager( +@@ -285,10 +286,7 @@ std::unique_ptr CreateProfilePrefStoreManager( #endif std::string seed; CHECK(ui::ResourceBundle::HasSharedInstance()); @@ -13158,7 +13158,7 @@ diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browse diff --git a/chrome/browser/profiles/profile_shortcut_manager_win.cc b/chrome/browser/profiles/profile_shortcut_manager_win.cc --- a/chrome/browser/profiles/profile_shortcut_manager_win.cc +++ b/chrome/browser/profiles/profile_shortcut_manager_win.cc -@@ -75,7 +75,7 @@ const int kMaxProfileShortcutFileNameLength = 64; +@@ -77,7 +77,7 @@ const int kMaxProfileShortcutFileNameLength = 64; // Incrementing this number will cause profile icons to be regenerated on // profile startup (it should be incremented whenever the product/avatar icons // change, etc). @@ -13186,7 +13186,7 @@ diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.html diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -2255,7 +2255,7 @@ Your Google account may have other forms of browsing history like searches and a +@@ -2296,7 +2296,7 @@ Your Google account may have other forms of browsing history like searches and a About Chrome @@ -13207,7 +13207,7 @@ diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc #if BUILDFLAG(IS_CHROMEOS_ASH) const char kChromeOsHelpViaWebUIURL[] = #if BUILDFLAG(GOOGLE_CHROME_BRANDING) -@@ -109,7 +109,7 @@ const char kChromeSearchScheme[] = "chrome-search"; +@@ -111,7 +111,7 @@ const char kChromeSearchScheme[] = "chrome-search"; const char kChromeUIUntrustedNewTabPageUrl[] = "chrome-untrusted://new-tab-page/"; diff --git a/build/patches/00Deprecate-Data-URL-in-SVGUseElement.patch b/build/patches/00Deprecate-Data-URL-in-SVGUseElement.patch index 5cda57e6..effbd42b 100644 --- a/build/patches/00Deprecate-Data-URL-in-SVGUseElement.patch +++ b/build/patches/00Deprecate-Data-URL-in-SVGUseElement.patch @@ -10,8 +10,8 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -3101,8 +3101,8 @@ - base_feature: "none", +@@ -3159,8 +3159,8 @@ + status: "stable", }, { - name: "RemoveDataUrlInSvgUse", diff --git a/build/patches/00Disable-BackForwardCache.patch b/build/patches/00Disable-BackForwardCache.patch index 74565de9..2e55b10a 100644 --- a/build/patches/00Disable-BackForwardCache.patch +++ b/build/patches/00Disable-BackForwardCache.patch @@ -10,7 +10,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -98,9 +98,9 @@ BASE_FEATURE(kBackgroundFetch, +@@ -65,9 +65,9 @@ BASE_FEATURE(kBackgroundFetch, base::FEATURE_ENABLED_BY_DEFAULT); // Enable using the BackForwardCache. diff --git a/build/patches/00Disable-Component-Updates.patch b/build/patches/00Disable-Component-Updates.patch index 287d1ebb..da45f4f9 100644 --- a/build/patches/00Disable-Component-Updates.patch +++ b/build/patches/00Disable-Component-Updates.patch @@ -12,7 +12,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/component_updater/registration.cc b/chrome/browser/component_updater/registration.cc --- a/chrome/browser/component_updater/registration.cc +++ b/chrome/browser/component_updater/registration.cc -@@ -100,6 +100,7 @@ +@@ -98,6 +98,7 @@ namespace component_updater { void RegisterComponentsForUpdate() { diff --git a/build/patches/00Disable-Compression-Dictionary-Transport.patch b/build/patches/00Disable-Compression-Dictionary-Transport.patch index 264b35e8..29bbb211 100644 --- a/build/patches/00Disable-Compression-Dictionary-Transport.patch +++ b/build/patches/00Disable-Compression-Dictionary-Transport.patch @@ -10,8 +10,8 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -691,16 +691,18 @@ - } +@@ -685,16 +685,18 @@ + status: "stable", }, { - name: "CompressionDictionaryTransport", diff --git a/build/patches/00Disable-FirstPartySets-and-StorageAccessAPI.patch b/build/patches/00Disable-FirstPartySets-and-StorageAccessAPI.patch index f4070594..5da4cc25 100644 --- a/build/patches/00Disable-FirstPartySets-and-StorageAccessAPI.patch +++ b/build/patches/00Disable-FirstPartySets-and-StorageAccessAPI.patch @@ -4,32 +4,52 @@ Subject: Disable FirstPartySets and StorageAccessAPI License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - components/privacy_sandbox/privacy_sandbox_prefs.cc | 2 +- - content/public/common/content_features.cc | 6 +++--- - 2 files changed, 4 insertions(+), 4 deletions(-) + components/privacy_sandbox/privacy_sandbox_prefs.cc | 2 +- + components/privacy_sandbox/tracking_protection_prefs.cc | 4 ++-- + content/public/common/content_features.cc | 6 +++--- + 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/components/privacy_sandbox/privacy_sandbox_prefs.cc b/components/privacy_sandbox/privacy_sandbox_prefs.cc --- a/components/privacy_sandbox/privacy_sandbox_prefs.cc +++ b/components/privacy_sandbox/privacy_sandbox_prefs.cc -@@ -58,7 +58,7 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { +@@ -55,7 +55,7 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { registry->RegisterBooleanPref( prefs::kPrivacySandboxFirstPartySetsDataAccessAllowedInitialized, false); registry->RegisterBooleanPref( -- prefs::kPrivacySandboxFirstPartySetsEnabled, true, -+ prefs::kPrivacySandboxFirstPartySetsEnabled, false, +- prefs::kPrivacySandboxRelatedWebsiteSetsEnabled, true, ++ prefs::kPrivacySandboxRelatedWebsiteSetsEnabled, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref(prefs::kPrivacySandboxTopicsConsentGiven, +diff --git a/components/privacy_sandbox/tracking_protection_prefs.cc b/components/privacy_sandbox/tracking_protection_prefs.cc +--- a/components/privacy_sandbox/tracking_protection_prefs.cc ++++ b/components/privacy_sandbox/tracking_protection_prefs.cc +@@ -27,13 +27,13 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { + + // Tracking Protection Settings Prefs + registry->RegisterBooleanPref( +- prefs::kBlockAll3pcToggleEnabled, false, ++ prefs::kBlockAll3pcToggleEnabled, false, // with true enables FPS + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + registry->RegisterIntegerPref( + prefs::kTrackingProtectionLevel, + static_cast(TrackingProtectionLevel::kStandard), + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); +- registry->RegisterBooleanPref(prefs::kTrackingProtection3pcdEnabled, false); ++ registry->RegisterBooleanPref(prefs::kTrackingProtection3pcdEnabled, false); // with true enables FPS + registry->RegisterBooleanPref( + prefs::kEnableDoNotTrack, false, + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -493,9 +493,9 @@ BASE_FEATURE(kWebIdentityMDocs, +@@ -405,9 +405,9 @@ BASE_FEATURE(kWebIdentityMDocs, base::FEATURE_DISABLED_BY_DEFAULT); // Enables usage of First Party Sets to determine cookie availability. -BASE_FEATURE(kFirstPartySets, - "FirstPartySets", -- base::FEATURE_DISABLED_BY_DEFAULT); +- base::FEATURE_ENABLED_BY_DEFAULT); +BASE_FEATURE(kFirstPartySets, // always + "FirstPartySets", // disabled + base::FEATURE_DISABLED_BY_DEFAULT); // in bromite diff --git a/build/patches/00Disable-GSA-by-default.patch b/build/patches/00Disable-GSA-by-default.patch index 73b459a4..2e47db49 100644 --- a/build/patches/00Disable-GSA-by-default.patch +++ b/build/patches/00Disable-GSA-by-default.patch @@ -13,15 +13,15 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java --- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java -@@ -43,7 +43,6 @@ import org.chromium.chrome.browser.document.ChromeLauncherActivity; +@@ -38,7 +38,6 @@ import org.chromium.chrome.browser.document.ChromeLauncherActivity; import org.chromium.chrome.browser.externalnav.IntentWithRequestMetadataHandler; import org.chromium.chrome.browser.externalnav.IntentWithRequestMetadataHandler.RequestMetadata; import org.chromium.chrome.browser.flags.ChromeFeatureList; -import org.chromium.chrome.browser.gsa.GSAState; - import org.chromium.chrome.browser.offlinepages.OfflinePageUtils; import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteControllerProvider; import org.chromium.chrome.browser.profiles.Profile; -@@ -270,8 +269,6 @@ public class IntentHandler { + import org.chromium.chrome.browser.renderer_host.ChromeNavigationUIData; +@@ -264,8 +263,6 @@ public class IntentHandler { private static int sReferrerId; private static String sPendingIncognitoUrl; @@ -30,7 +30,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j private static final String PACKAGE_GMAIL = "com.google.android.gm"; private static final String PACKAGE_PLUS = "com.google.android.apps.plus"; private static final String PACKAGE_HANGOUTS = "com.google.android.talk"; -@@ -491,8 +488,6 @@ public class IntentHandler { +@@ -456,8 +453,6 @@ public class IntentHandler { return ExternalAppId.LINE; } else if (packageName.equals(PACKAGE_WHATSAPP)) { return ExternalAppId.WHATSAPP; @@ -79,7 +79,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -713,8 +713,8 @@ BASE_FEATURE(kContextMenuGoogleLensSearchOptimizations, +@@ -725,8 +725,8 @@ BASE_FEATURE(kContextMenuGoogleLensSearchOptimizations, base::FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kContextMenuSearchWithGoogleLens, @@ -90,7 +90,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse BASE_FEATURE(kContextMenuShopWithGoogleLens, "ContextMenuShopWithGoogleLens", -@@ -799,8 +799,8 @@ BASE_FEATURE(kOfflineIndicatorV2, +@@ -827,8 +827,8 @@ BASE_FEATURE(kOfflineIndicatorV2, base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kExperimentsForAgsa, diff --git a/build/patches/00Disable-GetInstalledRelatedApps-API.patch b/build/patches/00Disable-GetInstalledRelatedApps-API.patch index ade8fb76..1d4fe0b8 100644 --- a/build/patches/00Disable-GetInstalledRelatedApps-API.patch +++ b/build/patches/00Disable-GetInstalledRelatedApps-API.patch @@ -35,8 +35,8 @@ diff --git a/content/browser/installedapp/installed_app_provider_impl_win.cc b/c diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -587,12 +587,12 @@ BASE_FEATURE(kInnerFrameCompositorSurfaceEviction, - base::FEATURE_ENABLED_BY_DEFAULT); // guard this +@@ -451,12 +451,12 @@ BASE_FEATURE(kGreaseUACH, "GreaseUACH", base::FEATURE_ENABLED_BY_DEFAULT); + BASE_FEATURE(kIdleDetection, "IdleDetection", base::FEATURE_DISABLED_BY_DEFAULT); // Kill switch for the GetInstalledRelatedApps API. -BASE_FEATURE(kInstalledApp, "InstalledApp", base::FEATURE_ENABLED_BY_DEFAULT); @@ -53,7 +53,7 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -2115,9 +2115,9 @@ +@@ -2139,9 +2139,9 @@ status: {"Android": "test", "default": "stable"}, }, { diff --git a/build/patches/00Disable-PartnerCustomizations.patch b/build/patches/00Disable-PartnerCustomizations.patch index 02373a7d..5783c953 100644 --- a/build/patches/00Disable-PartnerCustomizations.patch +++ b/build/patches/00Disable-PartnerCustomizations.patch @@ -11,7 +11,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -912,8 +912,8 @@ BASE_FEATURE(kOpaqueOriginForIncomingIntents, +@@ -936,8 +936,8 @@ BASE_FEATURE(kOmniboxWarmRecycledViewPool, base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kPartnerCustomizationsUma, diff --git a/build/patches/00Disable-PrivateStateTokens-API.patch b/build/patches/00Disable-PrivateStateTokens-API.patch index 79184e18..e99f6972 100644 --- a/build/patches/00Disable-PrivateStateTokens-API.patch +++ b/build/patches/00Disable-PrivateStateTokens-API.patch @@ -10,7 +10,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc --- a/services/network/public/cpp/features.cc +++ b/services/network/public/cpp/features.cc -@@ -175,12 +175,12 @@ BASE_FEATURE(kAttributionReportingCrossAppWeb, // in bromite +@@ -168,12 +168,12 @@ BASE_FEATURE(kAttributionReportingCrossAppWeb, // in bromite // set, and handling their responses, according to the protocol. // (See https://github.com/WICG/trust-token-api.) BASE_FEATURE(kPrivateStateTokens, diff --git a/build/patches/00Disable-SHA1-Server-Signature.patch b/build/patches/00Disable-SHA1-Server-Signature.patch index 616969fb..c2d4318d 100644 --- a/build/patches/00Disable-SHA1-Server-Signature.patch +++ b/build/patches/00Disable-SHA1-Server-Signature.patch @@ -15,7 +15,7 @@ diff --git a/net/base/features.cc b/net/base/features.cc BASE_FEATURE(kSHA1ServerSignature, - "SHA1ServerSignature", -- base::FEATURE_ENABLED_BY_DEFAULT); +- base::FEATURE_DISABLED_BY_DEFAULT); + "SHA1ServerSignature", // disabled + base::FEATURE_DISABLED_BY_DEFAULT); // in bromite diff --git a/build/patches/00Disable-WebGPU.patch b/build/patches/00Disable-WebGPU.patch index c2b5a83e..50b89a04 100644 --- a/build/patches/00Disable-WebGPU.patch +++ b/build/patches/00Disable-WebGPU.patch @@ -11,7 +11,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc --- a/gpu/config/gpu_finch_features.cc +++ b/gpu/config/gpu_finch_features.cc -@@ -284,7 +284,7 @@ BASE_FEATURE(kEnableDrDcVulkan, +@@ -283,7 +283,7 @@ BASE_FEATURE(kForceGpuMainThreadToNormalPriorityDrDc, // Enable WebGPU on gpu service side only. This is used with origin trial and // enabled by default on supported platforms. #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS_ASH) diff --git a/build/patches/00Disable-prefers-reduced-transparency-media-query.patch b/build/patches/00Disable-prefers-reduced-transparency-media-query.patch index dea74f4d..dbb1ecca 100644 --- a/build/patches/00Disable-prefers-reduced-transparency-media-query.patch +++ b/build/patches/00Disable-prefers-reduced-transparency-media-query.patch @@ -10,7 +10,7 @@ This feature can be used for fingerprinting as it exposes a user preference diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -2943,8 +2943,8 @@ +@@ -3003,8 +3003,8 @@ base_feature: "none", }, { diff --git a/build/patches/00Disable-privacy-issues-in-password-manager.patch b/build/patches/00Disable-privacy-issues-in-password-manager.patch index 7ce264e6..b4aa4303 100644 --- a/build/patches/00Disable-privacy-issues-in-password-manager.patch +++ b/build/patches/00Disable-privacy-issues-in-password-manager.patch @@ -17,7 +17,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -445,15 +445,6 @@ by a child template that "extends" this file. +@@ -446,15 +446,6 @@ by a child template that "extends" this file. @@ -49,7 +49,7 @@ diff --git a/chrome/browser/password_manager/generated_password_leak_detection_p diff --git a/components/password_manager/core/browser/affiliation/affiliation_backend.cc b/components/password_manager/core/browser/affiliation/affiliation_backend.cc --- a/components/password_manager/core/browser/affiliation/affiliation_backend.cc +++ b/components/password_manager/core/browser/affiliation/affiliation_backend.cc -@@ -405,6 +405,7 @@ void AffiliationBackend::OnMalformedResponse( +@@ -404,6 +404,7 @@ void AffiliationBackend::OnMalformedResponse( } bool AffiliationBackend::OnCanSendNetworkRequest() { @@ -60,7 +60,7 @@ diff --git a/components/password_manager/core/browser/affiliation/affiliation_ba diff --git a/components/password_manager/core/browser/affiliation/affiliation_service_impl.cc b/components/password_manager/core/browser/affiliation/affiliation_service_impl.cc --- a/components/password_manager/core/browser/affiliation/affiliation_service_impl.cc +++ b/components/password_manager/core/browser/affiliation/affiliation_service_impl.cc -@@ -131,6 +131,10 @@ void AffiliationServiceImpl::Shutdown() { +@@ -127,6 +127,10 @@ void AffiliationServiceImpl::Shutdown() { void AffiliationServiceImpl::PrefetchChangePasswordURLs( const std::vector& urls, base::OnceClosure callback) { @@ -114,7 +114,7 @@ diff --git a/components/password_manager/core/browser/affiliation/facet_manager. diff --git a/components/password_manager/core/browser/features/password_features.cc b/components/password_manager/core/browser/features/password_features.cc --- a/components/password_manager/core/browser/features/password_features.cc +++ b/components/password_manager/core/browser/features/password_features.cc -@@ -68,8 +68,8 @@ BASE_FEATURE(kFillingAcrossGroupedSites, +@@ -61,8 +61,8 @@ BASE_FEATURE(kFillingAcrossGroupedSites, // Enables the experiment for the password manager to only fill on account // selection, rather than autofilling on page load, with highlighting of fields. BASE_FEATURE(kFillOnAccountSelect, @@ -123,9 +123,9 @@ diff --git a/components/password_manager/core/browser/features/password_features + "fill-on-account-select", // always enabled + base::FEATURE_ENABLED_BY_DEFAULT); // by default - #if BUILDFLAG(IS_IOS) - // Enables migration to OSCrypt with a single query to the keychain. -@@ -87,14 +87,14 @@ BASE_FEATURE(kSharedPasswordNotificationUI, + #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) + // Enables new confirmation bubble flow if generated password was used in a +@@ -88,14 +88,14 @@ BASE_FEATURE(kSharedPasswordNotificationUI, // Enables password receiving service including incoming password sharing // invitation sync data type. BASE_FEATURE(kPasswordManagerEnableReceiverService, diff --git a/build/patches/00Disable-remote-altsvc-for-h3-connections.patch b/build/patches/00Disable-remote-altsvc-for-h3-connections.patch index a8cb20dd..7d725131 100644 --- a/build/patches/00Disable-remote-altsvc-for-h3-connections.patch +++ b/build/patches/00Disable-remote-altsvc-for-h3-connections.patch @@ -26,7 +26,7 @@ diff --git a/net/http/http_server_properties_manager.cc b/net/http/http_server_p diff --git a/net/http/http_stream_factory_job_controller.cc b/net/http/http_stream_factory_job_controller.cc --- a/net/http/http_stream_factory_job_controller.cc +++ b/net/http/http_stream_factory_job_controller.cc -@@ -1236,11 +1236,7 @@ HttpStreamFactory::JobController::GetAlternativeServiceInfoInternal( +@@ -1233,11 +1233,7 @@ HttpStreamFactory::JobController::GetAlternativeServiceInfoInternal( // single user on a multi-user system to hijack the alternate protocol. // These systems also enforce ports <1024 as restricted ports. So don't // allow protocol upgrades to user-controllable ports. @@ -39,7 +39,7 @@ diff --git a/net/http/http_stream_factory_job_controller.cc b/net/http/http_stre continue; if (alternative_service_info.protocol() == kProtoHTTP2) { -@@ -1277,8 +1273,7 @@ HttpStreamFactory::JobController::GetAlternativeServiceInfoInternal( +@@ -1274,8 +1270,7 @@ HttpStreamFactory::JobController::GetAlternativeServiceInfoInternal( GURL destination = CreateAltSvcUrl( original_url, alternative_service_info.host_port_pair()); diff --git a/build/patches/00Disable-speechSynthesis-getVoices-API.patch b/build/patches/00Disable-speechSynthesis-getVoices-API.patch index 30aa713f..3d98a38e 100644 --- a/build/patches/00Disable-speechSynthesis-getVoices-API.patch +++ b/build/patches/00Disable-speechSynthesis-getVoices-API.patch @@ -25,7 +25,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -7675,6 +7675,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -7944,6 +7944,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kFileSystemObserverDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kFileSystemObserver)}, @@ -90,7 +90,7 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.h diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -890,7 +890,7 @@ const base::FeatureParam kMediaFoundationClearKeyCdmPathForTesting{ +@@ -915,7 +915,7 @@ const base::FeatureParam kMediaFoundationClearKeyCdmPathForTesting{ #endif // BUILDFLAG(IS_WIN) // Enables the Live Caption feature on supported devices. @@ -99,7 +99,7 @@ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc // Controls whether a "Share this tab instead" button should be shown for // getDisplayMedia captures. Note: This flag does not control if the "Share this -@@ -937,9 +937,9 @@ BASE_FEATURE(kLiveCaptionRightClick, +@@ -974,9 +974,9 @@ BASE_FEATURE(kLiveCaptionRightClick, base::FEATURE_DISABLED_BY_DEFAULT); // Enable or disable Live Caption support for WebAudio. @@ -115,7 +115,7 @@ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -659,6 +659,10 @@ BASE_FEATURE(kDirectCompositorThreadIpc, +@@ -653,6 +653,10 @@ BASE_FEATURE(kDirectCompositorThreadIpc, "DirectCompositorThreadIpc", base::FEATURE_DISABLED_BY_DEFAULT); @@ -129,7 +129,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h -@@ -332,6 +332,8 @@ extern const base::FeatureParam kCostReductionOfMultiplexedRequests; +@@ -330,6 +330,8 @@ extern const base::FeatureParam kCostReductionOfMultiplexedRequests; // hopping through the IO thread first. BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kDirectCompositorThreadIpc); diff --git a/build/patches/00Disable-visited-pseudo-class.patch b/build/patches/00Disable-visited-pseudo-class.patch index 33135371..c24783d2 100644 --- a/build/patches/00Disable-visited-pseudo-class.patch +++ b/build/patches/00Disable-visited-pseudo-class.patch @@ -54,7 +54,7 @@ diff --git a/components/visitedlink/browser/visitedlink_writer.cc b/components/v diff --git a/components/visitedlink/common/visitedlink_common.cc b/components/visitedlink/common/visitedlink_common.cc --- a/components/visitedlink/common/visitedlink_common.cc +++ b/components/visitedlink/common/visitedlink_common.cc -@@ -43,6 +43,7 @@ bool VisitedLinkCommon::IsVisited(const GURL& url) const { +@@ -41,6 +41,7 @@ bool VisitedLinkCommon::IsVisited(const GURL& url) const { } bool VisitedLinkCommon::IsVisited(Fingerprint fingerprint) const { diff --git a/build/patches/00Disallowing-MIDI-permission-by-default.patch b/build/patches/00Disallowing-MIDI-permission-by-default.patch index e17f9538..e884b62f 100644 --- a/build/patches/00Disallowing-MIDI-permission-by-default.patch +++ b/build/patches/00Disallowing-MIDI-permission-by-default.patch @@ -10,7 +10,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/components/permissions/features.cc b/components/permissions/features.cc --- a/components/permissions/features.cc +++ b/components/permissions/features.cc -@@ -164,7 +164,7 @@ BASE_FEATURE(kWindowManagementPermissionAlias, +@@ -169,7 +169,7 @@ BASE_FEATURE(kWindowPlacementPermissionAlias, // Enables disallowing MIDI permission by default. BASE_FEATURE(kBlockMidiByDefault, "BlockMidiByDefault", diff --git a/build/patches/00Enable-Android-Dynamic-Performance-Framework.patch b/build/patches/00Enable-Android-Dynamic-Performance-Framework.patch index 05d94733..6d881230 100644 --- a/build/patches/00Enable-Android-Dynamic-Performance-Framework.patch +++ b/build/patches/00Enable-Android-Dynamic-Performance-Framework.patch @@ -11,10 +11,10 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/version.gni b/chrome/version.gni --- a/chrome/version.gni +++ b/chrome/version.gni -@@ -68,7 +68,7 @@ if (is_mac) { - _version_dictionary_template += "trichrome_auto_64_32_version_code = \"@TRICHROME_AUTO_64_32_VERSION_CODE@\" " - _version_dictionary_template += +@@ -75,7 +75,7 @@ if (is_mac) { "trichrome_64_version_code = \"@TRICHROME_64_VERSION_CODE@\" " + _version_dictionary_template += + "trichrome_auto_64_version_code = \"@TRICHROME_AUTO_64_VERSION_CODE@\" " - if (target_cpu == "arm64") { + if (target_cpu == "arm64" || target_cpu == "x64") { _version_dictionary_template += "trichrome_64_32_high_version_code = \"@TRICHROME_64_32_HIGH_VERSION_CODE@\" " @@ -23,7 +23,7 @@ diff --git a/chrome/version.gni b/chrome/version.gni diff --git a/components/viz/common/features.cc b/components/viz/common/features.cc --- a/components/viz/common/features.cc +++ b/components/viz/common/features.cc -@@ -298,9 +298,10 @@ const base::FeatureParam kADPFMidFrameBoostDurationMultiplier{ +@@ -291,9 +291,10 @@ const base::FeatureParam kADPFMidFrameBoostDurationMultiplier{ // If enabled, Chrome includes the Renderer Main thread(s) into the // ADPF(Android Dynamic Performance Framework) hint session. diff --git a/build/patches/00Enable-Document-Open-Inheritance-Removal.patch b/build/patches/00Enable-Document-Open-Inheritance-Removal.patch index 48f881a8..2ef266a3 100644 --- a/build/patches/00Enable-Document-Open-Inheritance-Removal.patch +++ b/build/patches/00Enable-Document-Open-Inheritance-Removal.patch @@ -11,7 +11,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc -@@ -3420,70 +3420,6 @@ void Document::open(LocalDOMWindow* entered_window, +@@ -3425,70 +3425,6 @@ void Document::open(LocalDOMWindow* entered_window, // https://chromestatus.com/metrics/feature/timeline/popularity/4375 CountUse(WebFeature::kDocumentOpenMutateSandbox); } @@ -85,7 +85,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -1438,7 +1438,6 @@ +@@ -1441,7 +1441,6 @@ { name: "DocumentOpenSandboxInheritanceRemoval", status: "stable", diff --git a/build/patches/00Enable-ImprovedBookmarks-by-default.patch b/build/patches/00Enable-ImprovedBookmarks-by-default.patch index b0341d06..d1633a0f 100644 --- a/build/patches/00Enable-ImprovedBookmarks-by-default.patch +++ b/build/patches/00Enable-ImprovedBookmarks-by-default.patch @@ -60,7 +60,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefs.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefs.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefs.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUiPrefs.java -@@ -18,7 +18,7 @@ import java.lang.annotation.RetentionPolicy; +@@ -21,7 +21,7 @@ import java.lang.annotation.RetentionPolicy; */ public class BookmarkUiPrefs { private static final @BookmarkRowDisplayPref int INITIAL_BOOKMARK_ROW_DISPLAY_PREF = @@ -92,7 +92,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -505,7 +505,7 @@ BASE_FEATURE(kAndroidSearchEngineChoiceNotification, +@@ -509,7 +509,7 @@ BASE_FEATURE(kAndroidSearchEngineChoiceNotification, BASE_FEATURE(kAndroidImprovedBookmarks, "AndroidImprovedBookmarks", diff --git a/build/patches/00Evict-the-entire-FrameTree-like-desktop.patch b/build/patches/00Evict-the-entire-FrameTree-like-desktop.patch index e8ead9ed..4c5893b5 100644 --- a/build/patches/00Evict-the-entire-FrameTree-like-desktop.patch +++ b/build/patches/00Evict-the-entire-FrameTree-like-desktop.patch @@ -4,8 +4,8 @@ Subject: Evict the entire FrameTree like desktop License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - components/viz/common/features.cc | 2 +- - content/public/common/content_features.cc | 4 ++-- + components/viz/common/features.cc | 2 +- + content/common/features.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/viz/common/features.cc b/components/viz/common/features.cc @@ -20,19 +20,19 @@ diff --git a/components/viz/common/features.cc b/components/viz/common/features. // If enabled, CompositorFrameSinkClient::OnBeginFrame is also treated as the // DidReceiveCompositorFrameAck. Both in providing the Ack for the previous -diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc ---- a/content/public/common/content_features.cc -+++ b/content/public/common/content_features.cc -@@ -583,8 +583,8 @@ BASE_FEATURE(kInMemoryCodeCache, +diff --git a/content/common/features.cc b/content/common/features.cc +--- a/content/common/features.cc ++++ b/content/common/features.cc +@@ -241,8 +241,8 @@ BASE_FEATURE(kInMemoryCodeCache, // frames. Otherwise only toplevel frames and OOPIF are handled, and other // cases, e.g. PDF tiles are ignored. See https://crbug.com/1360351 for details. BASE_FEATURE(kInnerFrameCompositorSurfaceEviction, - "InnerFrameCompositorSurfaceEviction", - base::FEATURE_ENABLED_BY_DEFAULT); -+ "InnerFrameCompositorSurfaceEviction", // guard this -+ base::FEATURE_ENABLED_BY_DEFAULT); // guard this ++ "InnerFrameCompositorSurfaceEviction", // guard this ++ base::FEATURE_ENABLED_BY_DEFAULT); // guard this - // Kill switch for the GetInstalledRelatedApps API. - BASE_FEATURE(kInstalledApp, "InstalledApp", base::FEATURE_ENABLED_BY_DEFAULT); + // Enable IOSurface based screen capturer. + #if BUILDFLAG(IS_MAC) -- 2.25.1 diff --git a/build/patches/00Fix-eyeo-Browser-Ad-filtering-patches.patch b/build/patches/00Fix-eyeo-Browser-Ad-filtering-patches.patch deleted file mode 100644 index cd6750f6..00000000 --- a/build/patches/00Fix-eyeo-Browser-Ad-filtering-patches.patch +++ /dev/null @@ -1,129 +0,0 @@ -From: uazo -Date: Wed, 6 Sep 2023 15:25:18 +0000 -Subject: Fix eyeo Browser Ad filtering patches - ---- - chrome/browser/BUILD.gn | 4 ---- - chrome/browser/client_hints/client_hints_browsertest.cc | 7 +------ - chrome/browser/extensions/BUILD.gn | 4 ---- - chrome/browser/preferences/BUILD.gn | 4 ---- - chrome/browser/ui/BUILD.gn | 6 ------ - chrome/browser/ui/tab_helpers.cc | 4 ---- - 6 files changed, 1 insertion(+), 28 deletions(-) - -diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn ---- a/chrome/browser/BUILD.gn -+++ b/chrome/browser/BUILD.gn -@@ -2110,12 +2110,8 @@ static_library("browser") { - "//chrome/common/notifications", - "//chrome/installer/util:with_no_strings", - "//chrome/services/speech/buildflags", --<<<<<<< HEAD --======= -- "//chromeos/components/kiosk", - "//components/adblock/content:browser", - "//components/adblock/core/converter", -->>>>>>> 9402d5c48c0e8... Squashed commits - "//components/assist_ranker", - "//components/autofill/content/browser", - "//components/autofill/core/browser", -diff --git a/chrome/browser/client_hints/client_hints_browsertest.cc b/chrome/browser/client_hints/client_hints_browsertest.cc ---- a/chrome/browser/client_hints/client_hints_browsertest.cc -+++ b/chrome/browser/client_hints/client_hints_browsertest.cc -@@ -655,17 +655,12 @@ class ClientHintsBrowserTest : public policy::PolicyTest { - // Force-enable the ClientHintsFormFactor feature, so that the header is - // represented in the various header counts. - feature_list->InitializeFromCommandLine( --<<<<<<< HEAD -- "UserAgentClientHint,CriticalClientHint,AcceptCHFrame," -- "ClientHintsFormFactor,ClientHintsPrefersReducedTransparency", -- ""); --======= - "UserAgentClientHint,CriticalClientHint,AcceptCHFrame", -+ "ClientHintsFormFactor,ClientHintsPrefersReducedTransparency", - // Disabling AdblockPlus because the async implementation of - // AdblockURLLoaderThrottle::WillStartRequest confuses - // ThirdPartyURLLoaderInterceptor. - "AdblockPlus"); -->>>>>>> 9402d5c48c0e8... Squashed commits - return feature_list; - } - -diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn ---- a/chrome/browser/extensions/BUILD.gn -+++ b/chrome/browser/extensions/BUILD.gn -@@ -834,11 +834,7 @@ static_library("extensions") { - "//chrome/browser/safe_browsing:metrics_collector", - "//chrome/browser/ui/tabs:tab_enums", - "//chrome/browser/web_applications", --<<<<<<< HEAD --======= -- "//chromeos/components/kiosk", - "//components/adblock/content:browser", -->>>>>>> 9402d5c48c0e8... Squashed commits - "//components/cbor:cbor", - "//components/commerce/core:pref_names", - "//components/device_reauth", -diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BUILD.gn ---- a/chrome/browser/preferences/BUILD.gn -+++ b/chrome/browser/preferences/BUILD.gn -@@ -38,12 +38,8 @@ android_library("java") { - # TODO(chouinard,estade): Consider breaking this target up into a different target for each pref file. - java_cpp_strings("java_pref_names_srcjar") { - sources = [ --<<<<<<< HEAD - "//chrome/common/pref_names.h", --======= -- "//chrome/common/pref_names.cc", - "//components/adblock/core/common/adblock_prefs.cc", -->>>>>>> 9402d5c48c0e8... Squashed commits - "//components/autofill/core/common/autofill_prefs.cc", - "//components/commerce/core/pref_names.cc", - "//components/dom_distiller/core/pref_names.cc", -diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn ---- a/chrome/browser/ui/BUILD.gn -+++ b/chrome/browser/ui/BUILD.gn -@@ -449,11 +449,8 @@ static_library("ui") { - "//chrome/browser/storage_access_api", - "//chrome/browser/ui/side_panel:side_panel_enums", - "//chrome/browser/ui/webui:configs", --<<<<<<< HEAD - "//chrome/browser/ui/webui/location_internals:mojo_bindings", --======= - "//chrome/browser/ui/webui/adblock_internals:mojo_bindings", -->>>>>>> 9402d5c48c0e8... Squashed commits - "//chrome/browser/ui/webui/omnibox:mojo_bindings", - "//chrome/browser/ui/webui/segmentation_internals:mojo_bindings", - "//chrome/browser/ui/webui/suggest_internals:mojo_bindings", -@@ -469,11 +466,8 @@ static_library("ui") { - "//components/about_ui", - "//components/access_code_cast/common:metrics", - "//components/account_id", --<<<<<<< HEAD - "//components/autofill/content/browser", --======= - "//components/adblock/content:browser", -->>>>>>> 9402d5c48c0e8... Squashed commits - "//components/autofill/content/browser:risk_proto", - "//components/autofill/core/browser", - "//components/blocked_content", -diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc ---- a/chrome/browser/ui/tab_helpers.cc -+++ b/chrome/browser/ui/tab_helpers.cc -@@ -17,14 +17,10 @@ - #include "base/trace_event/trace_event.h" - #include "build/build_config.h" - #include "build/chromeos_buildflags.h" --<<<<<<< HEAD - #include "chrome/browser/3pcd/heuristics/opener_heuristic_tab_helper.h" --======= --#include "chrome/browser/3pcd_heuristics/opener_heuristic_tab_helper.h" - #include "chrome/browser/adblock/element_hider_factory.h" - #include "chrome/browser/adblock/sitekey_storage_factory.h" - #include "chrome/browser/adblock/subscription_service_factory.h" -->>>>>>> 9402d5c48c0e8... Squashed commits - #include "chrome/browser/bookmarks/bookmark_model_factory.h" - #include "chrome/browser/breadcrumbs/breadcrumb_manager_tab_helper.h" - #include "chrome/browser/browser_process.h" --- -2.25.1 diff --git a/build/patches/00Fonts-fingerprinting-mitigation.patch b/build/patches/00Fonts-fingerprinting-mitigation.patch index ded8198e..dd2b4b86 100644 --- a/build/patches/00Fonts-fingerprinting-mitigation.patch +++ b/build/patches/00Fonts-fingerprinting-mitigation.patch @@ -18,7 +18,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html chrome/browser/about_flags.cc | 5 + chrome/browser/flag_descriptions.cc | 5 + chrome/browser/flag_descriptions.h | 3 + - content/public/common/content_features.cc | 4 +- + content/common/features.cc | 8 +- skia/ext/skia_utils_win.cc | 20 ++ skia/ext/skia_utils_win.h | 3 + third_party/blink/common/features.cc | 6 +- @@ -28,13 +28,13 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../fonts/skia/bromite_allowed_fonts.h | 270 ++++++++++++++++++ .../platform/fonts/skia/font_cache_skia.cc | 44 ++- .../platform/fonts/win/font_cache_skia_win.cc | 7 +- - 13 files changed, 361 insertions(+), 12 deletions(-) + 13 files changed, 363 insertions(+), 14 deletions(-) create mode 100644 third_party/blink/renderer/platform/fonts/skia/bromite_allowed_fonts.h diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -10130,6 +10130,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -10403,6 +10403,11 @@ const FeatureEntry kFeatureEntries[] = { kClipboardMaximumAgeVariations, "ClipboardMaximumAge")}, @@ -49,7 +49,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -157,6 +157,11 @@ const char kClipboardUnsanitizedContentDescription[] = +@@ -159,6 +159,11 @@ const char kClipboardUnsanitizedContentDescription[] = "Allows reading/writing unsanitized content from/to the clipboard. " "Currently, it is only applicable to HTML format. See crbug.com/1268679."; @@ -64,7 +64,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -127,6 +127,9 @@ extern const char kClickToCallDescription[]; +@@ -131,6 +131,9 @@ extern const char kClickToCallDescription[]; extern const char kClipboardUnsanitizedContentName[]; extern const char kClipboardUnsanitizedContentDescription[]; @@ -74,27 +74,31 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio extern const char kClipboardMaximumAgeName[]; extern const char kClipboardMaximumAgeDescription[]; -diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc ---- a/content/public/common/content_features.cc -+++ b/content/public/common/content_features.cc -@@ -28,7 +28,7 @@ BASE_FEATURE(kAllowContentInitiatedDataUrlNavigations, +diff --git a/content/common/features.cc b/content/common/features.cc +--- a/content/common/features.cc ++++ b/content/common/features.cc +@@ -21,8 +21,8 @@ BASE_FEATURE(kAllowContentInitiatedDataUrlNavigations, + // Allows Blink to request fonts from the Android Downloadable Fonts API through // the service implemented on the Java side. BASE_FEATURE(kAndroidDownloadableFontsMatching, - "AndroidDownloadableFontsMatching", +- "AndroidDownloadableFontsMatching", - base::FEATURE_ENABLED_BY_DEFAULT); -+ base::FEATURE_DISABLED_BY_DEFAULT); ++ "AndroidDownloadableFontsMatching", // disabled ++ base::FEATURE_DISABLED_BY_DEFAULT); // by default - #if BUILDFLAG(IS_ANDROID) - // Use chromim's implementation of selection magnifier built using surface -@@ -520,7 +520,7 @@ const base::FeatureParam + // The following two features, when enabled, result in the browser process only + // asking the renderer process to run beforeunload handlers if it knows such +@@ -195,8 +195,8 @@ const base::FeatureParam kFledgeLimitNumAuctionsParam{ + // font name or postscript name. Rolling out behind a flag, as enabling this // enables a font indexer on Android which we need to test in the field first. BASE_FEATURE(kFontSrcLocalMatching, - "FontSrcLocalMatching", +- "FontSrcLocalMatching", - base::FEATURE_ENABLED_BY_DEFAULT); -+ base::FEATURE_DISABLED_BY_DEFAULT); ++ "FontSrcLocalMatching", // disable ++ base::FEATURE_DISABLED_BY_DEFAULT); // by default - #if !BUILDFLAG(IS_ANDROID) // Feature controlling whether or not memory pressure signals will be forwarded + // to the GPU process. diff --git a/skia/ext/skia_utils_win.cc b/skia/ext/skia_utils_win.cc --- a/skia/ext/skia_utils_win.cc +++ b/skia/ext/skia_utils_win.cc @@ -157,7 +161,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea BASE_FEATURE(kGainmapHdrImages, "GainmapHdrImages", -@@ -1973,6 +1973,10 @@ BASE_FEATURE(kWebRtcH264WithOpenH264FFmpeg, +@@ -2036,6 +2036,10 @@ BASE_FEATURE(kWebRtcH264WithOpenH264FFmpeg, base::FEATURE_ENABLED_BY_DEFAULT); #endif // BUILDFLAG(RTC_USE_H264) && BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS) @@ -165,13 +169,13 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea + "FontsFingerprintMitigation", + base::FEATURE_ENABLED_BY_DEFAULT); + - BASE_FEATURE(kWebRtcEncoderAsyncEncode, - "WebRtcEncoderAsyncEncode", - base::FEATURE_ENABLED_BY_DEFAULT); + // Exposes non-standard stats in the WebRTC getStats() API. + BASE_FEATURE(kWebRtcExposeNonStandardStats, + "WebRtc-ExposeNonStandardStats", diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h -@@ -246,6 +246,9 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kCompressParkableStrings); +@@ -249,6 +249,9 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kCompressParkableStrings); BLINK_COMMON_EXPORT extern const base::FeatureParam kMaxDiskDataAllocatorCapacityMB; @@ -184,7 +188,7 @@ diff --git a/third_party/blink/public/common/features.h b/third_party/blink/publ diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn --- a/third_party/blink/renderer/platform/BUILD.gn +++ b/third_party/blink/renderer/platform/BUILD.gn -@@ -731,6 +731,7 @@ component("platform") { +@@ -755,6 +755,7 @@ component("platform") { "fonts/simple_font_data.cc", "fonts/simple_font_data.h", "fonts/skia/font_cache_skia.cc", diff --git a/build/patches/00Keep-Side-Panel-Companion-disabled.patch b/build/patches/00Keep-Side-Panel-Companion-disabled.patch index 1f1600e0..2b08943c 100644 --- a/build/patches/00Keep-Side-Panel-Companion-disabled.patch +++ b/build/patches/00Keep-Side-Panel-Companion-disabled.patch @@ -40,7 +40,7 @@ diff --git a/chrome/browser/companion/core/features.cc b/chrome/browser/companio } // namespace internal // When search companion is enabled, show a context menu item that allows the -@@ -57,6 +57,7 @@ const char kDisableCheckUserPermissionsForCompanion[] = +@@ -65,6 +65,7 @@ const char kDisableCheckUserPermissionsForCompanion[] = const char kForceCompanionPinnedState[] = "force-companion-pinned-state"; bool ShouldOverrideCheckingUserPermissionsForCompanion() { @@ -63,7 +63,7 @@ diff --git a/chrome/browser/ui/side_search/side_search_prefs.cc b/chrome/browser diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc --- a/chrome/browser/ui/ui_features.cc +++ b/chrome/browser/ui/ui_features.cc -@@ -121,7 +121,7 @@ BASE_FEATURE(kResponsiveToolbar, +@@ -122,7 +122,7 @@ BASE_FEATURE(kResponsiveToolbar, // Enables the side search feature for Google Search. Presents recent Google // search results in a browser side panel. diff --git a/build/patches/00Keep-disabled-FetchLaterAPI.patch b/build/patches/00Keep-disabled-FetchLaterAPI.patch index 34009f4c..85045ed4 100644 --- a/build/patches/00Keep-disabled-FetchLaterAPI.patch +++ b/build/patches/00Keep-disabled-FetchLaterAPI.patch @@ -9,7 +9,7 @@ Subject: Keep disabled FetchLaterAPI diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -1693,7 +1693,8 @@ +@@ -1700,7 +1700,8 @@ }, { // The Blink runtime-enabled feature name for the API's IDL. diff --git a/build/patches/00Keyboard-protection-flag.patch b/build/patches/00Keyboard-protection-flag.patch index 56793cdf..867471f5 100644 --- a/build/patches/00Keyboard-protection-flag.patch +++ b/build/patches/00Keyboard-protection-flag.patch @@ -23,7 +23,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5157,6 +5157,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5413,6 +5413,9 @@ const FeatureEntry kFeatureEntries[] = { {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName, flag_descriptions::kSystemKeyboardLockDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kSystemKeyboardLock)}, @@ -36,7 +36,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -3315,6 +3315,12 @@ const char kSystemKeyboardLockDescription[] = +@@ -3335,6 +3335,12 @@ const char kSystemKeyboardLockDescription[] = "keyboard shortcuts and have the events routed directly to the website " "when in fullscreen mode."; @@ -52,7 +52,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1901,6 +1901,9 @@ extern const char kSuppressToolbarCapturesDescription[]; +@@ -1920,6 +1920,9 @@ extern const char kSuppressToolbarCapturesDescription[]; extern const char kSystemKeyboardLockName[]; extern const char kSystemKeyboardLockDescription[]; @@ -186,7 +186,7 @@ diff --git a/third_party/blink/renderer/core/events/keyboard_event.h b/third_par diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc --- a/ui/base/ui_base_features.cc +++ b/ui/base/ui_base_features.cc -@@ -202,6 +202,14 @@ BASE_FEATURE(kSystemKeyboardLock, +@@ -184,6 +184,14 @@ BASE_FEATURE(kSystemKeyboardLock, "SystemKeyboardLock", base::FEATURE_ENABLED_BY_DEFAULT); diff --git a/build/patches/00Lock-Profile-Cookie-Database.patch b/build/patches/00Lock-Profile-Cookie-Database.patch index 13fbc7b4..916e0093 100644 --- a/build/patches/00Lock-Profile-Cookie-Database.patch +++ b/build/patches/00Lock-Profile-Cookie-Database.patch @@ -10,7 +10,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/browser_features.cc b/chrome/browser/browser_features.cc --- a/chrome/browser/browser_features.cc +++ b/chrome/browser/browser_features.cc -@@ -207,8 +207,8 @@ BASE_FEATURE(kAppBoundEncryptionMetrics, +@@ -213,8 +213,8 @@ BASE_FEATURE(kAppBoundEncryptionMetrics, // Enables locking the cookie database for profiles. // TODO(crbug.com/1430226): Remove after fully launched. BASE_FEATURE(kLockProfileCookieDatabase, @@ -18,8 +18,8 @@ diff --git a/chrome/browser/browser_features.cc b/chrome/browser/browser_feature - base::FEATURE_ENABLED_BY_DEFAULT); + "LockProfileCookieDatabase", // enabled + base::FEATURE_ENABLED_BY_DEFAULT); // by default - #endif - // Enables showing the email of the flex org admin that setup CBCM in the + // Don't call the Win32 API PrefetchVirtualMemory when loading chrome.dll inside + // non-browser processes. This is done by passing flags to these processes. This -- 2.25.1 diff --git a/build/patches/00Log-dangling-attributes-in-some-html-elements.patch b/build/patches/00Log-dangling-attributes-in-some-html-elements.patch index 65af1e82..7c52f15c 100644 --- a/build/patches/00Log-dangling-attributes-in-some-html-elements.patch +++ b/build/patches/00Log-dangling-attributes-in-some-html-elements.patch @@ -27,7 +27,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5105,7 +5105,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5361,7 +5361,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kWebShareDescription, kOsWin | kOsCrOS | kOsMac, FEATURE_VALUE_TYPE(features::kWebShare)}, #endif // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) @@ -42,7 +42,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc -@@ -4552,6 +4552,14 @@ void Document::ProcessBaseElement() { +@@ -4563,6 +4563,14 @@ void Document::ProcessBaseElement() { KURL base_element_url; if (href) { String stripped_href = StripLeadingAndTrailingHTMLSpaces(*href); @@ -57,7 +57,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink if (!stripped_href.empty()) base_element_url = KURL(FallbackBaseURL(), stripped_href); } -@@ -4570,6 +4578,14 @@ void Document::ProcessBaseElement() { +@@ -4581,6 +4589,14 @@ void Document::ProcessBaseElement() { !GetExecutionContext()->GetSecurityOrigin()->CanRequest( base_element_url)) { UseCounter::Count(*this, WebFeature::kBaseWithCrossOriginHref); @@ -72,7 +72,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink } } -@@ -4589,6 +4605,8 @@ void Document::ProcessBaseElement() { +@@ -4600,6 +4616,8 @@ void Document::ProcessBaseElement() { if (target->Contains('<')) UseCounter::Count(*this, WebFeature::kBaseWithOpenBracketInTarget); base_target_ = *target; @@ -84,7 +84,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc -@@ -2577,8 +2577,26 @@ void Element::StripScriptingAttributes( +@@ -2574,8 +2574,26 @@ void Element::StripScriptingAttributes( attribute_vector.Shrink(destination); } @@ -116,7 +116,7 @@ diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/r --- a/third_party/blink/renderer/core/dom/element.h +++ b/third_party/blink/renderer/core/dom/element.h @@ -575,7 +575,8 @@ class CORE_EXPORT Element : public ContainerNode, public Animatable { - virtual const QualifiedName& SubResourceAttributeName() const; + virtual bool HasLegalLinkAttribute(const QualifiedName&) const; // Only called by the parser immediately after element construction. - void ParserSetAttributes(const Vector&); @@ -254,8 +254,8 @@ diff --git a/third_party/blink/renderer/core/loader/frame_load_request.cc b/thir +#include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/fileapi/public_url_manager.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" - #include "third_party/blink/renderer/platform/bindings/dom_wrapper_world.h" -@@ -134,6 +135,14 @@ const LocalFrameToken* FrameLoadRequest::GetInitiatorFrameToken() const { + #include "third_party/blink/renderer/core/html/forms/html_form_element.h" +@@ -145,6 +146,14 @@ const LocalFrameToken* FrameLoadRequest::GetInitiatorFrameToken() const { const AtomicString& FrameLoadRequest::CleanNavigationTarget( const AtomicString& target) const { if (ContainsNewLineAndLessThan(target)) { @@ -319,7 +319,7 @@ diff --git a/third_party/blink/renderer/core/page/frame_tree.cc b/third_party/bl diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -1522,8 +1522,8 @@ +@@ -1525,8 +1525,8 @@ // Experiment with preventing some instances of mutation XSS // by escaping "<" and ">" in attribute values. // See: crbug.com/1175016 @@ -330,7 +330,7 @@ diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 }, { name: "EventTimingInteractionCount", -@@ -2263,6 +2263,12 @@ +@@ -2296,6 +2296,12 @@ // Use LongAnimationFrameMonitor to emit longtask entries name: "LongTaskFromLongAnimationFrame" }, diff --git a/build/patches/00Partition-HSTS-cache-by-NAK.patch b/build/patches/00Partition-HSTS-cache-by-NAK.patch index 94191c42..0c6332a5 100644 --- a/build/patches/00Partition-HSTS-cache-by-NAK.patch +++ b/build/patches/00Partition-HSTS-cache-by-NAK.patch @@ -32,7 +32,7 @@ diff --git a/chrome/browser/ssl/https_upgrades_interceptor.cc b/chrome/browser/s diff --git a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc --- a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc +++ b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc -@@ -395,7 +395,10 @@ void NetInternalsMessageHandler::OnDomainSecurityPolicyDelete( +@@ -396,7 +396,10 @@ void NetInternalsMessageHandler::OnDomainSecurityPolicyDelete( // There cannot be a unicode entry in the HSTS set. return; } @@ -43,7 +43,7 @@ diff --git a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc b/chrome/ *domain, base::BindOnce(&IgnoreBoolCallback)); } -@@ -405,7 +408,10 @@ void NetInternalsMessageHandler::OnHSTSQuery(const base::Value::List& list) { +@@ -406,7 +409,10 @@ void NetInternalsMessageHandler::OnHSTSQuery(const base::Value::List& list) { DCHECK(callback_id && domain); AllowJavascript(); @@ -54,7 +54,7 @@ diff --git a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc b/chrome/ *domain, base::BindOnce(&NetInternalsMessageHandler::ResolveCallbackWithResult, weak_factory_.GetWeakPtr(), *callback_id)); -@@ -431,8 +437,12 @@ void NetInternalsMessageHandler::OnHSTSAdd(const base::Value::List& list) { +@@ -432,8 +438,12 @@ void NetInternalsMessageHandler::OnHSTSAdd(const base::Value::List& list) { const bool sts_include_subdomains = list[1].GetBool(); base::Time expiry = base::Time::Now() + base::Days(1000); @@ -83,7 +83,7 @@ diff --git a/components/password_manager/core/browser/hsts_query.cc b/components diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_state.cc --- a/net/http/transport_security_state.cc +++ b/net/http/transport_security_state.cc -@@ -215,7 +215,7 @@ bool AddHash(const char* sha256_hash, HashValueVector* out) { +@@ -225,7 +225,7 @@ bool AddHash(const char* sha256_hash, HashValueVector* out) { // Converts |hostname| from dotted form ("www.google.com") to the form // used in DNS: "\x03www\x06google\x03com", lowercases that, and returns // the result. @@ -92,7 +92,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ // We cannot perform the operations as detailed in the spec here as `host` // has already undergone IDN processing before it reached us. Thus, we // lowercase the input (probably redudnant since most input here has been -@@ -236,6 +236,29 @@ std::vector CanonicalizeHost(const std::string& host) { +@@ -246,6 +246,29 @@ std::vector CanonicalizeHost(const std::string& host) { return new_host.value(); } @@ -122,7 +122,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ // PreloadResult is the result of resolving a specific name in the preloaded // data. struct PreloadResult { -@@ -327,7 +350,7 @@ bool DecodeHSTSPreload(const std::string& search_hostname, PreloadResult* out) { +@@ -337,7 +360,7 @@ bool DecodeHSTSPreload(const std::string& search_hostname, PreloadResult* out) { // Ensure that |search_hostname| is a valid hostname before // processing. @@ -131,7 +131,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ return false; } // Normalize any trailing '.' used for DNS suffix searches. -@@ -394,18 +417,19 @@ TransportSecurityState::TransportSecurityState( +@@ -404,18 +427,19 @@ TransportSecurityState::TransportSecurityState( // Both HSTS and HPKP cause fatal SSL errors, so return true if a // host has either. @@ -154,7 +154,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ dict.Set("should_upgrade_to_ssl", sts_state.ShouldUpgradeToSSL()); dict.Set("host_found_in_hsts_bypass_list", hsts_host_bypass_list_.find(host) != hsts_host_bypass_list_.end()); -@@ -413,13 +437,14 @@ base::Value::Dict TransportSecurityState::NetLogUpgradeToSSLParam( +@@ -423,13 +447,14 @@ base::Value::Dict TransportSecurityState::NetLogUpgradeToSSLParam( } bool TransportSecurityState::ShouldUpgradeToSSL( @@ -171,7 +171,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ } TransportSecurityState::PKPStatus TransportSecurityState::CheckPublicKeyPins( -@@ -432,7 +457,7 @@ TransportSecurityState::PKPStatus TransportSecurityState::CheckPublicKeyPins( +@@ -442,7 +467,7 @@ TransportSecurityState::PKPStatus TransportSecurityState::CheckPublicKeyPins( const NetworkAnonymizationKey& network_anonymization_key, std::string* pinning_failure_log) { // Perform pin validation only if the server actually has public key pins. @@ -180,7 +180,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ return PKPStatus::OK; } -@@ -451,9 +476,9 @@ TransportSecurityState::PKPStatus TransportSecurityState::CheckPublicKeyPins( +@@ -461,9 +486,9 @@ TransportSecurityState::PKPStatus TransportSecurityState::CheckPublicKeyPins( return pin_validity; } @@ -192,7 +192,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ } TransportSecurityState::CTRequirementsStatus -@@ -589,12 +614,13 @@ void TransportSecurityState::UpdatePinList( +@@ -557,12 +582,13 @@ void TransportSecurityState::UpdatePinList( } void TransportSecurityState::AddHSTSInternal( @@ -207,7 +207,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ if (canonicalized_host.empty()) return; -@@ -618,14 +644,15 @@ void TransportSecurityState::AddHSTSInternal( +@@ -586,14 +612,15 @@ void TransportSecurityState::AddHSTSInternal( DirtyNotify(); } @@ -225,7 +225,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ if (canonicalized_host.empty()) return; -@@ -711,10 +738,12 @@ TransportSecurityState::CheckPinsAndMaybeSendReport( +@@ -679,10 +706,12 @@ TransportSecurityState::CheckPinsAndMaybeSendReport( return PKPStatus::VIOLATED; } @@ -240,7 +240,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ if (canonicalized_host.empty()) return false; -@@ -791,7 +820,8 @@ void TransportSecurityState::DirtyNotify() { +@@ -759,7 +788,8 @@ void TransportSecurityState::DirtyNotify() { delegate_->StateIsDirty(this); } @@ -250,7 +250,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ const std::string& value) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); -@@ -810,24 +840,26 @@ bool TransportSecurityState::AddHSTSHeader(const std::string& host, +@@ -778,24 +808,26 @@ bool TransportSecurityState::AddHSTSHeader(const std::string& host, upgrade_mode = STSState::MODE_FORCE_HTTPS; } @@ -282,7 +282,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ report_uri); } -@@ -862,7 +894,7 @@ TransportSecurityState::CheckPublicKeyPinsImpl( +@@ -830,7 +862,7 @@ TransportSecurityState::CheckPublicKeyPinsImpl( const NetworkAnonymizationKey& network_anonymization_key, std::string* failure_log) { PKPState pkp_state; @@ -291,7 +291,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ // HasPublicKeyPins should have returned true in order for this method to have // been called. -@@ -906,7 +938,7 @@ bool TransportSecurityState::GetStaticPKPState(const std::string& host, +@@ -874,7 +906,7 @@ bool TransportSecurityState::GetStaticPKPState(const std::string& host, PreloadResult result; if (host_pins_.has_value()) { // Ensure that |host| is a valid hostname before processing. @@ -300,7 +300,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ return false; } // Normalize any trailing '.' used for DNS suffix searches. -@@ -994,21 +1026,24 @@ bool TransportSecurityState::GetStaticPKPState(const std::string& host, +@@ -962,21 +994,24 @@ bool TransportSecurityState::GetStaticPKPState(const std::string& host, return false; } @@ -331,7 +331,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ if (canonicalized_host.empty()) return false; -@@ -1045,11 +1080,12 @@ bool TransportSecurityState::GetDynamicSTSState(const std::string& host, +@@ -1013,11 +1048,12 @@ bool TransportSecurityState::GetDynamicSTSState(const std::string& host, return false; } @@ -349,7 +349,7 @@ diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_state.h --- a/net/http/transport_security_state.h +++ b/net/http/transport_security_state.h -@@ -328,8 +328,8 @@ class NET_EXPORT TransportSecurityState { +@@ -323,8 +323,8 @@ class NET_EXPORT TransportSecurityState { // primary public interface; direct access to STS and PKP states is best // left to tests. The caller needs to handle the optional pinning override // when is_issued_by_known_root is false. @@ -360,7 +360,7 @@ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_s const NetLogWithSource& net_log = NetLogWithSource()); PKPStatus CheckPublicKeyPins( const HostPortPair& host_port_pair, -@@ -340,7 +340,7 @@ class NET_EXPORT TransportSecurityState { +@@ -335,7 +335,7 @@ class NET_EXPORT TransportSecurityState { const PublicKeyPinReportStatus report_status, const NetworkAnonymizationKey& network_anonymization_key, std::string* failure_log); @@ -369,7 +369,7 @@ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_s // Returns CT_REQUIREMENTS_NOT_MET if a connection violates CT policy // requirements: that is, if a connection to |host|, using the validated -@@ -429,7 +429,7 @@ class NET_EXPORT TransportSecurityState { +@@ -424,7 +424,7 @@ class NET_EXPORT TransportSecurityState { // // If an entry is deleted, the new state will be persisted through // the Delegate (if any). @@ -378,7 +378,7 @@ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_s // Returns true and updates |*result| if |host| has dynamic or static // HSTS/HPKP (respectively) state. If multiple entries match |host|, dynamic -@@ -439,8 +439,8 @@ class NET_EXPORT TransportSecurityState { +@@ -434,8 +434,8 @@ class NET_EXPORT TransportSecurityState { // // Note that these methods are not const because they opportunistically remove // entries that have expired. @@ -389,7 +389,7 @@ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_s // Returns true and updates |*result| iff |host| has static HSTS/HPKP // (respectively) state. If multiple entries match |host|, the most specific -@@ -454,22 +454,24 @@ class NET_EXPORT TransportSecurityState { +@@ -449,22 +449,24 @@ class NET_EXPORT TransportSecurityState { // // Note that these methods are not const because they opportunistically remove // entries that have expired. @@ -419,7 +419,7 @@ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_s const base::Time& expiry, bool include_subdomains, const HashValueVector& hashes, -@@ -517,7 +519,7 @@ class NET_EXPORT TransportSecurityState { +@@ -512,7 +514,7 @@ class NET_EXPORT TransportSecurityState { typedef ExpiringCache> ReportCache; @@ -428,7 +428,7 @@ diff --git a/net/http/transport_security_state.h b/net/http/transport_security_s // IsBuildTimely returns true if the current build is new enough ensure that // built in security information (i.e. HSTS preloading and pinning -@@ -543,11 +545,13 @@ class NET_EXPORT TransportSecurityState { +@@ -538,11 +540,13 @@ class NET_EXPORT TransportSecurityState { // any previous state for the |host|, including static entries. // // The new state for |host| is persisted using the Delegate (if any). @@ -504,7 +504,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque return std::make_unique( request, UpgradeSchemeToCryptographic(url), // Use status code 307 to preserve the method, so POST requests work. -@@ -1076,7 +1076,7 @@ void URLRequestHttpJob::ProcessStrictTransportSecurityHeader() { +@@ -1055,7 +1055,7 @@ void URLRequestHttpJob::ProcessStrictTransportSecurityHeader() { HttpResponseHeaders* headers = GetResponseHeaders(); std::string value; if (headers->EnumerateHeader(nullptr, "Strict-Transport-Security", &value)) @@ -513,7 +513,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque } void URLRequestHttpJob::OnStartCompleted(int result) { -@@ -1146,7 +1146,7 @@ void URLRequestHttpJob::OnStartCompleted(int result) { +@@ -1125,7 +1125,7 @@ void URLRequestHttpJob::OnStartCompleted(int result) { TransportSecurityState* state = context->transport_security_state(); NotifySSLCertificateError( result, transaction_->GetResponseInfo()->ssl_info, @@ -525,7 +525,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque diff --git a/services/network/network_context.cc b/services/network/network_context.cc --- a/services/network/network_context.cc +++ b/services/network/network_context.cc -@@ -1887,17 +1887,19 @@ void NetworkContext::SetCorsOriginAccessListsForOrigin( +@@ -1884,17 +1884,19 @@ void NetworkContext::SetCorsOriginAccessListsForOrigin( std::move(callback).Run(); } @@ -548,7 +548,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont IsHSTSActiveForHostCallback callback) { net::TransportSecurityState* security_state = url_request_context_->transport_security_state(); -@@ -1907,10 +1909,10 @@ void NetworkContext::IsHSTSActiveForHost(const std::string& host, +@@ -1904,10 +1906,10 @@ void NetworkContext::IsHSTSActiveForHost(const std::string& host, return; } @@ -561,7 +561,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont GetHSTSStateCallback callback) { base::Value::Dict result; -@@ -1946,10 +1948,10 @@ void NetworkContext::GetHSTSState(const std::string& domain, +@@ -1943,10 +1945,10 @@ void NetworkContext::GetHSTSState(const std::string& domain, net::TransportSecurityState::STSState dynamic_sts_state; net::TransportSecurityState::PKPState dynamic_pkp_state; bool found_sts_dynamic = transport_security_state->GetDynamicSTSState( @@ -574,7 +574,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont if (found_sts_dynamic) { result.Set("dynamic_upgrade_mode", static_cast(dynamic_sts_state.upgrade_mode)); -@@ -1985,6 +1987,7 @@ void NetworkContext::GetHSTSState(const std::string& domain, +@@ -1982,6 +1984,7 @@ void NetworkContext::GetHSTSState(const std::string& domain, } void NetworkContext::DeleteDynamicDataForHost( @@ -582,7 +582,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont const std::string& host, DeleteDynamicDataForHostCallback callback) { net::TransportSecurityState* transport_security_state = -@@ -1995,7 +1998,7 @@ void NetworkContext::DeleteDynamicDataForHost( +@@ -1992,7 +1995,7 @@ void NetworkContext::DeleteDynamicDataForHost( } std::move(callback).Run( @@ -591,7 +591,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont } void NetworkContext::EnableStaticKeyPinningForTesting( -@@ -2062,7 +2065,7 @@ void NetworkContext::PreconnectSockets( +@@ -2125,7 +2128,7 @@ void NetworkContext::PreconnectSockets( DCHECK(!require_network_anonymization_key_ || !network_anonymization_key.IsEmpty()); @@ -600,7 +600,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont // |PreconnectSockets| may receive arguments from the renderer, which is not // guaranteed to validate them. -@@ -2882,12 +2885,15 @@ void NetworkContext::OnConnectionError() { +@@ -2945,12 +2948,15 @@ void NetworkContext::OnConnectionError() { std::move(on_connection_close_callback_).Run(this); } @@ -641,7 +641,7 @@ diff --git a/services/network/network_context.h b/services/network/network_conte const std::string& host, DeleteDynamicDataForHostCallback callback) override; void SetCorsOriginAccessListsForOrigin( -@@ -716,7 +718,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext +@@ -724,7 +726,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext mojo::PendingRemote cookie_observer, net::FirstPartySetMetadata first_party_set_metadata); @@ -654,7 +654,7 @@ diff --git a/services/network/network_context.h b/services/network/network_conte diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom --- a/services/network/public/mojom/network_context.mojom +++ b/services/network/public/mojom/network_context.mojom -@@ -1509,16 +1509,16 @@ interface NetworkContext { +@@ -1529,16 +1529,16 @@ interface NetworkContext { // Adds explicitly-specified data as if it was processed from an // HSTS header. Used by tests and implementation of chrome://net-internals. @@ -674,7 +674,7 @@ diff --git a/services/network/public/mojom/network_context.mojom b/services/netw => (mojo_base.mojom.DictionaryValue state); // Sets allowed and blocked origins respectively for the URLLoaderFactory -@@ -1537,7 +1537,7 @@ interface NetworkContext { +@@ -1557,7 +1557,7 @@ interface NetworkContext { // Deletes any dynamic data stored for |host| from the transport // security state. Returns true iff an entry was deleted. // See net::TransportSecurityState::DeleteDynamicDataForHost for more detail. diff --git a/build/patches/00Partitioning-all-cookies-by-top-frame-domain.patch b/build/patches/00Partitioning-all-cookies-by-top-frame-domain.patch index 79465c9f..8c8061d3 100644 --- a/build/patches/00Partitioning-all-cookies-by-top-frame-domain.patch +++ b/build/patches/00Partitioning-all-cookies-by-top-frame-domain.patch @@ -16,18 +16,17 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html net/cookies/cookie_deletion_info.cc | 3 ++- net/cookies/parsed_cookie.h | 7 ++++++- net/extras/sqlite/sqlite_persistent_cookie_store.cc | 10 ++++++++++ - services/network/cookie_settings.cc | 12 ++++++++++-- services/network/restricted_cookie_manager.cc | 3 +++ .../renderer/modules/cookie_store/cookie_init.idl | 2 +- .../renderer/modules/cookie_store/cookie_store.cc | 12 ++++++++++++ .../cookie_store/cookie_store_delete_options.idl | 2 +- ui/webui/webui_allowlist.cc | 1 + - 13 files changed, 58 insertions(+), 28 deletions(-) + 12 files changed, 48 insertions(+), 26 deletions(-) diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc --- a/chrome/browser/net/profile_network_context_service.cc +++ b/chrome/browser/net/profile_network_context_service.cc -@@ -628,14 +628,14 @@ ProfileNetworkContextService::CreateCookieManagerParams( +@@ -613,14 +613,14 @@ ProfileNetworkContextService::CreateCookieManagerParams( // UI to interact with SameSite cookies on accounts.google.com, which is used // for displaying a list of available accounts on the NTP // (chrome://new-tab-page), etc. @@ -49,7 +48,7 @@ diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/brow diff --git a/components/content_settings/core/common/cookie_settings_base.cc b/components/content_settings/core/common/cookie_settings_base.cc --- a/components/content_settings/core/common/cookie_settings_base.cc +++ b/components/content_settings/core/common/cookie_settings_base.cc -@@ -326,7 +326,7 @@ CookieSettingsBase::GetCookieSettingInternal( +@@ -318,7 +318,7 @@ CookieSettingsBase::GetCookieSettingInternal( absl::optional scope; if (block_third) { scope = IsAllowed(setting) @@ -61,8 +60,8 @@ diff --git a/components/content_settings/core/common/cookie_settings_base.cc b/c diff --git a/net/base/features.cc b/net/base/features.cc --- a/net/base/features.cc +++ b/net/base/features.cc -@@ -268,8 +268,8 @@ BASE_FEATURE(kWaitForFirstPartySetsInit, - base::FEATURE_ENABLED_BY_DEFAULT); +@@ -260,8 +260,8 @@ BASE_FEATURE(kWaitForFirstPartySetsInit, + base::FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kPartitionedCookies, - "PartitionedCookies", @@ -70,9 +69,9 @@ diff --git a/net/base/features.cc b/net/base/features.cc + "PartitionedCookies", // guard this + base::FEATURE_ENABLED_BY_DEFAULT); // guard this - BASE_FEATURE(kNoncedPartitionedCookies, - "NoncedPartitionedCookies", -@@ -284,8 +284,8 @@ BASE_FEATURE(kStaticKeyPinningEnforcement, + BASE_FEATURE(kBlockTruncatedCookies, + "BlockTruncatedCookies", +@@ -272,8 +272,8 @@ BASE_FEATURE(kStaticKeyPinningEnforcement, base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kCookieDomainRejectNonASCII, @@ -83,21 +82,21 @@ diff --git a/net/base/features.cc b/net/base/features.cc // Enables partitioning of third party storage (IndexedDB, CacheStorage, etc.) // by the top level site to reduce fingerprinting. -@@ -491,8 +491,8 @@ BASE_FEATURE(kDigestAuthEnableSecureAlgorithms, +@@ -469,8 +469,8 @@ BASE_FEATURE(kDigestAuthEnableSecureAlgorithms, + // are disabled by default. Partitioned storage will not be allowed if // third-party cookies are disabled due to a specific rule. - // TODO(crbug.com/1468277): Default enable when UI work is complete. BASE_FEATURE(kThirdPartyPartitionedStorageAllowedByDefault, - "ThirdPartyPartitionedStorageAllowedByDefault", -- base::FEATURE_DISABLED_BY_DEFAULT); +- base::FEATURE_ENABLED_BY_DEFAULT); + "ThirdPartyPartitionedStorageAllowedByDefault", // must be + base::FEATURE_DISABLED_BY_DEFAULT); // disabled - BASE_FEATURE(kCookieDeprecationFacilitatedTestingLabels, - "CookieDeprecationFacilitatedTestingLabels", + BASE_FEATURE(kPriorityHeader, + "PriorityHeader", diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc --- a/net/cookies/canonical_cookie.cc +++ b/net/cookies/canonical_cookie.cc -@@ -1468,8 +1468,6 @@ bool CanonicalCookie::IsCanonicalForFromStorage() const { +@@ -1469,8 +1469,6 @@ bool CanonicalCookie::IsCanonicalForFromStorage() const { if (IsPartitioned()) { if (CookiePartitionKey::HasNonce(partition_key_)) return true; @@ -106,7 +105,7 @@ diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc } return true; -@@ -1726,15 +1724,7 @@ bool CanonicalCookie::IsCookiePartitionedValid(const GURL& url, +@@ -1727,15 +1725,7 @@ bool CanonicalCookie::IsCookiePartitionedValid(const GURL& url, bool secure, bool is_partitioned, bool partition_has_nonce) { @@ -163,7 +162,7 @@ diff --git a/net/cookies/parsed_cookie.h b/net/cookies/parsed_cookie.h diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store.cc b/net/extras/sqlite/sqlite_persistent_cookie_store.cc --- a/net/extras/sqlite/sqlite_persistent_cookie_store.cc +++ b/net/extras/sqlite/sqlite_persistent_cookie_store.cc -@@ -803,6 +803,16 @@ bool SQLitePersistentCookieStore::Backend::DoInitializeDatabase() { +@@ -814,6 +814,16 @@ bool SQLitePersistentCookieStore::Backend::DoInitializeDatabase() { if (!restore_old_session_cookies_) DeleteSessionCookiesOnStartup(); @@ -180,42 +179,10 @@ diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store.cc b/net/extras/sq return true; } -diff --git a/services/network/cookie_settings.cc b/services/network/cookie_settings.cc ---- a/services/network/cookie_settings.cc -+++ b/services/network/cookie_settings.cc -@@ -30,6 +30,11 @@ - namespace network { - namespace { - -+bool IsThirdPartyAllowed(const ContentSettingPatternSource& setting) { -+ return setting.primary_pattern.MatchesAllHosts() && -+ !setting.secondary_pattern.MatchesAllHosts(); -+} -+ - const ContentSettingPatternSource* FindMatchingSetting( - const GURL& primary_url, - const GURL& secondary_url, -@@ -185,11 +190,14 @@ net::NetworkDelegate::PrivacySetting CookieSettings::IsPrivacyModeEnabled( - - CookieSettings::ThirdPartyBlockingScope - CookieSettings::GetThirdPartyBlockingScope(const GURL& first_party_url) const { -- // If cookies are allowed for the first-party URL then we allow -+ // If cookies are allowed for the thirdy-party URL then we allow - // partitioned cross-site cookies. -+ // partitioned are the default for all cookies, so we allow all cookies -+ // if the user want so. - if (const ContentSettingPatternSource* match = FindMatchingSetting( - first_party_url, first_party_url, content_settings_); -- !match || match->GetContentSetting() == CONTENT_SETTING_ALLOW) { -+ match && IsThirdPartyAllowed(*match) && -+ match->GetContentSetting() == CONTENT_SETTING_ALLOW) { - return ThirdPartyBlockingScope::kUnpartitionedOnly; - } - return ThirdPartyBlockingScope::kUnpartitionedAndPartitioned; diff --git a/services/network/restricted_cookie_manager.cc b/services/network/restricted_cookie_manager.cc --- a/services/network/restricted_cookie_manager.cc +++ b/services/network/restricted_cookie_manager.cc -@@ -798,6 +798,9 @@ void RestrictedCookieManager::SetCookieFromString( +@@ -808,6 +808,9 @@ void RestrictedCookieManager::SetCookieFromString( std::move(callback).Run(site_for_cookies_ok, top_frame_origin_ok); callback = base::DoNothing(); diff --git a/build/patches/00Remove-GoogleAccountsPrivateApiHost.patch b/build/patches/00Remove-GoogleAccountsPrivateApiHost.patch index 705d32d4..ccd24a96 100644 --- a/build/patches/00Remove-GoogleAccountsPrivateApiHost.patch +++ b/build/patches/00Remove-GoogleAccountsPrivateApiHost.patch @@ -42,7 +42,7 @@ diff --git a/chrome/browser/signin/google_accounts_private_api_util.cc b/chrome/ diff --git a/chrome/browser/trusted_vault/trusted_vault_encryption_keys_tab_helper.cc b/chrome/browser/trusted_vault/trusted_vault_encryption_keys_tab_helper.cc --- a/chrome/browser/trusted_vault/trusted_vault_encryption_keys_tab_helper.cc +++ b/chrome/browser/trusted_vault/trusted_vault_encryption_keys_tab_helper.cc -@@ -56,8 +56,7 @@ class EncryptionKeyApi +@@ -57,8 +57,7 @@ class EncryptionKeyApi trusted_vault_keys, SetEncryptionKeysCallback callback) override { // Extra safeguard. @@ -52,7 +52,7 @@ diff --git a/chrome/browser/trusted_vault/trusted_vault_encryption_keys_tab_help return; } -@@ -90,8 +89,7 @@ class EncryptionKeyApi +@@ -91,8 +90,7 @@ class EncryptionKeyApi int method_type_hint, AddTrustedRecoveryMethodCallback callback) override { // Extra safeguard. diff --git a/build/patches/00Remove-detection-of-captive-portals.patch b/build/patches/00Remove-detection-of-captive-portals.patch index 787ea678..52d9205c 100644 --- a/build/patches/00Remove-detection-of-captive-portals.patch +++ b/build/patches/00Remove-detection-of-captive-portals.patch @@ -10,14 +10,14 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc --- a/chrome/browser/net/profile_network_context_service.cc +++ b/chrome/browser/net/profile_network_context_service.cc -@@ -432,7 +432,7 @@ void ProfileNetworkContextService::UpdateAdditionalCertificates() { +@@ -411,7 +411,7 @@ void ProfileNetworkContextService::UpdateAdditionalCertificates() { void ProfileNetworkContextService::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { - registry->RegisterBooleanPref( -- embedder_support::kAlternateErrorPagesEnabled, true, -+ embedder_support::kAlternateErrorPagesEnabled, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + registry->RegisterBooleanPref(embedder_support::kAlternateErrorPagesEnabled, +- true); ++ false); registry->RegisterBooleanPref(prefs::kQuicAllowed, true); registry->RegisterBooleanPref(prefs::kGloballyScopeHTTPAuthCacheEnabled, + false); -- 2.25.1 diff --git a/build/patches/00Remove-support-for-device-memory-and-cpu-recovery.patch b/build/patches/00Remove-support-for-device-memory-and-cpu-recovery.patch index 1aae7171..0a20178e 100644 --- a/build/patches/00Remove-support-for-device-memory-and-cpu-recovery.patch +++ b/build/patches/00Remove-support-for-device-memory-and-cpu-recovery.patch @@ -120,7 +120,7 @@ diff --git a/third_party/blink/common/device_memory/approximated_device_memory.c diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -1971,8 +1971,8 @@ BASE_FEATURE(kWebFontsCacheAwareTimeoutAdaption, +@@ -2034,8 +2034,8 @@ BASE_FEATURE(kWebFontsCacheAwareTimeoutAdaption, // Controls whether the implementation of the performance.measureMemory // web API uses PerformanceManager or not. BASE_FEATURE(kWebMeasureMemoryViaPerformanceManager, diff --git a/build/patches/00Restore-LastTabStandingTracker.patch b/build/patches/00Restore-LastTabStandingTracker.patch index 9e7b0f4a..05daf670 100644 --- a/build/patches/00Restore-LastTabStandingTracker.patch +++ b/build/patches/00Restore-LastTabStandingTracker.patch @@ -27,7 +27,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -1925,6 +1925,16 @@ static_library("browser") { +@@ -1970,6 +1970,16 @@ static_library("browser") { ] } @@ -378,7 +378,7 @@ new file mode 100644 diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc -@@ -121,6 +121,7 @@ +@@ -123,6 +123,7 @@ #include "chrome/browser/password_manager/password_reuse_manager_factory.h" #include "chrome/browser/password_manager/password_store_factory.h" #include "chrome/browser/permissions/adaptive_quiet_notification_permission_ui_enabler.h" @@ -386,7 +386,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc #include "chrome/browser/permissions/notifications_engagement_service_factory.h" #include "chrome/browser/permissions/one_time_permissions_tracker_factory.h" #include "chrome/browser/permissions/origin_keyed_permission_action_service_factory.h" -@@ -894,6 +895,7 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -921,6 +922,7 @@ void ChromeBrowserMainExtraPartsProfiles:: #if BUILDFLAG(BUILD_WITH_TFLITE_LIB) OnDeviceTailModelServiceFactory::GetInstance(); #endif @@ -397,7 +397,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc --- a/chrome/browser/ui/tab_helpers.cc +++ b/chrome/browser/ui/tab_helpers.cc -@@ -64,6 +64,7 @@ +@@ -63,6 +63,7 @@ #include "chrome/browser/page_load_metrics/page_load_metrics_initialize.h" #include "chrome/browser/password_manager/chrome_password_manager_client.h" #include "chrome/browser/performance_manager/public/user_tuning/user_performance_tuning_manager.h" @@ -405,7 +405,7 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc #include "chrome/browser/permissions/one_time_permissions_tracker_helper.h" #include "chrome/browser/predictors/loading_predictor_factory.h" #include "chrome/browser/predictors/loading_predictor_tab_helper.h" -@@ -388,6 +389,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { +@@ -396,6 +397,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { HistoryClustersTabHelper::CreateForWebContents(web_contents); HttpsOnlyModeTabHelper::CreateForWebContents(web_contents); webapps::InstallableManager::CreateForWebContents(web_contents); diff --git a/build/patches/00Show-warnings-on-downloads-over-HTTP.patch b/build/patches/00Show-warnings-on-downloads-over-HTTP.patch index a987e031..e9ea2bde 100644 --- a/build/patches/00Show-warnings-on-downloads-over-HTTP.patch +++ b/build/patches/00Show-warnings-on-downloads-over-HTTP.patch @@ -10,7 +10,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc -@@ -1221,9 +1221,9 @@ BASE_FEATURE(kTreatUnsafeDownloadsAsActive, +@@ -1228,9 +1228,9 @@ BASE_FEATURE(kTreatUnsafeDownloadsAsActive, base::FEATURE_ENABLED_BY_DEFAULT); // Show warnings on downloads not delivered over HTTPS. diff --git a/build/patches/00TEMP-Add-a-log-to-track-strange-behavior.patch b/build/patches/00TEMP-Add-a-log-to-track-strange-behavior.patch index 27aba87a..7d1f9cd3 100644 --- a/build/patches/00TEMP-Add-a-log-to-track-strange-behavior.patch +++ b/build/patches/00TEMP-Add-a-log-to-track-strange-behavior.patch @@ -10,7 +10,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc -@@ -2982,6 +2982,7 @@ void SpdySession::OnHeaders(spdy::SpdyStreamId stream_id, +@@ -2964,6 +2964,7 @@ void SpdySession::OnHeaders(spdy::SpdyStreamId stream_id, if (it == active_streams_.end()) { // NOTE: it may just be that the stream was cancelled. LOG(WARNING) << "Received HEADERS for invalid stream " << stream_id; diff --git a/build/patches/00WIN-Add-some-prefs-to-secure-preferences.patch b/build/patches/00WIN-Add-some-prefs-to-secure-preferences.patch index 119873ac..d71ad7d6 100644 --- a/build/patches/00WIN-Add-some-prefs-to-secure-preferences.patch +++ b/build/patches/00WIN-Add-some-prefs-to-secure-preferences.patch @@ -9,7 +9,7 @@ Subject: WIN Add some prefs to secure preferences diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browser/prefs/chrome_pref_service_factory.cc --- a/chrome/browser/prefs/chrome_pref_service_factory.cc +++ b/chrome/browser/prefs/chrome_pref_service_factory.cc -@@ -117,6 +117,14 @@ bool g_disable_domain_check_for_testing = false; +@@ -121,6 +121,14 @@ bool g_disable_domain_check_for_testing = false; // See CleanupDeprecatedTrackedPreferences() in pref_hash_filter.cc to remove a // deprecated tracked preference. const prefs::TrackedPreferenceMetadata kTrackedPrefs[] = { diff --git a/build/patches/00WIN-Disable-TabHoverCard-images.patch b/build/patches/00WIN-Disable-TabHoverCard-images.patch index bf84ed34..55727f00 100644 --- a/build/patches/00WIN-Disable-TabHoverCard-images.patch +++ b/build/patches/00WIN-Disable-TabHoverCard-images.patch @@ -10,7 +10,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc --- a/chrome/browser/ui/ui_features.cc +++ b/chrome/browser/ui/ui_features.cc -@@ -212,11 +212,7 @@ BASE_FEATURE(kTabHoverCardImageSettings, +@@ -217,11 +217,7 @@ BASE_FEATURE(kTabHoverCardImageSettings, // https://crbug.com/928954 BASE_FEATURE(kTabHoverCardImages, "TabHoverCardImages", diff --git a/build/patches/00WIN-Disable-sharing-hub.patch b/build/patches/00WIN-Disable-sharing-hub.patch index 340216a5..59928976 100644 --- a/build/patches/00WIN-Disable-sharing-hub.patch +++ b/build/patches/00WIN-Disable-sharing-hub.patch @@ -25,7 +25,7 @@ diff --git a/chrome/browser/sharing_hub/sharing_hub_features.cc b/chrome/browser diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc --- a/chrome/browser/ui/browser_command_controller.cc +++ b/chrome/browser/ui/browser_command_controller.cc -@@ -1701,10 +1701,10 @@ void BrowserCommandController::UpdateCommandsForFullscreenMode() { +@@ -1708,10 +1708,10 @@ void BrowserCommandController::UpdateCommandsForFullscreenMode() { command_updater_.UpdateCommandEnabled(IDC_CHROME_WHATS_NEW, show_main_ui); #endif command_updater_.UpdateCommandEnabled(IDC_CONTENT_CONTEXT_SHARING_SUBMENU, @@ -42,7 +42,7 @@ diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc --- a/chrome/browser/ui/browser_commands.cc +++ b/chrome/browser/ui/browser_commands.cc -@@ -1555,6 +1555,7 @@ void SendTabToSelfFromPageAction(Browser* browser) { +@@ -1556,6 +1556,7 @@ void SendTabToSelfFromPageAction(Browser* browser) { } bool CanGenerateQrCode(const Browser* browser) { diff --git a/build/patches/00WIN-Enable-Network-Service-Sandbox-and-CIG.patch b/build/patches/00WIN-Enable-Network-Service-Sandbox-and-CIG.patch index 6313ed16..ad985a1f 100644 --- a/build/patches/00WIN-Enable-Network-Service-Sandbox-and-CIG.patch +++ b/build/patches/00WIN-Enable-Network-Service-Sandbox-and-CIG.patch @@ -11,7 +11,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -776,7 +776,7 @@ const char kDEPRECATED_AllowlistedExtensionID[] = "whitelisted-extension-id"; +@@ -774,7 +774,7 @@ const char kDEPRECATED_AllowlistedExtensionID[] = "whitelisted-extension-id"; // https://blogs.windows.com/blog/tag/code-integrity-guard/. BASE_FEATURE(kNetworkServiceCodeIntegrity, "NetworkServiceCodeIntegrity", diff --git a/build/patches/00WIN-Fix-log-to-file.patch b/build/patches/00WIN-Fix-log-to-file.patch index 4f299e23..e8fb8957 100644 --- a/build/patches/00WIN-Fix-log-to-file.patch +++ b/build/patches/00WIN-Fix-log-to-file.patch @@ -13,7 +13,7 @@ Log rotation enabled by default. diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc --- a/chrome/common/logging_chrome.cc +++ b/chrome/common/logging_chrome.cc -@@ -185,7 +185,7 @@ LoggingDestination DetermineLoggingDestination( +@@ -190,7 +190,7 @@ LoggingDestination DetermineLoggingDestination( return kDefaultLoggingMode; } @@ -22,7 +22,7 @@ diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc bool RotateLogFile(const base::FilePath& target_path) { DCHECK(!target_path.empty()); // If the old log file doesn't exist, do nothing. -@@ -230,7 +230,7 @@ bool RotateLogFile(const base::FilePath& target_path) { +@@ -235,7 +235,7 @@ bool RotateLogFile(const base::FilePath& target_path) { return true; } @@ -31,7 +31,7 @@ diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc #if BUILDFLAG(IS_CHROMEOS_ASH) base::FilePath SetUpSymlinkIfNeeded(const base::FilePath& symlink_path, -@@ -392,6 +392,10 @@ void InitChromeLogging(const base::CommandLine& command_line, +@@ -397,6 +397,10 @@ void InitChromeLogging(const base::CommandLine& command_line, // since that will remove the newly created link instead. delete_old_log_file = APPEND_TO_OLD_LOG_FILE; #endif // BUILDFLAG(IS_CHROMEOS_ASH) @@ -42,7 +42,7 @@ diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc } else { log_locking_state = DONT_LOCK_LOG_FILE; } -@@ -546,7 +550,7 @@ bool DialogsAreSuppressed() { +@@ -551,7 +555,7 @@ bool DialogsAreSuppressed() { return dialogs_are_suppressed_; } @@ -50,7 +50,7 @@ diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc +#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) base::FilePath GenerateTimestampedName(const base::FilePath& base_path, base::Time timestamp) { - base::Time::Exploded time_deets; + return base_path.InsertBeforeExtensionASCII( diff --git a/chrome/common/logging_chrome.h b/chrome/common/logging_chrome.h --- a/chrome/common/logging_chrome.h +++ b/chrome/common/logging_chrome.h @@ -80,18 +80,18 @@ diff --git a/chrome/common/logging_chrome.h b/chrome/common/logging_chrome.h diff --git a/content/app/content_main.cc b/content/app/content_main.cc --- a/content/app/content_main.cc +++ b/content/app/content_main.cc -@@ -308,7 +308,11 @@ RunContentProcess(ContentMainParams params, +@@ -311,7 +311,11 @@ RunContentProcess(ContentMainParams params, // Route stdio to parent console (if any) or create one. if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableLogging)) { -- base::RouteStdioToConsole(true); +- base::RouteStdioToConsole(/*create_console_if_not_found*/ true); + std::string logging_destination = + base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(switches::kEnableLogging); + if (logging_destination == "stderr") { -+ base::RouteStdioToConsole(true); ++ base::RouteStdioToConsole(/*create_console_if_not_found*/ true); + } - } - #endif - + } else if (base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kHeadless)) { + // When running in headless mode we want stdio routed however if -- 2.25.1 diff --git a/build/patches/00WIN-enable-pdf-plugin.patch b/build/patches/00WIN-enable-pdf-plugin.patch index 4d9cabcd..602de9c5 100644 --- a/build/patches/00WIN-enable-pdf-plugin.patch +++ b/build/patches/00WIN-enable-pdf-plugin.patch @@ -10,7 +10,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc -@@ -2053,7 +2053,9 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() { +@@ -2054,7 +2054,9 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() { } PluginData* LocalFrame::GetPluginData() const { diff --git a/build/patches/00Warning-message-for-unsupported-hardware-aes.patch b/build/patches/00Warning-message-for-unsupported-hardware-aes.patch index e927b385..3cf27052 100644 --- a/build/patches/00Warning-message-for-unsupported-hardware-aes.patch +++ b/build/patches/00Warning-message-for-unsupported-hardware-aes.patch @@ -58,7 +58,7 @@ diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn "//headless:headless_non_renderer", "//headless:headless_shell_browser_lib", "//net:net_resources", -@@ -1709,6 +1710,8 @@ if (is_android) { +@@ -1705,6 +1706,8 @@ if (is_android) { "//chrome/common/profiler", "//chrome/gpu", "//chrome/renderer", @@ -80,7 +80,7 @@ diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegat #if BUILDFLAG(IS_WIN) #include -@@ -1115,6 +1118,13 @@ absl::optional ChromeMainDelegate::BasicStartupComplete() { +@@ -1133,6 +1136,13 @@ absl::optional ChromeMainDelegate::BasicStartupComplete() { return chrome::RESULT_CODE_INVALID_SANDBOX_STATE; #endif @@ -97,7 +97,7 @@ diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegat diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd -@@ -7035,6 +7035,10 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -7051,6 +7051,10 @@ Keep your key file in a safe place. You will need it to create new versions of y You are using an unsupported feature flag: $1SignedHTTPExchange. Stability and security will suffer. @@ -111,7 +111,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -8152,6 +8152,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -8412,6 +8412,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kViewportSegmentsDescription, kOsAll, FEATURE_VALUE_TYPE(features::kViewportSegments)}, @@ -125,7 +125,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -888,6 +888,10 @@ const char kViewportSegmentsDescription[] = +@@ -892,6 +892,10 @@ const char kViewportSegmentsDescription[] = "Enable the viewport segment API, giving information about the logical " "segments of the device (dual screen and foldable devices)"; @@ -139,7 +139,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -635,6 +635,9 @@ extern const char kDeviceForceScheduledRebootDescription[]; +@@ -641,6 +641,9 @@ extern const char kDeviceForceScheduledRebootDescription[]; extern const char kDevicePostureName[]; extern const char kDevicePostureDescription[]; @@ -152,7 +152,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/ui/startup/bad_flags_prompt.cc b/chrome/browser/ui/startup/bad_flags_prompt.cc --- a/chrome/browser/ui/startup/bad_flags_prompt.cc +++ b/chrome/browser/ui/startup/bad_flags_prompt.cc -@@ -231,6 +231,15 @@ void ShowBadFlagsPrompt(content::WebContents* web_contents) { +@@ -239,6 +239,15 @@ void ShowBadFlagsPrompt(content::WebContents* web_contents) { return; } } @@ -171,7 +171,7 @@ diff --git a/chrome/browser/ui/startup/bad_flags_prompt.cc b/chrome/browser/ui/s diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc -@@ -3493,6 +3493,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( +@@ -3489,6 +3489,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( switches::kLacrosUseChromeosProtectedAv1, #endif switches::kDesktopModeViewportMetaEnabled, @@ -182,7 +182,7 @@ diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -778,6 +778,11 @@ BASE_FEATURE(kNoStatePrefetchHoldback, +@@ -600,6 +600,11 @@ BASE_FEATURE(kNoStatePrefetchHoldback, "NoStatePrefetchHoldback", base::FEATURE_DISABLED_BY_DEFAULT); @@ -197,7 +197,7 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h -@@ -176,6 +176,7 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kNetworkServiceInProcess); +@@ -155,6 +155,7 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kNetworkServiceInProcess); CONTENT_EXPORT BASE_DECLARE_FEATURE(kNotificationContentImage); CONTENT_EXPORT BASE_DECLARE_FEATURE(kNotificationTriggers); CONTENT_EXPORT BASE_DECLARE_FEATURE(kNoStatePrefetchHoldback); diff --git a/build/patches/00add-browser-policy.patch b/build/patches/00add-browser-policy.patch index 17785437..b91fa2c2 100644 --- a/build/patches/00add-browser-policy.patch +++ b/build/patches/00add-browser-policy.patch @@ -118,9 +118,9 @@ diff --git a/base/win/win_util.cc b/base/win/win_util.cc diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -72,9 +72,7 @@ by a child template that "extends" this file. - +@@ -73,9 +73,7 @@ by a child template that "extends" this file. + - @@ -128,7 +128,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro -@@ -85,7 +83,6 @@ by a child template that "extends" this file. +@@ -86,7 +84,6 @@ by a child template that "extends" this file. @@ -136,7 +136,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro -@@ -129,7 +126,6 @@ by a child template that "extends" this file. +@@ -130,7 +127,6 @@ by a child template that "extends" this file. @@ -203,10 +203,10 @@ diff --git a/chrome/browser/policy/chrome_browser_policy_connector.cc b/chrome/b diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc --- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc +++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc -@@ -2032,9 +2032,9 @@ bool AreFuturePoliciesEnabledByDefault() { - // Enable future policies for branded browser tests. - if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kTestType)) +@@ -2046,9 +2046,9 @@ bool AreFuturePoliciesEnabledByDefault() { + if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kTestType)) { return true; + } - version_info::Channel channel = chrome::GetChannel(); - return channel != version_info::Channel::STABLE && - channel != version_info::Channel::BETA; @@ -271,7 +271,7 @@ diff --git a/chrome/browser/signin/chrome_signin_client.cc b/chrome/browser/sign } PrefService* ChromeSigninClient::GetPrefs() { return profile_->GetPrefs(); } -@@ -234,6 +236,9 @@ bool ChromeSigninClient::AreNetworkCallsDelayed() { +@@ -242,6 +244,9 @@ bool ChromeSigninClient::AreNetworkCallsDelayed() { } void ChromeSigninClient::DelayNetworkCall(base::OnceClosure callback) { @@ -431,7 +431,7 @@ diff --git a/chrome/browser/ui/webui/policy/policy_ui_handler.h b/chrome/browser diff --git a/components/commerce/core/commerce_feature_list.cc b/components/commerce/core/commerce_feature_list.cc --- a/components/commerce/core/commerce_feature_list.cc +++ b/components/commerce/core/commerce_feature_list.cc -@@ -160,8 +160,8 @@ BASE_FEATURE(kCommercePriceTrackingChipExperiment, +@@ -159,8 +159,8 @@ BASE_FEATURE(kCommercePriceTrackingChipExperiment, #if BUILDFLAG(IS_ANDROID) BASE_FEATURE(kCommercePriceTrackingRegionLaunched, @@ -442,7 +442,7 @@ diff --git a/components/commerce/core/commerce_feature_list.cc b/components/comm #else BASE_FEATURE(kCommercePriceTrackingRegionLaunched, "CommercePriceTrackingRegionLaunched", -@@ -207,8 +207,8 @@ BASE_FEATURE(kShoppingList, "ShoppingList", base::FEATURE_DISABLED_BY_DEFAULT); +@@ -227,8 +227,8 @@ BASE_FEATURE(kShoppingList, "ShoppingList", base::FEATURE_DISABLED_BY_DEFAULT); #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || \ BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) BASE_FEATURE(kShoppingListRegionLaunched, @@ -453,7 +453,7 @@ diff --git a/components/commerce/core/commerce_feature_list.cc b/components/comm #else BASE_FEATURE(kShoppingListRegionLaunched, "ShoppingListRegionLaunched", -@@ -257,8 +257,8 @@ BASE_FEATURE(kCommerceHintAndroid, +@@ -277,8 +277,8 @@ BASE_FEATURE(kCommerceHintAndroid, base::FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kMerchantWidePromotion, @@ -467,7 +467,7 @@ diff --git a/components/commerce/core/commerce_feature_list.cc b/components/comm diff --git a/components/policy/core/browser/browser_policy_connector.cc b/components/policy/core/browser/browser_policy_connector.cc --- a/components/policy/core/browser/browser_policy_connector.cc +++ b/components/policy/core/browser/browser_policy_connector.cc -@@ -125,6 +125,9 @@ void BrowserPolicyConnector::RegisterPrefs(PrefRegistrySimple* registry) { +@@ -140,6 +140,9 @@ void BrowserPolicyConnector::RegisterPrefs(PrefRegistrySimple* registry) { CloudPolicyRefreshScheduler::kDefaultRefreshDelayMs); registry->RegisterBooleanPref( policy_prefs::kCloudManagementEnrollmentMandatory, false); @@ -480,7 +480,7 @@ diff --git a/components/policy/core/browser/browser_policy_connector.cc b/compon diff --git a/components/policy/core/common/command_line_policy_provider.cc b/components/policy/core/common/command_line_policy_provider.cc --- a/components/policy/core/common/command_line_policy_provider.cc +++ b/components/policy/core/common/command_line_policy_provider.cc -@@ -22,6 +22,9 @@ std::unique_ptr +@@ -23,6 +23,9 @@ std::unique_ptr CommandLinePolicyProvider::CreateIfAllowed( const base::CommandLine& command_line, version_info::Channel channel) { @@ -690,9 +690,9 @@ diff --git a/components/policy/core/common/policy_service_impl.cc b/components/p diff --git a/components/policy/core/common/policy_switches.cc b/components/policy/core/common/policy_switches.cc --- a/components/policy/core/common/policy_switches.cc +++ b/components/policy/core/common/policy_switches.cc -@@ -20,6 +20,8 @@ const char kEncryptedReportingUrl[] = "encrypted-reporting-url"; - // Set policy value by command line. - const char kChromePolicy[] = "policy"; +@@ -24,6 +24,8 @@ const char kChromePolicy[] = "policy"; + // (go/crosman-file-storage-server) to upload log and support packet files. + const char kFileStorageServerUploadUrl[] = "file-storage-server-upload-url"; +const char kForceDisabledPolicies[] = "force-disable-policies"; + @@ -702,10 +702,10 @@ diff --git a/components/policy/core/common/policy_switches.cc b/components/polic diff --git a/components/policy/core/common/policy_switches.h b/components/policy/core/common/policy_switches.h --- a/components/policy/core/common/policy_switches.h +++ b/components/policy/core/common/policy_switches.h -@@ -18,6 +18,7 @@ extern const char kRealtimeReportingUrl[]; - extern const char kEncryptedReportingUrl[]; +@@ -19,6 +19,7 @@ extern const char kEncryptedReportingUrl[]; extern const char kChromePolicy[]; extern const char kSecureConnectApiUrl[]; + extern const char kFileStorageServerUploadUrl[]; +extern const char kForceDisabledPolicies[]; #if BUILDFLAG(IS_CHROMEOS_ASH) extern const char kDisablePolicyKeyVerification[]; @@ -786,7 +786,7 @@ diff --git a/components/policy/resources/webui/policy_row.ts b/components/policy diff --git a/components/policy_strings.grdp b/components/policy_strings.grdp --- a/components/policy_strings.grdp +++ b/components/policy_strings.grdp -@@ -585,8 +585,8 @@ Additional details: +@@ -588,8 +588,8 @@ Additional details: Default @@ -800,7 +800,7 @@ diff --git a/components/policy_strings.grdp b/components/policy_strings.grdp diff --git a/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc b/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc --- a/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc +++ b/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc -@@ -494,6 +494,8 @@ void GaiaCookieManagerService::RegisterPrefs(PrefRegistrySimple* registry) { +@@ -469,6 +469,8 @@ void GaiaCookieManagerService::RegisterPrefs(PrefRegistrySimple* registry) { } void GaiaCookieManagerService::InitCookieListener() { @@ -809,7 +809,7 @@ diff --git a/components/signin/internal/identity_manager/gaia_cookie_manager_ser DCHECK(!cookie_listener_receiver_.is_bound()); network::mojom::CookieManager* cookie_manager = -@@ -1111,6 +1113,8 @@ void GaiaCookieManagerService::OnSetAccountsFinished( +@@ -891,6 +893,8 @@ void GaiaCookieManagerService::OnSetAccountsFinished( } void GaiaCookieManagerService::HandleNextRequest() { @@ -821,7 +821,7 @@ diff --git a/components/signin/internal/identity_manager/gaia_cookie_manager_ser diff --git a/google_apis/gaia/gaia_auth_fetcher.cc b/google_apis/gaia/gaia_auth_fetcher.cc --- a/google_apis/gaia/gaia_auth_fetcher.cc +++ b/google_apis/gaia/gaia_auth_fetcher.cc -@@ -607,6 +607,7 @@ void GaiaAuthFetcher::StartListAccounts() { +@@ -482,6 +482,7 @@ void GaiaAuthFetcher::StartListAccounts() { } } })"); diff --git a/build/patches/00do-not-block-build-incompatible-profiles.patch b/build/patches/00do-not-block-build-incompatible-profiles.patch index bf7f95a1..a7e137d7 100644 --- a/build/patches/00do-not-block-build-incompatible-profiles.patch +++ b/build/patches/00do-not-block-build-incompatible-profiles.patch @@ -4,25 +4,13 @@ Subject: Do not block the build for incompatible profiles License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - .gitignore | 1 - v8/BUILD.gn | 2 +- - 2 files changed, 1 insertion(+), 2 deletions(-) + 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/.gitignore b/.gitignore ---- a/.gitignore -+++ b/.gitignore -@@ -347,7 +347,6 @@ vs-chromium-project.txt - /ui/surface/surface.xml - /ui/surface/surface_gpu_tests.xml - /ui/webui/internal --/v8 - /webkit/data - /webpagereplay_logs/ - /x86-generic_out/ diff --git a/v8/BUILD.gn b/v8/BUILD.gn --- a/v8/BUILD.gn +++ b/v8/BUILD.gn -@@ -2372,7 +2372,7 @@ template("run_mksnapshot") { +@@ -2369,7 +2369,7 @@ template("run_mksnapshot") { # Replace this with --warn-about-builtin-profile-data to see the full # list of builtins with incompatible profiles. diff --git a/build/patches/AImageReader-CFI-crash-mitigations.patch b/build/patches/AImageReader-CFI-crash-mitigations.patch index 647dff86..2bd30dfd 100644 --- a/build/patches/AImageReader-CFI-crash-mitigations.patch +++ b/build/patches/AImageReader-CFI-crash-mitigations.patch @@ -84,7 +84,7 @@ diff --git a/base/android/android_image_reader_compat.h b/base/android/android_i diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -2966,9 +2966,9 @@ +@@ -3018,9 +3018,9 @@ "expiry_milestone": 125 }, { @@ -100,7 +100,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json --- a/gpu/config/gpu_driver_bug_list.json +++ b/gpu/config/gpu_driver_bug_list.json -@@ -3688,6 +3688,22 @@ +@@ -3212,6 +3212,22 @@ "no_downscaled_overlay_promotion" ] }, @@ -126,7 +126,7 @@ diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_lis diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc --- a/gpu/config/gpu_finch_features.cc +++ b/gpu/config/gpu_finch_features.cc -@@ -65,6 +65,11 @@ BASE_FEATURE(kUseGles2ForOopR, +@@ -70,6 +70,11 @@ BASE_FEATURE(kUseGles2ForOopR, #endif ); @@ -141,7 +141,7 @@ diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc diff --git a/gpu/config/gpu_finch_features.h b/gpu/config/gpu_finch_features.h --- a/gpu/config/gpu_finch_features.h +++ b/gpu/config/gpu_finch_features.h -@@ -17,6 +17,7 @@ namespace features { +@@ -22,6 +22,7 @@ namespace features { GPU_EXPORT BASE_DECLARE_FEATURE(kUseGles2ForOopR); // All features in alphabetical order. The features should be documented @@ -177,8 +177,8 @@ diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list.txt --- a/gpu/config/gpu_workaround_list.txt +++ b/gpu/config/gpu_workaround_list.txt -@@ -16,6 +16,7 @@ decode_encode_srgb_for_generatemipmap - depth_stencil_renderbuffer_resize_emulation +@@ -13,6 +13,7 @@ count_all_in_varyings_packing + decode_encode_srgb_for_generatemipmap disable_2d_canvas_auto_flush disable_accelerated_av1_decode +disable_aimagereader @@ -233,7 +233,7 @@ diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -981,6 +981,11 @@ BASE_FEATURE(kHardwareSecureDecryptionExperiment, +@@ -1018,6 +1018,11 @@ BASE_FEATURE(kHardwareSecureDecryptionExperiment, // Allows automatically disabling hardware secure Content Decryption Module // (CDM) after failures or crashes to fallback to software secure CDMs. If this // feature is disabled, the fallback will never happen and users could be stuck @@ -248,7 +248,7 @@ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc diff --git a/media/base/media_switches.h b/media/base/media_switches.h --- a/media/base/media_switches.h +++ b/media/base/media_switches.h -@@ -332,6 +332,7 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kVideoBlitColorAccuracy); +@@ -347,6 +347,7 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kVideoBlitColorAccuracy); MEDIA_EXPORT BASE_DECLARE_FEATURE(kVideoToolboxVideoDecoder); #endif // BUILDFLAG(IS_APPLE) MEDIA_EXPORT BASE_DECLARE_FEATURE(kWebRTCColorAccuracy); diff --git a/build/patches/Add-AllowUserCertificates-flag.patch b/build/patches/Add-AllowUserCertificates-flag.patch index 3bd37caa..a9cceba2 100644 --- a/build/patches/Add-AllowUserCertificates-flag.patch +++ b/build/patches/Add-AllowUserCertificates-flag.patch @@ -18,7 +18,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -231,6 +231,7 @@ import org.chromium.content_public.browser.ScreenOrientationProvider; +@@ -227,6 +227,7 @@ import org.chromium.content_public.browser.ScreenOrientationProvider; import org.chromium.content_public.browser.SelectionPopupController; import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.common.ContentSwitches; @@ -26,7 +26,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv import org.chromium.printing.PrintManagerDelegateImpl; import org.chromium.printing.PrintingController; import org.chromium.printing.PrintingControllerImpl; -@@ -981,6 +982,8 @@ public abstract class ChromeActivity +@@ -984,6 +985,8 @@ public abstract class ChromeActivity super.onStartWithNative(); ChromeActivitySessionTracker.getInstance().onStartWithNative(); ChromeCachedFlags.getInstance().cacheNativeFlags(); @@ -38,7 +38,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -9367,6 +9367,13 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9661,6 +9661,13 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kEnableDrDcDescription, kOsAll, FEATURE_VALUE_TYPE(features::kEnableDrDc)}, @@ -55,7 +55,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -16,6 +16,11 @@ +@@ -14,6 +14,11 @@ namespace flag_descriptions { @@ -70,7 +70,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -42,6 +42,9 @@ namespace flag_descriptions { +@@ -43,6 +43,9 @@ namespace flag_descriptions { // Cross-platform ------------------------------------------------------------- @@ -83,15 +83,15 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -145,6 +145,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -147,6 +147,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { + &feed::kFeedShowSignInCommand, &feed::kFeedSignedOutViewDemotion, &feed::kFeedUserInteractionReliabilityReport, - &feed::kInterestFeedContentSuggestions, + &kAllowUserCertificates, &feed::kInterestFeedV2, &feed::kInterestFeedV2Autoplay, &feed::kInterestFeedV2Hearts, -@@ -473,6 +474,10 @@ BASE_FEATURE(kSearchReadyOmniboxFeature, +@@ -477,6 +478,10 @@ BASE_FEATURE(kSearchReadyOmniboxFeature, "SearchReadyOmnibox", base::FEATURE_DISABLED_BY_DEFAULT); @@ -105,7 +105,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -22,6 +22,7 @@ BASE_DECLARE_FEATURE(kAdvancedPeripheralsSupport); +@@ -23,6 +23,7 @@ BASE_DECLARE_FEATURE(kAdvancedPeripheralsSupport); BASE_DECLARE_FEATURE(kAdvancedPeripheralsSupportTabStrip); BASE_DECLARE_FEATURE(kAllowNewIncognitoTabIntents); BASE_DECLARE_FEATURE(kAndroidAppIntegration); @@ -124,7 +124,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR = "AdaptiveButtonInTopToolbar"; public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_TRANSLATE = "AdaptiveButtonInTopToolbarTranslate"; -@@ -514,6 +515,8 @@ public abstract class ChromeFeatureList { +@@ -501,6 +502,8 @@ public abstract class ChromeFeatureList { /* Alphabetical: */ public static final CachedFlag sAndroidAppIntegration = new CachedFlag(ANDROID_APP_INTEGRATION, false); @@ -133,7 +133,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final CachedFlag sAppMenuMobileSiteOption = new CachedFlag(APP_MENU_MOBILE_SITE_OPTION, false); public static final CachedFlag sBackGestureActivityTabProvider = -@@ -634,6 +637,7 @@ public abstract class ChromeFeatureList { +@@ -642,6 +645,7 @@ public abstract class ChromeFeatureList { public static final List sFlagsCachedFullBrowser = List.of( // clang-format off sAndroidAppIntegration, diff --git a/build/patches/Add-IsCleartextPermitted-flag.patch b/build/patches/Add-IsCleartextPermitted-flag.patch index 20f3b988..7b8e9af9 100644 --- a/build/patches/Add-IsCleartextPermitted-flag.patch +++ b/build/patches/Add-IsCleartextPermitted-flag.patch @@ -16,7 +16,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -9571,6 +9571,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9862,6 +9862,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kForceOffTextAutosizingName, flag_descriptions::kForceOffTextAutosizingDescription, kOsAndroid, FEATURE_VALUE_TYPE(features::kForceOffTextAutosizing)}, @@ -30,7 +30,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1964,6 +1964,10 @@ const char kHttpsUpgradesDescription[] = +@@ -1996,6 +1996,10 @@ const char kHttpsUpgradesDescription[] = "Enable automatically upgrading all top-level navigations to HTTPS with " "fast fallback to HTTP."; @@ -44,7 +44,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1101,6 +1101,9 @@ extern const char kStorageBucketsDescription[]; +@@ -1120,6 +1120,9 @@ extern const char kStorageBucketsDescription[]; extern const char kHideIncognitoMediaMetadataName[]; extern const char kHideIncognitoMediaMetadataDescription[]; diff --git a/build/patches/Add-a-proxy-configuration-page.patch b/build/patches/Add-a-proxy-configuration-page.patch index a0e6d4b4..cbbf5520 100644 --- a/build/patches/Add-a-proxy-configuration-page.patch +++ b/build/patches/Add-a-proxy-configuration-page.patch @@ -19,7 +19,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../java/res/xml/privacy_preferences.xml | 4 + .../privacy/settings/PrivacySettings.java | 1 + .../chrome_autocomplete_provider_client.cc | 2 + - chrome/browser/browser_resources.grd | 4 +- + chrome/browser/browser_resources.grd | 3 + .../extensions/api/proxy/proxy_api_helpers.cc | 2 +- chrome/browser/net/proxy_service_factory.cc | 24 +- chrome/browser/net/proxy_service_factory.h | 3 + @@ -40,7 +40,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../proxy_config/proxy_policy_handler.cc | 2 +- net/proxy_resolution/proxy_config.cc | 52 ++- net/proxy_resolution/proxy_config.h | 3 + - 25 files changed, 981 insertions(+), 18 deletions(-) + 25 files changed, 981 insertions(+), 17 deletions(-) create mode 100644 chrome/browser/resources/proxy_config.css create mode 100644 chrome/browser/resources/proxy_config.html create mode 100644 chrome/browser/resources/proxy_config.js @@ -77,7 +77,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -82,6 +82,7 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -77,6 +77,7 @@ public class PrivacySettings private static final String PREF_SAFE_BROWSING = "safe_browsing"; private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link"; private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox"; @@ -100,7 +100,7 @@ diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd -@@ -275,11 +275,13 @@ +@@ -252,6 +252,9 @@ @@ -108,13 +108,8 @@ diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resou + + - - - -- - diff --git a/chrome/browser/extensions/api/proxy/proxy_api_helpers.cc b/chrome/browser/extensions/api/proxy/proxy_api_helpers.cc --- a/chrome/browser/extensions/api/proxy/proxy_api_helpers.cc +++ b/chrome/browser/extensions/api/proxy/proxy_api_helpers.cc @@ -202,7 +197,7 @@ diff --git a/chrome/browser/net/proxy_service_factory.h b/chrome/browser/net/pro diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -181,6 +181,8 @@ +@@ -185,6 +185,8 @@ #include "rlz/buildflags/buildflags.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -211,7 +206,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse #if BUILDFLAG(ENABLE_BACKGROUND_MODE) #include "chrome/browser/background/background_mode_manager.h" #endif -@@ -1306,6 +1308,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) { +@@ -1389,6 +1391,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) { component_updater::RegisterPrefs(registry); domain_reliability::RegisterPrefs(registry); embedder_support::OriginTrialPrefs::RegisterPrefs(registry); @@ -666,7 +661,7 @@ new file mode 100644 diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -309,6 +309,8 @@ static_library("ui") { +@@ -301,6 +301,8 @@ static_library("ui") { "webui/metrics_internals/metrics_internals_ui.h", "webui/net_export_ui.cc", "webui/net_export_ui.h", @@ -678,7 +673,7 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc -@@ -64,6 +64,7 @@ +@@ -63,6 +63,7 @@ #include "chrome/browser/ui/webui/ntp_tiles_internals_ui.h" #include "chrome/browser/ui/webui/omnibox/omnibox_ui.h" #include "chrome/browser/ui/webui/policy/policy_ui.h" @@ -686,7 +681,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom #include "chrome/browser/ui/webui/predictors/predictors_ui.h" #include "chrome/browser/ui/webui/segmentation_internals/segmentation_internals_ui.h" #include "chrome/browser/ui/webui/signin_internals_ui.h" -@@ -499,6 +500,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, +@@ -496,6 +497,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; if (url.host_piece() == chrome::kChromeUINetExportHost) return &NewWebUI; @@ -1141,7 +1136,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons const char kChromeUIChromeURLsHost[] = "chrome-urls"; const char kChromeUIChromeURLsURL[] = "chrome://chrome-urls/"; const char kChromeUIComponentsHost[] = "components"; -@@ -449,6 +451,7 @@ bool IsSystemWebUIHost(base::StringPiece host) { +@@ -450,6 +452,7 @@ bool IsSystemWebUIHost(base::StringPiece host) { kChromeUILockScreenNetworkHost, kChromeUILockScreenStartReauthHost, kChromeUIMobileSetupHost, @@ -1149,7 +1144,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons kChromeUIMultiDeviceSetupHost, kChromeUINetworkHost, kChromeUINotificationTesterHost, -@@ -755,6 +758,7 @@ const char* const kChromeHostURLs[] = { +@@ -759,6 +762,7 @@ const char* const kChromeHostURLs[] = { #if !BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_CHROMEOS) kChromeUIAppLauncherPageHost, @@ -1160,7 +1155,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h --- a/chrome/common/webui_url_constants.h +++ b/chrome/common/webui_url_constants.h -@@ -143,6 +143,8 @@ extern const char kChromeUINTPTilesInternalsHost[]; +@@ -142,6 +142,8 @@ extern const char kChromeUINTPTilesInternalsHost[]; extern const char kChromeUINaClHost[]; extern const char kChromeUINetExportHost[]; extern const char kChromeUINetExportURL[]; diff --git a/build/patches/Add-an-always-incognito-mode.patch b/build/patches/Add-an-always-incognito-mode.patch index fa199cf7..ead466b1 100644 --- a/build/patches/Add-an-always-incognito-mode.patch +++ b/build/patches/Add-an-always-incognito-mode.patch @@ -85,8 +85,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/autocomplete_provider_client.h | 1 + .../omnibox/browser/base_search_provider.cc | 2 +- components/omnibox/browser/search_provider.cc | 4 +- - .../host_content_settings_map_factory.cc | 1 + - 67 files changed, 760 insertions(+), 92 deletions(-) + 66 files changed, 759 insertions(+), 92 deletions(-) create mode 100644 chrome/android/java/res/xml/incognito_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java @@ -95,7 +94,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -650,6 +650,7 @@ chrome_java_resources = [ +@@ -659,6 +659,7 @@ chrome_java_resources = [ "java/res/xml/main_preferences.xml", "java/res/xml/manage_sync_preferences.xml", "java/res/xml/phone_as_a_security_key_accessory_filter.xml", @@ -114,10 +113,10 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java "java/src/com/google/android/apps/chrome/appwidget/bookmarks/BookmarkThumbnailWidgetProvider.java", "java/src/org/chromium/chrome/browser/ActivityTabProvider.java", "java/src/org/chromium/chrome/browser/ActivityUtils.java", -@@ -955,6 +956,7 @@ chrome_java_sources = [ - "java/src/org/chromium/chrome/browser/privacy/settings/IncognitoLockSettings.java", +@@ -967,6 +968,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java", "java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java", + "java/src/org/chromium/chrome/browser/privacy_sandbox/ChromeTrackingProtectionDelegate.java", + "java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java", "java/src/org/chromium/chrome/browser/provider/BaseColumns.java", "java/src/org/chromium/chrome/browser/provider/BookmarkColumns.java", @@ -167,7 +166,7 @@ new file mode 100644 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -50,6 +50,11 @@ found in the LICENSE file. +@@ -56,6 +56,11 @@ found in the LICENSE file. android:key="secure_dns" android:title="@string/settings_secure_dns_title" android:fragment="org.chromium.chrome.browser.privacy.secure_dns.SecureDnsSettings"/> @@ -240,7 +239,7 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -58,6 +58,10 @@ import org.chromium.base.task.TaskTraits; +@@ -62,6 +62,10 @@ import org.chromium.base.task.TaskTraits; import org.chromium.build.annotations.UsedByReflection; import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; @@ -248,10 +247,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct +import org.chromium.components.user_prefs.UserPrefs; +import org.chromium.chrome.browser.preferences.Pref; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; - import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate; import org.chromium.chrome.browser.IntentHandler.TabOpenType; import org.chromium.chrome.browser.app.ChromeActivity; -@@ -578,9 +582,14 @@ public class ChromeTabbedActivity extends ChromeActivity +@@ -1870,6 +1871,9 @@ public abstract class ChromeActivity throw new IllegalStateException( "Attempting to access TabCreator before initialization"); } @@ -463,7 +462,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java -@@ -64,6 +64,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; +@@ -66,6 +66,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.version_info.VersionInfo; import org.chromium.device.mojom.ScreenOrientationLockType; @@ -473,7 +472,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; -@@ -1218,7 +1221,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid +@@ -1260,7 +1263,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid @Override public boolean isIncognito() { @@ -485,7 +484,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java -@@ -34,6 +34,7 @@ import org.chromium.base.annotations.NativeMethods; +@@ -35,6 +35,7 @@ import org.chromium.base.annotations.NativeMethods; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; @@ -493,7 +492,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.app.download.home.DownloadActivity; -@@ -75,6 +76,10 @@ import org.chromium.url.GURL; +@@ -77,6 +78,10 @@ import org.chromium.url.GURL; import java.io.File; @@ -504,7 +503,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo /** * A class containing some utility static methods. */ -@@ -318,7 +323,16 @@ public class DownloadUtils { +@@ -353,7 +358,16 @@ public class DownloadUtils { // Offline pages isn't supported in Incognito. This should be checked before calling // OfflinePageBridge.getForProfile because OfflinePageBridge instance will not be found // for incognito profile. @@ -546,7 +545,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History /** * Combines and manages the different UI components of browsing history. */ -@@ -156,7 +163,7 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve +@@ -158,7 +165,7 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve recordUserAction("Show"); // If incognito placeholder is shown, we don't need to create History UI elements. @@ -555,7 +554,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History mSelectableListLayout = null; mRootView = getIncognitoHistoryPlaceholderView(); return; -@@ -597,7 +604,7 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve +@@ -601,7 +608,7 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve private void swapContentView() { boolean toHistoryClusters; @@ -564,7 +563,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History return; } else if (isHistoryClustersUIShowing()) { toHistoryClusters = false; -@@ -660,11 +667,24 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve +@@ -664,11 +671,24 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve && mContentView == mHistoryClustersCoordinator.getActivityContentView(); } @@ -590,7 +589,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History // If Incognito placeholder is shown no need to call any destroy method. return; } -@@ -684,7 +704,7 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve +@@ -688,7 +708,7 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve * @return True if manager handles this event, false if it decides to ignore. */ public boolean onBackPressed() { @@ -624,7 +623,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History * Native page for managing browsing history. */ @@ -39,6 +46,15 @@ public class HistoryPage extends BasicNativePage { - boolean isIncognito, Supplier tabSupplier, String url) { + Profile profile, Supplier tabSupplier, String url) { super(host); + if (isIncognito && @@ -642,7 +641,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java --- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java -@@ -15,6 +15,7 @@ import androidx.annotation.VisibleForTesting; +@@ -16,6 +16,7 @@ import org.chromium.base.jank_tracker.JankTracker; import org.chromium.base.supplier.DestroyableObservableSupplier; import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.Supplier; @@ -650,7 +649,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.download.home.DownloadPage; import org.chromium.chrome.browser.bookmarks.BookmarkPage; -@@ -226,7 +227,8 @@ public class NativePageFactory { +@@ -232,7 +233,8 @@ public class NativePageFactory { String url, NativePage candidatePage, Tab tab, boolean isIncognito) { NativePage page; @@ -880,15 +879,15 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java -@@ -73,6 +73,7 @@ import org.chromium.chrome.browser.search_engines.settings.SearchEngineSettings; - import org.chromium.chrome.browser.signin.SyncConsentActivityLauncherImpl; +@@ -75,6 +75,7 @@ import org.chromium.chrome.browser.signin.SyncConsentActivityLauncherImpl; import org.chromium.chrome.browser.site_settings.ChromeSiteSettingsDelegate; import org.chromium.chrome.browser.sync.SyncServiceFactory; + import org.chromium.chrome.browser.ui.device_lock.MissingDeviceLockLauncher; +import org.chromium.chrome.browser.ui.messages.snackbar.INeedSnackbarManager; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarManageable; import org.chromium.components.browser_ui.accessibility.AccessibilitySettings; -@@ -323,6 +324,9 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity +@@ -329,6 +330,9 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity ((PrivacySandboxSettingsBaseFragment) fragment) .setSnackbarManager(getSnackbarManager()); } @@ -901,7 +900,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java -@@ -14,6 +14,8 @@ import java.util.ArrayList; +@@ -13,6 +13,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -910,7 +909,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore /** * A tab model observer for managing bulk closures. */ -@@ -41,7 +43,8 @@ public class HistoricalTabModelObserver implements TabModelObserver { +@@ -40,7 +42,8 @@ public class HistoricalTabModelObserver implements TabModelObserver { if (tabs.isEmpty()) return; if (tabs.size() == 1) { @@ -920,7 +919,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore return; } -@@ -72,7 +75,6 @@ public class HistoricalTabModelObserver implements TabModelObserver { +@@ -71,7 +74,6 @@ public class HistoricalTabModelObserver implements TabModelObserver { entries.add(historicalGroup); idToGroup.put(groupId, historicalGroup); } @@ -943,7 +942,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java -@@ -26,6 +26,8 @@ import java.util.Arrays; +@@ -25,6 +25,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -952,7 +951,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore /** * Creates historical entries in TabRestoreService. */ -@@ -59,10 +61,10 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -58,10 +60,10 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { // HistoricalTabSaver implementation. @Override @@ -965,7 +964,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore } @Override -@@ -114,7 +116,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -113,7 +115,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { // If there is only a single valid tab remaining save it individually. if (validEntries.size() == 1 && validEntries.get(0).isSingleTab()) { @@ -974,7 +973,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore return; } -@@ -140,11 +142,12 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -139,11 +141,12 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { CollectionUtil.integerCollectionToIntArray(savedStateVersions)); } @@ -989,7 +988,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore } /** -@@ -152,7 +155,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -151,7 +154,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { * internal Chrome scheme, about:blank, or a native page and it cannot be incognito. */ private boolean shouldSave(Tab tab) { @@ -998,7 +997,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore // {@link GURL#getScheme()} is not available in unit tests. if (mIgnoreUrlSchemesForTesting) return true; -@@ -224,7 +227,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { +@@ -223,7 +226,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { @NativeMethods interface Natives { @@ -1019,7 +1018,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab import org.chromium.ui.base.IntentRequestTracker; import org.chromium.ui.modaldialog.ModalDialogManager; -@@ -794,7 +796,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -790,7 +792,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { mAppMenuCoordinator.getAppMenuHandler(), mActivityTabProvider, mToolbarManager.getMenuButtonView(), () -> { mTabCreatorManagerSupplier.get() @@ -1042,7 +1041,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome /** * This class creates various kinds of new tabs and adds them to the right {@link TabModel}. */ -@@ -510,7 +514,6 @@ public class ChromeTabCreator extends TabCreator { +@@ -517,7 +521,6 @@ public class ChromeTabCreator extends TabCreator { // TODO(crbug.com/1081924): Clean up the launches from SearchActivity/Chrome. public Tab launchUrlFromExternalApp( LoadUrlParams loadUrlParams, String appId, boolean forceNewTab, Intent intent) { @@ -1099,7 +1098,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -41,6 +41,7 @@ import org.chromium.base.supplier.OneshotSupplier; +@@ -40,6 +40,7 @@ import org.chromium.base.supplier.OneshotSupplier; import org.chromium.base.supplier.Supplier; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; @@ -1107,7 +1106,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.app.tab_activity_glue.TabReparentingController; import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton; -@@ -554,7 +555,8 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -556,7 +557,8 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve return ret; } }, @@ -1165,7 +1164,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5153,6 +5153,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5409,6 +5409,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kOfflinePagesLivePageSharingName, flag_descriptions::kOfflinePagesLivePageSharingDescription, kOsAndroid, FEATURE_VALUE_TYPE(offline_pages::kOfflinePagesLivePageSharingFeature)}, @@ -1227,7 +1226,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and DCHECK_EQ(android_group_ids.size(), group_titles.size()); DCHECK_EQ(per_tab_android_group_id.size(), tabs.size()); -@@ -230,11 +241,12 @@ static void JNI_HistoricalTabSaverImpl_CreateHistoricalTab( +@@ -234,11 +245,12 @@ static void JNI_HistoricalTabSaverImpl_CreateHistoricalTab( JNIEnv* env, const JavaParamRef& jtab_android, const JavaParamRef& state, @@ -1346,7 +1345,7 @@ diff --git a/chrome/browser/content_settings/host_content_settings_map_factory.c diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4134,6 +4134,12 @@ const char kOfflinePagesLivePageSharingDescription[] = +@@ -4209,6 +4209,12 @@ const char kOfflinePagesLivePageSharingDescription[] = "Enables to share current loaded page as offline page by saving as MHTML " "first."; @@ -1362,7 +1361,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2431,6 +2431,9 @@ extern const char kOmahaMinSdkVersionAndroidDescription[]; +@@ -2484,6 +2484,9 @@ extern const char kOmahaMinSdkVersionAndroidDescription[]; extern const char kOmahaMinSdkVersionAndroidMinSdk1Description[]; extern const char kOmahaMinSdkVersionAndroidMinSdk1000Description[]; @@ -1375,7 +1374,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -576,8 +576,8 @@ BASE_FEATURE(kCCTFeatureUsage, +@@ -588,8 +588,8 @@ BASE_FEATURE(kCCTFeatureUsage, BASE_FEATURE(kCCTIncognito, "CCTIncognito", base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kCCTIncognitoAvailableToThirdParty, @@ -1709,7 +1708,7 @@ diff --git a/chrome/browser/offline_pages/request_coordinator_factory.h b/chrome diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -239,6 +239,7 @@ +@@ -249,6 +249,7 @@ #if BUILDFLAG(IS_ANDROID) #include "chrome/browser/accessibility/accessibility_prefs/android/accessibility_prefs_controller.h" @@ -1717,7 +1716,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h" #include "chrome/browser/android/ntp/recent_tabs_page_prefs.h" #include "chrome/browser/android/oom_intervention/oom_intervention_decider.h" -@@ -1692,6 +1693,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -1781,6 +1782,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, usage_stats::UsageStatsBridge::RegisterProfilePrefs(registry); variations::VariationsService::RegisterProfilePrefs(registry); webapps::InstallPromptPrefs::RegisterProfilePrefs(registry); @@ -1856,7 +1855,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1408,6 +1408,37 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1431,6 +1431,37 @@ Your Google account may have other forms of browsing history like searches and a Clears history from all synced devices @@ -1897,7 +1896,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java -@@ -178,6 +178,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro +@@ -177,6 +177,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro protected String mFormattedFullUrl; protected String mUrlForDisplay; private boolean mOmniboxUpdatedConnectionSecurityIndicatorsEnabled; @@ -1905,7 +1904,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow // notifyUrlChanged and notifySecurityStateChanged are usually called 3 times across a same // document navigation. The first call is usually necessary, which updates the UrlBar to reflect -@@ -200,7 +201,9 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro +@@ -199,7 +200,9 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro public LocationBarModel(Context context, NewTabPageDelegate newTabPageDelegate, @NonNull UrlFormatter urlFormatter, @NonNull ProfileProvider profileProvider, @NonNull OfflineStatus offlineStatus, @@ -1919,7 +1918,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/messages/android/BUILD.gn b/chrome/browser/ui/messages/android/BUILD.gn --- a/chrome/browser/ui/messages/android/BUILD.gn +++ b/chrome/browser/ui/messages/android/BUILD.gn -@@ -24,6 +24,7 @@ android_library("java") { +@@ -25,6 +25,7 @@ android_library("java") { srcjar_deps = [ ":jni_headers" ] sources = [ "java/src/org/chromium/chrome/browser/ui/messages/infobar/SimpleConfirmInfoBarBuilder.java", @@ -1962,7 +1961,7 @@ new file mode 100644 diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -3935,6 +3935,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = +@@ -3878,6 +3878,12 @@ inline constexpr char kOutOfProcessSystemDnsResolutionEnabled[] = "net.out_of_process_system_dns_resolution_enabled"; #endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) @@ -2065,7 +2064,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. bool store_last_modified, bool restore_session, bool should_record_metrics); -@@ -523,6 +524,8 @@ class HostContentSettingsMap : public content_settings::Observer, +@@ -527,6 +528,8 @@ class HostContentSettingsMap : public content_settings::Observer, // Whether this settings map is for an incognito or guest session. bool is_off_the_record_; @@ -2146,16 +2145,5 @@ diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/ ((default_url && !default_url->suggestions_url().empty() && !*query_is_private) || (keyword_url && !keyword_url->suggestions_url().empty())); -diff --git a/weblayer/browser/host_content_settings_map_factory.cc b/weblayer/browser/host_content_settings_map_factory.cc ---- a/weblayer/browser/host_content_settings_map_factory.cc -+++ b/weblayer/browser/host_content_settings_map_factory.cc -@@ -45,6 +45,7 @@ HostContentSettingsMapFactory::BuildServiceInstanceFor( - scoped_refptr settings_map = - base::MakeRefCounted( - user_prefs::UserPrefs::Get(context), context->IsOffTheRecord(), -+ /*force_save_site_settings*/false, - /*store_last_modified=*/true, - /*restore_session=*/false, - /*should_record_metrics=*/!context->IsOffTheRecord()); -- 2.25.1 diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index 150f1a34..0b23483a 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -114,19 +114,19 @@ diff --git a/chrome/android/java/res/menu/bookmark_toolbar_menu_improved.xml b/c + app:iconTint="@color/default_icon_color_tint_list" /> mShareDelegateSupplier; private final Supplier mEphemeralTabCoordinatorSupplier; -@@ -74,7 +75,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { +@@ -76,7 +77,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { private NativePageFactory mNativePageFactory; @@ -240,7 +240,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm import android.text.TextUtils; import android.util.Pair; -@@ -38,6 +51,32 @@ import org.chromium.url.GURL; +@@ -37,6 +50,32 @@ import org.chromium.url.GURL; import java.util.ArrayList; import java.util.List; @@ -273,8 +273,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * Provides the communication channel for Android to fetch and manipulate the * bookmark model stored in native. -@@ -432,6 +471,209 @@ class BookmarkBridge { - mNativeBookmarkBridge, BookmarkBridge.this, id.getId(), id.getType()); +@@ -435,6 +474,209 @@ class BookmarkBridge { + mNativeBookmarkBridge, id.getId(), id.getType()); } + /** @@ -523,16 +523,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm private static List> createPairsList(int[] left, int[] right) { List> pairList = new ArrayList<>(); for (int i = 0; i < left.length; i++) { -@@ -966,6 +1241,9 @@ class BookmarkBridge { - int getChildCount(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type); - void getChildIds(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type, - List bookmarksList); +@@ -961,6 +1236,9 @@ class BookmarkBridge { + int getChildCount(long nativeBookmarkBridge, long id, int type); + void getChildIds( + long nativeBookmarkBridge, long id, int type, List bookmarksList); + void importBookmarks(long nativeBookmarkBridge, BookmarkBridge caller, WindowAndroid window); + void exportBookmarks(long nativeBookmarkBridge, BookmarkBridge caller, WindowAndroid window, + String export_path); - BookmarkId getChildAt( - long nativeBookmarkBridge, BookmarkBridge caller, long id, int type, int index); - int getTotalBookmarkCount( + BookmarkId getChildAt(long nativeBookmarkBridge, long id, int type, int index); + int getTotalBookmarkCount(long nativeBookmarkBridge, long id, int type); + void setBookmarkTitle(long nativeBookmarkBridge, long id, int type, String title); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java @@ -582,7 +582,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManagerMediator.java -@@ -53,6 +53,8 @@ import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelega +@@ -55,6 +55,8 @@ import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelega import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelegate.SelectionObserver; import org.chromium.components.commerce.core.CommerceSubscription; import org.chromium.components.commerce.core.ShoppingService; @@ -591,7 +591,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm import org.chromium.components.favicon.LargeIconBridge; import org.chromium.components.feature_engagement.EventConstants; import org.chromium.components.power_bookmarks.PowerBookmarkMeta; -@@ -80,6 +82,9 @@ class BookmarkManagerMediator +@@ -82,6 +84,9 @@ class BookmarkManagerMediator private static boolean sPreventLoadingForTesting; @@ -601,7 +601,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * Keeps track of whether drag is enabled / active for bookmark lists. */ -@@ -508,6 +513,14 @@ class BookmarkManagerMediator +@@ -513,6 +518,14 @@ class BookmarkManagerMediator mNativePage = nativePage; } @@ -616,7 +616,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * See BookmarkManager(Coordinator)#updateForUrl */ -@@ -684,6 +697,16 @@ class BookmarkManagerMediator +@@ -689,6 +702,16 @@ class BookmarkManagerMediator } } @@ -773,7 +773,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java --- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java -@@ -15,6 +15,7 @@ import androidx.annotation.VisibleForTesting; +@@ -16,6 +16,7 @@ import org.chromium.base.jank_tracker.JankTracker; import org.chromium.base.supplier.DestroyableObservableSupplier; import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.Supplier; @@ -790,7 +790,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat private final BottomSheetController mBottomSheetController; private final BrowserControlsManager mBrowserControlsManager; private final Supplier mCurrentTabSupplier; -@@ -69,7 +70,7 @@ public class NativePageFactory { +@@ -70,7 +71,7 @@ public class NativePageFactory { private NativePageBuilder mNativePageBuilder; @@ -799,7 +799,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat @NonNull BottomSheetController sheetController, @NonNull BrowserControlsManager browserControlsManager, @NonNull Supplier currentTabSupplier, -@@ -115,7 +116,7 @@ public class NativePageFactory { +@@ -118,7 +119,7 @@ public class NativePageFactory { @VisibleForTesting static class NativePageBuilder { @@ -808,7 +808,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat private final BottomSheetController mBottomSheetController; private final Supplier mUma; private final BrowserControlsManager mBrowserControlsManager; -@@ -129,7 +130,7 @@ public class NativePageFactory { +@@ -133,7 +134,7 @@ public class NativePageFactory { private final HomeSurfaceTracker mHomeSurfaceTracker; private final ObservableSupplier mTabContentManagerSupplier; @@ -817,7 +817,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat BottomSheetController sheetController, BrowserControlsManager browserControlsManager, Supplier currentTabSupplier, Supplier snackbarManagerSupplier, -@@ -169,7 +170,7 @@ public class NativePageFactory { +@@ -175,7 +176,7 @@ public class NativePageFactory { protected NativePage buildBookmarksPage(Tab tab) { return new BookmarkPage(mActivity.getComponentName(), mSnackbarManagerSupplier.get(), mTabModelSelector.isIncognitoSelected(), @@ -829,7 +829,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -226,6 +226,8 @@ static_library("browser") { +@@ -225,6 +225,8 @@ static_library("browser") { "bluetooth/chrome_bluetooth_delegate_impl_client.h", "bookmarks/bookmark_model_factory.cc", "bookmarks/bookmark_model_factory.h", @@ -838,7 +838,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "bookmarks/chrome_bookmark_client.cc", "bookmarks/chrome_bookmark_client.h", "bookmarks/managed_bookmark_service_factory.cc", -@@ -1923,6 +1925,13 @@ static_library("browser") { +@@ -1968,6 +1970,13 @@ static_library("browser") { ] } @@ -852,7 +852,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn configs += [ "//build/config/compiler:wexit_time_destructors", "//build/config:precompiled_headers", -@@ -3622,8 +3631,6 @@ static_library("browser") { +@@ -3697,8 +3706,6 @@ static_library("browser") { "badging/badge_manager_factory.h", "banners/app_banner_manager_desktop.cc", "banners/app_banner_manager_desktop.h", @@ -864,7 +864,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -9530,6 +9530,14 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9821,6 +9821,14 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kForceOffTextAutosizing)}, #endif @@ -1011,8 +1011,8 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + select_file_dialog_->ListenerDestroyed(); } - void BookmarkBridge::Destroy(JNIEnv*, const JavaParamRef&) { -@@ -619,6 +726,182 @@ jint BookmarkBridge::GetTotalBookmarkCount( + void BookmarkBridge::Destroy(JNIEnv*) { +@@ -558,6 +665,182 @@ jint BookmarkBridge::GetTotalBookmarkCount( return count; } @@ -1193,8 +1193,8 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse +} + void BookmarkBridge::SetBookmarkTitle(JNIEnv* env, - const JavaParamRef& obj, jlong id, + jint type, diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser/bookmarks/android/bookmark_bridge.h --- a/chrome/browser/bookmarks/android/bookmark_bridge.h +++ b/chrome/browser/bookmarks/android/bookmark_bridge.h @@ -1226,9 +1226,9 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser public: BookmarkBridge(Profile* profile, bookmarks::BookmarkModel* model, -@@ -74,6 +79,12 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, - bool IsDoingExtensiveChanges(JNIEnv* env, - const base::android::JavaParamRef& obj); +@@ -72,6 +77,12 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + + bool IsDoingExtensiveChanges(JNIEnv* env); + // SelectFileDialog::Listener implementation. + void FileSelected(const base::FilePath& path, @@ -1238,10 +1238,10 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser + jboolean IsEditBookmarksEnabled(JNIEnv* env); - void LoadEmptyPartnerBookmarkShimForTesting( -@@ -171,6 +182,15 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, - jlong id, - jint type); + void LoadEmptyPartnerBookmarkShimForTesting(JNIEnv* env); +@@ -84,6 +95,15 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + jlong id, + jint type); + void ImportBookmarks(JNIEnv* env, + const base::android::JavaParamRef& obj, @@ -1252,10 +1252,10 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser + const base::android::JavaParamRef& java_window, + const base::android::JavaParamRef& j_export_path); + - void SetBookmarkTitle(JNIEnv* env, - const base::android::JavaParamRef& obj, - jlong id, -@@ -363,12 +383,16 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + void GetTopLevelFolderIds( + JNIEnv* env, + const base::android::JavaParamRef& j_result_obj); +@@ -310,12 +330,16 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, void DestroyJavaObject(); raw_ptr profile_; @@ -1272,7 +1272,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser // Information about the Partner bookmarks (must check for IsLoaded()). // This is owned by profile. -@@ -382,6 +406,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, +@@ -329,6 +353,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, // Observes the profile destruction and creation. base::ScopedObservation profile_observation_{this}; @@ -1382,9 +1382,9 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -7647,6 +7647,11 @@ const char kProfilesReorderingDescription[] = - "persisted."; - #endif +@@ -7752,6 +7752,11 @@ const char kEnableBoundSessionCredentialsDescription[] = + "prevent the usage of bound credentials outside of the user device."; + #endif // BUILDFLAG(ENABLE_BOUND_SESSION_CREDENTIALS) +const char kBookmarksExportUseSafName[] = "Use saf for bookmarks export"; +const char kBookmarksExportUseSafDescription[] = @@ -1397,9 +1397,9 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -4427,6 +4427,9 @@ extern const char kProfilesReorderingName[]; - extern const char kProfilesReorderingDescription[]; - #endif +@@ -4490,6 +4490,9 @@ extern const char kEnableBoundSessionCredentialsName[]; + extern const char kEnableBoundSessionCredentialsDescription[]; + #endif // BUILDFLAG(ENABLE_BOUND_SESSION_CREDENTIALS) +extern const char kBookmarksExportUseSafName[]; +extern const char kBookmarksExportUseSafDescription[]; @@ -1410,7 +1410,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -187,6 +187,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -191,6 +191,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kClearOmniboxFocusAfterNavigation, &kCloseTabSuggestions, &kCloseTabSaveTabList, @@ -1418,9 +1418,9 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse &kCriticalPersistedTabData, &kCreateNewTabInitializeRenderer, &kCCTBackgroundTab, -@@ -1179,5 +1180,10 @@ BASE_FEATURE(kWebApkTrampolineOnInitialIntent, - "WebApkTrampolineOnInitialIntent", - base::FEATURE_ENABLED_BY_DEFAULT); +@@ -1195,5 +1196,10 @@ BASE_FEATURE(kWebApkInstallService, + "WebApkInstallService", + base::FEATURE_DISABLED_BY_DEFAULT); +// disabled by default because of an issue on Android 6.0 +BASE_FEATURE(kBookmarksExportUseSaf, @@ -1432,7 +1432,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -185,6 +185,7 @@ BASE_DECLARE_FEATURE(kTabStripRedesign); +@@ -189,6 +189,7 @@ BASE_DECLARE_FEATURE(kTabStripRedesign); BASE_DECLARE_FEATURE(kTabletToolbarReordering); BASE_DECLARE_FEATURE(kTabStripStartupRefactoring); BASE_DECLARE_FEATURE(kTabToGTSAnimation); @@ -1443,7 +1443,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -485,6 +485,7 @@ public abstract class ChromeFeatureList { +@@ -475,6 +475,7 @@ public abstract class ChromeFeatureList { public static final String USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID = "UseLibunwindstackNativeUnwinderAndroid"; public static final String USER_BYPASS_UI = "UserBypassUI"; @@ -1512,7 +1512,7 @@ diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -100,6 +100,8 @@ public final class ChromePreferenceKeys { +@@ -101,6 +101,8 @@ public final class ChromePreferenceKeys { "enhanced_bookmark_last_used_parent_folder"; public static final String BOOKMARKS_SORT_ORDER = "Chrome.Bookmarks.BookmarkRowSortOrder"; public static final String BOOKMARKS_VISUALS_PREF = "Chrome.Bookmarks.BookmarkRowDisplay"; @@ -1521,7 +1521,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro /** * Whether Chrome is set as the default browser. -@@ -964,6 +966,7 @@ public final class ChromePreferenceKeys { +@@ -992,6 +994,7 @@ public final class ChromePreferenceKeys { AUTOFILL_ASSISTANT_PROACTIVE_HELP_ENABLED, APP_LAUNCH_LAST_KNOWN_ACTIVE_TAB_STATE, APP_LAUNCH_SEARCH_ENGINE_HAD_LOGO, @@ -1560,7 +1560,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn -@@ -400,6 +400,9 @@ static_library("common_lib") { +@@ -402,6 +402,9 @@ static_library("common_lib") { sources += [ "media/chrome_media_drm_bridge_client.cc", "media/chrome_media_drm_bridge_client.h", @@ -1582,7 +1582,7 @@ diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn "importer/bookmarks_file_importer.cc", "importer/bookmarks_file_importer.h", "importer/external_process_importer_bridge.cc", -@@ -215,6 +213,11 @@ static_library("utility") { +@@ -218,6 +216,11 @@ static_library("utility") { ] } @@ -1801,7 +1801,7 @@ diff --git a/ui/android/java/strings/android_ui_strings.grd b/ui/android/java/st diff --git a/ui/shell_dialogs/select_file_dialog.h b/ui/shell_dialogs/select_file_dialog.h --- a/ui/shell_dialogs/select_file_dialog.h +++ b/ui/shell_dialogs/select_file_dialog.h -@@ -211,6 +211,8 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog +@@ -213,6 +213,8 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog const GURL* caller = nullptr); bool HasMultipleFileTypeChoices(); diff --git a/build/patches/Add-custom-tab-intents-privacy-option.patch b/build/patches/Add-custom-tab-intents-privacy-option.patch index bf001b16..f7422bfc 100644 --- a/build/patches/Add-custom-tab-intents-privacy-option.patch +++ b/build/patches/Add-custom-tab-intents-privacy-option.patch @@ -24,7 +24,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -68,6 +68,16 @@ found in the LICENSE file. +@@ -74,6 +74,16 @@ found in the LICENSE file. android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings" android:key="do_not_track" android:title="@string/do_not_track_title"/> @@ -44,7 +44,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -@@ -53,6 +53,9 @@ import java.lang.annotation.Retention; +@@ -55,6 +55,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Set; @@ -54,7 +54,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis /** * Dispatches incoming intents to the appropriate activity based on the current configuration and * Intent fired. -@@ -243,6 +246,9 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega +@@ -246,6 +249,9 @@ public class LaunchIntentDispatcher { */ public static boolean isCustomTabIntent(Intent intent) { if (intent == null) return false; @@ -64,7 +64,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis if (CustomTabsIntent.shouldAlwaysUseBrowserUI(intent) || !intent.hasExtra(CustomTabsIntent.EXTRA_SESSION)) { return false; -@@ -262,6 +268,10 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega +@@ -265,6 +271,10 @@ public class LaunchIntentDispatcher { newIntent.setData(uri); newIntent.setClassName(context, CustomTabActivity.class.getName()); @@ -75,7 +75,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis // Since configureIntentForResizableCustomTab() might change the componenet/class // associated with the passed intent, it needs to be called after #setClassName(context, // CustomTabActivity.class.getName()); -@@ -408,6 +418,17 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega +@@ -411,6 +421,17 @@ public class LaunchIntentDispatcher { if (Intent.ACTION_VIEW.equals(newIntent.getAction()) && !IntentHandler.wasIntentSenderChrome(newIntent)) { @@ -119,9 +119,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Inco diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -103,6 +103,9 @@ public class PrivacySettings extends PreferenceFragmentCompat - private HelpAndFeedbackLauncher mHelpAndFeedbackLauncher; - private Profile mProfile; +@@ -97,6 +97,9 @@ public class PrivacySettings + private ManagedPreferenceDelegate mManagedPreferenceDelegate; + private IncognitoLockSettings mIncognitoLockSettings; + private ChromeSwitchPreference allowCustomTabIntentsPref; + private ChromeSwitchPreference openExternalLinksPref; @@ -129,7 +129,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { getActivity().setTitle(R.string.prefs_privacy_security); -@@ -246,6 +249,9 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -247,6 +250,9 @@ public class PrivacySettings new SpanApplier.SpanInfo("", "", servicesLink)); } @@ -139,7 +139,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String key = preference.getKey(); -@@ -260,6 +266,14 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -263,6 +269,14 @@ public class PrivacySettings } else if (PREF_SEARCH_SUGGESTIONS.equals(key)) { UserPrefs.get(Profile.getLastUsedRegularProfile()) .setBoolean(Pref.SEARCH_SUGGEST_ENABLED, (boolean) newValue); @@ -154,8 +154,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting } return true; } -@@ -283,6 +297,16 @@ public class PrivacySettings extends PreferenceFragmentCompat - UserPrefs.get(mProfile).getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED)); +@@ -286,6 +300,16 @@ public class PrivacySettings + UserPrefs.get(getProfile()).getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED)); } + allowCustomTabIntentsPref = @@ -170,11 +170,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting + Preference doNotTrackPref = findPreference(PREF_DO_NOT_TRACK); if (doNotTrackPref != null) { - doNotTrackPref.setSummary(UserPrefs.get(mProfile).getBoolean(Pref.ENABLE_DO_NOT_TRACK) + doNotTrackPref.setSummary( diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -580,8 +580,8 @@ BASE_FEATURE(kCCTIncognitoAvailableToThirdParty, +@@ -592,8 +592,8 @@ BASE_FEATURE(kCCTIncognitoAvailableToThirdParty, base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite BASE_FEATURE(kCCTIntentFeatureOverrides, @@ -185,7 +185,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse BASE_FEATURE(kCCTMinimized, "CCTMinimized", base::FEATURE_DISABLED_BY_DEFAULT); -@@ -591,7 +591,7 @@ BASE_FEATURE(kCCTPageInsightsHub, +@@ -603,7 +603,7 @@ BASE_FEATURE(kCCTPageInsightsHub, BASE_FEATURE(kCCTPostMessageAPI, "CCTPostMessageAPI", @@ -213,7 +213,7 @@ diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAsso diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -5182,6 +5182,20 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

Resume diff --git a/build/patches/Add-exit-menu-item.patch b/build/patches/Add-exit-menu-item.patch index bb0996f2..bd416600 100644 --- a/build/patches/Add-exit-menu-item.patch +++ b/build/patches/Add-exit-menu-item.patch @@ -59,7 +59,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLife diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -230,6 +230,8 @@ import java.util.Locale; +@@ -236,6 +236,8 @@ import java.util.Locale; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; @@ -68,7 +68,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct /** * This is the main activity for ChromeMobile when not running in document mode. All the tabs * are accessible via a chrome specific tab switching UI. -@@ -2203,6 +2205,8 @@ public class ChromeTabbedActivity extends ChromeActivity +@@ -2385,6 +2386,11 @@ public abstract class ChromeActivity return true; } @@ -119,7 +119,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLife diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -3818,6 +3818,9 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

Dark theme diff --git a/build/patches/Add-flag-for-omnibox-autocomplete-filtering.patch b/build/patches/Add-flag-for-omnibox-autocomplete-filtering.patch index a0e5280c..c2ac5aa5 100644 --- a/build/patches/Add-flag-for-omnibox-autocomplete-filtering.patch +++ b/build/patches/Add-flag-for-omnibox-autocomplete-filtering.patch @@ -17,7 +17,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -604,6 +604,22 @@ const FeatureEntry::FeatureVariation kReaderModeDiscoverabilityVariations[] = { +@@ -636,6 +636,22 @@ const FeatureEntry::FeatureVariation kReaderModeDiscoverabilityVariations[] = { #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -40,7 +40,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc const FeatureEntry::FeatureParam kAdaptiveButton_AlwaysNone[] = { {"mode", "always-none"}}; const FeatureEntry::FeatureParam kAdaptiveButton_AlwaysNewTab[] = { -@@ -4714,7 +4730,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4969,7 +4985,11 @@ const FeatureEntry kFeatureEntries[] = { kOsMac | kOsLinux | kOsWin, FEATURE_VALUE_TYPE(features::kSystemNotifications)}, #endif // BUILDFLAG(ENABLE_SYSTEM_NOTIFICATIONS) && !BUILDFLAG(IS_CHROMEOS_ASH) @@ -64,7 +64,7 @@ diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/ #include "base/feature_list.h" #include "base/format_macros.h" #include "base/functional/bind.h" -@@ -368,6 +369,15 @@ AutocompleteController::AutocompleteController( +@@ -305,6 +306,15 @@ AutocompleteController::AutocompleteController( provider_client_->GetOmniboxTriggeredFeatureService()), steady_state_omnibox_position_( metrics::OmniboxEventProto::UNKNOWN_POSITION) { diff --git a/build/patches/Add-flag-for-save-data-header.patch b/build/patches/Add-flag-for-save-data-header.patch index 58865603..3dc97a5d 100644 --- a/build/patches/Add-flag-for-save-data-header.patch +++ b/build/patches/Add-flag-for-save-data-header.patch @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5335,7 +5335,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5597,7 +5597,10 @@ const FeatureEntry kFeatureEntries[] = { {"force-text-direction", flag_descriptions::kForceTextDirectionName, flag_descriptions::kForceTextDirectionDescription, kOsAll, MULTI_VALUE_TYPE(kForceTextDirectionChoices)}, @@ -30,7 +30,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1382,6 +1382,10 @@ const char kDeprecateAltBasedSixPackDescription[] = +@@ -1396,6 +1396,10 @@ const char kDeprecateAltBasedSixPackDescription[] = "Show deprecation notifications and disable functionality for Alt based " "six pack deprecations. The Search based versions continue to work."; @@ -44,7 +44,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -714,6 +714,9 @@ extern const char kDeprecateAltBasedSixPackDescription[]; +@@ -723,6 +723,9 @@ extern const char kDeprecateAltBasedSixPackDescription[]; extern const char kDeprecateOldKeyboardShortcutsAcceleratorName[]; extern const char kDeprecateOldKeyboardShortcutsAcceleratorDescription[]; @@ -84,7 +84,7 @@ diff --git a/content/browser/loader/browser_initiated_resource_request.cc b/cont diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc --- a/services/network/public/cpp/features.cc +++ b/services/network/public/cpp/features.cc -@@ -13,6 +13,11 @@ +@@ -14,6 +14,11 @@ namespace network::features { @@ -99,7 +99,7 @@ diff --git a/services/network/public/cpp/features.cc b/services/network/public/c diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h --- a/services/network/public/cpp/features.h +++ b/services/network/public/cpp/features.h -@@ -94,6 +94,8 @@ extern uint32_t GetLoaderChunkSize(); +@@ -91,6 +91,8 @@ extern uint32_t GetLoaderChunkSize(); COMPONENT_EXPORT(NETWORK_CPP) BASE_DECLARE_FEATURE(kCorsNonWildcardRequestHeadersSupport); diff --git a/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch b/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch index 2d9ef05d..d4477893 100644 --- a/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch +++ b/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch @@ -21,7 +21,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -1237,6 +1237,11 @@ const FeatureEntry::Choice kForceColorProfileChoices[] = { +@@ -1270,6 +1270,11 @@ const FeatureEntry::Choice kForceColorProfileChoices[] = { switches::kForceDisplayColorProfile, "hdr10"}, }; @@ -33,7 +33,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc const FeatureEntry::Choice kMemlogModeChoices[] = { {flags_ui::kGenericExperimentChoiceDisabled, "", ""}, {flag_descriptions::kMemlogModeMinimal, heap_profiling::kMemlogMode, -@@ -5229,6 +5234,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5491,6 +5496,9 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(chrome::android::kShareSheetCustomActionsPolish)}, #endif // BUILDFLAG(IS_ANDROID) @@ -46,7 +46,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -2186,6 +2186,10 @@ const char kUnthrottledNestedTimeoutDescription[] = +@@ -2226,6 +2226,10 @@ const char kUnthrottledNestedTimeoutDescription[] = "websites abusing the API will still eventually have their setTimeouts " "clamped."; @@ -60,7 +60,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1236,6 +1236,9 @@ extern const char kUndoAutofillDescription[]; +@@ -1261,6 +1261,9 @@ extern const char kUndoAutofillDescription[]; extern const char kUnthrottledNestedTimeoutName[]; extern const char kUnthrottledNestedTimeoutDescription[]; diff --git a/build/patches/Add-flag-to-control-video-playback-resume-feature.patch b/build/patches/Add-flag-to-control-video-playback-resume-feature.patch index 212d6ce6..a7c0f932 100644 --- a/build/patches/Add-flag-to-control-video-playback-resume-feature.patch +++ b/build/patches/Add-flag-to-control-video-playback-resume-feature.patch @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -3929,6 +3929,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4192,6 +4192,10 @@ const FeatureEntry kFeatureEntries[] = { chrome::android::kContextualSearchSuppressShortView, kContextualSearchSuppressShortViewVariations, "ContextualSearchSuppressShortView")}, @@ -29,7 +29,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1458,6 +1458,11 @@ const char kEnableManagedConfigurationWebApiDescription[] = +@@ -1472,6 +1472,11 @@ const char kEnableManagedConfigurationWebApiDescription[] = "Allows website to access a managed configuration provided by the device " "administrator for the origin."; @@ -44,7 +44,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -802,6 +802,9 @@ extern const char kEnablePenetratingImageSelectionDescription[]; +@@ -811,6 +811,9 @@ extern const char kEnablePenetratingImageSelectionDescription[]; extern const char kEnablePerfettoSystemTracingName[]; extern const char kEnablePerfettoSystemTracingDescription[]; @@ -57,7 +57,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -357,12 +357,8 @@ BASE_FEATURE(kPreloadMetadataLazyLoad, +@@ -360,12 +360,8 @@ BASE_FEATURE(kPreloadMetadataLazyLoad, // Let videos be resumed via remote controls (for example, the notification) // when in background. BASE_FEATURE(kResumeBackgroundVideo, @@ -71,6 +71,6 @@ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc + base::FEATURE_DISABLED_BY_DEFAULT // in Bromite ); - // When enabled, MediaCapabilities will check with GPU Video Accelerator + #if BUILDFLAG(IS_MAC) -- 2.25.1 diff --git a/build/patches/Add-flag-to-disable-IPv6-probes.patch b/build/patches/Add-flag-to-disable-IPv6-probes.patch index 0a563d33..105ef859 100644 --- a/build/patches/Add-flag-to-disable-IPv6-probes.patch +++ b/build/patches/Add-flag-to-disable-IPv6-probes.patch @@ -18,7 +18,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -6605,6 +6605,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -6866,6 +6866,10 @@ const FeatureEntry kFeatureEntries[] = { {"enable-reader-mode-in-cct", flag_descriptions::kReaderModeInCCTName, flag_descriptions::kReaderModeInCCTDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kReaderModeInCCT)}, @@ -32,9 +32,9 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -3895,6 +3895,10 @@ const char kCCTTextFragmentLookupApiEnabledName[] = - const char kCCTTextFragmentLookupApiEnabledDescription[] = - "Enable CCT API to lookup text fragments"; +@@ -3951,6 +3951,10 @@ const char kAccountReauthenticationRecentTimeWindow0mins[] = "0 mins"; + const char kAccountReauthenticationRecentTimeWindow1mins[] = "1 mins"; + const char kAccountReauthenticationRecentTimeWindow5mins[] = "5 mins"; +const char kIPv6ProbingName[] = "Enable IPv6 probing."; +const char kIPv6ProbingDescription[] = @@ -46,7 +46,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -879,6 +879,9 @@ extern const char kEnableWasmStringrefName[]; +@@ -889,6 +889,9 @@ extern const char kEnableWasmStringrefName[]; extern const char kEnableWasmStringrefDescription[]; extern const char kEnableWasmTieringName[]; @@ -59,7 +59,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/net/BUILD.gn b/net/BUILD.gn --- a/net/BUILD.gn +++ b/net/BUILD.gn -@@ -1096,6 +1096,7 @@ component("net") { +@@ -1094,6 +1094,7 @@ component("net") { "//build:chromeos_buildflags", "//net/data/ssl/chrome_root_store:gen_root_store_inc", "//net/http:transport_security_state_generated_files", @@ -132,7 +132,7 @@ diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc --- a/services/network/public/cpp/features.cc +++ b/services/network/public/cpp/features.cc -@@ -31,6 +31,11 @@ BASE_FEATURE(kThrottleDelayable, +@@ -32,6 +32,11 @@ BASE_FEATURE(kThrottleDelayable, "ThrottleDelayable", base::FEATURE_ENABLED_BY_DEFAULT); @@ -147,7 +147,7 @@ diff --git a/services/network/public/cpp/features.cc b/services/network/public/c diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h --- a/services/network/public/cpp/features.h +++ b/services/network/public/cpp/features.h -@@ -17,6 +17,7 @@ namespace features { +@@ -16,6 +16,7 @@ namespace features { COMPONENT_EXPORT(NETWORK_CPP) BASE_DECLARE_FEATURE(kNetworkErrorLogging); COMPONENT_EXPORT(NETWORK_CPP) BASE_DECLARE_FEATURE(kReporting); COMPONENT_EXPORT(NETWORK_CPP) BASE_DECLARE_FEATURE(kThrottleDelayable); diff --git a/build/patches/Add-flag-to-disable-external-intent-requests.patch b/build/patches/Add-flag-to-disable-external-intent-requests.patch index 91ffee81..47f28c24 100644 --- a/build/patches/Add-flag-to-disable-external-intent-requests.patch +++ b/build/patches/Add-flag-to-disable-external-intent-requests.patch @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -3870,6 +3870,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4133,6 +4133,11 @@ const FeatureEntry kFeatureEntries[] = { {"ui-disable-partial-swap", flag_descriptions::kUiPartialSwapName, flag_descriptions::kUiPartialSwapDescription, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kUIDisablePartialSwap)}, @@ -30,7 +30,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4196,6 +4196,12 @@ const char kPolicyLogsPageAndroidDescription[] = +@@ -4271,6 +4271,12 @@ const char kPolicyLogsPageAndroidDescription[] = "Enable the new chrome://policy-logs page containing logs for debugging " "policy related issues on Android."; @@ -46,7 +46,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2481,6 +2481,9 @@ extern const char kQueryTilesNTPDescription[]; +@@ -2534,6 +2534,9 @@ extern const char kQueryTilesNTPDescription[]; extern const char kQueryTilesOnStartName[]; extern const char kQueryTilesOnStartDescription[]; extern const char kQueryTilesSingleTierName[]; diff --git a/build/patches/Add-flag-to-disable-vibration.patch b/build/patches/Add-flag-to-disable-vibration.patch index a02bfc64..b48d5837 100644 --- a/build/patches/Add-flag-to-disable-vibration.patch +++ b/build/patches/Add-flag-to-disable-vibration.patch @@ -19,7 +19,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -8170,6 +8170,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -8430,6 +8430,10 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kNewMacNotificationAPI)}, #endif @@ -33,7 +33,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -7230,6 +7230,9 @@ const char kLacrosMergeIcuDataFileDescription[] = +@@ -7338,6 +7338,9 @@ const char kLacrosMergeIcuDataFileDescription[] = "Enables sharing common areas of icudtl.dat between Ash and Lacros."; #endif // #if BUILDFLAG(IS_CHROMEOS_LACROS) @@ -46,9 +46,9 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -4405,6 +4405,8 @@ extern const char kWebUITabStripTabDragIntegrationName[]; - extern const char kWebUITabStripTabDragIntegrationDescription[]; - #endif // BUILDFLAG(ENABLE_WEBUI_TAB_STRIP) && BUILDFLAG(IS_CHROMEOS_ASH) +@@ -4463,6 +4463,8 @@ extern const char kWebUITabStripContextMenuAfterTapName[]; + extern const char kWebUITabStripContextMenuAfterTapDescription[]; + #endif // BUILDFLAG(ENABLE_WEBUI_TAB_STRIP) +extern const char kEnableVibrationName[]; +extern const char kEnableVibrationDescription[]; @@ -58,7 +58,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc -@@ -101,6 +101,7 @@ void SetRuntimeFeatureDefaultsForPlatform( +@@ -103,6 +103,7 @@ void SetRuntimeFeatureDefaultsForPlatform( if (command_line.HasSwitch(switches::kDisableMediaSessionAPI)) { WebRuntimeFeatures::EnableMediaSession(false); } @@ -69,7 +69,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -158,6 +158,11 @@ BASE_FEATURE(kBackForwardCacheMemoryControls, +@@ -106,6 +106,11 @@ BASE_FEATURE(kBackForwardCacheMemoryControls, #endif ); @@ -84,15 +84,15 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h -@@ -360,6 +360,8 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kWarmUpNetworkProcess); +@@ -311,6 +311,8 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kForceOffTextAutosizing); + CONTENT_EXPORT BASE_DECLARE_FEATURE(kUserMediaScreenCapturing); CONTENT_EXPORT BASE_DECLARE_FEATURE(kWebNfc); - #endif // BUILDFLAG(IS_ANDROID) +CONTENT_EXPORT BASE_DECLARE_FEATURE(kVibration); + #if BUILDFLAG(IS_MAC) - CONTENT_EXPORT BASE_DECLARE_FEATURE(kDeviceMonitorMac); + CONTENT_EXPORT BASE_DECLARE_FEATURE(kMacAllowBackgroundingRenderProcesses); diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h --- a/third_party/blink/public/platform/web_runtime_features.h +++ b/third_party/blink/public/platform/web_runtime_features.h @@ -141,7 +141,7 @@ diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.c diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -2584,6 +2584,10 @@ +@@ -2638,6 +2638,10 @@ status: {"Android": "stable"}, base_feature: "none", }, diff --git a/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch b/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch index 02c383a1..cd739a2e 100644 --- a/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch +++ b/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch @@ -14,7 +14,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn -@@ -1791,6 +1791,11 @@ config("default_warnings") { +@@ -1845,6 +1845,11 @@ config("default_warnings") { # TODO(crbug.com/1412713) Evaluate and possibly enable. "-Wno-deprecated-this-capture", ] diff --git a/build/patches/Add-lifetime-options-for-permissions.patch b/build/patches/Add-lifetime-options-for-permissions.patch index e68bb333..10e8518d 100644 --- a/build/patches/Add-lifetime-options-for-permissions.patch +++ b/build/patches/Add-lifetime-options-for-permissions.patch @@ -142,8 +142,8 @@ diff --git a/chrome/browser/permissions/last_tab_standing_tracker.cc b/chrome/br diff --git a/chrome/browser/permissions/one_time_permissions_tracker.cc b/chrome/browser/permissions/one_time_permissions_tracker.cc --- a/chrome/browser/permissions/one_time_permissions_tracker.cc +++ b/chrome/browser/permissions/one_time_permissions_tracker.cc -@@ -18,8 +18,34 @@ - #include "components/permissions/features.h" +@@ -19,8 +19,34 @@ + #include "components/permissions/permission_context_base.h" #include "content/public/browser/visibility.h" #include "url/gurl.h" +#include "components/content_settings/core/browser/host_content_settings_map.h" @@ -178,7 +178,7 @@ diff --git a/chrome/browser/permissions/one_time_permissions_tracker.cc b/chrome OneTimePermissionsTracker::~OneTimePermissionsTracker() = default; OneTimePermissionsTracker::OriginTrackEntry::OriginTrackEntry() = default; -@@ -93,6 +119,11 @@ void OneTimePermissionsTracker::WebContentsUnloadedOrigin( +@@ -108,6 +134,11 @@ void OneTimePermissionsTracker::WebContentsUnloadedOrigin( observer.OnLastPageFromOriginClosed(origin); } } @@ -210,7 +210,7 @@ diff --git a/chrome/browser/permissions/one_time_permissions_tracker.h b/chrome/ ~OneTimePermissionsTracker() override; OneTimePermissionsTracker(const OneTimePermissionsTracker&) = delete; -@@ -127,7 +128,7 @@ class OneTimePermissionsTracker : public KeyedService { +@@ -136,7 +137,7 @@ class OneTimePermissionsTracker : public KeyedService { base::ObserverList observer_list_; std::map origin_tracker_; @@ -232,7 +232,7 @@ diff --git a/chrome/browser/permissions/one_time_permissions_tracker_factory.cc diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc b/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc --- a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc +++ b/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_view.cc -@@ -345,7 +345,7 @@ void PermissionPromptBubbleBaseView::RunButtonCallbacks( +@@ -263,7 +263,7 @@ void PermissionPromptBubbleBaseView::RunButtonCallback(int button_id) { return; case PermissionDialogButton::kAcceptOnce: RecordDecision(permissions::PermissionAction::GRANTED_ONCE); @@ -244,7 +244,7 @@ diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_base_v diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc --- a/components/autofill/content/browser/content_autofill_driver.cc +++ b/components/autofill/content/browser/content_autofill_driver.cc -@@ -426,8 +426,8 @@ void ContentAutofillDriver::FormsSeen( +@@ -412,8 +412,8 @@ void ContentAutofillDriver::FormsSeen( const std::vector& removed_forms) { target->GetAutofillManager().OnFormsSeen( WithNewVersion(updated_forms), removed_forms); @@ -255,7 +255,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co WithNewVersion(updated_forms), removed_forms); } }); -@@ -457,8 +457,8 @@ void ContentAutofillDriver::FormSubmitted( +@@ -443,8 +443,8 @@ void ContentAutofillDriver::FormSubmitted( } target->GetAutofillManager().OnFormSubmitted( WithNewVersion(form), known_success, submission_source); @@ -266,7 +266,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co WithNewVersion(form), known_success, submission_source); } }); -@@ -482,8 +482,8 @@ void ContentAutofillDriver::TextFieldDidChange(const FormData& raw_form, +@@ -468,8 +468,8 @@ void ContentAutofillDriver::TextFieldDidChange(const FormData& raw_form, base::TimeTicks timestamp) { target->GetAutofillManager().OnTextFieldDidChange( WithNewVersion(form), field, bounding_box, timestamp); @@ -277,7 +277,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co WithNewVersion(form), field, bounding_box, timestamp); } }); -@@ -505,8 +505,8 @@ void ContentAutofillDriver::TextFieldDidScroll(const FormData& raw_form, +@@ -491,8 +491,8 @@ void ContentAutofillDriver::TextFieldDidScroll(const FormData& raw_form, const FormFieldData& field, const gfx::RectF& bounding_box) { target->GetAutofillManager().OnTextFieldDidScroll(WithNewVersion(form), field, bounding_box); @@ -288,7 +288,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co WithNewVersion(form), field, bounding_box); } }); -@@ -529,8 +529,8 @@ void ContentAutofillDriver::SelectControlDidChange( +@@ -515,8 +515,8 @@ void ContentAutofillDriver::SelectControlDidChange( const FormFieldData& field, const gfx::RectF& bounding_box) { target->GetAutofillManager().OnSelectControlDidChange( WithNewVersion(form), field, bounding_box); @@ -299,7 +299,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co WithNewVersion(form), field, bounding_box); } }); -@@ -555,8 +555,8 @@ void ContentAutofillDriver::AskForValuesToFill( +@@ -541,8 +541,8 @@ void ContentAutofillDriver::AskForValuesToFill( AutofillSuggestionTriggerSource trigger_source) { target->GetAutofillManager().OnAskForValuesToFill( WithNewVersion(form), field, bounding_box, trigger_source); @@ -310,7 +310,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co WithNewVersion(form), field, bounding_box, trigger_source); } }); -@@ -570,8 +570,8 @@ void ContentAutofillDriver::HidePopup() { +@@ -556,8 +556,8 @@ void ContentAutofillDriver::HidePopup() { DCHECK(!target->IsPrerendering()) << "We should never affect UI while prerendering"; target->GetAutofillManager().OnHidePopup(); @@ -321,7 +321,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co }); } -@@ -583,8 +583,8 @@ void ContentAutofillDriver::FocusNoLongerOnForm(bool had_interacted_form) { +@@ -569,8 +569,8 @@ void ContentAutofillDriver::FocusNoLongerOnForm(bool had_interacted_form) { this, had_interacted_form, [](autofill::AutofillDriver* target, bool had_interacted_form) { target->GetAutofillManager().OnFocusNoLongerOnForm(had_interacted_form); @@ -332,7 +332,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co }); } -@@ -604,15 +604,15 @@ void ContentAutofillDriver::FocusOnFormField(const FormData& raw_form, +@@ -590,15 +590,15 @@ void ContentAutofillDriver::FocusOnFormField(const FormData& raw_form, const FormFieldData& field, const gfx::RectF& bounding_box) { target->GetAutofillManager().OnFocusOnFormField(WithNewVersion(form), field, bounding_box); @@ -352,7 +352,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co } }); } -@@ -628,8 +628,8 @@ void ContentAutofillDriver::DidFillAutofillFormData(const FormData& raw_form, +@@ -614,8 +614,8 @@ void ContentAutofillDriver::DidFillAutofillFormData(const FormData& raw_form, base::TimeTicks timestamp) { target->GetAutofillManager().OnDidFillAutofillFormData( WithNewVersion(form), timestamp); @@ -363,7 +363,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co WithNewVersion(form), timestamp); } }); -@@ -641,8 +641,8 @@ void ContentAutofillDriver::DidEndTextFieldEditing() { +@@ -627,8 +627,8 @@ void ContentAutofillDriver::DidEndTextFieldEditing() { } router().DidEndTextFieldEditing(this, [](autofill::AutofillDriver* target) { target->GetAutofillManager().OnDidEndTextFieldEditing(); @@ -374,7 +374,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co }); } -@@ -657,8 +657,8 @@ void ContentAutofillDriver::SelectOrSelectListFieldOptionsDidChange( +@@ -643,8 +643,8 @@ void ContentAutofillDriver::SelectOrSelectListFieldOptionsDidChange( cast(target) ->GetAutofillManager() .OnSelectOrSelectListFieldOptionsDidChange(WithNewVersion(form)); @@ -385,7 +385,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co WithNewVersion(form)); } }); -@@ -680,8 +680,8 @@ void ContentAutofillDriver::JavaScriptChangedAutofilledValue( +@@ -666,8 +666,8 @@ void ContentAutofillDriver::JavaScriptChangedAutofilledValue( const FormFieldData& field, const std::u16string& old_value) { target->GetAutofillManager().OnJavaScriptChangedAutofilledValue( WithNewVersion(form), field, old_value); @@ -396,7 +396,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co WithNewVersion(form), field, old_value); } }); -@@ -696,8 +696,8 @@ void ContentAutofillDriver::OnContextMenuShownInField( +@@ -682,8 +682,8 @@ void ContentAutofillDriver::OnContextMenuShownInField( const FieldGlobalId& field_global_id) { target->GetAutofillManager().OnContextMenuShownInField(form_global_id, field_global_id); @@ -407,7 +407,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co }); } -@@ -722,6 +722,10 @@ ContentAutofillDriver::GetAutofillAgent() { +@@ -708,6 +708,10 @@ ContentAutofillDriver::GetAutofillAgent() { return autofill_agent_; } @@ -421,7 +421,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co diff --git a/components/autofill/content/browser/content_autofill_driver.h b/components/autofill/content/browser/content_autofill_driver.h --- a/components/autofill/content/browser/content_autofill_driver.h +++ b/components/autofill/content/browser/content_autofill_driver.h -@@ -131,7 +131,7 @@ class ContentAutofillDriver : public AutofillDriver, +@@ -132,7 +132,7 @@ class ContentAutofillDriver : public AutofillDriver, autofill_manager_ = std::move(autofill_manager); secondary_autofill_manager_ = std::move(secondary_autofill_manager); } @@ -453,27 +453,24 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c import java.io.Serializable; -@@ -20,19 +21,30 @@ public class PermissionInfo implements Serializable { +@@ -20,9 +21,15 @@ public class PermissionInfo implements Serializable { private final String mEmbedder; private final String mOrigin; private final @ContentSettingsType int mContentSettingsType; + private final @SessionModel int mSessionModel; - - public PermissionInfo(@ContentSettingsType int type, String origin, String embedder) { - this(type, origin, embedder, false); - } - ++ + public PermissionInfo(@ContentSettingsType int type, String origin, String embedder, boolean isEmbargoed) { + this(type, origin, embedder, isEmbargoed, 0); + } -+ + public PermissionInfo( - @ContentSettingsType int type, String origin, String embedder, boolean isEmbargoed) { + @ContentSettingsType int type, String origin, String embedder, boolean isEmbargoed, + @SessionModel int sessionModel) { assert WebsitePermissionsFetcher.getPermissionsType(type) - == WebsitePermissionsFetcher.WebsitePermissionsType.PERMISSION_INFO; - mOrigin = origin; + == WebsitePermissionsFetcher.WebsitePermissionsType.PERMISSION_INFO + : "invalid type: " +@@ -31,6 +38,11 @@ public class PermissionInfo implements Serializable { mEmbedder = embedder; mContentSettingsType = type; mIsEmbargoed = isEmbargoed; @@ -496,7 +493,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c import org.chromium.components.embedder_support.util.Origin; import org.chromium.content_public.browser.BrowserContextHandle; -@@ -542,6 +543,11 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -558,6 +559,11 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment } } @@ -508,7 +505,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c private void setUpClearDataPreference() { ClearWebsiteStorage preference = findPreference(PREF_CLEAR_DATA); long usage = mSite.getTotalUsage(); -@@ -971,6 +977,10 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1024,6 +1030,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment if (contentType == mHighlightedPermission) { switchPreference.setBackgroundColor(mHighlightColor); } @@ -598,7 +595,7 @@ diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/comp diff --git a/components/content_settings/android/BUILD.gn b/components/content_settings/android/BUILD.gn --- a/components/content_settings/android/BUILD.gn +++ b/components/content_settings/android/BUILD.gn -@@ -59,6 +59,7 @@ java_cpp_enum("content_settings_enums_javagen") { +@@ -60,6 +60,7 @@ java_cpp_enum("content_settings_enums_javagen") { "../core/common/cookie_controls_breakage_confidence_level.h", "../core/common/cookie_controls_enforcement.h", "../core/common/cookie_controls_status.h", @@ -757,7 +754,7 @@ diff --git a/components/page_info/android/java/src/org/chromium/components/page_ diff --git a/components/page_info/android/page_info_controller_android.cc b/components/page_info/android/page_info_controller_android.cc --- a/components/page_info/android/page_info_controller_android.cc +++ b/components/page_info/android/page_info_controller_android.cc -@@ -148,6 +148,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -154,6 +154,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( std::map user_specified_settings_to_display; @@ -766,7 +763,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp for (const auto& permission : permission_info_list) { if (base::Contains(permissions_to_display, permission.type)) { -@@ -156,6 +158,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -162,6 +164,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( if (setting_to_display) { user_specified_settings_to_display[permission.type] = *setting_to_display; @@ -775,7 +772,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp } } } -@@ -172,7 +176,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -178,7 +182,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( ConvertUTF16ToJavaString(env, setting_title), ConvertUTF16ToJavaString(env, setting_title_mid_sentence), static_cast(permission), @@ -785,7 +782,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp } } -@@ -185,7 +190,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -191,7 +196,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( env, controller_jobject_, ConvertUTF16ToJavaString(env, object_title), ConvertUTF16ToJavaString(env, object_title), static_cast(chosen_object->ui_info->content_settings_type), @@ -798,7 +795,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc --- a/components/page_info/page_info.cc +++ b/components/page_info/page_info.cc -@@ -1177,6 +1177,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, +@@ -1184,6 +1184,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, permission_info.source = info.source; permission_info.is_one_time = (info.metadata.session_model() == content_settings::SessionModel::OneTime); @@ -829,7 +826,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per /** * Delegate class for modal permission dialogs. Contains all of the data displayed in a prompt, -@@ -43,6 +44,9 @@ public class PermissionDialogDelegate { +@@ -46,6 +47,9 @@ public class PermissionDialogDelegate { /** The {@link ContentSettingsType}s requested in this dialog. */ private int[] mContentSettingsTypes; @@ -839,7 +836,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per public WindowAndroid getWindow() { return mWindow; } -@@ -72,6 +76,15 @@ public class PermissionDialogDelegate { +@@ -79,6 +83,15 @@ public class PermissionDialogDelegate { PermissionDialogDelegateJni.get().accept(mNativeDelegatePtr, PermissionDialogDelegate.this); } @@ -876,16 +873,16 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per /** * This class creates the model for permission dialog. */ -@@ -34,7 +45,7 @@ class PermissionDialogModel { - TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds( - messageTextView, delegate.getDrawableId(), 0, 0, 0); +@@ -41,7 +52,7 @@ class PermissionDialogModel { + secondaryTextView.setVisibility(View.VISIBLE); + } - return new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS) + PropertyModel pm = new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS) .with(ModalDialogProperties.CONTROLLER, controller) .with(ModalDialogProperties.FOCUS_DIALOG, true) .with(ModalDialogProperties.CUSTOM_VIEW, customView) -@@ -46,6 +57,74 @@ class PermissionDialogModel { +@@ -53,6 +64,74 @@ class PermissionDialogModel { .with(ModalDialogProperties.BUTTON_TAP_PROTECTION_PERIOD_MS, UiUtils.PROMPT_INPUT_PROTECTION_SHORT_DELAY_MS) .build(); @@ -963,7 +960,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per diff --git a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc --- a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc +++ b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc -@@ -67,6 +67,11 @@ void PermissionDialogJavaDelegate::DismissDialog() { +@@ -68,6 +68,11 @@ void PermissionDialogJavaDelegate::DismissDialog() { Java_PermissionDialogDelegate_dismissFromNative(env, j_delegate_); } @@ -975,7 +972,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ // static void PermissionDialogDelegate::Create( content::WebContents* web_contents, -@@ -95,12 +100,26 @@ PermissionDialogDelegate* PermissionDialogDelegate::CreateForTesting( +@@ -96,12 +101,26 @@ PermissionDialogDelegate* PermissionDialogDelegate::CreateForTesting( void PermissionDialogDelegate::Accept(JNIEnv* env, const JavaParamRef& obj) { DCHECK(permission_prompt_); @@ -1016,7 +1013,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ diff --git a/components/permissions/android/permission_prompt/permission_prompt_android.cc b/components/permissions/android/permission_prompt/permission_prompt_android.cc --- a/components/permissions/android/permission_prompt/permission_prompt_android.cc +++ b/components/permissions/android/permission_prompt/permission_prompt_android.cc -@@ -46,6 +46,14 @@ void PermissionPromptAndroid::Accept() { +@@ -47,6 +47,14 @@ void PermissionPromptAndroid::Accept() { delegate_->Accept(); } @@ -1205,7 +1202,7 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr diff --git a/components/permissions/permission_context_base.cc b/components/permissions/permission_context_base.cc --- a/components/permissions/permission_context_base.cc +++ b/components/permissions/permission_context_base.cc -@@ -257,6 +257,16 @@ PermissionContextBase::CreatePermissionRequest( +@@ -262,6 +262,16 @@ PermissionContextBase::CreatePermissionRequest( std::move(delete_callback)); } @@ -1222,7 +1219,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm content::PermissionResult PermissionContextBase::GetPermissionStatus( content::RenderFrameHost* render_frame_host, const GURL& requesting_origin, -@@ -466,7 +476,8 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, +@@ -506,7 +516,8 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, const GURL& embedding_origin, ContentSetting content_setting, bool is_one_time, @@ -1232,7 +1229,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm DCHECK(content_setting == CONTENT_SETTING_ALLOW || content_setting == CONTENT_SETTING_BLOCK || content_setting == CONTENT_SETTING_DEFAULT); -@@ -481,13 +492,14 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, +@@ -521,13 +532,14 @@ void PermissionContextBase::PermissionDecided(const PermissionRequestID& id, // missing if a permission prompt was preignored and we already notified an // origin about it. if (request->second.second) { @@ -1251,7 +1248,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm } } -@@ -539,11 +551,27 @@ void PermissionContextBase::NotifyPermissionSet( +@@ -573,11 +585,27 @@ void PermissionContextBase::NotifyPermissionSet( ContentSetting content_setting, bool is_one_time, bool is_final_decision) { @@ -1280,7 +1277,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm } if (is_final_decision) { -@@ -573,6 +601,15 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, +@@ -607,6 +635,15 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, const GURL& embedding_origin, ContentSetting content_setting, bool is_one_time) { @@ -1296,7 +1293,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm DCHECK_EQ(requesting_origin, requesting_origin.DeprecatedGetOriginAsURL()); DCHECK_EQ(embedding_origin, embedding_origin.DeprecatedGetOriginAsURL()); DCHECK(content_setting == CONTENT_SETTING_ALLOW || -@@ -582,6 +619,8 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, +@@ -616,6 +653,8 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, constraints.set_session_model(is_one_time ? content_settings::SessionModel::OneTime : content_settings::SessionModel::Durable); @@ -1308,7 +1305,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm diff --git a/components/permissions/permission_context_base.h b/components/permissions/permission_context_base.h --- a/components/permissions/permission_context_base.h +++ b/components/permissions/permission_context_base.h -@@ -143,6 +143,15 @@ class PermissionContextBase : public content_settings::Observer { +@@ -149,6 +149,15 @@ class PermissionContextBase : public content_settings::Observer { // Updates stored content setting if persist is set, updates tab indicators // and runs the callback to finish the request. @@ -1324,7 +1321,7 @@ diff --git a/components/permissions/permission_context_base.h b/components/permi virtual void NotifyPermissionSet(const PermissionRequestID& id, const GURL& requesting_origin, const GURL& embedding_origin, -@@ -164,6 +173,11 @@ class PermissionContextBase : public content_settings::Observer { +@@ -170,6 +179,11 @@ class PermissionContextBase : public content_settings::Observer { // Store the decided permission as a content setting. // virtual since the permission might be stored with different restrictions // (for example for desktop notifications). @@ -1336,7 +1333,7 @@ diff --git a/components/permissions/permission_context_base.h b/components/permi virtual void UpdateContentSetting(const GURL& requesting_origin, const GURL& embedding_origin, ContentSetting content_setting, -@@ -194,6 +208,12 @@ class PermissionContextBase : public content_settings::Observer { +@@ -200,6 +214,12 @@ class PermissionContextBase : public content_settings::Observer { PermissionRequest::PermissionDecidedCallback permission_decided_callback, base::OnceClosure delete_callback) const; @@ -1349,7 +1346,7 @@ diff --git a/components/permissions/permission_context_base.h b/components/permi base::ObserverList permission_observers_; // Set by subclasses to inform the base class that they will handle adding -@@ -216,7 +236,8 @@ class PermissionContextBase : public content_settings::Observer { +@@ -222,7 +242,8 @@ class PermissionContextBase : public content_settings::Observer { const GURL& embedding_origin, ContentSetting content_setting, bool is_one_time, @@ -1357,8 +1354,8 @@ diff --git a/components/permissions/permission_context_base.h b/components/permi + bool is_final_decision, + content_settings::LifetimeMode lifetime_option); - raw_ptr browser_context_; - const ContentSettingsType content_settings_type_; + void NotifyObservers(const ContentSettingsPattern& primary_pattern, + const ContentSettingsPattern& secondary_pattern, diff --git a/components/permissions/permission_prompt.h b/components/permissions/permission_prompt.h --- a/components/permissions/permission_prompt.h +++ b/components/permissions/permission_prompt.h @@ -1376,7 +1373,7 @@ diff --git a/components/permissions/permission_prompt.h b/components/permissions diff --git a/components/permissions/permission_request.cc b/components/permissions/permission_request.cc --- a/components/permissions/permission_request.cc +++ b/components/permissions/permission_request.cc -@@ -35,6 +35,14 @@ PermissionRequest::PermissionRequest( +@@ -37,6 +37,14 @@ PermissionRequest::PermissionRequest( permission_decided_callback_(std::move(permission_decided_callback)), delete_callback_(std::move(delete_callback)) {} @@ -1391,7 +1388,7 @@ diff --git a/components/permissions/permission_request.cc b/components/permissio PermissionRequest::~PermissionRequest() { DCHECK(delete_callback_.is_null()); } -@@ -274,19 +282,37 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { +@@ -276,19 +284,37 @@ bool PermissionRequest::ShouldUseTwoOriginPrompt() const { permissions::features::kPermissionStorageAccessAPI); } @@ -1470,7 +1467,7 @@ diff --git a/components/permissions/permission_request.h b/components/permission // Called when the user has cancelled the permission request. This // corresponds to a denial, but is segregated in case the context needs to -@@ -170,6 +179,9 @@ class PermissionRequest { +@@ -174,6 +183,9 @@ class PermissionRequest { // Called once a decision is made about the permission. PermissionDecidedCallback permission_decided_callback_; @@ -1555,7 +1552,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p } NotifyRequestDecided(PermissionAction::DENIED); -@@ -1162,32 +1173,32 @@ PermissionRequestManager::VisitDuplicateRequests( +@@ -1165,32 +1176,32 @@ PermissionRequestManager::VisitDuplicateRequests( void PermissionRequestManager::PermissionGrantedIncludingDuplicates( PermissionRequest* request, @@ -1598,7 +1595,7 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p request); } -@@ -1436,7 +1447,7 @@ void PermissionRequestManager::LogWarningToConsole(const char* message) { +@@ -1439,7 +1450,7 @@ void PermissionRequestManager::LogWarningToConsole(const char* message) { void PermissionRequestManager::DoAutoResponseForTesting() { switch (auto_response_for_test_) { case ACCEPT_ONCE: diff --git a/build/patches/Add-menu-item-to-view-source.patch b/build/patches/Add-menu-item-to-view-source.patch index 2affbd31..c6a42e61 100644 --- a/build/patches/Add-menu-item-to-view-source.patch +++ b/build/patches/Add-menu-item-to-view-source.patch @@ -42,7 +42,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -2251,6 +2251,8 @@ public class ChromeTabbedActivity extends ChromeActivity +@@ -2519,6 +2519,11 @@ public abstract class ChromeActivity return doOpenWebApk(currentTab); } diff --git a/build/patches/Add-option-to-force-tablet-UI.patch b/build/patches/Add-option-to-force-tablet-UI.patch index 54e965db..46ada2ea 100644 --- a/build/patches/Add-option-to-force-tablet-UI.patch +++ b/build/patches/Add-option-to-force-tablet-UI.patch @@ -22,8 +22,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java -@@ -61,6 +61,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting - return new ReaderForAccessibilityDelegate(mProfile); +@@ -95,6 +95,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting + return new TextSizeContrastAccessibilityDelegate(getBrowserContextHandle()); } + private static class ForceTabletUIDelegate implements BooleanPreferenceDelegate { @@ -51,7 +51,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java -@@ -98,6 +98,7 @@ import org.chromium.chrome.browser.paint_preview.DemoPaintPreview; +@@ -100,6 +100,7 @@ import org.chromium.chrome.browser.paint_preview.DemoPaintPreview; import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer; import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; @@ -59,7 +59,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi import org.chromium.chrome.browser.price_tracking.PriceTrackingButtonController; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.quick_delete.QuickDeleteController; -@@ -1417,7 +1418,9 @@ public class RootUiCoordinator +@@ -1438,7 +1439,9 @@ public class RootUiCoordinator if (!mSupportsFindInPageSupplier.getAsBoolean()) return; int stubId = R.id.find_toolbar_stub; @@ -80,22 +80,22 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro + public static final String FLAGS_FORCE_TABLET_UI_ENABLED = "force_tablet_ui_enabled"; /** Keys used to save settings related to homepage. */ - public static final String HOMEPAGE_CUSTOM_URI = "homepage_custom_uri"; + public static final String DEPRECATED_HOMEPAGE_CUSTOM_URI = "homepage_custom_uri"; diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java -@@ -62,6 +62,7 @@ public class LegacyChromePreferenceKeys { +@@ -64,6 +64,7 @@ public class LegacyChromePreferenceKeys { ChromePreferenceKeys.FLAGS_CACHED_START_SURFACE_ENABLED, ChromePreferenceKeys.FLAGS_CACHED_TAB_GROUPS_ANDROID_ENABLED, ChromePreferenceKeys.FONT_USER_FONT_SCALE_FACTOR, + ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, ChromePreferenceKeys.FONT_USER_SET_FORCE_ENABLE_ZOOM, ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO, - ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, + ChromePreferenceKeys.HOMEPAGE_ENABLED, diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java -@@ -690,7 +690,7 @@ public class LocationBarCoordinator +@@ -691,7 +691,7 @@ public class LocationBarCoordinator } private boolean isTabletWindow() { @@ -107,8 +107,8 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1730,6 +1730,13 @@ Your Google account may have other forms of browsing history like searches and a - Depending on your settings, Chrome may also send cookies and your current URL +@@ -1765,6 +1765,13 @@ Your Google account may have other forms of browsing history like searches and a + Protection from trackers (third-party cookies, IP tracking, invasive scripts, and more) + @@ -148,7 +148,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn disallowed_extension_deps_ = [ # Components should largely not depend on //extensions. Since // extensions # is not a component target and is linked with //chrome, depending on most -@@ -753,7 +753,7 @@ test("components_unittests") { +@@ -817,7 +817,7 @@ test("components_unittests") { # On other platforms, no components should depend on Chrome. # Since //chrome depends on //extensions, we also only assert_no_deps on # extensions targets for non-lacros builds. @@ -157,7 +157,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn assert_no_deps = [ "//chrome/*" ] assert_no_deps += disallowed_extension_deps_ } -@@ -1042,7 +1042,7 @@ if (use_blink) { +@@ -1103,7 +1103,7 @@ if (use_blink) { # dependency. On other platforms, no components should depend on Chrome. # Since //chrome depends on //extensions, we also only assert_no_deps on # extensions targets for non-lacros builds. @@ -169,7 +169,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml --- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml +++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml -@@ -31,6 +31,11 @@ found in the LICENSE file. +@@ -35,6 +35,11 @@ found in the LICENSE file. android:summary="@string/reader_for_accessibility_summary" android:title="@string/reader_for_accessibility_title" /> @@ -185,15 +185,15 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java @@ -33,6 +33,8 @@ public class AccessibilitySettings extends PreferenceFragmentCompat - public static final String PREF_READER_FOR_ACCESSIBILITY = "reader_for_accessibility"; public static final String PREF_CAPTIONS = "captions"; + public static final String PREF_ZOOM_INFO = "zoom_info"; + private BooleanPreferenceDelegate mForceTabletUIDelegate; + static final String PREF_FORCE_TABLET_UI = "force_tablet_ui"; private TextScalePreference mTextScalePref; private PageZoomPreference mPageZoomDefaultZoomPref; private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -121,6 +123,12 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -117,6 +119,12 @@ public class AccessibilitySettings extends PreferenceFragmentCompat getPreferenceScreen().removePreference(readerForAccessibilityPref); } @@ -206,7 +206,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(Settings.ACTION_CAPTIONING_SETTINGS); -@@ -167,6 +175,8 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -174,6 +182,8 @@ public class AccessibilitySettings extends PreferenceFragmentCompat mFontSizePrefs.setUserFontScaleFactor((Float) newValue); } else if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) { mFontSizePrefs.setForceEnableZoomFromUser((Boolean) newValue); @@ -218,9 +218,9 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java -@@ -38,6 +38,8 @@ public interface AccessibilitySettingsDelegate { +@@ -60,6 +60,8 @@ public interface AccessibilitySettingsDelegate { */ - BooleanPreferenceDelegate getReaderForAccessibilityDelegate(); + IntegerPreferenceDelegate getTextSizeContrastAccessibilityDelegate(); + BooleanPreferenceDelegate getForceTabletUIDelegate(); + @@ -230,7 +230,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn --- a/ui/android/BUILD.gn +++ b/ui/android/BUILD.gn -@@ -409,6 +409,8 @@ android_library("ui_no_recycler_view_java") { +@@ -411,6 +411,8 @@ android_library("ui_no_recycler_view_java") { ":ui_android_features_java", ":ui_java_resources", ":ui_utils_java", diff --git a/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch b/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch index d5d94dce..470c9899 100644 --- a/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch +++ b/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch @@ -13,7 +13,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -55,6 +55,11 @@ found in the LICENSE file. +@@ -61,6 +61,11 @@ found in the LICENSE file. android:title="@string/incognito_settings_title" android:summary="@string/incognito_settings_summary" android:fragment="org.chromium.chrome.browser.privacy.settings.IncognitoSettings"/> @@ -28,7 +28,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -39,6 +39,7 @@ import org.chromium.base.BuildInfo; +@@ -40,6 +40,7 @@ import org.chromium.base.BuildInfo; import org.chromium.base.Callback; import org.chromium.base.CallbackController; import org.chromium.base.CommandLine; @@ -36,7 +36,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.base.IntentUtils; import org.chromium.base.Log; import org.chromium.base.MemoryPressureListener; -@@ -1257,8 +1258,10 @@ public class ChromeTabbedActivity extends ChromeActivity<resetlink>reset sync

<resetlink>reset sync

IMAGE diff --git a/build/patches/Add-support-for-ISupportHelpAndFeedback.patch b/build/patches/Add-support-for-ISupportHelpAndFeedback.patch index ba2ff427..e9b9026e 100644 --- a/build/patches/Add-support-for-ISupportHelpAndFeedback.patch +++ b/build/patches/Add-support-for-ISupportHelpAndFeedback.patch @@ -12,15 +12,15 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java -@@ -84,6 +84,7 @@ import org.chromium.components.browser_ui.settings.CustomDividerFragment; +@@ -86,6 +86,7 @@ import org.chromium.components.browser_ui.settings.CustomDividerFragment; import org.chromium.components.browser_ui.settings.FragmentSettingsLauncher; import org.chromium.components.browser_ui.settings.PaddedDividerItemDecoration; import org.chromium.components.browser_ui.settings.SettingsLauncher; +import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory; - import org.chromium.components.browser_ui.site_settings.SiteSettingsPreferenceFragment; + import org.chromium.components.browser_ui.site_settings.BaseSiteSettingsFragment; import org.chromium.components.browser_ui.util.TraceEventVectorDrawableCompat; -@@ -399,8 +400,12 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity +@@ -417,8 +418,12 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity finish(); return true; } else if (item.getItemId() == R.id.menu_id_general_help) { diff --git a/build/patches/Add-webGL-site-setting.patch b/build/patches/Add-webGL-site-setting.patch index 71500535..5a69ec9a 100644 --- a/build/patches/Add-webGL-site-setting.patch +++ b/build/patches/Add-webGL-site-setting.patch @@ -273,7 +273,7 @@ diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_ba diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h -@@ -1936,6 +1936,8 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext, +@@ -1937,6 +1937,8 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext, DOMArrayBufferView* pixels, int64_t offset); diff --git a/build/patches/Add-webRTC-site-settings.patch b/build/patches/Add-webRTC-site-settings.patch index 06c23326..5fc32e93 100644 --- a/build/patches/Add-webRTC-site-settings.patch +++ b/build/patches/Add-webRTC-site-settings.patch @@ -186,7 +186,7 @@ new file mode 100644 diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc -@@ -36,6 +36,7 @@ +@@ -37,6 +37,7 @@ #include "third_party/blink/public/common/peerconnection/webrtc_ip_handling_policy.h" #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" #include "third_party/blink/public/platform/platform.h" @@ -194,7 +194,7 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_d #include "third_party/blink/public/platform/web_url.h" #include "third_party/blink/public/web/modules/mediastream/media_stream_video_source.h" #include "third_party/blink/public/web/web_document.h" -@@ -764,6 +765,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator( +@@ -781,6 +782,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator( // origin. WebRTCIPHandlingPolicy policy = GetWebRTCIPHandlingPolicy(webrtc_ip_handling_policy); diff --git a/build/patches/Allow-building-without-enable_reporting.patch b/build/patches/Allow-building-without-enable_reporting.patch index b0a8f647..4ddc862d 100644 --- a/build/patches/Allow-building-without-enable_reporting.patch +++ b/build/patches/Allow-building-without-enable_reporting.patch @@ -40,7 +40,7 @@ diff --git a/chrome/browser/net/chrome_report_sender.cc b/chrome/browser/net/chr diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc --- a/content/browser/devtools/protocol/network_handler.cc +++ b/content/browser/devtools/protocol/network_handler.cc -@@ -1299,6 +1299,7 @@ String BuildReportStatus(const net::ReportingReport::Status status) { +@@ -1314,6 +1314,7 @@ String BuildReportStatus(const net::ReportingReport::Status status) { } } @@ -48,7 +48,7 @@ diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/brow std::vector ComputeReportingURLs(RenderFrameHostImpl* frame_host) { std::vector urls; frame_host->ForEachRenderFrameHostWithAction( -@@ -1312,6 +1313,7 @@ std::vector ComputeReportingURLs(RenderFrameHostImpl* frame_host) { +@@ -1327,6 +1328,7 @@ std::vector ComputeReportingURLs(RenderFrameHostImpl* frame_host) { }); return urls; } @@ -200,7 +200,7 @@ diff --git a/content/browser/network/reporting_service_proxy.cc b/content/browse diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc -@@ -13542,12 +13542,6 @@ void RenderFrameHostImpl::MaybeGenerateCrashReport( +@@ -13489,12 +13489,6 @@ void RenderFrameHostImpl::MaybeGenerateCrashReport( base::Value::Dict body; if (!reason.empty()) body.Set("reason", reason); @@ -235,7 +235,7 @@ diff --git a/content/browser/web_package/signed_exchange_reporter.cc b/content/b diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc b/content/public/common/content_switch_dependent_feature_overrides.cc --- a/content/public/common/content_switch_dependent_feature_overrides.cc +++ b/content/public/common/content_switch_dependent_feature_overrides.cc -@@ -7,6 +7,7 @@ +@@ -9,6 +9,7 @@ #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "net/base/features.h" @@ -246,7 +246,7 @@ diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc diff --git a/net/base/features.cc b/net/base/features.cc --- a/net/base/features.cc +++ b/net/base/features.cc -@@ -242,7 +242,7 @@ extern const base::FeatureParam kTimeoutTcpConnectAttemptMax( +@@ -234,7 +234,7 @@ extern const base::FeatureParam kTimeoutTcpConnectAttemptMax( #if BUILDFLAG(ENABLE_REPORTING) BASE_FEATURE(kDocumentReporting, "DocumentReporting", @@ -290,7 +290,7 @@ diff --git a/services/network/network_context.h b/services/network/network_conte diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc --- a/services/network/public/cpp/features.cc +++ b/services/network/public/cpp/features.cc -@@ -14,10 +14,10 @@ +@@ -15,10 +15,10 @@ namespace network::features { BASE_FEATURE(kNetworkErrorLogging, @@ -307,7 +307,7 @@ diff --git a/services/network/public/cpp/features.cc b/services/network/public/c diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mojom/BUILD.gn --- a/services/network/public/mojom/BUILD.gn +++ b/services/network/public/mojom/BUILD.gn -@@ -1431,7 +1431,6 @@ mojom("mojom") { +@@ -1427,7 +1427,6 @@ mojom("mojom") { export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1" export_header_blink = "third_party/blink/public/platform/web_common.h" if (enable_reporting) { @@ -318,7 +318,7 @@ diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mo diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom --- a/services/network/public/mojom/network_context.mojom +++ b/services/network/public/mojom/network_context.mojom -@@ -1189,6 +1189,7 @@ interface NetworkContext { +@@ -1196,6 +1196,7 @@ interface NetworkContext { // provided |network_isolation_key|. // // Spec: https://w3c.github.io/reporting/#concept-reports @@ -326,7 +326,7 @@ diff --git a/services/network/public/mojom/network_context.mojom b/services/netw QueueReport(string type, string group, url.mojom.Url url, -@@ -1202,6 +1203,7 @@ interface NetworkContext { +@@ -1209,6 +1210,7 @@ interface NetworkContext { // Note that this queued report will never be delivered if no reporting // endpoint matching is registered for with the provided // |network_isolation_key|. @@ -372,7 +372,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/ #include "services/network/public/cpp/features.h" #include "services/network/public/mojom/content_security_policy.mojom-blink.h" #include "services/network/public/mojom/source_location.mojom-blink.h" -@@ -2505,9 +2506,11 @@ void LocalFrame::MainFrameInteractive() { +@@ -2502,9 +2503,11 @@ void LocalFrame::MainFrameInteractive() { } } @@ -398,7 +398,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/b #include "services/device/public/mojom/device_posture_provider.mojom-blink-forward.h" #include "services/metrics/public/cpp/ukm_source_id.h" #include "services/network/public/mojom/fetch_api.mojom-blink-forward.h" -@@ -629,9 +629,9 @@ class CORE_EXPORT LocalFrame final +@@ -627,9 +627,9 @@ class CORE_EXPORT LocalFrame final void FinishedScrollSequence(); SmoothScrollSequencer* GetSmoothScrollSequencer() const; diff --git a/build/patches/Allow-building-without-supervised-users.patch b/build/patches/Allow-building-without-supervised-users.patch index d277a9f9..4e64f052 100644 --- a/build/patches/Allow-building-without-supervised-users.patch +++ b/build/patches/Allow-building-without-supervised-users.patch @@ -21,7 +21,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -3515,7 +3515,6 @@ generate_jni("chrome_jni_headers") { +@@ -3603,7 +3603,6 @@ generate_jni("chrome_jni_headers") { "java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java", "java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSites.java", "java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java", @@ -32,7 +32,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -1062,7 +1062,6 @@ chrome_java_sources = [ +@@ -1074,7 +1074,6 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/suggestions/tile/TileGroupDelegateImpl.java", "java/src/org/chromium/chrome/browser/suggestions/tile/TileRenderer.java", "java/src/org/chromium/chrome/browser/suggestions/tile/TopSitesTileView.java", @@ -43,7 +43,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3110,8 +3110,6 @@ static_library("browser") { +@@ -3182,8 +3182,6 @@ static_library("browser") { "feed/android/refresh_task_scheduler_impl.cc", "feed/android/refresh_task_scheduler_impl.h", "feed/android/web_feed_bridge.cc", @@ -52,7 +52,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "file_select_helper_contacts_android.cc", "file_select_helper_contacts_android.h", "first_run/android/first_run_prefs.cc", -@@ -3328,10 +3326,6 @@ static_library("browser") { +@@ -3398,10 +3396,6 @@ static_library("browser") { "ssl/chrome_security_state_model_delegate.h", "ssl/known_interception_disclosure_infobar.cc", "ssl/known_interception_disclosure_infobar.h", @@ -66,7 +66,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc -@@ -1021,9 +1021,11 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { +@@ -1027,9 +1027,11 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { settings_api::PrefType::PREF_TYPE_BOOLEAN; #endif diff --git a/build/patches/Allow-playing-audio-in-background.patch b/build/patches/Allow-playing-audio-in-background.patch index 6cfe2da2..766d7bb3 100644 --- a/build/patches/Allow-playing-audio-in-background.patch +++ b/build/patches/Allow-playing-audio-in-background.patch @@ -11,7 +11,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc b/third_party/blink/renderer/platform/media/web_media_player_impl.cc --- a/third_party/blink/renderer/platform/media/web_media_player_impl.cc +++ b/third_party/blink/renderer/platform/media/web_media_player_impl.cc -@@ -1184,6 +1184,12 @@ bool WebMediaPlayerImpl::HasAudio() const { +@@ -1176,6 +1176,12 @@ bool WebMediaPlayerImpl::HasAudio() const { return pipeline_metadata_.has_audio; } @@ -24,7 +24,7 @@ diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc void WebMediaPlayerImpl::EnabledAudioTracksChanged( const WebVector& enabledTrackIds) { DCHECK(main_task_runner_->BelongsToCurrentThread()); -@@ -3513,7 +3519,10 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const { +@@ -3484,7 +3490,10 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const { : HasAudio(); // Audio only stream is allowed to play when in background. diff --git a/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch b/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch index 382cf8cf..14bf9980 100644 --- a/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch +++ b/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch @@ -23,7 +23,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -3905,6 +3905,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4168,6 +4168,10 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kKioskEnableAppServiceDescription, kOsCrOS, FEATURE_VALUE_TYPE(features::kKioskEnableAppService)}, #endif // BUILDFLAG(IS_CHROMEOS) @@ -37,7 +37,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -3694,6 +3694,11 @@ const char kWebTransportDeveloperModeDescription[] = +@@ -3735,6 +3735,11 @@ const char kWebTransportDeveloperModeDescription[] = "When enabled, removes the requirement that all certificates used for " "WebTransport over HTTP/3 are issued by a known certificate root."; @@ -52,7 +52,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2146,6 +2146,9 @@ extern const char kWebRtcRemoteEventLogDescription[]; +@@ -2171,6 +2171,9 @@ extern const char kWebRtcRemoteEventLogDescription[]; extern const char kWebrtcUseMinMaxVEADimensionsName[]; extern const char kWebrtcUseMinMaxVEADimensionsDescription[]; @@ -65,7 +65,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -252,6 +252,10 @@ BASE_FEATURE(kBiddingAndScoringDebugReportingAPI, +@@ -258,6 +258,10 @@ BASE_FEATURE(kBiddingAndScoringDebugReportingAPI, "BiddingAndScoringDebugReportingAPI", base::FEATURE_DISABLED_BY_DEFAULT); @@ -79,7 +79,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h -@@ -155,6 +155,8 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kBlinkHeapConcurrentSweeping); +@@ -158,6 +158,8 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kBlinkHeapConcurrentSweeping); BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kBlinkHeapIncrementalMarking); BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kBlinkHeapIncrementalMarkingStress); @@ -178,7 +178,7 @@ diff --git a/third_party/blink/renderer/modules/webaudio/base_audio_context.cc b diff --git a/third_party/blink/renderer/modules/webaudio/base_audio_context.h b/third_party/blink/renderer/modules/webaudio/base_audio_context.h --- a/third_party/blink/renderer/modules/webaudio/base_audio_context.h +++ b/third_party/blink/renderer/modules/webaudio/base_audio_context.h -@@ -338,6 +338,8 @@ class MODULES_EXPORT BaseAudioContext +@@ -339,6 +339,8 @@ class MODULES_EXPORT BaseAudioContext // if the execution context does not exist. bool CheckExecutionContextAndThrowIfNecessary(ExceptionState&); diff --git a/build/patches/Block-gateway-attacks-via-websockets.patch b/build/patches/Block-gateway-attacks-via-websockets.patch index fee6aec0..b8871b08 100644 --- a/build/patches/Block-gateway-attacks-via-websockets.patch +++ b/build/patches/Block-gateway-attacks-via-websockets.patch @@ -59,7 +59,7 @@ diff --git a/third_party/blink/renderer/core/execution_context/execution_context diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.h b/third_party/blink/renderer/core/loader/base_fetch_context.h --- a/third_party/blink/renderer/core/loader/base_fetch_context.h +++ b/third_party/blink/renderer/core/loader/base_fetch_context.h -@@ -88,6 +88,7 @@ class CORE_EXPORT BaseFetchContext : public FetchContext { +@@ -89,6 +89,7 @@ class CORE_EXPORT BaseFetchContext : public FetchContext { virtual SubresourceFilter* GetSubresourceFilter() const = 0; virtual bool ShouldBlockWebSocketByMixedContentCheck(const KURL&) const = 0; @@ -70,7 +70,7 @@ diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.h b/third diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/third_party/blink/renderer/core/loader/frame_fetch_context.cc --- a/third_party/blink/renderer/core/loader/frame_fetch_context.cc +++ b/third_party/blink/renderer/core/loader/frame_fetch_context.cc -@@ -597,6 +597,26 @@ bool FrameFetchContext::ShouldBlockRequestByInspector(const KURL& url) const { +@@ -588,6 +588,26 @@ bool FrameFetchContext::ShouldBlockRequestByInspector(const KURL& url) const { return should_block_request; } @@ -149,7 +149,7 @@ diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.cc b/th diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.h b/third_party/blink/renderer/core/loader/worker_fetch_context.h --- a/third_party/blink/renderer/core/loader/worker_fetch_context.h +++ b/third_party/blink/renderer/core/loader/worker_fetch_context.h -@@ -63,6 +63,7 @@ class WorkerFetchContext final : public BaseFetchContext { +@@ -64,6 +64,7 @@ class WorkerFetchContext final : public BaseFetchContext { bool ShouldBlockWebSocketByMixedContentCheck(const KURL&) const override; std::unique_ptr CreateWebSocketHandshakeThrottle() override; diff --git a/build/patches/Block-qjz9zk-or-trk-requests.patch b/build/patches/Block-qjz9zk-or-trk-requests.patch index ac0b0762..12fa309a 100644 --- a/build/patches/Block-qjz9zk-or-trk-requests.patch +++ b/build/patches/Block-qjz9zk-or-trk-requests.patch @@ -108,7 +108,7 @@ diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/ur diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc --- a/content/browser/child_process_security_policy_impl.cc +++ b/content/browser/child_process_security_policy_impl.cc -@@ -823,6 +823,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl() +@@ -829,6 +829,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl() RegisterPseudoScheme(url::kJavaScriptScheme); RegisterPseudoScheme(kViewSourceScheme); RegisterPseudoScheme(kGoogleChromeScheme); @@ -119,7 +119,7 @@ diff --git a/content/browser/child_process_security_policy_impl.cc b/content/bro diff --git a/net/BUILD.gn b/net/BUILD.gn --- a/net/BUILD.gn +++ b/net/BUILD.gn -@@ -1058,6 +1058,8 @@ component("net") { +@@ -1056,6 +1056,8 @@ component("net") { "url_request/url_request_http_job.cc", "url_request/url_request_http_job.h", "url_request/url_request_interceptor.cc", diff --git a/build/patches/Bromite-subresource-adblocker.patch b/build/patches/Bromite-subresource-adblocker.patch index 6dfedb7c..3aa32b9b 100644 --- a/build/patches/Bromite-subresource-adblocker.patch +++ b/build/patches/Bromite-subresource-adblocker.patch @@ -67,7 +67,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -301,6 +301,7 @@ if (current_toolchain == default_toolchain) { +@@ -304,6 +304,7 @@ if (current_toolchain == default_toolchain) { "//chrome/android/modules/image_editor/provider:java", "//chrome/android/modules/stack_unwinder/provider:java", "//chrome/android/webapk/libs/client:client_java", @@ -78,7 +78,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -441,6 +441,7 @@ chrome_java_resources = [ +@@ -448,6 +448,7 @@ chrome_java_resources = [ "java/res/layout/account_chooser_dialog_title.xml", "java/res/layout/account_divider_preference.xml", "java/res/layout/account_management_account_row.xml", @@ -86,7 +86,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja "java/res/layout/auto_sign_in_first_run_dialog.xml", "java/res/layout/autofill_billing_address_dropdown.xml", "java/res/layout/autofill_card_name_and_number.xml", -@@ -639,6 +640,7 @@ chrome_java_resources = [ +@@ -648,6 +649,7 @@ chrome_java_resources = [ "java/res/xml/about_chrome_preferences.xml", "java/res/xml/account_management_preferences.xml", "java/res/xml/ad_services_config.xml", @@ -97,7 +97,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -948,6 +948,8 @@ chrome_java_sources = [ +@@ -960,6 +960,8 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/permissions/PermissionSettingsBridge.java", "java/src/org/chromium/chrome/browser/permissions/PermissionUpdateRequester.java", "java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceImpl.java", @@ -105,7 +105,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java + "java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java", "java/src/org/chromium/chrome/browser/policy/PolicyAuditor.java", "java/src/org/chromium/chrome/browser/policy/PolicyAuditorBridge.java", - "java/src/org/chromium/chrome/browser/prerender/ChromePrerenderServiceImpl.java", + "java/src/org/chromium/chrome/browser/printing/TabPrinter.java", diff --git a/chrome/android/java/res/layout/adblock_editor.xml b/chrome/android/java/res/layout/adblock_editor.xml new file mode 100644 --- /dev/null @@ -428,7 +428,7 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java -@@ -783,7 +783,7 @@ public class TabModelImpl extends TabModelJniBridge { +@@ -781,7 +781,7 @@ public class TabModelImpl extends TabModelJniBridge { protected boolean createTabWithWebContents( Tab parent, Profile profile, WebContents webContents) { return getTabCreator(profile.isOffTheRecord()) @@ -440,7 +440,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabMod diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd -@@ -14314,6 +14314,16 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -14317,6 +14317,16 @@ Please help our engineers fix this problem. Tell us what happened right before y Never show this again. @@ -511,7 +511,7 @@ diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc -@@ -1128,6 +1128,26 @@ BrowserProcessImpl::component_updater() { +@@ -1130,6 +1130,26 @@ BrowserProcessImpl::component_updater() { return component_updater_.get(); } @@ -560,7 +560,7 @@ diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_proc diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc -@@ -429,6 +429,9 @@ StartupProfileInfo CreateInitialProfile( +@@ -431,6 +431,9 @@ StartupProfileInfo CreateInitialProfile( // missing code in the above test. CHECK(profile_info.profile) << "Cannot get default profile."; @@ -573,7 +573,7 @@ diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_brows diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn --- a/chrome/browser/flags/BUILD.gn +++ b/chrome/browser/flags/BUILD.gn -@@ -23,6 +23,7 @@ android_library("java") { +@@ -24,6 +24,7 @@ android_library("java") { "android/java/src/org/chromium/chrome/browser/flags/StringCachedFieldTrialParameter.java", "android/java/src/org/chromium/chrome/browser/flags/ValuesOverridden.java", "android/java/src/org/chromium/chrome/browser/flags/ValuesReturned.java", @@ -581,7 +581,7 @@ diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn ] deps = [ "//base:base_java", -@@ -44,6 +45,7 @@ android_library("java") { +@@ -45,6 +46,7 @@ android_library("java") { generate_jni("jni_headers") { sources = [ "android/java/src/org/chromium/chrome/browser/flags/CromiteNativeUtils.java" ] sources += [ @@ -589,7 +589,7 @@ diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn "android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureMap.java", "android/java/src/org/chromium/chrome/browser/flags/ChromeSessionState.java", ] -@@ -58,6 +60,7 @@ static_library("flags_android") { +@@ -59,6 +61,7 @@ static_library("flags_android") { "android/chrome_session_state.cc", "android/chrome_session_state.h", ] @@ -651,7 +651,7 @@ new file mode 100755 diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc -@@ -588,6 +588,9 @@ SystemNetworkContextManager::~SystemNetworkContextManager() { +@@ -604,6 +604,9 @@ SystemNetworkContextManager::~SystemNetworkContextManager() { void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) { StubResolverConfigReader::RegisterPrefs(registry); @@ -704,7 +704,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -2610,6 +2610,9 @@ inline constexpr char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled"; +@@ -2598,6 +2598,9 @@ inline constexpr char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled"; inline constexpr char kAudioCaptureAllowedUrls[] = "hardware.audio_capture_allowed_urls"; @@ -1925,15 +1925,15 @@ diff --git a/components/subresource_filter/core/browser/subresource_filter_featu diff --git a/components/subresource_filter/core/common/indexed_ruleset.cc b/components/subresource_filter/core/common/indexed_ruleset.cc --- a/components/subresource_filter/core/common/indexed_ruleset.cc +++ b/components/subresource_filter/core/common/indexed_ruleset.cc -@@ -5,6 +5,7 @@ - #include "components/subresource_filter/core/common/indexed_ruleset.h" +@@ -6,6 +6,7 @@ #include "base/check.h" + #include "base/hash/hash.h" +#include "base/logging.h" #include "base/metrics/histogram_macros.h" #include "base/trace_event/trace_event.h" #include "components/subresource_filter/core/common/first_party_origin.h" -@@ -36,8 +37,10 @@ VerifyStatus GetVerifyStatus(const uint8_t* buffer, +@@ -37,8 +38,10 @@ VerifyStatus GetVerifyStatus(const uint8_t* buffer, // least once. The verifier detects a subset of the errors detected by the // checksum, and is unneeded once expected_checksum is consistently nonzero. flatbuffers::Verifier verifier(buffer, size); @@ -1948,7 +1948,7 @@ diff --git a/components/subresource_filter/core/common/indexed_ruleset.cc b/comp diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -152,8 +152,8 @@ BASE_FEATURE(kAutofillSendUnidentifiedKeyAfterFill, +@@ -158,8 +158,8 @@ BASE_FEATURE(kAutofillUseDomNodeIdForRendererId, // Apply lazy-loading to ad frames which have embeds likely impacting Core Web // Vitals. BASE_FEATURE(kAutomaticLazyFrameLoadingToAds, @@ -1959,7 +1959,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea // The timeout value that forces loading iframes that are lazy loaded by // LazyAds. After this timeout, the frame loading is triggered even when the -@@ -173,8 +173,8 @@ const base::FeatureParam kSkipFrameCountForLazyAds( +@@ -179,8 +179,8 @@ const base::FeatureParam kSkipFrameCountForLazyAds( // Apply lazy-loading to frames which have embeds likely impacting Core Web // Vitals. BASE_FEATURE(kAutomaticLazyFrameLoadingToEmbeds, @@ -1970,7 +1970,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea // The timeout value that forces loading iframes that are lazy loaded by // LazyEmbeds. After this timeout, the frame loading is triggered even when the -@@ -196,8 +196,8 @@ const base::FeatureParam kSkipFrameCountForLazyEmbeds( +@@ -202,8 +202,8 @@ const base::FeatureParam kSkipFrameCountForLazyEmbeds( // to gather Blink.AutomaticLazyLoadFrame.LazyEmbedFrameCount UKM data even when // kAutomaticLazyFrameLoadingToEmbeds is disabled. BASE_FEATURE(kAutomaticLazyFrameLoadingToEmbedUrls, diff --git a/build/patches/Dictionary-suggestions-for-the-Omnibox.patch b/build/patches/Dictionary-suggestions-for-the-Omnibox.patch index aabccaaa..1388407b 100644 --- a/build/patches/Dictionary-suggestions-for-the-Omnibox.patch +++ b/build/patches/Dictionary-suggestions-for-the-Omnibox.patch @@ -27,7 +27,7 @@ diff --git a/chrome/android/java/res/layout/url_bar.xml b/chrome/android/java/re diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java -@@ -277,8 +277,16 @@ class LocationBarMediator +@@ -278,8 +278,16 @@ class LocationBarMediator if (mNativeInitialized) RecordUserAction.record("FocusLocation"); // Don't clear Omnibox if the user just pasted text to NTP Omnibox. if (mShouldClearOmniboxOnFocus) { @@ -65,7 +65,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow private int mPreviousWidth; @ScrollType -@@ -302,6 +304,27 @@ public abstract class UrlBar extends AutocompleteEditText { +@@ -307,6 +309,27 @@ public abstract class UrlBar extends AutocompleteEditText { mPendingScroll = false; } fixupTextDirection(); diff --git a/build/patches/Disable-Accessibility-service-by-default.patch b/build/patches/Disable-Accessibility-service-by-default.patch index 95eb7f06..b807e12b 100644 --- a/build/patches/Disable-Accessibility-service-by-default.patch +++ b/build/patches/Disable-Accessibility-service-by-default.patch @@ -14,7 +14,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1791,6 +1791,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1826,6 +1826,12 @@ Your Google account may have other forms of browsing history like searches and a Check now @@ -45,7 +45,7 @@ diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibil diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -@@ -21,6 +21,9 @@ import org.chromium.components.user_prefs.UserPrefs; +@@ -20,6 +20,9 @@ import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.content_public.browser.ContentFeatureList; import org.chromium.content_public.browser.ContentFeatureMap; diff --git a/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch b/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch index e9234db0..8629488c 100644 --- a/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch +++ b/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -1087,8 +1087,8 @@ BASE_FEATURE(kMediaDrmPersistentLicense, +@@ -1131,8 +1131,8 @@ BASE_FEATURE(kMediaDrmPersistentLicense, // MediaDrmBridge. If disabled, MediaDrmBridge will get unprovisioned origin IDs // which will trigger provisioning process after MediaDrmBridge is created. BASE_FEATURE(kMediaDrmPreprovisioning, diff --git a/build/patches/Disable-FLoC-and-privacy-sandbox.patch b/build/patches/Disable-FLoC-and-privacy-sandbox.patch index c76d7868..94669cd8 100644 --- a/build/patches/Disable-FLoC-and-privacy-sandbox.patch +++ b/build/patches/Disable-FLoC-and-privacy-sandbox.patch @@ -24,7 +24,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -3416,6 +3416,9 @@ bool ChromeContentBrowserClient::IsAttributionReportingOperationAllowed( +@@ -3430,6 +3430,9 @@ bool ChromeContentBrowserClient::IsAttributionReportingOperationAllowed( const url::Origin* source_origin, const url::Origin* destination_origin, const url::Origin* reporting_origin) { @@ -48,7 +48,7 @@ diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc --- a/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc +++ b/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc -@@ -115,6 +115,7 @@ bool PrivacySandboxSettingsDelegate::HasAppropriateTopicsConsent() const { +@@ -150,6 +150,7 @@ bool PrivacySandboxSettingsDelegate::HasAppropriateTopicsConsent() const { bool PrivacySandboxSettingsDelegate::PrivacySandboxRestrictedNoticeRequired() const { @@ -70,7 +70,7 @@ diff --git a/chrome/browser/ui/privacy_sandbox/privacy_sandbox_prompt.cc b/chrom diff --git a/components/history/core/browser/history_backend.cc b/components/history/core/browser/history_backend.cc --- a/components/history/core/browser/history_backend.cc +++ b/components/history/core/browser/history_backend.cc -@@ -679,18 +679,7 @@ void HistoryBackend::SetBrowsingTopicsAllowed(ContextID context_id, +@@ -655,18 +655,7 @@ void HistoryBackend::SetBrowsingTopicsAllowed(ContextID context_id, if (!visit_id) return; @@ -93,14 +93,14 @@ diff --git a/components/history/core/browser/history_backend.cc b/components/his diff --git a/components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations.cc b/components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations.cc --- a/components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations.cc +++ b/components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations.cc -@@ -286,6 +286,7 @@ void PrivacySandboxAttestations::LoadAttestationsInternal( +@@ -339,6 +339,7 @@ void PrivacySandboxAttestations::LoadAttestationsInternal( void PrivacySandboxAttestations::SetParsedAttestations( base::Version version, PrivacySandboxAttestationsMap attestations_map) { + if ((true)) return; file_version_ = std::move(version); attestations_map_ = std::move(attestations_map); - attestations_parse_progress_ = Progress::kFinished; + diff --git a/components/privacy_sandbox/privacy_sandbox_features.cc b/components/privacy_sandbox/privacy_sandbox_features.cc --- a/components/privacy_sandbox/privacy_sandbox_features.cc +++ b/components/privacy_sandbox/privacy_sandbox_features.cc @@ -109,7 +109,7 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_features.cc b/components BASE_FEATURE(kPrivacySandboxSettings4, - "PrivacySandboxSettings4", -- base::FEATURE_DISABLED_BY_DEFAULT); +- base::FEATURE_ENABLED_BY_DEFAULT); + "PrivacySandboxSettings4", // must be disabled + base::FEATURE_DISABLED_BY_DEFAULT); // in bromite @@ -161,7 +161,7 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_prefs.cc b/components/pr diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/components/privacy_sandbox/privacy_sandbox_settings_impl.cc --- a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc +++ b/components/privacy_sandbox/privacy_sandbox_settings_impl.cc -@@ -102,7 +102,7 @@ base::Value::Dict CreateBlockedTopicEntry(const CanonicalTopic& topic) { +@@ -120,7 +120,7 @@ std::set GetTopicsSetFromString( // static bool PrivacySandboxSettingsImpl::IsAllowed(Status status) { @@ -170,8 +170,8 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/compo } // static -@@ -203,7 +203,8 @@ PrivacySandboxSettingsImpl::GetFinchDisabledTopics() { - return finch_disabled_topics_; +@@ -229,7 +229,8 @@ PrivacySandboxSettingsImpl::GetFinchPrioritizedTopics() { + return finch_prioritized_topics_; } -bool PrivacySandboxSettingsImpl::IsTopicsAllowed() const { @@ -180,7 +180,7 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/compo // M1 specific if (base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings4)) { Status status = GetM1TopicAllowedStatus(); -@@ -260,7 +261,8 @@ bool PrivacySandboxSettingsImpl::IsTopicsAllowedForContext( +@@ -286,7 +287,8 @@ bool PrivacySandboxSettingsImpl::IsTopicsAllowedForContext( IsPrivacySandboxEnabledForContext(top_frame_origin, url); } @@ -190,7 +190,7 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/compo const auto& blocked_topics = pref_service_->GetList(prefs::kPrivacySandboxBlockedTopics); -@@ -446,6 +448,7 @@ bool PrivacySandboxSettingsImpl::MaySendAttributionReport( +@@ -488,6 +490,7 @@ bool PrivacySandboxSettingsImpl::MaySendAttributionReport( void PrivacySandboxSettingsImpl::SetFledgeJoiningAllowed( const std::string& top_frame_etld_plus1, bool allowed) { @@ -198,7 +198,7 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/compo ScopedDictPrefUpdate scoped_pref_update( pref_service_, prefs::kPrivacySandboxFledgeJoinBlocked); -@@ -516,7 +519,8 @@ void PrivacySandboxSettingsImpl::ClearFledgeJoiningAllowedSettings( +@@ -558,7 +561,8 @@ void PrivacySandboxSettingsImpl::ClearFledgeJoiningAllowedSettings( } bool PrivacySandboxSettingsImpl::IsFledgeJoiningAllowed( @@ -208,8 +208,8 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/compo ScopedDictPrefUpdate scoped_pref_update( pref_service_, prefs::kPrivacySandboxFledgeJoinBlocked); auto& pref_data = scoped_pref_update.Get(); -@@ -671,7 +675,8 @@ bool PrivacySandboxSettingsImpl::IsPrivateAggregationAllowed( - reporting_origin.GetURL()); +@@ -727,7 +731,8 @@ bool PrivacySandboxSettingsImpl::IsPrivateAggregationDebugModeAllowed( + net::CookieSettingOverrides()); } -bool PrivacySandboxSettingsImpl::IsPrivacySandboxEnabled() const { @@ -218,7 +218,7 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/compo PrivacySandboxSettingsImpl::Status status = GetPrivacySandboxAllowedStatus(); if (!IsAllowed(status)) { return false; -@@ -709,7 +714,8 @@ void PrivacySandboxSettingsImpl::SetTopicsBlockedForTesting() { +@@ -765,7 +770,8 @@ void PrivacySandboxSettingsImpl::SetTopicsBlockedForTesting() { pref_service_->SetBoolean(prefs::kPrivacySandboxApisEnabledV2, false); } @@ -228,7 +228,7 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/compo pref_service_->SetBoolean(prefs::kPrivacySandboxApisEnabledV2, enabled); } -@@ -771,7 +777,10 @@ bool PrivacySandboxSettingsImpl::IsPrivacySandboxEnabledForContext( +@@ -826,7 +832,10 @@ bool PrivacySandboxSettingsImpl::IsPrivacySandboxEnabledForContext( net::CookieSettingOverrides()); } @@ -240,7 +240,7 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/compo pref_service_->SetTime(prefs::kPrivacySandboxTopicsDataAccessibleSince, base::Time::Now()); -@@ -784,6 +793,7 @@ PrivacySandboxSettingsImpl::Status +@@ -839,6 +848,7 @@ PrivacySandboxSettingsImpl::Status PrivacySandboxSettingsImpl::GetSiteAccessAllowedStatus( const url::Origin& top_frame_origin, const GURL& url) const { diff --git a/build/patches/Disable-NTP-remote-suggestions-by-default.patch b/build/patches/Disable-NTP-remote-suggestions-by-default.patch index b7d4139d..b5bfbdb1 100644 --- a/build/patches/Disable-NTP-remote-suggestions-by-default.patch +++ b/build/patches/Disable-NTP-remote-suggestions-by-default.patch @@ -10,16 +10,16 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/components/feed/core/shared_prefs/pref_names.cc b/components/feed/core/shared_prefs/pref_names.cc --- a/components/feed/core/shared_prefs/pref_names.cc +++ b/components/feed/core/shared_prefs/pref_names.cc -@@ -19,8 +19,8 @@ const char kEnableSnippets[] = "ntp_snippets.enable"; - const char kArticlesListVisible[] = "ntp_snippets.list_visible"; +@@ -24,8 +24,8 @@ const char kArticlesListVisible[] = "ntp_snippets.list_visible"; + const char kEnableSnippetsByDse[] = "ntp_snippets_by_dse.enable"; void RegisterFeedSharedProfilePrefs(PrefRegistrySimple* registry) { - registry->RegisterBooleanPref(kEnableSnippets, true); - registry->RegisterBooleanPref(kArticlesListVisible, true); + registry->RegisterBooleanPref(kEnableSnippets, false); + registry->RegisterBooleanPref(kArticlesListVisible, false); + registry->RegisterBooleanPref(kEnableSnippetsByDse, true); } - } // namespace prefs -- 2.25.1 diff --git a/build/patches/Disable-PrivacyGuide.patch b/build/patches/Disable-PrivacyGuide.patch index 30debbad..d2a12e4f 100644 --- a/build/patches/Disable-PrivacyGuide.patch +++ b/build/patches/Disable-PrivacyGuide.patch @@ -4,9 +4,9 @@ Subject: Disable PrivacyGuide License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - chrome/browser/ui/webui/settings/settings_ui.cc | 2 +- - chrome/common/chrome_features.cc | 8 ++++---- - 2 files changed, 5 insertions(+), 5 deletions(-) + chrome/browser/ui/webui/settings/settings_ui.cc | 2 +- + chrome/common/chrome_features.cc | 16 ++++++++-------- + 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui/webui/settings/settings_ui.cc --- a/chrome/browser/ui/webui/settings/settings_ui.cc @@ -23,7 +23,31 @@ diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc -@@ -475,8 +475,8 @@ BASE_FEATURE(kPrivacyGuideAndroid3, +@@ -475,26 +475,26 @@ BASE_FEATURE(kGeoLanguage, "GeoLanguage", base::FEATURE_DISABLED_BY_DEFAULT); + // Enables or disables the Privacy Guide v3 update of the Privacy Guide feature + // in Chrome Settings. + BASE_FEATURE(kPrivacyGuide3, +- "PrivacyGuide3", +- base::FEATURE_DISABLED_BY_DEFAULT); ++ "PrivacyGuide3", // always disabled ++ base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite + + // Enables or disables the Privacy Guide preload card update of the Privacy + // Guide feature in Chrome Settings. Also, this requires the PrivacyGuide3 + // feature to be enabled as well. + BASE_FEATURE(kPrivacyGuidePreload, +- "PrivacyGuidePreload", +- base::FEATURE_DISABLED_BY_DEFAULT); ++ "PrivacyGuidePreload", // always disabled ++ base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite + + #if BUILDFLAG(IS_ANDROID) + BASE_FEATURE(kPrivacyGuideAndroid3, +- "PrivacyGuideAndroid3", +- base::FEATURE_DISABLED_BY_DEFAULT); ++ "PrivacyGuideAndroid3", // always disabled ++ base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite + #endif #if BUILDFLAG(IS_ANDROID) BASE_FEATURE(kPrivacyGuidePreloadAndroid, @@ -34,16 +58,5 @@ diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc #endif #if !BUILDFLAG(IS_ANDROID) -@@ -1042,8 +1042,8 @@ BASE_FEATURE(kPrintPreviewSetupAssistance, - #endif - - BASE_FEATURE(kPrivacyGuideAndroid, -- "PrivacyGuideAndroid", -- base::FEATURE_DISABLED_BY_DEFAULT); -+ "PrivacyGuideAndroid", // always disabled -+ base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite - - #if BUILDFLAG(IS_ANDROID) - BASE_FEATURE(kPrivacyGuideAndroidPostMVP, -- 2.25.1 diff --git a/build/patches/Disable-StartSurface-feature.patch b/build/patches/Disable-StartSurface-feature.patch index 6ea95149..98f6037e 100644 --- a/build/patches/Disable-StartSurface-feature.patch +++ b/build/patches/Disable-StartSurface-feature.patch @@ -13,7 +13,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -1129,8 +1129,8 @@ BASE_FEATURE(kSearchEnginesPromoV3, +@@ -1145,8 +1145,8 @@ BASE_FEATURE(kSearchEnginesPromoV3, BASE_FEATURE(kSpareTab, "SpareTab", base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kStartSurfaceAndroid, @@ -27,7 +27,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -607,7 +607,7 @@ public abstract class ChromeFeatureList { +@@ -613,7 +613,7 @@ public abstract class ChromeFeatureList { new CachedFlag(SHOULD_IGNORE_INTENT_SKIP_INTERNAL_CHECK, true); public static final CachedFlag sSpareTab = new CachedFlag(SPARE_TAB, false); public static final CachedFlag sStartSurfaceAndroid = new CachedFlag( diff --git a/build/patches/Disable-TLS-resumption.patch b/build/patches/Disable-TLS-resumption.patch index c255e0f0..963360e5 100644 --- a/build/patches/Disable-TLS-resumption.patch +++ b/build/patches/Disable-TLS-resumption.patch @@ -39,7 +39,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5373,6 +5373,12 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5635,6 +5635,12 @@ const FeatureEntry kFeatureEntries[] = { {"enable-tls13-kyber", flag_descriptions::kEnableTLS13KyberName, flag_descriptions::kEnableTLS13KyberDescription, kOsAll, FEATURE_VALUE_TYPE(net::features::kPostQuantumKyber)}, @@ -55,7 +55,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1107,6 +1107,14 @@ const char kAccessibilityAcceleratorNotificationsTimeoutDescription[] = +@@ -1111,6 +1111,14 @@ const char kAccessibilityAcceleratorNotificationsTimeoutDescription[] = "shortcut (docked magnifier, screen magnifier and high contrast) to time " "out instead of remaining pinned."; @@ -73,7 +73,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -635,6 +635,12 @@ extern const char kDevicePostureDescription[]; +@@ -641,6 +641,12 @@ extern const char kDevicePostureDescription[]; extern const char kEnableTLS13EarlyDataName[]; extern const char kEnableTLS13EarlyDataDescription[]; @@ -142,7 +142,7 @@ diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc #include "url/gurl.h" #include "url/scheme_host_port.h" #include "url/url_constants.h" -@@ -196,6 +197,38 @@ std::set HostsFromOrigins(std::set origins) { +@@ -195,6 +196,38 @@ std::set HostsFromOrigins(std::set origins) { } // namespace @@ -181,7 +181,7 @@ diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc // Refcounted class that owns quic::QuicCryptoClientConfig and tracks how many // consumers are using it currently. When the last reference is freed, the // QuicCryptoClientConfigHandle informs the owning QuicStreamFactory, moves it -@@ -2354,7 +2387,7 @@ QuicStreamFactory::CreateCryptoConfigHandle( +@@ -2353,7 +2386,7 @@ QuicStreamFactory::CreateCryptoConfigHandle( sct_auditing_delegate_, HostsFromOrigins(params_.origins_to_force_quic_on), actual_network_anonymization_key), diff --git a/build/patches/Disable-all-predictors-code.patch b/build/patches/Disable-all-predictors-code.patch index 2a73c355..ebd25a16 100644 --- a/build/patches/Disable-all-predictors-code.patch +++ b/build/patches/Disable-all-predictors-code.patch @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/predictors/loading_predictor.cc | 4 +- .../predictors/loading_predictor_config.cc | 4 +- .../browser/predictors/predictors_features.cc | 14 +--- - chrome/common/chrome_features.cc | 10 +-- + chrome/common/chrome_features.cc | 6 +- .../browser/autofill_optimization_guide.cc | 5 +- .../optimization_guide/core/hints_fetcher.cc | 1 + .../optimization_guide/core/hints_manager.cc | 5 ++ @@ -23,15 +23,15 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../core/prediction_model_download_manager.cc | 6 +- .../core/prediction_model_fetcher_impl.cc | 1 + components/optimization_guide/features.gni | 3 +- - components/permissions/features.cc | 8 +-- + components/permissions/features.cc | 16 ++--- third_party/blink/common/features.cc | 12 ++-- .../platform/runtime_enabled_features.json5 | 2 +- - 21 files changed, 79 insertions(+), 109 deletions(-) + 21 files changed, 81 insertions(+), 111 deletions(-) diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -890,10 +890,10 @@ static_library("browser") { +@@ -891,10 +891,10 @@ static_library("browser") { "navigation_predictor/navigation_predictor_metrics_document_data.h", "navigation_predictor/navigation_predictor_preconnect_client.cc", "navigation_predictor/navigation_predictor_preconnect_client.h", @@ -49,7 +49,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/browser_features.cc b/chrome/browser/browser_features.cc --- a/chrome/browser/browser_features.cc +++ b/chrome/browser/browser_features.cc -@@ -239,22 +239,22 @@ BASE_FEATURE(kIncomingCallNotifications, +@@ -255,22 +255,22 @@ BASE_FEATURE(kIncomingCallNotifications, // Enables omnibox trigger prerendering. BASE_FEATURE(kOmniboxTriggerForPrerender2, @@ -139,7 +139,7 @@ diff --git a/chrome/browser/optimization_guide/chrome_hints_manager.cc b/chrome/ diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc --- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc +++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc -@@ -333,7 +333,6 @@ void OptimizationGuideKeyedService::RemoveObserverForOptimizationTargetModel( +@@ -343,7 +343,6 @@ void OptimizationGuideKeyedService::RemoveObserverForOptimizationTargetModel( void OptimizationGuideKeyedService::RegisterOptimizationTypes( const std::vector& optimization_types) { @@ -224,29 +224,7 @@ diff --git a/chrome/browser/predictors/predictors_features.cc b/chrome/browser/p diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc -@@ -1008,8 +1008,8 @@ BASE_FEATURE(kPermissionAuditing, - // Enables using the prediction service for permission prompts. We will keep - // this feature in order to allow us to update the holdback chance via finch. - BASE_FEATURE(kPermissionPredictions, -- "PermissionPredictions", -- base::FEATURE_ENABLED_BY_DEFAULT); -+ "PermissionPredictions", // disabled by default -+ base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite - - // The holdback chance is 30% but it can also be configured/updated - // through finch if needed. -@@ -1020,8 +1020,8 @@ const base::FeatureParam kPermissionPredictionsHoldbackChance( - - // Enables using the prediction service for geolocation permission prompts. - BASE_FEATURE(kPermissionGeolocationPredictions, -- "PermissionGeolocationPredictions", -- base::FEATURE_ENABLED_BY_DEFAULT); -+ "PermissionGeolocationPredictions", // disabled by default -+ base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite - - const base::FeatureParam - kPermissionGeolocationPredictionsHoldbackChance( -@@ -1037,7 +1037,7 @@ BASE_FEATURE(kPluginVm, "PluginVm", base::FEATURE_DISABLED_BY_DEFAULT); +@@ -1044,7 +1044,7 @@ BASE_FEATURE(kPluginVm, "PluginVm", base::FEATURE_DISABLED_BY_DEFAULT); // Allows Chrome to do preconnect when prerender fails. BASE_FEATURE(kPrerenderFallbackToPreconnect, "PrerenderFallbackToPreconnect", @@ -255,6 +233,17 @@ diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc #if BUILDFLAG(IS_CHROMEOS) // Enable improved printer state and error state messaging for Print Preview. +@@ -1105,8 +1105,8 @@ BASE_FEATURE(kSafetyCheckExtensions, + + // Enables notification permission module in Safety Check. + BASE_FEATURE(kSafetyCheckNotificationPermissions, +- "SafetyCheckNotificationPermissions", +- base::FEATURE_ENABLED_BY_DEFAULT); ++ "SafetyCheckNotificationPermissions", // disabled by default ++ base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite + + const base::FeatureParam + kSafetyCheckNotificationPermissionsMinEnagementLimit{ diff --git a/components/autofill/core/browser/autofill_optimization_guide.cc b/components/autofill/core/browser/autofill_optimization_guide.cc --- a/components/autofill/core/browser/autofill_optimization_guide.cc +++ b/components/autofill/core/browser/autofill_optimization_guide.cc @@ -287,7 +276,7 @@ diff --git a/components/autofill/core/browser/autofill_optimization_guide.cc b/c diff --git a/components/optimization_guide/core/hints_fetcher.cc b/components/optimization_guide/core/hints_fetcher.cc --- a/components/optimization_guide/core/hints_fetcher.cc +++ b/components/optimization_guide/core/hints_fetcher.cc -@@ -185,6 +185,7 @@ bool HintsFetcher::FetchOptimizationGuideServiceHints( +@@ -178,6 +178,7 @@ bool HintsFetcher::FetchOptimizationGuideServiceHints( const std::string& access_token, bool skip_cache, HintsFetchedCallback hints_fetched_callback) { @@ -327,7 +316,7 @@ diff --git a/components/optimization_guide/core/hints_manager.cc b/components/op diff --git a/components/optimization_guide/core/optimization_guide_features.cc b/components/optimization_guide/core/optimization_guide_features.cc --- a/components/optimization_guide/core/optimization_guide_features.cc +++ b/components/optimization_guide/core/optimization_guide_features.cc -@@ -33,13 +33,6 @@ namespace features { +@@ -34,13 +34,6 @@ namespace features { namespace { @@ -341,7 +330,7 @@ diff --git a/components/optimization_guide/core/optimization_guide_features.cc b constexpr auto enabled_by_default_mobile_only = #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) true; -@@ -47,13 +40,6 @@ constexpr auto enabled_by_default_mobile_only = +@@ -48,13 +41,6 @@ constexpr auto enabled_by_default_mobile_only = false; #endif @@ -355,7 +344,7 @@ diff --git a/components/optimization_guide/core/optimization_guide_features.cc b // Returns whether |locale| is a supported locale for |feature|. // // This matches |locale| with the "supported_locales" feature param value in -@@ -99,17 +85,17 @@ bool IsSupportedLocaleForFeature( +@@ -149,17 +135,17 @@ std::set GetOauthScopesForFeature(const base::Feature& feature) { // Enables the syncing of the Optimization Hints component, which provides // hints for what optimizations can be applied on a page load. BASE_FEATURE(kOptimizationHints, @@ -379,7 +368,7 @@ diff --git a/components/optimization_guide/core/optimization_guide_features.cc b // Enables performance info in the context menu and fetching from a remote // Optimization Guide Service. -@@ -119,33 +105,29 @@ BASE_FEATURE(kContextMenuPerformanceInfoAndRemoteHintFetching, +@@ -169,33 +155,29 @@ BASE_FEATURE(kContextMenuPerformanceInfoAndRemoteHintFetching, // Enables the prediction of optimization targets. BASE_FEATURE(kOptimizationTargetPrediction, @@ -410,7 +399,7 @@ diff --git a/components/optimization_guide/core/optimization_guide_features.cc b // Enables fetching page metadata from the remote Optimization Guide service. BASE_FEATURE(kRemotePageMetadata, - "RemotePageMetadata", -- base::FEATURE_DISABLED_BY_DEFAULT); +- enabled_by_default_desktop_only); + "RemotePageMetadata", // disabled by default + base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite @@ -423,7 +412,7 @@ diff --git a/components/optimization_guide/core/optimization_guide_features.cc b // Enables the page visibility model to be annotated on every page load. BASE_FEATURE(kPageVisibilityPageContentAnnotations, "PageVisibilityPageContentAnnotations", -@@ -168,8 +150,8 @@ BASE_FEATURE(kPageEntitiesModelResetOnShutdown, +@@ -218,8 +200,8 @@ BASE_FEATURE(kPageEntitiesModelResetOnShutdown, // Enables push notification of hints. BASE_FEATURE(kPushNotifications, @@ -434,7 +423,7 @@ diff --git a/components/optimization_guide/core/optimization_guide_features.cc b // This feature flag does not turn off any behavior, it is only used for // experiment parameters. -@@ -182,21 +164,21 @@ BASE_FEATURE(kOptimizationGuideMetadataValidation, +@@ -232,21 +214,21 @@ BASE_FEATURE(kOptimizationGuideMetadataValidation, "OptimizationGuideMetadataValidation", base::FEATURE_DISABLED_BY_DEFAULT); @@ -462,7 +451,7 @@ diff --git a/components/optimization_guide/core/optimization_guide_features.cc b BASE_FEATURE(kOptimizationGuideUseContinueOnShutdownForPageContentAnnotations, "OptimizationGuideUseContinueOnShutdownForPageContentAnnotations", -@@ -231,8 +213,8 @@ BASE_FEATURE(kPageContentAnnotationsPersistSalientImageMetadata, +@@ -281,8 +263,8 @@ BASE_FEATURE(kPageContentAnnotationsPersistSalientImageMetadata, // Killswitch for fetching on search results from a remote Optimization Guide // Service. BASE_FEATURE(kOptimizationGuideFetchingForSRP, @@ -473,7 +462,7 @@ diff --git a/components/optimization_guide/core/optimization_guide_features.cc b // Enables the model store to save relative paths computed from the base model // store dir. Storing as relative path in the model store is needed for IOS, -@@ -511,7 +493,7 @@ size_t MaxURLKeyedHintCacheSize() { +@@ -566,7 +548,7 @@ size_t MaxURLKeyedHintCacheSize() { bool ShouldPersistHintsToDisk() { return GetFieldTrialParamByFeatureAsBool(kOptimizationHints, @@ -546,7 +535,7 @@ diff --git a/components/optimization_guide/features.gni b/components/optimizatio diff --git a/components/permissions/features.cc b/components/permissions/features.cc --- a/components/permissions/features.cc +++ b/components/permissions/features.cc -@@ -92,12 +92,12 @@ BASE_FEATURE(kFailFastQuietChip, +@@ -93,24 +93,24 @@ BASE_FEATURE(kFailFastQuietChip, // When enabled, use the value of the `service_url` FeatureParam as the url // for the Web Permission Predictions Service. BASE_FEATURE(kPermissionPredictionServiceUseUrlOverride, @@ -562,11 +551,27 @@ diff --git a/components/permissions/features.cc b/components/permissions/feature + base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite BASE_FEATURE(kPermissionOnDeviceGeolocationPredictions, - "PermissionOnDeviceGeolocationPredictions", +- "PermissionOnDeviceGeolocationPredictions", +- base::FEATURE_ENABLED_BY_DEFAULT); ++ "PermissionOnDeviceGeolocationPredictions", // disabled by default ++ base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite + + BASE_FEATURE(kPermissionDedicatedCpssSetting, + "PermissionDedicatedCpssSettings", + base::FEATURE_DISABLED_BY_DEFAULT); + + BASE_FEATURE(kPermissionPredictionsV2, +- "PermissionPredictionsV2", +- base::FEATURE_DISABLED_BY_DEFAULT); ++ "PermissionPredictionsV2", // disabled by default ++ base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite + + #if BUILDFLAG(IS_ANDROID) + diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -1181,12 +1181,8 @@ BASE_FEATURE(kMemoryCacheStrongReferenceSingleUnload, +@@ -1217,12 +1217,8 @@ BASE_FEATURE(kMemoryCacheStrongReferenceSingleUnload, // in the first viewport after the page load and the metrics of the clicked // anchor element will be extracted and recorded. BASE_FEATURE(kNavigationPredictor, @@ -581,7 +586,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea ); BASE_FEATURE(kNewBaseUrlInheritanceBehavior, -@@ -1323,8 +1319,8 @@ BASE_FEATURE(kPrefetchPrivacyChanges, +@@ -1359,8 +1355,8 @@ BASE_FEATURE(kPrefetchPrivacyChanges, base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite BASE_FEATURE(kPreloadingHeuristicsMLModel, @@ -595,7 +600,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -2954,7 +2954,7 @@ +@@ -3014,7 +3014,7 @@ { // https://crbug.com/1126305 name: "Prerender2", diff --git a/build/patches/Disable-all-promo-dialogs.patch b/build/patches/Disable-all-promo-dialogs.patch index 5ef0e977..0a014c90 100644 --- a/build/patches/Disable-all-promo-dialogs.patch +++ b/build/patches/Disable-all-promo-dialogs.patch @@ -15,7 +15,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -@@ -949,6 +949,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -945,6 +945,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { } private boolean maybeShowPromo() { @@ -26,7 +26,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -147,7 +147,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -144,7 +144,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref(prefs::kEnterpriseHardwarePlatformAPIEnabled, false); @@ -38,8 +38,8 @@ diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_u diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc --- a/chrome/browser/ui/ui_features.cc +++ b/chrome/browser/ui/ui_features.cc -@@ -34,7 +34,7 @@ BASE_FEATURE(kBrowserMetricsAPI, - base::FEATURE_DISABLED_BY_DEFAULT); +@@ -30,7 +30,7 @@ BASE_FEATURE(kAllowEyeDropperWGCScreenCapture, + ); // Enables Chrome Labs menu in the toolbar. See https://crbug.com/1145666 -BASE_FEATURE(kChromeLabs, "ChromeLabs", base::FEATURE_ENABLED_BY_DEFAULT); @@ -50,14 +50,14 @@ diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc diff --git a/chrome/browser/ui/views/user_education/browser_feature_promo_controller.cc b/chrome/browser/ui/views/user_education/browser_feature_promo_controller.cc --- a/chrome/browser/ui/views/user_education/browser_feature_promo_controller.cc +++ b/chrome/browser/ui/views/user_education/browser_feature_promo_controller.cc -@@ -67,6 +67,7 @@ ui::ElementContext BrowserFeaturePromoController::GetAnchorContext() const { +@@ -68,6 +68,7 @@ ui::ElementContext BrowserFeaturePromoController::GetAnchorContext() const { - bool BrowserFeaturePromoController::CanShowPromo( + bool BrowserFeaturePromoController::CanShowPromoForElement( ui::TrackedElement* anchor_element) const { + if ((true)) return false; + auto* const profile = browser_view_->GetProfile(); // Temporarily turn off IPH in incognito as a concern was raised that // the IPH backend ignores incognito and writes to the parent profile. - // See https://bugs.chromium.org/p/chromium/issues/detail?id=1128728#c30 diff --git a/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java b/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java --- a/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java +++ b/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java diff --git a/build/patches/Disable-conversion-measurement-api.patch b/build/patches/Disable-conversion-measurement-api.patch index 45525f41..81a5022b 100644 --- a/build/patches/Disable-conversion-measurement-api.patch +++ b/build/patches/Disable-conversion-measurement-api.patch @@ -12,6 +12,7 @@ Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- chrome/android/java/AndroidManifest.xml | 1 - + components/attribution_reporting/features.cc | 4 +- .../origin_trials/features.cc | 8 +- .../render_view_context_menu_base.cc | 3 - .../aggregatable_report_sender.cc | 15 +- @@ -21,20 +22,21 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../attribution_os_level_manager.cc | 1 + .../attribution_report_network_sender.cc | 9 + .../attribution_storage_sql.cc | 8 +- - content/browser/storage_partition_impl.cc | 8 +- + content/browser/storage_partition_impl.cc | 9 - content/public/android/BUILD.gn | 2 - - .../browser/AttributionOsLevelManager.java | 225 ++---------------- + .../browser/AttributionOsLevelManager.java | 218 +----------------- + .../public/browser/content_browser_client.cc | 6 +- .../public/browser/navigation_controller.cc | 1 - content/public/common/content_features.cc | 4 +- content/renderer/render_thread_impl.cc | 5 +- .../attribution/request_headers_internal.cc | 1 + .../network/public/cpp/attribution_utils.cc | 2 + services/network/public/cpp/features.cc | 6 +- - third_party/blink/common/features.cc | 42 ++-- + third_party/blink/common/features.cc | 38 +-- .../platform/runtime_enabled_features.json5 | 7 + ui/base/ui_base_features.cc | 2 +- ui/events/android/motion_event_android.cc | 6 +- - 23 files changed, 97 insertions(+), 269 deletions(-) + 25 files changed, 92 insertions(+), 274 deletions(-) diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml @@ -47,6 +49,20 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro -@@ -361,6 +355,24 @@ by a child template that "extends" this file. +@@ -362,6 +356,24 @@ by a child template that "extends" this file. @@ -187,7 +187,7 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java --- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java -@@ -202,6 +202,9 @@ public class IntentHandler { +@@ -196,6 +196,9 @@ public class IntentHandler { private static final String EXTRA_TAB_LAUNCH_TYPE = "org.chromium.chrome.browser.tab_launch_type"; @@ -197,7 +197,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j /** * A hash code for the URL to verify intent data hasn't been modified. */ -@@ -1414,6 +1417,17 @@ public class IntentHandler { +@@ -1264,6 +1267,17 @@ public class IntentHandler { return IntentUtils.safeGetSerializableExtra(intent, EXTRA_TAB_LAUNCH_TYPE); } @@ -215,7 +215,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j /** * Creates an Intent that will launch a ChromeTabbedActivity on the new tab page. The Intent * will be trusted and therefore able to launch Incognito tabs. -@@ -1538,7 +1552,7 @@ public class IntentHandler { +@@ -1395,7 +1409,7 @@ public class IntentHandler { String headers = getExtraHeadersFromIntent(intent); headers = maybeAddAdditionalContentHeaders(intent, url, headers); @@ -227,7 +227,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.j diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -@@ -426,8 +426,8 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega +@@ -429,8 +429,8 @@ public class LaunchIntentDispatcher { /*incognito*/true); newIntent.setData(mIntent.getData()); newIntent.setPackage(applicationContext.getPackageName()); @@ -240,15 +240,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java -@@ -84,6 +84,7 @@ import org.chromium.chrome.browser.tab.state.PersistedTabData; - import org.chromium.chrome.browser.tab.state.ShoppingPersistedTabData; +@@ -86,6 +86,7 @@ import org.chromium.chrome.browser.tab.state.ShoppingPersistedTabData; import org.chromium.chrome.browser.ui.cars.DrivingRestrictionsManager; + import org.chromium.chrome.browser.ui.hats.SurveyClientFactory; import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityPreferencesManager; +import org.chromium.chrome.browser.sharing.shared_intent.SharedIntentShareActivity; import org.chromium.chrome.browser.usb.UsbNotificationManager; import org.chromium.chrome.browser.util.AfterStartupTaskUtils; import org.chromium.chrome.browser.webapps.WebappRegistry; -@@ -429,6 +430,8 @@ public class ProcessInitializationHandler { +@@ -439,6 +440,8 @@ public class ProcessInitializationHandler { .resolveClearDataDialogResultRecorder()::makeDeferredRecordings); deferredStartupHandler.addDeferredTask(WebApkUninstallUmaTracker::recordDeferredUma); @@ -384,7 +384,7 @@ new file mode 100644 diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -9956,6 +9956,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -10229,6 +10229,10 @@ const FeatureEntry kFeatureEntries[] = { features::kBrokerFileOperationsOnDiskCacheInNetworkService)}, #if BUILDFLAG(IS_ANDROID) @@ -398,7 +398,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -3194,6 +3194,11 @@ const char kIsolateOriginsDescription[] = +@@ -3215,6 +3215,11 @@ const char kIsolateOriginsDescription[] = "Requires dedicated processes for an additional set of origins, " "specified as a comma-separated list."; @@ -413,7 +413,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1844,6 +1844,9 @@ extern const char kIsolateOriginsDescription[]; +@@ -1863,6 +1863,9 @@ extern const char kIsolateOriginsDescription[]; extern const char kIsolationByDefaultName[]; extern const char kIsolationByDefaultDescription[]; @@ -426,7 +426,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -287,6 +287,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -294,6 +294,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kReengagementNotification, &kSearchReadyOmniboxFeature, &kRelatedSearches, @@ -434,7 +434,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse &kReportParentalControlSitesChild, &kRequestDesktopSiteDefaults, &kRequestDesktopSiteDefaultsControl, -@@ -1015,6 +1016,10 @@ BASE_FEATURE(kScrollToTLDOptimization, +@@ -1035,6 +1036,10 @@ BASE_FEATURE(kScrollToTLDOptimization, "ScrollToTLDOptimization", base::FEATURE_DISABLED_BY_DEFAULT); @@ -448,7 +448,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -170,6 +170,7 @@ BASE_DECLARE_FEATURE(kRequestDesktopSiteDefaultsLogging); +@@ -176,6 +176,7 @@ BASE_DECLARE_FEATURE(kRequestDesktopSiteDefaultsLogging); BASE_DECLARE_FEATURE(kRestoreTabsOnFRE); BASE_DECLARE_FEATURE(kSearchEnginesPromoV3); BASE_DECLARE_FEATURE(kSearchReadyOmniboxFeature); @@ -459,7 +459,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -402,6 +402,7 @@ public abstract class ChromeFeatureList { +@@ -395,6 +395,7 @@ public abstract class ChromeFeatureList { public static final String REACHED_CODE_PROFILER = "ReachedCodeProfiler"; public static final String READALOUD = "ReadAloud"; public static final String READER_MODE_IN_CCT = "ReaderModeInCCT"; @@ -470,7 +470,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -5256,6 +5256,19 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

diff --git a/build/patches/Enable-third-party-storage-partitioning.patch b/build/patches/Enable-third-party-storage-partitioning.patch index d7a280e6..bcf0f805 100644 --- a/build/patches/Enable-third-party-storage-partitioning.patch +++ b/build/patches/Enable-third-party-storage-partitioning.patch @@ -10,16 +10,16 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/net/base/features.cc b/net/base/features.cc --- a/net/base/features.cc +++ b/net/base/features.cc -@@ -290,8 +290,8 @@ BASE_FEATURE(kCookieDomainRejectNonASCII, +@@ -278,8 +278,8 @@ BASE_FEATURE(kCookieDomainRejectNonASCII, // Enables partitioning of third party storage (IndexedDB, CacheStorage, etc.) // by the top level site to reduce fingerprinting. BASE_FEATURE(kThirdPartyStoragePartitioning, - "ThirdPartyStoragePartitioning", -- base::FEATURE_DISABLED_BY_DEFAULT); +- base::FEATURE_ENABLED_BY_DEFAULT); + "ThirdPartyStoragePartitioning", // must be enabled + base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite + // Whether to use the new code paths needed to support partitioning Blob URLs. // This exists as a kill-switch in case an issue is identified with the Blob - // URL implementation that causes breakage. -- 2.25.1 diff --git a/build/patches/Experimental-user-scripts-support.patch b/build/patches/Experimental-user-scripts-support.patch index d7e7208f..eb50403b 100644 --- a/build/patches/Experimental-user-scripts-support.patch +++ b/build/patches/Experimental-user-scripts-support.patch @@ -27,7 +27,7 @@ Requires patch: Adds-support-for-writing-URIs.patch Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - chrome/android/BUILD.gn | 4 + + chrome/android/BUILD.gn | 7 +- .../android/java/res/xml/main_preferences.xml | 5 + .../browser/download/DownloadUtils.java | 6 + .../init/ProcessInitializationHandler.java | 3 + @@ -135,7 +135,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../renderer/web_ui_injection_host.h | 27 + .../strings/userscripts_strings.grdp | 54 ++ tools/gritsettings/resource_ids.spec | 6 + - 108 files changed, 9488 insertions(+), 1 deletion(-) + 108 files changed, 9490 insertions(+), 2 deletions(-) create mode 100644 components/user_scripts/README.md create mode 100755 components/user_scripts/android/BUILD.gn create mode 100644 components/user_scripts/android/java/res/layout/accept_script_item.xml @@ -225,17 +225,20 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -242,6 +242,9 @@ if (current_toolchain == default_toolchain) { - "//third_party/androidx:androidx_gridlayout_gridlayout_java", - "//third_party/androidx:androidx_preference_preference_java", - ] +@@ -179,7 +179,11 @@ if (current_toolchain == default_toolchain) { + sources = chrome_java_resources + sources += [ "//chrome/android/java/res_app/layout/main.xml" ] + +- deps = [ + # this need to be into android_resources("chrome_app_java_resources") section because + # android:java_resources are packed *_percent.pak and placed in the executable folder -+ deps += [ "//components/user_scripts/android:java_resources" ] - } - - android_library("app_hooks_java") { -@@ -570,6 +573,7 @@ if (current_toolchain == default_toolchain) { ++ deps = [ "//components/user_scripts/android:java_resources" ] ++ ++ deps += [ + ":chrome_base_module_resources", + ":ui_locale_string_resources", + "//chrome/android/webapk/libs/common:splash_resources", +@@ -582,6 +586,7 @@ if (current_toolchain == default_toolchain) { "//components/ukm/android:java", "//components/url_formatter/android:url_formatter_java", "//components/user_prefs/android:java", @@ -261,7 +264,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java -@@ -73,6 +73,7 @@ import org.chromium.ui.UiUtils; +@@ -75,6 +75,7 @@ import org.chromium.ui.UiUtils; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.widget.Toast; import org.chromium.url.GURL; @@ -269,7 +272,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo import java.io.File; -@@ -421,6 +422,11 @@ public class DownloadUtils { +@@ -456,6 +457,11 @@ public class DownloadUtils { public static boolean openFile(String filePath, String mimeType, String downloadGuid, OTRProfileID otrProfileID, String originalUrl, String referrer, @DownloadOpenSource int source, Context context) { @@ -284,7 +287,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java -@@ -121,6 +121,8 @@ import java.util.ArrayList; +@@ -124,6 +124,8 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -293,7 +296,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessIni /** * Handles the initialization dependences of the browser process. This is meant to handle the * initialization that is not tied to any particular Activity, and the logic that should only be -@@ -321,6 +323,7 @@ public class ProcessInitializationHandler { +@@ -331,6 +333,7 @@ public class ProcessInitializationHandler { DefaultBrowserInfo.initBrowserFetcher(); @@ -321,7 +324,7 @@ diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3606,6 +3606,13 @@ static_library("browser") { +@@ -3684,6 +3684,13 @@ static_library("browser") { ] deps += [ "//chrome/android/modules/dev_ui/provider:native" ] } @@ -338,7 +341,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -164,6 +164,7 @@ +@@ -165,6 +165,7 @@ #include "components/ui_devtools/switches.h" #include "components/variations/service/google_groups_updater_service.h" #include "components/variations/variations_switches.h" @@ -346,8 +349,8 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc #include "components/version_info/version_info.h" #include "components/viz/common/features.h" #include "components/viz/common/switches.h" -@@ -8339,6 +8340,12 @@ const FeatureEntry kFeatureEntries[] = { - FEATURE_VALUE_TYPE(ash::features::kClipboardHistoryUrlTitles)}, +@@ -8622,6 +8623,12 @@ const FeatureEntry kFeatureEntries[] = { + FEATURE_VALUE_TYPE(ash::features::kClipboardHistoryWebContentsPaste)}, #endif // BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_ANDROID) @@ -362,7 +365,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -7489,6 +7489,11 @@ const char kUseOutOfProcessVideoDecodingDescription[] = +@@ -7593,6 +7593,11 @@ const char kUseOutOfProcessVideoDecodingDescription[] = "enabled in ash-chrome)."; #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) @@ -377,7 +380,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -4292,6 +4292,9 @@ extern const char kQuickCommandsDescription[]; +@@ -4355,6 +4355,9 @@ extern const char kQuickCommandsDescription[]; #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // defined (OS_FUCHSIA) @@ -390,7 +393,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -260,6 +260,7 @@ +@@ -270,6 +270,7 @@ #include "components/permissions/contexts/geolocation_permission_context_android.h" #include "components/query_tiles/tile_service_prefs.h" #include "components/webapps/browser/android/install_prompt_prefs.h" @@ -398,7 +401,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse #else // BUILDFLAG(IS_ANDROID) #include "chrome/browser/cart/cart_service.h" #include "chrome/browser/companion/core/promo_handler.h" -@@ -1627,6 +1628,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -1716,6 +1717,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, translate::TranslatePrefs::RegisterProfilePrefs(registry); omnibox::RegisterProfilePrefs(registry); ZeroSuggestProvider::RegisterProfilePrefs(registry); @@ -424,7 +427,7 @@ diff --git a/chrome/browser/profiles/BUILD.gn b/chrome/browser/profiles/BUILD.gn diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc -@@ -483,6 +483,10 @@ +@@ -494,6 +494,10 @@ #include "chrome/browser/offline_pages/request_coordinator_factory.h" #endif @@ -435,7 +438,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc namespace chrome { void AddProfilesExtraParts(ChromeBrowserMainParts* main_parts) { -@@ -1166,6 +1170,9 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -1206,6 +1210,9 @@ void ChromeBrowserMainExtraPartsProfiles:: #endif WebDataServiceFactory::GetInstance(); webrtc_event_logging::WebRtcEventLogManagerKeyedServiceFactory::GetInstance(); @@ -540,14 +543,14 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc @@ -107,6 +107,7 @@ - #include "components/signin/public/base/signin_switches.h" + #include "components/signin/public/base/signin_buildflags.h" #include "components/site_engagement/content/site_engagement_service.h" #include "components/supervised_user/core/common/buildflags.h" +#include "components/user_scripts/browser/ui/user_scripts_ui.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/common/content_client.h" -@@ -538,6 +539,10 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, +@@ -535,6 +536,10 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; if (url.host_piece() == chrome::kChromeUIVersionHost) return &NewWebUI; @@ -562,14 +565,14 @@ diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni @@ -121,6 +121,7 @@ template("chrome_extra_paks") { - "$root_gen_dir/skia/skia_resources.pak", + "$root_gen_dir/net/net_resources.pak", "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak", "$root_gen_dir/third_party/blink/public/resources/inspector_overlay_resources.pak", + "$root_gen_dir/chrome/userscripts_browser_resources.pak", "$root_gen_dir/ui/resources/webui_resources.pak", ] deps = [ -@@ -139,6 +140,7 @@ template("chrome_extra_paks") { +@@ -138,6 +139,7 @@ template("chrome_extra_paks") { "//third_party/blink/public:devtools_inspector_resources", "//third_party/blink/public:resources", "//ui/resources", @@ -591,7 +594,7 @@ diff --git a/chrome/common/renderer_configuration.mojom b/chrome/common/renderer diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn --- a/chrome/renderer/BUILD.gn +++ b/chrome/renderer/BUILD.gn -@@ -233,6 +233,12 @@ static_library("renderer") { +@@ -234,6 +234,12 @@ static_library("renderer") { "//v8", ] @@ -729,7 +732,7 @@ diff --git a/chrome/renderer/chrome_render_thread_observer.cc b/chrome/renderer/ diff --git a/components/components_strings.grd b/components/components_strings.grd --- a/components/components_strings.grd +++ b/components/components_strings.grd -@@ -335,6 +335,7 @@ +@@ -336,6 +336,7 @@ @@ -10489,7 +10492,7 @@ new file mode 100755 diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec -@@ -927,6 +927,12 @@ +@@ -954,6 +954,12 @@ "components/autofill/core/browser/autofill_address_rewriter_resources.grd":{ "includes": [6220] }, diff --git a/build/patches/Follow-only-system-dark-mode.patch b/build/patches/Follow-only-system-dark-mode.patch index a48f014f..bf4bb1ec 100644 --- a/build/patches/Follow-only-system-dark-mode.patch +++ b/build/patches/Follow-only-system-dark-mode.patch @@ -12,7 +12,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java --- a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java +++ b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java -@@ -126,7 +126,7 @@ class GlobalNightModeStateController implements NightModeStateProvider, +@@ -136,7 +136,7 @@ class GlobalNightModeStateController implements NightModeStateProvider, } private void updateNightMode() { diff --git a/build/patches/Guard-for-user-agent-reduction.patch b/build/patches/Guard-for-user-agent-reduction.patch index 7e67fea4..7e975389 100644 --- a/build/patches/Guard-for-user-agent-reduction.patch +++ b/build/patches/Guard-for-user-agent-reduction.patch @@ -55,7 +55,7 @@ diff --git a/content/common/user_agent.cc b/content/common/user_agent.cc diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -1449,8 +1449,8 @@ BASE_FEATURE(kReducedReferrerGranularity, +@@ -1501,8 +1501,8 @@ BASE_FEATURE(kReducedReferrerGranularity, const base::FeatureParam kUserAgentFrozenBuildVersion{ &kReduceUserAgentMinorVersion, "build_version", "0"}; @@ -69,7 +69,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -3039,23 +3039,23 @@ +@@ -3099,23 +3099,23 @@ // If enabled, the deviceModel will be reduced to "K" and the // androidVersion will be reduced to a static "10" string in android // User-Agent string. diff --git a/build/patches/History-number-of-days-privacy-setting.patch b/build/patches/History-number-of-days-privacy-setting.patch index 22f05628..3fa69c1a 100644 --- a/build/patches/History-number-of-days-privacy-setting.patch +++ b/build/patches/History-number-of-days-privacy-setting.patch @@ -32,7 +32,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -37,6 +37,12 @@ found in the LICENSE file. +@@ -43,6 +43,12 @@ found in the LICENSE file. android:title="@string/settings_incognito_tab_lock_title" android:summary="@string/settings_incognito_tab_lock_summary_android_setting_off" android:persistent="false"/> @@ -48,7 +48,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -49,6 +49,7 @@ import org.chromium.chrome.browser.sync.settings.GoogleServicesSettings; +@@ -45,6 +45,7 @@ import org.chromium.chrome.browser.sync.settings.GoogleServicesSettings; import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; import org.chromium.chrome.browser.usage_stats.UsageStatsConsentDialog; import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; @@ -56,7 +56,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting import org.chromium.components.browser_ui.settings.SettingsLauncher; import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.components.browser_ui.site_settings.ContentSettingsResources; -@@ -67,6 +68,9 @@ import org.chromium.chrome.browser.preferences.SharedPreferencesManager; +@@ -63,6 +64,9 @@ import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate; @@ -66,7 +66,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting /** * Fragment to keep track of the all the privacy related preferences. */ -@@ -106,6 +110,8 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -100,6 +104,8 @@ public class PrivacySettings private ChromeSwitchPreference allowCustomTabIntentsPref; private ChromeSwitchPreference openExternalLinksPref; @@ -75,7 +75,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { getActivity().setTitle(R.string.prefs_privacy_security); -@@ -214,6 +220,40 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -210,6 +216,40 @@ public class PrivacySettings Preference syncAndServicesLink = findPreference(PREF_SYNC_AND_SERVICES_LINK); syncAndServicesLink.setSummary(buildSyncAndServicesLink()); @@ -114,10 +114,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting + }); + Preference thirdPartyCookies = findPreference(PREF_THIRD_PARTY_COOKIES); - if (thirdPartyCookies != null) { - thirdPartyCookies.getExtras().putString( -@@ -401,6 +441,29 @@ public class PrivacySettings extends PreferenceFragmentCompat - privacyGuide.setTitle(privacyGuidePrefTitle); + + if (showTrackingProtectionUI()) { +@@ -410,6 +450,29 @@ public class PrivacySettings + || ChromeFeatureList.isEnabled(ChromeFeatureList.TRACKING_PROTECTION_3PCD); } + class TimeFrequencySpinnerOption { @@ -172,7 +172,7 @@ diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/p diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1393,6 +1393,18 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1416,6 +1416,18 @@ Your Google account may have other forms of browsing history like searches and a Browsing history @@ -344,7 +344,7 @@ diff --git a/components/history/core/browser/expire_history_backend.h b/componen diff --git a/components/history/core/browser/history_backend.cc b/components/history/core/browser/history_backend.cc --- a/components/history/core/browser/history_backend.cc +++ b/components/history/core/browser/history_backend.cc -@@ -165,7 +165,7 @@ const int kMaxRedirectCount = 32; +@@ -164,7 +164,7 @@ const int kMaxRedirectCount = 32; // The number of days old a history entry can be before it is considered "old" // and is deleted. @@ -353,7 +353,7 @@ diff --git a/components/history/core/browser/history_backend.cc b/components/his // The maximum number of days for which domain visit metrics are computed // each time HistoryBackend::GetDomainDiversity() is called. -@@ -1328,6 +1328,19 @@ void HistoryBackend::InitImpl( +@@ -1304,6 +1304,19 @@ void HistoryBackend::InitImpl( expirer_.StartExpiringOldStuff(base::Days(kExpireDaysThreshold)); } @@ -376,7 +376,7 @@ diff --git a/components/history/core/browser/history_backend.cc b/components/his diff --git a/components/history/core/browser/history_backend.h b/components/history/core/browser/history_backend.h --- a/components/history/core/browser/history_backend.h +++ b/components/history/core/browser/history_backend.h -@@ -222,6 +222,8 @@ class HistoryBackend : public base::RefCountedThreadSafe, +@@ -221,6 +221,8 @@ class HistoryBackend : public base::RefCountedThreadSafe, void Init(bool force_fail, const HistoryDatabaseParams& history_database_params); @@ -463,7 +463,7 @@ diff --git a/components/history/core/browser/history_service.h b/components/hist // Triggers the backend to load if it hasn't already, and then returns whether // it's finished loading. // Note: Virtual needed for mocking. -@@ -1143,6 +1147,10 @@ class HistoryService : public KeyedService, +@@ -1138,6 +1142,10 @@ class HistoryService : public KeyedService, raw_ptr local_device_info_provider_ = nullptr; diff --git a/build/patches/Increase-number-of-autocomplete-matches-to-10.patch b/build/patches/Increase-number-of-autocomplete-matches-to-10.patch index 20efd34d..44b4284a 100644 --- a/build/patches/Increase-number-of-autocomplete-matches-to-10.patch +++ b/build/patches/Increase-number-of-autocomplete-matches-to-10.patch @@ -30,7 +30,7 @@ diff --git a/components/omnibox/browser/autocomplete_result.cc b/components/omni diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omnibox/browser/omnibox_field_trial.cc --- a/components/omnibox/browser/omnibox_field_trial.cc +++ b/components/omnibox/browser/omnibox_field_trial.cc -@@ -289,7 +289,11 @@ void OmniboxFieldTrial::GetDemotionsByType( +@@ -290,7 +290,11 @@ void OmniboxFieldTrial::GetDemotionsByType( size_t OmniboxFieldTrial::GetProviderMaxMatches( AutocompleteProvider::Type provider) { diff --git a/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch b/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch index 7d80a2a6..dd100bf4 100644 --- a/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch +++ b/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch @@ -23,7 +23,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/third_party/blink/renderer/core/dom/build.gni b/third_party/blink/renderer/core/dom/build.gni --- a/third_party/blink/renderer/core/dom/build.gni +++ b/third_party/blink/renderer/core/dom/build.gni -@@ -166,6 +166,8 @@ blink_core_sources_dom = [ +@@ -167,6 +167,8 @@ blink_core_sources_dom = [ "has_invalidation_flags.h", "icon_url.cc", "icon_url.h", @@ -35,7 +35,7 @@ diff --git a/third_party/blink/renderer/core/dom/build.gni b/third_party/blink/r diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc -@@ -294,6 +294,7 @@ +@@ -295,6 +295,7 @@ #include "third_party/blink/renderer/core/page/scrolling/root_scroller_controller.h" #include "third_party/blink/renderer/core/page/scrolling/scroll_state_callback.h" #include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h" @@ -43,7 +43,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink #include "third_party/blink/renderer/core/page/scrolling/snap_coordinator.h" #include "third_party/blink/renderer/core/page/scrolling/top_document_root_scroller_controller.h" #include "third_party/blink/renderer/core/page/spatial_navigation_controller.h" -@@ -370,6 +371,8 @@ +@@ -372,6 +373,8 @@ #include "third_party/blink/renderer/platform/wtf/text/string_buffer.h" #include "third_party/blink/renderer/platform/wtf/text/text_encoding_registry.h" @@ -52,7 +52,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink #ifndef NDEBUG using WeakDocumentSet = blink::HeapHashSet>; static WeakDocumentSet& LiveDocumentSet(); -@@ -7416,6 +7419,64 @@ void Document::OnPrepareToStopParsing() { +@@ -7423,6 +7426,64 @@ void Document::OnPrepareToStopParsing() { MilestoneForDelayedAsyncScript::kFinishedParsing); } @@ -117,7 +117,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink void Document::FinishedParsing() { DCHECK(!GetScriptableDocumentParser() || !parser_->IsParsing()); DCHECK(!GetScriptableDocumentParser() || ready_state_ != kLoading); -@@ -7482,6 +7543,9 @@ void Document::FinishedParsing() { +@@ -7489,6 +7550,9 @@ void Document::FinishedParsing() { } frame->Loader().FinishedParsing(); @@ -130,7 +130,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h --- a/third_party/blink/renderer/core/dom/document.h +++ b/third_party/blink/renderer/core/dom/document.h -@@ -2064,6 +2064,9 @@ class CORE_EXPORT Document : public ContainerNode, +@@ -2075,6 +2075,9 @@ class CORE_EXPORT Document : public ContainerNode, void AXContextModeChanged(); void ClearAXObjectCache(); @@ -165,7 +165,7 @@ new file mode 100644 diff --git a/third_party/blink/renderer/core/html/html_script_element.cc b/third_party/blink/renderer/core/html/html_script_element.cc --- a/third_party/blink/renderer/core/html/html_script_element.cc +++ b/third_party/blink/renderer/core/html/html_script_element.cc -@@ -186,6 +186,11 @@ void HTMLScriptElement::setTextContent(const String& string) { +@@ -182,6 +182,11 @@ void HTMLScriptElement::setTextContent(const String& string) { Node::setTextContent(string); } diff --git a/build/patches/JIT-site-settings.patch b/build/patches/JIT-site-settings.patch index 250f4016..461c48c9 100644 --- a/build/patches/JIT-site-settings.patch +++ b/build/patches/JIT-site-settings.patch @@ -273,7 +273,7 @@ new file mode 100644 diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc -@@ -537,7 +537,7 @@ void ContentSettingsRegistry::Init() { +@@ -538,7 +538,7 @@ void ContentSettingsRegistry::Init() { ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); Register(ContentSettingsType::JAVASCRIPT_JIT, "javascript-jit", diff --git a/build/patches/Keep-flag-to-allow-screenshots-in-Incognito-mode.patch b/build/patches/Keep-flag-to-allow-screenshots-in-Incognito-mode.patch index dcfdface..397176f9 100644 --- a/build/patches/Keep-flag-to-allow-screenshots-in-Incognito-mode.patch +++ b/build/patches/Keep-flag-to-allow-screenshots-in-Incognito-mode.patch @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -4979,9 +4979,9 @@ +@@ -5028,9 +5028,9 @@ "expiry_milestone": 120 }, { diff --git a/build/patches/Logcat-crash-reports-UI.patch b/build/patches/Logcat-crash-reports-UI.patch index fd8b7ee7..b8824e3a 100644 --- a/build/patches/Logcat-crash-reports-UI.patch +++ b/build/patches/Logcat-crash-reports-UI.patch @@ -143,7 +143,7 @@ diff --git a/chrome/browser/crash_upload_list/crash_upload_list_android.h b/chro diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc --- a/chrome/browser/net/chrome_network_delegate.cc +++ b/chrome/browser/net/chrome_network_delegate.cc -@@ -142,6 +142,13 @@ bool IsAccessAllowedAndroid(const base::FilePath& path) { +@@ -150,6 +150,13 @@ bool IsAccessAllowedAndroid(const base::FilePath& path) { if (external_storage_path.IsParent(path)) return true; @@ -160,7 +160,7 @@ diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -672,6 +672,7 @@ static_library("ui") { +@@ -665,6 +665,7 @@ static_library("ui") { "//third_party/re2", "//third_party/webrtc_overrides:webrtc_component", "//third_party/zlib", diff --git a/build/patches/Modify-default-preferences.patch b/build/patches/Modify-default-preferences.patch index 77260457..0abc8667 100644 --- a/build/patches/Modify-default-preferences.patch +++ b/build/patches/Modify-default-preferences.patch @@ -9,7 +9,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/chrome_content_browser_client.cc | 2 +- chrome/browser/flag_descriptions.cc | 5 +++++ chrome/browser/flag_descriptions.h | 3 +++ - chrome/browser/prefetch/prefetch_prefs.h | 2 +- + chrome/browser/preloading/preloading_prefs.h | 2 +- chrome/browser/profiles/profile.cc | 2 +- .../reset_page/reset_profile_dialog.html | 2 +- chrome/browser/ui/browser_ui_prefs.cc | 4 ++-- @@ -30,7 +30,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -77,6 +77,7 @@ +@@ -78,6 +78,7 @@ #include "components/autofill/core/common/autofill_payments_features.h" #include "components/autofill/core/common/autofill_switches.h" #include "components/autofill/core/common/autofill_util.h" @@ -38,7 +38,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc #include "components/browser_sync/browser_sync_switches.h" #include "components/browsing_data/core/features.h" #include "components/commerce/core/commerce_feature_list.h" -@@ -6514,6 +6515,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -6775,6 +6776,11 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kQuickSettingsPWANotifications)}, #endif // BUILDFLAG(IS_CHROMEOS_ASH) @@ -77,7 +77,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -3291,6 +3291,11 @@ const char kCommerceMerchantViewerAndroidDescription[] = +@@ -3311,6 +3311,11 @@ const char kCommerceMerchantViewerAndroidDescription[] = "Allows users to view merchant trust signals on eligible pages."; const char kTabGroupsSaveId[] = "tab-groups-save"; @@ -92,7 +92,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1889,6 +1889,9 @@ extern const char kCommerceMerchantViewerAndroidName[]; +@@ -1908,6 +1908,9 @@ extern const char kCommerceMerchantViewerAndroidName[]; extern const char kCommerceMerchantViewerAndroidDescription[]; extern const char kTabGroupsSaveId[]; @@ -102,9 +102,9 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio extern const char kTabGroupsSaveName[]; extern const char kTabGroupsSaveDescription[]; -diff --git a/chrome/browser/prefetch/prefetch_prefs.h b/chrome/browser/prefetch/prefetch_prefs.h ---- a/chrome/browser/prefetch/prefetch_prefs.h -+++ b/chrome/browser/prefetch/prefetch_prefs.h +diff --git a/chrome/browser/preloading/preloading_prefs.h b/chrome/browser/preloading/preloading_prefs.h +--- a/chrome/browser/preloading/preloading_prefs.h ++++ b/chrome/browser/preloading/preloading_prefs.h @@ -23,7 +23,7 @@ enum class NetworkPredictionOptions { kWifiOnlyDeprecated = 1, kDisabled = 2, @@ -184,7 +184,7 @@ diff --git a/components/bookmarks/browser/bookmark_utils.cc b/components/bookmar #include "components/bookmarks/browser/scoped_group_bookmark_actions.h" #include "components/bookmarks/common/bookmark_pref_names.h" #include "components/pref_registry/pref_registry_syncable.h" -@@ -480,11 +481,13 @@ bool DoesBookmarkContainWords(const std::u16string& title, +@@ -483,11 +484,13 @@ bool DoesBookmarkContainWords(const std::u16string& title, void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref( @@ -256,7 +256,7 @@ diff --git a/components/content_settings/core/browser/content_settings_registry. /*allowlisted_schemes=*/{}, /*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK}, WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE, -@@ -346,7 +346,7 @@ void ContentSettingsRegistry::Init() { +@@ -337,7 +337,7 @@ void ContentSettingsRegistry::Init() { // TODO(crbug.com/904439): Update this to "SECURE_ONLY" once // DeviceOrientationEvents and DeviceMotionEvents are only fired in secure // contexts. @@ -268,7 +268,7 @@ diff --git a/components/content_settings/core/browser/content_settings_registry. diff --git a/components/content_settings/core/browser/cookie_settings.cc b/components/content_settings/core/browser/cookie_settings.cc --- a/components/content_settings/core/browser/cookie_settings.cc +++ b/components/content_settings/core/browser/cookie_settings.cc -@@ -68,7 +68,7 @@ void CookieSettings::RegisterProfilePrefs( +@@ -74,7 +74,7 @@ void CookieSettings::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { registry->RegisterIntegerPref( prefs::kCookieControlsMode, @@ -292,7 +292,7 @@ diff --git a/components/payments/core/payment_prefs.cc b/components/payments/cor diff --git a/components/safe_browsing/core/common/safe_browsing_prefs.cc b/components/safe_browsing/core/common/safe_browsing_prefs.cc --- a/components/safe_browsing/core/common/safe_browsing_prefs.cc +++ b/components/safe_browsing/core/common/safe_browsing_prefs.cc -@@ -265,13 +265,13 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { +@@ -271,13 +271,13 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { registry->RegisterBooleanPref( prefs::kSafeBrowsingSawInterstitialScoutReporting, false); registry->RegisterBooleanPref( @@ -311,7 +311,7 @@ diff --git a/components/safe_browsing/core/common/safe_browsing_prefs.cc b/compo diff --git a/components/signin/internal/identity_manager/primary_account_manager.cc b/components/signin/internal/identity_manager/primary_account_manager.cc --- a/components/signin/internal/identity_manager/primary_account_manager.cc +++ b/components/signin/internal/identity_manager/primary_account_manager.cc -@@ -146,9 +146,9 @@ void PrimaryAccountManager::RegisterProfilePrefs(PrefRegistrySimple* registry) { +@@ -147,9 +147,9 @@ void PrimaryAccountManager::RegisterProfilePrefs(PrefRegistrySimple* registry) { std::string()); registry->RegisterStringPref(prefs::kGoogleServicesAccountId, std::string()); registry->RegisterBooleanPref(prefs::kGoogleServicesConsentedToSync, false); @@ -326,7 +326,7 @@ diff --git a/components/signin/internal/identity_manager/primary_account_manager diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -985,8 +985,8 @@ const base::FeatureParam kInterestGroupStorageMaxOpsBeforeMaintenance{ +@@ -987,8 +987,8 @@ const base::FeatureParam kInterestGroupStorageMaxOpsBeforeMaintenance{ // the attribute. Note: At present, only iframes with origin-restricted // sandboxes are isolated. BASE_FEATURE(kIsolateSandboxedIframes, diff --git a/build/patches/Move-some-account-settings-back-to-privacy-settings.patch b/build/patches/Move-some-account-settings-back-to-privacy-settings.patch index a9bfec08..e4c4da90 100644 --- a/build/patches/Move-some-account-settings-back-to-privacy-settings.patch +++ b/build/patches/Move-some-account-settings-back-to-privacy-settings.patch @@ -14,7 +14,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -58,6 +58,19 @@ found in the LICENSE file. +@@ -64,6 +64,19 @@ found in the LICENSE file. android:key="privacy_sandbox" android:title="@string/prefs_privacy_sandbox" android:fragment="org.chromium.chrome.browser.privacy_sandbox.PrivacySandboxSettingsFragmentV3"/> @@ -37,7 +37,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -57,6 +57,13 @@ import org.chromium.components.user_prefs.UserPrefs; +@@ -53,6 +53,13 @@ import org.chromium.components.user_prefs.UserPrefs; import org.chromium.ui.text.NoUnderlineClickableSpan; import org.chromium.ui.text.SpanApplier; @@ -51,9 +51,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting /** * Fragment to keep track of the all the privacy related preferences. */ -@@ -76,6 +83,16 @@ public class PrivacySettings extends PreferenceFragmentCompat - private static final String PREF_INCOGNITO_LOCK = "incognito_lock"; +@@ -72,6 +79,16 @@ public class PrivacySettings private static final String PREF_THIRD_PARTY_COOKIES = "third_party_cookies"; + private static final String PREF_TRACKING_PROTECTION = "tracking_protection"; + // moved from SyncAndServicesSettings.java + private static final String PREF_SERVICES_CATEGORY = "services_category"; @@ -66,9 +66,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting + + private ManagedPreferenceDelegate mManagedPreferenceDelegate; private IncognitoLockSettings mIncognitoLockSettings; - private HelpAndFeedbackLauncher mHelpAndFeedbackLauncher; - private Profile mProfile; -@@ -142,6 +159,16 @@ public class PrivacySettings extends PreferenceFragmentCompat + + @Override +@@ -136,6 +153,16 @@ public class PrivacySettings setHasOptionsMenu(true); @@ -85,17 +85,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting ChromeSwitchPreference canMakePaymentPref = (ChromeSwitchPreference) findPreference(PREF_CAN_MAKE_PAYMENT); canMakePaymentPref.setOnPreferenceChangeListener(this); -@@ -220,6 +247,9 @@ public class PrivacySettings extends PreferenceFragmentCompat - UserPrefs.get(mProfile).setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue); +@@ -223,6 +250,9 @@ public class PrivacySettings } else if (PREF_HTTPS_FIRST_MODE.equals(key)) { - UserPrefs.get(mProfile).setBoolean(Pref.HTTPS_ONLY_MODE_ENABLED, (boolean) newValue); + UserPrefs.get(getProfile()) + .setBoolean(Pref.HTTPS_ONLY_MODE_ENABLED, (boolean) newValue); + } else if (PREF_SEARCH_SUGGESTIONS.equals(key)) { + UserPrefs.get(Profile.getLastUsedRegularProfile()) + .setBoolean(Pref.SEARCH_SUGGEST_ENABLED, (boolean) newValue); } return true; } -@@ -234,6 +264,8 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -237,6 +267,8 @@ public class PrivacySettings * Updates the preferences. */ public void updatePreferences() { @@ -107,7 +107,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -452,6 +452,10 @@ CHAR_LIMIT guidelines: +@@ -464,6 +464,10 @@ CHAR_LIMIT guidelines: No statistics or crash reports are sent to Google diff --git a/build/patches/Multiple-fingerprinting-mitigations.patch b/build/patches/Multiple-fingerprinting-mitigations.patch index 5e19b025..8109e28e 100644 --- a/build/patches/Multiple-fingerprinting-mitigations.patch +++ b/build/patches/Multiple-fingerprinting-mitigations.patch @@ -60,7 +60,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -2473,6 +2473,7 @@ static_library("browser") { +@@ -2530,6 +2530,7 @@ static_library("browser") { "//services/device/public/cpp:device_features", "//services/device/public/cpp/geolocation", "//services/device/public/cpp/usb", @@ -71,7 +71,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -226,6 +226,8 @@ +@@ -227,6 +227,8 @@ #include "ui/ui_features.h" #include "url/url_features.h" @@ -80,7 +80,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) #include "base/allocator/buildflags.h" #endif -@@ -3897,6 +3899,20 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4160,6 +4162,20 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kWebrtcUseMinMaxVEADimensionsName, flag_descriptions::kWebrtcUseMinMaxVEADimensionsDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kWebRtcUseMinMaxVEADimensions)}, @@ -104,7 +104,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn -@@ -250,6 +250,7 @@ source_set("browser") { +@@ -245,6 +245,7 @@ source_set("browser") { "//third_party/libyuv", "//third_party/re2", "//third_party/sqlite", @@ -123,7 +123,7 @@ diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content #if BUILDFLAG(IS_ANDROID) #include "base/android/child_process_binding_types.h" #include "content/browser/android/java_interfaces_impl.h" -@@ -3304,6 +3305,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( +@@ -3299,6 +3300,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( switches::kDisableBreakpad, switches::kDisableDatabases, switches::kDisableFileSystem, @@ -147,7 +147,7 @@ diff --git a/content/child/BUILD.gn b/content/child/BUILD.gn diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc -@@ -44,6 +44,8 @@ +@@ -46,6 +46,8 @@ #include "ui/gl/gl_switches.h" #include "ui/native_theme/native_theme_features.h" @@ -156,7 +156,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. #if BUILDFLAG(IS_ANDROID) #include "base/android/build_info.h" #endif -@@ -546,6 +548,12 @@ void SetRuntimeFeaturesFromCommandLine(const base::CommandLine& command_line) { +@@ -548,6 +550,12 @@ void SetRuntimeFeaturesFromCommandLine(const base::CommandLine& command_line) { // as a last resort. void SetCustomizedRuntimeFeaturesFromCombinedArgs( const base::CommandLine& command_line) { @@ -185,15 +185,15 @@ diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_pa diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc -@@ -37,6 +37,7 @@ - #include "base/containers/contains.h" +@@ -38,6 +38,7 @@ #include "base/debug/dump_without_crashing.h" + #include "base/i18n/time_formatting.h" #include "base/metrics/histogram_functions.h" +#include "base/rand_util.h" #include "base/notreached.h" #include "base/ranges/algorithm.h" #include "base/task/single_thread_task_runner.h" -@@ -845,6 +846,17 @@ Document::Document(const DocumentInit& initializer, +@@ -847,6 +848,17 @@ Document::Document(const DocumentInit& initializer, : nullptr), data_(MakeGarbageCollected(GetExecutionContext())) { DCHECK(agent_); @@ -211,7 +211,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink if (base::FeatureList::IsEnabled(features::kDelayAsyncScriptExecution)) script_runner_delayer_->Activate(); -@@ -2299,6 +2311,14 @@ void Document::UpdateStyleAndLayoutTreeForThisDocument() { +@@ -2300,6 +2312,14 @@ void Document::UpdateStyleAndLayoutTreeForThisDocument() { #endif } @@ -240,7 +240,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/ AtomicString visibilityState() const; bool IsPageVisible() const; bool hidden() const; -@@ -2418,6 +2422,9 @@ class CORE_EXPORT Document : public ContainerNode, +@@ -2429,6 +2433,9 @@ class CORE_EXPORT Document : public ContainerNode, base::ElapsedTimer start_time_; @@ -253,7 +253,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/ diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc -@@ -2120,6 +2120,7 @@ void Element::ClientQuads(Vector& quads) const { +@@ -2121,6 +2121,7 @@ void Element::ClientQuads(Vector& quads) const { quads.push_back(element_layout_object->LocalToAbsoluteQuad( gfx::QuadF(element_layout_object->ObjectBoundingBox()))); } @@ -261,7 +261,7 @@ diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/ return; } -@@ -2128,6 +2129,10 @@ void Element::ClientQuads(Vector& quads) const { +@@ -2129,6 +2130,10 @@ void Element::ClientQuads(Vector& quads) const { element_layout_object->IsBR()) { element_layout_object->AbsoluteQuads(quads); } @@ -272,7 +272,7 @@ diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/ } DOMRectList* Element::getClientRects() { -@@ -2170,6 +2175,9 @@ gfx::RectF Element::GetBoundingClientRectNoLifecycleUpdate() const { +@@ -2171,6 +2176,9 @@ gfx::RectF Element::GetBoundingClientRectNoLifecycleUpdate() const { DCHECK(element_layout_object); GetDocument().AdjustRectForScrollAndAbsoluteZoom(result, *element_layout_object); @@ -376,7 +376,7 @@ diff --git a/third_party/blink/renderer/core/html/canvas/text_metrics.h b/third_ diff --git a/third_party/blink/renderer/core/svg/svg_graphics_element.cc b/third_party/blink/renderer/core/svg/svg_graphics_element.cc --- a/third_party/blink/renderer/core/svg/svg_graphics_element.cc +++ b/third_party/blink/renderer/core/svg/svg_graphics_element.cc -@@ -187,6 +187,8 @@ SVGRectTearOff* SVGGraphicsElement::getBBoxFromJavascript() { +@@ -143,6 +143,8 @@ SVGRectTearOff* SVGGraphicsElement::getBBoxFromJavascript() { if (const auto* layout_object = GetLayoutObject()) { bounding_box = GetBBox(); @@ -394,7 +394,7 @@ diff --git a/third_party/blink/renderer/core/svg/svg_text_content_element.cc b/t auto* layout_object = GetLayoutObject(); + float value = 0; if (IsNGTextOrInline(layout_object)) { - NGSvgTextQuery query(*layout_object); + SvgTextQuery query(*layout_object); - return query.SubStringLength(0, query.NumberOfCharacters()); + value = query.SubStringLength(0, query.NumberOfCharacters()); + } else { @@ -413,9 +413,9 @@ diff --git a/third_party/blink/renderer/core/svg/svg_text_content_element.cc b/t auto* layout_object = GetLayoutObject(); + float value = 0; if (IsNGTextOrInline(layout_object)) -- return NGSvgTextQuery(*layout_object).SubStringLength(charnum, nchars); +- return SvgTextQuery(*layout_object).SubStringLength(charnum, nchars); - return 0; -+ value = NGSvgTextQuery(*layout_object).SubStringLength(charnum, nchars); ++ value = SvgTextQuery(*layout_object).SubStringLength(charnum, nchars); + else + value = 0; + return value * (RuntimeEnabledFeatures::FingerprintingCanvasMeasureTextNoiseEnabled() ? @@ -425,7 +425,7 @@ diff --git a/third_party/blink/renderer/core/svg/svg_text_content_element.cc b/t SVGPointTearOff* SVGTextContentElement::getStartPositionOfChar( @@ -162,6 +171,8 @@ SVGPointTearOff* SVGTextContentElement::getStartPositionOfChar( if (IsNGTextOrInline(layout_object)) { - point = NGSvgTextQuery(*layout_object).StartPositionOfCharacter(charnum); + point = SvgTextQuery(*layout_object).StartPositionOfCharacter(charnum); } + if (RuntimeEnabledFeatures::FingerprintingCanvasMeasureTextNoiseEnabled()) + point.Scale(GetDocument().GetNoiseFactorX(), GetDocument().GetNoiseFactorY()); @@ -434,7 +434,7 @@ diff --git a/third_party/blink/renderer/core/svg/svg_text_content_element.cc b/t @@ -184,6 +195,8 @@ SVGPointTearOff* SVGTextContentElement::getEndPositionOfChar( if (IsNGTextOrInline(layout_object)) { - point = NGSvgTextQuery(*layout_object).EndPositionOfCharacter(charnum); + point = SvgTextQuery(*layout_object).EndPositionOfCharacter(charnum); } + if (RuntimeEnabledFeatures::FingerprintingCanvasMeasureTextNoiseEnabled()) + point.Scale(GetDocument().GetNoiseFactorX(), GetDocument().GetNoiseFactorY()); @@ -443,7 +443,7 @@ diff --git a/third_party/blink/renderer/core/svg/svg_text_content_element.cc b/t @@ -206,6 +219,8 @@ SVGRectTearOff* SVGTextContentElement::getExtentOfChar( if (IsNGTextOrInline(layout_object)) { - rect = NGSvgTextQuery(*layout_object).ExtentOfCharacter(charnum); + rect = SvgTextQuery(*layout_object).ExtentOfCharacter(charnum); } + if (RuntimeEnabledFeatures::FingerprintingCanvasMeasureTextNoiseEnabled()) + rect.Scale(GetDocument().GetNoiseFactorX(), GetDocument().GetNoiseFactorY()); @@ -458,7 +458,7 @@ diff --git a/third_party/blink/renderer/core/svg/svg_text_content_element.cc b/t + if (RuntimeEnabledFeatures::FingerprintingCanvasMeasureTextNoiseEnabled()) + target.Scale(GetDocument().GetNoiseFactorX(), GetDocument().GetNoiseFactorY()); if (IsNGTextOrInline(layout_object)) { - return NGSvgTextQuery(*layout_object) + return SvgTextQuery(*layout_object) - .CharacterNumberAtPosition(point->Target()->Value()); + .CharacterNumberAtPosition(target); } @@ -485,7 +485,7 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_c namespace blink { BASE_FEATURE(kDisableCanvasOverdrawOptimization, -@@ -2188,6 +2192,10 @@ ImageData* BaseRenderingContext2D::getImageDataInternal( +@@ -2187,6 +2191,10 @@ ImageData* BaseRenderingContext2D::getImageDataInternal( snapshot->PaintImageForCurrentFrame().GetSkImageInfo().bounds(); DCHECK(!bounds.intersect(SkIRect::MakeXYWH(sx, sy, sw, sh))); } @@ -496,7 +496,7 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_c } return image_data; -@@ -2865,9 +2873,23 @@ TextMetrics* BaseRenderingContext2D::measureText(const String& text) { +@@ -2864,9 +2872,23 @@ TextMetrics* BaseRenderingContext2D::measureText(const String& text) { TextDirection direction = ToTextDirection(GetState().GetDirection(), canvas); @@ -524,7 +524,7 @@ diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_c diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn --- a/third_party/blink/renderer/platform/BUILD.gn +++ b/third_party/blink/renderer/platform/BUILD.gn -@@ -1650,7 +1650,9 @@ component("platform") { +@@ -1648,7 +1648,9 @@ component("platform") { "//third_party/blink/renderer:non_test_config", ] @@ -779,7 +779,7 @@ diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.h diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -3062,6 +3062,15 @@ +@@ -3122,6 +3122,15 @@ status: {"Android": "", "default": "stable"}, base_feature: "none", }, diff --git a/build/patches/Partition-Blink-memory-cache.patch b/build/patches/Partition-Blink-memory-cache.patch index 7622bcc1..5aa783ad 100644 --- a/build/patches/Partition-Blink-memory-cache.patch +++ b/build/patches/Partition-Blink-memory-cache.patch @@ -54,7 +54,7 @@ diff --git a/third_party/blink/renderer/core/html/parser/html_srcset_parser.cc b diff --git a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc --- a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc -@@ -2315,7 +2315,7 @@ bool InspectorNetworkAgent::FetchResourceContent(Document* document, +@@ -2317,7 +2317,7 @@ bool InspectorNetworkAgent::FetchResourceContent(Document* document, Resource* cached_resource = document->Fetcher()->CachedResource(url); if (!cached_resource) { cached_resource = MemoryCache::Get()->ResourceForURL( @@ -81,7 +81,7 @@ diff --git a/third_party/blink/renderer/core/inspector/inspector_page_agent.cc b diff --git a/third_party/blink/renderer/core/loader/image_loader.cc b/third_party/blink/renderer/core/loader/image_loader.cc --- a/third_party/blink/renderer/core/loader/image_loader.cc +++ b/third_party/blink/renderer/core/loader/image_loader.cc -@@ -741,7 +741,8 @@ bool ImageLoader::ShouldLoadImmediately(const KURL& url) const { +@@ -729,7 +729,8 @@ bool ImageLoader::ShouldLoadImmediately(const KURL& url) const { // content when style recalc is over and DOM mutation is allowed again. if (!url.IsNull()) { Resource* resource = MemoryCache::Get()->ResourceForURL( @@ -175,7 +175,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache.h b/t diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc -@@ -860,7 +860,8 @@ Resource* ResourceFetcher::CreateResourceForStaticData( +@@ -879,7 +879,8 @@ Resource* ResourceFetcher::CreateResourceForStaticData( if (!archive_ && factory.GetType() == ResourceType::kRaw) return nullptr; @@ -185,7 +185,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.c // Most off-main-thread resource fetches use Resource::kRaw and don't reach // this point, but off-main-thread module fetches might. if (IsMainThread()) { -@@ -1347,7 +1348,9 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, +@@ -1360,7 +1361,9 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, resource = nullptr; } else { resource = MemoryCache::Get()->ResourceForURL( @@ -196,7 +196,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.c } if (resource) { policy = DetermineRevalidationPolicy(resource_type, params, *resource, -@@ -1455,6 +1458,8 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, +@@ -1468,6 +1471,8 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, if (resource_cache_remote_.is_bound()) { resource_cache_remote_->Contains( params.Url(), @@ -205,7 +205,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.c WTF::BindOnce(&ResourceFetcher::OnResourceCacheContainsFinished, WrapWeakPersistent(this), base::TimeTicks::Now(), resource_request.GetRequestDestination())); -@@ -1604,7 +1609,8 @@ Resource* ResourceFetcher::CreateResourceForLoading( +@@ -1619,7 +1624,8 @@ Resource* ResourceFetcher::CreateResourceForLoading( const FetchParameters& params, const ResourceFactory& factory) { const String cache_identifier = @@ -215,7 +215,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.c if (!base::FeatureList::IsEnabled( blink::features::kScopeMemoryCachePerContext)) { DCHECK(!IsMainThread() || params.IsStaleRevalidation() || -@@ -2605,10 +2611,13 @@ void ResourceFetcher::UpdateAllImageResourcePriorities() { +@@ -2629,10 +2635,13 @@ void ResourceFetcher::UpdateAllImageResourcePriorities() { to_be_removed.clear(); } @@ -231,7 +231,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.c } // Requests that can be satisfied via `archive_` (i.e. MHTML) or -@@ -2621,7 +2630,7 @@ String ResourceFetcher::GetCacheIdentifier(const KURL& url) const { +@@ -2645,7 +2654,7 @@ String ResourceFetcher::GetCacheIdentifier(const KURL& url) const { if (bundle) return bundle->GetCacheIdentifier(); @@ -243,7 +243,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.c diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h -@@ -260,7 +260,8 @@ class PLATFORM_EXPORT ResourceFetcher +@@ -259,7 +259,8 @@ class PLATFORM_EXPORT ResourceFetcher uint32_t inflight_keepalive_bytes); blink::mojom::ControllerServiceWorkerMode IsControlledByServiceWorker() const; diff --git a/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch b/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch index 8866b099..c955129c 100644 --- a/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch +++ b/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch @@ -43,7 +43,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -9640,6 +9640,13 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9934,6 +9934,13 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(base::i18n::kLacrosMergeIcuDataFile)}, #endif @@ -60,7 +60,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -3920,6 +3920,11 @@ const char kChimeAndroidSdkDescription[] = +@@ -3976,6 +3976,11 @@ const char kChimeAndroidSdkDescription[] = "Enable Chime SDK to receive push notification."; const char kChimeAndroidSdkName[] = "Use Chime SDK"; @@ -75,7 +75,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -45,6 +45,9 @@ namespace flag_descriptions { +@@ -46,6 +46,9 @@ namespace flag_descriptions { extern const char kAccelerated2dCanvasName[]; extern const char kAccelerated2dCanvasDescription[]; @@ -88,15 +88,15 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -180,6 +180,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -183,6 +183,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kBackGestureActivityTabProvider, &kBackGestureRefactorActivityAndroid, &kBackGestureRefactorAndroid, + &kCloseAllTabsModalDialog, &kBackgroundThreadPool, &kBaselineGM3SurfaceColors, - &kCacheActivityTaskID, -@@ -524,6 +525,10 @@ BASE_FEATURE(kCacheActivityTaskID, + &kBlockIntentsWhileLocked, +@@ -536,6 +537,10 @@ BASE_FEATURE(kCacheActivityTaskID, "CacheActivityTaskID", base::FEATURE_ENABLED_BY_DEFAULT); @@ -107,7 +107,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse // Used in downstream code. BASE_FEATURE(kCastDeviceFilter, "CastDeviceFilter", -@@ -534,8 +539,8 @@ BASE_FEATURE(kClearOmniboxFocusAfterNavigation, +@@ -546,8 +551,8 @@ BASE_FEATURE(kClearOmniboxFocusAfterNavigation, base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kCloseTabSuggestions, @@ -121,8 +121,8 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -38,6 +38,7 @@ BASE_DECLARE_FEATURE(kBackgroundThreadPool); - BASE_DECLARE_FEATURE(kBaselineGM3SurfaceColors); +@@ -41,6 +41,7 @@ BASE_DECLARE_FEATURE(kBaselineGM3SurfaceColors); + BASE_DECLARE_FEATURE(kBlockIntentsWhileLocked); BASE_DECLARE_FEATURE(kCacheActivityTaskID); BASE_DECLARE_FEATURE(kClearOmniboxFocusAfterNavigation); +BASE_DECLARE_FEATURE(kCloseAllTabsModalDialog); @@ -132,7 +132,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -203,6 +203,7 @@ public abstract class ChromeFeatureList { +@@ -197,6 +197,7 @@ public abstract class ChromeFeatureList { public static final String CCT_RESIZABLE_90_MAXIMUM_HEIGHT = "CCTResizable90MaximumHeight"; public static final String CCT_RESIZABLE_ALLOW_RESIZE_BY_USER_GESTURE = "CCTResizableAllowResizeByUserGesture"; diff --git a/build/patches/Re-introduce-override_build_timestamp.patch b/build/patches/Re-introduce-override_build_timestamp.patch index 85a9212f..f74aa1a7 100644 --- a/build/patches/Re-introduce-override_build_timestamp.patch +++ b/build/patches/Re-introduce-override_build_timestamp.patch @@ -16,7 +16,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/base/BUILD.gn b/base/BUILD.gn --- a/base/BUILD.gn +++ b/base/BUILD.gn -@@ -4087,8 +4087,13 @@ action("build_date") { +@@ -4099,8 +4099,13 @@ action("build_date") { args = [ rebase_path("$target_gen_dir/generated_build_date.h", root_build_dir), @@ -30,7 +30,7 @@ diff --git a/base/BUILD.gn b/base/BUILD.gn + } } - if (enable_nocompile_tests) { + if (enable_nocompile_tests_new) { diff --git a/build_overrides/build.gni b/build_overrides/build.gni --- a/build_overrides/build.gni +++ b/build_overrides/build.gni diff --git a/build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch b/build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch index 417c88ef..f61721ed 100644 --- a/build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch +++ b/build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch @@ -37,7 +37,7 @@ diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc -@@ -379,6 +379,7 @@ void URLRequestHttpJob::OnGotFirstPartySetCacheFilterMatchInfo( +@@ -360,6 +360,7 @@ void URLRequestHttpJob::OnGotFirstPartySetMetadata( // fields in the referrer. GURL referrer(request_->referrer()); @@ -45,7 +45,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque // Our consumer should have made sure that this is a safe referrer (e.g. via // URLRequestJob::ComputeReferrerForPolicy). if (referrer.is_valid()) { -@@ -386,11 +387,14 @@ void URLRequestHttpJob::OnGotFirstPartySetCacheFilterMatchInfo( +@@ -367,11 +368,14 @@ void URLRequestHttpJob::OnGotFirstPartySetMetadata( request_info_.extra_headers.SetHeader(HttpRequestHeaders::kReferer, referer_value); } @@ -60,7 +60,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque AddExtraHeaders(); -@@ -647,10 +651,10 @@ void URLRequestHttpJob::StartTransactionInternal() { +@@ -628,10 +632,10 @@ void URLRequestHttpJob::StartTransactionInternal() { void URLRequestHttpJob::AddExtraHeaders() { request_info_.extra_headers.SetAcceptEncodingIfMissing( request()->url(), request()->accepted_stream_types(), diff --git a/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch b/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch index 491e0f5f..399f4a68 100644 --- a/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch +++ b/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch @@ -37,7 +37,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -658,6 +658,8 @@ chrome_java_resources = [ +@@ -667,6 +667,8 @@ chrome_java_resources = [ "java/res/xml/incognito_preferences.xml", "java/res/xml/privacy_preferences.xml", "java/res/xml/privacy_preferences_v2.xml", @@ -49,9 +49,9 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -966,6 +966,8 @@ chrome_java_sources = [ - "java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java", +@@ -978,6 +978,8 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java", + "java/src/org/chromium/chrome/browser/privacy_sandbox/ChromeTrackingProtectionDelegate.java", "java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java", + "java/src/org/chromium/chrome/browser/privacy/settings/RefererSettingsFragment.java", + "java/src/org/chromium/chrome/browser/privacy/settings/RadioButtonGroupRefererSettings.java", @@ -113,7 +113,7 @@ new file mode 100644 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -70,6 +70,10 @@ found in the LICENSE file. +@@ -76,6 +76,10 @@ found in the LICENSE file. android:title="@string/close_tabs_on_exit_title" android:summary="@string/close_tabs_on_exit_summary" android:defaultValue="false" /> @@ -163,7 +163,7 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -32,6 +32,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; +@@ -29,6 +29,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.incognito.reauth.IncognitoReauthSettingSwitchPreference; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.prefetch.settings.PreloadPagesSettingsFragment; @@ -171,7 +171,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting import org.chromium.chrome.browser.privacy.secure_dns.SecureDnsSettings; import org.chromium.chrome.browser.privacy_guide.PrivacyGuideInteractions; import org.chromium.chrome.browser.privacy_sandbox.PrivacySandboxBridge; -@@ -85,6 +86,7 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -80,6 +81,7 @@ public class PrivacySettings private static final String PREF_DO_NOT_TRACK = "do_not_track"; private static final String PREF_SAFE_BROWSING = "safe_browsing"; private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link"; @@ -179,7 +179,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox"; private static final String PREF_PROXY_OPTIONS = "proxy"; private static final String PREF_PRIVACY_GUIDE = "privacy_guide"; -@@ -354,6 +356,10 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -358,6 +360,10 @@ public class PrivacySettings : R.string.text_off); } @@ -371,7 +371,7 @@ new file mode 100644 diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc -@@ -541,6 +541,9 @@ SystemNetworkContextManager::SystemNetworkContextManager( +@@ -557,6 +557,9 @@ SystemNetworkContextManager::SystemNetworkContextManager( base::BindRepeating(&SystemNetworkContextManager::UpdateReferrersEnabled, base::Unretained(this))); @@ -381,7 +381,7 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows pref_change_registrar_.Add( prefs::kExplicitlyAllowedNetworkPorts, base::BindRepeating( -@@ -632,6 +635,7 @@ void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) { +@@ -648,6 +651,7 @@ void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) { // the system NetworkContext, and the per-profile pref values are used for // the profile NetworkContexts. registry->RegisterBooleanPref(prefs::kEnableReferrers, true); @@ -392,18 +392,18 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows diff --git a/chrome/browser/renderer_preferences_util.cc b/chrome/browser/renderer_preferences_util.cc --- a/chrome/browser/renderer_preferences_util.cc +++ b/chrome/browser/renderer_preferences_util.cc -@@ -108,6 +108,7 @@ void UpdateFromSystemSettings(blink::RendererPreferences* prefs, +@@ -110,6 +110,7 @@ void UpdateFromSystemSettings(blink::RendererPreferences* prefs, prefs->accept_languages = GetLanguageListForProfile( profile, pref_service->GetString(language::prefs::kAcceptLanguages)); prefs->enable_referrers = pref_service->GetBoolean(prefs::kEnableReferrers); + prefs->referrers_policy = pref_service->GetInteger(prefs::kReferrersPolicy); prefs->enable_do_not_track = - pref_service->GetBoolean(prefs::kEnableDoNotTrack); - prefs->enable_encrypted_media = + TrackingProtectionSettingsFactory::GetForProfile(profile) + ->IsDoNotTrackEnabled(); diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -993,6 +993,30 @@ CHAR_LIMIT guidelines: +@@ -1016,6 +1016,30 @@ CHAR_LIMIT guidelines: For example, some websites may respond to this request by showing you ads that aren’t based on other websites you’ve visited. Many websites will still collect and use your browsing data — for example to improve security, to provide content, ads and recommendations, and to generate reporting statistics. @@ -437,7 +437,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/prefs/pref_watcher.cc b/chrome/browser/ui/prefs/pref_watcher.cc --- a/chrome/browser/ui/prefs/pref_watcher.cc +++ b/chrome/browser/ui/prefs/pref_watcher.cc -@@ -99,6 +99,8 @@ PrefWatcher::PrefWatcher(Profile* profile) : profile_(profile) { +@@ -106,6 +106,8 @@ PrefWatcher::PrefWatcher(Profile* profile) renderer_callback); profile_pref_change_registrar_.Add(prefs::kEnableReferrers, renderer_callback); @@ -461,7 +461,7 @@ diff --git a/chrome/browser/ui/prefs/prefs_tab_helper.cc b/chrome/browser/ui/pre diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -1486,6 +1486,9 @@ inline constexpr char kEnableDoNotTrack[] = "enable_do_not_track"; +@@ -1469,6 +1469,9 @@ inline constexpr char kEnableReferrers[] = "enable_referrers"; inline constexpr char kEnableEncryptedMedia[] = "webkit.webprefs.encrypted_media_enabled"; @@ -474,7 +474,7 @@ diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc -@@ -394,6 +394,14 @@ void AddAdditionalRequestHeaders( +@@ -393,6 +393,14 @@ void AddAdditionalRequestHeaders( blink::mojom::Referrer(GURL(), network::mojom::ReferrerPolicy::kNever); } diff --git a/build/patches/Remove-binary-blob-integrations.patch b/build/patches/Remove-binary-blob-integrations.patch index 61d161f2..776703f4 100644 --- a/build/patches/Remove-binary-blob-integrations.patch +++ b/build/patches/Remove-binary-blob-integrations.patch @@ -26,6 +26,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- ...em_webview_bundle.AndroidManifest.expected | 5 - build/android/gyp/proguard.py | 2 + + build/config/android/config.gni | 4 +- chrome/android/BUILD.gn | 48 +- chrome/android/chrome_java_sources.gni | 5 - .../features/cablev2_authenticator/BUILD.gn | 2 - @@ -104,9 +105,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../preconditions/javatests/BUILD.gn | 1 - .../gms/ChromiumPlayServicesAvailability.java | 10 +- third_party/cardboard/BUILD.gn | 4 - - weblayer/browser/java/BUILD.gn | 1 - - weblayer/public/java/BUILD.gn | 1 - - 82 files changed, 96 insertions(+), 2011 deletions(-) + 81 files changed, 97 insertions(+), 2012 deletions(-) diff --git a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected b/android_webview/expectations/system_webview_bundle.AndroidManifest.expected --- a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected @@ -142,10 +141,24 @@ diff --git a/build/android/gyp/proguard.py b/build/android/gyp/proguard.py ]) + ')', # TODO(agrieve): Remove once we update to U SDK. r'OnBackAnimationCallback', +diff --git a/build/config/android/config.gni b/build/config/android/config.gni +--- a/build/config/android/config.gni ++++ b/build/config/android/config.gni +@@ -170,9 +170,7 @@ if (is_android || is_chromeos) { + + # google_play_services_package contains the path where individual client + # targets (e.g. google_play_services_base_java) are located. +- if (!defined(google_play_services_package)) { +- google_play_services_package = "//third_party/android_deps" +- } ++ google_play_services_package = "" + + if (!defined(android_protoc_bin)) { + android_protoc_bin = "//third_party/android_protoc/protoc" diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -288,14 +288,6 @@ if (current_toolchain == default_toolchain) { +@@ -291,14 +291,6 @@ if (current_toolchain == default_toolchain) { ":google_api_keys_java", ":update_proto_java", ":usage_stats_proto_java", @@ -160,7 +173,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:jni_java", "//cc:cc_java", "//cc/mojom:mojom_java", -@@ -612,14 +604,23 @@ if (current_toolchain == default_toolchain) { +@@ -624,14 +616,23 @@ if (current_toolchain == default_toolchain) { "//services/shape_detection:shape_detection_java", "//services/shape_detection/public/mojom:mojom_java", "//skia/public/mojom:mojom_java", @@ -187,9 +200,9 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//third_party/android_deps:protobuf_lite_runtime_java", "//third_party/android_media:android_media_java", "//third_party/android_swipe_refresh:android_swipe_refresh_java", -@@ -893,12 +894,6 @@ if (current_toolchain == default_toolchain) { - ":chrome_java", +@@ -914,12 +915,6 @@ if (current_toolchain == default_toolchain) { ":chrome_jni_headers", + ":chrome_unit_test_util_java", ":delegate_public_impl_java", - "$google_play_services_package:google_play_services_base_java", - "$google_play_services_package:google_play_services_basement_java", @@ -200,9 +213,9 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:base_java_test_support", "//base:base_java_test_support_uncommon", "//base:base_junit_test_support", -@@ -1506,13 +1501,6 @@ if (current_toolchain == default_toolchain) { +@@ -1536,13 +1531,6 @@ if (current_toolchain == default_toolchain) { + ":chrome_app_java_resources", ":chrome_test_util_java", - ":critical_persisted_tab_data_flatbuffer_test_v1_java", ":delegate_public_impl_java", - "$google_play_services_package:google_play_services_base_java", - "$google_play_services_package:google_play_services_basement_java", @@ -214,7 +227,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:base_java", "//base:base_java_test_support", "//base:base_java_test_support_uncommon", -@@ -2430,7 +2418,6 @@ if (current_toolchain == default_toolchain) { +@@ -2458,7 +2446,6 @@ if (current_toolchain == default_toolchain) { ] deps = [ ":chrome_java", @@ -222,7 +235,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:base_java", "//base:base_java_test_support", "//base:jni_java", -@@ -2529,7 +2516,6 @@ if (current_toolchain == default_toolchain) { +@@ -2552,7 +2539,6 @@ if (current_toolchain == default_toolchain) { # is in a DFM. android_library("base_module_java") { sources = [ @@ -230,7 +243,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "java/src/org/chromium/chrome/app/TrichromeZygotePreload.java", "java/src/org/chromium/chrome/browser/ChromeBackgroundService.java", "java/src/org/chromium/chrome/browser/ChromeBackupAgent.java", -@@ -2545,8 +2531,6 @@ if (current_toolchain == default_toolchain) { +@@ -2569,8 +2555,6 @@ if (current_toolchain == default_toolchain) { "java/src/org/chromium/chrome/browser/base/SplitCompatBackupAgent.java", "java/src/org/chromium/chrome/browser/base/SplitCompatContentProvider.java", "java/src/org/chromium/chrome/browser/base/SplitCompatCustomTabsService.java", @@ -239,9 +252,9 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "java/src/org/chromium/chrome/browser/base/SplitCompatIntentService.java", "java/src/org/chromium/chrome/browser/base/SplitCompatJobService.java", "java/src/org/chromium/chrome/browser/base/SplitCompatMinidumpUploadJobService.java", -@@ -2570,17 +2554,11 @@ if (current_toolchain == default_toolchain) { +@@ -2593,17 +2577,11 @@ if (current_toolchain == default_toolchain) { + "java/src/org/chromium/chrome/browser/notifications/NotificationService.java", "java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java", - "java/src/org/chromium/chrome/browser/prerender/ChromePrerenderService.java", "java/src/org/chromium/chrome/browser/provider/ChromeBrowserProvider.java", - "java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java", - "java/src/org/chromium/chrome/browser/services/gcm/GCMBackgroundService.java", @@ -257,7 +270,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:base_java", "//base:jni_java", "//chrome/browser/download/android:file_provider_java", -@@ -2594,7 +2572,6 @@ if (current_toolchain == default_toolchain) { +@@ -2617,7 +2595,6 @@ if (current_toolchain == default_toolchain) { "//components/media_router/browser/android:cast_options_provider_java", "//components/minidump_uploader:minidump_uploader_java", "//components/module_installer/android:module_installer_java", @@ -265,7 +278,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_collection_collection_java", "//ui/android:ui_no_recycler_view_java", -@@ -2613,7 +2590,6 @@ if (current_toolchain == default_toolchain) { +@@ -2636,7 +2613,6 @@ if (current_toolchain == default_toolchain) { # Deps to pull services into base module. # TODO(crbug.com/1126301): Consider moving these to the chrome module to # reduce base dex size. @@ -284,7 +297,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java "java/src/org/chromium/chrome/browser/ChromeBackupAgentImpl.java", "java/src/org/chromium/chrome/browser/ChromeBackupWatcher.java", "java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java", -@@ -991,10 +990,6 @@ chrome_java_sources = [ +@@ -1003,10 +1002,6 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/segmentation_platform/ReaderModeActionProvider.java", "java/src/org/chromium/chrome/browser/segmentation_platform/SignalAccumulator.java", "java/src/org/chromium/chrome/browser/selection/ChromeSelectionDropdownMenuDelegate.java", @@ -298,7 +311,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java diff --git a/chrome/android/features/cablev2_authenticator/BUILD.gn b/chrome/android/features/cablev2_authenticator/BUILD.gn --- a/chrome/android/features/cablev2_authenticator/BUILD.gn +++ b/chrome/android/features/cablev2_authenticator/BUILD.gn -@@ -16,8 +16,6 @@ android_library("java") { +@@ -17,8 +17,6 @@ android_library("java") { deps = [ ":java_resources", @@ -310,7 +323,7 @@ diff --git a/chrome/android/features/cablev2_authenticator/BUILD.gn b/chrome/and diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -121,19 +121,14 @@ by a child template that "extends" this file. +@@ -122,19 +122,14 @@ by a child template that "extends" this file. @@ -330,7 +343,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro -@@ -784,16 +779,6 @@ by a child template that "extends" this file. +@@ -785,16 +780,6 @@ by a child template that "extends" this file. @@ -347,7 +360,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro @@ -374,7 +387,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro -@@ -1034,20 +999,10 @@ by a child template that "extends" this file. +@@ -1035,20 +1000,10 @@ by a child template that "extends" this file. @@ -392,10 +405,10 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro - - - - -@@ -1301,12 +1256,6 @@ by a child template that "extends" this file. + tools:ignore="ExportedService"> +@@ -1299,12 +1254,6 @@ by a child template that "extends" this file. {% endif %} @@ -746,15 +759,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateSta diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java -@@ -129,7 +129,6 @@ public class PasswordSettings extends PreferenceFragmentCompat +@@ -124,7 +124,6 @@ public class PasswordSettings extends ChromeBaseSettingsFragment private Preference mLinkPref; private Menu mMenu; - private @Nullable PasswordCheck mPasswordCheck; private @ManagePasswordsReferrer int mManagePasswordsReferrer; - private HelpAndFeedbackLauncher mHelpAndFeedbackLauncher; - private Profile mProfile; -@@ -203,7 +202,6 @@ public class PasswordSettings extends PreferenceFragmentCompat + private BottomSheetController mBottomSheetController; + +@@ -196,7 +195,6 @@ public class PasswordSettings extends ChromeBaseSettingsFragment @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -762,7 +775,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage computeTrustedVaultBannerState(); } -@@ -309,9 +307,6 @@ public class PasswordSettings extends PreferenceFragmentCompat +@@ -302,9 +300,6 @@ public class PasswordSettings extends ChromeBaseSettingsFragment if (shouldShowAutoSigninOption()) { createAutoSignInCheckbox(); } @@ -772,7 +785,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage if (mTrustedVaultBannerState == TrustedVaultBannerState.OPTED_IN) { createTrustedVaultBanner(R.string.android_trusted_vault_banner_sub_label_opted_in, -@@ -509,10 +504,6 @@ public class PasswordSettings extends PreferenceFragmentCompat +@@ -502,10 +497,6 @@ public class PasswordSettings extends ChromeBaseSettingsFragment // by the system. if (getActivity().isFinishing()) { PasswordManagerHandlerProvider.getInstance().removeObserver(this); @@ -795,7 +808,7 @@ diff --git a/chrome/android/modules/chrome_feature_modules.gni b/chrome/android/ import("//chrome/android/modules/stack_unwinder/stack_unwinder_module.gni") import("//chrome/android/modules/test_dummy/test_dummy_module.gni") import("//device/vr/buildflags/buildflags.gni") -@@ -39,7 +37,6 @@ if (enable_arcore) { +@@ -37,7 +35,6 @@ if (enable_arcore) { # Each new module needs to add a desc to one of the lists below. chrome_module_descs = [ @@ -806,7 +819,7 @@ diff --git a/chrome/android/modules/chrome_feature_modules.gni b/chrome/android/ diff --git a/chrome/browser/language/android/BUILD.gn b/chrome/browser/language/android/BUILD.gn --- a/chrome/browser/language/android/BUILD.gn +++ b/chrome/browser/language/android/BUILD.gn -@@ -9,15 +9,12 @@ android_library("base_module_java") { +@@ -10,15 +10,12 @@ android_library("base_module_java") { sources = [ "java/src/org/chromium/chrome/browser/language/AppLocaleUtils.java", "java/src/org/chromium/chrome/browser/language/GlobalAppLocaleController.java", @@ -865,7 +878,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java --- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java +++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java -@@ -19,7 +19,6 @@ import org.chromium.base.Log; +@@ -18,7 +18,6 @@ import org.chromium.base.Log; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.language.AppLocaleUtils; import org.chromium.chrome.browser.language.GlobalAppLocaleController; @@ -873,7 +886,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse import org.chromium.chrome.browser.language.R; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.PrefChangeRegistrar; -@@ -135,11 +134,6 @@ public class LanguageSettings extends PreferenceFragmentCompat +@@ -131,11 +130,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment * translate target language, and detailed translate preferences. */ private void createDetailedPreferences(Bundle savedInstanceState, String rootKey) { @@ -888,7 +901,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/password_manager/android/BUILD.gn b/chrome/browser/password_manager/android/BUILD.gn --- a/chrome/browser/password_manager/android/BUILD.gn +++ b/chrome/browser/password_manager/android/BUILD.gn -@@ -99,8 +99,6 @@ android_library("java") { +@@ -101,8 +101,6 @@ android_library("java") { ":android_backend_java_enums", ":java_resources", ":settings_interface_java", @@ -897,7 +910,7 @@ diff --git a/chrome/browser/password_manager/android/BUILD.gn b/chrome/browser/p "//base:base_java", "//base:jni_java", "//build/android:build_java", -@@ -221,8 +219,6 @@ robolectric_binary("password_manager_junit_tests") { +@@ -223,8 +221,6 @@ robolectric_binary("password_manager_junit_tests") { ":public_impl_java", ":settings_interface_java", ":test_support_java", @@ -1063,7 +1076,7 @@ diff --git a/chrome/browser/push_messaging/push_messaging_service_factory.cc b/c diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resources/settings/route.ts --- a/chrome/browser/resources/settings/route.ts +++ b/chrome/browser/resources/settings/route.ts -@@ -54,8 +54,6 @@ function addPrivacyChildRoutes(r: Partial) { +@@ -60,8 +60,6 @@ function addPrivacyChildRoutes(r: Partial) { if (loadTimeData.getBoolean('enableSecurityKeysSubpage')) { r.SECURITY_KEYS = r.SECURITY.createChild('/securityKeys'); @@ -1075,7 +1088,7 @@ diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resourc diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -277,8 +277,6 @@ static_library("ui") { +@@ -273,8 +273,6 @@ static_library("ui") { "webui/flags/flags_ui.h", "webui/flags/flags_ui_handler.cc", "webui/flags/flags_ui_handler.h", @@ -1084,7 +1097,7 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn "webui/internals/internals_ui.cc", "webui/internals/internals_ui.h", "webui/interstitials/interstitial_ui.cc", -@@ -516,7 +514,6 @@ static_library("ui") { +@@ -508,7 +506,6 @@ static_library("ui") { "//components/feedback/redaction_tool", "//components/find_in_page", "//components/flags_ui", @@ -1141,7 +1154,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom #include "chrome/browser/ui/webui/internals/internals_ui.h" #include "chrome/browser/ui/webui/interstitials/interstitial_ui.h" #include "chrome/browser/ui/webui/intro/intro_ui.h" -@@ -479,8 +478,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, +@@ -478,8 +477,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; if (url.host_piece() == chrome::kChromeUIFlagsHost) return &NewWebUI; @@ -1153,7 +1166,7 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom diff --git a/chrome/browser/webauthn/android/BUILD.gn b/chrome/browser/webauthn/android/BUILD.gn --- a/chrome/browser/webauthn/android/BUILD.gn +++ b/chrome/browser/webauthn/android/BUILD.gn -@@ -13,7 +13,6 @@ android_library("java") { +@@ -14,7 +14,6 @@ android_library("java") { deps = [ ":java_resources", ":jni_headers", @@ -1211,7 +1224,7 @@ diff --git a/chrome/browser/webauthn/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/webauthn/authenticator_request_dialog_model.cc b/chrome/browser/webauthn/authenticator_request_dialog_model.cc --- a/chrome/browser/webauthn/authenticator_request_dialog_model.cc +++ b/chrome/browser/webauthn/authenticator_request_dialog_model.cc -@@ -1742,10 +1742,6 @@ void AuthenticatorRequestDialogModel::PopulateMechanisms() { +@@ -1772,10 +1772,6 @@ void AuthenticatorRequestDialogModel::PopulateMechanisms() { if (cable_ui_type_) { switch (*cable_ui_type_) { case AuthenticatorRequestDialogModel::CableUIType::CABLE_V2_2ND_FACTOR: @@ -1225,7 +1238,7 @@ diff --git a/chrome/browser/webauthn/authenticator_request_dialog_model.cc b/chr diff --git a/chrome/browser/webauthn/cablev2_devices.cc b/chrome/browser/webauthn/cablev2_devices.cc --- a/chrome/browser/webauthn/cablev2_devices.cc +++ b/chrome/browser/webauthn/cablev2_devices.cc -@@ -365,6 +365,9 @@ void AddPairing(Profile* profile, std::unique_ptr pairing) { +@@ -366,6 +366,9 @@ void AddPairing(Profile* profile, std::unique_ptr pairing) { // This is called when doing a QR-code pairing with a phone and the phone // sends long-term pairing information during the handshake. The pairing // information is saved in preferences for future operations. @@ -1238,7 +1251,7 @@ diff --git a/chrome/browser/webauthn/cablev2_devices.cc b/chrome/browser/webauth diff --git a/chrome/test/android/BUILD.gn b/chrome/test/android/BUILD.gn --- a/chrome/test/android/BUILD.gn +++ b/chrome/test/android/BUILD.gn -@@ -242,8 +242,6 @@ android_library("chrome_java_integration_test_support") { +@@ -243,8 +243,6 @@ android_library("chrome_java_integration_test_support") { deps = [ ":chrome_java_test_support_common", @@ -1277,7 +1290,7 @@ diff --git a/components/externalauth/android/BUILD.gn b/components/externalauth/ "//base:base_java", "//components/embedder_support/android:util_java", "//content/public/android:content_java", -@@ -45,7 +43,6 @@ android_library("java") { +@@ -44,7 +42,6 @@ android_library("java") { robolectric_library("junit") { deps = [ ":java", @@ -1306,7 +1319,7 @@ diff --git a/components/externalauth/android/java/src/org/chromium/components/ex /** * Utility class for external authentication tools. -@@ -172,9 +168,7 @@ public class ExternalAuthUtils { +@@ -170,9 +166,7 @@ public class ExternalAuthUtils { * when it is updating. */ public boolean isGooglePlayServicesMissing(final Context context) { @@ -1317,7 +1330,7 @@ diff --git a/components/externalauth/android/java/src/org/chromium/components/ex } /** -@@ -191,7 +185,6 @@ public class ExternalAuthUtils { +@@ -189,7 +183,6 @@ public class ExternalAuthUtils { public boolean canUseGooglePlayServices(final UserRecoverableErrorHandler errorHandler) { Context context = ContextUtils.getApplicationContext(); final int resultCode = checkGooglePlayServicesAvailable(context); @@ -1325,7 +1338,7 @@ diff --git a/components/externalauth/android/java/src/org/chromium/components/ex // resultCode is some kind of error. Log.v(TAG, "Unable to use Google Play Services: %s", describeError(resultCode)); if (isUserRecoverableError(resultCode)) { -@@ -261,11 +254,7 @@ public class ExternalAuthUtils { +@@ -259,11 +252,7 @@ public class ExternalAuthUtils { * @return The code produced by calling the external code */ protected int checkGooglePlayServicesAvailable(final Context context) { @@ -1338,7 +1351,7 @@ diff --git a/components/externalauth/android/java/src/org/chromium/components/ex } /** -@@ -276,7 +265,7 @@ public class ExternalAuthUtils { +@@ -274,7 +263,7 @@ public class ExternalAuthUtils { * @return true If the code represents a user-recoverable error */ protected boolean isUserRecoverableError(final int errorCode) { @@ -1347,7 +1360,7 @@ diff --git a/components/externalauth/android/java/src/org/chromium/components/ex } /** -@@ -286,7 +275,7 @@ public class ExternalAuthUtils { +@@ -284,7 +273,7 @@ public class ExternalAuthUtils { * @return a textual description of the error code */ protected String describeError(final int errorCode) { @@ -1438,7 +1451,7 @@ diff --git a/components/gcm_driver/gcm_client_impl.cc b/components/gcm_driver/gc diff --git a/components/gcm_driver/instance_id/android/BUILD.gn b/components/gcm_driver/instance_id/android/BUILD.gn --- a/components/gcm_driver/instance_id/android/BUILD.gn +++ b/components/gcm_driver/instance_id/android/BUILD.gn -@@ -15,7 +15,6 @@ generate_jni("test_support_jni_headers") { +@@ -16,7 +16,6 @@ generate_jni("test_support_jni_headers") { android_library("instance_id_driver_java") { deps = [ @@ -1446,7 +1459,7 @@ diff --git a/components/gcm_driver/instance_id/android/BUILD.gn b/components/gcm "//base:base_java", "//base:jni_java", "//build/android:build_java", -@@ -30,14 +29,12 @@ android_library("instance_id_driver_java") { +@@ -31,14 +30,12 @@ android_library("instance_id_driver_java") { sources = [ "java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java", @@ -1564,7 +1577,7 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com diff --git a/components/media_router/browser/android/BUILD.gn b/components/media_router/browser/android/BUILD.gn --- a/components/media_router/browser/android/BUILD.gn +++ b/components/media_router/browser/android/BUILD.gn -@@ -11,10 +11,6 @@ android_library("java") { +@@ -12,10 +12,6 @@ android_library("java") { resources_package = "org.chromium.components.media_router" deps = [ ":java_resources", @@ -1575,7 +1588,7 @@ diff --git a/components/media_router/browser/android/BUILD.gn b/components/media "//base:base_java", "//base:jni_java", "//build/android:build_java", -@@ -76,8 +72,6 @@ android_library("java") { +@@ -77,8 +73,6 @@ android_library("java") { android_library("cast_options_provider_java") { sources = [ "java/src/org/chromium/components/media_router/caf/CastOptionsProvider.java" ] deps = [ @@ -1584,7 +1597,7 @@ diff --git a/components/media_router/browser/android/BUILD.gn b/components/media ] } -@@ -103,7 +97,6 @@ android_library("test_support_java") { +@@ -104,7 +98,6 @@ android_library("test_support_java") { ":java", ":java_resources", ":test_jni_headers", @@ -1592,7 +1605,7 @@ diff --git a/components/media_router/browser/android/BUILD.gn b/components/media "//base:base_java", "//base:base_java_test_support", "//base:jni_java", -@@ -147,10 +140,6 @@ robolectric_library("junit") { +@@ -148,10 +141,6 @@ robolectric_library("junit") { deps = [ ":java", ":test_support_java", @@ -2147,7 +2160,7 @@ diff --git a/components/media_router/browser/android/java/src/org/chromium/compo private static final String TAG = "CafMR"; protected static final List NO_SINKS = Collections.emptyList(); -@@ -167,7 +164,6 @@ public abstract class CafBaseMediaRouteProvider +@@ -165,7 +162,6 @@ public abstract class CafBaseMediaRouteProvider // current session and clean up the routes (can't wait for session ending as the signal // might be delayed). sessionController().endSession(); @@ -2155,7 +2168,7 @@ diff --git a/components/media_router/browser/android/java/src/org/chromium/compo } if (mPendingCreateRouteRequestInfo != null) { cancelPendingRequest("Request replaced"); -@@ -196,9 +192,6 @@ public abstract class CafBaseMediaRouteProvider +@@ -194,9 +190,6 @@ public abstract class CafBaseMediaRouteProvider mManager.onCreateRouteRequestError("The sink does not exist", nativeRequestId); } @@ -2165,7 +2178,7 @@ diff --git a/components/media_router/browser/android/java/src/org/chromium/compo mPendingCreateRouteRequestInfo = new CreateRouteRequestInfo(source, sink, presentationId, origin, tabId, isOffTheRecord, nativeRequestId, targetRouteInfo); -@@ -225,100 +218,6 @@ public abstract class CafBaseMediaRouteProvider +@@ -223,100 +216,6 @@ public abstract class CafBaseMediaRouteProvider removeRoute(routeId, /* error= */ null); } @@ -2985,7 +2998,7 @@ diff --git a/components/media_router/test/android/cast_emulator/BUILD.gn b/compo diff --git a/components/module_installer/android/BUILD.gn b/components/module_installer/android/BUILD.gn --- a/components/module_installer/android/BUILD.gn +++ b/components/module_installer/android/BUILD.gn -@@ -33,11 +33,9 @@ android_library("module_installer_java") { +@@ -34,11 +34,9 @@ android_library("module_installer_java") { ] deps = [ @@ -2997,7 +3010,7 @@ diff --git a/components/module_installer/android/BUILD.gn b/components/module_in "//third_party/androidx:androidx_annotation_annotation_java", ] -@@ -57,11 +55,9 @@ robolectric_binary("module_installer_junit_tests") { +@@ -58,11 +56,9 @@ robolectric_binary("module_installer_junit_tests") { ] deps = [ ":module_installer_java", @@ -3012,7 +3025,7 @@ diff --git a/components/module_installer/android/BUILD.gn b/components/module_in diff --git a/components/signin/public/android/BUILD.gn b/components/signin/public/android/BUILD.gn --- a/components/signin/public/android/BUILD.gn +++ b/components/signin/public/android/BUILD.gn -@@ -2,8 +2,6 @@ import("//build/config/android/rules.gni") +@@ -3,8 +3,6 @@ import("//third_party/jni_zero/jni_zero.gni") android_library("java") { deps = [ @@ -3021,7 +3034,7 @@ diff --git a/components/signin/public/android/BUILD.gn b/components/signin/publi "//base:base_java", "//base:jni_java", "//build/android:build_java", -@@ -177,7 +175,6 @@ robolectric_library("junit") { +@@ -178,7 +176,6 @@ robolectric_library("junit") { deps = [ ":java", ":signin_java_test_support", @@ -3032,7 +3045,7 @@ diff --git a/components/signin/public/android/BUILD.gn b/components/signin/publi diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountRenameChecker.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountRenameChecker.java --- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountRenameChecker.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountRenameChecker.java -@@ -11,10 +11,6 @@ import androidx.annotation.Nullable; +@@ -10,10 +10,6 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.annotation.WorkerThread; @@ -3065,7 +3078,7 @@ diff --git a/components/signin/public/android/java/src/org/chromium/components/s diff --git a/components/webauthn/android/BUILD.gn b/components/webauthn/android/BUILD.gn --- a/components/webauthn/android/BUILD.gn +++ b/components/webauthn/android/BUILD.gn -@@ -6,8 +6,6 @@ import("//build/config/android/rules.gni") +@@ -7,8 +7,6 @@ import("//third_party/jni_zero/jni_zero.gni") generate_jni("jni_headers") { sources = [ @@ -3074,10 +3087,10 @@ diff --git a/components/webauthn/android/BUILD.gn b/components/webauthn/android/ "java/src/org/chromium/components/webauthn/InternalAuthenticator.java", "java/src/org/chromium/components/webauthn/WebAuthnBrowserBridge.java", ] -@@ -18,13 +16,8 @@ android_library("java") { - sources = [ - "java/src/org/chromium/components/webauthn/AuthenticatorFactory.java", +@@ -21,13 +19,8 @@ android_library("java") { "java/src/org/chromium/components/webauthn/AuthenticatorImpl.java", + "java/src/org/chromium/components/webauthn/AuthenticatorIncognitoConfirmationBottomsheet.java", + "java/src/org/chromium/components/webauthn/Barrier.java", - "java/src/org/chromium/components/webauthn/CredManHelper.java", "java/src/org/chromium/components/webauthn/CredManMetricsHelper.java", - "java/src/org/chromium/components/webauthn/Fido2Api.java", @@ -3088,17 +3101,17 @@ diff --git a/components/webauthn/android/BUILD.gn b/components/webauthn/android/ "java/src/org/chromium/components/webauthn/GetAssertionResponseCallback.java", "java/src/org/chromium/components/webauthn/GetMatchingCredentialIdsResponseCallback.java", "java/src/org/chromium/components/webauthn/InternalAuthenticator.java", -@@ -35,9 +28,6 @@ android_library("java") { - ] +@@ -39,9 +32,6 @@ android_library("java") { deps = [ + ":java_resources", - "$google_play_services_package:google_play_services_base_java", - "$google_play_services_package:google_play_services_basement_java", - "$google_play_services_package:google_play_services_tasks_java", "//base:base_java", "//base:jni_java", "//build/android:build_java", -@@ -90,8 +80,6 @@ android_library("test_support_java") { +@@ -96,8 +86,6 @@ android_library("test_support_java") { source_set("android") { sources = [ @@ -3110,15 +3123,15 @@ diff --git a/components/webauthn/android/BUILD.gn b/components/webauthn/android/ diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java -@@ -12,7 +12,6 @@ import android.os.Build; - import android.util.Pair; +@@ -14,7 +14,6 @@ import android.util.Pair; + import androidx.annotation.Nullable; import org.chromium.base.Callback; -import org.chromium.base.PackageUtils; import org.chromium.base.metrics.RecordHistogram; import org.chromium.blink.mojom.Authenticator; import org.chromium.blink.mojom.AuthenticatorStatus; -@@ -59,9 +58,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -71,9 +70,6 @@ public final class AuthenticatorImpl implements Authenticator { /** The payment information to be added to the "clientDataJson". */ private PaymentOptions mPayment; @@ -3128,7 +3141,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut private MakeCredential_Response mMakeCredentialCallback; private GetAssertion_Response mGetAssertionCallback; // A queue is used to store pending IsUserVerifyingPlatformAuthenticatorAvailable request -@@ -70,14 +66,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -82,14 +78,6 @@ public final class AuthenticatorImpl implements Authenticator { // situation does not matter because all pending requests will return the same value. private Queue> mIsUserVerifyingPlatformAuthenticatorAvailableCallbackQueue = new LinkedList<>(); @@ -3143,10 +3156,10 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut /** * Builds the Authenticator service implementation. -@@ -97,21 +85,6 @@ public final class AuthenticatorImpl implements Authenticator { - mRenderFrameHost = renderFrameHost; +@@ -113,21 +101,6 @@ public final class AuthenticatorImpl implements Authenticator { mOrigin = mRenderFrameHost.getLastCommittedOrigin(); mTopOrigin = topOrigin; + mCreateConfirmationUiDelegate = createConfirmationUiDelegate; - - mGmsCorePackageVersion = PackageUtils.getPackageVersion(GMSCORE_PACKAGE_NAME); - } @@ -3165,7 +3178,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } /** -@@ -141,17 +114,9 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -157,11 +130,9 @@ public final class AuthenticatorImpl implements Authenticator { mMakeCredentialCallback = callback; mIsOperationPending = true; @@ -3174,18 +3187,25 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut - return; - } ++ // Fido2 not supported on Bromite ++ onError(AuthenticatorStatus.NOT_IMPLEMENTED); + if (mCreateConfirmationUiDelegate != null) { + if (!mCreateConfirmationUiDelegate.show( + () +@@ -176,12 +147,6 @@ public final class AuthenticatorImpl implements Authenticator { + + private void continueMakeCredential( + PublicKeyCredentialCreationOptions options, MakeCredential_Response callback) { - mPendingFido2CredentialRequest = getFido2CredentialRequest(); - mPendingFido2CredentialRequest.handleMakeCredentialRequest(mContext, options, - mRenderFrameHost, /*maybeClientDataHash=*/null, mOrigin, - (status, response) - -> onRegisterResponse(status, response), - status -> onError(status)); -+ // Fido2 not supported on Bromite -+ onError(AuthenticatorStatus.NOT_IMPLEMENTED); } @Override -@@ -165,16 +130,8 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -195,16 +160,8 @@ public final class AuthenticatorImpl implements Authenticator { mGetAssertionCallback = callback; mIsOperationPending = true; @@ -3204,7 +3224,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } @Override -@@ -186,15 +143,8 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -216,15 +173,8 @@ public final class AuthenticatorImpl implements Authenticator { callback.call(isUvpaa); }; @@ -3222,7 +3242,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } /** -@@ -203,7 +153,7 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -233,7 +183,7 @@ public final class AuthenticatorImpl implements Authenticator { * version. */ public boolean isGetMatchingCredentialIdsSupported() { @@ -3231,7 +3251,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } /** -@@ -217,32 +167,13 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -247,32 +197,13 @@ public final class AuthenticatorImpl implements Authenticator { */ public void getMatchingCredentialIds(String relyingPartyId, byte[][] credentialIds, boolean requireThirdPartyPayment, GetMatchingCredentialIdsResponseCallback callback) { @@ -3266,7 +3286,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } @Override -@@ -254,8 +185,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -284,8 +215,6 @@ public final class AuthenticatorImpl implements Authenticator { if (!mIsOperationPending || mGetAssertionCallback == null) { return; } @@ -3275,7 +3295,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } /** -@@ -297,7 +226,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -327,7 +256,6 @@ public final class AuthenticatorImpl implements Authenticator { } else if (mGetAssertionCallback != null) { mGetAssertionCallback.call(status, null, null); } @@ -3283,7 +3303,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut cleanupRequest(); } -@@ -305,13 +233,10 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -335,13 +263,10 @@ public final class AuthenticatorImpl implements Authenticator { mIsOperationPending = false; mMakeCredentialCallback = null; mGetAssertionCallback = null; @@ -3418,7 +3438,7 @@ diff --git a/content/browser/push_messaging/push_messaging_manager.cc b/content/ diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn --- a/content/public/android/BUILD.gn +++ b/content/public/android/BUILD.gn -@@ -141,10 +141,6 @@ android_library("content_full_java") { +@@ -142,10 +142,6 @@ android_library("content_full_java") { deps = [ ":content_java_resources", ":content_main_dex_java", @@ -3432,7 +3452,7 @@ diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn -@@ -3394,10 +3394,6 @@ if (is_android) { +@@ -3405,10 +3405,6 @@ if (is_android) { testonly = true sources = content_java_sources_needing_jni deps = [ @@ -3446,7 +3466,7 @@ diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn diff --git a/device/BUILD.gn b/device/BUILD.gn --- a/device/BUILD.gn +++ b/device/BUILD.gn -@@ -504,9 +504,6 @@ if (is_android) { +@@ -506,9 +506,6 @@ if (is_android) { "gamepad/android/junit/src/org/chromium/device/gamepad/GamepadMappingsTest.java", ] deps = [ @@ -3472,7 +3492,7 @@ diff --git a/remoting/android/client_java_tmpl.gni b/remoting/android/client_jav diff --git a/services/BUILD.gn b/services/BUILD.gn --- a/services/BUILD.gn +++ b/services/BUILD.gn -@@ -122,11 +122,6 @@ if (is_android) { +@@ -123,11 +123,6 @@ if (is_android) { "shape_detection/android/junit/src/org/chromium/shape_detection/BitmapUtilsTest.java", ] deps = [ @@ -3484,7 +3504,7 @@ diff --git a/services/BUILD.gn b/services/BUILD.gn "//base:base_java", "//base:base_java_test_support", "//base:base_junit_test_support", -@@ -156,10 +151,6 @@ if (is_android) { +@@ -157,10 +152,6 @@ if (is_android) { "shape_detection/android/javatests/src/org/chromium/shape_detection/TextDetectionImplTest.java", ] deps = [ @@ -3498,7 +3518,7 @@ diff --git a/services/BUILD.gn b/services/BUILD.gn diff --git a/services/device/geolocation/BUILD.gn b/services/device/geolocation/BUILD.gn --- a/services/device/geolocation/BUILD.gn +++ b/services/device/geolocation/BUILD.gn -@@ -166,10 +166,6 @@ if (is_android) { +@@ -167,10 +167,6 @@ if (is_android) { deps = [ ":geolocation_jni_headers", @@ -3512,7 +3532,7 @@ diff --git a/services/device/geolocation/BUILD.gn b/services/device/geolocation/ diff --git a/services/shape_detection/BUILD.gn b/services/shape_detection/BUILD.gn --- a/services/shape_detection/BUILD.gn +++ b/services/shape_detection/BUILD.gn -@@ -115,8 +115,6 @@ if (is_android) { +@@ -116,8 +116,6 @@ if (is_android) { ] deps = [ @@ -3548,7 +3568,7 @@ diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD. } # TODO(crbug.com/1366370) Remove this once all depencencies are updated to -@@ -978,212 +969,6 @@ if (!limit_android_deps) { +@@ -767,212 +758,6 @@ if (!limit_android_deps) { ] } @@ -3761,7 +3781,7 @@ diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD. # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. android_aar_prebuilt("com_google_android_material_material_java") { -@@ -1228,62 +1013,6 @@ if (!limit_android_deps) { +@@ -1017,62 +802,6 @@ if (!limit_android_deps) { ] } @@ -3824,7 +3844,7 @@ diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD. # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("com_google_guava_guava_android_java") { -@@ -1617,19 +1346,6 @@ if (!limit_android_deps) { +@@ -1406,19 +1135,6 @@ if (!limit_android_deps) { is_robolectric = true } @@ -3844,7 +3864,7 @@ diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD. # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_utils_java") { jar_path = "libs/org_robolectric_utils/utils-4.10.3.jar" -@@ -2009,290 +1725,6 @@ if (!limit_android_deps) { +@@ -1878,290 +1594,6 @@ if (!limit_android_deps) { deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ] } @@ -4193,27 +4213,5 @@ diff --git a/third_party/cardboard/BUILD.gn b/third_party/cardboard/BUILD.gn "//third_party/android_deps:protobuf_lite_runtime_java", "//third_party/androidx:androidx_annotation_annotation_jvm_java", "//third_party/androidx:androidx_appcompat_appcompat_java", -diff --git a/weblayer/browser/java/BUILD.gn b/weblayer/browser/java/BUILD.gn ---- a/weblayer/browser/java/BUILD.gn -+++ b/weblayer/browser/java/BUILD.gn -@@ -91,7 +91,6 @@ android_library("base_module_java") { - srcjar_deps = [ ":base_module_jni" ] - deps = [ - ":base_module_interfaces_java", -- "$google_play_services_package:google_play_services_basement_java", - "//base:base_java", - "//base:jni_java", - "//base:process_launcher_java", -diff --git a/weblayer/public/java/BUILD.gn b/weblayer/public/java/BUILD.gn ---- a/weblayer/public/java/BUILD.gn -+++ b/weblayer/public/java/BUILD.gn -@@ -139,7 +139,6 @@ android_library("java") { - "//weblayer/browser/java:interfaces_java", - - # TODO(rayankans): Figure out why this isn't being inherited from //weblayer/browser/java. -- "$google_play_services_package:google_play_services_basement_java", - ] - - proguard_configs = [ "proguard.flags" ] -- 2.25.1 diff --git a/build/patches/Remove-navigator.connection-info.patch b/build/patches/Remove-navigator.connection-info.patch index de3172c2..bd56bd8b 100644 --- a/build/patches/Remove-navigator.connection-info.patch +++ b/build/patches/Remove-navigator.connection-info.patch @@ -73,7 +73,7 @@ diff --git a/third_party/blink/renderer/platform/network/network_state_notifier. diff --git a/third_party/blink/renderer/platform/network/network_state_notifier.h b/third_party/blink/renderer/platform/network/network_state_notifier.h --- a/third_party/blink/renderer/platform/network/network_state_notifier.h +++ b/third_party/blink/renderer/platform/network/network_state_notifier.h -@@ -123,7 +123,7 @@ class PLATFORM_EXPORT NetworkStateNotifier { +@@ -124,7 +124,7 @@ class PLATFORM_EXPORT NetworkStateNotifier { scoped_refptr task_runner_; }; diff --git a/build/patches/Remove-voice-recognition-integration.patch b/build/patches/Remove-voice-recognition-integration.patch index 03b9e834..b11d7e26 100644 --- a/build/patches/Remove-voice-recognition-integration.patch +++ b/build/patches/Remove-voice-recognition-integration.patch @@ -129,7 +129,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSess diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java -@@ -62,7 +62,6 @@ import org.chromium.chrome.browser.native_page.ContextMenuManager; +@@ -64,7 +64,6 @@ import org.chromium.chrome.browser.native_page.ContextMenuManager; import org.chromium.chrome.browser.omnibox.OmniboxFocusReason; import org.chromium.chrome.browser.omnibox.OmniboxStub; import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteControllerProvider; @@ -137,7 +137,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.ProfileKey; -@@ -117,8 +116,7 @@ import java.util.List; +@@ -119,8 +118,7 @@ import java.util.List; */ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvider, TemplateUrlServiceObserver, @@ -147,7 +147,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. private static final String TAG = "NewTabPage"; // Key for the scroll position data that may be stored in a navigation entry. -@@ -148,7 +146,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -151,7 +149,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide protected boolean mSearchProviderHasLogo; protected OmniboxStub mOmniboxStub; @@ -155,7 +155,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. // The timestamp at which the constructor was called. protected final long mConstructedTimeNs; -@@ -240,8 +237,7 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -243,8 +240,7 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide @Override public boolean isVoiceSearchEnabled() { @@ -165,7 +165,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. } @Override -@@ -249,21 +245,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -252,21 +248,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide if (mIsDestroyed) return; FeedReliabilityLogger feedReliabilityLogger = mFeedSurfaceProvider.getReliabilityLogger(); @@ -187,7 +187,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. } @Override -@@ -767,12 +748,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -785,12 +766,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide mOmniboxStub.addUrlFocusChangeListener(feedReliabilityLogger); } } @@ -200,7 +200,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. } @Override -@@ -783,11 +758,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -801,11 +776,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide } } @@ -212,9 +212,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. /** Adds an observer to be notified on most visited tile clicks. */ public void addMostVisitedTileClickObserver(MostVisitedTileClickObserver observer) { mMostVisitedTileClickObservers.addObserver(observer); -@@ -806,9 +776,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide - mLastShownTimeNs = System.nanoTime(); +@@ -825,9 +795,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide RecordUserAction.record("MobileNTPShown"); + mJankTracker.startTrackingScenario(JankScenario.NEW_TAB_PAGE); SuggestionsMetrics.recordSurfaceVisible(); - - FeatureNotificationUtils.registerIPHCallback(FeatureType.VOICE_SEARCH, @@ -222,7 +222,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. } /** Records UMA for the NTP being hidden and the time spent on it. */ -@@ -816,7 +783,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -836,7 +803,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide RecordHistogram.recordMediumTimesHistogram("NewTabPage.TimeSpent", (System.nanoTime() - mLastShownTimeNs) / TimeUtils.NANOSECONDS_PER_MILLISECOND); SuggestionsMetrics.recordSurfaceHidden(); @@ -230,7 +230,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. } /** -@@ -914,9 +880,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -934,9 +900,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide } mFeedSurfaceProvider.destroy(); mTab.getWindowAndroid().removeContextMenuCloseListener(mContextMenuManager); @@ -243,10 +243,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxMediator.java -@@ -78,7 +78,6 @@ class SearchBoxMediator implements DestroyObserver, NativeInitObserver { - - ColorStateList colorStateList = - ThemeUtils.getThemedToolbarIconTint(mContext, BrandedColorScheme.APP_DEFAULT); +@@ -86,7 +86,6 @@ class SearchBoxMediator implements DestroyObserver, NativeInitObserver { + ? AppCompatResources.getColorStateList(mContext, + R.color.default_icon_color_accent1_container_tint_list) + : ThemeUtils.getThemedToolbarIconTint(mContext, BrandedColorScheme.APP_DEFAULT); - mModel.set(SearchBoxProperties.VOICE_SEARCH_COLOR_STATE_LIST, colorStateList); } @@ -262,7 +262,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer; import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher; import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl; -@@ -403,14 +402,12 @@ public class SearchActivity extends AsyncInitializationActivity +@@ -404,14 +403,12 @@ public class SearchActivity extends AsyncInitializationActivity // will navigate to Tabbed mode. Investigate whether this can inflate // the tabbed mode layout in the background instead of CCTs. CustomTabsConnection.getInstance().warmup(0); @@ -278,7 +278,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se RecordUserAction.record("SearchWidget.WidgetSelected"); getActivityDelegate().onFinishDeferredInitialization(); -@@ -481,8 +478,7 @@ public class SearchActivity extends AsyncInitializationActivity +@@ -482,8 +479,7 @@ public class SearchActivity extends AsyncInitializationActivity if (isFromQuickActionSearchWidget()) { recordQuickActionSearchType(searchType); } @@ -397,15 +397,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -92,7 +92,6 @@ import org.chromium.chrome.browser.omnibox.OverrideUrlLoadingDelegate; - import org.chromium.chrome.browser.omnibox.SearchEngineLogoUtils; +@@ -92,7 +92,6 @@ import org.chromium.chrome.browser.omnibox.SearchEngineLogoUtils; import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener; + import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsDropdownScrollListener; import org.chromium.chrome.browser.omnibox.suggestions.history_clusters.HistoryClustersProcessor.OpenHistoryClustersDelegate; -import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler; import org.chromium.chrome.browser.page_info.ChromePageInfo; import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations; import org.chromium.chrome.browser.price_tracking.PriceTrackingFeatures; -@@ -2198,10 +2197,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -2207,10 +2206,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve return mLocationBar.getOmniboxStub(); } @@ -419,7 +419,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java -@@ -94,8 +94,6 @@ import org.chromium.chrome.browser.omnibox.OmniboxFocusReason; +@@ -96,8 +96,6 @@ import org.chromium.chrome.browser.omnibox.OmniboxFocusReason; import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; import org.chromium.chrome.browser.omnibox.suggestions.action.OmniboxActionDelegateImpl; import org.chromium.chrome.browser.omnibox.suggestions.history_clusters.HistoryClustersProcessor.OpenHistoryClustersDelegate; @@ -428,7 +428,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi import org.chromium.chrome.browser.paint_preview.DemoPaintPreview; import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer; import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher; -@@ -287,7 +285,6 @@ public class RootUiCoordinator +@@ -295,7 +293,6 @@ public class RootUiCoordinator protected OneshotSupplierImpl mPromoShownOneshotSupplier = new OneshotSupplierImpl<>(); protected Supplier mStartSurfaceParentTabSupplier; @Nullable @@ -436,7 +436,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi private MediaCaptureOverlayController mCaptureController; private @Nullable ScrollCaptureManager mScrollCaptureManager; protected final ActivityLifecycleDispatcher mActivityLifecycleDispatcher; -@@ -584,9 +581,6 @@ public class RootUiCoordinator +@@ -594,9 +591,6 @@ public class RootUiCoordinator } if (mToolbarManager != null) { @@ -446,7 +446,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi mToolbarManager.destroy(); mToolbarManager = null; } -@@ -1173,19 +1167,11 @@ public class RootUiCoordinator +@@ -1194,19 +1188,11 @@ public class RootUiCoordinator new VoiceToolbarButtonController.VoiceSearchDelegate() { @Override public boolean isVoiceSearchEnabled() { @@ -467,7 +467,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi } }; TranslateToolbarButtonController translateToolbarButtonController = -@@ -1295,13 +1281,6 @@ public class RootUiCoordinator +@@ -1316,13 +1302,6 @@ public class RootUiCoordinator if (!mSupportsAppMenuSupplier.getAsBoolean()) { mToolbarManager.getToolbar().disableMenuButton(); } @@ -484,7 +484,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi diff --git a/chrome/browser/ui/android/omnibox/BUILD.gn b/chrome/browser/ui/android/omnibox/BUILD.gn --- a/chrome/browser/ui/android/omnibox/BUILD.gn +++ b/chrome/browser/ui/android/omnibox/BUILD.gn -@@ -138,7 +138,6 @@ android_library("java") { +@@ -139,7 +139,6 @@ android_library("java") { "java/src/org/chromium/chrome/browser/omnibox/suggestions/tail/TailSuggestionView.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/tail/TailSuggestionViewBinder.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/tail/TailSuggestionViewProperties.java", @@ -518,7 +518,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java -@@ -39,7 +39,6 @@ import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteDelegate; +@@ -40,7 +40,6 @@ import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteDelegate; import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsDropdownScrollListener; import org.chromium.chrome.browser.omnibox.suggestions.basic.BasicSuggestionProcessor.BookmarkState; import org.chromium.chrome.browser.omnibox.suggestions.history_clusters.HistoryClustersProcessor.OpenHistoryClustersDelegate; @@ -526,7 +526,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManager; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory; -@@ -389,13 +388,6 @@ public class LocationBarCoordinator +@@ -390,13 +389,6 @@ public class LocationBarCoordinator return mLocationBarLayout.getSecurityIconView(); } @@ -540,7 +540,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow @Nullable @Override public OmniboxStub getOmniboxStub() { -@@ -681,11 +673,6 @@ public class LocationBarCoordinator +@@ -682,11 +674,6 @@ public class LocationBarCoordinator // End tablet-specific methods. @@ -555,7 +555,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java -@@ -51,7 +51,6 @@ import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; +@@ -52,7 +52,6 @@ import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; import org.chromium.chrome.browser.omnibox.status.StatusCoordinator; import org.chromium.chrome.browser.omnibox.styles.OmniboxResourceProvider; import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator; @@ -563,7 +563,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import org.chromium.chrome.browser.prefetch.settings.PreloadPagesSettingsBridge; import org.chromium.chrome.browser.prefetch.settings.PreloadPagesState; import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManager; -@@ -87,8 +86,8 @@ import java.util.function.BooleanSupplier; +@@ -88,8 +87,8 @@ import java.util.function.BooleanSupplier; * currently, migration of this logic out of LocationBarLayout is in progress. */ class LocationBarMediator @@ -574,7 +574,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow ComponentCallbacks, TemplateUrlService.TemplateUrlServiceObserver, BackPressHandler { private static final int ICON_FADE_ANIMATION_DURATION_MS = 150; -@@ -148,7 +147,6 @@ class LocationBarMediator +@@ -149,7 +148,6 @@ class LocationBarMediator }; private final LocationBarLayout mLocationBarLayout; @@ -582,7 +582,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow private final LocationBarDataProvider mLocationBarDataProvider; private StatusCoordinator mStatusCoordinator; private AutocompleteCoordinator mAutocompleteCoordinator; -@@ -218,8 +216,6 @@ class LocationBarMediator +@@ -219,8 +217,6 @@ class LocationBarMediator mLocationBarDataProvider.addObserver(this); mOverrideUrlLoadingDelegate = overrideUrlLoadingDelegate; mLocaleManager = localeManager; @@ -591,7 +591,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow mProfileSupplier = profileSupplier; mProfileSupplier.addObserver(mCallbackController.makeCancelable(this::setProfile)); mPrivacyPreferencesManager = privacyPreferencesManager; -@@ -263,8 +259,6 @@ class LocationBarMediator +@@ -264,8 +260,6 @@ class LocationBarMediator mAutocompleteCoordinator = null; mUrlCoordinator = null; mPrivacyPreferencesManager = null; @@ -600,7 +600,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow mLocationBarDataProvider.removeObserver(this); mDeferredNativeRunnables.clear(); mUrlFocusChangeListeners.clear(); -@@ -371,11 +365,6 @@ class LocationBarMediator +@@ -372,11 +366,6 @@ class LocationBarMediator mLocationBarLayout.setUnfocusedWidth(unfocusedWidth); } @@ -612,7 +612,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow /* package */ void setLensControllerForTesting(LensController lensController) { mLensController = lensController; } -@@ -593,8 +582,6 @@ class LocationBarMediator +@@ -594,8 +583,6 @@ class LocationBarMediator mUrlCoordinator.setKeyboardVisibility(false, false); RecordUserAction.record("MobileOmniboxVoiceSearch"); @@ -621,7 +621,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow } /** package */ void lensButtonClicked(View view) { -@@ -1041,8 +1028,7 @@ class LocationBarMediator +@@ -1042,8 +1029,7 @@ class LocationBarMediator private boolean shouldShowMicButton() { if (shouldShowDeleteButton()) return false; @@ -631,7 +631,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow return false; } boolean isToolbarMicEnabled = mIsToolbarMicEnabledSupplier.getAsBoolean(); -@@ -1201,7 +1187,6 @@ class LocationBarMediator +@@ -1202,7 +1188,6 @@ class LocationBarMediator // This method needs to be called first as it computes |mBrandedColorScheme|. updateBrandedColorScheme(); @@ -639,7 +639,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow updateLensButtonColors(); } -@@ -1288,16 +1273,6 @@ class LocationBarMediator +@@ -1289,16 +1274,6 @@ class LocationBarMediator } } @@ -656,7 +656,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow @Override public void addUrlFocusChangeListener(UrlFocusChangeListener listener) { mUrlFocusChangeListeners.addObserver(listener); -@@ -1313,29 +1288,10 @@ class LocationBarMediator +@@ -1314,29 +1289,10 @@ class LocationBarMediator return mUrlHasFocus; } @@ -686,7 +686,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow public void setSearchQuery(String query) { if (TextUtils.isEmpty(query)) return; -@@ -1354,21 +1310,9 @@ class LocationBarMediator +@@ -1355,21 +1311,9 @@ class LocationBarMediator mUrlCoordinator.setKeyboardVisibility(true, false); } diff --git a/build/patches/Remove-window-name-on-cross-origin-navigation.patch b/build/patches/Remove-window-name-on-cross-origin-navigation.patch index ede3d192..2dcdf64f 100644 --- a/build/patches/Remove-window-name-on-cross-origin-navigation.patch +++ b/build/patches/Remove-window-name-on-cross-origin-navigation.patch @@ -13,7 +13,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc --- a/third_party/blink/renderer/core/loader/document_loader.cc +++ b/third_party/blink/renderer/core/loader/document_loader.cc -@@ -2564,7 +2564,7 @@ void DocumentLoader::CommitNavigation() { +@@ -2620,7 +2620,7 @@ void DocumentLoader::CommitNavigation() { // that the name would be nulled and if the name is accessed after we will // fire a UseCounter. If we decide to move forward with this change, we'd // actually clean the name here. @@ -22,7 +22,7 @@ diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_p frame_->Tree().ExperimentalSetNulledName(); } -@@ -2575,6 +2575,7 @@ void DocumentLoader::CommitNavigation() { +@@ -2631,6 +2631,7 @@ void DocumentLoader::CommitNavigation() { // TODO(shuuran): CrossSiteCrossBrowsingContextGroupSetNulledName will just // record the fact that the name would be nulled and if the name is accessed // after we will fire a UseCounter. diff --git a/build/patches/Restore-Search-Ready-Omnibox-flag.patch b/build/patches/Restore-Search-Ready-Omnibox-flag.patch index 858a15fa..25fbce4a 100644 --- a/build/patches/Restore-Search-Ready-Omnibox-flag.patch +++ b/build/patches/Restore-Search-Ready-Omnibox-flag.patch @@ -22,7 +22,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -9520,6 +9520,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9811,6 +9811,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDesksTemplatesDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kDesksTemplates)}, #endif @@ -37,7 +37,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -3270,6 +3270,11 @@ +@@ -3324,6 +3324,11 @@ // Added feature, for testing. expiry deep in future. "expiry_milestone": 116 }, @@ -52,7 +52,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4340,6 +4340,11 @@ const char kSendTabToSelfV2Description[] = +@@ -4420,6 +4420,11 @@ const char kSendTabToSelfV2Description[] = "Enables new received tab " "UI shown next to the profile icon instead of using system notifications."; @@ -67,7 +67,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2548,6 +2548,9 @@ extern const char kShowScrollableMVTOnNTPAndroidDescription[]; +@@ -2598,6 +2598,9 @@ extern const char kShowScrollableMVTOnNTPAndroidDescription[]; extern const char kSendTabToSelfV2Name[]; extern const char kSendTabToSelfV2Description[]; @@ -80,7 +80,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -280,6 +280,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -287,6 +287,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kReaderModeInCCT, &kRecordSuppressionMetrics, &kReengagementNotification, @@ -88,7 +88,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse &kRelatedSearches, &kReportParentalControlSitesChild, &kRequestDesktopSiteDefaults, -@@ -464,6 +465,10 @@ BASE_FEATURE(kAvoidSelectedTabFocusOnLayoutDoneShowing, +@@ -468,6 +469,10 @@ BASE_FEATURE(kAvoidSelectedTabFocusOnLayoutDoneShowing, "AvoidSelectedTabFocusOnLayoutDoneShowing", base::FEATURE_ENABLED_BY_DEFAULT); @@ -102,7 +102,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -164,6 +164,7 @@ BASE_DECLARE_FEATURE(kRequestDesktopSiteDefaultsDowngrade); +@@ -170,6 +170,7 @@ BASE_DECLARE_FEATURE(kRequestDesktopSiteDefaultsDowngrade); BASE_DECLARE_FEATURE(kRequestDesktopSiteDefaultsLogging); BASE_DECLARE_FEATURE(kRestoreTabsOnFRE); BASE_DECLARE_FEATURE(kSearchEnginesPromoV3); @@ -113,7 +113,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -319,6 +319,7 @@ public abstract class ChromeFeatureList { +@@ -320,6 +320,7 @@ public abstract class ChromeFeatureList { "MessagesForAndroidInfrastructure"; public static final String MESSAGES_FOR_ANDROID_PERMISSION_UPDATE = "MessagesForAndroidPermissionUpdate"; @@ -140,20 +140,20 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow DropdownItemViewInfoListBuilder(@NonNull Supplier tabSupplier, BookmarkState bookmarkState, OpenHistoryClustersDelegate openHistoryClustersDelegate) { -@@ -92,8 +94,10 @@ class DropdownItemViewInfoListBuilder { +@@ -91,8 +93,10 @@ class DropdownItemViewInfoListBuilder { mDividerLineProcessor = new DividerLineProcessor(context); } mHeaderProcessor = new HeaderProcessor(context); - registerSuggestionProcessor(new EditUrlSuggestionProcessor( -- context, host, delegate, mImageSupplier, mActivityTabSupplier, shareSupplier)); +- context, host, mImageSupplier, mActivityTabSupplier, shareSupplier)); + mEditUrlSuggestionProcessor = new EditUrlSuggestionProcessor( -+ context, host, delegate, mImageSupplier, mActivityTabSupplier, shareSupplier); ++ context, host, mImageSupplier, mActivityTabSupplier, shareSupplier); + registerSuggestionProcessor(mEditUrlSuggestionProcessor); + registerSuggestionProcessor( new AnswerSuggestionProcessor(context, host, textProvider, mImageSupplier)); registerSuggestionProcessor( -@@ -202,6 +206,9 @@ class DropdownItemViewInfoListBuilder { +@@ -201,6 +205,9 @@ class DropdownItemViewInfoListBuilder { /** Signals that native initialization has completed. */ void onNativeInitialized() { mHeaderProcessor.onNativeInitialized(); diff --git a/build/patches/Restore-Simplified-NTP-launch.patch b/build/patches/Restore-Simplified-NTP-launch.patch index 96d63b54..d1ae2954 100644 --- a/build/patches/Restore-Simplified-NTP-launch.patch +++ b/build/patches/Restore-Simplified-NTP-launch.patch @@ -30,7 +30,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -552,6 +552,7 @@ chrome_java_resources = [ +@@ -561,6 +561,7 @@ chrome_java_resources = [ "java/res/layout/new_tab_page_incognito.xml", "java/res/layout/new_tab_page_layout.xml", "java/res/layout/new_tab_page_tile_grid_placeholder.xml", @@ -41,7 +41,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -612,6 +612,7 @@ chrome_java_sources = [ +@@ -623,6 +623,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollector.java", "java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherImpl.java", "java/src/org/chromium/chrome/browser/feedback/ScreenshotTask.java", @@ -208,7 +208,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java -@@ -37,6 +37,7 @@ import org.chromium.chrome.browser.cryptids.ProbabilisticCryptidRenderer; +@@ -38,6 +38,7 @@ import org.chromium.chrome.browser.cryptids.ProbabilisticCryptidRenderer; import org.chromium.chrome.browser.feed.FeedSurfaceScrollDelegate; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.lens.LensEntryPoint; @@ -216,8 +216,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL import org.chromium.chrome.browser.lens.LensMetrics; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.logo.LogoBridge.Logo; -@@ -102,6 +103,8 @@ public class NewTabPageLayout extends LinearLayout { - private UiConfig mUiConfig; +@@ -106,6 +107,8 @@ public class NewTabPageLayout extends LinearLayout { + private @Nullable DisplayStyleObserver mDisplayStyleObserver; private CallbackController mCallbackController = new CallbackController(); + private ViewGroup mShortcutsView; @@ -225,7 +225,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL /** * Whether the tiles shown in the layout have finished loading. * With {@link #mHasShownView}, it's one of the 2 flags used to track initialisation progress. -@@ -245,6 +248,7 @@ public class NewTabPageLayout extends LinearLayout { +@@ -277,6 +280,7 @@ public class NewTabPageLayout extends LinearLayout { initializeMostVisitedTilesCoordinator(profile, lifecycleDispatcher, tileGroupDelegate, touchEnabledDelegate, isScrollableMvtEnabled(), searchProviderIsGoogle); initializeSearchBoxBackground(); @@ -233,7 +233,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL initializeSearchBoxTextView(); initializeVoiceSearchButton(); initializeLensButton(); -@@ -635,16 +639,22 @@ public class NewTabPageLayout extends LinearLayout { +@@ -702,16 +706,22 @@ public class NewTabPageLayout extends LinearLayout { marginLayoutParams.leftMargin = lateralPaddingsForNTP; marginLayoutParams.rightMargin = lateralPaddingsForNTP; } @@ -258,7 +258,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL marginLayoutParams.bottomMargin = getGridMvtBottomMargin(); } -@@ -947,6 +957,22 @@ public class NewTabPageLayout extends LinearLayout { +@@ -1013,6 +1023,22 @@ public class NewTabPageLayout extends LinearLayout { return iphCommandBuilder; } @@ -318,7 +318,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/Sug diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5302,6 +5302,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5564,6 +5564,9 @@ const FeatureEntry kFeatureEntries[] = { SINGLE_VALUE_TYPE_AND_VALUE( switches::kForceShowUpdateMenuItemCustomSummary, "Custom Summary")}, @@ -331,7 +331,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4422,6 +4422,9 @@ const char kStartSurfaceWithAccessibilityName[] = +@@ -4502,6 +4502,9 @@ const char kStartSurfaceWithAccessibilityName[] = const char kStartSurfaceWithAccessibilityDescription[] = "Enable Start Surface with Accessibility."; @@ -344,7 +344,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2575,6 +2575,9 @@ extern const char kSmartZoomDescription[]; +@@ -2625,6 +2625,9 @@ extern const char kSmartZoomDescription[]; extern const char kSmartSuggestionForLargeDownloadsName[]; extern const char kSmartSuggestionForLargeDownloadsDescription[]; @@ -357,7 +357,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -254,6 +254,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -263,6 +263,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kIncognitoReauthenticationForAndroid, &kIncognitoScreenshot, &kInfobarScrollOptimization, @@ -365,7 +365,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse &kInstanceSwitcher, &kInstantStart, &kLensCameraAssistedSearch, -@@ -827,6 +828,10 @@ BASE_FEATURE(kInstanceSwitcher, +@@ -859,6 +860,10 @@ BASE_FEATURE(kInstanceSwitcher, "InstanceSwitcher", base::FEATURE_ENABLED_BY_DEFAULT); @@ -379,7 +379,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -134,6 +134,7 @@ BASE_DECLARE_FEATURE(kOmniboxModernizeVisualUpdate); +@@ -141,6 +141,7 @@ BASE_DECLARE_FEATURE(kOmniboxModernizeVisualUpdate); BASE_DECLARE_FEATURE(kOmniboxWarmRecycledViewPool); BASE_DECLARE_FEATURE(kOptimizeGeolocationHeaderGeneration); BASE_DECLARE_FEATURE(kPageAnnotationsService); @@ -390,7 +390,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -317,6 +317,7 @@ public abstract class ChromeFeatureList { +@@ -318,6 +318,7 @@ public abstract class ChromeFeatureList { public static final String LOOKALIKE_NAVIGATION_URL_SUGGESTIONS_UI = "LookalikeUrlNavigationSuggestionsUI"; public static final String MESSAGES_FOR_ANDROID_ADS_BLOCKED = "MessagesForAndroidAdsBlocked"; @@ -401,7 +401,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f diff --git a/components/signin/public/base/signin_switches.cc b/components/signin/public/base/signin_switches.cc --- a/components/signin/public/base/signin_switches.cc +++ b/components/signin/public/base/signin_switches.cc -@@ -13,7 +13,7 @@ namespace switches { +@@ -14,7 +14,7 @@ namespace switches { // Feature to add a signed-out avatar on the NTP. BASE_FEATURE(kIdentityStatusConsistency, "IdentityStatusConsistency", @@ -413,7 +413,7 @@ diff --git a/components/signin/public/base/signin_switches.cc b/components/signi diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json -@@ -7793,6 +7793,24 @@ +@@ -7994,6 +7994,24 @@ ] } ], diff --git a/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch b/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch index 3d37bc06..75a72121 100644 --- a/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch +++ b/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch @@ -20,15 +20,15 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -@@ -41,6 +41,7 @@ import org.chromium.chrome.browser.signin.services.SigninManager; - import org.chromium.chrome.browser.sync.SyncServiceFactory; - import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; +@@ -43,6 +43,7 @@ import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; + import org.chromium.chrome.browser.sync.settings.SignInPreference; + import org.chromium.chrome.browser.sync.settings.SyncPromoPreference; import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils; +import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarFeatures; import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarStatePredictor; import org.chromium.chrome.browser.tracing.settings.DeveloperSettings; import org.chromium.components.browser_ui.settings.ChromeBasePreference; -@@ -207,7 +208,9 @@ public class MainSettings extends PreferenceFragmentCompat +@@ -225,7 +226,9 @@ public class MainSettings extends ChromeBaseSettingsFragment new AdaptiveToolbarStatePredictor(null).recomputeUiState(uiState -> { // We don't show the toolbar shortcut settings page if disabled from finch. @@ -38,11 +38,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSe + if (uiState.canShowUi && !AdaptiveToolbarFeatures.isSingleVariantModeEnabled()) return; getPreferenceScreen().removePreference(findPreference(PREF_TOOLBAR_SHORTCUT)); }); - } + diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareButtonController.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareButtonController.java --- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareButtonController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareButtonController.java -@@ -98,6 +98,43 @@ public class ShareButtonController extends BaseButtonDataProvider { +@@ -100,6 +100,43 @@ public class ShareButtonController extends BaseButtonDataProvider { return mShareUtils.shouldEnableShare(tab); } @@ -89,7 +89,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareButt diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -653,18 +653,12 @@ const FeatureEntry::FeatureParam kAdaptiveButtonCustomization_Share[] = { +@@ -685,18 +685,12 @@ const FeatureEntry::FeatureParam kAdaptiveButtonCustomization_Share[] = { {"default_segment", "share"}, {"show_ui_only_after_ready", "false"}, {"ignore_segmentation_results", "true"}}; @@ -126,7 +126,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java -@@ -238,7 +238,11 @@ public class AdaptiveToolbarButtonController +@@ -249,7 +249,11 @@ public class AdaptiveToolbarButtonController @Override public void onFinishNativeInitialization() { diff --git a/build/patches/Restore-offline-indicator-v2-flag.patch b/build/patches/Restore-offline-indicator-v2-flag.patch index 2fb8eee7..861031f2 100644 --- a/build/patches/Restore-offline-indicator-v2-flag.patch +++ b/build/patches/Restore-offline-indicator-v2-flag.patch @@ -89,7 +89,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/in diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -@@ -841,7 +841,8 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -837,7 +837,8 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { private void initStatusIndicatorCoordinator(LayoutManagerImpl layoutManager) { // TODO(crbug.com/1035584): Disable on tablets for now as we need to do one or two extra // things for tablets. @@ -99,7 +99,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab return; } -@@ -863,6 +864,11 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -859,6 +860,11 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { mStatusIndicatorCoordinator.addObserver(mStatusIndicatorObserver); mStatusIndicatorCoordinator.addObserver(mStatusBarColorController); @@ -114,7 +114,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5194,6 +5194,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5450,6 +5450,9 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kOfflinePagesLivePageSharingName, flag_descriptions::kOfflinePagesLivePageSharingDescription, kOsAndroid, FEATURE_VALUE_TYPE(offline_pages::kOfflinePagesLivePageSharingFeature)}, @@ -127,9 +127,9 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -5946,6 +5946,11 @@ - "owners": [ "//components/search/OWNERS" ], - "expiry_milestone": 118 +@@ -6042,6 +6042,11 @@ + "owners": [ "dom" ], + "expiry_milestone": 125 }, + { + "name": "offline-indicator-v2", @@ -142,7 +142,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4169,6 +4169,10 @@ const char kNotificationPermissionRationaleBottomSheetDescription[] = +@@ -4244,6 +4244,10 @@ const char kNotificationPermissionRationaleBottomSheetDescription[] = "flow. " "Only works with builds targeting Android T+."; @@ -156,7 +156,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2448,6 +2448,9 @@ extern const char kNewTabSearchEngineUrlAndroidDescription[]; +@@ -2501,6 +2501,9 @@ extern const char kNewTabSearchEngineUrlAndroidDescription[]; extern const char kNotificationPermissionRationaleName[]; extern const char kNotificationPermissionRationaleDescription[]; @@ -169,7 +169,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -264,6 +264,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -273,6 +273,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kNewTabSearchEngineUrlAndroid, &kNotificationPermissionVariant, &kNotificationPermissionBottomSheet, @@ -177,7 +177,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse &kPageAnnotationsService, &kPreconnectOnTabCreation, &kInlineUpdateFlow, -@@ -790,6 +791,10 @@ BASE_FEATURE(kDrawEdgeToEdge, +@@ -818,6 +819,10 @@ BASE_FEATURE(kEarlyInitializeStartupMetrics, BASE_FEATURE(kEmptyStates, "EmptyStates", base::FEATURE_ENABLED_BY_DEFAULT); @@ -191,7 +191,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -124,6 +124,7 @@ BASE_DECLARE_FEATURE(kLensCameraAssistedSearch); +@@ -132,6 +132,7 @@ BASE_DECLARE_FEATURE(kLensCameraAssistedSearch); BASE_DECLARE_FEATURE(kLensOnQuickActionSearchWidget); BASE_DECLARE_FEATURE(kLocationBarModelOptimizations); BASE_DECLARE_FEATURE(kNewTabSearchEngineUrlAndroid); @@ -202,7 +202,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -330,6 +330,7 @@ public abstract class ChromeFeatureList { +@@ -331,6 +331,7 @@ public abstract class ChromeFeatureList { public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant"; public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = "NotificationPermissionBottomSheet"; diff --git a/build/patches/Revert-Delete-block-external-form-redirects.patch b/build/patches/Revert-Delete-block-external-form-redirects.patch index 1d4355b9..088df7f0 100644 --- a/build/patches/Revert-Delete-block-external-form-redirects.patch +++ b/build/patches/Revert-Delete-block-external-form-redirects.patch @@ -20,7 +20,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -10112,6 +10112,12 @@ const FeatureEntry kFeatureEntries[] = { +@@ -10385,6 +10385,12 @@ const FeatureEntry kFeatureEntries[] = { "ServiceWorkerSkipIgnorableFetchHandler")}, #if BUILDFLAG(IS_ANDROID) @@ -36,9 +36,9 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -831,6 +831,11 @@ - "owners": [ "ioanap", "izuzic@google.com"], - "expiry_milestone": 120 +@@ -836,6 +836,11 @@ + "owners": ["ortuno", "cros-apps-platform-core@google.com" ], + "expiry_milestone": 132 }, + { + "name": "block-external-form-redirects-no-gesture", @@ -51,7 +51,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4070,6 +4070,12 @@ const char kInstantStartName[] = "Instant start"; +@@ -4145,6 +4145,12 @@ const char kInstantStartName[] = "Instant start"; const char kInstantStartDescription[] = "Show start surface before native library is loaded."; @@ -67,7 +67,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2391,6 +2391,9 @@ extern const char kInstanceSwitcherDescription[]; +@@ -2444,6 +2444,9 @@ extern const char kInstanceSwitcherDescription[]; extern const char kInstantStartName[]; extern const char kInstantStartDescription[]; diff --git a/build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch b/build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch index 16ca62ed..8c1bf0c6 100644 --- a/build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch +++ b/build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch @@ -16,7 +16,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -4687,6 +4687,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4940,6 +4940,10 @@ const FeatureEntry kFeatureEntries[] = { kOsWin | kOsLinux | kOsAndroid | kOsCrOS, FEATURE_VALUE_TYPE(features::kVulkan)}, #if BUILDFLAG(IS_ANDROID) @@ -26,11 +26,11 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc + SINGLE_DISABLE_VALUE_TYPE(switches::kDisablePullToRefreshEffect)}, {"translate-message-ui", flag_descriptions::kTranslateMessageUIName, flag_descriptions::kTranslateMessageUIDescription, kOsAndroid, - FEATURE_VALUE_TYPE(translate::kTranslateMessageUI)}, + FEATURE_WITH_PARAMS_VALUE_TYPE(translate::kTranslateMessageUI, diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -1770,6 +1770,10 @@ +@@ -1802,6 +1802,10 @@ "yangsharon@google.com", "alexmos@google.com", "creis@google.com" ], "expiry_milestone": 122 }, @@ -44,7 +44,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4222,6 +4222,10 @@ const char kReadLaterDescription[] = +@@ -4297,6 +4297,10 @@ const char kReadLaterDescription[] = "Allow users to save tabs for later. Enables a new button and menu for " "accessing tabs saved for later."; @@ -58,7 +58,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2485,6 +2485,9 @@ extern const char kQueryTilesSwapTrendingDescription[]; +@@ -2538,6 +2538,9 @@ extern const char kQueryTilesSwapTrendingDescription[]; extern const char kReadAloudName[]; extern const char kReadAloudDescription[]; diff --git a/build/patches/Revert-flags-remove-num-raster-threads.patch b/build/patches/Revert-flags-remove-num-raster-threads.patch index fde5b1e1..d17e8980 100644 --- a/build/patches/Revert-flags-remove-num-raster-threads.patch +++ b/build/patches/Revert-flags-remove-num-raster-threads.patch @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -396,6 +396,17 @@ const FeatureEntry::Choice kOverlayStrategiesChoices[] = { +@@ -398,6 +398,17 @@ const FeatureEntry::Choice kOverlayStrategiesChoices[] = { "single-fullscreen,single-on-top,underlay"}, }; @@ -33,7 +33,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, {flag_descriptions::kTouchSelectionStrategyCharacter, -@@ -4843,6 +4854,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5098,6 +5109,9 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(mojo::core::kMojoLinuxChannelSharedMem)}, #endif #if BUILDFLAG(IS_ANDROID) @@ -46,7 +46,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -5552,6 +5552,10 @@ +@@ -5648,6 +5648,10 @@ "owners": [ "lazzzis", "aishwaryarj" ], "expiry_milestone": 120 }, @@ -60,7 +60,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -2279,6 +2279,14 @@ const char kOmniboxActionsInSuggestDescription[] = +@@ -2307,6 +2307,14 @@ const char kOmniboxActionsInSuggestDescription[] = "Actions in Suggest permits optional Action Chips to be attached to " "Entity suggestions."; @@ -78,7 +78,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1300,6 +1300,13 @@ extern const char kOmitCorsClientCertDescription[]; +@@ -1322,6 +1322,13 @@ extern const char kOmitCorsClientCertDescription[]; extern const char kOmniboxActionsInSuggestName[]; extern const char kOmniboxActionsInSuggestDescription[]; diff --git a/build/patches/Revert-removal-of-execution-context-address-space.patch b/build/patches/Revert-removal-of-execution-context-address-space.patch index 3d7cc602..b14936da 100644 --- a/build/patches/Revert-removal-of-execution-context-address-space.patch +++ b/build/patches/Revert-removal-of-execution-context-address-space.patch @@ -58,10 +58,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -186,7 +186,7 @@ BASE_FEATURE(kBlockInsecurePrivateNetworkRequestsFromPrivate, +@@ -125,7 +125,7 @@ BASE_FEATURE(kBlockInsecurePrivateNetworkRequests, // - kBlockInsecurePrivateNetworkRequests - BASE_FEATURE(kBlockInsecurePrivateNetworkRequestsFromUnknown, - "BlockInsecurePrivateNetworkRequestsFromUnknown", + BASE_FEATURE(kBlockInsecurePrivateNetworkRequestsFromPrivate, + "BlockInsecurePrivateNetworkRequestsFromPrivate", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); @@ -175,7 +175,7 @@ diff --git a/third_party/blink/renderer/core/frame/policy_container.h b/third_pa diff --git a/third_party/blink/renderer/core/frame/web_frame_test.cc b/third_party/blink/renderer/core/frame/web_frame_test.cc --- a/third_party/blink/renderer/core/frame/web_frame_test.cc +++ b/third_party/blink/renderer/core/frame/web_frame_test.cc -@@ -8064,6 +8064,40 @@ TEST_F(WebFrameTest, PushStateStartsAndStops) { +@@ -8069,6 +8069,40 @@ TEST_F(WebFrameTest, PushStateStartsAndStops) { EXPECT_EQ(client.StopLoadingCount(), 2); } @@ -261,7 +261,7 @@ diff --git a/third_party/blink/renderer/core/loader/modulescript/worker_module_s #include "services/network/public/mojom/referrer_policy.mojom-blink.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/loader/network_utils.h" -@@ -175,7 +176,7 @@ void WorkerModuleScriptFetcher::NotifyClient( +@@ -182,7 +183,7 @@ void WorkerModuleScriptFetcher::NotifyClient( // Step 12.3-12.6 are implemented in Initialize(). global_scope_->Initialize( @@ -368,7 +368,7 @@ diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.h b/third_ diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc --- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc +++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc -@@ -80,6 +80,8 @@ DedicatedWorkerGlobalScope* DedicatedWorkerGlobalScope::Create( +@@ -82,6 +82,8 @@ DedicatedWorkerGlobalScope* DedicatedWorkerGlobalScope::Create( KURL response_script_url = creation_params->script_url; network::mojom::ReferrerPolicy response_referrer_policy = creation_params->referrer_policy; @@ -377,7 +377,7 @@ diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_sco const bool parent_cross_origin_isolated_capability = creation_params->parent_cross_origin_isolated_capability; const bool parent_is_isolated_context = -@@ -99,7 +101,7 @@ DedicatedWorkerGlobalScope* DedicatedWorkerGlobalScope::Create( +@@ -101,7 +103,7 @@ DedicatedWorkerGlobalScope* DedicatedWorkerGlobalScope::Create( // Pass dummy origin trial tokens here as it is already set to outside's // origin trial tokens in DedicatedWorkerGlobalScope's constructor. global_scope->Initialize(response_script_url, response_referrer_policy, @@ -386,7 +386,7 @@ diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_sco nullptr /* response_origin_trial_tokens */); return global_scope; } else { -@@ -215,6 +217,7 @@ const AtomicString& DedicatedWorkerGlobalScope::InterfaceName() const { +@@ -218,6 +220,7 @@ const AtomicString& DedicatedWorkerGlobalScope::InterfaceName() const { void DedicatedWorkerGlobalScope::Initialize( const KURL& response_url, network::mojom::ReferrerPolicy response_referrer_policy, @@ -394,7 +394,7 @@ diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_sco Vector response_csp, const Vector* /* response_origin_trial_tokens */) { // Step 14.3. "Set worker global scope's url to response's url." -@@ -228,6 +231,9 @@ void DedicatedWorkerGlobalScope::Initialize( +@@ -231,6 +234,9 @@ void DedicatedWorkerGlobalScope::Initialize( // parsing the `Referrer-Policy` header of response." SetReferrerPolicy(response_referrer_policy); @@ -404,7 +404,7 @@ diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_sco // The following is the Content-Security-Policy part of "Initialize worker // global scope's policy container" // https://html.spec.whatwg.org/#initialize-worker-policy-container -@@ -440,6 +446,7 @@ void DedicatedWorkerGlobalScope::DidFetchClassicScript( +@@ -443,6 +449,7 @@ void DedicatedWorkerGlobalScope::DidFetchClassicScript( // Pass dummy origin trial tokens here as it is already set to outside's // origin trial tokens in DedicatedWorkerGlobalScope's constructor. Initialize(classic_script_loader->ResponseURL(), response_referrer_policy, @@ -415,7 +415,7 @@ diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_sco diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h --- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h +++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h -@@ -105,6 +105,7 @@ class CORE_EXPORT DedicatedWorkerGlobalScope final : public WorkerGlobalScope { +@@ -107,6 +107,7 @@ class CORE_EXPORT DedicatedWorkerGlobalScope final : public WorkerGlobalScope { void Initialize( const KURL& response_url, network::mojom::ReferrerPolicy response_referrer_policy, @@ -786,7 +786,7 @@ diff --git a/third_party/blink/renderer/modules/exported/web_embedded_worker_imp diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc --- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc +++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc -@@ -461,6 +461,7 @@ void ServiceWorkerGlobalScope::DidFetchClassicScript( +@@ -474,6 +474,7 @@ void ServiceWorkerGlobalScope::DidFetchClassicScript( // is set, and with the following callback steps given evaluationStatus:" RunClassicScript( classic_script_loader->ResponseURL(), referrer_policy, @@ -794,7 +794,7 @@ diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_gl classic_script_loader->GetContentSecurityPolicy() ? mojo::Clone(classic_script_loader->GetContentSecurityPolicy() ->GetParsedPolicies()) -@@ -474,6 +475,7 @@ void ServiceWorkerGlobalScope::DidFetchClassicScript( +@@ -487,6 +488,7 @@ void ServiceWorkerGlobalScope::DidFetchClassicScript( void ServiceWorkerGlobalScope::Initialize( const KURL& response_url, network::mojom::ReferrerPolicy response_referrer_policy, @@ -802,7 +802,7 @@ diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_gl Vector response_csp, const Vector* response_origin_trial_tokens) { // Step 4.5. "Set workerGlobalScope's url to serviceWorker's script url." -@@ -487,6 +489,9 @@ void ServiceWorkerGlobalScope::Initialize( +@@ -500,6 +502,9 @@ void ServiceWorkerGlobalScope::Initialize( // script resource's referrer policy." SetReferrerPolicy(response_referrer_policy); @@ -812,7 +812,7 @@ diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_gl // This is quoted from the "Content Security Policy" algorithm in the service // workers spec: // "Whenever a user agent invokes Run Service Worker algorithm with a service -@@ -497,6 +502,9 @@ void ServiceWorkerGlobalScope::Initialize( +@@ -510,6 +515,9 @@ void ServiceWorkerGlobalScope::Initialize( // - If serviceWorker's script resource was delivered with a // Content-Security-Policy-Report-Only HTTP header containing the value // policy, the user agent must monitor policy for serviceWorker." @@ -822,7 +822,7 @@ diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_gl InitContentSecurityPolicyFromVector(std::move(response_csp)); BindContentSecurityPolicyToExecutionContext(); -@@ -537,26 +545,27 @@ void ServiceWorkerGlobalScope::LoadAndRunInstalledClassicScript( +@@ -550,26 +558,27 @@ void ServiceWorkerGlobalScope::LoadAndRunInstalledClassicScript( kDoNotSupportReferrerPolicyLegacyKeywords, &referrer_policy); } @@ -861,7 +861,7 @@ diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_gl diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h --- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h +++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h -@@ -124,6 +124,7 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final +@@ -129,6 +129,7 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final void Initialize( const KURL& response_url, network::mojom::ReferrerPolicy response_referrer_policy, @@ -869,7 +869,7 @@ diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_gl Vector response_csp, const Vector* response_origin_trial_tokens) override; // Fetches and runs the top-level classic worker script. -@@ -382,6 +383,7 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final +@@ -400,6 +401,7 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final void RunClassicScript( const KURL& response_url, network::mojom::ReferrerPolicy response_referrer_policy, diff --git a/build/patches/Samsung-Note-9-SDK27-crazylinker-workaround.patch b/build/patches/Samsung-Note-9-SDK27-crazylinker-workaround.patch index 9f57be60..1b004678 100644 --- a/build/patches/Samsung-Note-9-SDK27-crazylinker-workaround.patch +++ b/build/patches/Samsung-Note-9-SDK27-crazylinker-workaround.patch @@ -11,7 +11,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java --- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java +++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java -@@ -37,6 +37,7 @@ import org.chromium.build.annotations.MainDex; +@@ -38,6 +38,7 @@ import org.chromium.build.annotations.MainDex; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -19,7 +19,7 @@ diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoade import javax.annotation.concurrent.GuardedBy; -@@ -284,7 +285,21 @@ public class LibraryLoader { +@@ -285,7 +286,21 @@ public class LibraryLoader { */ public void initInAppZygote() { assert !mInitDone; diff --git a/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch b/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch index 35db4dd5..e42a9230 100644 --- a/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch +++ b/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch @@ -13,7 +13,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java -@@ -532,6 +532,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -548,6 +548,8 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment setUpSoundPreference(preference); } else if (type == ContentSettingsType.JAVASCRIPT) { setUpJavascriptPreference(preference); @@ -22,7 +22,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } else if (type == ContentSettingsType.GEOLOCATION) { setUpLocationPreference(preference); } else if (type == ContentSettingsType.NOTIFICATIONS) { -@@ -889,16 +891,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -939,16 +941,8 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment private void setUpAdsInformationalBanner() { // Add the informational banner which shows at the top of the UI if ad blocking is // activated on this site. @@ -39,7 +39,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } private SiteSettingsCategory getWarningCategory() { -@@ -1070,17 +1064,35 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1123,17 +1117,35 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment @Nullable Integer currentValue = mSite.getContentSetting(browserContextHandle, ContentSettingsType.JAVASCRIPT); @@ -81,7 +81,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c /** * Updates the ads list preference based on whether the site is a candidate for blocking. This * has some custom behavior. -@@ -1096,22 +1108,10 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1149,22 +1161,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment setupContentSettingsPreference(preference, null, false); return; } @@ -107,7 +107,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java -@@ -206,13 +206,18 @@ public final class Website implements WebsiteEntry { +@@ -223,13 +223,18 @@ public final class Website implements WebsiteEntry { ContentSettingException exception = getContentSettingException(type); if (type == ContentSettingsType.ADS) { diff --git a/build/patches/Switch-to-fstack-protector-strong.patch b/build/patches/Switch-to-fstack-protector-strong.patch index ee367678..67274d98 100644 --- a/build/patches/Switch-to-fstack-protector-strong.patch +++ b/build/patches/Switch-to-fstack-protector-strong.patch @@ -13,22 +13,18 @@ higher memory/cache usage but not by the full 2-3%. Original License: MIT - https://spdx.org/licenses/MIT.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - build/config/compiler/BUILD.gn | 8 +------- - 1 file changed, 1 insertion(+), 7 deletions(-) + build/config/compiler/BUILD.gn | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn -@@ -368,18 +368,12 @@ config("compiler") { +@@ -372,14 +372,12 @@ config("compiler") { cflags += [ "-fstack-protector" ] } } else if ((is_posix && !is_chromeos && !is_nacl) || is_fuchsia) { - # TODO(phajdan.jr): Use -fstack-protector-strong when our gcc supports it. - # See also https://crbug.com/533294 -- if (current_os != "zos") { -- cflags += [ "--param=ssp-buffer-size=4" ] -- } -- # The x86 toolchain currently has problems with stack-protector. if (is_android && current_cpu == "x86") { cflags += [ "-fno-stack-protector" ] diff --git a/build/patches/Timezone-customization.patch b/build/patches/Timezone-customization.patch index fc71c410..98c67e4f 100644 --- a/build/patches/Timezone-customization.patch +++ b/build/patches/Timezone-customization.patch @@ -45,7 +45,7 @@ Require: Content-settings-infrastructure.patch diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn --- a/components/browser_ui/site_settings/android/BUILD.gn +++ b/components/browser_ui/site_settings/android/BUILD.gn -@@ -104,6 +104,7 @@ android_library("java") { +@@ -105,6 +105,7 @@ android_library("java") { "java/src/org/chromium/components/browser_ui/site_settings/WebsitePreference.java", "java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java", "java/src/org/chromium/components/browser_ui/site_settings/WebsiteRowPreference.java", @@ -53,7 +53,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b ] resources_package = "org.chromium.components.browser_ui.site_settings" -@@ -275,6 +276,8 @@ android_resources("java_resources") { +@@ -277,6 +278,8 @@ android_resources("java_resources") { "java/res/xml/site_settings_preferences.xml", "java/res/xml/site_settings_preferences_with_categories.xml", "java/res/xml/website_preferences.xml", @@ -381,7 +381,7 @@ new file mode 100755 diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java -@@ -412,6 +412,14 @@ public class WebsitePreferenceBridge { +@@ -416,6 +416,14 @@ public class WebsitePreferenceBridge { return WebsitePreferenceBridgeJni.get().toHostOnlyPattern(pattern); } @@ -396,7 +396,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c @NativeMethods public interface Natives { boolean isNotificationEmbargoedForOrigin( -@@ -481,5 +489,7 @@ public class WebsitePreferenceBridge { +@@ -485,5 +493,7 @@ public class WebsitePreferenceBridge { boolean getLocationAllowedByPolicy(BrowserContextHandle browserContextHandle); String toDomainWildcardPattern(String pattern); String toHostOnlyPattern(String pattern); @@ -746,7 +746,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map. diff --git a/components/content_settings/core/browser/host_content_settings_map.h b/components/content_settings/core/browser/host_content_settings_map.h --- a/components/content_settings/core/browser/host_content_settings_map.h +++ b/components/content_settings/core/browser/host_content_settings_map.h -@@ -381,6 +381,9 @@ class HostContentSettingsMap : public content_settings::Observer, +@@ -385,6 +385,9 @@ class HostContentSettingsMap : public content_settings::Observer, allow_invalid_secondary_pattern_for_testing_ = allow; } diff --git a/build/patches/Use-4-tile-rows-never-show-logo.patch b/build/patches/Use-4-tile-rows-never-show-logo.patch index 7ce9c07c..a9537686 100644 --- a/build/patches/Use-4-tile-rows-never-show-logo.patch +++ b/build/patches/Use-4-tile-rows-never-show-logo.patch @@ -13,7 +13,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java -@@ -114,7 +114,7 @@ public class NewTabPageLayout extends LinearLayout { +@@ -118,7 +118,7 @@ public class NewTabPageLayout extends LinearLayout { */ private boolean mHasShownView; @@ -22,7 +22,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL private boolean mSearchProviderIsGoogle; private boolean mShowingNonStandardLogo; -@@ -401,7 +401,7 @@ public class NewTabPageLayout extends LinearLayout { +@@ -433,7 +433,7 @@ public class NewTabPageLayout extends LinearLayout { boolean isScrollableMvtEnabled, boolean searchProviderIsGoogle) { assert mMvTilesContainerLayout != null; @@ -31,7 +31,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL if (searchProviderIsGoogle && QueryTileUtils.isQueryTilesEnabledOnNTP()) { maxRows = QueryTileSection.getMaxRowsForMostVisitedTiles(getContext()); } -@@ -587,7 +587,7 @@ public class NewTabPageLayout extends LinearLayout { +@@ -654,7 +654,7 @@ public class NewTabPageLayout extends LinearLayout { && mInitialized) { return; } diff --git a/build/patches/Use-dummy-DFM-installer.patch b/build/patches/Use-dummy-DFM-installer.patch index eb64920f..84ff980a 100644 --- a/build/patches/Use-dummy-DFM-installer.patch +++ b/build/patches/Use-dummy-DFM-installer.patch @@ -18,7 +18,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/components/module_installer/android/BUILD.gn b/components/module_installer/android/BUILD.gn --- a/components/module_installer/android/BUILD.gn +++ b/components/module_installer/android/BUILD.gn -@@ -20,13 +20,11 @@ android_library("module_installer_java") { +@@ -21,13 +21,11 @@ android_library("module_installer_java") { "java/src/org/chromium/components/module_installer/logger/Logger.java", "java/src/org/chromium/components/module_installer/logger/PlayCoreLogger.java", "java/src/org/chromium/components/module_installer/logger/SplitAvailabilityLogger.java", diff --git a/build/patches/Viewport-Protection-Site-Setting.patch b/build/patches/Viewport-Protection-Site-Setting.patch index 7d9f08c3..d01ec71f 100644 --- a/build/patches/Viewport-Protection-Site-Setting.patch +++ b/build/patches/Viewport-Protection-Site-Setting.patch @@ -183,7 +183,7 @@ new file mode 100644 diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -1402,7 +1402,7 @@ constexpr base::FeatureParam +@@ -1445,7 +1445,7 @@ constexpr base::FeatureParam kPrivateAggregationApiDebugModeEnabledAtAll{ BASE_FEATURE(kViewportProtection, "ViewportProtection", @@ -207,7 +207,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_p diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc --- a/third_party/blink/renderer/core/page/page.cc +++ b/third_party/blink/renderer/core/page/page.cc -@@ -893,6 +893,9 @@ void Page::UpdateAcceleratedCompositingSettings() { +@@ -896,6 +896,9 @@ void Page::UpdateAcceleratedCompositingSettings() { void Page::CalculateEmulatedScreenSetting(LocalFrame* frame, bool force) { bool isEnabled = base::FeatureList::IsEnabled(features::kViewportProtection); diff --git a/build/patches/Viewport-Protection-flag.patch b/build/patches/Viewport-Protection-flag.patch index 66c3fdd0..57ac29f1 100644 --- a/build/patches/Viewport-Protection-flag.patch +++ b/build/patches/Viewport-Protection-flag.patch @@ -33,7 +33,7 @@ The feature is controlled by a feature flag (default enabled) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -10180,6 +10180,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -10453,6 +10453,11 @@ const FeatureEntry kFeatureEntries[] = { kServiceWorkerSkipIgnorableFetchHandlerVariations, "ServiceWorkerSkipIgnorableFetchHandler")}, @@ -48,7 +48,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -7652,6 +7652,12 @@ const char kWebXrInternalsDescription[] = +@@ -7756,6 +7756,12 @@ const char kWebXrInternalsDescription[] = "debug issues with the WebXR Device API."; #endif // #if defined(ENABLE_VR) @@ -64,7 +64,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -4422,6 +4422,9 @@ extern const char kPaintPreviewDemoName[]; +@@ -4485,6 +4485,9 @@ extern const char kPaintPreviewDemoName[]; extern const char kPaintPreviewDemoDescription[]; #endif // ENABLE_PAINT_PREVIEW && BUILDFLAG(IS_ANDROID) @@ -77,9 +77,9 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -1400,6 +1400,10 @@ constexpr base::FeatureParam - &kPrivateAggregationApi, "fledge_extensions_enabled", - /*default_value=*/true}; +@@ -1443,6 +1443,10 @@ constexpr base::FeatureParam kPrivateAggregationApiDebugModeEnabledAtAll{ + &kPrivateAggregationApi, "debug_mode_enabled_at_all", + /*default_value=*/true}; +BASE_FEATURE(kViewportProtection, + "ViewportProtection", @@ -91,7 +91,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h -@@ -1321,6 +1321,9 @@ BLINK_COMMON_EXPORT bool IsFencedFramesEnabled(); +@@ -1363,6 +1363,9 @@ BLINK_COMMON_EXPORT bool IsFencedFramesEnabled(); BLINK_COMMON_EXPORT bool IsMaxUnthrottledTimeoutNestingLevelEnabled(); @@ -139,7 +139,7 @@ diff --git a/third_party/blink/renderer/core/css/media_values.cc b/third_party/b diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc --- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc -@@ -1715,7 +1715,12 @@ ComputedStyleBuilder StyleResolver::InitialStyleBuilderForElement() const { +@@ -1783,7 +1783,12 @@ ComputedStyleBuilder StyleResolver::InitialStyleBuilderForElement() const { ComputedStyleBuilder builder = CreateComputedStyleBuilder(); builder.SetRtlOrdering(GetDocument().VisuallyOrdered() ? EOrder::kVisual : EOrder::kLogical); @@ -316,7 +316,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_p diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc -@@ -1403,6 +1403,10 @@ void LocalFrame::RestoreScrollOffsets() { +@@ -1402,6 +1402,10 @@ void LocalFrame::RestoreScrollOffsets() { saved_scroll_offsets_ = nullptr; } @@ -327,7 +327,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/ void LocalFrame::SetPageZoomFactor(float factor) { SetPageAndTextZoomFactors(factor, text_zoom_factor_); } -@@ -1543,12 +1547,16 @@ device::mojom::blink::DevicePostureType LocalFrame::GetDevicePosture() { +@@ -1542,12 +1546,16 @@ device::mojom::blink::DevicePostureType LocalFrame::GetDevicePosture() { return mojo_handler_->GetDevicePosture(); } @@ -366,7 +366,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/b // Informs the local root's document and its local descendant subtree that a // media query value changed. -@@ -1029,6 +1030,7 @@ class CORE_EXPORT LocalFrame final +@@ -1026,6 +1027,7 @@ class CORE_EXPORT LocalFrame final unsigned hidden_ : 1; float page_zoom_factor_; @@ -472,7 +472,7 @@ diff --git a/third_party/blink/renderer/core/frame/screen_metrics_emulator.h b/t diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc -@@ -1794,6 +1794,14 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing( +@@ -1779,6 +1779,14 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing( if (auto* device_emulator = DeviceEmulator()) { device_emulator->UpdateVisualProperties(visual_properties); @@ -562,7 +562,7 @@ diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/re namespace blink { -@@ -887,7 +891,79 @@ void Page::UpdateAcceleratedCompositingSettings() { +@@ -890,7 +894,79 @@ void Page::UpdateAcceleratedCompositingSettings() { } } @@ -645,7 +645,7 @@ diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/re diff --git a/third_party/blink/renderer/core/page/page.h b/third_party/blink/renderer/core/page/page.h --- a/third_party/blink/renderer/core/page/page.h +++ b/third_party/blink/renderer/core/page/page.h -@@ -439,6 +439,9 @@ class CORE_EXPORT Page final : public GarbageCollected, +@@ -445,6 +445,9 @@ class CORE_EXPORT Page final : public GarbageCollected, // place. void UpdateBrowsingContextGroup(const blink::BrowsingContextGroupInfo&); @@ -655,7 +655,7 @@ diff --git a/third_party/blink/renderer/core/page/page.h b/third_party/blink/ren private: friend class ScopedPagePauser; -@@ -582,6 +585,10 @@ class CORE_EXPORT Page final : public GarbageCollected, +@@ -588,6 +591,10 @@ class CORE_EXPORT Page final : public GarbageCollected, // browser side FrameTree has the FrameTree::Type of kFencedFrame. bool is_fenced_frame_tree_ = false; diff --git a/build/patches/bromite-build-utils.patch b/build/patches/bromite-build-utils.patch index f0dfa344..d5349e01 100644 --- a/build/patches/bromite-build-utils.patch +++ b/build/patches/bromite-build-utils.patch @@ -129,7 +129,7 @@ diff --git a/build/android/gyp/java_cpp_enum.py b/build/android/gyp/java_cpp_enu diff --git a/build/android/gyp/util/build_utils.py b/build/android/gyp/util/build_utils.py --- a/build/android/gyp/util/build_utils.py +++ b/build/android/gyp/util/build_utils.py -@@ -498,4 +498,27 @@ def ReadSourcesList(sources_list_file_name): +@@ -499,4 +499,27 @@ def ReadSourcesList(sources_list_file_name): Note that this function should not be used to parse response files. """ with open(sources_list_file_name) as f: @@ -413,7 +413,7 @@ diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni -@@ -286,7 +286,7 @@ if (enable_java_templates && is_android) { +@@ -212,7 +212,7 @@ if (enable_java_templates && is_android) { # } template("java_cpp_enum") { action_with_pydeps(target_name) { @@ -422,7 +422,7 @@ diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni # The sources aren't compiled so don't check their dependencies. check_includes = false -@@ -297,6 +297,10 @@ if (enable_java_templates && is_android) { +@@ -223,6 +223,10 @@ if (enable_java_templates && is_android) { _rebased_sources = rebase_path(invoker.sources, root_build_dir) args = [ "--srcjar=$_rebased_srcjar_path" ] + _rebased_sources @@ -436,7 +436,7 @@ diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java -@@ -15,6 +15,12 @@ import org.chromium.components.browser_ui.accessibility.PageZoomUtils; +@@ -23,6 +23,12 @@ import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory; import org.chromium.components.user_prefs.UserPrefs; import org.chromium.content_public.browser.BrowserContextHandle; @@ -452,8 +452,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn --- a/chrome/browser/flags/BUILD.gn +++ b/chrome/browser/flags/BUILD.gn -@@ -5,7 +5,8 @@ - import("//build/config/android/rules.gni") +@@ -6,7 +6,8 @@ import("//build/config/android/rules.gni") + import("//third_party/jni_zero/jni_zero.gni") android_library("java") { - sources = [ @@ -461,8 +461,8 @@ diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn + sources += [ "android/java/src/org/chromium/chrome/browser/flags/AllCachedFieldTrialParameters.java", "android/java/src/org/chromium/chrome/browser/flags/BooleanCachedFieldTrialParameter.java", - "android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java", -@@ -41,7 +42,8 @@ android_library("java") { + "android/java/src/org/chromium/chrome/browser/flags/CachedFieldTrialParameter.java", +@@ -42,7 +43,8 @@ android_library("java") { } generate_jni("jni_headers") { @@ -472,7 +472,7 @@ diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn "android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureMap.java", "android/java/src/org/chromium/chrome/browser/flags/ChromeSessionState.java", ] -@@ -49,6 +51,10 @@ generate_jni("jni_headers") { +@@ -50,6 +52,10 @@ generate_jni("jni_headers") { static_library("flags_android") { sources = [ diff --git a/build/patches/build-remove-calling-untrusted-hooks.patch b/build/patches/build-remove-calling-untrusted-hooks.patch index 62872813..25e46e5b 100644 --- a/build/patches/build-remove-calling-untrusted-hooks.patch +++ b/build/patches/build-remove-calling-untrusted-hooks.patch @@ -13,7 +13,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/DEPS b/DEPS --- a/DEPS +++ b/DEPS -@@ -123,7 +123,7 @@ vars = { +@@ -119,7 +119,7 @@ vars = { # Check out and download nacl by default, unless on an arm mac. # This can be disabled e.g. with custom_vars. @@ -22,7 +22,7 @@ diff --git a/DEPS b/DEPS # By default, do not check out src-internal. This can be overridden e.g. with # custom_vars. -@@ -180,7 +180,7 @@ vars = { +@@ -176,7 +176,7 @@ vars = { # platforms, but support for other platforms may be added in the future. 'checkout_openxr' : 'checkout_win or checkout_android', @@ -31,7 +31,7 @@ diff --git a/DEPS b/DEPS # By default bot checkouts the WPR archive files only when this # flag is set True. -@@ -4615,54 +4615,6 @@ hooks = [ +@@ -4508,54 +4508,6 @@ hooks = [ 'sync', '--extract', ], }, @@ -86,7 +86,7 @@ diff --git a/DEPS b/DEPS { # Case-insensitivity for the Win SDK. Must run before win_toolchain below. 'name': 'ciopfs_linux', -@@ -4813,57 +4765,6 @@ hooks = [ +@@ -4706,57 +4658,6 @@ hooks = [ ], }, @@ -144,7 +144,7 @@ diff --git a/DEPS b/DEPS # Pull rc binaries using checked-in hashes. { 'name': 'rc_win', -@@ -4889,30 +4790,6 @@ hooks = [ +@@ -4782,30 +4683,6 @@ hooks = [ '-s', 'src/build/toolchain/win/rc/mac/rc.sha1', ], }, diff --git a/build/patches/do-not-add-suffix-to-package-name.patch b/build/patches/do-not-add-suffix-to-package-name.patch index 12a0c72f..ce9595d2 100644 --- a/build/patches/do-not-add-suffix-to-package-name.patch +++ b/build/patches/do-not-add-suffix-to-package-name.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni -@@ -30,7 +30,7 @@ declare_args() { +@@ -29,7 +29,7 @@ declare_args() { chrome_public_manifest_package = "org.chromium.chrome" if (use_stable_package_name_for_trichrome) { chrome_public_manifest_package += ".stable" diff --git a/build/patches/enable-ftrivial-auto-var-init-zero.patch b/build/patches/enable-ftrivial-auto-var-init-zero.patch index d3652f9b..d8f8c83e 100644 --- a/build/patches/enable-ftrivial-auto-var-init-zero.patch +++ b/build/patches/enable-ftrivial-auto-var-init-zero.patch @@ -11,7 +11,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn -@@ -389,6 +389,10 @@ config("compiler") { +@@ -393,6 +393,10 @@ config("compiler") { cflags += [ "-fwrapv" ] } diff --git a/build/patches/eyeo-117.0.5938.0-android_api.patch b/build/patches/eyeo-beta-118.0.5993.48-android_api.patch similarity index 57% rename from build/patches/eyeo-117.0.5938.0-android_api.patch rename to build/patches/eyeo-beta-118.0.5993.48-android_api.patch index 49c93cb2..5148eca5 100644 --- a/build/patches/eyeo-117.0.5938.0-android_api.patch +++ b/build/patches/eyeo-beta-118.0.5993.48-android_api.patch @@ -1,89 +1,87 @@ From: chromium-sdk -Date: Mon, 21 Aug 2023 18:20:44 +0200 +Date: Thu, 12 Oct 2023 14:46:06 +0200 Subject: eyeo Browser Ad filtering Solution: Android API Module -Based on Chromium 117.0.5938.0 +Based on Chromium 118.0.5993.48 Pre-requisites: eyeo Browser Ad filtering Solution: Base Module --- - chrome/android/BUILD.gn | 9 + + chrome/android/BUILD.gn | 10 + chrome/browser/BUILD.gn | 14 + - chrome/browser/android/adblock/adblock_jni.cc | 194 +++++++ - chrome/browser/android/adblock/adblock_jni.h | 53 ++ .../android/adblock/adblock_jni_factory.cc | 72 +++ .../android/adblock/adblock_jni_factory.h | 50 ++ - .../filtering_configuration_bindings.cc | 250 ++++++++ - .../filtering_configuration_bindings.h | 69 +++ ...iltering_configuration_bindings_factory.cc | 70 +++ ...filtering_configuration_bindings_factory.h | 51 ++ - ...source_classification_notifier_bindings.cc | 191 ++++++ - ...esource_classification_notifier_bindings.h | 69 +++ + .../adblock/java_bindings_getters_impl.cc | 88 +++ ...lassification_notifier_bindings_factory.cc | 71 +++ ...classification_notifier_bindings_factory.h | 52 ++ ...hrome_browser_main_extra_parts_profiles.cc | 10 + - components/adblock/android/BUILD.gn | 111 ++++ - .../adblock_settings_locales_titles.xml | 98 ++++ - .../adblock/AdblockContentType.java | 62 ++ - .../components/adblock/AdblockController.java | 258 +++++++++ + components/adblock/android/BUILD.gn | 99 +++ + components/adblock/android/adblock_jni.cc | 176 ++++++ + components/adblock/android/adblock_jni.h | 52 ++ + .../filtering_configuration_bindings.cc | 295 +++++++++ + .../filtering_configuration_bindings.h | 68 +++ + .../adblock/AdblockContentType.java | 61 ++ + .../components/adblock/AdblockController.java | 203 +++++++ .../components/adblock/AdblockCounters.java | 101 ++++ - .../adblock/FilteringConfiguration.java | 245 ++++++++ + .../adblock/FilteringConfiguration.java | 348 +++++++++++ .../ResourceClassificationNotifier.java | 187 ++++++ - .../adblock/AdblockControllerTest.java | 87 +++ - .../adblock/FilteringConfigurationTest.java | 366 ++++++++++++ - .../ResourceClassificationNotifierTest.java | 143 +++++ - .../adblock/TestAdBlockedObserver.java | 183 ++++++ - .../adblock/TestPagesCircumventionTest.java | 90 +++ - .../components/adblock/TestPagesCspTest.java | 136 +++++ - .../adblock/TestPagesElemhideEmuInvTest.java | 158 +++++ - .../adblock/TestPagesElemhideEmuTest.java | 217 +++++++ - .../adblock/TestPagesElemhideTest.java | 237 ++++++++ - .../adblock/TestPagesExceptionTest.java | 244 ++++++++ - .../adblock/TestPagesFilterTest.java | 329 +++++++++++ - .../adblock/TestPagesHeaderFilterTest.java | 150 +++++ - .../adblock/TestPagesRewriteTest.java | 185 ++++++ - .../adblock/TestPagesSiteKeyTest.java | 82 +++ - .../adblock/TestPagesSnippetsTest.java | 545 ++++++++++++++++++ - .../adblock/TestPagesTestsHelper.java | 255 ++++++++ - .../adblock/TestPagesWebsocketTest.java | 77 +++ - .../adblock/TestVerificationUtils.java | 166 ++++++ - 40 files changed, 5937 insertions(+) - create mode 100644 chrome/browser/android/adblock/adblock_jni.cc - create mode 100644 chrome/browser/android/adblock/adblock_jni.h + .../adblock/android/java_bindings_getters.h | 41 ++ + .../adblock/AdblockControllerTestBase.java | 63 ++ + .../adblock/TestAdBlockedObserver.java | 176 ++++++ + .../TestPagesCircumventionTestBase.java | 64 ++ + .../adblock/TestPagesCspTestBase.java | 108 ++++ + .../TestPagesElemhideEmuInvTestBase.java | 135 +++++ + .../adblock/TestPagesElemhideEmuTestBase.java | 183 ++++++ + .../adblock/TestPagesElemhideTestBase.java | 204 +++++++ + .../adblock/TestPagesExceptionTestBase.java | 174 ++++++ + .../adblock/TestPagesFilterTestBase.java | 254 ++++++++ + .../TestPagesHeaderFilterTestBase.java | 125 ++++ + .../adblock/TestPagesHelperBase.java | 180 ++++++ + .../adblock/TestPagesRewriteTestBase.java | 153 +++++ + .../adblock/TestPagesSiteKeyTestBase.java | 58 ++ + .../adblock/TestPagesSnippetsTestBase.java | 562 ++++++++++++++++++ + .../adblock/TestPagesWebsocketTestBase.java | 56 ++ + .../adblock/TestVerificationUtils.java | 163 +++++ + ...source_classification_notifier_bindings.cc | 164 +++++ + ...esource_classification_notifier_bindings.h | 69 +++ + 39 files changed, 5010 insertions(+) create mode 100644 chrome/browser/android/adblock/adblock_jni_factory.cc create mode 100644 chrome/browser/android/adblock/adblock_jni_factory.h - create mode 100644 chrome/browser/android/adblock/filtering_configuration_bindings.cc - create mode 100644 chrome/browser/android/adblock/filtering_configuration_bindings.h create mode 100644 chrome/browser/android/adblock/filtering_configuration_bindings_factory.cc create mode 100644 chrome/browser/android/adblock/filtering_configuration_bindings_factory.h - create mode 100644 chrome/browser/android/adblock/resource_classification_notifier_bindings.cc - create mode 100644 chrome/browser/android/adblock/resource_classification_notifier_bindings.h + create mode 100644 chrome/browser/android/adblock/java_bindings_getters_impl.cc create mode 100644 chrome/browser/android/adblock/resource_classification_notifier_bindings_factory.cc create mode 100644 chrome/browser/android/adblock/resource_classification_notifier_bindings_factory.h create mode 100644 components/adblock/android/BUILD.gn - create mode 100644 components/adblock/android/java/res/values/adblock_settings_locales_titles.xml + create mode 100644 components/adblock/android/adblock_jni.cc + create mode 100644 components/adblock/android/adblock_jni.h + create mode 100644 components/adblock/android/filtering_configuration_bindings.cc + create mode 100644 components/adblock/android/filtering_configuration_bindings.h create mode 100644 components/adblock/android/java/src/org/chromium/components/adblock/AdblockContentType.java create mode 100644 components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java create mode 100644 components/adblock/android/java/src/org/chromium/components/adblock/AdblockCounters.java create mode 100644 components/adblock/android/java/src/org/chromium/components/adblock/FilteringConfiguration.java create mode 100644 components/adblock/android/java/src/org/chromium/components/adblock/ResourceClassificationNotifier.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockControllerTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/FilteringConfigurationTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/ResourceClassificationNotifierTest.java + create mode 100644 components/adblock/android/java_bindings_getters.h + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockControllerTestBase.java create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestAdBlockedObserver.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCircumventionTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCspTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuInvTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesExceptionTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesFilterTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHeaderFilterTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesRewriteTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSiteKeyTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSnippetsTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesTestsHelper.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesWebsocketTest.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCircumventionTestBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCspTestBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuInvTestBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuTestBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideTestBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesExceptionTestBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesFilterTestBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHeaderFilterTestBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHelperBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesRewriteTestBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSiteKeyTestBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSnippetsTestBase.java + create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesWebsocketTestBase.java create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/TestVerificationUtils.java + create mode 100644 components/adblock/android/resource_classification_notifier_bindings.cc + create mode 100644 components/adblock/android/resource_classification_notifier_bindings.h diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn @@ -99,31 +97,39 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn import("//build/android/resource_sizes.gni") import("//build/config/android/config.gni") -@@ -206,6 +210,7 @@ if (current_toolchain == default_toolchain) { - "//chrome/browser/ui/android/toolbar:java_resources", - "//chrome/browser/ui/android/webid/internal:java_resources", - "//chrome/browser/ui/messages/android:java_resources", -+ "//components/adblock/android:java_resources", - "//components/autofill/android:autofill_java_resources", - "//components/autofill/android:autofill_payments_java_resources", - "//components/blocked_content/android:java_resources", -@@ -446,6 +451,7 @@ if (current_toolchain == default_toolchain) { +@@ -236,6 +240,7 @@ if (current_toolchain == default_toolchain) { + "//third_party/androidx:androidx_gridlayout_gridlayout_java", + "//third_party/androidx:androidx_preference_preference_java", + ] ++ + } + + android_library("app_hooks_java") { +@@ -452,6 +457,7 @@ if (current_toolchain == default_toolchain) { "//chrome/browser/xsurface:java", "//chrome/browser/xsurface_provider:dependency_provider_impl_java", "//chrome/browser/xsurface_provider:java", -+ "//components/adblock/android:adblock_java", ++ "//components/adblock/android:adblock_controller_java", "//components/autofill/android:autofill_java", "//components/background_task_scheduler:background_task_scheduler_java", "//components/background_task_scheduler:background_task_scheduler_task_ids_java", -@@ -1662,6 +1668,7 @@ if (current_toolchain == default_toolchain) { - "//chrome/test/android:chrome_java_integration_test_support", - "//chrome/test/android:chrome_java_test_pagecontroller", - "//chrome/test/android/test_trusted_web_activity:test_trusted_web_activity_java", -+ "//components/adblock/android:adblock_java_tests", - "//components/autofill/android:autofill_features_java", - "//components/autofill/android:autofill_java", - "//components/background_task_scheduler:background_task_scheduler_java", -@@ -1858,6 +1865,7 @@ if (current_toolchain == default_toolchain) { +@@ -661,6 +667,7 @@ if (current_toolchain == default_toolchain) { + "//url/mojom:url_mojom_gurl_java", + ] + ++ + deps += feed_deps + + srcjar_deps = [ +@@ -1550,6 +1557,7 @@ if (current_toolchain == default_toolchain) { + "//chrome/android/webapk/libs/client:client_java", + "//chrome/android/webapk/libs/common:common_java", + "//chrome/android/webapk/libs/runtime_library:webapk_service_aidl_java", ++ "//chrome/browser/adblock/android:adblock_java_tests", + "//chrome/browser/android/browserservices/intents:java", + "//chrome/browser/android/browserservices/verification:java", + "//chrome/browser/android/browserservices/verification:javatests", +@@ -1889,6 +1897,7 @@ if (current_toolchain == default_toolchain) { srcjar_deps = [ "//chrome/browser:tos_dialog_behavior_generated_enum" ] data = [ @@ -131,10 +137,10 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//chrome/test/data/android/", "//chrome/test/data/autofill/", "//chrome/test/data/background_sync/", -@@ -3624,6 +3632,7 @@ group("jni_headers") { - "//chrome/browser/ui/messages/android:jni_headers", +@@ -3707,6 +3716,7 @@ group("jni_headers") { "//chrome/browser/util:jni_headers", "//chrome/browser/webauthn/android:jni_headers", + "//components/browser_ui/device_lock/android:device_lock_bridge_jni_headers", + "//components/adblock/android:jni_headers", "//components/content_relationship_verification/android:jni_headers", "//components/image_fetcher:jni_headers", @@ -142,284 +148,34 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3371,6 +3371,20 @@ static_library("browser") { - "webauthn/android/webauthn_request_delegate_android.cc", +@@ -3438,6 +3438,17 @@ static_library("browser") { "webauthn/android/webauthn_request_delegate_android.h", + ] -+ ### Android API module start -+ "android/adblock/adblock_jni.cc", -+ "android/adblock/adblock_jni.h", ++ ### Android API module start ++ sources += [ + "android/adblock/adblock_jni_factory.cc", + "android/adblock/adblock_jni_factory.h", + "android/adblock/filtering_configuration_bindings_factory.cc", + "android/adblock/filtering_configuration_bindings_factory.h", -+ "android/adblock/filtering_configuration_bindings.cc", -+ "android/adblock/filtering_configuration_bindings.h", ++ "android/adblock/java_bindings_getters_impl.cc", + "android/adblock/resource_classification_notifier_bindings_factory.cc", + "android/adblock/resource_classification_notifier_bindings_factory.h", -+ "android/adblock/resource_classification_notifier_bindings.cc", -+ "android/adblock/resource_classification_notifier_bindings.h", -+ ### Android API module end - ] ++ ] ++ ### Android API module end public_deps += [ -diff --git a/chrome/browser/android/adblock/adblock_jni.cc b/chrome/browser/android/adblock/adblock_jni.cc -new file mode 100644 ---- /dev/null -+++ b/chrome/browser/android/adblock/adblock_jni.cc -@@ -0,0 +1,194 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+#include "chrome/browser/android/adblock/adblock_jni.h" -+ -+#include -+#include -+#include -+ -+#include "base/android/jni_android.h" -+#include "base/android/jni_array.h" -+#include "base/android/jni_string.h" -+#include "base/android/jni_weak_ref.h" -+#include "base/logging.h" -+#include "chrome/browser/adblock/adblock_controller_factory.h" -+#include "chrome/browser/android/adblock/adblock_jni_factory.h" -+#include "chrome/browser/browser_process.h" -+#include "chrome/browser/profiles/profile_manager.h" -+#include "components/adblock/android/jni_headers/AdblockController_jni.h" -+#include "content/public/browser/browser_thread.h" -+ -+using base::android::AttachCurrentThread; -+using base::android::CheckException; -+using base::android::ConvertJavaStringToUTF8; -+using base::android::ConvertUTF8ToJavaString; -+using base::android::GetClass; -+using base::android::JavaParamRef; -+using base::android::JavaRef; -+using base::android::MethodID; -+using base::android::ScopedJavaGlobalRef; -+using base::android::ScopedJavaLocalRef; -+using base::android::ToJavaArrayOfObjects; -+using base::android::ToJavaArrayOfStrings; -+ -+namespace adblock { -+ -+namespace { -+ -+AdblockController* GetController() { -+ if (!g_browser_process || !g_browser_process->profile_manager()) { -+ return nullptr; -+ } -+ return AdblockControllerFactory::GetForBrowserContext( -+ g_browser_process->profile_manager()->GetLastUsedProfile()); -+} -+ -+AdblockJNI* GetJNI() { -+ if (!g_browser_process || !g_browser_process->profile_manager()) { -+ return nullptr; -+ } -+ return AdblockJNIFactory::GetForBrowserContext( -+ g_browser_process->profile_manager()->GetLastUsedProfile()); -+} -+ -+ScopedJavaLocalRef ToJava(JNIEnv* env, -+ ScopedJavaLocalRef& url_class, -+ jmethodID& url_constructor, -+ const std::string& url, -+ const std::string& title, -+ const std::string& version, -+ const std::vector& languages) { -+ ScopedJavaLocalRef url_param( -+ env, env->NewObject(url_class.obj(), url_constructor, -+ ConvertUTF8ToJavaString(env, url).obj())); -+ CheckException(env); -+ return Java_Subscription_Constructor(env, url_param, -+ ConvertUTF8ToJavaString(env, title), -+ ConvertUTF8ToJavaString(env, version), -+ ToJavaArrayOfStrings(env, languages)); -+} -+ -+std::vector> CSubscriptionsToJObjects( -+ JNIEnv* env, -+ const std::vector>& subscriptions) { -+ ScopedJavaLocalRef url_class = GetClass(env, "java/net/URL"); -+ jmethodID url_constructor = MethodID::Get( -+ env, url_class.obj(), "", "(Ljava/lang/String;)V"); -+ std::vector> jobjects; -+ jobjects.reserve(subscriptions.size()); -+ for (auto& sub : subscriptions) { -+ jobjects.push_back(ToJava( -+ env, url_class, url_constructor, sub->GetSourceUrl().spec(), -+ sub->GetTitle(), sub->GetCurrentVersion(), std::vector{})); -+ } -+ return jobjects; -+} -+ -+std::vector> CSubscriptionsToJObjects( -+ JNIEnv* env, -+ std::vector& subscriptions) { -+ ScopedJavaLocalRef url_class = GetClass(env, "java/net/URL"); -+ jmethodID url_constructor = MethodID::Get( -+ env, url_class.obj(), "", "(Ljava/lang/String;)V"); -+ std::vector> jobjects; -+ jobjects.reserve(subscriptions.size()); -+ for (auto& sub : subscriptions) { -+ if (sub.ui_visibility == SubscriptionUiVisibility::Visible) { -+ // The checks here are when one makes f.e. adblock:custom visible -+ DCHECK(sub.url.is_valid()); -+ if (sub.url.is_valid()) { -+ jobjects.push_back(ToJava(env, url_class, url_constructor, -+ sub.url.spec(), sub.title, "", -+ sub.languages)); -+ } -+ } -+ } -+ return jobjects; -+} -+ -+} // namespace -+ -+AdblockJNI::AdblockJNI(SubscriptionService* subscription_service) -+ : subscription_service_(subscription_service) { -+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -+ if (subscription_service_) { -+ subscription_service_->AddObserver(this); -+ } -+} -+ -+AdblockJNI::~AdblockJNI() { -+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -+ if (subscription_service_) { -+ subscription_service_->RemoveObserver(this); -+ } -+} -+ -+void AdblockJNI::Bind(JavaObjectWeakGlobalRef weak_java_controller) { -+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -+ weak_java_controller_ = weak_java_controller; -+} -+ -+void AdblockJNI::OnSubscriptionInstalled(const GURL& url) { -+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -+ JNIEnv* env = AttachCurrentThread(); -+ ScopedJavaLocalRef obj = weak_java_controller_.get(env); -+ if (obj.is_null()) { -+ return; -+ } -+ -+ ScopedJavaLocalRef j_url = ConvertUTF8ToJavaString(env, url.spec()); -+ Java_AdblockController_subscriptionUpdatedCallback(env, obj, j_url); -+} -+ -+} // namespace adblock -+ -+static void JNI_AdblockController_Bind( -+ JNIEnv* env, -+ const base::android::JavaParamRef& caller) { -+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); -+ if (!adblock::GetController()) { -+ return; -+ } -+ JavaObjectWeakGlobalRef weak_controller_ref(env, caller); -+ adblock::GetJNI()->Bind(weak_controller_ref); -+} -+ -+static base::android::ScopedJavaLocalRef -+JNI_AdblockController_GetInstalledSubscriptions(JNIEnv* env) { -+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); -+ if (!adblock::GetController()) { -+ return ToJavaArrayOfObjects(env, -+ std::vector>{}); -+ } -+ -+ return ToJavaArrayOfObjects( -+ env, adblock::CSubscriptionsToJObjects( -+ env, adblock::GetController()->GetInstalledSubscriptions())); -+} -+ -+static base::android::ScopedJavaLocalRef -+JNI_AdblockController_GetRecommendedSubscriptions(JNIEnv* env) { -+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); -+ if (!adblock::GetController()) { -+ return ToJavaArrayOfObjects(env, -+ std::vector>{}); -+ } -+ -+ auto list = adblock::GetController()->GetKnownSubscriptions(); -+ return ToJavaArrayOfObjects(env, -+ adblock::CSubscriptionsToJObjects(env, list)); -+} -diff --git a/chrome/browser/android/adblock/adblock_jni.h b/chrome/browser/android/adblock/adblock_jni.h -new file mode 100644 ---- /dev/null -+++ b/chrome/browser/android/adblock/adblock_jni.h -@@ -0,0 +1,53 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+#ifndef CHROME_BROWSER_ANDROID_ADBLOCK_ADBLOCK_JNI_H_ -+#define CHROME_BROWSER_ANDROID_ADBLOCK_ADBLOCK_JNI_H_ -+ -+#include -+ -+#include "base/android/jni_weak_ref.h" -+#include "base/memory/raw_ptr.h" -+#include "components/adblock/core/adblock_controller.h" -+#include "components/adblock/core/subscription/subscription_service.h" -+#include "components/keyed_service/core/keyed_service.h" -+ -+namespace content { -+class BrowserContext; -+} -+ -+namespace adblock { -+ -+class AdblockJNI : public SubscriptionService::SubscriptionObserver, -+ public KeyedService { -+ public: -+ explicit AdblockJNI(SubscriptionService* subscription_service); -+ ~AdblockJNI() override; -+ -+ void Bind(JavaObjectWeakGlobalRef weak_java_controller); -+ // SubscriptionService::SubscriptionObserver -+ void OnSubscriptionInstalled(const GURL& subscription_url) override; -+ -+ private: -+ SEQUENCE_CHECKER(sequence_checker_); -+ raw_ptr subscription_service_; -+ JavaObjectWeakGlobalRef weak_java_controller_; -+}; -+ -+} // namespace adblock -+ -+#endif // CHROME_BROWSER_ANDROID_ADBLOCK_ADBLOCK_JNI_H_ + "//chrome/android/features/dev_ui:buildflags", +@@ -3627,6 +3638,9 @@ static_library("browser") { + "//url:gurl_android", + ] + ++ ###Android API module start ++ deps += [ "//components/adblock/android:java_bindings" ] ++ ###Android API module end + + if (safe_browsing_mode == 2) { + sources += [ diff --git a/chrome/browser/android/adblock/adblock_jni_factory.cc b/chrome/browser/android/adblock/adblock_jni_factory.cc new file mode 100644 --- /dev/null @@ -447,9 +203,9 @@ new file mode 100644 +#include + +#include "chrome/browser/adblock/subscription_service_factory.h" -+#include "chrome/browser/android/adblock/adblock_jni.h" +#include "chrome/browser/profiles/incognito_helpers.h" +#include "chrome/browser/profiles/profile.h" ++#include "components/adblock/android/adblock_jni.h" +#include "components/keyed_service/content/browser_context_dependency_manager.h" +#include "content/public/browser/browser_context.h" + @@ -552,335 +308,6 @@ new file mode 100644 +} // namespace adblock + +#endif // CHROME_BROWSER_ANDROID_ADBLOCK_ADBLOCK_JNI_FACTORY_H_ -diff --git a/chrome/browser/android/adblock/filtering_configuration_bindings.cc b/chrome/browser/android/adblock/filtering_configuration_bindings.cc -new file mode 100644 ---- /dev/null -+++ b/chrome/browser/android/adblock/filtering_configuration_bindings.cc -@@ -0,0 +1,250 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+#include "chrome/browser/android/adblock/filtering_configuration_bindings.h" -+ -+#include -+#include -+ -+#include "base/android/jni_array.h" -+#include "base/android/jni_string.h" -+#include "base/ranges/algorithm.h" -+#include "chrome/browser/android/adblock/filtering_configuration_bindings_factory.h" -+#include "chrome/browser/browser_process.h" -+#include "chrome/browser/profiles/profile.h" -+#include "chrome/browser/profiles/profile_manager.h" -+#include "components/adblock/android/jni_headers/FilteringConfiguration_jni.h" -+#include "components/adblock/core/configuration/filtering_configuration.h" -+#include "components/adblock/core/configuration/persistent_filtering_configuration.h" -+#include "components/adblock/core/subscription/subscription_service.h" -+ -+namespace adblock { -+ -+FilteringConfigurationBindings::FilteringConfigurationBindings( -+ SubscriptionService* subscription_service, -+ PrefService* pref_service) -+ : subscription_service_(subscription_service), -+ pref_service_(pref_service) {} -+ -+FilteringConfigurationBindings::~FilteringConfigurationBindings() { -+ for (auto& pair : bound_counterparts_) { -+ pair.first->RemoveObserver(this); -+ } -+} -+ -+void FilteringConfigurationBindings::Bind( -+ const std::string& configuration_name, -+ JavaObjectWeakGlobalRef filtering_configuration_java) { -+ auto* existing_configuration = -+ GetInstalledConfigurationWithName(configuration_name); -+ if (existing_configuration) { -+ auto existing_binding = bound_counterparts_.find(existing_configuration); -+ if (existing_binding == bound_counterparts_.end()) { -+ // This is the first Java-side counterpart bound to this -+ // FilteringConfiguration. -+ existing_configuration->AddObserver(this); -+ } -+ bound_counterparts_[existing_configuration].push_back( -+ std::move(filtering_configuration_java)); -+ } else { -+ // There is no already-installed FilteringConfiguration with this name. -+ // Create one and bind to it. -+ auto new_filtering_configuration = -+ std::make_unique(pref_service_, -+ configuration_name); -+ new_filtering_configuration->AddObserver(this); -+ bound_counterparts_[new_filtering_configuration.get()].push_back( -+ std::move(filtering_configuration_java)); -+ subscription_service_->InstallFilteringConfiguration( -+ std::move(new_filtering_configuration)); -+ } -+} -+ -+FilteringConfiguration* -+FilteringConfigurationBindings::GetInstalledConfigurationWithName( -+ const std::string& configuration_name) { -+ const auto installed_configurations = -+ subscription_service_->GetInstalledFilteringConfigurations(); -+ auto existing_configuration_it = -+ base::ranges::find(installed_configurations, configuration_name, -+ &FilteringConfiguration::GetName); -+ return existing_configuration_it != installed_configurations.end() -+ ? *existing_configuration_it -+ : nullptr; -+} -+ -+void FilteringConfigurationBindings::OnEnabledStateChanged( -+ FilteringConfiguration* config) { -+ Notify(config, Java_FilteringConfiguration_enabledStateChanged); -+} -+ -+void FilteringConfigurationBindings::OnFilterListsChanged( -+ FilteringConfiguration* config) { -+ Notify(config, Java_FilteringConfiguration_filterListsChanged); -+} -+ -+void FilteringConfigurationBindings::OnAllowedDomainsChanged( -+ FilteringConfiguration* config) { -+ Notify(config, Java_FilteringConfiguration_allowedDomainsChanged); -+} -+ -+void FilteringConfigurationBindings::OnCustomFiltersChanged( -+ FilteringConfiguration* config) { -+ Notify(config, Java_FilteringConfiguration_customFiltersChanged); -+} -+ -+void FilteringConfigurationBindings::Notify( -+ FilteringConfiguration* config, -+ FilteringConfigurationBindings::JavaEventListener event_listener_function) { -+ auto bound_weak_refs = bound_counterparts_.find(config); -+ DCHECK(bound_weak_refs != bound_counterparts_.end()) -+ << "This should never receive notifications from unobserved " -+ "FilteringConfigurations"; -+ JNIEnv* env = base::android::AttachCurrentThread(); -+ for (auto& weak_ref : bound_weak_refs->second) { -+ auto java_counterpart = weak_ref.get(env); -+ if (java_counterpart.is_null()) { -+ continue; // Bound counterpart may have been destroyed on Java side -+ } -+ event_listener_function(env, java_counterpart); -+ } -+} -+ -+} // namespace adblock -+ -+adblock::FilteringConfigurationBindings& GetBindingsFromLastUsedProfile() { -+ auto* bindings = -+ adblock::FilteringConfigurationBindingsFactory::GetForBrowserContext( -+ g_browser_process->profile_manager()->GetLastUsedProfile()); -+ DCHECK(bindings) << "FilteringConfigurationBindings should be non-null even " -+ "in tests, to keep the code simple"; -+ return *bindings; -+} -+ -+adblock::FilteringConfiguration& GetConfigurationWithName( -+ const base::android::JavaParamRef& configuration_name) { -+ auto& bindings = GetBindingsFromLastUsedProfile(); -+ auto* configuration = bindings.GetInstalledConfigurationWithName( -+ base::android::ConvertJavaStringToUTF8(configuration_name)); -+ DCHECK(configuration) -+ << "FilteringConfigurationBindings::Bind should have ensured a " -+ "configuration with this name is installed"; -+ return *configuration; -+} -+ -+static void JNI_FilteringConfiguration_Bind( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name, -+ const base::android::JavaParamRef& caller) { -+ auto& bindings = GetBindingsFromLastUsedProfile(); -+ JavaObjectWeakGlobalRef weak_configuration_ref(env, caller); -+ auto cpp_name = base::android::ConvertJavaStringToUTF8(configuration_name); -+ bindings.Bind(cpp_name, weak_configuration_ref); -+} -+ -+static jboolean JNI_FilteringConfiguration_IsEnabled( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name) { -+ return GetConfigurationWithName(configuration_name).IsEnabled() ? JNI_TRUE -+ : JNI_FALSE; -+} -+ -+static void JNI_FilteringConfiguration_SetEnabled( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name, -+ jboolean j_enabled) { -+ return GetConfigurationWithName(configuration_name) -+ .SetEnabled(j_enabled == JNI_TRUE); -+} -+ -+static void JNI_FilteringConfiguration_AddFilterList( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name, -+ const base::android::JavaParamRef& url) { -+ GetConfigurationWithName(configuration_name) -+ .AddFilterList(GURL{base::android::ConvertJavaStringToUTF8(url)}); -+} -+ -+static void JNI_FilteringConfiguration_RemoveFilterList( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name, -+ const base::android::JavaParamRef& url) { -+ GetConfigurationWithName(configuration_name) -+ .RemoveFilterList(GURL{base::android::ConvertJavaStringToUTF8(url)}); -+} -+ -+static base::android::ScopedJavaLocalRef -+JNI_FilteringConfiguration_GetFilterLists( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name) { -+ // For simplicity, convert GURL to std::string, pass to Java, and convert from -+ // String to URL. Strings are easier to pass through JNI. -+ std::vector urls; -+ base::ranges::transform( -+ GetConfigurationWithName(configuration_name).GetFilterLists(), -+ std::back_inserter(urls), &GURL::spec); -+ return base::android::ToJavaArrayOfStrings(env, urls); -+} -+ -+static void JNI_FilteringConfiguration_AddAllowedDomain( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name, -+ const base::android::JavaParamRef& allowed_domain) { -+ GetConfigurationWithName(configuration_name) -+ .AddAllowedDomain(base::android::ConvertJavaStringToUTF8(allowed_domain)); -+} -+ -+static void JNI_FilteringConfiguration_RemoveAllowedDomain( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name, -+ const base::android::JavaParamRef& allowed_domain) { -+ GetConfigurationWithName(configuration_name) -+ .RemoveAllowedDomain(ConvertJavaStringToUTF8(allowed_domain)); -+} -+ -+static base::android::ScopedJavaLocalRef -+JNI_FilteringConfiguration_GetAllowedDomains( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name) { -+ return base::android::ToJavaArrayOfStrings( -+ env, GetConfigurationWithName(configuration_name).GetAllowedDomains()); -+} -+ -+static void JNI_FilteringConfiguration_AddCustomFilter( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name, -+ const base::android::JavaParamRef& custom_filter) { -+ GetConfigurationWithName(configuration_name) -+ .AddCustomFilter(ConvertJavaStringToUTF8(custom_filter)); -+} -+ -+static void JNI_FilteringConfiguration_RemoveCustomFilter( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name, -+ const base::android::JavaParamRef& custom_filter) { -+ GetConfigurationWithName(configuration_name) -+ .RemoveCustomFilter( -+ base::android::ConvertJavaStringToUTF8(custom_filter)); -+} -+ -+static base::android::ScopedJavaLocalRef -+JNI_FilteringConfiguration_GetCustomFilters( -+ JNIEnv* env, -+ const base::android::JavaParamRef& configuration_name) { -+ return base::android::ToJavaArrayOfStrings( -+ env, GetConfigurationWithName(configuration_name).GetCustomFilters()); -+} -diff --git a/chrome/browser/android/adblock/filtering_configuration_bindings.h b/chrome/browser/android/adblock/filtering_configuration_bindings.h -new file mode 100644 ---- /dev/null -+++ b/chrome/browser/android/adblock/filtering_configuration_bindings.h -@@ -0,0 +1,69 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+#ifndef CHROME_BROWSER_ANDROID_ADBLOCK_FILTERING_CONFIGURATION_BINDINGS_H_ -+#define CHROME_BROWSER_ANDROID_ADBLOCK_FILTERING_CONFIGURATION_BINDINGS_H_ -+ -+#include -+#include -+#include -+#include "base/android/jni_weak_ref.h" -+#include "base/memory/raw_ptr.h" -+#include "base/sequence_checker.h" -+#include "components/adblock/core/configuration/filtering_configuration.h" -+#include "components/adblock/core/subscription/subscription_service.h" -+#include "components/keyed_service/core/keyed_service.h" -+#include "components/prefs/pref_service.h" -+ -+namespace adblock { -+ -+class FilteringConfigurationBindings : public KeyedService, -+ public FilteringConfiguration::Observer { -+ public: -+ explicit FilteringConfigurationBindings( -+ SubscriptionService* subscription_service, -+ PrefService* pref_service); -+ ~FilteringConfigurationBindings() override; -+ void Bind(const std::string& configuration_name, -+ JavaObjectWeakGlobalRef filtering_configuration_java); -+ FilteringConfiguration* GetInstalledConfigurationWithName( -+ const std::string& name); -+ -+ // FilteringConfiguration::Observer: -+ void OnEnabledStateChanged(FilteringConfiguration* config) override; -+ void OnFilterListsChanged(FilteringConfiguration* config) override; -+ void OnAllowedDomainsChanged(FilteringConfiguration* config) override; -+ void OnCustomFiltersChanged(FilteringConfiguration* config) override; -+ -+ private: -+ using JavaEventListener = void(JNIEnv* env, -+ const base::android::JavaRef& obj); -+ void Notify(FilteringConfiguration* config, -+ JavaEventListener event_listener_function); -+ SEQUENCE_CHECKER(sequence_checker_); -+ raw_ptr subscription_service_; -+ raw_ptr pref_service_; -+ // There may be multiple Java-side FilteringConfiguration instances -+ // (represented by JavaObjectWeakGlobalRef) that map to a single C++ -+ // FilteringConfiguration. -+ using WeakReferences = std::vector; -+ std::map bound_counterparts_; -+}; -+ -+} // namespace adblock -+ -+#endif // CHROME_BROWSER_ANDROID_ADBLOCK_FILTERING_CONFIGURATION_BINDINGS_H_ diff --git a/chrome/browser/android/adblock/filtering_configuration_bindings_factory.cc b/chrome/browser/android/adblock/filtering_configuration_bindings_factory.cc new file mode 100644 --- /dev/null @@ -906,9 +333,9 @@ new file mode 100644 +#include "chrome/browser/android/adblock/filtering_configuration_bindings_factory.h" + +#include "chrome/browser/adblock/subscription_service_factory.h" -+#include "chrome/browser/android/adblock/filtering_configuration_bindings.h" +#include "chrome/browser/profiles/incognito_helpers.h" +#include "chrome/browser/profiles/profile.h" ++#include "components/adblock/android/filtering_configuration_bindings.h" +#include "components/keyed_service/content/browser_context_dependency_manager.h" + +namespace adblock { @@ -941,7 +368,7 @@ new file mode 100644 + content::BrowserContext* context) const { + return new FilteringConfigurationBindings( + SubscriptionServiceFactory::GetForBrowserContext(context), -+ Profile::FromBrowserContext(context)->GetPrefs()); ++ Profile::FromBrowserContext(context)->GetOriginalProfile()->GetPrefs()); +} + +content::BrowserContext* @@ -1012,11 +439,11 @@ new file mode 100644 +} // namespace adblock + +#endif // CHROME_BROWSER_ANDROID_ADBLOCK_FILTERING_CONFIGURATION_BINDINGS_FACTORY_H_ -diff --git a/chrome/browser/android/adblock/resource_classification_notifier_bindings.cc b/chrome/browser/android/adblock/resource_classification_notifier_bindings.cc +diff --git a/chrome/browser/android/adblock/java_bindings_getters_impl.cc b/chrome/browser/android/adblock/java_bindings_getters_impl.cc new file mode 100644 --- /dev/null -+++ b/chrome/browser/android/adblock/resource_classification_notifier_bindings.cc -@@ -0,0 +1,191 @@ ++++ b/chrome/browser/android/adblock/java_bindings_getters_impl.cc +@@ -0,0 +1,88 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -1034,254 +461,77 @@ new file mode 100644 + * along with eyeo Chromium SDK. If not, see . + */ + -+#include "chrome/browser/android/adblock/resource_classification_notifier_bindings.h" ++#include "components/adblock/android/java_bindings_getters.h" + -+#include -+#include -+ -+#include "base/android/jni_android.h" -+#include "base/android/jni_array.h" -+#include "base/android/jni_string.h" -+#include "base/ranges/algorithm.h" ++#include "chrome/browser/adblock/subscription_service_factory.h" ++#include "chrome/browser/android/adblock/adblock_jni_factory.h" ++#include "chrome/browser/android/adblock/filtering_configuration_bindings_factory.h" +#include "chrome/browser/android/adblock/resource_classification_notifier_bindings_factory.h" +#include "chrome/browser/android/tab_android.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_manager.h" -+#include "components/adblock/android/jni_headers/ResourceClassificationNotifier_jni.h" -+#include "components/adblock/content/browser/resource_classification_runner.h" -+#include "components/adblock/core/common/adblock_utils.h" ++#include "components/adblock/android/filtering_configuration_bindings.h" ++#include "components/adblock/android/resource_classification_notifier_bindings.h" ++#include "content/public/browser/web_contents.h" + +namespace adblock { +namespace { ++constexpr int kNoTabId = -1; ++} + -+constexpr int kNoId = -1; ++SubscriptionService* GetSubscriptionService() { ++ if (!g_browser_process || !g_browser_process->profile_manager()) { ++ return nullptr; ++ } ++ return SubscriptionServiceFactory::GetForBrowserContext( ++ g_browser_process->profile_manager()->GetLastUsedProfile()); ++} ++ ++AdblockJNI* GetJNI() { ++ if (!g_browser_process || !g_browser_process->profile_manager()) { ++ return nullptr; ++ } ++ return AdblockJNIFactory::GetForBrowserContext( ++ g_browser_process->profile_manager()->GetLastUsedProfile()); ++} ++ ++adblock::FilteringConfigurationBindings& GetFilteringConfigurationBindings() { ++ auto* bindings = ++ adblock::FilteringConfigurationBindingsFactory::GetForBrowserContext( ++ g_browser_process->profile_manager()->GetLastUsedProfile()); ++ DCHECK(bindings) << "FilteringConfigurationBindings should be non-null even " ++ "in tests, to keep the code simple"; ++ return *bindings; ++} ++ ++adblock::ResourceClassificationNotifierBindings& ++GetResourceClassificationNotifierBindings() { ++ auto* bindings = adblock::ResourceClassificationNotifierBindingsFactory:: ++ GetForBrowserContext( ++ g_browser_process->profile_manager()->GetLastUsedProfile()); ++ DCHECK(bindings) ++ << "ResourceClassificationNotifierBindings should be non-null even " ++ "in tests, to keep the code simple"; ++ return *bindings; ++} + +int GetTabId(content::RenderFrameHost* render_frame_host) { + auto* web_contents = + content::WebContents::FromRenderFrameHost(render_frame_host); + if (!web_contents) { -+ return kNoId; ++ return kNoTabId; + } + + auto* tab = TabAndroid::FromWebContents(web_contents); + if (!tab) { -+ return kNoId; ++ return kNoTabId; + } + + return tab->GetAndroidId(); +} + -+} // namespace -+ -+using base::android::AttachCurrentThread; -+using base::android::CheckException; -+using base::android::ConvertJavaStringToUTF8; -+using base::android::ConvertUTF8ToJavaString; -+using base::android::GetClass; -+using base::android::JavaParamRef; -+using base::android::JavaRef; -+using base::android::MethodID; -+using base::android::ScopedJavaGlobalRef; -+using base::android::ScopedJavaLocalRef; -+using base::android::ToJavaArrayOfObjects; -+using base::android::ToJavaArrayOfStrings; -+ -+ResourceClassificationNotifierBindings::ResourceClassificationNotifierBindings( -+ ResourceClassificationRunner* classification_runner) -+ : classification_runner_(classification_runner) { -+ classification_runner_->AddObserver(this); -+} -+ -+ResourceClassificationNotifierBindings:: -+ ~ResourceClassificationNotifierBindings() { -+ classification_runner_->RemoveObserver(this); -+} -+ -+void ResourceClassificationNotifierBindings::Bind( -+ JavaObjectWeakGlobalRef resource_classifier_java) { -+ bound_counterpart_ = resource_classifier_java; -+} -+ -+void ResourceClassificationNotifierBindings::OnAdMatched( -+ const GURL& url, -+ FilterMatchResult result, -+ const std::vector& parent_frame_urls, -+ ContentType content_type, -+ content::RenderFrameHost* render_frame_host, -+ const GURL& subscription, -+ const std::string& configuration_name) { -+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -+ DCHECK(render_frame_host); -+ DCHECK(result == FilterMatchResult::kBlockRule || -+ result == FilterMatchResult::kAllowRule); -+ const bool was_blocked = result == FilterMatchResult::kBlockRule; -+ DVLOG(3) << "[eyeo] Ad matched " << url << "(type: " << content_type -+ << (was_blocked ? ", blocked" : ", allowed") << ")"; -+ JNIEnv* env = AttachCurrentThread(); -+ -+ ScopedJavaLocalRef obj = bound_counterpart_.get(env); -+ if (obj.is_null()) { -+ return; -+ } -+ -+ ScopedJavaLocalRef j_url = ConvertUTF8ToJavaString(env, url.spec()); -+ ScopedJavaLocalRef j_parents = -+ ToJavaArrayOfStrings(env, adblock::utils::ConvertURLs(parent_frame_urls)); -+ ScopedJavaLocalRef j_subscription = -+ ConvertUTF8ToJavaString(env, subscription.spec()); -+ ScopedJavaLocalRef j_configuration = -+ ConvertUTF8ToJavaString(env, configuration_name); -+ int tab_id = GetTabId(render_frame_host); -+ Java_ResourceClassificationNotifier_adMatchedCallback( -+ env, obj, j_url, was_blocked, j_parents, j_subscription, j_configuration, -+ static_cast(content_type), tab_id); -+} -+ -+void ResourceClassificationNotifierBindings::OnPageAllowed( -+ const GURL& url, -+ content::RenderFrameHost* render_frame_host, -+ const GURL& subscription, -+ const std::string& configuration_name) { -+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -+ DCHECK(render_frame_host); -+ DVLOG(3) << "[eyeo] Page allowed " << url; -+ JNIEnv* env = AttachCurrentThread(); -+ -+ ScopedJavaLocalRef obj = bound_counterpart_.get(env); -+ if (obj.is_null()) { -+ return; -+ } -+ -+ ScopedJavaLocalRef j_url = ConvertUTF8ToJavaString(env, url.spec()); -+ ScopedJavaLocalRef j_subscription = -+ ConvertUTF8ToJavaString(env, subscription.spec()); -+ ScopedJavaLocalRef j_configuration = -+ ConvertUTF8ToJavaString(env, configuration_name); -+ int tab_id = GetTabId(render_frame_host); -+ Java_ResourceClassificationNotifier_pageAllowedCallback( -+ env, obj, j_url, j_subscription, j_configuration, tab_id); -+} -+ -+void ResourceClassificationNotifierBindings::OnPopupMatched( -+ const GURL& url, -+ FilterMatchResult result, -+ const GURL& opener_url, -+ content::RenderFrameHost* render_frame_host, -+ const GURL& subscription, -+ const std::string& configuration_name) { -+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -+ DCHECK(render_frame_host); -+ DCHECK(result == FilterMatchResult::kBlockRule || -+ result == FilterMatchResult::kAllowRule); -+ const bool was_blocked = result == FilterMatchResult::kBlockRule; -+ DVLOG(3) << "[eyeo] Popup matched " << url -+ << (was_blocked ? ", blocked" : ", allowed"); -+ JNIEnv* env = AttachCurrentThread(); -+ -+ ScopedJavaLocalRef obj = bound_counterpart_.get(env); -+ if (obj.is_null()) { -+ return; -+ } -+ -+ ScopedJavaLocalRef j_url = ConvertUTF8ToJavaString(env, url.spec()); -+ ScopedJavaLocalRef j_opener = -+ ConvertUTF8ToJavaString(env, opener_url.spec()); -+ ScopedJavaLocalRef j_subscription = -+ ConvertUTF8ToJavaString(env, subscription.spec()); -+ ScopedJavaLocalRef j_configuration = -+ ConvertUTF8ToJavaString(env, configuration_name); -+ int tab_id = GetTabId(render_frame_host); -+ Java_ResourceClassificationNotifier_popupMatchedCallback( -+ env, obj, j_url, was_blocked, j_opener, j_subscription, j_configuration, -+ tab_id); -+} -+ +} // namespace adblock -+ -+static void JNI_ResourceClassificationNotifier_Bind( -+ JNIEnv* env, -+ const base::android::JavaParamRef& caller) { -+ auto* bindings = adblock::ResourceClassificationNotifierBindingsFactory:: -+ GetForBrowserContext(ProfileManager::GetLastUsedProfile()); -+ DCHECK(bindings); -+ -+ bindings->Bind(JavaObjectWeakGlobalRef(env, caller)); -+} -diff --git a/chrome/browser/android/adblock/resource_classification_notifier_bindings.h b/chrome/browser/android/adblock/resource_classification_notifier_bindings.h -new file mode 100644 ---- /dev/null -+++ b/chrome/browser/android/adblock/resource_classification_notifier_bindings.h -@@ -0,0 +1,69 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+#ifndef CHROME_BROWSER_ANDROID_ADBLOCK_RESOURCE_CLASSIFICATION_NOTIFIER_BINDINGS_H_ -+#define CHROME_BROWSER_ANDROID_ADBLOCK_RESOURCE_CLASSIFICATION_NOTIFIER_BINDINGS_H_ -+ -+#include -+#include -+#include "base/android/jni_weak_ref.h" -+#include "base/memory/raw_ptr.h" -+#include "base/sequence_checker.h" -+#include "components/adblock/content/browser/resource_classification_runner.h" -+#include "components/keyed_service/core/keyed_service.h" -+#include "components/prefs/pref_service.h" -+ -+namespace adblock { -+ -+class ResourceClassificationNotifierBindings -+ : public KeyedService, -+ public ResourceClassificationRunner::Observer { -+ public: -+ explicit ResourceClassificationNotifierBindings( -+ ResourceClassificationRunner* classification_runner); -+ ~ResourceClassificationNotifierBindings() override; -+ -+ void Bind(JavaObjectWeakGlobalRef resource_classifier_java); -+ -+ // ResourceClassificationRunner::Observer -+ void OnAdMatched(const GURL& url, -+ FilterMatchResult match_result, -+ const std::vector& parent_frame_urls, -+ ContentType content_type, -+ content::RenderFrameHost* render_frame_host, -+ const GURL& subscription, -+ const std::string& configuration_name) override; -+ void OnPageAllowed(const GURL& url, -+ content::RenderFrameHost* render_frame_host, -+ const GURL& subscription, -+ const std::string& configuration_name) override; -+ void OnPopupMatched(const GURL& url, -+ FilterMatchResult match_result, -+ const GURL& opener_url, -+ content::RenderFrameHost* render_frame_host, -+ const GURL& subscription, -+ const std::string& configuration_name) override; -+ -+ private: -+ SEQUENCE_CHECKER(sequence_checker_); -+ raw_ptr classification_runner_; -+ JavaObjectWeakGlobalRef bound_counterpart_; -+}; -+ -+} // namespace adblock -+ -+#endif // CHROME_BROWSER_ANDROID_ADBLOCK_RESOURCE_CLASSIFICATION_NOTIFIER_BINDINGS_H_ diff --git a/chrome/browser/android/adblock/resource_classification_notifier_bindings_factory.cc b/chrome/browser/android/adblock/resource_classification_notifier_bindings_factory.cc new file mode 100644 --- /dev/null @@ -1307,8 +557,8 @@ new file mode 100644 +#include "chrome/browser/android/adblock/resource_classification_notifier_bindings_factory.h" + +#include "chrome/browser/adblock/resource_classification_runner_factory.h" -+#include "chrome/browser/android/adblock/resource_classification_notifier_bindings.h" +#include "chrome/browser/profiles/incognito_helpers.h" ++#include "components/adblock/android/resource_classification_notifier_bindings.h" +#include "components/keyed_service/content/browser_context_dependency_manager.h" + +namespace adblock { @@ -1418,7 +668,7 @@ new file mode 100644 diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc -@@ -255,6 +255,11 @@ +@@ -263,6 +263,11 @@ #include "components/commerce/core/commerce_feature_list.h" #include "components/commerce/core/proto/merchant_signal_db_content.pb.h" @@ -1430,7 +680,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc #else #include "chrome/browser/accessibility/live_caption/live_caption_controller_factory.h" -@@ -741,6 +746,11 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -762,6 +767,11 @@ void ChromeBrowserMainExtraPartsProfiles:: #if BUILDFLAG(IS_ANDROID) FastCheckoutCapabilitiesFetcherFactory::GetInstance(); @@ -1446,7 +696,7 @@ diff --git a/components/adblock/android/BUILD.gn b/components/adblock/android/BU new file mode 100644 --- /dev/null +++ b/components/adblock/android/BUILD.gn -@@ -0,0 +1,111 @@ +@@ -0,0 +1,99 @@ +# This file is part of eyeo Chromium SDK, +# Copyright (C) 2006-present eyeo GmbH +# eyeo Chromium SDK is free software: you can redistribute it and/or modify @@ -1464,35 +714,28 @@ new file mode 100644 +import("//build/config/locales.gni") +import("//tools/grit/grit_rule.gni") + -+android_library("adblock_java") { ++source_set("java_bindings") { + sources = [ -+ "java/src/org/chromium/components/adblock/AdblockContentType.java", -+ "java/src/org/chromium/components/adblock/AdblockController.java", -+ "java/src/org/chromium/components/adblock/AdblockCounters.java", -+ "java/src/org/chromium/components/adblock/FilteringConfiguration.java", -+ "java/src/org/chromium/components/adblock/ResourceClassificationNotifier.java", ++ "adblock_jni.cc", ++ "adblock_jni.h", ++ "filtering_configuration_bindings.cc", ++ "filtering_configuration_bindings.h", ++ "java_bindings_getters.h", ++ "resource_classification_notifier_bindings.cc", ++ "resource_classification_notifier_bindings.h", + ] -+ -+ + deps = [ -+ ":java_resources", + ":jni_headers", -+ "//base:base_java", -+ "//base:jni_java", -+ "//build/android:build_java", -+ "//chrome/browser/preferences:java", -+ "//chrome/browser/profiles/android:java", -+ "//content/public/android:content_full_java", -+ "//components/browser_ui/settings/android:java", -+ "//components/prefs/android:java", -+ "//components/user_prefs/android:java", -+ "//third_party/androidx:androidx_annotation_annotation_java", -+ "//third_party/androidx:androidx_fragment_fragment_java", -+ "//third_party/androidx:androidx_preference_preference_java", ++ "//base", ++ "//components/keyed_service/content:content", + ] + -+ annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] -+ resources_package = "org.chromium.components.adblock" ++ public_deps = [ ++ "//components/adblock/content:browser", ++ "//components/adblock/core/configuration", ++ "//components/adblock/core/subscription", ++ "//components/prefs", ++ ] +} + +generate_jni("jni_headers") { @@ -1503,169 +746,672 @@ new file mode 100644 + ] +} + -+android_resources("java_resources") { ++android_library("adblock_controller_java") { + sources = [ -+ "java/res/values/adblock_settings_locales_titles.xml", ++ "java/src/org/chromium/components/adblock/AdblockContentType.java", ++ "java/src/org/chromium/components/adblock/AdblockController.java", ++ "java/src/org/chromium/components/adblock/AdblockCounters.java", ++ "java/src/org/chromium/components/adblock/FilteringConfiguration.java", ++ "java/src/org/chromium/components/adblock/ResourceClassificationNotifier.java", + ] ++ ++ srcjar_deps = [ ":jni_headers" ] ++ deps = [ ++ "//base:base_java", ++ "//base:jni_java", ++ "//third_party/androidx:androidx_annotation_annotation_java", ++ ] ++ ++ resources_package = "org.chromium.components.adblock.controller" +} + -+android_library("adblock_java_tests") { -+ testonly = true + ++android_library("adblock_java_tests_base") { ++ testonly = true + sources = [ -+ "javatests/src/org/chromium/components/adblock/AdblockControllerTest.java", -+ "javatests/src/org/chromium/components/adblock/FilteringConfigurationTest.java", -+ "javatests/src/org/chromium/components/adblock/ResourceClassificationNotifierTest.java", ++ "javatests/src/org/chromium/components/adblock/AdblockControllerTestBase.java", + "javatests/src/org/chromium/components/adblock/TestAdBlockedObserver.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesCircumventionTest.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesCspTest.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuInvTest.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuTest.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesElemhideTest.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesExceptionTest.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesFilterTest.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesHeaderFilterTest.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesRewriteTest.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesSiteKeyTest.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesSnippetsTest.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesTestsHelper.java", -+ "javatests/src/org/chromium/components/adblock/TestPagesWebsocketTest.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesCircumventionTestBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesCspTestBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuInvTestBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuTestBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesElemhideTestBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesExceptionTestBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesFilterTestBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesHeaderFilterTestBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesHelperBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesRewriteTestBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesSiteKeyTestBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesSnippetsTestBase.java", ++ "javatests/src/org/chromium/components/adblock/TestPagesWebsocketTestBase.java", + "javatests/src/org/chromium/components/adblock/TestVerificationUtils.java", + ] -+ -+ + deps = [ -+ ":adblock_java", ++ ":adblock_controller_java", + "//base:base_java", + "//base:base_java_test_support", -+ "//chrome/android:chrome_java", -+ "//chrome/browser/flags:java", -+ "//chrome/browser/settings:test_support_java", -+ "//chrome/browser/tab:java", -+ "//chrome/browser/tabmodel:java", -+ "//chrome/test/android:chrome_java_integration_test_support", -+ "//chrome/test/android:chrome_java_test_support_common", -+ "//components/infobars/android:java", -+ "//components/infobars/core:infobar_enums_java", -+ "//components/messages/android/test:test_support_java", + "//content/public/android:content_full_java", -+ "//content/public/android:content_main_dex_java", + "//content/public/test/android:content_java_test_support", -+ "//net/android:net_java_test_support", -+ "//third_party/androidx:androidx_test_monitor_java", + "//third_party/androidx:androidx_test_runner_java", -+ "//third_party/hamcrest:hamcrest_library_java", + "//third_party/junit:junit", + ] +} -diff --git a/components/adblock/android/java/res/values/adblock_settings_locales_titles.xml b/components/adblock/android/java/res/values/adblock_settings_locales_titles.xml +diff --git a/components/adblock/android/adblock_jni.cc b/components/adblock/android/adblock_jni.cc new file mode 100644 --- /dev/null -+++ b/components/adblock/android/java/res/values/adblock_settings_locales_titles.xml -@@ -0,0 +1,98 @@ -+ ++++ b/components/adblock/android/adblock_jni.cc +@@ -0,0 +1,176 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ + -+ -+ -+ | ++#include "components/adblock/android/adblock_jni.h" + -+ -+ -+ af|Afrikaans -+ am|ኣማርኛ -+ ar|العربية -+ as|অসমীয়া -+ ast|Asturianu -+ az|Azərbaycan -+ be|Беларуская мова -+ bg|български -+ bn|বাংলা (ভারত) -+ br|ar brezhoneg -+ bs|bosanski -+ ca|català -+ cs|čeština -+ cy|Cymraeg -+ da|dansk -+ de|Deutsch -+ dsb|dolnoserbski -+ el|ελληνικά -+ en|English -+ eo|Esperanto -+ es|español -+ et|eesti keel -+ eu|euskara -+ fa|فارسى -+ fi|suomi -+ fil|Filipino -+ fr|français -+ fy|Frysk -+ gl|Galego -+ gu|ગુજરાતી (ભારત) -+ he|עברית -+ hi|हिन्दी -+ hr|Hrvatski -+ hsb|hornjoserbsce -+ hu|magyar -+ hy|Հայերեն -+ id|Bahasa Indonesia -+ is|Íslenska -+ it|italiano -+ ja|日本語 -+ ka|ქართული -+ kab|Taqbaylit -+ kk|Қазақ тілі -+ kn|ಕನ್ನಡ -+ ko|한국어 -+ lt|lietuvių kalba -+ lv|latviešu valoda -+ mg|Malagasy -+ mk|македонски -+ ml|മലയാളം -+ ms|Melayu -+ nb|norsk -+ nl|Nederlands -+ nn|norsk -+ pa|ਪੰਜਾਬੀ (ਭਾਰਤ) -+ pl|polski -+ pt|português -+ rm|rumantsch -+ ro|română -+ ru|Русский -+ si|සිංහල -+ sk|slovenčina -+ sl|slovenščina -+ sq|shqip -+ sr|српски -+ sv|svenska -+ sw|Kiswahili -+ ta|தமிழ் -+ te|తెలుగు -+ th|ภาษาไทย -+ tr|Türkçe -+ uk|українська -+ ur|اردو -+ uz|o’zbek -+ vi|Tiếng Việt -+ zh|中文 -+ -+ ++#include ++#include ++#include ++ ++#include "base/android/jni_android.h" ++#include "base/android/jni_array.h" ++#include "base/android/jni_string.h" ++#include "base/android/jni_weak_ref.h" ++#include "base/logging.h" ++#include "components/adblock/android/java_bindings_getters.h" ++#include "components/adblock/android/jni_headers/AdblockController_jni.h" ++#include "components/adblock/core/subscription/subscription_config.h" ++#include "content/public/browser/browser_thread.h" ++ ++using base::android::AttachCurrentThread; ++using base::android::CheckException; ++using base::android::ConvertJavaStringToUTF8; ++using base::android::ConvertUTF8ToJavaString; ++using base::android::GetClass; ++using base::android::JavaParamRef; ++using base::android::JavaRef; ++using base::android::MethodID; ++using base::android::ScopedJavaGlobalRef; ++using base::android::ScopedJavaLocalRef; ++using base::android::ToJavaArrayOfObjects; ++using base::android::ToJavaArrayOfStrings; ++ ++namespace adblock { ++ ++namespace { ++ ++ScopedJavaLocalRef ToJava(JNIEnv* env, ++ ScopedJavaLocalRef& url_class, ++ jmethodID& url_constructor, ++ const std::string& url, ++ const std::string& title, ++ const std::string& version, ++ const std::vector& languages) { ++ ScopedJavaLocalRef url_param( ++ env, env->NewObject(url_class.obj(), url_constructor, ++ ConvertUTF8ToJavaString(env, url).obj())); ++ CheckException(env); ++ return Java_Subscription_Constructor(env, url_param, ++ ConvertUTF8ToJavaString(env, title), ++ ConvertUTF8ToJavaString(env, version), ++ ToJavaArrayOfStrings(env, languages)); ++} ++ ++std::vector> CSubscriptionsToJObjects( ++ JNIEnv* env, ++ const std::vector>& subscriptions) { ++ ScopedJavaLocalRef url_class = GetClass(env, "java/net/URL"); ++ jmethodID url_constructor = MethodID::Get( ++ env, url_class.obj(), "", "(Ljava/lang/String;)V"); ++ std::vector> jobjects; ++ jobjects.reserve(subscriptions.size()); ++ for (auto& sub : subscriptions) { ++ jobjects.push_back(ToJava( ++ env, url_class, url_constructor, sub->GetSourceUrl().spec(), ++ sub->GetTitle(), sub->GetCurrentVersion(), std::vector{})); ++ } ++ return jobjects; ++} ++ ++std::vector> CSubscriptionsToJObjects( ++ JNIEnv* env, ++ std::vector& subscriptions) { ++ ScopedJavaLocalRef url_class = GetClass(env, "java/net/URL"); ++ jmethodID url_constructor = MethodID::Get( ++ env, url_class.obj(), "", "(Ljava/lang/String;)V"); ++ std::vector> jobjects; ++ jobjects.reserve(subscriptions.size()); ++ for (auto& sub : subscriptions) { ++ if (sub.ui_visibility == SubscriptionUiVisibility::Visible) { ++ // The checks here are when one makes f.e. adblock:custom visible ++ DCHECK(sub.url.is_valid()); ++ if (sub.url.is_valid()) { ++ jobjects.push_back(ToJava(env, url_class, url_constructor, ++ sub.url.spec(), sub.title, "", ++ sub.languages)); ++ } ++ } ++ } ++ return jobjects; ++} ++ ++} // namespace ++ ++AdblockJNI::AdblockJNI(SubscriptionService* subscription_service) ++ : subscription_service_(subscription_service) { ++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ++ if (subscription_service_) { ++ subscription_service_->AddObserver(this); ++ } ++} ++ ++AdblockJNI::~AdblockJNI() { ++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ++ if (subscription_service_) { ++ subscription_service_->RemoveObserver(this); ++ } ++} ++ ++void AdblockJNI::Bind(JavaObjectWeakGlobalRef weak_java_controller) { ++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ++ weak_java_controller_ = weak_java_controller; ++} ++ ++void AdblockJNI::OnSubscriptionInstalled(const GURL& url) { ++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ++ JNIEnv* env = AttachCurrentThread(); ++ ScopedJavaLocalRef obj = weak_java_controller_.get(env); ++ if (obj.is_null()) { ++ return; ++ } ++ ++ ScopedJavaLocalRef j_url = ConvertUTF8ToJavaString(env, url.spec()); ++ Java_AdblockController_subscriptionUpdatedCallback(env, obj, j_url); ++} ++ ++} // namespace adblock ++ ++static void JNI_AdblockController_Bind( ++ JNIEnv* env, ++ const base::android::JavaParamRef& caller) { ++ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); ++ if (!adblock::GetSubscriptionService()) { ++ return; ++ } ++ JavaObjectWeakGlobalRef weak_controller_ref(env, caller); ++ adblock::GetJNI()->Bind(weak_controller_ref); ++} ++ ++static base::android::ScopedJavaLocalRef ++JNI_AdblockController_GetInstalledSubscriptions(JNIEnv* env) { ++ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); ++ auto* subscription_service = adblock::GetSubscriptionService(); ++ if (!subscription_service) { ++ return ToJavaArrayOfObjects(env, ++ std::vector>{}); ++ } ++ ++ return ToJavaArrayOfObjects( ++ env, ++ adblock::CSubscriptionsToJObjects( ++ env, subscription_service->GetCurrentSubscriptions( ++ subscription_service->GetAdblockFilteringConfiguration()))); ++} ++ ++static base::android::ScopedJavaLocalRef ++JNI_AdblockController_GetRecommendedSubscriptions(JNIEnv* env) { ++ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); ++ ++ auto list = adblock::config::GetKnownSubscriptions(); ++ return ToJavaArrayOfObjects(env, ++ adblock::CSubscriptionsToJObjects(env, list)); ++} +diff --git a/components/adblock/android/adblock_jni.h b/components/adblock/android/adblock_jni.h +new file mode 100644 +--- /dev/null ++++ b/components/adblock/android/adblock_jni.h +@@ -0,0 +1,52 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++#ifndef COMPONENTS_ADBLOCK_ANDROID_ADBLOCK_JNI_H_ ++#define COMPONENTS_ADBLOCK_ANDROID_ADBLOCK_JNI_H_ ++ ++#include ++ ++#include "base/android/jni_weak_ref.h" ++#include "base/memory/raw_ptr.h" ++#include "components/adblock/core/subscription/subscription_service.h" ++#include "components/keyed_service/core/keyed_service.h" ++ ++namespace content { ++class BrowserContext; ++} ++ ++namespace adblock { ++ ++class AdblockJNI : public SubscriptionService::SubscriptionObserver, ++ public KeyedService { ++ public: ++ explicit AdblockJNI(SubscriptionService* subscription_service); ++ ~AdblockJNI() override; ++ ++ void Bind(JavaObjectWeakGlobalRef weak_java_controller); ++ // SubscriptionService::SubscriptionObserver ++ void OnSubscriptionInstalled(const GURL& subscription_url) override; ++ ++ private: ++ SEQUENCE_CHECKER(sequence_checker_); ++ raw_ptr subscription_service_; ++ JavaObjectWeakGlobalRef weak_java_controller_; ++}; ++ ++} // namespace adblock ++ ++#endif // COMPONENTS_ADBLOCK_ANDROID_ADBLOCK_JNI_H_ +diff --git a/components/adblock/android/filtering_configuration_bindings.cc b/components/adblock/android/filtering_configuration_bindings.cc +new file mode 100644 +--- /dev/null ++++ b/components/adblock/android/filtering_configuration_bindings.cc +@@ -0,0 +1,295 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++#include "components/adblock/android/filtering_configuration_bindings.h" ++ ++#include ++#include ++ ++#include "base/android/jni_array.h" ++#include "base/android/jni_string.h" ++#include "base/ranges/algorithm.h" ++#include "components/adblock/android/java_bindings_getters.h" ++#include "components/adblock/android/jni_headers/FilteringConfiguration_jni.h" ++#include "components/adblock/core/configuration/filtering_configuration.h" ++#include "components/adblock/core/configuration/persistent_filtering_configuration.h" ++#include "components/adblock/core/subscription/subscription_service.h" ++ ++namespace adblock { ++ ++FilteringConfigurationBindings::FilteringConfigurationBindings( ++ SubscriptionService* subscription_service, ++ PrefService* pref_service) ++ : subscription_service_(subscription_service), ++ pref_service_(pref_service) {} ++ ++FilteringConfigurationBindings::~FilteringConfigurationBindings() { ++ for (auto& pair : bound_counterparts_) { ++ pair.first->RemoveObserver(this); ++ } ++} ++ ++void FilteringConfigurationBindings::Bind( ++ const std::string& configuration_name, ++ JavaObjectWeakGlobalRef filtering_configuration_java) { ++ auto* existing_configuration = ++ GetInstalledConfigurationWithName(configuration_name); ++ if (existing_configuration) { ++ auto existing_binding = bound_counterparts_.find(existing_configuration); ++ if (existing_binding == bound_counterparts_.end()) { ++ // There is no Java-side counterpart bound to this ++ // FilteringConfiguration. ++ existing_configuration->AddObserver(this); ++ } ++ bound_counterparts_[existing_configuration] = ++ std::move(filtering_configuration_java); ++ } else { ++ // There is no already-installed FilteringConfiguration with this name. ++ // Create one and bind to it. ++ auto new_filtering_configuration = ++ std::make_unique(pref_service_, ++ configuration_name); ++ new_filtering_configuration->AddObserver(this); ++ bound_counterparts_[new_filtering_configuration.get()] = ++ std::move(filtering_configuration_java); ++ subscription_service_->InstallFilteringConfiguration( ++ std::move(new_filtering_configuration)); ++ } ++} ++ ++void FilteringConfigurationBindings::RemoveConfiguration( ++ const std::string& configuration_name) { ++ auto* existing_configuration = ++ GetInstalledConfigurationWithName(configuration_name); ++ if (existing_configuration) { ++ existing_configuration->RemoveObserver(this); ++ bound_counterparts_.erase(existing_configuration); ++ subscription_service_->UninstallFilteringConfiguration(configuration_name); ++ } ++} ++ ++std::vector ++FilteringConfigurationBindings::GetConfigurations() { ++ return subscription_service_->GetInstalledFilteringConfigurations(); ++} ++ ++FilteringConfiguration* ++FilteringConfigurationBindings::GetInstalledConfigurationWithName( ++ const std::string& configuration_name) { ++ const auto installed_configurations = GetConfigurations(); ++ auto existing_configuration_it = ++ base::ranges::find(installed_configurations, configuration_name, ++ &FilteringConfiguration::GetName); ++ return existing_configuration_it != installed_configurations.end() ++ ? *existing_configuration_it ++ : nullptr; ++} ++ ++void FilteringConfigurationBindings::OnEnabledStateChanged( ++ FilteringConfiguration* config) { ++ Notify(config, Java_FilteringConfiguration_enabledStateChanged); ++} ++ ++void FilteringConfigurationBindings::OnFilterListsChanged( ++ FilteringConfiguration* config) { ++ Notify(config, Java_FilteringConfiguration_filterListsChanged); ++} ++ ++void FilteringConfigurationBindings::OnAllowedDomainsChanged( ++ FilteringConfiguration* config) { ++ Notify(config, Java_FilteringConfiguration_allowedDomainsChanged); ++} ++ ++void FilteringConfigurationBindings::OnCustomFiltersChanged( ++ FilteringConfiguration* config) { ++ Notify(config, Java_FilteringConfiguration_customFiltersChanged); ++} ++ ++void FilteringConfigurationBindings::Notify( ++ FilteringConfiguration* config, ++ FilteringConfigurationBindings::JavaEventListener event_listener_function) { ++ auto bound_weak_ref = bound_counterparts_.find(config); ++ DCHECK(bound_weak_ref != bound_counterparts_.end()) ++ << "This should never receive notifications from unobserved " ++ "FilteringConfigurations"; ++ JNIEnv* env = base::android::AttachCurrentThread(); ++ auto java_counterpart = bound_weak_ref->second.get(env); ++ if (!java_counterpart.is_null()) { ++ event_listener_function(env, java_counterpart); ++ } ++} ++ ++} // namespace adblock ++ ++// Throws when called with a name of a non existing configuration. ++adblock::FilteringConfiguration* GetConfigurationWithName( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name) { ++ auto& bindings = adblock::GetFilteringConfigurationBindings(); ++ auto* configuration = bindings.GetInstalledConfigurationWithName( ++ base::android::ConvertJavaStringToUTF8(configuration_name)); ++ if (!configuration) { ++ env->ThrowNew(env->FindClass("java/lang/IllegalStateException"), ++ "Configuration does not exist!"); ++ return nullptr; ++ } ++ return configuration; ++} ++ ++static void JNI_FilteringConfiguration_Bind( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name, ++ const base::android::JavaParamRef& caller) { ++ auto& bindings = adblock::GetFilteringConfigurationBindings(); ++ JavaObjectWeakGlobalRef weak_configuration_ref(env, caller); ++ auto cpp_name = base::android::ConvertJavaStringToUTF8(configuration_name); ++ bindings.Bind(cpp_name, weak_configuration_ref); ++} ++ ++static void JNI_FilteringConfiguration_RemoveConfiguration( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name) { ++ auto& bindings = adblock::GetFilteringConfigurationBindings(); ++ bindings.RemoveConfiguration( ++ base::android::ConvertJavaStringToUTF8(configuration_name)); ++} ++ ++static base::android::ScopedJavaLocalRef ++JNI_FilteringConfiguration_GetConfigurations(JNIEnv* env) { ++ auto& bindings = adblock::GetFilteringConfigurationBindings(); ++ std::vector configurations; ++ base::ranges::transform( ++ bindings.GetConfigurations(), std::back_inserter(configurations), ++ [](adblock::FilteringConfiguration* fc) { return fc->GetName(); }); ++ return base::android::ToJavaArrayOfStrings(env, configurations); ++} ++ ++static jboolean JNI_FilteringConfiguration_IsEnabled( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name) { ++ auto* configuration = GetConfigurationWithName(env, configuration_name); ++ return (configuration && configuration->IsEnabled()) ? JNI_TRUE : JNI_FALSE; ++} ++ ++static void JNI_FilteringConfiguration_SetEnabled( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name, ++ jboolean j_enabled) { ++ auto* configuration = GetConfigurationWithName(env, configuration_name); ++ if (configuration) { ++ configuration->SetEnabled(j_enabled == JNI_TRUE); ++ } ++} ++ ++static void JNI_FilteringConfiguration_AddFilterList( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name, ++ const base::android::JavaParamRef& url) { ++ auto* configuration = GetConfigurationWithName(env, configuration_name); ++ if (configuration) { ++ configuration->AddFilterList( ++ GURL{base::android::ConvertJavaStringToUTF8(url)}); ++ } ++} ++ ++static void JNI_FilteringConfiguration_RemoveFilterList( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name, ++ const base::android::JavaParamRef& url) { ++ auto* configuration = GetConfigurationWithName(env, configuration_name); ++ if (configuration) { ++ configuration->RemoveFilterList( ++ GURL{base::android::ConvertJavaStringToUTF8(url)}); ++ } ++} ++ ++static base::android::ScopedJavaLocalRef ++JNI_FilteringConfiguration_GetFilterLists( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name) { ++ // For simplicity, convert GURL to std::string, pass to Java, and convert from ++ // String to URL. Strings are easier to pass through JNI. ++ std::vector urls; ++ auto* configuration = GetConfigurationWithName(env, configuration_name); ++ if (configuration) { ++ base::ranges::transform(configuration->GetFilterLists(), ++ std::back_inserter(urls), &GURL::spec); ++ } ++ return base::android::ToJavaArrayOfStrings(env, urls); ++} ++ ++static void JNI_FilteringConfiguration_AddAllowedDomain( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name, ++ const base::android::JavaParamRef& allowed_domain) { ++ auto* configuration = GetConfigurationWithName(env, configuration_name); ++ if (configuration) { ++ configuration->AddAllowedDomain( ++ base::android::ConvertJavaStringToUTF8(allowed_domain)); ++ } ++} ++ ++static void JNI_FilteringConfiguration_RemoveAllowedDomain( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name, ++ const base::android::JavaParamRef& allowed_domain) { ++ auto* configuration = GetConfigurationWithName(env, configuration_name); ++ if (configuration) { ++ configuration->RemoveAllowedDomain(ConvertJavaStringToUTF8(allowed_domain)); ++ } ++} ++ ++static base::android::ScopedJavaLocalRef ++JNI_FilteringConfiguration_GetAllowedDomains( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name) { ++ auto* configuration = GetConfigurationWithName(env, configuration_name); ++ return base::android::ToJavaArrayOfStrings( ++ env, configuration ? configuration->GetAllowedDomains() ++ : std::vector{}); ++} ++ ++static void JNI_FilteringConfiguration_AddCustomFilter( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name, ++ const base::android::JavaParamRef& custom_filter) { ++ auto* configuration = GetConfigurationWithName(env, configuration_name); ++ if (configuration) { ++ configuration->AddCustomFilter(ConvertJavaStringToUTF8(custom_filter)); ++ } ++} ++ ++static void JNI_FilteringConfiguration_RemoveCustomFilter( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name, ++ const base::android::JavaParamRef& custom_filter) { ++ auto* configuration = GetConfigurationWithName(env, configuration_name); ++ if (configuration) { ++ configuration->RemoveCustomFilter( ++ base::android::ConvertJavaStringToUTF8(custom_filter)); ++ } ++} ++ ++static base::android::ScopedJavaLocalRef ++JNI_FilteringConfiguration_GetCustomFilters( ++ JNIEnv* env, ++ const base::android::JavaParamRef& configuration_name) { ++ auto* configuration = GetConfigurationWithName(env, configuration_name); ++ return base::android::ToJavaArrayOfStrings( ++ env, configuration ? configuration->GetCustomFilters() ++ : std::vector{}); ++} +diff --git a/components/adblock/android/filtering_configuration_bindings.h b/components/adblock/android/filtering_configuration_bindings.h +new file mode 100644 +--- /dev/null ++++ b/components/adblock/android/filtering_configuration_bindings.h +@@ -0,0 +1,68 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++#ifndef COMPONENTS_ADBLOCK_ANDROID_FILTERING_CONFIGURATION_BINDINGS_H_ ++#define COMPONENTS_ADBLOCK_ANDROID_FILTERING_CONFIGURATION_BINDINGS_H_ ++ ++#include ++#include ++#include ++#include "base/android/jni_weak_ref.h" ++#include "base/memory/raw_ptr.h" ++#include "base/sequence_checker.h" ++#include "components/adblock/core/configuration/filtering_configuration.h" ++#include "components/adblock/core/subscription/subscription_service.h" ++#include "components/keyed_service/core/keyed_service.h" ++#include "components/prefs/pref_service.h" ++ ++namespace adblock { ++ ++class FilteringConfigurationBindings : public KeyedService, ++ public FilteringConfiguration::Observer { ++ public: ++ explicit FilteringConfigurationBindings( ++ SubscriptionService* subscription_service, ++ PrefService* pref_service); ++ ~FilteringConfigurationBindings() override; ++ void Bind(const std::string& configuration_name, ++ JavaObjectWeakGlobalRef filtering_configuration_java); ++ void RemoveConfiguration(const std::string& configuration_name); ++ std::vector GetConfigurations(); ++ FilteringConfiguration* GetInstalledConfigurationWithName( ++ const std::string& name); ++ ++ // FilteringConfiguration::Observer: ++ void OnEnabledStateChanged(FilteringConfiguration* config) override; ++ void OnFilterListsChanged(FilteringConfiguration* config) override; ++ void OnAllowedDomainsChanged(FilteringConfiguration* config) override; ++ void OnCustomFiltersChanged(FilteringConfiguration* config) override; ++ ++ private: ++ using JavaEventListener = void(JNIEnv* env, ++ const base::android::JavaRef& obj); ++ void Notify(FilteringConfiguration* config, ++ JavaEventListener event_listener_function); ++ SEQUENCE_CHECKER(sequence_checker_); ++ raw_ptr subscription_service_; ++ raw_ptr pref_service_; ++ std::map ++ bound_counterparts_; ++}; ++ ++} // namespace adblock ++ ++#endif // COMPONENTS_ADBLOCK_ANDROID_FILTERING_CONFIGURATION_BINDINGS_H_ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock/AdblockContentType.java b/components/adblock/android/java/src/org/chromium/components/adblock/AdblockContentType.java new file mode 100644 --- /dev/null +++ b/components/adblock/android/java/src/org/chromium/components/adblock/AdblockContentType.java -@@ -0,0 +1,62 @@ +@@ -0,0 +1,61 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -1720,8 +1466,7 @@ new file mode 100644 + } + + public static AdblockContentType fromInt(int i) { -+ AdblockContentType type = intToContentTypeMap.get(Integer.valueOf(i)); -+ return type; ++ return intToContentTypeMap.get(i); + } + + public int getValue() { @@ -1732,7 +1477,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock new file mode 100644 --- /dev/null +++ b/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java -@@ -0,0 +1,258 @@ +@@ -0,0 +1,203 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -1753,33 +1498,21 @@ new file mode 100644 +package org.chromium.components.adblock; + +import android.content.Context; -+import android.content.res.Resources; +import android.util.Log; +import android.webkit.URLUtil; + -+import androidx.annotation.NonNull; -+import androidx.annotation.Nullable; +import androidx.annotation.UiThread; + -+import org.chromium.base.ContextUtils; +import org.chromium.base.ThreadUtils; +import org.chromium.base.annotations.CalledByNative; +import org.chromium.base.annotations.NativeMethods; -+import org.chromium.chrome.browser.preferences.Pref; -+import org.chromium.chrome.browser.profiles.Profile; -+import org.chromium.components.user_prefs.UserPrefs; ++import org.chromium.components.adblock.controller.R; + -+import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; -+import java.util.Collections; -+import java.util.HashMap; +import java.util.List; -+import java.util.Map; -+import java.util.Set; -+import java.util.concurrent.CopyOnWriteArraySet; + +/** + * @brief Main access point for java UI code to control ad filtering. @@ -1876,35 +1609,9 @@ new file mode 100644 + } + + @UiThread -+ public void setMoreOptionsEnabled(boolean enabled) { -+ UserPrefs.get(Profile.getLastUsedRegularProfile()) -+ .setBoolean(Pref.ADBLOCK_MORE_OPTIONS_ENABLED, enabled); -+ } -+ -+ @UiThread -+ public boolean areMoreOptionsEnabled() { -+ return UserPrefs.get(Profile.getLastUsedRegularProfile()) -+ .getBoolean(Pref.ADBLOCK_MORE_OPTIONS_ENABLED); -+ } -+ -+ @UiThread -+ public List getRecommendedSubscriptions(Context context) { -+ final List recommendedSubscriptions = -+ (List) (List) Arrays.asList( -+ AdblockControllerJni.get().getRecommendedSubscriptions()); -+ final Map localeToTitle = getLocaleToTitleMap(context); -+ for (int i = 0; i < recommendedSubscriptions.size(); ++i) { -+ for (final String language : recommendedSubscriptions.get(i).languages()) { -+ final String title = localeToTitle.get(language); -+ if (title != null && !title.isEmpty()) { -+ recommendedSubscriptions.set(i, -+ new Subscription(recommendedSubscriptions.get(i).url(), title, -+ "" /*version*/, recommendedSubscriptions.get(i).languages())); -+ break; -+ } -+ } -+ } -+ return recommendedSubscriptions; ++ public List getRecommendedSubscriptions() { ++ return (List) (List) Arrays.asList( ++ AdblockControllerJni.get().getRecommendedSubscriptions()); + } + + @UiThread @@ -1954,23 +1661,6 @@ new file mode 100644 + return result; + } + -+ private Map getLocaleToTitleMap(final Context context) { -+ final Resources resources = context.getResources(); -+ final String[] locales = -+ resources.getStringArray(R.array.fragment_adblock_general_locale_title); -+ final String separator = resources.getString(R.string.fragment_adblock_general_separator); -+ final Map localeToTitle = new HashMap<>(locales.length); -+ for (final String localeAndTitlePair : locales) { -+ // in `String.split()` separator is a regexp, but we want to treat it as a string -+ final int separatorIndex = localeAndTitlePair.indexOf(separator); -+ final String locale = localeAndTitlePair.substring(0, separatorIndex); -+ final String title = localeAndTitlePair.substring(separatorIndex + 1); -+ localeToTitle.put(locale, title); -+ } -+ -+ return localeToTitle; -+ } -+ + @CalledByNative + private void subscriptionUpdatedCallback(final String url) { + ThreadUtils.assertOnUiThread(); @@ -2101,7 +1791,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock new file mode 100644 --- /dev/null +++ b/components/adblock/android/java/src/org/chromium/components/adblock/FilteringConfiguration.java -@@ -0,0 +1,245 @@ +@@ -0,0 +1,348 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -2138,6 +1828,7 @@ new file mode 100644 +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; ++import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Set; @@ -2159,6 +1850,7 @@ new file mode 100644 + private final Set mConfigurationChangeObservers = new HashSet<>(); + protected final Set mSubscriptionUpdateObservers = new HashSet<>(); + private final String mName; ++ private final static Set mConfigurations = new HashSet<>(); + + public interface ConfigurationChangeObserver { + /** @@ -2191,11 +1883,6 @@ new file mode 100644 + void onSubscriptionDownloaded(final URL url); + } + -+ public FilteringConfiguration(String configuration_name) { -+ mName = configuration_name; -+ FilteringConfigurationJni.get().bind(mName, this); -+ } -+ + @UiThread + public void addObserver(final ConfigurationChangeObserver observer) { + mConfigurationChangeObservers.add(observer); @@ -2216,28 +1903,43 @@ new file mode 100644 + mSubscriptionUpdateObservers.remove(observer); + } + ++ /** ++ * @throws IllegalStateException when called on removed FilteringConfiguration. ++ */ + @UiThread -+ public void setEnabled(boolean enabled) { ++ public void setEnabled(boolean enabled) throws IllegalStateException { + FilteringConfigurationJni.get().setEnabled(mName, enabled); + } + ++ /** ++ * @throws IllegalStateException when called on removed FilteringConfiguration. ++ */ + @UiThread -+ public boolean isEnabled() { ++ public boolean isEnabled() throws IllegalStateException { + return FilteringConfigurationJni.get().isEnabled(mName); + } + ++ /** ++ * @throws IllegalStateException when called on removed FilteringConfiguration. ++ */ + @UiThread -+ public void addFilterList(final URL url) { ++ public void addFilterList(final URL url) throws IllegalStateException { + FilteringConfigurationJni.get().addFilterList(mName, url.toString()); + } + ++ /** ++ * @throws IllegalStateException when called on removed FilteringConfiguration. ++ */ + @UiThread -+ public void removeFilterList(final URL url) { ++ public void removeFilterList(final URL url) throws IllegalStateException { + FilteringConfigurationJni.get().removeFilterList(mName, url.toString()); + } + ++ /** ++ * @throws IllegalStateException when called on removed FilteringConfiguration. ++ */ + @UiThread -+ public List getFilterLists() { ++ public List getFilterLists() throws IllegalStateException { + List filterListsStr = + Arrays.asList(FilteringConfigurationJni.get().getFilterLists(mName)); + List filterLists = new ArrayList(); @@ -2251,43 +1953,132 @@ new file mode 100644 + return filterLists; + } + ++ /** ++ * @throws IllegalStateException when called on removed FilteringConfiguration. ++ */ + @UiThread -+ public void addAllowedDomain(final String domain) { ++ public void addAllowedDomain(final String domain) throws IllegalStateException { + String sanitizedDomain = sanitizeSite(domain); + if (sanitizedDomain == null) return; + FilteringConfigurationJni.get().addAllowedDomain(mName, sanitizedDomain); + } + ++ /** ++ * @throws IllegalStateException when called on removed FilteringConfiguration. ++ */ ++ + @UiThread -+ public void removeAllowedDomain(final String domain) { ++ public void removeAllowedDomain(final String domain) throws IllegalStateException { + String sanitizedDomain = sanitizeSite(domain); + if (sanitizedDomain == null) return; + FilteringConfigurationJni.get().removeAllowedDomain(mName, sanitizedDomain); + } + ++ /** ++ * @throws IllegalStateException when called on removed FilteringConfiguration. ++ */ + @UiThread -+ public List getAllowedDomains() { ++ public List getAllowedDomains() throws IllegalStateException { + List allowedDomains = + Arrays.asList(FilteringConfigurationJni.get().getAllowedDomains(mName)); + Collections.sort(allowedDomains); + return allowedDomains; + } + ++ /** ++ * @throws IllegalStateException when called on removed FilteringConfiguration. ++ */ + @UiThread -+ public void addCustomFilter(final String filter) { ++ public void addCustomFilter(final String filter) throws IllegalStateException { + FilteringConfigurationJni.get().addCustomFilter(mName, filter); + } + ++ /** ++ * @throws IllegalStateException when called on removed FilteringConfiguration. ++ */ + @UiThread -+ public void removeCustomFilter(final String filter) { ++ public void removeCustomFilter(final String filter) throws IllegalStateException { + FilteringConfigurationJni.get().removeCustomFilter(mName, filter); + } + ++ /** ++ * @throws IllegalStateException when called on removed FilteringConfiguration. ++ */ + @UiThread -+ public List getCustomFilters() { ++ public List getCustomFilters() throws IllegalStateException { + return Arrays.asList(FilteringConfigurationJni.get().getCustomFilters(mName)); + } + ++ @UiThread ++ public static FilteringConfiguration createConfiguration(final String configuration_name) { ++ FilteringConfiguration configuration = findConfigurationByName(configuration_name); ++ if (configuration == null) { ++ configuration = new FilteringConfiguration(configuration_name); ++ mConfigurations.add(configuration); ++ } ++ return configuration; ++ } ++ ++ @UiThread ++ public static void removeConfiguration(final String configuration_name) { ++ final FilteringConfiguration configuration = findConfigurationByName(configuration_name); ++ if (configuration != null) { ++ mConfigurations.remove(configuration); ++ } ++ // Even if on Java side there is no such a FilteringConfiguration object, it can exist ++ // on native side. ++ FilteringConfigurationJni.get().removeConfiguration(configuration_name); ++ } ++ ++ @UiThread ++ public static List getConfigurations() { ++ // Get all existing (on C++ side) configurations, if there is no matching Java ++ // instance present in mConfigurations set then create one and add. ++ final String[] existing_configurations_names = ++ FilteringConfigurationJni.get().getConfigurations(); ++ final List configurations_to_return = ++ new ArrayList(); ++ // If mConfigurations contains configurations which are not present on the list returned ++ // from FilteringConfigurationJni.get().getConfigurations() then we need to remove them ++ // as it means that a configuration has been removed on native side (not via Java API). ++ mConfigurations.removeIf(filteringConfiguration -> { ++ return !Arrays.asList(existing_configurations_names) ++ .contains(filteringConfiguration.mName); ++ }); ++ for (final String configuration_name : existing_configurations_names) { ++ FilteringConfiguration configuration = findConfigurationByName(configuration_name); ++ if (configuration == null) { ++ configuration = new FilteringConfiguration(configuration_name); ++ mConfigurations.add(configuration); ++ } ++ configurations_to_return.add(configuration); ++ } ++ Collections.sort(configurations_to_return, new Comparator() { ++ @Override ++ public int compare( ++ final FilteringConfiguration object1, final FilteringConfiguration object2) { ++ return object1.mName.compareTo(object2.mName); ++ } ++ }); ++ return configurations_to_return; ++ } ++ ++ // TODO(kzlomek): Make it private once we remove AdblockController (DPD-2120). ++ protected FilteringConfiguration(final String configuration_name) { ++ mName = configuration_name; ++ FilteringConfigurationJni.get().bind(mName, this); ++ } ++ ++ @UiThread ++ private static FilteringConfiguration findConfigurationByName(final String configuration_name) { ++ for (final FilteringConfiguration configuration : mConfigurations) { ++ if (configuration.mName.equals(configuration_name)) { ++ return configuration; ++ } ++ } ++ return null; ++ } ++ + private String sanitizeSite(String site) { + // |site| is raw user input. We expect it to be either a domain or a URL. + try { @@ -2334,6 +2125,8 @@ new file mode 100644 + @NativeMethods + interface Natives { + void bind(String configuration_name, FilteringConfiguration caller); ++ void removeConfiguration(String configuration_name); ++ String[] getConfigurations(); + boolean isEnabled(String configuration_name); + void setEnabled(String configuration_name, boolean enabled); + void addFilterList(String configuration_name, String url); @@ -2539,11 +2332,57 @@ new file mode 100644 + void bind(ResourceClassificationNotifier caller); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockControllerTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockControllerTest.java +diff --git a/components/adblock/android/java_bindings_getters.h b/components/adblock/android/java_bindings_getters.h new file mode 100644 --- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockControllerTest.java -@@ -0,0 +1,87 @@ ++++ b/components/adblock/android/java_bindings_getters.h +@@ -0,0 +1,41 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++#ifndef COMPONENTS_ADBLOCK_ANDROID_JAVA_BINDINGS_GETTERS_H_ ++#define COMPONENTS_ADBLOCK_ANDROID_JAVA_BINDINGS_GETTERS_H_ ++ ++#include "components/adblock/android/adblock_jni.h" ++#include "components/adblock/android/filtering_configuration_bindings.h" ++#include "components/adblock/android/resource_classification_notifier_bindings.h" ++#include "components/adblock/core/subscription/subscription_service.h" ++ ++namespace adblock { ++ ++SubscriptionService* GetSubscriptionService(); ++ ++AdblockJNI* GetJNI(); ++ ++FilteringConfigurationBindings& GetFilteringConfigurationBindings(); ++ ++ResourceClassificationNotifierBindings& ++GetResourceClassificationNotifierBindings(); ++ ++int GetTabId(content::RenderFrameHost* render_frame_host); ++ ++} // namespace adblock ++ ++#endif // COMPONENTS_ADBLOCK_ANDROID_JAVA_BINDINGS_GETTERS_H_ +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockControllerTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockControllerTestBase.java +new file mode 100644 +--- /dev/null ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockControllerTestBase.java +@@ -0,0 +1,63 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -2566,45 +2405,21 @@ new file mode 100644 +import androidx.test.filters.LargeTest; + +import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; +import org.junit.Test; -+import org.junit.runner.RunWith; + +import org.chromium.base.test.util.CallbackHelper; -+import org.chromium.base.test.util.CommandLineFlags; -+import org.chromium.base.test.util.DisabledTest; +import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.IntegrationTest; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.AdblockController; +import org.chromium.content_public.browser.test.util.TestThreadUtils; + -+import java.net.MalformedURLException; -+import java.net.URL; +import java.util.ArrayList; -+import java.util.Arrays; -+import java.util.HashMap; +import java.util.List; -+import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class AdblockControllerTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private CallbackHelper mHelper = new CallbackHelper(); -+ -+ @Before -+ public void setUp() { -+ mActivityTestRule.startMainActivityOnBlankPage(); -+ } ++public abstract class AdblockControllerTestBase { ++ private final CallbackHelper mHelper = new CallbackHelper(); + + @Test + @IntegrationTest @@ -2631,530 +2446,11 @@ new file mode 100644 + Assert.assertEquals(expectedAllowedDomains, allowedDomains); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/FilteringConfigurationTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/FilteringConfigurationTest.java -new file mode 100644 ---- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/FilteringConfigurationTest.java -@@ -0,0 +1,366 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+package org.chromium.components.adblock; -+ -+import androidx.test.InstrumentationRegistry; -+ -+import androidx.test.filters.LargeTest; -+ -+import org.junit.After; -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; -+import org.junit.Test; -+import org.junit.runner.RunWith; -+ -+import org.chromium.base.test.util.CallbackHelper; -+import org.chromium.base.test.util.CommandLineFlags; -+import org.chromium.base.test.util.DisabledTest; -+import org.chromium.base.test.util.Feature; -+import org.chromium.base.test.util.IntegrationTest; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.browser.tab.Tab; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.content_public.browser.test.util.TestThreadUtils; -+import org.chromium.content_public.common.ContentSwitches; -+import org.chromium.net.test.EmbeddedTestServer; -+ -+import java.net.MalformedURLException; -+import java.net.URL; -+import java.util.ArrayList; -+import java.util.Arrays; -+import java.util.HashMap; -+import java.util.List; -+import java.util.Map; -+import java.util.concurrent.TimeUnit; -+import java.util.concurrent.TimeoutException; -+ -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, -+ ContentSwitches.HOST_RESOLVER_RULES + "=MAP * 127.0.0.1"}) -+public class FilteringConfigurationTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private CallbackHelper mHelper = new CallbackHelper(); -+ public FilteringConfiguration mConfigurationA; -+ public FilteringConfiguration mConfigurationB; -+ private EmbeddedTestServer mTestServer; -+ private String mTestUrl; -+ -+ private class TestConfigurationChangeObserver -+ implements FilteringConfiguration.ConfigurationChangeObserver { -+ public volatile boolean mOnEnabledStateChangedCalled; -+ public volatile boolean mOnFilterListsChanged; -+ public volatile boolean mOnAllowedDomainsChanged; -+ public volatile boolean mOnCustomFiltersChanged; -+ -+ public TestConfigurationChangeObserver() { -+ mOnEnabledStateChangedCalled = false; -+ mOnFilterListsChanged = false; -+ mOnAllowedDomainsChanged = false; -+ mOnCustomFiltersChanged = false; -+ } -+ -+ @Override -+ public void onEnabledStateChanged() { -+ mOnEnabledStateChangedCalled = true; -+ } -+ @Override -+ public void onFilterListsChanged() { -+ mOnFilterListsChanged = true; -+ } -+ -+ @Override -+ public void onAllowedDomainsChanged() { -+ mOnAllowedDomainsChanged = true; -+ } -+ -+ @Override -+ public void onCustomFiltersChanged() { -+ mOnCustomFiltersChanged = true; -+ } -+ } -+ -+ public void loadTestUrl() throws InterruptedException { -+ mActivityTestRule.loadUrl(mTestUrl, 5); -+ } -+ -+ @Before -+ public void setUp() throws TimeoutException { -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ mConfigurationA = new FilteringConfiguration("a"); -+ mConfigurationB = new FilteringConfiguration("b"); -+ -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ mActivityTestRule.startMainActivityOnBlankPage(); -+ mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); -+ mTestUrl = mTestServer.getURLWithHostName( -+ "test.org", "/chrome/test/data/adblock/innermost_frame.html"); -+ } -+ -+ @After -+ public void tearDown() { -+ mTestServer.stopAndDestroyServer(); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void addingAllowedDomains() throws Exception { -+ final List allowedDomainsA = new ArrayList<>(); -+ final List allowedDomainsB = new ArrayList<>(); -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ mConfigurationA.addAllowedDomain("foobar.com"); -+ mConfigurationA.addAllowedDomain("domain.com/path/to/page.html"); -+ mConfigurationA.addAllowedDomain("domain.com/duplicate.html"); -+ allowedDomainsA.addAll(mConfigurationA.getAllowedDomains()); -+ -+ mConfigurationB.addAllowedDomain("https://scheme.com/path.html"); -+ mConfigurationB.addAllowedDomain("https://second.com"); -+ mConfigurationB.removeAllowedDomain("https://second.com"); -+ mConfigurationB.addAllowedDomain("gibberish"); -+ allowedDomainsB.addAll(mConfigurationB.getAllowedDomains()); -+ -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ // We expect to see a sorted collection of domains (not URLs) without duplicates. -+ ArrayList expectedAllowedDomainsA = new ArrayList(); -+ expectedAllowedDomainsA.add("domain.com"); -+ expectedAllowedDomainsA.add("foobar.com"); -+ Assert.assertEquals(expectedAllowedDomainsA, allowedDomainsA); -+ -+ // We expect not to see second.com because it was removed after being added. -+ ArrayList expectedAllowedDomainsB = new ArrayList(); -+ expectedAllowedDomainsB.add("scheme.com"); -+ expectedAllowedDomainsB.add("www.gibberish.com"); -+ Assert.assertEquals(expectedAllowedDomainsB, allowedDomainsB); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void addingCustomFilters() throws Exception { -+ final List customFiltersA = new ArrayList<>(); -+ final List customFiltersB = new ArrayList<>(); -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ mConfigurationA.addCustomFilter("foobar.com"); -+ mConfigurationA.addCustomFilter("foobar.com"); -+ mConfigurationA.addCustomFilter("abc"); -+ customFiltersA.addAll(mConfigurationA.getCustomFilters()); -+ -+ mConfigurationB.addCustomFilter("https://scheme.com/path.html"); -+ mConfigurationB.addCustomFilter("https://second.com"); -+ mConfigurationB.removeCustomFilter("https://second.com"); -+ customFiltersB.addAll(mConfigurationB.getCustomFilters()); -+ -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ // We expect to see a collection of custom filters without duplicates. -+ // The order represents order of addition. -+ ArrayList expectedCustomFiltersA = new ArrayList(); -+ expectedCustomFiltersA.add("foobar.com"); -+ expectedCustomFiltersA.add("abc"); -+ Assert.assertEquals(expectedCustomFiltersA, customFiltersA); -+ -+ // We expect not to see https://second.com because it was removed after being added. -+ ArrayList expectedCustomFiltersB = new ArrayList(); -+ expectedCustomFiltersB.add("https://scheme.com/path.html"); -+ Assert.assertEquals(expectedCustomFiltersB, customFiltersB); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void addingFilterLists() throws Exception { -+ final URL filterList1 = new URL("http://filters.com/list1.txt"); -+ final URL filterList2 = new URL("http://filters.com/list2.txt"); -+ final List filterListsA = new ArrayList(); -+ final List filterListsB = new ArrayList(); -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ mConfigurationA.addFilterList(filterList1); -+ mConfigurationA.addFilterList(filterList2); -+ mConfigurationA.addFilterList(filterList1); -+ filterListsA.addAll(mConfigurationA.getFilterLists()); -+ -+ mConfigurationB.addFilterList(filterList1); -+ mConfigurationB.addFilterList(filterList2); -+ mConfigurationB.removeFilterList(filterList1); -+ filterListsB.addAll(mConfigurationB.getFilterLists()); -+ -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ ArrayList expectedFilterListsA = new ArrayList(); -+ expectedFilterListsA.add(filterList1); -+ expectedFilterListsA.add(filterList2); -+ Assert.assertEquals(expectedFilterListsA, filterListsA); -+ -+ ArrayList expectedFilterListsB = new ArrayList(); -+ expectedFilterListsB.add(filterList2); -+ Assert.assertEquals(expectedFilterListsB, filterListsB); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void aliasedConfigurations() throws Exception { -+ final URL filterList1 = new URL("http://filters.com/list1.txt"); -+ final URL filterList2 = new URL("http://filters.com/list2.txt"); -+ final List filterListsA = new ArrayList(); -+ final List filterListsB = new ArrayList(); -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ // Create a new FilteringConfiguration with a name of one that -+ // already exist. -+ FilteringConfiguration aliasedConfiguration = new FilteringConfiguration("a"); -+ -+ // We add filter lists only to the original configuration instance. -+ mConfigurationA.addFilterList(filterList1); -+ mConfigurationA.addFilterList(filterList2); -+ -+ // We check what filter lists are present in the original and in the aliased instance. -+ filterListsA.addAll(mConfigurationA.getFilterLists()); -+ filterListsB.addAll(aliasedConfiguration.getFilterLists()); -+ -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ ArrayList expectedFilterLists = new ArrayList(); -+ expectedFilterLists.add(filterList1); -+ expectedFilterLists.add(filterList2); -+ Assert.assertEquals(expectedFilterLists, filterListsA); -+ Assert.assertEquals(expectedFilterLists, filterListsB); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void configurationChangeObserverNotified() throws Exception { -+ final URL filterList1 = new URL("http://filters.com/list1.txt"); -+ final TestConfigurationChangeObserver observer = new TestConfigurationChangeObserver(); -+ Assert.assertFalse(observer.mOnEnabledStateChangedCalled); -+ Assert.assertFalse(observer.mOnAllowedDomainsChanged); -+ Assert.assertFalse(observer.mOnCustomFiltersChanged); -+ Assert.assertFalse(observer.mOnFilterListsChanged); -+ -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ // We'll create an aliased instance which will receive notifications triggered by -+ // changes made to the original instance. -+ FilteringConfiguration aliasedConfiguration = new FilteringConfiguration("a"); -+ aliasedConfiguration.addObserver(observer); -+ -+ mConfigurationA.addFilterList(filterList1); -+ mConfigurationA.addAllowedDomain("test.com"); -+ mConfigurationA.addCustomFilter("test.com"); -+ mConfigurationA.setEnabled(false); -+ -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ Assert.assertTrue(observer.mOnEnabledStateChangedCalled); -+ Assert.assertTrue(observer.mOnAllowedDomainsChanged); -+ Assert.assertTrue(observer.mOnCustomFiltersChanged); -+ Assert.assertTrue(observer.mOnFilterListsChanged); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void resourceBlockedByFilter() throws Exception { -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ mConfigurationA.addCustomFilter("resource.png"); -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ loadTestUrl(); -+ TestVerificationUtils.expectResourceBlocked(mActivityTestRule, "subresource"); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void resourceAllowedByFilter() throws Exception { -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ mConfigurationA.addCustomFilter("resource.png"); -+ // Allowing filter for the mocked test.org domain that mTestServer hosts. -+ mConfigurationA.addCustomFilter("@@test.org$document"); -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ loadTestUrl(); -+ TestVerificationUtils.expectResourceShown(mActivityTestRule, "subresource"); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void resourceAllowedByAllowedDomain() throws Exception { -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ mConfigurationA.addCustomFilter("resource.png"); -+ mConfigurationA.addAllowedDomain("test.org"); -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ loadTestUrl(); -+ TestVerificationUtils.expectResourceShown(mActivityTestRule, "subresource"); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void resourceBlockedBySecondConfiguration() throws Exception { -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ // ConfigurationA allows the resource. -+ // Allowing rules take precedence within a FilteringConfiguration. -+ mConfigurationA.addCustomFilter("resource.png"); -+ mConfigurationA.addAllowedDomain("test.org"); -+ // But ConfigurationB blocks the resource. -+ // Blocking takes precedence across FilteringConfigurations. -+ mConfigurationB.addCustomFilter("resource.png"); -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ loadTestUrl(); -+ TestVerificationUtils.expectResourceBlocked(mActivityTestRule, "subresource"); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void noBlockingWithoutFilters() throws Exception { -+ loadTestUrl(); -+ TestVerificationUtils.expectResourceShown(mActivityTestRule, "subresource"); -+ } -+} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/ResourceClassificationNotifierTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/ResourceClassificationNotifierTest.java -new file mode 100644 ---- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/ResourceClassificationNotifierTest.java -@@ -0,0 +1,143 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+package org.chromium.components.adblock; -+ -+import androidx.test.InstrumentationRegistry; -+import android.util.Log; -+ -+import androidx.test.filters.LargeTest; -+ -+import org.junit.After; -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; -+import org.junit.Test; -+import org.junit.runner.RunWith; -+ -+import org.chromium.base.test.util.CallbackHelper; -+import org.chromium.base.test.util.CommandLineFlags; -+import org.chromium.base.test.util.DisabledTest; -+import org.chromium.base.test.util.Feature; -+import org.chromium.base.test.util.IntegrationTest; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.browser.tab.Tab; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.content_public.browser.test.util.TestThreadUtils; -+import org.chromium.content_public.common.ContentSwitches; -+import org.chromium.net.test.EmbeddedTestServer; -+ -+import java.net.MalformedURLException; -+import java.net.URL; -+import java.util.ArrayList; -+import java.util.Arrays; -+import java.util.HashMap; -+import java.util.List; -+import java.util.Map; -+import java.util.concurrent.TimeUnit; -+import java.util.concurrent.TimeoutException; -+ -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, -+ ContentSwitches.HOST_RESOLVER_RULES + "=MAP * 127.0.0.1"}) -+public class ResourceClassificationNotifierTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private CallbackHelper mHelper = new CallbackHelper(); -+ public FilteringConfiguration mConfiguration; -+ public TestAdBlockedObserver mAdBlockedObserver = new TestAdBlockedObserver(); -+ -+ private EmbeddedTestServer mTestServer; -+ private String mTestUrl; -+ -+ public void loadTestUrl() throws InterruptedException { -+ mActivityTestRule.loadUrl(mTestUrl, 5); -+ } -+ -+ @Before -+ public void setUp() throws TimeoutException { -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ mConfiguration = new FilteringConfiguration("a"); -+ ResourceClassificationNotifier.getInstance().addOnAdBlockedObserver(mAdBlockedObserver); -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ mActivityTestRule.startMainActivityOnBlankPage(); -+ mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); -+ mTestUrl = mTestServer.getURLWithHostName( -+ "test.org", "/chrome/test/data/adblock/innermost_frame.html"); -+ } -+ -+ @After -+ public void tearDown() { -+ mTestServer.stopAndDestroyServer(); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void noNotificationWithoutBlocking() throws Exception { -+ loadTestUrl(); -+ -+ Assert.assertTrue(mAdBlockedObserver.blockedInfos.isEmpty()); -+ Assert.assertTrue(mAdBlockedObserver.allowedInfos.isEmpty()); -+ Assert.assertTrue(mAdBlockedObserver.allowedPageInfos.isEmpty()); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void resourceBlockedByFilter() throws Exception { -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ mConfiguration.addCustomFilter("resource.png"); -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ loadTestUrl(); -+ // Observer was notified about the blocking -+ Assert.assertTrue(mAdBlockedObserver.isBlocked("resource.png")); -+ Assert.assertTrue(mAdBlockedObserver.allowedInfos.isEmpty()); -+ Assert.assertTrue(mAdBlockedObserver.allowedPageInfos.isEmpty()); -+ } -+ -+ @Test -+ @IntegrationTest -+ @LargeTest -+ @Feature({"adblock"}) -+ public void pageAllowed() throws Exception { -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ mConfiguration.addCustomFilter("resource.png"); -+ mConfiguration.addAllowedDomain("test.org"); -+ mHelper.notifyCalled(); -+ }); -+ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); -+ loadTestUrl(); -+ // Observer was notified about the allowed resource -+ Assert.assertTrue(mAdBlockedObserver.blockedInfos.isEmpty()); -+ Assert.assertTrue(mAdBlockedObserver.isAllowed("resource.png")); -+ -+ // TODO(mpawlowski): The observer could also be notified about the entire domain being -+ // allowed: Assert.assertTrue(mAdBlockedObserver.isPageAllowed("test.org")); However this is -+ // currently broken with multiple FilteringConfigurations (DPD-1729). -+ } -+} diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestAdBlockedObserver.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestAdBlockedObserver.java new file mode 100644 --- /dev/null +++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestAdBlockedObserver.java -@@ -0,0 +1,183 @@ +@@ -0,0 +1,176 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3175,47 +2471,48 @@ new file mode 100644 +package org.chromium.components.adblock; + +import org.junit.Assert; -+import org.junit.Rule; ++ ++import org.chromium.components.adblock.AdblockContentType; ++import org.chromium.components.adblock.AdblockCounters; ++import org.chromium.components.adblock.ResourceClassificationNotifier; + +import java.net.URL; -+import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.CountDownLatch; -+import java.util.concurrent.TimeoutException; + +public class TestAdBlockedObserver implements ResourceClassificationNotifier.AdBlockedObserver { + @Override + public void onAdAllowed(AdblockCounters.ResourceInfo info) { + allowedInfos.add(info); -+ Assert.assertTrue(info.getSubscription().equals(getExpectedSubscriptionUrl())); ++ Assert.assertEquals(info.getSubscription(), getExpectedSubscriptionUrl()); + CheckAndCountDownLatch(Decision.ALLOWED, info.getRequestUrl().split("\\?")[0]); + } + + @Override + public void onAdBlocked(AdblockCounters.ResourceInfo info) { + blockedInfos.add(info); -+ Assert.assertTrue(info.getSubscription().equals(getExpectedSubscriptionUrl())); ++ Assert.assertEquals(info.getSubscription(), getExpectedSubscriptionUrl()); + CheckAndCountDownLatch(Decision.BLOCKED, info.getRequestUrl().split("\\?")[0]); + } + + @Override + public void onPageAllowed(AdblockCounters.ResourceInfo info) { + allowedPageInfos.add(info); -+ Assert.assertTrue(info.getSubscription().equals(getExpectedSubscriptionUrl())); ++ Assert.assertEquals(info.getSubscription(), getExpectedSubscriptionUrl()); + } + + @Override + public void onPopupAllowed(AdblockCounters.ResourceInfo info) { + allowedPopupsInfos.add(info); -+ Assert.assertTrue(info.getSubscription().equals(getExpectedSubscriptionUrl())); ++ Assert.assertEquals(info.getSubscription(), getExpectedSubscriptionUrl()); + } + + @Override + public void onPopupBlocked(AdblockCounters.ResourceInfo info) { + blockedPopupsInfos.add(info); -+ Assert.assertTrue(info.getSubscription().equals(getExpectedSubscriptionUrl())); ++ Assert.assertEquals(info.getSubscription(), getExpectedSubscriptionUrl()); + } + + public boolean isBlocked(String url) { @@ -3243,11 +2540,7 @@ new file mode 100644 + } + + public int numBlockedPopups() { -+ int result = 0; -+ for (AdblockCounters.ResourceInfo info : blockedPopupsInfos) { -+ ++result; -+ } -+ return result; ++ return blockedPopupsInfos.size(); + } + + public boolean isAllowed(String url) { @@ -3283,11 +2576,7 @@ new file mode 100644 + } + + public int numAllowedPopups() { -+ int result = 0; -+ for (AdblockCounters.ResourceInfo info : allowedPopupsInfos) { -+ ++result; -+ } -+ return result; ++ return allowedPopupsInfos.size(); + } + + public void setExpectedSubscriptionUrl(URL url) { @@ -3329,20 +2618,20 @@ new file mode 100644 + } + + private URL mTestSubscriptionUrl; -+ List blockedInfos = new CopyOnWriteArrayList<>(); -+ List allowedInfos = new CopyOnWriteArrayList<>(); -+ List allowedPageInfos = new CopyOnWriteArrayList<>(); -+ List blockedPopupsInfos = new CopyOnWriteArrayList<>(); -+ List allowedPopupsInfos = new CopyOnWriteArrayList<>(); ++ public List blockedInfos = new CopyOnWriteArrayList<>(); ++ public List allowedInfos = new CopyOnWriteArrayList<>(); ++ public List allowedPageInfos = new CopyOnWriteArrayList<>(); ++ public List blockedPopupsInfos = new CopyOnWriteArrayList<>(); ++ public List allowedPopupsInfos = new CopyOnWriteArrayList<>(); + CountDownLatch countDownLatch; + Set expectedAllowed; + Set expectedBlocked; +}; -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCircumventionTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCircumventionTest.java +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCircumventionTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCircumventionTestBase.java new file mode 100644 --- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCircumventionTest.java -@@ -0,0 +1,90 @@ ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCircumventionTestBase.java +@@ -0,0 +1,64 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3364,80 +2653,54 @@ new file mode 100644 + +import androidx.test.filters.LargeTest; + -+import org.junit.After; +import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; +import org.junit.Test; -+import org.junit.runner.RunWith; + -+import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.content_public.browser.test.util.DOMUtils; +import org.chromium.content_public.browser.test.util.JavaScriptUtils; + -+import java.lang.Thread; -+import java.util.concurrent.TimeoutException; ++public abstract class TestPagesCircumventionTestBase { ++ private TestPagesHelperBase mHelper; + -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesCircumventionTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); -+ -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ mHelper.addFilterList(TestPagesTestsHelper.TESTPAGES_SUBSCRIPTION); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); ++ public void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; ++ mHelper.addFilterList(TestPagesHelperBase.TESTPAGES_SUBSCRIPTION); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyCircumventionInlineStyleNotImportant() -+ throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.CIRCUMVENTION_TESTPAGES_TESTCASES_ROOT ++ public void testVerifyCircumventionInlineStyleNotImportant() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.CIRCUMVENTION_TESTPAGES_TESTCASES_ROOT + + "inline-style-important"); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 2, "div"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 2, "div"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyCircumventionAnonymousFrameDocumentWrite() -+ throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.CIRCUMVENTION_TESTPAGES_TESTCASES_ROOT ++ public void testVerifyCircumventionAnonymousFrameDocumentWrite() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.CIRCUMVENTION_TESTPAGES_TESTCASES_ROOT + + "anoniframe-documentwrite"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "span[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "span[data-expectedresult='fail']"); + String numHidden = JavaScriptUtils.executeJavaScriptAndWaitForResult( + mHelper.getWebContents(), + "var hiddenCount = 0;" -+ + "var elements = document.getElementById(\"write\").contentWindow.document.getElementsByTagName(\"span\");" ++ + "var elements = document.getElementById(\"write\").contentWindow" ++ + ".document.getElementsByTagName(\"span\");" + + "for (let i = 0; i < elements.length; ++i) {" -+ + " if (window.getComputedStyle(elements[i]).display == \"none\") ++hiddenCount;" ++ + " if (window.getComputedStyle(elements[i]).display == \"none\") " ++ + "++hiddenCount;" + + "}" + + "hiddenCount;"); + Assert.assertEquals("1", numHidden); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCspTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCspTest.java +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCspTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCspTestBase.java new file mode 100644 --- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCspTest.java -@@ -0,0 +1,136 @@ ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesCspTestBase.java +@@ -0,0 +1,108 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3459,126 +2722,98 @@ new file mode 100644 + +import androidx.test.filters.LargeTest; + -+import org.junit.After; -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; +import org.junit.Test; -+import org.junit.runner.RunWith; + -+import org.chromium.base.test.util.CommandLineFlags; -+import org.chromium.base.test.util.DisabledTest; +import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.components.adblock.TestVerificationUtils.IncludeSubframes; + -+import java.util.concurrent.TimeoutException; ++public abstract class TestPagesCspTestBase { ++ private TestPagesHelperBase mHelper; + -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesCspTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); -+ -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); ++ protected void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testCspAllSites() throws TimeoutException, InterruptedException { ++ public void testCspAllSites() throws Exception { + mHelper.addCustomFilter("*$csp=script-src 'none'"); -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "csp_all"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "img[id='all-sites-fail-1']"); ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "csp_all"); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 0, "img[id='all-sites-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testCspSpecificSite() throws TimeoutException, InterruptedException { ++ public void testCspSpecificSite() throws Exception { + mHelper.addCustomFilter(String.format("||%s^$csp=script-src https://%s/lib/utils.js", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "csp_specific"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "img[id='specific-site-fail-1']", IncludeSubframes.NO); ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "csp_specific"); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 0, "img[id='specific-site-fail-1']", ++ TestVerificationUtils.IncludeSubframes.NO); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testCspSpecificSiteFrameSrc() throws TimeoutException, InterruptedException { ++ public void testCspSpecificSiteFrameSrc() throws Exception { + mHelper.addCustomFilter( -+ String.format("||%s^$csp=frame-src 'self'", TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "csp_specific"); ++ String.format("||%s^$csp=frame-src 'self'", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "csp_specific"); + TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div[id='sub-frame-error']", IncludeSubframes.NO); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div[id='sub-frame-error-details']", IncludeSubframes.NO); ++ mHelper, 0, "div[id='sub-frame-error']", TestVerificationUtils.IncludeSubframes.NO); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 0, "div[id='sub-frame-error-details']", ++ TestVerificationUtils.IncludeSubframes.NO); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testCspException() throws TimeoutException, InterruptedException { ++ public void testCspException() throws Exception { + // Blocking filter: + mHelper.addCustomFilter(String.format("||%s^$csp=script-src https://%s/lib/utils.js", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); + // Resource loaded by JS was blocked -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "csp"); ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "csp"); + TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div[id='unblock-javascript'] > img"); ++ mHelper, 0, "div[id='unblock-javascript'] > img"); ++ ++ // Allowing filter: ++ mHelper.addCustomFilter(String.format("@@||%s^$csp", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ // Resource loaded by JS was allowed ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "csp"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div[id='unblock-javascript'] > img"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testCspGenericBlockException() throws Exception { ++ // Blocking filter: ++ mHelper.addCustomFilter(String.format("||%s^$csp=script-src https://%s/lib/utils.js", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ // Resource loaded by JS was blocked ++ mHelper.loadUrl( ++ TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "csp_genericblock"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div[id='genericblock-javascript'] > img"); + + // Allowing filter: + mHelper.addCustomFilter( -+ String.format("@@||%s^$csp", TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ // Resource loaded by JS was allowed -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "csp"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div[id='unblock-javascript'] > img"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testCspGenericBlockException() throws TimeoutException, InterruptedException { -+ // Blocking filter: -+ mHelper.addCustomFilter(String.format("||%s^$csp=script-src https://%s/lib/utils.js", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ // Resource loaded by JS was blocked -+ mHelper.loadUrl( -+ TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "csp_genericblock"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div[id='genericblock-javascript'] > img"); -+ -+ // Allowing filter: -+ mHelper.addCustomFilter( -+ String.format("@@||%s^$genericblock", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ String.format("@@||%s^$genericblock", TestPagesHelperBase.TESTPAGES_DOMAIN)); + // Resource loaded by JS was allowed + mHelper.loadUrl( -+ TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "csp_genericblock"); ++ TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "csp_genericblock"); + TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div[id='genericblock-javascript'] > img"); ++ mHelper, 1, "div[id='genericblock-javascript'] > img"); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuInvTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuInvTest.java +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuInvTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuInvTestBase.java new file mode 100644 --- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuInvTest.java -@@ -0,0 +1,158 @@ ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuInvTestBase.java +@@ -0,0 +1,135 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3600,148 +2835,125 @@ new file mode 100644 + +import androidx.test.filters.LargeTest; + -+import org.junit.After; -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; +import org.junit.Test; -+import org.junit.runner.RunWith; + -+import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+ -+import java.util.concurrent.TimeoutException; -+ -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesElemhideEmuInvTest { -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); + ++public abstract class TestPagesElemhideEmuInvTestBase { + public static final String ELEMENT_HIDING_EMULATION_TESTPAGES_URL = -+ TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT ++ TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + + "element-hiding-emulation-inversion"; ++ private TestPagesHelperBase mHelper; + -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); ++ protected void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuNotAbpProperties() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuNotAbpProperties() throws Exception { + mHelper.addCustomFilter( + String.format("%s#?#.ehei-properties:not(:-abp-properties(width: 238px))", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='basic-not-abp-properties-usage-fail']"); ++ mHelper, 1, "div[id='basic-not-abp-properties-usage-fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuNotAbpHas() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuNotAbpHas() throws Exception { + mHelper.addCustomFilter( + String.format("%s#?#.ehei-has:not(:-abp-has(span.ehei-has-not-hide))", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='basic-not-abp-has-usage-fail']"); ++ mHelper, 1, "div[id='basic-not-abp-has-usage-fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuNotAbpContains() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuNotAbpContains() throws Exception { + mHelper.addCustomFilter( + String.format("%s#?#.ehei-contains:not(span:-abp-contains(example-content))", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "span[id='basic-not-abp-contains-usage-fail']"); ++ mHelper, 1, "span[id='basic-not-abp-contains-usage-fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuNotChained() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuNotChained() throws Exception { + mHelper.addCustomFilter(String.format( + "%s#?#.ehei-chained-parent:not(:-abp-has(> div:-abp-properties(width: 198px)))", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, -+ "div[id='chained-extended-selectors-with-not-selector-fail-1']"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div[id='chained-extended-selectors-with-not-selector-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuNotCaseIsensitive() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuNotCaseIsensitive() throws Exception { + mHelper.addCustomFilter(String.format("%s#?#.ehei-case:not(:-abp-properties(WiDtH: 209px))", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, -+ "div[id='case-insensitive-extended-selectors-with-not-selector-fail']"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div[id='case-insensitive-extended-selectors-with-not-selector-fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuNotWildcard() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuNotWildcard() throws Exception { + mHelper.addCustomFilter(String.format("%s#?#.ehei-wildcard:not(:-abp-properties(cursor:*))", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, + "div[id='wildcard-in-extended-selector-combined-with-not-selector-fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuNotRegexAbpProperties() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideEmuNotRegexAbpProperties() throws Exception { + mHelper.addCustomFilter( + String.format("%s#?#.ehei-regex:not(:-abp-properties(/width: 11[1-5]px;/))", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='regular-expression-in-not-abp-properties-fail-1']"); ++ mHelper, 1, "div[id='regular-expression-in-not-abp-properties-fail-1']"); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='regular-expression-in-not-abp-properties-fail-2']"); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 1, ".ehei-regex3"); ++ mHelper, 1, "div[id='regular-expression-in-not-abp-properties-fail-2']"); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 1, ".ehei-regex3"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuNotRegexAbpContains() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuNotRegexAbpContains() throws Exception { + mHelper.addCustomFilter(String.format( + "%s#?#.ehei-contains-regex:not(span:-abp-contains(/example-contentregex\\d/))", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "span[id='regular-expression-in-not-abp-contains-fail-1']"); ++ mHelper, 1, "span[id='regular-expression-in-not-abp-contains-fail-1']"); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "span[id='regular-expression-in-not-abp-contains-fail-2']"); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 2, ".ehei-contains-regex"); ++ mHelper, 1, "span[id='regular-expression-in-not-abp-contains-fail-2']"); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 2, ".ehei-contains-regex"); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuTest.java +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuTestBase.java new file mode 100644 --- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuTest.java -@@ -0,0 +1,217 @@ ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideEmuTestBase.java +@@ -0,0 +1,183 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3763,207 +2975,173 @@ new file mode 100644 + +import androidx.test.filters.LargeTest; + -+import org.junit.After; -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; +import org.junit.Test; -+import org.junit.runner.RunWith; + -+import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+ -+import java.util.concurrent.TimeoutException; -+ -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesElemhideEmuTest { -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); + ++public abstract class TestPagesElemhideEmuTestBase { + public static final String ELEMENT_HIDING_EMULATION_TESTPAGES_URL = -+ TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "element-hiding-emulation"; ++ TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "element-hiding-emulation"; + public static final String ELEMENT_HIDING_EMULATION_EXCEPTIONS_TESTPAGES_URL = -+ TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "element-hiding"; ++ TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "element-hiding"; ++ private TestPagesHelperBase mHelper; + -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); ++ protected void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersBasicAbpProperties() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersBasicAbpProperties() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s#?#div:-abp-properties(width: 213px)", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s#?#div:-abp-properties(width: 213px)", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='basic-abp-properties-usage-fail-1']"); ++ mHelper, 1, "div[id='basic-abp-properties-usage-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersBasicAbpHas() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersBasicAbpHas() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s#?#div:-abp-has(>div>span.ehe-abp-has)", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s#?#div:-abp-has(>div>span.ehe-abp-has)", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='basic-abp-has-usage-fail-1']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[id='basic-abp-has-usage-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersBasicHas() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersBasicHas() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s#?#div:has(>div>span.ehe-has)", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s#?#div:has(>div>span.ehe-has)", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + // "Basic :has() usage" are duplicated on testpage. -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 2, "div[id='basic-has-usage-fail-1']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 2, "div[id='basic-has-usage-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersBasicAbpContains() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersBasicAbpContains() throws Exception { + mHelper.addCustomFilter(String.format("%s#?#span:-abp-contains(ehe-contains-target)", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "span[id='basic-abp-contains-usage-fail-1']"); ++ mHelper, 1, "span[id='basic-abp-contains-usage-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersBasicXpath() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersBasicXpath() throws Exception { + mHelper.addCustomFilter( + String.format("%s#?#span:xpath(//*[@id=\"basic-xpath-usage-fail\"])", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "span[id='basic-xpath-usage-fail']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "span[id='basic-xpath-usage-fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersBasicHasText() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersBasicHasText() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s#?#span:has-text(ehe-has-text)", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s#?#span:has-text(ehe-has-text)", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "span[id='basic-has-text-usage-fail-1']"); ++ mHelper, 1, "span[id='basic-has-text-usage-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersChainedExtendedSelectors() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersChainedExtendedSelectors() throws Exception { + mHelper.addCustomFilter( + String.format("%s#?#div:-abp-has(> div:-abp-properties(width: 214px))", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='chained-extended-selectors-fail-1']"); ++ mHelper, 1, "div[id='chained-extended-selectors-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersCaseInsensitiveExtendedSelectors() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersCaseInsensitiveExtendedSelectors() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s#?#div:-abp-properties(WiDtH: 215px)", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s#?#div:-abp-properties(WiDtH: 215px)", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='case-insensitive-extended-selectors-fail-1']"); ++ mHelper, 1, "div[id='case-insensitive-extended-selectors-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersWildcardInExtendedSelector() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersWildcardInExtendedSelector() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s#?#div:-abp-properties(cursor:*)", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s#?#div:-abp-properties(cursor:*)", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='wildcard-in-extended-selector-fail-1']"); ++ mHelper, 1, "div[id='wildcard-in-extended-selector-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersRegularExpressionInAbpProperties() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersRegularExpressionInAbpProperties() throws Exception { + mHelper.addCustomFilter(String.format("%s#?#div:-abp-properties(/width: 12[1-5]px;/)", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='regular-expression-in-abp-properties-fail-1']"); ++ mHelper, 1, "div[id='regular-expression-in-abp-properties-fail-1']"); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='regular-expression-in-abp-properties-fail-2']"); ++ mHelper, 1, "div[id='regular-expression-in-abp-properties-fail-2']"); + // "Not a target" div is not hidden, does not match regular expression. + TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div[class='testcase-examplecontent ehe-regex3']"); ++ mHelper, 1, "div[class='testcase-examplecontent ehe-regex3']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersRegularExpressionInAbpContains() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersRegularExpressionInAbpContains() throws Exception { + mHelper.addCustomFilter( + String.format("%s#?#div > div:-abp-contains(/ehe-containsregex\\d/)", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='regular-expression-in-abp-contains-fail-1']"); ++ mHelper, 1, "div[id='regular-expression-in-abp-contains-fail-1']"); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='regular-expression-in-abp-contains-fail-2']"); ++ mHelper, 1, "div[id='regular-expression-in-abp-contains-fail-2']"); + } + + // Exceptions: + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideEmuFiltersException() throws TimeoutException, InterruptedException { ++ public void testElemHideEmuFiltersException() throws Exception { + // Add a blocking filter, verify element hidden. + mHelper.addCustomFilter( -+ String.format("%s##.testcase-ehe", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ String.format("%s##.testcase-ehe", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_EXCEPTIONS_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='exception-usage-pass-1']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[id='exception-usage-pass-1']"); + + // Add exception filter, verify element no longer hidden. + mHelper.addCustomFilter( -+ String.format("%s#@#.testcase-ehe", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ String.format("%s#@#.testcase-ehe", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EMULATION_EXCEPTIONS_TESTPAGES_URL); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div[id='exception-usage-pass-1']"); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 1, "div[id='exception-usage-pass-1']"); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideTest.java +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideTestBase.java new file mode 100644 --- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideTest.java -@@ -0,0 +1,237 @@ ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesElemhideTestBase.java +@@ -0,0 +1,204 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3985,227 +3163,194 @@ new file mode 100644 + +import androidx.test.filters.LargeTest; + -+import org.junit.After; -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; +import org.junit.Test; -+import org.junit.runner.RunWith; + -+import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+ -+import java.util.concurrent.TimeoutException; -+ -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesElemhideTest { -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); + ++public abstract class TestPagesElemhideTestBase { + public static final String ELEMENT_HIDING_TESTPAGES_URL = -+ TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "element-hiding"; ++ TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "element-hiding"; + public static final String ELEMENT_HIDING_EXCEPTIONS_TESTPAGES_URL = -+ TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "elemhide"; ++ TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "elemhide"; ++ private TestPagesHelperBase mHelper; + -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); ++ protected void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersIdSelector() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s###eh-id", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ public void testElemHideFiltersIdSelector() throws Exception { ++ mHelper.addCustomFilter(String.format("%s###eh-id", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "div[id='eh-id']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[id='eh-id']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersIdSelectorDoubleCurlyBraces() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersIdSelectorDoubleCurlyBraces() throws Exception { + mHelper.addCustomFilter( -+ String.format("%s##div[id='{{eh-id}}']", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ String.format("%s##div[id='{{eh-id}}']", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "div[id='{{eh-id}}']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[id='{{eh-id}}']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersClassSelector() throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersClassSelector() throws Exception { + mHelper.addCustomFilter( -+ String.format("%s##.eh-class", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ String.format("%s##.eh-class", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "div[class='eh-class']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[class='eh-class']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersDescendantSelector() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersDescendantSelector() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s##.testcase-area > .eh-descendant", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s##.testcase-area > .eh-descendant", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "div[class='eh-descendant']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[class='eh-descendant']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersSiblingSelector() throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersSiblingSelector() throws Exception { + mHelper.addCustomFilter(String.format("%s##.testcase-examplecontent + .eh-sibling", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "div[class='eh-sibling']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[class='eh-sibling']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersAttributeSelector1() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersAttributeSelector1() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s##div[height=\"100\"][width=\"100\"]", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s##div[height=\"100\"][width=\"100\"]", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='attribute-selector-1-fail-1']"); ++ mHelper, 1, "div[id='attribute-selector-1-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersAttributeSelector2() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersAttributeSelector2() throws Exception { + mHelper.addCustomFilter(String.format("%s##div[href=\"http://testcase-attribute.com/\"]", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='attribute-selector-2-fail-1']"); ++ mHelper, 1, "div[id='attribute-selector-2-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersAttributeSelector3() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersAttributeSelector3() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s##div[style=\"width: 200px;\"]", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s##div[style=\"width: 200px;\"]", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='attribute-selector-3-fail-1']"); ++ mHelper, 1, "div[id='attribute-selector-3-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersStartsWithSelector1() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersStartsWithSelector1() throws Exception { + mHelper.addCustomFilter(String.format("%s##div[href^=\"http://testcase-startswith.com/\"]", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='starts-with-selector-1-fail-1']"); ++ mHelper, 1, "div[id='starts-with-selector-1-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersStartsWithSelector2() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersStartsWithSelector2() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s##div[style^=\"width: 201px;\"]", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s##div[style^=\"width: 201px;\"]", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='starts-with-selector-2-fail-1']"); ++ mHelper, 1, "div[id='starts-with-selector-2-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersEndsWithSelector1() -+ throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersEndsWithSelector1() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s##div[style$=\"width: 202px;\"]", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s##div[style$=\"width: 202px;\"]", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); + TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='ends-with-selector-1-fail-1']"); ++ mHelper, 1, "div[id='ends-with-selector-1-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersContains() throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersContains() throws Exception { + mHelper.addCustomFilter(String.format( -+ "%s##div[style*=\"width: 203px;\"]", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "%s##div[style*=\"width: 203px;\"]", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "div[id='contains-fail-1']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[id='contains-fail-1']"); + } + + // Exceptions: + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersBasicException() throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersBasicException() throws Exception { + mHelper.addCustomFilter( -+ String.format("%s##.ex-elemhide", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ String.format("%s##.ex-elemhide", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/elemhide/basic/*", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "||%s/testfiles/elemhide/basic/*", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EXCEPTIONS_TESTPAGES_URL); + // No exceptions added yet, both objects should be blocked. -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "img[id='basic-usage-fail-1']"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[id='basic-usage-pass-1']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "img[id='basic-usage-fail-1']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[id='basic-usage-pass-1']"); + // Add exception filter and reload. + mHelper.addCustomFilter(String.format( -+ "@@%s/en/exceptions/elemhide$elemhide", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "@@%s/en/exceptions/elemhide$elemhide", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EXCEPTIONS_TESTPAGES_URL); + // Image should remain blocked, div should be unblocked. -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "img[id='basic-usage-fail-1']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "img[id='basic-usage-fail-1']"); + TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div[id='basic-usage-area'] > div[id='basic-usage-pass-1']"); ++ mHelper, 1, "div[id='basic-usage-area'] > div[id='basic-usage-pass-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testElemHideFiltersIframeException() throws TimeoutException, InterruptedException { ++ public void testElemHideFiltersIframeException() throws Exception { + mHelper.addCustomFilter( -+ String.format("%s##.targ-elemhide", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ String.format("%s##.targ-elemhide", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/elemhide/iframe/*.png", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "||%s/testfiles/elemhide/iframe/*.png", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EXCEPTIONS_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "img[id='iframe-fail-1']"); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "div[id='iframe-pass-1']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "img[id='iframe-fail-1']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[id='iframe-pass-1']"); + + // Add exception filter and reload. + mHelper.addCustomFilter(String.format( -+ "@@%s/en/exceptions/elemhide$elemhide", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "@@%s/en/exceptions/elemhide$elemhide", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(ELEMENT_HIDING_EXCEPTIONS_TESTPAGES_URL); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "img[id='iframe-fail-1']"); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 1, "div[id='iframe-pass-1']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "img[id='iframe-fail-1']"); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 1, "div[id='iframe-pass-1']"); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesExceptionTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesExceptionTest.java +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesExceptionTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesExceptionTestBase.java new file mode 100644 --- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesExceptionTest.java -@@ -0,0 +1,244 @@ ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesExceptionTestBase.java +@@ -0,0 +1,174 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -4227,67 +3372,40 @@ new file mode 100644 + +import androidx.test.filters.LargeTest; + -+import org.junit.After; +import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; +import org.junit.Test; -+import org.junit.runner.RunWith; + -+import org.chromium.base.task.PostTask; -+import org.chromium.base.task.TaskTraits; -+import org.chromium.base.test.util.CallbackHelper; -+import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.content_public.browser.test.util.DOMUtils; ++import org.chromium.components.adblock.AdblockContentType; +import org.chromium.content_public.browser.test.util.JavaScriptUtils; -+import org.chromium.content_public.common.ContentSwitches; + -+import java.lang.Thread; -+import java.util.Arrays; +import java.util.HashSet; ++import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; -+import java.util.concurrent.TimeoutException; + -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesExceptionTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); ++public abstract class TestPagesExceptionTestBase { ++ private TestPagesHelperBase mHelper; + -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ mHelper.addFilterList(TestPagesTestsHelper.TESTPAGES_SUBSCRIPTION); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); ++ protected void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; ++ mHelper.addFilterList(TestPagesHelperBase.TESTPAGES_SUBSCRIPTION); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyImageExceptions() throws TimeoutException, InterruptedException { ++ public void testVerifyImageExceptions() throws Exception { + final String subdomainImage = String.format( + "https://allowed.subdomain.%s/testfiles/image_exception/subdomain.png", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN); -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "image"); ++ TestPagesHelperBase.TESTPAGES_DOMAIN); ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "image"); + Assert.assertEquals(2, mHelper.numAllowed()); + Assert.assertEquals(2, mHelper.numAllowedByType(AdblockContentType.CONTENT_TYPE_IMAGE)); + Assert.assertTrue(mHelper.isAllowed(subdomainImage)); + Assert.assertTrue(mHelper.isAllowed( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "image_exception/image.png")); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 2, "img"); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "image_exception/image.png")); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 2, "img"); + String numImages = JavaScriptUtils.executeJavaScriptAndWaitForResult( + mHelper.getWebContents(), "document.getElementsByTagName(\"img\").length;"); + Assert.assertEquals("2", numImages); @@ -4296,100 +3414,62 @@ new file mode 100644 + @Test + @LargeTest + @Feature({"adblock"}) -+ @CommandLineFlags.Add(ContentSwitches.DISABLE_POPUP_BLOCKING) -+ public void testVerifyPopupException() throws TimeoutException, InterruptedException { -+ final String POPUP_TESTACE_URL = -+ TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "popup"; -+ mHelper.loadUrl(POPUP_TESTACE_URL); -+ Assert.assertEquals(1, mHelper.getTabCount()); -+ final CallbackHelper tabsLoadedWaiter = mHelper.getTabsOpenedAndLoadedWaiter(); -+ PostTask.postTask(TaskTraits.BEST_EFFORT_MAY_BLOCK, () -> { -+ try { -+ String numElements = JavaScriptUtils.executeJavaScriptAndWaitForResult( -+ mHelper.getWebContents(), -+ "var elements = document.getElementsByClassName(\"testcase-trigger\");" -+ + "for (let i = 0; i < elements.length; ++i) {" -+ + " elements[i].click();" -+ + "}" -+ + "elements.length;"); -+ Assert.assertEquals("3", numElements); -+ } catch (TimeoutException e) { -+ Assert.assertEquals("Popups were triggered", "Popups were NOT triggered"); -+ } -+ }); -+ // Wait for three tab loaded events -+ tabsLoadedWaiter.waitForCallback( -+ 0, 3, TestPagesTestsHelper.TEST_TIMEOUT_SEC, TimeUnit.SECONDS); -+ Assert.assertEquals(4, mHelper.getTabCount()); -+ Assert.assertEquals(3, mHelper.numAllowedPopups()); -+ Assert.assertTrue(mHelper.isPopupAllowed( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "popup_exception/link.html")); -+ Assert.assertTrue(mHelper.isPopupAllowed(TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT -+ + "popup_exception/script-window.html")); -+ Assert.assertTrue(mHelper.isPopupAllowed( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "popup_exception/script-tab.html")); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testVerifySubdocumentException() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "subdocument"); ++ public void testVerifySubdocumentException() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "subdocument"); + Assert.assertEquals(1, mHelper.numAllowed()); -+ Assert.assertTrue(mHelper.isAllowed(TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT ++ Assert.assertTrue(mHelper.isAllowed(TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + + "subdocument_exception/subdocument.html")); -+ TestVerificationUtils.verifyGreenBackground(mActivityTestRule, "exception-target"); ++ TestVerificationUtils.verifyGreenBackground(mHelper, "exception-target"); + String numFrames = JavaScriptUtils.executeJavaScriptAndWaitForResult( + mHelper.getWebContents(), "window.frames.length;"); + Assert.assertEquals("1", numFrames); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 1, "iframe"); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 1, "iframe"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyScriptException() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "script"); ++ public void testVerifyScriptException() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "script"); + Assert.assertEquals(1, mHelper.numAllowed()); + Assert.assertTrue(mHelper.isAllowed( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "script_exception/script.js")); -+ TestVerificationUtils.verifyGreenBackground(mActivityTestRule, "script-target"); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "script_exception/script.js")); ++ TestVerificationUtils.verifyGreenBackground(mHelper, "script-target"); + Assert.assertEquals(1, mHelper.numBlocked()); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "script_exception/image.png")); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "img[data-expectedresult='fail']"); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "script_exception/image.png")); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "img[data-expectedresult='fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyStylesheetException() throws TimeoutException, InterruptedException { -+ final String allowedUrl = TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT -+ + "stylesheet_exception/stylesheet.cs"; -+ final CountDownLatch countDownLatch = -+ mHelper.setOnAdMatchedExpectations(null, new HashSet<>(Arrays.asList(allowedUrl))); -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "stylesheet"); -+ // Wait with 10 seconds max timeout -+ countDownLatch.await(10, TimeUnit.SECONDS); -+ Assert.assertEquals(1, mHelper.numAllowed()); -+ Assert.assertTrue(mHelper.isAllowed(allowedUrl)); -+ Assert.assertEquals(1, mHelper.numBlocked()); -+ Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "stylesheet_exception/image.png")); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "img"); -+ TestVerificationUtils.verifyGreenBackground(mActivityTestRule, "exception-target"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testVerifyXHRException() throws TimeoutException, InterruptedException { ++ public void testVerifyStylesheetException() throws Exception { + final String allowedUrl = -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "xmlhttprequest_exception/text.txt"; ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "stylesheet_exception/stylesheet.cs"; + final CountDownLatch countDownLatch = -+ mHelper.setOnAdMatchedExpectations(null, new HashSet<>(Arrays.asList(allowedUrl))); -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "xmlhttprequest"); ++ mHelper.setOnAdMatchedExpectations(null, new HashSet<>(List.of(allowedUrl))); ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "stylesheet"); ++ // Wait with 10 seconds max timeout ++ countDownLatch.await(10, TimeUnit.SECONDS); ++ Assert.assertEquals(1, mHelper.numAllowed()); ++ Assert.assertTrue(mHelper.isAllowed(allowedUrl)); ++ Assert.assertEquals(1, mHelper.numBlocked()); ++ Assert.assertTrue(mHelper.isBlocked( ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "stylesheet_exception/image.png")); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "img"); ++ TestVerificationUtils.verifyGreenBackground(mHelper, "exception-target"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testVerifyXHRException() throws Exception { ++ final String allowedUrl = ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "xmlhttprequest_exception/text.txt"; ++ final CountDownLatch countDownLatch = ++ mHelper.setOnAdMatchedExpectations(null, new HashSet<>(List.of(allowedUrl))); ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "xmlhttprequest"); + // Wait with 10 seconds max timeout + countDownLatch.await(10, TimeUnit.SECONDS); + Assert.assertEquals(1, mHelper.numAllowed()); @@ -4399,62 +3479,57 @@ new file mode 100644 + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyGenericBlockException() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "genericblock"); ++ public void testVerifyGenericBlockException() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "genericblock"); + Assert.assertEquals(1, mHelper.numBlocked()); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "genericblock/specific.png")); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "genericblock/specific.png")); + Assert.assertEquals(1, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_IMAGE)); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "img[data-expectedresult='pass']"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "img[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 1, "img[data-expectedresult='pass']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "img[data-expectedresult='fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyGenericHideException() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "generichide"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div[data-expectedresult='pass']"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[data-expectedresult='fail']"); ++ public void testVerifyGenericHideException() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "generichide"); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 1, "div[data-expectedresult='pass']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[data-expectedresult='fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyDocumentException() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "document"); ++ public void testVerifyDocumentException() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "document"); + Assert.assertTrue(mHelper.isAllowed( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "document/image.png")); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "document/image.png")); + Assert.assertTrue(mHelper.isPageAllowed( -+ TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "document")); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div[data-expectedresult='pass']"); ++ TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "document")); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 1, "div[data-expectedresult='pass']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyWebSocketException() throws TimeoutException, InterruptedException { ++ public void testVerifyWebSocketException() throws Exception { + final String wssUrl = -+ String.format("wss://%s/websocket", TestPagesTestsHelper.TESTPAGES_DOMAIN); ++ String.format("wss://%s/websocket", TestPagesHelperBase.TESTPAGES_DOMAIN); + final CountDownLatch countDownLatch = -+ mHelper.setOnAdMatchedExpectations(null, new HashSet<>(Arrays.asList(wssUrl))); -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "websocket"); ++ mHelper.setOnAdMatchedExpectations(null, new HashSet<>(List.of(wssUrl))); ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "websocket"); + // Wait with 10 seconds max timeout + countDownLatch.await(10, TimeUnit.SECONDS); + Assert.assertEquals(1, mHelper.numAllowedByType(AdblockContentType.CONTENT_TYPE_WEBSOCKET)); + Assert.assertTrue(mHelper.isAllowed(wssUrl)); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesFilterTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesFilterTest.java +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesFilterTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesFilterTestBase.java new file mode 100644 --- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesFilterTest.java -@@ -0,0 +1,329 @@ ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesFilterTestBase.java +@@ -0,0 +1,254 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -4476,90 +3551,62 @@ new file mode 100644 + +import androidx.test.filters.LargeTest; + -+import org.junit.After; +import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; +import org.junit.Test; -+import org.junit.runner.RunWith; + -+import org.chromium.base.task.PostTask; -+import org.chromium.base.task.TaskTraits; -+import org.chromium.base.test.util.CallbackHelper; -+import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.DisabledTest; +import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.browser.tab.Tab; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.components.adblock.TestVerificationUtils.IncludeSubframes; ++import org.chromium.components.adblock.AdblockContentType; +import org.chromium.content_public.browser.test.util.DOMUtils; +import org.chromium.content_public.browser.test.util.JavaScriptUtils; -+import org.chromium.content_public.common.ContentSwitches; + -+import java.lang.Thread; +import java.util.Arrays; +import java.util.HashSet; ++import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; -+import java.util.concurrent.TimeoutException; + -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesFilterTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); ++public abstract class TestPagesFilterTestBase { ++ private TestPagesHelperBase mHelper; + -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ mHelper.addFilterList(TestPagesTestsHelper.TESTPAGES_SUBSCRIPTION); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); ++ protected void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; ++ mHelper.addFilterList(TestPagesHelperBase.TESTPAGES_SUBSCRIPTION); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testBlockingFilters() throws TimeoutException, InterruptedException { ++ public void testBlockingFilters() throws Exception { + final CountDownLatch countDownLatch = mHelper.setOnAdMatchedExpectations( + new HashSet<>(Arrays.asList( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "blocking/full-path.png", -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "blocking/full-path.png", ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + + "blocking/partial-path/partial-path.png", -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + + "blocking/wildcard/1/wildcard.png", -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + + "blocking/wildcard/2/wildcard.png", -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "blocking/dynamic.png", -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "blocking/subdomain.png")), ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "blocking/dynamic.png", ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "blocking/subdomain.png")), + null); -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "blocking"); ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "blocking"); + // Wait with 10 seconds max timeout + countDownLatch.await(10, TimeUnit.SECONDS); + Assert.assertEquals(6, mHelper.numBlocked()); + Assert.assertEquals(6, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_IMAGE)); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 6, "img[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 6, "img[data-expectedresult='fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyScriptFilters() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "script"); ++ public void testVerifyScriptFilters() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "script"); + Assert.assertEquals(1, mHelper.numBlocked()); + Assert.assertEquals(1, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_SCRIPT)); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "script/script.js")); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "script/script.js")); + + String childCount = + JavaScriptUtils.executeJavaScriptAndWaitForResult(mHelper.getWebContents(), @@ -4570,34 +3617,33 @@ new file mode 100644 + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyImageFilters() throws TimeoutException, InterruptedException { ++ public void testVerifyImageFilters() throws Exception { + final CountDownLatch countDownLatch = mHelper.setOnAdMatchedExpectations( + new HashSet<>(Arrays.asList( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "image/static/static.png", -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "image/static/static.png", ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + + "image/dynamic/dynamic.png")), + null); -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "image"); ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "image"); + countDownLatch.await(10, TimeUnit.SECONDS); + Assert.assertEquals(2, mHelper.numBlocked()); + Assert.assertEquals(2, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_IMAGE)); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "image/static/static.png")); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "image/static/static.png")); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "image/dynamic/dynamic.png")); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 2, "img[data-expectedresult='fail']"); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "image/dynamic/dynamic.png")); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 2, "img[data-expectedresult='fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyStylesheetFilters() throws TimeoutException, InterruptedException { ++ public void testVerifyStylesheetFilters() throws Exception { + final String blockedUrl = -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "stylesheet/stylesheet.cs"; ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "stylesheet/stylesheet.cs"; + final CountDownLatch countDownLatch = -+ mHelper.setOnAdMatchedExpectations(new HashSet<>(Arrays.asList(blockedUrl)), null); -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "stylesheet"); ++ mHelper.setOnAdMatchedExpectations(new HashSet<>(List.of(blockedUrl)), null); ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "stylesheet"); + // Wait with 10 seconds max timeout + countDownLatch.await(10, TimeUnit.SECONDS); + Assert.assertEquals(1, mHelper.numBlocked()); @@ -4611,50 +3657,12 @@ new file mode 100644 + @Test + @LargeTest + @Feature({"adblock"}) -+ @CommandLineFlags.Add(ContentSwitches.DISABLE_POPUP_BLOCKING) -+ public void testVerifyPopupFilters() throws TimeoutException, InterruptedException { -+ final String POPUP_TESTACE_URL = -+ TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "popup"; -+ mHelper.loadUrl(POPUP_TESTACE_URL); -+ Assert.assertEquals(1, mHelper.getTabCount()); -+ final CallbackHelper tabsOpenedAndClosedWaiter = mHelper.getTabsOpenedAndClosedWaiter(); -+ // Trigger popups which open and close when blocked -+ PostTask.postTask(TaskTraits.BEST_EFFORT_MAY_BLOCK, () -> { -+ try { -+ String numElements = JavaScriptUtils.executeJavaScriptAndWaitForResult( -+ mHelper.getWebContents(), -+ "var elements = document.getElementsByClassName(\"testcase-trigger\");" -+ + "for (let i = 0; i < elements.length; ++i) {" -+ + " elements[i].click();" -+ + "}" -+ + "elements.length;"); -+ Assert.assertEquals("3", numElements); -+ } catch (TimeoutException e) { -+ Assert.assertEquals("Popups were triggered", "Popups were NOT triggered"); -+ } -+ }); -+ // Wait for three tab open events and three close tabs events -+ tabsOpenedAndClosedWaiter.waitForCallback( -+ 0, 6, TestPagesTestsHelper.TEST_TIMEOUT_SEC, TimeUnit.SECONDS); -+ Assert.assertEquals(3, mHelper.numBlockedPopups()); -+ Assert.assertTrue(mHelper.isPopupBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "popup/link.html")); -+ Assert.assertTrue(mHelper.isPopupBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "popup/script-window.html")); -+ Assert.assertTrue(mHelper.isPopupBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "popup/script-tab.html")); -+ Assert.assertEquals(1, mHelper.getTabCount()); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testVerifyXHRFilters() throws TimeoutException, InterruptedException { ++ public void testVerifyXHRFilters() throws Exception { + final String blockedUrl = -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "xmlhttprequest/text.txt"; ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "xmlhttprequest/text.txt"; + final CountDownLatch countDownLatch = -+ mHelper.setOnAdMatchedExpectations(new HashSet<>(Arrays.asList(blockedUrl)), null); -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "xmlhttprequest"); ++ mHelper.setOnAdMatchedExpectations(new HashSet<>(List.of(blockedUrl)), null); ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "xmlhttprequest"); + // Wait with 10 seconds max timeout + countDownLatch.await(10, TimeUnit.SECONDS); + Assert.assertEquals(1, mHelper.numBlocked()); @@ -4666,99 +3674,93 @@ new file mode 100644 + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifySubdocumentFilters() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "subdocument"); ++ public void testVerifySubdocumentFilters() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "subdocument"); + Assert.assertEquals(1, mHelper.numBlocked()); + Assert.assertEquals( + 1, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_SUBDOCUMENT)); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "subdocument/subdocument.html")); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "subdocument/subdocument.html")); + // Do not search for iframe within the site's iframes. -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "iframe[data-expectedresult='fail']", IncludeSubframes.NO); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "iframe[data-expectedresult='fail']", ++ TestVerificationUtils.IncludeSubframes.NO); + } + + @Test + @LargeTest + @Feature({"adblock"}) + @DisabledTest(message = "Please enable again when rewrite filters will be supported") -+ public void testVerifyRewrite() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "rewrite"); ++ public void testVerifyRewrite() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "rewrite"); + Assert.assertEquals(3, mHelper.numBlocked()); + Assert.assertEquals(1, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_SCRIPT)); + Assert.assertEquals(2, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_MEDIA)); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "rewrite/audio.mp3")); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "rewrite/audio.mp3")); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "rewrite/video.mp4")); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "rewrite/video.mp4")); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "rewrite/script.js")); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "rewrite/script.js")); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyMatchCaseFilter() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "match-case"); ++ public void testVerifyMatchCaseFilter() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "match-case"); + Assert.assertEquals(2, mHelper.numBlocked()); + Assert.assertEquals(2, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_IMAGE)); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 2, "img[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 2, "img[data-expectedresult='fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyThirdPartyFilter() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "third-party"); ++ public void testVerifyThirdPartyFilter() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "third-party"); + Assert.assertEquals(2, mHelper.numBlocked()); + Assert.assertEquals(2, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_IMAGE)); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 2, "img[data-expectedresult='fail']"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 2, "img[data-expectedresult='pass']"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 2, "img[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 2, "img[data-expectedresult='pass']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyOtherFilter() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "other"); ++ public void testVerifyOtherFilter() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "other"); + Assert.assertEquals(1, mHelper.numBlocked()); + Assert.assertEquals(1, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_OTHER)); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "other/image.png")); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "other/image.png")); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyDomainFilter() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "domain"); ++ public void testVerifyDomainFilter() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "domain"); + Assert.assertEquals(2, mHelper.numBlocked()); + Assert.assertEquals(2, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_IMAGE)); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "domain/static/target/image.png")); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "domain/static/target/image.png")); + Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "domain/dynamic/image.png")); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 2, "img[data-expectedresult='fail']"); ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "domain/dynamic/image.png")); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 2, "img[data-expectedresult='fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyPingFilter() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "ping"); ++ public void testVerifyPingFilter() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "ping"); + // Ping action not yet triggered + Assert.assertEquals(0, mHelper.numBlocked()); + final CountDownLatch countDownLatch = new CountDownLatch(1); + mHelper.setOnAdMatchedLatch(countDownLatch); + // Trigger ping action -+ final Tab tab = -+ mActivityTestRule.getActivity().getTabModelSelectorSupplier().get().getCurrentTab(); -+ JavaScriptUtils.executeJavaScriptAndWaitForResult( -+ tab.getWebContents(), "document.getElementById(\"script-ping-trigger\").click()"); ++ JavaScriptUtils.executeJavaScriptAndWaitForResult(mHelper.getWebContents(), ++ "document.getElementById(\"script-ping-trigger\").click()"); + // Wait with 10 seconds max timeout + countDownLatch.await(10, TimeUnit.SECONDS); + Assert.assertEquals(1, mHelper.numBlocked()); @@ -4767,16 +3769,14 @@ new file mode 100644 + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyPingFilterException() throws TimeoutException, InterruptedException { -+ mHelper.loadUrl(TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "ping"); ++ public void testVerifyPingFilterException() throws Exception { ++ mHelper.loadUrl(TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "ping"); + // Ping action not yet triggered + Assert.assertEquals(0, mHelper.numAllowed()); + final CountDownLatch countDownLatch = new CountDownLatch(1); + mHelper.setOnAdMatchedLatch(countDownLatch); + // Trigger ping action -+ final Tab tab = -+ mActivityTestRule.getActivity().getTabModelSelectorSupplier().get().getCurrentTab(); -+ JavaScriptUtils.executeJavaScriptAndWaitForResult(tab.getWebContents(), ++ JavaScriptUtils.executeJavaScriptAndWaitForResult(mHelper.getWebContents(), + "document.getElementsByClassName(\"testcase-trigger\")[0].click()"); + // Wait with 10 seconds max timeout + countDownLatch.await(10, TimeUnit.SECONDS); @@ -4784,11 +3784,11 @@ new file mode 100644 + Assert.assertEquals(0, mHelper.numBlocked()); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHeaderFilterTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHeaderFilterTest.java +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHeaderFilterTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHeaderFilterTestBase.java new file mode 100644 --- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHeaderFilterTest.java -@@ -0,0 +1,150 @@ ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHeaderFilterTestBase.java +@@ -0,0 +1,125 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -4810,967 +3810,115 @@ new file mode 100644 + +import androidx.test.filters.LargeTest; + -+import org.junit.After; +import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; +import org.junit.Test; -+import org.junit.runner.RunWith; + -+import org.chromium.base.test.util.CommandLineFlags; -+import org.chromium.base.test.util.DisabledTest; +import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.components.adblock.TestVerificationUtils.IncludeSubframes; -+ -+import java.util.concurrent.TimeoutException; -+ -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesHeaderFilterTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); ++import org.chromium.components.adblock.AdblockContentType; + ++public abstract class TestPagesHeaderFilterTestBase { + public static final String HEADER_TESTPAGES_URL = -+ TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "header"; ++ TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "header"; + public static final String HEADER_EXCEPTIONS_TESTPAGES_URL = -+ TestPagesTestsHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "header"; ++ TestPagesHelperBase.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "header"; ++ private TestPagesHelperBase mHelper; + -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); ++ protected void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testHeaderFilterScript() throws TimeoutException, InterruptedException { ++ public void testHeaderFilterScript() throws Exception { + mHelper.addCustomFilter( + String.format("||%s/testfiles/header/$header=content-type=application/javascript", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(HEADER_TESTPAGES_URL); + Assert.assertEquals(1, mHelper.numBlocked()); + Assert.assertEquals(1, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_SCRIPT)); + Assert.assertTrue(mHelper.isBlocked(String.format( -+ "https://%s/testfiles/header/script.js", TestPagesTestsHelper.TESTPAGES_DOMAIN))); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 0, -+ "div#functionproperty-target > div[data-expectedresult='fail']"); ++ "https://%s/testfiles/header/script.js", TestPagesHelperBase.TESTPAGES_DOMAIN))); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#functionproperty-target > div[data-expectedresult='fail']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testHeaderFilterImage() throws TimeoutException, InterruptedException { ++ public void testHeaderFilterImage() throws Exception { + mHelper.addCustomFilter( + String.format("||%s/testfiles/header/image.png$header=content-type=image/png", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(HEADER_TESTPAGES_URL); + Assert.assertEquals(1, mHelper.numBlocked()); + Assert.assertEquals(1, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_IMAGE)); + Assert.assertTrue(mHelper.isBlocked(String.format( -+ "https://%s/testfiles/header/image.png", TestPagesTestsHelper.TESTPAGES_DOMAIN))); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 0, "img[id='image-fail-1']"); ++ "https://%s/testfiles/header/image.png", TestPagesHelperBase.TESTPAGES_DOMAIN))); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 0, "img[id='image-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testHeaderFilterImageAndComma() throws TimeoutException, InterruptedException { ++ public void testHeaderFilterImageAndComma() throws Exception { + mHelper.addCustomFilter(String.format("||%s/testfiles/header/image2.png$header=date=\\x2c", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(HEADER_TESTPAGES_URL); + Assert.assertEquals(1, mHelper.numBlocked()); + Assert.assertEquals(1, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_IMAGE)); + Assert.assertTrue(mHelper.isBlocked(String.format( -+ "https://%s/testfiles/header/image2.png", TestPagesTestsHelper.TESTPAGES_DOMAIN))); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 0, "img[id='comma-fail-1']"); ++ "https://%s/testfiles/header/image2.png", TestPagesHelperBase.TESTPAGES_DOMAIN))); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 0, "img[id='comma-fail-1']"); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testHeaderFilterStylesheet() throws TimeoutException, InterruptedException { ++ public void testHeaderFilterStylesheet() throws Exception { + mHelper.addCustomFilter(String.format("||%s/testfiles/header/$header=content-type=text/css", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(HEADER_TESTPAGES_URL); + Assert.assertEquals(1, mHelper.numBlocked()); + Assert.assertEquals( + 1, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_STYLESHEET)); + Assert.assertTrue( + mHelper.isBlocked(String.format("https://%s/testfiles/header/stylesheet.css", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN))); ++ TestPagesHelperBase.TESTPAGES_DOMAIN))); + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testHeaderFilterException() throws TimeoutException, InterruptedException { ++ public void testHeaderFilterException() throws Exception { + // Add blocking filter, expect blocked image + mHelper.addCustomFilter( + String.format("||%s/testfiles/header_exception/$header=content-type=image/png", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(HEADER_EXCEPTIONS_TESTPAGES_URL); + Assert.assertEquals(1, mHelper.numBlocked()); + Assert.assertEquals(1, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_IMAGE)); + TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "img[id='image-header-exception-pass-1']"); ++ mHelper, 0, "img[id='image-header-exception-pass-1']"); + + // Add exception filter, expect image allowed + mHelper.addCustomFilter(String.format( -+ "@@%s/testfiles/header_exception/$header", TestPagesTestsHelper.TESTPAGES_DOMAIN)); ++ "@@%s/testfiles/header_exception/$header", TestPagesHelperBase.TESTPAGES_DOMAIN)); + mHelper.loadUrl(HEADER_EXCEPTIONS_TESTPAGES_URL); + Assert.assertEquals(1, mHelper.numAllowed()); + Assert.assertEquals(1, mHelper.numAllowedByType(AdblockContentType.CONTENT_TYPE_IMAGE)); + Assert.assertTrue( + mHelper.isAllowed(String.format("https://%s/testfiles/header_exception/image.png", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN))); ++ TestPagesHelperBase.TESTPAGES_DOMAIN))); + TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "img[id='image-header-exception-pass-1']"); ++ mHelper, 1, "img[id='image-header-exception-pass-1']"); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesRewriteTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesRewriteTest.java +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHelperBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHelperBase.java new file mode 100644 --- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesRewriteTest.java -@@ -0,0 +1,185 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+package org.chromium.components.adblock; -+ -+import androidx.test.filters.LargeTest; -+ -+import org.junit.After; -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; -+import org.junit.Test; -+import org.junit.runner.RunWith; -+ -+import org.chromium.base.test.util.CommandLineFlags; -+import org.chromium.base.test.util.DisabledTest; -+import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.content_public.browser.test.util.JavaScriptUtils; -+ -+import java.util.concurrent.TimeoutException; -+ -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesRewriteTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); -+ -+ public static final String REWRITE_TEST_URL = -+ TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "rewrite"; -+ -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testRewriteScript() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/rewrite/*.js$rewrite=abp-resource:blank-js,domain=%s", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(REWRITE_TEST_URL); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 0, "div[id='script-fail-1']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testRewriteStylesheet() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/rewrite/*.css$rewrite=abp-resource:blank-css,domain=%s", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(REWRITE_TEST_URL); -+ TestVerificationUtils.verifyGreenBackground(mActivityTestRule, "stylesheet-target"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testRewriteSubdocument() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/rewrite/*.html$rewrite=abp-resource:blank-html,domain=%s", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(REWRITE_TEST_URL); -+ TestVerificationUtils.verifySelfTestPass(mActivityTestRule, "subdocument-target"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testRewriteText() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/rewrite/*.txt$rewrite=abp-resource:blank-text,domain=%s", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(REWRITE_TEST_URL); -+ TestVerificationUtils.verifySelfTestPass(mActivityTestRule, "text-status"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testRewriteGif() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/rewrite/1x1.gif$rewrite=abp-resource:1x1-transparent-gif,domain=%s", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(REWRITE_TEST_URL); -+ TestVerificationUtils.verifySelfTestPass(mActivityTestRule, "1x1-target"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testRewrite2x2Png() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/rewrite/2x2.png$rewrite=abp-resource:2x2-transparent-png,domain=%s", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(REWRITE_TEST_URL); -+ TestVerificationUtils.verifySelfTestPass(mActivityTestRule, "2x2-target"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testRewrite3x2Png() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/rewrite/3x2.png$rewrite=abp-resource:3x2-transparent-png,domain=%s", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(REWRITE_TEST_URL); -+ TestVerificationUtils.verifySelfTestPass(mActivityTestRule, "3x2-target"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testRewrite32x32Png() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/rewrite/32x32.png$rewrite=abp-resource:32x32-transparent-png,domain=%s", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(REWRITE_TEST_URL); -+ TestVerificationUtils.verifySelfTestPass(mActivityTestRule, "32x32-target"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testRewriteAudio() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/rewrite/*.mp3$rewrite=abp-resource:blank-mp3,domain=%s", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(REWRITE_TEST_URL); -+ String value = JavaScriptUtils.executeJavaScriptAndWaitForResult( -+ mActivityTestRule.getActivity() -+ .getTabModelSelectorSupplier() -+ .get() -+ .getCurrentTab() -+ .getWebContents(), -+ "document.getElementById('audio-area').lastChild.getAttribute('data-expectedresult')"); -+ Assert.assertEquals("\"pass\"", value); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testRewriteVideo() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/rewrite/*.mp4$rewrite=abp-resource:blank-mp4,domain=%s", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrl(REWRITE_TEST_URL); -+ String value = JavaScriptUtils.executeJavaScriptAndWaitForResult( -+ mActivityTestRule.getActivity() -+ .getTabModelSelectorSupplier() -+ .get() -+ .getCurrentTab() -+ .getWebContents(), -+ "document.getElementById('video-area').lastChild.getAttribute('data-expectedresult')"); -+ Assert.assertEquals("\"pass\"", value); -+ } -+} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSiteKeyTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSiteKeyTest.java -new file mode 100644 ---- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSiteKeyTest.java -@@ -0,0 +1,82 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+package org.chromium.components.adblock; -+ -+import androidx.test.filters.LargeTest; -+ -+import org.junit.After; -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; -+import org.junit.Test; -+import org.junit.runner.RunWith; -+ -+import org.chromium.base.test.util.CommandLineFlags; -+import org.chromium.base.test.util.DisabledTest; -+import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+ -+import java.util.concurrent.TimeoutException; -+ -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesSiteKeyTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); -+ -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testVerifySitekeyException() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter( -+ String.format("%s#@#[data-adblockkey]", TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.addCustomFilter( -+ String.format("%s##.testcase-sitekey-eh", TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/sitekey/outofframe.png", TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.addCustomFilter(String.format( -+ "||%s/testfiles/sitekey/inframe.png", TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.addCustomFilter( -+ "@@$document,sitekey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANGtTstne7e8MbmDHDiMFkGbcuBgXmiVesGOG3gtYeM1EkrzVhBjGUvKXYE4GLFwqty3v5MuWWbvItUWBTYoVVsCAwEAAQ"); -+ mHelper.loadUrl(TestPagesTestsHelper.SITEKEY_TESTPAGES_TESTCASES_ROOT); -+ Assert.assertEquals(1, mHelper.numBlocked()); -+ Assert.assertTrue(mHelper.isBlocked( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "sitekey/outofframe.png")); -+ Assert.assertEquals(1, mHelper.numAllowed()); -+ Assert.assertTrue(mHelper.isAllowed( -+ TestPagesTestsHelper.TESTPAGES_RESOURCES_ROOT + "sitekey/inframe.png")); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "img"); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "div"); -+ } -+} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSnippetsTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSnippetsTest.java -new file mode 100644 ---- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSnippetsTest.java -@@ -0,0 +1,545 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+package org.chromium.components.adblock; -+ -+import androidx.test.filters.LargeTest; -+ -+import org.junit.After; -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; -+import org.junit.Test; -+import org.junit.runner.RunWith; -+ -+import org.chromium.base.test.util.CommandLineFlags; -+import org.chromium.base.test.util.DisabledTest; -+import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+ -+import java.util.concurrent.TimeoutException; -+ -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesSnippetsTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); -+ -+ public static final String SNIPPETS_TESTPAGES_TESTCASES_ROOT = -+ TestPagesTestsHelper.TESTPAGES_TESTCASES_ROOT + "snippets/"; -+ -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortCurrentInlineScriptBasic() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#abort-current-inline-script console.group", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-current-inline-script"); -+ // All "Abort" snippets cancel creation of the target div, so it won't be hidden - it will -+ // not exist in DOM. Therefore we verify it's not displayed instead of verifying it's -+ // hidden. -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#basic-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortCurrentInlineScriptSearch() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter( -+ String.format("%s#$#abort-current-inline-script console.info acis-search", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-current-inline-script"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#search-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortCurrentInlineScriptRegex() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter( -+ String.format("%s#$#abort-current-inline-script console.warn '/acis-regex[1-2]/'", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-current-inline-script"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#regex-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnPropertyReadBasic() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#abort-on-property-read aoprb", TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-read"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#basic-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnPropertyReadSubProperty() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#abort-on-property-read aopr.sp", TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-read"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#subproperty-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnPropertyReadFunctionProperty() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#abort-on-property-read aoprf.fp", TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-read"); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 0, -+ "div#functionproperty-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnPropertyWriteBasic() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#abort-on-property-write window.aopwb", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-write"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#basic-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnPropertyWriteSubProperty() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#abort-on-property-write window.aopwsp", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-write"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#subproperty-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnPropertyWriteFunctionProperty() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#abort-on-property-write aopwf.fp", TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-write"); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 0, -+ "div#functionproperty-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnIframePropertyReadBasic() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#abort-on-iframe-property-read aoiprb", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-iframe-property-read"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#basic-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnIframePropertyReadSubProperty() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#abort-on-iframe-property-read aoipr.sp", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-iframe-property-read"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#subproperty-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnIframePropertyReadMultipleProperties() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#abort-on-iframe-property-read aoipr1 aoipr2", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-iframe-property-read"); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 0, -+ "div#multipleproperties-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnIframePropertyWriteBasic() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#abort-on-iframe-property-write aoipwb", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-iframe-property-write"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#basic-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnIframePropertyWriteSubProperty() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#abort-on-iframe-property-write aoipw.sp", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-iframe-property-write"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#subproperty-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testAbortOnIframePropertyWriteMultipleProperties() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#abort-on-iframe-property-write aoipw1 aoipw2", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-iframe-property-write"); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 0, -+ "div#multipleproperties-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfContainsStatic() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#hide-if-contains 'hic-basic-static' p[id]", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains"); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "p#hic-static-id"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfContainsDynamic() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#hide-if-contains 'hic-basic-dynamic' p[id]", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains"); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "p#hic-dynamic-id"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfContainsSearch() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#hide-if-contains 'hic-search' p[id] .target", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div#search2-target > p.target"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div#search1-target > p[data-expectedresult='pass']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfContainsRegex() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#hide-if-contains /hic-regex-[2-3]/ p[id]", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains"); -+ // "hic-regex-1" does not match regex, should remain displayed. -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 1, "p#hic-regex-1"); -+ -+ // "hic-regex-2" and "hic-regex-2" do match regex, should be hidden. -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "p#hic-regex-2"); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "p#hic-regex-3"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfContainsFrame() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#hide-if-contains hidden span#frame-target", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains"); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, "span#frame-target"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfContainsAndMatchesStyleStatic() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#hide-if-contains-and-matches-style hicamss div[id] span.label /./ 'display: inline;'", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains-and-matches-style"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div#static-usage-area > div[data-expectedresult='fail']"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div#static-usage-area > div[data-expectedresult='pass']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfContainsAndMatchesStyleDynamic() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#hide-if-contains-and-matches-style hicamsd div[id] span.label /./ 'display: inline;'", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains-and-matches-style"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div#dynamic-target > div[data-expectedresult='fail']"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div#dynamic-target > div[data-expectedresult='pass']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfContainsImage() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#hide-if-contains-image /^89504e470d0a1a0a0000000d4948445200000064000000640802/ div[shouldhide] div", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains-image"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 2, "div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfContainsVisibleTextBasicUsage() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#hide-if-contains-visible-text Sponsored-hicvt-basic '#parent-basic > .article' '#parent-basic > .article .label'", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains-visible-text"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div#parent-basic > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfContainsVisibleTextContentUsage() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#hide-if-contains-visible-text Sponsored-hicvt-content '#parent-content > .article' '#parent-content > .article .label'", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains-visible-text"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div#parent-content > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfHasAndMatchesStyleBasicUsage() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#hide-if-has-and-matches-style a[href=\"#basic-target-ad\"] div[id] span.label /./ 'display: inline;'", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-has-and-matches-style"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div#basic-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfHasAndMatchesStyleLegitElements() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#hide-if-has-and-matches-style a[href=\"#comments-target-ad\"] div[id] span.label ';' /\\\\bdisplay:\\ inline\\;/", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-has-and-matches-style"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div#comments-target > div[data-expectedresult='pass']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfLabeledBy() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format( -+ "%s#$#hide-if-labelled-by 'Label' '#hilb-target [aria-labelledby]' '#hilb-target'", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-labelled-by"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div[data-expectedresult='fail']"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div[data-expectedresult='pass']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfMatchesXPathBasicStaticUsage() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#hide-if-matches-xpath //*[@id=\"isnfnv\"]", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-matches-xpath"); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, -+ "div#basic-static-usage-area > div[data-expectedresult='fail']"); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 1, -+ "div#basic-static-usage-area > div[data-expectedresult='pass']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfMatchesXPathClassUsage() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter( -+ String.format("%s#$#hide-if-matches-xpath //*[@class=\"to-be-hidden\"]", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-matches-xpath"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div#class-usage-area > div[data-expectedresult='fail']"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div#class-usage-area > div[data-expectedresult='pass']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfMatchesXPathIdStartsWith() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter( -+ String.format("%s#$#hide-if-matches-xpath //div[starts-with(@id,\"fail\")]", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-matches-xpath"); -+ TestVerificationUtils.verifyHiddenCount(mActivityTestRule, 1, -+ "div#hide-if-id-starts-with-area > div[data-expectedresult='fail']"); -+ TestVerificationUtils.verifyDisplayedCount(mActivityTestRule, 1, -+ "div#hide-if-id-starts-with-area > div[data-expectedresult='pass']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfShadowContainsBasicUsage() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#hide-if-shadow-contains 'hisc-basic' p", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-shadow-contains"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div#basic-target > p[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testHideIfShadowContainsRegexUsage() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter( -+ String.format("%s#$#hide-if-shadow-contains '/hisc-regex[1-2]/' div", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-shadow-contains"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 2, "div#regex-target > div[data-expectedresult='fail']"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div#regex-target > div[data-expectedresult='pass']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testJsonPrune() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter( -+ String.format("%s#$#json-prune 'data-expectedresult jsonprune aria-label'", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "json-prune?delay=100"); -+ // The object does not get hidden, it no longer exists in the DOM. -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#testcase-area > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testOverridePropertyRead() throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter( -+ String.format("%s#$#override-property-read overridePropertyRead.fp false", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent(SNIPPETS_TESTPAGES_TESTCASES_ROOT + "override-property-read"); -+ TestVerificationUtils.verifyHiddenCount( -+ mActivityTestRule, 1, "div#basic-target > div[data-expectedresult='fail']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testStripFetchQueryParameterBasicUsage() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter(String.format("%s#$#strip-fetch-query-parameter basicBlocked %s", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN, TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "strip-fetch-query-parameter"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 0, "div#basic-target > div[data-expectedresult='fail']"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 1, "div#basic-target > div[data-expectedresult='pass']"); -+ } -+ -+ @Test -+ @LargeTest -+ @Feature({"adblock"}) -+ public void testStripFetchQueryParameterOtherUsage() -+ throws TimeoutException, InterruptedException { -+ mHelper.addCustomFilter( -+ String.format("%s#$#strip-fetch-query-parameter otherAllowed2 other-domain", -+ TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ mHelper.loadUrlWaitForContent( -+ SNIPPETS_TESTPAGES_TESTCASES_ROOT + "strip-fetch-query-parameter"); -+ TestVerificationUtils.verifyDisplayedCount( -+ mActivityTestRule, 2, "div#other-target > div[data-expectedresult='pass']"); -+ } -+} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesTestsHelper.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesTestsHelper.java -new file mode 100644 ---- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesTestsHelper.java -@@ -0,0 +1,255 @@ ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesHelperBase.java +@@ -0,0 +1,180 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -5791,30 +3939,22 @@ new file mode 100644 +package org.chromium.components.adblock; + +import org.junit.Assert; -+import org.junit.Rule; + +import org.chromium.base.Log; +import org.chromium.base.test.util.CallbackHelper; -+import org.chromium.chrome.browser.tab.EmptyTabObserver; -+import org.chromium.chrome.browser.tab.Tab; -+import org.chromium.chrome.browser.tabmodel.TabModelObserver; -+import org.chromium.chrome.browser.tabmodel.TabModelSelector; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.AdblockContentType; ++import org.chromium.components.adblock.AdblockController; +import org.chromium.content_public.browser.WebContents; +import org.chromium.content_public.browser.test.util.TestThreadUtils; -+import org.chromium.url.GURL; + -+import java.lang.Thread; +import java.net.MalformedURLException; +import java.net.URL; -+import java.util.HashSet; -+import java.util.List; +import java.util.Set; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + -+public class TestPagesTestsHelper { ++public abstract class TestPagesHelperBase { + public static final String TESTPAGES_DOMAIN = "abptestpages.org"; + public static final String TESTPAGES_BASE_URL = "https://" + TESTPAGES_DOMAIN; + public static final String TESTPAGES_TESTCASES_ROOT = TESTPAGES_BASE_URL + "/en/"; @@ -5831,15 +3971,13 @@ new file mode 100644 + public static final String TESTPAGES_RESOURCES_ROOT = TESTPAGES_BASE_URL + "/testfiles/"; + public static final String TESTPAGES_SUBSCRIPTION = + TESTPAGES_TESTCASES_ROOT + "/abp-testcase-subscription.txt"; -+ + public static final int TEST_TIMEOUT_SEC = 30; + + private URL mTestSubscriptionUrl; -+ private CallbackHelper mHelper = new CallbackHelper(); -+ private TestAdBlockedObserver mObserver = new TestAdBlockedObserver(); -+ private TestSubscriptionUpdatedObserver mSubscriptionUpdateObserver = ++ private final CallbackHelper mHelper = new CallbackHelper(); ++ private final TestAdBlockedObserver mObserver = new TestAdBlockedObserver(); ++ private final TestSubscriptionUpdatedObserver mSubscriptionUpdateObserver = + new TestSubscriptionUpdatedObserver(); -+ private ChromeTabbedActivityTestRule mActivityTestRule; + + private class TestSubscriptionUpdatedObserver + implements AdblockController.SubscriptionUpdateObserver { @@ -5854,9 +3992,7 @@ new file mode 100644 + } + } + -+ public void setUp(final ChromeTabbedActivityTestRule activityRule) { -+ mActivityTestRule = activityRule; -+ mActivityTestRule.startMainActivityOnBlankPage(); ++ public void setUp() { + TestThreadUtils.runOnUiThreadBlocking(() -> { + AdblockController.getInstance().addOnAdBlockedObserver(mObserver); + AdblockController.getInstance().addSubscriptionUpdateObserver( @@ -5868,7 +4004,7 @@ new file mode 100644 + try { + mTestSubscriptionUrl = new URL(filterListUrl); + mObserver.setExpectedSubscriptionUrl(mTestSubscriptionUrl); -+ } catch (MalformedURLException e) { ++ } catch (MalformedURLException ignored) { + } + Assert.assertNotNull("Test subscription url", mTestSubscriptionUrl); + TestThreadUtils.runOnUiThreadBlocking(() -> { @@ -5895,64 +4031,6 @@ new file mode 100644 + }); + } + -+ public CallbackHelper getTabsOpenedAndClosedWaiter() { -+ final CallbackHelper callbackHelper = new CallbackHelper(); -+ final TabModelSelector tabModelSelector = -+ mActivityTestRule.getActivity().getTabModelSelectorSupplier().get(); -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ tabModelSelector.getCurrentModel().addObserver(new TabModelObserver() { -+ @Override -+ public void onFinishingTabClosure(Tab tab) { -+ // For some reason TabModelObserver#tabRemoved() is not called. -+ // Let's wait a bit to make sure tab is indeed closed. -+ try { -+ Thread.sleep(100); -+ } catch (InterruptedException e) { -+ } -+ callbackHelper.notifyCalled(); -+ } -+ @Override -+ public void didAddTab( -+ Tab tab, int type, int creationState, boolean markedForSelection) { -+ callbackHelper.notifyCalled(); -+ } -+ }); -+ }); -+ return callbackHelper; -+ } -+ -+ public CallbackHelper getTabsOpenedAndLoadedWaiter() { -+ final CallbackHelper callbackHelper = new CallbackHelper(); -+ final TabModelSelector tabModelSelector = -+ mActivityTestRule.getActivity().getTabModelSelectorSupplier().get(); -+ TestThreadUtils.runOnUiThreadBlocking(() -> { -+ tabModelSelector.getCurrentModel().addObserver(new TabModelObserver() { -+ @Override -+ public void didAddTab( -+ Tab tab, int type, int creationState, boolean markedForSelection) { -+ tab.addObserver(new EmptyTabObserver() { -+ @Override -+ public void onPageLoadFinished(Tab tab, GURL url) { -+ callbackHelper.notifyCalled(); -+ } -+ }); -+ } -+ }); -+ }); -+ return callbackHelper; -+ } -+ -+ public WebContents getWebContents() { -+ return mActivityTestRule.getActivity().getCurrentWebContents(); -+ } -+ -+ public int getTabCount() { -+ return mActivityTestRule.getActivity() -+ .getTabModelSelectorSupplier() -+ .get() -+ .getTotalTabCount(); -+ } -+ + // Note: Use either setOnAdMatchedLatch XOR setOnAdMatchedExpectations + public void setOnAdMatchedLatch(final CountDownLatch countDownLatch) { + Assert.assertTrue( @@ -6007,16 +4085,11 @@ new file mode 100644 + return mObserver.isPopupAllowed(url); + } + -+ public void loadUrl(final String url) throws InterruptedException, TimeoutException { -+ mActivityTestRule.loadUrl(url, TEST_TIMEOUT_SEC); -+ } ++ public abstract void loadUrl(final String url) throws Exception; + -+ public void loadUrlWaitForContent(final String url) -+ throws InterruptedException, TimeoutException { -+ loadUrl(url); -+ TestVerificationUtils.verifyCondition(mActivityTestRule, -+ "document.getElementsByClassName('testcase-waiting-content').length == 0"); -+ } ++ public abstract void loadUrlWaitForContent(final String url) throws Exception; ++ ++ public abstract WebContents getWebContents(); + + public int numBlocked() { + return mObserver.blockedInfos.size(); @@ -6026,11 +4099,11 @@ new file mode 100644 + return mObserver.allowedInfos.size(); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesWebsocketTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesWebsocketTest.java +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesRewriteTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesRewriteTestBase.java new file mode 100644 --- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesWebsocketTest.java -@@ -0,0 +1,77 @@ ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesRewriteTestBase.java +@@ -0,0 +1,153 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -6052,56 +4125,823 @@ new file mode 100644 + +import androidx.test.filters.LargeTest; + -+import org.junit.After; +import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; +import org.junit.Test; -+import org.junit.runner.RunWith; + -+import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.content_public.browser.test.util.JavaScriptUtils; + -+import java.util.Arrays; -+import java.util.HashSet; -+import java.util.concurrent.CountDownLatch; -+import java.util.concurrent.TimeUnit; -+import java.util.concurrent.TimeoutException; ++public abstract class TestPagesRewriteTestBase { ++ public static final String REWRITE_TEST_URL = ++ TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "rewrite"; ++ private TestPagesHelperBase mHelper; + -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class TestPagesWebsocketTest { -+ @Rule -+ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ private TestPagesTestsHelper mHelper = new TestPagesTestsHelper(); -+ -+ @Before -+ public void setUp() { -+ mHelper.setUp(mActivityTestRule); -+ mHelper.addCustomFilter( -+ String.format("$websocket,domain=%s", TestPagesTestsHelper.TESTPAGES_DOMAIN)); -+ } -+ -+ @After -+ public void tearDown() { -+ mHelper.tearDown(); ++ protected void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; + } + + @Test + @LargeTest + @Feature({"adblock"}) -+ public void testVerifyWebsocketFilter() throws TimeoutException, InterruptedException { ++ public void testRewriteScript() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/rewrite/*.js$rewrite=abp-resource:blank-js,domain=%s", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(REWRITE_TEST_URL); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 0, "div[id='script-fail-1']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testRewriteStylesheet() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/rewrite/*.css$rewrite=abp-resource:blank-css,domain=%s", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(REWRITE_TEST_URL); ++ TestVerificationUtils.verifyGreenBackground(mHelper, "stylesheet-target"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testRewriteSubdocument() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/rewrite/*.html$rewrite=abp-resource:blank-html,domain=%s", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(REWRITE_TEST_URL); ++ TestVerificationUtils.verifySelfTestPass(mHelper, "subdocument-target"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testRewriteText() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/rewrite/*.txt$rewrite=abp-resource:blank-text,domain=%s", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(REWRITE_TEST_URL); ++ TestVerificationUtils.verifySelfTestPass(mHelper, "text-status"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testRewriteGif() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/rewrite/1x1.gif$rewrite=abp-resource:1x1-transparent-gif,domain=%s", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(REWRITE_TEST_URL); ++ TestVerificationUtils.verifySelfTestPass(mHelper, "1x1-target"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testRewrite2x2Png() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/rewrite/2x2.png$rewrite=abp-resource:2x2-transparent-png,domain=%s", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(REWRITE_TEST_URL); ++ TestVerificationUtils.verifySelfTestPass(mHelper, "2x2-target"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testRewrite3x2Png() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/rewrite/3x2.png$rewrite=abp-resource:3x2-transparent-png,domain=%s", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(REWRITE_TEST_URL); ++ TestVerificationUtils.verifySelfTestPass(mHelper, "3x2-target"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testRewrite32x32Png() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/rewrite/32x32.png$rewrite=abp-resource:32x32-transparent-png," ++ + "domain=%s", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(REWRITE_TEST_URL); ++ TestVerificationUtils.verifySelfTestPass(mHelper, "32x32-target"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testRewriteAudio() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/rewrite/*.mp3$rewrite=abp-resource:blank-mp3,domain=%s", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(REWRITE_TEST_URL); ++ String value = JavaScriptUtils.executeJavaScriptAndWaitForResult(mHelper.getWebContents(), ++ "document.getElementById('audio-area').lastChild.getAttribute" ++ + "('data-expectedresult')"); ++ Assert.assertEquals("\"pass\"", value); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testRewriteVideo() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/rewrite/*.mp4$rewrite=abp-resource:blank-mp4,domain=%s", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrl(REWRITE_TEST_URL); ++ String value = JavaScriptUtils.executeJavaScriptAndWaitForResult(mHelper.getWebContents(), ++ "document.getElementById('video-area').lastChild.getAttribute" ++ + "('data-expectedresult')"); ++ Assert.assertEquals("\"pass\"", value); ++ } ++} +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSiteKeyTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSiteKeyTestBase.java +new file mode 100644 +--- /dev/null ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSiteKeyTestBase.java +@@ -0,0 +1,58 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.components.adblock; ++ ++import androidx.test.filters.LargeTest; ++ ++import org.junit.Assert; ++import org.junit.Test; ++ ++import org.chromium.base.test.util.Feature; ++ ++public abstract class TestPagesSiteKeyTestBase { ++ private TestPagesHelperBase mHelper; ++ ++ protected void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testVerifySitekeyException() throws Exception { ++ mHelper.addCustomFilter( ++ String.format("%s#@#[data-adblockkey]", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.addCustomFilter( ++ String.format("%s##.testcase-sitekey-eh", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/sitekey/outofframe.png", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.addCustomFilter(String.format( ++ "||%s/testfiles/sitekey/inframe.png", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.addCustomFilter( ++ "@@$document,sitekey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANGtTstne7e8MbmDHDiMFkGbcuBgXmiVesGOG3gtYeM1EkrzVhBjGUvKXYE4GLFwqty3v5MuWWbvItUWBTYoVVsCAwEAAQ"); ++ mHelper.loadUrl(TestPagesHelperBase.SITEKEY_TESTPAGES_TESTCASES_ROOT); ++ Assert.assertEquals(1, mHelper.numBlocked()); ++ Assert.assertTrue(mHelper.isBlocked( ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "sitekey/outofframe.png")); ++ Assert.assertEquals(1, mHelper.numAllowed()); ++ Assert.assertTrue(mHelper.isAllowed( ++ TestPagesHelperBase.TESTPAGES_RESOURCES_ROOT + "sitekey/inframe.png")); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "img"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div"); ++ } ++} +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSnippetsTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSnippetsTestBase.java +new file mode 100644 +--- /dev/null ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesSnippetsTestBase.java +@@ -0,0 +1,562 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.components.adblock; ++ ++import androidx.test.filters.LargeTest; ++ ++import org.junit.Test; ++ ++import org.chromium.base.test.util.Feature; ++ ++public abstract class TestPagesSnippetsTestBase { ++ private TestPagesHelperBase mHelper; ++ ++ protected void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortCurrentInlineScriptBasic() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#abort-current-inline-script console.group", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "abort-current-inline-script"); ++ // All "Abort" snippets cancel creation of the target div, so it won't be hidden - it will ++ // not exist in DOM. Therefore we verify it's not displayed instead of verifying it's ++ // hidden. ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#basic-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortCurrentInlineScriptSearch() throws Exception { ++ mHelper.addCustomFilter( ++ String.format("%s#$#abort-current-inline-script console.info acis-search", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "abort-current-inline-script"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#search-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortCurrentInlineScriptRegex() throws Exception { ++ mHelper.addCustomFilter( ++ String.format("%s#$#abort-current-inline-script console.warn '/acis-regex[1-2]/'", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "abort-current-inline-script"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#regex-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnPropertyReadBasic() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#abort-on-property-read aoprb", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-read"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#basic-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnPropertyReadSubProperty() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#abort-on-property-read aopr.sp", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-read"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#subproperty-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnPropertyReadFunctionProperty() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#abort-on-property-read aoprf.fp", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-read"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#functionproperty-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnPropertyWriteBasic() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#abort-on-property-write window.aopwb", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-write"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#basic-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnPropertyWriteSubProperty() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#abort-on-property-write window.aopwsp", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-write"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#subproperty-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnPropertyWriteFunctionProperty() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#abort-on-property-write aopwf.fp", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "abort-on-property-write"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#functionproperty-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnIframePropertyReadBasic() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#abort-on-iframe-property-read aoiprb", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "abort-on-iframe-property-read"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#basic-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnIframePropertyReadSubProperty() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#abort-on-iframe-property-read aoipr.sp", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "abort-on-iframe-property-read"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#subproperty-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnIframePropertyReadMultipleProperties() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#abort-on-iframe-property-read aoipr1 aoipr2", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "abort-on-iframe-property-read"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#multipleproperties-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnIframePropertyWriteBasic() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#abort-on-iframe-property-write aoipwb", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "abort-on-iframe-property-write"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#basic-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnIframePropertyWriteSubProperty() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#abort-on-iframe-property-write aoipw.sp", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "abort-on-iframe-property-write"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#subproperty-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testAbortOnIframePropertyWriteMultipleProperties() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#abort-on-iframe-property-write aoipw1 aoipw2", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "abort-on-iframe-property-write"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#multipleproperties-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfContainsStatic() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#hide-if-contains 'hic-basic-static' p[id]", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "p#hic-static-id"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfContainsDynamic() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#hide-if-contains 'hic-basic-dynamic' p[id]", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "p#hic-dynamic-id"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfContainsSearch() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#hide-if-contains 'hic-search' p[id] .target", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div#search2-target > p.target"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#search1-target > p[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfContainsRegex() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#hide-if-contains /hic-regex-[2-3]/ p[id]", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains"); ++ // "hic-regex-1" does not match regex, should remain displayed. ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 1, "p#hic-regex-1"); ++ ++ // "hic-regex-2" and "hic-regex-2" do match regex, should be hidden. ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "p#hic-regex-2"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "p#hic-regex-3"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfContainsFrame() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#hide-if-contains hidden span#frame-target", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "span#frame-target"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfContainsAndMatchesStyleStatic() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#hide-if-contains-and-matches-style hicamss div[id] span.label /./ 'display:" ++ + " inline;'", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "hide-if-contains-and-matches-style"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#static-usage-area > div[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#static-usage-area > div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfContainsAndMatchesStyleDynamic() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#hide-if-contains-and-matches-style hicamsd div[id] span.label /./ 'display:" ++ + " inline;'", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "hide-if-contains-and-matches-style"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#dynamic-target > div[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#dynamic-target > div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfContainsImage() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#hide-if-contains-image " ++ + "/^89504e470d0a1a0a0000000d4948445200000064000000640802/ " ++ + "div[shouldhide] div", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-contains-image"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 2, "div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfContainsVisibleTextBasicUsage() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#hide-if-contains-visible-text Sponsored-hicvt-basic '#parent-basic > " ++ + ".article' '#parent-basic > .article .label'", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "hide-if-contains-visible-text"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#parent-basic > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfContainsVisibleTextContentUsage() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#hide-if-contains-visible-text Sponsored-hicvt-content '#parent-content > " ++ + ".article' '#parent-content > .article .label'", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "hide-if-contains-visible-text"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#parent-content > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfHasAndMatchesStyleBasicUsage() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#hide-if-has-and-matches-style a[href=\"#basic-target-ad\"] div[id] span" ++ + ".label /./ 'display: inline;'", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "hide-if-has-and-matches-style"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#basic-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfHasAndMatchesStyleLegitElements() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#hide-if-has-and-matches-style a[href=\"#comments-target-ad\"] div[id] span" ++ + ".label ';' /\\\\bdisplay:\\ inline\\;/", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "hide-if-has-and-matches-style"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#comments-target > div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfLabeledBy() throws Exception { ++ mHelper.addCustomFilter(String.format( ++ "%s#$#hide-if-labelled-by 'Label' '#hilb-target [aria-labelledby]' '#hilb-target'", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-labelled-by"); ++ TestVerificationUtils.verifyHiddenCount(mHelper, 1, "div[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount(mHelper, 1, "div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfMatchesXPathBasicStaticUsage() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#hide-if-matches-xpath //*[@id=\"isnfnv\"]", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-matches-xpath"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#basic-static-usage-area > div[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#basic-static-usage-area > div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfMatchesXPath3BasicStaticUsage() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#hide-if-matches-xpath3 //*[@id=\"isnfnv\"]", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-matches-xpath"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#basic-static-usage-area > div[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#basic-static-usage-area > div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfMatchesXPathClassUsage() throws Exception { ++ mHelper.addCustomFilter( ++ String.format("%s#$#hide-if-matches-xpath //*[@class=\"to-be-hidden\"]", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-matches-xpath"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#class-usage-area > div[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#class-usage-area > div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfMatchesXPath3ClassUsage() throws Exception { ++ mHelper.addCustomFilter( ++ String.format("%s#$#hide-if-matches-xpath3 //*[@class=\"to-be-hidden\"]", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-matches-xpath"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#class-usage-area > div[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#class-usage-area > div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfMatchesXPathIdStartsWith() throws Exception { ++ mHelper.addCustomFilter( ++ String.format("%s#$#hide-if-matches-xpath //div[starts-with(@id,\"fail\")]", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-matches-xpath"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#hide-if-id-starts-with-area > div[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#hide-if-id-starts-with-area > div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfMatchesXPath3IdStartsWith() throws Exception { ++ mHelper.addCustomFilter( ++ String.format("%s#$#hide-if-matches-xpath3 //div[starts-with(@id,\"fail\")]", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-matches-xpath"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#hide-if-id-starts-with-area > div[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#hide-if-id-starts-with-area > div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfShadowContainsBasicUsage() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#hide-if-shadow-contains 'hisc-basic' p", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-shadow-contains"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#basic-target > p[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testHideIfShadowContainsRegexUsage() throws Exception { ++ mHelper.addCustomFilter( ++ String.format("%s#$#hide-if-shadow-contains '/hisc-regex[1-2]/' div", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "hide-if-shadow-contains"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 2, "div#regex-target > div[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#regex-target > div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testJsonPrune() throws Exception { ++ mHelper.addCustomFilter( ++ String.format("%s#$#json-prune 'data-expectedresult jsonprune aria-label'", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "json-prune?delay=100"); ++ // The object does not get hidden, it no longer exists in the DOM. ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#testcase-area > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testOverridePropertyRead() throws Exception { ++ mHelper.addCustomFilter( ++ String.format("%s#$#override-property-read overridePropertyRead.fp false", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent( ++ TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT + "override-property-read"); ++ TestVerificationUtils.verifyHiddenCount( ++ mHelper, 1, "div#basic-target > div[data-expectedresult='fail']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testStripFetchQueryParameterBasicUsage() throws Exception { ++ mHelper.addCustomFilter(String.format("%s#$#strip-fetch-query-parameter basicBlocked %s", ++ TestPagesHelperBase.TESTPAGES_DOMAIN, TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "strip-fetch-query-parameter"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 0, "div#basic-target > div[data-expectedresult='fail']"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 1, "div#basic-target > div[data-expectedresult='pass']"); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testStripFetchQueryParameterOtherUsage() throws Exception { ++ mHelper.addCustomFilter( ++ String.format("%s#$#strip-fetch-query-parameter otherAllowed2 other-domain", ++ TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ mHelper.loadUrlWaitForContent(TestPagesHelperBase.SNIPPETS_TESTPAGES_TESTCASES_ROOT ++ + "strip-fetch-query-parameter"); ++ TestVerificationUtils.verifyDisplayedCount( ++ mHelper, 2, "div#other-target > div[data-expectedresult='pass']"); ++ } ++} +diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesWebsocketTestBase.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesWebsocketTestBase.java +new file mode 100644 +--- /dev/null ++++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestPagesWebsocketTestBase.java +@@ -0,0 +1,56 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.components.adblock; ++ ++import androidx.test.filters.LargeTest; ++ ++import org.junit.Assert; ++import org.junit.Test; ++ ++import org.chromium.base.test.util.Feature; ++import org.chromium.components.adblock.AdblockContentType; ++ ++import java.util.HashSet; ++import java.util.List; ++import java.util.concurrent.CountDownLatch; ++import java.util.concurrent.TimeUnit; ++ ++public abstract class TestPagesWebsocketTestBase { ++ private TestPagesHelperBase mHelper; ++ ++ protected void setUp(TestPagesHelperBase helper) { ++ mHelper = helper; ++ mHelper.addCustomFilter( ++ String.format("$websocket,domain=%s", TestPagesHelperBase.TESTPAGES_DOMAIN)); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ public void testVerifyWebsocketFilter() throws Exception { + final String wssUrl = -+ String.format("wss://%s/websocket", TestPagesTestsHelper.TESTPAGES_DOMAIN); ++ String.format("wss://%s/websocket", TestPagesHelperBase.TESTPAGES_DOMAIN); + final CountDownLatch countDownLatch = -+ mHelper.setOnAdMatchedExpectations(new HashSet<>(Arrays.asList(wssUrl)), null); -+ mHelper.loadUrl(TestPagesTestsHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "websocket"); ++ mHelper.setOnAdMatchedExpectations(new HashSet<>(List.of(wssUrl)), null); ++ mHelper.loadUrl(TestPagesHelperBase.FILTER_TESTPAGES_TESTCASES_ROOT + "websocket"); + // Wait with 10 seconds max timeout + countDownLatch.await(10, TimeUnit.SECONDS); + Assert.assertEquals(1, mHelper.numBlockedByType(AdblockContentType.CONTENT_TYPE_WEBSOCKET)); @@ -6112,7 +4952,7 @@ diff --git a/components/adblock/android/javatests/src/org/chromium/components/ad new file mode 100644 --- /dev/null +++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/TestVerificationUtils.java -@@ -0,0 +1,166 @@ +@@ -0,0 +1,163 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -6134,9 +4974,9 @@ new file mode 100644 + +import org.junit.Assert; + -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.content_public.browser.test.util.JavaScriptUtils; + ++import java.util.Locale; +import java.util.concurrent.TimeoutException; + +public class TestVerificationUtils { @@ -6164,7 +5004,8 @@ new file mode 100644 + + " }" + + " if (includeSubframes) {" + + " for (let frame of document.querySelectorAll(\"iframe\")) {" -+ + " for (let element of frame.contentWindow.document.body.querySelectorAll(selector)) {" ++ + " for (let element of frame.contentWindow.document.body" ++ + ".querySelectorAll(selector)) {" + + " if (matches(element))" + + " ++count;" + + " }" @@ -6174,83 +5015,79 @@ new file mode 100644 + + "}"; + + private static final String WAIT_FOR_COUNT_FUNCTION_WRAPPER = "(function () {" -+ + "%s\n" // matches() defintion placeholder -+ + "%s\n" // countElements() defintion placeholder ++ + "%s\n" // matches() definition placeholder ++ + "%s\n" // countElements() definition placeholder + + "%s\n" // WAIT_FUNCTION placeholder which calls countElements() as a predicate + + "}());"; + -+ // Poll every 100 ms until condition is met or 10 seconds timeout occurs -+ private static final String WAIT_FUNCTION = "let repeat = 100;" -+ + "const id = setInterval(() => {" -+ + " --repeat;" -+ + " if (%s) {" // predicate placeholder -+ + " clearInterval(id);" -+ + " domAutomationController.send('OK');" -+ + " } else if (repeat == 0) {" -+ + " clearInterval(id);" -+ + " domAutomationController.send('Timeout');" -+ + " }" -+ + "}, 100);"; ++ // Poll every 100 ms until condition is met or 4 seconds timeout occurs ++ // Internal timeout of JavaScriptUtils.runJavascriptWithAsyncResult() is 5 seconds ++ // so our wait timeout needs to be shorter. ++ private static final String WAIT_FUNCTION = "function waitWithTimeout() {" ++ + " return new Promise(resolve => {" ++ + " let repeat = 40;" ++ + " const id = setInterval(() => {" ++ + " --repeat;" ++ + " if (%s) {" // predicate placeholder ++ + " clearInterval(id);" ++ + " resolve('OK');" ++ + " } else if (repeat == 0) {" ++ + " clearInterval(id);" ++ + " resolve('Timeout');" ++ + " }" ++ + " }, 100);" ++ + " });" ++ + "};" ++ + "waitWithTimeout().then((result) => { domAutomationController.send(result); });"; + -+ private static void verifyMatchesCount(final ChromeTabbedActivityTestRule mActivityTestRule, -+ final int num, final String matchesFunction, final String selector, -+ IncludeSubframes includeSubframes) throws TimeoutException { ++ private static void verifyMatchesCount(final TestPagesHelperBase helper, final int num, ++ final String matchesFunction, final String selector, IncludeSubframes includeSubframes) ++ throws TimeoutException { + final String boolIncludeSubframes = + includeSubframes == IncludeSubframes.YES ? "true" : "false"; -+ final String predicate = String.format( ++ final String predicate = String.format(Locale.getDefault(), + "countElements(\"%s\", %s) == %d", selector, boolIncludeSubframes, num); + final String waitFunction = String.format(WAIT_FUNCTION, predicate); + final String js = String.format(WAIT_FOR_COUNT_FUNCTION_WRAPPER, matchesFunction, + COUNT_ELEMENT_FUNCTION, waitFunction); + final String result = -+ JavaScriptUtils.runJavascriptWithAsyncResult(mActivityTestRule.getActivity() -+ .getTabModelSelectorSupplier() -+ .get() -+ .getCurrentTab() -+ .getWebContents(), -+ js); ++ JavaScriptUtils.runJavascriptWithAsyncResult(helper.getWebContents(), js); + Assert.assertEquals(STATUS_OK, result); + } + -+ public static void verifyHiddenCount(final ChromeTabbedActivityTestRule mActivityTestRule, -+ final int num, final String selector) throws TimeoutException { -+ verifyHiddenCount(mActivityTestRule, num, selector, IncludeSubframes.YES); ++ public static void verifyHiddenCount(final TestPagesHelperBase helper, final int num, ++ final String selector) throws TimeoutException { ++ verifyHiddenCount(helper, num, selector, IncludeSubframes.YES); + } + -+ public static void verifyHiddenCount(final ChromeTabbedActivityTestRule mActivityTestRule, -+ final int num, final String selector, final IncludeSubframes includeSubframes) ++ public static void verifyHiddenCount(final TestPagesHelperBase helper, final int num, ++ final String selector, final IncludeSubframes includeSubframes) + throws TimeoutException { -+ verifyMatchesCount( -+ mActivityTestRule, num, MATCHES_HIDDEN_FUNCTION, selector, includeSubframes); ++ verifyMatchesCount(helper, num, MATCHES_HIDDEN_FUNCTION, selector, includeSubframes); + } + -+ public static void verifyDisplayedCount(final ChromeTabbedActivityTestRule mActivityTestRule, -+ final int num, final String selector) throws TimeoutException { -+ verifyDisplayedCount(mActivityTestRule, num, selector, IncludeSubframes.YES); ++ public static void verifyDisplayedCount(final TestPagesHelperBase helper, final int num, ++ final String selector) throws TimeoutException { ++ verifyDisplayedCount(helper, num, selector, IncludeSubframes.YES); + } + -+ public static void verifyDisplayedCount(final ChromeTabbedActivityTestRule mActivityTestRule, -+ final int num, final String selector, final IncludeSubframes includeSubframes) ++ public static void verifyDisplayedCount(final TestPagesHelperBase helper, final int num, ++ final String selector, final IncludeSubframes includeSubframes) + throws TimeoutException { -+ verifyMatchesCount( -+ mActivityTestRule, num, MATCHES_DISPLAYED_FUNCTION, selector, includeSubframes); ++ verifyMatchesCount(helper, num, MATCHES_DISPLAYED_FUNCTION, selector, includeSubframes); + } + -+ public static void verifyCondition(final ChromeTabbedActivityTestRule mActivityTestRule, -+ final String predicate) throws TimeoutException { ++ public static void verifyCondition(final TestPagesHelperBase helper, final String predicate) ++ throws TimeoutException { + final String waitFunction = String.format(WAIT_FUNCTION, predicate); + Assert.assertEquals(STATUS_OK, -+ JavaScriptUtils.runJavascriptWithAsyncResult(mActivityTestRule.getActivity() -+ .getTabModelSelectorSupplier() -+ .get() -+ .getCurrentTab() -+ .getWebContents(), -+ waitFunction)); ++ JavaScriptUtils.runJavascriptWithAsyncResult( ++ helper.getWebContents(), waitFunction)); + } + -+ public static void verifyGreenBackground(final ChromeTabbedActivityTestRule mActivityTestRule, -+ final String elemId) throws TimeoutException { -+ verifyCondition(mActivityTestRule, ++ public static void verifyGreenBackground(final TestPagesHelperBase helper, final String elemId) ++ throws TimeoutException { ++ verifyCondition(helper, + "window.getComputedStyle(document.getElementById('" + elemId + + "')).backgroundColor == 'rgb(13, 199, 75)'"); + } @@ -6258,26 +5095,269 @@ new file mode 100644 + // For some cases it is better to rely on page script testing element + // rather than invent a specific script to check condition. For example + // checks for rewrite filters replaces content proper way. -+ public static void verifySelfTestPass(final ChromeTabbedActivityTestRule mActivityTestRule, -+ final String elemId) throws TimeoutException { -+ verifyCondition(mActivityTestRule, ++ public static void verifySelfTestPass(final TestPagesHelperBase helper, final String elemId) ++ throws TimeoutException { ++ verifyCondition(helper, + "document.getElementById('" + elemId + + "').getAttribute('data-expectedresult') == 'pass'"); + } + -+ public static void expectResourceBlocked(final ChromeTabbedActivityTestRule mActivityTestRule, -+ final String elemId) throws TimeoutException { -+ verifyCondition(mActivityTestRule, ++ public static void expectResourceBlocked(final TestPagesHelperBase helper, final String elemId) ++ throws TimeoutException { ++ verifyCondition(helper, + "window.getComputedStyle(document.getElementById('" + elemId + + "')).display == 'none'"); + } + -+ public static void expectResourceShown(final ChromeTabbedActivityTestRule mActivityTestRule, -+ final String elemId) throws TimeoutException { -+ verifyCondition(mActivityTestRule, ++ public static void expectResourceShown(final TestPagesHelperBase helper, final String elemId) ++ throws TimeoutException { ++ verifyCondition(helper, + "window.getComputedStyle(document.getElementById('" + elemId + + "')).display == 'inline'"); + } +} +diff --git a/components/adblock/android/resource_classification_notifier_bindings.cc b/components/adblock/android/resource_classification_notifier_bindings.cc +new file mode 100644 +--- /dev/null ++++ b/components/adblock/android/resource_classification_notifier_bindings.cc +@@ -0,0 +1,164 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++#include "components/adblock/android/resource_classification_notifier_bindings.h" ++ ++#include ++#include ++ ++#include "base/android/jni_android.h" ++#include "base/android/jni_array.h" ++#include "base/android/jni_string.h" ++#include "base/ranges/algorithm.h" ++#include "components/adblock/android/java_bindings_getters.h" ++#include "components/adblock/android/jni_headers/ResourceClassificationNotifier_jni.h" ++#include "components/adblock/content/browser/resource_classification_runner.h" ++#include "components/adblock/core/common/adblock_utils.h" ++ ++namespace adblock { ++ ++using base::android::AttachCurrentThread; ++using base::android::CheckException; ++using base::android::ConvertJavaStringToUTF8; ++using base::android::ConvertUTF8ToJavaString; ++using base::android::GetClass; ++using base::android::JavaParamRef; ++using base::android::JavaRef; ++using base::android::MethodID; ++using base::android::ScopedJavaGlobalRef; ++using base::android::ScopedJavaLocalRef; ++using base::android::ToJavaArrayOfObjects; ++using base::android::ToJavaArrayOfStrings; ++ ++ResourceClassificationNotifierBindings::ResourceClassificationNotifierBindings( ++ ResourceClassificationRunner* classification_runner) ++ : classification_runner_(classification_runner) { ++ classification_runner_->AddObserver(this); ++} ++ ++ResourceClassificationNotifierBindings:: ++ ~ResourceClassificationNotifierBindings() { ++ classification_runner_->RemoveObserver(this); ++} ++ ++void ResourceClassificationNotifierBindings::Bind( ++ JavaObjectWeakGlobalRef resource_classifier_java) { ++ bound_counterpart_ = resource_classifier_java; ++} ++ ++void ResourceClassificationNotifierBindings::OnAdMatched( ++ const GURL& url, ++ FilterMatchResult result, ++ const std::vector& parent_frame_urls, ++ ContentType content_type, ++ content::RenderFrameHost* render_frame_host, ++ const GURL& subscription, ++ const std::string& configuration_name) { ++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ++ DCHECK(render_frame_host); ++ DCHECK(result == FilterMatchResult::kBlockRule || ++ result == FilterMatchResult::kAllowRule); ++ const bool was_blocked = result == FilterMatchResult::kBlockRule; ++ DVLOG(3) << "[eyeo] Ad matched " << url << "(type: " << content_type ++ << (was_blocked ? ", blocked" : ", allowed") << ")"; ++ JNIEnv* env = AttachCurrentThread(); ++ ++ ScopedJavaLocalRef obj = bound_counterpart_.get(env); ++ if (obj.is_null()) { ++ return; ++ } ++ ++ ScopedJavaLocalRef j_url = ConvertUTF8ToJavaString(env, url.spec()); ++ ScopedJavaLocalRef j_parents = ++ ToJavaArrayOfStrings(env, adblock::utils::ConvertURLs(parent_frame_urls)); ++ ScopedJavaLocalRef j_subscription = ++ ConvertUTF8ToJavaString(env, subscription.spec()); ++ ScopedJavaLocalRef j_configuration = ++ ConvertUTF8ToJavaString(env, configuration_name); ++ int tab_id = adblock::GetTabId(render_frame_host); ++ Java_ResourceClassificationNotifier_adMatchedCallback( ++ env, obj, j_url, was_blocked, j_parents, j_subscription, j_configuration, ++ static_cast(content_type), tab_id); ++} ++ ++void ResourceClassificationNotifierBindings::OnPageAllowed( ++ const GURL& url, ++ content::RenderFrameHost* render_frame_host, ++ const GURL& subscription, ++ const std::string& configuration_name) { ++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ++ DCHECK(render_frame_host); ++ DVLOG(3) << "[eyeo] Page allowed " << url; ++ JNIEnv* env = AttachCurrentThread(); ++ ++ ScopedJavaLocalRef obj = bound_counterpart_.get(env); ++ if (obj.is_null()) { ++ return; ++ } ++ ++ ScopedJavaLocalRef j_url = ConvertUTF8ToJavaString(env, url.spec()); ++ ScopedJavaLocalRef j_subscription = ++ ConvertUTF8ToJavaString(env, subscription.spec()); ++ ScopedJavaLocalRef j_configuration = ++ ConvertUTF8ToJavaString(env, configuration_name); ++ int tab_id = adblock::GetTabId(render_frame_host); ++ Java_ResourceClassificationNotifier_pageAllowedCallback( ++ env, obj, j_url, j_subscription, j_configuration, tab_id); ++} ++ ++void ResourceClassificationNotifierBindings::OnPopupMatched( ++ const GURL& url, ++ FilterMatchResult result, ++ const GURL& opener_url, ++ content::RenderFrameHost* render_frame_host, ++ const GURL& subscription, ++ const std::string& configuration_name) { ++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ++ DCHECK(render_frame_host); ++ DCHECK(result == FilterMatchResult::kBlockRule || ++ result == FilterMatchResult::kAllowRule); ++ const bool was_blocked = result == FilterMatchResult::kBlockRule; ++ DVLOG(3) << "[eyeo] Popup matched " << url ++ << (was_blocked ? ", blocked" : ", allowed"); ++ JNIEnv* env = AttachCurrentThread(); ++ ++ ScopedJavaLocalRef obj = bound_counterpart_.get(env); ++ if (obj.is_null()) { ++ return; ++ } ++ ++ ScopedJavaLocalRef j_url = ConvertUTF8ToJavaString(env, url.spec()); ++ ScopedJavaLocalRef j_opener = ++ ConvertUTF8ToJavaString(env, opener_url.spec()); ++ ScopedJavaLocalRef j_subscription = ++ ConvertUTF8ToJavaString(env, subscription.spec()); ++ ScopedJavaLocalRef j_configuration = ++ ConvertUTF8ToJavaString(env, configuration_name); ++ int tab_id = adblock::GetTabId(render_frame_host); ++ Java_ResourceClassificationNotifier_popupMatchedCallback( ++ env, obj, j_url, was_blocked, j_opener, j_subscription, j_configuration, ++ tab_id); ++} ++ ++} // namespace adblock ++ ++static void JNI_ResourceClassificationNotifier_Bind( ++ JNIEnv* env, ++ const base::android::JavaParamRef& caller) { ++ auto& bindings = adblock::GetResourceClassificationNotifierBindings(); ++ bindings.Bind(JavaObjectWeakGlobalRef(env, caller)); ++} +diff --git a/components/adblock/android/resource_classification_notifier_bindings.h b/components/adblock/android/resource_classification_notifier_bindings.h +new file mode 100644 +--- /dev/null ++++ b/components/adblock/android/resource_classification_notifier_bindings.h +@@ -0,0 +1,69 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++#ifndef COMPONENTS_ADBLOCK_ANDROID_RESOURCE_CLASSIFICATION_NOTIFIER_BINDINGS_H_ ++#define COMPONENTS_ADBLOCK_ANDROID_RESOURCE_CLASSIFICATION_NOTIFIER_BINDINGS_H_ ++ ++#include ++#include ++#include "base/android/jni_weak_ref.h" ++#include "base/memory/raw_ptr.h" ++#include "base/sequence_checker.h" ++#include "components/adblock/content/browser/resource_classification_runner.h" ++#include "components/keyed_service/core/keyed_service.h" ++#include "components/prefs/pref_service.h" ++ ++namespace adblock { ++ ++class ResourceClassificationNotifierBindings ++ : public KeyedService, ++ public ResourceClassificationRunner::Observer { ++ public: ++ explicit ResourceClassificationNotifierBindings( ++ ResourceClassificationRunner* classification_runner); ++ ~ResourceClassificationNotifierBindings() override; ++ ++ void Bind(JavaObjectWeakGlobalRef resource_classifier_java); ++ ++ // ResourceClassificationRunner::Observer ++ void OnAdMatched(const GURL& url, ++ FilterMatchResult match_result, ++ const std::vector& parent_frame_urls, ++ ContentType content_type, ++ content::RenderFrameHost* render_frame_host, ++ const GURL& subscription, ++ const std::string& configuration_name) override; ++ void OnPageAllowed(const GURL& url, ++ content::RenderFrameHost* render_frame_host, ++ const GURL& subscription, ++ const std::string& configuration_name) override; ++ void OnPopupMatched(const GURL& url, ++ FilterMatchResult match_result, ++ const GURL& opener_url, ++ content::RenderFrameHost* render_frame_host, ++ const GURL& subscription, ++ const std::string& configuration_name) override; ++ ++ private: ++ SEQUENCE_CHECKER(sequence_checker_); ++ raw_ptr classification_runner_; ++ JavaObjectWeakGlobalRef bound_counterpart_; ++}; ++ ++} // namespace adblock ++ ++#endif // COMPONENTS_ADBLOCK_ANDROID_RESOURCE_CLASSIFICATION_NOTIFIER_BINDINGS_H_ -- 2.25.1 diff --git a/build/patches/eyeo-117.0.5938.0-android_settings.patch b/build/patches/eyeo-beta-118.0.5993.48-android_settings.patch similarity index 97% rename from build/patches/eyeo-117.0.5938.0-android_settings.patch rename to build/patches/eyeo-beta-118.0.5993.48-android_settings.patch index afc56a6a..3ccb2a3a 100644 --- a/build/patches/eyeo-117.0.5938.0-android_settings.patch +++ b/build/patches/eyeo-beta-118.0.5993.48-android_settings.patch @@ -1,13 +1,18 @@ From: chromium-sdk -Date: Mon, 21 Aug 2023 18:20:45 +0200 +Date: Thu, 12 Oct 2023 14:46:08 +0200 Subject: eyeo Browser Ad filtering Solution: Android Settings UI Module -Based on Chromium 117.0.5938.0 +Based on Chromium 118.0.5993.48 Pre-requisites: eyeo Browser Ad filtering Solution: Base Module and Android API Module --- + chrome/android/BUILD.gn | 6 + .../android/java/res/xml/main_preferences.xml | 14 +- - components/adblock/android/BUILD.gn | 55 ++++ + chrome/browser/adblock/android/BUILD.gn | 10 + + .../adblock/AdblockFilterFragmentTest.java | 63 +++++ + .../adblock/AdblockPopupInfoBarTest.java | 118 +++++++++ + .../adblock/AdblockPopupMessageTest.java | 103 ++++++++ + components/adblock/android/BUILD.gn | 68 +++++ components/adblock/android/README.md | 13 + .../adblock/android/adblock_strings.grd | 238 ++++++++++++++++++ .../fragment_adblock_custom_item_add.png | Bin 0 -> 490 bytes @@ -38,10 +43,7 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module and Android API .../settings/AdblockFilterListsAdapter.java | 115 +++++++++ .../settings/AdblockFilterListsFragment.java | 54 ++++ .../settings/AdblockMoreOptionsFragment.java | 34 +++ - .../settings/AdblockSettingsFragment.java | 137 ++++++++++ - .../adblock/AdblockFilterFragmentTest.java | 73 ++++++ - .../adblock/AdblockPopupInfoBarTest.java | 129 ++++++++++ - .../adblock/AdblockPopupMessageTest.java | 112 +++++++++ + .../settings/AdblockSettingsFragment.java | 141 +++++++++++ .../translations/adblock_strings_af.xtb | 4 + .../translations/adblock_strings_am.xtb | 13 + .../translations/adblock_strings_ar.xtb | 13 + @@ -122,7 +124,10 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module and Android API .../translations/adblock_strings_zh-HK.xtb | 4 + .../translations/adblock_strings_zh-TW.xtb | 13 + .../translations/adblock_strings_zu.xtb | 4 + - 116 files changed, 2440 insertions(+), 3 deletions(-) + 118 files changed, 2443 insertions(+), 3 deletions(-) + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockFilterFragmentTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupInfoBarTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupMessageTest.java create mode 100644 components/adblock/android/README.md create mode 100644 components/adblock/android/adblock_strings.grd create mode 100644 components/adblock/android/java/res/drawable-hdpi/fragment_adblock_custom_item_add.png @@ -154,9 +159,6 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module and Android API create mode 100644 components/adblock/android/java/src/org/chromium/components/adblock/settings/AdblockFilterListsFragment.java create mode 100644 components/adblock/android/java/src/org/chromium/components/adblock/settings/AdblockMoreOptionsFragment.java create mode 100644 components/adblock/android/java/src/org/chromium/components/adblock/settings/AdblockSettingsFragment.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockFilterFragmentTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockPopupInfoBarTest.java - create mode 100644 components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockPopupMessageTest.java create mode 100644 components/adblock/android/translations/adblock_strings_af.xtb create mode 100644 components/adblock/android/translations/adblock_strings_am.xtb create mode 100644 components/adblock/android/translations/adblock_strings_ar.xtb @@ -238,6 +240,29 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module and Android API create mode 100644 components/adblock/android/translations/adblock_strings_zh-TW.xtb create mode 100644 components/adblock/android/translations/adblock_strings_zu.xtb +diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn +--- a/chrome/android/BUILD.gn ++++ b/chrome/android/BUILD.gn +@@ -241,6 +241,9 @@ if (current_toolchain == default_toolchain) { + "//third_party/androidx:androidx_preference_preference_java", + ] + ++ ### Android UI module start ++ deps += [ "//components/adblock/android:java_ui_resources" ] ++ ### Android UI module end + } + + android_library("app_hooks_java") { +@@ -667,6 +670,9 @@ if (current_toolchain == default_toolchain) { + "//url/mojom:url_mojom_gurl_java", + ] + ++ ### Android UI module start ++ deps += [ "//components/adblock/android:adblock_ui_java" ] ++ ### Android UI module end + + deps += feed_deps + diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml @@ -284,15 +309,340 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j android:title="@string/prefs_about_chrome"/> -diff --git a/components/adblock/android/BUILD.gn b/components/adblock/android/BUILD.gn ---- a/components/adblock/android/BUILD.gn -+++ b/components/adblock/android/BUILD.gn -@@ -24,6 +24,18 @@ android_library("adblock_java") { - "java/src/org/chromium/components/adblock/ResourceClassificationNotifier.java", +diff --git a/chrome/browser/adblock/android/BUILD.gn b/chrome/browser/adblock/android/BUILD.gn +--- a/chrome/browser/adblock/android/BUILD.gn ++++ b/chrome/browser/adblock/android/BUILD.gn +@@ -35,6 +35,13 @@ android_library("adblock_java_tests") { + "javatests/src/org/chromium/chrome/browser/adblock/TestPagesWebsocketTest.java", ] + ### Android UI module start + sources += [ ++ "javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupInfoBarTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupMessageTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/AdblockFilterFragmentTest.java", ++ ] ++ ### Android UI module end + + deps = [ + "//base:base_java", +@@ -65,4 +72,7 @@ android_library("adblock_java_tests") { + "//url:gurl_java", + ] + ++ ### Android UI module start ++ deps += [ "//components/adblock/android:adblock_ui_java" ] ++ ### Android UI module end + } +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockFilterFragmentTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockFilterFragmentTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockFilterFragmentTest.java +@@ -0,0 +1,63 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import androidx.test.filters.SmallTest; ++ ++import org.junit.Assert; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.Test; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.ApplicationTestUtils; ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.base.test.util.Feature; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.browser.settings.SettingsActivityTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.settings.AdblockFilterListsFragment; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class AdblockFilterFragmentTest { ++ @Rule ++ public final ChromeTabbedActivityTestRule mActivityTestRule = ++ new ChromeTabbedActivityTestRule(); ++ @Rule ++ public SettingsActivityTestRule mTestRule = ++ new SettingsActivityTestRule<>(AdblockFilterListsFragment.class); ++ ++ @Before ++ public void setUp() throws Exception { ++ mActivityTestRule.startMainActivityOnBlankPage(); ++ mTestRule.startSettingsActivity(); ++ ApplicationTestUtils.finishActivity(mTestRule.getActivity()); ++ } ++ ++ @Test ++ @SmallTest ++ @Feature({"adblock"}) ++ public void testLanguageFiltersNotEmpty() { ++ mTestRule.startSettingsActivity(); ++ AdblockFilterListsFragment fragment = mTestRule.getFragment(); ++ Assert.assertNotNull(fragment); ++ Assert.assertNotEquals(0, fragment.getListView().getCount()); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupInfoBarTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupInfoBarTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupInfoBarTest.java +@@ -0,0 +1,118 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import androidx.test.InstrumentationRegistry; ++import androidx.test.filters.MediumTest; ++ ++import org.hamcrest.Matchers; ++import org.junit.After; ++import org.junit.Assert; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.Test; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.task.PostTask; ++import org.chromium.base.task.TaskTraits; ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.base.test.util.Criteria; ++import org.chromium.base.test.util.CriteriaHelper; ++import org.chromium.base.test.util.Feature; ++import org.chromium.chrome.browser.flags.ChromeFeatureList; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.browser.infobar.InfoBarIdentifier; ++import org.chromium.chrome.browser.tabmodel.TabModelSelector; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.chrome.test.util.browser.Features.DisableFeatures; ++import org.chromium.components.infobars.InfoBar; ++import org.chromium.net.test.EmbeddedTestServer; ++ ++// NOTE: Messages feature had to be disabled when testing infobars ++// https://gitlab.com/eyeo/adblockplus/abpchromium/-/commit/a617caaa5692630f73d967a55d86bf52cc491ad5 ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++@DisableFeatures({ChromeFeatureList.MESSAGES_FOR_ANDROID_INFRASTRUCTURE}) ++public class AdblockPopupInfoBarTest { ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ ++ private static final String POPUP_HTML_PATH = "/chrome/test/data/android/popup_test.html"; ++ ++ private String mPopupHtmlUrl; ++ private EmbeddedTestServer mTestServer; ++ ++ @Before ++ public void setUp() throws Exception { ++ // Create a new temporary instance to ensure the Class is loaded. Otherwise we will get a ++ // ClassNotFoundException when trying to instantiate during startup. ++ mActivityTestRule.startMainActivityOnBlankPage(); ++ ++ PostTask.runOrPostTask( ++ TaskTraits.UI_DEFAULT, () -> Assert.assertEquals(0, getNumInfobarsShowing())); ++ ++ mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); ++ mPopupHtmlUrl = mTestServer.getURL(POPUP_HTML_PATH); ++ } ++ ++ @After ++ public void tearDown() { ++ mTestServer.stopAndDestroyServer(); ++ } ++ ++ private int getNumInfobarsShowing() { ++ return mActivityTestRule.getInfoBars().size(); ++ } ++ ++ public int getTabCount() { ++ final TabModelSelector tabModelSelector = ++ mActivityTestRule.getActivity().getTabModelSelectorSupplier().get(); ++ Assert.assertNotNull(tabModelSelector); ++ return tabModelSelector.getTotalTabCount(); ++ } ++ ++ @Test ++ @MediumTest ++ @Feature({"adblock"}) ++ public void popUpBlockedInfoBarVisibleWhenAbpEnabled() throws InterruptedException { ++ mActivityTestRule.loadUrl(mPopupHtmlUrl); ++ Assert.assertEquals(1, getTabCount()); ++ CriteriaHelper.pollUiThread(() -> { ++ Criteria.checkThat(getNumInfobarsShowing(), Matchers.is(1)); ++ InfoBar frontInfoBar = mActivityTestRule.getInfoBars().get(0); ++ Criteria.checkThat("Invalid infobar type shown", frontInfoBar.getInfoBarIdentifier(), ++ Matchers.is(InfoBarIdentifier.POPUP_BLOCKED_INFOBAR_DELEGATE_MOBILE)); ++ }); ++ } ++ ++ @Test ++ @MediumTest ++ @CommandLineFlags.Add({"disable-adblock"}) ++ @Feature({"adblock"}) ++ public void popUpBlockedInfoBarVisibleWhenAbpDisabled() { ++ mActivityTestRule.loadUrl(mPopupHtmlUrl); ++ Assert.assertEquals(1, getTabCount()); ++ CriteriaHelper.pollUiThread(() -> { ++ Criteria.checkThat(getNumInfobarsShowing(), Matchers.is(1)); ++ InfoBar frontInfoBar = mActivityTestRule.getInfoBars().get(0); ++ Criteria.checkThat("Invalid infobar type shown", frontInfoBar.getInfoBarIdentifier(), ++ Matchers.is(InfoBarIdentifier.POPUP_BLOCKED_INFOBAR_DELEGATE_MOBILE)); ++ }); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupMessageTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupMessageTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupMessageTest.java +@@ -0,0 +1,103 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import androidx.test.InstrumentationRegistry; ++import androidx.test.filters.MediumTest; ++ ++import org.hamcrest.Matchers; ++import org.junit.After; ++import org.junit.Assert; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.Test; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.base.test.util.Criteria; ++import org.chromium.base.test.util.CriteriaHelper; ++import org.chromium.base.test.util.Feature; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.browser.tabmodel.TabModelSelector; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.messages.MessagesTestHelper; ++import org.chromium.net.test.EmbeddedTestServer; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class AdblockPopupMessageTest { ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ ++ private static final String POPUP_HTML_PATH = "/chrome/test/data/android/popup_test.html"; ++ ++ private String mPopupHtmlUrl; ++ private EmbeddedTestServer mTestServer; ++ ++ @Before ++ public void setUp() throws Exception { ++ // Create a new temporary instance to ensure the Class is loaded. Otherwise we will get a ++ // ClassNotFoundException when trying to instantiate during startup. ++ mActivityTestRule.startMainActivityOnBlankPage(); ++ ++ mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); ++ mPopupHtmlUrl = mTestServer.getURL(POPUP_HTML_PATH); ++ } ++ ++ @After ++ public void tearDown() { ++ mTestServer.stopAndDestroyServer(); ++ } ++ ++ public int getTabCount() { ++ final TabModelSelector tabModelSelector = ++ mActivityTestRule.getActivity().getTabModelSelectorSupplier().get(); ++ Assert.assertNotNull(tabModelSelector); ++ return tabModelSelector.getTotalTabCount(); ++ } ++ ++ @Test ++ @MediumTest ++ @Feature({"adblock"}) ++ public void popUpBlockedMessageVisibleWhenAbpEnabled() throws InterruptedException { ++ mActivityTestRule.loadUrl(mPopupHtmlUrl); ++ Assert.assertEquals(1, getTabCount()); ++ ++ CriteriaHelper.pollUiThread(() -> { ++ Criteria.checkThat(MessagesTestHelper.getMessageCount( ++ mActivityTestRule.getActivity().getWindowAndroid()), ++ Matchers.is(1)); ++ }); ++ } ++ ++ @Test ++ @MediumTest ++ @CommandLineFlags.Add({"disable-adblock"}) ++ @Feature({"adblock"}) ++ public void popUpBlockedMessageVisibleWhenAbpDisabled() { ++ mActivityTestRule.loadUrl(mPopupHtmlUrl); ++ Assert.assertEquals(1, getTabCount()); ++ ++ CriteriaHelper.pollUiThread(() -> { ++ Criteria.checkThat(MessagesTestHelper.getMessageCount( ++ mActivityTestRule.getActivity().getWindowAndroid()), ++ Matchers.is(1)); ++ }); ++ } ++} +diff --git a/components/adblock/android/BUILD.gn b/components/adblock/android/BUILD.gn +--- a/components/adblock/android/BUILD.gn ++++ b/components/adblock/android/BUILD.gn +@@ -66,6 +66,74 @@ android_library("adblock_controller_java") { + resources_package = "org.chromium.components.adblock.controller" + } + ++### Android UI module start ++android_library("adblock_ui_java") { ++ sources = [ + "java/src/org/chromium/components/adblock/settings/AdblockAllowedDomainsFragment.java", + "java/src/org/chromium/components/adblock/settings/AdblockCustomFilterListsFragment.java", + "java/src/org/chromium/components/adblock/settings/AdblockCustomFiltersFragment.java", @@ -302,16 +652,28 @@ diff --git a/components/adblock/android/BUILD.gn b/components/adblock/android/BU + "java/src/org/chromium/components/adblock/settings/AdblockMoreOptionsFragment.java", + "java/src/org/chromium/components/adblock/settings/AdblockSettingsFragment.java", + ] -+### Android UI module end - - deps = [ - ":java_resources", -@@ -58,6 +70,33 @@ android_resources("java_resources") { - sources = [ - "java/res/values/adblock_settings_locales_titles.xml", - ] -+### Android UI module start -+ sources += [ ++ ++ deps = [ ++ ":adblock_controller_java", ++ ":java_ui_resources", ++ "//base:base_java", ++ "//base:jni_java", ++ "//build/android:build_java", ++ "//chrome/browser/preferences:java", ++ "//chrome/browser/profiles/android:java", ++ "//components/browser_ui/settings/android:java", ++ "//components/prefs/android:java", ++ "//components/user_prefs/android:java", ++ "//content/public/android:content_full_java", ++ "//third_party/androidx:androidx_fragment_fragment_java", ++ "//third_party/androidx:androidx_preference_preference_java", ++ ] ++ ++ resources_package = "org.chromium.components.adblock" ++} ++ ++android_resources("java_ui_resources") { ++ sources = [ + "java/res/drawable-hdpi/fragment_adblock_custom_item_add.png", + "java/res/drawable-hdpi/fragment_adblock_custom_item_remove.png", + "java/res/drawable-mdpi/fragment_adblock_custom_item_add.png", @@ -336,29 +698,8 @@ diff --git a/components/adblock/android/BUILD.gn b/components/adblock/android/BU + ] + + deps = [ ":adblock_strings_grd" ] -+### Android UI module end - } - - android_library("adblock_java_tests") { -@@ -84,6 +123,13 @@ android_library("adblock_java_tests") { - "javatests/src/org/chromium/components/adblock/TestVerificationUtils.java", - ] - -+ ### Android UI module start -+ sources += [ -+ "javatests/src/org/chromium/components/adblock/AdblockPopupInfoBarTest.java", -+ "javatests/src/org/chromium/components/adblock/AdblockPopupMessageTest.java", -+ "javatests/src/org/chromium/components/adblock/AdblockFilterFragmentTest.java", -+ ] -+ ### Android UI module end - - deps = [ - ":adblock_java", -@@ -109,3 +155,12 @@ android_library("adblock_java_tests") { - "//third_party/junit:junit", - ] - } -+### Android UI module start ++} ++ +java_strings_grd("adblock_strings_grd") { + grd_file = "adblock_strings.grd" + outputs = [ "values/adblock_strings.xml" ] + @@ -367,6 +708,9 @@ diff --git a/components/adblock/android/BUILD.gn b/components/adblock/android/BU + [ "values-{{source_name_part}}/adblock_strings.xml" ]) +} +### Android UI module end + + android_library("adblock_java_tests_base") { + testonly = true diff --git a/components/adblock/android/README.md b/components/adblock/android/README.md new file mode 100644 --- /dev/null @@ -1420,7 +1764,7 @@ new file mode 100644 + final List installed = + AdblockController.getInstance().getInstalledSubscriptions(); + final List recommended = -+ AdblockController.getInstance().getRecommendedSubscriptions(getActivity()); ++ AdblockController.getInstance().getRecommendedSubscriptions(); + final List customStrings = new ArrayList(); + for (final AdblockController.Subscription subscription : installed) { + if (recommended.contains(subscription)) { @@ -1802,12 +2146,12 @@ new file mode 100644 + + @Override + public int getCount() { -+ return mController.getRecommendedSubscriptions(mContext).size(); ++ return mController.getRecommendedSubscriptions().size(); + } + + @Override + public Object getItem(int pos) { -+ return mController.getRecommendedSubscriptions(mContext).get(pos); ++ return mController.getRecommendedSubscriptions().get(pos); + } + + @Override @@ -1963,7 +2307,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock new file mode 100644 --- /dev/null +++ b/components/adblock/android/java/src/org/chromium/components/adblock/settings/AdblockSettingsFragment.java -@@ -0,0 +1,137 @@ +@@ -0,0 +1,141 @@ +// This file is part of eyeo Chromium SDK, +// Copyright (C) 2006-present eyeo GmbH +// eyeo Chromium SDK is free software: you can redistribute it and/or modify @@ -1979,19 +2323,17 @@ new file mode 100644 +package org.chromium.components.adblock.settings; + +import android.os.Bundle; -+import android.util.Log; -+import android.view.MotionEvent; -+import android.view.View; + +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; + +import org.chromium.build.BuildConfig; ++import org.chromium.chrome.browser.preferences.Pref; ++import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.components.adblock.AdblockController; +import org.chromium.components.adblock.R; +import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; -+ -+import java.lang.System; ++import org.chromium.components.user_prefs.UserPrefs; + +public class AdblockSettingsFragment + extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener { @@ -2024,12 +2366,17 @@ new file mode 100644 + mMoreOptions = findPreference(SETTINGS_MORE_OPTIONS_KEY); + } + ++ private boolean areMoreOptionsEnabled() { ++ return UserPrefs.get(Profile.getLastUsedRegularProfile()) ++ .getBoolean(Pref.ADBLOCK_MORE_OPTIONS_ENABLED); ++ } ++ + private void applyAdblockEnabled(boolean enabledValue) { + mFilterLists.setEnabled(enabledValue); + mAcceptableAdsEnabled.setEnabled(enabledValue); + mAllowedDomains.setEnabled(enabledValue); + mMoreOptions.setEnabled(enabledValue); -+ mMoreOptions.setVisible(AdblockController.getInstance().areMoreOptionsEnabled()); ++ mMoreOptions.setVisible(areMoreOptionsEnabled()); + } + + private void synchronizePreferences() { @@ -2058,7 +2405,8 @@ new file mode 100644 + + mOnOffTogleTimestamp = now; + if (mOnOffClickCount >= ON_OFF_TOGGLE_COUNT_TO_ENABLE_MORE_OPTIONS) { -+ AdblockController.getInstance().setMoreOptionsEnabled(true); ++ UserPrefs.get(Profile.getLastUsedRegularProfile()) ++ .setBoolean(Pref.ADBLOCK_MORE_OPTIONS_ENABLED, true); + } + } + @@ -2101,335 +2449,6 @@ new file mode 100644 + synchronizePreferences(); + } +} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockFilterFragmentTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockFilterFragmentTest.java -new file mode 100644 ---- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockFilterFragmentTest.java -@@ -0,0 +1,73 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+package org.chromium.components.adblock; -+ -+import androidx.test.InstrumentationRegistry; -+import androidx.test.rule.ActivityTestRule; -+ -+import androidx.test.filters.SmallTest; -+ -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; -+import org.junit.Test; -+import org.junit.runner.RunWith; -+ -+import org.chromium.base.Log; -+import org.chromium.base.test.util.ApplicationTestUtils; -+import org.chromium.base.test.util.CallbackHelper; -+import org.chromium.base.test.util.CommandLineFlags; -+import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.browser.settings.SettingsActivityTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.components.adblock.settings.AdblockFilterListsFragment; -+import org.chromium.content_public.browser.test.util.TestThreadUtils; -+ -+import java.net.URL; -+import java.util.concurrent.TimeUnit; -+import java.util.concurrent.TimeoutException; -+ -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class AdblockFilterFragmentTest { -+ @Rule -+ public final ChromeTabbedActivityTestRule mActivityTestRule = -+ new ChromeTabbedActivityTestRule(); -+ @Rule -+ public SettingsActivityTestRule mTestRule = -+ new SettingsActivityTestRule<>(AdblockFilterListsFragment.class); -+ -+ @Before -+ public void setUp() throws Exception { -+ mActivityTestRule.startMainActivityOnBlankPage(); -+ mTestRule.startSettingsActivity(); -+ ApplicationTestUtils.finishActivity(mTestRule.getActivity()); -+ } -+ -+ @Test -+ @SmallTest -+ @Feature({"adblock"}) -+ public void testLanguageFiltersNotEmpty() { -+ mTestRule.startSettingsActivity(); -+ AdblockFilterListsFragment fragment = mTestRule.getFragment(); -+ Assert.assertNotNull(fragment); -+ Assert.assertNotEquals(0, fragment.getListView().getCount()); -+ } -+} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockPopupInfoBarTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockPopupInfoBarTest.java -new file mode 100644 ---- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockPopupInfoBarTest.java -@@ -0,0 +1,129 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+package org.chromium.components.adblock; -+ -+import androidx.test.InstrumentationRegistry; -+import androidx.test.filters.MediumTest; -+ -+import org.hamcrest.Matchers; -+import org.junit.After; -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; -+import org.junit.Test; -+import org.junit.runner.RunWith; -+ -+import org.chromium.base.task.PostTask; -+import org.chromium.base.task.TaskTraits; -+import org.chromium.base.test.util.CommandLineFlags; -+import org.chromium.base.test.util.Criteria; -+import org.chromium.base.test.util.CriteriaHelper; -+import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeFeatureList; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.browser.infobar.InfoBarIdentifier; -+import org.chromium.chrome.browser.tabmodel.TabModelSelector; -+import org.chromium.chrome.test.ChromeBrowserTestRule; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.chrome.test.util.browser.Features.DisableFeatures; -+import org.chromium.components.infobars.InfoBar; -+import org.chromium.net.test.EmbeddedTestServer; -+ -+import java.net.MalformedURLException; -+import java.net.URL; -+import java.util.ArrayList; -+import java.util.Arrays; -+import java.util.HashMap; -+import java.util.List; -+import java.util.Map; -+import java.util.concurrent.TimeUnit; -+import java.util.concurrent.TimeoutException; -+ -+// NOTE: Messages feature had to be disabled when testing infobars -+// https://gitlab.com/eyeo/adblockplus/abpchromium/-/commit/a617caaa5692630f73d967a55d86bf52cc491ad5 -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+@DisableFeatures({ChromeFeatureList.MESSAGES_FOR_ANDROID_INFRASTRUCTURE}) -+public class AdblockPopupInfoBarTest { -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ -+ private static final String POPUP_HTML_PATH = "/chrome/test/data/android/popup_test.html"; -+ -+ private String mPopupHtmlUrl; -+ private EmbeddedTestServer mTestServer; -+ -+ @Before -+ public void setUp() throws Exception { -+ // Create a new temporary instance to ensure the Class is loaded. Otherwise we will get a -+ // ClassNotFoundException when trying to instantiate during startup. -+ mActivityTestRule.startMainActivityOnBlankPage(); -+ -+ PostTask.runOrPostTask( -+ TaskTraits.UI_DEFAULT, () -> Assert.assertTrue(getNumInfobarsShowing() == 0)); -+ -+ mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); -+ mPopupHtmlUrl = mTestServer.getURL(POPUP_HTML_PATH); -+ } -+ -+ @After -+ public void tearDown() { -+ mTestServer.stopAndDestroyServer(); -+ } -+ -+ private int getNumInfobarsShowing() { -+ return mActivityTestRule.getInfoBars().size(); -+ } -+ -+ public int getTabCount() { -+ return mActivityTestRule.getActivity() -+ .getTabModelSelectorSupplier() -+ .get() -+ .getTotalTabCount(); -+ } -+ -+ @Test -+ @MediumTest -+ @Feature({"adblock"}) -+ public void popUpBlockedInfoBarVisibleWhenAbpEnabled() throws InterruptedException { -+ mActivityTestRule.loadUrl(mPopupHtmlUrl); -+ Assert.assertEquals(1, getTabCount()); -+ CriteriaHelper.pollUiThread(() -> { -+ Criteria.checkThat(getNumInfobarsShowing(), Matchers.is(1)); -+ InfoBar frontInfoBar = mActivityTestRule.getInfoBars().get(0); -+ Criteria.checkThat("Invalid infobar type shown", frontInfoBar.getInfoBarIdentifier(), -+ Matchers.is(InfoBarIdentifier.POPUP_BLOCKED_INFOBAR_DELEGATE_MOBILE)); -+ }); -+ } -+ -+ @Test -+ @MediumTest -+ @CommandLineFlags.Add({"disable-adblock"}) -+ @Feature({"adblock"}) -+ public void popUpBlockedInfoBarVisibleWhenAbpDisabled() { -+ mActivityTestRule.loadUrl(mPopupHtmlUrl); -+ Assert.assertEquals(1, getTabCount()); -+ CriteriaHelper.pollUiThread(() -> { -+ Criteria.checkThat(getNumInfobarsShowing(), Matchers.is(1)); -+ InfoBar frontInfoBar = mActivityTestRule.getInfoBars().get(0); -+ Criteria.checkThat("Invalid infobar type shown", frontInfoBar.getInfoBarIdentifier(), -+ Matchers.is(InfoBarIdentifier.POPUP_BLOCKED_INFOBAR_DELEGATE_MOBILE)); -+ }); -+ } -+} -diff --git a/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockPopupMessageTest.java b/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockPopupMessageTest.java -new file mode 100644 ---- /dev/null -+++ b/components/adblock/android/javatests/src/org/chromium/components/adblock/AdblockPopupMessageTest.java -@@ -0,0 +1,112 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+package org.chromium.components.adblock; -+ -+import androidx.test.InstrumentationRegistry; -+import androidx.test.filters.MediumTest; -+ -+import org.hamcrest.Matchers; -+import org.junit.After; -+import org.junit.Assert; -+import org.junit.Before; -+import org.junit.Rule; -+import org.junit.Test; -+import org.junit.runner.RunWith; -+ -+import org.chromium.base.test.util.CommandLineFlags; -+import org.chromium.base.test.util.Criteria; -+import org.chromium.base.test.util.CriteriaHelper; -+import org.chromium.base.test.util.Feature; -+import org.chromium.chrome.browser.flags.ChromeSwitches; -+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.components.messages.MessagesTestHelper; -+import org.chromium.net.test.EmbeddedTestServer; -+ -+import java.net.MalformedURLException; -+import java.net.URL; -+import java.util.ArrayList; -+import java.util.Arrays; -+import java.util.HashMap; -+import java.util.List; -+import java.util.Map; -+import java.util.concurrent.TimeUnit; -+import java.util.concurrent.TimeoutException; -+ -+@RunWith(ChromeJUnit4ClassRunner.class) -+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -+public class AdblockPopupMessageTest { -+ @Rule -+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); -+ -+ private static final String POPUP_HTML_PATH = "/chrome/test/data/android/popup_test.html"; -+ -+ private String mPopupHtmlUrl; -+ private EmbeddedTestServer mTestServer; -+ -+ @Before -+ public void setUp() throws Exception { -+ // Create a new temporary instance to ensure the Class is loaded. Otherwise we will get a -+ // ClassNotFoundException when trying to instantiate during startup. -+ mActivityTestRule.startMainActivityOnBlankPage(); -+ -+ mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); -+ mPopupHtmlUrl = mTestServer.getURL(POPUP_HTML_PATH); -+ } -+ -+ @After -+ public void tearDown() { -+ mTestServer.stopAndDestroyServer(); -+ } -+ -+ public int getTabCount() { -+ return mActivityTestRule.getActivity() -+ .getTabModelSelectorSupplier() -+ .get() -+ .getTotalTabCount(); -+ } -+ -+ @Test -+ @MediumTest -+ @Feature({"adblock"}) -+ public void popUpBlockedMessageVisibleWhenAbpEnabled() throws InterruptedException { -+ mActivityTestRule.loadUrl(mPopupHtmlUrl); -+ Assert.assertEquals(1, getTabCount()); -+ -+ CriteriaHelper.pollUiThread(() -> { -+ Criteria.checkThat(MessagesTestHelper.getMessageCount( -+ mActivityTestRule.getActivity().getWindowAndroid()), -+ Matchers.is(1)); -+ }); -+ } -+ -+ @Test -+ @MediumTest -+ @CommandLineFlags.Add({"disable-adblock"}) -+ @Feature({"adblock"}) -+ public void popUpBlockedMessageVisibleWhenAbpDisabled() { -+ mActivityTestRule.loadUrl(mPopupHtmlUrl); -+ Assert.assertEquals(1, getTabCount()); -+ -+ CriteriaHelper.pollUiThread(() -> { -+ Criteria.checkThat(MessagesTestHelper.getMessageCount( -+ mActivityTestRule.getActivity().getWindowAndroid()), -+ Matchers.is(1)); -+ }); -+ } -+} diff --git a/components/adblock/android/translations/adblock_strings_af.xtb b/components/adblock/android/translations/adblock_strings_af.xtb new file mode 100644 --- /dev/null diff --git a/build/patches/eyeo-117.0.5938.0-base.patch b/build/patches/eyeo-beta-118.0.5993.48-base.patch similarity index 88% rename from build/patches/eyeo-117.0.5938.0-base.patch rename to build/patches/eyeo-beta-118.0.5993.48-base.patch index 05c42505..5519f110 100644 --- a/build/patches/eyeo-117.0.5938.0-base.patch +++ b/build/patches/eyeo-beta-118.0.5993.48-base.patch @@ -1,8 +1,8 @@ From: chromium-sdk -Date: Mon, 21 Aug 2023 18:20:40 +0200 +Date: Thu, 12 Oct 2023 14:46:00 +0200 Subject: eyeo Browser Ad filtering Solution: Base Module -Based on Chromium 117.0.5938.0 +Based on Chromium 118.0.5993.48 --- DEPS | 22 + LICENSE | 15 + @@ -10,7 +10,7 @@ Based on Chromium 117.0.5938.0 base/trace_event/builtin_categories.h | 5 + build/install-build-deps.py | 10 +- components/BUILD.gn | 15 + - components/adblock/CHANGELOG.md | 611 ++++ + components/adblock/CHANGELOG.md | 635 +++++ components/adblock/LICENSE | 674 +++++ components/adblock/README.md | 80 + components/adblock/content/BUILD.gn | 22 + @@ -19,18 +19,18 @@ Based on Chromium 117.0.5938.0 .../browser/adblock_controller_factory_base.h | 50 + .../content/browser/adblock_filter_match.h | 30 + .../adblock_telemetry_service_factory_base.cc | 100 + - .../adblock_telemetry_service_factory_base.h | 57 + + .../adblock_telemetry_service_factory_base.h | 54 + .../browser/adblock_url_loader_factory.cc | 746 +++++ - .../browser/adblock_url_loader_factory.h | 92 + - .../adblock_url_loader_factory_for_test.cc | 372 +++ + .../browser/adblock_url_loader_factory.h | 100 + + .../adblock_url_loader_factory_for_test.cc | 436 +++ .../adblock_url_loader_factory_for_test.h | 70 + - .../browser/adblock_webcontents_observer.cc | 187 ++ + .../browser/adblock_webcontents_observer.cc | 188 ++ .../browser/adblock_webcontents_observer.h | 85 + .../content_security_policy_injector.h | 61 + .../content_security_policy_injector_impl.cc | 125 + .../content_security_policy_injector_impl.h | 66 + .../adblock/content/browser/element_hider.h | 70 + - .../content/browser/element_hider_impl.cc | 305 ++ + .../content/browser/element_hider_impl.cc | 323 +++ .../content/browser/element_hider_impl.h | 55 + .../content/browser/element_hider_info.cc | 37 + .../content/browser/element_hider_info.h | 44 + @@ -43,12 +43,12 @@ Based on Chromium 117.0.5938.0 .../resource_classification_runner_impl.h | 156 ++ .../content/browser/session_stats_impl.cc | 86 + .../content/browser/session_stats_impl.h | 71 + - .../subscription_service_factory_base.cc | 225 ++ + .../subscription_service_factory_base.cc | 224 ++ .../subscription_service_factory_base.h | 60 + .../test/adblock_url_loader_factory_test.cc | 399 +++ - .../test/adblock_webcontents_observer_test.cc | 159 ++ - ...tent_security_policy_injector_impl_test.cc | 177 ++ - .../browser/test/element_hider_impl_test.cc | 390 +++ + .../test/adblock_webcontents_observer_test.cc | 164 ++ + ...tent_security_policy_injector_impl_test.cc | 183 ++ + .../browser/test/element_hider_impl_test.cc | 425 +++ .../test/frame_hierarchy_builder_test.cc | 154 + ...dblock_content_security_policy_injector.cc | 28 + ...adblock_content_security_policy_injector.h | 44 + @@ -58,18 +58,18 @@ Based on Chromium 117.0.5938.0 .../test/mock_frame_hierarchy_builder.h | 49 + .../mock_resource_classification_runner.cc | 49 + .../mock_resource_classification_runner.h | 104 + - ...esource_classification_runner_impl_test.cc | 453 +++ + ...esource_classification_runner_impl_test.cc | 463 +++ .../browser/test/session_stats_impl_test.cc | 74 + components/adblock/core/BUILD.gn | 175 ++ - .../activeping_telemetry_topic_provider.cc | 243 ++ - .../activeping_telemetry_topic_provider.h | 84 + + .../activeping_telemetry_topic_provider.cc | 285 ++ + .../activeping_telemetry_topic_provider.h | 87 + components/adblock/core/adblock_controller.h | 64 + .../adblock/core/adblock_controller_impl.cc | 271 ++ .../adblock/core/adblock_controller_impl.h | 95 + components/adblock/core/adblock_switches.cc | 26 + components/adblock/core/adblock_switches.h | 29 + - .../adblock/core/adblock_telemetry_service.cc | 244 ++ - .../adblock/core/adblock_telemetry_service.h | 107 + + .../adblock/core/adblock_telemetry_service.cc | 258 ++ + .../adblock/core/adblock_telemetry_service.h | 120 + components/adblock/core/classifier/BUILD.gn | 76 + .../core/classifier/resource_classifier.cc | 24 + .../core/classifier/resource_classifier.h | 90 + @@ -77,7 +77,7 @@ Based on Chromium 117.0.5938.0 .../classifier/resource_classifier_impl.h | 64 + .../test/mock_resource_classifier.cc | 26 + .../test/mock_resource_classifier.h | 66 + - .../test/resource_classifier_impl_test.cc | 634 +++++ + .../test/resource_classifier_impl_test.cc | 625 +++++ .../test/resource_classifier_perftest.cc | 235 ++ components/adblock/core/common/BUILD.gn | 110 + .../adblock/core/common/adblock_constants.cc | 164 ++ @@ -102,13 +102,13 @@ Based on Chromium 117.0.5938.0 .../configuration/filtering_configuration.h | 90 + .../filtering_configuration_prefs.cc | 33 + .../filtering_configuration_prefs.h | 30 + - .../persistent_filtering_configuration.cc | 270 ++ + .../persistent_filtering_configuration.cc | 274 ++ .../persistent_filtering_configuration.h | 86 + - ...persistent_filtering_configuration_test.cc | 240 ++ - .../test/fake_filtering_configuration.cc | 114 + + .../test/fake_filtering_configuration.cc | 115 + .../test/fake_filtering_configuration.h | 66 + .../test/mock_filtering_configuration.cc | 34 + - .../test/mock_filtering_configuration.h | 75 + + .../test/mock_filtering_configuration.h | 81 + + ...persistent_filtering_configuration_test.cc | 252 ++ components/adblock/core/converter/BUILD.gn | 83 + .../adblock/core/converter/converter_main.cc | 115 + .../core/converter/flatbuffer_converter.cc | 134 + @@ -116,7 +116,7 @@ Based on Chromium 117.0.5938.0 .../adblock/core/converter/parser/BUILD.gn | 66 + .../core/converter/parser/content_filter.cc | 68 + .../core/converter/parser/content_filter.h | 50 + - .../core/converter/parser/domain_option.cc | 115 + + .../core/converter/parser/domain_option.cc | 114 + .../core/converter/parser/domain_option.h | 59 + .../converter/parser/filter_classifier.cc | 39 + .../core/converter/parser/filter_classifier.h | 46 + @@ -162,7 +162,7 @@ Based on Chromium 117.0.5938.0 .../filtering_configuration_maintainer_impl.h | 119 + .../subscription/installed_subscription.cc | 42 + .../subscription/installed_subscription.h | 138 + - .../installed_subscription_impl.cc | 552 ++++ + .../installed_subscription_impl.cc | 554 ++++ .../installed_subscription_impl.h | 150 + .../ongoing_subscription_request.h | 50 + .../ongoing_subscription_request_impl.cc | 191 ++ @@ -179,7 +179,7 @@ Based on Chromium 117.0.5938.0 .../subscription/subscription_collection.h | 99 + .../subscription_collection_impl.cc | 353 +++ .../subscription_collection_impl.h | 97 + - .../core/subscription/subscription_config.cc | 320 +++ + .../core/subscription/subscription_config.cc | 338 +++ .../core/subscription/subscription_config.h | 121 + .../subscription/subscription_downloader.h | 66 + .../subscription_downloader_impl.cc | 289 ++ @@ -199,7 +199,7 @@ Based on Chromium 117.0.5938.0 .../subscription/subscription_validator.h | 59 + .../subscription_validator_impl.cc | 145 + .../subscription_validator_impl.h | 53 + - ...ring_configuration_maintainer_impl_test.cc | 900 ++++++ + ...ring_configuration_maintainer_impl_test.cc | 908 ++++++ .../test/installed_subscription_impl_test.cc | 111 + .../test/load_gzipped_test_file.cc | 43 + .../test/load_gzipped_test_file.h | 35 + @@ -229,16 +229,16 @@ Based on Chromium 117.0.5938.0 .../test/subscription_collection_impl_test.cc | 1020 +++++++ .../test/subscription_downloader_impl_test.cc | 578 ++++ ...scription_persistent_metadata_impl_test.cc | 213 ++ - ...bscription_persistent_storage_impl_test.cc | 342 +++ - .../test/subscription_service_impl_test.cc | 275 ++ + ...bscription_persistent_storage_impl_test.cc | 347 +++ + .../test/subscription_service_impl_test.cc | 287 ++ .../test/subscription_updater_impl_test.cc | 98 + .../test/subscription_validator_impl_test.cc | 252 ++ .../test/url_keyword_extractor_test.cc | 74 + .../subscription/url_keyword_extractor.cc | 68 + .../core/subscription/url_keyword_extractor.h | 61 + - ...ctiveping_telemetry_topic_provider_test.cc | 320 +++ - .../core/test/adblock_controller_impl_test.cc | 481 ++++ - .../adblock_telemetry_service_unittest.cc | 376 +++ + ...ctiveping_telemetry_topic_provider_test.cc | 328 +++ + .../core/test/adblock_controller_impl_test.cc | 449 +++ + .../adblock_telemetry_service_unittest.cc | 409 +++ .../core/test/bundled_subscription_test.cc | 49 + .../core/test/mock_adblock_controller.cc | 26 + .../core/test/mock_adblock_controller.h | 71 + @@ -272,17 +272,17 @@ Based on Chromium 117.0.5938.0 .../docs/settings/user-setting-sequence.png | Bin 0 -> 61104 bytes .../docs/settings/user-setting-sequence.txt | 14 + components/adblock/features.gni | 47 + - components/resources/BUILD.gn | 9 + - components/resources/adblock_resources.grdp | 26 + + components/resources/BUILD.gn | 5 + + components/resources/adblock_resources.grdp | 27 + components/resources/adblocking/.gitignore | 1 + - components/resources/adblocking/BUILD.gn | 70 + + components/resources/adblocking/BUILD.gn | 82 + components/resources/adblocking/LICENSE | 14 + - components/resources/adblocking/anticv.txt.gz | Bin 0 -> 64073 bytes - .../resources/adblocking/easylist.txt.gz | Bin 0 -> 132650 bytes + components/resources/adblocking/anticv.txt.gz | Bin 0 -> 66744 bytes + .../resources/adblocking/easylist.txt.gz | Bin 0 -> 124964 bytes components/resources/adblocking/elemhide.js | 43 + .../adblocking/elemhide_for_selector.jst | 53 + .../resources/adblocking/elemhideemu.jst | 1436 ++++++++++ - .../adblocking/exceptionrules.txt.gz | Bin 0 -> 844912 bytes + .../adblocking/exceptionrules.txt.gz | Bin 0 -> 846414 bytes components/resources/adblocking/update.sh | 33 + components/resources/components_resources.grd | 6 + .../data/adblock/40_regex_patterns.txt.gz | Bin 0 -> 904 bytes @@ -310,8 +310,11 @@ Based on Chromium 117.0.5938.0 .../core/frame/local_frame_mojo_handler.cc | 12 + .../core/frame/local_frame_mojo_handler.h | 5 + .../url_loader/mojo_url_loader_client.cc | 6 +- + tools/eyeo/generate_interdiffs.sh | 150 + + tools/eyeo/generate_modules.sh | 209 ++ + tools/eyeo/snippets_deps.py | 61 + tools/gritsettings/resource_ids.spec | 8 + - 307 files changed, 36335 insertions(+), 4 deletions(-) + 310 files changed, 37070 insertions(+), 4 deletions(-) create mode 100644 components/adblock/CHANGELOG.md create mode 100644 components/adblock/LICENSE create mode 100644 components/adblock/README.md @@ -406,11 +409,11 @@ Based on Chromium 117.0.5938.0 create mode 100644 components/adblock/core/configuration/filtering_configuration_prefs.h create mode 100644 components/adblock/core/configuration/persistent_filtering_configuration.cc create mode 100644 components/adblock/core/configuration/persistent_filtering_configuration.h - create mode 100644 components/adblock/core/configuration/persistent_filtering_configuration_test.cc create mode 100644 components/adblock/core/configuration/test/fake_filtering_configuration.cc create mode 100644 components/adblock/core/configuration/test/fake_filtering_configuration.h create mode 100644 components/adblock/core/configuration/test/mock_filtering_configuration.cc create mode 100644 components/adblock/core/configuration/test/mock_filtering_configuration.h + create mode 100644 components/adblock/core/configuration/test/persistent_filtering_configuration_test.cc create mode 100644 components/adblock/core/converter/BUILD.gn create mode 100644 components/adblock/core/converter/converter_main.cc create mode 100644 components/adblock/core/converter/flatbuffer_converter.cc @@ -594,11 +597,14 @@ Based on Chromium 117.0.5938.0 create mode 100644 components/test/data/adblock/exceptionrules.txt.gz create mode 100644 components/test/data/adblock/longurl.txt.gz create mode 100644 components/test/data/adblock/random_shuf_100.tsv.sqlite + create mode 100755 tools/eyeo/generate_interdiffs.sh + create mode 100755 tools/eyeo/generate_modules.sh + create mode 100644 tools/eyeo/snippets_deps.py diff --git a/DEPS b/DEPS --- a/DEPS +++ b/DEPS -@@ -186,6 +186,10 @@ vars = { +@@ -182,6 +182,10 @@ vars = { # flag is set True. 'checkout_wpr_archives': False, @@ -609,28 +615,28 @@ diff --git a/DEPS b/DEPS # By default, do not check out WebKit for iOS, as it is not needed unless # running against ToT WebKit rather than system WebKit. This can be overridden # e.g. with custom_vars. -@@ -300,6 +304,8 @@ vars = { +@@ -296,6 +300,8 @@ vars = { 'download_libaom_testdata': False, 'android_git': 'https://android.googlesource.com', + 'eyeo_distpartners_gitlab': 'https://gitlab.com/eyeo/distpartners', -+ 'eyeo_snippets_gitlab': 'https://gitlab.com/eyeo/snippets.git', ++ 'eyeo_snippets_gitlab': 'https://gitlab.com/eyeo/anti-cv/snippets.git', 'aomedia_git': 'https://aomedia.googlesource.com', 'boringssl_git': 'https://boringssl.googlesource.com', 'chrome_git': 'https://chrome-internal.googlesource.com', -@@ -523,6 +529,11 @@ vars = { +@@ -519,6 +525,11 @@ vars = { # and whatever else without interference from each other. 'betocore_revision': 'b902b346037ea3f4aadf8177021f6f917b16e648', + # Three lines of non-changing comments so that + # the commit queue can handle CLs rolling feed + # and whatever else without interference from each other. -+ 'eyeo_snippets_revision': 'v0.7.0', ++ 'eyeo_snippets_revision': 'v0.8.1', + # If you change this, also update the libc++ revision in # //buildtools/deps_revisions.gni. - 'libcxx_revision': '84fb809dd6dae36d556dc0bb702c6cc2ce9d4b80', -@@ -853,6 +864,10 @@ deps = { + 'libcxx_revision': '7cf98622abaf832e2d4784889ebc69d5b6fde4d8', +@@ -849,6 +860,10 @@ deps = { 'condition': 'checkout_android and checkout_src_internal', }, @@ -639,9 +645,9 @@ diff --git a/DEPS b/DEPS + }, + 'src/docs/website': { - 'url': Var('chromium_git') + '/website.git' + '@' + '243c1406199960e001e1dceccafc6fc2db6897f9', + 'url': Var('chromium_git') + '/website.git' + '@' + '98972e05cf600ceefe641ac5d83b661e2792fcb4', }, -@@ -1002,6 +1017,13 @@ deps = { +@@ -998,6 +1013,13 @@ deps = { 'dep_type': 'cipd', }, @@ -710,7 +716,7 @@ diff --git a/base/trace_event/builtin_categories.h b/base/trace_event/builtin_ca #ifndef BASE_TRACE_EVENT_BUILTIN_CATEGORIES_H_ #define BASE_TRACE_EVENT_BUILTIN_CATEGORIES_H_ -@@ -85,6 +89,7 @@ +@@ -86,6 +90,7 @@ X("exo") \ X("extensions") \ X("explore_sites") \ @@ -758,7 +764,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn import("//base/debug/debug.gni") import("//build/config/chrome_build.gni") -@@ -124,6 +127,14 @@ test("components_unittests") { +@@ -178,6 +181,14 @@ test("components_unittests") { deps = [ "//base", @@ -773,7 +779,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn "//components/aggregation_service:unit_tests", "//components/apdu:unit_tests", "//components/assist_ranker:unit_tests", -@@ -339,6 +350,7 @@ test("components_unittests") { +@@ -401,6 +412,7 @@ test("components_unittests") { if (use_blink) { deps += [ @@ -781,7 +787,7 @@ diff --git a/components/BUILD.gn b/components/BUILD.gn "//components/autofill/content/browser:unit_tests", "//components/autofill/content/renderer:unit_tests", "//components/autofill/core/common/mojom:unit_tests", -@@ -1072,6 +1084,9 @@ if (use_blink) { +@@ -1133,6 +1145,9 @@ if (use_blink) { deps = [ "//base", @@ -795,9 +801,33 @@ diff --git a/components/adblock/CHANGELOG.md b/components/adblock/CHANGELOG.md new file mode 100644 --- /dev/null +++ b/components/adblock/CHANGELOG.md -@@ -0,0 +1,611 @@ +@@ -0,0 +1,635 @@ +# Release Notes + ++## eyeo Browser Ad Filtering Solution 118.0 ++* Updated to Chromium 118.0.5993.48 ++* Allow removing existing FilteringConfigurations via Java API (DPD-2090) ++* Extracting some common code shared between the WebView and Chrome integrations (DPD-2159) ++* Fixed xpath3 snippets for WebView integrations (DPD-2162) ++* Update snippets repository URL to reflect repo move (DPD-2149) ++* Removing references to C++ AdblockController class (DPD-2153). Use the FilteringConfiguration in C++ now. ++* AdblockController still remains in Java. Internally, it redirects methods to its FilteringConfiguration. ++* Eyeometry TopicProviders can now provide debug information asynchronously (DPD-2175). This debug info is shown on chrome://adblock-internals ++* Hopeful fix for a non-reproducible crash in IsActiveOnDomain (DPD-2101) ++* The following locales now install global-filters+easylist.txt by default: th, el, sl, hr, sr, bs (DPD-2180) ++* Uzbek and Kazakh locales now install ruadlist+easylist.txt by default (DPD-2228) ++* Simplify localization of filter list titles in Android UI (DPD-2227) ++ ++Known issues: ++* monochrome_public_bundle target doesn't link. This is prioritized for fixing in 119. ++ ++## eyeo Chromium SDK 117.0 ++* Updated to Chromium 117.0.5938.44 ++* Added support for hide-if-matches-xpath3 snippet (DPD-2065) ++* Added Japanese and Turkish filter lists (DPD-2096) ++* Fixed dump from dangling pointer detector in adblock::ElementHider (DPD-2122) ++* Revert changes introduced with DPD-2101 that caused a crash in chrome://flags ++ +## eyeo Chromium SDK 116.0 +* Updated to Chromium 116.0.5845.78 +* Added webview support (DPD-2036) @@ -2152,7 +2182,7 @@ new file mode 100644 + +Differences across versions are listed in [the changelog](components/adblock/CHANGELOG.md). + -+You can also use our [interdiff script](tools/adblock/generate_interdiffs.sh) to compare two git revision ranges. You can find more information in the [integration how-to](docs/integration-how-to.md). ++You can also use our [interdiff script](tools/eyeo/generate_interdiffs.sh) to compare two git revision ranges. You can find more information in the [integration how-to](docs/integration-how-to.md). + + +## For eyeo Chromium SDK contributors @@ -2599,7 +2629,7 @@ new file mode 100644 + GetSubscriptionService(context)->GetAdblockFilteringConfiguration(), + url_loader_factory, GetInitialDelay(), GetCheckInterval()); + service->AddTopicProvider(std::make_unique( -+ utils::GetAppInfo(), prefs, GetAdblockController(context), ++ utils::GetAppInfo(), prefs, GetSubscriptionService(context), + ActivepingTelemetryTopicProvider::DefaultBaseUrl(), + ActivepingTelemetryTopicProvider::DefaultAuthToken())); + @@ -2631,7 +2661,7 @@ diff --git a/components/adblock/content/browser/adblock_telemetry_service_factor new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/adblock_telemetry_service_factory_base.h -@@ -0,0 +1,57 @@ +@@ -0,0 +1,54 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -2659,7 +2689,6 @@ new file mode 100644 + +namespace adblock { + -+class AdblockController; +class SubscriptionService; +class AdblockTelemetryServiceFactoryBase + : public BrowserContextKeyedServiceFactory { @@ -2671,8 +2700,6 @@ new file mode 100644 + + protected: + virtual PrefService* GetPrefs(content::BrowserContext* context) const = 0; -+ virtual AdblockController* GetAdblockController( -+ content::BrowserContext* context) const = 0; + virtual SubscriptionService* GetSubscriptionService( + content::BrowserContext* context) const = 0; + AdblockTelemetryServiceFactoryBase(); @@ -3444,7 +3471,7 @@ diff --git a/components/adblock/content/browser/adblock_url_loader_factory.h b/c new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/adblock_url_loader_factory.h -@@ -0,0 +1,92 @@ +@@ -0,0 +1,100 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3482,11 +3509,19 @@ new file mode 100644 +class ContentSecurityPolicyInjector; + +struct AdblockURLLoaderFactoryConfig { -+ raw_ptr subscription_service = nullptr; -+ raw_ptr resource_classifier = nullptr; -+ raw_ptr element_hider = nullptr; -+ raw_ptr sitekey_storage = nullptr; -+ raw_ptr csp_injector = nullptr; ++ // These raw_ptrs have DisableDanglingPtrDetection because they point to ++ // KeyedServices that will be removed with the BrowserContext. This object has ++ // no good method to find out when the BrowserContext is destroyed, so it ++ // can't null the pointers. ++ raw_ptr ++ subscription_service = nullptr; ++ raw_ptr ++ resource_classifier = nullptr; ++ raw_ptr element_hider = nullptr; ++ raw_ptr sitekey_storage = ++ nullptr; ++ raw_ptr ++ csp_injector = nullptr; +}; + +// Processing network requests and responses. @@ -3541,7 +3576,7 @@ diff --git a/components/adblock/content/browser/adblock_url_loader_factory_for_t new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/adblock_url_loader_factory_for_test.cc -@@ -0,0 +1,372 @@ +@@ -0,0 +1,436 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3564,6 +3599,8 @@ new file mode 100644 +#include "base/strings/string_split.h" +#include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" ++#include "components/adblock/core/configuration/filtering_configuration.h" ++#include "components/adblock/core/subscription/subscription_config.h" +#include "net/http/http_status_code.h" +#include "net/http/http_util.h" +#include "services/network/public/cpp/resource_request.h" @@ -3663,59 +3700,119 @@ new file mode 100644 + return command_elements; +} + -+void Clear(AdblockController* adblock_controller, -+ std::vector (AdblockController::*getter)() const, -+ void (AdblockController::*action)(const std::string&)) { -+ for (const auto& item : (adblock_controller->*getter)()) { -+ (adblock_controller->*action)(item); ++void Clear(SubscriptionService* subscription_service, ++ std::vector (FilteringConfiguration::*getter)() const, ++ void (FilteringConfiguration::*action)(const std::string&)) { ++ auto* adblock_configuration = ++ subscription_service->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "Action called for non existing \"adblock\" configuration"; ++ for (const auto& item : (adblock_configuration->*getter)()) { ++ (adblock_configuration->*action)(item); + } +} + +std::vector List( -+ AdblockController* adblock_controller, -+ std::vector (AdblockController::*getter)() const) { -+ return (adblock_controller->*getter)(); ++ SubscriptionService* subscription_service, ++ std::vector (FilteringConfiguration::*getter)() const) { ++ auto* adblock_configuration = ++ subscription_service->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "Action called for non existing \"adblock\" configuration"; ++ return (adblock_configuration->*getter)(); +} + -+void AddOrRemove(AdblockController* adblock_controller, -+ void (AdblockController::*action)(const std::string&), ++void AddOrRemove(SubscriptionService* subscription_service, ++ void (FilteringConfiguration::*action)(const std::string&), + std::string& items) { + auto items_list = base::SplitString(items, payload_delimiter, + base::WhitespaceHandling::TRIM_WHITESPACE, + base::SplitResult::SPLIT_WANT_NONEMPTY); ++ auto* adblock_configuration = ++ subscription_service->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "Action called for non existing \"adblock\" configuration"; + for (const auto& item : items_list) { -+ (adblock_controller->*action)(item); ++ (adblock_configuration->*action)(item); + } +} + -+void ClearSubscriptions(AdblockController* adblock_controller) { -+ for (const auto& subscription : -+ adblock_controller->GetInstalledSubscriptions()) { -+ adblock_controller->UninstallSubscription(subscription->GetSourceUrl()); ++void ClearSubscriptions(SubscriptionService* subscription_service) { ++ auto* adblock_configuration = ++ subscription_service->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "Action called for non existing \"adblock\" configuration"; ++ for (const auto& subscription : adblock_configuration->GetFilterLists()) { ++ adblock_configuration->RemoveFilterList(subscription); + } +} + +std::vector ListSubscriptions( -+ AdblockController* adblock_controller) { ++ SubscriptionService* subscription_service) { ++ auto* adblock_configuration = ++ subscription_service->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "Action called for non existing \"adblock\" configuration"; + std::vector subscriptions; -+ base::ranges::transform(adblock_controller->GetInstalledSubscriptions(), -+ std::back_inserter(subscriptions), -+ [](const auto& subscription) { -+ return subscription->GetSourceUrl().spec(); -+ }); ++ base::ranges::transform( ++ adblock_configuration->GetFilterLists(), ++ std::back_inserter(subscriptions), ++ [](const auto& subscription) { return subscription.spec(); }); + return subscriptions; +} + -+void AddOrRemoveSubscription(AdblockController* adblock_controller, -+ void (AdblockController::*action)(const GURL&), -+ std::string& items) { ++void AddOrRemoveSubscription( ++ SubscriptionService* subscription_service, ++ void (FilteringConfiguration::*action)(const GURL&), ++ std::string& items) { ++ auto* adblock_configuration = ++ subscription_service->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "Action called for non existing \"adblock\" configuration"; + auto items_list = base::SplitString(items, payload_delimiter, + base::WhitespaceHandling::TRIM_WHITESPACE, + base::SplitResult::SPLIT_WANT_NONEMPTY); + for (const auto& item : items_list) { -+ (adblock_controller->*action)(GURL{item}); ++ (adblock_configuration->*action)(GURL{item}); + } +} ++ ++bool IsAdblockEnabled(SubscriptionService* subscription_service) { ++ auto* adblock_configuration = ++ subscription_service->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "Action called for non existing \"adblock\" configuration"; ++ return adblock_configuration->IsEnabled(); ++} ++ ++void SetAdblockEnabled(SubscriptionService* subscription_service, ++ bool enabled) { ++ auto* adblock_configuration = ++ subscription_service->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "Action called for non existing \"adblock\" configuration"; ++ adblock_configuration->SetEnabled(enabled); ++} ++ ++bool IsAAEnabled(SubscriptionService* subscription_service) { ++ auto* adblock_configuration = ++ subscription_service->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "Action called for non existing \"adblock\" configuration"; ++ return base::ranges::any_of( ++ adblock_configuration->GetFilterLists(), ++ [&](const auto& url) { return url == AcceptableAdsUrl(); }); ++} ++ ++void SetAAEnabled(SubscriptionService* subscription_service, bool enabled) { ++ auto* adblock_configuration = ++ subscription_service->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "Action called for non existing \"adblock\" configuration"; ++ enabled ? adblock_configuration->AddFilterList(AcceptableAdsUrl()) ++ : adblock_configuration->RemoveFilterList(AcceptableAdsUrl()); ++} ++ +} // namespace + +// static @@ -3729,14 +3826,14 @@ new file mode 100644 + mojo::PendingRemote target_factory, + std::string user_agent_string, + DisconnectCallback on_disconnect, -+ AdblockController* adblock_controller) ++ SubscriptionService* subscription_service) + : AdblockURLLoaderFactory(std::move(config), + host_id, + std::move(receiver), + std::move(target_factory), + user_agent_string, + std::move(on_disconnect)), -+ adblock_controller_(adblock_controller) {} ++ subscription_service_(subscription_service) {} + +AdblockURLLoaderFactoryForTest::~AdblockURLLoaderFactoryForTest() = default; + @@ -3747,7 +3844,7 @@ new file mode 100644 + const network::ResourceRequest& request, + ::mojo::PendingRemote client, + const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) { -+ DCHECK(adblock_controller_); ++ DCHECK(subscription_service_); + if (request.url.host() != kAdblockDebugDataHostName) { + DLOG(WARNING) + << "[eyeo] AdblockURLLoaderFactoryForTest got unexpected url: " @@ -3802,24 +3899,24 @@ new file mode 100644 + if (topic == kTopicSubscriptions) { + if (command_elements.size() == 3) { + // This can be either add or remove with custom payload -+ void (AdblockController::*action_ptr)(const GURL&) = nullptr; ++ void (FilteringConfiguration::*action_ptr)(const GURL&) = nullptr; + std::string payload = DecodePayload(command_elements[2]); + if (action == kActionAdd) { -+ action_ptr = &AdblockController::InstallSubscription; ++ action_ptr = &FilteringConfiguration::AddFilterList; + } else if (action == kActionRemove) { -+ action_ptr = &AdblockController::UninstallSubscription; ++ action_ptr = &FilteringConfiguration::RemoveFilterList; + } + if (action_ptr) { + VLOG(2) << "[eyeo] Handling subscription payload: " << payload; -+ AddOrRemoveSubscription(adblock_controller_, action_ptr, payload); ++ AddOrRemoveSubscription(subscription_service_, action_ptr, payload); + return kResponseOk; + } + } else if (action == kActionClear) { -+ ClearSubscriptions(adblock_controller_); ++ ClearSubscriptions(subscription_service_); + return kResponseOk; + } else if (action == kActionList) { + std::string response = kResponseOk; -+ auto subscriptions = ListSubscriptions(adblock_controller_); ++ auto subscriptions = ListSubscriptions(subscription_service_); + if (!subscriptions.empty()) { + response += "\n\n"; + for (const auto& subscription : subscriptions) { @@ -3831,50 +3928,52 @@ new file mode 100644 + } else if (topic == kTopicFilters || topic == kTopicDomains) { + if (command_elements.size() == 3) { + // This can be either add or remove with custom payload -+ void (AdblockController::*action_ptr)(const std::string&) = nullptr; ++ void (FilteringConfiguration::*action_ptr)(const std::string&) = ++ nullptr; + std::string payload = DecodePayload(command_elements[2]); + if (topic == kTopicFilters) { + if (action == kActionAdd) { -+ action_ptr = &AdblockController::AddCustomFilter; ++ action_ptr = &FilteringConfiguration::AddCustomFilter; + } else if (action == kActionRemove) { -+ action_ptr = &AdblockController::RemoveCustomFilter; ++ action_ptr = &FilteringConfiguration::RemoveCustomFilter; + } + } else { + if (action == kActionAdd) { -+ action_ptr = &AdblockController::AddAllowedDomain; ++ action_ptr = &FilteringConfiguration::AddAllowedDomain; + } else if (action == kActionRemove) { -+ action_ptr = &AdblockController::RemoveAllowedDomain; ++ action_ptr = &FilteringConfiguration::RemoveAllowedDomain; + } + } + if (action_ptr) { + VLOG(2) << "[eyeo] Handling payload: " << payload; -+ AddOrRemove(adblock_controller_, action_ptr, payload); ++ AddOrRemove(subscription_service_, action_ptr, payload); + return kResponseOk; + } + } else { -+ std::vector (AdblockController::*getter)() const = nullptr; -+ void (AdblockController::*deleter)(const std::string&) = nullptr; ++ std::vector (FilteringConfiguration::*getter)() const = ++ nullptr; ++ void (FilteringConfiguration::*deleter)(const std::string&) = nullptr; + if (action == kActionClear) { + if (topic == kTopicFilters) { -+ deleter = &AdblockController::RemoveCustomFilter; -+ getter = &AdblockController::GetCustomFilters; ++ deleter = &FilteringConfiguration::RemoveCustomFilter; ++ getter = &FilteringConfiguration::GetCustomFilters; + } else { -+ deleter = &AdblockController::RemoveAllowedDomain; -+ getter = &AdblockController::GetAllowedDomains; ++ deleter = &FilteringConfiguration::RemoveAllowedDomain; ++ getter = &FilteringConfiguration::GetAllowedDomains; + } + } else if (action == kActionList) { + if (topic == kTopicFilters) { -+ getter = &AdblockController::GetCustomFilters; ++ getter = &FilteringConfiguration::GetCustomFilters; + } else { -+ getter = &AdblockController::GetAllowedDomains; ++ getter = &FilteringConfiguration::GetAllowedDomains; + } + } + if (deleter && getter) { -+ Clear(adblock_controller_, getter, deleter); ++ Clear(subscription_service_, getter, deleter); + return kResponseOk; + } else if (getter) { + std::string response = kResponseOk; -+ auto items = List(adblock_controller_, getter); ++ auto items = List(subscription_service_, getter); + if (!items.empty()) { + response += "\n\n"; + for (const auto& item : items) { @@ -3889,8 +3988,8 @@ new file mode 100644 + std::string response = kResponseOk; + response += "\n\n"; + bool enabled = topic == kTopicAdblock -+ ? adblock_controller_->IsAdblockEnabled() -+ : adblock_controller_->IsAcceptableAdsEnabled(); ++ ? IsAdblockEnabled(subscription_service_) ++ : IsAAEnabled(subscription_service_); + response += enabled ? "enabled" : "disabled"; + return response; + } @@ -3902,9 +4001,9 @@ new file mode 100644 + } + if (value.has_value()) { + if (topic == kTopicAdblock) { -+ adblock_controller_->SetAdblockEnabled(value.value()); ++ SetAdblockEnabled(subscription_service_, value.value()); + } else { -+ adblock_controller_->SetAcceptableAdsEnabled(value.value()); ++ SetAAEnabled(subscription_service_, value.value()); + } + return kResponseOk; + } @@ -3940,7 +4039,7 @@ new file mode 100644 +#define COMPONENTS_ADBLOCK_CONTENT_BROWSER_ADBLOCK_URL_LOADER_FACTORY_FOR_TEST_H_ + +#include "components/adblock/content/browser/adblock_url_loader_factory.h" -+#include "components/adblock/core/adblock_controller.h" ++#include "components/adblock/core/subscription/subscription_service.h" + +namespace adblock { + @@ -3964,7 +4063,7 @@ new file mode 100644 + mojo::PendingRemote target_factory, + std::string user_agent_string, + DisconnectCallback on_disconnect, -+ AdblockController* adblock_controller); ++ SubscriptionService* subscription_service); + ~AdblockURLLoaderFactoryForTest() final; + + void CreateLoaderAndStart( @@ -3983,7 +4082,7 @@ new file mode 100644 + void SendResponse( + std::string response_body, + ::mojo::PendingRemote client) const; -+ raw_ptr adblock_controller_; ++ raw_ptr subscription_service_; +}; + +} // namespace adblock @@ -3993,7 +4092,7 @@ diff --git a/components/adblock/content/browser/adblock_webcontents_observer.cc new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/adblock_webcontents_observer.cc -@@ -0,0 +1,187 @@ +@@ -0,0 +1,188 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -4055,11 +4154,11 @@ new file mode 100644 +} // namespace + +void TraceHandleLoadComplete( -+ content::RenderFrameHost* frame_host, ++ intptr_t rfh_trace_id, + const adblock::ElementHider::ElemhideInjectionData&) { + TRACE_EVENT_NESTABLE_ASYNC_END0("eyeo", + "AdblockWebContentObserver::HandleOnLoad", -+ TRACE_ID_LOCAL(frame_host)); ++ TRACE_ID_LOCAL(rfh_trace_id)); +} + +AdblockWebContentObserver::AdblockWebContentObserver( @@ -4151,9 +4250,10 @@ new file mode 100644 + DVLOG(1) << "[eyeo] skipping element hiding on localhost URL"; + return; + } ++ const auto rfh_trace_id = reinterpret_cast(frame_host); + TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( + "eyeo", "AdblockWebContentObserver::HandleOnLoad", -+ TRACE_ID_LOCAL(frame_host), "url", url.spec()); ++ TRACE_ID_LOCAL(rfh_trace_id), "url", url.spec()); + + auto referrers_chain = + frame_hierarchy_builder_->BuildFrameHierarchy(frame_host); @@ -4171,7 +4271,7 @@ new file mode 100644 + element_hider_->ApplyElementHidingEmulationOnPage( + std::move(url), std::move(referrers_chain), frame_host, + std::move(site_key), -+ base::BindOnce(&TraceHandleLoadComplete, frame_host)); ++ base::BindOnce(&TraceHandleLoadComplete, rfh_trace_id)); +} + +bool AdblockWebContentObserver::IsAdblockEnabled() const { @@ -4617,7 +4717,7 @@ diff --git a/components/adblock/content/browser/element_hider_impl.cc b/componen new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/element_hider_impl.cc -@@ -0,0 +1,305 @@ +@@ -0,0 +1,323 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -4733,6 +4833,19 @@ new file mode 100644 + &output, 0, "{{elemHidingEmulatedPatternsDef}}", build_string); +} + ++std::string GenerateXpath3Dep() { ++ static std::string xpath3_dep = ++ "(" + ++ ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( ++ IDR_ADBLOCK_SNIPPETS_XPATH3_DEP_JS) + ++ ")();"; ++ if (xpath3_dep == "()();") { ++ LOG(WARNING) << "Snippets library does not support xpath3!"; ++ return ""; ++ } ++ return xpath3_dep; ++} ++ +void GenerateSnippetScript(const GURL& url, + base::Value::List input, + std::string& output) { @@ -4746,7 +4859,12 @@ new file mode 100644 + static std::string snippets_lib = + ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( + IDR_ADBLOCK_SNIPPETS_JS); -+ output = "({{callback}})({}, ...{{snippets}});"; ++ ++ output = "{{xpath3}}({{callback}})({}, ...{{snippets}});"; ++ bool require_xpath3 = ++ serialized.find("hide-if-matches-xpath3") != std::string::npos; ++ base::ReplaceSubstringsAfterOffset(&output, 0, "{{xpath3}}", ++ require_xpath3 ? GenerateXpath3Dep() : ""); + base::ReplaceSubstringsAfterOffset(&output, 0, "{{callback}}", snippets_lib); + base::ReplaceSubstringsAfterOffset(&output, 0, "{{snippets}}", serialized); +} @@ -6263,7 +6381,7 @@ diff --git a/components/adblock/content/browser/subscription_service_factory_bas new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/subscription_service_factory_base.cc -@@ -0,0 +1,225 @@ +@@ -0,0 +1,224 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -6430,8 +6548,7 @@ new file mode 100644 + content::BrowserContext* context) const { + auto* prefs = GetPrefs(context); + auto* subscription_service = new SubscriptionServiceImpl( -+ base::BindRepeating(&MakeFilterConfigurationMaintainer, context, -+ GetPrefs(context), ++ base::BindRepeating(&MakeFilterConfigurationMaintainer, context, prefs, + GetSubscriptionPersistentMetadata(context), + static_cast(this)), + base::BindRepeating(&CleanupPersistedConfiguration, prefs)); @@ -6962,7 +7079,7 @@ diff --git a/components/adblock/content/browser/test/adblock_webcontents_observe new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/test/adblock_webcontents_observer_test.cc -@@ -0,0 +1,159 @@ +@@ -0,0 +1,164 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -7005,6 +7122,11 @@ new file mode 100644 + observer_ = AdblockWebContentObserver::FromWebContents(web_contents); + } + ++ void TearDown() override { ++ observer_ = nullptr; ++ content::RenderViewHostTestHarness::TearDown(); ++ } ++ + MockSubscriptionService service_; + MockElementHider hider_; + MockSitekeyStorage storage_; @@ -7126,7 +7248,7 @@ diff --git a/components/adblock/content/browser/test/content_security_policy_inj new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/test/content_security_policy_injector_impl_test.cc -@@ -0,0 +1,177 @@ +@@ -0,0 +1,183 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -7183,6 +7305,12 @@ new file mode 100644 + &subscription_service_, std::move(frame_hierarchy_builder)); + } + ++ void TearDown() override { ++ // Avoid dangling pointers during destruction. ++ frame_hierarchy_builder_ = nullptr; ++ content::RenderViewHostTestHarness::TearDown(); ++ } ++ + void FrameHierarchyWillBeBuilt() { + EXPECT_CALL(*frame_hierarchy_builder_, + FindRenderFrameHost(main_rfh()->GetGlobalId())) @@ -7308,7 +7436,7 @@ diff --git a/components/adblock/content/browser/test/element_hider_impl_test.cc new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/test/element_hider_impl_test.cc -@@ -0,0 +1,390 @@ +@@ -0,0 +1,425 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -7361,6 +7489,9 @@ new file mode 100644 + EXPECT_CALL(mock_delegate_, LoadDataResourceString(IDR_ADBLOCK_SNIPPETS_JS)) + .WillRepeatedly(testing::Return("snippets_lib")); + EXPECT_CALL(mock_delegate_, ++ LoadDataResourceString(IDR_ADBLOCK_SNIPPETS_XPATH3_DEP_JS)) ++ .WillRepeatedly(testing::Return("xpath3_dep")); ++ EXPECT_CALL(mock_delegate_, + LoadDataResourceString(IDR_ADBLOCK_ELEMHIDE_EMU_JS)) + .WillRepeatedly(testing::Return("{{elemHidingEmulatedPatternsDef}}")); + } @@ -7698,6 +7829,38 @@ new file mode 100644 + task_environment()->RunUntilIdle(); +} + ++TEST_F(AdblockElementHiderImplTest, InjectsXpath3DepWhenXpath3FilterFound) { ++ base::Value::List snippets_config; ++ snippets_config.Append("hide-if-matches-xpath3"); ++ ++ ElementHiderImpl element_hide(&sub_service_); ++ EXPECT_CALL(sub_service_, GetCurrentSnapshot()).WillOnce([&]() { ++ auto collection = std::make_unique(); ++ EXPECT_CALL(*collection, ++ FindBySpecialFilter(SpecialFilterType::Document, kUrl, ++ kFrameHierarchy, kSitekey)) ++ .WillOnce(testing::Return(absl::nullopt)); ++ EXPECT_CALL(*collection, ++ FindBySpecialFilter(SpecialFilterType::Elemhide, kUrl, ++ kFrameHierarchy, kSitekey)) ++ .WillOnce(testing::Return(GURL("about:blank"))); ++ EXPECT_CALL(*collection, GenerateSnippets(kUrl, kFrameHierarchy)) ++ .WillOnce(testing::Return(testing::ByMove(std::move(snippets_config)))); ++ SubscriptionService::Snapshot snapshot; ++ snapshot.push_back(std::move(collection)); ++ return snapshot; ++ }); ++ ++ element_hide.ApplyElementHidingEmulationOnPage( ++ kUrl, kFrameHierarchy, main_rfh(), kSitekey, ++ base::BindLambdaForTesting( ++ [&](const ElementHider::ElemhideInjectionData& data) { ++ EXPECT_EQ(data.snippet_js, ++ "(xpath3_dep)();(snippets_lib)({}, " ++ "...[\"hide-if-matches-xpath3\"]);"); ++ })); ++} ++ +} // namespace adblock diff --git a/components/adblock/content/browser/test/frame_hierarchy_builder_test.cc b/components/adblock/content/browser/test/frame_hierarchy_builder_test.cc new file mode 100644 @@ -8283,7 +8446,7 @@ diff --git a/components/adblock/content/browser/test/resource_classification_run new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/test/resource_classification_runner_impl_test.cc -@@ -0,0 +1,453 @@ +@@ -0,0 +1,463 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -8370,10 +8533,8 @@ new file mode 100644 + std::unique_ptr mock_frame_hierarchy_builder = + std::make_unique(); + mock_frame_hierarchy_builder_ = mock_frame_hierarchy_builder.get(); -+ auto collection = std::make_unique(); -+ mock_subscription_collection_ = collection.get(); + mock_snapshot_ = std::make_unique(); -+ mock_snapshot_->push_back(std::move(collection)); ++ mock_snapshot_->push_back(std::make_unique()); + mock_resource_classifier_ = base::MakeRefCounted(); + classification_runner_ = std::make_unique( + mock_resource_classifier_, std::move(mock_frame_hierarchy_builder), @@ -8381,6 +8542,19 @@ new file mode 100644 + classification_runner_->AddObserver(&mock_observer_); + } + ++ void TearDown() override { ++ // Avoid dangling pointers during destruction. ++ mock_frame_hierarchy_builder_ = nullptr; ++ classification_runner_->RemoveObserver(&mock_observer_); ++ classification_runner_.reset(); ++ RenderViewHostTestHarness::TearDown(); ++ } ++ ++ MockSubscriptionCollection& mock_subscription_collection() { ++ return *static_cast( ++ mock_snapshot_->front().get()); ++ } ++ + void SiteKeyWillBePresent(const std::vector& frame_hierarchy, + SiteKey sitekey) { + EXPECT_CALL(mock_sitekey_storage_, FindSiteKeyForAnyUrl(frame_hierarchy)) @@ -8440,7 +8614,6 @@ new file mode 100644 + raw_ptr mock_frame_hierarchy_builder_; + scoped_refptr mock_resource_classifier_; + std::unique_ptr classification_runner_; -+ raw_ptr mock_subscription_collection_; + std::unique_ptr mock_snapshot_; + + const GURL kUrl{"https://test.com/url.x"}; @@ -8524,7 +8697,7 @@ new file mode 100644 + .Times(0); + + // In default config page is not allowlisted... -+ EXPECT_CALL(*mock_subscription_collection_, ++ EXPECT_CALL(mock_subscription_collection(), + FindBySpecialFilter(SpecialFilterType::Document, kUrl, + std::vector(), SiteKey())) + .WillOnce(testing::Return(absl::nullopt)); @@ -8545,11 +8718,11 @@ new file mode 100644 + +TEST_F(AdblockResourceClassificationRunnerImplTest, + CheckRequestFilterMatch_AllowlistedMainframeInTwoConfigs) { -+ std::string other_coniguration = "other"; ++ std::string other_configuration = "other"; + EXPECT_CALL(mock_observer_, OnPageAllowed(kUrl, main_rfh(), kSubscriptionUrl, -+ other_coniguration)); ++ other_configuration)); + -+ EXPECT_CALL(*mock_subscription_collection_, ++ EXPECT_CALL(mock_subscription_collection(), + FindBySpecialFilter(SpecialFilterType::Document, kUrl, + std::vector(), SiteKey())) + .WillOnce(testing::Return(absl::optional{kSubscriptionUrl})); @@ -8560,8 +8733,8 @@ new file mode 100644 + std::vector(), SiteKey())) + .WillOnce(testing::Return(absl::optional{kSubscriptionUrl})); + EXPECT_CALL(*collection, GetFilteringConfigurationName()) -+ .WillRepeatedly(testing::ReturnRef(other_coniguration)); -+ EXPECT_CALL(*mock_subscription_collection_, GetFilteringConfigurationName()) ++ .WillRepeatedly(testing::ReturnRef(other_configuration)); ++ EXPECT_CALL(mock_subscription_collection(), GetFilteringConfigurationName()) + .WillRepeatedly(testing::ReturnRef(kConfigurationName)); + mock_snapshot_->push_back(std::move(collection)); + @@ -9000,9 +9173,8 @@ diff --git a/components/adblock/core/activeping_telemetry_topic_provider.cc b/co new file mode 100644 --- /dev/null +++ b/components/adblock/core/activeping_telemetry_topic_provider.cc -@@ -0,0 +1,243 @@ -+/* -+ * This file is part of eyeo Chromium SDK, +@@ -0,0 +1,285 @@ ++/* This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH + * + * eyeo Chromium SDK is free software: you can redistribute it and/or modify @@ -9024,8 +9196,10 @@ new file mode 100644 +#include "base/json/json_writer.h" +#include "base/system/sys_info.h" +#include "base/time/time.h" ++#include "base/time/time_to_iso8601.h" +#include "base/uuid.h" +#include "components/adblock/core/common/adblock_prefs.h" ++#include "components/adblock/core/subscription/subscription_config.h" + +namespace adblock { +namespace { @@ -9073,12 +9247,12 @@ new file mode 100644 +ActivepingTelemetryTopicProvider::ActivepingTelemetryTopicProvider( + utils::AppInfo app_info, + PrefService* pref_service, -+ AdblockController* adblock_controller, ++ SubscriptionService* subscription_service, + const GURL& base_url, + const std::string& auth_token) + : app_info_(std::move(app_info)), + pref_service_(pref_service), -+ adblock_controller_(adblock_controller), ++ subscription_service_(subscription_service), + base_url_(base_url), + auth_token_(auth_token) {} + @@ -9119,35 +9293,13 @@ new file mode 100644 + return auth_token_; +} + -+void ActivepingTelemetryTopicProvider::GetPayload(PayloadCallback callback) { -+ base::Value::Dict payload; -+ payload.Set("addon_name", "eyeo-chromium-sdk"); -+ payload.Set("addon_version", "2.0.0"); -+ payload.Set("application", app_info_.name); -+ payload.Set("application_version", app_info_.version); -+ payload.Set("aa_active", adblock_controller_->IsAcceptableAdsEnabled()); -+ payload.Set("platform", base::SysInfo::OperatingSystemName()); -+ payload.Set("platform_version", base::SysInfo::OperatingSystemVersion()); -+ // Server requires the following parameters to either have a correct, -+ // non-empty value, or not be present at all. We shall not send empty strings. -+ AppendStringIfPresent(pref_service_, common::prefs::kTelemetryLastPingTag, -+ "last_ping_tag", payload); -+ AppendStringIfPresent(pref_service_, common::prefs::kTelemetryFirstPingTime, -+ "first_ping", payload); -+ AppendStringIfPresent(pref_service_, common::prefs::kTelemetryLastPingTime, -+ "last_ping", payload); -+ AppendStringIfPresent(pref_service_, -+ common::prefs::kTelemetryPreviousLastPingTime, -+ "previous_last_ping", payload); -+ -+ base::Value::Dict root; -+ root.Set("payload", std::move(payload)); ++void ActivepingTelemetryTopicProvider::GetPayload( ++ PayloadCallback callback) const { + std::string serialized; + // The only way JSONWriter::Write() can return fail is then the Value + // contains lists or dicts that are too deep (200 levels). We just built the + // payload and root objects here, they should be really shallow. -+ CHECK(base::JSONWriter::Write(root, &serialized)); -+ VLOG(1) << "[eyeo] Telemetry ping payload: " << serialized; ++ CHECK(base::JSONWriter::Write(GetPayloadInternal(), &serialized)); + std::move(callback).Run(std::move(serialized)); +} + @@ -9205,6 +9357,35 @@ new file mode 100644 + UpdatePrefs(*ping_response_time); +} + ++void ActivepingTelemetryTopicProvider::FetchDebugInfo( ++ DebugInfoCallback callback) const { ++ base::Value::Dict debug_info; ++ debug_info.Set("endpoint_url", GetEndpointURL().spec()); ++ debug_info.Set("payload", GetPayloadInternal()); ++ debug_info.Set("first_ping", ++ pref_service_->GetString( ++ adblock::common::prefs::kTelemetryFirstPingTime)); ++ debug_info.Set("time_of_next_request", ++ base::TimeToISO8601(GetTimeOfNextRequest())); ++ debug_info.Set( ++ "last_ping", ++ pref_service_->GetString(adblock::common::prefs::kTelemetryLastPingTime)); ++ debug_info.Set("previous_last_ping", ++ pref_service_->GetString( ++ adblock::common::prefs::kTelemetryPreviousLastPingTime)); ++ debug_info.Set("next_ping", ++ base::TimeToISO8601(pref_service_->GetTime( ++ adblock::common::prefs::kTelemetryNextPingTime))); ++ ++ std::string serialized; ++ // The only way JSONWriter::Write() can return fail is then the Value ++ // contains lists or dicts that are too deep (200 levels). We just built the ++ // payload and root objects here, they should be really shallow. ++ CHECK(base::JSONWriter::WriteWithOptions( ++ debug_info, base::JsonOptions::OPTIONS_PRETTY_PRINT, &serialized)); ++ std::move(callback).Run(std::move(serialized)); ++} ++ +void ActivepingTelemetryTopicProvider::ScheduleNextPing(base::TimeDelta delay) { + pref_service_->SetTime(common::prefs::kTelemetryNextPingTime, + base::Time::Now() + delay); @@ -9231,6 +9412,40 @@ new file mode 100644 + tag.AsLowercaseString()); +} + ++base::Value ActivepingTelemetryTopicProvider::GetPayloadInternal() const { ++ base::Value::Dict payload; ++ bool aa_enabled = false; ++ auto* adblock_configuration = ++ subscription_service_->GetAdblockFilteringConfiguration(); ++ if (adblock_configuration) { ++ aa_enabled = base::ranges::any_of( ++ adblock_configuration->GetFilterLists(), ++ [&](const auto& url) { return url == AcceptableAdsUrl(); }); ++ } ++ payload.Set("addon_name", "eyeo-chromium-sdk"); ++ payload.Set("addon_version", "2.0.0"); ++ payload.Set("application", app_info_.name); ++ payload.Set("application_version", app_info_.version); ++ payload.Set("aa_active", aa_enabled); ++ payload.Set("platform", base::SysInfo::OperatingSystemName()); ++ payload.Set("platform_version", base::SysInfo::OperatingSystemVersion()); ++ // Server requires the following parameters to either have a correct, ++ // non-empty value, or not be present at all. We shall not send empty strings. ++ AppendStringIfPresent(pref_service_, common::prefs::kTelemetryLastPingTag, ++ "last_ping_tag", payload); ++ AppendStringIfPresent(pref_service_, common::prefs::kTelemetryFirstPingTime, ++ "first_ping", payload); ++ AppendStringIfPresent(pref_service_, common::prefs::kTelemetryLastPingTime, ++ "last_ping", payload); ++ AppendStringIfPresent(pref_service_, ++ common::prefs::kTelemetryPreviousLastPingTime, ++ "previous_last_ping", payload); ++ ++ base::Value::Dict root; ++ root.Set("payload", std::move(payload)); ++ return base::Value(std::move(root)); ++} ++ +// static +void ActivepingTelemetryTopicProvider::SetHttpPortForTesting( + int http_port_for_testing) { @@ -9248,7 +9463,7 @@ diff --git a/components/adblock/core/activeping_telemetry_topic_provider.h b/com new file mode 100644 --- /dev/null +++ b/components/adblock/core/activeping_telemetry_topic_provider.h -@@ -0,0 +1,84 @@ +@@ -0,0 +1,87 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -9271,9 +9486,9 @@ new file mode 100644 + +#include "base/memory/raw_ptr.h" +#include "base/time/time.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/adblock_telemetry_service.h" +#include "components/adblock/core/common/adblock_utils.h" ++#include "components/adblock/core/subscription/subscription_service.h" +#include "components/prefs/pref_service.h" + +namespace adblock { @@ -9292,7 +9507,7 @@ new file mode 100644 + public: + ActivepingTelemetryTopicProvider(utils::AppInfo app_info, + PrefService* pref_service, -+ AdblockController* adblock_controller, ++ SubscriptionService* subscription_service, + const GURL& base_url, + const std::string& auth_token); + ~ActivepingTelemetryTopicProvider() final; @@ -9302,7 +9517,7 @@ new file mode 100644 + + GURL GetEndpointURL() const final; + std::string GetAuthToken() const final; -+ void GetPayload(PayloadCallback callback) final; ++ void GetPayload(PayloadCallback callback) const final; + + // Normally 12 hours since last ping, 1 hour in case of retries. + base::Time GetTimeOfNextRequest() const final; @@ -9311,6 +9526,8 @@ new file mode 100644 + // from |response_content|. + void ParseResponse(std::unique_ptr response_content) final; + ++ void FetchDebugInfo(DebugInfoCallback callback) const final; ++ + // Sets the port used by the embedded http server required for browser tests. + // Must be called before the first call to DefaultBaseUrl(). + static void SetHttpPortForTesting(int http_port_for_testing); @@ -9322,10 +9539,11 @@ new file mode 100644 + private: + void ScheduleNextPing(base::TimeDelta delay); + void UpdatePrefs(const std::string& ping_response_time); ++ base::Value GetPayloadInternal() const; + + const utils::AppInfo app_info_; + raw_ptr pref_service_; -+ raw_ptr adblock_controller_; ++ raw_ptr subscription_service_; + const GURL base_url_; + const std::string auth_token_; +}; @@ -9847,7 +10065,7 @@ diff --git a/components/adblock/core/adblock_telemetry_service.cc b/components/a new file mode 100644 --- /dev/null +++ b/components/adblock/core/adblock_telemetry_service.cc -@@ -0,0 +1,244 @@ +@@ -0,0 +1,258 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -9869,6 +10087,7 @@ new file mode 100644 + +#include + ++#include "base/barrier_callback.h" +#include "base/functional/bind.h" +#include "base/memory/weak_ptr.h" +#include "base/strings/string_number_conversions.h" @@ -9965,6 +10184,10 @@ new file mode 100644 + url_loader_.reset(); + } + ++ const std::unique_ptr& GetTopicProvider() const { ++ return topic_provider_; ++ } ++ + private: + bool IsRequestInFlight() { + return url_loader_ != nullptr || weak_ptr_factory_.HasWeakPtrs(); @@ -10059,6 +10282,15 @@ new file mode 100644 + OnEnabledStateChangedInternal(); +} + ++void AdblockTelemetryService::GetTopicProvidersDebugInfo( ++ TopicProvidersDebugInfoCallback service_callback) const { ++ const auto barrier_callback = base::BarrierCallback( ++ ongoing_conversations_.size(), std::move(service_callback)); ++ for (const auto& conversation : ongoing_conversations_) { ++ conversation->GetTopicProvider()->FetchDebugInfo(barrier_callback); ++ } ++} ++ +void AdblockTelemetryService::OnEnabledStateChangedInternal() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (adblock_filtering_configuration_->IsEnabled() && !timer_.IsRunning()) { @@ -10096,7 +10328,7 @@ diff --git a/components/adblock/core/adblock_telemetry_service.h b/components/ad new file mode 100644 --- /dev/null +++ b/components/adblock/core/adblock_telemetry_service.h -@@ -0,0 +1,107 @@ +@@ -0,0 +1,120 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -10121,6 +10353,7 @@ new file mode 100644 +#include +#include + ++#include "base/functional/callback_forward.h" +#include "base/memory/raw_ptr.h" +#include "base/sequence_checker.h" +#include "base/time/time.h" @@ -10148,6 +10381,7 @@ new file mode 100644 + class TopicProvider { + public: + using PayloadCallback = base::OnceCallback; ++ using DebugInfoCallback = base::OnceCallback; + virtual ~TopicProvider() = default; + // Endpoint URL on the Telemetry server onto which requests should be sent. + virtual GURL GetEndpointURL() const = 0; @@ -10155,7 +10389,7 @@ new file mode 100644 + virtual std::string GetAuthToken() const = 0; + // Data uploaded with the request, should be valid for the schema + // present on the server. Async to allow querying asynchronous data sources. -+ virtual void GetPayload(PayloadCallback callback) = 0; ++ virtual void GetPayload(PayloadCallback callback) const = 0; + // Returns the desired time when AdblockTelemetryService should make the + // next network request. + virtual base::Time GetTimeOfNextRequest() const = 0; @@ -10164,6 +10398,10 @@ new file mode 100644 + // response errors via GetTimeToNextRequest(). + virtual void ParseResponse( + std::unique_ptr response_content) = 0; ++ // Gets debugging info to be logged on chrome://adblock-internals. Do not ++ // put any secrets here (tokens, api keys). Asynchronous to allow reusing ++ // the async logic of GetPayload, if needed. ++ virtual void FetchDebugInfo(DebugInfoCallback callback) const = 0; + }; + AdblockTelemetryService( + FilteringConfiguration* filtering_configuration, @@ -10171,6 +10409,8 @@ new file mode 100644 + base::TimeDelta initial_delay, + base::TimeDelta check_interval); + ~AdblockTelemetryService() override; ++ using TopicProvidersDebugInfoCallback = ++ base::OnceCallback)>; + + // Add all required topic providers before calling Start(). + void AddTopicProvider(std::unique_ptr topic_provider); @@ -10186,6 +10426,11 @@ new file mode 100644 + // FilteringConfiguration::Observer + void OnEnabledStateChanged(FilteringConfiguration* config) override; + ++ // Collects debug information from all topic providers. Runs |callback| once ++ // all topic providers have provided their info. ++ void GetTopicProvidersDebugInfo( ++ TopicProvidersDebugInfoCallback callback) const; ++ + private: + void OnEnabledStateChangedInternal(); + void RunPeriodicCheck(); @@ -10993,7 +11238,7 @@ diff --git a/components/adblock/core/classifier/test/resource_classifier_impl_te new file mode 100644 --- /dev/null +++ b/components/adblock/core/classifier/test/resource_classifier_impl_test.cc -@@ -0,0 +1,634 @@ +@@ -0,0 +1,625 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -11034,78 +11279,88 @@ new file mode 100644 + public: + void SetUp() override { + classifier_ = base::MakeRefCounted(); -+ mock_subscription_collection_ = new MockSubscriptionCollection(); + mock_snapshot_ = std::make_unique(); -+ mock_snapshot_->emplace_back(mock_subscription_collection_); -+ EXPECT_CALL(*mock_subscription_collection_, GetFilteringConfigurationName()) ++ mock_snapshot_->push_back(std::make_unique()); ++ EXPECT_CALL(mock_subscription_collection(), GetFilteringConfigurationName()) + .WillRepeatedly(testing::ReturnRef(kConfigurationName)); + } + ++ ResourceClassifier::ClassificationResult ClassifyRequest() { ++ return classifier_->ClassifyRequest(std::move(*mock_snapshot_), ++ kResourceAddress, {kParentAddress}, ++ kContentType, kSitekey); ++ } ++ ++ MockSubscriptionCollection& mock_subscription_collection() { ++ return *static_cast( ++ mock_snapshot_->front().get()); ++ } ++ + void FindBySubresourceFilterReturns(const absl::optional& return_value, + FilterCategory category) { -+ EXPECT_CALL(*mock_subscription_collection_, ++ EXPECT_CALL(mock_subscription_collection(), + FindBySubresourceFilter(_, _, _, _, category)) + .WillOnce(Return(return_value)); + } + + void FindBySpecialFilterReturns(const absl::optional& return_value, + SpecialFilterType type) { -+ EXPECT_CALL(*mock_subscription_collection_, ++ EXPECT_CALL(mock_subscription_collection(), + FindBySpecialFilter(type, _, _, _)) + .WillOnce(Return(return_value)); + } + + void FindByAllowFilterReturns(const absl::optional& return_value) { -+ EXPECT_CALL(*mock_subscription_collection_, FindByAllowFilter(_, _, _, _)) ++ EXPECT_CALL(mock_subscription_collection(), FindByAllowFilter(_, _, _, _)) + .WillOnce(Return(return_value)); + } + + void FindByPopupFilterReturns(const absl::optional& return_value, + FilterCategory category) { -+ EXPECT_CALL(*mock_subscription_collection_, ++ EXPECT_CALL(mock_subscription_collection(), + FindByPopupFilter(_, _, _, category)) + .WillOnce(Return(return_value)); + } + + void GetHeaderFiltersReturns(const std::set& return_value, + FilterCategory category) { -+ EXPECT_CALL(*mock_subscription_collection_, ++ EXPECT_CALL(mock_subscription_collection(), + GetHeaderFilters(_, _, _, category)) + .WillOnce(Return(return_value)); + } + + void AssertFindBySubresourceFilterNotCalled(FilterCategory category) { -+ EXPECT_CALL(*mock_subscription_collection_, ++ EXPECT_CALL(mock_subscription_collection(), + FindBySubresourceFilter(_, _, _, _, category)) + .Times(0); + } + + void GetRewriteFiltersReturns(const std::set& return_value, + FilterCategory category) { -+ EXPECT_CALL(*mock_subscription_collection_, ++ EXPECT_CALL(mock_subscription_collection(), + GetRewriteFilters(_, _, category)) + .WillOnce(Return(return_value)); + } + + void AssertFindBySpecialFilterNotCalled(SpecialFilterType type) { -+ EXPECT_CALL(*mock_subscription_collection_, ++ EXPECT_CALL(mock_subscription_collection(), + FindBySpecialFilter(type, _, _, _)) + .Times(0); + } + + void AssertFindByAllowFilterNotCalled() { -+ EXPECT_CALL(*mock_subscription_collection_, FindByAllowFilter(_, _, _, _)) ++ EXPECT_CALL(mock_subscription_collection(), FindByAllowFilter(_, _, _, _)) + .Times(0); + } + + void AssertFindByPopupFilterNotCalled(FilterCategory category) { -+ EXPECT_CALL(*mock_subscription_collection_, ++ EXPECT_CALL(mock_subscription_collection(), + FindByPopupFilter(_, _, _, category)) + .Times(0); + } + + void AssertGetHeaderFiltersNotCalled(FilterCategory category) { -+ EXPECT_CALL(*mock_subscription_collection_, ++ EXPECT_CALL(mock_subscription_collection(), + GetHeaderFilters(_, _, _, category)) + .Times(0); + } @@ -11130,7 +11385,6 @@ new file mode 100644 + const std::set kDomainSpecificHeaderFilters = { + {"domain_specific_filter", kSourceUrl}}; + const std::string kConfigurationName = "test_configuration"; -+ raw_ptr mock_subscription_collection_; + std::unique_ptr mock_snapshot_; + scoped_refptr classifier_; +}; @@ -11145,9 +11399,7 @@ new file mode 100644 + AssertFindBySubresourceFilterNotCalled( + FilterCategory::DomainSpecificBlocking); + -+ auto result = -+ classifier_->ClassifyRequest(std::move(*mock_snapshot_), kResourceAddress, -+ {kParentAddress}, kContentType, kSitekey); ++ auto result = ClassifyRequest(); + EXPECT_EQ(result.decision, Decision::Ignored); + EXPECT_EQ(result.decisive_configuration_name, ""); + EXPECT_EQ(result.decisive_subscription, GURL()); @@ -11168,9 +11420,7 @@ new file mode 100644 + AssertFindBySubresourceFilterNotCalled( + FilterCategory::DomainSpecificBlocking); + -+ auto result = -+ classifier_->ClassifyRequest(std::move(*mock_snapshot_), kResourceAddress, -+ {kParentAddress}, kContentType, kSitekey); ++ auto result = ClassifyRequest(); + EXPECT_EQ(result.decision, Decision::Blocked); + EXPECT_EQ(result.decisive_configuration_name, kConfigurationName); + EXPECT_EQ(result.decisive_subscription, kSourceUrl); @@ -11190,9 +11440,7 @@ new file mode 100644 + AssertFindBySubresourceFilterNotCalled( + FilterCategory::DomainSpecificBlocking); + -+ auto result = -+ classifier_->ClassifyRequest(std::move(*mock_snapshot_), kResourceAddress, -+ {kParentAddress}, kContentType, kSitekey); ++ auto result = ClassifyRequest(); + EXPECT_EQ(result.decision, Decision::Allowed); + EXPECT_EQ(result.decisive_configuration_name, kConfigurationName); + EXPECT_EQ(result.decisive_subscription, kSourceUrl); @@ -11212,9 +11460,7 @@ new file mode 100644 + AssertFindBySubresourceFilterNotCalled( + FilterCategory::DomainSpecificBlocking); + -+ auto result = -+ classifier_->ClassifyRequest(std::move(*mock_snapshot_), kResourceAddress, -+ {kParentAddress}, kContentType, kSitekey); ++ auto result = ClassifyRequest(); + EXPECT_EQ(result.decision, Decision::Blocked); + EXPECT_EQ(result.decisive_configuration_name, kConfigurationName); + EXPECT_EQ(result.decisive_subscription, kSourceUrl); @@ -11237,9 +11483,7 @@ new file mode 100644 + FindBySubresourceFilterReturns(absl::nullopt, + FilterCategory::DomainSpecificBlocking); + -+ auto result = -+ classifier_->ClassifyRequest(std::move(*mock_snapshot_), kResourceAddress, -+ {kParentAddress}, kContentType, kSitekey); ++ auto result = ClassifyRequest(); + EXPECT_EQ(result.decision, Decision::Ignored); + EXPECT_EQ(result.decisive_configuration_name, ""); + EXPECT_EQ(result.decisive_subscription, GURL()); @@ -11262,9 +11506,7 @@ new file mode 100644 + FindBySubresourceFilterReturns(absl::optional(kSourceUrl), + FilterCategory::DomainSpecificBlocking); + -+ auto result = -+ classifier_->ClassifyRequest(std::move(*mock_snapshot_), kResourceAddress, -+ {kParentAddress}, kContentType, kSitekey); ++ auto result = ClassifyRequest(); + EXPECT_EQ(result.decision, Decision::Blocked); + EXPECT_EQ(result.decisive_configuration_name, kConfigurationName); + EXPECT_EQ(result.decisive_subscription, kSourceUrl); @@ -11473,9 +11715,7 @@ new file mode 100644 + .WillRepeatedly(testing::ReturnRef(other_coniguration)); + + mock_snapshot_->push_back(std::move(mock_subscription_collection)); -+ auto result = -+ classifier_->ClassifyRequest(std::move(*mock_snapshot_), kResourceAddress, -+ {kParentAddress}, kContentType, kSitekey); ++ auto result = ClassifyRequest(); + EXPECT_EQ(result.decision, Decision::Blocked); + EXPECT_EQ(result.decisive_configuration_name, other_coniguration); + EXPECT_EQ(result.decisive_subscription, other_source); @@ -11497,9 +11737,7 @@ new file mode 100644 + .Times(0); + + mock_snapshot_->push_back(std::move(mock_subscription_collection)); -+ auto result = -+ classifier_->ClassifyRequest(std::move(*mock_snapshot_), kResourceAddress, -+ {kParentAddress}, kContentType, kSitekey); ++ auto result = ClassifyRequest(); + EXPECT_EQ(result.decision, Decision::Blocked); + EXPECT_EQ(result.decisive_configuration_name, kConfigurationName); + EXPECT_EQ(result.decisive_subscription, kSourceUrl); @@ -11526,9 +11764,7 @@ new file mode 100644 + .WillRepeatedly(testing::ReturnRef(other_coniguration)); + + mock_snapshot_->emplace_back(mock_subscription_collection); -+ auto result = -+ classifier_->ClassifyRequest(std::move(*mock_snapshot_), kResourceAddress, -+ {kParentAddress}, kContentType, kSitekey); ++ auto result = ClassifyRequest(); + EXPECT_EQ(result.decision, Decision::Allowed); + EXPECT_EQ(result.decisive_configuration_name, other_coniguration); + EXPECT_EQ(result.decisive_subscription, other_source); @@ -13392,7 +13628,7 @@ new file mode 100644 + +source_set("unit_tests") { + testonly = true -+ sources = [ "persistent_filtering_configuration_test.cc" ] ++ sources = [ "test/persistent_filtering_configuration_test.cc" ] + + deps = [ + ":configuration", @@ -13477,20 +13713,20 @@ new file mode 100644 + + // Adding an existing filter list, or removing a non-existing filter list, are + // NOPs and do not notify observers. -+ virtual void AddFilterList(GURL url) = 0; -+ virtual void RemoveFilterList(GURL url) = 0; ++ virtual void AddFilterList(const GURL& url) = 0; ++ virtual void RemoveFilterList(const GURL& url) = 0; + virtual std::vector GetFilterLists() const = 0; + + // Adding an existing allowed domain, or removing a non-existing allowed + // domain, are NOPs and do not notify observers. -+ virtual void AddAllowedDomain(std::string domain) = 0; -+ virtual void RemoveAllowedDomain(std::string domain) = 0; ++ virtual void AddAllowedDomain(const std::string& domain) = 0; ++ virtual void RemoveAllowedDomain(const std::string& domain) = 0; + virtual std::vector GetAllowedDomains() const = 0; + + // Adding an existing custom filter, or removing a non-existing custom filter, + // are NOPs and do not notify observers. -+ virtual void AddCustomFilter(std::string filter) = 0; -+ virtual void RemoveCustomFilter(std::string filter) = 0; ++ virtual void AddCustomFilter(const std::string& filter) = 0; ++ virtual void RemoveCustomFilter(const std::string& filter) = 0; + virtual std::vector GetCustomFilters() const = 0; +}; + @@ -13574,7 +13810,7 @@ diff --git a/components/adblock/core/configuration/persistent_filtering_configur new file mode 100644 --- /dev/null +++ b/components/adblock/core/configuration/persistent_filtering_configuration.cc -@@ -0,0 +1,270 @@ +@@ -0,0 +1,274 @@ + +/* + * This file is part of eyeo Chromium SDK, @@ -13726,14 +13962,14 @@ new file mode 100644 + return *pref_value; +} + -+void PersistentFilteringConfiguration::AddFilterList(GURL url) { ++void PersistentFilteringConfiguration::AddFilterList(const GURL& url) { + if (AppendToList(dictionary_, kFilterListsKey, url.spec())) { + PersistToPrefs(); + NotifyFilterListsChanged(); + } +} + -+void PersistentFilteringConfiguration::RemoveFilterList(GURL url) { ++void PersistentFilteringConfiguration::RemoveFilterList(const GURL& url) { + if (RemoveFromList(dictionary_, kFilterListsKey, url.spec())) { + PersistToPrefs(); + NotifyFilterListsChanged(); @@ -13744,14 +13980,16 @@ new file mode 100644 + return GetFromList(dictionary_, kFilterListsKey); +} + -+void PersistentFilteringConfiguration::AddAllowedDomain(std::string domain) { ++void PersistentFilteringConfiguration::AddAllowedDomain( ++ const std::string& domain) { + if (AppendToList(dictionary_, kDomainsKey, domain)) { + PersistToPrefs(); + NotifyAllowedDomainsChanged(); + } +} + -+void PersistentFilteringConfiguration::RemoveAllowedDomain(std::string domain) { ++void PersistentFilteringConfiguration::RemoveAllowedDomain( ++ const std::string& domain) { + if (RemoveFromList(dictionary_, kDomainsKey, domain)) { + PersistToPrefs(); + NotifyAllowedDomainsChanged(); @@ -13763,14 +14001,16 @@ new file mode 100644 + return GetFromList(dictionary_, kDomainsKey); +} + -+void PersistentFilteringConfiguration::AddCustomFilter(std::string filter) { ++void PersistentFilteringConfiguration::AddCustomFilter( ++ const std::string& filter) { + if (AppendToList(dictionary_, kCustomFiltersKey, filter)) { + PersistToPrefs(); + NotifyCustomFiltersChanged(); + } +} + -+void PersistentFilteringConfiguration::RemoveCustomFilter(std::string filter) { ++void PersistentFilteringConfiguration::RemoveCustomFilter( ++ const std::string& filter) { + if (RemoveFromList(dictionary_, kCustomFiltersKey, filter)) { + PersistToPrefs(); + NotifyCustomFiltersChanged(); @@ -13901,16 +14141,16 @@ new file mode 100644 + void SetEnabled(bool enabled) final; + bool IsEnabled() const final; + -+ void AddFilterList(GURL url) final; -+ void RemoveFilterList(GURL url) final; ++ void AddFilterList(const GURL& url) final; ++ void RemoveFilterList(const GURL& url) final; + std::vector GetFilterLists() const final; + -+ void AddAllowedDomain(std::string domain) final; -+ void RemoveAllowedDomain(std::string domain) final; ++ void AddAllowedDomain(const std::string& domain) final; ++ void RemoveAllowedDomain(const std::string& domain) final; + std::vector GetAllowedDomains() const final; + -+ void AddCustomFilter(std::string filter) final; -+ void RemoveCustomFilter(std::string filter) final; ++ void AddCustomFilter(const std::string& filter) final; ++ void RemoveCustomFilter(const std::string& filter) final; + std::vector GetCustomFilters() const final; + + static void RegisterProfilePrefs(PrefRegistrySimple* registry); @@ -13927,7 +14167,7 @@ new file mode 100644 + void NotifyAllowedDomainsChanged(); + void NotifyCustomFiltersChanged(); + -+ raw_ptr pref_service_; ++ const raw_ptr pref_service_; + std::string name_; + base::ObserverList observers_; + base::Value::Dict dictionary_; @@ -13936,11 +14176,327 @@ new file mode 100644 +} // namespace adblock + +#endif // COMPONENTS_ADBLOCK_CORE_CONFIGURATION_PERSISTENT_FILTERING_CONFIGURATION_H_ -diff --git a/components/adblock/core/configuration/persistent_filtering_configuration_test.cc b/components/adblock/core/configuration/persistent_filtering_configuration_test.cc +diff --git a/components/adblock/core/configuration/test/fake_filtering_configuration.cc b/components/adblock/core/configuration/test/fake_filtering_configuration.cc new file mode 100644 --- /dev/null -+++ b/components/adblock/core/configuration/persistent_filtering_configuration_test.cc -@@ -0,0 +1,240 @@ ++++ b/components/adblock/core/configuration/test/fake_filtering_configuration.cc +@@ -0,0 +1,115 @@ ++ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++#include "components/adblock/core/configuration/test/fake_filtering_configuration.h" ++ ++#include "base/ranges/algorithm.h" ++#include "testing/gtest/include/gtest/gtest.h" ++ ++namespace adblock { ++ ++FakeFilteringConfiguration::FakeFilteringConfiguration() : name("testing") {} ++ ++FakeFilteringConfiguration::~FakeFilteringConfiguration() { ++ EXPECT_FALSE(observer) << "Observer was not removed"; ++} ++ ++void FakeFilteringConfiguration::AddObserver(Observer* obs) { ++ EXPECT_FALSE(observer) << "Observer was already added"; ++ observer = obs; ++} ++ ++void FakeFilteringConfiguration::RemoveObserver(Observer* obs) { ++ EXPECT_EQ(observer, obs) << "This fake works with just a single observer"; ++ observer = nullptr; ++} ++ ++const std::string& FakeFilteringConfiguration::GetName() const { ++ return name; ++} ++ ++void FakeFilteringConfiguration::SetEnabled(bool enabled) { ++ is_enabled = enabled; ++ if (observer) { ++ observer->OnEnabledStateChanged(this); ++ } ++} ++ ++bool FakeFilteringConfiguration::IsEnabled() const { ++ return is_enabled; ++} ++ ++void FakeFilteringConfiguration::AddFilterList(const GURL& url) { ++ filter_lists.push_back(url); ++ if (observer) { ++ observer->OnFilterListsChanged(this); ++ } ++} ++ ++void FakeFilteringConfiguration::RemoveFilterList(const GURL& url) { ++ filter_lists.erase(base::ranges::remove(filter_lists, url), ++ filter_lists.end()); ++ if (observer) { ++ observer->OnFilterListsChanged(this); ++ } ++} ++ ++std::vector FakeFilteringConfiguration::GetFilterLists() const { ++ return filter_lists; ++} ++ ++void FakeFilteringConfiguration::AddAllowedDomain(const std::string& domain) { ++ allowed_domains.push_back(domain); ++ if (observer) { ++ observer->OnAllowedDomainsChanged(this); ++ } ++} ++ ++void FakeFilteringConfiguration::RemoveAllowedDomain( ++ const std::string& domain) { ++ allowed_domains.erase(base::ranges::remove(allowed_domains, domain), ++ allowed_domains.end()); ++ if (observer) { ++ observer->OnAllowedDomainsChanged(this); ++ } ++} ++ ++std::vector FakeFilteringConfiguration::GetAllowedDomains() const { ++ return allowed_domains; ++} ++ ++void FakeFilteringConfiguration::AddCustomFilter(const std::string& filter) { ++ custom_filters.push_back(filter); ++ if (observer) { ++ observer->OnCustomFiltersChanged(this); ++ } ++} ++ ++void FakeFilteringConfiguration::RemoveCustomFilter(const std::string& filter) { ++ custom_filters.erase(base::ranges::remove(custom_filters, filter), ++ custom_filters.end()); ++ if (observer) { ++ observer->OnCustomFiltersChanged(this); ++ } ++} ++ ++std::vector FakeFilteringConfiguration::GetCustomFilters() const { ++ return custom_filters; ++} ++ ++} // namespace adblock +diff --git a/components/adblock/core/configuration/test/fake_filtering_configuration.h b/components/adblock/core/configuration/test/fake_filtering_configuration.h +new file mode 100644 +--- /dev/null ++++ b/components/adblock/core/configuration/test/fake_filtering_configuration.h +@@ -0,0 +1,66 @@ ++ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++#ifndef COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_FAKE_FILTERING_CONFIGURATION_H_ ++#define COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_FAKE_FILTERING_CONFIGURATION_H_ ++ ++#include ++#include ++ ++#include "base/memory/raw_ptr.h" ++#include "base/observer_list.h" ++#include "components/adblock/core/configuration/filtering_configuration.h" ++ ++namespace adblock { ++ ++class FakeFilteringConfiguration : public FilteringConfiguration { ++ public: ++ FakeFilteringConfiguration(); ++ ~FakeFilteringConfiguration() override; ++ ++ void AddObserver(Observer* observer) override; ++ void RemoveObserver(Observer* observer) override; ++ ++ const std::string& GetName() const override; ++ ++ void SetEnabled(bool enabled) override; ++ bool IsEnabled() const override; ++ ++ void AddFilterList(const GURL& url) override; ++ void RemoveFilterList(const GURL& url) override; ++ std::vector GetFilterLists() const override; ++ ++ void AddAllowedDomain(const std::string& domain) override; ++ void RemoveAllowedDomain(const std::string& domain) override; ++ std::vector GetAllowedDomains() const override; ++ ++ void AddCustomFilter(const std::string& filter) override; ++ void RemoveCustomFilter(const std::string& filter) override; ++ std::vector GetCustomFilters() const override; ++ ++ raw_ptr observer = nullptr; ++ std::string name; ++ bool is_enabled = true; ++ std::vector filter_lists; ++ std::vector allowed_domains; ++ std::vector custom_filters; ++}; ++ ++} // namespace adblock ++ ++#endif // COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_FAKE_FILTERING_CONFIGURATION_H_ +diff --git a/components/adblock/core/configuration/test/mock_filtering_configuration.cc b/components/adblock/core/configuration/test/mock_filtering_configuration.cc +new file mode 100644 +--- /dev/null ++++ b/components/adblock/core/configuration/test/mock_filtering_configuration.cc +@@ -0,0 +1,34 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++#include "components/adblock/core/configuration/test/mock_filtering_configuration.h" ++ ++namespace adblock { ++ ++MockFilteringConfiguration::MockFilteringConfiguration() = default; ++MockFilteringConfiguration::~MockFilteringConfiguration() = default; ++ ++void MockFilteringConfiguration::AddObserver( ++ FilteringConfiguration::Observer* observer) { ++ observers_.AddObserver(observer); ++} ++void MockFilteringConfiguration::RemoveObserver( ++ FilteringConfiguration::Observer* observer) { ++ observers_.RemoveObserver(observer); ++} ++ ++} // namespace adblock +diff --git a/components/adblock/core/configuration/test/mock_filtering_configuration.h b/components/adblock/core/configuration/test/mock_filtering_configuration.h +new file mode 100644 +--- /dev/null ++++ b/components/adblock/core/configuration/test/mock_filtering_configuration.h +@@ -0,0 +1,81 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++#ifndef COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_MOCK_FILTERING_CONFIGURATION_H_ ++#define COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_MOCK_FILTERING_CONFIGURATION_H_ ++ ++#include "base/observer_list.h" ++#include "components/adblock/core/configuration/filtering_configuration.h" ++#include "testing/gmock/include/gmock/gmock.h" ++ ++using testing::NiceMock; ++ ++namespace adblock { ++ ++class MockFilteringConfiguration : public FilteringConfiguration { ++ public: ++ MockFilteringConfiguration(); ++ ~MockFilteringConfiguration() override; ++ ++ void AddObserver(FilteringConfiguration::Observer* observer) override; ++ void RemoveObserver(FilteringConfiguration::Observer* observer) override; ++ ++ // The name must be unique across all created configurations. ++ MOCK_METHOD(const std::string&, GetName, (), (const, override)); ++ ++ // Enable or disable the entire configuration. A disabled configuration does ++ // not contribute filters to classification and behaves as if it was not ++ // installed. ++ MOCK_METHOD(void, SetEnabled, (bool enabled), (override)); ++ MOCK_METHOD(bool, IsEnabled, (), (const, override)); ++ ++ // Adding an existing filter list, or removing a non-existing filter list, are ++ // NOPs and do not notify observers. ++ MOCK_METHOD(void, AddFilterList, (const GURL& url), (override)); ++ MOCK_METHOD(void, RemoveFilterList, (const GURL& url), (override)); ++ MOCK_METHOD(std::vector, GetFilterLists, (), (const, override)); ++ ++ // Adding an existing allowed domain, or removing a non-existing allowed ++ // domain, are NOPs and do not notify observers. ++ MOCK_METHOD(void, AddAllowedDomain, (const std::string& domain), (override)); ++ MOCK_METHOD(void, ++ RemoveAllowedDomain, ++ (const std::string& domain), ++ (override)); ++ MOCK_METHOD(std::vector, ++ GetAllowedDomains, ++ (), ++ (const, override)); ++ ++ // Adding an existing custom filter, or removing a non-existing custom filter, ++ // are NOPs and do not notify observers. ++ MOCK_METHOD(void, AddCustomFilter, (const std::string& filter), (override)); ++ MOCK_METHOD(void, ++ RemoveCustomFilter, ++ (const std::string& filter), ++ (override)); ++ MOCK_METHOD(std::vector, ++ GetCustomFilters, ++ (), ++ (const, override)); ++ ++ base::ObserverList observers_; ++}; ++ ++} // namespace adblock ++ ++#endif // COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_MOCK_FILTERING_CONFIGURATION_H_ +diff --git a/components/adblock/core/configuration/test/persistent_filtering_configuration_test.cc b/components/adblock/core/configuration/test/persistent_filtering_configuration_test.cc +new file mode 100644 +--- /dev/null ++++ b/components/adblock/core/configuration/test/persistent_filtering_configuration_test.cc +@@ -0,0 +1,252 @@ + +/* + * This file is part of eyeo Chromium SDK, @@ -13963,6 +14519,7 @@ new file mode 100644 + +#include + ++#include "components/adblock/core/configuration/filtering_configuration_prefs.h" +#include "components/prefs/testing_pref_service.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" @@ -14175,321 +14732,23 @@ new file mode 100644 + testing::UnorderedElementsAre(kCustomFilter1, kCustomFilter3)); +} + ++TEST_F(AdblockPersistentFilteringConfigurationTest, ++ PrefsClearedAfterRemovePersistedData) { ++ const auto& all_configurations = ++ pref_service_ ++ .GetValue(filtering_configuration::prefs::kConfigurationsPrefsPath) ++ .GetDict(); ++ EXPECT_NE(nullptr, all_configurations.FindDict(kName)); ++ PersistentFilteringConfiguration::RemovePersistedData(&pref_service_, kName); ++ EXPECT_EQ(nullptr, all_configurations.FindDict(kName)); ++} ++ +INSTANTIATE_TEST_SUITE_P(All, + AdblockPersistentFilteringConfigurationTest, + testing::Values(RecreateConfiguration::Yes, + RecreateConfiguration::No)); + +} // namespace adblock -diff --git a/components/adblock/core/configuration/test/fake_filtering_configuration.cc b/components/adblock/core/configuration/test/fake_filtering_configuration.cc -new file mode 100644 ---- /dev/null -+++ b/components/adblock/core/configuration/test/fake_filtering_configuration.cc -@@ -0,0 +1,114 @@ -+ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+#include "components/adblock/core/configuration/test/fake_filtering_configuration.h" -+ -+#include "base/ranges/algorithm.h" -+#include "testing/gtest/include/gtest/gtest.h" -+ -+namespace adblock { -+ -+FakeFilteringConfiguration::FakeFilteringConfiguration() : name("testing") {} -+ -+FakeFilteringConfiguration::~FakeFilteringConfiguration() { -+ EXPECT_FALSE(observer) << "Observer was not removed"; -+} -+ -+void FakeFilteringConfiguration::AddObserver(Observer* obs) { -+ EXPECT_FALSE(observer) << "Observer was already added"; -+ observer = obs; -+} -+ -+void FakeFilteringConfiguration::RemoveObserver(Observer* obs) { -+ EXPECT_EQ(observer, obs) << "This fake works with just a single observer"; -+ observer = nullptr; -+} -+ -+const std::string& FakeFilteringConfiguration::GetName() const { -+ return name; -+} -+ -+void FakeFilteringConfiguration::SetEnabled(bool enabled) { -+ is_enabled = enabled; -+ if (observer) { -+ observer->OnEnabledStateChanged(this); -+ } -+} -+ -+bool FakeFilteringConfiguration::IsEnabled() const { -+ return is_enabled; -+} -+ -+void FakeFilteringConfiguration::AddFilterList(GURL url) { -+ filter_lists.push_back(url); -+ if (observer) { -+ observer->OnFilterListsChanged(this); -+ } -+} -+ -+void FakeFilteringConfiguration::RemoveFilterList(GURL url) { -+ filter_lists.erase(base::ranges::remove(filter_lists, url), -+ filter_lists.end()); -+ if (observer) { -+ observer->OnFilterListsChanged(this); -+ } -+} -+ -+std::vector FakeFilteringConfiguration::GetFilterLists() const { -+ return filter_lists; -+} -+ -+void FakeFilteringConfiguration::AddAllowedDomain(std::string domain) { -+ allowed_domains.push_back(domain); -+ if (observer) { -+ observer->OnAllowedDomainsChanged(this); -+ } -+} -+ -+void FakeFilteringConfiguration::RemoveAllowedDomain(std::string domain) { -+ allowed_domains.erase(base::ranges::remove(allowed_domains, domain), -+ allowed_domains.end()); -+ if (observer) { -+ observer->OnAllowedDomainsChanged(this); -+ } -+} -+ -+std::vector FakeFilteringConfiguration::GetAllowedDomains() const { -+ return allowed_domains; -+} -+ -+void FakeFilteringConfiguration::AddCustomFilter(std::string filter) { -+ custom_filters.push_back(filter); -+ if (observer) { -+ observer->OnCustomFiltersChanged(this); -+ } -+} -+ -+void FakeFilteringConfiguration::RemoveCustomFilter(std::string filter) { -+ custom_filters.erase(base::ranges::remove(custom_filters, filter), -+ custom_filters.end()); -+ if (observer) { -+ observer->OnCustomFiltersChanged(this); -+ } -+} -+ -+std::vector FakeFilteringConfiguration::GetCustomFilters() const { -+ return custom_filters; -+} -+ -+} // namespace adblock -diff --git a/components/adblock/core/configuration/test/fake_filtering_configuration.h b/components/adblock/core/configuration/test/fake_filtering_configuration.h -new file mode 100644 ---- /dev/null -+++ b/components/adblock/core/configuration/test/fake_filtering_configuration.h -@@ -0,0 +1,66 @@ -+ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+#ifndef COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_FAKE_FILTERING_CONFIGURATION_H_ -+#define COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_FAKE_FILTERING_CONFIGURATION_H_ -+ -+#include -+#include -+ -+#include "base/memory/raw_ptr.h" -+#include "base/observer_list.h" -+#include "components/adblock/core/configuration/filtering_configuration.h" -+ -+namespace adblock { -+ -+class FakeFilteringConfiguration : public FilteringConfiguration { -+ public: -+ FakeFilteringConfiguration(); -+ ~FakeFilteringConfiguration() override; -+ -+ void AddObserver(Observer* observer) override; -+ void RemoveObserver(Observer* observer) override; -+ -+ const std::string& GetName() const override; -+ -+ void SetEnabled(bool enabled) override; -+ bool IsEnabled() const override; -+ -+ void AddFilterList(GURL url) override; -+ void RemoveFilterList(GURL url) override; -+ std::vector GetFilterLists() const override; -+ -+ void AddAllowedDomain(std::string domain) override; -+ void RemoveAllowedDomain(std::string domain) override; -+ std::vector GetAllowedDomains() const override; -+ -+ void AddCustomFilter(std::string filter) override; -+ void RemoveCustomFilter(std::string filter) override; -+ std::vector GetCustomFilters() const override; -+ -+ raw_ptr observer = nullptr; -+ std::string name; -+ bool is_enabled = true; -+ std::vector filter_lists; -+ std::vector allowed_domains; -+ std::vector custom_filters; -+}; -+ -+} // namespace adblock -+ -+#endif // COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_FAKE_FILTERING_CONFIGURATION_H_ -diff --git a/components/adblock/core/configuration/test/mock_filtering_configuration.cc b/components/adblock/core/configuration/test/mock_filtering_configuration.cc -new file mode 100644 ---- /dev/null -+++ b/components/adblock/core/configuration/test/mock_filtering_configuration.cc -@@ -0,0 +1,34 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+#include "components/adblock/core/configuration/test/mock_filtering_configuration.h" -+ -+namespace adblock { -+ -+MockFilteringConfiguration::MockFilteringConfiguration() = default; -+MockFilteringConfiguration::~MockFilteringConfiguration() = default; -+ -+void MockFilteringConfiguration::AddObserver( -+ FilteringConfiguration::Observer* observer) { -+ observers_.AddObserver(observer); -+} -+void MockFilteringConfiguration::RemoveObserver( -+ FilteringConfiguration::Observer* observer) { -+ observers_.RemoveObserver(observer); -+} -+ -+} // namespace adblock -diff --git a/components/adblock/core/configuration/test/mock_filtering_configuration.h b/components/adblock/core/configuration/test/mock_filtering_configuration.h -new file mode 100644 ---- /dev/null -+++ b/components/adblock/core/configuration/test/mock_filtering_configuration.h -@@ -0,0 +1,75 @@ -+/* -+ * This file is part of eyeo Chromium SDK, -+ * Copyright (C) 2006-present eyeo GmbH -+ * -+ * eyeo Chromium SDK is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 3 as -+ * published by the Free Software Foundation. -+ * -+ * eyeo Chromium SDK is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with eyeo Chromium SDK. If not, see . -+ */ -+ -+#ifndef COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_MOCK_FILTERING_CONFIGURATION_H_ -+#define COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_MOCK_FILTERING_CONFIGURATION_H_ -+ -+#include "base/observer_list.h" -+#include "components/adblock/core/configuration/filtering_configuration.h" -+#include "testing/gmock/include/gmock/gmock.h" -+ -+using testing::NiceMock; -+ -+namespace adblock { -+ -+class MockFilteringConfiguration : public FilteringConfiguration { -+ public: -+ MockFilteringConfiguration(); -+ ~MockFilteringConfiguration() override; -+ -+ void AddObserver(FilteringConfiguration::Observer* observer) override; -+ void RemoveObserver(FilteringConfiguration::Observer* observer) override; -+ -+ // The name must be unique across all created configurations. -+ MOCK_METHOD(const std::string&, GetName, (), (const, override)); -+ -+ // Enable or disable the entire configuration. A disabled configuration does -+ // not contribute filters to classification and behaves as if it was not -+ // installed. -+ MOCK_METHOD(void, SetEnabled, (bool enabled), (override)); -+ MOCK_METHOD(bool, IsEnabled, (), (const, override)); -+ -+ // Adding an existing filter list, or removing a non-existing filter list, are -+ // NOPs and do not notify observers. -+ MOCK_METHOD(void, AddFilterList, (GURL url), (override)); -+ MOCK_METHOD(void, RemoveFilterList, (GURL url), (override)); -+ MOCK_METHOD(std::vector, GetFilterLists, (), (const, override)); -+ -+ // Adding an existing allowed domain, or removing a non-existing allowed -+ // domain, are NOPs and do not notify observers. -+ MOCK_METHOD(void, AddAllowedDomain, (std::string domain), (override)); -+ MOCK_METHOD(void, RemoveAllowedDomain, (std::string domain), (override)); -+ MOCK_METHOD(std::vector, -+ GetAllowedDomains, -+ (), -+ (const, override)); -+ -+ // Adding an existing custom filter, or removing a non-existing custom filter, -+ // are NOPs and do not notify observers. -+ MOCK_METHOD(void, AddCustomFilter, (std::string filter), (override)); -+ MOCK_METHOD(void, RemoveCustomFilter, (std::string filter), (override)); -+ MOCK_METHOD(std::vector, -+ GetCustomFilters, -+ (), -+ (const, override)); -+ -+ base::ObserverList observers_; -+}; -+ -+} // namespace adblock -+ -+#endif // COMPONENTS_ADBLOCK_CORE_CONFIGURATION_TEST_MOCK_FILTERING_CONFIGURATION_H_ diff --git a/components/adblock/core/converter/BUILD.gn b/components/adblock/core/converter/BUILD.gn new file mode 100644 --- /dev/null @@ -15100,7 +15359,7 @@ diff --git a/components/adblock/core/converter/parser/domain_option.cc b/compone new file mode 100644 --- /dev/null +++ b/components/adblock/core/converter/parser/domain_option.cc -@@ -0,0 +1,115 @@ +@@ -0,0 +1,114 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -15137,13 +15396,12 @@ new file mode 100644 + +} // namespace + -+static constexpr char kExcludeSymbol = '~'; -+ +DomainOption::DomainOption() {} + +// static +DomainOption DomainOption::FromString(base::StringPiece domains_list, + base::StringPiece separator) { ++ static const std::string_view kExclusionPrefix = "~"; + auto lower_domains_list = base::ToLowerASCII(domains_list); + auto domains = + base::SplitStringPiece(lower_domains_list, separator, @@ -15151,7 +15409,7 @@ new file mode 100644 + + const auto first_include_domain_it = std::partition( + domains.begin(), domains.end(), [](base::StringPiece domain) { -+ return !domain.empty() && domain.front() == kExcludeSymbol; ++ return base::StartsWith(domain, kExclusionPrefix); + }); + + std::vector exclude_domains(domains.begin(), @@ -15161,7 +15419,7 @@ new file mode 100644 + + // Remove the ~ prefix that indicates an exclude domain. + for (auto& domain : exclude_domains) { -+ base::RemoveChars(domain, base::StringPiece(&kExcludeSymbol), &domain); ++ base::RemoveChars(domain, kExclusionPrefix, &domain); + } + + RemoveDuplicates(exclude_domains); @@ -22876,7 +23134,7 @@ diff --git a/components/adblock/core/subscription/installed_subscription_impl.cc new file mode 100644 --- /dev/null +++ b/components/adblock/core/subscription/installed_subscription_impl.cc -@@ -0,0 +1,552 @@ +@@ -0,0 +1,554 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -23131,7 +23389,8 @@ new file mode 100644 + if (filter_disallowed_by_excludes) { + continue; + } -+ selectors.push_back(filter->selector()->c_str()); ++ selectors.emplace_back(filter->selector()->c_str(), ++ filter->selector()->size()); + } + + return selectors; @@ -23337,8 +23596,9 @@ new file mode 100644 + + if (sitekeys->size() != 0u) { + if (std::none_of( -+ sitekeys->begin(), sitekeys->end(), -+ [&sitekey](const auto* it) { return it->c_str() == sitekey; })) { ++ sitekeys->begin(), sitekeys->end(), [&sitekey](const auto* it) { ++ return base::StringPiece(it->c_str(), it->size()) == sitekey; ++ })) { + // This filter requires a sitekey, and the one provided doesn't match. + return false; + } @@ -25396,7 +25656,7 @@ diff --git a/components/adblock/core/subscription/subscription_config.cc b/compo new file mode 100644 --- /dev/null +++ b/components/adblock/core/subscription/subscription_config.cc -@@ -0,0 +1,320 @@ +@@ -0,0 +1,338 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -25577,12 +25837,24 @@ new file mode 100644 + SubscriptionUiVisibility::Visible, + SubscriptionFirstRunBehavior::SubscribeIfLocaleMatch, + SubscriptionPrivilegedFilterStatus::Forbidden}, ++ {GURL(GetHost() + "global-filters+easylist.txt"), ++ "Global Filters+EasyList", ++ {"th", "el", "sl", "hr", "sr", "bs"}, ++ SubscriptionUiVisibility::Visible, ++ SubscriptionFirstRunBehavior::SubscribeIfLocaleMatch, ++ SubscriptionPrivilegedFilterStatus::Forbidden}, + {GURL(GetHost() + "indianlist+easylist.txt"), + "IndianList+EasyList", + {"bn", "gu", "hi", "pa", "as", "mr", "ml", "te", "kn", "or", "ne", "si"}, + SubscriptionUiVisibility::Visible, + SubscriptionFirstRunBehavior::SubscribeIfLocaleMatch, + SubscriptionPrivilegedFilterStatus::Forbidden}, ++ {GURL(GetHost() + "japanese-filters+easylist.txt"), ++ "Japanese Filters+EasyList", ++ {"ja"}, ++ SubscriptionUiVisibility::Visible, ++ SubscriptionFirstRunBehavior::SubscribeIfLocaleMatch, ++ SubscriptionPrivilegedFilterStatus::Forbidden}, + {GURL(GetHost() + "koreanlist+easylist.txt"), + "KoreanList+EasyList", + {"ko"}, @@ -25615,7 +25887,13 @@ new file mode 100644 + SubscriptionPrivilegedFilterStatus::Forbidden}, + {GURL(GetHost() + "ruadlist+easylist.txt"), + "RuAdList+EasyList", -+ {"ru", "uk"}, ++ {"ru", "uk", "uz", "kk"}, ++ SubscriptionUiVisibility::Visible, ++ SubscriptionFirstRunBehavior::SubscribeIfLocaleMatch, ++ SubscriptionPrivilegedFilterStatus::Forbidden}, ++ {GURL(GetHost() + "turkish-filters+easylist.txt"), ++ "Turkish Filters+EasyList", ++ {"tr"}, + SubscriptionUiVisibility::Visible, + SubscriptionFirstRunBehavior::SubscribeIfLocaleMatch, + SubscriptionPrivilegedFilterStatus::Forbidden}, @@ -27886,7 +28164,7 @@ diff --git a/components/adblock/core/subscription/test/filtering_configuration_m new file mode 100644 --- /dev/null +++ b/components/adblock/core/subscription/test/filtering_configuration_maintainer_impl_test.cc -@@ -0,0 +1,900 @@ +@@ -0,0 +1,908 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -28108,6 +28386,14 @@ new file mode 100644 + std::move(storage_->on_initialized_).Run(loaded_subscriptions); + } + ++ void TearDown() override { ++ // Avoid danging pointers during destruction. ++ storage_ = nullptr; ++ preloaded_subscription_provider_ = nullptr; ++ updater_ = nullptr; ++ downloader_ = nullptr; ++ } ++ + void AddSubscription( + scoped_refptr subscription, + SubscriptionDownloader::RetryPolicy expected_retry_policy = @@ -32760,7 +33046,7 @@ diff --git a/components/adblock/core/subscription/test/subscription_persistent_s new file mode 100644 --- /dev/null +++ b/components/adblock/core/subscription/test/subscription_persistent_storage_impl_test.cc -@@ -0,0 +1,342 @@ +@@ -0,0 +1,347 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -32860,6 +33146,11 @@ new file mode 100644 + RecreateStorage(); + } + ++ void TearDown() final { ++ // Avoid dangling pointers during destruction. ++ validator_ = nullptr; ++ } ++ + void RecreateStorage() { + auto validator = std::make_unique(); + validator_ = validator.get(); @@ -33107,7 +33398,7 @@ diff --git a/components/adblock/core/subscription/test/subscription_service_impl new file mode 100644 --- /dev/null +++ b/components/adblock/core/subscription/test/subscription_service_impl_test.cc -@@ -0,0 +1,275 @@ +@@ -0,0 +1,287 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -33179,6 +33470,25 @@ new file mode 100644 + &AdblockSubscriptionServiceImplTest::MockCleanupConfiguration, + base::Unretained(this))) {} + ++ void TearDown() override { ++ // Avoid dangling pointers during destruction. ++ maintainer_factory_calls_.clear(); ++ } ++ ++ void DisableConfigurationAndEnsureMaintainerDestroyed( ++ MaintainerFactoryCall* entry) { ++ bool maintainer_destroyed = false; ++ EXPECT_CALL(*entry->output_maintainer, Destructor()).WillOnce([&]() { ++ maintainer_destroyed = true; ++ }); ++ entry->output_maintainer = nullptr; ++ entry->input_configuration->SetEnabled(false); ++ // Explicitly verifying the maintainer was destroyed now, because the ++ // destructor will always be called *eventually*. We want to make sure it ++ // was called in response to SetEnabled(false). ++ EXPECT_TRUE(maintainer_destroyed); ++ } ++ + std::unique_ptr MockMakeMaintainer( + FilteringConfiguration* configuration, + SubscriptionServiceImpl::SubscriptionUpdatedCallback update_callback) { @@ -33238,6 +33548,9 @@ new file mode 100644 + EXPECT_EQ(testee_.GetInstalledFilteringConfigurations(), + std::vector{config_bare_ptr}); + ASSERT_EQ(0u, cleaned_configs_.size()); ++ // Avoid dangling pointers after UninstallFilteringConfiguration(). ++ maintainer_factory_calls_[0].input_configuration = nullptr; ++ maintainer_factory_calls_[0].output_maintainer = nullptr; + // Uninstall and confirm. + testee_.UninstallFilteringConfiguration(config_name); + EXPECT_TRUE(testee_.GetInstalledFilteringConfigurations().empty()); @@ -33266,14 +33579,8 @@ new file mode 100644 + config->is_enabled = true; + testee_.InstallFilteringConfiguration(std::move(config)); + -+ ASSERT_EQ(maintainer_factory_calls_.size(), 1u); -+ auto maintainer = maintainer_factory_calls_[0].output_maintainer; -+ EXPECT_CALL(*maintainer, Destructor()); -+ config_bare_ptr->SetEnabled(false); -+ // Explicitly verifying the EXPECT_CALL now, because the destructor will -+ // always be called *eventually*. We want to make sure it was called in -+ // response to SetEnabled(false). -+ testing::Mock::VerifyAndClearExpectations(maintainer); ++ DisableConfigurationAndEnsureMaintainerDestroyed( ++ &maintainer_factory_calls_[0]); + // The configuration remains installed, even if it is disabled and there is + // no maintainer for it. + EXPECT_EQ(testee_.GetInstalledFilteringConfigurations(), @@ -33295,12 +33602,10 @@ new file mode 100644 + maintainer_factory_calls_[0].input_configuration, + maintainer_factory_calls_[1].input_configuration, + maintainer_factory_calls_[2].input_configuration)); -+ auto& disabled_entry = maintainer_factory_calls_[1]; ++ auto disabled_entry = std::move(maintainer_factory_calls_[1]); + // We disable one configuration. The maintainer of that configuration will -+ // not be consulted when we ask for the configuration's Subscriptions. -+ EXPECT_CALL(*disabled_entry.output_maintainer, GetCurrentSubscriptions()) -+ .Times(0); -+ disabled_entry.input_configuration->SetEnabled(false); ++ // be destroyed, so it won't be consulted for subscriptions. ++ DisableConfigurationAndEnsureMaintainerDestroyed(&disabled_entry); + EXPECT_TRUE( + testee_.GetCurrentSubscriptions(disabled_entry.input_configuration) + .empty()); @@ -33334,11 +33639,9 @@ new file mode 100644 + std::make_unique()); + ASSERT_EQ(maintainer_factory_calls_.size(), 3u); + // We disable one configuration. The maintainer of that configuration will -+ // not take part in populating the Snapshot. -+ EXPECT_CALL(*maintainer_factory_calls_[1].output_maintainer, -+ GetSubscriptionCollection()) -+ .Times(0); -+ maintainer_factory_calls_[1].input_configuration->SetEnabled(false); ++ // not take part in populating the Snapshot because it will be destroyed. ++ DisableConfigurationAndEnsureMaintainerDestroyed( ++ &maintainer_factory_calls_[1]); + // The maintainers of enabled configurations will be asked to provide + // SubscriptionCollections for the Snapshot. + auto collection1 = std::make_unique(); @@ -33965,7 +34268,7 @@ diff --git a/components/adblock/core/test/activeping_telemetry_topic_provider_te new file mode 100644 --- /dev/null +++ b/components/adblock/core/test/activeping_telemetry_topic_provider_test.cc -@@ -0,0 +1,320 @@ +@@ -0,0 +1,328 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -33994,7 +34297,9 @@ new file mode 100644 +#include "base/test/task_environment.h" +#include "base/uuid.h" +#include "components/adblock/core/common/adblock_prefs.h" -+#include "components/adblock/core/test/mock_adblock_controller.h" ++#include "components/adblock/core/configuration/test/mock_filtering_configuration.h" ++#include "components/adblock/core/subscription/subscription_config.h" ++#include "components/adblock/core/subscription/test/mock_subscription_service.h" +#include "components/prefs/pref_value_store.h" +#include "components/prefs/testing_pref_service.h" +#include "gmock/gmock.h" @@ -34012,8 +34317,12 @@ new file mode 100644 + app_info_.version = "1234"; + app_info_.client_os = "UNUSED"; // base/sys_info.h used instead. + common::prefs::RegisterProfilePrefs(pref_service_.registry()); -+ EXPECT_CALL(controller_, IsAcceptableAdsEnabled()) -+ .WillRepeatedly(testing::Return(AcceptableAdsEnabled())); ++ EXPECT_CALL(subscription_service_, GetAdblockFilteringConfiguration()) ++ .WillRepeatedly(testing::Return(&adblock_configuration_)); ++ EXPECT_CALL(adblock_configuration_, GetFilterLists()) ++ .WillRepeatedly(testing::Return( ++ AcceptableAdsEnabled() ? std::vector{AcceptableAdsUrl()} ++ : std::vector{})); + RecreateProvider(); + } + @@ -34023,7 +34332,8 @@ new file mode 100644 + + void RecreateProvider() { + provider_ = std::make_unique( -+ app_info_, &pref_service_, &controller_, kBaseUrl, kAuthToken); ++ app_info_, &pref_service_, &subscription_service_, kBaseUrl, ++ kAuthToken); + } + + void ExpectPayloadAndTimeConsistentAfterRestart() { @@ -34117,7 +34427,8 @@ new file mode 100644 + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; + utils::AppInfo app_info_; + TestingPrefServiceSimple pref_service_; -+ MockAdblockController controller_; ++ MockSubscriptionService subscription_service_; ++ MockFilteringConfiguration adblock_configuration_; + std::unique_ptr provider_; +}; + @@ -34290,7 +34601,7 @@ diff --git a/components/adblock/core/test/adblock_controller_impl_test.cc b/comp new file mode 100644 --- /dev/null +++ b/components/adblock/core/test/adblock_controller_impl_test.cc -@@ -0,0 +1,481 @@ +@@ -0,0 +1,449 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -34324,6 +34635,7 @@ new file mode 100644 +#include "components/adblock/core/common/adblock_constants.h" +#include "components/adblock/core/common/adblock_prefs.h" +#include "components/adblock/core/configuration/filtering_configuration.h" ++#include "components/adblock/core/configuration/test/mock_filtering_configuration.h" +#include "components/adblock/core/subscription/subscription_config.h" +#include "components/adblock/core/subscription/test/mock_subscription.h" +#include "components/adblock/core/subscription/test/mock_subscription_service.h" @@ -34339,39 +34651,6 @@ new file mode 100644 +using testing::_; +using testing::Return; + -+namespace { -+ -+class MockFilteringConfiguration : public FilteringConfiguration { -+ public: -+ MOCK_METHOD(void, AddObserver, (Observer * observer), (override)); -+ MOCK_METHOD(void, RemoveObserver, (Observer * observer), (override)); -+ -+ MOCK_METHOD(const std::string&, GetName, (), (const, override)); -+ -+ MOCK_METHOD(void, SetEnabled, (bool enabled), (override)); -+ MOCK_METHOD(bool, IsEnabled, (), (const, override)); -+ -+ MOCK_METHOD(void, AddFilterList, (GURL url), (override)); -+ MOCK_METHOD(void, RemoveFilterList, (GURL url), (override)); -+ MOCK_METHOD(std::vector, GetFilterLists, (), (const, override)); -+ -+ MOCK_METHOD(void, AddAllowedDomain, (std::string domain), (override)); -+ MOCK_METHOD(void, RemoveAllowedDomain, (std::string domain), (override)); -+ MOCK_METHOD(std::vector, -+ GetAllowedDomains, -+ (), -+ (const, override)); -+ -+ MOCK_METHOD(void, AddCustomFilter, (std::string filter), (override)); -+ MOCK_METHOD(void, RemoveCustomFilter, (std::string filter), (override)); -+ MOCK_METHOD(std::vector, -+ GetCustomFilters, -+ (), -+ (const, override)); -+}; -+ -+} // namespace -+ +bool operator==(const KnownSubscriptionInfo& lhs, + const KnownSubscriptionInfo& rhs) { + return lhs.url == rhs.url && lhs.languages == rhs.languages && @@ -34656,7 +34935,7 @@ new file mode 100644 + // Anti-CV filter list is installed as well, to enable snippets. + ExpectInstallationTriggered(AntiCVUrl()); + -+ RecreateController("th-TH"); ++ RecreateController("hu-HU"); + testee_->RunFirstRunLogic(&pref_service_); +} + @@ -34776,7 +35055,7 @@ diff --git a/components/adblock/core/test/adblock_telemetry_service_unittest.cc new file mode 100644 --- /dev/null +++ b/components/adblock/core/test/adblock_telemetry_service_unittest.cc -@@ -0,0 +1,376 @@ +@@ -0,0 +1,409 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -34798,6 +35077,7 @@ new file mode 100644 + +#include + ++#include "base/test/mock_callback.h" +#include "base/test/task_environment.h" +#include "base/time/time.h" +#include "components/adblock/core/configuration/test/mock_filtering_configuration.h" @@ -34825,9 +35105,10 @@ new file mode 100644 + public: + MOCK_METHOD(GURL, GetEndpointURL, (), (const, override)); + MOCK_METHOD(std::string, GetAuthToken, (), (const, override)); -+ MOCK_METHOD(void, GetPayload, (PayloadCallback), (override)); ++ MOCK_METHOD(void, GetPayload, (PayloadCallback), (const, override)); + MOCK_METHOD(base::Time, GetTimeOfNextRequest, (), (const, override)); + MOCK_METHOD(void, ParseResponse, (std::unique_ptr), (override)); ++ MOCK_METHOD(void, FetchDebugInfo, (DebugInfoCallback), (const, override)); +}; + +const auto kInitialDelay = base::Seconds(30); @@ -35152,6 +35433,37 @@ new file mode 100644 + ExpectFooMadeRequest(0); +} + ++TEST_F(AdblockTelemetryServiceTest, CollectDebugInfoFromProviders) { ++ auto* foo_mock = RegisterFooMock(); ++ auto* bar_mock = RegisterBarMock(); ++ base::MockCallback ++ service_callback; ++ ++ // foo_mock provides the debug info synchronously. ++ EXPECT_CALL(*foo_mock, FetchDebugInfo(testing::_)) ++ .WillOnce([](MockTopicProvider::DebugInfoCallback callback) { ++ std::move(callback).Run("foo_debug_info"); ++ }); ++ ++ // bar_mock provides the debug info asynchronously, after foo_mock. ++ AdblockTelemetryService::TopicProvider::DebugInfoCallback bar_callback; ++ EXPECT_CALL(*bar_mock, FetchDebugInfo(testing::_)) ++ .WillOnce([&bar_callback](MockTopicProvider::DebugInfoCallback callback) { ++ bar_callback = std::move(callback); ++ }); ++ ++ // The service callback is called only after both providers have provided ++ // their debug info. ++ // Not yet: ++ EXPECT_CALL(service_callback, Run(testing::_)).Times(0); ++ telemetry_service_->GetTopicProvidersDebugInfo(service_callback.Get()); ++ ++ // Now bar_mock provides its debug info. ++ EXPECT_CALL(service_callback, ++ Run(testing::ElementsAre("foo_debug_info", "bar_debug_info"))); ++ std::move(bar_callback).Run("bar_debug_info"); ++} ++ +} // namespace adblock diff --git a/components/adblock/core/test/bundled_subscription_test.cc b/components/adblock/core/test/bundled_subscription_test.cc new file mode 100644 @@ -45496,7 +45808,7 @@ new file mode 100644 + +Differences across versions are listed in [the changelog](components/adblock/CHANGELOG.md). + -+You can also use our [interdiff script](tools/adblock/generate_interdiffs.sh) to compare two git revision ranges. ++You can also use our [interdiff script](tools/eyeo/generate_interdiffs.sh) to compare two git revision ranges. + +To get a combined patch, execute the script to obtain the changes introduced by eyeo Chromium SDK compared to vanilla Chromium in the old branch, and the same for the new new branch. You can obtain the necessary hashes for the revision ranges from release announcements. To get help on how to use the script, run `./generate_interdiffs.sh --help`. diff --git a/components/adblock/docs/settings/README.md b/components/adblock/docs/settings/README.md @@ -46619,18 +46931,7 @@ new file mode 100644 diff --git a/components/resources/BUILD.gn b/components/resources/BUILD.gn --- a/components/resources/BUILD.gn +++ b/components/resources/BUILD.gn -@@ -2,6 +2,10 @@ - # Use of this source code is governed by a BSD-style license that can be - # found in the LICENSE file. - -+# This source code is a part of eyeo Chromium SDK. -+# Use of this source code is governed by the GPLv3 that can be found in the -+# components/adblock/LICENSE file. -+ - import("//build/config/android/config.gni") - import("//components/safe_browsing/buildflags.gni") - import("//components/supervised_user/buildflags.gni") -@@ -72,6 +76,11 @@ grit("components_resources") { +@@ -73,6 +73,11 @@ grit("components_resources") { if (is_android && safe_browsing_mode == 2) { deps += [ "//components/safe_browsing/content/resources/real_time_url_checks_allowlist:make_real_time_url_allowlist_protobuf" ] } @@ -46646,7 +46947,7 @@ diff --git a/components/resources/adblock_resources.grdp b/components/resources/ new file mode 100644 --- /dev/null +++ b/components/resources/adblock_resources.grdp -@@ -0,0 +1,26 @@ +@@ -0,0 +1,27 @@ + +>{V)+WYEgV@~kbV!bNi987DBX)2n!e -zaigXG;g?^2{n?j~Kl=Eq5&eAB!|Tq02XT9!MFOUGgN9CW$;Qo7Uek^XaPH4!Ir*BY -z>DPEs`2;Ne!}dVFVCf(gFZB1VilpO6_9)0asq?Zb;$$!ZBYDtik9(nmMgR2L>k+t3>tug#$jFH{%vsFyh@}xaTJ_f#wVUNZ`|^tcdX>wG7%%bFE4-BCoYkZR`9utNiNRlwtjnN -zB^N6d;azU%^I~`keiFG`VthrF)y#f@OQsmQ3;$$bAlOKowkVbj{=-<^n6F~s -zWy<9QH#PB73-on6R@ZWFZUqI|fqEEg8uxKLDN}U)+Yh$Tm(}Ux?Z73_u@sGEVuxHz -zdDPZ+3U>3%$-%)S=M9_mrVPb&(k8-v@@%QZq-f1mo0TZ#vgQe%vJ3aUFWHNSSxfP2 -z=)6pypce_K_b7XCIH?BBlvhi`h0QWu6nWM(70M>OE!eQyN*`55E?(c~;}>$!oQ;e0 -z<=%V|OQjwTIPmS9>*KUne_76ss_I~HaelLA&O6Hv-v(AWo!@)Kw^!2#UCSD1V?8~w>mo<;xv6A($nWU0N`}kjS3Ly{vJy&iW{Ig-rp;V -z26A~V_g;^$KwQ>*zcLXN7%_pLb*cx=?1D%K26}Cc -zJSaoozH4Ut6yK&ld5Q_Z5CRI`EnGX**hb&)P3$#y811m{AeHzuS2jH;T#|066LR0i -zF9%;1Uqb=$2tKFw*NOg!1bs2#=$QHyV^p{fNT%@5MhzH#_=#7!IZnS%r_ktdj7dR< -zi8OSS9}S3!>N2;WVx8uup9?h(SZi?)>}=JVsMm=yFF^`%qBIHo2=Uz(+kjDf6g=Z@ -z#jRxnN?%kgZHuoQ9H=*)O?+Vg8L7MjAo$`5O!X63S1;MP3&`vfLE*?yLvz#%qTnv3 -zO&lLEt=;XQxe)G-n%%?tIjpsT5@l~&xK_?yX>?q~;@#fWmcsr^k+!AhiH(0M+pE*| -zr38BAc>&A+xYo7@23wg!al1zv+q2WHqQ9j1!>>Mlf?uO4aS&nERc(V_LOk)1xA7%& -zF*;bp$>Fgb{D()qW&8iJ_ioLSBGEMmsVL#ZRkQE__koaJd66F9bhx|Z=p7CbDd>KD5 -z!au{`C9^84FV#J>3xH58u)8NSJ1Z+I^ULp+-=*S&n6&1wYL``iCPNCS1&DcSvtT;J -zw{2}Y%v5uo_ul9UF&yIUa_>Bj6GTru1*t@JBC -z9!CC8tgmi_Udr-ARJax<-9*5^hKrxk3}}L!5`v?F%o$N#}aej -zjX(xXgiR2F!$5N?<~Fu1%%GI;Z9vH2vu%`^AU?I}LH(I~6B|}#s1tNomwo>6Wc=zC -z&ISJv4mg2%h~@(^rmN0s*ILd!$880Ea_ZW~>5Ur4eO#a>KblH&N(O_UJk+`j@xGCK -zu>r7k^A=zhFdwS6X{kmiam%I6?qfI)lJ-3@Q-^4a0hL5yQ-V+A%Svu-rD4wAE7SZpBtlB*)oET2={ -z^`cTT6dC-ly;>k8Hvn2ludHtbN1PTg41q|yi4oxm&RitgEI9ZXeufS9!j(s7ehmXV -zplLD(+p6f{*o8E!{G=go&<+r*#(TB5VCN0Vr -zyPZhr=jRqTUEF`zo2b-fvMf7>{ghbrr*VzIA8u#EJJ?1P1YT{Mm}6h}bO?cI4|o5( -z6p@(h{&}L8)hmx*y&%e4RLK(8^?{2|{UC~1n0XhjVg#`#j=xsoUC<53DVeSf3_U0~H -z*ap`~25TJFn9pOZHNZ&9e~sq9rTxpEyHsR+O2tIjrlI|7=x=So-LB!#JbPp_<}Nl% -zT!<0oOi2<7niX5sXN*{w@>9@Ccy*r3P#~_psp$fAB3`{p5^{v|T=VdCd1O2-LWlq?tISCY9yo(mOGLqRXl1`txxsW>DAw25H52Ma__5tNWDC&(4$eH0 -z3v`OibbN8%#>^B@nf3-VB{;6^zRi5#>cGBwHN@1W#89Ylg_nNo{7&`CLT6J-T@e=t -z`i3@A78dK0)Hf=#(ORH76l7Y8#Y9tR6U%es;quvUEI09U-~srgVL_yTI2!_1a^{a{ -z!{`OvsL>mssmI}xv)4AKdu0 -zdGNgR!Hr*=2fH5I`Ora2zN=F+%$AoyGb;7I3-l08p5Jz});Gtfw8CWD0jpAT9a$}E -zSe3v)^%rH1_vmJ#@_?K0?w@SeYlX{z9iw5IIJ58E{W}pb8O4*2|IRzxuW{CltvDjVJ?B_EJw5Q8g(re*pzU0$59dKZ-Eu)U-;FW3?&+SwD$4 -zyV%V*10>r@)|9D(OVXq0|d_z#qAGDF_B1>?xOeX`cs=O+#am0 -zd{|p;hqYB3)>d7xwpxR=)fQM=ZG*Md4p>`RSX*tt+Ny!Il@DvH8rD{uu(sL?YpV@d -zTY0dy+Jv>$R#;oLVQsYmYpZowTY0dy+JLoH3)WT}u(n!*wbcf!t=3?zMmUdpQGqEZ -z7a+SPTQ~>!_zIP~XkIE}Kzve6jJxJ~@Zf$gwC}uiiye=E9sFeaOkn72nV@~6`@Ol| -zeR3RLi)5sI>(OtI&)E{V=@N+?yg9Xr{KyxV?h@0ty`#4q%I@$j@41s>YczR$=Lp2dBN~NE -zJQ454^X|*D4ST+>@1d#KQMf{`2__F@qDGkAV*NhVo7j_jVqfDse;F_R<$S67DlfI* -zs`JMiki2_7ck9^@9G|zKb&Itq;#i#VlSt>RKWX2u3-19uawo^6Yh!=HYqfS8Kc;vD -zx8HicZ!=l1lSoQBp>`86ez1z){%ee+c59MgF#=+n_t2}Gu4!D92YYVoA8$+m?PP@T -z^V_?&3C6%GEC=k8WW55eX*pnF+5qOh=Io6oNYiSeFl%rjgR|mZYcCwWjJH`Izx9%A -zM2N6o`7XZueCys>5&}CFPJzQYexuimmjotPY-rtvDz@IQseoG^{&4T-05b?tH~;sm -zbu8|_)3w#FUPB(#jY$K7&BW1#9&?_E#%Ww-0=A|A04pyUi*9f0aBs-de0} -zi^Ic*B1i%8CoqXbBWtsBt~72U;~-od4eHScRyWZwX=tTo8NC2Q1jyQz{{H=oUMP`~ -zR;6)DO1j66Ibd$#QtCux*EXelsi8u?xt44>0Bz{9!l)dxz|@L%00ohRiC8-8DEbj? -z(C~J~4Nn*w*RY-h5I10|i7)rOy{~HDc`TuDWZSWYqY2m~&b6Bzy6ZF#Gp?|!lE!j@ -zbcr;_$6KD?_R^*q8(tDq*YiL6R?DUk4>h~S9k-r_pK^sk4K_ag)~)^$l}fD9?&T=D -zsjT_64mpC6pQacH1V&lwb<+BjohncxOJ{qZX`O!;B#hl=DbBtJ<8SowRmJzd_~hfq -zM?1#;ETm*NtUi5ie`@rpM>|=k!GQMFAq-}liPEl7i~0}+@DDm%ZD5+mo6!C9T?~iX -zF3;|h3K9eMII*QUxDG!Ac$p1sAO)y88a#!wdmEv)4x7RR1wqBV9S(8~DBfV;-7m-jAvGm)eY`QO?cm2-G;{8a$A07QHYv#{?ez)*hpmW}QddZEE~dk3tM -zlZcO-vj#tW^u>pt1oc3cANFL{EpLXWUVQlU^Jm{X^trve;vv@CmUU=02rYy$4$p0J -z2FCTTm;d3zUQR5e#7jAG(o{t0Rid$9AqAITPun##S7;hy=~d90q^=ALucG|-)ms-JGYjJ$?>vVb><7({*^t_ay$1scb)N -zx4qMLn{eSv1{qt4Re^M`Dv2#}-}>lYZ)QA|ToET#L3-?ojmxpxF1W=ajvG|$E;`}w^pcZwd^x92*q -z@&W!AGwuzZp?a8#Xan4sJeSc4)R9H^teoo}nAfSPpq|~UlEo{g&W@g4FN%G-a3kub4BxC_$8{Br -z**X|`MPWf9pPc|#IRvJrNnTMe0~TTsZI^XzESv?DgRJF7R`JBRq%Ru@r_ESQC4-wV -zW4xEkEf}G_sm(?SKco7{{?NC{2QUvMskChFTUVpJg8Zc(NYhMOt@ZHhJ)722^mBRQ -z0dt)WvpykSwaK_iRaoV!X>sFB{CK_-sQXJ(_$aQP4O_uE(^ySF-6068WqYM4Z~X8 -zQ+7UD3~S>^irgyX!E!=RMxKRV$yCX -z+Yd0BvRMr10}-FWIoyx1ROPP(4b&&q3+uh%tW!Ag~QXZFpP*w{_U{D6a=^ZOA1-X@Mb{kH^4%NMyfiawW$H3zQ21fA<1gr1Uz?+etJM5^xCon=Hd|e7` -zNM**oshkqSC8sr>$cd4MQk7$<|8Dd28Jbef`q$SVefrTCA3go}`o$MdzxeR_x<^T= -zEi5$IG22Y`?wQKWZ3uY)koThJQiG0xj`asbA*`d5b5ZmB-{VB&lS`3U7m2pWFwzw~ -zk;0M^6IRH1oLC+wB_;{Idl0lXIHVTuvW9)v&PJQ{YO`hA`Ktrq^jYmti(xP?F74u` -z0!Q{CY=?)l8|O`2cl|ZqJw@N0cz3!Ybn6C&K5%=efL4j9bW$feI&yNEaa`&cXd$MZ -zp}seIK`2-Q|H>{>x%9nC81r0Wcp}<5u7``#%ZF(#`BFjN{^|T=sR661yc;H4jt##M -zXDN-{8meLTpwADW`;H_}&Q-3%4=(!rX>4}?Jpa7&*XR2A)A&WtXDFr>o>oLI6&pC) -z!v1(kTjCHL{q`pxf3Ga_&u!ovJStJK$V)^AUZvykDD#xbrI+}~M^2soCxB>y?~)*( -z0&0>fgYyk|uSpkvc6nA?;GaG8Qn;TzTu46pXStG*^d8C43=-;r*XB~v*J8z4onftR -zy6}@!UtoH+`jp}U_rK87Fafy#G*0^_iUO#{D{%PL$9o|DL -zm>_idC+;^ym+B8w;K?{u-b0+fc#km+EdZNx5-T)ILchJ}j!#HP?jZjy$X -zMNGMixs+|72=^GJ#dDdup-y@3FrA_sqat1rQ`EU(by=^E{RK!4Qa!&Zlmd`YzVO>* -zsIx_#XU{ecIoiG7Qn4qzd##OJ0>sR=a85sOoFyia#GH3d5+^1O$#(6WN)^=PQSBxl -zHT@cXQasns##oPL6H-J(ty}RDI4o7snmqK248`V&N3d`%^2p+ -z(t(%;logzRYmQSWD6@KF+(8Xfvc0zTY?Q!W>QV)iTGeZX2VG)7ibnyBoM|=`MTHSt -z3Z8Zt5`3Y~9g6pPgm5-=x29NzspmGDQW!N$hPix$`eUi)rG&-0%iD})f)(3Uj?mi@ -ztC5>@C(5qQ$KLkp}^ -zbLgmH3`i0XdX1wo1fkZUsh3F=apj8yK1I+^L2Cp%GUWm!R?n2DV5HjrxCJ$e&tuBsEgLT$N} -zg&~ON=c@=LbCb)YiaF*72I>kcoyC;}p~{pXj8EjEt}bByI&G>$QJSV^ce)0k2t68@ -zNMQgQkw(Z0MJE<7yZpUge`+Vx&1rer0iK(AAI>j18FdtvLH%`+oJ3qJs@h+Ekx1Nh -zL{QdJ%>6*X;I$DA;B<)GmX&B4287b&Zeb!>#4a?-u!*RN&gB@k1BVbyJOOKY){$nw0NG}S=RKd%E7&no<)zQRH=Hmofc -z&F>CTQ-woi({G8c#)6hZptBviQH_O-ib@q_V>e`(2mt0H5mY+06VcVYL4q7+A;35b -z0Xw?WgMjK5W{S~XVDu`@S&>iNh{Z!q%582nra{dTIh2Jh0z|-ZlF+^8KY+-cJtT=8 -zz=EElK&`-C7rK_TIZ^W1M#AA5rxdPfJ98Rn*@b&x!Im2%ouL7FhQUUUm!;B~opK3F?E1)5OM#a$7i+fPiJo(P7tBUAAe!YaRt~ -z4v8hsz*9#-3#B7LvsTx|rmf~`)K5T~iR>TDgpCE6!cI5n2I?RLHxM|Kr846n4E>q~ -zk>Sur@B$eL=vCH$!%z*C%YlqLp*emHM$!Xgo>Sxz}AfjuX -z{2UA8+8u-I>Q3h77r~+gXZ7!mJ`qs~w3sn5<(WgL)MO%iq0F^4vNkMoR{}Q3E;)0f -z2IKJStZo9B95Sdt#a?R8-4jK@t3-=SA+N@ozN{~b6NgiTVRAbX=&|Qe1ulDY!)jaT -zUR=6pAhrR$6!{WRxSMy>l!*nST8#8377l2sA4cS4qXR$W3MMPn%+`#?vP2!3aIDBk -z4M7@<7d9SCkx+KO)J2HK77*AlSOhTNHTI$A3OQ1sM77&5wvtT2uR?YwM3w_E(MU7! -zLm|kwGL1Rf -zVHI*DVyG7}=E1DF_i==4-Pa@U-?V5t2Ugygc+;LCo%0@F*nJuUWkDsAJ5Xa?-wZ$*SeVM; -zHmof$JAti{Q3-{UL5ms;*fmyu(syb_#P30F{evnBUDO1TOmb3IBG@|Vd-zusO2ns_ -z9ajyd9+nJeiCb=5%-F?%SCMq&OCfs)+grm4@(W2oM6{`U8WV-QF5OS56wpRt7Yr)M -zzHv|^TZYpQ#Zuc4e6Ebm8Cud6YK<(Dnuxh83~XfYYH-yn1C`MNCbg7|Rwt;L+HFn{ -zkhn;r-Uv*DY$V{fqG@o)2SI}xN&% -zKmtrykDvmqAl{8oiOj&P(Sze%plB}vpkxC?k%9>gBV?lMUYVS^Zua~#D-3n`2=`O2 -z+3f+#g}|6@cC1njEBi~OqQyn*DEUow(}?s?0V%5rCITqEeRV|ww{>jd@0}ndz)=GB -z0Bs!6C~%@g4N4Qt8lo)B0nM7!yy^r*(dKQF1YO!G&Q-##R7T4(bYXW?4jT#%p-yEZ -zvYGHk!Rv-42UMEi)d*`nIQX3hz)9@A8Za>s!)j_(u8Ew*GkbpkQ>*|WSR=p11_i!{ -zZcVB0O=NG4V5de*Y5`1mAESzqb5hx44%82plMfl+aVn49NyQBsNJb59Nr9h?#uH^j -zeBty14C@IDP)w$7*n;dbnY(ahXfNln7CRclHH&4bGEuszpa-c}1EQSR`9al!8`X??WTH6 -z2%Ps3BWB_+c+#v8hH)P-HN=89-(L8EIGUmfI-V9DFnvw%u9Qv_opeo{y`4noHjqC~LP -z`DM_o0Okv^VMq$(U#PK)knQAFV2zvJm6__LN&(1bvUZtD7XYmma26=V!q395I&B)% -zadD>@>1@C5qqa(yX4kQ`ccPI{kO!A}e( -zHSwl4b%yIcAl3yppzDaIiOulpp;fO&<8raYJ?SsS3G5{7E^k<-P_aH=G&)ge8GGDo -zhF*5Ku=RGqNzIgGn8^UJvN0eEF~k)ZTNM;E>t@%n#$vXp>y8=B%y5P}vr?ZRlM>Kf -zMWbb;Hbi;B*~7Yl6~#60Q@6*C)xruM4UDB&H%x(t66iwIR6^-hB37ie8}h_!0HWVi -z@HjLzLnEQX4igZ~G)`xT;sNMD+@ZnoFFh;D;OS@)=sAmZUZ6}Lp -z;L$LC3r6p4$Wo3&OMBc&N(*vXq_!$~o)Jd^7ATX|cN!=Ln*gK4)S>9HC9D=zSs}sX -zPM%#hx^`{YX=B5rgo8#*3e?fdihi%z#31T -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 -zdR~wUyXe)nmR;H?uNC)4Ws;S;j -zH<7~iS{d<{)}hqTg{K<(db(>+W#cwn>fG9QWXq~hY{mtseAM85EON7RAM#UNOx>*x -zdo7Grc>rZjm%ULe$!)@hk*jM&)aX_#U>LyclK#NML{R=N6 -z8!KCx87`r{KNrwE1q+P6?9a?TquNU4=VS%LCA{21uHS4Zhc}L>y}_XyM@#}sT=i!e -z-Yj;rwb$2$d{wDJ9u1;8b>*O!lI6UMt>YoSJsXVZXzQ71=OEcb=1&peaCNr18y>3v -z-KM!w);ttVB%P&bm&}Ty`T4o*StKdt$(xQKV$AULiNFBCJv4HLRml!HD(@UUjo+s< -z4y#qVAe9qSvRa#lVI71su2dTOft)!hgd)Yt&TebZ#EvsN=G9=JHkP=;eE+h?;!3;^ljVOxE-0Zm7soV7yfpz)BzAxw^ga -z#$CiEEVVeeGYGUe3*`LGHGblrlk?^R;Rm06g0~{j_Ay-~c8~u~O9I;%jMJO0ecdf? -zwK5(ye4aTiQG}|0{e$s7A2sC=`q}?D42lWZQ-`nlLmOKBECx-xL_6l03T5LYc1q -z0-6xnG~^SEb5XIH#*AT(!{J0`0F7hgBBEv*z#JqLAe^??M1I1>iqLt@GI_ur7Fw4< -z)d4WbG|F2E!0JjZ^{DY`uY2JkF$ZoSlrTLfG$!$l5beb4t{TDeryLXUcXa{C)Q|~EQTgoQuBXC#VR-iF;e(3@te(weqC4lg9h>!9;Td;7 -zO&XVBqCw8VC|h1U@Hf?&?iL79e@q)(NQzC)7Efa-051}UB~x-#p4O2#=GJ7#@qpQ+ -zjxJ`Z-14s-c*=(YiV9*m-X;WSOFl&-)3ItiY0yru618I^{}78auZCH^Ow|c;MBcncgGB_r?b@PUfaQMST)Y7 -zs5nHSnpdcuth@2+NQA$#7{D1+D)24HKcig^eCiFMKpL>G>DDi{- -zwqBmNwsPWHZxD(C{@MOSBU1JTnI4Mmy_`JQ8vvFs)xJ(C`m=8R3|}f;c~WU_o5Tt0 -zL^vfdbZ^jWU1Z<7g;oXuUelQMU-}UZ5(ZMwd{RrA`CD9%Rol -z_;L(%(R}CK9}Ipln9XKC=;Kv$#c`>BfY1D3@bWZxB!c19KRi4C-5Dx4R%Smrz77+>jKIF_(h=-A5>KC%pNOo7 -zE?YOUm>`w;PK!sJsTf{#UCMcReD!W1!aNuY^Q~_~AFkEx{!@FWMEK&)onELHH(d^#yJ1n>!Ie^Iom+e?r~HNH0Xl_ARaG^y}&{W6CKO?1A7|@!d5eX{ZaHUY!KBRDIV_uW=mTcyH83q09mp_mbbjX2 -zEO)%(Vv-mEXS}N8+l?u*2j)g2MI9!)LY(eJ!9KfR=Wpf^t-7eAw6+?$zm8vh$bEY+ -zCt|-;H#Y5z&Fm0RW6PvwukN1|J|AY7Ju?0!=v54w{}`zO%_RHZ -zD!lRV0xcks{dfd&AdH(Vwi`6T%ydR#JXu50G`GKbr}_Xs_j+8Wod(s{L*Q4Dr2F^# -zJG-MvS(SGRA=LA`AARwn&-ZALk4Q@!3?+Jlk$(b3#Y0#1;%I;l6Bvvkfc-O=NpXZs -zz~iI6T0bA^(T;F^VFoi9l7`L<07C;?m1m!Uj$KiYUu_TL?J+RDc -z`uJ!!0Ns80o{9lRUcSd1$$QL_Tp>KKLGIbr?VTgB&E0#%Zag`T5-EzInjc>cFkP93 -z^&D9hSbo2D -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 -zc(F_ler5K0bHBdI_Pf14Bo2R_^}FKT4O -zhJc7WZM2@EE9&x_2GO<=&w}9|cfB3qU)(JBJ&wM9Pd~r_HQ7+3Sh=e=&o8Ue9wH(# -zdxisUy_)4n1o?U1?Qu-eSWagdyT!AQ`pFrE_NRoDXTySn{+$6o$RXx0P8Y!08sH6+ -zgp$6~qZc~S6$c5qC`3qj`m(^Rh-g4d?U%47EM45A&@vQ)>i+%v{5EWVpc78@0f!$a -zBBD~s=4Y%9y($%JH*PU3R3uVOj&2lmU<}+Ypc8f=!&-{CGZq_l*E>bjSa(ps>&B9) -zo((T7*2Vw^TmvT@>S{Q|82`34mP!=)$kvj8^P-=KG*pPEf+=p4b62M+N1Eg3!Ve)v -z5awSn##piNqHhA3UL>-#lPOAx5}%z*1(H3;aK^Z>O&H2Y6~WZ-+e3lMv>5;3sl)iG -zHqCpctCANX3~7zIzZ4igQj{PXR`%0E7%}A?pzdg69KZ?{AUfJz3H2O}c!NkRQj6X~ -zIElj)m5EuH-Hua0DUwcDG_Fdt#56X9 -zng*n_FnEyaC_pFp0YNBk#7$j|!h5Hu^SU}JRSsv{y$M=M7dWy04Y&%M{&Sd`oO=WIH9$W~7qtlH5}%!(N*6R- -zBalzE`^~G`fZ;~w#&xbzv_&c_RocO^g%`!R5ujy>N&Q6AaDF4Jc~fnUl~?6h@Zy%ZB!M)R_o`_MEi3_ixa&bDSs_US0UbUVqnUXcXB6zup10uv#^gi5- -zRp@QVRB@R$3I3>Z38>1$9K$)nznq&QR5zk&ABjZgxvmOK6VEU-Qt^ewZ6k$&)JhG~ -zi~`Iv;`0w&ez6GJ)5rNfUPi$3=K(`3BBB -zNC*YMWE?oMHUZQ-!QK-w1N=HsflZO*eepzALzXE;Py#hVWD_IFLTmO4hO^i&K?EBM -z;3qVBmtzAOEFO~c#D*7C83#;+ -zpMZpe2v%YA9MU~;D|9srSQecMH?1kn5x+=IE$fn?Tb=>x2FFMc%(*%1Y?L7TVB^za -zm@fG0LYMa*+LrW@Eo89&MKDxD7gh)mdt&SY(u%>EM;wqufF@1p;?!X3=d$MRGI`l7 -zgHzagEhfnsbH{0 -zA*yr?)Y^V)mBsp%FymK(2g-1{0#vuz@Yb2adl3hXnVt$HbQY9!7@r%9qkxv?N&<^S -zL3wx|khJ36kkKx)JzX=PMLw*VPDBH$7+DOROX65Xr5({Rx4B3R?2fV(B3F1w;Bz>| -zJ2zQgz)svY=3`yz!1d70LC?cv3Md7bI>u?#k-($&{$eeyyqt3~Ytnco06me6rP_*~97w -z4JQS)u^!FPY?&i_W9%uxIqBo+2u@n -z&~kR;vNc{fQx#J<3B;lDughwp9-cB-m<8;$$M}@@mQJCC3`DS`TufXAxi|=c8%~)F -zlnRytul)FD%nT%rnJAlDyBdN_G*ZkpvTB2KvI7sTM+o6A`1^S<#tRCrNWk7qN(2To -z<3<=0)_vj@k;3f)>tnsxrm+7y9RvR)OamTM5C^mZc8zK?kl%p%#BexjBtAo=4$BYx -zaF+Njrs*=n8v;%|j-Z2WOBq~VNGsJX=fwlZX`$7E4M%kM$?*^7$5-FTmfy&h-^iBV -z$d=#8mfy&h-^iBV$d=#8mfy&h`WxBO@Ar*t`HgJ(jcj>K9#M}?90Qx4 -zp1O2ja{}V8U{_(=I_}dyEag*-WImQXJbQ7WIRVBSn9y4f?f@2p-J^E}`9kaWwOCO0 -zS@awaFup!OBHDtYB?ER3saWqumQC_3ztXz?#zW>+RY$;2S|dV@0bb(6DT-}g -zKg{1uhDZk|%b)1C-W14EEu%G+?KxY#T$eVF -z$fL8f?l)0}H2S=V%=#J4wHi{{uGazXT?5H#fWSkAL~GoXjRL_aUQhsb*d;IQO9;T= -z*U^fpsh(NMrv91b7SCQOOe*=+4X!Z9%9~qYC6(D@lSR>w-popCi%r(oYNS_N>$<9Y`WUuF%=)U}{$PTZD{Kz?@QJjyG{qU3pWyep{JIVBFxnm -z_Q~y-2#~fRGDBls#Wc^z2LvL^D%1q_OPQ>%SxkDWN6}rPUWrPOy*_O~Qjgtyx -zLyzU2d)xkpB!iUnET!;K&Yw=y1HO?$veAW -zf*(LZtZ-zw` -zi+PdAuz!4Ya#Xu957K@<&cCx%BZ0$O`}ebZ4|`)F3Ry1gxLe`{!X#^eqaajAgOAa* -z)(nnp0I#F*g$up|EPy45lYl`oLuDi$8-C( -z;q}I4`kmt~>BYM6(0o1*_?5wdiKcTWRgQHD%rV7}KES8p03?>8)2KA6TMFAS2=81= -z;ET+*^?c9+{wkLff%;O*E#tdKS-QY1t6sV%Ab^;x+^I;*v4FR$iLh+vq%ts>3g1O7 -zRTdVw8!FzjB5PhAu$&@Pd-8Ucm?ZhS3Eg{5JAaJ=oR^!fYr~u5jynkR+gZDZz!<~) -zMN!%8>l*zL`_V#IZ1n?`njeL; -zJ1h_)z|Fif?%`K?Z7Z`A=ke(#kqZ4Zx1NPGzo6Si06(=a&HILP(wefVme~N1Qw|Wk -zKX?3A4jNNHJNCp2H{6v>*N5BMZ|eU29()=6p!n-L8AV>mjn&sf*xVwb*cKc6wZ^Y- -z5KC<`mFF1QVo&(SX6V~*Fi)46NY4QsEio?T-id936ka&XO;A2Rd?s|;B?*dENr8*& -zfC&5EZXLR|21`EM5~bdzOyiWG$9Kp}Y_k*e7)!hydz=rW;L}5pKVYV~iU8wfBUSBlMv6ckxgICOfffW2GFI~EsqfLDF2CJn+XXI`zRl8 -zF^~f@inpT2PnwY_{GZhl>n*l$ep8Mo?y -z$pa%&1L7iyZNv$m-2LDN-GNt$BhjVnT-%J!4ls&`u3Bvho^6+W65+8tH=XM -znjr8Hsy|fw=C|RD{`W}WAArGkn7)&Gtg)9>>?w|g)Fk;rkm?*;9UM~AJl-Ez+zrNm?f#T`=k2{tP)mmmFK=tW8iVHQ%`+2haD8EQ_`MDgy -z%nMO;D|4TJ{^7@;J^kPaucD`-=*4J)0;6GC*hS|{W;sZe(`$-BW_luwmNCG*lARBs -zLaWcG-8n6z71N|jpgB1i>QbZFtOV93VkpU`hbkH*{fTD71E>S@w1^g&IKRZ2Nkz2G -zBt47uk%*VFtb2DU24?xwT>WBau}9efw8Sosd4KVR7=0>I2`l%UmaV>!Dh;9?vkZ0I|u*9+0~+ -zQP{kk64!ev>W>J07129@62lRu$UVNg(*qe^WJc~gG{8iJD&}m#{c-rTH<~H2j2CtV -z>4J}ocx6V(+_{SPZfLY4WuL(bfCQhY&aAIIbC#v2?yhXO##1O@W>E6{2Z}4_Ej^Q-8 -z^zxG`8sjlPjc&rhH5ax$=5lmhd{gOmbdbN8K9y~q_*RLwQXI;7%ddhMl)>?^^i^rj&-PH=>~5> -zo{w=n03Q{LgV7KlI-A)1qfbBj;-jY@U%&X`=@%dNE7e-BHd#4Y=N(Skq{_W(Oa%-^4~@_&M}nyakLtdGh4ww#zhs8#iAk3v?n7n;+vNu8j}lSGPEW*1Gr@&;wha -zKDRlC8Ud}d5bF%b8cRX;#r^=!+i013HP~`<{stqVXo3T67fja1utQvcu=34L@3>Xy*r|=ZA&n5H -z5CM{MOh2J9#P&@(zX$97&2h6x`1dF-rJl*5n3RkCJF@}QtmmYbJ6BJRkFV;quXpd% -z0KXpX><%j3x<~0aM;o0t)jLP+M6vBh?9Xe^(e85xXg5F#wQbXmwz9l(=HspAG-z?Z -zs1wVQee)ht#UQo=kZN!_Y@6*SAn_2j+KM=2Ux^XkaaJ;JIBZeed+@Xl=zVuJD1sm8*8h0_9!H -za%4g0uBVP~k`!=)kF%>CkrdCrLDL7($||WBkZk%|fXCSE?>#|Ows)g;>s-$+Pq*fo -zpmYG+i8bQS(>6ntsM{@_;T}ehF5=kutPEiH1RuvU`m_D=!mb%@|A9BA>q>T-++gE+ -z#A>CxH0`Ln2I1_<@uyF}_~0jk -zj0XN22HPw>wt&ddw=Yf)o?LrwTi{}wRfv~0qP1q;ee3$Aov+q^o0&B`_oTk>yN~(A -zDeJ)c&TlLmg4x=v&$oW=mYX2d++g-fJJj|ZE%ih_7+L$$TUL>H_sMZH;MH26I1X5g -z@Dc&=%O}V0KmGL64?n;D;R&bC_55upiD&?r<_2i6oK5B1ChhH}+7=+N@qPjjadi$>rI; -z9uJTUe4|ydw~brnnS1wIXR8AxTlr~w{NV1(99DSPz_@74uQ8oRKUQ#H%g?f8aUf#f -ze$n;WL@aOC6Atgdwa6AYz;sy{-g$By$*KM*X|5gVsvF39S)k6kQ=f_UUoT2gR%W-U -z;7lgK6i6@YZZ8vZf?>!z_Nt5GG5+(_qfjwW<; -z`yG;xB432ho8qzqZpls30>)}pqNj9>v1}sXAB%oD9o+4Y)X-)Fp19!5q3Rlwd`NLw -zq~XXy)&Oz83uX$8r^1*!(AzTxe507w*R%07EN4sIi=Zwg89eHJ%5Wu;PvAf&@6zo; -z01`nG_iA$sya7qdyLjF9*{ey(_MCR(&(9AqJKywM -z@vK8fax!86@_tx+^#eB2440iI(#zq<8lv|?vP5Usv$tQGG%m|Hubew_tc{(8tlnjH(79z%(#Tj-#2}QWTb=!F`en$Wam_Qp)PQT;V -zm2+U{1=m76FZ6t|yWiHl1iitRWGDF@HkAAU`MxWR#Q;b72k-%dmtX$CU`DvpliwY@ -z)6Re67VWo#-!>+A&Mx>sN_x6n>ZzJ^BlZn;@bfZ!ADt$j(OUeLjb1TQhWzdj0O~RT -zNL^0jrrfnN8}CCEHmbvPA5P5QbX;Q^;2rGi2lemCQImgmS14CNC2bNfys7&WtnMvn&TcGkjT$H7V -z#xKSK;KqX&))KtY)4h7K9ehIr^guBPVt<#*%L9ga)Y(VQWt5NefIe=2 -zw{v`>#DNnP64gRps6;+*tr-#0HLgq#&jz}(5leDQuyd)xx5ausKcmB6t4F?kg3e0e -zyUt|X?}Yji6rcNI0+K=~Y(g+%8c!_ou*{jNuX{S%Ixh#Js8LiJ?kmsE#nZ8*>1m!Q7tLtcM^e -zc%;VyXLk`3*y9(p3ALrrj$l`XXfM__ik&WQ1Z)p<*QuFMc2OF+C`mrSxHh(kt!Rxp -z83S_#l~Sako@R27@AyPauOk3T_!=OK`}w?Gd2tZomoUPPRb!*sk3Q`KgBXg$^q+q4 -z{>Ps^`}@})eE7wO&%XHZgPs^cUy5|rIfe*fvSJC~IT5Wddm}amxz#=ztK3_y -zjmR_Yl?E6VS;AuwoA|x!d8L_U~Jmk^)FS -zsj&%Xsd>1E=|BT?9o`(cNR3_f`-_j_qp;xM1U(9xgVE}`j&`~L*7G_Xr9A+=p)zBP -zI~kqWQYQ_vePFV{c3{MxXgncgtjIzy!WW+)hRJkl8Ilw74K$+UFoi=PlLFwLMc*?b -z{VpDPyqGS`9!_hA2RPpr^+xeB$SdFiMSoajCs4H!g|LL&bG+20?SKdZ8*G&#zt%PA -zi?Ka{4vb~!E_9nZ{OpQ=cucM+SRTA_sdZSWWFmI1qt&G4d7rXhOM7lHMJfWN*&>q8 -zgF?e{n*be}IG?RN+uDyM5Ll^Kfr@)moh-5($A0QV1N>rkNNCvDHMgpiCC`1i6G#&Q5;T`@$GZq*| -zd9sgfc<1PB9>PIDA>KyQ?A(UzDF_KTbAe77A~n6VGHSS>)3NtmaOAER;yNt!%%GAV -zm^52bpInr^q5P2b%z`mkb -ze=^U4;NhtdN`_H!6RA)=1R*vqP5Nlr#~<@Ep*mhe5pk|>054Ib>0b1TS7n1rt`qE| -z+g6o+8^JF#I=eVOeQS*t?Jde91x9CeQF+l8oY;8WY&D-#3`GT~ZlYr1z*FFt%ju#& -zs*v?l%W+1$J$&QY>FHR9A@TTm6(-bf;ON?j_EepU7>W~fFr+~_D{4npe_Q^ws-#RS4l;_LQ!me5$bKX7r#@7xoZ#-b)`tlmt7Q1lx1tx;6 -z*=9aye7)c8)BgJe^}t!5HO2F$ -zc+nIuo8rBuc)u>*?q$Xb8}uHd(kcNY5HMWk`u}h3%XTD3vMb-?D^k-16d+_o?%Om5 -zqiQu;5TI@eYH0>~5E4exNLn~aW15lfK}S6Zm>&`_4+G3swEk%BxkkEsR%W=JXiZC% -z;maZ2Xv^J~a@~^VS6l7XzjMRxmj%NvZt?=$HNN;S|N84^#LfQsAODWI*NxwyP<=Yv -zJxWbqBSIp*{uUPLaMzmnKcL0_B)Wm=PzXunCPY?-tF+W~^7`f^$UZ^b+*BR4_&$1e -z|HXV`W4@n2-#)Kp8Gn6KxG!C*AD&))pKh)iW{;*Pn9>)|e%uOx{dl8>t=qa+b)dQW -z96wdR^ADfp9KngEBr&W^Zx -z`N7`!BTUD+yA~g+H#eX#J2Nfjk-dWBCJU`Q^9EruBG%!I$lW+$@`qH-D@klOCbpGR -zzBXxCi&>)|E-2OBh#>Ow&!gKJrFSpPy?J=?-*!SL)4^*$q|N>R4*&d+cVgmg(j=O{QB*x2Cg=P!gZou -z>(3M-OAjJ3t_=<9S4MP|Wm>zaAiAm0-d?+4wyq=FhmAQRxA5{KG$MiLefyyX6~Sz} -z*B~=)dilRo?}O>9--6Y5p9&lwDret+Nv<{JqMA|n(7nAmzt1G`&%^8 -zFsTv3h#{#vBi(-w{Y7QuO9R65gD5IH*#)YUxM|v_sj%`(w`p}A-wmq7!bu_zwol`9 -z!AvGqn%384vcW`D-8@(M#d}DW80f?HIdBgT4>GxH+5I%@dYikomB;Wwloiyi)~PVN -zNsp4g8RxWvTZ_QA+lZDvs(7^XVuXERPUZIa+5a!qY1<0Es7Yvdrki~^+w!Is?a!KW -z{dFDj>3vR@*65IL-99(PTwyzN+w}+VcRN%!qMOCLCTIBl;ZmBuk^hb+S@js@yK?)@ -z&0htSar|Wv+T+i;vc6}NPr(uw=jN)JRdc&FH1Y3cuz#?Je=^$EK<0gGXduUF@mh5r -zrz(v|eeIgXEJsN&$?blX$LNpzGtP99MMV9LV`r9BYScdxYL|$v6Owr&NAfOt&x+;G -zkdZ#mp_AVngb8VUpUds#AD+RBc@9y+&1qqQd56M7(Y7F5@Jv;^%bj>QA}4K#4gedr@JJw^0uA&N2HI -z=2E>5jT6kx>WtpGt%5AAy~`l=KJlyir7Bb7VQvIdoK$k($eW$bnn^TtR*|Pw?ewly1}Etvc2m;^#1(&=p+3;G-|PUm~OtO -znLKvY-+cb-zyHJU{`PO+qYzDRT1V6OkKcs!XUPr!(bh2gZ_IovW%TOJ&6`SnlSYoV -z8&+3`+yNfrONhK{-dJOF5PYP -zbLtQzYVv?P$O#+UFADO0yhW92y`(B`G3q9T581s&5QX%Wzcc;wYTBDyH=(cCUGwF+ -z@U6z{*K5@KAVTH4_ZJ_)g(L53ne(+#8OGd1eI`(f+bX06AJ1#-FI&y}dfuUxP;YKG -zcYOoDG-9^!c$F|3wcItX!K~@a&Ig&I(pIY(4?X)*u&KTSL8?0gL$mBx8~m;9N3?># -zpj;E??lyU)?(MX9`kNvh#zAP2yHD?YCr4dh&V}2(+5A12&9(EJuXJkE1bMhUY0UC& -z!Oz0F?T01-#MDN1>=x0_Z0GH*I`1IX6%po= -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 -z;#{_C074cS5e^AXI}tULktUDrEQ-kGp#hQA -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 -zn8ViKwF -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 -z$mx -z1=HGn%VmsSc2C~OyTN7d@)QtC7*j|=*pS>&6eObh+6fz5Yx4_oLQjOLG@;3qm;{!2 -zAc8`pMXg5ifNe#X<;)Y$*KNH>87rB*lB3GK;;6Q5vv}~EY -zT;hh(qEmETn|#3Vil+C%3KtSFF^TVjZvxT14V9n@@AH*&qI)niilGv1l>|#u1$X3^ -zV~09`bH}v#+OSM$Z|p>y=1lMK6^x>5P0Ug6T)*blFwli+@tKh9rV#~Tv|))v-lQt# -z(VP6t3UFLdXcFF&yq_xJ&z(%Ocx3;u%@vfKp}{f-WQ7bQj}Hx0UqT*8V5%PEhGn#z -z1f@E}iOM1ZA8DybST2tyd3;Moa8M*yTu=v!)b)_hU`-FjblY5!lV=8CA#zRxzZjrs -zQevST9nR7xKu*Whg`%nqMz4i)s08VRJsIRkIH7+fAj`57nkw41VOiT~g0p8`<~Ne- -zfp!6r=x7oB*rwh+6KfRw#TA4l#)ryP93ryTwnWC3%F8xYF7aB$gwM -zE0*Zj8xdCD(DhgnJfheuK_2GRmWrtNyb-d00Dn|9)8 -zTFNJYWu2Ic#9&EvJ)xN@{A+L&dq5MIT4mV9HYVh+?S!xzk2fD@V@a?&P4 -zKD9SaGZYfYN^DEvi%TeJ`wVBKO+h;{PDvy-ycG^e^O;rNw>eg -zxCY097*UDD5~x^AgUC3eoHM<@5}KQJh59P5=_Vv?+5oE}s|+cY7QyFkw{STc3N49V -zeMyw`#XS?2IinepgZ+Ui8hQawy3|uHpjxx)1$*I0bOgk#Rtw50doaU}Y!NGhtH@Q9 -z*dfS?2c#3V8bTJ5$+ -z%X#Qk#1=Huha2kDpe9=)q(I1AgK`jz<__$_Rl-Lc;UwGA4rNw?*2o!kiw^mUJPPjA -zr;DV9yE2oE{v9 -zKq-9*IuQziP{^Rix1IZ}?x|p5Milkiz~okwqf<@j>din|9Sn%U}>Hw+8cYNlI$yxF3%Ed|hz;YHSKa|((-Krbh=nZ- -zQK4t`%2X2(uCZccON7@ahCT^npfm{)uR2>eqAB4tPpCxCY>#C`sy#YtF;0mUPW9=Y -zjt7%#k~tUXF*up+NN# -zSqiEy?HSIrVLzigBCKE@O4LiY6~`k^aQgs_B@c&cAvCx0B~gZJ9^{Sb3a0FeVE1Y% -zBsTOsxOy>Fe>Af~!`iSXpAMc>nC -zMhc$?VE`3>U!bYjQb1+BCr5-1&%?plu3B2*nRz<1p-CPj@Q`X&5up)yJhGA8oVveo -ztrykW-1{h6fyhaDvamNpEm9+@edV#J<6h4ll~5$$IX0aS`8K{n3o0}k7$PAz3RuqJ -z-ZmoW69Em{jjRxgmmjbTjYr+}tPMwyD0sd{hDcs=*t@;aYOqYrk-e9r#6O%z!gOc3 -z8nzpnF2=JLj;JGVLOv-h6_?|xe(t}#`r^)T+?(*V{P6zlc21udT<@8i}YZR#H~9K_y%ElrRj;9iU+4<{PGO?;G!13 -zqWWzgM0pyBlC0pIpw(>n4DfUVB>@L#D=y~!Aj&&g+UFoMwj(_j5Na%WNPqEDq!Q -zCf|DWC^IiCxP~N}$Hr+XnZ{8^H;#+&tNbmy@qN6)s{i8I?|%E!?dwmU-YUGFH7vDk -iA;-kEiEX@VyuaSw=y{wAQSWA$V*Vf8s3}@O-~#}4>qs;J +literal 66744 +zcmV(wK>gzrrRgqeDgOreDnwSL((I?bD=C_7ivi()xpa60smwMS5sc^6tCfssE>E!QcNJ +z1*5$y_2=l1A$0kTNySBWXdmnyJlWraKL=0tp#4492|KipU!U4To@nR=jcmYQ)*k@E52npdIABGY;$g<9 +ztpy+)M%oUz42pEbV1USMLIDk)1xZ197WQqP*$NP_1EQGf+d5)g+FFtzhR=^}l2HIN +zwgbsE4@hEjr3$9(p^)|rr3+<91K6A<3}D%kK`4=0v2q$beTXyPmNSqB|Kw}0uJUN9s*ux1Z@sK!$if`P?ZIPsa%2)Zc)4b!&9v$m{9H<3n5pl|QwH|Ohbo>@qE#TZ4% +zopRb%Qr4C;rrXNRvn*%8ENQ=h_*O)&NNf-&OCShRXp#|k#3}oXEYu7B`nlyZP&JWd +zEYNPD`hk!_Xcr_kRJqV*>9NK&nxcxtFcViLMFLdUYn<7aO0$oq^&??dAV^Fi1yeCn +zPYXBUBi2t%5jw|05Zc$)}1fd)57L_yn{Xo{4zop=^E<<3~(%bGH>MBZS%E-F*MRw|-6X(~Rao$_^4 +z4kAYKwkAZWNQ6xAS&eRm?)P}TEF>7n8!y;=dsoxnTS*M!< +zo72`b8Fwl?S8WYtps5(;X=_zCQ$bnn)Cw)SUwsBGlWv2^Xs6n&s9F-3)ovXL+E$w- +znp#A->{NNs?TYf;)>0C)BJVWhJm_Kxj;!jgLiydV6B0zaY~WBYjF{>ohW`R!aOuCy +z)KN&TxNg}#AxT0U*c)NP)Pj=9x-L##Xq+6}oQ;n&{ptLdzjJdU!QH9dg5|)@H8^ge +zJCq_liHJM_!(G8K9@Aj8-`7rY^9*LYoB?Uvq%r*xZw{CsC+92yKSRjlB(Y&*d`Cha +zSRHFd($yvv6qbVJfNfg=1c*i|C+7LHr(kKXNQ%ag!~zRwQ%%Wu66Hrx7sgeg{f7HM +zSpp9z1gEoQZ75*Vy3w~@LjM~ad%s9RB00%AzJ2YAg$bjCLzKe7l-|aTSv6@8!6?P% +zrhE=l@_h8Q>l023v)VCeN>p?juCA_TYx`{#umg=@4j($;Kx)D>W&huZiwaxEtfWY_6a$wBlX3>D)oh0Xt?J+TfvLD%X*r2Qcj78~F +z+z80?0`w8`6oUgZbYzP*Hp;Wx6iw`0ndwlxy_!*Dy6e{r6xJMWKyrdrYmb +zza5WVbd5E*_#<~bxyDj1WCnH^potNa5@lg_L0oyTPhQzWk|?C&Zy1PR%E#gp5F!=v +zZ%b)jG5*iLzjL9ttF*~d87O+>lWcMoF+jW~y#lKYhLGtXatsBW96e};Stvq1kj^0w +zJx;BRj|6>&o}no{y>WI5;VDl}5t4$?1eoLH37IsjsV#X#F>1hl<=#yAH4CEoJ>%Ik +zFyPXpRj!SxR_r>%E$+IXfp%r_1dFQ3F&e+_lZaGdH&oa-2bIK9%roJOF%~0;{#7h; +z90!NkXmsnwZw<$(NDfQJpSyt1<*Nvw9&oMxu5dUQTMgP%z`&`%g9@w#;DKv;Kgii-^X +zcxmxDfD2Rt8f{PEuYYi3Hkp37AkOvWKR)a4@Bh>Gpp~g!&s9Wu0mFPw-*)q{Ln!=W +zV~V;Ddpi7hAP!LELkUWzluy9Rx654{d!niq>auUcR(8SZhodcQ-KrYQMh|Ui1=D;e +z2NP5QkHFfGwh|x!lfEF5!unEPq|W~Go~Dm4v=&ttgBXAZ4<8Z3Ra}?In{}{|m?2e1 +zgU>J_-6c3C6$x=1KH)Ar2bDh}>Z_L}X(O}l$1^;E1t9w!uzH{q-A^s}5i#&#enW8>!l^SeU#Bx-+7c5G +zjksZ1w>PfTe5MZ4c?qOl!`Rt5$VDXC5WWlyb9@PrGnn}~L^y>WAX-ktE&$lDp@ory +z_R*tKdS)m>SZnRMYKM)4vLffFI2uzSw89 +zfAD-Yh!XLLBtty8A@uW0nBmZ8yI1D5kH2803uC%dlEQ{ywj*F!!o~~6y|Gi2l-m~D +ze`btTHZ2NqvFZc!%#?Ygdk!qHxiNODF(Ryw7d#-`n=+MLx!Q8EesI;Y#Fc^ATu67g+JmoceCMiPE4MkFInm9-pT +zI8x&TA`p_)sXg8$+2c0zCmH2U)Bc}DDrxhcnB_pO4Bc?NqnAVJ#R*aZdjIbURn1xii^PsST{||NtAJu@k +zi>bxUqBfldG;{I(wL@}V3dBP}EDKyjj*1)#*Y1Zo!qpQkcKxv1W^x}CwFf0K>cg`9 +z@k5YNlW49IPsEQNk|eeW&fsl5 +z;zN0~H*cbrFKxQn6}0CapyiJerRNF!u(6)DNAT13+SO|yoGHI2J`u!4jG +z-bVp(^1^p+JiJ_C$2O}rRs$Wp*)VZ3qOB4T9v)3p<0N-{=Q5;pICuiO$VlfCxVSt> +zSob`RmA8BybKITF)AAkzc+u^s#@C)7foJ#u1Jy?EW01d +z1lKSTM89Q2{e7D2$$3r!W}X~k)7<>CCk6GYVYX$#LDL(rSn#adYsqCmXT%kU*&Ng$ +zdw|zYj-B5x2lmcxb>s7b)61Rm+9#B%xI=-0U0M}$JJ$_REnvnvP^xeIEF6M1S9^Lq +z4a=Lp+0IqZZ3TQh86LC +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 +z(Bj6O_zXASTSe +z2F;aN?{xLb2>^=Dq|QFaLeZK5$&_{#obCOGQJh`C2R1VX_`*rSKQ)#!h-EZgUR^yU +zN}6&!WY_tL*4VHtt1G?jlm^_584OFQgbK^fO;jLN6mT>vdOK}o`B(nd>zM{w^+=ib +zC4q%kQ_|pCThQ9JcTpqU;3V8~#sH?chby`zku4P^#(LG>H{Lv&PW-CVB86WUny}3# +z`npiOmH-GGLE3A#?%urh+O3<*MfKA`DWPfK=H~Y}kuTubA~;!S1*Ag*fToK&R0BXF +zXQl#CRT#QnAG=09ZS$4XRN#PfgsEg=_8Xtz9YYRK&D6`sc}z;;rUKNkV#B#(0J@L>Ht6NJv5=7M +z+(Si;$X`t0?hD(|AXrTBzMV5v$Fdd^Iz%4eZb6~@WAw7QutRGnu@|?F=|+UF(<~%} +z5xL>TnIBDkv*(=Qqrt29XdK1qB!CO#xer~mvaG_7XthVbbN1WCfn7YWr!Vc^e0i5K +zn%%y+^ZOxneX__{G+Z5?oNx_lW_3f>JRBq}mgl+FRB%t4phYJPX4w|E;i@Hkf+)wEO14kBl +zf$x&w^2WMHNw%1K8ZU@*FHUwT+lk_hg#^(Ks2i{Kqme@wR0g@$iFWEQ#i=_-1Tk(H +zli_Ta=I)-u)|e +z*|n#nnb~ZPwT$$3Zb!n*i~IjUE$w6`pVmVV`tGUnC9_v0ozZ+cw13FZ$QpfMHEJrx +zk)C;Jt`7D#*O$;|2GD_iVwq8rI-X8Imm~aF@#ZQ~ieN|z$Z4Q1`N +zTKeicaXEnx;OZIL$0~RY%3fV3qgSUF>d2{@sC}z8t*@tOz2umxHUUEkEqvUn0MTCo +zp40UCn(DM}e4^<>19?j4Y6pnl(nH**zM7DRKZWtTO^iDRoJ)AcaDdj|tNaj}U)qhG +zexv$P!gb77&HzPKLsloxGT@FOwpMi&v$NbIZjWXM@`d8%iF=Q8fWWw#INjaVmC4E{ +z3gI#{4TgPw{ddLzue$B5yzD$fAAr|6)UD{bx(cMjO!z5Oae^4Q2D-(; +zg=VtQ*-2rd89~v8#}7#b&|z_}H+BgHTnTChED3+ccvooN-RTKop+6saXIHc;ay6F4 +zqdhslUmu%7*oc~D#)V|{mFyTkF6~cTVNbzsMYrc(7FJz&yOx@)mCfKsOS%wU-JjM8 +zTa4wj&juY%xtXuzAXbMkpKYI}XZ&^%DtMWq|K;*3fd=he7$6I(aA~wWrKd=)e9EKO +zBkIM0D`=_e!o58{JQu6-$!ldZZ{RS< +zv3i6g?fH=v&~CO}v5J&CbpB9Fr0=23enT?tX<(l(rcD@RB(kQc&~R}?dEacBemCoO +z{aO_Bhc|ZGg#*qK7auFgpV*pTXnY}X;`qp?R!T#h!nGvtgb2XAe1uyxPUM>6Jq{i9 +z)uK2~Ud|&2wk~&W@7-8Bj(ItDbo%8;Eeui}xFlfcm82{N8N*Wt7P4}Nb_-gNDjr-T +zM!L`#Q}+V`S%qE5R%@IbaD+t|PDIm7S<g_r +zuSg)-j8g8&eWM*!k0arTXZ;bv` +zKKAGl2}i~Pw!)7|Iz8dK$8zwcvF$9)DSR#tu!wxxscNubVK2y#6GqLhgk&;l0yba- +zD>b`m1IYl<%QLozZEI^E$wcz#IJxp0vZ%}vr3-BE{j!>tyB7A%d8*LSf2P8T*wJL01i!j3ech9%3zOG{1^$=xv?!X#Fg0)<&`(kVmRC$4hc6)tmiDqmxc1%#skyh-7WOv`a0Aj{!y)&{` +zKw{C1V;_%NP!+&u7a-KAC9A*|q&#B3`LG2NNiwuos@j{_UkhPdD0-mAf;s|4O$J;| +z_9q4DUANX5nbe|hEvh*EAhUX@?;ad*7n4I~ZKB+*fzuiu_|^n>_DOmay?>_MrIAEn +zYh#n2UZUuM=ZA`-{4htl7alZ#g*r8^b5UF2UA$o1^+H0qkIzwMVKKK}3b-v8x?fAh;9{r&%Z=dY%h!Z}`U?W<3J@zq~^P)d6K==;wf{p0gTfA{>+ +zzde8NXU`vf^!(9JN;w{+^xuE**`L-pdSDGCE_d@B(nT1tQR>HE(ffA86+-+lJ@ +zhtD2=^6c?nKYRS{v&TQi=%?>Jd;9|x`0&}|@0UtG`OApbo_zG#Cr2dx?2~{*HUG&+ +zH1&^4xxV=5%lE(d(HEb5`Db5#@Wnq&5q9zZKw34yW-f^qa?wn8r5kmEMI*Z0Oe$J7*?f@$4kml +z>`g%ZbS;nE&yFnMcR-)Lni;X=-5Pgw&c$;pgPP4%tbJ)|1ada&30Cs&8gYR~HyH&9 +z82KD>Ya_-F%#ocI6}C2)vb;kt3l`W!4k_L*Jt(DjW58=FAC(=&If#LR^O;Xmb1Prz +zC`LTcH}puz_{;C|xV~^G7{wNBKKuv-dEy8DF|EukUdtAaiARBJC9c#e;+GaeM{s&G +zoR#T0?0KS0XwgCf213#s*p=l2_CCP5b!145qyY5Yj +z{YXb9<{Qu}EIp@i3XQmNbhNo8Xdhtf20kaBMi_UYLn3@c=`pZIpE5c1vlO;%s)0tS +zQw@Y+DDEGelpK$k=ZjdE0M5Ac45!iS9s;u$rNcbqcyEmIexBu1VdghXiI?F7S~|3n +zoQcJGZfC`9VVJ~8i8`ld#V6hl3?jNxo0V~GV|`-@EA{fu?0Wz3!JSv-OVQ?=S6N0J +zZ_k6}XfX9rXfADViIO$FIPhIEI^gR{4bPdbEM*=Yfw=4Cy*X%@-98AC=1k!7CA`9=_7<5;0@MO0(3Vv?uv82`qwYKDnePK45au +zG3smd;}PUh#O1liac>T}!wL;Z^ZQHfRtI3mdhv8lQZ=k_!{M+w933~>>+OQL+m}Jy +zrBIieS}H+J4iz^_xN&~ytK2<54VcdCy=BxiUJ&CPtY+57D17l;`E5kqW<;|_JD{xN +z!(1wgB|dd%NTQxVQX6Z*ueu@Vn9&SO0`yldn&L@ot@fqjJ47z)$Xen{tgNkLeql=_ +zz8w;n`IPB~F1obu2b`jgIItIcWK`63u^79H5dryF1QS&jaHK05A`QeTI|jsgImEl< +z2;vxCU)w6GTt{UL)MAg*9z+=6rKp30yDox7fsNK$kzr$PYYP#*fy=4YiAMss%~lH? +zW(1NhHn%K^@nXm~w-ky+)Q?=V;maHjmH9G=7adX6dpb11#|f5+Bcm +zk>e&F%r&-pq_@UX3F(D|1TvfkRNf-v(Q_BA7exfmn33R&XaSZyfmTqX_sKpVI%dSh +ztda?NCYU_JNLRTSZN#KjPpF%ylpTRop6a|^EB1HxQ(oKB_rVdV0(a#|0 +zbOuK0z@Y)f0SxjEM!O(%ajXI7P+2qq#40KDgRWT%esn-;iwm6rNWiU*~5;yXnK +z=6G=&AZ1b~)w%}(k_d}(mnx7mX10~1;Q?o%s!wsI@ff6j1oDfBh-_9ifE}xuf*K7} +z(VIx>P*^8eGAgCz$n}|-1mbjLbV4L{^GHAdUkB$H`MC>r>>3l~(;G**wW8IjugJvg%geXQ)k}?MtHdQt7ELf8xf)b_% +zI3psF4v&ZjHOb_hp%#;1DkK_d(t)8W5FCvZ&w>fu8Ad8h$ws@0*&qxpX-eb1Z~S2q +z$wSVEA(*FXS|ckgFPJ>3Lpo+nnB>I#eqO_aiH2O!DA;=fazHHLS4miv6k`SV#RN?Q +zn1nz8jxiB&QKSRo<$R^6ka=kE#BF2%yE$z5O`n<}kK<+_An +zs2b*)ik3ND$7P|Ousp_xSbyErZMi7PBMzM+-1UQymA+;|7Uyvmz`mWMOD7>S(5(#& +zAqBWxo{fkaG>}V8xddp6$Wfs|5NnQ))NJ9>fMjl&bCQ2iG^Ue;u&3jE)>}#lz?4pa +zewF173MSw_yGt{lc?PsB>zOPI6U16r%7YsN2M-R4l#=Ym2N@Faa1&q6zQ;N4ex-LDMsv_orK+0_)6O|2}vw5z@q~8N1o5L&;gvP9_$?qYV>YhMc2~(Wd +z{2q2nvIiM6B~F>-DQfV0Jw!Ecrf4b +z|FQRPO_C(Zc_8{8zap8{vNc^ykF31Zt$S;xt1kmI*thNKArH4vlVag+5#br`ZeDKg +zaoZ$>AV}^K;GA6^AsC1)+)r{6L1aYJ#NxhUy&{PrIqm9inVj#>)<;|1e<&q>GX3DmP +zWLIGpUJL>e7I?t8$tIRWa;40gL}<6C4;od7fEq}S%2hFu3lA=6T&S)Ghr(|C4A}+N +zE~lohFPoI41d{$rCz8dGR~=uCX_81V*DYXFC(?ijis5Y?ql8<%(p73oWS;iV%;ca} +zv%-QT?zEp^ga+!JjpSR7C?f!t%i#r?pGD!{Q=-EOwD%acgRBDgNyBci0%Mhza^!FeWk)S7h!_SV +z^Tn{Rq%rCa-2NNjXlQkan+N;@XHxC75$m48{OM$+n3RaIF+@9a3{;|Mh|8u1Bv#8O +zo*v@ab*z^6AKFU;SdEt1fr+AT+h{r`W@@!epU1ds_jyxv`!%4(avVKn7CTB5{iM# +znpY6)`0^;$#Ek71(85%iP2g$Ry+v`COwq7!TR+bf5ohHfl2gr&ZD0}tAmr-+Ri`o- +zv85#ajrcZy3IHSa;>8I9*<-K81h;}oB8IKvn20o6SW`%VM3H#CdjQ%GSdJ-Kk`mRFEA*>l~v7 +zxbj!EFqAvY0s|u&b_~64e|G{d1GUK0to;owyRCWUV#ZOTyaWlu>{wWWXCO7Nq@o^A +z1lT^6N#Q7J=m70dtD+DQv$&{Hx&1IirATpgBQ~x(2@VIsVIk3!HbOs?25dV6gQ%u1 +zUH2gQUsL=8nRW +zQBvrIH_0#pW(sFQV0{wp7_8Q<;0l4?+C1ctK8H3MN!2|Uqdg<8-Dk^uAd^KumsBeK +zQ3^6c&c=5B2>{2ye$*eN%OjE!_#R=UW=2_;1u2Do)0Ty*a!>c%aS|=6j%5s6l)P-@ +zNa+z)lkFIOcQ36-{O)UGOC|B<>y)R;G$N6I9Ik; +zq_%S8bsR3^R4lXv$~kRVnwZUsy;ja;pC+09j)s9z$^KRnr6<{<@)N#t`X!eGK7+tP +z^-u^)D?=>W1@#(7fL<{$SZ +zH6mB~{@V4TJ#fv`_^M#TBg||}$_%7SS0xnHhoo6Md#FLg{fzn$ +zn?Euq4ijA}L)Zp%#u^>qxIL^_1GYp&FfE3b%NXr98Vo|n@;C#rIe?`6JizI3<+k+U +z@KV_7IN1+Ow!?Io`e{mAof8BP>cV_c5t=;#3IMI)5kvr@C++HzaKy7fC2o62>P0MQ +zNe(MU8Z+d=RjCPp1T7Z2m513E0S2^q1}uzd=4-Y9V*jfYtu9UivxRHs((dX2k{!FB!L4ZSglv!))ia+;E`*oihZW>CA~@Ov>Ty5`B*-p;&vvJ% +z!&;TL9TFiTl3yJwY+xHAC6c{jb$|=jE5T!tR*TkTVo+6Uw_}8=+XEwOPbbR7HtbOl +zw#+m!fdBWuwcpyXN*Ho@V6p~RYrP%@oE=48`~iY`vQou~oWmx|#z_bT>)!M$%jjo| +zA(5?%a8(v=Z*Gb-A6fKsD_2peCC8?!3=J_eZt8)`#>)D-6Z3COPewR&Eb5Ns56ikyHtsgb}fOyup45G`sZrv5FKCzUe* +zEHSn{GMtE}j>=9fu`Qd!JwKvx)wly`+M#46vXxz61am+!_gerWw2)lN7Edat#IZHK +z&HOedXF_#gEE#zsL=CjvckE +z_ll>j4B}`7hmv50j#%%EM#@5>PIy{W!p962YeX+9WF+9q3{n)8RbZkZHBin{7XDCP +zDyImKluDvtgbAd-q+iwaHC)Tc^!8Uivaw_m9DR>e_Z$Y>K3iC5sIeOuF~Dg2p4A#8 +zd?8j)7-h8r`(ZMY20g%5lMu)JLSS?}ywb2mdBe{dHmuABowhlAxz}brYV~WhI|OCo +zGbm!Zt50^;6wzJXp6s~R2w8XzP=UJhrVbzy;7Uhkm1;_!>z1}1%8y%9H6bT#78-ZZ +zQtDY@-#HdzTJuUC@lF+WECh_Q^XI?C?`ZA$38U&6ZPgHL#^%J`?nxGE2KCs&r2p%9 +zoHeAm{#vJSmom+S4-=Nmw=+&LwMq0 +zP*${sl$ixu0m;C1Sat>h11_zQJT_-o>~dhr&TQ%3{Eo~aXXM9~LC7{DfCm-Msg1B~ +zFqjWBCJeHXDS%xBkhTfyhv6W<$+tKnm?Qw*uQ;G=G0IScft$?kMFxhyXBEJ;@trfk +z47Rc0$Aw!4vQmiQ;-`*7WW^%4+av2L=FMPjPIWO}Aq&eXNw+61+Rwz%Smlyrl0-%! +zJu7o0y^6C&Y3?LI-bPyrw#VY;=c*VqPJsoq7^Lh|Z3Z2Pp(vK^&+Ouv>lVR|iY*N( +zwx&eE+iIvkBn^3(myJ~|2y`UP!$2U;ZD4t`WgKGossxW)kT_^u`C5Rn`3Ls-K +z9=!7sx=2=jFfEwjs38}3_hyUi@OH*km8v}Bw&TK^cmQ`s#w$8pUV5KdW_%roPar!V +zhIa7*VGZkAVb_a+S$cE70gHDDU$R7T8*X{5b +zZY0o)2^A`WcBJRDtAw9p^gQqAH-2unj$j;~hb-If9?wB;ew96MH3YzEmo0bt>%obC|9YK>Iq=Ug1^L+ +zUB^c`Fne_cFotF;ERhs+v;TXZNbqCmHxon!%!Vd{3&Ob{O +zmZav`i=bM}Q};^^TS}q=5ZhH+7+_YomvEV1;&vnUsI04W#Y|017xw8o;GafLWgf;v +z78z>lxD1&(&PP2!0kkf+0T#sBXr$T2m6?SxuG`;73nIUzl~N`!|ED-V7-p(+ceesW +zDvx;2aNS>%Ia9614UI{rGFLX|E9RpM1}|Snw+zF;UTHM@g&0_G +zKn7_*oP2x~I#iVq$>az#Gd#~MR9_0M@Hc9ff? +zD-NyEn~Ega4_ujqKR7*^FPo0jaq54u=QdPK-5g9O>BLt6p9hnMQ#66O%#?qEbU62j +z3qi+c-vpORWv*JqTE1lOvcS(GbSRpe=5t?HMC@S01U +z8D8S3-k4}Ga_MN4Nq=+=@0rC};>ic#FcW3)>&RXWG(c;Zzic$ky4Owtn(e7wI1^As +z?!RyXUQYrce7kf*N|JFKB+<$K?3eIF!sTh)M1JR=kc3gS7D57XYZfbck_yi-CaH11 +zumG~-S@y{+Sq|uj5c%~IvO6~=Jwpk4cIf-dar_g+#qIh;7+14L99&AtPq3Ka_co= +z`(Pm~AuoIar)Z*jk=5 +zjco#>QBRMuMzbG>d0V5$w1N38fM6rrxnJvrCv%3hvn6KD++NFaI|^aE-azFkk(HTd +zQff%w@Fr(?MPzDJ;rPxX(%{G{7sMoJ?X{~J)(#^UI!j)TeQV*$d8(cFqeZBAOpKBz +zfJy)4;n2OCAnf-Ue;|XFL*h;V!xahDcKZdaN)p+UMF5*g3jo)YGAo7T5_o7$8tq!C +z==;s(<;t3%!d7F2+uqk~E` +zWln?lh}B1+<#bVeFT^W87KigJ67Vy*f@}>z0S@iu(qgn1BP^V{P1)U3smH851UUNq +z);i-+Uj4|$-1%~u3UlwV!9UAZfz4^OBlfb6+*P1ljs)|c_8bN%w)pswAOyU+;i~Kr +zMjmmLjsrA%#mggDr^6X#;!!xcQ6BPV@p+&GQSU0jltL?2wG|NGwFTOduu!|%vZD{4KU(m_EhaUjR)}IUr7g+=c2K_I}V& +z`*xLIN-N7#IbU?2%om-L0IURdt@B>2z^E7z0X&Fk{Vh;Ay$4X&LYRlaVRKciyo$Ye +z%}vg;BzVZ!Im}iFsH0`)svb)i)#(evnP(N}h(Qu9S)t +zE4%R6D`zC_1;HG*{A_QVczyrB`5fe(#AW_89lr^0E;CNV0}zFFHibh_>!SXA#IR0qt` +zpsyNJ9C>ZTfY5HnJ>J22_FT}0h|0K!M!Jwh=cZuBCohnesNuD-)Xp9N8~F)zF) +zPrg{SC*_M^tb-Xgi&r>!NxU|7mkkQOBw>p*=KfrQPuv(qJaZg=$@l3KCXoD+z1w>ltDR +z7kml{a2;2ILNp}KF4#`lUy7qbin?>E0R(SCiIouwDU;AsqhK+4?#o#^Z*9-CaEYsD +z2&Qg^q@SbK49nK_RnF`gU}ygzbl1-cJb*OKsRJyxzyMxAp})DkL$xQ1_T7tG+iIo? +zabj!c)gHkXQE%DtoCL2(4Py11P-R +z0@%r4g&xju<$_iOimm4eI7Y;me_Nr2aV&t_vuPlV%xs7aAm3l}MsZ)wJ7oX}&HaEw +zG121`ySlfCQdUFSJX-09?{(07J56=zIzad}=x~0|1!kHey{@POU?2k^Hg`a}h%yTh +zQU?H2gNL+fsq3BKG2U2Cm{jL2+h({nbI=kHBUkEJ71IFiY*o-NUE>Q<-Y{3ja;L_P +z%#1d#CXw?PQ^r1_S{s7OL?(Qb96>z_4uS|_Bz|WZGL>+w?2PITH-jX^;*x!k5zg3W +zVA;ZjESmyR`@9*!=uA=96mO8N7brvti=$Vy9XF0~UB5zu1ZamoCJ#p78c63m7h`s)^Pn{-csr!xYeJ@|lyfz* +zRIijDSrsrFRnkJ>jg>_^B!Sbp*S-maH-P`l8B|F#e+W&Z&)Z`LxF3@y2}z_x#)8(t +zDg;SOWzb7yfEuC#u@JVIg0>6lEAH}G46I((>kL2%<;S{05)31w`w=%h&F7Y_CSPKl +z-7S+6i>dXXV{e`amx3&q(EH&JQ#xfhrXr08byG`!pPB|O)e*5Pf2Eu;gJ#jx4GbWr +zQoyc=IdtIF3N16TSa&j~TjZpsapctuc-ktWfRGgj{c5p4iQUAb-dRro<~6wBy1ygk}-!ugcd2J!WoN(|9>a!9mNk +z5DU8-ahZ)ckSrX^U#XySVCZWh@GL;g)*Yh^MOf7&M=KI)3lb64i=&SGnFZC$O3hcF +z(JYf1aP4=4U@%Y~95(HpN4rEunAP^JGIFa6JhH143wGi)QC76}wpR +zlPZJl$!t2Mf>FMGhICv=v+!-{&oshx!FkVCt%}IHkl4zE;FHDn_l_Hp!H|%Ba`(g| +z+QLY&t_~JJ;9XZZdFYrBptHMoefi$Kd%k@C|5ZmSVKW?Xw{Z7fcOF>mvdo{qzsS; +z0>QK!>ZCMfLpnQ;Ueg@bsUQ=q-x`2$q;Q+Rq)bErbW;@&D$7E6AW7Qy#3w! +zeh14~O*v1tDKAw^)1@fe_mnNysKj89w$&=tHg7V#N!*2%0dgL7xQtG-mIlBHwMeGU +z+U9XtGxdl%SUDX^1YmCDImleua;*bX)j{=iW7%BQw^8DNm>Lf{E@H&YF^sRzxXUi+ +zFWt8o@6qE?wQ4DXuZY|I!~jnCXT;bY*#erkKfo~HuccW;pgse$kYenAUO4j}fTbrh +z+9XFRm=}U^pVfF}dR(41xx4noUL+i=GD`sv3&wVgLT&E_hBRHNqP>k);?jk6Zezn; +zh+wss5sS>xYJ;1>j>>RoV$?G25iCrSM8M0IV59f7-ve1Nkp0--O4Xk50oy|jf5>5w +zP7h{?Pv1k3)(4L=L$&jqE1SA=6joX_gjN;lAc;RFDvi{PK0kjB^DkqcH?&ICFgPLv +zrZP@O9>i(i!h*OP>DPf-kJ?$&DiOn>CM7wx=^$uoaC~fWX|V`eDAR;UgKstyP~+mP +zpUFzhR&IR~Mh%CwVuPD$2zeG65647C;p6nfU@&uBh`}V7DIo0iNe_=&KW2bwy>P)p +zJkH((3#*v`e8G$I;O8W8S#zkw3&j;1$9QU~Sg2W8jYTClg%)<_O(uZqndAEeB036f +z|8P(%Q&NhQwPMi%BciS#-38sE&rq5Va+UkGQV`kVN}h9RFsF9z1fZa24M#mNn-A& +zF`>?tfZ{Y1f^J +z56P63k4QbO73oP57b3>W;z$+{fy06(^|)O(25PTQY8(_p%|?Jjf@W<Em_8A32)-H; +zpYAU$0o%|z^XE}oK8G4^)HXiW3=bqZh@Xvj*ow}YvlS1l7-_e8V^aWtvtRF?N(fQA +z9?fa3S>va+{vly#IpDl$*}n>=u+~J+h{ZJa0RQGjZ=M>>#xqp7*NQ5*?T8>v#Hd6) +zc0Q*Zw#i<+L)q!)C{JBU(I_OUii6>ut5{l}Z~$y-A??v4NE}1N2M1&4up>U_DYJMk +zlO}JCWYK;110ZL_w_wqM+`V)Q&gYo}8&`k^Occ->$G|)yV+kWsks%H}D%)SX7vC7Q +zP#go*)8u^NqXX)2s@$bSoO%IFQs>nP$lM5Z_F7<^Uvi6R22nUw3ph&!CTTWUw+7S} +zY)wFngDJ-(9d@YTuqfz9WkTP=|_za8wMKFm}f4o +zp&meMkz?tfal&{_QBBuy$c +zi>-1&U{Ne=Y&AVu_y|WjD-lbqC?~? +z;Fz7<58!aIp&Dl1K}+MlO?&1?V6c%k#eyX1KFKUcEFukBYHXk?$<|!1XYfo~jRMJ7 +z6AZd#Zosj*lJ^8a_DCXJmq3Sd#w;zZ3@~4~>+812-?o(Vi7e&BL#+=x`&dVTM8*gn +zSQ7qm5v=f0oj81w4ccIYV_LqK^bJHH&ifAC#zg>25cMD(7#!rp&hZgr#)%gmeFS%R +z5E>vJtsqWMRuFy}0d?}wTD)wWTCXf}m)B$0GAg*qX99{3>=j=?w6fYx8gllacQx=B +zwnw{n(ca}GHGthS2xnYx_Xl^f8oAqP{_J(8ec45uaIp6@3lXAI#q9NA9m^+ZwJ^^? +z^f^5ahr~pFHgW3O6MgE)t*LOqUK?rnu+A=HG3CDLBFq?e)G+Y)!V$rJT +z47>JJ>wu0cg7b?H$!l&su3$|AY)+Gd$;g^f!*~7av9S7cE%OplT@pV?yl82@u*hRa05P;c9wmA!ps^+xcz5sNw#R5uK~F80g}fX92B;^ +zv`*8$NRMjv&~A52Y)AuZdaU!%sk|*WAIu*n<1J>JhiA?B?2)U +zOJxxSTuIv}RN+)t0?MvmBl1424!tTlLxvZlSuwJHEfJ5Wt!Eu#GGWbGgu#@Z*p^L5 +zE!(MbV2|2Rs$_ChdxNQ|P>C^{s4akd7Cfn3ydR)5+_GX$A+a#!E_d6>Oljj)E3-u%(%(`<^NtOIQ9LCZj?(8EfjLmvM2B5~oW2FNr(m +zU?6OFm`!~-3~-DB?_luWGm!zaVfY~W<0IF5gm$449L7ci?ckhs$icLMTB(fnC)u`H +z1;zGc*{mr(4s}+W@{B(qR$THn +zeikGvnF~IqR}2QXhZycSD{*jn&i9wO3y=+abcq=WiJqo!WELyYO9LZZTn+1ibQ#Je`=!GIjMSO&klL`en;f}2mYR~}>zQ%n0>QHYKgC+>C1(1U5^q9^M=c!GM*TZczr +zrtnD}1iy~pe1Uk4?eA_qdw?A(Nd9Dm@!2`Cn>C|c%y(|E3A(!&q(%Um$pN&}#GaQB +z2v6=2&i>u+RT?<*&14-=fqBH-k~btlkan>GXJb*@=|oY(GuIE$7>+j6PMKT7ahf?4 +zQnXQfTL9xj9^eDI(wd&7xc!$6?GM?i_b^bMsQW;4-Cu#}FeqY%=`3Z+oux}IR&9|; +zbrwjuEbKXIo2glNjf_Cvj9TS_Fg^eZmH9?X=hpzky)`Eh?5PGF+rk0UpLN5_&&|2c +z0}HsxLI|Dt>A5A4IZH|Y6XxioSwC|VMBWw`tOcO3wCU{Tv9Jj><}$Y8#2k?ytx_=O +zutDt}#CPa|{ztB+V +ztY8Wp{G_}9?-1cb?OAMaM~>%@z=iwaEHPJ$+AbMfp~JVGu>-9KMUuFpO{-vLh`=WE +zJ&279lYOPE{5yxD4)5$)255Cok8|$2;YW?x-`7Ddyet)=X@?d0Mp8iC&PCURv%mr+ +z6dS6;S2|B@k7%7o061#1Kbk9%W8>)Hc6~45`wia$d@k%BWxnRdOvebE;p*8gf_5C> +z$I#tVvV6pyWLR+IjI9=CSC;@TT>tCGdJ4;gNxQ)w6Iy^7Usf7 +zz)%S@lisGckfd?8tYnc6X=V9jIg8F+fQ1TVQerTqzxo`V1UgD-Wf?X*MDE)R)LJ3T +zT^Y#jJirXf$}{^A$)Cjz72Yr26Gw~bw(RXS4(dLE?RGQ_5Ur`jqe$jLxO>01AU9|x +z7GqiY?_++JJE)2{m|NsCKLEFSA`hGkapYj8x{#^qkeRa({u +ziHaLOhD}nEq3N~nAhG#DzIZ3wnk-d(@aERv-sJ2+Kc_!Z<<>gy%->6@KD&l(twVa_ +z+qP>TA;D>^w)f|qxq6Q`kNq|J#CQLD(&=tcb8r7XQ18s?TS+DV#=B<^lgngs`S#mC +zr&IOl{;uW~y+G~mE)r(URkpiQsmiqOb*_u=N<-W{9n&V;Ye{BDW?oemy4SfnbW&?V{0)sb_0c=NGm?|5SJ;u- +z)!PD@59e%o?8QEA)`}b-Odx>dJ%*kWT(FZIQ6s +zHVpT(exs=$AODxpk6DR`_!(|%9miT9bEpZDvZ{WLEmZ4ou8e2*T@?;Rs%cdhT- +z>@BgNec|+YbM5eJoD3zK?x0=L|7IpDHTCanFVapr8b$uv(4Lj~%0W3USDv^e)m@Voscl$Us)TW1S{ObmG>`_RuJ2=?j +zXNecTolbk<<=JF=I&s6D-z5G2Z9;t@h~IBdSs#mHDs+&to?TRr4olkANd7_2`ZiNN +zC+S|Txr}fmJ*S#TV*k2hjQ1Y(AWY8LI8Wov3CSZo4Nl%$oaWZGbo-ZgZgetG~*t{hiQQi@FG&fWZX8@6@kjskg +z?-A-C)cD@VL^;@7XMzlrGKoaO$ld*Rl`DmzrLK6I*!;o$iJm0jJ{x|66!xiN_51N5 +zf1rFDBHCA8eSLFdX+HAxEj{;#l9u>IOzVkskgwpR^wljr`57Max9mW^<@)^=j;CmO +zu03*m_S!3OlChGc+Z)#EdDe2)V;wFxcc5tVqL&WREE_0MB^!P#o8gc~eZwz0OTj)b +z^0L|RYpycdE-&_wwViu?!Jjs7NYHJI4Phu&>62@~bcSE;I3+hv=ifY6+r!K{<$`IxQAluA>NRhLm7Ha|d<1Mx7c(5!<1^y4rrX +zl^6OXe%kk{+Y{Tzn@>(KEJSm_9zJ_@^?iGq>wal4@tt-LXdYHx6t>%~8-D%ja|in# +zbY0o-;I1A7U*=jM0)V@#*>nrVIof3X_z(tMCKB_^>a^!H4H_{7R~s|cJ#oEw+iRrp +z60Pj2zmMEsqMet0mNxneQ4o2OKtikjf>pzn<^K}RuuW{0i>y{+J*OsKXLgP4brE(f +zWmZnIe?mL#ljKboPm#-|4II@#ChVk-hB1d?&C)Tl@G+CPMvoCwOb-=%+OW2(&CfkwF7F28+qYJU-rqrRjAn~BnW;& +z@)e$X$!6ZF#B%X<&Z$N!Y_;BsW#EEjQof2v`&3is7h1tZf>!wYh^t>ul*Ke-YgzsM2GsNMhwod; +zLDbTP3o*YkXnwe!eOk%v@nOMfZq@9lP{tDQY<;#~_#^4_lGKDixWVJ^t4ba)@&6q; +z*f7uG3^Q5{-LeQP9@i6#8BV(j3)G^%Wh>LgnQ6{EhSpv8yc0>mtQ*|#r^QrpLnAOw9L8LRm$!R8vi}K +zF~O|R*q!#7Z9~2K4WHJ08IHty9FlH-^Q)WZdBbZ>rsZH^Y@*9e%-}7R(a@xV#>jB? +zlLvQu0%-=2+$7y+_xVK5>$f?j!}f!lNRm(8 +ziT51bd?YJAaUstAo+?J42tD}(fyzgu>7O)r)pL>blk~aCZ2!>XZ +zebJa%PoCZOa=o)zq#ItI2|s>qvdn?Al+3jYwkasl%q#^y12WeUN#x#4+qbecL(Lp +z*PbqPqq57(#qhbI0bQdPBZffEc?rEIXF)Ae$jqjRBfkjQQ%87E_vwlnvUI5<#BzhpOW+p#DDqL`CnR*jzoHyh!e!u630!ySpD`&2 +z&eNvJ^F@t+gs5tp6$8PPixCbrk!pdn+li`DGaD6@_72ElqON^%Jf#wt{$0Wr&aBSK +z+lfoSuoMkd?1ns@$f&8@6l~|2qq}!UnXJXAHxbyT<0ejh%Cm(|M|opIZI)@F7L|-~ +z%Pu_k-g6dDvz8zmx-62nU_~P8Jsm$h8I}EdBFly4!giU?^K4w#CH5vn3%0DbG*^|u +z#j6K$_+0ht%VD0p*ptr(O6x~`Nqjq#<~r@oA6C=Tvb@{hUEi*mtIo2+)5Iz#v->ak +z^m6jBxTpF`JinZY@_Ax{Fl^~M)t{yK4>OL9*u)^{|c;zN~O8;=KH3*AW4!NR&;D(F=hi4_uaQxyagb +z8I)rV%Nj`J-+X)sTO^yCX%#bjy0BKu74hx(X^ErqD%F4dn^&&9L{^onpTYgAg4kVs +z^=JR!5B}_z{@;K0OTY7H|KNvz_Dlc%$|y9cbWf<6C>B>AiMmo)lZiTh^(Xl~ckK84 +zb^eyn);mr|W6o#7CuM)_zNUq%hInhq_w#Ch>UY38#=-4^?fwUl?Qi$^E@UldVo^3O +zFcdVBaV3Y34{t#O*-?XatWa>E`d3%0vPA2>u+~s7+-$dtv&YAnrZ>{$*{8+<;MsB4 +zDO6x%Zj|rr8s`~YGho^%exj>KK7jdO@ +zFP}_fmu(ynWpyHi2($7wbgVx%hM|!qytk>&E+lQzGTw2%y +zk`Ui(&$K=?a@WelOO1~ASiIM}*-|)q +zA<}mAJaYa|MRRl7-br+cY*i +z+*C_d_Fm`-F&yG_xp$f*8Q7EQf>Z;^`7e+aOqAx%4p*6ucFYC8-g;BqJL!ppV0@>@ +z7f2g#)EQAW6)hj*S~zQ+N9_#$99{@I(|t8~h=O4M*Zz!HGofyAkQ2 +znXm~$&KtzX%#{} +zYN5M7q&Cc?gBLcgx@%tB;j_)-f|!Y|4S*)7u-9lTOq#PDSRk0clxdYIqn~r!^{Pqb +zKos%i3@4ggh@lRxj9w1$Vi4B+*P>%TnTIAMq)kE4Ts0^$U02#P8&2)ImB8EX3{K7 +z1XaV5(&kP+Vr&vQo6E+*F>Gn$` +z{PRbaH=W&o*qfxe%Vb&aX!ZjZ(Vrxqfj`_VhVKv?p$I(R)G;T%?x`>!p?$FZ=cS0n +zWc$w(wQQaT^6DAyyj7DeF|H3>eCh`Ybv9e@4P?TLL2Sj8*tjVpoS4}Kh#{NHiT>`` +zkysXT2HT!KHyd>@&Q7~LnnNq|+#qLylh5wk90(33K{kNEvvrN2s7Zt4zg5Ynd2Z>nE#P>iru{d?q$p|!2$LLXa0Szja{ +zA;OXIX{CKl4k0bS{+HaTMg49;oL^)g{gw9aQuE9;g*>=@x4&zo)_yhMlSCh!?0j(T +z*Y?5Foe!@4+CI4Jv8@l?Xvnu!YMa^cGD5?=_jTG2;r#rvleIcII?WrT-Hwb=wN$aS +zrw*E$M5+FwE^(r+CutcO6ubb~i`|=Ej?EQm>Lz;jwLAY!OyWlM_`Uz;mCXk_D_y_J +zyU=Ra`A+D*SC&KZ_|9M6`xf;DHtUN)rP!2N|0RAay_@%NS^WjP-!RaJ#F@nimxze1 +zH{wXhkrWJ!D#)Y6sTZZ1k(}8oHKcDZ)pQXzlM0y(I4ly;T2As&jPO&_CWGv1jR(>{ +zi8EeQ)6Nyi;#eddk)WH{sw|e`Xgp4nROE^_4V~G5K?y==4@O7Hf|Flb{g%xEVvx^I +zY_X1T{A+;x(!PjyCYg(oa1JP(R$VpKOeQ9osZEPZx*U%2H4U=np~x3g&QOlfS_L#n +zLGP{?@v>n36e%!7DM(_#k+nu*8L9}gs>}*u#Xn5~gUWF5Kd~Ls>0}}c9jgpxkrd&4 +zY5#+)N3W!JB#4HW;DDRM4rv6xLSi(dObUeLNR}xqDY~CcInE-@WE;+uXbCdr6z=?t +zS<*ySq-!hFf$cl)jAImDFozI>OkTj}7x!j?jzFFxj^H2FVj{6C-N8ND)u+}ka|g6` +z71G+(W?H-I(%RK7TDw}IwW|%ZcD0GtuC~zHm8G?-HCnrBY3(YcwJT3+SL?KPwUO4Y +z)@bc2ptY-YTD#gvYgb)byIP~Qt5sUN3TW+Wjn=L@w05;dYga3@cC|)pS1YvU8P20# +zTp{`7g0$FdgXBOT-@wcZM^ljy@nKHl^N?kD<+JUe;k +z>3i?;dF+iF2u?9Omub95{PcYCky_&)K~s#9vKlCgw@@Y-t|T%aK?pp%bdRT@)Zx051x0K3Q0 +zAsdj*CE1H~#l>XIK{j5#zc16-pc3)WqeGzH;BiM#>@<1#uhEk6pJK0k1JMcixY0!` +zIehg%6v=`A@lr>GXJ?xKIzGR3F*05J%NvLNWZQMAI<^N8$L5Nmz2$SkLqUVmT~F?7 +zUTj@)w|K|YoN&rJP|4_|y4RTphzq>-H{B+9=^-2Up>bimBBoY{1z-Ym8$DN-<=gpLwl}4>Uexcel8GNPuS%=g+D#hxwZ+JGq;hQW` +zo}QfHE~@5WeK$~M)&@(*Q5lp>J6BiVA>>q3EantkKeMiKZz~n}jyMxF#_Q}k9 +zsW}NNlQsh1VTX|lvzSP4XJh&LYz55>M3hr^ +zGJ092pyPMg>BiA(AF(0AwtWS6Eu$|UEDnzScph7`erw;j6YvYf*}+ZiPLp9s5;%e_ +zaNCeLlhGGApTcMn(C2|2V(kOl+`oU;8%P+l(ptNNLiQ?4O!)fBCAf>(%Y4dSBEuB6 +zD{oyk;ot`@M_XDVC!0U)Cb?W>gG?-)uQLA#k8t=(xaL{b!Zi6#kgib6f^B2Lhd%R> +zY*2!M(&B+Jv3)X?`O(3pcU+!rA2vI^9o{^V3+xtrdV9Fx`Asiv(Lj94{J9r?^sSDE +zKNgO;sD9Xantm!%gcw@;^jo+3OC0Q&Q{`R>^C|WV_p1*8hB%B?iNP_xiz>wm%$j>N#_S`H}spJ<~kcs+1ld +z^SrL?fY{DgWWAmHo{iGCM%{n0gW>r3`N@4g21NKgXFA+x|2lp`OyD-C)(0^&;vh)H +zy&a5`Hu8hpOvo%%xlm2dn7I9xa(?f;HxpUzM7LY(t(uIQCK@`CTQs6kAzIq^6mhyR +znA%!(4ull!iu)S$Tuvm1?OLNB-u>jA_aonsl_3JV@rF0kQ%~P{^6^_gd(-Fk&Pu?c +zZ(C`hogm!TK~%ik9GU~;?}z{4!(PeCpM+zKIBEe=2S7Xy0X}33;k*mMd9Xz!G63M) +z>49Mt0BQKXvfeNAay&xPiXfS3Lv-( +zMH0$^st(qwJSmnk9c}xS??uJ9SDUCURqU-QlGt{&F%!ksceJ;xw$*4zuZh!yRFy3? +zIv2e*s1zF};&#h_9^UK4(-%>3NE!__;4w{OR4+f`2DoRXl& +zPet6&hOX>6Uf=@&@WM|G$ygvsE9`p>4M?ldojUnkyAKhXSLNow6}-iR#5;VMScfkY=kVpUzA<|Y +z?q +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 +zzJ@n_QF&8dqO}Z8;_N3PVkzLnew#?Idj$Q +zk~Y#Y!SoUCr&5_4PAFFb!IW)VbvkV9FHIUR&Jwq|UpAMmmQMgFUQIL+wE5dtH>`sb +zg|?#01jIqBizEhkw!;5+k_t~<6Qt`)Eg8}_Hu2)?gtXK4ZIcWUq&Tc>X0Tj_0~#Vm +zxs4Bq%H%HMvKGZm1g+pKVrk-+PH=8w3?U}!bU@Qt61&_g2rhx>Mi%a-I +z$L)5LlZY9QC#j97i|$8=r%y6b!X9zJK!Rpp7y}IL$vvRNZ94|CjF*8)s#*YH9s-E= +z>CEhIzC8^j4K;@!H&zReT}qn_aqP$_4dzJ_ +zw$AR}^<@qj4zkZPr6xwCu^lHqHf)~Tavty?g7U>Gj0fB3m&EQ%=N^?Svq@+hYM&!0 +zo0!iA;LVA~x;&5C5kR6o8}+Y(NW;h`h9qjRBrUhK8$DIaG$$gPNq;*sUl6rg!dXDE +zrJqFzIs+TQ7~ClW3y<0jC0{`7ay9-sdTl{w@fJ_B+!n!Cw)3@M6FSzYftP}G%b{iG +zYzp!=f0j8JWhS+S4PEz%u`Ub(x5NVDY=P5=4&02!^-t$n^| +z&7_1G2Lf$@3$++nKV7s^i&Pq#DTuI&F)<1;#0ZS7Rf^E6opnG)^A;X<@?oKeGnmn8 +zbp*L3;^T|f@W?o@yy)biM;P0&7l%APanct6EDeM%_lPNpRRXsKTVNmqAU3wOE~3l= +z1a0~)faTCanp?u%JhOo)v&X3dES`vtG+;iVGbdM30G2>$zi{sFe&HXyb2zX#!E-Ff +z{4x5s+Yb#6(CN8-$RQd%o`?V!8Z2xE6vGP$SRi72>vKp5r|t!ag%8roh%van8QK*m +zMK#MfTM|1?lh}rEiAbB#Zc8PamUg+b;ue*%$}K2OKVy@ELqJXQ#~jd%b%dadJ_i&q +zgJ#jx4K_?uDRAG$EzUJ}ZXhN#Ei@KV2*!m<{@qK?X{$VMe-mv}<0L3PWRE&uc3&}0(zczk91-hj;Ysk0Ng7Y` +zwhx(CCDjqPCbExojA;UegywI{>|qNP{`U9O}{^}?Vr +zQ8~jtOM6629w0@@SX?cr+D@CB_@w)%!MkC5>(H7`vvz#yU=C}0*6OxyBcd{2y@V+n +zB|i3W2Pr^w-2{PINHO+5FWX_55@R8S$Uqg1_YB!evee|Gu!aNHZp$VUE>{czBxSJK +z%6R&+Txca>F9kCa`j35CQ+Jev(z0>-hQ&xF{$RzjBx_lC{v5X=OtF!&A{E?G$U{#X}i_rQmG|s;Q=TxeF3W1{&<6FUSCA`ABc14KvrE&YD1F#oBlbR@V +z1Q6Ki2+b;@)zGyd?Z1;ghc;DG!5b=;nXgpTinbt$vd&@kdG3SbskwHY^k|T^i+i7cQD37{^tpuz@|0kYW>;SY}~lc><(6 +zRi`qMlodvC+CFt91s`vs-=J%AsPe=crGv3N&AkXY=MS=YE_0r*xv{1CK3SeJR!BNS +zOFuG_muw7#JX(owei7LS_jZK<<=s@YXMRBQahu-(fe8+x8ElaB&M5_~B1l<;Mo4pm +zO~PK$8j-E_+FI*LJ}|B@F(1*f-C3u^qP#{<#N>|U`Ee5MiiP!P(3uoV*`6ZkT-CH1 +z&CUiHT3Dv7RYuEh9%Yh9l+@Be>NDcuC$4Xdh(*e4M=MfmiG3sOq_S2AT`r<|WRC9q +z)8%5S7S3OSs4SbvYEa_^2%FTgB36cbZU#v@wItOH@{}{X +zM6k@7S2f6dAX}*!q0Eh`n8}C4CO6=w$PX>$d?HIZ@lb0AWkaPi>GBz{^&v9su@>{x +z_T0KOMMj^o{>Z?sp4bA(nyk65LJ%oCbN^F#8piZDAsNlm8(^9Te~ezstQj@z-Bpi; +z-CJszm$WU9th&IrQoz_q1p?6s4f|RmYJ}hq{T%BtjaxudfSpg07}m0avt{9Zy9o+> +zJ^T(qXhRFc);x9N{*5^Y@F%95uH?W#7_$;<#2qLSlg +z!IQuSP +z22mx5@~S9E#X!5ieG$Cdv4;dVHNj=Ar8MGiv=3Dnw3972kZNL48rO!Ii!hsFQw`K8Z~?2Qj-ND~vlUG==@L2x{(y{{%pJ_J7a|9+$egQQ +zQ=}x|VNr60GGZYCPh+nzCsaf?t!_u#nOSH$YPaApVWYv?(K0>d4IbxP2251#)dhor +zkZMl#{h{=RW`J#6+Eqqb69&Xq9A=pNzH(-*W2PD@*=`G!XldG*1u>l>TmQ&5tEDF1*W}#|7 +zH@7PuSitE!w9g&QPtWa(<|guiYjF+%#H{BzU&JyZ9pWHBhj-Vo?Oi4>kx2OV7 +zeQvP@&64iMGI6fF1L=#TVEN*bJ=y({kq3->I*AL5yT%1-J*vTghBcSQo3byO6=&=T +z3tg>GvK>DR*+6AlTOW3J1K5mmoaTZFu1*S{g|Z8?5Zl49gJ_7T)kcrkHsAb) +z?6QIcZ=vOglee1$cYW*r*>)s=sGBr-Zd{D}Xk3+xGmFH!<|s$nQckYJ6Yai +z^FWTnS3P%$?b!!zJ=^^eOz>cuc#XNK#Db|`|6(XxKn;ho1)&6cfUg+0(A*b!Z*Tyq +z`@Yx=e3`EydI);iQTX}3SO(=;;Q?dl_fS1_b2X94Ff=pYQE&CWc! +z*RZ!BR>G9Srj`I=*RmEg +z!`<~%qX~420qPSeD5l&7J6TDW%oY+__`8Cjv@SRk$PdQZg=9i>nvfu7{KCu^m{UYkHfBI@9%6p*bt-WQFRr6} +z;TCA#2_oS0iSt795GWW&jBW1mxWd^)aBe|5tTDs0@sB-~ip-j~AN57-i%_{;8C}v6 +z0Z&qan)TZ{c=IWnq@i`OK%ozH|W32NID%G9S*eNOIXm~$8c +zi-6_Kn~T;>U(?fETB8j-$rJPO4gjODQ3}KoU)uuanKl$&Q`Rbw|MsP?2MM_vo&5DY +z6^}ZQc2Pe_5;LMKVu6^A#+2sfZ)Omkoc2}BN$*t}9FFa{^iL%c^6){-9wW;iNf0&% +zwI%JRBxRqs))9xYjI`<6S$wsL8dx!qK||&IZ-6i|hquiHE-M|FkI^@oW?IzPo29!* +z8kGQn9{Senscqjj1_n8*S%b+#GxF}7+S@r7(wQzHZM6`o8Z9u5kK7GaECqYa +z6eniKS#pFQ6RN~YhG4KaRlZ%}os1KK9~>i?#}y|&z52PQAASJh*Yem!h`4!NhoGT7 +zPrr|d(w*wPM((x@&HM(wg!vg;EmX#?L}Ui#O=dp +za@Sw#caS$;_jINCI-4rD_rc^fkLNz~MX$A>kZ#)oU>P0b%8o!i8%)KX^-Em|c+nsr=AsvNa958^0poMaBv-zJyf;L|b*hPb +z9zN^EMrgaiq$AZ&pRX$>Zy|kIuV~#?wl9r~;)0&(yNF~5P*z^w8KG@ooHr9BXgM6Q +zF+O1y^LlTb)+$d)0NCCYs%aACnNDoWydx5wq}9GU7cp|vNKWiT>~RR^&aKtoK3^`| +z+&x=K8^PxM90 +z^%K1);+^d(grcz06C2(V1s#%Dv6E-dC&8f}v*}tB8OGbGg~e0NqGvi>bOJ)}ikTUg +zWsf#S-D+NYzQF8MulJ}!CTKar%q7Z2o8v#Ml%Q1UUBV#kbx;j_K+2N6I_d}_E3R7~ +z@Sdo6)9D4w_k|bn>cZWf0NJWS`vz{yE} +z)_z>lN=)Q@M`Bo?hU?YdR8)ys8Zg1ItP50M&*>8`HFv)$5G+w& +zspm#z{fi#2&dU*P!0>kK@uY83?s6Gs}#6!VQSD#xS_cvut%Ewo6 +z&(@_7+9F@?snQ-gn}RueuD`;ib@ck2$q7&Ej1IB$VEXgL&e7=h3qJD2c#seD`3##{?O +zcyrHU7w>+HQ-iUM-1{1Cuix1mIHGzzJz@_Rs<(TZw(<)fEkDrHcV_VDIDW8BJrW23 +zFzMsSTF#IR%pMJ~%qjw4Zcl;jY0@UwEVI{G$EsHOY<+5M^Bc10SQQgwyxcw-PlTVN +zG98M7*W{jQ`lw=acGdG9n7c$bNi4kQR`~X6Fw1?wiQ%8py!L$Jq#M11=CtgEZ0tp| +zYV265VHp12rI^_>eT9fU_5uwqu?7%igdM30UVt%n+0@Hf;Wlks1NLqjG;p6EX&3nI +zM)vsLG@Yvb`zCg{UMIEQ(q1_Ylj^0d2R@%Wq;-3-xK^e0^(dB2l^T~WV&$Wj@1tnY +z?t)R6A!F)Jc+9P#Zgex*MKm#{L7?C4X;46OkTfyf9 +z1$g72U=%@9GWROEXzQC>KBmN1+_;2`cKp_e<$T|Q@d4FktRv%~#EEeT><{3bf`V~I +zG-Y&ZY~AH?;+Cvf`xHRTS=$&TDj+{t7ky^i=jNla%u4MOzRF5=6Z(5LLJbhi4j< +z;wDSwm4heAo1FXM>MCEb`N`~L-m-?k55hTGri$v3&N-<>%0`y0)mGqJxB3$ii8=A( +zvY!v4vmQs&uz{Mke;94gZ}H(&FCC2{AGu{`V(&B`efoy3;x;+9`1FlRW~)iH*UV)( +z3EpWD(MTV@`t0`F8@FvPgIb9jS0?2ay@2GeFYt+bR?dqngl~WNK2Aso_Z}ZA?r#5; +zjs~{Yn8}m6@^!Zi)+S_stx)w>KE-&y+6#kMaF8=|2X`0Y>cPS=Xy{^aO_E7)@?VhI1=jbcBUxFkv +zH^?Q`@~c(CS^Z2?9t4j*$EoX +zV0~R7j3wXsg10gs14i5-_HQUBh=kD?GmRcoABV$;L+pUJIBS*xT%Ewj+i|^ +zvvkgR-uAY%9FDZj$fU4L%yQbP;Q5SYBKf+ih?#13N2!`nJlyuw;ND#7ewvkkF2P3Ww8i+TN;x&t4<^)kpI~ +zB2EGbNy2p8A=fQI7>JWiFi@fK^JUxxh>pfH+~-$~mb+)?{n-<3Or+kpJwRyHy=-?& +z4=$#&T&rI9+TXBgud~8%2&LMLP&ey$d&eUa;m9J;RgflImr^F7>v6l{MR0-H__?MW +z9j%k=eT`dbtU}URB6wV +zyT{JV{wDajcU;j<{Gh+7R-mq3Id!dfJP;NAZ}StaO4&Ou)KF}$<@CYcF>(1i-B&5c +zjn|Ez5o)DZfmYhvq;b+XF;9s!pCR-*huXJp!Q&vpk&Rycr5_uiD-yV0u=cBIRF%9N +z_2FxC=x_K0SDXzjy`S;a_(0Fz{cwkxS&QTa)_2SgQ`cdSG1io_%VJ*^dt| +z1{rZi65qDj2=*+ACvVm7i=v0?TbHt$V3+w?M@F2b3BBl|mh<}X*=vy)l+jq|uY8s2 +z7|4tJPwe>;^NUws?G4o8lG71c9uT}@cb_`Pg+cyCl1#i~QpEAXNbzQ7z+4H@1C}Oq +zO?Zu&=3b52E0N1KCScND#l{uN)6Q+uoG<8@YcTM;Z_h-C%?D5w{sh~`NG-&`__}mL +z+OL|!w63QnrlC5@L>2^}UXQEHt`)eCV?+VrV;jS#d>(8^xG1CtI)v&b30W-lw|gzg +zMEnM2b{lWq)6H#~O+J`)S}b6gGzWi8GBp=}EMFe*C4SqLz3DtVC(RqYHMZ+HLrW%g +zX)cNtlO6VeS$;u63*rZ9BO9HbxGc>(UU4?bw4gQK_y~Aoj{SjzYHX-OhAi;(AWrtl +zeV_i>1aVcBkK@`w?EX6Q>YJRs_e$REm+7U=Rbx{^?rcBsR2wd~pWfR6upxsAi}V?}ZS?YehE*ZCW`Xxuv+-0LCL52A4CT<^90 +zv%%+`0x2hxzXH38hAWVkir7rH|E(fu4+m%wtL%p((gUg8Y_Zw7iF&3AR^!<-io3b_ +z&0Ea}^tl(~I^XGBeK90?6DBrxL<7zy9tgPy6N^?ezn;(ndpxn_+xc +zf#c@k+In?xjLQ=U(Gb!6X{28qK?r#LV6W9Lq# +z81HAY`plko#EsiA=kR06-Ya`(*^KGy2ipng&Zlpr3DL->Zy1T>4I`2~13j-$?#Z*; +zTU#>zcWl^z_=jFd;8bZi5e9N%f(EADjZZslQS$myI9 +zVs{-KY&v!j&(pZrZD$b~m3z~snPgVp_m^1MQKbFlxPkjAq`Pz=ZS*N5V}b)K!Zz^D +z`^nheUnaqZ^T_O_fZ;6Svu9!@GNFMUL(Rx&Ilz~b{@}y0F|7~CE%SDjdRu1|P`G_|`G6a=Lm~j)c&mFP92O1J`ZY&>8;A{lGZ8|bZI+Q& +zzA`9i|R(~vfsfnI(GLNaS)rUjO9=IDbY--U2LNC#dHH{Q6qYR^KCX&Pct(gcZPk&F$cUux&+(K#utRBs-f!Lgi|CL|CVdp9(h +zzv;z2mTF~|y1?u$#NV)+Hr6JxR62#k_!?hH(m+Cw5vIMgPr@h5xQ5~9Sz3?%?G2OfePcMH_S%PeG{AXF-#WIf +zYq}D5piV3!cTng+e}CDJ(U*&RwED6819P;-#e-fAmqZ*rhl#%*9PM_BQ>5E>~Q +zMx*^(0f`BthQ8<7F|Y464L;<|D?2DL&9vm>nG3sPukRpsi{oCdiwK&V{TFhUP +z&+U>9gnj$tLuy=8j}A(e;_}MtRxaaDg;f!`&n0YpVfSN+x}9%6*($-PncW!WysV^N +zwShWL7fn+bjgUibULPDkdHeX_HrnB>oLSs6r&G7;^;d;Ga{Fd`=63twHgDe6c4R8P +zWCw(6#ahu!Yv1Jaw|e~I@7lxcjl6Mms7qzyzi+l$J+n5xEp}+GgGP9-zugONg56M3 +z-yld>`iR(LPH(?syUVC(2+!Ij*_6(tCbF7DtRj6+3=X~IxyK^7#p?dr!AT_{PD5%X +zwkB)uBDK$8xXE~F=5}>hdGf)DgtOO%L6?v&>1Da}@k|WcQWM(2K3_dy<52+CA_a>bDs69 +zU&`byYb5C{#8|;gVjr6b1>CT_S&%*1Mk98MW|`@=gGY}@ZM_NUt~Ia#ms*vG0z=i! +zHq{MhqnjH%-iYs7Z7jXyqGVgm%D_Of-#iR^`HbDZdAEiE>fkM}Mywj^Hoese4!mE7 +z)7|kRdrI$rUltAQTRqYQ#B#A$RN8&A-0?}U6>ig3c<0WY1MHo{G$V>dSdg0JnCWZ7 +z!9_uP;HVNMX>ufYQ$?zN>#e^XJ-C0;o6TnZp@=14Ph~$QIp`p$s}+Ff^AIp2D2n!p1Al +zZhN2hA0K*g9>z%zXN`l4rA%pevyiAO6{iS3+^wJLKmJXJQF+e!Mq7-u%zfo0YDOZ6 +zLvh-nG!dOTl~{R1R403VLUnxi|MTzuvM>JdU;p_p|K^|nQ^-&yF`Ohnr3Me(v#CMLbWs)bVtcn4Ydu)6W=E +zAequ(K3XTKr|UHJ);dxB%o(76i!S7vv{x2QUls~6`-J}28|FV_pufP4h>tFxY^|wE} +z{`QZqzx{*jU;mZsZ~yA`xBuw++u!yJ;|D+fjUWHkkALGo{nLX#{n3wq_s8G+Pyh7C +z-~I7#{OLai;vZ4rAO5F*`jU&t{z%XK&-~o~^H2ZTpZ-JN*6+~k=ruq7oge?!|L=ct +z*#GaprvLvJ^xyyIOD{po%T@XMOSAqh=A2IrNy_Be|M2MVU43c@yQ&F1xl1s9<;7s( +zx0G87roJKZLF(xbqZPtuux2+HP +zW#Q`OQO)QV~W62Ql;(80Ch(EXg3+?2(H1m_>*~S}*W_?jg +zc!KL%CdYhEirYDdY?=$-ecU~OJG=_Siz_FLTm{mQL5izZ{<#VSpDQErT(zRkRV(9M +zwZhDm6is9P!PH5N+4IQ=yA0sb6nj-*tqIS8CPBL;%bLn +zakWvPxOxdm;>w5+S4MWY3WSEMKw7xkASPTL9>EnY7Bx*MmF?DgKtR`o%9DS}obsJ{ +zNgR!tPqxdN$eF5F?1=Xtodgy|i@Sf;6HO`Ww5DAum5obem=fn|s`$}U3ip)ix +zN}=l}cB#s1!lY@@`hc13%=-G1{!1lnly09UjD7FPgS)*Av_NFQ +z-6w-Vd{I8Kq@6hyLy_7{px=BYh>lAYW(z^1oQSc=OU|B?nF|-I^>m)rV;aPn!bity +zQ=L*FL6`NCovfYqU+;yY^AUeysQI +zusTL4*c#!YzDYk#Q<>2AR3#EW#Z5d>SwhX=w@f6ml*EkiQ!R$WN~D?jfyQ_W*^1A8 +zhoa_uP-%=GWu%F)_?gPE39x74S{iS3gmg+ZPZraYay;o@ie;a3>cO*?p7SBpsmkqtIuP6QnJ6tuc)V_&%PL+$R>|{GmgU7_1)t1^OQDMuY_U*!lB($nTB)&| +z%*WGu1;3arW|vhq(9P--my2watl-8#kR#TCp{b}=RaT?d6Mh8+ZlXX&JD +zR^`qd&L(YX2LlJj&1s%ja2q;glGv@)>VUlK8dsptt$SFC9H{=)+|(xrr*u=4T5U68K3+v +z`0!ybc9-F9eBx+ao%lp_?*TqB>?W%RY92*pGk^-X-!aYk_yuYV?uQ~ii4{jTx#I0< +zx5>;IZAVumJ(=Vkz1fzKrRLQ3<^$Ar$JiY3zR(48e0un7-ISqd8)T1~l{>x1$K@si +zir9P!p{C_ZdwMOMXW7BwhhP8tJ0E{Sk{wv7>{Bom4L5-Hp%jSF{7;=~7El +zQ>i;Erka&&%k4vHvQl%yng3Q|<2MR+Vu4$re%oB$xB?i;s>ojw)^ +z-RJ`wJp)XqH(&kf&c#LRyS#%QH|wtlXqcWADJ{h-QI^#o|7M)Z>WWxd(xkPvCU&!m +zzG?;MuLhT8LAAGCtobo6TXDSM;)wWl1AaGt{@ndx&35}nL;Q-=hvZAP!qKx`5WYC} +z@%XR{xU!bMSSw%LmHs3Q?)_!=xt~B(#Y^sSWVX8=ZOcUG8?Mkc<{ +z(Fvz$;>6-7!^#9~J|W%4qzXE_yC5x1lb(}h3tG`8eBYVMRAU0XomFDMGRJv^?AEya +z#Q1X>6Qe2L55XgbRT_(2agYKI +z7&Ru%jWjZI`5#aYW|N3D*wxO#pnL`JoBOFiQP;LJ#35n5uzhKg +zlvW}!KNoTnVHndYnrid*fq-E+!5^$T#J=Y?Nk&mkZ3ba5;4wD!r9kL!QPa-c*iRc! +zi@BKru8#X*5sgqqLXVvllA3VgDvHG-x9n{|D{;sU^+nW9-+)*TYzu93$eadiVTBlJ +zCb+D~iCFy<6K|oRA1LI&G7k_;LmIS7D5BITlOalr8bM}?+BH*a(+ERJk*8S-!*oph +zJO=|bY=j1iR%?_XWK2#hMe+)Z$4!k}Guno~Rm7AQ8Vkusa6G~XL<4atEj`rE7szOH^T65Miuv8IFP4_3ptGQCgaf^iuOKaJzl^G +zxUy;7hq*3IZQ{O~_K(^{oTR=aCwK2km+(b_$fwHv7JxR{i9KdkafBY2QB5)q{I?TR0P=rVwWVqH!_S +z7*sxBZ~*$wvO9A7E6B@rT(cxS3_e_s(?KvH)6|rClITxbFQMSI>t;9y{mZ$o2I-|} +z@gtF`vQ$l#2?RUEmygoq%<{HTiXgbPBF#J{&NDLWpETBL5p~-isVspG0m;_aqjlQy +zzfqNHH3D}wA4x-HvKR165p{YZ>$dth9j516WHzaWBF4*)rBSA)GNSrZx8%|x3G8WX +z${5C!h^&Ebx@bE{6w6lSOIj`>V9S@Z=1B>uh$fTBZEF)^y%W@)h#B$MNgCNym%$fL +zWHU7O5z?$^Hv+Rsuw~&ESVPTO?w5hVCW7P%#gT!4z@-;(UV1c6>q^nqG0$!7f!j0; +zXbEeWj;Kv*SIHzzOc6;an6#Sc1x;aYa?ww;g(os;5c!bps0K?_^@4^)<-&Dq%6-Ha +z$*C1xGK5snw7bzVa@w2evnoaz#0MK&7$H{at1DICduTEFBU>nF{;O!14qZq{V(gi= +z1IQyrYaToxi-}F@+Qk^GmA0WSA>9@7yd4I2_z+;yB1QcCakbEy?R}nBb_bvmx|rrT +z{g|W{hn+hW4-AA2h-Ry5V6x_K%$1fYHMXcklaFb)w%^(miFz*d__;6*6&S7vN}^3o +zQlvQJbJSR3gKSDHg@ii8 +z)3_p&hrhXRP8{U<{M>-B-e*KTu}q}ifU@kJf1s`0d>k#bl88&mscL8Vd1FqnjOL`N +z6-HMQEJnrH$4nB=DkUanB)m$g2Q1ms=tr$2MbKD{X1Mxdva%pku{narayTRcPWT;m*Wn)!!Y*QA$G%EcQ0=iQQ_><$B^nZ0 +z;v$UA4o(s>$wowW8jv)cn{A*@X((`fZGJ|EN2&D$QHs%0GbEj8lp3kA +zfWn*cV-3mBY6J>*iF;0?F%H`dAc=dMtwbOYtwBhl?!4=(frXr(OI#3y=uuo3p +z5Ui^a10ST=w8m{&r=%Dq3r?OxvlN8r8xS#sFg)^F@Wg61{%51N1ip8JtdU>dc@X*W +zUfi27YxExfLXK4VVjhPZ{0o1g4yWF`6#ko9&ZVcqqYfkK(~g>~pz`?&qLQnKrdYvf +zbu>-TMZ79(i+4J~s?eZ5prFoCDP%iiS4IS-Z5*egI=c_~V-_-pULr{v0 +zq|`dBnx$tqOoy~LCN?5xB>A;iBgb@WPKTXV8|0{2SgpjSqw=hW2CD@yjc$EoE_|8R +z+tm60x)Kc&y$G|;3wIZ9Wd6cWEjhibgBJG5&76q#wHXJ<#Y=rz#%PrvbJF)tsH)=4{qb|N@qEd6fXsD82|+VYPZ#|nPE +zXTuKrsLGr3zPbHZs2$g=Mz}0eYzWuXUbvFT`CeZr6BoO6p%%q +zlITTZxgyysbZ34Rrsi6|Fq)+s!tAZ3~&fU)}x^A6OVpsV4IM_R6NFN!uQYX*A5lNbjmo +zT@C_u)@9r`59>vdq;Z?TNz*Wk1nGmewuRF;YKvCxYjU2}ktowX3SY5Tsc%Erp;16Q +z#oI?0cn_2Fdp5E20L*#|JhDU6gjw&oDNb1X?N(woNfL679CQceWyrB+(TyGKR7 +z7^^%?)kzy5?PMcoBCW@Q-kwf`6+0)5rp`2Y7h{@YP+>OGWY37K+*qRF6oYh6&hw91`_r!E}jkb_XE+GOz7Kz%-FE +zcW;p??i_Di3we3Qr;9{>Y5ihkyJl?iIvWvkZjw2K*9u-hf*#aLIPoM%4H4vz-buG^ +z-#EK}zeit2KcwdCZV+;GZS>WUCbxpn +zspiCvmWXYdG8AArdhfSp7@+x@U=8&B=zFmzFdPS-f_@ +zH0M&G+`NChs&P0rCVqMo=Fj&JW8!#4eFJikgN3d6r3UQ=1GRFDV8Tf?b$;Pen?2_6 +zD1VW|Nn8V&uth)j;_eJ|LYKWG0N_$BqUKOOap&F7ugPI>X<&5Mhz*}|T@`TCAw +zgIPE2Revl;)bmPIyN$UYef-XQA3k~e07ubNQS}nIpipZh +z*yoF#FPW93RZcHB5QXlELA*?e=2N-zAsDp!X0^LZ%kW~FG#R0@qoJyil5dm>Koc>P +z?9;=5B29myjN<{pBs?wRMIlbl0qI=C%R=(AfJY)(%G%f7Wf+*1Ps;Q!w-yc*63Y(Bn?}vZJ3hiZKmZ)PSS)plOO+(w6~9m +zc?>R2wS91+X+|fhpGKS_+i5ZsWeU^1qdmC9>28wHYLGQnpYBbXc#LI!lSi|3V3WPp +zO|_u?WpbnE-WoT>Bp8R_(`ZuroF;deR=RE{GQ2K>Nu>pH@OVr3h_BqHUvIzqI@XLj +zWy&r$t}-*z2IIF+k?61E-5&>R;?-AotW}c{Xk%NB)qI5TzGIcqI8#$ChdBC4wi+HY+A8ZP+HxNLl&mOm8_=*fCRUbHf%P6B>-Rltcar&Jdd? +z>GU3r`%jmfWx~I}F;>+~4#lKi?4Ox6qBeF;llt`8@ur+0&~TAM06TF#n8?L@;S%MKt# +ztj!Y)FrC%WrS^S9-6iIq+(5k?ncsP~Io0!)A@aEh?`-5e80mX=pB=1>*x55Y@L%Mp +z-DH5uUBhxFti0a*u4;#{JZFM6)Lh +z2RPwBo6k$^nDO-A@Q`-ZuFsu2-WOAKbAIzI`|?4XX6bxzu`I`eD81~Oae_36gX-EjB>V-b=r+om?>cJdt!Xk_I} +zZ&};royUi5gU?p#BuQip7oUOvzxnv^%_kpx@Xp5DK;d*|ZKci(&O +z%@3b^{PzAQK-d=_zw_27Pd@k=dUEZ7TV-oXxp%+!@}f6PMsN2{oXL!Y0vRNW?-fE$5cPle$(Bg|yGAx9qm|0$H|P0} +z52xw0(HBFdaFz4f@%Y}B5m_TxesII(PaA5S)S%??;d2p*WJ(=nZ*rVTk5XApQX84) +zh8y&jcy`>SokPE!Q&j +zoWi4!odE`XWz+Zt%-iB}$C~0>qn2o|u4-HyPY~KCCfT+CTR^10>etibJN;2Qe1)AD +zNH4M1{08Z+Hu*{|hDB;Koz@?7|Bcj~gyIw-h^Thp8~H*ZzAt9u>7br1RWGK>h_8-t +z68z*Y-&?%CRwZ9r9qw}+-{j-D5))kEUQV_rnFo)43H6~rtA{&|7>(K6dTR7ff@i>n +z`kcH@WbYHR$zJ2bmWZ^KEa`dg6C4O-^&Ol(e$%;j_(pmQv9LF#_WQSP9rk)&JfGCY +zz12?q>FEu;@Yk>L1kSP}IhmO2_WeQifLmCf>^rO`giF%Z&^!ZZemNKC<4mpU^<}RJ~Nwbh3NjSd)Z5 +zt_N@8it1bZ*?-5z3K^xEZ#iPFeVJ&%m-D18@0x_Q_rc)%@h5Ng)@W&11vGav;%v#U +zS>C$k$t)j5qbg01`17j)O(I`0$;ubHiHS++XT5;qS4U@}JQqgRjqBK%8 +z%oTkgCgo_77K#|3p6vW?OFzMfi@Fx^_~}>>i3Fr!3?wh~bkBEohgj0mvr?0kh}Qg# +z5Zi~O=Y!*K(iRzh*o({|ad^p8wEW0Wlbs;d_FX18qXWv~%mzDPJBU@<@{e=}%WH)XAru`seZC +z+1XwCnUrqyge3^mbP*XjYVD^_t*xd+u&ZKZuV=h=aB6HeJ-ncjI@RWG@hyP?`V`s> +z6p!d^f0gs|8#ME1XB|10aXBs{{0Q8x%yX8e-%M8f@tTBh$m$z{Nop +zCvFLIl{dxP5;dQn@Z$HDp>ICM)v&>9&Otw{1XB?#2YoRiMPwjsDnXV>kL*5SWzq04 +zx4GWCOB^h*8lj}M97iUun+X+VgsDiYVZA%s3(NLa$I&@o>f5)CxIjE_sk~GLwh)d0 +zKqA5e#p?|`1U!Z`3-vZEuJbpOfQZ@%~8TYu}~?RP$T=dDlP +zdAlb@RF{Lz?QBB~sIy{8G&>QUFMA;|2GVLDKG7=g6`~^YBUYw~lkXs`;*uU{j8-;j +zc#IR`wz;rCQRETRDKUZ;pc$gFpCZY7QC6(+MVWhrxqE*FUFg`W +z%p2;BuyH6>nX1=&;J=X`+p_ACVo8hfj5H?6E70Cl^)@SCG&IfxW5!?Y#gUcHZ +zQtR6O=HlJtU{IO(5Iv4tgn)s&mUg}%dGum1%6mk3!&HwE`ZGSVrJWm-twWt9Sp-3s +z;_-yJa>`DUFC@_-8opDd;ey+{1oatYs@ +zp7ln_GAbJq4Ml(06h{QwpiU@3q)wKqwiUo2fUqD3-}MmHMR--(2gY*X4!B#Ges)D- +zJi1IdULn14snnoKvx(R`j@Eitmi+-q#(inmEix{HDD?)FbRJcThFeFtQ)bd*%ae`u +zj9Nk?^*lu%7a~d+QAkfC`3u1qJc6SH8AMxQ&l_GbU#Q0dk*p{C#D-T6PUZtz2vF&5 +zK+~PmP&^^c0X-ME7b9}r%Nv~z7rZ+5zKfRJ#X?*RDmBwMSRiSQZ(DI(!Mr@vh0RVNR^Et=8Oo=y6(u76! +zoCNH8y6BG@$cpK5T(DL^gK~2B?pO^5tR0liAY;6ywQjQzFgO(ntur~t2p-jPT&Tg4 +z#4`G6N+Zt&Y6qeL)8nqiwQ|0aAto~d9>26%{x%%1yuI&sFU1yE^9H>AKEN8o7Q+#- +z{6>;4F)#+dn-POX{GFMU6MFGf6l$uhB1Vs2YX17BkOzil`imM<*F#(*uv3k=npIjD +z5trluTiz*ce4=WZf1*^T%}4acqDp4831`iGeq-j`$_nrDnIK6m38@B%?r4fuUpK5} +zZ6H{_aLXOMc&ijRs9;y +zN4bx$;=^og?gFgk_^{x$_Q{(zzp+_KYOmll)NAa6k<$Jmbb +z@!_-A4{p%dH$HyvCT;c91jz-=+RhOkd>0cUarbT5wX6PE=)VoM_X#NzB17;h613o& +zTJ7YeBBOH8OTI54pE})$?Z#Wz?%x$_mg>tI{O!Vq(tN!)NS|jW=DR6v=9^X}&5@`E +zLwbC0+XZdA-D8tjG|X9l814LyC&|~<{DRgIj((mpL+cSg#&!Rf-akSE#X#3hve?ak +zFYeBhBtGww&{eM7fXnN9@ryJK-F=Eq-~$i?F= +zqMg=NZwgoOLM`P^inYSxn<;cUTG73!$pJLoePT78T+kZR@4?%Y#AywK3vToho$84o +zhFhoNkhdY7sABiT4U$FAYvDWWtELL}g13<&gO+-Afhf@024#i&m6_}V +znB1ustQMS}TV>Z;Mh0o7$2O@NX$Jv8Z8rLe@RWqIITVZZx@|hzXC_AU_v#g!wLsqfg+qZ9_8Cwr+y>!i;$Y +z&d9<0YxK`#yQ`-Wvb6}4aic_+_$0@)KZTaYf_-QvIhv6=HX#~j)hn&*sTm4MZ;H(9 +zY$ps>)p0&VA2v1pOe>-g6VjZ^v9UC1gm-PjNdtyBjE>G79`)w)ISsDO?_frqo9Ww} +zF~tMYun-`fheAwhUjGb~jah$V3HO;uBX<;QOXFrCXwSu%QuBE2Pb3WTIKeSoO{=fk +zJxXySTTq$DvcJ8r<_gM_s2WI`mt2by8kn_#R^%V#uvPgQQQ0o3@pLzS0PzC7G +ze@kI(mp3snB<6!5;$S?T@*0d3zNN3k&CKe{9t=i(mX!vbP +z48KQ9vTqIx2aA^w>@J!rqjwgxbF$}Tx{sD$IluvK>zIrYrJp3iy~C89kNAwr6k*qJ +zMGo`}#J#KAh+a^Q=8J+BrdHYc*D} +zfm}wK7V;#$3Ejdd%+Dc1hv?aJ_(|%v(Hol_sFU1|4g%%EKRlr)_%s*-u{kC-$;enO +zn@UpIlyo(=f8j!~tzurkg=2HpFEB>Eg@Er(8t)#>weGT%WRCRjoj>3>EKbEa8mAE- +zbvT&jnr +z(h=t7>^&6`4S}X2n}{J6(L#$Rv<(R7rWBpF2L^~gA6$tn9}Rpuwv7x__APeqj0$cxt>JwKxDaHRNWdxfGP3chzg +zK;Zm~pdpR9O|*wTk2HT17*Lc{CPB^75cDOJhRe+asjzYpIj4sa4)x&$htErB|6(iV +zC>>$cxR|MmhA5VaHEAN}r19Hh2z+js30UcgUS*{snU_dqf=;EQs>vd=`YvTXP5GT9 +zbn1dwTzY9Bl@SLqJ{E&?a^?=pFq$@Vp-OmY*c>~Hy!C*f1zwAz0ac7lh4S2`?*c?J +z*@W8R^5TTg`-Syhp&>AnYNcA3AT{jG6D1=)`GmAM&@dgwkS)d +z$PQPCx~WXZ3>ufZX|0G +z$tIlI24?G|iV~PbZR(y$irca=672EMYFI~{gPUbfr16%ZK4bE>Ag8=D+58NKW>L2` +zaipc>#*lED+hVt&Dvywc(gMs1*i8nBaR}kpa1*PgIdU~61ZziuljNbmGCB&bGR<%U +zYZIrfn$pLY!t`gVYm;S}$}>^XR}SlhNp>zKa?0*i?YRlDoXKR6T>7JuqXi;lOMVRX +z=(}-amOoj%m~Dx^r$`#T(KXk2{ag^^tZ(i&&|F~e0V&}`h(s}BK@!Wmbt>C&n8$Wk +zCm2}vdVXqrQC{F^bi*->b+deUuQw$%uc?{+!a*lV#m<=E!Oeufalq{Up78-hBGZb! +z#wyxlNCAZ)dJZ#8s@wuUIXP`uO#$;G>NEg*vyq%Rb=A81TO*iN5;@^F>R+Zt9t3MG +zRO|c!T!|D{smYFJE*BCqCI*h&QHEEuXqooY;ZDB_oQ=GN6K$OG`0ed}53$*B(1I@t +z+&7QT?%!h&>f1SM4}Gms;ht2#2X&(;fr=`)5lT=-2+ +zc^FAIxAuzlQH>{zEBIfPbD%~pPt8Yg3-tZ{$s#pnS+awP@c>Nt!DJd)0|@uIbs;$- +z{jg9-XKP0f_oQiGkVPRDJk)YR8%Q>?zw(J6J;?`)GVv~e!?eN?8_zv9Z6-AHp~Ffn +zh4nT@7fd?9Q6{Fu_l@0!i>K#iV-{0>7(b|tWEAY!&O)B_bCH|Y;A1gyyKF|% +zpvmey4Z8vb|le>4#WY7}l@5mL28UtAJ4xQ8A)MqZ`Gj#9}h#aH$|2@iY^O +z`%O(3)CHHEwZJ`HR8t92g^03rDEo>($T(Xasb*piHcMeVG;K=ga&&TH)WL~k0wKdO +ziGlev)h&y%e$&^y1x-ox=Bjn<;u{M0q}dvgxFjeO*{*Pv9b_0>xn7zY#+g`nfbl>HzZPA +z@t{qIl}vzRDMnHa{pYjgke1t^DJ(S*)2LEjiL8Dh2Qk~37*dN|WD7lZU251aWW<@y +zR@4Z-D{urGuAdA7V9~Y7YYM-mfrpmt=G)nPj;72xe6@7S-!Mh?XPTX9Q5arBe63KG +z^oyRiNa~kZMcCBBogI`R%QvQani{&qQ!|nzxa&MDGnF&#&y196>nsOpRhWmDH|@!0_fV@0MsD#37R@xZt*zIW0i%~6=>5@KiK +zY@Jv2(>J$H1^@h!yL(cS^cFYtI!S_O8Ve^eY?1h_3G43sB#BRq1OG6azK924Z&c9h +zkS7qk*_2-hyvwuNog+PHeJV(vdsg*+SD6q$VwB65x`e?~L{SdbV-h +z(4CXxFP~S;Oh(a|eiUkkti`TRaD1+F#do>4&e2+v!=@gnEaNk=-Tv@(U2Ub(Jhy#| +zV>>9c?G-yz;}`w(?W{_VK2oLi#{iuqB8i<4ZMu?!mF%(K4;{%ekKhbzDWwu$@c91E}BHdscJN_Wzl5Te6sT;;b~V+ijK{ow9y!U7@Jlj42XOm2ed_DCUGjF>fv{lMN43lv+BnCN3t8D8! +zZqIQ&_0LOM#4npiZ7n{8Tm1XmRnx(o)5*nv$NBCtYjYFLBf;ng~V|RW2l@j +zKm@%GwC6<^aaq351ODuF>ojdRoeik;1oMKOW1G4e0k^fp5azdF!jz9 +zBTF@(m#LJ!bkqnE$qfaixD8U9&EsfMyA$q^!o;_$SQg^CMgq!FeN=`H=dw +zY}4ACA2QJea4gGZO%jVRSHziFDBF;^l44#F>@8GJ&<;YRIQJVENfv3LS`eXf@&PGd +z%CN0wP}BFA3Uk`;(^}mmCdLhX0#wfjMv@S@&oSH&88Z +z>Ts*|vi0X;wTdI|v0g1%t46v&yp9{y>$q{Tj?3rkxFTK0m0|;Ku>mL7aeBIrYc@PP +z-JOd)jF#4|?mfSv +zG}Ax>i^=M`bai)WAYfV=jG%`V7ApzDJ~eo8lAcM@S?=_RWMDpCcFf7hsGh2{Q`!f; +zXo1=4%sgax_{DB+cFcImD}Bf9Z~pM5K7QsPQwx?MDso~HYzif}H* +z`!wU2x6kMOWs&mgR;JtlmoJJG`MX{iwHhr;_nlzwl>zYn{=fd~umARCPO!ag{OvaT +z{fn-{-$yNg?hh~arbyytZSD6%e;utV?Snx-&MiA_$4*m@!!Ov +zgtv@lj28dIcdx*-qr{DOX9$F3RYUytZ+GIiq~IT2Kzi~E!AX~rM!!p-<{R>H;o!_=Knl3FGRZ2zi4vDONg&$ +zleo=(TEikc>~0v|w}X5!buIV*z8(MnJ%{6%!-@m(b`PwVpWc1;(|Rg5;%8SE=s%pB +z@87(}N%(CFwIAK9@{|079O>Vb9_6zio^kly@u&TlZ$Eog`APn{dDYu5ysG@}_*41i +z_jgUzxlT5d#*iNMKisVUCeRScziSSDjr-a9ip=`;um8Mn<-f^W|I1(h`>Q#Gh{3;o|Lg^St-$Zt*ss3-{?A{>$k|AOxO;T-@bGV>ZbM%HX|GqwwK(Hc<1zMkZVxsp%Rv!af)K?hbiE{1?FGideOpROVQ +zsu?ElX8BXOxH{p8uVFEc_&<;?=t$pXA}r~Uyt@wap+mKQK|9j%-K(X!*O=V>ySwC` +zZoW!?noq;qUx=5$l(~DFpPs~?d%D+S%*3f~wBirD(!hN{;p_PF>%O*4Q0RsCl%4pL +zFvWp~!E +zj}qa3`cAe2-U2-> +zr7Apq@#!yV|9^Gm61Y@beEWwUX5;hnEMJ^n99ofJ)9c3$K5PyY1j#E9FkfBjnztU}guc`q958JGL*;w!x7f5q|cRC(Ev +zPt2|0J`cB_yEZom==uY*4k};4>Vci~{@=e578F{3k&<2HN#~#bWBKPM7V)>g{(ArJ +zm-lb({_>Z<{~cQ8A+-)6N{s)9d6|BA$Z5SV+UR~KqWH@{{m{zC{!q)#8{O+XwXcyE +z`;h*wZ@hp1@#l~FLP4RZaTQA=?pfnk!nn_C{T2T1GB0mFhRVYI_%L6F@lE^20)Cj9 +z^Z0r>zl8Z|Z1Yc_%+LJgUHEvCiL!7NlyNic36&-?A-mNE%4U;wtu%IM!$EyeO=2nT +zh8Y3xLVVCD +zd=Xe|Vz=2NX}n16-rgQf$Y>f{`KXEQEI!G6fY!^#f65*f0Wv6=(wY{cPu&wCPs_PheH-{V3A!OW~7ZC-Ig8+WsCqH3d`&8L}1~6^>s!K +ztc?z#o7`UQXChH4X#*G8Em!7}7ok&yfGsTzr`q>fBqF!Xu4w8^ALtgjN!8AmOFiM| +z2CWrXxJc;HofNJ!OlO^Mv=6R44}m-7(ilUNBm<&uRLSV;}Furo?7SJ?tKat@mq +z2eJV|WYL}PR$IaWi@kMdQ2T)=ojn*HHW(NDPF^ejKSW!MLVKgKee||A6n6v`0=2~p +zHk|F{j&JAF<%11thIICzv#@tWY%tELCJtBZw8rNu+;!uFaLdl;)4#!wf~aC0Cu*7cF5vbPb!4P}XJ +z=v?lROq_g0&63~5d$Q4JTK+Az?(smU3_&a!2~Z~ZB-#ruT(*ytXnC>CbedC20_Bb)b+7;eb +z1DIFe(ZNsB>Z4!lRtH#>(eqJLH>8suBI+5!l9;pG(;*BvgAQM2U@!FmJsJ$o4 +zuK5Q1SlQCQ9-2HQQw`Q0UKVzjDV#-ih|b2Yv5}W5Ml?!uNA3KJa4`8V{&K18oiGMD +zxpsuF9zl>b_uQ#D!0gH$_{hxK4n7mp7W}AVcFcAtU^$sBA=3*uPcr0jG|kaEh>Uik +zT8S59KXURP&?bhny?8-gdFsF`v|+TWEN-)PG1#_3fgX2L47$Y*J~=x$r|gtl%|x9A +zng;4zMzP1RWE4=071S^haSGkutct?jG6HdaPC3#~ppO`35=HMiPG13;#2K-HLB1V( +z;sI_{yAjJF*fucpTj=AsnAL&S_KgHO!=q#ca1jB1pfJteCyc +z^H|pvA;RQL4%EiVu@^OkuS7uSI@dKJZF7{xr}VCTu1jLW6F}wm7W>u?E(v&r1n0tB +z2fD88kWrmgtIH~|$Y^WSL&!ij``Fm?d-K2=WTR8d_bkd9Fom0H?HLdLSITXaM^FV4 +zL3Bi5M{#dN%Gwt?f}I*%0hueWNL&OEz->vPsg{(P37_XMKjb!W$n|X7)bi0#0Zlj) +z->N{f8PXACEb$lSW*6Tcmx08sVN*pXE=U`Q;|DBM{9vmpfnwJaW@kZO#JeJpivvM! +z12$Xg&RQOczUoEYGtg8P*+!Yd=D^VQ8zH9a$E^l6PYJ571mW7I?rwtab};3p^B5*zKm?x!OO@@#Nb?%lM!)+ +zM1Us*z{CW%FJKQab?2>1>|MgyBd{rvdqSb82_%qb#j +z@-ZN#5B_VggV@jLVQV9ih9M6myqZv(pp{Rp{1`KpcqR{=9RD@*lw?=fCqsdexUf*M +zps9uz0=jl+<7DFG?235$mK+H@lafd&%7eI~b+&0VBP!6M($m%Mt^Y#q)@|`XW}fPfHj4#4}_V^|G7TVM)aGp(dD%`H_Y@LaLRiN +zbEjGx))4_t#R>RUIJX~nc}yJU_{`z?6O_m83r8DrUr?uu-eLGGLI>zhz*RWijr9m#7ol@ +z(u3xQ6UQv$f*jF+sxFuHSQ5zrG +z-$}pEjrg`7fRmo`ZTmWD9f$ruGnhl&KfQKr8F +ziBp6-LD81cPR-e&i?_{(yne&&j-naS09+XZ16{&G#pwhJiX3~Tkon$=z2Zxe8VMIQ +zVXmq`nQIz>EiK{dw3>~BVcLhbRTd$H$FfqJaQJSdhO5`jj3skGV=$vlJ2aggQ+Lve +zy}MNNR7K)yWd~EzS+L-Clrb|4f=f}c7TavcVh=16IXJLqyON-FjTdb~9CIL(ID0jb +zXLDd%QLxNn?C4A=Vi2@O%^fDpCxAEA!ORwRAlcPXJ6pG2(J3=;_Siq3kPc|c2D_F& +zdEorS6Wr{LuvRs(DH98mT!ayi88qFc108MqU7%>ELR~8tEF~>mdMta1nKgtgT-%SC +zSd$$KD|luu<&GyFk&wiUMYfXoGc$8m3YNUKXnohYV#*M!B4E(Ru3a!ydFz)^`vspX +z?`?3o$ddK3p-GE>JMTu*m;s-ncyy%}D^m3&hnDUM?g_bWom2X<(*T-z*|;H9bK=z +zU*Sw)R^-#i5AA!i&O~H)o&3e#VzFw%jAFV>WJ(LVzqs1=$6HLmQYHHa5Iu2_*G`8O +zj|cb}Q`2Q)RJI@!TEh~00hWb(5@V9mQSt}6XtA_K?Xj>IYLbJ9OZZb3}#D9kRQ}O@x%QYY2C65_>EKJ0QNpS0ejXOyotzyUK5D +z;|)b$n?q`jJz~8@kTrS8EioAfdbOQX5aDaQReUW|3SPmYhBgFiEBUfB9oD)p|Y*d9lH)p>48Jq +zqKAV{>0~fCW)YfD+jKlS?RFDGXJ7OyRQq@lKo|_>RCIE- +z)^4g;1zq95c|cKYbz*>S +zZ0W6ldwRy^RfSNRD*HOVtD*yatEuAzIEmB`W7~P^wIbN;hcH +zur|S#JlX^ecUULez%1B~AR&hlPd0-?KKbg2NFl&|5Sd3EqyU=~ +zN2$yrfnPI3&s5ojdmRk+D**?CW@!AtkTp^a5Cs`Cq1J(zmi6_@^T(z#JwF0NkRSrMd4MtkpW(s2@96U7 +zvOV)oP;keP*3Z{qj(Q?2&4CHyD`^a +zy(}1aAy|;&Lr-SzVeexl5^m9^l_vHiZfiqnF$8;1FC!w(uK4Un<@*IsSSDzBp5e*& +z#7KhXU@}EiVOxkCa&+ZIc*c!H#T>vbGReq0svV!2fv`q& +z-!#lDfCv#D8Lw%|7QWeZ_5(lpWp^s(%nw>f+!kCSE&K;QNqGXB!}ZBHPx_xNWl&N)G(E$yi42{Tr3c +zu_L26ImE;*;s^{Lm*vEeV~qm*g*j3?*e)s%V7rD+=56wJ?(rbb8!q_EuWWRl*O6d< +z1`V(nzjl=-7K?N?_dPa(A<3>S1A0}a6nRDr5__5TvV;(_0z7SKRKqFX!Ho--uRXZr +z5!qH62P)fO=$f}5KiFGB+`Xt%@Fa$X)M5Vp@ +z%Ci_4#7PN2+GP!bTl`ATLY|OPLNHYfIj&+<*q4p~a_VkdW-&*bGbK_s6iF+0z!;c! +zA8;#$f!TsLXnx$s!6XmR6^~x( +zwwL9_pB9%8Db8$m86E-CIT&W_^qT{nCTfd;C%hUHQLcWSLNPl2#33KhCn%t8HEbZO= +z5R}Q4$!L8D8>B#v=)h#ZSeqF*hOO-J!;kaXP~?wTMY8l0H6|M;+aAUC;W}{vxo-GQ +zc1_V(HIG$WiIfmi=8;(0vFd|Zwxd7UeFt!JJ%TmcKI4e6jdqUE(dK6)Yz;N23u7G0 +z8)-P{JS(2EEfvXZ+tF1Emq`KS2+B&vn*(2)hlqZ|kD5$H2ESO%S$#vO{>D0i@}%5WsFtsL#%HNG2D#%_g3R*r9Vc5q>zpThJP3)2y5v +zI^C8ING2AB$(9!15*GHPS^ja8SKBVptJg1 +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 +G2Lu4P?zKt) literal 0 HcmV?d00001 diff --git a/components/resources/adblocking/easylist.txt.gz b/components/resources/adblocking/easylist.txt.gz new file mode 100644 -index 0000000000000000000000000000000000000000..8677476ab4d6e78896c47954a53ef8f21f79a589 +index 0000000000000000000000000000000000000000..8fb4be557105111afa2d989ac5804ea056b5a628 GIT binary patch -literal 132650 -zcmV(%K;pk2iwFo#sM}-!17%@zd2DHObS`vwbO5xyYm@A_aVYrx{EAsgA>TVY^?vKd -zZ11sT>uSUHY9;yVgTt->NsvVG0X6`#iWRf-+cy($c6U`DDPpBFT|goMfHnY0pa1-StyH@BBl)-F-L6_um@UvYgTEzeC}_5P&p1 -z(}3T6x7vO8wJ&rF->vq)*{r_%_rLrW(EjPxF+n9De3y|?e)r${E+dM5mkavZ(>5KU -zEkOJJ`|rP_@SGZ+GjorbtDC}-FEf(O64JI*%yhaTEh(s2{OV_^#+u5KQl$$d%Vosprzj5ma}KmL5>BI}^va?VAeaeOOsL8PQgM#wbL -z7!H++0ouYO{3<4CLtAwYdDa$~gJfD$>^5Y2#dS}w37Fd>SwVAh5%j;(=AbKpys)MOq+k@ -zSr0w^3rRSy36ytz0t3i0jUY>YwU2S*Z{YBL)o5NsLN7b}f@ZiN@mENE1hQ$KO^UFMOiIlhmZy*H=M$hsOs$?RY;d_t%1$CQUO>c<&)6Z8Tx+^SQ -zo0AtzxQ1R_LQ|cl#UI|1mcv;5$~@DKr|grAr#&tS|LBYkwB{YKp?Sf1QQL<~pf?3o -zXF01I89!h84h)NU9Op!ml9}3&C9NW`Y^s!t&H_bRvQ7X!r%DCDJ}G>@g6(Oaj9xhD6q=CIaqJ!c?`lK)@!e2h$`aa0y}2;1%H6K%$zn*o3DV2MDtWBA^CtNHjOK -zrTEOQ^oh<4m`R*%0%j!p(YKP4Htkzvf+_D?Wr+t7fwf6n`OaH|M;u8(&7x|HCK!8A$cQanYh&X%YrPdOwh0UD?0%=EwIcKZ{|9kmYk&& -zCO*oT651B5r6$dR@t|~xGo}PaWMDXGIwvRydRfkF21nBs!SjJj+H^-#`xHeR=%cdF -zQM@yCL1<_Qa?=-`(5pnJKwmIrT0~<)Ru*KJr^GRV9L!L|+ezlE(*;!~VWr^reuky$ -zGsaU=*C4j%Oj)eLHp1YQZst)a{7fUz>$yv4$TH^kOUIvnuBNAFKJ7PT08wEwxPn^fmiOl2(NP{*q~o`1Sr# -zr}gV4+|Wk~Z-R=2UG8C^Z9z)9f}-l{$iu>0n6qZq%nHq4up!jwO_O@yqNE)Ko6+6< -zEy@wy5g5&!nU~Q_(GE@u6M@=ZJog?(soy7}fn1P=u0!(0r_MfQtM`Ic -zJ+J_)3L&hdb!QvWu#hrc2AYa{iCF=Y(ju3#oxN!Lz@#Q^*DQ(aVwSbJ9wAIO&`wHJ -zNd&vJ6lO?|01mUbO8C`Ha5HJ}3pA`>2gN`cu)8V0O$$N2Xn%4k9#TMuE`z+y -zq;lp`rH8pe$8@Lzx{XhIRLzS`Qc|BPSqrQps@qH5Q(9++N}9ru5VZNmPMO0Pfu(Eh -zlzAzDdHn9*s513hj)sy+^OO?9`?y4{0~1ELnsQ`-j>Sv_Eo5$nHEPQwl3yR$E$pog -zvv4+yXY*&}W -zr@OT0^fD5{a&htXj1fDJGp-2Odn>sx8AWgY0ZMX{z@g<1sx!88*Xz}S?K>`4=GXn$ -z(zX5F81O{2LM~-$)CH*M!D;QNXE)o2+6l~D4IW$ -zju=R8Mgk1fxl6dA(njknBp>S|?-seK@ZypvsV0v$Af!bwy~;i@jK-wFf)Y;p8!L_0 -zvWJx&wI=6rCiEBeG?SL-)|x)lfP4>?75M1GFqIezMv`j(hXw>5=h_L~)d(%?I%>29 -z=|<29d7HLxYBEMMlq0aaX3{kSfkx4m2Nb7xz^{2zT&e%VByOf@r)MgGax!Yn08;HD -zFzJz`z+vr7Ymg-hn>NGOw@fWGWHvB*bs+P6oicd;j>&&S4X)#?wdET4I~4nv8@#4I -zxaDT*4rZYY>xlu9ninfSSJiy+>Gpcl&|r7N#AuV^**Xgcj~)(Ma)s0rLmcB?&H3)0e=w*9P+-B23> -zf&4&xF6^&`x9~a>c>oq98shVoo8lgrmF9ccr;ZulIHp`bbxKCb7n2%R9z#3$=04?s -zAdCvKP$eusfawzGx#^flv5HO_t;@FMGWu10Ch9-$Rn2*&8Ka#eRR1oKpUVLZ71)g8 -z85u3I?6kV5l$D)H&uYywbQi8*oMFeJy^Te*pAlye-%dkXuos^(c4NqEbIX#8c~PG^ -zyYzXxKi+&ME|@$By`w%EgJlGd@Z|#94Vl9_%ES%GxGz!*HONr{MCj%e%_QHMRv7)k -zxZ}>ITawIxv%|ZiXKiKyHf1)NuxdX_TGwVQ)2yBAx@iptwSHGU_-X4?#tmkWcmvWI -znYrr|bT38mVp}s>SSS?K5_HOYsQFblA{~L*6m8M;HyM1Tw1=)HVA1<_dTHJfTgr$~ -zE~SV=$!JdcT7@jqr=20288uIcv$Y|N02r=uxgk?fo$Wi=lx`CA=`7Xb1Ie?qfFS*E -zRJXyhmYl6Iq_MPfSx6iYJ4Ig>VcSi&88+d9;^J*>V5>j<99!NYJtw`dZ6?!ZV8mjj -z5$sy2K(!NAJX@^T!|q^Tvwuc6$UH(a@6G$9rX6cKvqrPAB_QSI`bg*SAWqB37b%tC(lZE90oXokH%rkGGgM&0V -z<4)58V -z8~4Q7IAF$!XOT?Ws~QeupXj&0qm@eRrcP9Njxxh6&dlS? -zq{YEkS}(r3r} -z2JAE&cY>XShKQWf`YchvXq(Vs*|fm|(ax`?{e}}Iv&yeHyMLh{*zoLZtLuObUti}O -z3k|t*oUxcK9b+-=13_j{TKbG>(WOm|1R1FUCW>8Z>Gi9@q4ovZz9@X}+iNq+({_^Y -zu4|tMO(Zo#Y&MqdFE(iXqA^oV`kEy~yHC2KiwMDHIt(H}64x5^P0E=oB6kYW;gL{@ySv}l+i#nm>Q2cDTe963$ -z(&ZF&DS;XpX3NeMlwFcIPTD~iC{*lmUsciU(!=t!x_HNK6fBxPt<#r~6EsRo+fp`*ty)PRgs6Xm8YNzyVkPB4PcCt`_joIV~q -z7;8}*4TT9u{YBI4m1TwTx%+Yj&~ApRHJ57krc+LDu|5R{MxH3u7@4P0A*ids=#?=i -zu`+rSqNprv)IEk=tznhCYZh@w11TSs4j{}5EfdHVtqAI3zc -zz_p8LJKyk`MX!~_GfRY_ld@(zXB^?vLLarRnwGog#~MX|N+fv7S^|c^f&llk`WFl-A8T^Bcr?M{HdIV&HedFx -z=*1;aZ&GdAcqXA*H8-z>Q8lJDoq&<*9Ul#uh(?jF`0+btLriD6?nFR{L0pVq@kQbD?Xd%e;q5|s^hQ{Pe -zA_ichX3LAb^~xI1g>gy95OuX8tV2hOAFT>rxhiKstSt`@t5{w$8_5K@7K}P~Z~^2j -z=}=G=JT!||D~CynAYc~3qcUF$NQu;aKxh(T6BIX*IMBCI9JS!p1qI6@{I@&E2+FQx -z>?Mgn+BK2T7)wfhQo;{ZBh@^!6VRsimo<_`G~F_IVIXW1dIie~=pMJ1q7L!;=1IEK -z-Yg)-Q2g2xNklN&LJ2HHo8V>5Do;6r_ZZw~dn8HDW<`^fc4JoJzO`cdY(Z#C(mH1m -zsiWEhRFk&TET60L4J3?n1Zr;YLE{8eO)GWNX5Dz$tSly3b)94f*U3iv9Inw2$(D4e -zKSvObK6hZRL^+jBgTatt`4|CIpN%#w!OxymKLVCwmEzGbsqJ%hBka{!Z4}jP9`i+0ym^e -zFninqR7S>oc?C1HHWskq*K5nThsnPFo6{-4F_lf!y$MK|gASI;Q3jk;j2$dzs%nx* -zt-m4^bi2H7fp-uOKv7`RtUxCObG!V*oTm2IKBXwkZ^avwcPum68smNnChG8bSm`C9 -zbrGf?V6yTp<2th`3(+0}n*?bA&n827U3$t-KVv;$>hhje9 -zjvZ-fJ=a!uUh}JYnpJqP*%St*;9~rdWWWA$MvWx)yhLZmV12cP;Rc8Y3*d|g4)Cv6 -zVMF??(>e>&K`WlWWsL-X4PJkF~*hl*+NyL>KKFOTy%EB -z@@y3Ef|BL;>utG|?~d(@$2p``#=i -zuOu7SPvmwc=!!9sEEj3x5KLslLnPdLn&~xV)%7=+z<28&J%qRtI|Ab~3+GDcB5hu# -zXRV-yc$pmF(mQZEcJjq;15cdwZu@lNpCVvoi0v+03>7nR9JLy&a>2T8yQDC -ze(}=b#x{uN-Ul7%IFTm7$V^P40^D*^N$dBs1SJ<7^Z>C4f$7bN411xeEA((Ob{3_n -z6?W}Yl=X8QpvaFAfF%oQP9D>_J;1s!S+gAruklj<`2DXX{0Bl_i64LUbIi8i?sTK) -zV}?h|7W#ad+oUo<)C(n38-14dbv@I2PBuiqZ=P#My$!PfHG(r`qvaN)B_(CeM@0!o -zmhnLWZkU5^@KF&cFkQ*yheZt71L;7?|FBqqLIf-K!y=vn>r^&0;!U9MfF_bVoZ*CHJuu~^~ -z?GiJ0c){l54Gx{xdrfEDt`NcitmZzobz4f1S$putr?x(|^Qpa09enD=CC(r7EK@dE(lXhL3@?U))NbBj_*LWm -zleiZE1$Ll)fPl>-($9bN$zMy*5^7MT(y|BT#wt|b{~FaR9eW02q{!TO!)(}rIc=HLubc-N34t_LGM>7XM`nUPf4fz?z -zcfEx|mpYr29#xk@81&J?+&s9HDZP1^t>FjNrRF|mOHB`fZ8ck9I)qA%b*h -zAaZ91kaucZkn>~f+z*q@Kj&`pE|V$FXO4<5zx?Gd@whjdYNR$fIb$tu=-M3ELD_iT -zO>%peGyO9ebaU!t%W(4rx8QWvUDbmdw)##2({$nwfa4}YiXlk`Yz(lFHtO;0Du{lP -z?tnSot#=9y41>N+C5&RlUAMF8t&RrAowQV%bAT`|=1Ca)_kWu}C_H_IAlBNQy|3AT -zd5nrf3(}>{(|p*N)QhA`5omj9Us{liar0i$6SY+bwx!5I)-1@J(2*Of6e}?rSSO=$VE-sz(KhAVRsO-Ns76D)7q8U -zYSW$mlMV*NqCfLNw0eN&&>PD~Y|c3aY!>Whn}UwoRK|<*SwQm~1mNvtp{4z0sjn<4 -zXf>cq2%E=H5}O?C@72E#W(-x#^*s#8$5LX8z5)%K7c%)jxpBjQr5XB}`o@&}g%l=n -z4uf-EIgr*O;%A;qq}6jNXl?-}5YT3@{{{4_lxG{YJs~?p5maw&yBe|@*Cr`(@HEZ1 -zJZ&?#?dCv*=v>k~ct&bgv`s+4cnPcEEGE2V?laL{XATZ?Gn;f>pV7!> -zGv2F2KrIbpq~#5pwwkfwt7(T0Jc%!jpt?7$TjKGmKQW%{JpXEUB}_M?rWV7`#qv9B2068y59=qAeyl4IRw; -zglRB$toex#AYi#V1I!fN7#Onm^)LTyKsw4)->YZVV%#3ye?m5QGUb&YXnO -zZBK?E91TW8>e`i~ -zXm~5e<~GE}PUVBrmJH@O)6%d=6$ZChSmciKY}OM|43^h<$wM73zGfL9xO65_KW|Vl$ryNQy{DYdkLU{ql*%;TGG%70G_7G -z0Abmq$|AK3DS*%v237GFcv}u6|L{A5j$-D=Un~}v3+imr_~Gbn@mn30mw@8-ThhpY -z3r|D~64XJ>Rq&vpqD^Wy@)sW=7BvU;@xx~p*Xi(J=ru}5=Bs6u3koz)+i1^^Q8TItthp?4TmB!T+3Tf% -zEdiUhaZDd$f*LI(sh&KtXl_F@bSiJ2;PClYkc28tl~3{fOy8dM3h;pcD5`bFr+Bv- -zj4;G_fKX?enuw+Sw60)*R}YbME=Jyqya%34r!^js6stkDHzUp-80+RKwOPEg41ss$jnSsTq5$#U8Djeo -z89g;I2R)i -z8_jd=wtVv7UVvqpV7Lzx#2iL)E9$|M2N>=F7yz$%p(7sg;?xftzou%gH<3Or1swn* -z!jumBH@uITZJ&qF#yW|%S}63>FD!St@Z(NnMeY2(5)2*hr_SOd5U^?zlH)XqY{&$y-gJ -zfKWRvTw7WH5Gl29CO}stdJw+<@fY?!6;Nl3dZI~tjK!j^^f9=|Vj^w~L7&tC-_|vg -zV-uioy~h%ntT7(0B_Fne_XLrI#fDo{YEKgu^EhJZO;0uAwd`w2`rC)C+>X|82lsbLf<^<4Z3$YUi&ZV#9hnwxSt_b5q*%*>SNp_ -zoe$~aMf~`2DF>k)%i{M4Z9!7fL>kk}hlqf)#n|M6ug#8@zOp;d&*=kv!&rg!O{Kv* -zJl@P!c&*mQ#o2leiU)sO9~ESkOrwM!VVc`7J|eU(wV_NO)_i}DfX4m!#ocM{Ih}I5 -zw|K^t9GR~g)dr)v(={K~ROwtFo^o_#=-4yqcj%z8&Ksd)nI87W8ryS~&a5-$32LSF -z+bf@&K)#RBrjqzwDN15oIN6ZVrn9$@Ene*C;r8S&{?oCjU-zmxKW`>#qlZp`?M^cj -zUicEVGim)nb7tMwW9ED#U;p{>vkNea28@V}jiSeI%tlhDk4ILE-Y`)(aS!pVWN2t% -zIPRryx*`bT8_R^Yp=pp!8gU%?oG+Z@oJ3AsYIq6kgkt -z@oS5x^;S=?|NIy7CsllH{?PtjQ?J4yCy$V!<-h#?Ys0<;nas$CLdKWlzE13P`T!#q -zc${Y+2)qw*^)1R;M1NxiyzBlMYD4kvYaP4%tiS6y-jOYu2l7mQtKhSURiCgF_i#Zy -zPy5GscTiQ0TV+n=sYLP -zuyHlPn*p1jyxl5P&gjT0YeoC%Eg+QEiAx>`s4xiAV7C_0KbVgz5oa|5}NABKq|Hq_q$A -z+J~q)>BL0Tn;@%)_`pL^p@Y?Ky_c+Ayy#(gAZ}B?R~FDg4fq?dzpe3jkM4OL+!%(T -z2Ky6M?PDF%?*zj+^A| -zQ|Y8Dl8n{$N2cop3y)QGpPCvL{f49Z6s4M91#Qz(>Q9Sk*U}?gU~;5p&sx)WQmH0+ -zhSN1VT;>Ui*%UI9w^{11DLlfg-91oG__K9BAm@PvP|}vd+Q#pSJR3V(sVm!gxU=$e -zd>2!Rkxb8;&(nFG1}F3Ta@rX0{S#udXUO%bWz -zy*)U~@+lt4n&+Zd@9V2?T6>79Ph+LybF8en+lM|xiEa4DECdjXI_LrcTAA$^MT4L&c2db=_9 -z*_a{HH{g7RavzgVdj5C$;IJwKV@I$7ubc;3x>-x<@tcDM3G_NpZLACmzlQVBZD;Tm -z#+tqvRUb9~pweq1c<|+Va)(wP&^eP${Zu|7;S#)t26(I4-T4@+PpG*L#9S;ibAA^p -z7WONNAJ^1dO_PA%L-QyKD_dCeK*dlrC;d9k6qUocWPiw3`s`8)) -zMb}zaKWdPgJ;A3sece_!Wn+oSa}NS&Ld<-E>j?(8ivPntb3E^ku_xjgGj8VE(Z6`^ -zO=<{+*r{>`3Ul{Vuh17XxLf0NVCTddH=n6Ar|99y57233|`pUDaNd|9O4h@LBR~C4A!st3!v}QxBdl-=3D6-G2WW -z+P%848*XGiLDSc0wVD3LRMt1iB-HC2zMS(;-JdJTa(+iwz_T%tfBE_++_wD#Fzipa -z6(nw0{Qm2|vTsBd2KgH{EHGe6_5v)*LVsuFttJ5qb@za%jXg)MjrZz3dE0I*h-^M} -z!@)%S=`Y_rDi-g9Z0_;B9b#rlepYE6#M8#3_ -ze@Yh`?^?`k2=Wsw{Qeym{2R6(oZk!srp=2Fu@wQ -ziNjlVlTVBujfWAdGOyVU_qCq1DdAm!h~~wb; -zp`TBCQSdwGl0DT$07D17J|~?kQ~GrA3=dHk?CH)n?*H$amTx}6fmK&g+R-O={6}#Y -zk7-~rZwB9vB1Ke`Eu -zKfd&&lJl0h520dJ_mzsYek8+nbSMbTv}<&9N>4vGL|q-2b>wRJZcx2=t}g44mNw^C -zBIJi5=O5P47at&3R?MFCLazI5G*h$Jo@M%@g?K3VNxvc{PEvPj<{OYd4!ZG(qdSk~ -zW9Gg^!@#O-pHY@^cS-}QKSfrg>NRQMg^zvr4J2v!Eq>8NmduBkKdGSa_G@~{(kOU0 -zc40lAiw~-QLnVxYH~PMj!=KOl$O{6PT|MSKjg4qLPUZr1&1bFc8A@rQc{4WnbCF*& -zeVt);K7Y;rYR!I)>i9hrgR`elbMPB%;rGqh@M}D5{-!`*l=uc{KSebK -zqH2#u2cN -zslQ5B>16mks=p3GcBD0jd+B}Fl{1$8r-Qy9yZBJEZt|C9!74dxSeBW~K1?2L{x5h` -z9@fe@i%&}-nKSJw)H*6GZTbkKHroGrmwdkj&;q`ym`sH -zIDoVvH<%N{VEkfL3~$)bw*Z{azhz4F(s=Uxr6Mz#nim9)Wp1Z1g!1M6DFZwmXFd~& -zVSQc>>T~NRz6!_Xk7oJf4{xKpDCjNa)6?fL4ekK^HJozq1elL -z%SF-SLlgK)3mz(2wZJjyN2Ynp-G-&$21_&-${nKXJ=g-Psr@u?q>m -zMW~DB_G*ObWj1f`WHCr)Rq2z5=Rca?KO%d>`zp@ob@or)Qooz#joh5w2urFXc*ml> -znnb^(Rkh8=p<5TWaxd!GDf>6nb=#1CXZ7&lZ>sp+|Nh;a^s3ZX8`&nT>~i(q_UPL? -z^wu@~ZMAsY;B_^)$%&jB?>xnZ{6VPCoB0oOvuuj|A|WAp7LLqRKS9u -zg8A#%!mob(#Xp#Dp8{L>hyVA#{|~4uvwVgIF-Qlnt^@&IJ->9n{6Bw*7t5`l7q6ce -zZ=M%#zd%p=n{&;9tS|+5iPZGl7X~h!HuP~JFsJ?tSgdJ@8>Ue3L(48~R*<{iLkG0E -zyQ1_<3kpe5L|}8fRzp$~Jo^J)N3`CW*71rldQ)Gn6oZn*^%m+Sy;8jW0&``;febXo -z+lSB|*B@l|V7%{3-`S-D??GwuqY@r>Y`;kF&<9`+Ly -zh=H!Iuh|#8EU=~uKP>WtPq#dzCH3iqW`gCD;+zYRWCdbPhsd7nMcMGEKz^YZVAQ&j -z=&GWkZGoQ16i`=su_^C_Yb**$-eb2+jaxzLALJ -z2Qc1_dKtrT*7Jt`K)R}7LYQ!XA5y5I-9S2*(S}Pr*ncsv_5%gI*4!1Ac35O -z(oWhR6ovlGi{ghXXqY4KjoY=PhDPnkzSY@(`f0gb9C^N{Uo -zv)j;p1le!$5$OfE+b11N%J}5I+bltn|*rB -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 -zF}$rgGLGsD)YnCvn{SXorv$0j= -z78Sx!DvF1J6pK3x8GSx%nzMy98EcYE@Gc3qx03|@($my#xGeY%u%06Rd$zay!NCaEsR -zj^=dI00YGe?An$U5s<^8v#turjM}d-sfC*Utm_=JuInDkfiK@OszbLXv{8?E%0Y0c -zkITjIE0HZ%<(NhU0~WvHBpMtJs&oxA$YS%M?(m{T(9~5-D8MWdF!TwSDk?%P@k&|$ -zLLKyCpm7JgKJp&b+DJ-p{6Q~hRlMl1EU=$i!Xh9*WMdoI)F2dqlfCw=CNz*Ee&blm -zzM)=>MHRsI*T>AF1Ddv^SEMDpd$bF3roNUeElY|v9E@lLho1NL5=;ZRB}G_m -z&1&bFaRd6ENYHMK1w=z|fq)WBY5T6=s>Mpzhhc083QL@96on1g6R-#)<!o=EvRsMS@zGETJ<56* -z+u940rpSswBu#O_(-naX8kocx&4YTLd%Wd%+Ng@ -z?UJ;>ILe%sLakfVNjm|65P#s<^H -z`H~?Ac40YU7(57)KGLP2=(R^XwM}tD7-NY)C7jVi~Cx{L*tmhaT)V&*Z?c$)SlX}Ye=}>bnT5u=x2E2jsx@QGG4%%i-9GfeTxg1Mo_S1DBh(QW&t!6pfLDr -zZIupQMRxqEVg>_1l=t;ISOu}rfz**l3-m@{x2?W%LGS7eF*RT* -zkY*~#6^wQel3i2;j0AZvSg0Xr3BmTNAqnOsNn`&9a0k%NX6~@Qg$aF!P96EOJB$-R -zbBxxbq(sHo3KSJ!0Fy1-t{Xujq?AO63Y4(O0n`myG!XYJCl!-{wZ9&EvTMk3C$fy< -zm)=520xTAU$t4esy{5go!n``7eJw;flC+4V-)paKylg?g^dMA=Wt3|RK57?HpgoZ& -z(aI{)K?G0?OVKpPk6RTjUS6%DQl52b!$|}IhJHo9+!oQj$EIxZg)9q#6)p6aEj_;# -zl%>cpfoTUks)aHtg{ig^vZ*;G3cL#e9aVY6kwww#umrp?kz|pJ6WAhjV*rz;j9!Li -zz+>>U8+8QZ3SK^mH;M(`I1QrqDtzD?5mlB3@h=+CI$;*^oMjBeYopzY5)B@e9vH7# -z{GLrmDUUh|dH}4CE*dddy98_{Fqi{D;X##z#rvK5)Aq1#@NBn=p(@51845#3M&ec6 -zM_A+0!}L|MTJ}9t}V9UsKiWA-o(!vCWfNTiVA+uYnhD#^MFyCNk4xt{% -z-zsLisOU)i$h7cVtg>j7o{ngn2L_-4EgR>f<6J~^CnvEEvaINcmnNj74!hx?j`W=j -zMiZW_%JD*UDhe7eK3TyqCVdvDP*x_kDcaqVl|8u}AfP9L5NgLX)|Mp?%DCiRTp;la -z!$7P}Byc2{9~arbMq?v!Yqg{Ca7msr8j%wk!94ce0H6l~4^+q=dbLM02cR&%pqNBt4XmfsOy7@zDpXm$ -zM)>7`k|z(o5d{Je#CycK6;KP0TLsB`^8*js77mczZc;YxDKcMFFmwXUd@Z^HhEPX9 -z21HL^vk20+)EKR3_{L%p)Hc+XD5{Dvl#@!5DBp|rbXn0y(c@Vh{Xl#8~v4yd`xPRWf5ls<&4#l2eU62T4H|4`l8>AWwt%;B4Y)B -z0u&X_YTOM8ETS)y%VkKy1oahOx>iEZFxV+fZC|6}98BN7k?2Sb^;$^^9{jAmYElXoR5V&@NdvaU=q?;!y0H`KszNa@~|5)(1GWyYhQU1l-r?HgmkwiklDa8FsnF| -zO@TfH7HzZ-?%NppS}X%nL)!Da2!irT^yXx*SRL>GgMBYvJ3o5YaK)O2e{*9R&1dF2L#c^d67q~1sd&|Yd<#kBndw4amepirNX+u -z!`w4izt=HZxc4F}#ttNVUx)X+SLthb-n{|M7A(E6GVUCmc3~LqeVtx?s9>@r%Ou(C -z*M2u3S*=gUY`s}#0kS8{!|Ak710>0pyVD^A(uq#|cTKBtbkver(Cz -z%{f#|(VHznPzRC*C~*HC1VA!Iu&VF$RwZsWpu3dDW!HkLa7-Y2B8u;Uab}w7J#7pcmfSIRxbt;t*@1w1&Lum -zBPgU<{PqSIDcb1dhTfO7M!^z@?JKQ8Os1T-7aDgCKQlAKPv$u5IYF&XWN7U)(QC?k9nsN^t4juEG>N)# -z2b0)85mqhPZ`Laxo{-@1>8}*(s1!#UNp{?9S#5PD$nvBKRSFQN@V9WdfQVbjpccx} -z&l#v1o&r=p=B(BiBV$BuMA=Y^pKR#R*A^{m3TwDSKO({1RcEyUxF=Cvj3Jk}HP?a- -zi`yuHtI!(1A%3MYq0vCs1&c$8ptz^hM&zjOq|3OBXBv1I%mTD^1!~6ck;d8! -zP!q*a1Yjj$F^@1(IQ%RgsyiN!B3BIHnl7z-UwKn7$!Ely0C-G2DM(O&lRP8G&1t{& -zM;Mc0+ur(hzY8Q(q|pHsoeONX7(sd9WDx#&C8_%gxNjh0&=5#nVvI!@$g9Lz3%Q}o -z`i?b8Xl5K`0t+!1$BEuSlK3t0P?6ywwxn;GXrmc`st=iTOffn`Dp=G&&3c0Xm_!{b -zr7WA-Zx#lKxhe~Y*yioWy`$)R0J4Om$J!Gf11{Tw?a7*maj*<`pj4zMv7F;_uXz#n -z^%7QqR)U{)1Kl%Vf*MfY<1B`x;oUm=(-dyFSV2J-rtU}z|0tz -ziybsA+}DSm>T_?-76EV@#1rJMB#*|vj=!Vep)KvJ43E(@G!FuWwdJ)0)-!ss&F~T} -zFz2HNTi&$vU4AnG82RFvHGcPorP{WS<^`0LVC68G24@F6uNO$aCetUk8@cuA$Rmom -zn@GUu3=P6s9Uvd};gSnsEV(yD)Z;1$P)-g4qoHFMd02IC9$Q_-1r}^ok0d;n -z!#_NX6Oe=#b(9H`6BiW=yMIaDBQG$wQbj%Msd4Mibx#~jVvuhYHUt2c -z=aS=PRnao7L2*IPNQg8A5EyhthPR}}cwn3e;MfkUA*8&Lvg6@OoTN#bDV3lG{ykfpIsN`aWK+*XByXlr|0N$vs%0O;=PfM1D;-!{x>p -zyC@p-%w|mcu2UorJhizuv@h-?hP;mVW*CO*HFUn+dGB%37TFm1LR)mAp5&T1r=kpK -zELD`f)=}YY%&u8D7m7!OIlsmZ2~J>gc^lCH2csKrC9@wWbTq`1gooh81Z+u+I*T<# -zo{jnjSx{DC1&|_cGtarittce6So-2eGl2Q}Q9ws&8xc20stvh1L$xmrss*T|N_!4* -zJ8s%?joz22cMbgWKHUTvl-{lDnB@cqY+FOCU}WVDa~*nj}S)rwNo!(sK0j5N+ -z^3q3ZpW_9ZEf@tMnq9+ScGw-g5uoA43OP_;Sx_FmxM&5KhMu);x-N#6W)k=?e=GFhRh;;s_Iff*xMdI6s2A5!vXxzk-2I!`KeAK@X_U -zUp0@dYZ^CurI9iPYAtSdq+m6&Xu;f2Q%a%nx|>kjO`!iKHo*9Z8%jwev^4~`9owkE -z5tjXx$W#OZ@4C9;ssd&58qVt_uO!Py#b1-L%x+=9ypCPbCj;2Ep*La!+_K(mwr#Iu -zP`d<4#w#oQZ5N4-@K!0Q!L%b$KpzxoKN#p(VbAxvxq5#1_9)pudk018e-cG>;%sm3nU@0-*yRG&AT@Y>0zG-Pv!O -zn>-~|t|P_Fj49+mYa339C -zFN)XGP^tZTA{sOn#g0G@ucD0)1tr?CX)m6QfQo=Fg`OfYB{?Voow$fDUO*7T3n|`R -z-k>As@U&{sLN#Py^csWkB33+z9*qc3(;2k5>(q51bhh?VIF~i^7YpjF`_QoMaRoKg5DyA>VCb5%l%FUuae;1i(~}N -zyaxTl14kaQ637ipO^q;!*N$HZm=$BDp{1T##ut*YhDsGO7QZ?2mqou@<8;pphGAH9i#>} -zfeechNi#4DX{@pLe9Ta1$CHD2Qrq4n?~6O6aS^@FYjVq8dvOU5e67SCC?iBbB|XNf -zL^+VwV6Ws6n*kLbo||GQNYoc};Ub&FKa+tGI)FA~T{me1SdRXlP5|Kq>V4&$;ub{Y -zVt^u+GMMvPMlfyMgC+pBHC_kYFtDZbxKf1y6CkvwXWf!s?{dI0B$25G>TF%f{(8zT -zt7QzuhomHWA5}*>cMoC*vjduT5RidleSx^lGM=2+R3)ZE_ClJ1m=#us*U>Mm&(v -z@z`-WW*EVvBAlij?@2Y*Lls&cn=#r096JoW1_H(FwF49w5FX({MwIf%PlE-5Vx%|C -zQkq2+Fy1S1Ax-r3a2_v7tVG;J1f&HKHnU#t3336GbqWbUtSO%K_6zsYyujELgK}~=43m7a4Qp5vS7i} -zflxdGg2E&`qRmEq(Gra&r@fFAm}B2WAORf?G9tyJ3?eSa1%#*RW!#P`Nv#;guP;qH -zeCI7oF?ug1iLT9};lbc*pwT`pqY2de681-ce#q#6hr2L(FhWxLA|{xB8UsQ2n9m)7 -z1&+rncr?yJ+uBiI1lT&T`ek&t1}c9PwBCmD7%^jLKNS%~-=0JMKf>O1%TiQ{7JixU -zZ`R1lx@6VMd}AP>q9_XDWj+0giE9~QcI|U&_wFtNmKTH|t}`Cuu_KHMYRpl%V~7e# -zy@7+rMvscj@z$3BUBjUU8l^VPNP4CnqO_L7v{NEtUyU#=1MOPGz`aPx6swr{$&YV{byTiJIO4ZDk1u+(Bpq6j -z6b?hI-1XEf2v36W>l?OM2qQ{T(y{#{-+xsSMGJ_$pgq2A?se;@#9Lg!x67lT8J#Dq -z60}B0_Gq3Ve@y7z(1<2tGikM$ml2dmbG}925~Xagrz!Dl#{L`Wg8ns+fcz04MxaDF -zsihd&4?);OkkG67x_(@vn4YYLO?zI8X0xps$0^c1*pQ;F8W8&#TLu>(+QznZZM8)h -z4Yzx*gtSE*TiKDMMDZPn?bdWm)yK@&^stR63A8{ok6T8< -zGO0Y>+Sbt7A%8^jdD!T97<$KCv>@04&oas{N7Q9dHLwNwZAxI`vrL?@Afbo0oGE#m -z2ha*fd3v@bH>ZJHNz$U-GU_4=8hsKxWM5=MTbH7Pu9k8-34{qn7DSeVM)ml}a3g4M -z$hUv30;Eg6Apqw(-9WJ;5;blUZ`GN13Qc+xWKD8u=F3~%3%mQ-CSmNBs}2XJzdh9H -z@O&eo5ZQ4pdN0C&Xb5POc0~BB)jDP0+Ae -z%l;_=9*3tZ!BUtTHklG_gLu0XSdnMYiabk7IpCy(Iew#eE8Cp*?W>xFHNAwi72> -zX)*E7!>;7c3DE=&m7q3Eh(QxW+@ge}&?V8yis_tQ`Or-1#=Y9t$1roWylzSS4hew? -zOiHnjavSEBRH8gg@^-o4bkJ6mpAf$L14fi5LJ@KZ5m9o;AwuhJ^D>fHP%ICExaW-{ -zle8<~T8mI|oKGZDZo2Y%Wg;yfByU|ATpH;Gq28r6&brF*=TfIP;5*CGjCs>XIl1Kpmj3J-UKhL?-Ls^ZoNq0dEz_1 -zh&hqwNW#}5o@Nh7%%>UQak`%>$*rJ{eruZR?>0Um7hlT+#HYXcENd-)S^%Gct=i$} -z7UJrwZ$XUc=|chUz4d=_;eZBZ)!iSDbW*!(FDTC(QSpInq!V-!ZRGGR_cl14jl%Ve -zo43gAETMza9bXNW~McAbMeX>!ZG -zClJ31`;As~6iz3kr3~gAGkqeYga;S -zoLL-87;nrfSa1`Em|t}yT9YYdr=^80*cRH4vlT;MX%tf?!ONRbz#8fjq*;)vnFI$m -zgj~dDctHlQb%;-6(pXTu3MdkkH#M*?F0y?dz@&Vbj( -z2yGB22l2}?+Y5m4fn~(&A<${T-WpiuEqI^i))FH1LeUos6&Czr<%UZNA*$s_72OCZ -zIz(ItNMi}_8H&;OxOX5C8qiP6QF1Qztv4q+2__N3uS>+r87U*Z=|s;1E(YUr5ONy= -zXhxE5cOcaVNw=p3`(4QFH{!KBhH?xZr)^EugnkL{_>`X3%pwB*0It -z?QcD#jF(wIi=W!`wUcxj6f6?euFzxs6G2Og380VZ6qx8avQJ-oVTnROJ2ALjc9cqo -zc)nFhNLO?LvjVa@6tN_V36#F_MRale-s!+L*`g9+*;&{DxhhB$xegs7(?)7@S=-m% -z8K@ii8UWdm@eDDw_ukdgiG;(?w0UsGefc#>3�mOA~HP6T6F -zlH{k`C37sC;Z_C*&Nhu0P7|KYW|AmDHJRS)`aGh0Z|7()NM#ypBP+eq9go1XK4_}BPt0!Uk8y5=Zw_( -z_C)E4-bZhy?pIn!8aQX7yBD=UXYNrcfF?!omQvfkggnF3L^}}Do8;-|fK5UD%+r^> -z2rJ+5kWYZkC(<`w6uRn{K~Tt~h3BN|GsWRs9|bWLLsz_AU@yrtf`W25<&96l@zxcJ -z{0+d+Vm>)-8)C!?ShOqHnvQne!UW+sX-A(iqD46o*A4&#ML`*(0MSED3cEyzdL(dYgy6WFM;zodj4=7yhoB}H -zw4;-EBE{ZenH6-w6P8PMX5d}}4+Q}0;%5aJenr8AyVWU3+*xXQQzClg?#VFavoinz -zvCf|*+r^+UoyKE;S=+Dl5X+&m!8iRS0r4y@F_C`at@D6|zTKP7FM6rz%bAfUq$-L> -zBIPL*A&a=P2xX-nsH(@5$*y~Vit1g+ -z%JVoZ!@OHPuZ(@95e$bTU{Ipe5m9So48vxzz>IT<9y$;KodRPCZLV5*f9pK@5HFZ~ -zP-t~_mQgN1BF2>AOdW4T()x-OP8Gy-(M6*4j=)`>g9uZ3%(4w}_w5AFX};2>W9dms -zc?g1Lp5h)Ig1rUyUYc5|l+%ceeo~IKmt@;RCN1hfFQR#n#5)Pxrb0MQyrfIWqFq@} -zZTJ{r1DF(vdtNy7qN`}}5K}D(R!fPT5uGs80lRXlMA8}2p>X&UcDBZ`55u(R#sg#v -z>;P~cdTzm*3&vUPs&rFH5u&S!CDAq~of=`YVlrLH3sWQ$MoB~lC~fpfiHmop@n)z5 -zVUjSuIu1X@M-Qrh3RBjIi|eG-H*-?sCcfHYpFxj;a;8~6r9`N9lUU13+taHHqguftyYP|u45l@= -zbfKbil!p#xp)Jqhior;9APz8yM@7I9V#Z1$5R(DL -zeJ@D`T9M52ayx(E*Cd7Mf$4Yv1k9A8I*1 -z1x*CW95BA3$f9Dw_bA@zDA3tJ60V^Gsw20s?yuIP3Sob}h`EK8TGH8hT{;Sf* -zk3X%i)aUOr_NI==^nUIb^S!FSr|Pp$e?k}jJ-~&zB8h(+WA)Dg!|~Y+)uHy1Uigmz -z>pcAG-$_O-SnvNBu>Jb^>tp{jeSSwK!oLRS_t5!e?mvDu{~U1q*vHwJ-;=5S`4%5P -z%xBVnes{FtfBkd7Pu2gZKQ71u^P%eBKdK)eS3;-xFrQVWzW@5klr(<)9Nb4k|5^We -z)#dY}Mt!q1#`ww5Hmrg?jR|Ni*rfWzvC`K^z`y#I5+kN3m;h)4Ur4F&4)zXLwi -z{(VlrKHA@Z|M?6*K9gOiB|nyEfBbVm_xIQ5Pp>|He8-mk$AEbue)azGXW6HJ&clx- -z|7?FKMGx`opI`WQ{YSt5`Tm<{`}6zz$A{LxuXr}|_r0=zKJCwIZyELRyZ`(i_x8R2 -z=h9S)*n3IxxPC#JTwxXIlH3h&jYtrHKqQqMq7N>lt#wjANA|I1br{X1O|=?DfdnGv -zeaLZJ+O`+OgNsL_#qr8$4Xo#)nO1HM(3&Q3`OzFc02CLf%ZH#h7D1}DG~8cQV(lK% -zYMZuOPNNt=tos&Ue0HTx!jcnhDY;l; -z;wkeQ6?=Nc8pXyuUo`fxbWW~R>U1PQ~7@>vDmp5*ZX5hQ#JQ`g`&5^lw3 -zT+~~a&ivGi@+GVeAXX(K=vi+}&{5NfRLLLWeL&O2+I=NZoWwrR8FwE?{eaRD%M^CD -zGX@yP!+Hx!r(VF`TQPjC)a+GPKg1htCq~ajsD9Ny)SnNISu<6W>SL!f@e0T{)$AKO -z_&mvFeHWOVyFN|7ee3^yNa&Bh-~asn{pZSiF#1RJ`}4aNv!s9h{%OAd`Od3Ln|(4n -zXJi>|tD#EczyUWz>Zd7R@}tr9=-Nl~=Q~3lqi$+XOR^?;ngI?CouaM}OS_3THmW%S -zf^KJ4H;n0!NnTg3Hnr_g!b@>*o -zg8*eHm}0|pOTH^;1_bQPyt2MPQ=iXgo9 -zimgOkGFnSQmCX@W^Wr;^k5(aF7PS>_v=Ks|MeI213I?20-WfN}2_Wh5_O=!72YVWd -zwuC6&w#rCI42?8|7+V|xFeMgaP^kqjI>9iEU7xKUR%)S3gG96EL>qQee1KXdT^w#E -z3X{n>z?v?vq}=%%9rpbbeKu8AK7;Q?1MUz^8EhiU?E>Mvag*U77IYH*BFVk>mH}Ie -zHk5@z%M*O$YfS$&03|9Bov5lK-710_Yb&HUq&L)=aJLS#6sz+hUHe3aE+|e*YX>bo -zT(Sd3BXy&|$gW#?xye|h_FnvtD5N@GB}37E=I@IO)$lTUg$z^4vn_F)v~<8Y6O&gT -zNIe$wk5GWx1FUuw#5Mp_`MPZrSwl3o@3q~gSp=idW0#W1NO#P)K%NWcb%5h?A+_kG -zYkgB$4tPf21o6W_nw`ARE%cq**=OFQr%4k=4LLU?SJ>kDk%ok41bNESo6q#7l*Bn=220zrS!j|#{dDP@!F9*YiJyiDRKu_WBsQn&@U7;-<3 -z3UF|OH(SKY4OV=|5p@dz-oFTLIu^i$GZ7T&%3^pbu2qM!2iOO~Rc&lo6i!D`FQTNX -zjeW%|#bJE@J3NUz9&V#EZEj6cV)wKF2<1B^%DOY8>SEA9gv`U5vnGyvK -zui8aHebr)}A-S5DX8o+?eHG6&^`iTI?)`kZ5=?_F2-urV&~n@P%GNgXCT~gV@2gz( -zu410$K4C>=PT>^E(fe^(2vDspG#UPBgxb>v-lWz0)%_oQPwJRXFn4(INEfO7N;M!ZYSwrU#0)>FkLVt+`>*J*`xIv@*g%~^_C_*3GVZU{Rx#d13a0R}V(1%)%2DxBbUa*HJ4W11S -znmlPTYS5tAG%1R)7e%e;jDqNAP`XONj`Vaf$U_T5qHHBNhSJ-aI>GZtGcq8bc8OUE -zQJ^Cph|a4p-rq14hse_8o8VE%lcJedz+uQ=9)>h)#OxUPS(C7tQ;SsC45=87X+TPQ -zha+4JXdtzzk(2@FB?o)<0Il|{SFCLw5rm5{|_lWr<>DRyng -z4Bfh<8<)yIqWhHfNQg!$12|tp6d8dS0Dt8zP!uNFBGOs89Z?{orF+}kui^QtZ#M+x -zD#LxFi|lyVolpkM0_6KBwRH4t&X*Fs4P8d8fd%HslB;|>+0cPRdo3yuzKFDE)xGV4 -zY?s`e!7jH?u;f_5BM&r7Pajc#>BFAeS`r>i7{o&_CBMVk@wNw+7O4jp?}cwR2k+!` -zBP_z)WlFb(h@30&1^UpbZOcA%Op5Yj_v=!1YV8L5_n!t;PiL;1=Y6uxaBSBT`F5`1 -zTyNQ~eE@C;c^Wu(_vyP%Vx9E2RDuSSuqRbr{}C(5!Ihnjvg!<$X8wGn`IJ(a~g|rHV3C+qLSG1t|4{HPezARLN-Gb -zBoh86pC>_zkaE``z;uupg@QCkERpy^3Im73>t1gXi{K&!9cU{KdMvGN@hz5CftOuB -zTtf9FzKv)o8^|q0ZPgg -zsWhaJH+Wqzzu!B=xQDd;ga^uSFIh%C86arz -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 -zOl3qZ8{$WU_=}+7zFq#I{av4 -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 -z`mD;EUHvG2h7SO=)XP1 -zsQ}|4caiXpDkJ%BHE19@6EWI>cIV_p^bmD9R5d*Ps{Bo#RPp(6F%p+v@LEI&^|AqC -zRepT<2w02+!Xg|ZO6WYH1QH8ZW&>zJ)+fW(9D0j&m3tv1g>5P!ZZgvlU}?S8)3Gdk -z#*&WR4+C%GX`9qM?$g%Jxqf_0RVw6Jk$M~QX -zgx!+beGFVCn%c-}1t8VP0wb~|&f?~p6xJvoZ!|`g2qR$ano?ll)>~vpb=+tHpt~Gs -zUdj{^zltu%D+5?pD|#!gQU&Tn5~-G|HB5r_Ga=6)n$ZUnff<=Th&oEGPEW5RZBIS3H# -zM+lW@6GMU_1xggNn23UnLA(kM*d(SED8?KZ+R)idABt2j)V5%eHx?8paDF?=s}~5t -zl8srCUgR6mU7-|SHzsLO_=wP65yX1`5VYUlzWBD__Zw8+#g$GoBe%D)RC9YtQAAkU -zDkHI(mcmI&FC5M$=BhMId}0Vw7v`$X(-B0Y9@>XNsKdeBZh@ -zk1NkT%2$d3ThnK?S8L|2xAudp^~%$~DKAhfo2_c*xO+<~ITuuDHe}}>o-cEZPJ`DN -z)-WEfZo{ffdzq@*_w8+Ye=9W&ULU{x{&COmXutoW#W!k}6xyG^0FHxDwSiCjR#g^S -z%yl7E!P|qVACccdRN8zb%xPk4fzcgWWs(~nJgj~pe)9oHM3-Rx$BFy;K1B4mNF37Z -zOoGu}R)0p0colNjp>_AnobzRgU~dW@~5Nd^8vmWuO@zaj~cfHAi_;Pu*0PVgt#&H0`e`4(+(hh -zn~2H+)y5VnaeUojAZd5X1!=FCu5&T1Ir%&TalGlO7Yma`g&1-fX9i-OeTSTNAUH`l -z8T9!x@Q~$h5D`){xwDu=sT1v&FLxfz_N-_047-B*^N;Qkh36!_*i=eQadUe}+KL-( -zX7M2;T6l|s=p>cUIiSQ-#1m0J`$_6aME6LE9!qe`fnW`uqBxY&1e3gWOzm5XVBy!v -zK%}KaW6C(uw&*A%40_>$Bsq-~ZClFiwqk#v(r0dQ$?JnAs3ikxfNF8gCB6Opthi0* -ziQBShH*oXw=Ew;5TihTnkxBB8V*liVsxR7Dvm;LdO1P3pE-S_mG3Zp$2`8s_>koU_ -zUn$A=-H1WZqJP@P#bX?Y{L&A4%tk!K!|D93#r7GjgnnqNzdy}by?`;=3VM7AbGZhD -z?I0n1ZtH2|nzU^->29#iBDRs%eSZZ0rHS>Q#wKHEZl@{pP -z)a*rAA)2z+eu}Kzu<&66YV8Whi`G`o(L!Y_ -zc8hERr%~@&Du6Aj%U00E5DoCPqa`IfH%UNTwxwuMv{POVIS;TJ@)++2I2T?!3$;>c -zT}`xXu2LU7_=N;R926+?x7QrD!1Xj+l+0`aRRRBqd|8m7x?ii=0^iUU6D{*Fr1vT_g2_2{WIUSgT!bFHrUZM)2xJBJosK)~$ -z!za|eD;nt_28b$Ps8OJ&;pqjJsB!n6FL<=*gr1CGrzG)y(E&j60_Cm0BGG;6HD9pe -zzIIDMx&JZd>(!r+OZWZ96aSC5B-x5zlsi0N#ShX95{rtoVXJ51KsnN54!WFJPe*+? -z4mZXSQo*s;ZVab55MJ>HJa}wMun;k~fo+XM?prtHaf<&Yp1hQ=GQIu%{QmoQB`CDB -zf&W$}M$GyIL(&4tRj#U3s-*~=VUUXJDJf)fSR>8~2XJ}O(xk(>60&D?sh%igo6c=P -zJ*;bN&6}x<+qU^xhgB@q-ub{5J!(D{ee{gx*m_Y>xAphWG8{Sde%U8KZw#T@2KDo& -zu;o#^e_We0s9lFpaEC3)y0E4P8|ER)!|re=zAV_B1x!ph>JXj -zwuBUip_<@j)DqaV1$bK2P?E;xo;uTp(5Ox*Xd!eZ_5PZRKp#Zi>sAvnuxF5tL{gjk -zLE!Yzic%I8MAYRoZIM=y44vQNcnGBISN^yHAePM`=k{wqt>D;up}Ln2)Fp!LOmXqA -zQkV)Z(pP}M6@7ILptG*zi5AQvnN;!YLi8SvrYQA>01O-29!+%eQpNvX0={BN(teTs -zp>)3aR7fKI*}q&R)F8bep-$biiMUAMd(rWxdU@Zk$R95X@9BV@FV4e|+f3g>v`6zo -zy1x+@z(3K-_jFsiPV;2xWAJ)F9TV<7Z3B`I(sF_k+4?&WEzxUuGa|i^c)HC4#v{uG -zxRq*dqD)yk>DsjG)@>Y`)lQ4vmf?{*rfhTSrk+H^UGVtn&@G%S7h!HUw`oPH$FZ>o -zvYn@<=904Qj39FEjcu;mmQBEI%v*hgb>@jp{joI&m*uHQab?TF;wvFcE;0tYT@W$@ -z))BvdfB*b=|M5bbH{hyn!&+%X76E`tfB -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 -zj%kNM`i*ZHL8IG4O&fHf6ZP80M+Xs0}K3*nZU -zNz{7KaU -zgd`-U)n;sXRk}8#T-S@~QF|Mf^|6W(h-${R7uTR~-*J2Z4X{TldDT`7!jXV{k!LIk -zN!Fh0qxRj!82iqpV=oBAWX(z$Y>0)RCdLEEfv7&f6FAy|u6f#J&2GfIj(0wS?Zv5FUz -zd;}fbz{fBIl3o?efm|z=)u{(CtZCu8g@si9B}9*Y%vE&&TztF^=|1>S{ -zCt;lg29cTAhh$FoQb}HsM19I}a+^^Hk6QYU)q{TVk+#t4 -z#W}vr!^o#Z{xCn(=cN7&hTn?reoCw_EGEzWkk>N4@g{!3on-3giMT$+wIz` -zPU%H(KKQJW%c1g-%e(Pr`A^sR+T35TmgPdsbDfQPu$s}6cH%ZQ*F9_I{r2PdMU!sx -z=+;mBH*&IiPoh~n`EefW{jz!V+iW>*t>2F9NK>S}vh(`cx7LLwrj5rPuvFDs?1$wt -z81)AU+iANt$pK)VApD5^<0H)P`|#V@&u08(`n36J{XNu;c7Kjwf9!sqzJD}bSf*dK -z>Gt$X_m8Fe6CZeI+UMt0QthT6B*)bTZU6mVhT4B$t^Ub@p5`alX -zLL4pE|CINj?nGip=C&?wTx&!vF<;W?lWb0+@dQRa5}U#4oD7v^D-y6YO5pP8%?EIr -z%7f$XuC0$bru+a0H+h*pjUr@`2y^vN+d6EQrOX47&xFCn -zET(wg#;8bP+0=svqA&*b=(z9u>tOfDy+ygn%oTA#JD}E1CGh9OSGy^&G@?If?TjXi -zj~0`i(xshHdz}t558Eo1LPE_m@rF-mbKz$KzxKxj6pkoqkwlMD{r2Xz^u@n=(+W>g -z3bOVO(U6V+k@Mg~=`7g->>nJRbf5@O3$Jq1R#}UDAdrGE4M{vg4(3 -zdbK)KpE;A@svzPuXaP}IpZh4*^j>!EgjAw4E(+Sgmv=|4O=8scz9)$~p`ML+w8v2S -z;n?QxxJp&}>iFo*$LDo)c;fJVUbZa0mo^LOf$fWLdGl>JB2Db36k8p=(SC1wePytD -zliMX;&Q{X0Ydp|3-m1P7_7V#UHeggZ5!q*;l|n8hkVr;9dE|4WI`*KL%%z%EiC3B$~10No|xandq54ABH8~RNRTA -zHOYx=GtoM$04zHSB1z`;by|>Aji8QF-h$+rvk0=07aaz*D40iroYsM~*EaK2ND_C# -zPfCP-aN_Y%l~}Zr&Ql56M1gQo7ZjzQHF3yHTd>qCXKfEUq!KzCvO$6#c+t}ry)JcDm)m+OO=wfJgHJDaX`zGKQ_`l%jSg7eMlX4=8S${^0Z*$m1C?mPPs -zVbtMgb>AuPR*hw#UlV&%{J&a|2Jy%cj9Rgyxn)=o+( -zxb|{Q@<0UDZ6&y8_%BJU2#0DJ0~|Cw;SMF!ODJuUw538km{TPTO7;X9nTB?vnG7

?72*}WSiozBh~RVa -z1n_SmyjPNX*u#n2-=2RYUF%j&oJb_2xiiAeaImR&q15$3NgqV^%A_>(O{IvDh$``J -zN+R?9EP$r~P`H+$>U#$&?0tiE@+5)9Rt4czi~~BGz65ZXCg^g5Y9xaD2_tda0)>zP -z$SprHD%_ELS@00$o2;c+HzKF1OrK*#^mhqclS5(!yloG+ot$D?Z{ofy9knOyqYyRR -zKDrqCZe}UbJ?OY}iIZe}7kbxC+tP2Gu;zOmYOZtO`yO)ldW`-UuT#69dCT>;pc?O| -zG1il>`arWU$jec?IhiJ{BTFZK({)%`PxXWCX^|a$RrQx?#1D-bHnwi~q1)!F8~P}$ -z<9_VSkgDTYHon@}AM@HDkFj4_0{v&O+LP)}DnIsksBX>6x;jR~@ZryDe;*`;#UCV5 -z{L~zYTEXzpb&N`kt-^gPg$fIJ3X_)S -z`AJ1UzwjITP=IL)=4BnkTot@mRF{xzy3{QrAx>DeK`V(MC{s;b3rB%Kbu50Qbc?X} -z!8F#;8xXgIbRf{;}+sY#}pm4a=QmNPLSMDuj^J$&j%XZ)}jq& -zMVk#mI0d7u2OhQV~T*DwJw6*iyD9(g}cL-vfSulFyz-iEt84Ft{d^<_C2*NlMEhYjZ2`M&kCkQDuET0;?AB}q7q_j -z3Fj2%a?YN)aETD!02KwPh~J$A9nB8bvrkk4hGv?4rtBXDqR|bI2fwM|1n%75(R{G7(oIP -z8)?UgK=S3BUJgjdw2@g(IBCD5;)+J0;CpMIUWq4e&Dv}`GB9pO_wqWr|?5~ywX|I6SbsU@h+Kf=9; -z3X!|!c(MFR)QG}z?<6%rmWEWT`fO^|j!deEU{us`^1xeMKoZuX1ZD8KBD|l1cH!o| -z38C(@6sSd4@z+NerWY8S(Y8Cb3DJJPY*HeMEw(q-FEfuA?N71OUy_i}e#p -z)sw2B0LN8=y=A=^RG40GKkQ9+J```A=@gskqsQ -z^@H?yRKXRc!>rnI7Pfa_idBcP#bT`l17tE`K(~ryG#F*IG!7tm0WxSkk4 -zE%usVIkGVp9Y~Om!Xa_V+1Lj~gm;nBI4Zq>If{}27C?x;ORCpd5{>##S8dJdK?H2J -zeoz9j4_Q^M5{dn&2O$Fv^`)KU7xDr+P+ELpCy0xd!HYyVNpZ^$65^PQcx_ZqX=-We -zn>3(y=PWaWKm(EhjaU0=2j3}}g;IV_#~?65Es9~9glZImCQ$&1GtP> -zb|?rBUMxn4ln1+&PHb9Rk5WVJisMZ0kI_`zIt~Qu0Z6kYn6O05)utD -zZ{IX>5uj9iHxTD}5NUXQ@OhCd1GTkDqx>RC5)~cqm(P{k8Acm}m&nbf5hD#S$n@B@ -zdZPoW5%bg25{nFBZ+qG>GYKh7n8F@CPx7D^0C*A$ypOK|kZPZ~8_u@vY4YyG5j#Ry -z-cP=M+?Hjd?be5dN6{!vvRJjPzP)M|{tGqwxd`FTs8b1-t~Cw#EFD3}R%a?oqof&D -zUn7Vlx+Y|gil4WrBz3>MfwD-lLI`lq&~k$849tkxvu2RR3z$> -zg~^4wXTYd-4>^>GXRW-A+==kGdLbT5tW1uaJ-W2QLcH-}p)mu_Ym$Wcm0n^bP};m8 -zfkmLEfC|SJok>Ms_Gd95hzA#CAaO3xe6@>!qO&FfAg2}^8jP)R0}U-x^BCDGGk02d -zG=TzWn>u=RSrE;A=9>siTBs_R$6G5R#bR{c1tkV25sS~XD8(sYP-H_k!Sd@ozsr`u -zk`Dek%4HH$;TLY0Kidb;!@hGUw -z8M)P!UKcL0kP1x>M6E|}egOpB%jac<@LGtT0u2{*Sd8^YhZulUn&qlZAMZ6W=UU48 -z?#b#%ounxR|&B(vEUyw{iIFz+*P8*M<`~BzVuiyU(yaSyo6Gz8e*GVoyj6}B?I|f)x(=Em(vd}giS<~%>8mr+M+_<~ -zxTt3fElY_GAN`;I{1gP*)Uom#9zZ`Qe+YfFVhl&Ay!eM4<>|9gJW4NTT121+%5QaH -zVIz1YY)LjD1Duyk`LLhBV?)wV{Ppvfq@AS6|B2~i9(vG8jOpYJW_=cT&?W6M5=NLc -zI#OvwPoBe_XNe}@m1G;@i`55{d^P`lwV#wmCDAx-;=j<=W>pmG4L-peU3sACgMt>VhIrZ?&tEMr`?28IEA -zO%)e_p9qL{IerD$MjL>+8bt2^iAu`RertmmSiqst3HB~ja??)0!dK_theVrwqZf47 -zHY6PuLY)v1{bqNejha@e($u-ko%y(o5cauYy_uqKPvc -zY_ReRgI!mIRFO16lX7#v01$=k^Z1Y@EWTaUn)kWc+m)ft?K&4OtY=pjquOsnw}t=X -zcjp;S+Qx-c4{l|bgh-#NSk+Z=K}P|_X-QfdTN||CIdohwr_X=>GQQs?p+N)glb1*C -zW;!d2>Q^)IS(v9d_6&7K?fq!G$>|y(Sq>z5#!s-U2MK9hA)}4gfBt_JU*wzYe|x*VO#V!vVKuxB0p@XtTfW+;6;ZNdNXH-qN#M)6XR6xD|@9|{$1a* -zM(z~K6LO1W3B?)!wflQm*ki&#Ig}@NGE8SfYuk9TJaP8`aTnrs0?V -zi*12};o*h3! -ztNf*pR=|ln-BbV`0i8{xqCw13) -z)~&9L!rRP+2hhP+vyEiDxe3@x= -zgDC%+AU>!lz){gx<69pwyp?*=>e3pe1RhtD;Ha#mj9OQS$_kfXi`vUh4+e?I8xvdX -zUt429q$R+i;B3dGgGen$y|d^uYMk>`eGaE@X7)upGl(Rg>f^xFyixRO8v*!B^+d_j -z6m<{8jYsxbk`R@fo3OPxD1Yu7;`As(Bg1xi+AQEPJx(~ -zifQ%MbKJDNd>PK3QoknewhlI<-ba~DhE@GZc3M~Z|00crhe`-wyjabNEWay}zhJ78-u^(J^T3aX%sM*;4| -zeSO)Xne#sYYr7Zyr^^jZ8;3v5zkYKLjr!I8*mM6TSBUxcq1$*ENfSw!lCPk8(^9jH -z=~$KqTI#74qWB$v186@bXWDPGgd#iuwTP&wgeZ|D6eaZfN5U9_n(;_g>-!37bploE -zwB&MlaslxYALeuyoZLqvlo?`)O~3BSp2ytX(4LMoq8~Nhy|z+MvXD5--=PZtML@d0 -zt!FVjPu88UeHKS&u0a$#$-O5Jdyaklu^@+ZU{i~O=SbalOP9B|37h_!f4wc9^mhQ) -z5tbBJnoZM5$LzI`M9Y$I=^6zisApF)(R8ET%b&|bBP}qAlPFD#l(|QtGkECcbArj1 -zsfGh#9kNZmB59ZBx-6tVi^zFbtggA8Udel}ySQZ}QAX`>fpIw@SHQ|hKiNb?Q7uM> -z8fadK2k!!9B;=1I&)-KIt-0$hO%U>t0rWT`s{Nu70`y^}ip;)2n~~`Sa(VDX#zz#DPg(kuGNaJ!I6@q*|9oFn^-e -za0-}19#{v|QE{vc&x=r&pH|XcN@F-Ui`H7x -z9&S`^KXJUgS1*K1@|~Kd59i!+bzZ2k&s*gPmSv_%DfBror>-@Qw9}?!WWr -z(w9JuWX=6eIUzzmW`*bnF><#SpUx;QM+%4d4g})X@@Q5J8Oh4{+$-kg?G`}tS(HDl -zMFm>=hlC4^rgFmW`swdHeK9Z>nx%sLh#TMpfz@^)E^^8`tJGCohY(dGZrHX$u&35S -zG78P0;={+I7EcRQ4=rf@*tK@ovt?9i-`Y{AchtMx)+J>^DIJH1+YW>wthBSj5 -z=rf{s-$?L^F-1h~`gT`?UCfJ@cGpa{3@^VjrCUxvXz?9%3_Y+ieCO0mvdygC$As@r -zdb41Z$lWEGcAMtBu3>h0;MRu>R^$H-L!wV#Tx7or=q96Q#m8FpyT`k9}jxxNd!K*$d_eXH46;<}>Z1 -zX~Z4IKq7kb)5Me&>Bs|P7W{{HXJa1N9Hd;5nyxg=-~=ScI! -z79S!B+z4t#v`KIt?y-ggs3RU1jribYnoL+oWoHTvo738j%={OR7?A?I-RK25kd7o+ -z;S!D#NSEaAToBe$D;3BxJpN*l>4QvgU2B^>uV%JP&=r;f8d?BEjzuM5Hm`cyo3mRQ -zD{e8FJT2qFgjw~S-#c+rsDY>lo>6#82!P&_u31<=f#a39;lx8_N!Rx5$A4%2tA&$1 -z-=zPe>eZ*`UE@MSpG2`f4@a1;4)q;fCa`#%8%+r@l4QYA=wQ1a)9-2|=x -zo3V-LuH!n7H30e11GPL?Tz7GkR9HqtFc56WBu%A7xa$K -zMcOQP1fBP6ulBw@bRWgc_%3+RrZ -zoxXN=hzHSDg!k~iO@I@fy8{5jYPiZn)CzL~{b;0f-5`(h|475al~&vYk~rI(kiQN?L9WOlvI@EnQ@^TtV@Wyq -zgAbw*YBVg831|s1;)@Ruj`^~zIz;#x|7ns;F^F!{F6RJnWiN@=ytIh4B$7Ks<3v@~ -z$LSsN>v27)fXJho#qb}r6b`lWbJjMlCc4($#sR--_40you6hZpKhGCa4n3Y#%^TPc -zi5MDW@Ky5|oe>>J_@D^gP?2Byc(oh(qP4DZJX1JPhchMVf1=KpvAd|q0$U?QNhHEP -zK!>Q~Q_SQeo+C6a2?;q$^D`g_1lz2dv|27`c0sKPe!y?hkSIoih8&js -zvzpOATY^4AEwfP^>w?;^7YK7rsHx$iqHmFRe7%lw9eaL}+$mc9CNS%P>yU)ein5!9 -zgT|xuU_3t=$L|x>fJj& -zuo}XN>AC!P5DKAA#XX*ZsAg2ndx+HAh}_JDgMjILZ#=E-q}dDQH#_dc>&(p4ysct^ -zZz+yu7TGv{JL!a*hrz9*<&C=kefvcHj^ab-Rf83%?!4T0i3jKRx$LV@x_3;$0Ed@g -z8v8z7o*`$(g}kS!%A{{Le(qBDOy3TZO}e92UBWR9K2{c -zW;r+{WR9qDLh{;3%I7J2P>GPcsd)y5} -zF!-)}OgM^prdox()iqdL4go+f78I1-*q0gr7u=$}u>6RG^l${ooV4y}FdMnjYj0EN -z>|aDBnoz@0kihULT@Ny$qu5l3Q -z+??L}Q$XI{dK@C@fJjRcpL?kglh!~1S&XueJEqi|^OF+q4odyM%E+*3E%%>q4#dGvrP+N!8o+&jX_|dGZYxdb -zHYHyYX<#QE!9j$xfQYj-YRT(}$N_BBn%hzDa>j}D#`qGXMQks`e!z|6d1ytCM$r)*Sx*op>dOc>Kx!$o4BY^~dFEP8$azvp_ek6qs{*CJeczVZ -z$AGe8noGS?A1z1~LlIv|oUSxHv#{oNJ5)B5TNR1D=&7TKv~>WeJjQAebzG?hm>guC -zi*K4a3BQ -zk1E>eqeB$fNqsECm2pc=uw-fzFkbK0Juc)8yNxG>8gOtCy~xb(gpaM58^Y+ -zxU{Mwj>&6ZW$eaRsuq@obY)rnT$*pv7la`-_o&5R#%q8TYrtu`hyMR#N<) -zJwoJ>#H~Tdq$bn15*KZ2ozt6onC*v;Lv2jWvL2glr_->VBuq=`%bwZ&5+=XSRxFlj -zZO69X8MZb|dm7_1p3^yU?sS+f3OsVeHPSRH+=RNKkkm5zhft4DO$cURPl(l~Us37C;r5C+aS|%G*bEJ8NVs0B1#Rq`Xd>?j0!cE|& -z?>@1@f)thbL7dXPaG@sjW@u#GXaF`Z&K1?u`6Y&-miX}P&BSO|gt)Lng9x^3IR!r0 -zR}=eSCc)KQS`+UFS4Qu;5P1E&t?3UE5m-R?YEea)lst+z<-%>6>d37D$1ZOaKlm#X -z?6Z~pxUlm(c;m!GA%Ny25t>dw8bFvzDz3R$Tpq@fRv}o99p;sab;pOGN6Ar!)Pi9T -zz#?B2xswM7A??){3n7q|9e}T1fUChnJga5twft4>b|RFHh)cyZM|ueDxd%_9zEDW6 -zZ-qigG?K3njr=jogH$qd=i*uGG#u4tE`A|(DsMHGGxA_7_Ok4V{v@HH^Sh)5)roSR -zAkdkG90rYg=uCg-bILVNG=G;Zqn3fe{wl>PB^mGLo1uX*q}-BJ#y%dT_FiBF5A%xm -zjb9H2<|e{YgAkwRo)2&!-4hxb#5YIL4KtqT7k*o6Vg3OLNG~;1t|s=I4>wYcq)8}5 -zYU7j!2Dga10yVUw%3q6Q^1c@6Kq#G;??5X$55~R3Dvhr4D@H>=ctC4Ni-nanp`OoU -zq)-hf2wvio63T#2J&$1;Q4O_!bdObwc^HHJ1=72mZ-0;I0DN2p_;LvQ>17f#pam2{ -zM`J?5g2-5nm*#8^*n)GJ*y#D%W3 -z@`eDm&oxtziJhHZeu(EbGDIU$AGN0tr9*e4{bhp`J}xp+R*+mo2Xv#`qQ7_NhSney -zi}TroU?P%iA-xH2V2ucZubD&{q<3~GRSws9C$4x0-;q27J!=6$%oLnGa=s82 -zwS+4F@zDgT71tol1lih;@qrNAqA(okWI@usa{VGQB`Q=7i4DUe*#2ECUUK=1@_&sG -z4v28ROK1=;f_Fo{3w$9JOMw;-Oa;BPno##U8%tCg+T-&HbuH9LXoKzf=!qo3cLJFs -zh{V_yiM(=m)UJShZBhfJUQK_ThTBRMDezLo2{q}9pd;pSm;B=+*4h) -zi~BYPc(8~W6=M$U57?X#MFY)W1kIrn-kwF%Y5tTtYC>|V(3teuvXEu%GBvoCMW+fB -zC{PYSm^I2bRK()jdl^yT%9cgGLZai@ZGPD*o;cvV6@@**XIQ8FVV3$_ -zkR~lxiSO*Ep2d4(riwmoaFE9i%;Wi1Kssrnl5sdh?GYEHb$(u3QwJO$B19p<7a;NC -z=mv4oxRzcQd3U6??2q0W57h=cJQm2^0lDe|5V9)&yZ_D3u;rvs^S%H7^Yec((oa8L -zD*ONQ?oof!2#E^7-YgOLK#ZEsl2!>45|q^7IdlC@+i?!avd~0_)4V;AQX`1ge>Lr+ -zT?L(rAR=%f(GzkSyj)&3UG6+V3a9`WzrNQ^yL%qkH5Zjcg@;k97LZ&{2x;S!m`~r! -zvLiKZ)t$8t+~fCH*qrkGrgS}VdPiDICl^O3Khk^4(=~Tw4_`pT``m=NT6#VnWeF~Q -zchU+-c`ec-d3C|ufeH}qQZj;+{dw?_Brs29!n!f8gEG`{z$4_ -zjUXW=s=eUNF7y7kK8N$hR=?1)k>H-c^+P^+EZq&j`-lbtApf_s!(X7lRcD6c2{tYC -zZkSoRXG?Ypu*eWUi%F13G)i3s2d2|i`1}%`r3>lzg-$?GtC#3=(gUk-B#T5_o%2|xv3Zx? -z3iMKa_6@(PCxOU_SFgd7ES08oavu({EbOYOv~-BE`6HDc5hdJ@GHr_=PC#Qok`eQJ -z_aS$<8f|L@V!j}w(v0J$lOEO1VlrqMk?fL0e+i;cH`)iWzx(B~+H1Di-PU?eoUcl4 -z1Ol_F1n)ZO@O(e7NR%YaPefYfnwZscP)H(Gp-xPR%hKD!rR$E@FrIFC7 -z)Ks(jTlCT**H%D;5ea-N(XM^iB8W^<+W^z&Z7(a$<@fkf@_83cZjaJH?!Dibn){Da -zNgvDGnDb65LTRgqS%A7_4EAUiQ%u -zsA=pVd#gYp-u^0OgSvh9KoN&h_VK1b!f3U;f<%VLZ7vy1QmzzS@e^b$eEft3*;usZ -z#q}3c__R*1#xc)!La6rdZ1okhDPBir~2AoF>++w)Hg( -z{ag;g(D%l6YH@>k3B$!6hv@e_%1PXhqKj|Y1AOGj!NTDX_W)Yuu9su{RW$5pVUuvf%a~`y5m}Za-PurB2(rfSX{Uz&f^S`8=2|HZhV+w(oIkwwu_Fed8uIG#yXW+S;iL`84x>n>^PxzxFw{ubsn`SKYMX?Cw2zwrLl>p -zAjU7$f@?W(ZY9OskPOR=VvS4Uk)Tc3(zaCRrZn@IHFZf(D$XxAGbY%YOfkE=H9^v< -zp!|!bS)8cIwL-ON7GTP1$N`*JjzkI_5xL7H1lQ8d^k%%SVBM;9WiGD*3l_D+%wEx* -z(`=%6fy*1Ls!8KBB*nb0(jlTco#qX7#X4S=p!MYu*7;^!1xi=Ssz%Z>70 -zDkSOY^8ORqq8`e+78k_fMUrU>JZiN4e&ntGxhoZhqgNvz`s;3$UZc}`cf7E7ftNuW -zL9GbYVcg60fCmqV4magg(>|S(Q`?Kz@2TAa99_Q3h5p=*nem=!SK$;}sO-U-P!A`}^i(6XUj-+*SN8Ex2r>A*bMuH0h -zsf6BwwOIk~I6$>#!o~_X`}{c&BbO|P$e|MVpo$eC%%GAK3dkXO<>f)0ufC&ntZEuL?Bgm7X1J)o5V+u_8GJoUy||+%+3PhE~3^uO5MWw -zEMBTi1r=uRN0nI>`7wnKwGoJZf<$`l;Kffiuky+56DEDIuci?BmEXqWist{p?|>AY3lTK+qq%KC`>(Il=~ -z5UqQGx+;{2e{`KFXcZ7g;E*gOxH`JiZCj}=v9hnGu>OI9q`WVIlMC7=Uy)t{VU$Ap -zA!4-j!f*_HHXK~g#$CEcf+L)VRMRF-y=kHsR~KM~oHcCY6X+Z@6h1(kX7Q*7rySf9 -zNfI>;&=pUCLg;-TJzILHJL>(5B+5REN;XlWK3qpfwTP~~h{WJeL7|`X_k$B4sxYwm -ztrjw)^K=mk$VFR=ytBy~(Sxe03h>Kw#0>Q=UW|F`&5~<5An?@@YxB}w -zLlVORb7A-IOAtBT>L~E$YG0_8KRv340x8mqZ9(MN{TNFAPKxF=KS{vc!?EI@VRq;& -z0TnSJU#B=M{VIOKL<6YCq!l|QIiKghab6O -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 -z0NRvcreMwjhb~<>vA!BghC&0e29@4K -ztFKhOr72bx*^^i7q?PT&Rlz95gxD>_HI0XOg!?k?Yf-!P537cE1Mz^Srp7XjghD#v -z1cAn5Moo=Yd@t-JqLmte2T8w&_pLI*KS6q?_jYoNjM{NBSvu#KpjKVmH(#SM!{J2@I| -zSQf=W0F`j5m7Ul(M8#TnYBNJkF{u2($6X1VWKg8M=4=q2ia=p$rw_`_$W}y>ZWP#e -zSofw&kl2NSLByGMnDdOG_@R9s@}S3>6AT29kwlP-{E*{ODM$Q7gHL@`OGT2#R&?~H -z{elDip3{q{JJh68aP>-PzE5a5>X_XrpCEF*frP3zBjoZo3}ly4&GXUU)u5AzB4&Dc -z__WYTD-7_C6;k?q_M~@`7QgJ3e1~HZf!Y~4neuM6yJGB^wvp!^P~Tq2Ri@M6Hus^l -zvY22xqOUJ_sC{81*_%X!AjJ;UZdfYdr7#Ew(h!@6EiwT57NEs3KksQ=z4|vlL0Sm4-^@ -zN*Ydp{Z4yefcp;aVDT6ymxl+MT8Hv!Pct+W6W9WyD0&FuHz?TzY~g2(IMO6(!S+zb -zC22_2q$){ncq6CN28@q&M?>^dy9#AAVm-uyrM(M~YS5srKSZ@4fooEr+06xh^T!mQ -zi2j8y_xyDRd^xPcGHEV@2Y(^1vv!2~Jl!k$$Q#4z4=i#;G -zOrC^U;4>s{zkmNFTA_8K_3(TWiw)g8t<5qB2TB55)VCQ;OHJb2u3DgR<3>|0rn@*#V#TLOU0E -zmq_~V(*;8`(v?WWP{-p!pz%H04AX>W?tWfwkl()#dD%uR1h$r4$uo=;&@Tj4O9GNO -zbM=K>`l3`|oJ} -zvx)acLO#iUIbYZj>3h$O1NrE&ovu7v8vjThS)dMA%j;)1K}gA7UQ=@!z9lLlezfr_ -zA;p4Z&-}P+)F?OfE^a32u6<0lMqF?$;~|_0dGIo3g~r@rl4?dQQw_3tYTlfXVn78# -zf8GSC&t62dWHZ=OiV_4mto^hpv8v6SM3D`skB#+Fp85 -zNpUigk}{unQlq>W5}-4Ui2NjC#F(R&NFOtjMw>11s`oD|8*AF1%a}Bn>#>kIksTgoucD -ztEP&=*RYV(#1dS-5Kgd^{kOQHcNdO26mR!3dXf49y-g?ZVL{89Bq1fm)ml0xq>)({ -zLJn$~?v247-q4;fd($y$<*(ro-9>&mXl|H!S)mv`?TrtzZq46&tkw4gh!_#hnwwlA -zqVc3E^(#Mu#9Z`>PA8TDq -z`etH}{Oi*E&=x4*sYW+_0w0Kc9LE=2%3rxK+yr%Wp4MEf1$KQ~xYRp!p=gUD8AHGy -zB%p%UIc|VCL5k4@;Ub|$Ki6z}Dl$^AG}7KsQ2UPtTMz)h3ogYDiHb}~qcnN(O_Ua8V0jiRDp9{yD#@RpdU|D(#I;$uz9jF94xPqtQh+Sj`9lA1ujXg7eWh -zn_7h;z(4vn?bJL2z9Kh(zJ}D}TaumSHlI7}U$oKhKt9P2$5mP8tt<%Brn4J? -z;_YJx7a&Kp>Iy-TpRfSZ0EHY!LCX=@qHU4)w@nmf>=Ufj;x;gi*4mSD>H%@pVxx&M -zLDuL%C%G`9lo}A#R{nyAKi=E*HLUt7efsO?f8H4<)G^Zs6%@IxRmNmIS8+&vtZ@k9 -zNGw6gs-`sq2C1haZSkhzjA4R-p`c13j|+{D5G5*1hj!n)u=r>P#^%v+RT$ue??-2P -zV;Lw}AiMSupXj4FAWHxu>*FGbvkK;kb{5+gD%kgcLwfL-8j?T6=OBHx@i0K#T(?9N -z4N0n&cknMQmCbjb#cW9;txJWiAnyzd96T*vuH%TR4K)k9t@X0) -zRqRt=gTj&^qL_~J55p8-?;fpc)%Jrt8Hk$CS`79?*h%YyWW_rjWi{}q`rJQoVhL3s -z;r|z3x9iZ0cO;p5IhS`Z`6BIbd-bv-t62n}ftZOkT>#5W1tM`noBsg@0eY1z$69Y@ -zF`=Stai;99#YQ -zLxsRZ{neCI12UxH?CPS24nUkp0t4bL#G6f8lFsu*2bE?2$ZKrRBd6ER-Lh(kQ?pJ1 -zb12FQAI3fnh3N2xgwIZ3$Pm$+m;Y3trY6mS_A|36SR@^715a#~rv|o=Mb`icL4xLg -zS;rdHoas3YS)m938y~4%Zm8O<#!%X|bV_`f8C1fdIg1=x7*Ko#G~msa;jAdT;`Xe+ -zDrl&25YKOo0UgNDxXQI;c|A$M)gvisCw=p6WWR{CcogdQc=6-v``i)N1*43hFC>;O -z&@E9!z{@UcfY0c|z!;ht7?ckAEpm47{uXJB5~42yJgdBT?C@wy;%trl{^Y4-lBQ9` -zup*_?L5-TMR(xORZafTXRQFvW@m5Sch}D3N0L_BPW!dN1q)*LQamTvKhrW}<_}#?j -zCIN_&@bBMaB0dnQRBt*LG2qU-Zbs?E>mjGqSfF^`-JJe+Oo4S+Em8#F2X$LU_ -zAhg{;xkQ4UzM4|Sc%O?$9`_)W)ZEygcQ$8kl}FeD;%Wq~%z4}uijeB#W?EG$P~j?G -zq69fGEJ|+A#!Pg&PWKU+yLBX)a2^ls*}t5-#Q16%>W_WstGVL)UqHL`x1sNMGD?bQ -zuLW`4T98^qKR=zOAUX(y)m~CP2bcE#xS*o*JWQn^U#PY+_l$N^cRCa)z;QBu%9DM2 -zVs`;V<|l9z(GLNKrGXoD49uGqH|Wa){D0u -z5S+S;F_~Qr0=+jF!i7m>&?G>KtCshHrd3HiE3}^KiFS%NL8KosJUCpggYltxqn`#7 -zzS$4n2GDke_<}1=#On!`QDcs9 -zqcUAIcis!yedZKZvddMWGP@oDW+v3 -zxrM|;1sE3&Ys@u}z!sXKb0p=rNO(c`H0gy|Nw0*(JYFBboet$OxU!9m_A%QaBcC>wHAPykgxs=pr|akJMe2|5l;8Bp{l(OiGM;U_=FQ0l4G -zEOC(2dE{Fl=J3x>_*+P0L8b*;9R`I#Ey?hY?nHsY1%+@Z4{T!AQ}P> -zo%8%OB*kZOMW^AjmLRr7gI6X?D=N}6giLELI6&~VM5~!ZD*dhRU3FH~kaT$}8^o1~ -zJ!){i4-a|C^u2N?sW3HK;%0|*RT;R{XvRw#QYfQ*O*3_eIDyQPh4~20T}a_1Zo(gp -ztk~x}RzC@#IcSjqlK&;5wa}YH3EC%}bR4U~t{<0I)&oP5RT)RH?DF;Tf`lNX8yp+y -zyJD#r5;nftZDxjPENP#aH!XIO?rs+gyrbiG^6GKGk3-}x-_s?*o!~;4RVqM43A~3{AKnv{BZ$SXq -z2>!#Qm+Fdb#Ar`yi)x#=Jp`ThZjR?|jLNfGmu;OKF9g!OT4Rwrqg_qQ**IW|49WMwt{z9dN~gs1c3wBuhPjpb+mho5X+<6FJkj?TLh4IpXB)oeN#I8(zOe~TM$uL -zi}Xra18^?q2SbNiwREw#T}{YV4Tq+K1m6Pudr}(kwEuQ92pOLkSlx?Rrl(wNP3o$Q -zmiK~%`F<6@q;t}fD1R<#Vj5r`4TdL^4!;IyRF^Lfm3l)QRaU_Ag4!rN$~bjW;esN(m%`)0QV!t%R`q^t>`GO$f&#i -zFGZk|FaOVjR^3yuY(MW%v4Ae%btwROQm0!HYCwd=&5f8^e8umdzkcx>l2`)ulqMlQ -z4)K~%>WrAff=Z;j_$3_6!7S`;dDBux9H}H;IYJ!?7IJ}?%k7#;_1&2YQ)xn?80yOZ -zpBrPxNx``%#6)J(`zf8J?;0`qCq1;m#=j38T03GSL)|xDaJT0too7Ax0FbwbRZ`Gy -z3*J1CN|F-RuWPM;=hQQIPp-U -z)4z3fe*Q)oMKI%=WZ;|q{!8Mw^9|tnrq#7b2TA#UvGqRbZ?rlDkE!bcohI6(IHsao -zkta}NlM+@L5PqJ+Gy{Z!-v`BFPO$K^lk4aWzU!L>A?}E3epckHmt5Yr25^mn9*z8j -z%%#z(RfGlRDm{bzs~J@Ya()~mpI+E(Nl2p&BrASBFC#vGtH_A-CAKoaWis%0(u&=q -z7#|XF0TS~?Oybs;qHc!KGr%zsL|#A!0=px=mY`r?mPd}{N3WMSokTcKJ&o;tj$-%? -zNkV;*;Ug#li%=wbBXR!68sJnj_d2NVB`Uf6O|Ou!ETvMSL82mty2u;?XSTidO(U}DyYnS?h_v>X>f1u8!cmlt># -zAO!$a)z$DALONp?x>iUIv7UR~*A@9E$@vY|DTs8q@F)Vmy@+<2_l?iJSd^&RSDTsk -zA50##to$yzT5W6M%ky1P44BkXAw0sm)f8(N$q4~s-?elsUa0)vI)W?`RcR#hMp#l> -z{2}BM^qmir7XV9%?W$OD5G-x#mxw^lNEOvzi_XXs7cPQi_BFfVe`8T)|MQdgP1^Hb -zdWNLP|H6CC*^EJ{V;&fkIg>KOZ&?~x!os6nZYUBoEu*xe=>W??90?p85fEB-rdh!s -zdRu}@Ljq#o-)V`tv~p1t?0edosz?&z9`%x(-$h_aEj44O$@T~Pgs37E6gp}1iui1cJsZs`~RmxyH)ew6|n)4O!hV}X@Ons^fR6hZN= -z5~E4&%Abj;y$OJ0ADlLFRHBnMWNJQZOy-g+sQdEBTFs?&ad*wItn0>nzU*qvQ!CI( -z^46r@(qS-(kJ_3e#=lPchvR1QwyyDPUCDv3+m&}?JMEshFDvLfJa-+SVdQx1sKrEs -zB@SQG4tDyG&uSozZ#V%$EZxXhQ=MvRt&`i#OvGMPGCM;G;>sV%-g+d737yH^3XItf+7N{35zlT5f>N?wz -z3?+Ib@_j;ZJ5^X^IgyZ3!js?UKcL(vnR -zX-C)h_m~%wi#SrP^y=x*D!r^hQ((&Di-%#{;=J$lsf>tShS^Sj8i%~Le(d>Tl6(~J -zLTc0e{6F&EY*%_5NfW$}=Lj^q1L1yrIco!nL`~1d6i{_j)4*Izb_OVkk|n%0kQ^9Y?F@9YV19s+=)-(ismXoRi~Hua^=yiR%T0la<_L|pnUHN0aa&^Bc8Vui0Hz)-7oL^V6=(gS}BTA -zd)ww^FxP=)pbG8K_CUh&a9Fq5;g%xNrnh=EgiV{0ww+8%iT2h+n=;~kBwF35Qg+01 -zBm;S=dx=}YDfNz0Fe0<@9)=b1L~*u8`A)ILWboDkCx$(<_M$nqCZG|cf79CnEJqV0 -z5zLQ$qT^u$2$ -zwjARU@n9a4m#(+FN48}x`FSY1C(r-R$zc>~M3HmO-IWL83(Fd!SAe7U#OonW5b@!3 -zsGkTNn(KrNE{5J7b9;S*)?S9X>uTN`!~m-&^hG(6g{m-1tv`2bgQuF9QRTf!%lxqw -z`I4xBk%9Jf))qZXy`S%-|3t|i-i6`Q(;0wi6-Dvn9~1yhfNt5+dN)Q4W-60x!aBdT -zE#$R-2Ogd#er+NoVQ`1^egyq^`!dJuFOP*u1~3N9W$>GJ@N$>%%7*ryx>91^`To2QwVsONK}Xj$Lf2}lyQX%~%%-!hSPN(8^%$%* -zF;PU`bFrSrB2c`4zklow^MypR9#y9d4@EUcBXx@g?pf!Wr8Xc#BhEXf6TWCw7;lMm -z8O&gl3-28$N@AEH%tJXaU5?=P3C7Ct9nsTtAR(xYg@Wy27q(r2IxnK|R4&62sD^i} -z^;DRy1bf1UJU7H9U_Nn#cLh>HB$&(2@v)$oyOHl|VGC+`H=`rp0xS4tiRrBO1c8ZD -z?`|-y@u=RD#ZS=^2C=+gEAbN2faLigO^2}5$|-lrqXFv2%_09zfCa}-Ny3M9R -zoYMN)nnqA=F-|r0r8)w=(!oVB7%cjM@9z3Xfk3xVsi|MCW`UvE@N1to@s;!BUR;R2 -z%O5DEv)~NYyDErUq9|8L52LDN==Ec8$_Z*u!g#kS4-y-+mJ{)>yntB@9nX}1#rb3b -zYP?mUOjaaW@@OiLBr$(aU^MYA_q08#%n-zNZ>afc$0{+PqSpxXyN|z_VVNgg)07Us -z-Sn#G3`3jr;6%=lrw^Sa`ve>WrVzT{0b>TijB~LcrI`_oVGr)lj6?hAy3AEuGqZ&j -z;`<%*Lnped}_0ByjauY1LUOjok8_B%*a -zfv?*TFjiXxIGns&4e?UXZ9*e#Z4|X&zY$%JarY;KPGWd(B%i{gQ -zdZ(V6iEPxaFqt;RBCDX{WY0{CvKar&A!;`lS$e`-mcOy4qx){ma|nMMNC|Nf3YL(PrX!0H -zx6?pln#r2(VhIQ|LKE(!oq76T>B4vJX`_(2ID@X7lyy^VM>NQ>7<(8E0@|eok??Or;7(8*1B7MZ3|{%1o;@a+s@9Ol -z*iTLjGil?t)S71N=vdxOJelA~TTu%2lyl=8$+jra8gh@3?}H@Tn`W39&G*t6J;T+* -zF{sfCdF>f2Ei8JBl?TBdanXsuF<8}O7cn!z%5wX4O{8>E6ilPsAa06Fi0XNgOm0?l -zcvbiP{K0ugDJVhig*nJ1cn5ffoBK`U?}N?wC>okit#H_wJ%|h^ZSBQ!*lrap_jHj} -z?E{pO)HN1}7-E6Q9EoFr3QNmn^jvpD%TS-H(frtbtcucgQNFqce?ee$g5m6 -zDIHo4j$dODBsaaJgZ_pf5DEu&#+lwepu5BxxevnZ$ZZb;c?#|K74%a -zRxOsJ3qfuNOjm9(SQp(x+zZVdNa@+YXy?=$dFu#wcwG -z6F=!~AT{M!H&Y=7t{-GH5MHmCK0Bqsly5RQ2krouS~RsT&KRn+k`gj|H$6O@ZFJ5c -z2o|ccwpNAqI0)q`EC3FOZwy(|uo>#7;si^pC5QqehtnFt&V8o6tnJrlMAn`{a}+b$@&~Ta$jws6mImtuAdOToi82$lUI_Qtm;E`}KPHx?OHQo%e0yPq(D1>P)yAs6&FqtQ-H~uyDX$HNAZ7ji3kh -zJlAvWr16mU(?rsy6{K-kEU}y&%w6hv*|3Fv -zs3uY6uuDSpCt*wuR$`D|ODtQ8u)m4tgg`hNn2!k7Y`|VAFjUlE$}4+`pk~?z_Ima! -z@G-$q)(C6fK2foP8sh#?^!s}^B$u@yJXVph9>Q}wd)NCJ9$c?>E3P)QR=kHmD=)qU -z2soM4XtK+V~g;HxZ43FGWFcc>1XwL|yy!Z}* -zfntL}d8v{>YVb(kU6-=)-isBuusxJ#AjvGDSe(NrVZr6b6D9~Y(9k6d-9^zXWNYfF -znm^4A&an~&!3ehf$ZMcY-X+?bEU*QSa(0Ju15O9;-Bji+3yReqbHOTizn(oQOUJyd -zx~9jn7`s(J@W;m4S@hq6r7l6Y25?Oeyyo7SN7FnOyFvSy( -zCUuT>ej#>WG7x7|IMBVJq?9KFq2&|WqGQL~ACZTqG#)p%g`c~DtX9E0c_Il&h{m}K -zOSlH<-yj0n?6*Rw9OV_70a9lWcF5i6%`d$0oOy7qOOfmmKSSwPTR`v`jwj|!d0&ix -zL|B0hG<9!(DQ%TMTY+17Ac8>eJVY3{lpL`=RZ1w(1lny}8jjHv`EyqAS8 -zAug$ZD5tcXux^Vt-zG4$u>6=mgs|Nr1bWx8Cu&CBDeHg*MLZ09xE9{*ViZeRV~zDq -zbsrdp!zi1%=9+ey@d3<4oj;M*I&5+hRWadwaU -zrnBgP4lj}K7AjnK2uI+4RA3Tp>0N`JM!lDY4SPXw+@B~jt8{t4Em>pS`^nlu2D>L9 -zTsA0ugI7lds64|349db^jRokzyg@O53Du4~=4?tB?Fz1)^3{>7@nQ{zu7d6G -zVRVzt?rpj{d&qfCVMDK+n$!6qmD!Yb)h3MQz5s*&_^rB6ZtHIvDsv)E?c7 -zs~$Q~ZZbC(ojI#={R^hTCPVN7{@$BCs)T1PD9uv1T#Ml`gY}v`I^(SagvsVu{|0Lz -zdQ^=v=VTAZ+ou}tgT-N=1h1L5!$@jf`<)N84n)vpb1W@oL1~rmn?a__qZtrM%hqad -zKr>{S|73;$h1xADEcs~>S3t#c8;nFrR+6FdZnV{pPMjsSNly%B8KeVI-V=1A5Ep?<*2pn8_DNpX`+`QY|hofp)*Do$QV!k{}g -zgJ$NEM+Z}o#M{0M%QPrkW$l5y4u+e`Eo#%4oOrsuc_8ACyVRgpKG^6Y9S1Wfpdk0k -zt%<&x6IKn0qJ;|&82Z+j1j`Y6dSb8JG<7vihJF~Uys9Qmyr+$6rVVUM1*}r1R1G!F -zx}<#PL)JX5pQ5&E7Gup%J9Hja!eFQO&AT2x&n4Pm>@<6obAkSSHXTOzo;ok^5a@%2 -zNcVjF!$>PBD8jBO*V$vk(qhQx2d&-aHDa}5#XC3JQ_1qIBic=uNsLX+iIYf^9;?Q4 -z70eCG@?x0A+=Z%)H_!h$e#v`NfAVa9o6$|c5$A|lOnm&?uRK1IItP8JaMy?zu;iZY -zqzCEyM%QVfcL(g4OrVRD4QaGUUCHe+rRjQjHl|`QB~5uhcaou@nYYAMm(!4OEbF}F)}Vm)y(k49<3wf -zQM8hlUFMF*#){M_)4Ti`>uj8gX~;cFE{ai;hP&lB)>YfnvUb-hd$4*)2Dd&(&Jdr; -zyL`UtpDvrJpk{QSI3s^z;|XO*2(F(lK@%|3K95HX&>HQbv70ds>=Up$oEHixo+D&z -zb^r-1wbSQCRd$0bMLG)BU`&+LrN$1Fl#V=F;tgz9=Q`EBi~1cOW@;4dMMGM+R9HMA -z>5Fo9%~YR)ey~?q8`bP>+R#yDojjWIv2VQ8cx5*xS=RyTkPBc9gq` -zfxe@O&`TcoP6R`b^~T{FPl>euE4gv*$$O4uPg*k|ry&R*tDF -z-7uxJ+0BM2orbcR7z5ehGBBnrNfKJ@*oRa0Xbj>^wwc4=pE48_?CQ?1Kp#3RwX=@cw$*Hp*`vjpC?8+SW7!X@NzAB -z3To47OOx|?)+5e5kReOO&`38%ELW{IiTe%MENNyd?r334pX__WT22(v3x)8guyJ7a -z4kF5~@jVk8nR8K1Rr{b+qz{*4Gu7GP>RwN^97LCmwVQIhnktg<(GjGUr5WeSnH&?J -z>%5yEdH(RmyFuvotj=8Y{M0ffNz*p&(0ghhr0A2r)5#uZIU$yia97InG)`d56~@bS -zoX``6D95Hj^N;u`iola6E})xFOF)oEKjLg4H9?IZGZnlrDx_Cx0}61|f!ok3_rU^e -ze>aiDJSE~WF?UCoyd -zJeo0|-IXLo=B~z4arGdN+F^uEvYyhsdbn$oH-t4wIgYMBY+%h);i+2dEaFKg^FvEl -zO>WXTooC`)(337^_cprCDnfHG;P+3|k9O`KxzlJS)5)UHS)UOXjz7T;R!hoVh~(5a -zo&q@yeF^e<+IOjGEDUU8w3#Z<^BlDkofoY(!73gC5}W -z(Yg47X);BgPh%rS!>9dCXUy$ld&1vLGJ=`on+TXmN$dT@f5s|uScq=ta=2`myKb0B -z4NnOe8><|H{l|iZqC1#m4Re0Uc`bvE4iY~x8R!@;jOF*drmZO5l_@wLH10o(VOu#d -zeyy;X%y}-dnv!f+I_8wtkAXjGJA(pB(u1TXYy>cHRm?KL# -zsq=!)AUHctTz#Dxwt?34v+{lzw&>1X`E~Z-N}w5>dabdlZnv9Xb1oiW1J`6UyTF}` -zv>jQ=z)aiqmARy}Z4OQDCXIxfxqWK?jz*f|a22!IkxySyo7y7l|Vj -ztiVi%?fqDd;mYnOSW}#Kpaja%T+(Wuzac@z1-IE+(BTAIy8KGowIe;^s -zV!G+~80czI&Qi^zG+@M$)D40hy3Pa3m{mGB{J>e|RhP8mG>wi_8?c!SD{G_NZ426! -zvqEN*jHVuIq5GAxY}0pC8GT?6~zi5plH~@iC9?MFy>u>%4Jj8Z|tLn{g}z -z1EXeQt{11ov+Cw4zub3+;}Xk^Zu7!|-=2TXKqw;E8Zhs7l1i~Ep1)e4V4Dau0q;Fi -zTY05`Lr9jnvYZFz<|pmj11~#wASxqdTVCx*fB*T$(gWvOMtG=SM&BSKDOnMTk1UR5 -z8dIyr9+@46RR8)PB0<^t`;m>+4I=lYbPYm2a55~Jg0twrK|t1=#qY|QJrhRp8Rd=f -z+pyZpnMS&|kSvS7cp+ar3e>+fxZ=p7>P5FBI(7VGODr>-MW-3bSgk=$zu>iLbnvmD -z8j92iW3PqvinmBPbq3uu(q1F -z4NwJm!P@GJA32yI>WYaR`9_tdi}N1+i$TRwYMU_^VY+CVBU8K*kLuKcUERm~2J!23 -zbWjzn5-epvA}ov<#W;P!B1~;EJfpVxe@8ANu2_5jz|x@2Eyt|UrJ%DHooTh$EV8j7 -z~FWB1F-XbdU##k_x==c~WwlYm3G5RPrG7CT7B7CD<)oz)`KKpl& -z?1Z&{`47JlXb*T>f|xzFa8B%@G>NW@gknv)Rs_WESegIrsfDshql9^iN1e+ -z?DOo!3n4D-3y#KWuAHw`s3eA?A6jAOlIV;8mh%08N4Av(Dn6f(Eux!5!nCr%5XZHV -zaE3=K5e6niX%;sRY;5XMz59i@gBF9LwL_Q>`C7&|w8WsJi@$oTHrxHeKYv7IjCm(~H4Q<Lw}~*R0NMkBEH`KUsLFG&+e;(|++}3$gnI&+n5~PtQU^poctaM1n5c -z)i_UIej6T(@$GmcWNK@W>>1i2dumA*`zm@ugq(Ie3=6qLO|PaQ@(}NNb@GPX<=c;r -z8k)7}sEOWFtXiFVVQtb{vAA(TtwH&x7Bt17#b~kUhpL*z2bV4i`i6CU;Fg%lyTUbx -zOxSn&r9KAdY4r9H%eY5H8XcE{-;29D+MpAyS9>R9&y9#KqMS)v4t4k5sq2eoFy9)4 -z7PkTJ$In9uv~n#T8+`)Ds?u0fHv0ZpU2U1`k?}z0*kOJjRtbsSUeGNmHe@i#mq_`L -zfuK({9={wok|g4s6cKu7>%8H{VGc?#RxHXe#_Mb&U61VkVvV5xvLaBP3$;{fAtOVtw>7Vv>DoftHR& -z)WSpYc${oF6R~94BE+M=*ro`g4@*4i@WYsV{>lo)^CiB+F&vnUh%4Ky-4kq%9MQ9Q -z&$L($I=*uw!aV|p$89p?;(?fr6pHBhSi(xa{6dYOD=%3V$YYzX5haO1_cuaES8_$# -zxV=_UOhH(Ui$B?&D%Ojr>QRX#VbMp|7-kdKS!)p3@q3t1b=(_P8%pOb^eo_URS_C8d -zGxY(sqMXv`vU@4QmzpA(Jsyv-Ug`3d*}w2eW7!yq7_Cva1AgIZq{ci|yRqFK+TqPb -ze7!a-wJC>3dDXCtsMDWy8ygpm<^_|*KLfGF3KG|17N6GA>GEJiw`=iXupy6rqLmqy -zR|`*dBKoQ=#VW~|#TeJVTEwE(&}KSv5bIzqs~8b0$e-iU`flLd=O5 -zsy6&Mwj)Hu@OIMf)B@>!06z1l*;>0oP*G! -z6>0uNnBW1Urcs@-LrB@pJNM#<3lw=!DhCT^9UbgW=I8RD8m~%Y9zU*M>(?KrBP`wA -z?3v|9Wx$lpxr8rnd!_bTR{X0>Vk_q!f9Zi0Ysi@&q>E*kCX1fP%Ug1bktrUy -zk?6po$8d8FL`0yZ_MF3DS~NcRc!c}=*l^U)*K)e{9$O11-(VgOkL;NZbX~pdk>w)k -zgc*kM+gV!fZju<^7K=j%RFtceQoPvP71°|AX9?L0ol3;D#vtq$T>WCHDb@-MOX+A_C@r|8 -zRaC=Q4M|UNi^FCF!R+i}lf*Ko7ZTN;Rh(X0xC(R_$_E-%sg*!bwK%7L(KWcd;wCDn -zEu5xvD^$v&pMeqiMcl4jc-~3if7mYyA}B227mMfxV2}y5q3VY`M9=;czdP_d1m}Jc -zYXr7jPGf;O3iEqocfc}OBcT7B8=YU8bg$1#Z3u{YVe8s@fQxrC{=?`bk4vG|f46K#ulb5ZClzv=xbV=je)Ty<=`m*3V8t+!MOT9!a1|AYTh^Kt@g=mB -zZV+)x$h0g01vBE!LNshLMq&dN_~8XwD*DWxiZS{o*5e=|Hiczay)!bp{c -zhwacre~nK`bTIoyECxf238LoyLgxgQkeJz;A9i2NasiPY)A@%Ikp-j5)L@4*J#_up -ztc5^hH|-fHFPTmB$7ZsoD24PF!A>()p^lsSGt2V~jO)l!di$@aVyM6V_rJaU?d`w) -zZTR2!%kTgGH?Y6pdb@aw$Cq8-Z|9%u`TFs5zTSWS9#G!DLdwS_q

~D2L~Kg_PUn -z8d7fekn+Af`SW(ZeZc>(@8^Z^g@ljuC%o}jNcaf|@0Wn^aUk3R!cXvw+xvGw_z2!( -zdBXSi8D9ST{d~P%0>Wp|;&u(L?YG}9clh;>^YwN;UqZt5a%gkCzaL0H9|uxMxLtk@ -zr0ds_bZm7y{9c6eeV`m3bbRmoXGnQJ^uYU}&DZTfS)L4pi=C|SvEL!(*@YXxLs~O;R`x61Wu+t(acBzBZeckH{MI2y -ztLxVi=dzPV#NIo>NPmCdqpXk1{p;%|&VpYC0rSMVS>4&MNxic^Z{-4xy;Hsyzy4{> -zFWKooADHb{j?*nGpC3SPTp$p{;k7vE?~jlOHcz>gm-5L> -zA72llDI`Vk8oq`scue~y``Lh_%VGz8dZJEX`|a6}9!Kq)nW6~7Ea!7{J*fgBb -zoR?Eab9!WG!X$YZ#t98RzCmmYf;C(R7B15!F}6HO*uMzssO52$HB=R#2ph7MjqzCU -z`zM-*L(&pH!8avGdSfU**%Bc9Fe%$Q6YTI-t;&}wK#tUPHZr>*&Icayd|34Z)0$2P -zmfkQA98uO;8h(StfLpztJ5i-H=otkv1BML4k_$=>!VhDYPNW+`a-)gJ!U514q#w=d -zc0aY-SsK@i*zXeJy1=bv6ps9@Y%Rm)uOs7@a -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 -zks{=aVHloel|sytG}t(72 -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 -zZ%plU4Wz)zJ>wZL$##1SNOs#s1R36 -z$nD|}v^lnq-PR=K9Mkun?}uN>GG);*sSH_KQunqnxr%i+c^kS@r9}G%v-k~7I@l(& -zKP;*aE@XTlO6K^u#dODP3mkQVmy^)Iy+auQ0I% -zH2*D|Y`028lo!iK&Qum_qWc^Ey;2!g72USHx2{;70+j#Mmw*2?Rvi8JvElgWbywfr -z4^EiiR90w$B_iq-%C47`-skr|Dbp+q3<_&;T(9p;6|C$@h0wmS2HzKveP2H-D;;7D -zX#2RyshKVlk2ff*BpXL9isB>Qp!+J=d-gNl)Fs;Brp>h$Y4=UPO|-$i{^}$duM@kx -z#~XCxqv-Bz%#t$N;N!g=uIcx8b$NWo8`N1>RK*?aND*!DeINUj>GF0%hkC5Rck?lh -zX$LEu#v3Fb(@)V|xcs@t8|eGTG|A~!zyCxV{1i36f!yoAFJrvHbh%IIkNQflX|zF7 -zGxa`Yk3w}tv_V#0i+=p-F05&y4e0HAe0=xjo{&7=pl-YQYxwxcdHg4+lsDMQF7KB) -z&hNiJKTR_HT+;Yh<(H3M-c_Z{^c8RLaVyFD``8yn9c=*I>p)VIq-_#y!0zP-G)Y>S -zvv`A|uTp+3D)o7bHmGh@|CRKqf|(g@P{Z1wSne;6InoM)!~Jk2=1%c|F}) -zo&3zYd(oh+=Ep;oLpsFYfsbYSUiC`PGApGrpbB2{>CWQs(3)h- -z3ent$M_jMp$)MBRw~5uZ_AmcOU>GA-G6Tms3T -zi_%};v{NMBQ7RGh_qT>I%i|pd3h+39S$IvV_{sy@snZR)rv;BsIn(Kje9U=%e~*8r -z8Gr5xl|MZn;ypPeRjtO$IA(2Jz|6NQ|El<0sgLh?gQ}Z5QNDi+I=cFAxBDpbOZt%W -z9PR4cZEV`>1x0i#HY-#X?wKZx*=eCUY12oVD -zSLQu`pQ3B?_D#p684T&aMiOuEF!iSzMR^;dd)n>Wlxk32)5|hCnm6)&Q7K`={2-jY7g=6k}cG>;0gTlzkMKHFU%<`(bC^t=DKasHuxe&X+t)kbEd -zzg?R;{uA^|stUHesl7+n#f{3Vnd;9+TDQ@S_m(F;nZB>}d&Q!2@|KIV7)gCi+pqXn -zr@w7=E$Mci}w -zMYBu%9cn&)eJ -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 -zNbu<~oBfr%byjxW&CWlk#}Jf@Z- -zOR>voBxPl#=Aotu75$4S1!$DKb?cK+u3aMu?%7Ar{)njBkJC>ey?+cX>EE49xNwoj -zIdY$L$lGV}Xv;K^jA_`qn6$IGSUmj(>WDF^d;!Q%&#|^dZ#VtUQO#CRZ)=*e^i#_@}-NU!b4cOC0Wfph7V>)c|gGXEoOQPZ+l -zV90JH5PBSawCYi5;}mT9HD{Z2IA06-TNgJlpo&v(LZ& -z!$+&Cy<2FMGTXnBEs1srunqYG3agq5%8sn$-<`hRHixcpnQPFAS+PaYZN{5@c6|2G -zC;gZd6wQO5gB-YQm2S`}bhu4TSDJY^aX+=W0O9WKGih|M>U*PC?E}*_C_UiyK}y$Y -zKw(CtNfHtES%#;92t4>UO&#$@lNBpf}sT|cjyy%oOwcq`h2mF4A(2O5}d+6;J?S6b!m4c+l1`S+yy9{gRB -z(zZINU=RswGf@Az4(cP|YBifSX&zHlb1aSgZ7ccPYx|&o8QM(`d-~gQ7&TwL$kk;@ -zn{_9QJABaS$VOiI0-ET@%%!Vi5ON)mw)cnhi-K>YNsePrGG*Up){xcI=GQ -z@-qWVN0Eq6w70G$49j!YTK#X2M6}W#=}Dvm`Q!F59n%{H$Ei8_(*e*Zk3>=>Asa7) -z>S!kc*Lv)QZRuL<@f-9fl23B#0YdnZe-lhEUJw>Q+yw(ZwnGzdiOi8&1=1ALAmY|| -zAZNMK9Q$M22=x-=Q5=_+2_z0_d&&=6OkkPJ_tZBx(Hj#z{Plk!@E$+W1^z=<_HcN- -zeM7X~)J>m}xJ4vdlgG{%{Q8F8+5!j^*$rO+|FFw3g0#eDZGLDkE^sThg*GF9@x1N5`w`0Y^-ZeH+@MP!Y+`%ftOY#d -z5t0(pUw8|-lU~lSs@qat57mG*`S6jQ6uQGe0ZB$OT!J^vNRuoFZ+<?Kp}-Ky7w)nc_omPn%H0z7?pPNRB$AwQIrr&=jV_>Oq#Tl1_6 -zHDf(hkF6@S=X9>VZ%%hR{?-}ILlGwoIqlYb+BmpF&bNrR^4gdvDfCF}b5iPQkXeFU -zS?*Gu?hdA9@{pGq5e<2R8D(vn;e;ynK-R?TuynIc*=DZijZ8eATbNUvWd*~D%tE^_pL=!HB8)TT6C1SFIQ=cX{EnJgXxZ~=GFm~-w4cKYd^f7v_au)L*Kw0av -z=%r!JV)c~P3RkN!IWnbLI2iVLDmKw0(f}(b96grfag4{6ltB;`x5%V&g`C0eEbKWv -z1)HH$oe3}?a}-j5kEn#i5N1v -zf719vT50ZZ@U4slFDKIZoSU|HUc#tmJhaYOC#0=W_lNb!uPhr+Ade@pg?`xV4X;u; -zIS{KH5A3~sY|Ykau~hwz)=*n2pV21#Ge4vFdE1P-x|11uZjryqQ1b!8FG+>eE{tfK -zbvDmQPNz}d!qFxjNbM)BMWn^9xi^YFwvxZ+T%QZ3R{{42REh97Z>z?t|SYH34N9fmaSC?n!)&9vTD949 -z%oP1h`U*~mCOn%SgH!iaGRSAG!SG+Z0$}(4iEGpFUAwC9U`h2J2e3OQ#_%xuGnfqA -ziF;99B4OKf!}Gb)cfUG?sF3Hyg!3LOzn-;WuMJsws$bsTJP@Bip)x@xV^Np&hnUnE -z=@wPHB{hctQnv4Hblz -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 -zm)P3L(cw0o1o{S1wIr&`s^D^E9GuQw75C -zEOZtG6H_}#E!~+5r1O*2$GK7EqmL!|C_HA@2dO;j9+^kWo(0F2q`GLWrM{1YDg0X_ -zSlLGUBZad5xUs9IpMp5)6v!?<>I*{GbY|-U-dZk@qLE|ok9GZjD7say^x+FXJQ?fy -zcZIT2b1Rj3&ca&z@xgA*gJiz^2r;fcqE#y2rWp_b@Cw*;KGO6ugcX;B)DaERuvNq| -zy5r`k4EEc&=Fa)%NGb&`kpjXTSlz3EcbIZM*J -zIhGZ7CXk6+%F!o9qs|#P{)?3$2&)0fRgv#L`XlQAy>MU$Hl9Gg+h=YA#qJ@Dx -zkOByU)AsSSuHc!ry$d@Hf=-F1xcpK*=(me!xJUwV!f<#Gr>Y^@dMq;su6L2ueS{T& -z$K@%>UVi8-D6~*GIf5ftdgN9&Cy6GL+?5G`@9Z)=V&^^ThCi9HI$GDtMSK4tE=|4r -z$^6;tHPLxtk1F25`|sr_-cP*#MI16pm18@=G^OUVw0`@RXYew;^ubr7wat~}uTV%i -z7e@GJ*ON>qyHH*dA2`l(McG7jmJnJrK?t&ACR=)I+RGE(-&`_?x)D!%4>zB)?0IsF -zZafSwJ@PaOD06n&y5V>_uE3j_BnY%4QsA^5C4;GaeGAYD&n?B;kxaZuNSW}H+6H+L -zeSDE=n!JNIxWtIRJ-0v@?L=R3$>E@I94znvcxqf_+>2oRDSmfG!+Z!$wr@1$)rBsc -zr@v+-5H)EK$DpRq%@7t_+ENuRW -z*xPx?2N~>Rn`iyeGqVJ-QUd -zu6eu@;#3rmcUxKN+~-c$0JXo+-g$MVw!R}%*i*bWNBy-3Cr=VU!NJ(uR!)gl7;Ka| -zaTI0R<&3KK*pKBPA#ak7>oc<7k&J5wUSIe-NK~C1AN1I%m9fhmi*1pV2JnIW9mPmX -z+*ymn?a?{z$diUrgw78^BNYSg2_%D6)${D%bJ9Lf2iEb^8@tne@;x(tk>qRXJ)L53 -zJ*@u;we_8xLN!; -z;ebufWASpG3Rac!j@G5FrMx^rrEsyn=>XygRXoy7#zbb)%!xaN8NceXkr%MZ6}X0X -z<@olIS8AML;Vj!1fr8F0mzZka04u>e(t*oen5I07Mx0LU@W?3!lXf|s$`9|y`*G;U -zow0pZN3$(9yEMTyKT^Z}7}d>d5jy0T+F9k03aQ2b;qu#x+8Qe+!V4gaGqJ^=ucyll -z10dm)0M}#qvZfT=2ToDuNs><@&O7!&QZ#=(Mxr^L*wWQ@}lXIX>^$XCUr -z-9CXQjMojFFjs-tP?b)H#|_IqP8ph$4iEm`c*kxmA9${3*~Q&>nQhGHuf#-xL;fXu -zX8Dx!lKe&Ze={+HK9Q#U6a)w!?T+QE-VYAK!sQGo#AnST%COE$Js}EH(+;wtCDq$9 -z=(Mw)M8eno0fDMdd6oPP8HE+O+!W3;H^_t`&PGe2e4&s+D6So`Ft^rt3rPHyHZFf4zUPK^+h?ypt -zPDC4?f`VbLr$3L3t~==sk|hYovGBs)KZ^}Iv?5vyMIPdPR*6!dyk94nKu4ak9=%In -znC{~&HJYLd_t#~sTLL8L3G5t7klSd*q!4*GQDx2-6qXf -zNx=*srVv+B>u7oU9DzRHgZq+Xjc -zwe{+FJU$a4``LD=O2z^-$Zh6SP&`KljIs2nrOyPt@}tH!&mJd))8NuNT1Oz`#P&KV -z%0N0GQZ3*@U5UlAeRabZIBTn -zPD}bcmzSaMOHGa2$k7T=iU61N^)NU=@80aUDSxelU_ZYM+~r|^d8vXFD<1NTYs1d1 -ztcz=}s_N`^tceKZk^2Q}qryf}1Vd0X8EU%2jRl4hxvCPXnx5*_P#fN1dIyn5`0Kc{ -zFAl*48}troGn_ZE&ZFSHxoK-7ad-1-4S6;Yci;>mkF=c795Y8X&6#8^pjJQTy)vw-xq_g##_1!wjUn%6X -zsYpCiVt^b76DR+~?I+};?w=L(U*1*xonbhbAWcg%4ao$U&xIhQwfE&T7?euCK`ylS -zmCtnDX0nrIXg6ka*>uQp+tkB;!(lZpEZ>3J -zqn>qJBPg5JY!r{Xo!MoIXUrWOukhCdNtt@*4O2U_=kYMDVsm2ck1RFnr6jn*zW*wl -zVU7pQ`dRmf*Uy-2$o1yb^H&kQ!w+}&(!L`dzpz~yGKhZ7=+&gQVJMb2s_1@xKUK5fl<@GkeYZV0tcQusX5S -z3mKE^#VC#dXIDLI*HWKFZg%qIomX*9TE{?pU}7QiTR=rW%T2uDJ|nG$6Er7|x(|SS -zb-H(JUhmEQ%ClnzlrE3VCP|I+O>~N_ixoPgyWBQqLn`_+z0_(fJ5#WUd;3dicIArV -z^3pPOC3*^le%7nB1P~$BjUF?YXk3v=2x-@JY;14_ywJ*yAL4#Abpr$eWxz+Lm=Mbg^a3v$_wvGeSJZ#+a3X{0w6=9y*B -zXtnW@>qib98@Ys5r?0b)UuWr?-F7DoZY6$`u66{^A|Y-VGmla -zi|5JKq&Pd^Vv+-gR-)5`3EbPA^^5N+XWApfQ?~5TK+J$WRG`~Yory?QA&hn2QNXZi -zW$Id>s}oZ26)MMqH8B=`8ByV96yS;L^1d4nGJGsZ``T-L2agmTeh)1JF&jL!n~${) -zAut9(MKMlCEoE`#cV{U5#}1*{B36-jS}S^mq|v^E4IEj7=`WwG?KGOR=Hs#7g0u%K -zKi{z7OP&{AzdjPDj7c=qMOtS1(E)WSX(O_Y0zX_Z*Z@C3z`wIwDn6|#%m;Ib(Nj0~ -zlR^RzNIkD65c^!bw6Bg#;~-O~h^6HdfF$#q@!1xR -z5j7vD4^0sq$@OM%I@6=A{TJcj#fumI*!{BK5~DA(2QfNucN$XO#jJ;v2s9KR7Pm)d -zCWigJ$j6U+cNLmnmeo$)ehMm^aaGuq^a8fh-DpPE^{G=)iC&y#VBU_xFJfM+EMf1wgI0ZT?ww`!D5{9@vT}k^6_{vyP4UaBAs+>%stC> -zxY6-^UMpq|PHcayomh>jIiGWS9Z@hIMVpJerhj_=!O*!*Lgvr?c+m13XR81ek#tsQ -zu93~8Q4#N%X~*rSIY)k%LVL3y<=I0x!Ja6Wi92Li+kq)9yKvFwaonzxSXvJsM}OHM -zPxAH!aKVT#J>DN5@B8E9ZM&tv`Q!Zq{iz=BfBK7O?;!qnJ3r{bqA43M;nGRFHB$_d -zDM>L-rs`O*$Gp~ca -zEbBWVWPIXs{kExO>VcZfbYl=a^;gT!-qLdNqq2SL4+Di0%4N!N23s*d?5KrZC6HG5 -z89P|h{Zx`r7ZaV9_eap)oxc?Z{M2&2$3&fss<%aF# -zAtS9sVxzNE=L0wG#xi?;CxNLMWcMM!yIb?Q0TG1Soh~%{@E1e&=C$a3|1jITS -zPpBTc#QLV2mJ0FOmd1=7dbA$PEXaQWPkPgznZQmXP9!=j8xn+l;gat7}s?*>uYm@~K7@anCAmMmn5GTUvA7cL|dU!1&OYLx4 -z(m>FX^1uGC+Z)J=KRpNP2&{H4i(UuC38Bv%qFVIPvjAL;S8F|VsBZ*`9eUp5RQ=A~ -zBN{jTIQ?oWJstH)bi3P@ySHznn*}o6 -zB?3Tx`01y|mtS+P-zVU*)neNmIP4MeQrhP;V(wp)p!Fy4^pDd|8+-s!orP&zH}}*H -zwQ|=BsBP4@5couD{tdu6ZeD)yj~}eWRR2_$S78@Hd2q-S)aQ33lmI3656$6|#je?w -z?!s5U`f7thor8T4FVN>-EPCQ{?s8Mw&@3_&lo+9=)*!LCYT#f$F}4U_IIH8fgrCQk_~f%L)8GOBt+%tc -zp1?$*cqCV90!KJV{M-yCQ< -z^0-K+m$E1rEXe#~CXO8Z0myLu+ -zZcMr%@oP6UEv+BZt!#rHbQIZUqxSg){Of?2?%hM|Myh2;cZ;3~K^hcJ!DZ~HC~l6R -zJQxuiFHA}DF$poXdkuH~Bps|y*ihzweP#Wi3@%KUX|-RcWVxTqJ=(yVDTI>-7Hl@#Q*Qm*st*SbI_ufafvaoo2JlvXm1h1vF_%d}AOY#W>T;dqYe= -zF-<%r`TJXJN@g_72WSzOv>O9fm6$T3CoD)6OtXSP?sJAy8DJ=L-mP5DINS_(ugDUM;YL22edimy~LJ!XKbQ&eI(} -z<9Ld9bRc12kwLEN1K{nI8K-_5nyC$-wU9foLBrv=RrcSb{<97qi2<}f`#++_?0YVM -zoYISvP*gjfCSRQsH6iglj@aV_GGyH*leiF~Iw?&IDZcc=&`7z0u=Z%jI1$qzsLJs>o -z$gS~Pl;|l@2o_Rg9&iY_wS`jKx&T|qr1+e45s!9%`~EKL_jh@|fW1xR6A=;1O~1Qc -zoE6?hJCg+e=CC@g5W#~T9`@iVz*lA^SLt2Q`bpITa-}2gx2U&H`v6mOWy6Idc1M~{ -zBAJOJGeku*k_N|u*75@2zn$Hi#JvO;*_O3P8|PpIVGS2-n$mnXc?4p-;Aml+<^cTb -zgi>@Pkok!oNOfV~$X%~qAy(dQtzS|#5x3lI+z?$nLb|AH*Yz?zsVA!fUsgB3=-|uK -z_Y+?cafyUH18&(re|aP1T(RUQ4suWXk_d^@b(SHGT^?)`C_%)5=u?Q+-YmFu+v>qc -zEBKNVH5R~Dr9}m_tGe?%Z0JraD7_v5bt$v&9pvn}-YkjD98 -zy8x`gU`n@i;D;JAL`D~}p}|S_jmr~Va?CaN>c66GwE4ooKe+jo*d8`F^uODe{Aayc -zFA!osb|g2-+YWJ#FJSDlt8E`413H)fD95YlzJ@NcypzA~L*wHPAsNZf`V0H_kL-$l_neq~-RpxJEwPya%MnKm;2 -z*{lzDfBbafh;+IC6A{r*#Ts7H_*_`DR-b(Nr?3C~tAG9C(?9;^*R<#w##1faMKS2b -z{3lBP*!s^2&Gp>QA42`G-IM_TT>aumAkj -z!kHu_x>P&Bno%`utlRvCw{)LGMRngj?;?_r5VNY-_MosU=-n{e1uFN(v!Ko9FWIZ# -z|C!W^6!gM>R2py({*%yEQ)33k&%WuE_`nO;H@$=9A{2!nH?vr0# -zdGF6Z{^GMw{`}9s`TEm8{L5lip3(LA%~!%eKV=OoH*N;Lg7HqcPP8?{!nDC{!;1mg -zCNb#ks5M8l*Qc@>du4&nn)^v}jMDXZ-1X57%m{Ct#o}!wG@g&gsEwlt1ZS-1?SUM2 -zu!DaIX58VZ{q`{2{|SP+V7+R;Z+{kG*3mxr_Gjl7rU(X}tWurw>gX=o_x)VKd8eqAqAC{l!3ZqHKElCHG3_rL3|+-LopD0{IW -zzSq+Nounxc*}mGkLt-OblGo{I^tIWSQ;giqbp&AmJ3qaDd^r84#V>H`TXoq8FrU0 -zU!XlO2*2?+Af55{Mvt03*iLEW=d{vGLpxb-huJXcP)X#?(qvsD7Db3X#&%G1ROWT% -zo=8n_@MufoL1h*gYL=#Bl2tpimx?72x5QGaMk)5a06$O9*dN3>m+m`>>oh2FJvy95 -zZegebe^!~<#i4WgO8BhU#H-TKAJW=%>HAEdPf=yM2V=BG^-1@jK?1KL9s2H -z+}jUbdpOvxO_>C#9m`~WE9IEjat_M@wZ;AIo7J#ia%Mzo3wbV|u}NJ{w~^V~X+SY( -zMMgVMdvCM2ITd2~b}dA_hVJB<2sPQ-Y{z~pXCyL+(k!Q?NrK1KwfjqIUuoOcYA(t0 -z9A=vuDx1VE@!U1FBMCUcv*|ZB>zwxuD;AyiC#FJ69L<1YW7dfK?WdA6j5jiLz^GnG|RKP -zXGrnjGe6WtLXN-J1HIriTO$X(PE>+|bLcYVIv*>`N$Iy|WZ8vm=~9uzp33G-V2o -z3Uq6B!{B3b5(dgs+VG3PHIpN#Q${GK#jB!3U^1a*#8T$AbEO%Vpk|YMjISh(5#>vo -zNOdCKaBwRjcSc~C^G*;VO22qXWZ&zJn&V4H%;-4S%XH?pt~;Neb)?@2wmRK&!PbD;xmKItvKZPDoSO-VXs*2|ytv!8 -zNl}DKhQY4y__c|$kSr1z35Qy;l_b!%X8d>w6YjKWZM{WVB~dz;A#JlzaHRktAD>G1 -zdpN#C8C#7;J(W^!PG9mK-ZG!pw%nOQ;d1G)%WiMw5H<^K%~H{B^{nn+$WbAax7#+O -z99V1JZ%78!UZk)Y5_V*j?m9`TSnhyL%m>3hmV+^1HoN^O-&2}`-nuU7;NU&7OOZ$& -z_WlwP%@5Gq<%}pHF}tn8QefG$n+jHnLDP$uqWB5Gg`6MZ$x{V5Y2CI$9S5R~`9P9- -z?^;NeFINTAw$qX>WL-^qn^0CdCuvH_NrAInb{bBS%TK3RV)rgDaLE#4a?~s!p^mUQ0(DJ~&cXfw+i|LizrVD~40lR4C+fH@OCCp{w8gF-08B(bNWJAOTy9WtTpBI>}Jo5Ul(`lS4|6wApxUHt#BvwrnN~W -zp?yoH7w{YD!(epnYvh7p;2FZsCIdHBFlNNjB1P+mD6Odj=<%m=<>H -zdiKt=xQRjr$Rf+Pqj9yimQ(D`5)7o$wa&-Dw#|uJG%9X%%(GHATOAM=Xd|rO$SLwZ -z;S>v;yFFC(cqBpJ?btq^^d3?SO7O%T;2UA-?^_U9j0K5D!%zlR=RPZ77H3ojKHm<& -zTarQVZAId?`m?k@Vid$f$9`Q1QW<0exeBrfVrc4?B=7cLcp9CFkpmjp8+QD5 -zYX6dZ{rZC6kvDs?;QE$XlZ13k^h2RhgTz#5mUi -zpL_ijAyy<`*dDas%unSV<}DBBedf2Y+5EI#vXgApuF{MK4EpmvZK+5uv)Uq2@{+f|3ZS!gd#*t_kpx_$yy3=Wu>QS~Ul}k+O -z`ynfu0eK(^G$vJX4!KcJRbHKVKg(I6`Unp64T?^z35Tueb(tM(nI^<9OlOJhnpKw4 -zV@Qqzi5zrF=)5MjTg)m@Ef2eser!3&;ynSJ790U=jp9;_&cL2^7Whc>5|)-%d8Q!evgx{oNb0|7T^= -ztF~@Z&52gj-k1RuQ*ak2HO-nB^`dmwYkXK$RK^9;<)rz`*TFrOY3dR&(6SkBZe9r+ -zXvR7%#>t|TI%k&{k6fUcd)r8zS+JkOIbQ9fedB$F+yTbsMPO2zY(sB`=EYP5hfgab -zlV%VDNAE+MGFP)oSw2?+NedO6Dw(M+9MMN&b;YGa>E;cl*09`VhWu< -zUng5yaD`VQpTD4|((?2Tcj291n4yGe)Sst`KNO~q!&ju74c0&1Km1$`E&Y9_XN>jE -zroCqa1@NZ^N#<1+FWM7Gu$)#VRJe=IR3wLR2~V7FV^P(&4av)6o};5is?nL3pk(g1 -z?pJf&aA?M4E98({CKatwF_+Y?QFmRAU|8k?UgLPdt@f`Q3P7TGPH;JP)QAqt|)z=cvLwd^_$^BbWiyv(|0R9|t -zUFmf$)zjkCfhStmw6RFk@KU;OYqzH!I19x|uGypA^H;WGoos6-(_+5pKDRfwuA$e} -zc}3o(@ss2wG(gfTQRMrI^g8nqEx`+S*8PlMdzWRpX<(BkI#I67FdZk`={U`TN(4VK1MK%G41yNI$ -zo~~S(f}Bz2+zOuuXW}Cjy -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 -zKYX8CNpUOpWlm~~ -zi-Xg+{t6{AyO{wkFZV+urMtcDi4%u>NlocSLfw({vIOyd+BBjp!D>r9lDE>zHhRQr -zF83))(-+NQdjA6OvdOaO+s=691Nlg_W=W>4rmeq4s?`K3wLKAkIJQ8GQm -za0ZnR@(wX-)3)BZK;pEN^Sa^8@;x^I{F{ulGYkced> -zGFS7&P9N(l9=|%flQ@=9$mt(|X8xt|x5e;uLqY>&ui-f;0B1H_c_S_Ok -zw>Y((daH$%shot@6xO%JmY!S^?6q=wDa%8McShcs)L?~N46_}tyD7yA8?bALoQr&* -zQg3b@5S7wC4hlA10N25=`wnrH&c>m(JHIMmaAdiJzcQO_$SD0qwBA|fswR!~u{2_1EK_aCzI#Kfj{yYVz6k7IGZ&$Zbxt83#_0#ZW^D&98(?n -zyvC(}W#LBBif~>@;A?vu+Y*Rns2sA~myqdcV;>CEz1`UYzaFj$V+faz9D7j(_zfna -zbrc1TL=swCepnHP$hV(NH_Q&iP45WvA&Z}L@{D6A0=CcqAi|g8#D1Bs`Ctp0wVn~# -z^vdUqJh`Z7p>~zpuMbH?Z4VX2{eg2bRDj+Vd@ZuJK_+%prMCn>mVIFd{&4+C8&Agll8q-d_Z6^ -z>^w6*j$vZ3j>WdYG;b~KPbX%^1ppFapz+Y{7XaaMUo^!z(B%_NOmm3tZf+Ja$^ARx -z>0y$7ygfvd`4jX0WH+sLbO9r^iUGc+LLkj*PE*r(H3&9MyyI9Q(R|UL^4S%vRTs9f -z**wq(qgF%=A3p!%)(norym|rAj7WjOix5ow#L?8 -zzXq5Y+K~vV0R7@?3Qx1ht4a961;I?6N$3UYi*F@T*DMA93j;->nwz;K7WEKB#bdp$ -zM56vU?f<={!7fvmlf;Tv@4ZMES?e=>3j5%*`sl$xMDJ<_KN1kJ$1N4VJL( -z9%ZEEoMTYZiPxTM(KEf70i~q0HlL1&EhsI-TfyuUTMFA<#wku)^3QD{l~FaT$%Q$; -zN7E)zptPCC*g;Np2@j(SM3Od?2q1RW99>Ft17&5;qfJtNmTN0OatnA#T)+g$VqF8l -zecOyG>w}GSnZs2T?S=2*Sfn(y&EROiG9o?1Q5F^Aesyc@Vs}3p|(?CXTCXSAu;s`gfM0==duFB;^LgRSrS; -z$%V;;Ej}==W_#GiwawwaEYEQlmlC94C)wA-H8^0tnXjM%{4k)MPJQPSwTL;=R!MS` -z=uMUVk%l$7Z3ZHD9#du6j$I}IjoO1|KiSdNA<>nY2kg82gsBPzHPP=Sw8?KA8VeK_ -zm1vnL2uT|mwh@hbXzfY?pTY(l@==9w=5%pL~_C@c2?^nm7RPjPB;~5 -zTeSjLDn`S_?i6HvvIaNduxrK%36IYAKxuYfXd`80y&x+gX>5&lO`5r2IfxmHdh2ql -z`J9(DD%aX6UWwLjX(yC0;_n%-sa;wZO*#U)LPB)jILSH(*mcu=;}D8{WTb{b!*@J0 -zJ5v*#+?_NA{}9`QO3MIo;8mjM>SaYLE^>8jpQqda|~EqZUMF1)KNbc1;PWHntDwT92R5ZGAn6Q6J;XVH?RDii4@de -zw1}QXQruN{y6^UJ8jqwGcboCE+lS8=2NEi6U!82LvYC&4g~hu?*6%kq{p$j0QN1i$ -z|K`*ZX*gD7YmSKLXSas5mg&>mXfPz8Z8pRN0q_;k-vy#RPg8PM0@G0wF$^j3oD`Y> -zaIzLe?C+=b!Vp?MZR-3MxTwGDec0`fiB-2s`aZh7TbIv^yG2WzRN1S$@_K(`>(@X2 -zBjf(fi){Sy@7rV~S-n^so~KRXMcTncNaF#v`hpnx99C{6Xur|zu56oaA%J01?c}Kg -zO*8wsa&W+Y*tc~*@1T=77YO`i(n^wXI1S2lVq$#T8|QRMqhqOL1L!^Y&kNCMT3l@; -zt-{M7u=+&>$-SBwbPlWVUrLJ*qf)1|+1s`}EmRE+i8lJ=^!;Z9$np7mVx`Vk*J5yI -z92A-SK}JBDw~NV8CFYgDfk2ld2Ga_{lBJn()+c94nv*g{^4$F{SwA<6UFGY}aDQ7x -zBEQcus#lC(gD5-(VY>vRThe8~did9c`bE3ATI{Dp$CTwQ_J>9t2P6R>6re;TwoU5u!a!DMN&9pjXou}q`lzs -zgnxIpz6scltGS@v%ZO_wENFW|BIZJq{@RI=j!oBQ!~28eX5GEL45C`&kr2>Ls<>OV -ze<6&!V}9&kscCy&lo4?_Emh(@8avW5D%&~3UEb~xVLJdW`TTW`(fk8U-kE9wbIUtX -zyUf_BTDrF;v4IOVM!l&f9z`-^K{~DjEV0w7F8pbedpCimnlieSPqam~LI-fo4aBz{ -zTI$@8_i&JN7lFdA9a?mz_vy&Xv@@#oT~Wq}GE7$D`e7FDYkSzzF(-QGdzgtN%qyE` -zowJ1xbZ1I(K+FR>e`E_~ht>`QFgl8@B8ABXxFj^L$dYhRr{b&%{759hNv@vCb9-V> -zW*a)6XSx6#vz-yHs@Bt1#8D{}m5R)!n!*!=86d_y4Xm=ok4tBYs5Lg7dm7Q4L|f7k -z8Oi&~wGh+z%4LDJjC_re1r+SOG@fbu^9XLB$N`Y|SDm3n5#26e^Z_WzA-KslE88k# -zcQid6@4&M^PCc6SP1KeV_YmZL$PrnGh>U9_gPT0k?vouP;>LCRJ9$fSX!4?1Fp~p$ -zEzJ~ApdXqb>MfV3a`hTWYTU2k`ixKF>E;+* -zIl_Rm$OeRq2YhoG(H1j{8i1Y^aEg3(($ocx9}IBcLNnF%GQxkVr2(GalQu`5Gw;GP -zNP4=|w+qhpYF#l3k{W`j6%NI>fMduTe_glX&HCf?QbiAa8h9BA%A1vBSxNSh!02k& -z%lGZsFOb9!gQW8&ok_H|W@wNQygT-kQbTRr2WFb1Ew$hlvv3scY9Rw;zLo}JvQ^_D -z6(v>|FZBBU?dZ@2z#vGoB33fV`4)!Z;m5j<%LkuVf>~+4!R-KDh<1EGOgUq=?Zp)$ -z`w{0~(L$#`e>}C>25k3_^so>9@q?EBGYeB9!V^-KA;LWNbVEbJ7&erbJ`71rhpZM6gN=0#F^Z)r3WiK2PUE<;DP7u?_2L}gpPGY;D^W8NH!A}CmRVRV!huKw=^e3kMsnC~ -zjn^rh$4Ax@U=0SgEV$?$CdQyGQz1Z@1SZe}pO07joGC;!#@R^wOh+a$gGUTV5SUCu -zSvJlsbcw#}C*3e)Ze0MsR%___w@&RTcX%ghQ}_oU7F~)k263TTT8$11TjW_&OR!3k -zjRPW%!p=vcX#jgCiKuc8Hv}{ymd%L`{nn!vBe2npE<10tqgq+`Y_RRUmJyeXY{@k3 -zB(21nitbB`4KjwvViz$`KGuR!K@r)v~t=sW+ -zGvQix8AjC%il8O>2R?k~#P`_a64!YmBi6(yoosWL*U_TZZA#B%MOR4$q^yA%5nfM_ -zP}w5`uM!9}Dej3C2}gyjrbP7sjjwOUlKmK&tX`!WK{2DrxUAP`Vov-IBlB(T5O<27 -z00(e}oI$q?iKx(^q`~|4z;|?p8%2F#rN`*W-r+O$L_ktnQ~qA(dE5P%pXDqvrJvF^ -z2BhaT7K1j33A@OKVULEJ1)4M0(|;na+9F!s)P -z9;!!4+y{UIw6U=jCYm1tTEh6HhI=9q6To2FD9#gdkxK{dJb#X0t{@R2tdqdPB9S=6 -zvPN;i0vGl375Y|HR2I>zn+5INP>IKH!zL|RGKpf53Mpc$?5B{H%Gk(c30>%D+$u=# -z0pCE5-8TC6n>Tmu@!P+yh#bvM>FR+_Up>FUIla`0HWLkOqIN7aKnz5(*#ui0oMHs9`Hg-r(}ye= -zE(Ef0Q5L%MOmr06gBF!ImmE3J#WJ1-67Jmg&A84~V7$XVTfBKKt|0*XlhjZKLc;RA -zG%Im-q#sV6)VPWH*BnR8*}rqhnPe=7CJ!+?(}eiE_*|zjEn7_|Qa_1}Mjmx59V=kr -zH|I&iB&FpfOF%T9>^|w(o#o_8E<5cz#&h&$9(b606kMsr#<^riAEXQ9RRn7Da$fie -zF_NY}c|c5>mHPooq{`xaw*NcV^1pK}-Pt*_U^8Lq43XtoC(cjdMHoW7 -z4Qzr_zt+~bH_u8)EtqjTEl3X?ZGYP22gJF(jigMazR@LnIR4#6rF5aB33q{4?n>G*e%Ao -zDV#(@ubuAO8ns{n_+y=nTetiphBIH(ell_8ME6?P0i0oFcg_U~vxAfqhn*v=gL!75 -zYb^W}h(PGX>v!4V9kxRrSq7S5qvlobmzYMKXn4=KOSX5-?C10;7`XM@Knc-ga% -zU)Xge;1}^?NzmFyAA8|^3NJn|`4K0r?_6imVT|&TVHW{HDDp0cqBqBg=*ZQ=j?2pI -z0cX|lP3C1xuNQ(m?*>mMtfA#X#jq$W0HbYzASW2O6X-15dm>nIaT40u=o`i>+=rE~ -z%4R!iDi3m0?vWhhq+zXFG(8N9)@-3_d!2D!HzoL-0An*S#)Nj03oF5s3j3uxiU+}q -zADyLUE<^+6l2WP2$$$zK(M|ZoX`L+B=*zFnOZf{+Gx? -zu`JRa=AX2q6brplDRc!=;^4qs$U-%_;ddQ#HLBee17Ye6rlYez_^aRMkAVqaa*WQGf58T -z#WoJ4V75#nmt&0BWJl$BaUpvs$+$Awq}#TKnY;JCv1$@Ji|X-Je6K|vc5F`*N?XC9 -z%{~;Vg&w3Np|H3))V`|kkL*9A+mpVBm_h_A${A=eO5LA;ZwUYAl=hC_of}7-) -zYbq!_b`O^|speAJOWvtBm7v%HN0vPjUaP>>*dz|S4;6B0{AoZ^OnK2wc|>sW-n2K? -zG||o9>(8fq<$wH37ysJ=klDw<*A3MO(+E?-sD{Y1da4VFedqo(cahVrObm|&YC^=L -zTdy#~MJXG+L0_ie*op6Mr_d>YG7TJ6u&CYjHYQ$(D3uC*K-VS%wc_}VZ!wI01x%}^PX(kQK#dVe$20by~&&OGT@sW&y -z*VR_@f6DR6K#--Y56~N^Jo*NgK2g|uFlJ{FuT7U2L4!X4<&XI|;(L8Dow+M@DidRS -zb6`h^aB#Mw)bpGOX*)>8N5k{o3=3xB&tE!`t*;HOfj|kkNKSE`zGjmB6_=Ep)hN~? -zARF3b8yZ}85!JOTISZR<=k6@D8wCtgpr>^sCIxqdfl+3q0xtJ0l -z5Ykl_?*QQSeSx-~*pBAYrsvoG2)&YvX3sJy{B@Tvv3N3&NJ2&=h^Qms6M|phR#GVg -za{CtKQp&xnZgg~nbf}LJG7GXQz82%e5%6VX5X>jHUwh&c=#kk<5OxN;+v$gY+n7xb`=s+6KV^1E#|pZ(^` -z{pauemGjkXHm}Fe{`Kw(a~n}i2E@ -zl&egtR5`>ZZt~?Pi*4&-8wy)?&52~lsbC_H^z@BLC6(pWCs#5_d4IE!-@hFecgk_f -zVSuq@lX5OdAAs-j1$H@YH7H@1fp$g#YzxUf#KAg_*i#rcAP+k_6+(H!2-B0O4tSEO -zVt2&>qp%VO(DSh0Gx=e(6hps4w6#zDlt|~}umWxKh{T%FB0VY>@_?eyi7UI-ntRCD -zZqc-6=dExY^I%&u$r6}kkusfpZX1UjgOZH&Uh*B`P?8c8XQ*H*XDqLpm6ZKM#Tww& -zO}UU+IToYD)w^8+*pwFG^2}Ahb0qOM_Go~hUyy;LU_n2e6c$SN7wLykkryvo7^6FQ -zN_oqGDzWQ66Ppab26)Mm6OYbE7FYB#T6U54XwLj?B|q-g|w!ztk}9*5}V?PA*;)Nqt}@3a43f<$y>j~CAyt|;hB>^wA|Ni=FVWIE8qt==) -zTK4w#d9IuU_3QswO^7=yC(;N~8hO -zK#Ohpkd-A&AqlE*)CK#r8R;%8K8sBp1@MYYc8F9L;_h?IWnMoEH<#F7iMGD$PrWN$ -zI|s9b;KPZNq&FylctTuN6tXvWVh26X47n;Muy(R%kGc}WvqaOSIOCf-fNeWt+Y-`# -zpdC7q{!8%?W#lB8#qm#~DWhW90GTWaYKIatGAsb+<%F_8d<6KH&JK2gn9v)prsh?Q -zS#ccwna6iJ~$2Cg;8fo`F*}rLyiI&Wjb2bg+ol~!$LIap4P?B#q@Hbo*U(!C= -zF#uXXrN2wsZM$HLmGV1|{~^KM;jKv-pM*q50|qj{!XtB8Ha!YBdwC>{r@RrAl}j5F -zyFJ4IXpkUD;B;6YCD&I@ow{3ez>P(HURPn~qH3UI=y9Njg46FbLh4%8K!L9d@-SV< -zPCe81YP%zWcC5TV=mI%|B`066uQT^tCZRWiVF}Qpn%KuA6Hdq$T_1;~6*XYtPJ>QG -z17$Gvpwt1_S;EL9xi7!GxccSGX5+qu7OpN@y7GYXIGG?5naZ1Bh>&ai -zOAJiS+OcGYBMIW;8RiHvFLQLyvL0z9gS#POyl!Ik)XIfGs+I<)Jdkd&Z8#9$#~+J1 -z6yK**9OP9!W^(Ac1Y+@scxx&fO6+ve48n-Wy{p8MBqe73q{0ATDv^fbi=izmRD}w@ -z1K5cA5!DIcpE2qw24BKtB^-<1B<>favXrBx%cN}vZ)i9E^23iqQ1TD|3KKWS;rE4eP<&%( -z;YMm>Iqx2m4i(T6hD}FIwTkMY$$xnU8p7v2tisMHaJAxMARWz5ACwia5+l!5KKBhx -zY2SbJ%MTNn<%xeq^rnpO+pqGI4LbB=T-hFx_r1WENHWTX|MdYG^lReu?c^hBW^Z^^j!giP`!-X;mj1%_(Oj6}-)*3*Ptd;u2Lw^WJ&6*`76@I@kA5mHh?} -zr_~XA1>qY`Xfyz-9}In^Njcbs`Z1KmDsOzB9;h$Gv!o)M@$FE>*tYk}5Ao?cy8J7P -zayqAv(;n|n-zkPv)&k^L(0A3I1}K>x5c<b~v>eK9Twd4lwDFoPPPCt&x}^STj{ay$V|&nP5ww>>+Bm5r%>1 -zPC@eARmmLu<%fYU9mDX}qP9~vwm`#3+RuCS -ze}xk8cAPZ}(7meMvaTL1AS%O7kgn+ooKq6PCLZOeq7d<0b=f#&15W*I`pXahkg>6u -zeT`q2JbgcA#{2wXUu$KikMUATqZJ-F%wyhBmc^MZb>4;OQC~&gzAYp$MD}t&aB>8% -zH^|PbG|LUC1t5c_-o@s@I1l|d;=BLlhp%t&0=C2AmSA~Rk;48OaF0Tc8V^2Yb(A|_ -zCzJlVktcQJW#gg<<4@9>ispZ5=lUZmW!QJo_(t -zgD>JFp*Az_T9@TSXIB4Td*9kC$8nzdeSXCW4|msOPS2c~b9fafhPpXIBwG-f1RF&h -zR9~j2&-9I5-E(FR28O-a%_8;+yICY3Vi*etksX-gEo?(x&MwTI%a62k2K|iJA@4e$>BEMN?j4y`n-$RH@>i4@o%1i^MFDi%Kxqw#BXq -z7!one2w)VA6_%i58MpStShPHeIG9^BS5!fbSM?3_M24S9mx$VhDq_UDO^Bgr-7&&c -z^d-fY74UW)thCludq=D7DoAM&rih%#`fi9Db1gzSAu|+;lulFGP6pbIW-s43&@&+j -zJbNZ;12i~82WK>9v#HXj@)?r;Bxn%3kc4v&7DAw}Hu$2+69TnX5)~*7`l1*D3zL$} -z24AF6;zT7PgOeS%n%Q~C0cay)s`M;T%>=5^S`R}+q-DKO$WiDpq~XgW+VUP25W(}d -ztANacpk<(>sV}MAHIP$-Go@QY`G4D7@K -zh#Ob{cPH>PP+P~SLU-FzBIG3*_rn5KUc@1oivuEHJKcG1)Kivy+;N5y$}z`)7>9Gi -zty@SX_fM&@8jq@*OV+pEtm9j+C;3-R!*ZmFX|$u>)6>&FjAKs!iLlQ66|3D4g+*P03; -zMJ7QiLVwM^GNhnQg -z?M}aT?GmSN+kDgc;Pu2&uJ4VmUghjL?qvsVrq&P+G9E!j8i*8)5i5^QTGUMdvhqEZ -z#_03lR7|s-b&W2mE?7GFTfpJ#>5X&45p(S{u}>eZU?cbUgGmp|at;J-eLLYR$lo9%% -zy7|Nks=jgqu@qBg9Ylc8f3d!mu~}x4XZ@rY+$2ii`V!d4+*E15I>kysDvc8~&(1-YMiC@Sba_@(yz4{67wxjt6-1gYpeZh}4my~^S}NQ!09Cg@ErYykq4o5_SShP5 -zEtaqE3DA`hO3-Uc#C4Pku!&^yr!Iq=n`odyrI0m{I7S{~+5j}pZ_pj=^}MLR0_z88 -zQv@Q~1r9^?qH0PG?FV@}_Ul}wg=wJYvx*TRirOkb8w$0~t245Nwu1dOW|j<5Yjk-& -zMT1tWn;m|mdK|KDOvX379|>CNsn9s{Fm<(gjyX%c&Pp2sj)%^@Aj*82lz426JG4BE -zw#_Mss!Iv0ZVO}*6z0|f^ATr-*s|+kvcROb_dIY_ZrofjnW6W$?!01w2X=K$JLj87 -zz~4k8>29x)<3xGVY$4I#Z7ruG!)3d9 -zh|=^`Z2C*doT|ggN{G9me-a$$9K#)l+--u+yfvw#?du(=I~A))YMTjd{Xtf@#y1H` -z6drE*UV1*nXK8K516s#8ACxQW7@3c|brBA6{vKTh-^8sG6GWk4Kg -zv;Tg!P-;+@I%Y)o

to}KJ266#&dhyWaQnQ*=+Q#?xEPz -zp8=0CcWuBY&yO2ru~#-{zSw+^nvh4Axshlus}bOcSt#C5GBAjQjt-ynt^5Nc -z9-!3cqmK-f^!gy$D0ZFns8V%{r1Omn430sl&W!3s%2#oWF43BZi1;d0Od7w#* -zk!M!ZnTNJ{3mBo{@s;DNN0*N;!@Gy0BSKr@C40l8$(c2(3NTt -zF402U2ll8pWBe$pHKJChN8}nFJ=*e20*c_PYZd6gFKjW;c6B|*J75AK(+q5}GazvR -zJUwTtcAO<`xN35=O-b5!Oo3IH0raNa$7!NQp)L-l!1a|&MO6S_yl&FM?C(jE@)N6$piMp{;N!2n?)>H2V6q -z5fknI4TGm3HAqmr^O*_~LK1qC%gB73%i$e4SfTWs0Lz9(Hq>wKrKi0)XJ{(JaoAtb -z^A2)Q?Gv>>sK&&{js4|8iI+{th+-bJ0ok8qb|_5_B+UvL9Y{RJCuSvr11Sqpj__Uy -zv}4EYhJnVdkA~d0;3g-*DK0_O>Z5;8clHA_FV)5{Z(Kl9VNLXJlEyH&Yi(D -z>C+kso%@2gfbcHKulRH_P2BTIeV1grB9&$6axSIK1o^KMF@P_M^JNvkL30z2u2XK? -zk~}(6Tb&)y2&MNZCc-oYA~0McW(T0 -z&I*m8Mphsh;Mo|eF~qsXo1qbMNW77Z;C*c2%NK-W-$HjTlc0)D8ApJ&fM3O35b}jF -zeuZug_RJvxK@H%J$%~|jzd&mJtx)dFaR={~Kr%4(##chn{=ct(E1IXG`kh3gGi4BG -zUk%ywG`_2o^)?>MgNXAKnbE9r3T!k=C!G{VBcba-PC}nd8tLwi+9O4gk3o?PxQ<(5 -ziC3|@K7=;2C?{qfAroNo<1(w}fs7-9rM@-8Y6sc!?JP={n+S6hL=Te9+$?YLyDu79 -z5cA{dx1H(9J;EGnd{}PToh?8obSTqx>H`H*TKFk2wum~o0BI#m@mdyW&`DJpUq8`V -zf!EQ0)hI6~IF@LlLFWbk64kfR6cT}C@(Qi7LFw?2|NYB=)<};!lcAYOTokdk&~y&i -zt`7zvp`djO$iX!Omau`;P2SeBhu_*nW;34l_ycE;dI@N$`YAF`wSMwVoFAK~rG5hP -zte>XlDK$?;KMC!ClagBjpyzF17TJNy3ZSbX6R4+F0C+$fnA;VcwN2zrH}%*Tl@n_0 -zknf}gg&m3lCluSE>C6rRSFuA&J5)waXzGNVT1uy!6i&!_d+oHkKD9%QQ?7C9oVTCC -z3~*@L7n;_DCN(mtzzx;YBr#8>9kF?uwohiH6H`lK=3Cl6&Gl1m=1p$CL}}tmQ=&4d -zm1$LF-X_i4Brwl?QO^T`t|$6I)2@p>bJ7H4_Qtv4vt{yZnS7a-Nxyj+1hnwkB6zk4 -zzPyW|wTA$S3w5(uaD9*#fk>|# -zM;978eV;5v -z-rC5vnb9ip!qYVUdC^v88&1B&xAzzURlDXy$0Ki|t?~sMN$)1XIpd*;7lW`c9;;AW -zu}QC!G#a;#J}>mr!cPTbeL|jjf*VZYU@p=|*=CaWA`6Kst_t!HAr8)>DIRMJe19+% -zv&sT-<5#Po{K_lJXZ7Bzh?@_?Pf#}q#)V$C@En~mlhC9oXHR!lyE3sz6x!zmw^#8% -zpIfn{qLe8wCg{eh+Y$6bLH_p=k-IPZ!dcD<#TCu!^G4eyPm>eitY6Lhc5&r@OGCPiiW -z(X5NCo;DeSSy~#a2I-rXQx|-wj;DgH4z(kXo}m`3q7=(ZOf{|<&8pe7SQr!a}Z!xTUzapnqQlYU`n0`1VQ>OH@9OG+xf*{w$QkY{0kgSn9%J~`m^ta;%$T)Bx(RU*djAOpg^ChgE&lp@ga3g1e(KyZI`rSO{Y -z@Dt~k#rGWx8YOISeovD5hcR417jg+nnp~X4pDve_^v})1UQppJk -z-V@i{RDVDt;k;O+ujvMFAt2mvyd2ZsBfZc=k3M)4CDY$EnP=m#?&cx-VmV}OMYW5D -zbZHQkP75AG1+thGFkDM~*J~>c#aW!f^d&e{;Tz&B8+5}mDcGj2ExOOLDG@_`H{K?@ -zEgnPxRI^?Z_3jFyoo2tGt`kD5@pc)=jtuJ4HoZ?wc%vU!myV;FVEcgyhH+Iwm5clKW1dvov3-m81J;puhw`?bA0&Rby8aD|)uZn}`uNe$9{tUu -z2ao>t(F4v0RA{yS>;JfZ_$TYX{-gE7zgR!~@%rI+*AKt7e)u5;@2?;JnU3V=hw$&} -zb+Od!LccI=R{!+z|MxBl?6^@mW; -zM-SH@zw?jZ{4eW|?yo=o&idn@QOw`&tv~wi`r|)bfAoP)ei#4$_?;EK^IP~TYQjH$ -z6JGeI>mU5V`rUUq?Hx+{bp7rJ>mPh){qFbH?|w#U@7-Vj=$-X@57zH}x_t>EQuI{wZeo0DAV|;rhq#tRLK8KlpV0;5~YNxPI^e9`@D`zPtYMf2Qzf>j(c~ -z{osf2u=@M|_CFu|@4xwrV6XnW?JF6So_a -zc4KB$Hzq&p#vr_d8*|oaXOVToxJ|ne)oeuho4KNRBP!m^HSM;EzVb%YawDpYHlwB+ -zQF5~p^=2dL(~YS4X7zLTJB4nJ(Cr9JNIN)jUz)gO6SwBXom(fR6U^OjU%Htq_uI$_ -zX#@(}uev(85&y>X(FOZ@e_>zm59~clCC??1{0ez0=c_H(=#s?+2a4gQw%Tf6_;lb5 -zU%Z+pgG5}wyPsE!JXWgN{=P^jVyxf^*>#L;a=fQj=nRPGeIn-Gi2@kdXN_`nt%uo^ -z-xG-D`@Xk93ht31Bb2dyVeMP^z}``BG#vGhM*Y#~a({Gm49SzUfKs%J)+-w+mwYXB -zAN^ST9(rWy!3VM|Jn^pO7&os|IR_w5eI$&te8LKA;#RvU&&l#@+W -zZp4VS3HD20>BDCQ2(?f}5#>)An0{TAp9G_zm}|(IePt7fCPNOowbMMb632_KN86(> -z@hAkMUZ@NH`?b1V?lo1~n-D6mx)`!gT_t1-@&=l#`NUiNccOHb+=&E;v66i%E~X-r -z=FWV7d^oxmO73>mH$lc{uJ1brli)*DaP51uG0n3$8N|neX=(iv?o0)=lN> -z%VjuJexZI3t2CyzB*vwe<5$3* -zC6tE#QWFB(#}wmq+62OgvPrZ^MZaZe3L2U=O>oB%@eHH~b86IGr+wN0BJl&k_fb&l -zoxp;^n(>y3LPc9l5Q-kwj>He+i{9{RjUIv`#HKvJYp#;MkO+a2oJPL2UjVZ&OO)4f -zffoZCXlAJWW8?ig?ukZY_YubrX9vHT;A)+Y`w8B9?nHqyLznNYxMnsJGdB*seG}HW -z9XH7{H^QA|q}3&Xn+0!CmPw~_m}^BEcH%O07v#io?Q-T;#@Ph(98_!t%smBh`lRrk_f17vE@|CN5BSPD`jgCr -zazjIC24{uBb$~U1g%3`EXcUu)Zsti;VNkKq@|4#bM|aLmoPL(K(VPM5KQ^BZ>!2)--3J9T0I<2jpo&KH{A+HE>pP?dHTb -zd4jO6Zd@s6N##x}BGUa-EJ7VzXqVn|STSZ4=fFStp;*Ekaq0l&e%4Mri>-0x9J%xp -zo(T(FyqelBaOLt-pk~^_nwo6{6mY_eg{pw&>C&`ip{Jl}`GP0QX`wN;+X!{Ivw)cp -zwKbGUtbHgfNc12e&~8}T5p7v+xACH|u&LC7SZJI1G?`ehCH7&)Wr5w5rk4w+B2X9u -zkx$T_6*`00aTOt|#z~c$s0B_)qP@flI%FRG$N(8<2r8oU_!e@0rgISMwfIbzkhpnJ -zVCyh*m8v|RtL^6=h$9ks-~^W>?ew7rL^t$B$_{xODd?hn7{JmD@rEYkh@!T4Fd_X& -zO&)k&EG!X;fTyE&0rJ%k@(~g(f;1`lTIM{7>Pe&Sd%{3@)~BPUFAzJ}_A2(TtKC|j -zbcC}$<8y{Z&lXz<+&`cTg0=Ltd!6odXs=bGnEQ&;H^&- -zNT+iRagAsaO6E^afgbB7Q32(UPS3HbNu#406*jnp-We<9(LjaaXpEL-uPQ-yY1)KtDK8CKN&;qyYD3zn-8U`H -zYB`SxEXo>_vfy9EG`U)yhhCVuMeIN-bLR$z%T^IWSt=E#8| -zNK&2DF{otX>t(@m1)~X8xUPB5W-QgD*F)(t! -zicW(R?+&AR0_ul?Uq}}1KyL`c(`CP)R>z}jTC_QyQ5GDv -zV-(YPqVWu*6cB~Ga}DOUTDI_LPdaoOwtLP^ntR$!q*!VUh0Z)gpPdl{03J*WTrDut -z=;_G3=0xCGos3MgaUA0me-NXL@?=#AF9xP&ygR0KLYeXCo!<%Ha56E23W{M?nowAo -z#|$JYL`$pCFRYqI#BS~ROwL7VPT)I8zRi{(l4A%o`T0^yqD7&f7YjKR8jq|`UN^b~ -z5w}%}`Ai_Y>7$Dz*U4Uo4q^&22D$&gkjlSX?I -zpC3sdX)uUs&??RNSOO#`%wu(3ScF~PZD(R+p9XzDv&+WqnK9r^ssvp-ZtUIYT(?46 -z1x4$EO;lx1RDo7GK-}hKHq{QSX;L&*gAW1vb8CsZwL`Vd64#EXw -z5I72pyDsc;Twsep_>obr-`MF30sz6+j)fuCPb`9N?t-F17d;W9JP~X!h`;32E!y)V4=Kw85x81!~Ojyy)~7-6&dw6hX2usK_Oe -zQL`7o{XAEK~hUxs-^ -zIKR;Qjo(Z+TpXOpfl1APu(fUbrQZe%1?@p;CundhyiLL@zNkE{ -zZ!hy;a9%b(sNICpa-iPUae>^-Om$V`BM2)f)hEhr&7iCzKMA3pph`+pMOZcHVa<5N -zT_GskG89Yp?ryhHOd_bSCWlN^V2RYTRhl%0h$QS=SsWJrEXAqWZ*_HqfUY -z4y{`~I}IgwFRJ#aI2Ygd~Cps>j)b#wF+%Xi*t7Nv!T{973(kt>EHUrEB+TGeQnT}-r8vZ9k9oDKYn -zI#Kbb>bPlzj%&?c@alBN)P8lE<|<~MONMIQIl3&;$icmv=SdSo7cEuj(a{kXDw94s -zpTSLNDv>5WEJOHWA|5#3uAFx+iXBaA&59oP?Xo8(h;S=MTxX*+ItxsINk4VjjwS0|oQ$Zdp8v*1r{|#fk(5K3UI%RpPoDLX -z*vOBrsfvjO>wov+O%X0`oPScAl>7E&eOGltO>gvNE>d)A7n#rJiw05p0<|$W2x0mW -zrBVb&6%FtffB|vT#L4%Aek@VaUyx99x3j!`_NmKxwFEpsIH4r)5c#j(I?j|Ia%OnH -z03nZw=F;amB}iQKOYy`}(C9h%&Wi&R;zQ^zor_=`GHGO&)r5rTOGk%1<&F2&Xn_mX -zBKNIxw*dh`4g$43>Ckw}3eq3Q?~G|VepAix?XrJzs@jdy;Jn*gL#xU4 -zifNfb(O%40yd2;_4tQf^=b*C(ADIePjqmQvcbZk?&KhR&Ei;o{vb*WOD8_^A5Q+7U -z9)QGOz#vvJQ&vQS2fj;~mdn;IVujLhlZt9-FlSd8H6dim29q^HugOiVI6g6L^i`w$ -zw=p4uN+scb$+AL~BxqMfJPJU1;&E#T5f)bjnNjl)4&0R$kJ_R+dcIJzyN|O~t%3pk -zhDFU{5KsMWt3|J^xCl&BbpdoFsTe|ln7cdY4h~s_r?Xt)0P7#%Sz(TzH-k9oyxN8i -z)eV@|sn6CK@R3!ZWtGzc$oDL2hm6LfFQ*Oq6(Dbj_6*Wf6!Ge=+GS)oQ+P};RNUDU -zC7SsavXP5@REf6$4;jGx)li2w8h&(gHsXI_w+Z=YTKMot`auS@DtS++H!W -zq82k!_67@YmgFbGV>++rE(lDBa1O7xdEdskke@wtoRc81axfiWM7JqXQx*8}=x*t1 -z9*>T%n1)aVtS*A6V<@^d>3TIZpT9#df%Yglp2Q2%wsMhf`F2cfqC8dvNmJFdh>M-1 -zm3i1KIe|aq-wQ>U9eGi>4B}Er`bDU@alR~JMq4u&H|AyA1n8uYpe9_Z{ -zE|s7=yfHlL5!li;#qWx6si!H8*mlMNxuivluq^pqBC=bgB+;Bjjbt8eaoz67m+18> -zSs;}Z$pFv4JWB}o^1|a!;eo)qsm^Ry;Ycz!A7-GJMLXJqopc-&Yjl8zzI)KA6uguL -zG@2C93{X%&@Ao>*2$XTe3KvkNwr!ZWg(`__->FwB{~+CUC*;g33`$G@Y=$JXost6g -zc0&{(kWyHpI1exjh)|oO8Rz8jrPcpnLD%!p=g-Qgza2(g&$U9M3c&ET9xz)zx^w9@ -zc{z)jbGfZSTbU|Ql!ddBV9*s%aYr0O`VD+;hxzAyBQ{|R;=%A{Ac4Nm17D8eFRuEr -zIwu})<1C#DN~pld=YbNLh{a#xK&CbU9MP!=)pDnBt~~P6b07o@M!fXU0eLED?@=j~ -zS&282TPc|w4w%8Vn+M{Pl-#yH^kiFal#Q -zsH{MKW(Df06#(JHhDNahXKfR4E5U|FaYBt9@}0DxutQPcgkn21o!Oym;e?iUsEnM@ -z)CoDYlukJ*oRIVO+G%xtYKI!9T;tR^Z$E_@;Lx-$G_46uYGhI)sh=i^c{1&Y&C|4f -zG9#UsS`stg()MYtpK>#Aa`Poh6IYrNl}W8kt19z0Y2GH8Ti2` -zUW3vvANvAwXvy2DTNCqW2};wB_QUjeLhW?q@c0}>seBb~CZZ1?f-~Npn#7sdo&?&l -zI&IyWrfj%2)22Sqf*p-X0_|32Gwno9k}ymo-XZL!b`Y6&WWe)<0u4d7rK5{D(Dy|i -zB}KuU?8EC>oIFAJ;(Wmc9Y8nONize`oDLeoK~)OYqGcB~0X^+VMHj -zEIh+T?w*QeB+#ydHzu|uv#Ido`p81ruCH%x7;YrNDw~1+QJ-y3N9Rcr#61)ki%GpB -zQxb|D^BnqQ-Avs~KaKppwZFeTgWCSecI23fS}I?$TT;;_Us25Dj=~A<%hY0bYN>UH -z?aB9=qTbbXytaeR8JFABOW8l=6h}t_`8{L+Fi7K%#Q6rNr8bZT?u2L6avDYT?s86y -z**`kJGk<~53jO(vbuofjNY0|07Pm%#7j*)|qJ)T1caKZ^%oybkJR~D^0L6GW0%R(5 -z2xlBAgY55wL9%zlo%}3~ccVZI??#<26Ugsw -zSh``5W8HA)opC2T?bJW*rg!=QDv=xRj65htZn$>Cpes3H&@$Zc(hcXG@hLm+1Kq<7 -zcluLyzI@qfPt~cv>hxE3-Um918}7W1Xic?RAZQ*<*{Z=A>s?EH)JwO%tV0=fxz!> -z{PBF)z3T^jR@pnzM*EhrNADqWiUYf2NI`~+QxT@Q|A7X`j -z+(#A-9vxq?tRhg|f!;(>evQLTUCf%a#ucWHzcwu=?9)D6`tIqUFDK0jUK|DuAwZg~ -zcF1^Z%a_*Mq2Gas3(JY%%4~rK)l}Ivgb{k4<;R3Pd_FIne}+9hWqoPlDs9O8174C6nku-Kc2>OwsSvcAIYx@C;Rx_&s+Bq#w -z$pRU71Gx{*mg~wo@!?w^u$0X!lPahKwc9mA@z)otG|G}3T8BrMy7NGtl9Ik}CZ-^& -z%4uC0&%<~!3j$)5C>4AKy1v~3%or`A4ElA$EPeW>nL=yT~rytVXAntWM6H5S)R{j -zQ3kLElx4*VuT5qGlmTV0Q`0U{)nwY*N%m>m21*iPD5Z6fxspY`OcQPpPkq0EH)3WA -z(Wi$`Ae$gSH%B~l*dw{jXCCyg5tdm`O=L1(8xDY6os3%@z8$9$%UhsgA|oR+G)ga-PT7nS{|i&@MbzYBAP`SfoB^xa@qE -zsKnb;eWGqHov;|g7Rwbqy9;ZcCwaIW9zBDmu!6+t1*{EJ09i!qc&5zO;O -z5@Uu2!V~gAPkjg^a|oQ+8n>0R{%|p>;om -zE4DrUlcEvZ79C*6;B{&hp@&31ZlOf5zOGG~N$t-nRZM#IDPk?KnMx7ZYb+0F15LjI -z7xT -znbb7aRMwoZU!N+&I?%4jx28G4<;^wDWADnV9l4GnfZBQwu|orb!pF8_7tqvUO#7H+ -z9y{5BEFZ&Kqg5HN0zzCjtZus8ZO1H@0NnZMQSdN-m12P$;xbHkaF&-DQ!2WHW=p -z;Y@4r_Q_p|$Wbu&2lOzexrvu92F8=|&CN=UkY_B%_%7Q3H&X`akemMTkS~%?2T(LN -zk8O2dc*xglkh-ZmUM)ZBO`8 -zoV5&|$c|i-jIClJ*HwwW4DcFF7Ao4p7B9wN$|L(wU7xd1*tNMC-xD>G0-6pAE -z=;ftaYTXf~wpphkhEdzmE4(eeB((W9a>vQ##^(UhGD;B+Z|jS;rt)WOO49VU6xvMM -zW;BFWM;Gaq>7_A>G`jRRV$dW=uK9+28;iR_M{rfM)5xncn+bay$t2JV9d`oUKSi5A -zyqSA+c(@o{Iz&S3kciFiutE015IwTa1{YBoI1h`id2CjKf7_nlj4j6=IJ2`aj46yT -zc0QI7kulK_#_&cM!;IF%NEovc-x#S_W=E4P21v%##6K}lre?o2UfO1;)V?@qjg!nv -zg4Uv@waGEBvuv9zTcWlGp*pjzk{ko9i4$@Rn?&M-9%r}}Iw8lb%FmsUW7OpueEE)f -zlz(Q20;d+&G%Rr15;(PlPi;gN)plrdVuxas@tBc9e^voZ~nW=>m1oMu%^Gnmp0gEZe(nifd& -zHfh={OxArTBND>#>-!O@zvMP -zy$w~oa>u)J)XPIY;yHlt;$gre#vbM%(w6#42xE_lFf^EmRD3i%Jiy=K(eSWGSWkGS -zi2bvgWFwNCSpJF-)WgaKQmc?&C^qBpTww;2fbinjAps)hLL)2#=cb{1K^J+0Ys0X) -z&3X6Yplw1{(6!p};|dIfxHmYR!2ceZP -zndv|n>8D8Qr%9!slH5GirnoRqd0Qo6-&-Nk=#VgPkYazob(s_({BDj{o7j)0^ydm` -zlfC+Q#_t&-dYDugrf@hp1ZCepIu3?-{gq6>t0J$}wO|oO3xZ1|7d1wOHjP`^qq4F` -zWo1TXWkzLXMrCD2#XQxfxG+!o${CfFGb$@HDl0Q8>dPIEzR1dedCj{ZUu-#D8C@lm -z$S+pv3zpa)m%(XVr&IYwUL(t~2)!@ZvZLXpUIx=>iA@A@qgL_jFN_Yi#ZQt&6ru;r -zq9lY#$A1|t{!AM1F!n_>d~%jiHw!vJLxN1OGZ00*(~sc_v&)$jmNOOrYVd+8gyM8_)$%pgFPK*K*PKg -zS`5isQh<5Ps@zUkxEUR=DRiC7Co%{Nr7$@Ve5q4hHSlr|A-?tAJxsL>z1_-56ya?? -zY$Jyn};^s8oW8-PI?r!G4O#FNjG9?2N!LiF36&lI&tana`$s*JLd(L -z7%84vR7;QVrYp&SF=mrGMl=<4(<2$iOu^_IbmOFwwZ8Yu?0I}zmD}PC+a{3MD!E1P -z5#i|4;o|7d#oci-br$Dgq(TNQHowS$;)N8(O-lv -zB90{4NW8_YhyV>!gbDisv}nvkZ(JK_s;9Cs(3_B<1#GkB6sN2QY|t=HvN9caP8m#T -zcT`(9p&{RNMOTJR1pRXJ?H9=yCX!!4UG$YQWGvcwsG2*Mj(Suiw_G|a;6>c#W@&M2 -z7ILK&?6rw~1cWmfMdBC4MCi4$S)ctBan#;FIaGK!EW(u>BR -z#lD)4&2isY`;mk?T95LInCTg<2`k}w=Ag?-t17L!nN|?xNGh$m9q~y}YY<2p5T5~~ -z`w7I>suzsIoGQ(6xp-^f<0&N)em?y(5{e3SI0|&Cu#px)}(BO%s)pK|; -zjNsd(cyzqIBGn*Ryqf7MIS3gc%0fEB2qnzuG|7X;Pefg$e2q+{9~})JBfM>&Yp6xg -zMJF7XEXileWfV+cN0`G!G9D}KkVGX~`HU$)#;(n({&fidNK9A?3Rk#6Ywd7a-{u6By92b(sXR4N=@3>CBzce-oN9Pp+jR7$88xu6=%y^ -z9c|_R1-)WIMeV*aB7KT<=@)5!^4=>p%Ot#shc614Q!+}&0SE;5 -z`{Unb_2_L=@G{Evi_=gVf*_}7@LxZiAlOwR3bSN^Wh=sT*RkbvgcM!xrK`B?MR9z5 -z9Oybs+O-~DBu>tzQGU8`(_mGBCUN4=a=(*s*khQ2KHAPlXANzfw#mr4WP?|D`hFBu -zcYD`|qvPWvP(m(x@Tb3RnXAG_LmY%NnJv#?wdZ%+c-nC}TbwQ2=u4PA4(=^Z&hjND -z?co-bD3-8r3H%2lbml`;F|wsMt*DOG%0D@i%Y_O6g-6^z^g*~-p0%$yywuwQonbfr -z0E)^2&xdx{`un1g(`L~qn{9Z$*D%tqehY4`kX31@_wWf<)=0pcC60zT%+?AkFf -zZ+~fQr;)ItQo|-)idnc>4r(E1K_Ni=P#b?ynzj`lDLx}h9d~?n*sDM#t=P?Bo*VK4 -zNu)O7^+iU~yGyWcJu9ZG4z)vmskd=80$<<>B&TO6^D&IwpWj@^aiJk=_Dg`$eRJk3Ls15vGC87#uWskjhG>c3o$x+ch=(7 -zYu8+^7Nmtlys2Qe^y^$_yEeMQJ9jf8(k#kRq6aH$hyse*t?_QXG=5X33@`Um#L5g4 -zr48!Cy2LsaGn+zO=;+FE52V&fL)XW`$YH8_L*NLRChiby+e3gc^g8 -zOnI1GwG5_Ejqb_BA&@-r(?Ppv>RvjTIwg0r@X=ntp0 -zr4f}AYV45jqy>c?iUKDT+o9>q4rL1`w6sHI1t%1PmboVV9btLsxc)HvlD -zr_Oo%Da-(erhTDlO=wahlNw3=G)c^pX-90HrtOm%>BQ8MnE95rPjmg0n|YI)FHxGf -z(v+x7YGqngnYT&vHaSx#*>4G86<#X*D1H0ca(K2JzP!t!|CmDwR#u6ZgXVVQ-0ReM7{cBkt`7dA(=$#LnM1C#RmQ#^YKvu+T_>d$z2eEvskC>Q}R@ -wd|Xy~d*IrzrwrHay-T&jc#U?<>Ny+G#{~r?UK}|q5OAvaKmBhmKyJSU0F!OWhX4Qo +literal 124964 +zcmV(vKyP9%a{oSm#l$uamxU$GW4*g} +zFlkKIcSr(X>;yjh!{H)O5?jq_Nz{>)x_hzMzdgTVk(7F-*A5ogt_PpRV!f#O+hbF8 +zy53*^)J^vKF2DKv)jwUo-^qG!r~bR^Uxv5;xwF5j{{4@`t@-bNfAj8_?|*qjlV7B< +zN)O*%-`(8Z-`?OKen9_OxlVp}{U>2hKPc<2|JbWRZIx{P8O$F9D7|hx;k)bGo9iEI +z=SR4{z5DL|_WG|szelq_9Y`efaylXfSiBS!u-wi^QM(xlP7P{YHggEq~G +zmDpUH*0(8ywbI#D6Il^GG?<+BBVEO*G5!j+8D_7I8ZmRN2WJ#_K3`L#?AVEu=Uip& +z=xF(0eLD8t&biUcz@phtb^jOLOr6Yr7M0eWz^qm^lIJ9-5@7+>sd`TXQWMNN@*;E5 +z7&S|S`E~UqYxi~BRbk1eZ7&-o#!eoo@yAaGVa5YAAz=22fH)A&fCmaow^P;Vdg|q{Y@?C0 +z?DPm#&0DS8E{tR$FNdz#R&~8S8*~$)c{ySrxv*lVxHnKSIDtdm*V>GMXzHCB4bG!> +zmPwGa(?g?L})2FBbr?0{V|BO +zKLucD0{~U@f{wj#K{{xr@H!f})Nb4*VBCo2fq@TtkfmB*y{6dWRg#HyQ=@b(x(8o(eQpeJc+IgC{6HJ7O8fs6h$*u;7HoF47oEjK~t!kO9r@_&k0^FR2;y%CO +z;pEV&fxB+8{z`-)w_3;cJK2p%NPh3!^~ur+5Y(wEun8iW1x&ZGNw9{Cad>8dR>mSW +z72Su)hifUBYCf;yDs5`#HGo>%AgF9V&*&oK}Xq@ +zWDA%-cYR3@UK~Ajp!@7$Mb}5vBpV)WQK&coO!IE4Qt!AJKTNot*ztMH~W6Ofl55;jrX##6ykvbmVkT5JUAG?pAdhN7@*oG6d_eVE)?deA!-4XEG$99DnWJbPv4B;nFK}75idQ*g7rjLrl +zO@hb)zKW2I;C!3t8c|sg&o~yiR;?)9PWI$seHXM~wy9}U53->PLqxG65{&?8N+o)xIF7Z@pA(2SF^CV +z!cE9u6|FAD;ArFZc>U(xg1o(3AuNW*uzRxN$o>J^9n5^+nhwq+BBjp8fsvy*U=} +zWSVhfm6O;u2e&+GfVar%6f)FAVohB~IBZcCX1PM}0F-kgZ%|CR~Tq7n5k(aJQU7 +zkDbD*^nL{ImZS3Z!+2mr*+Xq@vuJd$o028h`@%));W5ibctJdm)sIa&!#qNSxlu)W +z?x5o&+(91Lsti-xrpbpxpKa^m3?C1735Ox9eYK<@K?k)P-wo11%zMVDW`IN7+stXQ +zAdcqBoTw5Ti@O~&=&;GCEJce8WWHDdfu)X##?DR +zw@eMQ=#aE{dq%DeK{TQu+>@x8OJlAkQKR!gn0`(pceBFInM*Xgx{uGo+0+_gP;kW= +zq+r6St_SQTPMNBU-oG4F({ehQ_zu)DBiF61%bqQViZ|Ask}W!89>(<*^Bf&6Xe_Qo +zBEcI5gB$W7UoUKI7c`4>#2`xb*K3h7*Q1no|JgH~mt>&q9UtP7(wtGfsT`+@uM`8N +z2XMNo!9`gL1gk3Ms)3&RmXmhwnNPnY55KEYv@1m)#Hy7}z-I@6@ +zvhI))GT11faCTId@kOmf+qi)4(K^475q|s>c$}lerYq&DJ3TeqPQ(J`@Aeg+Nj)v+ +zcY4^sDq~T$hD~Wxx=I8((88y6o4R^f7Y8HP7WGcJiLW@UE=g-w9%NN)KKQMA+l|u* +z-r0}Kq!3hxv^O|6!aC?Y<*Xjx=>ywGf=jX?)&I10Z?`t>~yhb3zOe)RT_+J0A%QKQ6_!P}gF={1EP2G#-J +zJD3*L`cy5H91)k*K1uK(#ZfX`Sfc|GCa{Gkr4ob3V?V#O0FUER+63x)ZAau^L_;Pv +zDC9r6oR|y2H37l}gu$lLPo+Ktn%c{8>c?fY%7}S2cs1Et$e#R}u;FP2zha9c{Q&jL +zl?f!>>Aq4z`-pQH0DwfqvEVZ-N*$(eG<>D7yM-;0gyQUxCOKpmeN3u|h2WOlEhFdk +zUEoH_9C1^?CbO5OgJ>Av2{Q}RYm6XZSA;a6cl(A%exaoru0 +zdXB!}3B_8*{Ktgg-7Hba!hz)sfZla#pR~Z}32UgsbXIIt*7g;YVizd2cFMnfEn`{P +zZPiL`;S>;U=Jjxn>fG&~Q5GStNd568>2yZgpLZJ1hmGl}mHK$NwOh*;G#L~*Cz0)f(x`T3ORtoHWO@y@F@2P9#1>mj9z-=+Gh3#-Mo69}9w?za_7-DC@8t@AC!+{<3y!mX)Jk=svP)OYmi2XW_8QB=$1*<&gzww+3bLaxlOtstix}ZrEU3luX}Pls$sOFVtuPj +zw@i3I?2>(PbypUZgXM+LNCJm1~ZD +z!3q(^W%A4B$R~OYx9sEe%Mbr2x{v7+aR*i`ru$esP>@by0zEUBBeKFSH>%yaZKn@BK5xknTSFABHm3*C{Nbt$QS-(_C4Zn|GQz@q +zd4zo_wM@0;@~Uh{#|6$iS82AOSe=XKPc{^1xo-Q} +zMz+%~^8(}`>Um3Cx^AK@jKn^Qs*_oKI=?EwHkNuwu|+kB~xbH>o&n3k{2G3aaLY($tA=2IXAK +zpsTM#d>*;W>>g{U|5CtiC4I$FI9rDomhIGanJ@aJhnpq0)*&IU(5sP6V?;}NwdqBp +zx=?&Q=iz5BFVI_sgU8XutmB-k+6jr^1qQu&X;QQctjW0U660`!M)GbOSZ}Rdy;C(< +z1?JdE)n8;yEfQ~WiB+WqJYzJHidmO9u%Hs*&?OcXe_`S;vG#Hh>JkGEYTPM%k)?3u +z#E6jXB721VIz;4`ct}De48cW~q>iGwIHu9{PNsu=#tbjH2N53Kp0g<-Xtzps7nj7j +z>sB2vF`a<_y2zM1`xyqk)nDSw>NAHu!^iN|lOHsa?R2?5on2Y{Al^Vgg*?9y6z2{y +zR3}#qc+-JG%@>S*>JX7!U?6zHMGqObX_SSqDGhO$1$q;+?q@74Q64XHX8JD6pJEn2 +zvIqcu<>Y~NNzCKEida&e-BeBaCcphQzlrZ4C3Go#uHlPS)sqDU(ZG&MZ`zD>S460} +z@`O*mqWK$B#o<;ZJtEM{F+=wWdYzze67(iPZxi$`L7NDa7fmnop6s$-%Hu=5j^61~ +zp~KgzzzDl%-4PD^fg*8bf!}~D1QU=`{Pf7bk!8>_UmngAsr(JnUHDeVQ|X0b)z;Je +ze=9H#&nI-ww{LEaZ*Fd~1my`Tud;h^?!F-!pd+9QA6*6xw+$i7dxFRjGNQ*4O(y|0G?RZN|DdKVyl!uv%wA=_)p(9Ta +zAY$LYIo`eV!!iUKc9GF`2q+^!8%!Uu1_Ih*9~o_kfHDGpuSMKz07!x2t{>9+O4|S3 +zYcz{cp!xlmNfKo`t}^X9LV1D$mwTj5miOS?dgwJ4O*<;%*2;KxW!zF3cM<@m_$`%j +zO93b%P+sL*df80TYVnn?SCKu5?{q$;31nz8zxhTy)&CKjcn+?9V7)A6Kj-+8b|A)5 +zn8#9>eU{~3efi~=kIfGhHQlb@JA&!cOhhr2hRwXWWs1$zV5DdQR#v(>mEW9UZvsXo +z5eDay%c&mY0%<1vSIUTJGaih-U~G-X#;Igm)2lC&{RbTB0dS!`u3!%PvI8<8PxK#@ +zW`p)mGDKF!GO|ttH=)gu1CKT +zPjw()Wu;{P?Uhp;g<%;I$z56XU*gi9ze8U?JVrB-Ba?h-gZtOn;yH<`TVrP +zS^l~v+3eeQWcnfovHNLkBIu(RXvF2v#0qgF@q2J4I;8deLZ^=$OP{O-0+h^z{nIyl +z7-l?06nn2)k6c#4Jm^|@Rj@lXE>z09RvS(CBGNt4il2;rFAROY&=G~+lKFi!OmRji +z*CW>5WAjso{m}LvhkB>YuWK%}0;(52?e`=-(5*OTbgR!4a$y}#Rvk|53oaw8KS>~Z +zBjLcC%ueIjd7&XsA9SzIdpBx+UqZkoXWq`p?ZX#E@$^I`DQ~-xs~(H@{=Kh4KJ{Moc4>>@DQ1BS@VaAj +z2MgTSp|)RKYS?xfD$Gv=mmBE3?lWihcb{!SpGEh2R)~{A+2UfeC+$;ie+gz4sw;64Ybr^1r7W06|J3AnjJgAJ!w_*C2>T +zqr1`FgsqJJK&EE7xDbf(+Pb8C5^_8qofL2Kb7Zi?sxx69>1iuO5@5##=v~QlbFDNx +zf-K`Fz2l9DnL*jf2v_z?;Xwy$kl*b^$r;IDh$1TcA)O6NZY4TK(N12@O?Lzo+6FYD +z40f`R@^Y3^1CrG_O=v7G=c4ZY-2lVQ>%|Ad&Z&C|kyshpr85j+l8r4^@V`ef@B;DG;d +zD(;-ExKrLFqW1cnTq0!0;q#W5XoQQ6>ZxPI1S+qtGJX^?rrr)8B=j?`Ea}#VP*9u&42fR +zRn0+vc&F&P!0$HOID0e=8%_d&AT@|uB9s7mwi08}EK{(qfFmF^(BXCNkw)Bb93iG9 +zDabp$5~&WPX(WwtZAS$cx7W6t=5-50#=bihSCEfdFcI2SJg-MgxU|7#mGf;fQ5< +zu(0Pxc;CkwB3=0U9c6g(0fzek44}%ZO!zlAond1iW9|sc-gGS-?|4Pbg;$njYiO~k +zx3%%vND~R&jN-LMzp?u8SaYY5P}ok6L|*;EdGzwi5@XLm7l?$W65rcn0$sH{b57^? +zd%!Q`GG8JBA-18yJg2#?@%8X>vQit(2m&D%j%#4JeR!i0jiE+PR!K{g6^I@=dz4_V +z7Majpdb@!nRYjY2f4(X}+ekAiyViL`p>!S+x*tn16k}A^N`5p%^2@psP-e=i6blpp +zc`slK1?szzym~bOf{=(o_~#$Kb(9Q5k}SUvk~QMxCEp8A)R8ho`Y{AiQMh+0Ge(L{ +zfGl;3YLYg`3-OXnwgM6gB@r9zWTRT;kefL&OhxX=tDXwraf>%V-D$Fw_YRmbh=miC +zYP8^Bwm(7Rx}2vCqh*q^Qt@iZ;7#ZZrmP)wwHu5U?6W))OLn|sjcCwzw+(|<&Dbb* +z4)M!t^TTv)1&8+dEWQPl8Hq_Tl9*m6fq)6n4 +zn7Iym%uiM)o&$nMWu`~jmq(XwLnb6{vFU|Y$F1z~BxTMVjMC;!1(N-6Y)rqnVqC35 +zFS*?{PCEIHG*bap4hp?j>LewP9T6YeuOqpRHIu%9gT(3-jqnaI_D1Q^4v%Nb&SHV? +zg?xLg9O;ue4ZA#vZ)))*#*LF45?a(MFUHHO8a=!b`1XH#7WGdZFE;jOMs0M^DNxI4 +zB3*S}N9|m+ZfH*K`}~~rW{(elF+V#4edhoymX7ru^Bc1>$z$`#ilcX!D4aMWPMr(| +z%_PU&bw&MBVpuo2dsxUofR3eaFbLu$=xVQggYz^oB6xbbpw0p;t4b{nOv2Fo#92VVthJQRWflpPGUvE2yvc2NC4Ajg%%WZW+Wn=gQdToxbA2Q!{H||ku&(2b<%AR +zIlT$~$f2r$`z~TJG*^S@A9rTlJBY#Z%&Y6z$lD}XKK7pMFyK-3$1XJJ>|+@zVY6%Y +zRtWmq2YB?~LBSqM36n=hubaw9N;6GPs{?HA_KS#WU_sDrR{G&$kU74f1(~FRBn>6P +z55f9g%^|Rl&%irRF_e#Ye5-n+%TaD1m2z^PdpxD7RY^p{7;pK9*2y9K{ +z9ql7q48oj%l^8^AX{MJ(-MLjBy})|+p+bEp7gl%!5(5B4+Lf8|*EZm~w|(;-HJ$X1 +zHncV=GaI2PshbNiLi$V?@xVh-ScKiKETgP^c@@K8ILc#v#Wuh}#P|aAV~vlm_UtsE +zlHyQ(OKU;}JvNnvjj5XEg{r-#9uEfW+j?5an*qyWQ_*N5Knexe*dWjg?4UfhyMx0_1DfWnK`FjHQp(4- +zdACSl2uB!9p`D_w+WNX^s6vhk<6_bB1+**oXAxFlYcQiF>)M2#(4jW7wU=ceQ|ZVG +z6R2{$VA-p-RvbwR`}r(<2KYl86rmz&AU@ksN%5{8YJ`l92xdM5z${PH4WRjXSw%#W +zvb&&rm~DN&*KvT{?a!{u?_vtl?5Pr8hx?cVV-K`+cnowG^MKK_CwJ6!l3d +zXy&m5#g(C3qR^2Jyg`O6y@8+=!_HxCkz0>N+zKG+ +zy;ET6^1^Bw)kRdsGs`ppv)+_Mn-_fiq}2{7#qB?;tVK&ta31A}r8CkMO5yxuP#$b} +z*blse{oJ+OzuUM1ix}Da&37z5%gAv9V(-D&#xHeasL!448FTz#e1f@WA~+~&$oo4S +z!DB_pY_#mj(EnL-8_rei(7cX`rRzc7qkZ)%or`J|VMFgEHBMlXfpch7fMr3^aQ3kXo +zm4Pjc8_5pw4SRU3jRs_#b9CXAbBkhaTkmr#f`dv$6PxN+6h|6?K$u`6R_N_)NCjb_ +zD2cfAC`kvR@fp~4!(wuGE0zggSQHLWFhJiE7tS_jSHT0|V6j3D5$NuQ$~u~{!nOtg +zppvwjAyuPJDPetBNwMn8s6)?9IP5)q9+$Ks8$iA9X +zWgfgw5Bk9@vJU2BSI<2hep&60qCQy9{Y4nwgT3!}?1Wdm7MMsUQYIp?ZqgNZwp;5| +zHGj8D@2&HWh78-7w4XnG!VB$>vKlh;;tv)`ECF} +zDTyb2do-k&Dci4H)8cTm;qQ7r2$Xb}ymu|ydsW`Oqmn>gq0(br7Xo+8X3AIGf`Vzt +ztEPJ3!bc}iB?ofjLN|p@(}cWPA#fh1xsthNazD1VD=MVGYqP3kr`DqH2^{(#w`tB! +zc#~*pvxRqoMdV~2Nv-#`{7A{ZYEkiJaG;9=RAlhCk+8B!?rdU-IolRe2mC|i=M+6P +z8e@eOYX%~1%d8?7AcV)WeYN2yWsanARC`7gW@Dm>2(rtV)u#d7L>5I^`FAj|o%fX1 +z)M9O!a?cqZomO|8f&SFmZOg(#m#BBL*eL{#az9*Lbwq1GHo`AforN>e7Z~$}KM|$- +zs5|!)G|t9tA?j^fGUcUY4}GHEI5$ZW!igA8H +zN_22@NGjouF0%$~2-{o&fC7EsZwmW?xT)FnH8&06iF5-ujgP8sF*62c%#eWFdVenR +zV_55L^mTPxc)$UHH@Pg28$`;Lb5S8b331g54jRUS-W$3Dc2%gd;$Ie``l7z*hCRwFepz1=75I+rMb&9juq1(JUZR?KdI$&7%ko3l?emER +zcP6;AHY%P14u;>_CLV2DsV+L0%>7W8mqtrL($=Juq385{R&Qr4(WSS8IgXAO)W6$i +zY~Rl0D-OS56F*@}gzAK8H&mYD%_y>e3)|{E6M0T%I>Clhlsq4&qEKP|njK+eMw}L} +zX+3sxF31VyLGm}fK{QZ%F^5HtF=sW=jgEu*b@@siZ`EIM)r3z6!D{FaNtzL5-KC +zoQh1BC5C{<_%Vb>gvs&LU&R%)upMIh1Kul)7!uU}EIbc>V##IkuOeI2r%G|lK12&@ +zl&3aqK{+1IfBg0HkDoq#{6%sl#U%wV`peJ1Za)3_&;S0XKD0m}Dj6CyY!&e(KF|R{ +z`A~AF64B))?&~FS*W{zu{u0{$O86_uhX+4I_|3n348&d72x2O~D5i+8GQf$*Dj7;6{%%={~?bJ!dLYED;vJ; +z{xxF!*wIt}_6386n~yi~hMq73EM|Undb=%6K5|-&1&{u_2-385C6$26pF!(teM(6| +zdTD>6EwIg2d>8s(zX1aIZ_f|@;fHU(lOIU}e(>G@{$6ST7z8^-CI5APnl0krnhF&V +z=#?0~NF2sLd^-pFHc4lwsl%}XYF|Sf%q&^|?%!Y(lZ|Vy_UzTZy*hZhOxP}q+g_}h +zt}JNTJ^5=Vq9yQYDjR%8;}|{DcDTeve4h|%N6MCP>B)fQ{p3V6$1irMj92axd6%a? +zHrPcJqym*~To6_DhvbRv_ewd2GDm-(_o)QgC(9I8q#DDPZr~r`G$}|dy}+L_x04sh +zmxIdB^u(V)T&lKg4~ptQwTXE7B+SU1;pZX*vHHCi`N>JiE($9-2>oyLciS@=Myt!J +z%Z3inP}N>Q4pcRx2%wGO4L32VQSo{@Qj7;^j;En6>R?dHC$yD_PqgU@Ojd@O<(@=* +z3rLiDL5yY0Sy{pMf^GE#4TCZP0+W&~5f~5A&QD2|kjd$C&?X7T)%xsD50Dri%87 +zqHmw>*6?ler>rY@L;KJ2L8Uy~U<@$I8}=_N8K!oVY2DSLxxF;B=cPaqent)_ITtqv +z-n8$##qA9mF)8W&cc>bQ{TK7~3|d-KF({JXIl_y3B#ekB9`!d-;sqpGuaZQUxSltUmJ71fC4uWNd>W20OD_%2l>SL*hod +zB#oCO4(ZTWcfOw2yQ(gngv#Ih<1X6oQg=RgRAO&g-X{B9lD>R +zwq3m=2izB@^SdmQMf$hrx}NWc4ouh#zZ?qdN|yV_`B8Vy10{ZO2|`!D7lcgI_8ZKi^5&67G +zn;2qljhy&B!!GpgBY*)lIth$mPkGZPH!m<9yS(oZMeYiArpwi%Judu=~`a~C(uUD%@toNEn +zg0|cidM3QcT|_JDu6>P&clpkb-F{5GB+TX{Tjct8I*&XGz0wpk@>3Tcu2-6uy6X`3 +z@UZK>G;5l8&F6h9nYSlov0nAR*=iZpag^%cFipW5>DRlrFN68c^TPgj?d}`O-ZK3= +z4&N3*M*80(Y3?Wig(&1{wvH;VUp*er<8ZwydLnD#h@Dc@VuG@1tsJw<*vKjU2l$OqIpnfzk{vZn6U=^ezs>Jt}E8?bPD53pGAX|jf22KlIx!bl;vcp#jg7GT_$I&$) +z7A!m%<}i#_?odLhpTvt)KYS6KeY*AG-=p|Bm12 +zfjilCY|ic5opKQ@T6~lH=gprV_4UEOyEd)5?P&ad|4wrJ{=A#|`|qE>&9$KZkQC6r +zek-26Kfm5-6wDuY# +zKXgUw^r8?`RPR53eZOYlPiNM;xO_{Cgv{D^;GTbO-{F_f>8Jkr+_Znea7l8iYxDj6 +zsD9No?Z@kt|Nh8-<`-`#Df*ps4`r^kPZa&P{;B_5qxkpN_s>5he|dxc{rv1MLGo99 +z|K1Q2Wj_74sy;s&(&(>c@V6$J+59nzuhH+czCJ%$!v7`J>(8Gb@89{|n?D~k$(4Bb +zHvP=L`~FMK{4)J}^IbJBmj8F?H7Pu;Zd$GX{*{CEHw~(%QSS$xntRvh_vSTb +z5gO3un4h$xA%5IszEf2hpfOj*oYj~lQHQp*Moq%5Nw7ot_Kz@C%dpCDpkgtx^c +z;}^aU*>_%_*)NE;IEiESUWrffaWHAh;7sOO{HSTwLEK8YyMeXRTEjZ4}RCWR$Y#Ridm2#^uIShB}E&vbe`2D&`{oZF~tNI +z*YYgxQ(x_u$m(P)V2TQ+7+Dr#yY3Q^n; +z`C-vCjxkD4dbZ0UN|ZjS>t4_vOGCfaoq5K9J_%QJ`HRQux3OS!z8Y$p;xRQ;Cf +zXGGSk9anLqv{;@F{jFVIf4o+;{)&t6q>f?#wybC4lf>*xQfTG2w#tNjepI0<$^M#9s{dXjn+bk(o<9#o(^7Bq$@0jH(B<@Dg5u@o1@(b|3?J)e|O +z`EpB1*}pw4gD0W%-$}(|x%yXYISUr}XIiTu%jSOi>YmMKhVR)bfM!j6Hf*UD`D}!R +zCN~V?+FAR(cH<~M)$i#o*>Mtk543yZdUmM6C#UB?2S-etL`&g#EIclH>TDFB6{ZEy +z>m5$B#OKlGije1mvW%gU&F2Zg*?a|UUymyVtj@w2PeRbwVkwI$F5-66?QXN0R(M7Q +zrPPnI&znC3KWlgU7477Z+ibO@1xqiw1i*zXICvAEj%qLJWR0GFb6c+IO_YLtlD;|U +zS2zgr1<_Y7#q|D$$=w9yiC+2h!QcS~PWNyQ;#4HxavKlRR +zVusI#7i@M57hf;p;-ZsYoQcyCXB9lU96IDj@T4^*Gm!h?$#YE6gRVy +zldU$9(h=12IVSeZjK^UQc +z%PT?z8jXsAl&-W^CKyR*m$>P7(SFz|biz_=#_ys#5PLJrwPQ$IZN<iYj@ksN4}1mR7V!Os(BvI +zpzcZ`9p+|YcYW%PFgxa)-A&K$NU{;rdaQyH#(sJn({4TQvLhq_dhqn$H)8MJK@LY?>j*X;+`~lE!;T0uD0AxN8br!rfmb?d7_!VC|6FYPz(@>al}70?cR=7Hh2Rs +z6fy@#6jdd5(TUrec!%@?b#@x0-dv@@fv?K}*nMSXDj+4ET=JITTskq%Q1HN=~;k5>Wj{i@k>(%y%Q0-FX9S$h4S$zJqFhp*@ric +z&$-a4mxYR22PCt|P;pW>C-PB@)7$T$>%L9Xi%&Y#7}vxScWp`(!EMzzQddZ7(g&fW +zpKau9yHY@;$@CLMv_iSL|Mo!P#u!pb2$J+oC9;3Iqh_VVjcL*RL4j8iS3nKW>Cd5OcQ#3SH!H^iK+ZTE5D2N8McqSnjhJpPuJCZOK@DFzdc8w*(5Tl~m8s-bh?k*VSg$JjX9nX*q)k9u8udgH +zvn;>V`yj3{-m4}f_oFT`Yd4Nb-NIW>E#xVbYIz|{V#mY7IaV6K_JQ2Q!Xm@1wO3q^>nWQc8v0H=g?R2!A$z71(kD!M)^TX(YH4e}IHWBcEe9^B>E>0PNI~FxOk{xVTVq(A +zC99uAHOdrS{EXOgqFqW`ULC@lGLv!dcQPZxRyH-Nm1GJ=!G^mEpO6TnwBCgs7c$% +zNS;4EbVC|%;yIrGWc6!Qe}6@-4Ju}FPnAiNGp-lMpmUwcjAs)Ga@o?70($1o4t^TE +zn6f9)#G)z^BZLRJc9HGu)o~=+SN%WGsvXas}mZc;* +zI%R8EfhaCSMrKrEsHxW-H5~I~cuMmq)v_jzV0x@S2Dx)Tr*8S;D0Hb_M<1`FY&7 +zfnN)3Bw_K!>i~#s{5q2o$f7v4BisYU3x3gV2cfAO%z?yP+8w;dQn%#Tz?kI=hqKPT +z@ZHl|Me#a+)KWuCBWK +zvg?slj&dTFpr({XI|d{iDDl|`Su`ZgM4zB4sa@c`2c8X +zRa-X%@r<*Qf)OHX!I8T;jRQf1nLd$uPLq}pPB0^UD*oX0mWPBg*W(d+@QD^0;ANHA4MBHMq8W!8lyGaY;PkMwNgU0B1|NZ7e!g5F){n=OmlA5xdx2G{qB +zZg4!tYZN!K0j(inb7R4GRKh3e1<`UglkbzxN7qiQ)o;sO^@kIL-0o`}lO|PQ7t|$m +zL&vLTTbGA2-Z#DG8}C#9 +z=qhF~d#05}%ZgUbH75J!Nt(pWgA73ErOJL_((&yzL}&AiQ9S>y)@F4F{UQx3kKm!x +z8m)+6qAR9x%g6YrD)urTS+7-Jtvd9)h#r-y-5v#_d$hVG9a|sS@yI?#(&WjSz5FWG +zcm46}?+^Xwis!7}KR*BJk00MJMpu1&{CcI-R0yJ1pPxV8xmW-EVLtx+z6_u0$M@fV +zepWv}uSHq?`uzFPeExjrd;Wg^`Q!7?uli!P)o1hb@86G#9W|9g{>}Hl?DDS^y=wE@ +z{NZOQ(rKc&fDAJn?^XfQLXb(xSQNK4PK`W?`nopE(utlc)dkU}iM^D;O0~3^>X6%R +zQ%*#-QO9FJ51e+TT*-LNIr18Cy_;4yb1^ZW>CvYM$&_$ +z7Kui$iF60(zL&aD744C>y8LkGiZA;#SOr@{4{?@`n7L=iC8&X9FNu7q$W$bC70Q^? +zk8O!?6&4#h&4+r3cKa-O%>00e-7Fd)jFKXtN#~KCBqB!R-%xPmWl0xOB=w&d +ziWhfGO2vkM2hc7}8m1k^&C3y)(}#;N%Sx?#?$o}_ +zmPvb9dc7F3a+vlY)BgHI%txssS5o6%ORdtOy0~6dwYDakp>FtBBiT}B_4Lnht?Fv7 +zhi+`Epd4SgR>$LU&Mz9t{)@6R&6Fy +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

PbXBQB|TB_;A!$x>;#Pyh!$o}Z +zYRfqRZBp^(ILzeMF)EJ)2Ajk_Jwl@O6=?Rv8h+Ty=D{9;A5f8$X#V_RK*qWT+U2ib +z95+?hpTB;pzgqDe)=G7n7Se;4K}{>pBk?bHrs8E#kGdv9m|wRJM>YC>W5QGqm3aIV +zW6wiUKjvf2$KUslo`dFV{Zs$__3LN#&J?4XrqBIOtB{HQTZt}yHNv!vH2z55d6AMX +zHATfwK0qE{zxnaZ!{`tT`i<1>C;g}71=K7EMS}3_8+Kd>9)Rjk6OT^)@E=@C_>1qt6(`H2@{5q +z>}W^=HH-{U(BnvYNSFhn5tDR5_%}fcJxQUGB+dI1u7miD)TYVk?3j!b9|gpgqaM-U@?@v#m_D)|ssSezW+j@&^^X6qnJF0BzR +z5G$BXhq$CX(Nwb$2O&bE`sJV()MX_8Xrp+I$vC>B7g5hApms=R^Hij$g +z9Br3`sOgNF-bkiSFK1Js05bv3T?B8t+qK3c9YzXRRGC(r5T!&IM8F)5HQntM&STCu +z8iQxPp7`nW1hj%D{rE4vcK1h{#Ue{gP)1uPLz_WJ3=m2GI{*hdR&wQ-DFwwkZHI*3 +z)aBNR0X0yC0suB|FZ2lFY^^ReJ(Iev59<)eT6`NJ9$gkz1Nx$&86{L(pEJ<60dz00)Ce=X<1_TmE@zQ_>cfmbgp)Bo2UZ^TcB;)qb+&wVs{3b +z#1v}cR~wwSVq+jmpMRWvVy8aZ$h6>#BXCq@la{b-I%V$7Tkq1z-Xn#CkP0T{iVSfm +zWY_k|Z6bA1i69iBb+q#GILVK|87>ZYjygvtSpg30OHIEUpe@n&yqWPo?Gp#0w(6me +zu`$!-{f(yF(bR-05_ZL%aEu0;t)?h+7A +zESC+J&JTE94VL1c;49_bRn{d&WYN_8)Sm5A*% +zQS7lHZ_(|()v*!8jnvh7sIDkn8fcxoF%NTdqG9~I*NH0aG3+fN&Z!rvawDVOoD)W@ +z2d;WS%w*D#oHZ^9;!2{gh45Lfq?_8+!&Hegh8hT(x#lM1V%uJSlLSEd!0Y4`#FCob +z2kUzr0a`DAT>2ISU7pT)@J`X+q!wXP*V~v#0%;N#tbnsj2?Ozky4>4fT1G;$;n)HO +z%vnKDdO6F1h7yKZX%}Quo*yD1HTqSWPK;y8>&DrmzM*?UMv(9*0jh}s4eAo}8%uHb +zgclVqJrt5;5qDxe_@6wp+eJeio|- +z9LtNFkv?Dd%u(F#b{eZAsY)!aL!0I92O4!-Wv!9;bV=cH?nQKe?cW4|X6^rSkYi0& +zL0zYL8T*6h#M|bWnETO-k0n2-4h0B_M4SkUAmX(2<;+gJK~NhMiAxa)YKH=~h+pj+ +z($SbukeSzc%f0r{MjAtkrD(+c?VDqtlFd1(N=aA~ul3qnZ^q!|EcK(0pGO(mL%BzGoV +zn`9SvIlU^uSpp5dtw-z>9%r&*rgWlFNp+3rq+xukYi^MMtWR(%v3ddm_Tg3=i}&x4 +z9k4s+j7n|dad|{q4E%*bsM=wy>Tj{eyzJ)K)`ZU^RDe)qrlRkL4 +z5GY1OcF0Z~tuJKegt#*3b^Q!)AzeJ(R>ccw$0BJvsr!JSa2!p^7M0KeP9*g+YaQ^> +zs|Y|qXQVbP`2q|sz6sl7!7<1<+2ucEsGsR;Ao;U5IYcl#%M{%ER->~&`7B +zsKZ?*ks@6i0kzlC+hS0BP*Q`#+taoJ&JVE4zTCE<_bjEaisc#_F5U6MYBq*)|o-&F$8o21G8jtm6b!B=#r7-_1Uu +zj&+gEmX=$V{@F7>{E8ea?R|;zf)M4hMv@!p1`Xmm1r@4Ec|O8P!k5*?yv<}vlevVtU*%%2Zoj+%*WylsH6pz*C$&CP1HKLMBJPU-VF$$`kpS)fl?O&2^o +zX#wUiWK6|Mtc(C3M==;WNwg)W@=c4hThv?lMtdG^*dU2;{9USYfP|o(h^PVYOl!QB +z*W$;;*~PR4SX6>T!%Q?HZHFi{G7-l-Lf%H@PJ>^LBjOd7j_eX)!k2=OsW^lX%ZNha +z7Vjl~70zW(CJTv5Pb{-YsYMv!0o5YPp7J!u02h%v1XvepQrKbQxj^NXnSo@-IZeX2 +zHFE9dk%Y10;e#WggrOt;NdA_D5V51_3;Qm?wj{KW2Z1GEUll*Ua(e(QRh(!(A9DR +zmBxZox4^(ZM2|PeKHDul@C?Pi%olbWduA08(1q$V5` +z{E)r)E+sRo>u9S@Me9mvuRr0cL?`?|fEJo65wTn7XCWmd)saLJ21%qXWk}FadARKU^i4{q;b?he@R8&XbRf8B9+Q3Jz>dd<)hK(dzap~};iQ)0U5k2f#>CTE% +z9rNM$UAzsc_q+JaObX{>7k8riiAR$f5!F`=FCu$-wmyi9(kDuX2-#cRnQchMIS1F* +zWHcOo-)gSTRi`+Hu0BRVi2KIRKGiHF=(7^AoS~&JB??vEX-vZ*=CfcFk+D>FWgYTQ +zZ6J%f8X8``3$bLOaxKLEm+=51)i!lgS5!@Uuerrd~+LDU{}{kJhJPI}Ry +zv7`|Z8v=o`F4`FaNC5xjOZ6m#Y>vDpt}CkGg;|rmdZ;+v%x+@rMH|d_^&K&sC_qJw +zPRM(bdpP%p_9;Fm9ylF37+b6cDk+WPA`bz9>t1c;1n_JkLcGFx4MG{tfV%=urH@Jg +z0fWUw?5_4)O0-agsjvv#M-ngnE_A;wI^P`)ZK=k&;ktBN +z8#~ZI@u=;p+4V5yH1CP!rd22K`cZ#JZh?4)CpibHCdxPHb)5}Al~HUWg>Xx +zLE6H8J?C+Rz1wrc-XHz_*RMbCsK9(t-hWi8(tm&d6_oz{-Ov5%2N^T$6_JNf;e7yPMztV_m2zy{`&2IS7!Qb@h$(j;PZ3X+Si7K5 +z3!2YmnC(&hQlEeRc|rTP39;#Y{s2PzKQ6HE??%0k-%b2n{&_+F_x-Q_v8gGv`kxoL +z@H5!&e+Tnn{yh%C{b|zCfBxQ36YL)sqz1m<)FCSN-xo~vANzQB=>yRY|F~e+yPebD +z?fnCZh5x!Bd~ZG)?SJ|3{ht?*Zojqm@88cq|6?v5zy40|f6~0RzyJA?A3xRbqxq;_ +z=BoZs&F>%8kB`eUsXz3es#5R2elmsl*zfT(k6t0E^B;FLF1gsg&sB}Xn}1x;w^gmW +zpTGOw{BwRjLiKa&wy9s&>7Qfs5l9O=+F#p8jo5^LT(E9wOv|s|{m;igm*J21@%Q%E +ze)#?OuYZ2U5B=FzKWzQCN$o$k!Vj(9KmJr)Fk1geq4~LgdN)?^@c-i{iy!^pW4Bu~ +z^#8mdubb}jFiyYM&wpL;>+|!+@9OjC1t6?{yI<4q?bF)oGydxrfBI>7|J2@m_x_*# +zq>%is{POuZef+CmkqL5m!wx#Fs_JNz#7xpkKddHAt{OS7UMtfdtk-GPwhB%jC%p0? +z;+W2tOkTuy2&F+QTLt!7Q4`+G1a(PDGmRI-!KH`3m_A-yl;|WUEdRW>q@K2Qvx@vh +zq?Fc+cxRXQF~@D`IFp@-hqAJjR&J3*CKFuTaGa3GP>COSeIO1kEdV?gpXU)GyGf{Q +z6o4#=D84YR(+tw;gkuPk9Pv2dv7IiMwO7D#(Q(t#n7A)i)0@ahvf*cua|4BcmPb>R0na{r%v2qPl9-yvK{qOJJf3L`ET{qr#kM{37Bh;dXAY6eBDL{-vFYzcGN~6K!rH9dqVa=)y9m#h1}u~26dh_qokw9qt7-szNwo22FV0F$JjR>0 +z{OsEznF$^6)2!?w^C@|SOd`$fv%q)4{<82aEOIpU=|x3xx02LX9qCpcPa9Lgnoe&3 +z@3*%Oy(pZaE;2uk$S|aY9H2Xs(R9_aLmT~l7A)K}NUkj?oKaMQ1l^yQ{5Yi#GI&~- +z(yhpx){U*lRNkwb`awLaK-9oK`1B8XRa192Sv{TZd%VG^pE})9TQcj+X23CaVd`4O~2&*+R +z>I;3v84a8-36`M?>YHrYHeVo&=K)5nXy;4L6zgF8+*FYxhcxOaM>6HgF_aF;vrAY% +z%W$fOBZ7N@7mJFO|-f)^juhujffk&q9$*ZG+2k +z2;yUL;M&**P%455K#uraI}o7dh2X(fwxsWi0YA@i=r%sV%|2S0Z?B01)diUZhyR!t +zc+iATLz}a>Y;#lU*4A|4Uccdc@~ka+d3Qr +zgeaNQ`V6c@0wE6Wmj8C)TtiaxGQ~4M=OS*z2RkJLJG9xKC!I_=auqHus;RBDs@aTH +zyc3D*L88Km&hXf}ZMS*we4MS@WguJOAZ4iMJ=S$u4Q+dQ19ayOJ5;$EELVXiCSj(q +zGdLX)+Nj2w){K+>HEqw_ixF8Nj#Q4cNwk$$_kZepX)6Ko==<#p5b2r0M5F=G1jy{W +zr&mx9$v2w$Bq$*d9QRxfjxi;-gmh5hH;f1E&*l^Y3)lUSm*o+Ggi^&N;*o%tDlLP8 +zm?caQtPS|rj;^S-4V)s^fiyJj>*;N0C|_;I8g+QY +zGl`>SNP(RY +zB{Z1(cuWGMkXp$c6S49nz6UP*w}K?n$V)-Sp+xQOG#MI7LJ$g_P8qc*6Ts-)m%`)a +zk|?DG*?8V!|f-EDHw&C@B1) +z5^MIUO-{%dUtpKV5Jm11E&z&1i7XVvu*Rmo_?At;EktDOmnDvR3>{gW=61&dJB~Wh +z5yx(&#?tLKj!ee7oVMPG2bn}6EMJI-U$f~xAf$WTucMczPmrVpw36lofYjk3zb)C3 +z43>!8Gk<%rgqRh>yhU^&%HZt@a&_5Twj9jgj`lz+F~cy?~t7mfjSl +z*lwy&DX3E~dCPJluZo_sO(yrJ<@*=`YhJiqG%=5lJd;gECxJ; +zhUkHPRM8ZT<{uy$&;BoqbPcfvrl)woi4Pne;l{c8CRwbjS3-Z +zNDe-@ysjQi9_Sww9}}9+=!OR;iRm#+bFb32j%yGH0AtwJ%DH|VX7*}~DLRibo88>; +z^p5KkXbim&3BEhjP;Y@26YKrHPnK)DYVT>p^UmkD+NX`C@@fX88Z1{i3TmUO4#MOv +zN{N6aIfya`#dnxp?yO=j#BN|Ua53M +z)?rM<3cVDOp>2;6IwlXs&f1!d=Izg)fFh~RaS}t+o!#GRLum)f?h#!b-09uQr%e7U86Lo$5l4iOx(2Uc| +zbwnBff+!JYcYP+NFGSJSLB-5-hXQD1_CT22*~Qtjy#AYg18{l~P=_9x_30T +z=ivYm5D}RcOFiqr+49uUA}CDUZvrAA4;_+$IdxI#M0po;3{L9zxtc`!`KLZDa!W3RsWnMvV=k=*kyJ +zI+Ph4r+WBQr0h8RHnobaMcbrU&I9IVG}8Bsu4nEXDIm>(D5`YpO{Q7LgcaYm$MCk<~|m +z$`ZcH*biIP%=OAsOcKX9Qb;DL0FyN^m6Dgj?v5u$C~ePMF&rHW4kw_yIqsB*q*-*Z +zgT>rtKPVLYt4lDolEX<_=$imnBLdKgoE=FQxLKkJ0l6bq`_ggnkY0Wo5!0)eUss(l +zy(p3e3!tsI+vw?-($H3#i|+f}%2at$oSmjm;)c5=Ox@Lj$P +zkaK-FB%93;N}d#ND_o!1*fcN33R5=IcZvs+y7@M8VPKsRJWHEO@SHph`^0mIoakOp +zVXnncAOxL$M|R%^XC-$)BKiM>(Gs2X$sleT?I4CMCK7|Z?DDn@wylqyMO}W3X63J6 +z>-KT9{26OAOieoZaNxTiUIQvi^6QbF~!P&zEYagB6^Rcqre&n!CYFc^z&BymY +ze=GC;@xc_*Qm*HiU%#r4&+p&)XxjY#`Te{4^M|V+o8NzkZ(6Ep%8JxzEFbK`^3C=t5^t1`kH@->Jws9%$dm#Z9lbP}p7eqp7Ibm&B%{Pp +zqd`eXl)jw=W$6;q<0IdljOpXhL+Qx&#HOn +z#c5C_mUHyU22F}M7Pq_nP`2aihp|%Qu@1&x@iN9BhL6LYslB^C@Uk^yG)LTqdGjm( +zXzG+e5}|fNH9l_7kLa9#4Amf>6jNU0>mJ*<(%8;(?5~T;k|HaP9dknJd>j6?)N1U-b^}KPg=n8DIaSFB(K6;LwJT +zn5mmA2vo70ZuSyR{J@E8l6)bHkDZp@uB1Zp4OSA%W*Skr=<=!)b;^zIdF!;OMsv7T +z9D$g&o-PlUoHWTqBu5f65YeJLG8qFMcby4v_skjIJV&x&`x1Z +zj+>+$rcKG@d7`aDm~DHs^T5Qz(++Xn!I*ADBMS_;9ar?^)zztCN~`9H>}s-L`2D&t +zFMXpP?f&3I0@F?Fx{I&qX8quzQijI#@w;z&WJ0}ApbZ&Xo8c+|#9+cf#G#BETOvb +z5AJd$z?93B7*~a@u{*mS3ngABOCnsh^uRmnv^*0taD+!&zm>hj@#;j!q4RZOiSuNu +z0OoS@e}T`yyfymv*^z~HrfVTp@#dI=re4ndbWxLp>~qBl +z>fjXbfJnyUQ&I{`UR5zzN}Ak@2Lamvr^}(h2pZiY%%~POeVouf%0?VGi}%2}_%Z-W +z&GOyGA-Y~2YK+Va$yko?Gq_;I+s0;Y*VXmIy0?NlgthCAW)K|3ExU?yyZQF08eYjr +z>T$_P)ODyX6hF`rsQ^HZOJy@oD$ZF$^B06`C{0s5DSs5fJ~bTLc;6Q{TaF3oC- +zm}}HG5IQPkr=wAH5d}J*ksRDP9Ptr*-^X#|w+*kD`#R7o192NgwVimi>x%y-U62%0 +zjXy{M+Hsn@h!>o+5DcY!C{!`~>UH5jk=LkCn1|d7>p{@8> +zvc2G~B@vegGD7(}U)=JEtl7H{uax*w0<;RHy-IN78=Uq)Z+-3iR|ounBDtghaKP}# +zAvR3UvyPnTjzFksfYI?^azP$h)mfL8`;NMtu3JU?Lk1ww=l8ZvoIq|$er{Shu7fDK +zSWr`TQU&m)I%d%VF!`;?u+au?5+u;Q+(^bZ%i8+kaJH|fi}U${aOjb#Bp#0%4C>xw +z?(fMyHhK|GCwj8Fy~>E{KHNm{GUgd@D?iL&DI}T0Ot^@XGkzY-;m6Te +z4_<&c=s-4ll1W9z!~24SW$;ecp*=w2pI#y)3BUvv?}pwZ3#T%XfLAlX+j{UL0se_X +z1niB1$9pkTXj?14onFena-Gv8O3(mh2%SPcdGIGPgj5}I@++1WLT*T-n>Yd87~$fj +z3;MPepRquvq^;xIoKVkNd=3l(E@6in&2S2!vZ%io_MMN-t{G +z(f5}4zC#RftP65F4k}1<5_Ho&F8FgCVVkSey1WP}=qT|)j9b#XMa8`Ddn4Wml`NCy +zb2<}!TFT}SwJA*uZ%Y5?)VmzqPs&XtU4k1JX>4a|vb5!6>b!sjLJ0m$ +zFVK50NDEevKF@~DE`AKZ048UR97(FTXGG`{z%7HQ>FDW0g3kPsvOg|i+`&@uEc$5L^ +z23uK7IBB|S6fS_J--nfS>0=tFiLEAB8;C6oc|Z|S{(Y|Hd}Xqs-s%T$q^t`p1hbt? +z3N15}jC6L@(1sAaJp0G6@`UBwR(V-jAg}diyCZ2oEmMCb%o&_b_!bAKYU|XJg7nLu +zGMv613%(rjU0;Bnj38$b7zyGbj~~nFBq9-N!6nupK>84o$LB<5eLx(wXZ^6((JxVV +z*QRBwIU&Pr)fl(OSPfjm?xL+iRs+aOd5vQv9?orP$42#0cj>rb5zT({H&SaUa+KDA +zdc}(y+20nYg#mcKFA7vGrsL{{Za7T>R))GzQGyJipi5Z@*#T~!6DbmnF}e~3E6iSH +zlJuz)WoU8o>VU8616dj3_vQ+DoFBH(~@cu +zHi#CN+A#H$gS2!DnR%T;>B=aY4}Uwxq)rrDLEQ4)fZE~5<|E8!9(-L8hG?}4U3do) +zP{OFW+iP}=BVl%+QIR%?@~yAsvD0gly0{!ZEb#Rgn6=v-O3}=Cn~6|_*yZ=w!>wWs +zwQuhnmf`?fkh84RkfJJYJ1PM>N=+*QVaRr|HK%x)V=_Su10O1o#9?y-4NEe1S{ +z_2>sitWw7)eD9CPIIe&%*wnv>{rq3z(O-{l{+M4?^ULTfeY*K;e*CVgKR+&w8*cN6 +zP{>x8l!y-evc(!=0%uKUaaGeCC|b#Tt5I!OH?LOCL2DH4+Kus6sqHe9$^zaisD7!4 +z6;xN^Pa$apFtaczw1PsP?j+!a6{rd==V7fe2+r~>g5dK%>v%F +zQEu2|>pV~`D#D!#i~<3o1tMvKXUR0*%F>O`t`T(slFGN=Bo&WM9Vp7nR9b&y!%eb* +zU{%9gCU5Eo2VY~7v*kU4^BAX%D9h>c1$JpG;>2*E0))NWuW@)zT7ET^}z20H_J&INRP=1;&_fu1S +zewya<C)qZ4WjzNG~H}!Y*>#u4)_>*dT)I;Ycy@%@rsVUXIg|uku3CBTK_gwXTy@qb) +z#ZYJMnmJFc+Yc}9M2xzzJhS>keQN#5fc=gBMPq9I^0SDKRH3a3xbD-gL6RN<(4Q3! +zuS<;rjLt2UqcNJKR=C0jU&?6$3-AD*jD~}i(c56J#g8ACY;BNQOa{aC5e6Z^d^(9X +zY(3Gx<&`bJ#sL4mzE +zQCrENeE#QtK}nXS34yAPuq~mO(FGYbxmBrRE~X`}Q2kY##id9wfDv*ln^wpxy@4yi +zeQhbb{jZG2+kJp}McPgy_6wP}fHCce5kB1jjoIov6}-^vs^XVoVWVb*m0+GWlc +zY`U}_4YdD?XPgwkHey8h)os0Cp +zCV9yo0}Q{(nB1hzAdRWyCkG3+WF!ib~m~W +zdJGbvq)=%TqLM=c+R@4+K$7w6V#!izMHTU82y5T4wm2ll+@}@PmRi*<@xzkACVXZM +z4!Ma%)Ke`;gGmQti18A9YjJRLi6o~cpfa8(a^mXA)~}2z!Dj&8U*dFB3s7SkM<|>e +zd4>yy5|fML_}eQksK!MT7E7*f3G0@0}}l^@)0WI#Pcg!igR2aVG@hW +z;RsH&G=NMh6h{KUy>R`UefRKIq8VhvOcIz65O(m8MXOu$g;)}3pMZfp%ND%8)W{KR +z#o1ky)oYNU>k&LnLLW{wxLaCbtvQrxzyai)wA>EBo~6)I{z5#2_U@1;eCFIbMs@?4 +zWO*48@dV-&Fxe_4?na!TH9iC3;y~VtJfLgbfkOt!syLPuh$5dvHv$C88HS+YEP!|7 +zNP2kS0H$W#n=05Ujup%N@zK-suZkIsugEB|d01Hj`+e|BPQoB2NshR@>n5S(IC#-c +zaPM9$om60Al(hP;#f<_3GK|d@r)F?u=tM!CXnQCg!P7NffGiOVAy^=>trSpwoz!oVosxqh +zNvY(1;5gI^GBG;S3P5d;=ptfN$a_tu)Q{uN_|}VtA}&YwmERE6j;vEbsI0D|@uH4N +zgKR~x;}&Q##50AD1_gZzyB~|=Y8YL`FFOxH#h8yOxN#Bf_Gs3T8CFzn!FEAx-9mO8tu{U> +zZ{Q@a1t&r~-P;4?;uuPZmxW1RvUWv~B3+bqce0DgD0%Z^1t#w;jH`+DB)k*IxgsrZ +zRB;hzEMj4YC{oNp0Xo3#k_Rm=6$^Iz%MW`}O9}2%-@W1KmTp9d(DFwtoCuX_P|q8F +zj;mpO%+;j)?TQH%IIqEJx~|^MJmhNN4?3+cQg|U?6O;m8cLlT>Y_Wb;d8mQ6E>H^2 +zE0793ic_c;sv6YVf(Ly`eAx10FzuqVSc|a)&DSUVl@Yfi{+KpEDRIUf5n=Y^vRa<_ +z$f9rT!?A>pg!v8cpnzT!eZNye0LI)FAK<9UkzKgkOr>|qNcLrKBr?Cw`8tDr`06b= +zzy+`{j0d=qDRls1=2M6!H5-|vWF+&OB;4Ul$nwwC_rdH3gv +zrbIP*5hUP_lS#4Ut9Wvg+fsc3K91L-%&xV%Dv)#+YbgnZSCOx0VPV0Jv!i*aLXxiL +zJdT5~x1Y&9WeWk$;AY*S_Pa``*K-5wCA#0Ht|sGs9j`dyhV*8!26H6y1BgkjyVsj) +z;324?)s=eO_tOC~XB%Ux;`54Dyk;yJQ8Z3PO5lJ^aAN8O3fn=ygZ&h7f_(KQQxaZE +z6qX1hL46yyK!~!7?`BDcw-P6>PsYC1+dK^OnAtzG +zjp9jLBDugXv*m%rhwrq@gXIdq&9?2z(+YBITkbYzjz4S;T|XH9y*aveZN_-)Q@m8g +z_WMTP{d{u!p&C|0NV`R51~AmZnS$K@_vDC3kF9H+-@B?8)MiwDNPB3R`JO# +z^anq^R4+up^dM-67pEZ_(wCPm<}Z)VjjXqcc2fju6pzbOQu&H=Yt^9~F-SYzLiWOCMy-(+bT~eM4}-6+jQKb9D%sC0;g8 +zcY;WpY)gr3{WXF5BnN*B`Z$T;=24vf5;dBDQab)N5zw?uiTREqcK7-EXVG_rc7Ew7 +zI{nC+PHSL}k{U<`(X}K^SmIE-!3Qxu2$smBI6g!{Fa)M~QSPk;{DWKG#WkwbBymC| +zCn7DG$?o3}M)Rb!7YGA2`m1f59Ir$jrFNh$WkSW}%L#z%Cit}2 +zao9Ek={Gj-{g9^WDm2|TzIl*7nH#qbyy}`ME;`cU%v{%?ZI&T4oqsT4ANGo)%aG>1 +zl-e(xoz%9e>K_NMcNp5pUV9pRQK(LBXGB5O7Uc(4b+NLp?{aMhdu+2{J*d}_2gE>& +zs76vJX`2Ip!DOHYi~ZFd-DXowT#ep`HKX!N|Kh{^fX;wJ-rpdNNqpRHu%lWsowg>gYVPFZa%m3TyLk=}o*-3XA08D`Wb!|r)%f>+gE0jE&!6(+}jNFg7(yfAloZS*1i@T +z+@0p13 +zL|E31Q!`rM?~CZz?SaX>y!j+WOGjy1D#>ZTN^>YnfWl0#j!IPaA%x +zPMc5Pe^`OL+y)i268BI@JCn^@Ynj4c6*NFrZ)u64EL%(W;c*U?SvJ~ZZ45%{hu1=U +zt*n58p)BpGIRb-^7<|!ZQxLz^1uM3&ZmIVMJ*~4(4<5~6k~aSg@uV)|t*Z@uq~3P~ljM0Bb;$zwGd{x~dEbZiB1#z6*_=4l#C48~+Bi +z8kWPjAsa#{UTaryH^+$ty=0JZ%%xi3 +zq=T}-wS9efARe};_L+PrMj(vDYQ&pQ1$5{AP8ie|0*t_~7ZuvaE4!`@h%Q!(oKm1l +za3mjMc5w_PP<+}@;+m}-p&T*DlQs0(Vliy(QE#!S@*tF)$sUhQG(#LrJsr!!yK6cf +zYa;2VowiBMexJ5(&duXns!}1(%G7bMcoWUmsbh;Xk5*LG8G|nv)YCn#?^`4)>lS+j +zvbF{6i^hUv+A$(?TU6Vn&LQE1_{Cen73*?@T_4)=xm4*WYM451w6iQmeQNDeRY2!? +zB;C-S$?1lFj9z~%Nant|=}T&`p($w7y%byvbnoIwLmHu-o`?$P!I8X(SSJ|;r79)u +zb}Mvhbb3ohN048&DAEDiF5g&iRNxWCQN#J(@-c_SO05vG^Ab@w%Kopp1eY)^v8S~_ +zt<7-YBDHZqh@b&h7wKUuP1vn3VGzY4`gn9397)M +zjgEN|7v*u`_%^hs6lGOCkc#(>FWE5JVM5$TmiXW$xS-U5dnqY#?x#Fd$9ha`uf+5M +z?QG$}jzDTJ_!+1L28~~?m5hM$F9o(iosI&Bh7&;OD5A?ltKqlJn{t6iCDm@tku)hm +z34YlxjG;F5&VT>e@hz813s2M1HCx?x)h;ZsCF`N#LC#8ZMeR20kRO40IZmBjEAVBB +z5(^i5qj4RQASWbyEH_z_ErvsUaPHMGyR7TXERa-4gciIxwUwHX&)ImAl`o?#ZsC%u +zyNOJ?-LkbpHht<<3BlkiVeJ|5<{lixUIRf~l$6)@7(GrESk};*9cjUsTXtqk+?;qy +zTm(%AG{%@fuFebTB%3072B};=my%C%s~(1yUB5Le4)%U$rG!ft)Z_(+R +zwtRovQ2FDv6uS41x2r-yA*jj%y9G$D2b8$PJx%ijZyQHJvfI%PX>f$LQO>bDd?p~xCZ2UrPPzy+a2&`|P0B#Orq!$wX9eG&{CX0=EY +zA@+<@#fe{HM2gJu1#_c=|1$GbcJN(Vq;+p1tp`*SJF_uP6p@IxOxKY(&R?4BdZcZW +zHKQcP4*IrdA)se43sid9jrT%Tgd2MxSg918WrrUcFhdU-N#0%*{=B~YK|3ppQ +zTL%x=Ys&%#yu`Z6qi_%_m4I>mOc577Wbo+hWtG|v73nQB$JhuDI*}vkXd6;>7@evF +zQ8c;3J6sc)pfitvv8lz+X;qn0KGBMKT+-XmKVtYY{PKXV6(k?FF7UzzqNQqinV>+T +z5_7+jGK)BwN|KOFbVddVYN^~n+Y`ZjF%`pkxpk+CbSot$>!G0Li;Et{RR|HSyBm#G +zpjX}PFpucA&fhxhqtP^(U82-;Z~=mgT7CZ1zIq{YbX91Y)G5sms={_`lbO3_+PGS6 +zSI2GTWWKK6MjwxGTyE)3)2OFr+T&L3{5W0J!lz8lL4=5*dFxFxiD(Wr>dYT;F~dA2 +zv)>XJ5q+WoB6_2gZJgWA=S7m2%4*`(h?4&{o;A_At5kdi1`Sk6!Qs$p-BH4SNX*KP +z0@Pjw;98E8fM!3t;9=H+gcy+$O?Icf{OgihPLMrnn2twDl#xTRBJeQPh&#k(6C7?r +z4j5$n)EjcaBo`&2Xet;Y2sgiX(8h{}-e2U~qfiVnAfFHB^hjhCjoOk9ur(wlKcePNw%|MOrqJ|+&GI1$r48a-f$1=K}RW0BOi76 +zAlnH?+e)-2^H#}w!#22h5~2~s6ysRE?&BtQ<>kRnf%KzAy!8gGd0=mq5>Plxz6B_B +zO>PF;kkNH{jJmF(y%@-(WJ*0OHrJPTy6XmpCPagWuUqz>fkw$B0-94;#PLZ->OBqF +z8Aw{9pG1I12NQ(XJLzKeG(Jx`WfA6k&llXSEgqQ?!V(3-2}lLcfGqhH$u>d+ +zlxhxOk|-$^{y~0*5-tCU<9=OpIx~QXDEM99kj`W?->|n^AX#i%)9~8pr`YA{F}LD} +zaoaXG*I{K;;BK&wr9Os+M`u9A)ajAD>zS61iA)F8RQcc!boJV+xv$B{5Sk&J`6i6D +zpfpRBTE3g3^~H^JQ{2ZRhruoT|R0qzxd-XN} +z3%>5eX<8b^?N5<7Z +zyAaU!LR5zPdJ#V@N6Nrc{)SW^|9nm<#XiFAGKmcxPMnPKY8HG9t|aiHFi!!5gwwYe +z7cwq81ZRl0*QAqWxRps4xGjL3%vso|#MFGLw_3V4(m04knL+$&tHM62>I#A(3QEfX +zruKFW+=T~i2qFI_V!hqE^_zIzDXnc4-OMjMZFB0Up|W-tqG8tA^y#RXfzI7#w_1^b +zacovxIJM2r_n%Q!k9%WiBcODj#z5Tr`Pf%ITg_Q_C~dg4h`;1DxfrB|zBmGs6dcsp +z6dKbAU1_o1+D@Zq>w9q(Cj)g00w1{*rs5Dc@%{b#pO5b!Ke#I$X?J8}i!GPB$E5(nb}KyFo8^J-hW%JjStS39&MP`SOThMv{0+O5|F +zZz`-hjKoY>ByOW43As%bv}2}DM^o>r;|J`dE>--qy`AShFhYN~yWv=75)H5JbTbt8Ayu&L+22A>_C9Lu#b7krKNP2?)AzN) +zTVxwVk|B?466mBvB^J`P?Z6+}#NIPsw@vai>Zv1!H864AiT50x7__!qw8Wj~p=doV +z?X;>~BJ8f~foTZ%p#>PrPvxM%c=0t|y=_g^q5+N?eF82JZ%)y|IJy(b|qqCPC$-h`5D$E1C4hv^u(Rs;>BfdxfsCtTZ4Qc1l` +zBb<6X0?ri(^W%hwn`2tz3nz +zRDZ1Vmu^$nC94{!Fj3MqvK!6)WzYO~)shrwIyuMHg4oS9;tYT9YIrq!!r{04$#{;!^0|`lqFw9>LQiUn4u9=Q*H-9d|Nn +zI+th4vCZBLVF|b04CiwKGTSve{tcGue-TQlV^XbolgS6fAkIO$>^kuU9;G0_eZZ8G +z&~s1@LfZllj9RTv04v%1Di+~1+54FjKh9#DDd>`i%|qeqBE*eHl%>Y86Ne_ASQM)K +zLJWteKS+j_3Y{cY<6mjXYvZK7H5D@GiUY%bh(fxjvf|I2-i?lUr*)T_M; +zw|k}u^(ZRj(v+w|b^oC#xIis1b=t#7Ivq(Vc`cK#SG+1n%a0~$v>B8UzGfTKOsfEq +zMoJ?{jV}h;Ry=5{FSljTl+xgX6hc6*wm98H(9Y8+m%S%e1Sd+%u3Rji=KjS^Kq=3N +zXveyf?c88v#bVb4SZ(N{o-eM!2%jJT7G +zC?%nm`%=fj-*o`QdZPlST2P-eQ)eSaVJNFnyx;)-b->FeJ^d&AF>T_(=xA0kEG35K +zC1br0HD;4I7V@tTl8{CwiCZ6<=0vJ&Y$@i1`L$ww{)5AS^o0VXrV)TiT1gv`dUCr-U_E9BHlGt;#-SciAyA$ +zfb*p`J&9N=E)OSuYq$fcpkwq_X&kbj80p^7v`NOA;MhZS!~ql+)PDZbS@;2bO3{ba +z%KcU<9Ygg*)J}!j|4(0ztz;R6N~=beGY8fBvoKKzPR{T%oFAuqFoP;n-<}Z95*aS< +zr2h*zAJMldY&~bTdtWKxQKCh}EG)H+^}Qy=v!0G?6sgg{->3cTf?taCQ`&LmEL3(o +z2Ro@IUbufDBY9!^LR~E??mt2GjtS>hH$wnDt(7(& +zD6}-5^+ZmI2h;`sMJ^$7tv<|Nrc{s%Hj*qpXp#HWX87jurtc2J>U3Vz4UOioBnJ^ZkUo5!aBdiI770ACx|BkwY)|WG$+UUP1w$ +z+pvi;jp&KEl$Ss#HRn6w8MDC>%iKgWSJm<7NA=F*f*3ypU-GdmOojS%htP_)A~)vQ +z4t@g5N36}&Ly}+BFq?^~zXV*Np=2GGFSS$OFLSf+p_<}#W@D#eZiYu1g+!Pjyy1!XSKjUg{b{_h;v3WeZX{h-_XK&WA=LgKwAS~_Ju8rPoJ)1ZS +z!4tuEW26BqI<%la`1I7$B2nXzj;-3nC4rPcBby~-eJtRamtI3;kwshTO$ck0n!wxz +zET(0jt%bi_Mv +zA9g_sCtB>c{`{C^f*rh{>tVSZ=r*+iQr0F9FH1vuSLQ29>@)&i4F~GlG>0~i34xyc +z0qI$pm-aFTRM~WlN42dF-Y^Svh$w27mRb#nv;9&*5CL(3syec)d25$5$Qk;U%hi*# +zHYB2_HO;=_3-i=>Ztss>)#CA+F%ua9#CxR$xNJj)vCxrz!f&6u@z8ePFZ>9LZ1gv~ +zGZ)WUSFK;$1NGpTx>mgx7TnrZiybyDd~MhCJao8r(u&~cz)H&2`F1g8=z1p^oU2!|@%K9PN^U^V*irp6&SWuG^M_$|G +z@6kh-E}WRIo_!h865JX{kWOq0$ +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 +zM6xFk)`%ml*Sj=|w=6smR%u>< +zwlcIxOoJ+9T2kY3h(s--#A3d_GQ1a2$dfvg3)3WVr^fYl +zJn0Qb0ntWEr +zTB;m9z{;dvXpy>e+fI23Y*-<7CZ1?S_k>AwAi7(Q;R+x}pcsn42xoV1V;K5*5~NgV +z+lYreNIu&n)WF`2kIJnN6EEkx8!GP&8R!F_l(|7GvbF%hef@Ok#$oK-%n>qf7)GD< +zy6$|@02^REyqj6gWa8nO=t7e#_Q<n6`tJNa?H +zOnv8jJ*Mh77OsQm{BX?ca6J65@~fPo!R`zV=8*{H;O|6vx>2EF(`sB%#0>h}8=zjJ +zfIO#*Xk^LMBFUYP|p;Puj~1S_(4WE<*rwFsUyWO~etdTOea1FpjUoSp(_; +zATax-RfdQ<=E~!c?plYaL{w+_OW4)E1h(EtX>wtc9K0ZnoE3|hcB1tHELKVjD9~h~ +ziS|OnPfJ4PVId9VZ41%y$dqbK0HBrEB%oM1BbVNW>L2MSc-wp_sM_p^RE$N#E?ITr +zc^j=_<$wsGMMmI-N7i;Yimln5>!ya(Qy&(n(a=1(V>Br2p-8p}b8DW)>^Q30#Wy~& +zb4V1}wH-L9!^K+nGc%ZIW>UcX)U$ie#R273Vn4W^?anx_Bg*p*suILCsw4Wje+Xg1 +z#DQ5+d_3m$(VM;>|3RELW|gU5=diXcWYXNW4cV)spgeZ7uT#h3B(0U34xi0qV9zBf +z4f9MI_QJ~aV#t);roc+U@<@HlQO+(`z+z5F{SpdPCiNI~lbAs2?=qpVqSSP9U8cDv +zNg;%Mt_QFp+Z=N35EZ~;m2g7j`pl|*riXx4Ass-T;?gy17s*!HR=@G~$y!yT@=7Aq|46j!^Q{P4sghC1*GEI*C5?X1rsSxY}7#_AkYNqZ&qY_ +zP{-lOw)6YNXL9j40ag#3<8rrs!73?v@`yz#I6X|=5?SNR##N!+TKRV6t+n>kBK!wi +zE6t&e6!>bM$7;7?+_#Z5I}QwV8`Raxh&)HPZF)^z$H3}tAGcpXy`v +zrti42gWHh_$t_w~-6WJ@przd){y{k*mzV(^Fs+ZMs)ymdb~N2^c*E=a=pU$DkE0G& +zG%g}eo-blh;tkenu1L9Zm19luBCejd{IRJ-+^IWivOuh;#@k8jGJf0Qu)r};Jh`1n?A@zPM$ +zQj;v6No{!DdsG-n6H$XQBdTZOh#~5W;hWN4jrMt(J1VV>--Iv*NGAT@sa1f!fRci| +zl{R@&I^05diF!J0oZ6DWdL30G?F(uiJQt&COU(T>eMD%(QffOK;v!oYfDU>Mc6SjO +z_@$jUTqvAqqHM;fI?_uRv7Opkp^hnW4tu$A0LctL(}|FL`y%Ta-N+_!ojfg~3_QwH +zi(oG_B_!ZXyF6Cg}diffNAL3_V^(KdPEOZA-oierMnCER~aB8PHA_n59*@ +z_~c(4nTYNn6QUAexPZ-u(v!?0f1Js7b|-+csD*QOXzL}RAu)o(qXJ+S57`CW+LE5# +zun9D(sR{@a7gyr&NWu32P3z^50yzVyVgs0!_;eE7qY^*1$T2`!ctIOZ?4w}CyT_?B +z4=cVB`DGCp4CV&jJpyNYgH^(cE9(2&w|W)~0|3rIn>fqW9rq68Nc=Z`cvPvH#F9%m +z5g|^~IF&ka2f%aLoP_BDnyJmySQUgEwBcI`2I_o-E_K0(&&n-IQZT2=I1=RU +z-HxPHGvo{R9DznM%XLVUa?-$r1l(|cWi^eJw$sERLStpM&>PUST$u^YNl1grbq_ZW +zT^_{5Rx~XBQmV%KPfaS0{{Bg$|I-79{f}g9VbGef +zrp@i*S6Bg37E +zaDd<5NM@)}P5{tGFQt1lrQD{tk(rW+s~nNPCXS6p(<P)L%iAM}cOjnTtqxACVdH{6umI$(Ps|PQ-99TXh7y5vK-Hox +zT*|&A>0F?0)O9Q6Zp92ijGfkh%?1p}#mQsq{A#CipetMnXOQLBgnKMwFE61Rm)nnm +zm@SWZXvU2AJOJT{7r-$YxU*2>5GB}#381KAsYGa^NGDIF)a6);3UYUvx5xpOIIly} +zTzmtbjvd +zawRB?-P~J6Qpz{1Aau~x$Ry+`v&yut)D5_VA5Qy7^&K*Yxe(z{BCcYz6@&&!@}^Ejk8S77(-&{%JjYiNc#TV(DyA +z^&MyRkG4Gv#;002^DipNxMj}bm<65ed>pMCfF`c*?^PflQ2y3)LKsmO#J?t4K=T**lXI+3^zk{$6vfB{mY>`0_K +z(caDGt6mD+k#fTH+9MWoPo1>`T +zSgKOv3Xdu#12}Wg8NJ;`g6x6EV5qoca0XE-M6vLGk +zg>ZBrW{TPpV>#_wf&nHKO23MQo}R^@iG4)C--(_hdodJ?+EdV5Y{c6_-9t?bnL{@M +zb;j~Y><0Bwl-NZ(O0g*~;=RV+bZg!?X^04JA$y(qN#Cw<=OUA1zieU7qVmnyBi$tS +zLfQ_kwYInIz6q0b7}hCnX}BCEqx*$HJV{aVHb9EaHQFCI5QdU;{o6pNOULg22k%%PmWI* +zKo~Q$y_@tTDh#cI)k5(DjS52h@ +z7NDDJ1y?{q;d_gH;;yVG5E0b0v?HDtJl|M +zSISYAs?=iGPPj@OOEOdrGS%^MV<`dB`cnSGi^rec0fo74`N1dfAaVRn71N$+ereU0 +z>kfoFlpL@ZDFKA*kQb5i{@=SDrG#S|m}H3;{Q7lmWH_`faC*d=oZhA|eM1n$K}#z< +z*U_XJe>ApaBfWMgO~_F)yA`9_!8AH>40~un8|N8eduo_yf-hb(0Z3PNN}A5x65aqD3peH@NO{BCsn +zER?gj_$0LB1gJWe9I2=|y10u>6tK}_^6T6%?#7tNo~g&l2wt`P_-RA4_QG0T^w2eJ +zR?TdC7Cy_S$Kg}xh#4i{X(=`?NT=nqr~|UjX!1qrnpY2i!EP94V=1+nP>w2lvEcJ` +zG-UI&^buOf{v4m4q?-dcr`j1{?|q4{Iy(}e(4fLB(%A!iU*%Am?e2Fy>Cd9wf{IG0 +zFq^TVs#Su|jd=-UC0a{CNoPsE>a7nAX{t;?L7C1BTPJ9pJs6^LT<4<>MmUqUYM*LO +ztsS>|cfCF~zQbll@K0{{!(wuM2yqYY)`hirS$Ky?s$!JpaktY}A6HEFxKGFvzjom9 +zEp-PmpJvGwPsTwOkCWJuL>V;WPLbS9oclT+z3#?f?bg~PZUT=Rv6KUqV~v(KE5T6L +zD*>My(GMT3To4Bg0&T=ovL2#ol%qq*l +z9xi?72x~GARNlEhZb3pMZY{V;#h;LS{N5R)}$X$tBBQ^99GKz=1%m5;u +zk;?M2c2LRGf&e?qYZ66F3(kwa(_9q_xjObzVJ!^E5HcZhSRnla9-7 +z@b$EJF-IFy-6qZCsP=lb6+fiTLp%44+8LCD3>jko`3M}3?6pqczq9)KY=3aOU`CH7 +z^GGAc_5dy>i3i1ACQl!N`1orH8-!YNZ^`_C|4d>qTx6UfabHsslTPpH2G) +zsliV+gEnccs+6R@gcMPikOg2h5%x!AtBnZ**;hgFyAC8(NYpKIxziUSe9JB!O|y81 +z(4cb7<^v*(kzLGPv1HWn9pVc3EF7EABCKS*E{z^)bu68X5+b6*9^9~lud^{OI@Bl!Vy!C2PbB95QT}}+(ap{xkfjhoi*ryh5!)+_aFpqXM6Vp& +zIN9)AY}9FD3A`vV&*I{^RHEV#f+gN6)NadnQhq$1-tW>b!HVzV0Yob2Md?n&2D(!+ +z(sN?^LfwoR$Z)w4!CT0DIzA+ER67#jz7#Slqz6C(QR7wYtW-Knvy_#84wfV|7 +z=4-m%4}5OmyZo5_4Ml2Z$70L#)%gq;jc3LGBYE}tq71&=!P2`${NG5J8oc^Gv +zC5hN%k8A-0(Arqad-z2leNpGA*iAxBdah{dtnFE`l6kIemgxx9zz2jN9d9~{oMvx< +zMo1e&9XvTW!)(ZOgO9BsKv!g7pS8zs*PQU7N{kaRL7apN?gu!6Bbqil@w#LKye%Vd +z1RPREu+Ndt>AhX%iUes@U)7U{6m3}AGZ)|{5qn2sx;+{WqxSu(xE81%s!$~sw_`nx +zeKa|3{=riZ@bPe|tUjnF2xu-J&JqMwaX#`@8tZ_BH~kjXp1FghCUkN*a8Ck|qJy}= +zrsvII;IsN(I%vJwreRXwb&16oii5g9mX8~QxCrHv0A;W5B(2!veNq}LUgNC#qDr+G +z>Dqzw3jolyIQ#O*b3LQ1o&45|TF%ks(go@<3i>kp4Wxj?a1}K3D0#D!wrE5dCLe+( +zmY{j?!-N +zK!K4&s)qG~P}(s1r#x*uax2UI^|<=0aH)#Ducn{MKm+HA-!b2q3w( +zL89%%ZIW=X}!HQ~N2|u^m^``EQBXPL0pF7&KYP`S*{Ji9*9ow<@8)w>i +z;;i3Fzrl9xV`-P^>p3m5^J +z`PZ6F$FcG81L_x5WKR<#?}E^bmwxoeV;k78_e+Vu!CW2Uy3ve+)6kUkO!$RBBs~p +zmN=yzjvn4SzINERbBU2Ue%uD4aq(0zW} +zl+clOJFi{Gf`4D$#KAf>1@qg7nr*6-rHvj%W@@@1;i1BYWY>vQq?={#JcHyEvQHdUAX-~NZmDSp{j;lS9aQ%qC-W} +z={1woE|rd`dzAHUUi5MnU#t~WzY{surMfyW0W*Bzul00R8{_Osz8cjj&iLQkSt>f# +z;-81Jp*JLyBL^|!Rmo^2s|d^U68Ip~s)aG@rD0DRnJwpH#RvIP`;p=l#hWZ8ngo8^ +zTfG_T$X+8P(DHVNs}l(;s7g+D)yq;0buBb)YU$C2nengSmzbW83*v)CPLnk1!yzSh +z@m|!x;NWACP?N^nScd>dF0Xp){c^~}G#(#l{uN{OhI#~|8sCLB5KfuN*1QK)P){Hs +zZ6gb@nJL;Gp*7-bNgUjuF@hOwqe2yT +zL0X4ljvRUy8odKRklVzWCO(@im3lPJ1pFEPP~sfp*KQK*tj(N6#ACqlMVU6)6H(Wj +zl&DhV`Zkj2L}5XBqfV37dxXHD3<0^=ws7gSfY#B21gZsfzp@QQg)^d(YJ|9RK|$>a +znmJ6PpRAxD3lV~kLCQm`%vR4_ +zYdy4;LzOGbgtnVh*cs|SwB5Wm%_tT<@ewjGuqn1Z}y#;muD$Qvv%R1WtH)*+B*&5kT^Y4!yRoxv{!wHWh(v&%`0rC +zY!L;!hi(*0xF<_1={yXA5>l_`feUwrK6hjbUd_RD31*WxRtbYsVrYjH0%KQ(0U;oE +z6ppSitYMu=Ct>N}6iFo=uG50xG}v3ZoV-L3;VINAfzR;VqDCy!aZ+21WyW18#O4-w +z7#vC2Wwnnod4&*g(4QBmaO`ghj+jpDkjo=Was{{7YqK?mC(`Z9><+SM`3oLunMkeS +z^)YHo3N;VqNbk_QZfC+^7p{Xx&7D+j&Dup6$y&{

6%HQk8U+9Sdo~JO*P>0KLD& +z_DBsgF5F&g%gCt(v(dC|V#Nm)VMySi?kWqt69hmxPPTlKp0V#Y!Rj@ch9vbl#GmZr +z^J-gPFX9bCAP~aFPTp{LyrwLBQug8{;peTpkMCb8f5lJwJ%#KD3tanF4 +zrhkDCxo9OZfNZ=;Ug%?X#7*+CieZ^jjD}BT&p@xUQj?&CQ!Np87YcJl#J)~8zJxMP +zQ*N?2eETkoCgE3SARLcN +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 +zGD2o1EJIiG9wUfk;PY=GkWnP!HzyqW +zB0TUVacN&QQM5?gDwTUkVP?fIn6U%e7%wvt<0=a#6xwj+LA~~PAXY1$3T~|5G!AKB +z90)XbnmnY1!x^Fta_yyA7f>aY!G9*iN+A$X+!^(gw0{G>FIU(tWN^VV*rNDF${w_7 +z5ZBlO*y2UN9T8oL#)cw;L~F^0s4ruhNm7W~SE5_mTmjWgNOPfAfOSJk(I)%4Hz}78 +zqmUEw5{x`BdD4sPK#V=~fCxOiR?@;%UyPKDD$F}$EKk^T2noDP!!W`4zs7c|m9U$_ +zG=5=IM0vqw2-+f`MX3pSTsvK=A_x+Ym8Jg&_+d*4Hxp1_Q?WNyk;rSQ=2Jxx#sHn8 +za2&dgO6o~kZ~)WV!ow$V=~7#=RH5Og1V$p5J9Q>n+=7r)79Uakgei{(wr!A?H9Vpx +zQYwxnAr=-T*9k4^bmEJhN9OsKF*zX)Y~jA~uxg|eg}+}kAY +zYJ1D%pUT-zuXy~3himvxu!?WrfDYKJ%hO%UDT`BBop;PR!-hx^*(43(2~$k1J_rkU +zs%*Dxv~P3W4r~KVbvyT_Te2OPMq+PaHbJUVZjy2w3N+Dv8b`#zKfIu=M*`a8xN!yT +zsnlw&Ns6iFD~+^CF{;EK3ZE)x>m-aF#{o=;FcO89rcwYt)vBa$y%c&9!t|I|wg<_; +z%GBA2-;~1g8bP=0h6Z)A%ZXn$XK~h7x)PGS!6wN9|8LF}K-fx+1O#7na86ppT%{!4 +z83m~Atk`F#w9#S~>-g-11z`5Go`vW-D<&n>5b3ONvX?3_ZYu1Yb-{>Sa?<7`Ld~-@ +zJeuBG$pqBC8Z|=3q3mRY4R%7s3)XU8gj!-X;CV{AWRktF +zJWg6vYLW|+SlJ>TI_u!ntB<%5ntVqapZ*!7rV#K45ZksNX!B#AgMQ^T;^0N9TucK +zC@GEc^=+=G*FvG?h>WS=kcns;5CB*LdviI_{Q2i85bIilTZ?A{fl2q<6Nhh4Bj~b< +zpF)vXiR9)_Y6wFo^7sl`Yke~ +z1wBr$6N_TJm{j0ZXaylu?F-7(dC7T{Rb~vESI8wYkxp5y9O~B~wyY$RU(!Ha0FVya +z9&(gRCn*Zc{gEYjU-+D1h}E`)e;@KP;)XS#&c4uSX%|G+FXWO+P@4iID%DB!78d)0 +z)hMC7%YXZ63}CkXf4aZq%yU0*oR$FobzdLUjdDKutVb_4L?|fGi$o*?5vZp%<7$FL +z+Rz(gQoiJg(VcRQfE+H>78hczx{<6mlqz&OAf3Y3l2-v9x7B1q0C)Y)Qo|VDgfoNM +zNkM0kzb=Q?p@gUUQ%Dv(Spl4VD^vH3rQ)sv=N;cJpuJlUDIH(lXo7JL{jZZmY&spj +zP;^09BNIf+#WUq^sk{Dmrw;nuCA2}alkW|*YvAnyEfkLMGf|7$qPtD)S+C0swr5L!KuR_rW#Xwt5r;)K$;gPE!hG&Rg-| +zKw6C5`3a#IxS~IMqH#OdV|MJGSWv%RIMo+`IW<=FZzYH7YSVm?V%hHeb|vpn@oCOt +z%#g$@03Lyqpb!tT&~Anaikl)7^&H*Tm@ig0ah>-`o+U3qoe{yDjsaSamk^PWoK|v7#7}AA!tHVf&D`lIpi=;eQD*4o49L|DnFehU;ZIF}XWh9fw%*Hc +z`ifb}l?bTF^&{`I?Um+TluacRl-!!G?{|IG7bFT?mZZwGLf<%vVfpveCr`ZpxOM^ND;y#FtZL_EmOC-{15@~hJ2=hd0z+QCnf;cVt +zQ=Xl6 +zPvL%>Q^k@L;B3hDx%ez`Dw|FF`2B+n!AhH9J0bw?xsu`*9fOeVlpD_C#wsZilg%p+Bbm +zh+_)6tC!g}JfTOuI!=n3j%ao}2sUx-T5(1lHOT@fcz^u7M_bL}^!%~u<%*4(d4bQW +z9S$?^7rf7``prI)Z5W_>Ci|ea9ci2_3uiS}$2N>^J+7KuvpV#==EulaRjxi}PXC&# +zsqUsa!^w7$=0`>U_jvSN5^%0!BzNrmb<)x=+WYTF;G5YI!V-)igJLcpS_2Xqv@ug1XWGOf7KME2bioZD=wN@!Z9oE?OwUurItn0+>tUp^v?4Rn~70yA5(#_P5=yccKt=!b3p92~Qex!1(KA~)0Er+uSUwQ?-(+^Uu6amCrRtrQbl{Wbd8B7WGj9ii +z^#xsw{u=VjcV(fV(j}J9W+R(>4 +zURu6C%)#UAT~vNmm74kWUbN`vixw&s$Ero_%r!;<@L7GmZ)@y$GDA>aRkFRTnJh&n +zOpj3oZqB>UyElRFdn{v2&C2sNP4oNj-~NfYG0(%JCn@MSK7Xc>+GtQoi4mhm|En~o +zJIwRCba99z;W!w&&YJOJ@3m4h={X9UDEBZ0nN~k3T(NE?IX_Z&b%h%)C{~HjAr>r!x!Q$RMAi +zH)iv^7Pp1Z$Z6-R8Am8$8SXl4-ifM*^WKL}Rb)GxgYQi;+ts>RTT^cgf;8_3+$%dr +zjLip$!2amHS|7ZI$s#4zejTOIk{%4;x*vXJ3H2EI!J2&(SjF>$*pr*RCkDlf|8e*V +z7~aUXd=VpUQ}%vF1s7=}fYncm3srSA9MD5lt9$0+IM-!^1G#I@`f)JFMTP<_bh7Y{ +z0<3?9HFIyNM)gXgl4K(Qv+-BlL_^3=!`@DDSvR_6X5s{kHEy!%)8z8>yWonSc +z?+UV&2VyqdfuyAY_lwVmo|mAuafOxYg6t|~p2;KtPXB7|9V2np))W|MsmW0%3AaYP +z=FoBcO92*bq5jj0DnUibfjr3gI0PUUOh1kdCK4)RwOdSs; +z&ynDLM_faRH$gac)5O5i1sSV*U}TqQNQy1m)J}xQp03gJ-xaVV3=$!ve<7MDL?J4# +zmq1FCXHV4NK7<3_VIbcm8cX)B2? +zhKO0`P8g56vncy0yO5%%OW8NtI^p&fVVp{d$j+<>RFGilGCnTA6+n|dj{;Cjb`w&- +zJe8K-ptMw}^0eH$BS65G^o11dW4M#jl08IBxR(RRnKck?X`0@kIlZ(n&`;NYL0+O! +z6iWtSw`oc!yn6Y8ajIVcrM$?)iUsW+d#RH@M}j2Kf}?wzL;z1N5(not`%cTa2|LDG=%%gcZ +zL7}A`nAuPAO)qNlPJdBxM&UEID2%NEM6mpi5plP!%P#IXDq=vdQ2Ab4#ei#q&Kyx8 +zYLf(hFE7ip>)^@P>Ila6@&|)SNU#th%1O(vgG(mX7%*oiJ0rQYkwa~P*{1sDp+f-U +zA4mV@g~IP59lY|BEM06D +zNwKOV6*DhNTq*!~;mQo^Uan5bs0<)NnbSNj&Y@2vjURpJ3P)QJ4odnehjf?ET}`r_ +zK%SJ9`)MWCDOw0z)p>y@Q}~Ah7pVGGE+SaEk#fgT3|bTq6hC!_TcA3-372ua?x#oH +zL$U_ +z(?Ydk1E+1&lXojEikRR{&1)qgZ(lJbz(uB4|8ksNROI3d4a=ZXULq-Tu5*j1!y`IPg4vJOjBD*~0Ciy1^xx#(V|d3-+0O7j~@*03<Dn{b(Y^-1nmT)kmAPD?Z?*pVn7bd +z=B7cFQnm>Cm`VEFmj3mc1eL@TEi*L($rt{o+q@tQEWM&y1^zeEl1gY?dvHca38rs(Wmn-TJ8+07&sM)<>@o6UEB{~f3F`{VyCgPa44 +zAB5u{G-kg~ghSwhm5pT?TI`cp=qHZ +zIqb9t0;X0A3|5v=e!_*DW`z95>K=(?hlnj?doNuj#DF1YclU3SOc@#jue|uaT_5$D@XwGZ=wJACxzH3UH +zO9++@r+p7_@RoB!+u^0kuA*O6qdT^=z667$19{l7q&kGSjKnTGLuz`dhe*`a0xa)% +z$8zMN*YiHTC+o*&jZ@?1!ctQcWQA^O$IM6s73rYEHvf}w<=_$Fz06Kt_ocT)X?+^^>H5#B{7P1HUdsaKMj>>|n+pD! +z$d-g0j$bW#aUp9U$31z})V>raW(*G%3Y0dNBv1Eid7r#+!0%5y7F~fJp=VczYFmbh +zKh=8Cxj-X_7v$=Bp0&iAC9Xou&7`{n8Q`8vk|K}`=Vy71WV*J>O_xy+j&yh>DThWN +zBWbm}c+(w#wNKrEuvveMLe1XCmu~F54qJJjx1r;|#aM3Xcfai=EH}K9`V3`Nj#J^0 +zB__i$?T1%Jsd+fW_BrUEk=T3zf)1Z)9pcp4PB;iYpVu(>;!=t~N`Hjd5`WuCX?p|r +zMFr>;x*?xqO_Xse*-TM&bay`sfo97ESwk7oH#x;-01#&(+SZuQ6Tlcx=g*f51XQ}n +zYGN@tX@sGtpMBN=$uJBpldCx>yg#(ZzN_g>m*PM~29N +zx`RoYIKi`Hi9C&l_N8)W{+~szX+-jogtc_~#zNgOTY%mb+L};UyR;Ep{S-tpC0`aj +zq@UWiAoM%QGRCa9{l-UhVA}8-#rgR?g#x?vb0R +z$Hp(?E52>}D#+}ydD}#He)s+y&-FsYsJFdS%~mF{h3a66N#K^!Nzp^dBWlP6VUgLypF)MHd!NWLaMh7?#>gO#sBGRAFtkyKRW +z>!1&)aA;e-P=H;Dof+~m1{frLKqkViukjihZBHg4EQt}dPa(LsL$03N(d@RRIe0ic +zs%%{%z7Cr2cPiGl*jk*h2(}X#xr;Hr%l2vAfBN>fdt}+jA%%L5$zY;tKFWfe$6Nh*L +zoO5+Z>YAW7-AAZ}wpO}f68nkEj45Og5~MS56SArkD67(bBW +zk6ZWV4@B;E8Ba+&2k~}5(}jIR2pv*T70Y1$j{vt+j3z0}kv>o6XbgCP#iaRP2 +zWB5E;3a933WQ8`Pu#ypZ4V`Ggq{O?Xfeovb17RsR%_kL&ferAwD +zG@-Pk(c;|=$-?d9+@ +zy3FNSyt0k6atJ>%uGs8|jKFyM6es>3UL;?dILaDalLUeCRiLIJl<)u|IfVG8Z`5IQ +z5CK_W;(Z*Q9HFtXdlhH1#(yQU1pv`<8}0c#bV}e6(2!S9(U%Ek-1g{O>5jL>q6&g};0Y*4Z5a +zzY!5P^z}?qf4fdn`d?)W1c(o$fJ8ZfBQF+xe9_J?D@4*W(hcz^Hhjv!z$t?Oc@XX6Y`(`i8TyMemfqSKtMT{M>xY##gSYny@u4a2($fN1TxQ8cjH}=IU +zeYLmj_hM*@{ia{X)Q!39?fx_Le*nJ1dA2JtaZn9o{N95G6lQ44*+M!m?J&pA2q~Wo +zN*|mwWlCk +z4uyHGu119Q22pcIURwlw^rAb{_s!yCsa-G_sJ;0$TG9TfT);|5kNer-!RzD|0^^r& +zs;XZ^BW6|{AZV|tfcm2y=*AE~3`f>tj@iq}HLmle#|JzJS)Ej +zF1vXMq95Nr8z;1y0d_+=j#f*tl&ITrLi!6@Zejz6ynIfcf<4s#|0yUg_gNsBJq+j1 +zOF@F9mP%$IrT}}9Yy;Aaeoq&pVzlmLquZGFz8_Vb% +z?TGU!Zv}u`fm{+w(ZjAqm0YtS>ow4cG_sLbv)omt%qEq|Oo +z#%@LMn@IFR7>W`nkZ3EM@&Nvjn`?qU#?PE0EhlzD4MWX-fON+vl^=tdrUjZb;{p=n +z6_Y<%hE_IRD$x9>!9kbi9oN?br6Ck!{aK=enD3dLD1U42*=w$!b)3e~9Z?kgi&J*C +zUq7}J`rx#8c`aOHI%rn`vE>Xv5%e8t7QPi>rqMBmXz`wd&^JB=D7|N*hUhxzx`A9F +z6c0KBk+Jy-lqJK{a>OR88#pf{74CT_7)+F&twg(_J`SjN>?C1K90Btify-|eQobK< +zc@EqJo?&zu2D_P52JzN;UJttVjeORu5HWgRy|ZeEMZt&I3jat%3E8)3xj{DEi7kN` +zuxQ^xat5>eDX5v;K9^ev(M((sN92xgV*I8h{QwRk-W^agS^N}2ZUg5g-V!eg@a;;1 +z6%i>7;N$df+1vA&-BI1@vnS~f5E;)+H~Y!x!R#9e;Ns`FNT~tj*b`F+B1elD6d<)9 +zBSr%YaK)yS@f&d_f!!g)0a$Hf9f>~YXfmAZb4A8jIgLlxl;W4j)#*rr5ud%NU~qGb +z8C{I|oM5n(2Dw;o97rW;0n5@ +zHLAkBm<|QE7mj-(qK0MHAy%t}3sHUzZF%5mx7G*~=@QzxFFCW(|7zu}TNRUzo&2Q@W4(Ov81X7;U~MT1`MxT3_gT8=^77Ra7}Wlo5tUfVne +z1OUM!R>%Szzie#ZrOWwuZ%=O>U|`GNS>oR$Mn1CxgLTTf605wk0_YIU7KT{|b3N}M +zc~{)M*e&v-oo`q1*>1}))A%TOho84KyyEZ{f3^UgkXnGp5g$fkm{Yq53Iv#e)HtpY +z9qkjiGX%^Fb&(v^H%bub(})Wu5rQ2__*bGDCbid?T~S*6Dq@nOXCQBcSVDD1WO6kp +zSMScnx5X@k20?(z#Vm=&9jXg*b-`eupnMSzVzdoVSey^S=^j1u37!g*V%mUv7*bhD +zYJ2(U+&jRkKi`;VGYFyEXW)ITqCd1GFp;8B2~DU8LkdckrWc=)ZxtfxF};W=i(Jji +z_RH<$X|FP%v}7`Zj>buriQ``zRn{{=a#5S@Iph}ZtL`kCCkFKc&5S*>wKyD4^ewn- +zE6NpLT3h@9Q>P;&T_MB}5jf+dGOltUV~<}C6?7PpPVn=GriJhMVhKMCgC!GRZeD=^ +z$hOp0xX5&pMIs*)O>6+p9Y?w>Ld<`4e&(IG!#E*!XLd(X{N0 +z__oWaO%DA89@>EN?KcxPQ8A;|p% +zWM;b4;N>9Qh!|pqZn4w@j>e<`HM|yq9(wk~E6<|59Ru2)^)uT>vfb5)VwjOJ^%y5h +z7*vUP{G2hwa^TS*Mp|x6%ZVg6jG&+|jeq}=?L}1^f(ehI?`qx>{MEcmLtX9r^iu1r +zG$4K+c_l8_``vONwPxfzNrhH(S`I4Jj(SMZo^q(wu@$D%rP@g_l^eD!O9u)={70a> +zE3xb-uuH1wTFn}Wxk0kCh+m3lop}1|%V;V(5=uPLj+SS~CwTWz`$eo95n~R(88mVv +zK$sEtk;JL-=?i<4){)K!1c4|?>7#bF=D~_j4H=t%mtMgYK(7(`LfuhMV5WIVxh+U8 +zh}}wjRrdKza5#&^RsHlAQ?1vn2VDha(5p?87nN4xtM}b&K~7&G9hzjjrXb_S@b|j? +zz5FinAF^Naq~7nsSHr8zNo|ApD>`q&1QYVdbbBM>4rAE<`s?4KwYH0BRsK5SC99ss +zSL6DUr%f00qQ4hDI?m6$*;t&{FqeBeW;@zklBr>*VJ#h23*gq>UJY?quz3baHYEq2 +zi~R8gASkvISTvj$LHA~bWk*DyDrO;SB)G88U3{#YmL>^2Shx;l!wMBlDQbX4;r~RG9=fK+OE_UB +z!OfGlnlxl2X$V@EU|W9PizF`LlcnaIb5^3CShOEECAOq>s(SFONU92O--s8SIrV4u +zz;730mmZL_G+{dC_R5l#-P7@;B1w9x9w;3JX|$h1uXz#!roI`SJ<7eD+F*Nbo9{;$q>pFJ5_i^`mk2Q$^x{jV{## +z_c5=_vmf+0i8pB&j +zmu70>S{9_z&+@Nrnib0PXh~f9;>AMZEouDjhW6ytACW|b0Wd--R-fyAaQ0{bc~{lN +z&~t#@1FT)dJ|w;r;z3{N=gw9|-p)=W$uvN!bdtWBFCprrF>srpjrnk07>`NZpn-S; +zebIwOA*c528X$#B>R|%lo?*GaHTD$PEYzNHF;CisWLCKWem+8p^jRh@pa_@fhZ-op +zHtUI&TTEH*y4o$6xGML5*}B%PSydhTM777d?9*fP9qj>*+f)R+;$q`L!0o +z&r*btgk;Wk21^(dL6~JV?T>Ds(vNctk|Wa2oJ>lHY9J;)LISy@aF%USQ*g_3J9I0J +zVk75F*r;md}}wpEzwvkZQ<`{D&qt=377^%clwv;@9i- +zz}fSIhS90(+e*gZ&wK|!FY-jRD4QX-4}8+Y4X*Kf&F03c)6ps@*yuwjLB=#SW7L-9 +zNeM~bOVJ*GwYxb`M~3n6J1`rrQaUm@cHt! +zs7q+dlFR9K`4qJQvX93?K0s2UdXSkEf{H)@teSzIIX6k&w>Rl{u#qcc-D8P7PCNuP +zKr9Aqwqte#vWEJo?nKKkw}-}=Wmy3Tj2irj{9f2h4d7eli31@0WmZORU%EO0aNrzJF!l=!(qCe;@P`YXlBV)=H3)b329-Gmg +znT+f1fYjA!ib<|vupC&`1z;>j)tt6^zA{8pE&lC3>ehq#T{EYnatIDl?g>4F=9bbDFUi7KTxVPdK +zVyBZIIOZAlA#DT7R6FMQbj{+raa1xe(j(^u$9?}r+yyO4A;N#=c1}xeCVg|iM6Nn+ZZZ^C(^HXR +zt3jC`IF5QSm9bwMJkWQ3qhkh#*f%xr6kxt4B{^c1u=*(sG!$%I3bbQE-ERztJJRb+D)y{~I+JG$8{;J+m=X;mtB6cj{1@{=IU6jwTN()D +znKn*cPzxEU&AKpRi;~h*$H(nu%#XluTM3aGd{(*mZTj}|>WiI!{jW62bF^TGy^!&X +ztt~VXtwe5;2{e^qHzwq$_$f+rSU-~HA20P)+UG!Oe;Qsc3L-{ftm_k{k^cV%)A%9A +z61gnKY^?+r*@wYNroY9yP=G-b`LR1T4N1qd(6w<@ii!lVZMe2)^(r-mIyUk|$*~#K +z0djFY(gSz(G~`PShHNBc3Vg^JKb8vm;KZt|dx*%0C5_>GeUFc#BL#B-ag#J0oQ1)l +z09oB*UTxKXKI0%akhMj3-&D-}(}U990Ejzq9V|>U{$H-B%Lg#N)tyIdO;IZVuGiAX +z021Pl(E-^3t4nk%i2(0L)~1?O@O*cgol7r&nXE5=)D;+s3G|}ZtRdSo2agOWg^|Yu +zA!IQlC0Wo$KP5!Nv0@W=>t9Z^CxDfPzG;Y@y~9TaDvu1AWndcs{=VFhJTjH>UYIXF +zlD6@{Q^`g3@P~>m=W<@Jw|la3o7=CvfZ#UG70KrCtiz%EaIUy;a*22%>n?s)_nc02L&1_zs=&J$frc!o>He1`@`HD6dr>R#a**-|&2DK;D +zCk07EBvHst%HGk2GpcS|$)-8f^>qYPrRrC+djN_a86$GHT2P-aSL-PX`m7a(Li3NU +z@Ap@hqVk;}C=6^g}K4(fSnpjN5;Ak&r#chK4oL}lwMVy~u;qz;j~_V_vY +z2U%a(gRYQE8G2`nx80%kb5uw$6{(UeAFH74$Phs319dlpcirupk8}S$Stc2{{Y+*i +z8Zg_cs}rF0XmYjVr|$bl_AXy?oH!yY0|>3RtS(7l>PgtZ!eNa)Xb&m3r{R1`#%UoNgHw#?$yU|B>Ceer$ao#>5R!$5jvIoX +z>HvyWMSY>DLl!OwBEU?$EWrU~0QCFh8-vGNPA92HodlGjtgn4}c52ue<`>lxN|f8A +z;8DwPaGnX7IiwOtQB2+>gOFm*dPnh=tm=LB<|+1zw@9m67O7#xImH=AJ;M_%_UZO+ +z05X=Px=HK%6KO?^ffK5jW$b*b_f +z%rnM*oX_J#+D-MD2Kt8WkWmD()z_}D +zRlNd0iyblwMMMKQ(dPjmiu~3}#y1jsRrwuIf3IU8YA|;+?e@1JOPs)rjr{;ewITpH +z(XvQcwHyyc(hezx8#`F>1r_P|M?~9}4cRu0NcLE5RFCyGZ3QmPB^m3`s#!d~x@itW +zwW4z;^9X|m0p=Djc}>IVp&fNR;YE{$^St?Qzb} +z-}9#mOwGG(8E4xBuZw01(&ZNVrO`-anwDdq``C6UkXEp>B!6zty=;?YUl)Poc_WAF +zgTR1exqOUnr1_)%9;H56mT`<_;9@!28!ZBk;QLbntHM;z1?3Ay0rZgAHz!>FgX_g5 +zcJ!$l!|9bI9?)`)GrhQ+4wGG;nVKnUNfwv`Hg`y!=)r^Jj5gk`Vk}Zbo7BA+58)tt +zZ}2yt90qXw^XvCjeR)b|oDHaVzy=jxDC&`0*0qp5DSwC5KSYX>{^Df+wYzZ~uemIP +zh!{dfc>%KOzhtG_8Rn5NtPqC7CT#%HW6X^B4W~*;5w)sLVd#~3WIi_ZO;LQlWo@;I +zv(hSZ(U7MhFz`jOabMAZHRh=&ML`z-#j{bKeM%ket28sOKYmVKY8xP`TvxqzALL7> +z#~FCKfT9^_4g03FTzZHv^$`@6x&CFq`(WPOE@iV{X(PxqJ|7G6=dL$lY43O1Bs-eh +z$YL#$mJXSmuQ17=n~rh}`o#)x+>1(cMTV9|J-7ZXr2CP-#9$cY*{RbpPWJru`~2t6 +zb%x4q-`M+YIwrH6en?K3+~a$+_mPq&n8aT?WpmW=ol}OVyALryg~%*fqLNKWNtK%c +zbNc}J+R^H7Hm?kvirAd`+XXBfAcy}lRD!V)Jjb_-^2y8e-v9X9v;TxRmb2lr14l+-0yA_eH%n&-{ +zs?QyuIdEP~Q&Pndk_S9B6j)%ELAkg`@++s+Xbns9+{8x3U1)3cb>!C9jW$KW5_%nb~X<9AJW$a7U9u9ZF_3>W2lBZbFAwv=yqXv-L +ztj|ok1e~k>_(E!ajxh_P$4MU6JRy_#d$sQX>tc?bv@>^V6k1$ +z9&&$?MIE)5S{Sr5FleVpck?V`qiV}beZ9kwb~om?xC)!i-JExFPgW&+rS$JH|NV!p +zUY6}9E<-c!(M09@?(pNufmoTx+^=^J0=L~VWaK}y-TgOuS@>BD_rFLs#n +zO2ay~?O>JqeeFXxzk*Pjm7^IvI0@kxX(5g82TGJvve++D%jyVSKS_}9Q1kKNL!9QI +z$s*NT<;Z1OmZZ4l%CWc2u&!M%OsVBf_KTE9mv?{koj3*WI@CGs$0~aKy~VLkc&XOrj@sJBQ3dC+jW=5 +zsGW1$Ff5}Fomg|Vr)yGv&&jOvi#;>HCz(IBCmq@dA9w8!CyTufZcY0T(pH~A@`9@W +z^+*2S4(i0ddVYuNcAm_Q&B+LiZZpbbspBwoy|qIY3Ei;fahq+oi7+drTSxMa*K5Aj +zi7XB$J{z@uM25V786 +zL>ydxS@{&fy=YFtwOhsFt6`q!ZS1U_CnduONi&*I1yHkw^p0Csr+y0KE?2>Kq%A+s +zO3%})g=*=8yBooHooP!@Orv%7@Nl8zqd0D;t|1+d;JUi9k~JyMwwR`=xzM+78Lt{J +z_F@}SH(j7wYdO;Z{{H&+dgH~$P{4rH4_8p6B5%~UmaN;a)lMSv +z(`c%%PTj8YMmz*!p+8UF(IkhFbXg?E_WBaaIMwbs5t5R=@56u*ijS +zzyJJI;su8}W(KaFybQ-hUAsgZ1>}pw8%MnU+50nc@S}$uMkePY)gBO|P`^$~T|G3A +z;f@xkFdq}LE?jR~kqsxiFQniqTGbWWxEdi>vHgjRr1%3H*J%;RL1=PU|qwTL8xa5JefSn*;% +zA>HbVT-)N7UTlfA1A3H2Vh63r?=)X~SU|u5P-P+{O(#rU8ECtfWxe(_tbS2j9eI-> +zaLU(g%%XDGDqSZkc%35S@~dt{W=Rp=joiAD--pvN2{+Vr^}(IQw0EUUj@hU(&e5JL +zsW)ZotTaP{)Vpw7VV6;x`3j7BAsS+2W;5vCw~C6SJN@Bcf_^So@_K_^>l!^kK1cI@ +z-=B0Rr3PgWV%yv6B2fKb=u7LfjZTW1>N6I*&NPkPJ_+JQeU^RP#BB#|r>`>*%@BCi +zPe2Q_MJ{?{#AAW5W8ws_g`@;sWp?n&YT|btxhJ>$L<@MiL%q?@{p5a6c3VuJ6RFK +zAw+q+7e`5tthu(mZS8Xw^A8BvDWk|i&aqD+2V7MZNX_`3yM(N3;kax2U{t2#Qki9Z +zAGNq%OuP~vzg5FG$L@@wC%FLoIRz*jsKV15AeoXAK(H?3vA)BB*)k78O&TuOJ=htRe+l#i_(|hb`CzOTu0(`34{cv`_ +zu8M%WzMsXGVM@>I_cvn?3yRWb*GM+OW&nWl*pucmgYfh|m?cPwn@?W-uGlp;(^rR7 +z2*6z=cJtJq_{oowB1G*nM9ITII~D<^*vuHa`qh`4ng0I!AGvm-&A>`CDEFLNj<(^M +zW@_>`#kC;?Dw9Hl&i>I+jVhx<+kH;)noH2G70_%ntpYisX9Q6F=muQp2}H>sCmV=l +zNhh#uX6?zDez&7hvSa}0Fiu5@JSh$2(=l|E?!Zny`jT-{PxUPip{%|31ECfT4iOKVi#vav_Ib+JC5 +zhu}YN4GrlLq)A_A+i7nRQnn2cSv8SY`CW}0DSA2W-k^~NGWN)MSNeT(gJ%PJp`k3r +z070?ww}{i`d_ep*qQqO?18jt3lBw>ZJdYeyHGz;=c +zOZgt!7m#g|4W6X8hkAn(|3Mk0& +zVm$4{$><7}zyIc>N?zdWZ+DkRe0sXDkNn({`2FZT+j)FB3n4bmm&UnZt-aZ(4ynAJ? +zXL@EqDB?+vn4U4fUKJ06uKO%?aXRzNJu7Mir6ZQ^*x>;d*+DWC?;hsNoe*fS+mZF~ +zDBJI4-e8n0%)J;1fxiG$Zm~?7Q7qppwB8*58jVSzSOD;oqK|JB^S#{3Zxs9O5gopl +zC8z8=c_u^AYsH^OXKGeF0>2VOLiC*9V&uKBc)oI1L?DnDI>TsNoSUf=YXbVRAn-ol +zFwQg(?u;6xikmonWzu8v?bY|eMzNPvNepX$oM>eStfD2L)2JPB<+;R$A9WG;VnieD +z0rGTIwMKHl0S*{EV05yH8Xg{3_biLq3vw+!na;m$8L-En0ddFK7{k#W;VUtFxwsUqMn{{%N$laUJgv4xkh`OzPl%s1XVOJ+AEo0Cjku& +z%<`}akGO7l+`!hca|?8rV`VoiqC>4=T7+P9u#g(Bmo>X`OK#r>Biqn*v_xGoz8}UG +zGwqO@E`D9cF%iYyUeTV@=Cd%n87{ZYv_;U-#tHGms8*h)1O6C#a93+hK1}1BC`Dr0 +z$CYj6zB7{@_nD>}D2qZl8g3uz1=pIwbxM}PsAd&RFSCskX@VH^f3PKdbiUWc((zM@ +zOFA7X6u}pyxY~PE)fu|Rw3wKB@5Y!9f|dswj0PM3SnaqSWttDe=2>!}qRucO0=+GP +z3%YR6^++bflssRf=wciOnjSp#iC&$3kHXq_$=7iVJIT^1VFOfQD%8b<^=nj~Ql<$KuS5!tDDJ`d@^CfJAq%Awdq<(2GO +zMRE+wGNT3*5LJhQ1x_&i@XN>>k8HnF-3RK4#sqJ{jDBKKEFd_e61!3fBa@C(F8jc# +zu!-C~8bDMak`MVb0N30e8HOK{97#cdVF7!}bE81oF~PLMI|%l1-l7XWJM76P#MH4! +za*obuNZH;s9IZ>`Lh1>UhTtR2WCr?n`~BZP9eaFJXlo=)oCLb@nK(#qoR1qDNYtT= +zD}QbWOZT9jJo@Q|W^}*C?xHZD(MOQ}!=WI&l1qQ&cM4}ybO+9?sJ#sX%*{Ca|YJ`ntV)tzbf@Z*-9J(-5O+= +z9YB*^CvxCuUbYp^c<}XXB=T>^cF|LG0GS@d2{Lp1A&fpH~75ah1m(jH}0fG +z9AE-~IeCM$_uFpXcgTQ+({&E|;*c*OzYnH4(Iha`dVP5zf+b?`Vq;x!ViKYc1BOAv +zt`^tfg~>ce^O?%p4)H{Ey1GlUd|`Py@A^7Kdw$VBfw3{{fqdQo*-0kNt;;7qRi_=^ +z`cH@rj`QT@`*C&q&7Id^L_L$&k(x0%bp}p7=i!O#4%;o_rm$8xydCMI^ZXMqqpV{? +z2v#2^az1@=85JGqUdnh`NDc6EuSv|3iH|9sfsWLuI6E=2M#HBH3ZaEEEdHrdefWZk +z==?OQU@QsHX|5_zKA;`j#H38&+_y$e!4Pdjd|KZ3t;yPh$4f4>Sug8Lk7)y0XuJk|!d$`#^4Z$I+Y>*O@fNlCGzIe24Pt(YuHz7=KpK7H=;&`~`6QaoE*F&{k>B +z*08|Q8h<&3K{OsrwiGe8R=+5Bcg~rE`8X50aL(*jCSvejDIRC~45n>pu(>sjPCM^^ +z@0hPWqI#UbM6847IOvHUU##exFSEa_u)N;TI|NpsrbV@iyfvEXtLpQj=dhfKD4yTG +z>QYUSoAplbR2Npj*g6W7%x0t;^=y{v$?q_mRUzt9*jK$V>c)-$p%lr3D4Rpbm!g@v +zsG}k1!)(eiWwp+4E@Y75on_~g%dF

(_vUva~%pSO*<`Q_5@gQXuRa`q0? +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 +z)ESJfmF`Bp^Iw^GYAKJbi*O- +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 +zsS>$brb1 +zQ2q?0K~zp4|BPwaT*+21S~C`eGi&v+U6Y|DV=yO6j6aNml%(0Zju>k$OvIk;pvd(6 +zQ%KKf6lonpi`<4dGe9u77L328t8mn#bU@O3UX%k(Ws*Iau_1@`?#F?QoN%P`-%0i6 +z&?6nnl0G8kEG-`-mizhOl|O`};eNy8fc7r#qrxa3hL&^I1dUBY`aKecCl?NpA%!*W +z_D6FEl+23^8yc$7cMh#XB~FfFsAo%36jtyr+yWIBQbFB!qni!r1JGq-X6Nh_JF?A% +zoAXO-RATew(XzD(Y5~*4UaqVs1xb06^2J^#)%n`Tj;mcL>)GH6=dm;N@+Gw5s8|s) +zm91P(sy4uOGHuBw34Z$~=MyTc*Hg6>CEFU2YnjP7fWp}OK%*7W4eT9X0hh!+m%1dU +zlb?X3^{<=Gh;~F&3om`fbvE5J!$V$8zhfjfAqrdsp#6jorByzeF=;724~)zPE)5FT +zJ9}d+iu9u-w0ua=Tq~CSV0jURW3MV-@fQlhKE^duW)e)%`5eTVe+7QyC?ly;?waTUsZWMK##cGx+GrNgRQicL=N=>$H6|-9jzdy +zkyc_Lo9;d^s+@1_VtfW~NEZ#a9Iz>qbQg9s@KuJOFOV#yQr;3qP5a9qB7U>n +zQAJcElQd{trK8EU%os1?a`at{nQ7-hBn~@=8>DMk&I)L2z1V|iN+`?GKJg`R5&puh +zVgg|lI)4c&fRJ1{A{{DyPxYe}f_aPB1V<+7 +z!PcXC-bfQ+n%0lV8q{v-9MfvZ%AwJ|^VWCgE0PubDCI}WTDOYL+RsmR|7FXE432CJ +z)TE!gXo@4L7Nk@SYuxFMjOu|0EwaYB)KEI!l6GN>R4zRVt@a~_M{#|-o*KP#Y}IA) +zW7E$wJ14ED8qoeQfX{ZVNLeHk;Glff3YB4`Azjiawgl?>XBgNAXpQ}f%~-8%mkv$M +zJ44zYZO)|3=!T2AMv%QRI9#wjKGdM}Tqjh+$)u8#-C`Bj$@~p|e+`ZU>3FI0%O~T2 +zDLOd|PMsTRWUqQMO}KZn!7h`v%yZJ9wf7#f)(S_6+(}EufD8O|jUp2=7Y27@kWDLi +z(@ky()*>JdQ(E5HX}veodgr~+nWnk02`RX!LdFMK=i}v_({xSj1ViMYAVIT4fMdO8 +zN83Sn_+WI;yS!}fW#wxsYbHNPT>ImwWGgkWVIzpB#KP%!L56!@jVSrdHQg4M^!M#*i(_!v8H)Lj&wdS(*54;Bq2_5@`36QXJ!)` +zXx#6bQ+~A)C7)C7mui(QL~U?Dua28Xs~jRamCv!01z*^j?AP^OoymqNo&HeX`MOXL +zBbC6pnU6x=5H+is;6i51Y-OgGxDbw*5VC +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 +z7xzb$8kO#wcY^fUDQDc83)Q<`zhT%=> +zvF;Cxr!AEKG`W~jD8!cquf#iC`ecO(%w8a9_!<^F!hJ0o{a=Qj`?;JemLwkpjkSvv +z4~L=s9ZUS{ua0QVB>6`e(qKYonM(6w*y6v03?Sp3bc%~z6JnyJwYUr+|d#34HB+u48#{sn? +zc!BNQoV!4>;T-XgVOW;wxNs41iQ(Fg?gd6b@J!2rYi*z8Iks*ZK7E~MS~l1kpWs=h +z=h-e?P4O(lbsf_pud{vI@!&-Xo~;M2X9ofGeYS;n-SJ(W>{jRl*S2;23!d*=u0?gZ>)L_tBHR?g^Bm|v_uDWIG1kcx9)9?)PJ$=wk+XS_tcgvLe1~eYz&61w`zF;c@Fs5H((e-30d%fU^@HW=dol+#%un2H%AgqR+Y6Jlufys- +zi>=7!y~ecke$+NlZcWw;%!j(tKG;XCo)@Ik!n$u&zt}9^d|YC> +z3m)POY%5udOPk>dLjBtb1MHqB@QqkVdHtYc6+%1~KP2+39{TO#b#cY|T7IVZ9qj$j +zSNm!2>LW>_`Xf)CVStUj+s-gj1ljz|hN9EW=v>n9i7hIIh+J5;B=20-i+VQmU*H0Hr +zZV9Hem4rg9(RUBbypgFUS|svzzISoJov?pes2c>JQGQ;tik +z%L_qD;mX-Bt9bI1nNpjK7{jB=?$3lgZ+D~wEe~1zL=&<1!*QSk=F{4Yb=L-Uj7D88 +z_R}C*Br&%%g(^4fndqKK7q7a%TfZc~O(qy8aehS^Fp9^vH-O9=mmtr0<3#4jpQrO0 +zrYmCzh;4k2+h0(sYleFgvR4)6jN!WrFsAa7uIEvbXiNwoYOkS&56IekvbOQ7Uiay3 +zQ41T9Xq%P`nz`+3sjYMtOa%)6@=3*F2Q1cJ#A9b-kJJApANSN=jRdN-Db=oR`7j;J +z#PI0fQdU)%Ylx!zp}gC^x3axpD$ju;yAUvH+N9y9Q%9bU+c|WiuLz +z`s_5i`?c9NKOr>qI+~P`SsqEhIlR}UQjyF%sYaW?hTEUDF^gkzN<*3R{Vk+FEU+db +zp6$ZrYC&TycU6>E@wO?ha4;Wj%Q(08P&o*gJaB?y^1kXgz!GoZ3)-=N6*<|vf5r(j6- +z0;ZlLM%7->rQ?UGgT~wi#^zm-Lrbv$t8Bi3g-5kZZR!}87WPDZ4O0Y8>Cn+Md$~0n +z&3NAMexO|Zz;Li>!!ZT>+U{d_tD%R(X^LB{h=#O$3pyZL(dtG%5YqzW*O~WaOAo*E +zN^6q&x2%(cdE4$!)QV1u8V&ta-MZ(dN8A5+u>{N-V1m#hRLCn&Njs{?$d)*EAjO@T +z>(P^vD5eNq;@kSjBhPpk5xQcyq3LU7I_`+)f$@RUIF@g>h!h0-#ht6;_|isN?u;>U +z%!4*Vc~8L4WXZC<;_>4*9Nx#P?t)nQ1K|f=H)w09o5&c?j?)L9jSol^SRErn+<$KkK{WhOG +zEL>B!8*feeY(EyD;r~08BbM)B_q9$MhIP7oI2n|dMf=AI>t0yD-oM|!|N5Sa{EFB8 +zs{NhaQvDYE&;Q!a&;Q(h{w#m{KO6c#f1<$fmBKf#>EU~zqPht@pcm4G-eN=`c&DbQFfd9K3p +z9=4zbCUbgvdS~)4I;&mEr&!}2w2B@Voj$d5Th{ILSV;k4!z=nQs^@{$DA7e8UyVwb +zp+O1^gS8~ys3-b^eg}v~yP;-QlvT7wjoqO4k2Os#o4&*JsGU;JlNDwWq`>Uhj`{RE +z&&cVPoWr6NPyP9f8(QV&NNMJo*uF2p+-i%PE*heJ~TR7e#KGOJk9J +zVW#yEd7~Y7UPz8jGi{^n$x0(?Ji4LyV6mVI{Gk@4oiq#GHlxC@O=BkQgIUbJzs9vw +zbDtI{OTD$y-b-Sg95`lKJ$*0C)+WQ%M?#>g*N1L4J}*4FFY0lPbKzB8-Rh)3V?N@t +z2*bpzNIPjZ%T#sZZXBn+o`Z-KAc=&}t +zFOpzx_3#-zX#wFpxt%=R$|dcGWyXFW#=gi)L3Wm9=5y7gd@?iI@ml8KcHU6MPhOD< +zW7!dZwh)FnW<{E6%U#oTc&2GpKS*z2c@RoI1VkZjKq|H6h0DUcXv)0D7Xl)gx?x;l +zenGk{%Ns(w*M}er0@6HKz7gnStye)FkR#9XJJC1X@WSayjtdL!Jhj5%gPoF|*(}K^-ia7}B?k)nyvnytT_SU386|Mf%v8P?Nv_@4GUy2aCPMXmQ +zQ~S*tCF%GWy_^>4y#*#AU~%awj#aO1IV^!=L=OEGk71~|Zu$ebcv7G*nmC2~082o$ +zzh|N$eY@57R;)LcG1xxc4x)T4y*KvD6p%K`8ho#9Tip%3j`SziFxt7r7>pc;^e5Kn +z1U~DNJRMTfWm%IIKH?^>?W89yjBPlT|ETiP9Z8*aY4MVg2FQ=2!r?qMM)DJx +z>6V_+KXbh#y;W$hRWPUN+|)Fm1QC>A(P?LkdkNXUBKOM0vvj|-N&OMcQun1^ +z+MPv?@=@=`SQpTaD;bDPbv)P2Qdlq$DgH7U;h444^e{;MTEnse-{iB^C);lwoi6BN +z=V6lXFDv708w$7Uk%sqv>_5K0mg)a+W{dmKe#j#pjCnZ(6!BpZkz813mnsM;!|nYx +z#x>9rBVj|7RNJ<)hA<)8i2 +z$4@GJLpqlk{R^w%wimec(=OwAGy7okN7%Rfc>?A0s*r6*rj9+2-$c^B*@&)*{U&z{ +ziIZHo5uNs1dIG%na5;^KryUY33DdN<4dqDTk5$Q<+yA%sufMWn*?l1PJ^zY3RW)MQ +zRYvAHdCq-RqgcFM&3;JTWT~q~j#yol*zw5BI2o@Sk9-`Z3XnMi*oHJ7!>_SD7Dg6L +zX^0tEvd5SnNgjQW;g1}CBME(}0b#?y*#CpqZ>_a=?1;>B@2yr*w!mib_KCe?N92zE +zSbIHxD;(#vnjLm&d{D=}2|GBnNmoN3%_eBXz`ndQhxy2=9ClfDA0$T^j4&(LOVv*g +z@2CyJ-K*IPzrZiT$q?%(E}qObY>XCfh*ei`{l*|bOdTqE%QC-cbTeh$KOnVONz6am +z?$f5Fc|5n<`%UvBjhPXcKD944gLgFuE62~-5waeXRl6=cJ8Dvw0j()(F8QIeAk%7U +zldP<_jHx-_WX(L?(&Dhj(_M0Bn*4(6O|L25CwZ0D)`(dk72xVPqrE+6t4xs=cV;>I +zLPm81gt{)ro2#qC;>p!V7j8XUJU_g+c;|)pP>Hau0<&h{1uu|^K(|1zKa1nyV)|X) +zi4FEtW3!84$=@Im-|;yuY@2py!cL(Zb9~Af9qpJc{RH$)57zpnr+jjF@>VHSf{FZR+ROs%(h{lD}d`IUr5_qQLQH$-)+Kh +z7Sl8|Y0GA2_gtFh>m3mXw$Pb)Ohn+l*YLqLCx*tzxX#rwa_7w5`n64kWcP_YfXBlq +z6$_%X*vG5tW!(JWr$7D?lbeM2&vimGoeo`t7$ZMz5mTKi#*}-7>Af!Iz~5&(W|+1S +z{G26*Z+dVzcwGpSa0w!|e?Srs9AQrhPT}IKza|-|= +zl(Z<0XkT}BnJmMC$h3~tO0wM18W0kzK9cq}d+mgP!L(FGZ00YI| +z6s!~E9n*9emFYlF!aJhfvG^gO7;t%Bb<2t7)N&lk{BFK)?gBRM(+q2WsLJ+Z*qYA1 +zqG78dEYruICWr){zsHtWyDoISnB-(_YQ|j^?y98i;}yDXU&y`7nd$seSo@{?;Fnr= +zFLpnjtld>(uU4*I>bjG*_NvJ2RpqW4_W_N2bF)4h9XFkA3eTgR9YUI1_`o=FDN9n% +zHF)I^AtUZpeLP&%J*G3h&JOptyDr^6xj{~l%Rl%RXvi57k*M^JeZbiJmt6tk1R!EC +z`sd|6@=IX1%&W3s+p^-WDX28|3J){SL7cbiUE%u;U^{945pPq7;|@P?$VimoC{Rgx +zxd8vL +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 +z7S+4Ba^^z^xADcu+FwRtW +z91UK=q}3r=k>FY!Fd$nxDN~D+4ogcGB2!;tNhnE+B!&f&M9Ok58}=j>{~y}-IS%J| +zZ~4cap_5Cp;fOL$#1p~31u!&?(<;@^VN#FGYiYy0*ctp{T6DywX2;7nSnV9hqP#Q- +zUMn>nUz|h?sq-A+S$}{;>)4x}KM5C`TwG8MJR@d1sHHN8D$-{0p23Dkr$Gjbjs;q{ +zgMk&E26KjF@tnlQaF4OMw|E8g&ASIa1iV#kF7@B~_FaUU8Ccj!B+pILAt~uO!!diz +zr$e(>iaT2dpa0G4>C?Y;`q@nKD*tTuzNcWd?8eQ_GZy|J^5F<1d1t^m$l*QI(_K)+ +zJ6*atq^=+ob*L6uuY+EEPLVK>F@eBpvWkP}>69mH(^aBxxS%vBt=JE3Ky?!+E5vW1 +z1xPzGMJ|X2BB;peT{&ZLt;=HgsE$SOfr_09nUm9Lne5>v+YE(v(5yo}@podTInSrkY$IGh0QXuAMm~O1yd!zb&Trq2%#xz09ZRe$A=sX?TR7aF^W2UW+=t9YAWvS!& +z(rxx&)QGvDrAzz;t>J%{cn0Dw+=Bhm-!=mnm4`5K9$*qKeGYM9@39L{8f|FSU)%KU +z*^z#|GMC4S6Jfvxn|#!4?V$}`X!7Wji_^T=ifdNJNcXE$Tex0d{>kwR`Dq{UZv5339~f88 +z*$wTzsHuju>S9}UO~Kne-s1c@BA_gmNv|Fn@rSxO`r*-6ef^Oi((P}}{_;n}RD1+h +zJ*nA-``ORt;5tYq>QDSqDSJYI|ce<2lf<*ts<11!gMVPud2*axWR}H#uUWx +zL(AlVJV62JPiVC?C4-uA$j>T8!qMLJ2P^|gD?wP)IWAh5?cmBm*A4BxOgXhr{wPIdkE*MECnE*t)Xd0e*3*SR-N!PQkkV8 +zVAi>(DvMNYQrs&;&{7XlVPHwXZ{XA-yu>~uE`x1JTw;N#iD1mantBf&R&C^_MD>C^ +zHHmX=I+^>PAB#37=lrzm^^jWy3(00=Vr3D+pmWf`5ZGx7K_Hb@%#SkTN(0O32iZ7y +zE1>qLJ5$_s21YKuA~xvGiMJkiO8?@*1QyQD@|r#YKGj)+&=gkvGol~IJxIAS1#!Ue +z;+6r`82_>uvhOuB!%pb!* +zrXhtI7Xbl!3C9OG3w3z_Ux6d;!M$~5Xv4RdSh!T#{MUUUZ9ENSeoA^)-Wt0%5ZTy9 +zCRg-Jj!QXh(?Z;;vSc5tO3O4&YOc|)SY@HLJD!~rRd#H5GA%89b7{iectb)Oh)&j& +ziJzhlM(i*fT{KU^36yt{x!|DmwRwV5TZJ<|N_jhAeWA}?KTa0~n?21-Rca<_B>18| +z3>R2&EjgO|G)t|ks+FF<-~}M3t1N&f$yUGe=vTS|Hv1rD3q@Z}b|(9kM{ra5U^3od7=VJ&W+s_EE`7^W3E`(RBq)ohJppl+8H9lA3gp{)yj;~yPa?|^V}v+ +zc}KH1sDWpvAG`1tKX+`GSYJyH3WTcvFZ~<+ZKSVFNihHBfB($`OTSX%PuuJ8?OhNy#dVo;zO^8aK89R +z-G#8j5ZOhj&cp2_Ww@g4KirHVQIW{@fe$;+_2xNRs&^IANGi=^*XC!7E2lu({keEW +z@{#%fPo9##J0z|pRs_D?RNNz!1LoSIO@U-=KcLF4udev3tL(*7zQ93yD|g$vjMCV| +zNpt<2&zO)Ma_CTHZCsKIqcc*$KJ4NMb^5h3y2K`z+palku@2-EXD7+DmIB+r|BZP= +z4qUXY^WwSdVc^-F2hN8OuJ~&`m%*e=E7-i5jR-WJymt#^pN76vWT%Zu#QbrBr&7O! +ziIEiVM*57+k+`t~kLlL5&V#j&LBm_OB{B%};}}zM%)5Q@9CNI$0pPIcqj$=HpS$OI +zE_eSwccJUG>UP75Z=dfxH*%RPx5T-yoIyOVtSI)M8+gVM9gmK36MF?^Z}C;>fs`}w+lXM);Eo7uWd6eFSJaA%LX8;-&m+} +zA`~GKxd4aheR|JC3=7h)W!60xGNLg@xOIWP$wjl7aNsF1l@S9y +z-5>Lk_|q=4nR2IRVU!1m*E}u{amVtYRZZBSTf_sG++&VzuPk_s38|wWgqbO}?+zbb +zEQo9$M%);03SPv*DH$cL9&;3?Ep#@jLyC)6uSBJH7DsmPa&@KUg%}T?VHqx0I~hfOtxL~8&>jvO>NV}n9sp{{8w7MD(yzVY+#VjzLvMB6I2c`^ +z6Z9;~@OZ53a6D|TcKR1_3#(}>TlquDS}b2*A*9-!exfFb`m;qylbjDl>Nzqu;aNyo +z^cq@kJ)3`V=U_QFdwPjm7D#|S;}A#7Q?s!uys^)0?~LacRfno2RikQ&f61p;yJW|H +zmh`vOI5=xPAIHQc#0-_OXG$NC99rV@aGYWB{5)w!tBc6}f`mFad_ag^!% +zaGe`$Sr_lKxLPduTyQmcF9r2m^`ek54xReN_Fli?hRz}@{S^uS=>vOODdDb=W@1tp +zDq-Lv0uAFx3h)=o_!QWiy#c%+etUaiNbjok>8?uFr**nQj-ykvTc1cMKi$!Bd1&De +zd1~lP-?c3~8msq5<9%g^7s4D}2R0a&m91{NCRCJ$UHQNSG}x!%B)olnp4-*@2WZ@C%#YRG4qNtQ9A%fi#auM;Gq;nm9+( +z@}9-tR$Rj5dau`3tPgF#O_;8u%(Qgi@h7c2+B#NCCH9uuauhskNK|BvA~aMUHrIu~ +z%JFeJjI`9D)EC?0E_%ygN)UmR`e}u$%YM-hs106AA*|-WQVKu*+eK1V+dim~Z6AXO +z$13Acn~oZFL>AJ6Mgt~?_c_3hQZ2OMHKz*DCMfAb*XD)NKxuj +z2;~G2k=tcdSEhoVb_NF{t_f>|>APTR +zWE1X;g+}s=#82f>7sfMod-nr8FLJ8eT?8u~uNx}xDFe +zqmOl$-Sb=zA~x&pJc5(U&qN=EOMa41d@gbhc6SqY=tOkX4}^X`1h;^nw%77iZw6vu +z{(b<;;G&XeMF;z-7Kq>!w1ZL+G>c8DNn=~$H#Tlm{OY)93 +zJJAtcTD?=M^s=gT%aZ8fuGy{C*POAWdO6m#7aMHIMqjh@q>87{ht2s!uMG(oOltLt +zjqr)dR%rp|0Vp&ud8-mboZW-ktP4{MOIWKTD`C+a^`D^6Jtu@X` +zLtQ=3n +zjr%RuktOhZfi46RR+5WeBzm)0*26nIq>y`^$kxBdD!(+$Q=Za7(LEs64J5uxGTxiy +zxg?`$?1Xr?De*j}g(50g(E+PAwAY7R5`Rl1bOYF07Wv*3ftg!l-g^2XRpA6=y&9>sc@l&muL<1iIZ<#jQbuE0Vk^?a|7 +z;)-U9uE5A6+D65q;Iej1%inYar%Z&CbL9d&yRU2!Imxd9M>Ld$iNKA8<57idB(JVf +zKaakm*9Htk!jnoI&v^z8MG$a9IiP~{#W*-LjYpB9J@0n3JQU77S0MhzU041!d(bn% +z;?46w$m!{*!$RMDY=xWPOJcjaP(ATmr8JWd=JUt1yRK>3y-yP%U-UdZoggqugT-nk +z*vm6)g{~!j+E~0^6R&37hW6iqOWQOwK@Vo4FkvaN4V+Qh6ef$)Vsqy>L}*bw#8lSVOy +zuW#giGh!1yqViHe*vn!Gzba{SBQK`D#-@PNgj~&#s(Ci?aN9Yc>dx$P94@;r&Ti#k +z-CP>#;k|Zi9X1$al?19HsggSCng(QT+;tYfoj|I^JKm0fi- +zarT8W8U0K%S8(5tv`JEj0J3F^8FAYU9|yQmshd78AK9#O3#7j&_jcd)i4&?iS>x^e +z)J#J*1lBng9g~8=B5pH;{E(SA?at?%q?vWP(qDHG-|O<@w$9|^>MpcK9?mu^$Xc_8+eC{CICL|}*L +z#dTU|VCUvhmSXKm9tor@sna!ylgqP)tXZ6cMhWQdF5Ma4(qDgU_Nkodzrd4afiq@2 +zd51L#DLVylcj*@Vk3JMS9Y8X}ZpK(06ox+HWE2BFZj^W9P{Vmz7%Ac#3k4jIFwxhr +zfd`qz^Iz6_`tU*Z;XoqxHu1ODiqp^Q@A>yHf9Nr(e!*EeCVbXG+@gJ`!{t%I42eG= +zs(X#^%e8kU_siCb5hq={tSh36Cr_TZYx`tF +z464bJdzIKj<`tt1u9A_|>F^Gu^4*etL$9hnX +z02Cn6h(_c@M^b*Jacq|-tjuZLV+a?V8DSW|;@$#A}k4aZ=G{Vgz +zY?rVV1X^LX{M;j<0`<|xJD5ngf_1h{ +zF;1)Ql_~*N-QjF@6SF%8I_cPsI}Wd6;cGmvIg8wu`8k_r>Oo$)QqNpno^r4oZP}Wv +zf0-KsT9Msg;=zFEM9}mi9!cFd-Y~gzy@PDgPctI46l@qz_Q!`mr;hYyk-cPa&6epY +z+dWYyR)vdeKyis)2EVgJKh@{^X~-_uikshQ!}) +zxi=UIZ=Gai>*m{J)yDMBQYIrtJ?hiiAc5XX_UAhO7nHh#`%rdV7FAm1_f|4{2N>F4Q?ul@e7GGOaI{= +zcz=oXVbbjSO9QiQAIcx~@mqxvD;(qbH{-I&-*GR*9gp$giBrx)GH* +zyh(f7fZGAA-mVn)1U`*aYt4n2e^EAdZR2uLtW6jy(L|B;p*9MXD>l6yscFO^oMa%K +z54==`8uo}yz}LwL+G`+i$|au=$>Hd1^5R}itSrd@YVB-@`MN&>XiLVkDeHcH(3x7% +zK(Vch7Gain5j8k_o|lC?aC+hA)YVk$UgFCKC&<60oMDI1=xiT2o|&&UuMXZ>Odk-~ +zwTAJ7A~8WQQfqIkKLU>u70bfoWE`J|f}H60q3elWUh)T1&7C5vJ7m1;D{zAEjbVU1 +zJ)gxZ&_S^b_1pqs1&`+*CKfNzqOFl;1Z?~hVl7WD9fW(!*Lmq%y`ZaN2)pu{N}?$q +zf1O8rIpCqk{D&?8LfB^KG1Pu|GOcIHmY%Xq`)d((C8(ol}EgiKA6w@xA#@W%&UEi@YY9RR)!x;PI$p%SRg)n +zIM9qZ$}Vqal8ca`xI~P$ROQl`_JjD^f$FvJkk&uyH9R(>Cp3d|TdHVXjr^pC$v)8xlr?Hmf+R`W49O-J +z6RK_CLqe3q*4<1lH-0*5{6i>@o=nh7gmKR9DysbC<3O`B0dwwpLOd5kVKj26Pzw{2 +zESr5NxSr6lR14k&dWdLkdQGj-5mO)qDE7px+scCiA334lMV?1)CKv+f(sTfBHqBd; +zw1&z1l+GK#e>O*65`4QNHq;cc_2`|#onW094?Lf$DuaO0yo71<$iN=bHR=~V8>_Zx +z3Sf#&T2-Yh)rp#I-A7*!dOhsws4v`pF^K>vz>F__|CDnX;DLQJjk9(eY|1Q+Rf8=x +z+f;lTrgQ;)2AWn8&MT>Arw+t2MO`8+EdSDXSZg)mv`j+yxOHUetlS5J?qLAvF-wyv +z(qQMD`;Uj5m^k)1q;&y>usT;v<7B%j!&t7nXp4V>^57NM>)XZQu8f{74mZu6Y05oK +zxJqxOxrd43#n6XCaz?&kV0;0GB6`|3{VpAvM +zFUd@qHfNPI0(q4lL^PPP$jvFij^4<;>eBmL<&vhff+Gg@Q&38J39&Cpy@Cr0))BN*IH8mu!frvPqeM4^JPJUsflhm2YU61`{(&yT0AE0G4ZP2chgp1I>{*8E3&li*|K=b#wFl`IBc?lQ^pl +zW??E9Z8>F!wBSCic&nrRj^uzzh(uP5swo?8B~(VXwfJ +zaU*W4n&2F2k1VV%P+DwPi6O+GtUNrg~jGi`Mz7CBFK8zgeyC^P6X{ +z4&m)>{q*+OhT$Ti+IutrbzX>xFYMN_ZXHQbCgGiU@Y +zcr%mL6L2NTCHZF?BKMC!eCIEjBwtpy6)gz#;Kj(Gfx4{Vm##%ZKV057gg0P=EVC{gVgkpFU9kj6NeP +zNfwDq&gnS?3(k7bS+%G0ly +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 +zv}bIurb(RB!CMxdqGL*u +zy%E=)X_A+BDYRdp|BY2(Pm=@u0QelTbc?Ds41oYMFN6eq%!*iw>=>8aF$kC|xR%QZ +zJ;1=O*rR)u);7r{>>Ek%UBP#v(uia!RVAI@MZC8wVPz!{X!VcKtY>Z!(?PM*7nO&n +zmZ;ISx2LIOx3DeuzjdHzBrgm0@HyvBRY#ZnWx9@J712S*_*NWZn>IZ)RIiA2nXP;k +z(%Rc1Yp8WXRVS@mW#B{omXu!Gf +zQQB|bwAh$1ZH+xGZk^wCiIvhuHrsv^;80O4jpvNBfNJV3t$Ld_hRU!vtD{aHRd!oB!*^cB){I$@Seeb%OxuoA1dY~(n7*k2m5J|E +zasn$St%qZKRNgH|zv{cvZU-t8Z+KMJeaeKKgk&jHH7^qWfFtKH2n8GkL@7VgwsqF%+pX9aV+2>xnsBrx+rP;Y8?}Uei2e91Srdv920+L^ARHn +z+)#R>kQIM%?dwIZ^>3tGusGT=FOEcD?A14J7tufPT}Se1%FpJ{Ouh4dhSrms3W`cw73GlkkZr#L`z +zUF&=eobMG;i&EK+n$N7*&Q=Ym6xs-j7g{9dRMPA1n<*A8h?egP)IjPEI}!%${%yiu +zE+io;!wI@ +zb!Q9zj?>At#KCIB3e5O$K-KF#9lehG~Uy&xmB26kJdluofahF8)Lw32Qi<`E@;A|N~1tm_8Y&e!x +z!sw@reB^Eej)4;r^0Mfff%Mk7%z4wDDM-YCOrj2%yOIHnis_DiqEohJZ}N^`)LS3= +zZA_=|J?)87x63}1d`#1QRLIU$&TK%?w9W}27)PRR0DCN*TTPh9dIkNc^=-6^YoDyk +z7B;8|GL;HJ`;}44>ncC;-j>o@B^6v~57xCPA@&>7=#tx~Ssc+xV(OF*WHU=*`k543 +zB~!RdZ`)Q`8>-S8KAYtt9?{h)YnI5j6d4k4443 +z_Uh^xKfoF??^r0iB3^gBDl1k~&ZMYnv7gM?3%*#T>xrjy>a|BN+VV-Cev6B_k@+$3 +zg{B{+{kKvbOP1XzU8FUM11cKGFYMV(ymih%OVcoc4$w1?(+8%>%31}&^xlnzmR+|( +zIvaPX{M04QM-(=~5=N2!xlTIzZ{mrF(N*%3WF*VhtQ(xdAG=Px^&pmc +zro`4Ji$`8{X@%3ce|gecL9JvV?)u87)2O)dWXQwfDb|L1nsLPocNHU4L3tG_-z=gH +zt*W(?ByXP3uhJ3dDsKHZKQV2Fm_=8PBX=oh09!z$zdbIWk%ZQ!?$_Oqk7d!!y{G?; +zu7LBuqxfr}$F%|_peMVCP@uL_gp*A#bt6Y4u^-mIWV#7OUI#b<9GB2g{R*k%7$=$g +zjeTk;Ahu-}Z9JP%FQ=8t>yqr%>DF2ypn?g$lYC4Bg|OmQPptw;WT`Fv2M-HVRnt7l +zJDbp93LPQQhDI)+!h*V${>q?1cq-Ojr^K}ZeY1I|c +zrm&nYCXn89eRXXsn$kK{47p(9duc!=%93dkaeTxp(6M;V#SRQiQ=Eg_)IK(}t%BcS +zSF)LD`|D`aU&o1ez3s1)roUd*{dMZSrzrdDhTkJnvK>rfOL93j=!{*dc|%ZvcD3>a +z12%zpgLP->m{>MF$kx`VDD>A_kkgz73dXOb?W(?oxW219Db{DCV3u;*xt;VrndgpY +zXb7kCn@OJ5wPm@azUqycli?ZS-3Lw6h`1nFOu|+KIFO->KcB&VjZtIt|<^@aK|bgaNRDGW1YB~yuPWpW~t*)fPUAkEbnV&a=N8CJrl +zC#IdMx~B{3vee}3?#|Ro60$O*W7@eo=2f{?PYROTa&uJm2@h1c>iyJq>76;!8Am)C +zkp?$9*AuASt@?+nz60YJ4N){<(D|bJZX=4f9&ub&r<#L4ZkSd~VOd)?E=W^bo-egi@7=#y}S#7_Wif|eop^6YNrZ!5KK1D;OE*^_}JFpr2gp$=t1JG_*O+7_!Ua4ooz|sp0!)5w2I`g8Q$s=@Ol*S{oN3TZ;opUdcc^Y~`p;@>wGUj(k3<7a +z4m62OnMl7(LOYR2OfPyZ;2P6omm@v&hWBJMA!?T#HTvG|`6jqoTm>XdZPWYfE3aA{ +zzTw}y-j>_S#jf&AAoY8xDmwAQ>^ +z%j>6C%coaYo~!V{3xH($SE&XBqJ4N2X=*~lpB!3RXGFHe(WbRQ&eE=Hmi7QV`&F3u +z=+oFqmRN1e8ANfd%*fa=fjzm=3w7P0cVzVhN)Azg$$MMkE$DDVJ`i}4hS2;*0i;z8 +zgmQK=XaCa=fq{J=**&KXaFjM*M=LDTN@jQEG?PdkWJ-RU0Ew( +zim>?PbGLEPt>I#$907?{#lX)3x)%C2>OQ?sm>8}?%YBjxAoG+aMPnRrG*ieuYrR}x!#V^uHPF;lTiU#p +zYB(^mel+Hx=vxY;kopMFYEtbkhse{Z(C)5P15p%DUg$z&ik9eydAn~KtBHIMKzAi0 +z33K_TwOWEQhL3cZa9SOf3-vV4+nwvxCMrZ;Ch1tzi%JmDFIwlq&fvI_BR7e2XyqU- +z$*C)L1l??R$v$m18a3vYDyb22M)QptA#+|CY|+j_XK__%NU$6}g;7p> +zX*Uj`h$1$<(?OTI!=MQV^EoM)DrgHQB-5_FU!u2IM<Oa<|@o?pCO*}!7dh^H_`F%$L;3;8IQp92vp|EeFpCN^|-1eQu +zfs@pkCLNKgJ>q2gA5b?ky)KH>t=*QskQgeJiMeKH?{)Cqi@aGPX$+VYeHj_i>M|cx +z`0v^`ZdiIPQ@krv=p?M%JvO(};3Z*V+2M0lgYz@)Ux5G!4!Lcurxc8UrbTE~B>P1z +zgS^$jr>JF!89lMXSWgPbRC{=FHP9C!Q>wHAEiG4J3d??4_$L;Ns%BNQ`BjK<>7+@s +z!p2I@iWIg2=>@a1ufT??Zg^Vsu-lR``H|?{6ts8E2m_Vr+tWu|!TSZF=926leKgKqf +z2H!nEBA!&~VPCpOHh>=q(qMnFzMy*Uy12k8BcArkwF#^%G~xn#Nvug(R#9Qp2uPfX +zQ{2HLc3Tk**X@8v#H8nui3(IE@=k0ys(jbhxbG$ry +zBDvHDs_dFHQSMZ>;?*1k8pde#u{kn9^W)bP%@r +zqhEd0nlMW~V8sSfXaK2aM$rLHBbb>E*bSl8xwb9FTfTM6uV +zeVbVrzTNBc_-7xy%`2sy{0S#99fjC^K$xNxNWUXS3ie+XuXD~`cjMlpk*k|zWBlET +zd(1on?C9Dh7?^Shj;X8$M}qppQZ!jp=ypiTq`i_H)B!b2x6mK9iY_NrbuOHSNRC7- +z5p>d)S+B_qn@G;cu#H4^RgcK5iOd)#4-+U0JD>0%T3A4K{YKXk|r^6*HM-f&(K0N+dZd*j%WRc&YWV6WE4z +zNym_I4$8!?Qj0vMbdLS{Ox;HsP8q=80=!bGYm0R2d+627vG7+W#wikzgeyvPu{T{_ +z#;RB)W~&%S%YJ2!h`4HzoM=w!05oYlp03H}tcD`K027nPf?2PhFmGrNmn +z+|<{Ac?UJd@v@foIjfoJ+~(oyRdkxI%}D{=dY6W221vRDX5U=~rk!^8-aww)j#l|) +zzbj}vIJINf2(Qn5>M7Sjfh(r8czZny{E7JWy|RXn3FZjYet>xh9Z#tt*%pZMwQZOK +zCbBS*fH_576TP>#p$B!umC;xJb22acP5 +zP+!-W-oe2|ZuP$mXoMJJlD3k_m=6uPO#0qmPjD1iVZ!RQB&DHigxJUh?S`!)8crAa +zN?g7T5zF`rHZ4{PT0g2mMv1GTAXk#xiyWb{aK3~pz@+G_&w@&B4nbDqL}hnHTsV-23Xu`eRwTxqRuTSPTc +zAlUy7i}4+*RlDOp?5r5OQ%&9^zwA6PPPG +zs~F>~3QA-lSX6Y^!uhQ7UL?Vd-)6bI7aF~>VdzSdJCZ}t?MZy2k#9Fd;*MpMK_anT$*W+Xi(5MTt2pa( +zKKsUEd(i&|3Rn@uM}!kalk4YK8j~+4%Wb7a~sp!EW(&<{V +z?P|b{b-sOrHfc-|BiLmjmkRfwbx5c|Y*=})QMV;T>>ckPl3JBVU=%YNkF?!bhX$ev +zbqPUqQ+6u5GN5!~QJ=+ihTmaXJE`gcjW0qcNgXShgp$(=eAT5^^diDeTm@10naZFx +zK#i(O_5fYM^EP)ej4OoMuzzrVRKpR8*s`&tR3|PP9FWEpyW3D-;5F-9)y8IafE56Y +zf>COuP0|Y1f#$-Pu1h*Bod*t1&8_>?=vm5KDF$|tRowzoRMEMGZhs_N=QfJC(gt&wO; +z8;nFXKF(mC;9ux7yIjPar4d8kj-jt;o!q^WDd8#KieU^r&G;z-gra1$G +zcgz{{`exsQK-fB!Sa?HL&db({LtWiPU7cMr$#)b@YnYTklzmq!g5IdqW{Tm9}2U*%9 +zeWe(r*2ai%fDoL#e4;k4>{;hM3?lKav{>vsspyt<@X6rB?AdFkurf5aNA)t_hpEuT +zeFDq^UQ1e5KLbRZBJd<_V&#tj&nHpr?zACZ&+3^+Y+8RWcrpTu8GE&k-0pl&){Bm- +z7Up*nraiDjx=E~-@(u}Kw#2F)8%zCZuy!U}*+b*KEM=d}A*h;(|{0 +z#NVb(eoPg%c;?toK*U#wK>aL@KL;0fe}BwP<+v2*QM)$H5C2=M3wWrF +zAbn5he7WnF71)f@MFo9>cx|(&X@cw9MRv2kom8}I%g+5M?mXXJrN#4a{wKrc#gnA_ +z=HFW;#I`+|>~G>Sa%+ZobvSGzjl^Z&eQ9x+!0m`JN!V4>@K5P<2o2I`0C&uIb{0C2xu!d +zo-B9E;GrDFC3#P7t+qqB>DUlwCu^F1rQO|j_AN=XT~Zg06ZSE-0v@YO{EB?2G!`EM +z;Wzm$KpFUv2i7;DdzK@(qeIsky3a8Ga5j`h?@|`8s@{4SubOR2Oy1o#THKh)Hg~C^ +zxM`XPT%PzSwS1#t>v+T4apD{cajVRiG)CY-Va!{KG?m0lVI3x_Q}O_-IPwH8_Vx`# +zK#A2&n{Re~C)bBVb$4}l%`5$O*WR^v6Sy>165@v@F-hl>lK7SUC<@G)G1}t9Qz6kv +zLvSkV0KQ!<&ZUWAtC*EF6p-2vPd_rL?cdQZt8j@&mnjpaXkFQyD!6^0nfoK8W#Soy +z;PpW-T^pu$E>|$jdbagwZB=cy0b*(}4L#u7?c!>(Cyuh+;l5;@;A|u#D9G7Lk?#Vc +zx>leb#?*5ox&y8RKz>V=Q(wk#@i2K0&$W_#NhEwJ&=63TqSQ0Mhj4!_!%p}NW*)=B +z1A;n2xU|J`<*Yv%8px19E->;O(#@ko1AI4M<9WZAvUMP0gB~1N8+OBy2QC1@#kEm! +z>4F$T+o!h_6!-9CG;JeH(;1T79TYa=xt9zBhFQkO=Iq`4;Tpp>KTBP!v~2;ku-+&P +zl!^l+BB-laO8hMq#cb)B4~a#R&^%?Bc2GoYeAk3CoI1xFU&gG1pPYgXDYt0y-lau= +z=aJYuwr)AJme$|whF=GjN!ba&MwIsu0f18t +zY&Q{Yr=fG@0AxF`2=C2<$qHsbAqN2nSf06PEMKpK>&Z5~qyI!xwSM&*-~Zlb(gWd% +zI&=-V%!tt*m;Iieu(A`{=FIfoE&A$B@bp%LuUJnbBxV!*?6d3ZMRoYu=a+9Tp3BY4 +zy4#HkSd(?SiWFZ+<$_I;MvFVOQ?eu0r~%zuR5tA8hycXadfHO8dvu?KRa@Rwi55v> +z?u+PxnOxY6e4`0O2tGe408prT*ID4-pbcr&=LZ@cRd#>N8oB2=ppN5gbUW-NwBF +z`4~7tYO-G +zSNFSrtla(P{wMqG#O!Q3OW-WVO{Fnx>-0V^6;|QSWMx&PirYr~{I)w2C)iEcdi`P} +z5~aGowwg@v^=%~Fd}7uffX2Yx88(!S0cJQ-F7-j9 +zFlCs?8uG1igMG2#>cvP@y_Z!O58OC-^I~=P$vuI5)CZq41|9rU`b<4=YzvdFXw*PW +z6|KWvir_0wGn|#yAaV|kO0vFMCxiGPvdg!egNSCqTlhnev>%w +ztRyKcs42wZC`vl^2=N;q*o@1WC~~VxMeql_674D9Y#gL4F$h~b*sHE6h?iGIBA4iZ +zyVG>@5<=`45m4vU2nsxZt|xyki)u5iV&dNy({NJnmY-ka=w^679FRv}kQP +zH0@QUN@J!x4s4LPcN$gGDtM8|5BTt{<+wu!8e6O)&BhcW$yvIxp*Bdao5b{+UJRt9 +zieplU?g>1l#5vLq!PeTDC`v_Jp*#`MyvT*UlwHQE_(T@7s%^c*FbyIU8}A-X%#r_x +z0n#>U8`cUm(;##ZnJDZsq*Im#CHDH;0CcahT!zFYvYcYHu(P0f#FbQFBHX*i5yefn +zT9ujQ^~7roVYPh>F>MgQXQY`0#~SPYH7tqIc?DKiAZ-4X2svQ&c?AEF3ip8!s-O +z$O$%JZ)x(e4WU=ka26seEgL=B0n;ID%2lXLLG2e@YLO~t?*T__STllyEx +zfqRX54!ECYXLof*;l#wj;%X9QWry@vu~iZw_*5N9sx(5^nLlEk26r^rTrUQT={&!g +zO^W)uM&o67QFP5QTntz?oKMv6N$@2mlLcR)j}|pl8W2}Wj60qkxYOsw2Dup~84Ybz +zdSX2>Q_J+OEc48;81mw|7litIdp}(| +zTuI_8S3WXi91(XVE53KZOY^?4xP7KCj2)&^+~vSwhZe!v(z!)ftcZgH2hppg;;tro +z;=50y@OS@Q5P>HYHOW9n>N*-S-9x +zu(tyVG1MGeoy4#okZ4cdDk7xUr5xu{R=zU{EZ^rcFU}+>V0B{xqsip&k +z&Jop%@x2lNn^`g-N<@Z1tmp)!>Gl*6%y1&$A*uUJ67=vQV+ +zBgbO3k!ZOp0RLr~r;Zq>J)V&S&z4^+-9x#UtS$3VBx@2-0+O`p*Cq_2Y23YR?UKu} +zDgw?Nn%#_XKDwfG8LsG8<6Tv}j3+V4SiR=6I97q5kZmHe1`%?Xp0@xOSZX$~NdvX0 +zV>3&0fVI#U8R$m3wU9bxXw#~yd$=12U&~akzW;;pQqoGgv!X+AXPW*C+ak&VVFVF( +zY-cW06F;bd<531vx@2vq50Fv<_jF+PoXBYyaEcwvdb4_!byhp5E{Be}xG8SA`H>|E +zyH)fa2a!(pOn=tw66S6a&%EzA!>U+G)c(X0R(XIBH5tXFA|ev*>AoB=M%_cR&8M3b +z(G?Q}gk#lN7Mtkt4+Pq94LrCuQEug21?q`)rh}{op6k_WjCzo{Q-L0S2U9xzxC|@;) +z`dA+Dw{{{_OY`?l$%F7Xj@rp_M{wCU>Pxo +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 +z`_)H8eqgRA4q;bDlyH3F`bj3-?66c2{=Ewch +zCYo(q%{eSi=pfhPS=;MBEIL44?nQ*1v{@YVayS~(J@#MkZCog(;lSe`4e1nR_ZcX( +zWN>^>K#~@YP5b#J2X%V*GYx$Fe3XTVZ-JhE_>TNGZOS2C2BD;{KQpS}NggAxmZI!Q +z^D0wPO+N==no+MVKeI{jG=>&)qM8;+JeF?BgPb&+2gE{g={7_)XP-2u4fta{2HqenZ-V +zIsC!mw{Kd;On+=HEi`ev=4JdTOnV=DAN5ens``$p19{+W+RFz00jsz5XFln}0bcW9 +z*KW%C6R7q4hu`8SzYlVjM*7Raj~Qj`V^PTXuX^h@{Isk-L7tK~J@!MM-3wzG8YBTW +z7T_%}Ig#65+QxA*XpcoGCM&+PbC4*w? +zHSRkT_l@GdQ%PT&H12Yh_Lu$3HvMC1{}{>B?y?`W{NOH&et3$$-&J2*^^etkgQow9 +zcJD4b<4vrH_G$dyhwlV~lhNmy)B7i2EtkbwvV!^Tg=|?#B)EQh#hT{* +zx-{AIvxXpT7aT_XHn8vo>VW9y%5#W(P#Bk`K|W_)`WXgw2An{(b%^K(n6 +zOXz^6IsNTVUdHTx$Aom73P3)ylV~{}II2wDRf +z1}PixlCHYbnA6uhd^LMgCpn2}49CD-B*{hu6ikG_JnakmrZ+EC;(GYI&%f`XkpM3~ +z+tS`}DA==YJ$RQ2mW*}aBr)mkBbWzQ#Cv}5NPIqf$@A)weZ8r+u{EVfwYfj`>N3rd +z5&*^`WpyX}+i)VvPiZxHped&x7N7q^`{mQ~$-XwILM +zZ@jsA$`78Id|{Hb +z7Re|?o&iV&v#d0Qq);$ky*N8eYK+tk2 +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 +zFJ75+OrN+82zDkePkO4S&APIZ|MZXk*&qGm +zKlnh{*V8=fA$ZeN3Xj7?w|gHV*M!mmw*5C|NIaC(f{M0{R95wl4KmMz~efrb? +z;7|W2fAUZM^nduL|KXqhPyggUM}vR#r~f`R_^1Es@0|Yl@BQ&V{Nw+{AOFw(_@`1uBx_WYahQ-p?&01x0YxUd*=_y2Bt~ChNZvKs$}9zvzY@UYrYqpj +zXtn4DSuXC(F1S-Y{<{)ZvUo9Rl0(OSj8w_!K8(%94r%njKuhYO4Fxw73Fvh6#<6ZB%;S8FOaPwJ9JbnJP6tueEbDSFxdcpcY!sUGjy5fTh3q#%Bww=PWx2{a +z5QUqE_1Xt0pfoDZx +z8o=tT805!(3in#D{27KIz&j7>f|?MAaX50-tVV`yBPkya#X-YnX2fg=*xSVa5WWGv +zTr#WT&huyPM&nYX&|(Wq5`uLCr<;zQ&6BKgjiCye#JiZ94uJ4{_ubLTRYfAscuw>| +zV?bYBCHEHN&)nZHp`}KM6!IBW8OBD2eMNG;X^yi7-y53A_477K3alSm1@IDXW`_eY +zgE4L8eG+<76s?0i)l5?cewH1H53$XO1P3gPLzP+-v=F!&7-! +zbm;Kj_v*Us)@+A$$neA%Uw+-H$cGghC^bR{W&yT4jfPF&lv<^umv_;&MB4d5T@F3# +zpiaIX8AR2^(7=Im&;-*`H_Di=!m`Yr!!+PXnoYB*?Et|;(LSs=U$u_2D;9;RQw6-* +zkQ{thhJ)YRz^#;t!A60Nk!?HIv;~s2{$4#TQg-|B0BTw8|&}gq$_KLlE=`OCl +z$B9N0bJHZiVg<{IZw8j2+@u06@~!F%n4H`k*h?A({7~=6&uLwggH&L#qk?Ee<7kxE +zmLz_=fCScMFy2sKd7Gf=!W@j5{hEeOv$bSR?VoAs$l^qaikSAcn7rd{j&53xx8E|k6|k7*UH^cUf +z%Z*>rKP&xq*oFt6h8?P|X}qrP)0OwLj2z&`<$%v^+*ck3FQStjDG~u7jr3r)PO#F} +zX`Q*M0~RDxW;t1gi{9O6=$sqV5Bwm*Fz6{@vzPXnqDyXEHgweeOleQ_KxVr*Jxv*nqmo98@JgOslWe9jz3x +zNsWcfRV-i$B^&atxZ6%P%t^dh$Z?9`wL*T5PFPyB)QC@QO?3=`V{P*TfHp2ANQE6y +z%o)yyf-sDjb39rFtE@C_&}_pA4e0e#y+O@IZ1Cp{rmP9_oYhTcLjAHVTN0Pc%WNo` +z%&Z>(uc!g*S)HO#F$JS~~h4{bif8$Nxz6IMVD1oIZmOJS$%MZwO*W)>zj6{@&vk)p?g3%oxTfX3+A +zr6|dgP(s8m@<{J;_8Z!%NC3;WKuyoF!ww)xn@4y^(3>OZ8=MQ1@ycu$MB~PFCVWO~ +z`}#TmI4!2>K=8U#jQBdkpS{JE9q25kc^y+X +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 +zgXbDEC=GtS9rU{0`=xI1TsL^o5IaRVQOQ +zk9lw|!u(9HqIxa=MI;6p2iG{oSmv`(x^p_7iUuKl16jSFj5!IbrXs0@NL$oY)3LmE +zu_Xiql^rkMXFVOUgH7_5&F0cbkEUTO;l#DX_gsgSmXG`FH-;{t@2z_)(=+eWy|GbO +z?aP5Zx+e1%0wk`;eHvt;q8c1d_#+}(&PZ=H-SHE +zlNemMo33+n`PMpZRZV~Kp1PKt-`j*lJ09pv8d*5e^LyOM*L@~8fQGn)aq7bTE`8v^ +zqlq|W^J`zPd2%k_EQ>_u!Dhp|&;)DD6PwRlAft9!KQP?z*2vMxhnEU$q-C@fN&LcX +z@r-=kH?n&5!Py}hB2L@O_dKoF*)7^3TfxS-c)w+DtPx#0Ym~<3fi+6s>*3p+-zPS4 +z=4os%H&BgA{y>Y3X&Z%jx^UMr+z&jQZY`3+#rst=+smDSJV8uy?C?QlAf?@WU)i8Y +zItySlYc@&JKK$IEh6LvhnJ0U8_^f?NBJ^gqQ$dQeW~BGYN8Z`knzhw?%fW5dkZjgf +z>l;Thq^YE53xt0YuRN?E#sy&EaiVE{h`}C|iG3cHN9~2>9aj;rJFdDPzld1faRnIO +z^SbW5F1*l=Sm0sZs9W)1jed_9{9$?YJ=JLDt5JXI(fjMs_co*7Bf(%;9{nB(2ZJ)x +zhx&9Vf8X@0AtNRdiCKs?Ykscj~g8gkl4MSnxD5ZajU%{ +zY5t;Ndn4%r+MP0HX(91U#5NDLWiqc1tIFv7Q|}9Q1h_E7bWo?j2Z|m#tcdqnXC}^& +zVgYJws+gag^7Kpwcu*HlwTus5Lq&Gu(bmQ7Gtb5hp@F_8Ns1Rz?%Hw-cOlw2Y8yGX +zL;L0;Z0Vu-C~Q{U9U}Hl5nf>EPt%*Q!^Zn{`tHcAOAqz?#Fn3uk+{Xg>=cPny-~CA +zNPTw#IBg^LC}<|@5D*(F%#a_nRX +z$0lcvnRXCsS5T~watnKBR-0|tCTtVsTVS0@SS?#|+T=P7_Be^%oBHGwS*LYU&N$Yi +zcM~Cgc$egYhi^44aSm5jjy|$j=v=K!uVZPRo*?-~?DCs(&%Th*yvY}(>w?qoXsNd~ +z2$(%>aMyvfj@n2yOIvWUp*dv<3G>uf7_RJ45K&4iUJkk05XaeU+S=t`fhCZ5xjI$3 +z_XIqD9y|l|cNq&jnl^wOP#rw6*A9sjOmu5@$hLt~0SjuMBrY-g +zXb=&|(_<|H^x+#}duwHJUVAZkEL{OLuxr928I%XBiz9u7m{Mn$i9wn+fRw`F&jCwL-Jh +zbWsFkOc`B#baO1WK(FhJ=XTL@nhQMMijm_)r;g@(IT3HH_Bmpf1JjsIY8&rH!_Xo* +z0ROG9Q;;Q_s3kut0b}$6c7oFOI~I6oT*aDPNDiBm?-WCuE~fX`8v|z%4y)?w6_LGl +zr+y{n9$F+i)c4Ju)U;dl#hDyVBVVYuB%e##l@F58*Hgou26~TNqCmbg&iM-V){JB& +z0gKtM4^_dR%?WYh!xeI2*sRS7DxP!udr1c@Qg_ZbSL&-yr^vkBbv9p$m*?x<|GPjYeC*KZw$$!!iP&5(UdV`vPe0-e0iimm>Md497iHUnf1ruyI-xo)V>9B#)%<1=+;mNoCPaeF +zTGx<8==1Boo}m8cE|`yn@G}AXYYNn30s5O3h|dJzHwm;~Q-FOyVD;$7V7Gshf~>5~ +zg`OJ3n#5{#=WVPj_l_NM!lO!p{f-Vz+tNxmZ4-!X{S;MQ&~G+jE{kKX&Od3XWN*I> +zG3wi*+^<;w4wv&&W+LDWDM?$Ko-m@6B|w_*8fH7GgLDNhFVO9bQyJi{%0TjlW^bLm +zEVc;;2@^R>h*e&%FN@G`KOo*#hRb)+ocSLOMU>YQ2Dk)X5QrZbytjR8MdvYMepl(* +zP1oS~yX3U(odk~bk14*118_m>9&W@p7uwFdyR&Vrk2Qe@g*7iD|7<8C)*b6dS$>Rm +zhB}w5llF(WaAtipX|#=M45~CM*9&^b{PCRjOFQ+My-X<1>OcX`z7nzt71K97Uji~ewtgkN2m`7DOkQ;%d%SD%<}41W;bc?OspP1 +zHLcULV7(|~Wd8C?h3j`D6uLr>j1Gpw +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 +z9k%HDm7IMlow`2KRW +z-ZsXrq!-t8im+~ZFsfJ;#B=0n1P}{5TInkQ)(wB`#VsA);nBIgfUrWS5j&y<93M29 +zwx-!er6Kl16@N*V^)I~9bEc_m-R<-1NlhYYE%{`M!jTuc#bP5uFa#;*3x7;ZCB(Ryu!mp6%p;Kb=>)5`~3FV +zWWGOaRyl(leH0O|Fk#Hf@LnaZC|aD=Tr<0{Mv}C_UVQ%I#qd<)Oi{%4N84lA7Pi@o +z#WT^|ZJ9`Gx*^;QXlGr6K~Zf@@bbIMpV&LsPbWylnZ&6|gVtD=dR8%~6q1K-p4}qB +zmSDWi;$(2BT7|$34ozqXF6j_x41)U*vgOTx}C=fQPH!@$~6L8I+k- +zZdp#REOHQWP<|k(BHad5(jWec1&*yu8V{bDt4Kem0ZWmE>|wO1(ay+XV33f6Zur5Zffm_cdq>+PV|?cOhSgXg-z +zJ9qt5xB-q`|6@h&%hc|w?V}7|~{^IT!h`OJ_4^kW? +ztm6*J$GLztVy1H^lntNkDUJOy$|1MHbFy@OlvyYXqvX+m)q)>+v=Cw +z>YLbBA-0uO54^aZh~N4^&#BtT7pz@tckpRjm+O*?4PvhD5$e&F|6iyprXnd%1pv#` +B__+W8 literal 0 HcmV?d00001 @@ -52125,15835 +52344,15472 @@ new file mode 100644 +elemHideEmulation.apply(elemHidingEmulatedPatterns); diff --git a/components/resources/adblocking/exceptionrules.txt.gz b/components/resources/adblocking/exceptionrules.txt.gz new file mode 100644 -index 0000000000000000000000000000000000000000..bd320aa3cbc5ed7736ad0c00ac9cac34cd6da341 +index 0000000000000000000000000000000000000000..dcfd516a6bbd13dcdcc7409240d9ca0b322e5270 GIT binary patch -literal 844912 -zcmY(pQ*bU?w5=Q4PG)S)*v^b?+qP}nwr$(CZQJ;Rv(7%ZcGZ0v)xO?a>ks2;fFKGA -zim!aj7zotF-N?k=*}~4&(Z$-tiO$*G8R)vlD(Sf0gZ#6{Z)E*ZSJsZPs?JGa7}v}A -zqm@sy?r+@?AHp1%cwk03DKwj)sj8}R_MUI<*$8ZWh6-=uYU5uo=HgsQe^MwA_q#T~ -zuUa}Sy_>%Gyc^tJ_co6wxjNswDE{3IOM=teGQF?3pSY?U`o5p5H$T%~HTSRQr`x`e -zi)TFB4{mOVGeDm2!|hDhn_aIj;Nd3iZZH4WZfAM(KdQ6!d4$<>r^6rPWDf}lsX%ni -z*0%qCjr!f}*mWuW?z(;ZYE?HHj?}sei=M^ZTSIq -z-2D13onG4XeB6Iu(g>>R`sn!6|MCvU$uI`XGY_k-fVKswP%2%Iv$Q*b!&GC -zvUz2F?N?0K;r-UV0k1oLxxL@-2UT%ccd*^4R;aq)3k2VSH&q=?-_Dq)jvqJVU2SD{ -zeh+11M{~cQ1U~@1&)+wC*RV@J@3%F-$ELjR7dQUjlZUP&`aZxNKj0SgR}P@|`}Dnc -zeWP~Q$M(AP{KWs$bTFf5?e~F5@cUyHR#*9}8q5DH!X9_RkNa~e*Jk=_Hby`6``J{N -zb@Y6)cSG>m_X)5YWcSm^Y~v?ryYqdRnUj6}k=x_w9ZVl{dozVf+OWk3;VWdW{l&<-$xIr#TU};lQ^z>o&KUTRu`7F;&-Bgg -zN;S%+(7K6Tz2%M`aAnriy3oyY`@t&hu!!~D9?PY;JE^-Gl5g>?EipNrIBFRfJzYp$ -zF^{dmd)XZg8&Fo&Y}rGojp++wHEP+~uhy?9DQim7;O}}FvSpR-K3hJtx%t8(xPXt- -z$gX3(Y1W!4W-?me+?{cFT{6Gd@Aa*Pvi-A`cS0jW5bL^3@rDtP^y;7SE>UW8(~JW% -z^hkV-5fP#!3B7g`HB#+mUHN-g!b3aL?!rT=_;E!(cG%{4B{NC -zxDdN$prRlkve{#~P~6D0+>1uor@cY0y3oWm<-aI;{Y>r2s%)=@Tx<3J-o-!C7X};P -z9c2}zkdx3hnRdMYydd*^_ucwjy!_bEKNQ04ethDP32R@g{iC^6a%Qg{nNN1qY^PTS7Gxe4~F!JJaYw>lo^>#tU*8Avl<(aif -z(5t!kNwm|!u7vKFEcej#w$<@V{^N;tbbH&w_%Nn_`0qvx^Ev3v=o48|=c=COD6V2n -zYUx1f>){>COB3+^dewbOP_=qEoY_08vogDXwE2Fc^mb45lRoDAc(*$?qzUgJ6$fDQ -zooQe`Y7`$6G;@_!;*kX?_~9jZ&Q>wD}HuBo76K#1P<| -z;$P{*e!;t(_+iAO7{dYIyIdI>eAIPDp`nedM($G{h*dBSb~q9saHWW-a60 -z2li)O^W~>W&s>$EAY{l^%-)=&76^=VU6nO>CcjO}`aEKk9f0eX^BuN$<0_eK9)g3S -z3b42W>*y~dTqEUvL{56MnSatB?ZqKBGlX^W%>?jzA#r#e>U -zX4jWM8#U>o)-yVt1x@&zxHf}Z8}&dX3D8WdRR+_^;5}9M$i0LjuC43H=DpYaC+2#u -z&vvh|vi-OMb1MJ?e#%n)`}k`Hcu1rH<1Da$A}=-bA8bZ=5b;`Vq^R|U3x8gTEO1TlJ& -zZ2&f-xY_+*{|b(ZquEV1us5`Ao_&wfl0VzfJzB1B*sjV*UV2R@K9B#ylWVfD(7 -z_!@X9Va`m2gyUHd1ZgYn?cn -zhf)x7j#_zea_D9f`v{v{;wsdBaG)h1B%sEkEbjVHtrAruyVm_gNkk5%?Ese=9&v@y -zIG}<~G5NT0*&pGMNl_vV*6=M -zTW!otAi9_ts2kK$JO)QIv>}w!fe<5^$6%8v2LyY^LsAdie(3&j$Z2Gs1L{t5FR?)$Tny}mbX#C3vC?zO(P$0j -z22nk#<8;(Yz9B!VWFVzmEk>UJ^!zYq5p_Es8CTedBEoj+QZ&}uhC^RGD%|=yQXq9+ -zmtjS3tjI`+sxzFIksBCUO@EDzB1tqKhW$a3Y@ve_k#VLnqH4|(vWxr&2Ypg+Bjmf) -zHerYDJqI7uEG?$Bpui$Bpm}n7b3k3pgIPT`1(a%sd~*xU2ReNt~RQYO~%{ -z+5dp;?@wEfu4^NbuiYkg3n{OG<{o8_fjoPzqiao~MgXm^rjl^Nrn!zegRza!!9JTk -z^K6LWHi+#!#kS8Tutu`@J@?B@Ind*U6Tg3x%#yxRC`w3Dz4$ZReJ42*B42Sp;eiXx -ziqI0gv*H!YW&Dmt19<|8Ofd^sf|8bL$?_OXa+Jt$2F3z^Y>t9%Sq}`abKu((r#V2N -z9=sS`AH7q~fBVCS5CXAyHvAEiDJWOX{Y%3BZ+Uk5h8QydNGBfZ3zSCQz~nLkWa(BZ -z(2_yxUCs)FV><(sFrthqDIf{ELV4ZRg~PY8ivx1_Z@kdTcT)2xHZD0HC9(PVM;z_h;Jo!Hc)i#GEeRQh*aT~WKTe`pNH6o$4Hce^<)fR2)AX)5&VgqzJ -zrF4{xAe+OLK|Vla{dw`PewpBTZD=R4@oXY6{%{+)uKQs^Cy+b71={P$94C`7Vq-eI -z5c_b^Oo-{8QmKN#3gnJJMD#v+3{T?JF04g64|Llw<8JRS0#0rgR*Q{ -z>oO6&Er`7=He7bbX<(mB+#<=wk^{&vqZ~?TAOfeQtcx7&7QWKgWERK_aZJsr;&=LO -zrU%6$_Zozt1ia8XpA1vX?T#oA42*u0xB3XB$l5>U*Ec)?Np{hW^$|#srGlq}CzTPb -zXfZSHjIm-VbAtEq>E#OM6r~yV)98JI;_021sV{g{#*U43i~8{j0^R -zQTaXgf+m)Dw*<9GO(zQxQ-2*Gw1AQKISp!(IYG|s;q3OhPngK?Ru;%g6T+jsD-Lt@ -zsbS_OXPY5-csI&@j(KIdNX-*2`o*u6|KO;d*N@VYmKXR_M$1@eewz~$5+jK#Q2(6) -zIv3Lcs&9X^h=?K0qMA#bi%H4>EypcK$!9_3{5ooQUPs6G-=6{M$A&i-S>)sO$KjWc -z_rOY_38ED3aPZF#&{3NV5;_^el^!)AJV*`+xOzyC2s)M;HMW>T;h;lm(DHifK!nsR3|k9B4yCwIS(QGsyc^DbOgu?z*h!SoA_+U&h_F3 -zKut`!kDG^~tGEElQA(pg&~BxJm`S`wvcL7(KM00Q2cvUZ)WUr0`GI^7{uPN#q|~t5 -zh`aR^T{VA1tf#3cub>`{w}1lJ9Y~RE>S1LgJc4{e;dnB@f{}?5h}20^u=6Qsg-T6{ -zJ%F-Md8sNu@bC%U@G1As>3ED&=z3wSQDv-`7K1+RAS?=P~3VDo_qoRXsD$YR>BCD*n86IXL -zH|p!-yyckX_Rl8b@qn1)WLqY=d%(N3I!0g0cN -z77t&)kOXi>z)8{Lx -z5qeuNw+PpDW45zjA1-JnOAhYoBa7WxGNrI2JX6$C>sC@=kGBDRDOfaCxEg=R97(Pm -zIb1Y?Wc;&MH3yed(AAa63}<9Cv_fSZ>?=?Kn_3yBUW;_Pf8fdcvsP&nHr_1SKig0Ny?=M9t)a -zcqvu6vSxLajQiFpP3l-^X{7kKIF4gja(Wu>1^?bl3h-Hkx>Qx -zJ4Y#oz+cn|DLd3!7&G+9B9NNSRXc&~2)nXK<>U7;gJ`cc`GMgeM}qxm)%tbq*16Qf -zFM$ask1}S&_b!Nny&@`I*fGibQb)^0EVoob_ue-toga|dC@JC2oeC(oy(_GQ@_WDO=gmx*VJJ8m*$0AowlF{PA777X5trV6c -zT&S;|j{fn9i?)l$owKWo6^QOaLC)s>a-n2XLLohnT$8xK?!=QyUsjhd!cMRqRfIvcW>#!O7TOI) -z3YhtWdn;X!hOI86%Shz=07`)wE$%}u&}x^zMnZfJuvGFwZc!m`WR3R)i(VtFo#Um- -zl5W=``-*0MS3MSTAI-(rm3eh9-aMjT?NWK^`MS`8lQfMfAtM1QE$6y}?=G2>(OZ(Y8yi8KG!JQ?nT -zx~DH#p60d%`*2m>%#2B%FX!Olo-bmB1H=W}2=zJ0DH$)IN{ArPdHKMbhlBh*ifmYR -zGW?r#@PE3VZ>OLeFHP2~3)vX&J_@-gReKgtWs>0b22=IbHW#_%o4aU!E+Z_n5&;k$ -zMQ0z%N66pwqq@mYl4qXdl{BLgXeXx9NCMwIN>5A`>-&L{uN7(h_Z}{dMexggFI~q* -z;-~46s{)6sMk;J2oJ;Zdr#1Mn3U&XAm1kUyYliJZxxGMHN-KT&BX6XhyCnBq%YdEi -zmMRf_`^n>AF*C7+_C45*JK`&8#7zJpB}D&Pddeo~5-v>+2a8$&sH}VR+v3cDDIG!o -z;3gNWcQ67`ux@-I;Ju$(2YnX -z36aGs)q=f)i_N*@x`FDsF5gTXA71{*#Puc5SUj&l^c1iyA5!4b3bI9w!QkAZ})zgheJNWS==|_so*_#Qj7^1)E3j -z9^8r&(I>naA8k>uR&Vr2)?NT~;nu?%doZKM??8DL)7_FCA~lhLF`M;po)lEsf@)Ee4qf6#hk -z^RdD-GY@CGJu)Bk$kQVEHfX90QWvWoZ&~K)$ebsc#74T|3wtZ(PON2luqSF1ZM3Wb -zMp(fynPpEGsjg@oW5RG*aJm-7m!y~`7DbR&>KNlBUHpa@x+?)*vPbwRE=R5Ga!~@dX?;gUrZU1MThS>dIbn^dD -z*4z7x*Viep@6&(5alf@*aaoSr&GED+{(GPtAG0&Imz#HbvJJJd$LKFI8y^y(nXbem -z`=N*TuBbTHHRVEmzo4D#a7#NzYfNtd^AVR1gkiU8*xWfK9CXA9mZm5eb(g)WUItbs -z>W#(bT32Oxg>butlNT{FCw?B=*4mFD%eR}YU!K>!UfJ3QOHpkP_5`ec?c -zWcHKc?2dnnX3UICS>jUi5_|5O?%vxt73lqL?#?Yf(UZP)xFrb515zA)?4XZ$`6Uoi9KPvrXYR}af9qUv&E1Q}iQu7hR%N~%SLxt~A$6iUScy^(`) -zhXBIt3F?}2+xE(eN`jPNh&sSNYZ68HUw|j<%(B)&A4ZmFh^N_|M}Q{p((1N>IM^lw -zx0k~5KL3Jej@q#AudA65J%>(>X|a#?fY}LMsQc6MJ}{N^lE0-Td&yknF@iWSlBGgc -zu_7+Cefz5ILgFG;W(;1wNbSY(S?1ZpKtD_+ExsJdsVM8*@0}!daP#X3mA+DtIqsDK -zB-={N)vDZl5vcMtT^@M+vtcu;>4^taKTcM7A!y|EiQ4u#A1sld`Dd$I^=Kax{kVk2?gHNGUdC2{{S0_I9Rd+S -zvV?4RKfD;ugQx8sW-lby0$pH?5|>k*mKbIOk9NjRGN-)As`I(T(;G2X|M(aEigyDH-4h3p2PCzt8=fc6JY}D2>21$Z%y4%`w+}`(queP15)NXI#+aDOaeH8n5 -z-kvh)Ut=BRzCFRlJ!pvQv>B+fCn!|V4RGLJ3Jj1ftTBHs%F{fz=xFQ -z*8L4FPrCp1)8!y8YbPAuE+$lTlmrFO*x|a2Y`w7S&-sq+)nNdi7}q|Ggrmi)5X;WC -z0$PmW+71rR9i9B+4y-r;p`K@HODEQ_RGj~#D6idgc>8BzWzP=)NPzhQV)z#H^!v@z -zt$Dt7n}b($W5?3_K+&B`yZ6-fJNW={pTq3;@`ZMvv)bp?1HID-c=LwtK7;E% -zOG|e8zZGQnxw-!seD@hfy4(>je*6-B|vik(%UdLK?CbiG& -z2jMGPx?5NZP{D$E;wb>lo#HqQ^2f! -ze{p)=pY3Rr;G8tPzfZ>E>~_1qFL$!)c6&X3e|Fyd>@Ajin{D?9-ysIrp?=cB_6g2B -z+FTc}L)2V<2pGG0*>h!tUNRnn>So++EIw9(a_3rE$__o<`Y7c3n`XaIw`NxA*WARU -zO0eG+Alf_JN4_W3Sr8Y#OfCb@j|T122@2sqIt(5?H!;nRe+F=+yYt>3H2!qkVec9QeMF)_%hhqtxX}1gc+Za>s{6MssOF=~b>?E2;ewK~7RJfuxWCdI-KctgRF -zaf>Ive!G^*ZL2xI+*BzEn$_}qdhOu|t|1P*MRko(&+apU9We16c)SmqxDUD94~ZBL -zKlMjM$uT@Wxcp)rPAqNg`8}-u`jfX-}ja7ul(*9|*_29onBsgam -zJ#@*?{Q!qR1Wj-S9lh0~hXE;#GZYAET2 -zB`T(wW5F*qC?^%%Z+7_ke8nOx#dbYLKIn}*yz}kL>irGEw4YZ{gt{b_msM{Q1fknp -zkuB@#IQRA0TRHl^52_&J`1)yaXS@AUU_XQ@_?7B;fXe0i>TuWn+3J2do4E%)ncth7 -z^81_PJq%{`+kYKDcHfPbi$8~m5IZJQn%Z1ByEmp6QtUpRYu5VgGh5VvQPxE}wP@tc -zk|l586;`W?$aZKxG+$$>Cl2xiXnVtTV6FNqfFPc7-|6E;@O^VT#L0`R<6N28Kgg7q@c*w?`19{4GjC~52Cz*pddi=5~GiE$@ -z2VeS#TWAPfe!bDOz6TMp^|c9)R~T(N^n^rfL!J=M5~=l1=>0#`5Cj{aPeW$>Thrs; -zQhnzx$c(1I;`C5CzPXW6PM;fsGT2qj)uJi$png1O9;S6bMa(jEk^{y{4R-;aqlt=FWX>mQvAGG8c3ie4 -z&=6HDrNwL`;h`CHN{OKNDSM1Zw -z4yMJ7$FJE3{3e8v66JYsNn&)9$d3){jHCr&_8il>Q`^M;5HR+0dD9+>d3reAJ_axX -zu1in4d47Lx -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 -zjZuEVIpdi^P$YkgX~Lu**gV^V57- -z4rPxN>!HHi*#Hx>TtTR;_6^!p;S1^SwU%Nan1($g%bc(8&zUD$n6KApPgZadVZqV= -zJ=C(H(L!pLiW5C=X0%kK(E_WhcNSlh4pZzlff^z=*V!cQwXDG&7uwd!1k5F7K2>CL -zbx=(A%p#z7B%zN^{N8y#yPB0%Bj$TM7VRHMPGxqj1nFl3-)>a+>lpW`SAB0t3E&yA -z3WV$Q>go{s_FtN`hMbV){2fA;W=V;fQEslD-Mm^Rov$yjicXL=15bJ+>)Ba5Kwkw_R_mPKNmz4^DeOC{`-{sTi`)sUxRqlnls5N-&_;3Mjv^S$puac~x}h9C_M|5vm$ -zF1vBE9eGRcsy(^_8zhRtlb}l4O+fAF+>UXNv^6&LC{q`SC!m(pi^)0j=O%gauJbQ-w5iqBwCP3QEEqvk$i# -zxw){UbQ2M}&H!l3GPTHvj)4&e -zZ~@BERozgF9dXZ2pYNpiUJ2(6{~s_<<$JIQ)%qfRy6x|hymsy&!4 -z8!#iP)BGA4JdcEeH_@bY#l*5WPSn9dF;T1|&Eio6c^Tm@5GG*rq@wVgv-Oo4!g1Jz -zt%uuxeU!Z@nF)&`alqtA9ZB(k-vzFEj&v!uOA}OD`MTo>L7O3FS8$1p%l;*E({czG -zTCyMAg?hCViB^X@$PV}CuZsq-nvxA+%0=jbv;`|ky2Mgi{=2-EL54NN)EE>`vo|A5 -znLHLlBa#!=6^c;a7YAX_uy>2m>RK0)u!; -zZVmFmW4HTW#Vy3=RXs?TkTq!|cQ-PW3r)NVRoVwrDafwJBa@5rQ5mE*DeiED6VKP8 -zQ~N6#WvDV(mMZGAxW3=?e6??l!X)4Jx_$mU{JY%iEDq4<#8UKKc(NFMP*52d0XMvV -zqYepxQ?sQR=TU8y+SA+%{EePO4`^HcaLmP@TdX^1bk*Y!U+ -z-3Gt*m|r5qTr~`Ec7HHaw?(=O|MV<-{%K`KFNQLpPY+)W{x|Ds=Z3ekHpp~G39`Sa -zE0?zz(XsRc>_{sIrDamg{_v9AndY}}v6LSdxDM?S0n8w)3@$Y1t -zvP^Ecdhtf)#8AHjS#7i0ZAizm6O$74YWWYzsfN6_P1pqc_jEF@h35d>qc|yaJpWEn -z;?+9pBr1Bttl9;eKmjF^8|MnC26mycJyB&ZFtpDb6}-3lESDCF{#a={AG5+{DhvBA -zTtI-eyyT7ow|K*`adQiLZ}F}?+<;?yYowBkuuCFW{;cQ5W&k8d29A+z2c&kf1wq*| -z+6o17m}|D-wUlll=QIVFGJxxyH9?rG9bl^6i0w2d3LUbMK&MWo;IK7KqYT<$N -zK}dr0QmrRPWARezoF_Hx^@{D%JoRU`RK68) -zJSvAP*%Qf=+0&GgEjNHJb$sq>U2Ci-widX|WR`7BHMnl%M}oJe>@RODMBmWo57~Z4!sfdH=pa3Eg|T -zJaUH3EzClcRe4HkCS+^YRzC|rPo4T8cHUtUQGC@=34#Yv35Gk=krt58GQPB=-Pa>Y;Ucfu2Xz)SvM3;HEdOe+B6?+Sn>uH4Li>#Dp_+vfrha(D%P>3*^z@Y#%7h456k9M;q`1aQi4J0`1<+S7!7~(3L;_jP -zTWB;VL-Bwg#7#wMPJF>On4H4C(lF1IiFNc5yMNaBIZ5OZT6d8SyGtMzdPJJUeZ>x3 -zY(rx2FxieNXb0NjRWbYnxxVrtj7y>0p_O@(ix57etD%pnH-5^cKD6RpzZNjv&QS-| -zAMUj&Th`Uqg{#Z`$!%7d+{h=Eb{CcwyQ1R7_CyQ?hPe3r4A@y#@=M?I*K~BK>sa!L -zm8p651z3H_H~(L88k -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 -z^ds0v6#FY_c(*T -zr<27*U~9H1wPdz;P+DW)W1xMg0#uZBugI2;2JAGX5ha94HZ{avNb%XlH)FQPch{>IOB-Uumj@j6Ki6& -z89LjA{x?>;Yl!LaX^QH*sOkvnSsoJflZBi!2c_%(>Wdf2$oPjotY+(AjB1Fs3!P*N -z+?mpSz;=ixRQ*9@7Nf695Y?J_S%K4_Z`DvN4ez8#7=v^)9jdPh1gK7>8<)fDy%Y9J -zcKtACZ)@lRCVb?++!0axtb-oDjUHg50u-_evFkpZ(`+vN5jFDncMI4dtg~mQz9PSC -zu(QC6_!9GYJEQ~8uT`|C%7vC5!>*V#e8x8ay;&~eHG+87ktB0vohqKS=UsRxjuEzV -zyT%^~=h;qJ)EJIZZvW%!5*^_lQK^26cH}a>Optmnk^csiBahp}MQ~af9gOkc9p2=Yt%I{r3-67qT5+Pi4PTxntPY*semU2H3XoX$+= -z2*==2XMb(%n&qBv+5PCofNdV?Ris{BX2|@qJdIWah+BuU(!i@|Q7m0dN?SjIP4Dy> -z^Nj28BDuey+LYNXvd*SZJ7wS4&Ams8;l3Vr>v}2h04K4Z0fFruO)>l#3OXvhzG>b% -zP#W2XVaOZfxTze%WO|LAgtQRfz?KS_wKcQ|F+JI04$J{$`hKGzR6c3$koUYm#!r)! -zo70Ok$c#Wa4o^5&yN7)#zBu=8kG|UOOS?rnGk~^Q3mQ#jwh0K%%fD{uOQs1-p$8l9 -zAStYi-X+Cgq-(z19jZf+*;fm0xMH99Psee6>d5s3%Rno?YcnA55Q^P2HgzhB~VR8e*FoIV2Ik_d~Lpy$Gxn|b* -zC~C9jJu8-jc)oNUE}SV;LnZ)JC{BA+jp-A+khOM7UNPc%fe*69Ti*T3y%eptgkO*i -zNtu#g#Do%0L)A=!tVa6EIyRa66cMRuL2f~k&z?zSX6Ni9grj{gTQ>-5ek9$WM(4MK -zb%8Y+x6G8JGO!cZ`ju;G$3C7d^$by46o&Zdx_SJV=X8xRf%2~4n0*BC-0D67sZChiTSqUez3ft881M@hqoFz -zMODsaQRN_d_KVFf_;LDhy@`Kav=YmoCM3x+i=e!qwQw -zm`&&(8wI%u3*zCdblCg>Feawtbg7jVi_vgeYeeT1N-A1y{6>1)M~a^%r~fn8V!cNQTA-FnK&e -z;)%)u76C@E>b>kz8&q}bc&ZRrN{ZUK;X%nzFSTI=GoI!r23tHa -zi*qcn_OaFmiNWaKS}R9({o*ExDd_W2Rd=!{r!QlVi#q0^#(pH -zzo5vvOi4Q$&kee9H7bM}&kxCryygiN4h=|4F;&t``v8$KYO0NTCj%RG7`dK8uWWbE -z3pHg(hCR680=oj)(PS4|TbDs?U6Mf2OsCKzST2`nxj^(3bz^*Ra)3t`v%G}Tdyh*- -zgfJ>ZARyNYFg%%lGBL`HDfOj2=8WLxIJ|ToFCDvtq9ZCFm588^3VYeVrF-t!V^agmoT=qm(cV2K-oBsL3rftP)u}Dn?!;TL`HmPVBEBil*Dpts_!FHuj*00ovr`9DtQV15vd5?7ky3(oKf`73_d=GPi) -zUT_lg;`#iN`VphS~Z5!Z}Mk!{iK*Eyo|(w0~G0lV@TaCEN3#P6Ji9z -z_5>5_ -z7mC`P2~3=}J5X1z;7kK`(BW2>pk;X;p1$`>-yq1g!&=SosB8diDM)&x7<ep#PBt>3k_)x{?MOx>i4%)jLLu5FF=BV=QL32X%|OnijuuIotsOSwX}fA~6{7 -zd0Jr@#2Xc -z|YA4B#n&+VGBXkxLa{Le~8D2ub!SD6HvId -z!^O9Vw11V#Vk`=gfV<4gb1#|g5b7{7$GywiljJ2=E8tnnTc`rH>pc&lNm#Q_z{%Uo -z2aVG}i(3=cGYp`y)+`@{0Kv~rMYm5tu!cv$@ryD$@8wHUVDPCdio)TQiJ1-qr|KsF -zmiuMJT3{W>5!|f3&JEed>1=%gANoxokYP2f>pK4!O%Q&%bty_yE{f-fk1W@icM1cU -zQB}?}y68v?r^=&&D>}`kwi9<%*8~?snQVe{`qoBPrZIus0SUvVzk1@#M5IbW#dAG! -z(@Lk0BMXgHP0NHHEN(TV4ips*@0&MNt`mbmdYk#q#4yqeyJO`I@>u9&!?P0Uo*we?cFDZS)AxkhTPncCP!nF6 -zPPiM=gFuTRqnk_8V1@4_*KB(Zh22?Xjgo?rjP5kw3o(?LNuLcp&p3@Q9omN-T=Qo1Z4xY!@(UA=iyk-URH}F1sN|-;A!dO#9 -z8Hxa0AcYdVirIZ1L--;@1eoImx0#QBOEv5wH~8Q>pAWSq%uo`09-TIDgjaQthdW#s -zX?-)d7BH^z&>|Mgi-#sa7v^#oimprilj`z{9V&~G+9L1g^BQ^ztq{IDNKG!1$5Ec3 -zu?=@&{$nJIl~&3l)_S(0EmuB5ek-ArZLwwSGmDHSK_4+HG$6ZQ1o`I;IB`9QeI{EW -z7cIE^Rxy>#(nWxX1$lW?Ij -zH8~AEvX6_@^|BbOE#8O)9k$u6uuSWlo|hb*Z`8lAiM39O;h7!nq=eIM*y+S;NI7UZ0p#2xGFz-8OOUN#J9JP=>d -z@%kXu+NQRG@-!NvdK2l?5?Czxz1tLv9#~}NR7s1Ii6br>9*WTkURkq55}))=&Lm1a -zI&`b8C6=XCE3@7q`$(QKL`1z}P^H$P1z@FJ^6p$S0618I%%?>H9n>qAx{S{H5@DPp -zj9Gk9NRNUcwo8dQ+g7>BeN@PB;iN=MbVMKWO{u>JJ6w8N@(d#xE%di&@Esqev(n5x -z#D+w5j(!X6v1=IBVm495<%t@D;T&Ro3zo1$M=uJtc{wi!Rq%5-r!UTAk~jp^lUcNDj&ydMQfwit%$1-Gj6* -ztV7m=`_*VicR*xyw76Yz@y+iJ;kKVX9PH-xQdw00r@=rFu88IsDce&d{drS -zYI?Gu>H{(Db?}jeleFf_6cEY+)a-3}@x1hMo*{R9?zk%^C^3S1@rha(JxxsGQR_>0 -zn>xV!GhsrGOIHF3Ra=DN)Lj;BQ?c(o_&O| -zPlgp*8A56Z(j$-N5~2n#Y6+cUd|wI;-NgH)(Zq1XqY)7+sf}~7{rhTQ$X_y8#Zje# -z{itZj^v*Q9O)0EjZVc4vzvVZOHvqRHs;QJYPB$qal#`YkqYd6M -zQM)qWp{LDc@aZHF6i~XgwH0+nz?l4Hvfx1CWf#6q2^MLVsz|Xc0~6n=WKAwVRM<1s -zAr4^a)vKm>^r$;?2#5r~v-1-NupgWIEsHz7it?1|)vkuejg?+S6U}H7#&}9&|LH~6 -zG+Wcg5o(`dH5?8~Nl1uzfip@x3(rKN1I-e#mZ-TMY+E47} -z>dA1(zRK0B`m=eBzt^LXHd%KHt~Qv^;Uin8{9$DpY&8}52f`NZWgpHw>>(OWuB|kx -z>Zs4td>RDFZn2IdX+>v(g7$eb3Rl8j1|AUO&+#~Ig;6rBN) -z8p0qh3SV^%Zq=$f3CsW*)pe{eRV$zXYx3D>L5oSry~FvebPZr|fI#%<3_o(D+8KyI -zCqKVtxhA9S0|$C25G!iqRI5q^bm?mOm%Q_8wozZJRtmbLmElu|r+p%Z?xSHPcHATP -z5W;1{zU~5U$>%R);wr=XWI;D_AZk{cTl3=yqw`y?E4Z(R38O&L=QLq%HYggZX+nO7 -zMW-#sL@gVVWRr{}Eg#DNNA*z#8O@CK_m||}s*AE%L*&`%2v#$iH7Ff67yKRAw&!7w -z6Bs_|eX(Wu*~R#;(ajCOB-f%X5qX+79wGaqWatTLNf9v#G0_-*Th5LI7RjilZ&>yGoJ$(i -z{KTsp!Et3Ae@|=7M3Q}*lM{hq)|O@o*w!+=Y?7PUnrl)z)?TQpQZ91Q3W$KNDVnjo -zIAthvOj-LW!rI<WOsH5(oa*YEmzhs6J;OajV;w$1gM2oTdBDZhk7)1i=-M) -z3L?coYIG>(3%03Qs5Uu3bD-h8Q(=n=7D05{rA6EynS+gY*s>=m5(LwiF$n> -z+|X%mU0k?BqN&}Sdmt2dCmsRfmZ2c$i7Nt467P{L^}4fiv&jJ=w$ms97ldbyj5Wwy -zn^9oJ;9-dXf`aHL;$mI(4k=)^kztx+8eeE&s??=NiD@V@Jbpq&y$!zgQxyEw>!k)o -z@e=-~U*ZFd2oMY4?Y8lFDYE4#3LvIH{Tr}41|$E}7EjWS6t}E_?y{F($25kxqyl7l -zFnmkn+6m07u;H;uyj7UaEL;+h?!a(`D;;a1$62t5JSvO+R?t+a=u> -zPZaJgad-_4QJVd+KN>t`6-{>2Ic}$qv8pFCp^mOhP@(gWM+KJT$^f#F69ghlS1JS4j5TII9ap7w}8gNXR$>n?Tn9V;0K1=X`6&LP~+~c0PvOVZ~ -z^dB6Wu>pSzpuaANj77VOl5knzhTW#at -zV0ao`nVmNpOCqglTiYVO5SbLa0>R9QcBZOz!Ito(_E%jKF>!TvG4oM!3gKzR09%Z6 -zl<0S1^m%2SU^`b)`~Qw3fHwa8|3BCk|I2qJ|4LG?|BmzjPs;!3epSbw{wK>h{{ptBt@DVT|2r76TX_op4>mgf`=tKOF{bx_ -zT+M$3-wyt#VV8FQbG(KNbqO}T_GRQ{#Q#|F*ROwD0F+X-oyL#?pX(MjYYTr( -zn2co6jkE6O8B!ZYdTA+fry$p&2xEOgKcl4hK>Dtu>Gl0MB2+ZNrts8ObC!D#)5MHS -z)^DKu`nveIV)_D-y&ddh>v-zk>KK;f8Ofe0z~;n1v;2-EB*ZKn0rr+kjeEiCpZ~@g -zjC3YlK`msBt6uW@gG^|mMkC8CZfIp4y!fH)Ey2H!yQWacrOuF^Y^W>l+v4 -zx!xH=F^np2+WOByK>xN`fA7^FIpFQY??Y_J)9oEz|L*-)_s2roD51lR|GwM8PckC^ -z2i!PIURivvWF*KUA>(c{@B{YO`@>Z8Q1VLepUtTf=mvd!&NORm93`}ELMpYm7bE~d -zRGYE#!m|^BQXDor_WtxL8sR?`e+tQ`#^1d!6{RE3ZG9)%CL+kanU3TClsHW3q-b$} -zy+NCN`nx>6?0)+_a^p?t2dp$D9Gt)WoS{?kRTg#`pWmLod?x;SA6NK3w*R>gkMsX< -z`yoy3{n)&p^*_AV|CV|(|K;>{^K;MmbB&Jf_l0Jq=D*$T!Aq28jsx|89^z1~JYguS -zixr7Eyty38dmC%g(mU)>-Tg$_}irju%yDs%!~^GS$tCa1nw}UAo}|%PVaMl -z_xr4Jwo5JT9VDSohLdkSJ?tx$!S)u40sU-nm=<2N*f8Pm;&}<-{-J*#(=0}Kt#5fF -zRCTW2E6I2U5Za5hlNCG8F$!Y|VDBI6n=8hB8=!_3dPb8x+rot=i^KTS0{5`2*2Y82x#%t%vrA -zJkUqYs5y1>kAMv(A!hj`-}Tp`_+V} -zDFcjOOrvlZa3yQQZ&J9SOrWUQ2lmesu3tYL>OUX&@mUmMv(R9xWe{p1=* -zNZdqSZMUM6QZC~hECNVK2hZ);T`|yPg_HN3l!HmpG -z5W>n}Z(6fW!;VLTDlSc|_b-o<$tggsDkV{)}e~qq>%H1(n}MYHZ69kBZt$Siwp*)D&^A)Z2Y-ipC_e7@{4+EriiESueZs!q52Me~wXP-@+{ -zzG_Tc=OIIp0p~FI@=zufx8kFB>^=S9p^+4jnh|JAPH9 -z-l`M(p+)_ME^`Ep-!nbZ;BUxg^DRGJZZYaJz`oPVD{C3^b2bx;d0gNM6N46X-rTG3 -zLQ9@V0p^c?(ljiyV8QF+P@`@MO@R%|4ThKHbTa9$mr~u{oaGU`P{}U=C;J=mCf*XM -z>g|&3alHQ$^5n-f&TpHzF4vf@;G2Mn|}w@pIsgQ^%x$=)3KDHSt&4LW-dq_mCY+ -za|!)6PQtsUi?Vj#O3GrPZMMcrONHPS`^mOCOXk2n8U*VlvV3t#Cp}AfXl+l?uW>^R -z`26%=usH~G?~uA*92-pN+R+G@;mDB#7Mp80nuK5`9#Nu7<{O22vnV#?F`;y1gC!*a -zrStkNfg3U22zy&XACkhlC;s9rZ)|eW?^Ighb+x!SO%biaLHb=1aubvUZPm{j=4|?Xx`cUJT6l6DkogpUFxc&s2eo|U` -zlH;jl#Q{kncKO9>f6{+?1?Ht3336=J2_!Pm6~hgvPuM?$-;SF6{Z -zfIZgLd=5ymoRfptt&1+Z0LGZHU_u~1(>ALoMZ0Jr!P!{d^yU??LLv(yY<)px0h~gB -znGAX$N;Ms8mi5s8D1SQpe=J{w*Xs55yb9OXn8V#O+Zd!V78F0neg54|sXX_`=soxe -z|EpE@Qf_X1QnCE=HT&~j8=>+}8J5_2dbsP%`TeJQ^XE+3`|fo%*mi3vZ@Kk|aN5gc -zWa|rEzrNq?0ol=M6Xchm2yQD-awV+J5(_&V7-2qYO8~U>tRNJHp6sk5CkihA9!vh& -zmOb!!!AZ*1)^=<*yZ!5~#oJB;ryu9x3CAhOA7hNbaU2V_w=0l+hsu5e%`uu92LF3_ -zml-Tf-N2`g{0%1;+)_sbyEwMI$ZnZKl{0POwWXC@GQVaC!3?|!+CRRVrY5@>o@tPR -z&IlX5o`NxQHKiML$jhjsHCHq+4l>@N_n+iN*3fbze~x3eK{nBZJpXE2Fx-0!X>LS1 -z00O|DnpYIqz6~~<9fBB?W806Z02V=d{|p)a;MAgFz)|;Jf|6KP^x5cy$l4`R$@MG_ -z6Q;GZH1f+K&WI`u((i4TRpwAA-FqhwnIiMHSMPPX6?dGn8aKG_`Xny%K4E%v94VUU -z_xff_3D%d-pB|rao+IvbO&_bS<-SMFdV|NDvFZ!;M(lp5ZVpntR%wfRml3$H^7~Bt -z;}HzadwWyGO(@p+bM+W_<3xcRhFN9 -z*cVB6bDSX_G09WjY3}5lO46X>jk@!|Z6xy^*H;E$&?tG|S6>wbt!d=uX` -zcr7l>?&1%14F`UA3Et7Vc~SMq3j(!JFzz_WC(w_2{MEVHLYgvb@BIpn%}A@pAmSEq -z^Z(F#e|ks$xPG?H>fAhabi`TO7tgH}mKK&Kgo|=rbBwXYi@e{wirv -zl(%@>0CnVMalU;=gcVzSjV(LShUT*H`x6ktEIip+jYXnv)j1(4vhCOn0?*3%lfAiJ -zR1`?OyQ0b=11_7A#i#Cuj-k?(SXlidLJW|NNjE+8FN8`>iIhug|K@g15Eh|d_pPkl -z=)nT<`Nn|}9iS*MdA2&eji+|p53OMnFH`t>Z>aY3E6hI#gG7-kPd)1(>l1NS(8A8k8R{^qYYwC)+_n#AFsNVUPqW}5M-&1% -zj`!p<5^IW|^YDUMq`Jb_A64S8hT&lOmXowrMz-vLNVPTHmX!J$T{g&eZ8daR&2qmp -zRO~I+S9s~TFR^2ybDFg&bLy@f{oX)U=&I6&uhfYd$Ea-3PjRacp5Ulucc3bGfB*!qzz?an=pZ6kD?dDQz&E6&(W{n_d5ewWU9W0m&%V -zic($zW-Sj#MO|4*sfjGPNx0AogHPO#Y7B2C$6gf}NDW=8gKU=@&m*s9eYbNKcu*wbpAku8FxT1M34fR=OhuC^k -z!LvYUOTN?0gD$z>x1h$rZ(dE?sA~_65%DHk-@wzE#-IAtw0?gw$_R%p9P>cGrH8mB -zBsI2>uEZ5Ru;aF5Pdm7f9fM?#whIoud0J<~nLC1hrhRdIJ$AoG9h}2OkK-DIaRs1h -zAguf&WXRgmG~UcmdC)Akd!t2-nA0$5oUK`Rv|a&2hXmb+z!J(*UDSbeegNbQBR(JJ -z1$oI+zUM{>cYLyaAGmdW2HMJIA}>m8wdmmind+eTZ=HE=0nY*jXv^ -zO%)XID*XVn$@FIkE^(b;Rf;+Y$^#VAdkSVT8nGovrKnW9nqr*46@El6gn;XRw`3t$ -zYkGlL8i{T6dwx9Ny$U>~N_uY9v)dM#l!PF_Wj(i@eW(d7zn}8o#Rsd7>?PlRV5pwD -zykAGL&T9R{&y$6e?O=H?5|M`NyZ|G8vU%{gU&+MWiqv^qXb -zuNu44QuLoLAPdm9>w)pgtAvl9bl%+yA7EX>cn3s9&H}7aeSgloUQg(;Q>H(Al7vKheS4e#0r8oE%ce}1+Ft&OkwqVeKx^rj+9>u!aic? -zRO-hd2nN*w&rMq>`bdyJuT5lPB^#=B+3VME#+l~l{8XG0uetvF^}F5$OOF2mLdB6>vRly8j=TY?syHoT$x46S(3iG(75mcu94w -zC$3&c>|D^Zt4YngI6C%fZ$Dh0oPLt&Zbu2~RgL_i0dGj8y<&d~qwyCaaF11S8&UX? -zaQ{Sx2Xc2;B5i>i>TeW%Vk2V5b4GYPDO*ojED>?H;>@i&>|8`DjC1eGJkKz*-16@# -z4`}tX>g*mGkR@d^;;;?=;?;kV(d2QCU%0)bn@K-3_B;8CrQ=@JZV} -zy1B+1Ez$A*$3HvhIBxG+kTk!UKn>g-YVB+2umY-^+@N`YukdokTb|&L;rr3G6aDxw&OG+Wv?0V{?vkGq`{*bvBP<&Io7TT4rN*QUpQqLTCa{)e^2W0C|i5N -z__4fDV588{fN7g_cxA2&W%)E`Q?gl=5$goZ8>$R`yucTFT?yt?b==*YEuh-J2ly8?~L)+GkAY_MREs!U?TNm{-8iv^#pch#d8CkuSsbao>=5r!@y#e^F3uWgo-ZwF)<9j~6=x!&C55Y-Xt -zM=tM|*4RhY(Lt4d*xjqM&N`ECX>lzFu;7iUV1lm*0Y5r-P=>~xK{n+-rdV_l4GR;=$)HR{-osz?YE>6onGRET*E -ztOD(t%#)M|(U -z|9tm}5UH{&l;+^P=<7~Y%{cm)2yzq#X|TxgE>=S6me -zU)8mJe%#itQIFPDJufHtCF}om)?oM -zu5mn*>)mrD#X8)x#@J~4P)LA_c7x*7HlIGS3g(9$VX;l2m2$>%fOy^{3qqYJB+bJ} -z->J{2zkh++xDis@yV1F66JYxL5Sxgj-CN{Jbv|l}_F3Q!XmLPu9!^d&5xjK_|3<(Q -zlmA+CdulrKOb-FB&}qI(?rrX`J$DnQZCYgB-oaT{mEBBucLFQ+s~BvNf1auRVC6#% -zLoiC%EZ$eGrtgi8|2)1s7<=@6{E6SCne1**tCa~}6AYI+VaYA7z99FwHq7X33&c7j -z%^c|laZ`j`?mr`gl_UjGa)86IuEdtFK;vf9-~$do_TAS2FZ+%{fKy_0ljyR-X@EAl -zMb~tCKq;_=GXiW`HICY}yBs2_TK^id8CRoi;~sO$THGgzaF!xVv6Nx(^UC&xc)ivW -z{tlEZfs0x0evtIYcY$!gI@S89E4PGl{0_UN&Y^xz9@m21mym4|X=-NwchqL;+K;z$ -z5%c+;tXBq2O0NQZ41n! -z_h;p50nP=tE*Z~MdbpT>Y0*fpuf%QgD3H)^GJU_X)E%f -zJ?@BL!?HN6wKiP7_Iq>H*!(LqTMgvl_-h>nH!d`5yM5R1$RtqUb2^u}M73jOw+OP1dv>aYL5C)am -z-Hs@~^zZZvynrVNH8nLWVdLVJJw|K(DR#Q>5P6At`dbOs*~a`RXQhuQa*qV^Yo(61?qT3pSEGzz@g -zCOLh{bH?g}sp>{Y6tZyjg37b!k}n;%(pwOTtUdt^_jWSKn6^ht2{ecM@N#mB)Ln*r -z#;%0>7vgy0U@)gN3?895Q)_ZjoUg;4Qfj34H!Lw& -z5y(RHzx4=#wovlU0hD4BjE#l5Ak75=`w{J7WAW6B8U50aQ)|>r=;!M@U -z>yLA9)P&3nh1DYOQ{^tYh2kz~UW4gk&6nie*ocGxb^wGqaAA2G8ytq5ACe8YbxqRe7ztLg5loAvmqQK@%ktLf6zmxi6sfo(31;6>baNR -z4#29b&&7Wh7inz3O8x$4B|tcY~LNF~sAc{$a^~*Y>l2e2; -z$CvC=4W;o1ky0NQ&_zS5Ey3-x1j6ex7|H>>HeOZcUHQkaeR3CGj_fuHL%<1S9wM9f -zAKUSIB#swKi7Fl7PGfZuReM(pjXoO*ALt198Yiz_=m}|!VRs6jI$n+GFKX)(E@DPN -zu2zw4Yi7&_cOL9)`|;J(c42Ns-4dN*z-pPXWZqJ??bd>_ROh@)hg-9^Pm)RTdtGG& -z-p!#%8BvhB&+#OOWJ;6lHbR9Tue1Z -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 -z#;r7SMr<|B6d=14?L -zlJiL$XAihoRkADqFli -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 -zm=9Ha&xD -zE%G1C5wX2zZLmp5v!Q0qDE0kyRum|I6ruQ#&;D66P&6q}cK`esoua(pQ$#G>Rb;@z -z5z>~N*l#Ed<|BB4S#C?z_TWKM0)0Twhmaob-M^+J0)^iY>v-6!X@kaLU^YN=E`cVX -zozbHY0nx#|-P|^c=B766lD;zXz}0X9qyF$3!kwLbBSM)<>K1gd79Ahjs|a^qMwas` -z+Hk2LVHEb-GV#h=uARFijOu`^ICv*LQKnUCNl{FY^K!m~kkBb9TLji>rKs7HBu_!} -zIU5^I5gE%{e6wY+UOEZQU=Px*%n_x* -z?E2`ET8`O-P(ibUsS=9M>~xuE*IG1>I4L>qevnxk9|z(06HDkz-vwR(^^=qKE**2w -zyT>`ch`OtZyAexDWn;Klc~%(4VI3EvUlqiAf+rk;x{4HNro+0d-dJ$XQK7=0=F% -zVnpk|lLFNzeym;RoummaEy$Q4GZ$7nvrEP103i3{WtKj41}Voh -zHWHK;@AzxamIWENA?~%DTw%U_9uE_c1|t2YUT#=)xK6D$!>0YaC`INSOdWzfy`9iN -zchW-zjPR@GC$oV`@9e;PlFE`qC8x0Yg6ys^*&ujb1(3SvT0zYEw1s})ZhX}s^yCki -z#5BdBA*tIXxOmge75Oi692)fxmxx>TKsEVWOTYBBlxY)5z -zK*Pn=Bb{zm+#PSs<}DZ{@&Xcon=y^EL8rq;=tul>K`Dt3$zjS>*;R -z|4O4}RZXraUv558jgbxzuuqpxAu$<6Wl!Vr>=}`0w&s{S95{11pQz1hMN_?p6S+T~AasLTc))>4e20_rF~o(==1Wy7SLQV9-%9K=Y-4oqo7 -z)X++qPN3oPNlYNE -z|41VGCeX`Bf*f3thxD6Nnn{&n$9!hf+~p%u8-e6TeVYN9g$X`Yu%zU2_go@GwxZtR -zjxJTWmD-&uC-lS*<-u#S`E!xBb>>-!cb*~wK^&&!5{{A3!z*2NT#KeH>5w=B{iB?=kl -zWVL1HtY@jM2u9BX7o2qbItX^*2GWfHJ48eAth*~2)O*|&C5X8P8hCXOf!v -zoo`LpSEyXtB(Q{B9C0JbQvkI-Pu^-9Oo~jeOZYI5+y+IZIB*)hAT?(uwtAfOofB2s>_8ki?Tn!HUtfB!ZLH_qhhji}_9itA6YE5yCh{7c9B -zICPz^m57A^Myp%&1&IOt9-m&SH(REj8TtmdZl7al4`_z#f;z!{n!Rqf%?4c4EqUNE -zV?O8N0EP9Rdzf7KpNC@zlTC$N3X(<@w?LEF010g56|-0&yb|k_NUm;bC<JJEJyID2 -zHNPt|g!~_I*Vf^n#umTIt~?geZXG*_j<$(moNMw}bN+VJT0(zw`7Fe?q~p3RkZc+J -z1m_OgT5Km#t+NNs8nx6?EfyYg9DEOdVm8-mw -zhoVN1NysosQR33aV@}Q_pPk^QV`K2x;j5_pl7@(N2)^4DDjyNP-s5DpRC-%^k;MYU -z3=(|A@s|mRFo3davR4{rPV%w)7Q=HXJ!ob!8Zyc_h6--73UjzUE$EgHQMyP*&8TtE -z3RLAn!+~9kI4b4E{^oZq|L}?O#9}+H#&V+-%yO6wpv-9=t0WbaRfJlQgd!k_;X>=m -z!j2}GiZJR^g=(I;Hc79UNPD~%qC9T|)sHo>yBG#luL0z>maZ?btWng -ziehE%fA2O4qGe}4!38ffXPe|1pNO42>?!<<*5t@Ty_c_$n+-{Dyn3%{L#tIkA`>4R -zr4axdtru_hZ~_`;Mw!brU%Ua(Nv(6lrrfv~x$%o5sxvbem?Y=}7J!V<#!8o{nH0D| -z?22D{mNj$8t^GtOBLMCrV+zY6zVtRy`CyI>D)^$_JDw;z;r?$t`94gb!cX{Q%*DkO -zDN$2{>th)%MFGhODKIB}ITQgRi1NT@51%kc#`Cs0ps}LnFtKV=fbJ0505DCWo=6wl(cPt^A-1rgV$cGkK;OT2py2Dw@fw#!dVD!H -z1!j35hd?1nmR+#8tV`%(hCUFDLVD<$4e{W?lv9r_R+I2f(7J&S$Wc3G)h(d&Dsl@kn!Gc+n -zyueP&ns+)$!bI6i;iz`>!emzph3At_C;Im(d0)XiZ31v_#ue}}&!)Dh8meJGCLUAC -z!qQv_aP|Qdg&x4f&QCu&HG$a{vMD3Rc4Ga+mJ?SD?EBBq%RGqKvOEEIUXoO)hc>;9$u0xiqed{;r+0E#BE -z`;nd&>zpBv`Z`Ea;J~94dXdgVEUFOp1;<77E<^WN!`)z -z9M3LGo5Vut!~$LcO_EBCnUIUCAw#H!1`N=Uz#b8mv2IyvKyw1m~ -z#09`*LaRbVj5?>!8Wx=lw5XoQMqxOd6<&}#49AE-DR~k9NhE#hr1k$sF)DEJv%4#Ka -zQPnB0G)=1c*gtU)2u$Xhq+*jMoon1k0iL-y0wcHdkXkt^9h>U6tm$$IaNtu*zlk86 -z)Sjuke@!7!h%s$<_(zs)94=81O=cvr!LwL}>J}SprRi(aKg0#vox8^(*H*N@@HH|7 -zT+-ad?5mCd)M{zuq-Nm73+ -zxar)o47I3Lc!kqPxXH6vRc7m%1v!~}3ogTQkVnn=+`u0G65;0{iFv)s=AmL9WUt)x -z4C^_LP`c!`rh7t7#R2y6YA-hV$IC_mKs^jJA1;wj41?45Wst^8gP0V!W}x2s*$-U9ca1S^xB6_*nvS` -z8KE8$6?y9IM*4UEpsps_r*C{!@g+;XEsn22pONK^!WKka)=^D=JNDd(fT?PtJLyD~> -z+!kqqA@eroB&CZDNq3h-NqHO(ARwd@Z^8|Dxe@88K^4`SvdYFV+lR(9d(f4#>Hac) -z=3t5k{((ctPg)AvQJkpcaM13OAaz@!dMo%={g9W+ugOWDWhE}tV^$fl8w6QN-MxA# -zp@%Hl%65HL$R>22GT_+Ffw&tcWa1aCOA%BU+*phGEH!PW@jqYZ7n@jvDeChqltRTb -z8PqBAZ5bN6w9he7xHl -zWEVI@-+O7>Yd$R0ZLi#D9xc5*R;Au(9$;&HB39izRlWSP{vo;%>-|W_8oUy_k)5Y1 -zCreET;B~9F0~7b)Za_>_b>q-)DB4U%p_vgmxmY-pk^#yWr<{_Id$Y9Z5kj5L3R0lq -ziFnuS(i{@f5fCF%M?V=%5eX!`k}6WRa4}v`NxW@AHRoDJjiSXkPi0JBk4C##T)oYU -zv%Vo8dSpsOc*@wcPdH%=j8T1b?)9dZTag@Y1dnNyGwl&vm{h_c}bg0@L^4WT5G#cMm|_*y&c~%z;AA;JdtHUqMzl -zMA9#wkoQSi5QZVUU1G=-Pf`Az6wkK&P$yO2&PU%bh`qF1%vEp9tVcIJ8?!wyd69H) -z>K$gnN1cahrJV^TT~XYH61=gX7kW*W`zG0tsF5?RgL|{*c6_lS%~Y1LPKj{~2S%`?oBa;5cu} -zzgYwZ3Tjt?=q9glH=1Y&gc11<(;6p5LR=xex0``0WO}E)dpxW#1QQJOFH{j#6A5nP -zJ|yAAsR?p>EHURS7tVQXg?o$z`!ZRsSC-&yJi3hu5JU(Khy`xR`{0@I0W);3dMJhv -zsH}hsNhZJW)S`c6+%_@Z;Xuib&BTliw?2POyFK?ar+iudOwvdWQNWHZqG6koY20R6 -z72be=K!Aw&C|sFOoa&3=S+Tb@hG(~t9mDp-FE4LH=2|4FVb-qks0t6+nTe9;w -ziS#B55!gIjaV7i-5m1CmRl`ZQQYA9 -z)X$EG2K)s>Qc&P!3pNmW0O1$pQmuDIfxx?GmDt=|%XH;vF~VjWfb2^}k)+$1!1$e^ -z%YBrI0x{FL%-4&G$yvivj})W-K@7X>=McI|?DYRBYb?$C-% -zkwo*}wSPl3q08)e2JS7bW!9;s!$&<*-~<#^@lsz(p?2bEeODIa=P>&_vtf2^*tGBy -z3tdXa3L}@9`TB3%v>z^2df*UDl#xQRKu8nF;4jjz>`H^-k$v!dl4Cpr -zkRvn<34=elQjJI1*-WbuCTJk0R$z%tjmY0Bs!VXCRT&23%6`ifky=IbgGoYx>pgj& -zAmY!Js{Q2s%(f-!qEKtga2&eFj|W-`-G)c9mO<8W`oe!i0P2k(!aM>MseMEy*972C -zLzJ^&z>E<0qnT8&GIl{prp}QUxPXg@$eMhx2++)PSpi7c`qdJ@t^tL4UVo)F9gCjL -zE0Zld=jm%BK#U$hFGrJXRE52F2~y2b(5>y_0#*vQ(CUEO?Dmh#=Pyxa+ur~-x}X`rM#eP5jy{a1xGySXRoCc9 -zHpjxleCJ{+46WVjoO7^{{`ETr?L}V?3-qlW+ZL@U{+kC;UDqE)X{cJlCoOfAo^N0? -zU?e5U&I1>Nv?LjFEqy{1*0SzGrtVu8^+Q+|*7xse7a_1+PneuDQb%Txas|__DFgli -zmazf?@yBqzkY%>xM6-64TwV#>SDu|!oDKV6v%vRPftC&zOs<;S*MWw4IHk1jm;Q? -z7v}3rQfqT00Yk**t5|}>OI!*~L@SRREZ)7dsZ5Otgf^cGFZ~A2Q?ToMkYZdG$t0a_ -z_kDlk2qgFAYlqT|cI{DyE8A#gvTOT;MHY9Lh)8X)0^O!2RkUI}=hHH*pI*wCTg~7{ -zc9zbmH5(%(?W6^@``oWK_u@+I|2okv+xu{*K(^38< -z^lMS^i9+Aoq!ynzG9Bq-3~}_hNL~voXG<~9c}M5XM&Cv2O;|uiB=~8%l=`sV=gYa^ -zug2&I%G~4xYSo@`V`i#FW|lQd@zlv?3{xT7CQJQ!{;9jG_{~!cC5rq9NWo{96eg`F -zUs=QuLJFBygaR-HemHgF#Nk8&b}1xR*eoiBD(P=&mB#HXC9GVNLylros-EfxVJqMz -z3Av8vedecq<`UiOA(Qj}liQ6pcHUvGXXBG5? -ztDlP(qz&FtgRJw!{V -zV;^?up4{`%YnWH;X4pIqr^U5nC-zNFAP>Dy)538o=DzjoYvy;m&->fcVD?Mhjpa!o -z;L>h#kn}xSV&A=a>uQI!a2$)@#AIB&yxrc6!|B7}`<8dxw;7*R(^!&}ydBhCyfuwY -zJCa#Aix4azETZYTWG6)N&E5rz{Rwi_h+n7kde4Sf7E!p3F5bGYeBd9iD~y&;!QiI? -zw=~%XFJfUbXP_ca0vZZ(vO>6?aG(2|we{NiXT)iz*vU2wz*^dHNlF!jFC~*gmI?9W(i4n``oe7>U3>yk-AoJF7c+PPI~wU -zWZg?%Ou?_*5M^F{U$yz0=G3Pf`lG|R8HsxtVLe&8#&koq@X-gNs=SO3G2xc<11i#! -z-XD}s%12@AFhLb%U-5CJ0@T>33YzZy$Ocgu!8DPK4o&`m7X@XygF1LOUh%{Fi|F}y -z0<>U{DDSjrvx3}r8PZdXtlB50JDYUF1`-b$QEg!5X}93nu1XA>SPGZgHK9tp$PtFcFr^S-bV -zl7%E2b*?in>R~o%7FI#*vo-rmqF{?q2Sv{M5FU{(zhTW%<5vTjn^qVHLh`+-F5C{@ -zByDryQOBN-#r(^;U<1;W5e-GdZEfzUZC{mR7!Cfqa89k@U2#YF4zddObijJpn~q%~ -z^8juNWHZtaa}}h`=H=}v)hEWP?;3uJ0_C4$zrea)<{>CA$;7ccFPGww9;uKN0cs61 -zX$)d7ofjFa0>T}m -z#6k@_ZHN;KZc+&?KGWc -z^D&LAJVIt^&Y%F?m{ucWIP7i}*c2m0omTcS^m92~;-i&@xldROHL%bXz2WugZxEi7 -zw*Go}M)A0ShQjEr$|R^E0qMV{^E{(*5Kw-vI;OH!_dFt|?LX?4_Kp?;O -zUE=hy%P{wa2G>#(LZunkcj$(7_D64r_Ljef_v|pVI4-+}xN@J`LW4g+zuIJwBd<3V -z6Kh0T<44t~c+N|Z1yW6aBhPY#?j^u{BAME&3|5Lx>);s$$e-;7PDr@wr>ZR=7S)^txCD<$-=*+Y& -z(;;|~mB`lYh-CKR$u7C6!|TWNqMqevHaU`)c1?B9^lcL@GoFe2i_!PIGZwW1fUdC_ -zzX<(baJ(Vi_vDBrW2Y=FhW?PfmxGAl-R6RE-QVv!-~N};xY#*@ttHv`sQ!xh -zE_NwnzftB+5Egzf03mkf-+~t{{Q10y?7ieX8*YD_e&tm@)+f}m -zBpcmWi%a&lPy6Aym_#%Vg1FDtwFNKalM|V^?Rnm&fY+QgW_3` -z;oH0BW~QA%Qj^@@!h+lE8S^$X1%C0{*t2S{T<%*;UFpYaCI5bZ_}+9hc5VAHVVA_1 -zXt!b^zb~##6X?zMksY~Ba3{e1uF3a5?3Di}8PPvDVlkTXy_~9Q$B8+Qljo0{7o|;H -zZ8wwvJ;l89$+zyr3f7B0<9#jNnYu>WyE$_As(h$Q#+$YW;O_Xg -zGYg5QBUj1XuUVj8r0YMyZm8Eq@V0GzJUS#{e)?_1e#=h6Tq;dUk@xFME;gPZG+* -z&!5Fh?Jhc%SL>Rv>zA0_Tbh8s&^c~ -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 -z{Rp0BPrD|5l3Vf5?7 -z<<)8q=QJs)zYuw-;h&jX%d%bFu@F65w9|axOZLTYdXVWfFeNb*Xw22MCd`DUqU+jY -zY)`)!&VEV_7mAi~`Ajbl&Ut<1@mzBk05_6+>dbIe8FH=vcNw>g>yJS}b18$-8|$gs -z&`oqWgFA)KvTeI|ustzk+G%v8l6S)2=t^?xwPbjy{a$IfQ=PVCpU$Z1aL!zL(fe96 -zgVfol(@9fj!&WpLT_NxJJvd5J{@xVz;s0Q7uhl?QUJ_CM&Wx(2zS{7nIrafj0FL`} -znEl0gOexx-tGc4#IH*$2SO=7W+*QzImx9*-v_F4xyYcS!4qB{kc&33G@_JgcuEkDG -z6#{xjSkAiIg0&OR!I?<2zbJ;(wM@YLECtKDgwnb|+xk>%#dEvGl;17AW44@>VLEV=7uftvJFo-uj>?+RK% -z`Y4-hOu-a*^3j{?&u%vhX*ad@C<+80taYPc$GN+Mm%){E;Eu#%X|j1D7rP`-2jB+D -znD5X~2y34^?bbmx_A -z9aC~vUn$IwfCHTdHwK#%lo4-Uzx$dB+kEKY26#@cegr(8dw(Y4QFqmu&ysIUUFYs` -z9B5DL(3)%aH4kx$*oHttz4- -zW^f%1g;)~vf#29k&fWbi5;5t%tP`t9pD -zNCI#th+stZJCydGqzpI?hr=&8K!?&X(y7Cs*(j{WZ&I{eS5rg-z9WDw&)E{3qC@$WO?G$uvg-iI(8cRHuJp -ziswhw2*Ud)Qv&Jp>oL|R6VPnN>pQ@@sZKMZ9m>3aK&6^n_0fvFlk@W*)Zc%E*?|?v -zcu}Pd82+@ESG;zhQOof}pj2m{IxUMdu1rSIERR0e*lz~7K!^ -z_v-3}&K_ocu3xaa?OW#n1Y8`IzivD@R?+m3QHZ^#87!^pXJF{B|Mu$} -zKYPI+H!P{aHE;jJ=szmo@jrf5fN-?wJaq+0vSc?4RyQoweGz>_fv#mC42v(X -z&ZmhkiW1Ea0!4lPj?@Es`Y@c8Qa_z2lUSl=UnF)e_F7?U` -zRNaF6m{gezdmQz>6ELH@UN9?`(B3azeN?()o8ViOn#jOM`>w^HZ*_!2dTawza&vjw -zoSA0eMarCQBouHnd)5&A|C@(@7}`JB3d`I~bIL%RVT&bM^w9-K7ig2i22OvylE`~9 -z;F6c1aJQXfUvaYv{%NXHbR%u9^f($v^qJ4`qxtSLXw7r!rQ7#SrUAXry^Z6zNyclo -zGZlvPb$i%n_43w$o6l3btpC8}fAz+8rlw*^nKqV$4qd#tdox?(pG3J_N!Pf4_j;y= -zna(UCdMQlgl&tct4no}pq4z=P4EhH8HVFM82>me#eP@5mGi*)r9$y}s$=+Hs(X#kF -zw6-r9t~~8Dw_D|!{~P@on)9Iw^(mZGWo}dVV>s&Tm$7m7RNh_E__|?yU_@E-EUN_dwTEDHjJS>rz -zJn6svdi13S#H2&*27gp`1({pS#GdWok%B*h7cuwAs@djztbyq&c{gbI+-LB3RCe4g -z_(wAF@0e=;E(TL*N^|F*~9)(#U^Ar=qa;SyRe9nwCXtcl9=|$w0(A{)N=Q{al97qaeK4C0EKp5)C^~V}FLf>Z8KE*d*|AUZs -z<-P`%`Wl+mxsdn2XFps1_S+J6IrGrGs_KtgM7~n1w*}^?wp+7^Wmb)M@D8At28cS6 -zHeqoYLEf1A^EU_nJ?OdDGOtZj!S;dZwlB(B=` -zPXRUuS|n3eR;3KYDFhpN6G6wEGnwn~Mu637y7Xw$0@j_>tm^NRXj71S-pM(r?@v{+ -zp@7_$%3Zy=A(U6Z86XpB-#m?T2JWxGLR2~;UTKS8ufjW4i${Ge{d?XBm6yM)^u6}7%Jjo3r_=C_RNeOKzxv~(NsXy%AD|-@ -zPU>o^_AU#S>)_b;tUeTCe0fDBd(j#{0p0@Q4e24}66&P?Tb{LrFxRGPUMB3R7PWcu-IH>!@4(8xtB2wB6wr>FbYHO>#r(CwwiP>&jy64xv}*L1U3J3?(HDwZ -z=C03HY*|ya<1yVqemNn}xJw2M`TRVfS;Dq+ynH2Z-WrD8SP$B;7F5{-C?-=NTw~yj@qm38{xk-l#h`|1}X)|sn^R0P3L@xE$Zdm6l=Swb} -zBkk_1*>p#KP}cr%?VGRv)BoJuz5VI^SAX|+pFe|^PV}<>`knfw1nfJA)K^paxAH2v -z`f|d2AEB@NsMI~i3X_$~?kF3``%)#(!*zAXk1>@%8`0IqSf~8xEa{6{#yJO6-Kzcs -z=4%d}P9NX89Rbhid)9WbM)+UkS!A@#n(jl-h{I{)*8~e>4!FlOqAhiQqR{s3|_LWYd_O+zI1QprOcW*dP -zvb)!Bf4ocI{`lqxfU09WQw4r1H~r_~YLj-_nSPn3&ihvG3~%L`5cpyuy{Y&0FWt}Y -z-oI7unme$R{ZB*5uit@EDwNzi<+o7tmOt_8mvsO0-QP6j&))&J>}19}c|!K{Sn;d5 -zM)#pcax85xp$Xf98n2|ss;%j--?eEY>hAkMf4xhz`oukxv>>JuN&})p7l-5CnXA!h#bh6 -z+$JKMAqLq9NOUVN|K5Tc+KSydO&NQNN@n&e&GSO%@-a(lxGcaX6M}(#{QxH!UOb&FFnAQ=Ae{)=>g8;pz{Xcw|OOQ -zMN$814C!N$OZ}nt9PQZY)DvvRKU=?8Z~rPDhhOb(_^Zr^zZf5(Y;09d?Qb4x>qmdE -zdLI7F#xBIvaO`Y5qQ={?UN<}U$J-rjs -z$)%XkjztW1iPh#)4^~sh2WNB!?{DYGvKYzlN;-K8JA9$pZeHEAZ;W{~ -zPiOczOw@@agSNSO)n_Uhl)5y3Rg*&WeKl)B^nEo$LiBy64LPsxYnc$D@2go4qVKC2 -z4yx}j$R}4b7gXP0h)@38hs}(*OBJYEpnh(3$?dD#q^VA={Bm0L(BA(2Y;SX_Rd0+a -zZ2x^m`SsOp#?r^zc6<9>+b3C-_A-Wsi7{idqIzz(n{ek7u9J0}EZ$@fMTae8TH34h -ziZ%p>nBzVZneuux<$M>M6HMptKd1@OTmxRjUJv-xc{Ue^C+^%_`>CD@B=40m`tgOz>PdH2K}|&3SY}yz@JvQ65~0{*7Wj=A@`k%(Q$qAXWVyqJHweR;yFYsmg)CrLNs-x -zdY3;wzdiQi@WY!rz477`uWr@1vRXU8P->Y{o4vetT8Q#e(fiAyjYkZ1fmwbDeXG8& -z`JeJKU~~JO(pwjB%!Cd-kqC7aI$1fNo>Bgge=PLa*76kML-z2?tH06bBYjt0CHC=` -z#WeHe5k>vW6|DMSJ~&M#{N&qF=ThYJyH5kYJeGw#K)kZpd@>|Zb6)9{$-*384 -zoALKxgGkWM?(fbTXv{=w$Z{it;jPGS<@>BV{fy2mMR%;@G70ZgJgf(+g^ZI{g-XKn -zQ9YR;QJ?7u->$#SvclVxS#732zx}&!g?fTPe@#9npK0~O41f4HuWs4ud|$ev3$!6$ -z|LxZ%*ON|O>vxoiqx>{#wlA6E=?)j& -zkLmoW-KcAt9nVziB-Ejzig|5q$}QDxHw203%1NklRF9#a+P(g{8MtpVJoDyMGvA!u -z{6AIOO^FHEzcf7m`445at@6A&eO*>nEkFJHdd$iy^Az|hSHIroeX;aTiv4|-yvyF* -zzsatuZh!dk%^Og+df2a7nGJvb6RX>=^#|kn8>#{D&q`xzp`Em+6i1_45yalSjop06 -zzW!&ExLUU$vRV6`l2!bzA=Y=hx-)N?eUu4eKMsnS-YWif5YIxH?cY+-ap=C4C!c&$ -zRSJ!c?HoMhDQbuJ@4vZOaX? -zfBU@xTHnPtbc?(X@5C(hn-4#z8VPSJqG7{3nJR;TteE~VhTUsm(zDeQ@!Xi?1s+m$ -zBOZ$i%v8G9?BK!W(@7bZ=>u}GncRa;{eqwBx7=6tvr1GOhN4dGhSK-+$JCR=T`Itq -ztUix8yTT$(#Kq+F3Fwl{Cz3-JL41`jIyK40YgCUtAT>lt`$V$lduwOo!*Cez(PIpL6-Amwo7rE -z>1?)z25cJM_IcM56~N@TYnV2naWU_q%sXsC&Q>{FDH>%p -zsV7?@St`g@I)s|>6w9PaeC08!3r9f^D#29(uGo9BjD*w{OG*flz^BDl?>2)KViFLRs}3>1UtMPezt8rmOgAQ6|3#^X -z*Yehx5}rA#d?v1LkKcUI*~Ff>3@9q?MKIJ;eH||IMlt;ccxI--Hy`d^>y3FY6SuLN -z+Qc2?V`!A4-S#z8TN6^SRDZmwp68ucsVK;{a+lnQ1N@Kj?|E6JGAVB>lfZhwlGjY{ -zt&w`@nyNoifQHo~lL~ZhGx*#e*aM}aq*9lSD~yQKsUPmpA=cC3UuRH9gUiHLRev;SzR}1PF`7!kWg; -zmnI7)sCM$aP96{VWV6LMK+*?)NAE31cbbQ@;8NcRpMM68vA;t6%&|_EJ@PG(Yjd!b -z@$8CcNgUf@Sqp3*EQ{dU08i^XdVbREzAksQx2vzQh9-2fqlI0)>uTCbw@%u08qd|3 -zu8y>{qNfKP&FAPkPrG4#hBX+Wvs^9Z=p{!JVcmnZjjLafM!`D7(;A+ha5clA3tZ`U -z<=vHVSEgMlcI6gJswto$hNT?$QR*z5xy7U -zyGZ!##q_rt7OeMSTlrjk>3i*Jrm8Q0>tXek`5V8aZ-KHmdw+K(=dC$;riFy<{Jqr* -z@7N)NJMCej_SD?TOz7JPyC?=6h(G1nj!+?~JAks=GcgSAv)Zw=OPW^wIzH`lma!u% -z1;1$zYZv6-2Qk!cet*{Z!6c&3Q0!nK@NhtpHfw%V)8Q%uiYz!#w3Bt9XkYENrD9cX -z4Ki9XKvDS3fudlE+cQb739}Fs1FF4{rlsg+#pu&*aNr> -zIMn%2CB}ck0BFS%u>JVh4uEOHPPswRXI2-CREi5mp-u-(h`t5i`+@*4qsvf?YXV7> -zvjCJ}IS=gnATAiW94;7zZe1`^{u3BQl>sDRX|Vzw0Mrr407Lp|03ek(0Fd4p07&IL -zREgsY65yRYF{jQrBv3lA*rbdQWKJdsfxCeabTtq{joCmH8MlCh0&}3qL^x0s7k8j2 -zqCP?WfcXeP#%_dcef>W{W@ms-!bS)(UlO8si#VJ=z)*~Q0F*wJPEUFRTQ>~0&d3_B -zumHXuv^1Zm>yUOs`V46>tg~D#<>)0}6CvG$v<=cPNTVPf;%E&^Pq>=F(gl|ETk>v6 -zIFe~kify^ICDoQqTN*w2^CZrfF<+{DIr1gPmK9q%Ys3lw!+FzgT51Ej%D~(G1ywMrI20XD1TF(me=|4(OsG#32H>YF -zPf?@kA?Bgt4IV*{wY^R%%lDJlanjIPn3bGbnR*|)<89XpzLPR?1yqPm11M3ozxi-? -zr-Nusbrc=mlMdy+n{CR`w$79zksZp>_Xwuk_n(JyVk2yU{5{bGLLUAELfg#=g!WMr -z2n7K~5c;ZT1mMVk1w;ET3x;lxSunICvtTGHV8KxQ#D)d>M8NoCl;KTZep{Eu_jiUm}g>_i9sfom|+5H*#p}AWj+5A*AwimPLrU|_q$D{ -z9;?2JH(+%Z;v1_LVDm;*g$;dI6o`bH>RWx-uLkNHB_GIz2 -zh>7^9hq&-hh7)khdwZc1N=2@xvhHqq=BC~^AMW+{g)%Kakq(Hr-DbGy>LaOu=9Vi7 -z(+zRvp}gk@aT0jAlocYYS^^+1*lzQu`?nY-F@SPP31n@K>+@V2OX3T@Tt3*`s?N~& -zM+hMoV@!Z(H&T;?)PH1Ns(sb*yx}VM8gKe?hpQZ_ -zs(#?mE86HE8lF*sibLN#Zwi)gPMqiu{|zYw;wCg5bQ8pClicbQ_*UGoFv$ -z5TK^8yrMnw2AE#}rxS4TAQut^;s9`D9p4-pRvvf>U9>`8aVF^`?{rh0$ib;4Y-Q5N -zO7aiNmoj7vz#*WjmO}JM1$)?$=M;C15F&0kK*)gJ2*klT10q5{8nRJ*)sh|eP0soR -zlw#iyf;}!1v5q$VDT*F>*Ea;~9CP4{j>1<%cuB%4IYmThC>GSBK{>gYP~MXL^jtMS -zN=E@&3ZhgpMbbUsl(8qtr6k(`%d}D}w)i&C1VVAP33L^EWDJUDLR_QanhD!5Sf;>L -z{*Jmg3f@-ft`c|D_N1sM)jTOtvDxD=_^O14kraTs61c0VSQ$4 -zumznpX{kvs*_z1KJ+`*7^^2`hJRRa_4O>spn!(ovuJmJhpCsItX;+Fzxt%0+lFdmP -zE%~!0&XO@KRgN4vlH(0=blb(f#@Pwj;RA>YFg+`mc&wTvI67N~TFEJ?a%Nygf2`Z0h)yRu`vi#Mr -zhm#j(fxqNT>PORq$L2YF2e#Y<}>=ksk -zk#^9u5wlU51`p8ql3szHI-bq5hO>g&6$}uxa~S}b*9`z|n+5>7Of!v+_dx>;T_qR* -zI5+74!BL@UmiTso4Mg`vMxejnwp*cFA2tx(RTzNiZid|oUA!5I>tFF10O%Tw-5vT2 -zWTfugIOxVlRaY5h`E@xW`A{7%tcD;a(Zwj@p^MQy6J3lxLeRx%_p6JMC>zvi1ZSc$ -z^0|)LFp2^acU(poLcxNe$yhLiZTm2 -z0#lAgGUYg2sLRneV5Xen76U?BU~GcYqH6&9Y|fM;1{*r^`F(|+whD{!uexkBZN(IhyOs7%5!iNhoS6U$Fb?y&X5$QJ8P%sR2> -z#E=2o|H5f6oOVr41AovQyUROTSK8kXU4{1dV;#WY-L$`#PfwNDBCg#&58W+oe8+l# -zjXw3ytCTzfEt)wqSG0|bhuVSD^xrz}rcvxC|N>r7hn{HYPC -z`f2W7$rg5EaMc}WdAA>bPU|6mX|=Evjs7#h4ydbxbn>P}*@-ks)H7q`Id8%qSkhE1 -zOIVo^ySb!K5B!OzERpX>s<%gRC3*LvZ=STyof|3L>*PvAb5X+oOV)`*rgxw10Y;H~ -zXCNH>1$L_u&*bALy755p`Fgul5ZLTEELdkR%JF(H8bJTRfXNDo!> -zqyuLN5zRi5@KwnJoyclk)$T>2U;CJ?)gAA5)qIsh3D$7;L|~#GriON1mFc$x=ni0n -zrW$m?OcjyITimnYs%b>)@Z(IyryC~Y`y|f-FoD$v>7jw8ya6g70OU0M1fn$IKwYRv -zc$qmh=CDkfv^$0>Xu+yErw6hni-gO^_wLCp7y#uvj`Faf<20Fg9ncKL)9%=%WXJn1 -zRgX6Y+V1<^9+rT73#fR?t8yo=d$%Fd$nKwcQ<11QT$BkXA58$D=!R#3X8LY<8eA6T -zh}cr)2ZZ_KMu}~A^dTp;r1P|qv2jq`Ak*o-k|&aQdZr4jKm+_0sL^G55t6=@)by{V -zdbL969JeQP10N6esTYrOC1?B4)XI5Tk*^OTV$Sr^XW;mSjY!)!{KU0}@dGQ8?46HF -zaME4V9|g3SA8#-ocsK(YC{IlLBr^(ja;G%k|5Rt}XufWBI)zM5BILPjDU%E?(pn$s -z&6D}51byFxj5$99R#GiO)$Iya!lp`@Yf=sL?N%hDPXO9WTW5L%+xyzaIgYMES?zv0 -zJ{5MKW*jEpMY6pi!vC3fb>^L$!JY9P7~5Cz-4fpe!9E9aFI-Q;b{epo;Ccj;@u%#( -zXVN_*j?Fe{s43HITVZ5yv5EDJDq%(^!)e(_*DCr3&^LLWb@S|*W5FzAMcF0W64|zg -zG&7W8Aq{}7@{xAO`rK39j+UO$%b$%=`fTf9TisF$)>El7+S5{$Gdginf3~I@mD-&C -z@-)_@qe2_P7k%-fFJAP;i@tF5#Wx?`=zB5pUYNX(MsELf&X9*HdGq6I8r<#xSMs6O -ztlHHgr|z=wNBL|#0g$)=#5ywB%BO=@F&usGyAo+-Xz{voA= -zv^68Yme~XDUB3m!Y!3F$Qaxa}H -z2~^XV01NGGx~{4+ay2{lsE9=kc9L%?cC##U;>kP>o_YC1ZG4}}2fNlh5@;`^&8`-M -z;uZB*&LXHwLYkXhQhF2^<`%H#f5u3IO3|0I%nJsm`YP!kRW|{OXgCb6Z!#T4vlF?H -zM`XA1x^IpJa+ezH(9M$-G@2&rOwF2%gT9OK -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 -zt=o$x+sL;jpR77;xr%rBX11Dh*fB`KACO -zVbA1efo<0(#y0o?z`p1j&XKC{fwLXrdrCXefe{dyc&aE|Eb0?&&4}op`2fIC;1S20 -zXMY9E%HVGUbUFUYK$oK{W5Wvj7xGOxzD2Lg(YMHX^{FS*%(Ldu)j4AwafME0ENG~6 -zh5>?Z`AHUHWnZSEqMkjJ45l+bkg!^`RI@B$_;zI?@`S0kihYR8%GlR3fhUF)6}UAj -zUjzY?ce*i2O*#5J*_3mibxk>97gLUw-jpL&VL2;UpA(6ACVhavak$U;o|PcHhz0I> -z!KLSjAuUgQ8-I9{;Y&2tn6Btg-Oj7Y7k^;bT&;!~>fkI-5hz<%=`VT -z?C0S0Io8XuR~8>kHp#U@j@_Xwjb&S`$=deA_AEW?VR@4_#5ESkJPh9D;6e_5;@}Jp -z9^c^B4ZhpppbcKw;A(jW#xg0E5pm7NWGE)nFd2hM{Z9&iQt^{g_tdzpxGh!fD`!_7 -zI||sSTwBSyYSmGslj@w5<)j`5FLP3ilPa8)pRMj(1!t=?TZwsU%TrW?<2rb!whLK3eGMoJLT*Dfx-odz+T!?0Z`VqT633JDi8CiynaxLV-H*TQe{o -zDs<25Vyt1c^qo_%XH4ZcL{GfS+o@N02YVX8bQzczt_ye$FBIIEc|EZ``2m0Vyi{X7 -ze~djYFUnNaFZlNFzWr9#{Q7Ud&cyNSD*qRynEvhST>Oj3{tb$6vdjSgkFQ_pzsO!1 -z8EV(?KW;_ScAIoB^6Zb$o%s`hvdbeq6j^zF?jp4ZkiF26lEbQr*XtO8i*yOvW1n#;Lw>MMYP -zRSA&LcP$%MBr-F9(_f7kQ3 -z^s%eJ_*0#4KD;w$QTohLlx^P(&*)wuqCxZ;+VxP?0Yz=FPdq6?uZQwXq@v`*?Opm! -z+@aR=Ixtu1JgaHWx>Jt4eR>!%Q%N -z<|8P7-nF;#aP*@nq{}y?(9Xyxa{B -zJfTP)Op)u1^yGUDt1asIKsAL0G47(>J-b67lJP7wozuSUs={<;&Wv99*A^t;q5Z6} -z*>ZIt29|O&VYbjl*JEj1wJfe0kE@o)Rg0WL8&|E1tM(jKEn#uh;s}y#f~*-m_dHHSp=J>&S5Pxf59$NQ$eLZG -zM5wR1BWw1N!l+_P3l}VJSfmz}Rbv+q -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 -zGZocG78QhvgjmOcbo~kC#33k%cxFYqZv;`ZOB -zKS0G4N;P9P!fFXMz5qw(fv?`ru|v}Wd1DP-wF$>&f}iJtpQnMZ{>V{>tRq;}3E}Gs -z>2m^ghXnA^(FbqH-hO&9{@eu6UCy_!#%huT=MMk?oI$O?<}jc<=!9XaBUIYWVX4@* -zBeK!*Ff++>Dub){JViUqOd%IcJAmRkDrU+I?TMGhYBL -zskFF-PKm##|2ck>nUY1}+n!{1f7}R~z1!3lHp|Hr@@UDtbCjHRbNZ&@V(WVHY+JJn -z2HJT5GilESDx6pqrd^$|-0n8A7Ql$m$m#JveCv~dlM1s=ZbrL%FV1B}Es#k=&c#tz -z(o*AQR_Zz!d3L;a*PsIi>OwWG+D?u8f}^^$J#|H`fPD;QbFqp){0GDYnM~$f9sN3Y -z(w`5XsCXA__njxt3B&0>y|nfpu6S__RxOUC35=TNilWzr*hiaA=(NGM5zV#0)?Gg8FhDC2X<^bGc`UT=jxyv -z;R;6laMYdqZx49uV!H$*d3r&Vu3&)n#FX?s*!6QkPU>4WIDDqN?k{(+p~hJk%njJk -zu3%akPhftCo$VUSunT08_+MMW=agO!*!c1n<32CAp9!wI$R1$OMK3_(bH7Xb0qo6_24vC-_TVM$pbPW_BkF^ydeIBRzDbyutsM;~BVHH9phhE%Gi7zt`T&JHfBfo|P}wtGW~g6K$8) -zmn1vb9qsQmviOQ_+pXRSDi(UZ>f2hrm@-KMo$t@x5M`HKqEc>u*)BQ -ze&rC*pJkSW72aFAp$JB5{=22%MOaG&RaZ$BiaQm@C0EXMrt4+3){GW>9V_UAZU8O~ -zn9y(THm0w`g)EyG{gh4RVGDb*BvL#6pzU_iGo3R_LX -zi;ZQZ7wKV)C-S_iw9|P&$o=4+COpjan01n!eOn5;l?1X2$Co?v)v-sExvg76wXcwHWB{DV2{bMSZ*Ln$O5;u9EE?V{u7{ -zb%eMTHx~~)tvIi+A^-WkD?kJR&&-`o-!B040Q0X+ZPT9%8l=jE5ohaRSYR!>8W^&} -z#*4M7G?jtpQ4zE5t+HIOG3lak=M{2nvGs$u@@s~3cFLg^KkG+?O1?xu_>OF5P8koo -z2MfcCKl{i09xTC~7^&J}tQz_Kf|~x8Dy5(h&+%eBr;S>1=ov12X(#GWIlf*oPY@H! -zIBk~pWK!XvQ3-*GA;;m!EaxFLO$Lp)g`4{J(l;FXDx&^!+rfR=a7Q;Ghp|V#Ycv~( -zDh9MQ2zQ?v+X}d1$?}K{_TI=rcW>w^iO$qlcEsVNv%dww;2FVNgVzm*e6jy -zPWqK5k@*6daVE4a%6kcI8M#zH>`?+TfH5h;t_)vqxo^7@RQa6NG=}FI%dGb3d*&~s -zXLnWlUST`I^_WHOla3mPo02J^n(Y6k;B}p|A9p6)N-GpkK@T`5huSgm%Qg_SJyiM+ -zTUE;ZPbq55NVdLx_l`fo={?;KrbsPD(**|r#vC((NOn)Lg5?>a=n7{>m%L^ruWDoI`pK@UWEL4zkAx!@7`6MM<*_?vybQ!cdKSsk$kZ7;FFrJH -zHI0O$mUWIy<+V;+>6vS*H@lf%+jzc?iA?w1TyVHd3SlN>zZoa3hhHt2?zh-h6eJh` -zuwp`eTfR*UB1*`)n0VSKtSCBT$<4Q!Hp|G9_9LqRpY0zt*J9W89(B}OeczVXeY^Rx -zIg+1ELr&y541P}u10`}HD5X8} -z;&ghO!6nqJ+R@aB^%F-6n7z|w5p!1M`UossKjxH%wjA*`&dNQK;fT6mZoEygE088) -zkE)VY`YMY;mDEqQ$i2?e5)@cfllaRqca)cq#gQM+ -zy4pu+Ba~dM~V!8@Q_3 -zt!f(;{X&7ILo46r-1O8M3al#WvEJfE*dlV@4%?K4GUgI=n=Y|rXwgQ>de(t-!d~3( -zbqA;rsz0;6o5ORW`8=HLmc!wcReo3M)_2kRZvWrpjtis*(#o(w)t&`ralT;TH?K92 -z4iB~^$DFU5<6Dao%SMGCN+5n0u%-sO$!UuCNF%R6BpRBK{lu)T& -zLiDg+@Ovw|)t!=K#xn*-;6QG|>SV6rcUcw-np1qpy+1aseskC*iS?xhZ50r88=Mu8 -zzuPT{eEys*@g0UR-1jn(Y+9&D;Ttt7W;d1=`TB759LP0Z%zO9so5~T -zb~p6X#ykCi1+ymXke>~*GX8y08J>?Z>t8T;*F6;L%rI*1K!={jEqY!0_@cS_L4&0+ -z6?$hut+Ga2DQBWvUxkPG%3`HnvaEWtTsooTXrlv}PK6D-S}~?GxrWVQ8uQCm-Z~Yc -z6~9S8{NTln-HK^+JbW-z?iMK_r0$=Nj59Q=`iYjBIfmOFh -zJAI=b*bgp94VT3q%n5gR>H&vUG*PQPp4FV9B$Patxr$YMr$n!agl_W56xff2oY97s -zW1aWV+6}0b`Kr407y08k+i40fEge(mAvr>%dHE3pdZDryalj(q4rD}CGf28~P4sx; -zkTk?&;U$;l@Ez{W;QgPfeBm)$6-}X~*jalCO8H~#Ph9W8sQp;g1y&nR_8pM}A|xU; -zyWu>WL!^eM8kE$^UU+0}7~kVbKbVvA)Za|Pt~rp=l%{{SM^JaZ59PBcJ4amO2c{ZA -z^ZngpRd$IVyqeLGAvtEr5EIs^#LR}*37O$Y5Y!SO{Kr2ST)_~#;M^XI;IXsEB0_Y^ -zB_hLT*H?qKBBJy6F0y>wpix2fd9qnF`;ya7H_u-s=&g7>OjW$$PqaEsvF=BQ7i=f1 -zs(snIw)c%fDrC`d2T{ebPT4q3GYTy8Nrx_thx(;s(V7nLpOTsjRGsBB)Og)cL0x!{ -zm1m)`I*AIVKVxsHjx{7ErL0BgL2*KymW;yY#NiV;*MT!U(>Slc$^KBvsZ>m+W>_p85NoeQL?25(q=rU}G9#hBH -zSS1%cHZus9MIY>7pXu*4-$vqJY8kzw2h+0XA<}; -zZ@aJ~M=o$h&2b$ji)ugMPI6JAJO7gcnH-;!yA62~EVb9*XNY#>;W-K@GClSSs$t(OdQeD~t})2Ii21Tk-Ft4s^; -zGW_TVq5Z=kvb#}XKl{4f|nCiF>oKl%k(E}wJ{>kg>o?hH>F?u_5zP6!-=JR|xWVTx -z%pQ9>IEC)qUWG7i8JsoLrE?{2=WY}F@-YBi9$ns*+RHZenLpwS8*QpfFQBq -zgox{n@oR?_7UF?AsuOxmL}MD3lW>QJK-@-#z?7nXVZmV2YbmW5`zdq)50NmBX8%oZ -z=58NhI{JDM;VSBSIL=D=Svx6J^jRh8hv>5$u=U_oJV%`EMX+$0^@Y2|%;=S+<9UZInEuJUQJj`VxXtP+$pGUeFGb7&0 -zy;ZbnNB5Tg2ILgJIy%4NJ9>J%6Bp@3t&a7%r4*kQwua(B`f95a4e3VBj)l3L6krou -zQ85NRz4-~B_`F8PQ8p?l8A(+88F9OjpC5R1q*$7#_Nj9?(1Mg!^D+l0E)ut5#IRSKE-E -zmsu}4?MecwEl5++dF#o>ErmIsqksQ) -z5GJt&GoZNqCB(=Ea%=;4pq00mo&!Q26a--uQLPtMsSL5>an60_=pLN;v*xgN-v<;d_6Nuki9XP1KU -zb+HN*8RRh8QBkNAA>=S$Heha+Jp(3ch!T>~0*VZSNZQj#?rc!uyp_O9K}DXdjhJQ_ -zHZgSIk`_kNJbWh^iTZ}R?HF|k!zo8H7(q_`JB!2rh-dJPJ0OlfSI|9L9JPV%dl0uO -zmXWK@dj*?%9&)rY5r}A!4 -zq^*`PSe)>m3zGq)@B;z)7@kNWa<_EqS4vX>q(2P(o`JbE;&MSW;>!}U+zl%wyt(DE -zS+)5aAU7qS=<$p~0Rg~u;xs?tBvFqau$Ops;l3W@d*QwigL2_MnPLU<_*=tx?$J}z -zbLP=jBY);mU$cGcQBh-e>QPwp$qmR#jO7L-ClYf5ViIe)0RAxoTmZksX-)tjQI8Yg -zn0UnjuuAmh02n8tZ~$}?bJ+o^iHz(3`NSS$Pl*&p=tYxh0TFXQWea_cp -zBRfK*vlZpxh+nSr^+_={&Q-hSpJI`mYi+X?(XQ4_+J)8MtLM#Q#gN$62$sjVT!-o@ -zYA)=ngRO|Q|0~Z`JCpyfJU5Xcx9PE{_QyBAlLJX4_yRh{(|gfwVA(Rx{Y!x^qe3mq -zOVu6bjm*)k)gjM$4TuLKZah0u`#dbOwIpjJSCgp;iJhsbvhp;dW2Z85c4-4sDbNaa -z&FIt+Ga6jUg0#$jKH`*ai)v>`pVlUXo@*glC7L#JiM~d8Au!&Tx4IZ@+eJ+o#E_t_;v>cDNj;SDht-gDp?8fK(@;g6i8FTi;O -zP||SmoK?kophWtHCNxwfMv{<*768Rc4ilUpj(|8Fg^Ib6Nz!N|ASK#b;2BgbMFQq(srX!kAMymY`m7F@(O)s6I$n7xA*G0c@}4TJXpS*nboFs -zi#=4VoS`akF~R^5{fl*d1Tr#0h=aSJo6lhX^q(m8;{ym|`7A_hopL;yHK*1ptO4|E -zKleF*ERkZBjLGyXTjnLZj`w*ZYoQB7%?9Lmo+{KqJ-+NMvwHe0LF>xJm)G`cS4p8q -z^7K@+e<@6WE|sUJZ7lL=`uSU}iyK+88>ezT*?7taRqtE(Xa)Z$AS3c0Nu%FOGKJ%d -zsp6CyoqPp9Nc=@-FoiH*)RVk+TSrcmH;Yx!uSuHzFzMd~1=S|-B5v;cG{Vkz4&(X1 -z*NJkca-~ZqCZ2n;N-D~#2I*h$F4FQ)SJIUv9hLOW^AwEgL>n@h;{|AdRK#7V-{c_` -z5ff#a%DuF$i8GL{DsrSKhVyro`o@ave%EPQp3}cBsE`%@ws|av-^$bpqzUXw-rcAr -zAF~$PGWPj#Dp95g5me;FI`tJYNahd)JwbKS;L>6y6nGKhk5D%u$dIUHG!i$IEwIFb -z!mU`iCjCtu;%-<1M-e6S;~#-;>mR{&Hq5qZg%IG!9m2b_2=dB -zD_>L0G_OUhCkQHkua(^DF4?-&xs!>sgR9#cuGmt#6wBs8B&f93lkBtvh@r_>q$;<> -zcobv)tQN8;mMoL3!nIHd`!BJH8rH0wO)q@bGEzag#&KYzH41x0v~Q_lEk^1^nX} -zx%!_g@kWgG`}?Rn<6m~%KeDwum#YD(leP2ru;=%$9Y1TO)Znd%<-a%LX+yCA_ec`9 -zuHZsh`9{p*5bp?<4+jNx;EsaMq!xTwc>1q_>cD;W?p@d5&ae;nEd+lHI*#N<54-S( -zt-1PTcR?7p@4YD%-w=QRz7Vgdi$YF?KT9e&cVuiaB%bXRMF!^*UZ%_lJPxTY^cL=% -zA&r6apSr-0MdQrx9dqp|eJ6g0D*;+T&BQ91(njm-D!%`641WCNJb$*B+S)nAn}$u} -zBD9L>_ZG8I!ix6PJcR0^8VZ!QasML6q(4`u=@-4qh)kB8%iepfX;vpWVv4c&>P1^L -zPTbix2dP>+D!RmZd^Ol&MZ?FuZkT4TP5#Vgq!$~@8d3q5#H{jsFkCkxRrKBU3EIRD3#q*7CQfPHYR*6cka|f?8h|iR{Q2k -z6e8ungD4gXHlq9`QABxy9D*^FcIHR8NU5r%V -zd!uKMsn+vQcjw}VX4j)jiGbrTU*cA(X!QK1shwS>0go)n`iTiT=wC0>SVp7kcB+2` -zr#AO;TYu}+)9}vU>0#WL(34waAXGAyu6-F4R=n{QprG*VBHUA7lX94z(Y9mlI>j`E -zqcuF<;U2)-l*o8v`pY{ViQG1hMr&rpcuY1g!1EU122fQ?;2#)GaYdWn!L@K-2EQ6I -zmCX%>5-yC5uMP(RN_~uGIFSFA?bb44VQ$jwp<@mjlbQdP!JYg`XYY%RE2XGFK)aV-4&!%2k$@_)Qv1GE~P6QzTl~+ -zB^J(sUx|Su5?HZQrEt+3(chE7yw9Um)rLCeROJxlk%7zM2$hN#BH4=|H652&f+vdW -z`0x*NKWaJ`rK5MwZnDqePo4Mb>tpVX6!Z0x$nufO_;?CP5((>;KGu54euc^&^zdoD -z$+7vkc^A{#a*>@t!pFfu9W+{ozwG+bzG5F3%s~bCUmZgwEJj>BT|P~LX%1G -z2rOeVvKHAv$`#~vca(;moI)Yw;5y9dRVD&uClQ -zDRbrVJpIUwpF&PHIphmpmFe8?zIIE4(~_YRL6Ku(8DYG%CPlRdI+z@~?unC-@SvRIA@E5xTcl7r; -z<}y%REy*Jaq>`$koxV|7rKbtc3qu>Z2I3P@P0xhvEW$zpE;*~S6m#rcd8K~kc+Trr -z`M!TEH!2r?rD(#-SieDC|891*XQME~5VT^M_YTu;Veblubm_Y?TuK1w*DBR^9J?yX -zvKk94*)Sf%DIw6^uKd#)RJ)YZd{6MMUFnAJQ=-nhXq-dX@= -zMUl>M2u^v+hAoBjWT^3Ec_v9JMEgfYol3fcLx=YXKq5B!tE0td7bjUMow>yQipP=w -zq@lyen=gre8FdS`?e?3Q@(y -zEkBsAIzOUpakR5LvQ$EUw&SY^MZsP;EzwWGpJW9GP*FO6?F{03n~->J2o$-m@E?>x -z=U>{QTBQ~Jiq<%TwUwSHKhW0}$#Lap$Q=tJlkxwOuh3Y)lm#6o!&g(_s5mP3rNCct -zQxlw6(mnF3s2phW*6(~X-}UKnKTe4#7<=(57lv5AgM#l8sn>jdKZ2yA6# -z$(@p$;zb6__&O|Rv*Xtsv|E050%b(`aj>@h*i}os?-j#7af&EdPYR~ -z3PkG&FLM>vFQ3g2@9GlHR@`fm>DU_WV=`#pjMViB+`@5IP=8E22 -zF5WwzRy>uBeyJPH@2dzc!5;`^YDtts(VaE*#xtRb06v<5uaS= -zrMi6EU%rdlp`m5BJuKtLirS6X>EY1YPo2wKLy2K^F$O^^M#4-d#gTX%Zla(3Aiixe -zrYT)pxI>^uhi7ElSntXo%9V*n_+&VlwJ4iG(c-|3PvnT&jj~*s1d7mPjbGDh^??|X -zT)%h^>X5uI-FjaRZ?#cWx;NFvk{C8oajnG8X_2w4ZGSnai?pBxQ)>_b{&_&KXWsE! -zmU-y5$Zx;3r_l}OWm!kb!0f0OJbVoQ7III{gp*Y -z_jzxp_>UFZCEY)A?=#$5%}YUd#bin?WHdj<&4<^a*)w2GDtp}5YTmK5_=ASvSDY#= -zW)}X1$W=s6eVGKBiKZYr`S!OA%bQ=3=Fup?1%t&y7USe`^~2j@toGp;jmeTwS#+(f -zy5_3H{NEVS@I8r)wnD`vX6t2BF0z|vw}h)E)6g2KZaq8hF|eIMb7UrTPou|bp_ -zAd3EEYZO7&>;xwZcRY)-$K>0g0*)a1kz7s0SN+2*E5_$ -z8x{mr7@}P^wBEnGTKI -z%r1MY>^lsD+BJsj^sz{3KZ%vIYv}f8$`XUAA^AtIhj8UJ&NUb=nOYCWZr!QJ%D(!S -z2{%V0=;XBV;zCHKAT_FMP*TCYw&;J%-&HAFXw?cs| -z_(xHUCFytw=^~E=@0q;cQ}=5u!oun-m%zc%-^I5byqGvygSvF}WkbR7SWUEi8pe;H -zKp8oTa73K^G*rYl_gO;Dp#4FMGW{qVhjgS$7^5H5f_q}WyA(okrtJfgwXHOnSXwb#njOy2m)(u&#W~bX$@qa|-E5|aOcy8kXkCX>Tfold&>j-wW -zew;8XXTvpox7%NS5PI&7Y_@n?Zab888?C|S+-QO#;A0ovWG_0~8Mi=@kI#GFK=<7L -z{}W(xrR0O3r*szZNp<(gpeKF#TQzmt!@VrwVY8F*y1OB`G%$+Yu(veEg5Kix?*;)K -zE9bb`Q;tD;dFllV(CW#NgEe_h$}Bf})ZUz^bNofQUdapNzF-Dev2Qs{PSKqGc0hd? -zf09sYt*b}J%&g1os6o9pjh2>2Ciydi=%5Jt>kAGGBn`P8e6T_wV#uno^jSGkR#hL8 -zR?4?z=9*MuRndcU)vJj{ig&2DgUP8}sQ!6Ts=6s0SGtp0ryb;zN~1)A8c!XRZ)j=X -zHFU_T66bDtgR>)7B9crZf5EM2*BcGWMqyzHmp$#nnznDK$~|YdvpuZ%`-e9njlpB? -z#P?z&t&oXTOKn2DVI-GgRPfOLgFTJ_Ny|m_XNfS@eN`its>zVs`?*+`+0Np1;igp& -z^MIqHqAYtS3WH`Of`aepXV@9%>|X2QK>nz9QEqvA4%h9W!E5nHnzs+-v4+V!CK2em -zesa*mpt1C)e;|AiDi%L)d<@xNN}!8~p;P18XA)BcQY-q3IMQp|MPGCgdRCD;tTZ)h -zb1&2bjs$~aXD$k(81aP1DE^E441*QRh58gxE;dDg2u+(=TDta=F7{T+tmQ>M -z*tia)t!XypjvK-~+eD`7E7d!n;@2~>S^F~ur-n$HQgvrDi}GXq>O`!iTrrV6Jg4uv -zplA^%@y@X_IdI)pc*9tLhNC!e;7J6hEbPCVqBDQVD12!>lZuw=@l}^IwF!E9jfZ32 -ziRMy#dAE4x(@v!(wxSIrfNv#Fz*A*Z{c_!#qRQYOnw)h;A-AMALPk;OCn-uHbFy!rU~ -z7?s(qwQuJWGHYslqq@49f^F0hc~TFl&E`vQrxZHgFbzBOcr|%$j8S7K$7*MiHJ4Wq -zVJ*JtvFkq*2X7=B3u)V=H^JB?F#HKJ=XMC{1Gx__VO){H-M7t{uusURSrANJr}%0c -z`I1719GWP87)O#-UuUl_Bz+sVRp-hrs==K4;8sSgpjWaWT`j6n2B~dZr?tyrWYpy- -zWd235C7imDp3}}H9^w6aOSA=5{nru+5I$AaVpmXs)kpoHPTwVA)J$cb``7ZK`7sr{ -z+(u~D_X^+h1x%D4zOn*`dmtT4w`#!~zB-zxO7nw(5s!f|%8wzDQ-7Z5loRb49e*nT -z(Q=#dN;uZ??J<(Q_*bQ?g4S&mC=19ah5RdBhN-Qo -zWsSkTZqY4v?;f(~*7DEwghgos&+Cm8q1S>+jddwvM#~r2vqKyVI_OfXa4^AHeTG>8 -z{gBN(*IaAoh==EMyHICs3aa&4CKvF01@dn+ez#}EVI%6Mi;X4L;Ow_Lc -zbIDBdKQ$X|{ku{ShE9XyVFrXX1RAk>jDsS`rCjGbRqdU1m#6uZw@akPe{{_|5=!Q( -zjtA(Oax5r&2!1gjZf3kkuX~z5?ky(a0yCkCE=qIQy_l~v)OZwAR9d~Z+w@JQZ(Z@x -zyb^sv+;wZHdakTQI-i1v8}VL|+6efoc>|srTS|}iu1N6ITNv5$w7tDW?&sy*8jN={ -zFcv&MUnUEz7S3^?3x||M#A#JcGeU#U!)DpQ)G)I;5~tmt6>y9!oUI2DSL=K{={>)e -zj>Y2^rfYt7c -z-$_(XGgR}hH@)!6{4&n_=t6}Bx|hm#9Joj^=^YjN?QryM$cLAo>FKot`5bP#G7j>x!-aUS{l^Vf%?)hD_;jG|Yv)W^~5C)}T1$x-}M8hb7~$v%JE -zmhEj-{(LPtw3$i}O>Ixn_|~DyQxusDi#sU_sCcEo`AO71UTKWC+H%IKI4Z)5gk_Qv -zkSjO*ctw=!>s7UNVfRmCCwbM=@OS96wW%YQsUec@#XD??>a5n!E+Xt%$+3=u%tA#$ -zrq5p>T9t^^+DiGd*AA^W-rvh!RoJvOA3|Qe{e(Z=Mexk2KxJ-kwR*&DJCTUu+iTsc -z_p&`+z(U#qbh9q)na1z*D}O&e&%3P>H@IA>-n@N+OFCNzYN$iqbF1RMl&|8CmZN_=bMJ?)nZ|lE}nB=Rx$urfG5KI-qFr+8d}Ap -zsJ2kC2j;yRD4jPZLKAxn9LmOfQw{ZlZ|AL?;0WLng9(meQLJeE^=$&(xQVQT9W-t6J6>ny`_Q); -z&5k2TJIS=gI0Nhj$I64tuasDX9`eeUb-S$Oh0BV|a1_#0b4tm5Yx^`H6fXN(s=)dX -zf%vNNTVp?8=R;v}-bYO;@|{+TKx17>Z+8o=f*u^+B75T;Gh7Mj#@D9E%1nHRT=8|) -zg0!RGtzCdu4mw-g&NI#%wK^qn^m7H7Nt0Qb9hssr31@<2lt>}{u@mtXz*HmaU+q1h -zFgDMWc<6-V2%1xaUcm((qQqj -z=)Kk+C1_+(B&B|n>Bbw!TpJQo0o_*WJ8_+XWazmvo|U85#`YjhkST=1KBsKae!T7k -z%cXknH#}AGV5qTEAZ4;rKDWMfS@=q)=oCo8u%mDZ#uurUPv;0=SB|jr^D2#@shTMg -zg)7HPjUeHM>oD5NZyH?;sk1?SQ6a2e8o113A94J{UW~D9mPJQ4-HtJ!QLk`PL0S0t -zbuoT4n?|0hl#znI*b*z(L}umv*kRSaGb{=7bXC_8{^Ofy>m2NmZk -ziTi5Dq&^4q?M05Wf{VDX1fRvfC7l7|^=&AkNbnJ&mQCmD17~YT_4pkTBU_eG=h0n` -z+@*N(iO>=q=X4MG1&QLVSZap?D0sP0DBP%5Q*AsKu9VU&!Hk4kPmL%eBRgAVcl0WpKRH&ki59R-vxV{E`yJrh -zoLrXL#nz={+<*gh%~xN)=gvXp)Ot)%Xuhf?d?<042|gGpAIyaitu_}|r&oQ}i}Gua -z-Z;|NjP6F}qGx_yb-}2Qnx?6@q+SBy@402IXub>gi0hTtug7!K^F9sQdi^C)kH+Uz -zUUMzd%mJc|n;&2#66pnN+!xESd3LY?!m6CoMTS;ag7os?O?4cM&bxTdMng)HQDmlB -z5)jgrEy<>|xI1Oo%%xuAkWXW2Z8GR@ohd=%?0SgyA;~ -z=m3857v}6*(0;CZ#DEpEyjs1oos@gtq-7~bh3zy`O`F}Bb{vKG%%Z{88eRPbw4I>i -zs&Ix~X^~wjnwTk-Cu;&uQiGXmf&i^nTN`XUt>k- -z_5l$8M)td-qsAGq_wh-mp{nU%aK0KKJ` -zi_*Qj_e%X^y%?a@Y+!%WZJSwPvo+h|U8E-fu9@N6lt9VaSc`5`wMt$vwy2KtdyKO{ -zP4(?+_qfknyj@04?7v)p0&^#j7WtI?fav30SJ~YNmV8E)_ckqjC=DHBi$NUfb6-~} -zoDiN1NM@!_&j3NGThfk6u$zU_swP9?MRwv*rO#(^CFEh1-5oaIi?;gJ4p9cu2LWD-%TUgss_L8zJA_n -z{YGe;i1^m>6a9WQj(n8E<3c^i;K%*5rkhTon-WE9fe=cm)6x@PMbMSB1Ac2Oh(1xg -zY-`k$p=)9;3a7+H3SVH6+}zElY3nEkqj-jDTntf;Cx*D54t%Y>2|&Uzs#wZYI}_Sk -zIJJ5b|0|rEwspWFGeJl+Ys@{B=oJTj#*j)T#&x)nj35;jN?oF0QIq4_8!RjGRE>(< -znA=GpZi{2j!Y|S!4uyv8%Qa~s4#hh_HZd*7l~O$Z#^aRVl?dw@HKmh=(7@ta&Nf|DnSNh%%-vk -zEhbVxK|JO2FvoG8{^0DYTqOa$8`ja`87IIGLJ+?9V}Neo7~8O3SiNVI@JWFZKghOo -zoH-7i0d5_Vt9!BBi7&FazT8bDe~W@hoYyP{)xxD7sm$d}vX>W6oV7&VU!EIt8?P2O -zZ{?uu*9$q8Y>XmtW+PbiK6sTRV5^i}Ej*j4kOCy=x!UEo0%TPo!CQvdIfhv`Y`&hRkNn*#Db9uN)DEpgl00uI{5QPnwbL)EbF=YlvlUsYv*Q@H& -z*QfGim&eP!&X3*w^qw6D-A;E-wKeT|piVA8Es&L+e}Am0jc0z^z3uWVM1A4`(lk*I -z3-Eyr4zDKZ$GEIG4%H8D%YoOdNtR=Aua#sGWRTVM^NBg}?E%{vr?=gsvt6t8wq4k3 -z<;wcd#(MEu=i~b8>ea=8oWdK1!0~cVpH*tZ$I5Xu-S#`9My00?@QLvIWVDaUO((JK -z)?jT-;&rIHuHKJ9lb#RRd6nDj&LDoO4%BmHj$V&8@7K>V&-C73h7L{`kE>5Qb0unjA4I&t#$H2hPTUNT=Q!P+9-=JA -zcHS>8t}hFC9aS%Oo~d!x`gVP^G<^DeT-0uNb$Lj)-t{=Y+9ms!>=zpx&}w6^zK~(N -z{119Sg}*M=bl*DR+b=%k@BZ!QpT3(?Ez{6{Z0$O)`rC(rddjvTeX&9SYj{j2?$)6w -zX}>>Qd=TdT-OH=1yPMZn7yBd6qMKEbK4#=MH*fEL{QQAQTf2t#!`LD&Xmk<(QP!kt -zWBq<<)MLXRpKfHL58v5ijhF8lKCbIeYr8`iYs9P8bwGD>=<4J&PHmN?fa4D^$@%eF -z9!y8Xyh16eRTvGw(4KUaHcU~+-gr!o)!iyp$@?gKck|tYUuEI$>j&SB5NeGR^G4hL -z{=4PlrXR7YYMsR4HKz6886~6jJLJ!YFN>c`S*~*xt_!roT&HUji}mLZBE+ZlE}{Pq -zctXKNP-p^zTYa!DAO2JM;pF(^d5?FZ=sH>m)Zi+^ -zbpszS9=e>zxAzMMWiGB&BkfdSyrHk!I!{@zJa~*|r$p){Xq1yN!Gw!ChN|a(6b_6= -zC`FXjD#~yO=ybHutiYjUt^}rIBV+w@TXTuS?^Pwec&=BWdH>jF#JUZ0X{SnXXC24I -zdOFtA6VP9TF5OYBv)7%dB&f~!qfz&g5X;rwtJfbqa9vhT^PB(Ak=qttZ5V0xmKBNL -zuo{ctaBXBnM(4VzTe((6wf=(PNBT6{u7#vE6m87O_4KEm{#i-%kkRu`%!`pIKXU03 -zQE8(@zE+Vgk$nBmOU(`LW@{ZIe= -zQN+JGe9mS67aA9nRERcRkk>N03E-hK1;x(M}8@i%`yJCPKgLq(4XkpCZwX!DSV -zM7c1Ap3~ob{z-OjANqR;^Ay1YCJ4dq2;l6sQ$jg^b<~eOL~bk^tI -zCb&lIv+tV;?uFZKi4|89lg^&Ry}mUcPCV^axLb^XFWvfFFV_CkV+{135H9%n58wWH -zZD0GNsMMOY!QaDldw2c4v4wTN#Q*K}&vpG%{4-orzy1AB|Lyf}-yN}_7arz~6&H`7 -zx$*RR8>XK8y=v~76El}_DkEWWYy);wyVoQM>EBcL^HF_qVZ-!_0CW0xv}(uh -zn0_SrBmR`tG9iKJ9gU}$>zhCSsS!1)?RVc04iM#rBFY6lDOosaN=e^nC_}`jbHy@$* -zdg&Z1Qr*pqSQf;NeHIsNWg-Ro34OIJE!PA(V_C1a*X!XI61`KYEp$FW%aFz>?<@(l -z&3gNCO-w|?9O0<(y;+loq@#?;xxU`ITB0s3aW?n)+r84Ay~Iy{_;(rp(Ng9*%4D?p -z`(J+h-Dlii|5G>`!C&=ZX^3;{DC(d255g3cD1p2o2^WWA_3?H^kd-VX+k$TWlk*j< -ze<{*GcIDg+JHDMUs*-tJSOSrEXl0j5w;K;xPrC;U?+;Q#mMg+|CYa_3%`5!jjfXS=Ffk7X4oD}S%7$UTn3Lc -z?D(q(J`2o<>Hqc*KR@`wn={kzFI<}TL+`zL?9IRXmw*0(TOaXQzcLVK554fr5{|BX -z`QR&GJ!om^!bfilCjO}P84R79Ume;>pJ9dB>tW^v=d8ln#gBOD71Sje(Rla%rWgPH -z#l>URU~#Z>6NrQ`0n$ER*gs=I3iF>Ju1kbqU(i)mj=UNw0w8uU)pdgQrdQ -z{^CPL5ap-X%%gZVrQoz%f?&qXXjr^0&Bbc|!-wz2DF>HR1?1+r@VLL5c|mHO0!R-| -zkpD<(+G912f$h&b`D?4`kGZg(<|(Wjt6biB(;(W+ojOnRpoJ)d`+Oq6@I=oRtA|8P -zp6X$QYbsgW-d4`i=%4uX@Aqq$zs$p>eJ9C_5A(q)9oqK6&CXZuE?kgpj{Ufi -zXYSs}>mS}aYFxU27G9>c2v1znl3+!jWxnK(?nGcy-OXOszy~I7Rln3cyTMB|n(XoG -zKh6xB(F?dV_Db69&*jM?l~mo|yY!{^X13gBCuK!adm~}uxGdI#r1TLvxa2+byLQ{{ -zzk%5>TLIdtLZCBtU|Y8#zXl}msm1w&vzZzlDUsVe$UZ}~AN`P);x^jYll9h_Zk%La -zxC~vH+p@{p(C%qi>z$GFy~=cjG*`*pUe+ecW*1~C&1_PqZ6mOJRjtXUZW0l>g*;gA -zTxFYdw8ry7aN?pu^v2cUb`dLYP7F_sh2y&UM=;s)QyP(PM5xU1ePU+YN&&6X}&=^H(;u@HgSUW9T -zbm9X0Jt`WHPpRn80;z@Qj+O<)U90?C+k9MfJG(o4S|?55)31+CDOXLC%L}t8L-IVyH@J1vIqKJe6V+;CI0LpaC*1ARxhi9gr8N*hrcEw5p8us -zD`=gY+&Y8uHar}lmLk5o9uIJ!_F*_QH5PDj1ho-SCXO?8CaQ}2RW9BgsXEFf%>V-& -z{=6e9BFJ%MWW75xbz-fu(yjvQP}~U9@w|_Lh>hBr4s>yF>o(SS^zwojeY1EIo<#x_ -zu;=i{&Biiabo6CNq3GOIfUJK@L{IwiBV4tNN#>G2E!yI^xVY6)xf36ciEGleJflpT -zW`XcX{4LUZs&5)nZuLp=QIcl1eaaSBkY>-FTSa|B8;R7Y6WS^iVRv+~UxvCfH>s-g -zb7C%$;2uY22jhh8{rxQgwfZ;*;%E%rj3xIHfI?<~ZS}gO>u*79#R7X2Qq?4S^p2_G -z@OM$h;GS? -zgWk%rBu=hhEzgC4X@d4Aj*$m5gM-BjctV`gsZj>fUz`b%cHmXz;sv2f6T4N5H*=FXj%fY#|X*KeBZH^+2186#1)#C2P>6+5XGr=x2Gb%IzQu_^>iQt{@^@~>oZ -z6iOeFt2u$t!^!O0Sd>Rdk?aPA0Ds;dfgvg)sI$E06MLf;YGiNu|I1;c8h9XB)_{PxY*p$U7Yn$F7~<9ei3K2n -zdY6~cNR}SpVN`gULgpeoGKSfl);Wpjj>9gr3}iq~L*ws%(z}1vvlX<*aDj2vr*_Ez -zBy|?a*EctBxj*1Cf$|~nnNc!ZzMvKz*{eY;w?~MMY_cxy+GT|j-tzZz7-wZ}quZJr -z8ZN<7$f2bnV^P<#yn1igjXVK)ypFui7KkK-ncFbhweNa -zyPOMGqHrjH+oCGOf_yPrc5){j&|5SFbIF;&iwlB!YQMjW7Z^>LMlQ=@+unNF*)V@S -zk~_veX&E~dqFUau;_CIy)e%mwh>_A|HK<6|mmT-ET-XY_FA~kPJEYa~pKg}5N-j3X -zbxyMjc?T9u77`?~j@lyz6p^u69C0Ud0>!}*Y9RUtrZ_^Tf^@aq=*lq;+bnCg -zMs=cCW^-P-Lfs{~*y?&==|f>uT_54;-BJwC-br5G&3vrYHhA( -zQ7HOqzGw#{+q)O?(J%ha+`qfNyZ*ab-qGR!HKTJR23mFXz0I+|yZ-(mci$8-A7jbI -z!6IH?1in7u%*`mBHZQ`?#@>JZ;`cTlhi@%S#H*!Ovq_3YwZ8brfB4-m|NKkvzkm9t -zfBBbx{^?(TnFYyFl(iK_g<^C>5WGa$qd7>Nx;_+~?j-C#T%V4==nk}Jn5Jo+nGH`P -zuygv)oyq_Dhd=!CfBxm4fA^pz@?roYow+ -zDo384%df1;bVhDZu*@LVQLWgA3#4>LxWA37}hwgeMG#?rB&SVeI?_cuO$+@ -zLy$0^(gCkud>CcJ92DV>_ShK;VW5Rx88fMyopr33W=5Y`+ohTl)G>%e4jt161h|0x -z&OK$k2$$nEz8t^br5)z7ALh~yb2(b@Y0BnMIA*u?t39aDD5(qF^XekF{#uV(jUV&X -z9?~z|*MGuL)A#is^>wMhKgd4iFR*x3E+UyBZd!k>NA-o2AEt$rU-5Blc)2zFdQV#Y -zBfrg0@h^@1YJAj}WYEV-mpHHD8~fZpAR_YzGIM|W%B#8jc>CJUo;6pi-YPVtsYJX~ -z|8h+qd6Z -z$@vkfo?B&pHI^p0vxeY7AqzX%<^vPDnBT!A=&H%(!nGgajhjti6*ft)XwNRxst5>P -zLRWsSq{GdIq?*w+I|UEs?S7PTU|amnSHhzxUJxus&}3~9mh{)b#bY(tt9NLp*>(Lz -zzwf^J^KSwXRzW7r-&iT!5abMpfBpTw)e(-DUF=DXjf} -zW80?MO_)DU=PtChFrE#XFXr>F`prG@^Zd1I9C=>*xr`gl+FOrLbMnxGaLrOh*kVDL -zyMMMM(?vLV!RadL6$(ibKy{)F>wj}ExHCxE*^z2@dsu=FTVc2#|Fu!!B>Ojn7XAN}Iu -z^`b6=<;io9GY~iT3%~KyleR7uI%Xd%av_a0M$M0qa3S07@F)x$%E6me<95b&Q*u%0 -zIuzw*X~zgM)GHL}%x5S}1}K7O9b_k(wnlyCk)=#)Da$^6ZC;X4>Rpgam#;Hl&h}0% -z${pzWDAT*;U#-Z2;57%FDFfB4&@5p73)6Vrm -zKM{0`LrGw7iD+>FVe)cwWKH>Z;_aJPE9Qu$@jW>my`sq^DcNRvK70Rbs%`yO+ScvD -z&s$Z~j|-H7ACZ8(;&P~kABiN*iu?6{{!4+iw!*^V`R^M=Qb-{;*mg?z)A@DE`Jg(!387d?=uak23~Pt-54j#nR*_U{(6^k7 -zhZ2z7y*{RaQz7_6Epss@RtyTkN1QB*5cEaDlla;e7wid%`g!zA&eOejBiI+V#fEi{ -zN{Bc@vi)O6x{0b;Oz&9-py}s+<{=qF&p~DFLtIoGxpd(sR#BLdJh{sNJXy|_v33o>F -zxX1rK*P9OA@uSk6BUq3Mif}qg?M9=`DaKP@?L?l-1_wgB<2R7UoC*IymAO-KypN%% -zQ`m)`u8A-FOu>(#bSb-jPq$j%uUfMwGpKbvarU=jD@L>`w%ZPiW0#N*?C?i)p!{WL -z8nQ8P0<}NlgjRtzub-CDnI48?979mjA3-8NweFk~-h0}C)=b`?H9rvxO#3<>mJ|co -z^RVf~Xj=(gr1TPYtlcglnMsg>kK^=}*liUH*F_5%vIdFl{9!|)Ot|Oa1}7Wb-~>@= -zl8%=r2S)HHqphKZCl+n;&J*apNPF%h5^!u_`J152oug8JIhwh)#fVSr^D>mh6ZK#& -z<9C=IoUxw>2Qs18+^vZ6~YzwCM%*q}c)DshW8fu@I$h}c~+UDDNnfV2_-^@r|G6N@u-+`$& -z7# -znGrKGTlOO(Wo(v=4Uw7YF)=pwy(aR8#C~cv>?cOTevF>?GXr2hg8Tb1xZe*@em?;B -z{Q%Ra!%iUh9CSktj%7CJ~zu?et%7X~%S}o#sZ@2>dT~QY+F% -zS!Jn{gmkbwddw><=(+(dRkbWsTTCz_vl>v2VxVk)vWsc&nZ8?JcWxZmb#LE=Ui+~W -z_i~lb5t3-$;-#F`%_s)ab)v~ku(%yM10u>(nsIoOdpH6kSmtbtrj{NF=9*vJuey7> -zhtZ|HYhtZW1NZT&JMHBWldpHe!mzgLoSftd+jS@eprf%2##9ySdpTwbeqxOiz# -zTt|jjAh{*ynI*s@&zM~C$HglS33tIjwbxv%97(S)K76{EuiY}4&+ALaY`kn~&l%#t -zvF6$1$hsXc&D;>5$h(8lXZ(cJ`~n-C*r`= -zr#knnJi{Mu#z=}T-#U{G2M*>zQkMwkt6qzft)ySJTA7boV -zTvQ1o+x&nT1`NEkdwz?S{F4hZ_k;i(`7UR_FMBeVgvZFYd1Rgo9?yf|&cq6s&t>8r -zJqR@QzS8--FMCdxRO}+4Kj4|M!*wpFXYSV{^5pQcMd7sUyPaJ$F*laPcJJj~c;m6( -zcTO1xUf?64^@&e-K7qkQyuMiA&au~cP7A#cd0m+L;t(}YUCE1+TYj^dn|Xfc$mu)} -z0eKg+PusBnd~^gp-{eI%^{60t{@{`SdhOdB9)JXPYabuP`MZap(|p0Fe(-}A?7ia4 -zn?3iD&+ni8yg+edr~3Tvqo{E1aGwi?vHN`ixcAQZWr5;c^9Qi1cht{*nYiuekDK>~ -zdDJ>iLIHEW7zYNH)WSln0G88yBj(|Qg9z^2t#ZI8qiDl?j?>t~T!Q*Y#M10%!HMHi -z`Y>Fv#7}+j;*cz6p^SrY?fh4>6%-cAf=_PUtuvJUX`KBN({+s7at{VXm`K(p;JiQK+N3VIG}Ye4Epcna8h| -zrQax;wR}Mz+d8&dy@&Sr{o*KjPeWu&SN;0MzqC!R_2$LDqAxpp;NT1Cc}BN2X`Hn^ -zL~t$a@xXnhp0+o0NP!)P{tGuu<&>sx~J1gOfu -z-A&&IcsRHSaTE?EtWwz=sr{JG;xiwFQvz3p&u#gP@gMgRrEXNx1*EN2jwU0ss*b0B -z(pDMufalD!nEyTgCwuPwG>bWm!ne`eALS2G949}%xp~4Y=C@a`-rz|4{>gnB^U<=M -zwb8`ceNF4BgUd2fo4Hi6T9xU(5M?X!Do&W;!+H-2uwNQPv+bX&@_zqG6DlnWgnn1; -z{eIKpqbdl9h;4h%-E>wB-5+Q2UXd7DiF|)o2Ep4aQH83!&BC|w3SY$6B2W0I?njZm -z7Ri_svW3iGR#*!Xhg5n@E=Yle!Ln2(QHt;zmwpy;Aw;b1MBqck)yIGJ5@^ -zkmB{HmHSfPTnqnBS?T|Z>iun-5xuOW+_zQRm}aY2wE=RibyTVihBk_a-lo^#^{f1c -zX2XNNlvm-Kt2cg5t5A<;H=dg6pJ%rFT5p6&Yf*?s82p-V$zqE2)_rRHwN*dgB6fd~ -z>@Mzxzaz$){;IUUGw#2WQ9oKgPu#WjpG@RZhWyS)?y0NX`1OoMb|bp5(3{uEDopw7 -zAh^lHsEEX?C~iy~UK4fJ{stlMZbd^&m!@f^vbVH(H(ka((pIe?qXDO=wuH+>N#xkH -z136AoriKNS#=msj8rt_}^jqaW@bc9}xH^_5CbgPtg@}Gww;OsA$$*jxANYvAif)At -zaf+nkQT%?z(*91yGhvritta=FDK0KG!NIO+w9Zzya!+5m*%2PuAST?Fx9x^0)bCu! -zL~*~*T2Z1;Wx3jxOk^z)S)^83?LLtiX*T;znER3#u2DftWI|}lkf6%i(R;UM*fWj} -zy6qLU^Ls;9EEf{mA}U)*_$)7;<;AnSc$OEZ3oGrfXrqzooh=Nd^_nBaXG3Q* -zo~6gL^zhPyPi20V7|#;pSzNnbomfoCc3ECv30q`*`L -z+&s&GXBqG;1OCcnz -zuTn;g`TTOu=a*AHzwG(^a?0nINBI15%;%TK`TX(}pI@Hg^U17<&qtqAd3lb{{X1o) -z|0}95dp^G$@%iP9&o58#xgRUkq`t^$jO$)d>^H@zLjsad@tncgQBWlyz${q}Ss!H?OQhv6S -z|BG45iw^e-=WqY+neLzI{=Y8We@lH9Q~Y~f%4t8ISK*uM -zmoJkaUcHLmycJ3Og#CElyuP~nk$~GzG0y&W&3N9oB@dv)J6c_NaIEyb+z?BcOmXA+ -zuq{p2maE%ppGum~&fw3o-LwT-WzpX@i}+*T71G24ZPp?BjcOtnbs~UwVdnn -z6wfAucKq~p{r)7deTqjmvqxS`N`s!_2~k|mo{^0X&i(QyaAQylhFoX2iy3uH*YJrR -zTel&7D63lE`tIg`k>{dST-4UGYQx3mHKSR$6S9NZAjh(`o?>pQ+y*7id=YV>?%a6} -z^q^41tI@hZd -zOZwi_(L1}kAHVzR(n+w458@Tx?#{L*{d!N!LOcd^LzGScO7SsW>!uc^$&pO--gX^y -z?;j8Y5TAYB8PPU_u`ST#$F4=o2bVw1WBp@PL1JYqU7Jw*xNx`52-(Uy$6;E9Dj`I_ -zh;M8sN4iv`f$7ZXtpfKNkECDMk1$2=?p<6z3hms;+H>M@vygMeepCrW{5~@6=kA@G2{-h -z$-=KGtHSQ^i5E|)j?f8p=@Aoq`%51*`~2(ZTM3!h@|!;|T)Rp% -zjw2*E8wk=5x@>4pWbT}~a_M&wZv!iRmkh3!UaOj#TyYr6==JrrxVj?SEBWyWO|DmO -z-n_bElj{#MA}vw(El^{LPOWuE)2;1KUTQcHx&TNE9oFs?Npy#ADy`fRZcR%{R>9Wx -zU!8ggoR4lkBXs}SqbE|vp&%rC@Cr{k+qJ-U6UC*E8u;k2yoZk-_DI|#GHd?y{<}(7 -zZT0AlTOJxDHuI7_!N{p7D%(Kw{b^kK+0S~A_wQmoZNoPe;a}&Ow|xA#k8v%iq_6YX -zFMY_#=BF1HRKJTvKp;GL`@`$kS6A0>Zb+tGy?l9dx;g4soyyDWAFtp3`0CA%*ROAW -zczyHaQ(0~#t%?*&{)OCfhKerM_Ep#Nu2~l!Nh`%f%Y4Az$5NLcvo5a1m&n-j6A)qg -zk&i$Bf~On}Pff}}9yR=M@#Xa5%fpMIy+4ZTV=t)bug@NU_8qrPucaTpt#K&R@!|T1 -zSMm-6ERXJ@;$&Ggx(J}m=NRK(ZEyD}#JG7aUWYft0MS+S!`0iT^y=Qc{_)3af*9_( -z3@}`Od4_GgQkmp~9f=pjy*n1+(ul&e_M|PmSyM-hyNH?tdgsy*&Wr!;=cgO%F(ZjT -zWwlHQMPgxST|yjIN0eF)RxrWIFCEw{j{LZR@$Mh%P~Uxw)%L~8bFPekX=L%_13rF# -zc*v)nU#M#W-5+IMJjJ*NI~1F!xqhlGXC6DyVNXO$Pd2h$TYI40$KEJ%Q2VpgOo7p)ta|>toy#3Pi_M_+7Kns~gScJFmzxUC*i|^ZaQ@s7Chg9nBD?h=##(4YP-}Y3bbt0Q6TYvGBz9;J^ -zS0yhMmjG4^J>Ae9N6~OL$(4$ounmpJMEhko$1)y@-FW -z?qu$V`uGG7m_y8;+nSHw`@O1AC;vywW}$ii#n1ZCHpNF58*{gR`3fxz`lYKfH*$W4 -zb<$+DZqw|=FJ-ivnLFW2`S$gjH*bEpc_ZKa@ahT8o!2klynI9E&cBiHR88+r6>-q} -z`PdsVv_|{Ysb6pSZa&=>XEe(?Yuy3Hqhyjkmf;Sngc;uGU1>hGqLw%^&mKcJTnD~S -zEJ#RNBT2lZWUAv&vZHt6-lIXT@#gVTzZ_SBjPN0PV(Gkn^*#iL>=?#yl_b;4RKtwv783SXIGgn -z%4n>#0}t#;{oT^aLrv_5$9UZ -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 -z{lpQi{{{WBBPURhfj94w*b2l6pP3P -zM_x=@>hdL>nL^klmfm@=s>qlWmPXoACLAvEP>AqHVBHr+c{^{}JwO9yDobz%Q5juFSxf(-Wsb;U9L0n3lXsEK5i;j@r9~3E(n>D7A0=^8>vIaY%LV~Bw;49Z -zB}ws+G_MGXHVn|(8t6ers`8d})+EGL@C(O%w27WYmPQwVRUK`y1`FXXw&qbM2#(zH^%g%)=lX(-A}>SU67e2oZnq5gK$) -zMc56iLS}8rp+T0L77D^lz_gIZ6G|r=IPg8P6=-A-7Ndx<-P(ils&G6Mk`(}<=B?+v -z;lu!vSD{nssJw;R5#EQG(OQ|Y0hqFHL&hXyRq0>_nT=p<=PXE-H+MM5qjd~kq901< -z`|sl^j2`TA4iR;%Cn;52FLxc?X^~XKO3J-7`gyTjSnq@&aj -zqRS+3Nd|WM -z#)br8JbN-@BLXgkntcQwLz#fy1o#&+gw_iRj{ueRX<&jtJhE|tG9s;eoLOQ3S^5+W -zj^V_l;zv$Br`{#uWMxfBdTSdz;5Q>RRY;^?)u7x45iQ}vGo{K&*!p>jJ->D3<9;OB -z2^|$-9|dlq$rYI~Rc|}M*}{MZSyGN399I$_%ev6zI82At%3YYh)*Wn80JpmLfOBTa -zF6)!a1fCA~-pBSlo4W<6lHBnbP0hfpZh}|?vwmuw2#h3$8t@uBv#(mD5s~c5Vf3=# -zLCXkhvp3G2PUgCW#5N&?WUq<_C+6_dOm{vxBfb^I&JzeJ|Gddyo|R4ySgCK7I4m?9 -z=pC$yTsO8;okfYFc4dw1GqThUfQ*3XhI9$gILP0jaSj+F#lxjqdb|>3E>yH7LP?yQ -zi%4Zh+J|jRA{E|dhcY<71=2sFZ#|a~xu$TY>&jsNh6h}c~`Yb -zVg~V_AP<7%BN1s!6a)-m6*i}7=n4)v(!h=d2;lUO3&_aA76>OU+X^z(**zqkX~*GC -za=BugT%iwQ2xG#kQ*K2<=EyBUnlx)c>MUEFL(%05A(p5c5g_s)9Zu1eW=Dw?Sh12s -zH~@|`nY<6AOG4GSgeV@7ib5yeFJ^sza0_|4LFi3}s)x8F@a{=43cAUvEiE=%NJ@sB -zY<3V6wXq21X$>4g*NJ}xmixrurL}jOUW0CRo+BBs35wRZ=$xo3q)^1N^iaBVf&tDu -zI9|LBsgOY9>?2NuOXSuIUtNu~-I)K|8g4&&f~Av^z$XM3t`sa8z5FL*B!+9j$(MWJ -znLe&e7DvP$`mVplfV>2YN5R=rH06}&OOe>JX_LgNc?6=g*K=vfVBLC<_v*D>>xx7y -z`vwqXx2vt=&gV&t(FJ5*1;EXW;q&z9e^rY$;~Yr2>3!n>4S~zJWM^7HsF;&kAvyi+ -z*anooVM}tcRl+#CAClTe2!~a*@DPA|(i|e<89QYw_1SB -zhBQldRFEcF;3e|oXaw`8+4!ZbcSjekI*FPOlOi4cGrZ%jFN-p -zZ3{igRCAOj_IF7RZu2??Y?ctY4(9?`yVXAHRw9T)3ZrszF;pC5bPNOKB5hzvz!T|Q -ze|JbFk(|{eo%zZk#L$~$42Sz%0t2%}*&N0c)J!^_V9z -z+ctF+H!+?QrVR--;bZP)6gbR=N-Rg$N@{GB1%OS^l+}=wbDLa2ALpG*L@H&VdpPd$+6(93ZL6*oZ}2Koump5|zTSCY!m*HmTvtg$qL0w5pz9S_XI;N`rmaBvn0N2_^7yKPn?Q3{=TzSky}I0N -zy!)WwfS#qMFJB5(aXhh%z?0O^~w7lCuvYZ(U5Q>{9O*5S{mY -z0N~YDhuGXxw@-F5Hj9P;gRPs}-|v*q_85HmfmPz8Ye_a -zE~&UoEu;Fr38B;afku;guoFu4s002)m)&pGlJy-sU$T2&!keYXoEDb2G-#}$ -z1^^YDo9j?mt^@+?X{&n(3|?es;y4o<6$0=r7Vz9Sj{v7Rvd^OIlT=M65&ezn1&PAE -z;w?9lxGlC($Sr#eF{j=WHc8~L5k!^J+L!QGS;GP@Viyq%y|1Isq8dD8q_bT@Zq0qY -zVME5+W}=-K!E$+=LxMxI<9h_9XM?af(F8;-`#I)tQe-2 -zTd1}qGsZf(aO|o}u0u56D>aTG&{W;hGAvQdPM{@K!#imu1ibJ}TnQ}c3C6~|`$%a@ -zn`1^{OppUHw7&D)rW1CjxPm)WQ^uuBOQ3y@hIm}1;ZNP#EDfZIv8m4l1yd9W1~NVn -zk(^G_fx5d<`k9UT-MqSc<6bk-X0U(ZND^EKpjdeHF#rS5DZmYsXC@jGz{3<6VksxbiMJ5pEStd-xD`#%zc&y{|DdqFw^jz(5LM@yuy8Px -z^N9(Y6)fv6@ -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 -z&^`?Hhr`3-V%$C1J1q&jamjPR)>#gTO1t -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 -z3+HmB(xweP8`5r_9HK>yTY0+{Ij5$YEO^ -zcp%=JJ-zs?g)3l*9O&YVAs2Tc^}x-f?iJCR?q3-XSJ%|xFENr0Y< -z>ZMQchPM)~?_SK?mK4bT^+)1t(1qQ#OmzCDMQya_Oy_?haqG*zo50hxV?&wMI>gch -zzSarQxaNGvt+hVNkuS!^1CZCVb^7fN_zZ1VGR}htCQbpd$+~vjKifx}MqPVpXL5V` -zNM*0Haeic_Bd*Zr7pLIUfOF4A$K=Gt*0B-$kqDl|En4+hF-B%38jbdeYOO&&h^-|P -zxpYnS%b{TyG*#c>&6b;&*a-AU9uk4AC%5m0L2N?CUeOJB(8pE04--(1o7wnEnyf3} -zDs-`m{vDgG0Q)%i3DOsFpaEx^_)Od#TnzqLA?}^!PFf?&h0kv64RS?Dg3nvw@+sfh -z0{v1dw6{qR&s0{k5S^uZXxy2m(I~B?kAv_aoF7JK4_^7CDdUJ8+YN-^voW07}sCeYj=G@L&!($ARb`AFr -z+%D|G&uEHc=e(^-p8(fb7!L-xY#q_pQOMp3L-hT1ZSqQ0p;*v4rNK9>$?U~!iMfetSYks-RyQ=DJ -zbPfiV&tR|_KO$Bx70m9D$wk@cliAY8h8EQEY=lm9oRWh6R0a2u3O0z?aS5&_mcT78 -zAF%I~ZBI|JS@C|`5&0)5ErVX%-<3hY1z|KK>*!n)0OBg&GHAods*C2Hlupu?r3-+{ -zRImr%)nY&!aPI>nbJtA6*y;?T0@^Jr&wQJqgQ7Xt-Gmv(Wo^JfpEA&Z9Km -z(1Z)L4L5>DcZxc9Vv-h#rf&}wu(LyUHu5_~FX#y=R!D5@(6ui>2g@P)>7x`S_W>DF -z137ECFaCm1&$z!xIz-?LO=|>^BYaaFPL3hO606jQ)Bk_M-fhcq97z^^KYwxF4|8Q^ -zWpzz|4tSFoA_*ozNJ$V|zGn^~HI -zzpRb2>h01?K!+h%I)4zli($W==x6YF?Fg*o>mjYQj?n^U;MqC1Z>Zo~B*=|nz}O9q -z<+KQ!`8uqE3u~zJDF}MuJ-;sVS^`2XlU&$`oy)%{R-;=bHP2-1osuR>ysH}-GGP8$kwj~0C2vP_)LS%7wK_l|<@9CK0 -zRB~0@05;l=iRb`B&*jE&*+WA%46(qvVrcom5&`R1s@F=hXel$X}FJg2~&_dgZ?W&LN -zFMEL_6(#)rx`pkWAw{x11Gh?XLfN--E^fT|bPJ0mW3c*Xxh{GyX+!4{55t>eq(KKL -z#Al4P$lg>h53qn~S31v`A$qz+XV}!^ytyUbP~pT3!PU)xSV~_$aVZa~cbWr1!Qml+ -zq_O8i5(Olu4jU4OfKImq+W6E@MqE7Ot|WyjOn)kk4ADZ!MW4XYns2wpvXgU3Y=8i! -z%|xD7`Sa|9X!%k|VD85jSzJ3v2<44U)ry&p0MQAz3wds{@+8d)2C{qx#7YOM1L(NU -zG3DrwHf!#VUebQ8z^Y61(y4f$nsAfcjpQ7QYj#YzHpKCQDY8}ld(ZRqq{TMG&)k$# -zNKD8q$s!|IBmSW1fv~6EIQPl4ldEv`ini}PRlNfrF;fFadvQ>{lEtenQVs+kYyHWR -zv{02j6;)kQ(3_nadZb)6a2ACwS!?5N>7_QgBvxE~YV)($(|R6xYwW;f0!Vm}jAzbc72%e{zUiog<}-s!KbcceVL91)Vhyc8s;N8ByyBnP -z0%vm>vu!ggP3t$=&|lX*-44v=h*!)=BcotKNQ3~?bVc^G_2aMvJb2qV^0&z`0a#cP -ze-{O7C5XyxLxwex?9Ul&(}w|28|1g1C$hE4a{8H9U5O|^QprV^WGgXUDhI@jGPVHB7d1xCGSxf6Bk>xmSnjti -zEZ2DKll=clB!)YfmmUMuCux!ezKa9fEr0CVe6Sb{!T+c!qhVT|P4yvJ1Jhh{n8Xq; -zA@>UQRd(nfY9curPQNndM?OSc55m_R^l}E$+W -zsc}nXqe}5@l>^)~h(;nRw`k5#vH34dI}~k_5UGR`Y9L(&Q0YRSfK=Eh>B0~c`RO&t -z)(Ly1wKkT-iD;^{&!-lQ57JWpQv=RviCzm-C#Xaskv;95W$-9SnQNYo%r;+RR0>@l -zH#r%qEG{Oi^AU6Z$M>K8$r_g^8}&fgCoz3qQw6XW==CZ2jQXDtbcX-Kg$%9jH$Fqv -zIb6HUTmUuFGbS+1bFe~Aj~R}@5fSHLCha-GG^Y~n?%)5Tf0<&9LX$azdGEb2M_9v4BV=gi36 -zvz=wLO(H8)ee5-;>$b&v=;B&Fr^C1?EXz>_ -zI8GEnK)F0qBZE-^%T*;C5Yt(Q~F3g3TEb6 -zP^7y_v~Jz?p#|sO@NGI24k3Y@#Kg&=CLp|*UA62@s%h#5aCUnZH?g03f-`?6#XqTx8O{OAtfMQWxK-V*9qXMzv{3srfOn9V5~ -z#6i1yvnS65^yYGF#l#;rEFHQjH~Yj@!jGCH -zYPw%EG2qii5 -z(heB_PaY@2#zz;;GHr#owIMqq7#=7jWYw(Ko;w4(Qx-V?5&r%!8)PVEtZ*kVXb2Jl -z3jBP=a#Q2swy)f>z@wG5W(~@!IKbxG4>w$59Tqc+BdBBjAm1^qX?qPe)Ecg+X=z)fT_-8T=c>i7=)P&ASFaoV1$;v`mWH*i-j0OUrx#eOJa@-^CkFL!H -zPwN`o0@G=^k{de&V&3WcVRE}on-BSH5!#>G@Z~xz!uF!|~Ba{vs(`go*>?&>(R -zYKPtv+!ANZeT6~k -zW3?AR?*FxpcAe4Z=leMflU}blUSi|aPPzT4n0u>yIJ$43+=vh#Xhu+G!7=McLW02i -zG;+5;iPepdAsNKfHf$5~>nj%UkxWp#P#h&Ct$EdHt9149t^en{K8W?+oBc{tWOqjS -zdF0v;^yW?LcsfD$&-=v(@pQpuy+ax)2b?UvLSiIKk!&fbCsze)oG6vSO`^ML&|NG$ -z2oc4qyW>0q_BuU>z_$u_F{4a@_@Is>z!zg(FcR{tGp)x>@MBqWk=zhn0H -z{<5&Y{%#pxe;(d0a{7Gz`D1zgSzP%0*FM9)eC_&nYxN(uKql7mSLyQhlJ`rU-(LUr -zk;B{1{U0mD5$BiRVS;yidmZXiFF(I6(e-UfhxYa7`RzNF_v;#7e_r2S-@ZS_w{^O{ -z{XM*WetP@+<^BHN{(gP?`*gfL^5*NaX=gU{{&joGas1ccH`gyVe^qfLeL~U!A^-RR -zX_1B5-}|P(08Kg%5!tXEbgR6TlKR~W+I}FyEpqJ=K$;nxWb6fx=pNajpC_{I#RJkZ -zfqjZ~28(;oUwBlGQaI&x`C$ZT?*8+8=MQ{#3YxOQ`xSr4s3~q{ttHU#Rp%1rb -z1G}!KJX%dwR#r?^!F-B13`W`qlyIZT8`esX?xV8!5H>#bVqYd3@0|WLqP&jC9KWk{ -z6%!k>de{x5EMb0jgDZ9KN%B|Ne)-J#@}W1$qLqdLixsWz5Yqq!gNBK}_vlo|-J?QC -zr-cT3sxQfDL6Sx=;HVrX@-qO8D0cCOjxVYC-y1s68%(qOX6DN#{Cjye{2vbFMa28O -z&~~|KAw&N5Ax{_o`S}f0*02tka*lJbVuDkVFO9Frd}KD!>)!YI2j=%SOofaRS?#s)X=$s`rj@7?Na4=jFnTFwya13T&jg%;;4H`G$gmT10`G0 -znT*llGj0Fr`ggq~PC -z;}=O)u2g}75_Pap04Rx&kNruFTQkP1AOtd03nm@hEH}8!x)u -zV)9i;q^W7$Zb{-GTQpCA4gF|XE!)BQ23QKijMf@D@7zPHAj~I+2BCXadc=0t@}qsz -zIOeW5nb53rZPV9D@&xm&90UMIV`L(SQKd|aBRtuU8|FG$jg8t27-0r(6~(1{}7z{H5*Hpj)tJ=-QgGZCsI;>;|urZ&LmmKBU7 -z8(cfW|4yb+u#YsGe+Jh1N2R0g@b}sE&NkcLaSp;8G-@k>&g$HK0o~*iE99C$bo?Ua -zEn6H-H)Gt_JvFN`eCB9u0@Z}=BGDuR#f0yw{KxRMgE!2`Y%{h76M>D>gn)GZ92H78 -z=WXm%Pc8QXAv`ufsLDq*k?U*Kmbk?M@RPQ+>ej#Wy5(7clOY`p6#U2k7TDLojbzdx -z-UUH~_yr@37h+%A3)oOpal>HM!p@bm4}ViVr^H#yW>;1l!^G|1E*J4-7TdV~Oim#& -z4jP?rI4n>eseJ@>?Bt7<;-~1C+RHWTSTylrOih1$o;JSXxGJv=@{;`L+j{<6@{O0b -zNpMbwfa$6Ab3U8l0yj}lVTx>Jve~-aR -zPGpwx2^1DEKH^2OiF)6FyWG3+E6kGY7M*W;kc-Rroqv%FWyiAzv9{x#A@$pr -zn0De5Utfig^!;}vJ&?5wK7kP_MQF}3=CJ|{4Z#&XT<2K_hBEi4q4=kx?4s1y!Zbz#?oCg#q4G%^xJ2c^Jz^_Lz*y0TxNK+fHnw0x7 -zNZPHo>)U3#)x~;P^8R19#$L5r@^$13e5_`MZtHLTtp6!t+M#ZK>T2EkcwUgB!1XVZ -zyZqFrQ>P#LYJP@x+3b^U$=Mxza`odn=GXrCZhwqFbhcown_u39g9hVv`&l`$2M59WTnb%KJ8Oo6qqM|2_$T;jyNijiY1#vWT|`|c-*&&m$Li<&Zt~-x -zL|tf`lUfU{2gSy}+*I3?dmbP6(=Xe2nYz!2_@;c*bUZ>Wzbo$HvDO(_E3t(B<>gJX -zUw$Z7uwIMj-+!+8=H!8l5X7`CwS{p$MR_m~K5cJI+0(%iI2NS17@X7pFFN=vORWAlRWsR=3KNw6!Zl!z57r`7JzU>srWY-5Rth*yX+t -z>tz@R{#(2&fpbrVF-ZiX>PCZtocP;%j}V(2CccAB+3v0?8b2>c%yYooJugFV9_s^EPbb}ir95U8Tf3b{CJP!g0}@pU!E&YZV>lQg%gcg)V}Xf -zmv5=OOSYp?g+9n*1vi-4>~5a( -z+c105-T}+WNlH3D(}&EQ)*Nl{GwarIk^E|0w3Z{$vat1rCDJo@DrkPZ6b^Zgamlff -z&l_@jT4w%D9QUbqMYjzk+2J;nk{|ehWDJjbtr%K|BC#zBIv$hNdH7)f*1CDRxlt -zZ*uJxBUdgsao+5-Z3@>}Z3+*@e!`SX)2Yrcso -z{CWar(m~o=A5pvP>1zC4MFAERd~s9dFpgq^2?wj2Ax;4ttw4|l(<0r$X5!__aZFj% -zR-6EbJc_9HKk0XGgL-0oMlzbL-N`38gZ1!HZ~{0uOHqpY{ml<0VR?KWx`!Xlk~Is^ -z``gY4_OG13E*45*8~y$2lpmXA#h4hk)A6Ax@Q?3#+Yy9$#jTEi=g>!)Q=+x@p+*spxw -z;^cmw-}SL-(tZ2p<#O*3a>)F_?r< -z<2xF|6qf)|2l=x`AM6xd_fB%k^40Q7kh3m9&IEo~FsC2OFB-+LMv$uMs|kjy3=M~$ -z_rr%r_@lh5Q=8?V;l8~ap^@|Q*-Iof8YoU)?h`M6`3Z24(0+*N*ZsT^ZrfOj;c+>& -zeu3rJxd6HLe)u+SUmszYRCv6LrRW2Gffrsd6@nk^Wp_k~aT$l5zXhi96aSE?0WVs^ -ze$m$}FqoTew9JD@T>QWR6(;XiKSYn=27xMm6dnA!uKRqe -zolFcQgQy3e*RtyPzJBs{!8Ahejj#Zwc(WvHyvS>7XX{!p_%eLjL88j|Wwp$!yZe00 -z9AKthdI><%aXbT?Ikswe9=XMB(lQAf%d6}XhMdF9zkd8U#~ExB+GK}3{M{y232CAV -zr_CvXI?*Hu@$-k=*3bl-Wi*K(Oh-%JSLB5Fgp=`ONqhO`>Y{_uZeDO(xQ~~N<4vSLsx$# -zpFz<#2a$e^8yq&(aV4t%?;s+wyIuMnmN9UwrEdE}Ll+T2q&4g17> -z=S>UodlFn`BgBcz4=2hdYJhVJp${1ZV)<1MthEo$f$-4z-z0zX -z%yLa%cS87d#e$r(p!Km_~UI4>cZ=(kdrVGflt6WNR#Z5MDgA*JDyveB!T3U -zv#fNMds%e~M*WaKi$eJv{EAfgt%{W#Qou83O{&54yzSaO -zcucj+4n@C@nTTq4ltltXmuoUMeu=y2H>1-KBWXq(7`v$zwM9W -zIcim^gmB>_MsimIvs -zR$C9wudOqb6<-1ckB)k5{^ojkKJ^koo+Qz1r$2!_0KhuTgi<0!$zi~gjF~uSEBP26 -z0(=bN`iZ>z>4XM~(k%nOeaO)`CQdO;c3c2b0^MkC{bKRY6D<$Raryy`E+*MNd$4S`c`M%JJ;1NnLCAhta^o!Ge3DYAgDP})`fP8ct_3!p5x -z@+Y)zAX2?qeiuK$eW<%pg1&jji*)JF*=s75&TTeTcgWS#JagzAmlSLoNn@`FRh#?8 -zNEExAyzUFU@wH{A!FNYs-rRy0B==3__bPt=M%Qxai-&A@(UG$%j*s(w}4W>D#K -zjw90|>VX_(6JUzCJCh+g?%^R1?aBE;hPccvI}1+%@a{n7$3dt?X{W4{j}S`EnuXXqgWbzm-)zb5Q076{y&yId@Jk0VKB*+&60Dv&1HTfO%ZM;kV6bTJN^u!zuM2f*|#0{GHb;NeS5pk&b -z2V!fO%D`PF3o|@F++*y9(OCO?qEw@wko4;^Bo8 -z=K5T~hlj1YM{sI|NxhSV5;}ubZtkjJ9lQ_Asd)@2XvbNgLcu~g06YM|0p$5d3(u|( -zr*jK84uoMc9<>}g9ipAp{F3#mG|abgxal|FI}lOw^<8a8wvOFR0mbt*gp2lk!|3{9 -zvXldAp!INS3*^rODTloE$B&4WK6q{*ZZyUrE -z_&{yM;>B^+7K%(-A( -zZ+ZXQG9g!{B&E22{UL4Sz#6kdc*+5R``!{eBlNDLWhfH4kMZ+!c;CbF)tO-M%$Q+& -z)Ig(ZBUTo*q^|4vfpQ~{w~NEn*ZGq~z(q(j-0;*UqQ?!zWQ1_MxDSlU2E>_pS7D>k -zPF+AV#UHOw43vOdf6j-07=7HXgWmwB#ryVJMs&bzkU36(wL_DGTWW7(gw0boErG6_ -zm+0Qw&lfiesMky=;^)cZ#MtBKuYc%oC3@fb^}vv@MmWe~absi&m1~lyZR!vZ$!5^_ -zvJUm(q38tH&gs1dkYKHk;rp-McEhv$=<-0}Xg4x-;=YCt`~um$d@^vVjQ%`6|gz7xF~ghc=~4M}s&h#H7C!d~D*5N`!xkK6 -z44!FY;G={Bs)h&JNQaO9K)VVRDnr_b(@a>~g=B-lskEG29_($i4%PiTq`8 -zPxY{FSJYwj)3Ezhw}}}#g5C2+Njg(lVlJ^IL(WC -zG|->*etG|qDRcfY8Tc@$u1+kLd|I>kklX@bDB{evJbPfjQ=xj>19yd{rt$^N6*<=w -z5)Z@cpI}ZgLSBMi{c}g4sN?OGp~T;)tkj{00*7%^zrG+YM+08d^R4(War*g69Uoi1 -zrX3CtI~Tk_7H9)m4kd}=wS@J_UKi^mdDqbV%VmO5@z1+vaj5t;F6J_VGE|{H=f~hL -zc06D1M1HqGKc?TxDL(snxd&rFF#Cu=WnWs?rj%F(+|Rr9gE)1q#4kk;a#@EvfOzk} -zrx;gOM=t)*_ykA;Ru+`o^PfPE1THca`m%LK-UnXVJBMTKJG&lFyOrNGx3bs8Uqoej -zD}V2Ae^G7dw*HUzrey>HYRX1{zkT`ke}74Ofwfqx3HV?9G56BGRJ0oF!fEk*dA)L? -zfNLtRQf%GYOQyG8jz8`eqENcT=kJsW=Z}{{jEv#K+d@Xeh^?i@A~g@X;5Vahk<&>G -zzj-i}4DF*%rdWGez97X%vfuFRTqm4mVShifvvj%@{e2;3*B&#bAs^h}1=w)vz&2Ih -z=01Z_B_5dj%WKJQ&{oiH`E{1>)CYrGQ6vfDMcqjMwnPW1QZg71U^RU{uXhc4iV{)x -zrC5NTIp -z_1qWYH%_|Z4YP}W<9p0Rv9zyT0ynF&Pqm?)dGbGm)BF?_Bax6NPtD~DU1Io$!T -z012$Yl+W@#e>4u@>i?=&T8qR`|6}J2i;vYYB%mxFGQohjl2~qE{&aTJakx=|)uo+} -zvElzc{mTQj49o90ogk*O6a;jNfB*4r96~oH8jVY#7{@#BQ@ff94vfa;jY5P}OuZl@mO^7*p!8mo2Z|`EJ*x)_ItUX>>xKi6=*g2(!Dk43ppRr< -z9|qmj2>G?V9yGnfbr-j3_y+HB!eSx`w@Z}Kr*w3YI9f4Ug~U3@bP4zoffK77 -zpEXojws`c5@#RE@DIVbWA0||shckP%NJTvFCL6BT8~i1VxXTlar$t8K)!5}x6Q7GS -z&3G9X+mvpc|4xc^ca&33wJ~v|XNMRoM9fEl_}eg1Hx&SBg$N%zt`emTU)=L|BN?=X -z@WZa^E|U)a45<&#XY1|!Qb;ojh$(|DAK^6Kn;PFZgir&gEoV@2nhi)8h-;#lj6K=B -z5Q9Hu$q(j{%8!UVAq9-hc8nb@CjF_8ELu^IugIq~aQ;T!G)5; -z7y?A*u+<`mh(!dKg50BBH1sWuR3_}CSS;Sd2gm0p4Z4G@snAYQ8%5_&wk|+F$FGlS -zf-h`)l;1&F(I-ap*Wr$xzFjj&Nmks|N=j2A`Rs~QE0!vZmxE(oA-H%zxgWkNp&Ekn -zm_&pZPU|6D|NLmv)p(ZqkHH-s4Tx35I=%wRlD1Kx7Tf2kktRSQNo0;p2QUyM!|K5Q -zkuq`N$mTaw34-M{qd$Wv-GEhM9{{{=Bh^dw!hHV*>*?L2=nyF6vw9q=w+viKUHub8 -z)5M!&AtYpt=QO3mwpM2jxwi7qK#?>S8HnTa?gR{bjKJo0mtk(ySVi%CC|x+1xP}l~ -z6vDJlIUIUwjCaNyz>X5s%~7}D7FttC{h68a&Z=ve+~*^D)^Dkx|>z37uY6PQ0U_q>Qrp%CKSADx- -z%@P8pJQ|!LA -zZoih})txiOx&doS0zv(zEB3ilnrS1bV61OlAQeUbS`D@+IVi1Q?_OP7?lb1Qc(#_n -zo{2SarK -zQcux;G!0v8ZFMkXF2!=mJQ~+uuO#Evaysnm2EP9uqtdZN(SzSNcPOC({jPP(0z`nQ -z;FK|P{t$ZKB4CwZb5WC<31(H(08dV0#1&`;_q8j^x9t2r{r(6x&L>2F|1#Hwl5`kI -zHps91mL8?~6TQdkz-y{TY;`(R_sF_})vWaJ`s`j}lC2G7xfdu&G>@SXG4Ii*Z@xcr -z3f@DBGomqv9i6@D3k3T!A}F%n5XFCjW<@5AltoCrOi0WLGQY7LaldX^(yDM1i}O=a -zFcv)WrzY7x`lPkF!@9eX!nC5g^=GdzW-I8_oi{q+an(2*JGrJC{)jLvBrEuKW>Ib= -zsb~2}AvR-r(I)X$p@al&y&0fF@*4Wd<#4!HD_S -zS$wC_7w@=%G7JX6?s`EIK#U;7iCfHG5;|KGQ?R^@bV{;4G?xQg0*yI!pc%89?1c|> -z(=pe1Jre0}{xihKI7X#d2GMLmhK2^g6DWmPZ8hIDo7JI%7fz2@O2Fql4cPNea)`8g6XkKlpi{8i7rY29csj}3al-#&_U6#`9C4gS3{uN_^cyt&^F|2)CF*IrQn26t -z{s9b}obmZG&IQE(Q`QnM#-nmsTc?QNCP?^IBL|OmQV|Ax6v>h9CFL9B(``M*=cg5_ -zbLKMg+Q4>U{$HgmhVO#+)#^ytS};mI@`MZ%SEo8SW7l;K7)1vn>-6y<`AmD(f%o8b -zF5*1}cGA_6{8V8AgD@115Ib?y8`EzX>=t9G*;@F05wKK!u#dSL-NhfUGLM?GxF?8Q -z%iH_pyRqYYXJwGa;M0b`exL>OWqUf6bo|?J5aIM5U!`&6iTo&qH)J1mxj|g3Gku)8 -zm<&8nh66oWl)`o_VLuKyy)z9F$gw?br-n)z7T)NDk3i6I|Y%GW@gCupS< -zic^*$#5fFrDGCImEuJ4;t%l#-ZD)nZ{~$|9ONB=C;!m`JZW?Ub=WcAdr|Qtw>sZCv -z*zZ(r_IaI%mwAS0gT9*ADn3kPqRP2%di)F~93LZo^f<1Y1(zwiA`mP)Sw7K9b(v}c -zmSrI6kp&>-WL9A_wepK;ZHPIk8&G&qQ~vcNWbf7#fPsl<)u;Im86N7K9tG4fAGL>@ -z%=FQB&Ali`&$qc?N{*qCIzl>a#*w2%)Vm3~C!-zFL_KB%p3=qPFDPipnX5j%Q?Z+1 -zdRMdqu7>`#DOqMwA>J0}64sGAAoN$0gn&&!wMf>S83~~sP?9*yC2Tn|sqrSo}ceTaj-f@0+3I#Vy;HNTKC(D|RZ1^tS+ik~) -zFPDhByfOEwz!}k9QXsF!-|@pB+o<4^Gn(!nu?tR%{ovre6iG%k@j#_i2!w!;bU6d@X{@}W?WzGZiHxz^{Sd -zajS2LvQuDkCyoRO|Khd_{=y1wu>6mWNjN>E13|ywI>ZU7q|hO{ZNp8ZXggSM8>gm% -zS8YO^^MliA= -zysS(DN>^doO@ltf>NWv@gt}9pBQS|PoJZj*J-hGOrCK>dnMh&I7}UHp9-*OS<&Ib7Ut46;JxC;tVnhzNn}CW7 -zQh7rlUKWfzf$(KCKA-3Tm8TEjbQ5!n)UE4&I1a3+mQ!E-w@pCG%=x&UFJG%u-5)Zd -z$fsy2?0OJNI8s;U2ImCl>VH7|74ZUvW@tqZQp02PGt~KpLJzU1(Sg~HT5NaVH?a5! -zFsN?4?HK@O)(=b(&J{lILlW&+3vM!hvU~~PQ<|0Xs}n{2ROV7s2XYJ&qF=q)wD(o0 -z02drLTAf5SXIcr=c;9uw_Hn7uK_};nh;(2%!l!}NKw_*f!P0nb|AcRYF0tEt -zKsrXy>^J3C#2lt)-)+bk$=2f6)Awq9_J4}>{|Xj^v?g+LU5nV*kA{|-cqPaqdhRYx -z-4hIa9;_JkDc>3+4kjJx*C`9)OhmmgYcoI*aY_PxlXDFy?-}HPn!)I~wcb)oMTAcU -zX;EWlme6E{5)<33cTNSuZu>QcXG{Y@uC@gU41r-+OkVi!C-CtjJe9e2v^Es9Ie5HJ -zctCOMVe*L0Q-FTZ7_NsklD~{z&H|}+0F-xOoEwTiOC~##B1%d3rWcW^N)!}~7RJLH -zjf$dF!Fh(+1c=`e?7k&Ug+X91M8G0+?I$O-8@_(4rClO;U -znB@v~t{7B8aa!lg!+Q!GyGwjW*UdsFK$722JJl`eddqkhz{-qngHI+~rz+~8t16lVFbntWx1y?HlRyz-Dc;X^p=Q=%oWFm)z>mPMRhtqF}3;n60fM;%l5T2jk3R -zV@mM)WbqP79zB9q{5k|E!}FbeDCUBTXEFxo1J3E8hHt3;5Q7Yhz_lsUP8>x??+jzd -zpr$fTk|FDN+lwm>Ht-V#!fD2HaLZO}cgD7dDi>cL30~2a^Ic!G&GClk5#nK-O%5i0 -z#Pq7c#oJ#CG5?fh^!xCVoV*}?-l$UYL={CzO0t|dqTdmRWl8{-e*@XwA}xkxppSmVu31uW3iru4k&SXsvo|HM`}h -zgATr1vx}AEczH*cDK^ErZ7D@`2rL&Ts=I|6@Hlk#Pqc#BovTh|*1lf-V}a&~)LUR9 -zh?n6WaGWs|IXz^mU%l`ZKxX${>Uh5bO*tDgIGmz*t26oUZQWPmP2sa_tHRt%>euz0 -z5YX>+f*FB+dE}Ak?_|l)HB1ilXpS58bgf0^f*4sOc-4vnMT;C -zT1=YNzUez;Z(rZp(M}Tx6?FGx5nXPPOUC7vvr4x=klb<^j8g-1vRDXFPRMS@%RJR& -zmC4OD9`pgL|I8Q#FBbTBRML{abvX4+fP0-z{M(W#O#OJ`%|$JVv^rH4@}=O7l76Up -z7jZ7~9T?T>^zlV=+{4#pm4PSIlyqtPvEWaT7K5E@77q|&Ai%)+Mhh3*iL}aA+;IJn -z?6~MI@`=L=THPNT0}Te3Gq}Xk2??%(bEpobv(|&A%w{= -zBl~gJtj4R&kIBxK54htm4hE;tX-Muc876l#;Z&3K>z#$nxR7D#!B54^I|pDya3a)L -zBOUjo6(BH~D)l6F!RXQJLa*=G#E2bqgJLcez+X;NIk&r8U;pzPy)e1v5$hZ=z3*ZN -zzp;UA2I*m%PZc*?UU~t#_pwb?i9;xWN#g16jJ$CK)2mJa0vqvk?PM-TMhP@C8A;ZS -zBipw#3O3?@t*q%Q2y1qosuyqY%sG8BZGZ}GjS{a)GLf(&RF&u^m7<~ka>WNN^@g`W -zgWOw`CkgGs`p+w{K%@x -zx4Sy1^2{+xcv42|-vg@5dRMGFxeJI`iWWAF6Eu4S2MVOd4Rq?e<;B4b?i7D`Eew`_ -zX1}4*vJnoQ%o5(!P03Z6oTV~hX=VRIb}AuGwjCb)W$Lte9FQp7xpmP)TM -z#EAj8`fRxAT^-bBq&w(6{~xxmmSp78J+D>*C^wu#-a2!l`c&~KP)hmTMYK>Q<2G_zLt@W^2VTY(Q(Ly|y&12=z_jiVnY -zH#Vx+myc^ZEA+{@g;`C27%VeQZHpNMtXFU9bcL|GaLe(6wY=RIf%_WT7F&ZpQ_$3$ -zGn_2AsL^!5<=r++ppsPJ84TvIQ@<%=@}B?4kGdj!j&{e@2=r=`jL;TlN;^Csru|n1D&y~uIv%oXRhy~!OP3o1*tTiFmj%n!@T;QO`kD9MA5=o1SCCrg7T&UJo1?M#UY|%R!{Yh0&~y;x3n6T -zLjAmTm^*0pw~+hJcJm0FwG&DSa`Wlnpe(-+R-pIfg3kWCNlF!K;S -z^G~m{Q`z3Rt+ilG^ -zs9?}nD1zTHH2i@izEj5CdL6>_Cpxi7`iUW^#i@ -z#hUtmgoU!ET*uVPZ67j~MqmolG20asGp7zyI)-Wd!YXfX5y-~U6A5s``axk{-f^C} -zyz8SaZxBt1+Hp{NT~%(|zVXY*%jAz`FWZbdkX2_Ak}bn=i+bT#xN8DwpV!lk8__5h -ze9WitpYg|#4f<=dppwmoOf`LomtKc#!hlD((e!x2ae)dNzaj)W`kalVHM0k|QqS}y -z@3i3F9Q`Hlp@%}%!)Re47dNZ?3OCZp4>Pyb(_)6ktL1A2ZR!P{FeB2qTK8>f6yh$| -z4U{jh42PnxSA%=>rRabc;A`OvChDs3wuT&0OkE0lM2r9)47lawznX3}Sd0lfv}>cB -zH6{_#7)w-UVH*5UU$s_=-&4u8NST&j&@PjkS@ -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 -z9$Lw{mpuI#+U!>aNH_#6@h -zacfCQcp4KrdE#uoEmEBMLliI<`8jAL3_^oPBr4&G{ -znA+Rf*4L8K<9lBu+}6xA4i|p79%MKWoWWSHg`IesH6tPyRirVP!*6{bC=wA$v_tRL -zRbcNM782FK8NyafRbnuIEyQDdnPQ}l36|`(1Nr;>e;d!0S;{HO95)P!fL0%(Q)O5T -zN%o9yDMcDwm#o|;dqVBz1w<8=hok51H8z;4v6EIf#%{e|$Z0`sdYDN#|E?J=V=;8Z -zQ`gzaG%?an_c0eXZ9Z}E4A4<$R<=4leI(E>c+Xa~Lyuh6aswED93mM%s2r8^`5Js4 -z3yB~zD*niOLNewS22+Z?qgHUe!#&ICo=$+JR2 -ze6*XPf#Hlloe#y(6$0d^PmJV&Wv0G9@#BJs-Qi&u(!Q$R??kT(*+@|PomgGvKp{`9 -zhva)U4&yzR2Gd0<#cZ(H+QtFv&uj{C(i=I3%>z0msnaK4&XXs@;NuGu#$RBz+L@5+ -z*R)koVpH^0<6$>pTjfU@mrqjJA&-12rBRo?Q#OTDQ4E?%L>tmZ4y@&S_VaRz&KnU6 -z*zLktp>y{U0^-TOA`VGM+F76C9l0-TlGJp#e2TsdzV{YXNeF)4*+%Tl_j?5V%QJ8@ -z48$Y0X#A|>GuN>b&Oq-E7D%vNgQY>rRm2ksIlZo5aADY!_* -z=%n=DfPnY631hKK_?`3Jrxzq$$l6o%OSX`j$F6$Ug_!`~~3v!i`9!OYa -zhl7N_wq=(zwGL4lgLTO&lDeDD`BbCUYj%B>s#j4)!5%YGX;MLiKU-$&l{HIgHSu|U -zKWNB=nlL`^D-Eo!(%c`uxIyk*iyruWt?`N2I(2`&4tB*HFwO=Tu;l< -zI#E_NmJ-paAVB8AZxkj_r#>tYCR}%F(+4BC5HQ-6k>rkEILk`<1B{>j7V4(l?Ua}Cfx=dGkGDWJPnwW&a5r@!9zZ8~!oRV5NwtU$$pD6Ey746aC -z#478tF;f0{<^kE93?*t0k`i4fokeMyDCUE48#7efFFf-6p@3R&HeAuL52tpKDif^M -z)sj2j7_Vk!TOGXXUmFF=ySU)9J -zmWeA8oE+S9EVqYYUaV*`BJk&NbLW^!px7Mxev>8LNKU>+ky_t%s_^=kpcjYZPQ&Nt -z;X6E6i*Vkdj$WMrWOofw^WZ5#{)${}For+AZXqsL*gREP`e1JVdIDkI#U{D~f+vP? -zD%Kh4;j77w$`cJ+8a+9$OvbmY8=0oSNYInkemj@EGn)=is(q<&KMOTG7~wj4d?bpO -zbsp&F%8|GbwIiUv)w(e6J$D>hntP%K42+<=mGYuk$V}gq$4VX}q*#gFrtjh`CqZrTWLj0woB_z=o8{KK#$72&KJCX_+ -zYKR414Sh1XWUKdV`V{l+BXp_1chHEFxs8!OmznCc1~5?=8~qvag-NTKd_#dq?co53 -zzOA9MZ4aAo*QL4Ew$Id+o3(huOpa%9jJ7nxXR=1`*jj(lE!k%Ul&gL$}|>9sIvj_Q{+`3JljnRc%W3wqcy6ahE3f%m>B27H$%MHk}-~ -zF<6mE$KnTqf1_sPwbI1)lF5%Vj=Sar;;n*>8k&&<_Wk?FkKP|Es$vPdL&n?!RRd1{ -zTf`bg&{Nn{k(|X}b;V^Fo1V*VDh6HMc!^gRKNfugQ}Y!h=Zg;wQUua0de?0Yyhp5N -z9&l4N#ddf|rrtdNXCeR#%Gknj1p$A@T6$zP#cFdN$)S;Fm;VBBXXr8+YDNJQxRQ^` -zsWdXAP7?W*b(+{awO4L)g(}Zm2|2uSi9o>Q2fCb3f>klf;vn7)cV#Sj9VD! -zYSR@5AeIe_Kbp*D)2!@>-pb{roH-2Wl%*w$x{`yo#Jat2{WB{WF$4< -z%CTutt1GUKR;({2!e&O8%u!52bSC!qoo?5PmtD^F(Qm+^YhZMlNb1g23j}kt! -z?)ec&=>5f;3on33BZ7{?=zh-D6v+!?c^PbIC+$RK(Hsv?LZSyt;Qk~kjpjAD#2sy#C$LQtb324r|=*V74?w$u%gmnEmNUB5)OEjUR(bhrA*g%KBFbLlkY -zt0C2cq0$<(jT_Or)^^_20JWkzT@;M6!u$$h&&Q_XFM05J+H9mCUN; -zSX^nFS5tBEz;eAW1ckTR -z?i>UmrWbRr;Nnzv4rac*5PT*MS{M;EI06-O)m)5h#PVW_6qRQ8M)%x0QgWcUlxB06kWBV)IndjZ+;_TmpQb9yOL!xkkWDt^z -z9M$Up8n_4p%$y&o`f!!jA5BWXgmD%pEhgx+cK>w*QbV%kIi}%AKofWnB#L=44|j0r -zh7->#LY9Su^05TJz^ene)=E@}Q7%LD<&k1%iT3_7nnz!KW7ctV!DjOgtHf>76+A_- -zZ&$8BCEl3Y8o5R!EsJO=O$#I!y7?5vwx48?(-%WJ(`~x0O%@Eo^siL|3QZa!4i`#_ -z_u?(7CAe*M{OvF+1zToBSpc_$_-%#^GXs{evSq?8PS?njeeU1lbR?6o%{<&+xYa+1 -z6xyxMS>_u7f8XeGNoix?w059^&X}Law1d+t>U;uI{4a_ys#xa)dp?H6!h#L^JGdKM#Sup(k>hR=wWrdD>vd1 -zR8+PdwyRAUtaHDUUO@S0alU@6!lx*d1LJ*2a>;I#(>>9xlYAQFXv*ET4XvAWlwiK_ -z5U_G7Rx{xW8mlJl38~VRXmiSQ2tnGgO`M)aS+F0RpM7n`p?Vw&q?N!zSBF*=BLJN- -zb%900a66co(6N^&d81(x$nu8|OAabC%3NQIP{5e5)jhH|@*{yW{6+nD(+@W|B~V38 -zE`@ZI^|B6w%EcDrC1IRzG!8IJ$s0gJN -zt$!b7_8DX#ou}vi_iMw-vAp-6bZE)9@DI@=S}72w+m)2S?( -zheCowFV%uG_--#|1AIYV$f!}08WV~cP3lVQLc~MA<48myT)2h`t~);wNf|}?Tr$$M -zTaIV@sRo3<;>?ZjsAI~}HbP(%?rtaLahE@fy%{FU>hL0F_Ee@BBb74x3W^jsw(3#H -zm^@b*+6a~sd((RPFp)D~c?N@0#HR_QkKR%sv{33#?H;p7Je{pWVTvdN`zuAV%-3*O -zNyz_=;sSdGnMSUGijzlyR?$d78ogdo5X7IoA*6Cx*RIGjdy*X;5l{;0ZmJTLzY^3W -z)E8+G3zgrSm3ZZ*Fz*q{r}_Jc3wE=HZ3;aNTcFk$*286|(Di*aR{!_Q>Dt(gRK@2( -zEC41<%8*R8?7g`j{S$|ZO1nmd6_Qat_~@#%2>N~h3J6Cx1x_4V9x!h>!cc>x>1?wz -z$yfPebIFlFDd*O~o$m!1Ro4nX5828iQTBvkF>3ZKv8~*M@Pt7(7&=q5;X);3= -z%Gu$BBj77~F+Y3R@&SegZIKzpixyj>f6y$GvqQ5oi9JUc`YD{lk*k?Ch0s}zLa^D# -z9Amm_<&K(~a@cs?j4$N5!9uomcA0FnlvZg1Loca$rF-yZzc-yhDLTaT$d)P!ZqcXt -zRZ)byazjSgw8d27_I;8)tOw~Iqv{knx4ltLoWp=3TAy))fHKGWYsar%JelXcm?;j= -zney2W`jGQ#^3)BHZDL7tPV6#{&2Wf6PW6IoQqNgBt;RUWR-!3yRr3+T3eM=^yi!1R -z2=sSs2YMAL4;AS&xb+PodEs1GV_|529Kgbf33(&W=V=E&TM2W4-|H;poytF;>VXcv|q`z -zl0BO{=Yd2h&4)aoH8InI=_ErO0zc<5|4F4cBtjvshC@)`N{*0BS+a?t7n -zf=iMD55?&yaT|<%UPdp1LThkxCQX_ty>d(=vCAm|5IjJiRpcB2k5K-vZt~f}2H{fE -zBwzP%V&Aiq1-uXNCiqSS215tC1@ysDi_+>&Z?uJBgXCKE5&$--bTxN&El*z8$YZXl -z-^yKi%*^tcwlvbNG{w|#d`)-6)*>pJP59pxtx*iE?ewRAimt}s-$~N65l=jMe`uYp -z1Rl)&FRre7(L23ZBB+2^di${by|fyNSZ87RGWs7DRgrkkAxzA9Oen!M@T{Qm;>jfrF-sUH=#&eD -zQ!;of^HxAo+&UVPsw^O-%Iz$D%)GWv#KML -z3||tTR}2b}}Gr{AiC@tNASZ -z^VoCFLeBj@rq7X-rYhqLilz3KIE<1q81Ea~Bos0W`jv&55{4w5{tEc>CD0PYJhO=~ -zec~ZV$Pw_rJ{XlW^S7mLG-hZ)xfsHODNh(Uv2UrO#Ho$I{Gu9U*701ta0;wQjm?9@ -z8R0w#Xdc43?A6}NURYt9T -zI0J6TcX<4o!!>M(n4NhIx#)(>dTP^|l@BzT-upcLbWhsE!Zb;`>!H~beYEO@+N3OV -zwO2XK?C~d~@(7MHgDmHy*+@=%gk-q|4tT&yV|yF(ApPmDq_E2BFlOe)5bG8SuoxJ3 -z2oBL=XLl2F2i6PNtIF9U -zif0l$=!wb_A`5DF7U-)mP%m@HWm9S~OQjbqUX8(g3(=~K(+HciD6FNYNFosZz8E>n -z7rEFu2xC*uM%~xNe*+e`iQ?dHjn?Ljfimd^3rMXBZL%-d+3{$kTw8+%D|m%}%5}k8 -z5{E0@19KNZLck?J#Aj0@`da4Y833-=y*Mx%v$8}hWx7y|)EdLC!oeux;L1#xwwNxj -zGYLw<6U~W)hKr9PfgQ`&qS)_t*+Aq7b?(C56f6H-GCIP1E9F)(_*}j?jzk-x^9(Ie -z`{8Cy!!4aY3;|`ZIel)K%0I^kl}(Qhe(GnFIMNy%qOiNJvXF5BrI2sYjMNP8pq5vn -zIUtZWhopHS;0lDd##x5@yj*%xB)2%YLcQ7drt*U@JS+o`dovRG -zA%#)jCc%jmTJu6Ky(pyms-og2xnS>Rb)M+7(tm;0Wl|g4U7Egm+$F%W!ks^oxBA3^ -z>+JH6D?y^G0~-R##sV%Z8x!dSG61_ZL@4fGGQc>4v=7T2N(~JP$Bw5z!FoSU*Evgg -zrU37fsrvsiv_JoELt6mte;eA@|1U$E8uot-ZL0r&L!0scV`wKkFl)vjUck)%X=n>rf!O?yq5bs#Ftn`&{xh^g|1-3!LZU$`%WeZ+qWsNZb7oB8I%jHF -zYWGZp{dM15xEV@F^cYEEW1^vnkUdqm8HV`)-uC0tc`=*=fm_TzS^{^p-;-%xS>4;}C-C+uqcHwl7!D(+?K -zC^abkfYrKw-$I -zk~~k4xF5zBUc>l;DTlVi3~#}kK@{QV4II7V0 -z)HwTPgDn6>PSK}u=q0~Gox(3<(1}tMg%FFXK;?8HFyoQ2Npx_6iTQfLHn|PzTGqyr -zIT2-2pFUOt?}W4`{3H80`RAR~$wQ+i -z8G?Z~f1lrt{2Ir|CPl;$UzDXYR#kvEuyKA8V)bvNsQEj;j>O8Q-x0IQz)bt_t)apt~p;P2dSL^^Lz3B&JTp46)qF5hj-mszDE6`Oz**Atvsc`~s -z1%EC~Go%N#5qryz_3sp(ApL*KEwTZeH*MZvwwX -z%`%Z%Cr+MjlxK!6f~v?ZA`x$7bA#0dGF|6+*3pzpTBBNN_83$I_6+*0IfVvG>Pfq` -ztsQ#v#eoUL{)jNd`Z(}J_cKqi;&tyf0U<}L<2*n5F86Gfw91z$p*dh80(DlPfv!>+I(Q-R3KD4NotL#QL%ddASjR>1}%6*+{tDX$4jyx-#PLPJ4LRmbZ%)l%!RkSNxdU010JWQYHu23gpy#Lv?DGr7ymYn?vcil&~51FNla+_e5GX;afH7Th}f_ -zY{oS?YURdAieb&A$A<-RQ&C|Zmk*D0c~NNs~HSYg90f>@={^8Q?tAdYYt_}+Vup9EvD-df9rBF+z?iLHeUTPn^TAz`yZzsx^yBn -z6sJ!@8}IHoGJf&WIob%_SS>k`B}xK&hIdA%c1)KrB=@PjBCLei4!Q)4qPA*80+~DE -zJQi+Hmi7}lOBc1b%i{PlJsQcOY}_)^w=V~u;osP4$&cFh_oqL9!jJyhCVn%`mrX)o -z;Y2}`+KWo+iK}7x!o^Y&K$tHl!_$dPo(b^EY3V;g(8~B@W~BcYH+QKm>qn@gc{w`b -zdZa&jTrIaaNI@gD!|zCh)1J7U5JA -z2(Tt4!aKK0^{3*Nd=lf-HG)8}pq$2e$>h8WTkrwb1>&Oj7AvoILv>ARz`>6L%tFaP -z9J0MS2>A#H0`b4`a7EUfb)>~p3(~_i#e^Jbdb^~2DH%?*T5v -zHvdKFG^m;$+Bl1Vpv%B0A+;H=n@;8i?w7zPf`hx?Cc!YHQ5biS;4ng>g8n&k8ur#b -zHEL#yB=4aM=AJSH&KB>`KuTr`3OUp!n?h{D+VM4+l)kbu5a>UORsfm^c`Y-DY -zYV8}K^=;Va8Y~0;c5DqYKjC-gf@?}Zlk;!Y4afHniK4?^-Y&!~v~zzL10bWq-+&1x -z^2#Gle8?vo_6T6w2+_%&X&@$wv -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 -zok!f*IZ;tH6TSHQd8 -znTm`!(r|SUo~b?7ySXvb3z8MGx{D9%)w-Z+kX<@z4i&Yh$fO|D)jRt8PNl9~6aiKs -zt9j5vLpFpccOK`l{eX|2<0{eV0jM8)D`jHzig -zdb~s96Ss`R#0ljM$FTAW?by6`JCpu&Q;KK(wFpdT>XL^sa@_*q2C%{1H0JY;bW}%& -zFUl{HX2;lT9bUURI6e8z-H$hy0W%ZP0s*jgRJ -zM#3B+$}B4F7kfyG-;(jaoXA^O_X5XFhtGkKJ0OpvNqf4Gqsfa^k9R?1;ZJSc+Cxj^ -zl(Uj7ao0g@L=qFai{JtGO5{zX=wzRY9aSaQB8WJmq00HEi)Irx?=zMsS{edZC~EnQ -zwl48(^{Z~nRSIGE{Hoi>Fq#M?y7F7H~TK`Jnv*tf`W;dbkSrM<6BOn=QQs)PrNiunV6+Sfxx -z8Uz~Yohh~tC>kKas{;j)Dk@f^c`BG{D`SeXPM8zX-S}=WZ5n9^Yd7W< -zuxZS(i-v&D=e;h&!5P^E$lwgax{jOR0_i^hC4(t(3LOE~Po{S|U4bBqWRO5Kx`_8|FEeW>StwoC%-9SG9;x`-UN*8zDgU9{ -zjK>{=PvqXixs;fU0#^EUXVc>sdc$=>lQ2}FGd;$dB0BLwGC}Cu@F`a&6!d{ID -z@pN=XlOtQo1l`#6o^PuaO%ThuLxEh6Io<}m%bM=*KI$HSEXIKlZciyK($JQh)5c&} -zPl^9+fjiQegWqm0`MErF=A}(xkgDvW?Re8W)#A@8@k;zPo=k%l6rFq)SZ__7F>{>o -zE&#&gRy&!p7!LU7Jn$T|^-9tcL9b7@%3i%nPv#C~4WktpSrZ^9ir>pM%-qMDz?;|% -z-`3A2DLBDZ_u-LW=wVrKV24PgxHj -zVK%XD%e@FcRYQB%!5(Vy>UnL1O&9fDxd{))C1IHWN^r}`n9|WFX{d6`*Ie7)fG*>! -zK|9(d%3uvg<~t=I*wW&b)fhA&9N;97hs8>^bNZjTJ%2Z@_Mf?3lvZkkgXgn@uAxd7 -zNE21myE4Xg|9X&6D2(kJB<2g-fV&pHw*3jWi&e^GpE}+r6WjlKcbC`e(NPU4ZBl3w -zAR9yJ7RKFr94-yof^|V5)^5DzQ;+69T??90dUQvqLrA_xAu#uohKpJ7*|m&a~Rw5gqeu -zuRBj3)mUE$n+?=N2~7%Y4-Np0V3l9W-PK1uN2{%Y8HVQ<{R-`2G}oexN46Itc;PEN)u~C8F(m@j_k{ -zeuuRSu~j%~l^`W<0eX{y_4{M64#YPVUM5c$V6QqBuD?m=s`VtO4Vf*lV$d?0$%yHQ -z!Y8G}m5h53v%+|O=8k0~A+c=RD{?+=?ycuIvVI(wo4ti`Xn4b=bK -zT~i%x?}kewggEOHo|pIa!bwvmClh2g1hZKLhNXes&^SiQDmw{05yR7?gR{{)qjmsj -zMyKdEsEiFs%#M=8ICytZdzuD&%e+`UAX1cb-p4+ihAsgfIapJ-cyI%L(`i+2=f8FE -z@t6s&(pO!?8Qa$?oE@ZWS@&yhFWPA0=xET-yIJY!WmD|wGY^NyCCx?jjQ+;{+IJ&g -zdRis}Yz?055rz*&B+#i=Npv^Y`Un%p^S@0nCkA!q5w*BCU#awiSouRA^fIqP%{*+B -z%=Y!!nb;bAp47Sm%yna7`l!13U*tVB1oT*Mb!S_4$#8I-sl4-VAOxFjUeQ#fbTXpD -zZpZd7B#3AB{n;%QZH)m37Q;YXrXTotQ{#(^xvG<*Wme1z&4L&peoI=fT1-XZMKXZT -z@u;gCm>M+-Sx}~`c~)zH8Oy+FGkX(gNFL*cR+60s0Ov~P>0KY4Y2F0Vm1sE!Ia2j$ -z2;*(ah7MM7osK-JK^EZs3{tqExl0qWfyM&jW|;0MTg@!|9Lz#;;tO;d+i$r*fF0YDb+0&EF#XfG|7X;*;dZ5`D1%vCndQx-kp`4{C -z(&$JZWTgCz^(PXP*_$RW0Hx=%m#N1FKg%!cn19pK1WLd&fXTvi -z?<`zQh+YgID7+CysVz_NV9QWxIR9Jn7oCl^`!BC?QUWhZ4os!N9*7BFs%-ANp3Bx -z{n%&ZtA0MzX5dWhj0`&iw+W-3JK=%lt=)UKBYW6|#>;dbU3t6yirYm(3?C5UCV5uq -z6)1Y3By*k1L2JG>Fbo>7j=Jx^;`Z)t8I@Y1b;!Hq?L|0G1a!#chAqKXivfV2ET9T3~;)_sxipx_2l}`8}$Wr -z^{|v|-_OCIiu8xllVvpY=E&kvi&QMoLIsOdgR2#N!p;J&-xlpsfphrmOES_)T%Ax# -z^z~qCKy)agmSclxBtA>OotPg{RT75pW`8_Wvv5vw!*jj2K%;Qu&aJgJL$-y%4{uS^ -z)0XPvm&|f4A6c^~A4flP{r;N2D^>5b4^WE~&zy1MNaAun?cwhI#gtzKJXmX?1k!sH -zSHibNIGkfC2?JiA<-51;4Hge7XW{i%k=0PZ4ynI8h!xyX-?zcQumfoPK>go?YK&r~ -zvyV2K-NUZ#9EEt+qm|V97;s1f#6Tjg0Nkqm7nAcfB -zqfLvkgj$$MS>&E^t}E9;jtxdQ#?5Th`$gN7Lg!;Amn -z;UGjn>~CsALJ^L3&b#G7t;w-Vzx&tQZp3fU(8?lc@&5I;y@k~%!`ay$X*H4^>?ro; -zTBBfpR%sLLbHG&xV;25Z9CE2n5BF6=Y+q5H^v2%`Wlcoa8a^k_gv%Mh!nv4!uN~;^ -z!OdN*bWo_!83xA+RaRW)rN|UBjVH5~vJLJD4!%XgOaVY;@kS^_&L@#4){n!P+aP|=&js7s{m0Sasf$w&}o -zmoBc;?p&{`XGBo-W4(A16mbW`-4jF%N|0`9qDJM+WWhJeY7HGQzdf{qIRKT-H;+qw -z^Pjtb`dLndYJbS=B7hK}?w?{}@pzHK1OB}&Kd6U^-53-Jdw|R49XRIGQ8Rtj -z8wGvXSg!?vvlsPC0yHCpC~JL#k{bFLav8e_K_7{3;{c|%@M}P0pc}TzckgqDwTsF;1A -zbi7b3=Jl*j9Ay9xhiy(FxUxsM_xp1xnuCIbOoR_M|2jzj=wOjaIGn*;?}nS?e@?Ul -zPBQ$Mnx3CJ-qUW0mXSy@*934yCtt_(&(9;s%KOwP^r6FR~iPo=Dfh(2T;vk -zqMZzk_4<(k!lz4dN`RU-u&SB0g;X(JVxiIRlEDKLIpkot -z=V{lIEePHol)6oQ9AQvBhSbeL`Hy2^jZm?f2-cO#vEWsG4jWg+ELYjUbWQ7o6u!V6WFNl@NpTPKsgaVxGstFA5DaY0c -z7cU3QB!)lLW@Ch@Lx{RfWJruX`1Yn87{9g{iUxvgxK5D=4*kI|*e@uaWUr&dSrN~4zxJ1LB;6DA7V -z)s<(6HG!t0kYmafIxc#QOg@dh_3R<%j5)pV8Qja`TV!Mgc9?TEFo*P!4BX!)*5PB? -z#hlI<+=i_AyA*zWd2HWRmfu|}8X}W7`YMZ-E&4j2iM*k$82+qKWUB7-Y1^yd;HtA8 -zJ(>4kWoI&)m*chYU*vD_yN$Z`-7WenJE$_4)$LtFB568{ywt8d7=U -z<&bZR09S+;B;2)W!(Fn|mbi~EDr7QdLYJ=SiCVw*PAhzC2|WNwB6nCtOSZK-;#Qz^ -z8}jNXNZQFTy)rV}t{lpEQ^(vxuIe!Lxw5F8vQDQA#$beuDwJr!!%`7Vm5)tfKip&! -zwV^||qA_E5-F8kC!s+PB6O;rmZ{>s4P(d_tU{2+??6=R*0@ -zy3sGky~4&Ee0VrYzc<`_T2X%Mng;<0up^>mq&!t}y#cY;FY&_iz|*{GA+KUe^d?@( -zJ72`caC~li4|3Asg6+OS%VdDEGFCOLn1f(O*H%^{*P~5|l{P#yjHzoU}_~rDj -zt9d?x31ev^232^XNdgpT7|Mncl@=R-@NaTwg97fa*V9H5B^xR&*vA@C`O9(F>fh%A -zF-!MnC^#GQD>*H;N;2RO9RnktpFhx0C$b*&qhKTjSG9*48TzH_h%WbHG3Zn@cDoyu -z3}J*~5gu^BfJ(6a$8jrW-FNR4;;Gm_+oSzXi{^s|R%a>&8!FFUE6boPJZnw~O4&a@ -z0oRhPBcu{bf_43fq7pnsP@HRN7t<TfJ&zJ5oxS#dN1oAK;uj*r-u-cTQa%4mzH0 -zj8p#&TbI_`?C?(Hi{8;{np)YxOD>90H@jaM@1~lXM?D`3>Gvr=BeUVh>|a*cRdYV^ -zh>ANP<>dQr#-V{^1{oz{0si!+2eEFe$Mvyx^|2SA+Iz*K@F~4A`}z&d(p^*-hzl9r -z^YGk%Vc_Q5783rQ!@*dy^~cfl%Z}P83Cr3$ScAsncd^oxWQ9C&OA2386~vsh+|Aa2 -zp%_V$cs$WNH2>oCfkp%`QWlF;U#zE^@>-gc#RU{8y0=E$!Bpm2 -zGnO+Hc`^7Yc#S5962JY}OxHKeshw8=5^T1|W|UOY4qsRetSFcNM{sbw)zW9<7~R -zI*U`a)-1*+grE``ObZz5-#vci1`lX2m<_Nctpk^^e3iHi&w8u`EL0`HhGtSf*gSbj -z!Xt#lit0Gfume!@L?4CEWQm9Dh6wllB27px`dHJ|gX4sAnjyxJM%hZR-Lnnwvg)Gq -z>_dxV6Spzk5YV8?2@RXRWe~zBVE -zy3a~hl&9T!*&?mo=N)*hHU6Nushm2f%hO1rL>+Y`=fn6VJtnPA%i&ni`*tQLY7rLn8hnNS1HH|Vs9;YqazdX#4p+gwbio&z5zy>&iLE!OA9@Z7*&Y*6!P7j^x=dVMnbNUywRR9&dGF@=tp!| -z&`_|>ENv}PM&<%cSGHju&uv157!O_$zp`ers*}>w;+fC1vV_y!fT3HBbcCUznxEJ?KA@wO@jNyCn(ULgDpF -z)fjLxRe-F>OrQRC12NzaNVh{<6voJE`<=5_`2r?gdAcGK#Sv_J?8rR}tggwr&*uo9ZumOML);Ao$?50>-F3cyM%~a6DY9}zAL73di`Fp?oT;46jhsGz*Dia}_{oB(N -zT=+HjKiH^@MI5(fD+a_PnU5Gz{P4zSVvru}&I@q&@+l-#`;wAi&f|I -zWF&&!X$AC+HcQ%hXi~u=-;LMESlrN$cp$t0hERZj(LIN(T -z^8Dha%wK)9|3sd2GDkrvF<2(rn#&Cubsz&1bSL%^- -zFQECP*I|^I<>sC3z4Xq<&3q`bLt9+HvTL -zM5B`xvpu$0f)%F!Ozte+Uz3|FbJEp>RVFamfm=LsV&fmqa0qHdr%O$EK8;f5K&n|p -zc=7e_Naz}p2T#8vKTbYtd!Dj41#t8L^`>w(xaNKkZWle9nh&rg5lX*Ub=nb67xwi3=B -zyV07{?5dR)e@d_WoH==qj($yUjbD?SCQ9;&#l$mZTNH-50YnZ4$at4HU4lotv-oFZ -z72TAZeXBTu$H=UT^5rFxm`&*l75p;CgF;q*-AA^)6izF@iPxL -zLa1J+1K+m7R~Bn@qDAv&a^NT^75-D#f+~a@h#DG>j_Y2i<=^Uc!(JMBx>^XUmObzxr&ac+sNPzAaemK53$YG2LdmwGhe1#H68Vmpg|ad!{UE3T -zsJ%KG;07TZ9Im${;hQ+Wqx(~w5^bRSu`88iCUZ7N2ck< -zmj`%WL>&Hm;&oh5z`i4j5rVA4DaQian>6Cz7A$b;L*p+`QzX(V)J1TPLUqQjUrk%^ -zaS`tRh@4KGJ_|g$crhs`^4A&>EUimWU}b38+A(180x|>;Yud+X(gD_ymYWF}Y`u^T -zr!RdT7%U-Gb?=xFK%*-J=2*C7!1vPy>#foogS8{@@QhSentvdfo0E~Wm>y#Z!Q!2i -zD?drBW*6YG5^dxYck_1oVY2C7rL}bqkeQk6x=4Wa4ryn$WR|+|lDTqUNy)<38LEvC -zjJuEP;T9YIdWn}-i;-m5u#Yt -zh&dy07Ah%Te9O1@#UWg{7jneUpCu*A8n4NAt=oIJT=g%Sb|dRze35Xbz#MsIzGOj_ -zT1(sjdE*!*A}NFN7%3~ex{s_lxe3@=^5-@Rmo;32qK#7W2imk_256-SoSXf_qHdGE*&M?f5To%%@D -z(6#EzP*8y%j=(~^T=KR1#Iln`H)qs9e63Z0Je-AW`%6*@Xegf}$#)99G!FI>GP9|C -zUgI&Q5W1`Sx2q;6D2A*CUgCB`>s>nvpIUXVP-kpKMaGU~{w?22G!Pt(Yo!suL@l}}$jBlyugx;n%_GDuhm%5Fj5J&)@F5-o*v_WJ`cdJlCq2J;;UY$;c>dO8L -zxlpkII#S%m7cKm~oa|ymI20Dz=82t81yWmb3?)?dw*{4XoZ-7uTKHRC8Dq{NJ#YW! -z%a6YXoIT8qj~oFgNGAU2M4Y -z8tXAYC59BbV`mT-&BGAn4Ok|f*{Z}7sv8`4rm1kobMV-IXI{ppS?V!Yh-=9VcXQpC&A-b%} -zDwTaA6kC4lKbCty7IiOs=5mIBJiwVMo>bk_K^poFh)%#-c}$NGoODvVMAbS*cv6ZR -zjuwF8KbAXOn%GOlFZDDOOc10Ix-kLREMK9{e@6#8zroo7LhacwGf8PQJaK_d`pddZ -zT#ueReyPSNAybInZ#j`5&@9gshA3WXjJwL%h~l5z-cO=|8cm+H`+KyayQDxz^?BzI_Xep)w!I5Gye6>*^hGL -z_1c!F>2wztz}(0QNESv@NuP0rCDA&a10X%Zh3ue`1mq~+sLJN!j5mp&F-grq#ii00VpUs7O?=TBHLfYzgX=87E5O7F>tTF -z=Z;xtmoAfTtEFoIQkrYi$dR0SC~dhI=)-(sjfT%7h&&Q=XItmXSJh*85HZ(0UJ -zv|TwDqi58A7)mEQR(FY4MCcyZ1+v3g-0gBeg8{r_$OU{+gBrBAbt83X2JMB^*X4gqq&dQ*SGG|-gtEyr+SzpFo%Vyq0Wo&U -zgarC`OXxgECPO?U(HFoo;l(n$hzgQX__y-dG0#Am_8RemMjq#kWH54jO(@W{yZ^5; -z!nOp;n(lDP869^imrayg4wWiI%TQZLAd&8I*$^jL4$GqtyPG|44-2RPBM6-W#Plw~ -z)w-vyjFX=Pbo(~KO-;dA>+}l)-+Ues|AGy5D7M3@Gbg6&7}3Usf_E5eeK6i;mqRKN -z8P<)p1$g(U0RV72&96%Gn% -zmvRQmr;qx54d)BF9r}_yf10pkFa_h)`Pip@j)<*Jg<~Q{ByEh?#U#IDTq7|UV<+i$ -zhri622Z`g&LS2S|8t8xCSLFXOg4D-M5MvH>!&eP|)h}rh@`(T07UtN}05a@OX%KOk -z$wqeD8l{8mvxsrKu%omLuyY-t>CV!1eM|cX#-XF(6^@0B^TC0)0hTGgY5yTM;&@OK -zu4NtIpIGOKx@!shOu~?n_^s0-tns+-4KCHsVN{<+D;*tVP}vmw>2%X1W44|*8g!mt -zbv|>@DSkJ&(!)t?m!b|R8#U8>`?Q|8wex~P)1+ETjq@MOy;XVA!G=PUL}}xyC~Cty -z88TfmKcFN)wxHxk^)9ZGq-;|ktnMix=Eh+FsTxe%ZHU1=Wx9SiU%^#g%&28$%!=OX -z!(gVxPHq|xb^O5mBv!0r%!Ed{r((>=%M#Rt7J(NdRXBN0G%A{F-`|p!>bR`Vg)vm2 -z7C9|eQ1puU)n0#1T7KQ=nxT#0U&Iaw_Su>BR>EINQjiQ??5zH+LAzNIjf(Ma)H2_{eQ7Cw_)V1V_?1(Pe -za3v~;S`{cyJ|h8<(KMDCA~Ga=y0y@T`>@YNPLzwneQvTHmx1=04k=rp#oDU(JaK#A -z<~fo!m;{3LY6ZkP)0>vU8A{Nv%&kTkDl0yV=o;<4S0(LN*r48A-rv_|;vNF1(-yz1 -zrL!c>+>?PyW6%n-U%KjKq@<|5Ef%^3%C{CHYpn@17Q}G1k4O=A?*2U2b^i!{CorbV -zkXeeJ4z=f4ykiv9a)u=FuJuO87m6ZrQK5NbvTW>9H?Y7JUp+5!Yj5~nv_9%%varlz -z70`#?5@z^Va$(eZ&1~9ZX`^{O`9)n>HG-PmqSH0u&1%hNpLe|@{ButMnQ><-t)Jgd -zW11JF8m6c;?JE})`G&(V6vll-VHO$ZE2O+)-;3Y)XO?f@nCbgaWNG8)^6Qo_iz6EA -zy!9)!WBY8(KuqR|%h>Yrp$})MUQ5=Bi%T9lc#s+2{uXUp7{$wSR+3&!k>!9vz3TX3 -zo_phP>Il6fLwFQs&lZ=%9Rrbho7&{7W}GD3>b0_)sp{B;5mXHMUmid)>A|63Htb;O -zLRm1Qd(BYiU^j3T;6MqE09O9=U?&x8&AqY^!b6I9dvj?=iQJ1i#i8>(R}bQe`}LaR -zxNGl$o!qrkrIsOsd9*<=Fjn}q3s?wWe&5a&V|$-^lnmLi#3iStt%Jz%2oq2+XGeNB -zeV?>&j9R;3hC$Dr9DBUfl4eL3vk`~#!6K6Zy#QPd!E;VDFSb8xy+Gs|Rba^p7gFT; -zRQz~uPP0`5HbJs?h+?P|o$)2LiS9gkl`S|_gyBHuRdA&w&z3iuz!!NmJIUujQ1O{5 -zgnab5`&O3pL5$#=$`-zTd57ol6Sp_6-DFQBQNvV9iDDW%ul@nv%1f{B=NR58jAXKdW -z?N_R!BhCn*xqRO(qi7c?SM0$npEfkH%{*q7HR7^}?KR%Dz{JEU1bV*sYgBQ8PD1yr+O()tJEa}(g9uc@+yqk@M+rlBXo<;!?NQqn!!W4E4 -zuDfSsP6cI(`ZdbbGSd+SzV2f|Ew!T8;RV} -z1$=nc&OaM)&SJJ)RrQZZKZT3zq-}C;3Un$f)jC#=$&oEeb!36oI@wLU8nr-Y|JmHe -zV)2OOHB1WEHrS!%unHx=HaFh?Y;Nt3EUQ=n2SR6`A3KiSO~pGEo&6I%6Rz -zymZ!a9IUyG18{oL2&fIz9_oqPGHZBWXRvJ1XpBLBFx?9tlhEb=;oMcy){@#|Zr`aH -zEtqH=yZ_=ABGopu?)D`0)zktoO&zqa;SySnQkvD|aG2o>I&q`%r9| -zm4V*C%Ai?+o28I^8N&#!-NuH2JqaF@Kc&)b^wU)v^<=a^3*mwKz#e!u=?bLDdl3!V -z)|3er34WV~Mfotg!y?U~y;Sg97JN&d#z5}%BO?(9eK9t#5q5uHvFtKmk?5Dp=?6!U -zGB~ny!6FT2qL^ve*3c{{oiu(f9XTBU8=aM~`2{yqj{(`dqNtJ-A4EXk8n^Ae+;EhA -zaxIY6cCso}oVr~I=~OiK$)p)boFrjtM;1OzY`{Tz! -z_2gUWQ*o4x1;RwETaC`6Q;XB)L`wQ&Gz)@>Z9PnJL<+{%UA!a{kz8da(kw|ZJPI=7HMs|c -zv3np&yp9s3EM8o6@+Y(?5maBp?TIlex1HSTDtIP&Ro?)Li|uXGm}+JTsxy4}ipwI+ -zS=#H`NYL+UL56+WQYYRzUZ*L(0Es-@PYa&A#qB&BePIwC02}A20G>7y+6^ZK+= -zAQW9l;Q*IpfIZ(wK)du_J~YKhqt_L88&{{r*f -zl4X{dk1SDxW71DagJ{Mn=O7i!HR6o}n(KV*od>y$*`<4|q#P=%qZxw|z@AMdPAE`c -zPTWMG^ucx*$MvrPK|_n`U9oCikmfm@luV^JKz#X4>Q>tD7gaN`C_1!p-wOL$2>mKN -z$+qIunAeOP!PL`izmf!0|AinJsN5mhGDvO%%yLt_BqMxX3#FW{(gJXS5R~66*AoOR -zu9GD<=2|lW%OW`fq4l~ZUS?*UZZ?|u{{gB%Rlm#sHd8*9b;#=NGSS%OWgU}pLC+(g -ztehEgOQ;ltU1BXEnmo!Q^Mf(H3W;3mV%;6|gLwm9hSX`=*Y)5b1KR?A{z&rxGq11I -zF-yo6@Q%ckcESogHp{<|7T=+m@H7yrCWZ@SA|&*8* -zXWue)56U>A8ECp4k=z{*h2Na$9n@%FgfbS)x}GNT9~T@cpTHIb -zzFu<%WoL@)!L+r`TtV>0TkUjCVMAkKxV-)&v>@9DUdQG=` -z%dXBL?$ZnFf$tl$Mb((bJUY8rY&(-Mh*mJ}10rY?ZB64{TJWA~7Ft-u$LT1%*0PmaX-jQ;#UFw%bUpnO0I-jXr7Q+}co -zNdstGC){}D8}N&2ffG6Bwz!l}@dIrTLs^(JUH6B!{(AUfbh=~6s)zFqZx9(_H?&B8 -zt_NXa;;Gju{TZIkyg#2Ak-9p}Cp8wtD@qP_>xAgY=_DZ$+YurIqETWmZlqZ`Em0E8 -zaRyg)0T(bdCwEu5k -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 -z+c$J5B@<3h8(7@4N?5Qtg -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 -z1*PYTV1*N9J-CT?H}*P9;`V_ -zfzVZF0j`+o6Rph`vI(d+9?M`dYT|@27o+e>m;(?bgaa -zZh@q&`CDuE?JM6eb^7-GZ-?x^y>9;)A+|WbyoV0n?c4W|pL%)yZHO-4hP1C=Ur*o8 -zF@L|V{`K|p?fdoj$M|iWF5f;6-;Te2`@H*pf8Rd8eEWPnzCH5l>$9pS7WDpcddhPA -z$M>tt7mL3tPO^SN{Q)ljaD@uV%;@j?q(B4BdM+XoXFKRtDJ~`SyJZajK!ls;+N=O+ -zCUBCm7d)cx$PWEHk!>$KAT1M!s+eamzxRB@y>g_&sl>~J`MXwa0sXHz>Pm~?bbnUr -zotJPqp&e-4lpU@N&)|tZ+@3Y;y72N~IawK5F;y8!D*P}QX>U-%jjmp>Rwi|CmBm3= -z_|%Ji>1@2S`_nk}8X|N2uGWi~*pP(AZXjg|)3fPa)O%kgeueFqV@};wZ<0wXbpvKg -zTHT?$0SX3n6Myf~S&^GZ0hdk_4cw`|B&G$Q8o_{ra+t_#02q<%;){k~Df#aW73dA7 -zS>BoWwGn^M&x-$HLtccx&kL>RP7@jO*;Sq{{`q(V>ou$cx}4(_EScb}<#XjDG98I{ -z^s={YdcpYKnkf;%KO9U4?ECq|_w_}Uw<0&HaTSDRRTk+~K>g1a|8iCH)W*uLOdD1N -z0j}!8lQ`;L0u71nZ9&OYbkbu~_>9|xwIswFC=FWl!hQh(A98% -zQN?VaceP18X^9?08i)w(_L0h{T}=L(22aAE`02e2WG=<<4bG>T$IM^rbfC#b0%D-W -zy2`mqaCr=dk0Axnu6mV{dZ6unUix9PCBvc#;3>xtkb3p2T;c;2_e`t<)G-j6^?3_{ -z7N~ls%UpV;v-EPYB0^8Bo$-sTMaooxtrB^#kO3%(kdN(2jpW~1eIeZ)(GtR869jy2aH;VI@sX?RHB72brR&1FUZc!)n-Xu-4%C&W0uM#IZ{RBHUQB6n;HwfZoa8ipedYe(c -zwq9kFIkKb?;3Zcm;$DpdkF6zKq5w=RP3&BF>Jn-)CxvQz{pri-iXQ|3M`dIphf$@B -zvm-oNxZvZ}n6?CG=H;^`>xy^Aga?dsi -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 -zq<^1IyzCzCyh?!lp^*eoavzw -zHgR)>0q5{~KfKR`FXdN_+AKeY@9oV1<(-#f&yg%@U_*JiPkjC56_6vLzKZGB`MeRC -zTUm(VemNC{0sGe$0=f3Ke;c;1YuF_e9`0f(+JHCk#SRT5cwt|=!$XYo(C>T~@XJs9 -zAzlN%w1mCW?<i!U@r@Ucgr859C3r}6%Pe;Y>mH$UV^vl)Hi6h&?}SB -z2L~_lN-Wnc-oBmebQ9n@b{+QL&7H3N))5_{F@8>kch90rLIy5e{UNZ|Il{ZVW#7@3jIJYOR8f@NVq+X_6k60}|$FSvSL2j*qkHe2MY4QXVqJ!I04gx!I5xbdgGW<)}bo -zqHD^M`XDQ@gL6N|4I4H!cg3;tzJu_Tu;suhCuGyT8(Fq#P+|8@yRs|?nk}d75+uI< -zy*E>J5EPs}8_*7Vj~l>p=OgH%cq%iy(U`28#ouufRJKo%@gb(_Z()x1+pYP6My|w@ -zjX!E&$jr_Y#h9H2@g6XZXV%CcUvk{l<+J#w$l^^lppEgYj-M=rcj&H2pgDDp=7yf) -zT6q?7-R!6tCCLDC#^{P_88pDI$XVcA@kAVDy$so~is}->E83|-1qf(mE_vmyw(Y4I -z`+elR^P+|9d*WOsBgE#+t8;1-V8E7!(1wH;v3Rz4$u2ZADa*|S$gcdEjkWjKfg91O -z;v|0Z$Z}b~?nL|Phy__^LGxoN%MJD+nd7vURGZgTAuC}dSfAK*@GIFPiL!gc?09T- -z@(Gf9&Z5#u?q$)28Qq8cS!8dSRKZO))cLE`nqo+YdK -zcWP~v!=nLSW+>`?j6_uCBTo`25M6_@;Y+rQb~EM;G13OWqJ+B6xY%IPnx15-Tps+f -z{B0k~&QYrVCFBqvF_PvIa40yp-R_N~jBecuSg@tPp&S^lhF#M5J}{>p4}v;1kTdcp -zG8gT>l~#lEYikUU#jil@qoK;1|G4a*PrXF&EQvSU=qvCH0E372QL3pZj|?c4(LM(m -zChypTgO7e)Uy*lTosdgWW@bRW4_O+=$cCrUmJ9GqU?xqaUkv^^ysLN)>unc@B3Mp_>6>>R>E_kO}*WB1GCcmtfW8NY-I0q9@W}u+@+`CQLK>?(|IiQn` -zDim+@n!fDH==kKTS|0GT(M!`t505_Yi!3V_QkKQhUu$F?d3^Cm(ZdbDK_kD0*bZz& -z?0`1sG?JYCkNrBc(fz^2C3zr&qdbHt^Be2sM!BV{snKUfO@ -zYuAEm)$;fijyCPeN5|w2M~*(Ul3d|9*|^D*nW;Q?u^k6H3PR4NfZ}kqejjMraVuBQ -z!xu-i0J_!>7h7?Upx+9k?oQ%LXuDQExr>aT@ZQg-k}^=E4cmq?u?wXOa0dVjkn0~M -zJi9)u&Mn;7JBB8DT4*T>q9Y@Om=vB&c* -zgkF2TVRWf6S;_%5(0aIJ2=eEFzeC>o_V!CMQ)s!U11wfiClZM+5yNY=9cVJo9jReTVJ>|3?AOcc6kgK;0xE3ZDmXOLL~=vQ4FLmpF9Y+bCy<9jj4EAE79-Qn31p -zgk4PjT_QAjcq87iMqPk)f3zIj1+gY>16hOh7G=j4#!%uZ3GGapgF8^^qT*o4S#@qJ -zk;`&st_9GXpxnsw+r?o(?D|O};36a%?s#ewf#!x{GVVBD+&d;} -z1LDlQtFX~%r+P3_@y8p)1ts9tpY!1#MxV@!@Ef4N_`bcC5gjm_c}^1$@R0A|mO9#$ -zVDr>XOQ0*~CAqiu^Tmw1$$+#n -z`t$gdmj(1yMD%){{VwC+pk(0-{Xhz$gT?ota_q`=Jcefpa7P(&2`8da%W@MN5MDkc -zsB2k{`MHKHHr3;t6m+w`6TKRQMF5Kp`E|{R8s0WT6V^6V`SiFJW-jE$5-fD=Afd4GRSl -z^?;5de_1-VdRX@x>M;6g*!?Q;#0(w5?)9T2om*H^F0u3>^K()Z6bpN;lmfn8m=9p8 -z;i_(FE$~q)8nvm&^La~pK -zx#`y6MDi#PlyldXr*bN`A&K%KS8HleV`_fH`JwN$PazGOY+z^fC@znWSu+uSNjq#d -z5p4-h^CC12^k;qa-+yGvoPXR5d>B-MClyORty!l?ZUHb9ab|lSQ?TD{z#g`O -zar*g69Uoi1rX5ajKo=B37H9)m4$+C?wS@J_UKi^mdDqbV%VmOm@t=3i;!yExTueWL -zT~why*T>*5c06D1M1HqGYNp%Efj|3rxd$UlF#Cu=%^%j=Xr1+-Lol~U{0UNXJ4KmT#J(2vq3zJ8~qIsbSmbjuh%d|Sw57_qgKW28Jn -z41P2E7CD{7@S6ui$N4Y(Iv%M7WVfuJKHX|qQ5V6@7i<5;N+7V -zyZ{?c5yVvGZ5}hoSJH_Q!Mv922JHnymtSZ3PJJ-A6-AOTUet~BZ%cHNRV9P*09MoI -z^Lp1{vM3RCZ@>B|0rVjW#536VC>Qo0CR_qn04WS>E5V9ED)ksU$t%$I^{_cPnE0DD -zZLUvMvxz^YkKEJ%Db;9Txj1^=Nk8h4>pFvVmX1^Yp1EsmvDX1Q+}6v4Vu8nykb(X@ -zwUKmGYu-~_B{$kNw}8cl$%8Rn8Uzp_B?K#R{L -z0MO~B@uAF5x -z4L4eom(uIh#G8Rxk-FPcF5e;Pg^ryWp~d1Qoe8tZnjGrR{JEz;!7iZg)}|;_P-248 -zLhh*?AB}9JIt!Ua)1zVXpy_-=j%EOb&7LG^$>>TnlW{7`8K@LKtLMN&(w1Y|z<{tq -zV~gDe2@-FYXq5*{AP3yU8|>l%Z7jn7G{(>$(Q$Xg2HRgiL6;#ja_APx^p%ab_$lm6 -zgf(6*W_^$mUP%X-Qp8}C;_aMUMU5u!$JCX>qc9r$^Lq*s1cjp#veD$Li?Wu?(}G*+_dS77}5y@p`8}Rdq)e_i|%!9J=r!Vekv_?79qi -zp!U$vh}=pYt6`M)H^=4xEvUnrKzwFa!#RX+2Q~L2xe!rSEr4RCjk1FzKRqb;(azNRvnLIfacX -zhCMhq&`^WU!BfB;0+Oo+DWon$Jq)t)r(fvv7UP)n%mvuHo<%?n5!(}@V|q(0P|IfD -zT~~`-N|NZ=go`9tP_zc_C!aDoJx<)OIaMH;ulcL_X$dxi^c^q&n@y=#Wr+s!gKJ< -zdCjh@oU!vgof$6C?ah&q*^o0^2Omw)i~~|f7N-Ku;A9t=h%EjBT>-c+>V|Fk*2A39 -z6uR4qis(>A-S_0m7ID2{>e_9tEZCCrQW3kkRe1=Q{2k!M%sg?Der1|-yPO;HQ4AHB -zJ5;t2W9d{&oceq(l;~ZOAFgL?%Y#8mkv8T>MddTVid~HjOz9;Z?KVPO4agXMFw?$I -zb#e_=OpAz(jE3{`rv$07Pg`09eAI5pN*+C|Mzod=wWei*oAZ@#4Jc`8k=+6`JMA=U -z7sM2}J}^qGPQ74^-d5eS*Jua{QjND?b3Ae+`|I~#$^xo^-S59Ba%_>ysJLA_+Y?{| -z@xTbpr&zn>%wZV%WP@jSn$va0d?6-x;LQ;yW?*g@HEawLFii_*`lD9k^qt$--^d@@ -z&lvj3e;}0|f!lX~;XNNBRQPVLdbZwg;y%SEu{NWRXC;ZtAU-;+{-NP(erz|BMms1= -z6V^vOcOoHFDK((4HR%PVeGkuq$w86mrXyEgs_h1`vLG24OemW5!A5rP0nt9cgf&5S -zNPN=Fe!u);>TEVsqV7h%;M+BCon6lJw%H41BL*w?^`rf+Zzfw1)Y#V=sFLD~{VIWU -zlJF8N-Ep<`l<#;<`urMFEHfi{y^7wig0;MFf85uh0+2}V9H!Q4vSCAV3%222LLZZ4 -zURJ+ME!cefqC_Uvm67+nDPB>ZDrTG7)`i5FP87mZXbN3lJ;|{;wwMfdSYJ~St1FVC -zia~ts;cSIKKX$HYKq3IukSPn!3y?hzhYV6Uos|=_Ak9sd0A*zhN6@T6-`iL!+W3F| -zFWDIWkYJ9N@m~P9|9?)ja0VAP3HFitzx3MjFGRkHOCd`N5j+=omA9$hfc2U8rw?15 -z!{mBd^8rW->G+r*WQP2uuZ>rq;{(rd785aJIDh^84Jh~*gAi5S9`dX|aG9uA>rkVS(PA7ibS*X#W(|OLP1dNbcLWJ~LX{)`EFIxAPsy_dYKB2GN1R?cDYrKqUu39nR1j%t8lNMo@2R -z{PG?i;a5%swg~{s;j@^#Cq+Hb+3A>b&5Psy&Jc)wVqR53OpRpGNhtUWc>I(`R#l^Q -zoi%H@IS5}KN;iDufJwghV(u95ymW?%8W54UHDC9(GFmsZtSD -zy-!3Vt8Io`MJzR0s_a5!uVC|D>N0D^oly0pK2l3EbXhGN3g#oh=Nite8|p9;oK#qo -z44HWk=giS7yNYIbwM}|b#dG+~q@)i92qBm_j1~AZ@SycV(ROk-ZV3&VGe@}kc*Swh -z4}zwe@`J)(7xyXF2Nikk)1cb7`1t`*li2$8%z6QDe^LTS!yPL6R<|SvyC53=tS+q- -z<+6s`_34j7tsq)Qa6S*)Mj;*)#zd -zg_46+5!{nzW$NRRXv(ui=4LeMAd0zI5j{Npm%cKdC}O-3&XA`l!3_X(RM -zr+nyYt=NkCL{5TfF0TdJl6#VfMyaa}iEv>8P(6cY(df17tr6oN+nj<yd0Dpa#=%k7jSbtLbWOrLQ@!y~kBGfc47HOa}?K2H?+Hqui6zCYpT{f9jW{+LNyKy(ZQIjaq-Ou1s0f@Pxqbyi&Ki>+mY?K`*F=gQGH{r}i -z{u}M|qC<+BJlK<{RfWj{7lSaixP@!wV%G30#7A8S*A^%r*Zxq+<~jH^=!8#aHPHoP -zS_9JE**qczC@2AFXH6CxET7ax(oaAgw#gPKO*2qahBFyD9?kbGOmv|1%r573f&8{( -zSuc(5S`5P&HwsO-v+p7#TTRftEXB&r9?&=t3k*|T64ZdE4JsU$Mw?EcvMGyT0OUX$ -zzXCmG{^~v5=J_lTKK%`h2Virwles{}icq7*X|<3FpYPBaQEUF+e-b$%w*fBJJ@2^> -z@mU%LQvzLU2p-s3{7eFUJtjrUFS$@Y*vzT6+@F(6SCMwv+gCgQzlG{0gGD_VB-NWj -z?y{;X?lNS%$8w|Op_YGy=I=|r4)|)&-DOlgM}fXknumokG-nIBFoEqq#*CN9n4LtF -zbG;xF8nhCk|ZQv&IZ+qwvL -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 -ztE2Mr=LTEsGf4Vd`z}4loJi|ebv~x5 -z#p*#-rF9|Mqe-CH#Qw(|kH^YnqKR9D#23AXYVxD&YquQ>cD~AJTII{*D@v=T4Ro}9 -zdYAob*lgfFJ-mmseEq}Z2{HHh)Bp4NQ!UKR+a -zS3VHnt?EM*duq=~FGf)`5-`{l=I3*8w8vG;uhf}Cq72|}T{uJ-2|L|8Wy3ud`pqq3 -z)j>&9%f6TbqY3iQ0MZ)y@hHKDVN)4X!Wg`E;yvI#fYkt(QVAdpklo>3)mm2hLsAfn -zl_$Bh*xd6Fd#aR7I!7JfIB~poY_(*&Ux_zok2y6gF&H$~Fd+a9#O69V!Vu74?~jy2 -zV4Ou36H6ralC-usp>kst0m2+z$=(m(EmFQ!ZcuiZJKp&YzKB-4kPlW27piw!CF}*r -zp&i7bm$m0?uO=2K5nD&F_F6|qQC$@>@!46H7Ty4<jK3NSr&`1;$ -z7WWIPCi!susDS#<7;mWag(vyY%@AG~)#-f1Tc(6T`&7ao(4)FA#rt>oI({vF6-{E< -zD{It{H$PzF9=5kXfBq~U=mOG_CIySC>Il-WfGC4MAM*T<9P|tyz^P=_fNV7{3NY+r -zG{Tl#^MuzEAGgFy>Uu-dAUOQ)^RB&Oq*}I6$1G`#7P%meW#Bq=^WCYjhj1I*H!v(2 -zc$~18h85LGwGgPnb8{I{@wa>TPH8U>XDiy6*bZ`_(}$n7)Uljm19xCiZ*6LEk>}i8 -z{kSEep88Of#tUH$Q&Cb5wEr-XDinm>eHQRD?fU)t{qdLGW|y`r|JA8}nm8Jd+#_H* -z#EJ`3?N^)rzg-3QAlODn2d#~i) -z6oB$`^RUUH5lLajP(48#Xi2NC{D_cvo)0vDMc-xDOfw6IO3r?S?aPW#P -zi65v(X{WLR0D8Dv2{hIaQg-qlQX*;b36&yq)RMrmHzONu!^9qIH?qqnJHo@?xEQ4H -zW^d7=S|wRRrOJ`rjAgqZ|Fw9iAZEOc4_msMgu74QWHi|{LVDV8=!s(>U<-3GcF?Hj -zj?m2}^X1{J7=n>US2|pD^EiJ8-ebL~^juPMt#Rz*P@lVpnmWd#C^aL`C-~F{*RJ_} -zG40Vn?(_NYfeykP<68UE!cy -zsGM25)*L8RTcc4;0*|@`XGgYN70O4SK>CsNKvtl&&Om*1T^N%NK-G>Em3@2wiDhV$+Wru`2L@Bj=V5z#NkgM`>LzTtFa%Op;L^8qs(sW`BldnZ%QNlcvFfYy -zp6&;qxo7tU9Cx<%Vx@LgHDb#cbpNMCSD;lf(;$gYi`6n{za+SSv>Kn-6G6);)3at8O0N;LA`hRbVWDBz-hZeu%R8SkhJb=RfHT*}~Bp2dY#TBts#My}Ba;!V> -zx^sRU3iAGjp2D(%K%#LN5bqd5GT@2vw5FHM%;9PuZ9;W#J;m}dvsNtYI-a+*mX3gC -zTlNU8w_5nr!u(xzH$9`oRZrj@UbQEUI!=3T7sfW-$hT5-l1f^cGPq)P$Wan#MWUq2 -zkar8|%5S3sU6@dFE_{z?q&d_rke9GZ`QkKw#I4dO0eb&mu44>Y0Ls{RLb -z+4rY-*9{j;pop4#*@(4dQE>)lU)G25UrRn}U?FpP64~_CF4=(=mmna1dQO0_070R? -zMs2eMyj%Ei<_lQ{IE-cRlo2XciULrBv8SWCrH-70{LNpovv$J*m+r@bXR=|CGnio? -zn){iRT1=6yTEd7yeD9ktfov$%GK`nf -z;M>oiZ;L)fbBbabmjf08U>(0$$wW77!BTVxV!dK)N(rEJcy -z*#_MTJ$qvaP>q{4Q??bC5A^?9XDLU|vmQaSa` -zHMY=YMVKtfknANfxSG=+cL=AbxopH}jr*x|!dG}iprdI%A~?zMEzSKi+^>3@q!m4f -zPgERCA3U0h&({;CE4tsML -zC~R#_x>(cOpq9Fa$dZa003_<(l73mjuSzFS^sqqTYx@Da@a58gq&rFldCxToguVVT -zS_w%Zcmv3wKvx`dPvA4vq4}(2Q!L|aZ;G3jZ1X^eQIgGc?nt^E&sQf@~Lh^(QlWH#wjnGn3N0pJOkRwg(0_sN=4Wu&Jwc8vpx%I -z$6;3Bq2qb}Q4pf%!m6>}4p-=uOoLXtw4BEKRkb)V*)YJK?mv(B;WMjawP$_wrWjyx -zFt%4EnM+%3hl75wZ@|ltCryX89X(~>Sim1Y^FF}N8yXGFGO`7{BPo}ia01WW>Mvxx -zcPJ(z4Wz1>;R2NiNj+|P&hZ)Rd&pF(8=GR7J+l5oF`$i_*=UL4!L7_e38&g3^^?Q| -z;1k@k{Z^W`4DVBFFj#f+K~d`tkegaBfmMbbHJoH&G2mko|f$wx-hfSVrh+8YV5$Eou`{$Ce>cz -zDX**|$T^^+%^k;htQ$T*bwUbt(=a;4CI~IZa|5~E%;V?ltvNN^;Dj#iSkTSMI2E*A5x_e?D(2Q)s%&F7i8#WXDs -znX(Ej?`Wfh##P`*chAJmKM3~MFCJ_TsIFU`rHr>P;2|0Q%qt>7S1JL&s16X2Yi~=m -z_$eWtEn=uEi<8^o)Tv(2EQ|zq3PodZIS}Zf*y}bFb8M~t#+lYUcJlRe^%7c^+#K^{=^A}Lwn1)Z& -zv~eqE#EIfz^XMNi2eXSMEK4!nqwd70i7Hm5wsL}>IWDQ2+-)kcPT>@^ln|V{4q<^} -zXCNB7GJ9%F&BkLpu`cGcUPq#c&Wx)n|1!S3PU3rlfCfPlW>+)@viTv|s#i%%D+Z`w -z0L={4ls=VX96_=nZ$g>IE%yvhcgUu)T1!7F5&><1DI->Nv00P2NIWI3uE@Jqg$hTz -znlIaEa}e7Sic!`lJ*dTnj}o~BX^FV~5=-UGcRuAn!Vlh-(g2aoie3V85~$s5OP*+l -z{X0~3s$ePbu)J!5Ta;s4wks%m35Y9X>S?mN+IAaVRg7dQ38|WgOyZ1?hngFI`zhXP -zy*5sDk$%B&y1~ZCA?o8}rq&?)7V;f4U1;J0g7D$@bUP&*SO_gB0`QN0WdwRv)6@jR -z-Ildfa%Y_p3?$wOAo6lWKNkBz-1>1b!YR~4r|8(3_kl0kQ%?{(Nw!fP-l|QGz>>2P -zT(=UXcc;zkORN~)j~8hyl8v3d6;wW>k~INWNIoZF!k}nBkpnBU4uFz-pKmTerJSzA -z2S$^XGwk(=w#gDp@w>HrPR1dk6gu?TPb-2~f{7LwTcog-x7KlgdQdJ#Yi|3&&nr7p -zvP97kn&?r4_0pyH2n^WH@_}TDLMm*fiMGCVs;Z*B!%@?%5-U-efQsK8a@dhcOxcV_ -zxu_Z>hSsADdU^>U2ql*zF%q!%+`iVoWBl7igg4zjOwYt`$o2ph=*F=Vzt1Zf;>Iz= -zt|{H1A_}wv>^CYa*c}fEpo};8)M*BG?Oa;{kr$&ml$@NVxxpFr^dNZ!!MNfQfbjuy -zx~%7Cxmg9LusG%WEkt6*C)58r=RjUw+b;2O3&qn2X -zZUItL)cLWdYLd@_UeEr}AUS5&8&CuLa65rIJC3ccPq6x0Xo@mfXiu~$u6|Lt|CU7M -zd^49a9{nLUO{E6re>GSeES66iIt-M1((Yx`^4VUW@d7m{Fqv?sfIHaE+%B1B05XQA -z(jeV8bc^TTI(bJYA;=7!JvsgvsV^Q-wrX^aXW4*%A91_tS(q2Jq7kIdXDE-ihAmM= -z`2r^Y(n2ltYCZ??<`cUZj)Vc-?xa9_b(u^pc%sJ7y_R?A@6IQT8;2!EP6^ZBh6D4|XRF7k_U -znu1R;lP=gJduNvOX#40x=I$?n06_ -zcuc_GKumPlURM}wJ$Ij=B%sJg9>a2%lMR#bk@rvAih2hjT7C-}Jn_F^o=ak;K -zK5VRstLGt;chqtWq8z3#a0qm*)}E3?#;qF07Cb7l*OJF4^JZo}Z*ZXG(GQ5*7|-HB -zo94CbO@4zof6k16K6ERvPb!WEjunRt>FHNRhrmXFIf50z@x>s43X8JAn7tY*2*bG@ -zL>mcXz8 -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 -zeL>e?&QrQ0*a#Uj>DN!=CzgxD -zkdqhfj=jedvc-^~)+OXYh_hBmU3C}WidjC<-h3raK!wi-BLdF1xrpD-1r1D*>0q_B -zuU>z_$u?^I4a@_@Is>z!zg(FcR{t4lRmOe&BqWmGe#h+X`^&=d`nzR({dxFyk<-WP -z&+p6Y&*H+rf9+@Zm#E9cP!tpYk2*6{r39y`(ymJPPcD=58pn2`}X(#`~7|U -z`|aD`r}Nt*Z@xa7c4kBGU$>_m$AA5ObNgcRS9M3W4+uLTfc{N&W5xc|Q>07P-a^Ak7R;GWLRJa*yoL&kNc1;sI%yz(K`2gT=kqFFYzo -zDV!p^{4oEmbz8vfYk|7bA~=(uwR)E|+%9Mb1~{N;-A85dA#8l=#lB27J~;hpba|1;9KWmWCMGsy4Y4~&S;G7o -z2iNO9HpyRM`{gs|{#|d9MJo*h7AsmkAgKWg1`QMcK9Un2$7h9*P74k6R9}+Qf+~$* -zz)?9&9Q# -z|LX?`tzjK7<(%eV#RMlLUm9PL`OKW6x1;Ow56tgvm=YQM)4_DWzF$xL*j@y88`7Q{ -zS3y`eC5X-q)c@@1PZuoDW2~IYv}HvS;DRmu5=Y%jq9M7x9Vpp~&S#7cpK+UzcU|HX -z%UAVn$HvZaTl#i;K@JANRtQoAJq?c+!OI9Kt6lO*EA$}KKt^b{k5WeKI`Qv$@gxmO -zA3n=KQc^76=v0|y&iu8_Cx&b!AqHBkZ=9ybx2S(n{+c55SWY{zT -zJmnk%O0RyEYkH#NUg&UuItCiDzHgzu0>SQlnd_iTmEJB^MCgUJGk%e+%9Sb*QKAkO -z3IHV$@~OM1k^D8AAEbvPT0%IDJVxT`V$-zoBM*!7BA$g!WaCA*TiSdTHqz9zZnq?H -zkS&@gz=m!#td{NId;=_nVMc2W(L480EC}<(p+V@Ll^(I3wftz`G>*CJO+Ga1T-)^Z -zCV8UMPjF%r-Gt0=gCt%SCy)4Iwi)efn^i`eqbM2yUh)pH+jpb4<7f$wC;$^{OucJL -z-9k&|q|ofIZ+%%^iGu*(XpBtcG^&(oafByZSC~l*Qw0I_EIn)=fHXx`R{U7*`vpl_ -zQRD3W7l6;;1YIcd9ej)!ZgX6W+_P;0G!vmcBF@YbYbpeM>{-W1vcWYH{&(?>f_D>gn)Yf8Wq~^&fXYRRW0`dAwM=i -zuF6L>k?U*Kmbk?M@RPQ+>em0p?v^J8F1B>=Q1BoBukgMGdL&a1@m>fe#4i|Uypa6b -zj=;8}q8rAm7WS{4iTHWF0SWlMtP50W(zV%coZR -z?e$wQo$3F6%wMDSLxwoAR6BgT$K`r;6~2A)@a_87;$oXQ|9cEpcp|@y&!Mo4@t%4` -zDC&I!^zw+~SC}Q`E&8|Dx&i=$Q5To;yZ#~<%D!g@l5IylL-w~Tk?lk&zP<{9>G$7} -z`asq)_#8%}ETOr`l!ps2Is}LGbj@cS8_GPShUK5mvX@fd3KP9}B&8n<(xe4L4dxz* -zhPkj8ax%(Kg8fjAO8={VikKi9d{x1>BA}9Gb#`}Slq;hBX=tBh8_T~@ydT)N=hZMv{_JP_*S&pM4d>tH^03V2R+6e!#k^ma9Ts%hm4u4jpXs!ctdwv -z@{{;&pS_27TQv*2p7n0mHX6ckeufu5;^p;6bW7q{4yxc`zGbf>_h|PvI%Ej0B`=S@ -z5v_`B}LT2qz)? -zTnb%KJ8Oo9qs+uQ_$T;jdx(j!nc5TMUBq5*zU_XCkJZolyUCA(a&@6?E`lvIAQU10 -za#L+n?s3oJ-eplSXbFDMHR$>YL%gdW&zq~18uwIMj-+iq4 -z=H!8l5XZDFwTE%O1bQ$QKJDLFv!|1Va4bl1F*v9Ho!{C#|MkB`_)Q18G`R;< -z9%<&?0bPs5%LE6M$?8_wlJ<6mfS3e|zkY;I*}4`oTF(Z}3ii4m!`ctyz<-N(C4BBv -z!Auf?sM67(P$&MjJ`#i{hl%fCYc@VqQR7#S^gIW=@v|Q~^JpKa%jZGh$DnCSP2$kJ -z(kv#RbLl%}Rot$t%fM$d@yB}{9lS3{{ql72<_7VIDxzroqV|2Kf;F&mE~VE8>m_=d -zQky}2Fucx`d+GDLo4We?-6v`?tjeLPEjf=y75X606%1i!v*SGHw_yUMeE^)3QuiRUQM)Iq1(OQ&5Hcdtlv`sNvYQZQC|0w(X>1+jc5;Dz;Iv -zZQHhaQt$5Wy-#2L57xIe*I0Ahk2}jP^h)T#x4&JY8!|nqW`gW1q!OPUt<#AFf{o$e -zuF;u-`{aN)u#LkCj!3u51Rwxd4>DPglGcuw_qbB+ym8jpK^G%3)Od@hd$Zqx(%>IA -zcNp^pr&3#xhc1J1`EbKk^*fxXl@FjzNHm_IYI3?owl*-rH_^TsV?LoPEtBap;e`MC -zbNA^JuEFG@Z`uHeg%9BE2I_~t9snmdIQcU&h0RA+0`b9Eq8#8va%zl1WdE%Ro0{QS -z;r#RqxSbc3GzBNssq6trS;{WB;Ee7gcQ>rE_2na6jPva*KbFyROYh8kcXnn`9M^Yp_z&$T5a99pkTP_0Qt+QhTkekv+LbiEi|cdq@@H6f -zkd2)FR>X-A#qA$-P@k#UF+~EU=BbFBOW9rLl@kq7$KXqgpN&uEkQKNB&EB%J!OlQ# -z;Psd*Uz;(XU`%9VlNJdF`Z~8l)${_Xf4dk} -z=oK=g`@YYp_HKRmKY?#(e4lZCYo0$J$M|p`ZC@lgfVwyKr9x9IyD}Hm^I+9Y`egRs -zeAtkU2eW0>xm((#K;FbB_0XYI}!D*G}A)P@XT$HeG_gw*kxda$fGfs76NN=l>D&nua8O`?{yVgiUHtO|#oj)uz=0Bg;=+9j{?d%=8s;)frSWh~Ay_VbK -zi%$5zD3qWP^e;}9@E+z51V3JyBkJr#=ka-Kq6%MAD#oo|1;zW#TTEt{k8|Zo(~H -zW>o0Le0j2aq`7xJTzP!|0`sw(pL)QlLu-vh2JVpOjH7T_=SV)*Ci -z>oF9ZCNGvRq!gOJ2+V-^X;K&E4$z|w)sagU?iYgkRYJo1riM<4N!}GUQ5Q^K%v$VX -ziSHeB`8*{_B!Fi|#=LhA==lLrkXBt8KiYC!18lLS8F}c6FX<6JxNr%UHevY(KhAh@ -z5};z?Yf*H%>92e7>It8FbRPwRQd8_Xp0x<5`LE%_v99x3asG7b?)0oX6`0`l@9l!e -zlrp$CzY=o6x`wIT6aaYH+*I4g?O%A~5gk(8kCHs}gf2Zx(k$_Aba}6!k`Xwadp>V% -z1XkTH#^V|sdXMlrH`Q-e`Rb<9cG7=|lrN3Il3?T8*baGBXDPxc2bO^AE!CYObotzF -z8j#tft&xkKj7w!Ps5ero|r9rInJbzDG{wbRt!+!$R3`oIWXT=rd5FR0E>M -zr-aB!Xv%yZ#awX0XF+3!O*!kqR9SrJ$2ri}4%lD%zV~DMW7j*<3|LGMUk@1W(gVah -zLBeDw7cZghkqfwORZxsqo3(>_*DzA4#@>9qiiXZ)N8Fk)bdU<+9LrVQ(4 -zZ_K|v#4F`XS+sLxrH)c3`YO`z8c-5dlI3XAe^p*^9jjW%w%yyZhm9$~m9Z60bLOF$ -z+97})ojG1WgI*X%bzxo64U~!X7yvMAoVdDS{xEx&1qb;li=DRrO7dq~G{O0^OGabu0WF;ETNaZpqL6w1YNpUWolURA`6EfW;w) -zWbA&Sx*-eNQpDID7_2xj*W}6Z-!u+_ugNpb09Ib+a0mCJP!E55k``P^eBd -zG>R9^RH_ckK-rvDim;~F2W@;dQ~I9*w+}K=q{S~+JdG6iu`4bsdB;zT$O@pbbrQK4 -zjyvH4MoY40#`GuLl -z`q$fvt>m%-zqm&rY~p1pTk{;FXb7lN+?Dx|M|ocYQJ`17Lsnu#s9vRP6}d7HoZ2Sk -z+VNcz>AYG2Wt0^;X2>o8&pxnB;qVTTf@Vn0E>jDx9nN4U8;*~h)&6`%N;Y$!Gn#G{ -z;e9a_Mcy~ugb(`cuUcj%#RcPlJvS3`yuG_RbuF?1OBOtm|5mv1h85TVO~dz+VP@>% -z<=oA4GKq}C#@3lM-JnukL5hBLWkN;9osXcD>`jkBH%XTT>-k1uS5x6@003nJKb+s@ -zrN?3==Y3G$*t34`*ZlE?0pMp|yW;AUrltgGcE~ -zM&)yqKLkfzUM^~N`9Tgy(u};$Zn;#=@`D5_t{k&M#mDOuW&p3v!6 -zw?a9NEXz@PIN){3a9efe@f0KSEY0nRos9dlR+6?qZ&WTR;8+-So+y -zZjUeO2kNcwwKy?5e?%AJbLbH%2kQ~p%@5JTFZ_si&F`=ctx`w3b;zKZxxx01s=wX` -zs;S9plnFH9mT_e3xp|J$k?Bx7EYAxtwh|DZdNcu;+g0XMQ--P~>R;r`IMG~N9HR1) -zyP$HEDl&M|g7Y2N?>Me0Bsh&gv$jp&I;VH-vC)V6pvh&PTBG3MwH_q&7oie8$RSCc -zkjmHBReE@zF;b+zF#M*6!*hj(gwg`zj_5edE_03wYD~W -zBu$~x(474Ss7`ALXGjg*qT_*O58dBq0M)F2d;htLQ{MifNO^%%mIp`4AQ9QQ1F*H2 -zwAN}Wy}v*Tt@6Y^fT=ZNrOF}hH&h*!(TlH2yu_3bY`QmY0n~y!inFdLo`GbY-DUylbkITawCK~>q9D+1>VViq$3{Mg -z*X8pi>PtQIwpmFo7R=f!h!%-WtX86(C}N`|B0!QMxHrZ%UmTi`tj%rqj0F(b`2E~n -z10OMFFL-zAJLc?6qV{@y+&=!+x_p@CDq_BPIk$Cwoe^QW)%9B@I5;9yUU~Quf=;H- -zc*-I=7EwdjG__|G#B@6%ES4I!hQPgJp&-t*V~qSuan6MvnTY|Ci>~=K1#~FtE>VGt20sU6Gj5C+gdu1-b`gpW -zt-3~*czcV`XtZ|W%p46AxFJt-5`{N~lt%dB@mseAjIL#{jqpiPz_!e@Lcd+KdyP@Swu(`1Saw!u -zI8w|ijW9wB5JEI*J%tSM$cb?J -z_ki+-or>N0IJeILW}%v1Vr<24N%9(vC!vY3E)&prXCodBXOsGamR1b%EzBPI;2eT>0b7@ -zA&m18$#bSGqEeBn0s`L~d=O0PQh!L#1Zpqt01|9IZ7C&CTalpqntQ<&0Qpg~3Yz3jT;s -zpP5tR&y?VgkMYT-vC88sXvy}+Oh)9FeK7j&5G9Z!W%rCB7~Nzi!&mxh(sn^l!Onvv -zjZP(e7+cYJk|=a%;*T|?EE1U!eICDs`tljLaSn6~!x~{XaT>EX4 -z`dLMLNnK`|SX$@Ke*H}kOoU?Fj3g-8{O~VL46o-q9^<$8mV?cXoUVYNQu53}luvTL -zov0juG}6^h|CK94=JgRVl|d_)}YV_;?_v -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 -zbc%y(#~8UHubVY!_Okyh}yH-yZ6jB(E -zu~)q@oONk_N1HA- -z!nSH7O}GnW7AvN^f*SDN{Qyjkj^0vWLu=NwT75RgvP0q_3hvFr1Pn^f9*US2dDf{p -z_XHWfelNSXJB7_L9osXXs&J_z33|!!9`}8@K(<+7`+gqid|FUK;CYl0fqH)EhUja5 -zRzD(K4uEHx1LbI?QRWyCNhN6fE1Rl;L-i7-bSB(Nco4!&+ZE;_6Gk`&N$l!7?8RaT -zrLJ}l3}En!^hck4kKJxC+L)+viS0L!<vVltyL4y6y8U}=n45VGN8;@^`+x;JlTMQf;pp}5i9`+xLyEj4E -zGi!=zF3sGHmr9(+Uy267kx6}tVA!4Z2A5=_Fr73QtwXmBsl9zgB$~(_Jgz{HW?oYD -z(DrI^`QamKZe-a#${})W+u4q4eFe@G)XgN9I(A&WlDg{i84se=6V@^XTxTU>rP< -zrj*;9MG-~Qy4l7~-gAxxK?&}|)?A=kw&ek!NUB^&;sh1&5G-V=-c*;DdwiyJ5hyrisf$LYclixug9-)2A{ -z0TGb-&>${)4A3FLy3EggJ`>?ul0SGHlXilkp0#A2XA(Qm5_G--d=Cl~z5f08FzS9{ -zZLP9j@vxSoe5Z^{h~)^7{yfvpx|qJ-a`~!uTM(-g_oNWW_R}>PoVS5ZffaBeB~8UK -z!}W}lDoqPa_GQfoGO;?Ies87_^^+0?@3BKRuJh!_VCau(fk`dm0oq&;C)l^tKn{*V -z({rYfK||lWZgx&bK0V2LmJ17fxf3;t(aL!R{viwbm*k(jHeCFEs9Hdit<=Av@k7|JOA{`5 -zj!)WvnKro5O3UwW6PrNddEVHJko*&bIE6@K@)EcO-=(Q^YQ1)^Nph*gmP^D>`r2co|0Hs_Pb({4YG#0UFxx9BiDS8)YoqrsT4jYQL{;jUJ@4z# -zZ$2T9(aj)k2f3K(Z^Z$l9y-zi51@gu2uQvh`)5lz@XDo?5d({gS>09N2>giXwxJC> -z73$)x#?(f;zJS{Z*PJFG5&9cD^) -zvzYVE^uS4SiIqfE0E&zyqdv@ivmr(egQMV2@W~0bh~S#Ul<6I?<-G?anPf0aKn01d9D+XbSScdAJytyWP;c-Cj?b|S!{>$PqF -ztSm5YuJCbOow8rs3?O*&!y{XS+bf=c_(`?3J6 -zLNaBz_Yp2^N;-S7mW5)yISHjJktST5&IR%9aR9;A%fiDf*tAmyLYZy&$4xQhJA`)z -z9ESk`u*PB`g3h>)T9O(mJ9OMXlfSA4GVz~&f#fh~yO}K4B@k3rLSdzQyAx)Qc$gvg4BPS!zZLNyPj5}H0;Hd}t=975kSmCx -zODT|u1%UV2d)(%j41HVND;thBnU2ySEyj$M2_>oeiz*Kt5A?SfK<1(c@liXBLB{{G -zxTpTx;+A;gS~Q>3__^!<<}@N@_ib^9{9|!veOufa-xjy(I)MAP#jW5NV3hM)_=xv^ -zS==fAwzySWtz3>n`LdP;TG9Sm+^E6!@{&5%_n-IPswWkpcXzq8$E&T8{g(>6H7rhM -zhn1RC+eR~4Xng!0b<6E?-`hqe?L-1B5?#yY+*2uI+i&P6?k -zRC|~WJm{)@<3KhFyxfRjZV_=wL-)lzi1JDRvHF;O$O$B|611kOFO~9k+ak$k%c7cgiF{87IXR_o`(3>g_#Hk^?$)R`ysOyWQeI|Y&{_T^p -z!`TB{5gxzQorap)78$I$LL#>rM}zIE`oaed=kh@pc2&1g#iG`P_~~0ceyMsvQ>*vc -zV)n{bA5G@x2eoCr(3weBCtI;fZz3(|D(?~LBYV@eUJz? -z1*_;fLU2NV(f+;iK~$-?@HSnBRt}yVyBKU7OBV1G`3+x*7mqse*KcW5B)xmQvXR)T -zYMoW|b1&3|hS6U`YV-2Zkoyh4+!FuC;+{TG__nx}lDh>0g}yEB&%YKoIQ#!^aYM>V -z?%Z(ntI&7u7&CvKiOp|*?FL?TX0$}5pFZ`a46R}g8;FnFU_nnjm>9zvu2&Yb;-k|; -z2lY|oLtLvq5JvDe9u=a0FLpp;Sd-m7;NV=?FWyo+A0p5Iw`ifmA&T|?c>1yO^9m~O -z5Uut!7p2TZPsV=+XyyW|R8{@8?ywrJqJANE}$$^>vjcZTUMX -zW!S)IqV{)Y{!YTPB1!Yx;?~1(_&+ReqJJ!ImA@8u*EwToH%BB5S&GCtsilp*(7_-T -zP!MOE@gMwdD{)4(R>2j6OSdELWn#?>AwG3R?UDnFL^Z`N9Y@MW%m -z#w9MMh|`L=@Tp0n#%nMM(k+9eym;ue5HU*C`w`1!f3f`38e8r>%LI5=d{p@_%str3 -z&TA6xHq2h+0xsOx%XCP?X};uZaN|-sCHprhy`k!X>U>EWPm>Fl{R#NgmeBjXtE;U@ -z@HW4I!tkE_vNm8)b%CUw99Q>GPdJYd_-*C75P_z2azczpMl1vAD)-*A@K~)jr8%xV -z3j`dWr#7ove50 -zt@ne?KT00)p@|V}WKDrM$Im;(w2w5!%iXvf3tAZl+WVaBX8g9{CB=LwMK@x4eacB7 -zAQ$*#iY9?I?Xf^UzjeBDy7)e8*UpW&?)0*5io*+ThIxU03smAd$_mDbj<+O}01DGYUAQ)EUR(X)aJ+Vu6gc -zFpEZ%U?*eD5L}B8V5S@{Uf^3cm=t+w+eQgskt+`%?y&a>aZ>QJ!)MT7#iN+QEFhBv -zq%@q4#zKT2xr_Imp|-a(+T25gO&z{F>0{bUji4pg(2^b+Qk;!Z{dnC{z<%GH6@ -zFe$zz6ih(Nk*8!5r-h{PWUiY*B70PCkJn*aLB#XfGmPua_#+x=nQRQ1OeOBZoN^KP -zzO-uDq+MEEyYac>nY}IartokR!&xikocT6zOXu2pw -z1&~={PCL)IFYrv}YdTOTWPrLDqP#VOYt>#pt_Y_$sk53$U -zE5wjD%V8yKUPp%&bu_^{+tIAtZlfPvd!Bh}Y)lf$&sFIcA?36-;@GRDlFnLL<-*uT -z5PXvXSz9aN8=l2aH;TzhESGIshq;v?=eT$D#Lm`k=a4{$JO|SYO~+j2BC&#W2vuju -z$w%u}s-#%mZ;Km9@E?o&&yzPs!GBrY9l+lfHv_CII=a8xsD(frjr05%XySib+&RAZ -ze=TlKvs^p9&^dGN0Solua8%mL#^dE-&f{bm8_%!};2g@syBgjz6Vfp$CrNAo>KNw5gu4gl(H -z=^Ec6Q9H~G)vR9;(Tq4|toE||Z1TmPV)zZ(18NM4D}2yEpu=c*)Q@#=E853{(FufQtxnwh&qD7I+Tm42`w1p#l?M>?O&PDny!|S17RH(z -z>6_GyB$cG;=yt>kp}1r&PIv;9xX_gRE9X7-p?Lz5b2SJm`i%k5n?$@j< -zvHfq0+vUG4?iIQfzi*2>*VFw!EpAFL4)_onV4OiFw^0aLYEi(Fp5@(5Z6mo5q0dA7 -z6^#r7f9a>aZsrw+Va)Lw_=%6n6RnkrzEWKZ5Z`Y;-eN^_@;OBrqsQQ&0c&FPDva|Xv0o4!GF01@ -zkm#HO!6E|l$#jE!`bJYU7UG%*Ph7fGeP@}v2e~B^l)P!hvH%0$I(AP7NwDX7&%u$Y -z%6Vh^phfBv(ln{rbKqBy{v1_!WFS;;wh1HcWt2ycsD)>|Ui%*;V!`@j2j*$H<>~Sq -z;PyL(!2QP9k;^^ZW}fDD9w47n%+GD+P{qI*DXtiEf{ktT{Dr!hf3TIVfM889RRGW2 -z7L>rl_$!jPk%9K^%98`?bc2;fMC-Pks~f#CbTvu_U}s^TlNd*$2A2P30Bvhm2U-uQ -z2y4h>d6_6te{M~Hk;cR^WCF}FUX|(B-4x|7WOM>?^4J^X1{)JR{rct-4-DF_5+cSX -zY}=d|qtYpA8>G=U`Q(W5r>d4xY5rfI&v~|{<{^lbwgu0ng0`l1 -zGNr)Xv1Wnl(*tydWoeB!~6LP@*E;&4A -zMUUf7=hfLB#@gew!RlpG)hQxr?bxx5Sk1NqTP*OGjCZtt`0?35jD2O9Wy_>;^ -zJL%A33`PHIaTk$g@wre6u&KWzxr`?+6hx0z?iSBfyaP!0dk -zn4^~h0+Fd;6{A16RnwGdV3jTwoY7C^tKYF;13%sk-^=Em_Q`bo20edUg?e*_y1W{SB2v>Bf|_JhNJ$n*jIc8ePYIUY=LVf?4R -zR8S$_63@}|`Kjk{e_6OJ<2atiS02W+*o1Y1i2af3VQ!F;P5i5*Ay5tUZ|kn)2HL*2 -zBuyDr04Ls?pkTdU(K5`OVPNFol%rWAw3CA+!x7(e`NsA!6+eY3r0qrvy8ooO@n!7v -zdyQ~kho10V`~b!J5WBR!@!a(6>Xwh(a~9!gB3=Nq4UGu6kEW>1(t2|Qw-UYcO4rZ` -z;g&It&8z!gi{1PLA^xs~ -zgEdbX2rQ;hR=po%Dv7(8Sne2E0 -zPjha6d{A3GP~!$x{FhgK|hN=00d=vY8ejw0`Y1J%d4WXv<($D^WvRi -z2w0~?vFSAtUk;tE)>2mHoD<|p4cfP_|WR^@2jn%lHV0!9CLa&ii3wsc9O>k=bqE#>M)chC4{Y68l!fQT_hv59+#9kNp -zO>u|p4{tck*AR?5w<(uNIOxLg$o33mVnwOs0vaqNUjjQSYuyg8`dledXPMK5ul|eT -z-c$UhxEr8pK6ARiDo`!|p}57X_Fyn-51C>(xMu*r?szdbzU@34kSo&6=CLXuesRts -zCzEnrFH^CMWx -zlqc_)_ekRt+hvPZC^G}l&;pQG2qol6U_nIH4i%#*H{1%z7Y8yI-~3Q&(>Kb>x}(^p -z65S#ZmI#b{&m+V{*knnx9%z1Ad;mPa=x6xn%@)_i5>v46%Tlbi9AxjDxU49vy0=C} -zNDC&GOdW@Z1}Yj-PuSm#)f1O)3l0mB9kEBQX9nFnfX5BrQe -zQX1m>6YD#Z?a{U@eHyK4UzUL5PkKbrVoR!U1)s6`OPz83k$r_mF&6h*;@12taXbDa -zaW5a65D}{$5&-BtvFYh#N@41T!oyHe2QI%M+Y}U~?YdgMWJXDe7&x^U^H;j*LXv3` -z*v3z5qG`FV%?Ud(YC3vizIW8|lSLTMt)?}wY;Q0fdXz<0+=t(?Oa?C6?|Ik)p -z@#Jtzr>aFt4ljS+AS}R5n@y^8M~N*HG&JWO&8_+c5YX+wiA22PId$LqdD*r_$B^mt -z#-M@RMY#5zaG(yAf9IQ;55pe1ZvPz+_)1X&U$a$GukXr3;>U!xBW#Af+~>FfDxw>8 -zDDUSmdkAJWKNooX0Adsq={Eu{b5YlZY{dIa6KjiQKTRfO7=JUs{i@9EcR&g2$v!eS -z@!K9->`M0Sv0`a?qu%cFxXtuMW2f~6{;2SJWn-#nzX$*Y(3&`u;0~1VI8zxYh!Tp! -z0HyR}vOY|uF{G~UgCO2wzrmP~<_e^iS?W^8Jl~`N`NbHT0X}F-%-tmfq5i<_5;ti! -z?)PxKPr%a-)OOhd^Z=Iu%>sFmgLAWA1tplbo)PPanc$e2r+M7E$v4G~_?O}?`xnJ+ -zsbwCKuVD_)LOXf+O>rlP96TG)nXJ>dFS8^QrhYBxld99?a68FUJQZ$8&l;|(;%`9O -z%cnB+$O5{?#jNwBnRYY(2gRK%PXA4D!}5Jo+|B<`+(%JUb%4HCI$Y&isdx=YNXFA< -zB?-+TEDDV;KrCO2^0W=sx`A$Y;k>Xz1AbnvvsgkY74g@L6*NYoHADA{0}7X>FsLKQ -z=Rz~9c8nC?6!$ONe<*GO_5}m_jzs&LVnc2|1zno~yULWFn&@lkS;S8kN1%IYBYB}L -zu*=SDVdHEj5k -z)xK7mBZN=Ry${_l6*57oV@~d(+Fx!x;N2g&q1wH00u4sfXmK5&x`eN!E(u_ -zN_u6K5UdLo@&$P&b~nfwjW*IB?Y0s02r%Z&c(5Rl&Qnp@Mg!iS2JX48gjA-%(jv$ -zx&Anbe(4LzZ1KQja`&YjA{aG)1&a}YxB4SrHJqy2w;Z4%`lxyTZ2ZG?@eT~!6mP?y -zE_y=&$9%3Y<>SfcR{m1y=}b=u~2LM4TKiq>>s6_NbNe -zya4meH9_U=nr3;4iNlQjNdI>TcvAJi(ZxhV!Ok#(I4JzitoU=+={YxXK@Fb+P6)1A -z)=?x3T!BhMSa;|3T&K6A?-=gO!Sc}fXyx-^v>z5sGSQE+@kcW~>PL2ElvedpXSkSb -zu%RVsQRLj-B|x?|3d|U!Y>C{y2m^J(KZgwM$+SvVTl4k=7MbTiUHKm11az#hbKx!B -z<7AF#r=up0SudKBSxf0&!(u2#x>La87s2L&#+7H)x)b)(VIw@1^t;rSIyLtR+^r8q -zsJSuXHEq{!}belsaL~)QqMVLE5_Fw5!=dV+o4tvbv9)1evuxF}gjlt~yrMSl!+rBAo*Kdk@r|zN=U)X(>nP~O!ILUS{ -zrGx~A>RIDLXZPtccQTz+WPtHHCRqgBqD%d=^c7?AnTV-jjiK7*^{~BP4>ToK#UXrp -zZ55nEkG5N=CgTEzXOhWh)3<6co%hL@Ef&jx0yY4Am-Axe&=r<#epY>26ea$_u%9|=ArMUp&~pq~PJK6Cxm>FhLZysE%OqeM -zAYN5@#L8ca+u)nxCdBuI#l-%mxWO;D!MzJK!)IOD?xd6eMQX9xx2U$3TwvPIu&iig5ANh3qSXuu@YB7=MQO#}0J~pPmnjm883H2?q^w0A -zR8b(F&T4;Uu5Q{;rFtEVM3qV8=XWf=fh*#A2P;kiVqizi$cZU}A_ -zn99sb#l@OluV(up&b-tyv^9NrC4}`TnJlv73g+ApbZ2-41U4pQU^4BeiVWjs-{d~2 -zbcBS<$AGZ&={WL|B|%lH#b4Qbf>;h(y@14th2bE0?;fv{C(p=QhIwiFO-%igV)|7! -zq7m2O7$*^cMT1l7&;UWL+nfhvK}M`6F#{q@EP**mpOhJ?d>54b^6s -zcPT7_v8f^c`b)vZ0P>6Kmpa;!v*HKsPaEM|eZPY9<4!aiFV>K4Ahy#E%>PH$J+SB1 -zHR>9UZL_g$+i2V-X>2ELY}>YN+qP{rwvGL?-}|m_?Y)1*JmxXSxaWB>du!C@vQEPD -zrF1^^)uZqoz!~TY8aRV#VN${qM^WF3RFj6^;fpPAN_yJn+wyO+j739+lEb>QU2p{6(qdg}_1SZgjFcsmC1_8PM+DrRKRq9-vDeGI#8xdIK@QPxDkJGiJp* -z7+ahYO*ovmqmq;C5@9}-?s^m@#BIO}ptwng67bp~8HJw{9tkY4I9Us4d`tZVat&^)^i(^VMM -zdt+lcP2S)tsgc#N!C|%K)TCqRvFNCVW|ZAhNxJRu2{7FL@D-(t(_9Y980(_^o~J>^ -zHU)N`fx;PcGa!dd^tEU2kTe6;ZWFICH}@CLQ>lTCm5IO3_-9;Tad`+6b6t={BN<2% -zR4x>Uu%V+<42kXC<#F<^%8lxp0{d!Y$Ptjp{Qlt26%i3YYPqM?fJ_P@pZ6I<7W7W# -z5D%Ry0haOb+bkR_a(f2wlL+WBv&30_LOxrGE9{pF-N{A*Ryn(VR%ucA9vAR<5SncX -z64qB@@k21W`i$kum!pqbOiowD-mNLO<;fN$(lwUqax~g_51zx_!8G}%YBgqvGOxtb -z+{ajUd-`j}b}4aldv9U)3$?JbulEl?ut$ysEScDiMH=z0c@jhp*q6mW^((hej0I^6 -z7_yqU68_ho -zZm8uq5#Kd@?(}FP&x68rS$$z+DGc>qoNGuiM1Q{f!DofSjJJR?)q0Q15|l5Tp(!|= -zt6_b&3AEZ)F}8$+>ZkIF`2nS8CB-OlAUkLC(%eF)W%~8o6#G9E!@-E1If|Hz;E{H)Gf7l00 -zypf`vk&hA*+n-u-@oO_wg_@O~zdVyOLdW9^T+VuiC??zBH1j)8FUd7dnc4+|hFazI -zGR5;}oF<$TBLiPxsXQ?mtUD%To5sg-!?P|EmhY#cvUp!Tci)L}Ekt3<0b>Z6rtk&& -zS=rgN0GhZhYr3b=c$9l^^B4aruA_a;{FcXQp$iq}} -z!JkLEUshSXA_2~#h*ml7nDfz`($I6e1 -z<`N0JYt)dXGs^#@x+6!UK8IaDEZ(8mJ^p4>^gJ9J))@%Hn`YaMmZ@nReXQH`Uss&;dHiwz3M_cGYHWm^)_?Sej4}`t?jt=q?GTZE&jS_lnkYwxhGg0k@;wAN+-VPgJyHir=~G -zgkm%HjtB>SQar7Xudj<|JY#f^qQ!&&`ygs>H0QHZ*Ua-wE3iv$AuEg~*?f(oZ! -zsLi#GVha53z}9AJK$f7TSkUYnmzrxdF5K#nnc3X$&P5~)D~NxjHqd< -zzwzPg_5n`+@6!|P*r_orVG#S25Kq^ -zg53qR#Xp+a5|Xgz8)~pufu422k|IGHnk@@548~-=-wVb)I<>@`TlUGJXMw!~WegLf -zJHK{bC($Bps#wX)e!jb`L}M7Gz_X$56L-fJqcqWO$OYoPD4T(Maw!T|%-f_Vs=O8;8iDiFLL0E;^um*6ri=J>xBcMQKwA;99k0a)CeAsYaT -zJ7h{q;D0Rcq6Mz9KNdItUyIwi9{B+t>=I`21tRTg#PJp`4dN-RjgFV)GGu5U6v>o$Y_^@BWICs8lgiGsfrIIDHJbzV+~2=HLvsbY`hNdS$@DUpf3te5*GvVU -zJ*0@x7!LbbsdCaljmKE8Xe%uH0>QUN#>l@nT@=a>2l(x0oXdTm$crT6=GSB9y -zW2Ol{8`Ih$@E&&xdGN)R%O&7@$uYBS8_9WtVA9DXo&n)OO>$M1hM3mzqYje=&VgGc -z&V9DtEv0A?*zoe6x9%N~Vsn=(5y1>bwAvL3^%|%a==GE#!PQ3xZ!vU6oNoRPk=TTQ -z)nV&)9xQk;LA$X5;=N{x^(?J4*vv(?X2`-hTQVm{sQ&i3`@TKLGH`>I`g1S)O9z_cYh#c_z(SRGYAEi>#T#f-m!iPThl+Vro* -zo%q+{76@60m?FaNpJ%s3y*;JDxQdZgm{PzaGpcl1Fe|gazp3~8T^v -z80Pdd`SWWEE#NCSa0bYl<+0z{bmGzW&8yv@~|26RElXfyh`5HG&Bv#6&*5L=AgfNlmUJvRhlbM#S9wFjEt-Cs4Fpd2AA -zATGY&A?ne={hE||ISfoq -zAujqS#DR}~hL8G;PUSd!*(XB7$zG=y3d#sWm%+osy^)^R=LU1X@Y=e>F6kr&hG*B3+oUD0=i!~PsdoaJe&oZZEj?eS*BgLW -zv+4O!E4suW!(D$VFs0LJ@a(G9_d0c&wA7?S@H@$&)$`fy>E`)(Y>PqX@^WmeO6P+g -zU+0U7cbbA1zh2FBRl8G&F^!x*}qD5G3cI(#HKkBaKx-2^g0TzsWb5r-@^Qca -zdMrnpHOukIJW;m&fmDPH$4MO&@&*S)5~}r<^IOLJ<1rB74q}eBE9JQs`cqpQ{xb;F -z1^Jqvp}Hw&Oz|m*_FaU6L3%TK`T(}oC#qWOMhmWfcy`{eKyOf3QZq1a>aB2wz^+o -ztBCm4UUkZ7{SU;A^&g1a9RP6`+X5i&&_57&Kgjc6h`aqi5O>HQh+Ab}8r_si5fT>M -zI~MABIcr|>BXtk*cqcd!34tUkrnz;Q)#@=OXut(|s+YX>I(LnZTqi&@HFfbkkrbg; -z>=tZ!Ix29X7C+s_yMS@rv?AwrlJ5?-*WK0>snw)F!qS9JV3i}n;KDTye}a37-6Mlk -z-u?wz&N4SG8rwR$e{6RTS!bL*&%>&2)YJ}5jHFw}I=Zt1dj(%Y##t0NS*^|aS3rq{ -z=}0iK(xO&QHEBp|$qm=HYi1ZKL(E5lP5mJq#C!lKN8;B!#Gy~$`O!I(!Ep%jgI -zI_4+%HVdZ^MW{O{4@uw}9wy17Wg5_gC}m7AOI?4eD=>k^ceYr|pXX4YJS!4C{IixH -z*lLFa{|n+C;)1f7F0KIMF0*?Cw~v!AkG24rxlU_uvi!xm5gwrPIA3mlozheTt%B7U -zCK?BahT2(nL(q4Ku*pc$Jh6-;3&t*o3PSv1r$V`rF;=4-(XbBdkF^4HO--;MT3Pi? -zV;2LmTYh!1RO9mzplx|>8!AE4fPY?h!9G~%N--lNUxs%JzxgT-;R08mBU&<-cIYje -z>v4>!hjx`*DDS=*)zQpF?Cd?*B!xY3ggI#zkryRkAxBKg;9*e4&+{j8JKl)NTr1nB -zpYNyM)2BYMJ`@V@%ctr6(o8soXp#Q7_2B!Y;~HLDBh@X6>lR&jc_>+M^!UUWH-G6O -zxIHZ1h{?fKZ^rLj|83jZ3ZujC@?`sN@vCMc{gV%ZMkK~+ut-U5zIh;Q7yZ5y*vG~G -zw@ES?Fnw#wVJirNUk_%|GtVbL;-)u61hF0x6hUcb_;t}w+t~%9ce1n<10@8IxK+gS -z4Rg50lO^C8CBYu=?DEUxE&yIA2|I^qS5~ZNZfm00222dL2^qQ(X(?j@;o1l){{Geppfha -zk-e&{luoumT242i5#ucpawnE>%Rs<>j>JzGsXNgYUr|Ghl%W1;jo?qpE_U*#o-D5j -zT*U)y9j6JE`ZS`sO9H*gGCjw4my~mz#|J&D_A}f4c}p!T}_1{#)fNxeU*vKN7bKK;ot_albNKTyq$&dcWTI -z!16k3|08j?GeK4i!sqdpf!qI3+z1TME{nJUNZf85bk9<6wNsnD6W=F%t4%sq8X^KY -z(zA9V%A8$3kvrlpD2KjZF?t#PBXN8GBXLKBaOLh2MCkmLxcy8o@bvhazLkvvByPOl -z0Et^`X~gr7#4YskI>5*b3A8=zN<+swoYAEtE`t^^*Jz`^(>Gi(<`DDY7-8I>67W@h+6nOZp -zK{e?L|6EOgkEd5e7RGqmwRb{8MPO_$Gd_a){U7C$oR8ia`*`o?dp$bNy^MqEo4t1yZ4)pg(?-CE&Gt -zv8x}PlGT)u{3~(iisJVDN8&E2cX6X3zrp(*Ye164u@~P^4#E0sy=XOIi#^&5AaP6k -zZG*FkK -z;?DUWi5q3W!OQKx68EO~Y^2k|KN7dcUy0krMWZwE{jbD*#x{f^hr`k>1l$UCQiqn! -zLy+URG3Bsv0+6^7B%Lhw@jG@$T=Xb?GUp1Ty@E=YXQole$sgaG@wMkfW5x-*b#po; -z6;y4O*9(`02D(PNG{UV$wq(t*y+#ZPoxQHzydYESAM}nmfGG*Q!CZon#ZlNqJ*YiHKFSkh0(tXytj6!sij6C=)zbM^M2{jr3o-qR=B>_;*~4A9uZ!QSSy4- -zp2CSRM19rDf~B71vZYZXA6x(QlhT+knqaJoBA -z_Tx|;Mc-RMFrd%Y-I|DBxG^1mdD|e3ylhHg#N4q5IV@=@+ZTU( -zV9B-nb45~xZH1z4Z%ZIAd{De!SUJmwPe~@mHSlnen=lgb!)5|OT2k36c6B}H^wUm7 -zi9BA_sn|LT0wz~D!)wfSR8)r#8S9v**Hh(J5aCgYV}md -zXyEgF4R{}Yq?5ZieAa6E7I*PF6x4yMp89cH#oPddzX&)tGTQpkV>zeomfdVtTzZiI -znDv?@)NT)gtcoT4oRt0*AQ5iUAd$o1ZiP5D -zrtus~F{%R9S;Tv0r0*c$mB2C+HlrV$j^TRQ>2LNCF-R>msrC*0%t1{7UJ)08&x@vNZRjboPc^P0SOu>S*jq0Zy2 -zIFz*kRp8M6JQzf$4j^s6`nt2$?6KKPUvl+?Br^l~2Ex#;s{|&nJoY6R={GY1j~8tE -zKI8|HBB*wK;CpVBYBeLrhG`1qOv{sx2#xG!g=cVQAHMMSH_C2ZjW-KCQkS*~k)RTo -z4rVEjs~t8^lrg|(C4-J*AT$&{1Lo7##6J)>i025tBYTr)`X?{4rn}BZ$oHxw++cRu -zRn5m|ZJr*iU`Rzo{wkw|7|-{;b6@Cy%`^kxvuk6iMdz5M#mVgkT`c3LYClo7n=$hg -z)yJ!pB(84RHc`~>g5S;%>~@w5SG;y>YkS5h?1`!?WN=)N>0a+ozalx8$?MG!U7p&$ -z)}S1SHpr!Efo0@Mq3<51tuIc4rP;7j5y{HRY^v`0Kl#Uj8%nu7ADra&&01@FXOP5B -z8-ph;)E6~ua1piE92SYWsv!i&8nAD`8SwE<9pA7Gy5(*gO!^Up!(-IdoUP}^-^q#l -zK#Qt|kPQjV$UwGuhU4O~f3qj6z5({Timl)8R-G&^d|j?-Hv6fKI9XL&30X*exQjyC -z_0i#EXNUBz!HatZ`@)E;@avGISu{iiBQm2#tx2-|w`Ea!9C3rlxYgz;$hpnq1!`$i -zti0n#F)#)Tk9@QKHQVqbkT!3b_{Wp&b|q2PzQDH_8{1jSP!rs@d=hs-T``o2=iO>6 -zO47o?vS_n9dAeo^@oGl#B}p1aAV)E|$AejN6v|Vh;J(sS3%JYbLI`}q?pT+-g#6WY -zWe)h)eviYiu-9%Vn#LskRO4xJCa6-~D*@9%aBwy5jjm<%_OLA@6JWurAC!x$LC1o= -zN9jLf1ze0<3a23TJX-aICe^23)GBTLj3pm9E6DDD->VEuB?pgEK;er@KS<^}+a%*p -zRmklM+K#J#=LT#+xUus*hqJ_Tq7f#=sDV`nq!FmLQ|ibUbcuB;PmSCl=AdG$Oj2pN -zCc19n^4xjJH;jUEw}xaz?|DaweTXO7uyF+jwC>UrErVm&^U=j-9EJuEf)>$;Ey&IR -zXO3GB64!VQ)IWr`udqp;X?@&;f4Z%B=*O>AXaLJJ-to=9_b&Xz!>NL7zUxH<9>ODJ -zzL8gB5~KvG#y=3HO3U?U+Ljwk -z$Gb~(XGH|&hp>AW<$tpm#uTGU_BrO?GsQ!tNF(Q=2cq}!Wo`1Tc{;oy55b%DNb)9D -zQ!Pm=)kfA!l1sGp9JbZI$K16L9IFlN9^oMQIi2eB#_NEz|0P4;a{c(P#0^{qkhqi9 -z!4-@(pHY8sAk}Tsc7<_V5&f08H?IK_x80Yt(89kGckKf};uifQaVr2MZsFsDUrhP~ -z^b}REz3Q?mnfqU(go@Da_rlO4kfK`7q25CbYfPkV;TZ9jr@{~R4s{l)q}Sl6V=Zsk?R}!AA$_NHGym)6D_oid~<5 -z<4I2w8NCiY7(U&t&u&xgiwVN$TQ&$)8|&fZF`4(CqwlM@m3!iHKO$q)DM$K}Jccth -zXCPhPppvcvQ~y-hE;dqTa1<#hn056ONQ~{|njUt^?dI|kp3m6^`#ODS?)nH@N!^z*453D@R8nSC@NeszR%4N&XyB8;Bo^^$PlLtB -zbCuyf@-C(Oz+K!OtQkjFXSX$@HMVAkTzGvI|4`h44Sy)^CFC_=iGHC&g5U~0YEY*X -z+VL~2@JoTuSH!N$;*-jE} -z?xuKu`WOkg;vh*@tw66cs!yxydB!I_w(8QHr`F-@0){!Wib%8m5LbK&Ev^7h0kk4W -z*@n>TOEC9dg@ET<{5V=J-3d_GxA_^7T$%nW90ADG@!O{g$kAolSJy4V>h4cP!(05~ -z>@UgeQo+3zkN}H&{a=e)V{HUmf5=?LQ9^R4JU*MBL@z0*OX?qsTMkoq;|m>yeNT4C -zn&6^thuBI@08_lPv@p-y_BMiwcCj^Ma5;BV0+JCI%c1YDj{SF?MCcY~BkFE+>U#(+RgI8yc_AyW+t3X(1ACye%16Zf|e* -zi0>7mml|DPu<#b4Ak}HD!^d-MzoImJ#Rnl?fy2>R%;D!n%h+D!nppxOFTZDU|7=*h -za87KZN5qbFBvGcguxQ@F96s2O^U*T8JG`c1fITWhm^pQMcn$aSGYnw31EmUym%#W(6F!wVLt8;h_MbbgM`t~6RXJjAIjod-Y6-%hyCI9ed21vxU8%(oDq -z_in(3^-?l?wHe&xi6@6rzdPcd1i|F%xgcpC{)=(D+5Y^Calc(=#s*N>_P36#Oj5y= -zq5J47kg-2rnEqcFcL)8Q8arGN0ONlDn)U?1xCQC3e*eX|M*$dj3I2aDZhb|!|6<%u -z1l`-te=u$lLIB3?zz4v%-SMDY|6trN{ONx%Zc;)xxvG7C0LDE~G*yx!;U^lVBmie1P)3NtdrfoERqyRZ60mQ;;$Uv;T1qNxX1`wQB`by#<@|hF0sg2uq&h)$r0OKY;OcmbM -zbN)mfry3lUnJ)9XfI@R<@2X3D!c8dQzEjv|>^ynI?B6%-c5v-PCm@#-&?)(CFt$|R -z2V8sTOEU~&ML3p2uh^bg&A)Q0pFw(wlj_wXTTT1nvP6r3-ZeO&DLx%cJ%9Ly^)?WB -zxRx<|iD5c=r@^&iLcs8-TMlJRfLwegbLyIaQs#~5+T@8uQIh~ycqBxBdIf}Zd3s4T -zoq!$}Ccw&%KI>fqzW?w>p+N4FB|Fe%nGy5oQ})o~qy9QsIrLwQTQOzp55~O}kJno9 -z`MbjmTPQTO7J1udtMh$JCw5bpZqXd%1Ji4~qh21pcChuQFRzYv6))9x)@T`;M$<#= -zaYfSasI~xwc>3#S9;2b>-vvmN22WQ;M0tAsi%L#0+)!FqX){g3$E1N+3GS1^moVzwA9uGRCs?41M -zZj{cg&L50Bi_>_RtkO&f=oae9{f$Yu?04>8jQa}!<1Q)xUl?~&#qA%ATLQwf&zp*q -zll?EoeN?>9cvnXEdB}JBD}$gs5VvAPdDg+awaiC7rgaU#UlAP#OeSI54eXL-K#L5e -z;+;&sbq;h1kz`*i7E-Ek>HFpjUzD5?L|Eo?(PijswA@@r58o%p{nS -zlgKBsC{Ve7pYjRHr#r0i0oDr`#At&@A=Q?5phisY21)M6wcG`^qV4@;b=;|Sifkic -zU;Y58Y=KLO5owYvtg3Gtkk>OHF26QsI`s>`lI0c*A%@6PF+238HfMDa80<_(37FZ= -zvSE@$WA&@x`>_w2S_OSwmULwUcFo6pR72LA19_V^baJ#(16TKDMbeE50x^iUanQ;CW6Ca*A|Msb2gehnuZ8hT-;CXny759lYKqKfhOG -ztzVR5sDe0i#)~}=H>Lvy;YiRHeTmAPAuABNP=ZV@^LrLIwDY?`wyW|&+5-%GV6lbW -zh38L!zTkG7ONLCNYyU6CJqW<$k)v$-rni`>mP7;R -z>C9z(Pxb4<_M+#eR2^0hqt~7wt*Jw!m`(}4ydUhd%P5o{7t3W(!J6HS^9@xf4pc)z -zLgJWTu{*;w3sKoF5C-4{6bA_jd|bhLXt!C9yBvU=Z3Ku3!XvMNp6I*E&?<}>Z)pmK -z8%o&-4ZU -ztt|U@^Z;#ls(7xO)f|O*1qhyjmTC9$-|i4s;<8srLu{*+(QNh&0&$pK2h{$D+bQd* -zTIyT|Lv&xT>1S*vGGkVz=`+toKjuPSuI+V=+BgaFyr{t -z6~QyVO35OV+!^L~wQ>n6O_mZN{nm-Bk_gbrCV^-iSJ)JCliKUd{6le~nO<}YtHl>!F?~XQRn@=&Nxu8tf^l>2TN6tK2OFrDVd+FtS(7iqv_C -z3cK%pxb+<(!SgN}Pcl2iMI@_D-k!Le+#(IVK3*h_`Pr&p?-3Wm>1?sln=DM+KrFM@ -zn1pXpEHE>O;Y6}5uK-e1>tr%R{~kg+*KR-DIDB4Ugb+xf+0K<`5kTWM!C_EE3D7o% -z^Vk=Nu8ZtGZ|l0sL`0@`S54y3xK#a>wHv3FHZxQgTVaGmfUo*FeZ?g(yTCf_crxXG -zKZB1OgG3#IGrg30=eye&U?Q}VEoqM$PQ$R^=%=P$4GmWaHSwZL(&iMzou$)@lfyvD -zZ)V)3Z-o<^nUM51%GpQ>yF(74InaxD9G_dCZ-yV_Xe=%CEcEZ|k7t_M651i7W0 -zp}8-t8}8#Ton>F%aBQhqNL;!?!*swcTy#E~D@4EvW7fH3D;5kzgl%De?1cIA7k0Fl -zd#3!Te!dZli7%rex#XhKR?MO{PFr0>?@N|LgHbkx$O3_?8G{WCSZQT`sh>c0{>)@%gNi -zuch{gvjIx68qM+9#iMtzWQCLAxC2#bf^r6X=XKn-uM_M?f+>!Hwdz!PN^PT@0({DC -zBTvx59XMiCdw>swUVFu)G2H(&R>02ffq=@}r#L4*Nu(e1$UwkuAtg<1H;X-&oFo4;6+Bn7A@_cp?W& -zq2aF5j72zIPfp!1N)|v;z1!2!sWkr9Xef5547~r6XB^>sMv1aENihQ#4Fk^5P>1HL -z<>6Swk+4Th@`QR~;OIF#emA~MRRO-^X??*{e#uU+;k($q{heV01ZyuluP?+ERO{$z -z6l(Bmgt7GwvgbiP;U9^+N*^X`{I1)4$YT(wCQ|<^ans?kK-Qd5r|xVh -z9ZR7L?4riU%3|^QPwz5**PZM3TZ9!u9nEMh;4ob{+c`Ty9}*IPQZko@g}KyPFIpy^ -zKWwn@Tix0{gnX0Le_kRP1ABW)8~r134>z@n10?RQt1@mfrTAVPxp<0Q%@eA7=#vY2 -zy4N?e0bBeP^tC?bf-EaOesxsw%L)z5Gy}xZF>wW!mXkeg^r@p#Kuc+xe_lMUG>dlI -zJca<;z?pw6uUoP*N`Ov6tQU^R7iuHedz0n^m)>%yJ5`H-I0C}E1K}idWh!51I%~Hk -zlPB_vJ^2Vg;>PE7$KjyvZDKXrcK;L4WI(WNpIVxeE4vP;PU&HVmRgMJ@^=f9Y)4NFS?NO>K>{2dpN -z27<~?geb|Kp;;+G{=L<}MUVL5 -zcelP~gU~1-IydZT8R_l{dR>C!7GsPrnSR+cq}*Y=N-K5jD~8{THaOrf2PaI$zov*f -z35a|RAUSx6wAFuq`pBCe7Du*4QHE&soEx*;>zdJIcqu5J_LB)g`IgM`6CNr|3$rr8 -zLana~iOykHOGDRF^F|~g^>BMB`GDZHeo$!+j_M)pls2AjHNw3`xwlmPIz -z6>^Pi&WUaX>=VNy7gihfC{qcdRKBTOkY}sc+RWMY2CTpunfaujCRx2xsi*Ev6s1ig?z%Yw+mo13b>Nw!a&zdwaUzXM1WH;UU$i;vKne*JMQ}hbf -zE8=8StsGa@On8C10)CMDiSc3Y&87)ow3K39FdMcF?dBO4BzpNDJW~CDtY=fZU>?l$ -z6Vgc@@9V`%jSJLF?lvYg7*y66mm>~s)6Rs3#|hKsv5^YSVE%^fUVdg3jd}6RS?rF= -zR9U;k_nqI;ARUGZDxM!^;p?Cmk$hSKm7?nL%zhQD2Vx2_&_Vr+4pw|ci``uMYLiEh -zvaQc-8@_}$-)x@|{_Fx&pghC!FoF((pde64HT)>~ -zAU;-%Ou@o=FhTdQ9+lf?;9Nr!(}cA%K@?8x?D_)_oyS$Q#EGL}ZI6!n;7Uw#qL8^L -zX`HGTDmXF+mgLjof82zNcAes5pUP*jfZ1%Rt -zb)?gb!EmILM2+%T7HS%ncIdawIu1?(mLr@SSoFccc@s*A(eR3X*R7SfxI!L-3w7;d -zmDaWEFW+qB5Zo5AEP*5XT3i!$%-~_fQm$L|^>CT+1ZsD3tfhuxuT)GwiuX| -z2{i3d`2i7+^Uh-(QdYJhukrY)OvmX(k>MqK*7wIqdWJ);J;(39xmvyv+Tixf{R5|H -zUH9u=CLOBBn&6$$Ukt(2gqeo-Zdet`ponQDJ|1xyx>Q$;a@`GJRf0cA62FOo9t+8$ -z`cKZGebtMJX_VPH5DdKNmK>Zg@_|2H7iy~ZjyA7-AviKdMC@-D$hfGmET+TD?69o| -zj#Rx@h+&Zi@;bqF)Gr_Lt9iK|hr6nV#l6tCT9*{0Ti^r;$*xg$x -zCQcBVs-BoC^6bZa&aZ9q1-qvL7Nu|6KLL451DX8v+8lBGLs%`+RQggm!CS#iE!+Y7%N+a1LgfFc&9M+ -z6I*c)tyA;Nwh(|y90l>zW9Nlsj_?iyifA%hSRk`lT})s`9O%CX-&chamt>C69LM|~ -zsF;%Eh$LO4{$jqZufq$Qy3YP%*wJ83CN|!TM>W)Zl@xOz;9E*Q8=JrM_ZC^bp*nH# -zS%j^^NJ11B-X3!S&FuKTDK7qmn;st%Sv^z1JIww)$AnWfU@KyXHT9&u>wy7leR%Px -zQ7ogl;Hr(LJW9RgtZ2bNTGjN7!i9?U!L{BJ#RsVzha_c!2m7tV%v*T{j4(T+oniMu -zZ3{7oLqpz$ta+T|DwF*7FZx{_)BzHTDoiEGh4GcUTK$ZutlMye-dB8n(0z45GNU%_ -z?nVuEeH+|#o%w37g+<6KseE!=?FmK?C-FqAE>#2ZK>p{pa5d;WaiN)GIG1jTi?`;2 -zSYGGi7xofqHZ!aMp4wUi1{sqRunQQiMB0O_Bo)30F7~ZhI-M|1)SO=nksErZvL0sEAoN2tgR6 -zS2fZ{Er&l6^O+(ELRr=wWZP#jhjXgZNH{9Gn9A_uaXx>b#@0k~Ku!~vS)B8CtAXjE -zA(m}CqidG!b0M;FcWW-e&m-EVLqUmF`RiRJg55z@mD-3wE@e}sY5`ZZ8O$DLv}SXA -z)m!p4c~XQAHq66Ba7LzWEqbjT(uzLO!_2%@aC_%i@vjPD0Xe+X^}k8?7Au^-OBvG{ -zs77%jl>!&@2hPr5UD>3^1FOhrx**p3o!ic5k(0QIWxh$8kg3=HPvG-E}1rQ4{l5Pu&w!CPn*B6}fhyRrGz5<9b>l -zgeEOQE(y)Z8|bLow(n;XmNzEI&Cy19yz$^?bL487o!puR0i~*Rxxq<;cnwX6DmUfJ -zNk>MSZW>T67sEkeEyV7brSDSvXuzd}BcSPR%U>XWH;f_(x~Hoq@z~)IA=`=j@~-Tg -zf?O1eQ9c-Cjh?`ob80lbxkBJhnDK8KhbyR+Ipv%s?m|y28tp=f>Xg~oH~GuW>_kUIC$Usnymr^N3g%;2O)lb -zxgJH>ew@u`0-^CcO78Ww1RORr0|d*IM$?&ayea?Q1V4^IeKL*n>#i1aI5w>-hPPBL -zL!<5#88!LADSqh#j$n&v1Q=D>WD*6bXSyVajD4UfQGOyRZP}eP>863K`ptF-cRIDx -zQ#{^ycH79$^9eR4*z3%z--kASN<0jTFBPh8BGqe1FTeO;T`G8$@FZPs5(_D7mqQ`9 -zib<;6z^aiN!+6nRpZY|hpn>OZU#j+jp9RCa8vWKs)cUeD1xCJP?5=7$J?kI=d#?z; -z^&h{rMit`DFmt>VGVvbj105o`9B(jzOU`;<)CcA8(G&08Osfe02AL5l!SvW*j1Ou3 -znb!7oo83GpZ#2C!{=!NT3K9>8!_^;FJYwJS5D!Jm8F3oziC55o48F($bFMfho5F?$ -zA~qZu)$hirmPJJd11K*M`j8z2v|oGSV3w>rXYCgTF;G_!N68Va1+Eq@;a5F9 -zu^^wQ!aDsPqbvKMubEgqH$bQdXg^xAdXI#XZqJJCE;#t@UBP!Zaj2|;$+9h$hw%D) -zh}aC0m{>7h(;z!XQf{B6Qwz-GU!7rkgmtV7N?*9-{6?$%QEld)fyz36M-KKrGnWX18S0;TA2|xOHvqn;@AStV!EO>9F2|Erd9&Hqv`WIZnI`poN(sAfMY7hnRH>O^32PKNe -z4bs?TRQeynNgO9&%%~Y+e0G-^{Ud&bv9?RAyxSQeX{p?^-3EuPyp7tYyy5zm@7#S9 -zm#){HS!#|Ukw6snJfN?Ec*TracG#4SjM>1_qY{XBDzT?7qbm5=l*~WUydofNmB6em -zgj6tJ&Rr(9YrSnGo-*CsJjbns5Y1eBerBr8$s(5lGvnksU6Tb5*1Xf&IW=^q$C*R?W!bBMeF#+mh=jeX6_QDX5z9-NrCRR71Ti2Cq(pr{RgK!;UV&~bnenoC@31=aO@> -zH|dLtxLzdl-F5EECHuPFqVMvVzxvB^yYq9?F2u0Lid%3hD&8wAKKG@%@fy@C`GGA; -zg`}Egh<9zdE9RCf`~zuqO6`GGoyga_<9>+IhGyNGr3%V$KWRV~@3H8zPTGVoJqxlx -zNOe|=)G-Prs33=j#b!YXm>}$;{_1%qZeY^`CQ_YY4IQ|(x17yp;j-01g*=YV%26@E -zvSSqdaMsL#DjUVDKmh%Pq;!OfZCSXSkIaBGy#@^0Y%CjV5Z1Bo$vHeflGr0AkhykEiky1<&1^N&Yht{V@IZ=iBt@2j?B2jFeY~tD^!Nh&dw+0SVkZ06J`YUqhA5q52ODxX{2)Cq8Op85Tn%i!hDN_ogTFhpj=y7idS -zstxwN^ChIpzDvo?n*gBQxtz8XM9kqz?!i&^ds6@Xxe -zNE=H*8eVONKl*uss{oHnkoqz62Zg#STdMEViwn@GWbe(k9b}8H8Wzsaa-2N%#_cv5 -zmXof%OSE%%j+g3(_vF@wAOe~Zur8G%h4_KJ8pm>g4646Nu;444oKO -zNv!5sNt{>W5G>{8f>avJ#!vMOR{#^OHO$QXRemk2(g(+kG!W$M8B!+ByY8*R|4tso -z*6`AsaCT$@!Svmk6MusRu|L(ZD?z& -z3mx7G5L6sFP(;}o9ID2TB9IUN<}DWG4ko9&lmyn_h=u9z5_j3(CGHBljz3G>jQ<}c -z?s`;fDJyV}>FYUJ%`Yv{F1nLlmC#o#r|31 -zo>R7i5AbwynqFOA*Z}Q;%{*i|)BHCQclGSwByL`vzewDs>HmRBFis;$&Dq58_ceyvq1EWKx{;WxD`@mUl+80*4W)7t$r2@wx{O*Y -z{JkzTc+~!==8eAO3##plIW|mb*66rwRveEV42b1kttedP(H3H-dJb=QcIptly_qC9 -z^bPLGEq_pTTPofZ3~hIuSN8eCi@c(kYYK^pk~>J=`<_Pb3HqWArnpzH56|2{hM`n- -z=u!Z?{QO3_p*W!JjJGt@F{mVwyI#~B2@+yS<>u&Jv6R^wzH6YeO^ulg>G~DeQ0^(lS$@I-GY}vR{0;i -zi%4FHsBEp3xC6Ipue*8d&0h|E^RToj@}j_vuGC8rkSZMbzTp1&YGV<9=_*#V1(DhU -zDLYsEewiGv2jH%YBdk{jp%-WgrVeTTlf?v0`LG3<)M0;Zl6#$qN=M_0r;?C%~=2(#oWIqNp7R# -zhSf5yln8&=b47i>+I@Zehr|u|hs2G|dP7{4EeK-IR_RhqqICoYivlhp-45{{l0;iy -zMra#7ckWa9VKoMTeMurNbKi*J3{KCjVw>@}Qx -z#ACX!7UXunnH7(*rDZMEDX~6Z3{PWf!3<&p6JoO+>~Wpwf-r~4nQ9Q^3#<&DDl_LwswduS~0vmLEQ) -zuN}0u3Wx+!%=iuxFjdEwT{uismXv6WN_)N}E%s1R5YBWUl7Ix1t=VkCJ$QTSNIWpH3Ao&a3!t`ML()k=aED~ZGta(JFTVZyK^^0fOrfoy0e -zaB8=a8Y#=OQ%mT)hyz^XCk#a;;pM})ya{(MXAcE`tD2iVo@Fej0z9StBv|E}ZAj?Dp};=F`WkEP~W -zHzNZf;SP^h^t+ePcTGx}uF@_-t+#5t`X}AFvlQxXqb1u`W0|u^tw6g8sU)cY!lyOU -z8On;eB#@Y_E`XKYd?;^&pU;(Fo<(cHDO86x1+TbMTZhn}P|zA|iOa(?zEuwtu=p3bx--`)Dp -z9=06DTuCiMDd1a!*O{9fdp9(2aZs%(cIE^Tylakx@!sRNgiIv+>@}Q6<{HUyQJW(( -zg40*2fJx?iqLh3GORQOgLV)g-86GIe0FIn!z_go<2#)sDK7M^mOM?SB+dz#IXp$7A -z9RLFP$K<;)Bp+o?|NKx;58XAk<=`zk6tT7fwYbMUae}k^sTm0|s2*&7FwmPFx_c0v -zTDXbwcBlWz{`9u0Dzw>t8KPVt(9Q7B} -zY(uG?B#H#ewKZgR-^*MwQ>`%cWFK>etldZ}D;_FhBagw=aH7tY#Sdmx*0yu;&#KeuyICR1`0rR$FX2?vbD|Yh&zzr5a3Jx(S|Px@|wE%8%g6il`r9z-2bv -z`bn>1Rqfw&r7Mfpn#B(d0;UuB(hn*Er@5MEB2VxHQUxoOgBt%vC7|euM3kB2VdQwK -zYU&M_id`( -zP?8@qbIc~-!jX+#a$$nUn=_HRYlzn{7)o@$?2ZOeW>dRGsO+y)C{d0%(jm_l>J_%K -zx9p|_`5mLkyaq@fi)sU(XNYacZQS+_?1BJIGN(5B`4~r)v5WK>ZbF;;`_Iv%$@ElF -zcN>9lVn}CGP>WwI!ae5(h`&8#g&iHVejTmNxP3_&-D3;(vy?k^T$fP7!Zg{Y0ry)TIs0W>!B;^i7T{!(%ps4{P&i -z!(Qpx9{>_^D6-+OP-AFWDO3=Nzcu)64n=n`uU7#C3sGL>l#^Pp%BHKe`#7m_EbJ&g -z-!$B5_1uD+vO26#psjcP3G!iDDQ8$cg6zQVfNRNq(*}sCNZUY1iY|=8QyH`;kv~1iaZvF=Z`-gjA$d -z&Z)~crF>@-lGq(9;!T}86Rvj(GzAp|V4Of1L;fT~ES)0PU6n~Ql!2`x0e%7m6LbZ& -zWP?S~jc`O%Nk@}eSV9xbs5GER7$83buq -zkP;rH79I%TwDIcYY)@tEhRe%XQUPOdDcca8Y!b0mx$lTXg%~`u9sky_<4&4t=HDVB -zXsK?saV`r#GhjAxZhUn+`jJQ@Z|WxPMAMtja>@e)JX`NYAl?~wqG_LBX`9tjX7*rr -z`iUF -zJ!RH;lo2L*JTnc$8wGZsl;NY#Uk*1nUFaVUw{?vguj^5++=ckB6zNEFPj45@om>Xv -zfDE7uJubytqjbP2jC6@Wr>$w)Y~NEQypA9OCg!KTC-U`9H~y8fEGFJDus3HX%_N+hy1&?1&y1GzOM!a8lvzVxgPq3cSa9al1g133}rPr~kvs9lX3V12B;vf`po -zbK{WH^w9#4&R7fyrXS`J0?y$9J$Nh8_9h(tYjB1MaR~kUfAa03NsscI9A*x@AZ^^N2tiXpP`$>I>cu66QMa -z8cgvnRzX|dZoj=W7Y%@wQ-g=wQ<>6wX>*N`b5e_9h@oNaj4o1lGKR{gmV+Q10HFA3 -zgAe(&hS_=J>VzgJd5w!mPQ(XH&CB0SFEH -z{GB7dT1W!l?+2}-uvV+lgISyHMN{H;Tx)4JcQ+lf#@kqZCeH0aQ&H_WTrfgUz5-(>w -zBkjJS$3IQfHFs_Bf(EYPSbuDDk1g!>5Cn2qxcT2h+@`#cN@|JNgJ%nJ0?d==1XOm* -zniN0DZl!Mq_D;OwCw& -zHi-R~BZduc<-IBL!E#H9(+WYQ-M_SzEngK;A2PD!zoG -z`u@XTNmMs)z9?~w9IrBN(!4knmw5393AZ`?^kWHTLIcuX0pwR}Vt3e)mpX>_n$IMO -z!Ie_@y|n1GDL2FwnWOAlA~bhvl9Ha@A5^Bl076HBMly{_UrK{s@rn#8Dm!NmF%MAFUEXFHI56*rr!t6|!Z? -zS5E*Xtz)t^8rl(p48TWnFwyc)_(FzvujB91T`xG;D{Q)bwG -znG7bJaIIqjt7+EVGNP$a?B!$*lFF`5XY9$)A{Olf3<2RhnyAVsl$Wu%W&n_dzo^n) -zr&`O{NyzZU@p-;O`msNAsfuot{94xCaeC=XY8R-Tg8Dd_b>NDvC9xnQfv7WPSEex0 -zDOhDH#(Oc0o5YZHvx6D2FI+B5^$2gE{UF9JJq|kPi2f!BVmQE=o|Y&QKc<=o*uhEA -znprV5AzT-1x%BBgKG>O)LZ&X(SV@S8u+052tkx?hVB_x7 -ztbY~`-L|-IUqB~u4?3J@rG{Bj(JsAFUZq3(1+8~$gN@TSu02w}%T$=Tr2`H`<>o$4 -zQ)9>skcr_UbD!;Jjf8kqwPZ;FqiL5p9Bo -z&n}2W_m23Q93vD*bghL}%(!fX!7=jbSVG3|u;zi73fd1VIb*z}%jpH5UHPhFJ!3ajhhk8}y=2%mK -zV|eJc^f!e9V3ZxlAq^wjvSx5K{$}c|FHD1HBYz&72fB33O*9zU5mc28*nraexxbK` -zaiTsISfFQ{(*Gypi4YlRe=!_3QmCIybKv^ZJd-3{w!JEn2x^fpbu`S3;IN2p_hPzj -z^I#pai@22^K#}xbw#xJESs=uVf|lOJ5SqFcml(u;wDdx3+9UvB1nUUX8jb0`cseSK -z(KAeDV^#@V?k?vLt%z@fx})nu{DUQ^igtdA%mDC0P{vOi5>rjBAw!8q!WbN>AC(qj -zcE5x|k-zm%ttTdkOAXVE5J{>Lf8-wd*A#EE&`*ap0!JXgE9mw%QsXP)ALzE -zS)i|xrGHPU4m_vjnA(p-M|ckvqwI2o4@FFgwdq6l2gFVJA0ciUQZIGZze3zte?Z)r -z4-f}1jhV#51q -z6PQ#wpV40wlME73lAIvy&vF0{Z8NkuJZw^Ji~u6O4zLx@?UIJY!FYB=>7<9}`G9Ky -zjnN$E?aZ>H4*nzoQlxO4wHbA=*nq^=gJUU}JC?!X>3#czgxt{`gLngc`zK#7-wWBr -z7U7i=@?PHXSk3^<+iM{V9qsp=d2UMUy~UAAe&n|^u;R}eF-(l3XdQBOL* -zv5yMPPl(lwMyK_|&$SZz(ZFImJ=oa}(!jkZn>W57Ak7^K^Y{X(Qq$Gjtf!C7D?=t& -zNQ{7-@%lgxIqvsZl}1d_wYL)we+m&jX!ZUR*S|vCkpBd6$Nvf9hOvcou0S@2@DDB< -z6dyl8f!)c~?pR4U1oCifZ8q4E#mNKE(MDchFH>ot+ZGw&;*)Y2Na>)Z-c8y~l3YOwa|%uLD|;d3EyW-;$TlrD4Z7C0XJ0!0_5c<*7I4Pt%j+Ro -zIymyjHKJGJTvPxORAAE+MpI8Ket!!RV(bHpBtPn7u~-pSEkjV4VbXEj!Zh}$&}lCqEnp5R4^j2) -zUl47hYA~?F(&JFlAir7f?F78|tAKf4z>mVJ+_fY{lL)dxYrhNH({y-BH%sN+vap0)NVlABfZB4IkFZ?2(via$rI&t7+I@lGvWzWYD^ -z=BQiVYav?e7`$Ey3}Bs5ra=-Po%3%t26Co#gN*B|D}nAlxLk_r@HwSwCC=f%SoGmR -zj7QHSG1XZm1pGa6F1-A7B&bo;d}VAsoC>iB9s#Y+a@uh?*-iKL!^79R^=TXkGZ2M( -z0RjdqAjt2ZGo@y8(o(HrGEMRrGxs%l!gVl-Zh~h`U+{tXPhXZakv!rx7;%2T{9cZW0i*ZIU1H8!RmsaKZB%e>z`Xc?#;xc)7EY?^-CkekOX*h`Q -z@Cd=L<>)tv)_~!leED@e(<}&|QV)QaTVsLg(;SfB%UG=H>g2FFqFliX`~l1^O4WjJ -z9;1fpEfss_+Q1&WoiwWUCgJ>3UE6$8*KL*#gg7;W9>_zyTHzuYe78uXd|Kae0Qzcp -z@yrW;aZXmO<~@Qu;;Hfx@(TxcVOXUD&P%-&b97zRy_1=^Faa`!`{5x7G0)5amL&$3 -z-TO~w(yy>qG6HTDda=lFGLzL_Ei-SNXsGDbZtwpFCY=kTl*H^K9%Te&F}Dogh=|$R -z6hID2hYnO2wV?O&0I(H@p?;kA9a(I?@0 -zFkFlcqVaz;-?Q;WD96s}GeJ;XtC5zfu2$<7{U*R8WS{tThbr587M7>jymxh;2CCtA -ztW;Y^oJ~@g#%jHWZ?+%f%VHXRdT4ne$f9d4a#<0R2Czj|$6<^pST&){r$Ruw5 -zrkmMdKB7y;4GJ?@*!YnIg)I(sSqK>3t&R_g4-bXu{kve}sM1ft;Z4rsg=NOkgh&Ty4l8e4;93#;bRIYX#a -z=R5FWHGordokNppK+b)H_Vr{G+lX5r$%B8|)jVFO1c|uGq3~MAYNn8s$4V}ZemCFi -ziVA@Cqg4BezZG4nMh7P(qtn3k0G%C28v@cuM*;7V*(i8Y_6tCD{3iV2fZ862Dv%e0 -z)~;vU7gUE`L!wC%?o0o@E!?!w_ -zC3;_YU0&bUo5!)G*RS(5rAziOMRfD+!)i4Rw!?QL+X3hE{&C`-?JpE}owwitAmOK5 -z;QDay+2v_bH^4+PJR)Wtu2Z>Ia{S8%G?gzwFRjBls~&C~!Kn6a~cas{Px)OWtpT}4e3tCEnEgsP}qlSc#>_~QYPbp7by -zKU3TbE~v=Z@%hWRKWX%RoCC{U@iX?SYu<0tZug7WM)H$F03%T=@eq~)Km$X=K|QH^}6Lbr1ne!Fyzm6;Bj>oZo6Eaa$QqRo+rjrq@NydES~sq -zh9kos-Sf^JW&}gt&dFraKcBB*?-py|QXOI(YYYPB66m9=hrP%`W=>}wkHHTfS*5~Z -zK92P`^|o%2`I^|CH$q5C29*&OrH}I!f$#Y|-`4iW<}j#>zgesQ0BP}p?&_C+j5iar -zu?3fC%CE;R=rdg>Gy3X*9=K8VUaPHjTu<)Y(1{BWutN_(5s>ZMmHwy;tXZIY{)y@l -zXHG!euqH}b;JompslhECxKlj!EiNBrjE&RYB#r5F^8i_hH68(&*2O%t93*AP=m|#= -z==?^dv;^E|bIBRQmFt^TIzYBV3}B&Z*C-3`j6J;)2R|;bi27EuoPocWYumW9+@^#r -zIyDiq;dzvy#Y7&kg505`JLX#E@?G!q}dF&mv~spHN1ALt$Kv#=`u^N`;42At^S}zZd`!Y1-`MGG(WtxC1zMl}aXIwnIe#%c9ZjGY+cPR>lyO~(g2rNVo$n^nVau!dhL -zppH=uHITZOT3yA|hs~#z=piTMLHwfj4qN2YKkXMbD?a?UfHu>7=$u;sl>T{KLDzxA -zJ5bIhNGKQuFeZGY?MT9}%$6FS2S{<8uxui=n6SwYcQKfb(5KiNOTz&Cx96o6WaI2B -z=Otm0U)bN?KQIp(uuPV6QdT~kZSfaFj?eGC-`;HB6M*S2ci4SjwtUzz&M;v{-9(pW -zW0@dVnjP;`KHu@{iQ!qCr;2A}N8d4|&UM!A&+9i%47_RGKc_qmt2Jl|x#mE5Rhfhy -z?^ApheN(2-<=FU~8ZW%Z(f5Y!-Xr&z`0kG9*FrnfbMms-UVpwGM8We;c>IbvZp7a@ -zkG&Q;ggt0`K91%vW4XZCSEtRLi#XvW0nxTjjGY=>`?VII-7ouk#~|>v+<^3Kag9*d4W1^jGr?ps*dSx%*wTnbbHU>ZjRT-HqPaQ>L(E -zF~n(WwT5zM=)yh*c<0`E+qc&&x4u>I=S%dycJ5|9O*Dt>OsKLfz7JCT_Wh&|U$WeB -zJI1c32j!`!_SdFMmx7lxY+pJ9_bTqwhp^MlDTzViOpq%_N+*Hy3QX1*B$U(NIlqg~ -z3CViNtYl$45yLy4n_ek-Rrn576Y#(b&ji52gRMVxyt?dGWL0$y2TIAx%kY^w{O3Pyo9H9~ -z=8JBQfo@KJr?`v%9mRd}SBl&DV*?r$Yw<{KHyK8(0LnY=5UP`*er1EZxLF^s&>NsE -z0V##nw+KF)E^6G6S -zm`4K7b>4(ateYJtq~}QjrMoV|)xP)?TmJkOJlojsK7_9|?T+pc3u|Jl&s82fvL#fr -z^|i99U#pJ9^tNM5b)PzP`52i62Wo;vjKDZ3xstiOl7MY*5RIqVOU~6xH*M?$84b9sE$@Kz2+QTjDrUU%u79)Q}jM4b$Hv% -zLr+#_arK?Qd~@glt(6z?NFBu!mU^ -zo*~l>(h;Yb#D`kOFA!fu=~Z{FdNbs)|0&9dL;cq{BS#?QwfYqZyPo8a$d~ttP^5Zp -zKG}`FDHCx{up{sbj(~US{p!eIh2`(QU0nNzHtLK;!{<)x%%C4n*-d{y+%NwHar1JQ -z!X+nvjqUyhaXA%mNhNZvR@+nd7juJN?v;T)kH -zQyrrhSZ)L1Kz`EiIrE|EGDGRZ5@;x@CgZRA7KG!&D}zt59eYzHW1Z|9^7>#Clsvg+ -zO8>*jJeSA)mu&mnIXS!oN5b#!YJ&?os`<3;&?^ZA2e}K5b -z{{nH7{~hAq{r?SdC-;E_#iT&LU0w*Nx}OfmFaUP_gyYK4#DC7g>=}40%rU$7X!SSi -z`#Eu+dfA8^Qd8SLN~bS|XZP`Z{X-PT3VF35l>4o( -zNDb04U!!<}EMZMJB?=^6eZE4-L5R2xEp#NNskudz)AEb*KCl<9-jqAXwyznv0FRga>&+ -zH%NYYfBbIlQDLAK-ykkr22~r9+Owa4oA|234z;P$ocEd9Ix~AU_@S!$60%~FqdjE2 -z?k8tkD@XVTZ8q!^sCO#tm*EIOCr^|VY-mceNQ-pIzD9ZYQ|uf;F{8PT|8=e76?Q>$ -zgq+KF9w0I;i(ISr32V<2fc~KD2VW;ji{-HCv#j!7MkaHHflZ((XD>L23du|+J=|J| -z;Lf5Os>9m3BJ{-%M4G4>mRTqmKkXlL9jy)FAfq0bJ2hnoSbba-r2^m(HAZ;uq@}En -z^U{5c_FL|Af^XR%DI*Z}P`3wrE5b;2E`)c4fI>7mm78VI8-g|tOn^H{e36Y0`kZkD -zoaC8%vf1iYYnT7zaF_ir4)-^E0*(V3>a4F-kgOFi| -zk3qj59G?0q>NT5zlC6$COJ0M^x7nF>;O&ls@quDE_>J~*O0@2VbTq&0^h%~ZR9ztD -z*qAo!j{^_4jyoiQ5|SCKVm^O406nhpa0ONoNW<=|C=QMz+GjI7ATOAMmvFDA;~=^S -z1qR?b@6j1{av4@>7cBrSAW(CQcZ2KO8yh4Jt4ATA2tDmWn=%iPAZ&{&A1yH@eO4 -z(2`&B0iDm?kxs|A+^ne5hpcI3;6~@>*&Japl2EL9KWkNkW+!$H`XjU@bYg?+Q%ktV -zGVlUrC{ISvsj&$09Jvr)kVg!r68A9l*lThyCq}0D%5##MFqMe1h({a3JP1TrKvHQg -z9R6pAo9M3&x8B%a9B#vPH|67DAcQNN5}Opb1+V!M7-tO1y-n~inj?m*X7?v=b>25m -z@pyS50Gs^@_`1Uo%H}^i-0?4_P=9y0-4E}O_#L=TvVq -z4K{V>8iaMxN0{=v5%I>uAhh)GLJE&^*oGSaob)s-a0IDyeYN{V5phGX#6C$~NlhS# -zdx$e}6B`yhtWgCa+pDMtC^wmC`wO3jucoPKaBT*&X#4Rr^~Fy6UOQ!XFF&vvO&P!- -z7umejGK<6k6kq(8lWR=y2v^3v)&oS{#0<%gG>Vd)2YpQ!rJodba2V-}tB8yn}N -z7*C1C8hBUbbCPr6a8tba}2b%cc*5cX;<2ZfrTfr(~ -zwu~9+n+)lBeZ87}pPUD{lOsgO05iDeZsFkD4#Ffs$FN>020M+IeQMD7r)^O0i}$ao -zFRXYI-C_oCt8fg>jO%+3QBKKZP4fEJ7r5cLp%f;o0z&NSy|vA*TcRcRw}X*Q-nHgK -zLn}RmudIT_I}(DBI8&5uF3R+XykI03zk_i%?0U)NS>&|?-~s#wxOpoGHeCvxYYpWJ -z?Ps8k)qu-_L!7qo83|IxI(TJYzt6zO9j1JKscItD9J;6?*nP(874huUcammQ9|dHY -z_89g6KECCjC$xQkdLm4t6xN&vL@O^T2o+8V`zmpOV@^A~)`U;2O?$ZS6w>qmEEqoE -zk`v%zu#QIvUIJX7&1`A5QaoNGh0}g)N?_`bStvP+iHlLE6v+B-4mbY)(cyOQY1zE_ -zpdSm;O8b_y^Kl<)P5$L@vB@xk%l6F={vC!OiKNN!j5)10Xm`la0`ye1zCS_>Ov -z^SW704i?JND}WY>P3%~rl^|@b80sg+8aSBZTp|lELf+ycbI0NbY3U8K<$M0XmAzjn -zDHKw$F+3msie>WzTIc?3q^FAc?(Q`@2J})UbeBHmlVfKWS8)~WLjXDhx#KD4?@Y>q -z*HBE -zHj_xxr^#7|ka<9yNNm+Ejol3L8E;^ume>wqXa_lX3R$kB=I|%pn#p!JPOXi@*YZrS -zg-9-jQuss%*V^i?l6ny+#8kc=LC8S~G*2>aU!F6DmhT+d2gW#p9P}W&aOv@C^^J3E -zTw|cI4#&sRl+61wlaNC1C5Hb3^{Qrom82d6z=0 -z$crw7fckbGwB(sX)Reqg#Q{K=?%iBJI%)7Uc`9B}oiW~-&wLgf3_@b`*gh%557ClS -zC1_IO!q`hc!hpl3@^}Dg7Qin=dT`eFqsb6Z3KduQsc)%h`;$noBS`NUANC_|I%rIGMu -zh63qP?2JD!$Le({3V5yo!v`1H>_ewhJ5*6xal>5t25=0hxkGx~PvQFK$2__&BKa14 -zQx3%|!}-eWe+0B-!nVlVYF_K_+|4C%@-}%%b7c~E(zOK8OoP?ooFENYLY^jc&@GDJ -zROLOVjDd{pYc&q3$xjFs_d53LAY>`Pkh0DB7Dof5*SvNJjiwqWKNz?R>5I -z^Hs8mO)au9-S2Y%Uy=U28A{zyn_VEAu39x4p6#^;LQlEjvs6>9E{SwH6D|i%1*d?cSG_S*f}U_imvIij5k9I -zsz^M8&V2Npt)x>tFRA}EfXdwAti`339@fQPH8FNL+MPn!^V*_`Fn{_)hW!PI;YID -zCsAqbfDSl>jV3+vEC`;E;N`RPaC7hsIpUIG@@H{?7gvfS`g8$^yilsb=iRHQKXOeO -zp`C5ua?crMrxWC6X<`7J4 -zzq2MnH#ZP3zHij@NsHMJVA9cA@bqeDDod9b)l603sPPA~N$XSYpH06m{0W>}@x{*y`n -zNG(BVBW>&PiOmdTeq$9Sm`YSCPDzX>X}A7Iv=aG1-DHqyDz_QuR$LS&zkWSAVm@OV -z(uC38hyxf^@YD&%Rb0b9H!A}{#q_d4vp_(QmmT; -z?lQ`QKL$GHF>pe8y(BQ+1{r?Q0ppeMFf$W1E7VwE?7vUca_~ccyD9?7p_sRW+g|JG -zc@L{%Puznfh&E?B{R)sa>@a>03u@GtrOfQN0%icoP35+{VR1*ZxEA6#FD9toL3aQW -zSJazx@e=9@;J`mM`9C|{_)$xsxc|oCmi?>4P55_*yZG-8clf_`xVgLk;&2Q9!{MI&a=07vV3PmlaAyL$5tF%v -z?P6K04r8^g=8Qz@Dx&r}UJ2VwR8?fw-l9!`q#QjShz(mEC07Q$xN)tya`kUCP -zKuZau`TF|-tfPbWHaVT@%lyOPzVQ5$!#(%qaJMR(L!=6Sl^jV0*~R;i@;d&?q`r}d -zK~3dS(m*WORg%P^Kh`N3_$ADzHC06m57sKQO2mj7Vj{KX??F -z_TXJs5LsxTA#7!2%FgF2F^%H6GE4NkKujq9tfkw+X>m5Mq`}J0vGb-9kd&6TPSek% -zILm}qNXq{d*t!1%2m1Sl^#YG)bV!`u)YB8At7wFg@7vqo9PZ~oJKS6h|Lky|{mJ15 -z`B#VgkX5IO1gc{k<3+-kz!cYi&DD3C2bW0csfy0FX|sBVcYwT>wIJ4%RCA1gm$T|4 -zZ~O6WxvI$DMb4M3BKBfEJV;J_-mi1$BEm`Hwxo|b!Q6L$Y-fV3Wih}j}I -z_DTo%{PP>qB7`^LwK&u3`%PqN^NLh>8}@Sm{ZjkA3&+%{34LNTM#Z`-=DBN%Ngb#_ -zw0EUH6=mmgHIf)PB)!1UMrBj>4Q{M>j;;`$u?fkS5Pn^*M|(Mj|L9x-KoZXtTH2Uy -zwH&t|pz=hN7i&&WU#?q(X4UB>PqKe9I_$ZLQe7g8S}$#V8lf*m4i!wv9DJiH>rfF> -z841Q!ajVpSGFwn$fS~KiPD?l)+aZY_2f;sJFdA?RWHi-B7^oy>y5CPD=9omvufEcY -z$ZR?N$jTYf^y>SeJ4;8Q;mtKb&3ruf+4b2tz*;fcW(StS1o`m%(&e;$Lm$-h!t&+v+&!xP!^7b7tmi -z{ejwb)!O%ZDwWgC9yp}d_zmm@Bk`O@ORD>Jq==KrX9}IOM>}jZZ1?f}fzo=j6D6)} -z=_wxg31nX2R!7sU*u@NRj{9=B;bPx&E<>oLia5lN$RX~5N)%^hau(+wZO$Eh3uc83 -z7&Tcz-RYR$?W4H)J@X3$*zx(kjH^eiz!{{5=U& -zCO@mlEkQK8WcuW;G)DI=fG?lVv@}#&WCkv~xoLMpuFG5OVQcuu4k0UJ>)eJ7FqlK! -z+@3&}0lkyQ53s!w2D1JrNS{Z@A9B!!G!FxZ85hGb}#_11khA)S^O+B2Qwd%W8 -zJ|Xk2hVq^IQpA_Tje2|*_P4{GUhw5`OCK=py8jYDNoJs|!NDnsX~P1a9)vicfTzRs -zBXBWhP%54;_sE5kQQd%BiRiU(P+AKf)$Kc;%J^nElr66#?p9>-<1|r}!)Zc{c#gGM -zgB|q;sbYC8IW)f`?8zi2ZAXNO8@sZH;!yN6Q1Kxk1c9iYBMNPlDs5RE)8Q+tQ;v@iZbZqKuvHddzu*LSmA%cx60@_Lc<1qk@7Sh?r~1)j+F|&WA5w`}a;U&ND|$wO;m+;f -zQ6Rwb`@Q?gC0+^(J$VzXAvgP+Hn|&G^uB5pW*y2oJG)#fsXxz>bHl*^Ht>{rO`?|+NAet7 -z8`ED7w~XvZ+%(RJjSD58iaXpt4mW^df+F9U%dHNG`Y(t3Ya0XA^?w|0q|@NZe;n>( -zk0zeK9d10x`&_IsUNYam9Pa8|&6qET+m7p)DqP^p;qK0p``h8(#Vl1!I)Wqp+u^Qv -z%paK{;Z076&8n}6y#?O!c_N;@x3HnaXCQ6v3v -zm9-Pc)d-8#0I>BQ#ex={HqI>>{&4$V7&j^k|Chtv?34Jn!>z@zUQ9U~C>ai;g2`+L -z4P^wU)v8Kw0N*22s~pnN?Dy8X9}2@d(^n%n;_X2bM;|wf9rtJY7@3M&aF3tcvVL{< -zu?RcC2PC3ire454133TN?AYvYv+V@jIe#t|t(=!HhkK;n(aKMwc$Uk>*NL%0Ihs&sAhV%3+! -zZT{tObK?8$2vH^W739Dv{*obT(pG_W#Y)&Rx>QI|oZuJwO=GzXYz3dt0akaSJ&Qs7 -zyOuHJIFAT}ycT0LjY%qUO+v(arII;cP;XA^gzlxbWl$M{fW{MNGgyoZp<-Jktn$J+ -zHd$^1Q-cuPf8La+ee9W`$e_V`owD-&bbckcJ5&<+#zFIq0d9PIv(3Ez-g;**Nt^KA -zW&~M1_HwTRVPokzxB*^QkP7 -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 -zk_*n!gk~u;o -zufT2@(w&Cx!Uq!lD$?`|Im&;pUjZa0asGz5kHG*aM+G@;PqO=mf=Uu?me%+;(}OZH -zcpAHPjyiZ+HO}~=OwB&od+h%Mar=>fLEJBYLEI;GaHv|Cvp{4=iI5)D5)V9NB{5*A -zSU;zFhEX`FKw6r1%VFO?I?3%cdRs`msHFxiThJi+(>g}D3k`CE1- -zfH4&k9zyoo#{RIF?)=Q6|J5Ec2qWI-XObA1_EO^9{yz|R#M=K0aXYdx4R49AW0FB| -z$W@sehAjbM!OwL(14Is1KhUEa44}e7Z=u~f6|qzueJM2x@pfhYg}7nO@#dp3_VweY&d>Mw|!@C)Le#r?k^?gYx*p-DY8Wa)_Qii`;(f0?FEv8o0h`=mrT -z8kdtYsNp+N$5O(^c-qAhPoaY?l3{rzaPa%?J)&S-TA0nTp}H-EZrah -zyDIptUO89IWi{*$e!0g9LEDWZ9f(g!O@wR{j8eH77!04Pn?SBKo`?#L0l(8qlty?b -ztZ)o=2DN1i(4ZsfkmVCpuJ^TS`f|Y7loC2E5yHaxvR4Gk(J^Qr+cARe86|YA?)d)j -zRXQyTfAB!Tx5r%(*Lfy!SmCs1xmPB^oT@vO2JhtZN?dG}?xsD|>mcXROltmCeXrIM -zGx)YPZ-SvRvRtWcN1x4>0zw_H`l^)8UyzZd7)Up`uJkQr09vY+$QlcEz^%^)ogg-R -zQ9&h&Q;4Lrt(~9{eB&%jU9duZh5-ym!6kl5y*NlIekf`dZd#KJnH$N;!9%uBnUsska$HlLLAmK -zQ1EW!g-ZwRqn{?$b>9tgSMV5VS)PX|ct8#+KhnCg!&E^e^5kuO!^mFliFDl6o_Xd{ -z_0%0Ayl1#Z>#Ua_M&9f^^i|cct*X8q{|9l${tIz;^Mw2bai{+Sam$mslfL{7ac8<9 -zY3HHe_)YtTO|oiff0s7q)~|vdyOn%q<2X4hBjqjMPWlhx#?^8^RnYFU)&Xckh$FS0 -zF9uy`y#1uKiTLhnRSAnYP-4^!gm|X+BuB!V%h!3>{YqAgpq6DhVXMVG( -ze@+ig`d;jfk!vJb^ib)MtFdJGkf%A{9(OS(a${}yX;e01^kaVBNh^2|qbtO!Yi(c1lFA@QMQeid~lSfF2)!r?~kP1Who-y;sx#;5d=f2~0cV=r;#@W+APRTmfsDaqz -zB^x@(#l$G~pqsj!B_D$>I#j6|AJXp6GhtLuix~+9Q3VzNjQf@+c|;xNYuRd^>_( -z3qSR8us8^_o11D2y2>{)s<5H)L~YHL%>@z9sw54r?|6Dp4qrw~lW~V$IJ;>qCo3%z -zCd)D-F%bOVF_%(5(yV?DE>mzXM -zDd5A8W=VzGMsM%@x#?MjCHzNCRdz_{FJP3XTJN{_ch6e^48}MXCUs>MSA8JZuy4=5 -ziDo{<1!r!cvm_Ic#8sJp`x_7xA~zRhP;`F%J{C`atl(ro^zFIUbUa4HTdWD;H54&v -z9tOy!_@B>Cxt0#&_dDC|^wt{h+V|^Xt14403FX1eO#P@D(!1K?F2-=@(3%?_bcqAS -z<9}})$~i*CX$39zuq26!b{yNZl$8Ic7^p|f1&`Fl -z3VUDSTbyCW7A!_d-r$HqeRmtR_m>QEXa9M!-ffB^i_hO0s2zB~hkd&oBd@#Nlq!nk -zlWFuT-IXqH!iEz2xR3-5JnKQR8%d?)N_ycBYlW>93feCtx;`-t`^1fP1)kU@etZkZ -z${;+m$W13U13c2tp(0yqyCXY!dgbXV9ZQ&`il1|3dEqygrn0bTmWK7GzzFNR -zfzx|)m#&NPvKsbOnYfpD^Qd||uP>zbLEfx+1Mg-3>{2h!R*A0u0oVR%K8I$eGRY#o -zzhKw|x6S~4rT24~;!$Mw+nGh)oh#$)gC}@|H?tqX4$XTH;`jPsjRfJy9eZj@RDFB_ -zgHP-a66*xm+bUu)S~PpM{Z`y_gwCrh{Lp~Tp1ji9D*Z$=T!=yLkP0|)Bc7jaqbA38 -zO|fkG?JYTmFKHTIW!!i(mS5ZR0u6MYLCacnURDMl4qGxal=e#~;$do+5`{4fIa@Z(|o`WH30nbLT5FDz0(xNYD4)i -zr%#yEm5#($cPdXd`k(&f%34dl0;%4<5w2TyeP9t~ZK=`fQs_%ly%!U&j31T~vhcLV -z)N;g`)0YW&X7QoS9)a;1H7Kl}#NA>^=#%!?_3STQ|$GAu77 -z6`A -zL<<(K<9)$4vjW!gi-VD~w(4u&DzWF6IX13V&Ssk7YHz3G52f`Y6-;|~`D$9*?GvNT -z4ITrblb3Qv_P}#A#-x8HXHJJ&g>O5mcFCBjU2jo^-%bq;A65>^c)#{Kn1~AR4(p$y -z>y}~2nL{#V=Lb@WKC{a^-(a0)x9=uOP$|r4;nKjx94amUXb%}#@2Z5coV&A~qJ(0L -zJDCf`(h-u#Nt+nTQA|sDdE&(dKf1z3FQ9u-!P<>n7Pb~8_q(<@%R)lHT@A^7HjK2r -ztqx`gSB&2Oc3~ASQTxj}4>P5nbHF69O`Ilu;^ibsY8ZTUPQvI7%vviQa`l3@0#|f` -zp<*=hGGwFlK>h5uWMA|s1@6z2w=v?uaszZimZnok~qLRGhC^O}#Pz>~@E3KsGwN`Ox?N9=sPq%==Ur -z_7oBkvm%ANy*h3qcsEf5GJF-@i~uRAd@?cL2rtLaCGo9t9JH}T{lL?%navY7zbA2u -z$^d|K-+0`$i(Sw63$a=GL18J*g6ixSFJrPLeGe5#a7}Ibi*|pSVARijX>ijpcXguN38W(avW(sn<{^p0_jikI5c* -zkf@8!o+=jn7H64CkH>m*zy;HZ{GkjcnqL>^y?&!Na%g^}rr(v@2+!H3Mh{alWTqv- -zdSnAzAN9v+2^JGy08F9R4mEPYXAT%?Zf0+Jd{Ki=+iESUS_aU#$QJUJ=;=ytzqD^z -zX*Rgp(myi?Y@G?ps-DXuLx-TW2*ZyRq>kp5mv*y=kMM3-^F_aAn+r?faABX%J=Y;u -z-GvMNHH4b|TuDpnQDk@9wBCd7pAd#biu{#XnY8l&MCBu_Q=EJqulRtPv*8jsv?E0%fMqH|s2^hO%;13N(7oa`_jZoO3vCH|il@Aq9gI40V>Q -zn~9|n|JVm|%k0=cjXs7llkhi4IKUeC{FPb8Fuo9;at^^I)>!^2=9~B0WB`_}RDB3Et#Qkj{*!d`Z6{=f!ED*!HRB`%k2>3a3>ude0j1{}$jC)m -zeQ=P^YH;s;e_~U*OX&u3Brl+q6yLs5rYWf{V3gI4xdTor@Fa0@Kz-jq{G -zSFt$@nMORv>@J{Bh><^LR)^o5WGmA)5}ZPp>G4Uv{a`Vb8875%)*p=bYHxUL+`!Qfv8IF%rZc|F -zU5F&{WJ(X%Yrlhe{{GM#c-Tdke;~Ebt2HREhR)J5P)^dFV}i+hg&IM>=RkNSe6#{j -z9g(#m!I36%Xie=HqSk_2qb3+t?QdVw8-V$JYUnC^7q=;s6wWY(|J!Xk=}5rd%>(%g{2eo7)bfOqxAn0WYdx<8LaLo|n{ -zM8@TPp{lro;G``aR}`>JjJaF-dbAd&kpik~<}nbkK$?!IfkuP^fiuOhl5(9$Q}V%^ -zwAl?ZFMuub -zJhq5*n$DcxXh^tmFkn2T1{if>WUEo=c+IdAB}t7;b;SwZYWd4zgK^02?n!LYoH*77C8dQ -zrK5Gp0fuBSAaTyuzn6;3lXjh-2eaw{VO{)lY?>)lJ}oIT5_uwv-$SMD7GO@2^$Wmv -z(O;^_>YQ8nd4(_vSzA*3W@t8)>P52qSm$b?ELE$Xpx^{%?)*t_g)D4`!kfFDw<`)( -z2HF;W0%#P{8zXk`0PFEsGHdB#mu1+bAc_N&whSlf2* -zw94?ExJzLD*<@x)pIlDn{b8o(YV+MZ9+*?m3-)o^RXjxKyeN_9#W{%P8*OLcc#J~M -z#oVlhwmz(fdqNM+zOVyg`8#0Y4%(|hbws}L!c0-zMu`MvoUA9Z@_U0FgGh6lNp%>fFagA_0=0WOeM;0F-( -zU%zIFR988tpjkr%q>IW*6%5>oBH -z;Qpd8BdG5Eso5r9g;JvEEl-W+3Okq~G#ksRn&^d| -z3P#f$TvC=E{3tR*%pTkSUP?-R655t@+lp(rpd6(Cp%&QGXZW(3ZzR-4ajDDpv-t91 -z?MF~xK~lIiOl#n!bXTG|1ecK+HT=A{aEsf=PiFUfK)|H@ZsI|%{-1r|AC)e$&$Ku< -zD|6Out-*VOm4t#|-XY}fmI5eC84QfSZQmD##*SIT*mGCs?bP8~T`A~@Nc*s%ZKuY+ -zse-vn+sfb;+YC#`^Yqc9X1}95_9q~@A1%Lkt&ZXuD&al$f6A?Qkcq{Rjum{mVweK& -zmQRkKVG#6ku159xh%l!Zbzm>h;_r{`ReVtoZyY~)y%)adCyl&wZ6 -zDk^_I|6KZp>GGBH=jzWjLGbfAhm|Z_@Jo9u$Spxto`i#Y9Noq;O=0f5WMsqQpc3Vk -zlZ=*KtI!sk)k!{Vk1d}SE16@Ny2O|R0Hyb^#LN$QA$L%>J5VUNSYYhFQvaGu#3p$ezJdl{+S -zEG4piRmsO+ckd*2)idB|ie8!p5F7J-lqf4W!Kf1Fy=P_kR -zGM>`;_M$nVY1W0EE8hb!kB%iy9;}6Xob(CZY}C{#*=2JwYq`f4#hqZRKjZjCaU1+a -zal3XV9A>~rcq-|4sI7Es9um4+9rMsYLd7wpNs>cB5{>g^?@x49tx}dcVa?T!X9Ppr -zyPPm~{;6HQ=3Q-RgCqb|{vV2){EOmtGN$_#R`)r31W%z_nhTuOQ~;{QIov$yap}K* -z_wD|V!XKujQeKh*>*+G9%w`cXJ$bxuY}jBJU7Nyzd}vb>!p*(;JMy-k^G -zXwiVcIwYs@1}}yS%s!5LTN`twEBV9Q9wctM?!2u>7`K;|jm)VDe1*(90U$547e@3J -zOzVh1iz7v%@jSs;(zNVCBo(Oz0OrY3K1^_ -zUwqqCOK4M;nGQJ24io_->FA5ls2K8-obA2_-X*-0mlIgF=b5>YULao!cxz?0-H*w_u8VH7-=;s5_Bc8(Mz=@4 -zD`m;Lw#KkyK5F#o>8RVBFr|o08H4pT!IggH?6njW!Nm!F-Eo}><;sn&|Vobu6Q^HC;ptmHF_sVJw` -zNh`PMbzs-7pG8j)V_caoo?wySEowmhlf8HsQ_Xx~2mhl^i41@8fEH#TU$Z>z -zW54X?ghrD}-2gF~w1!K_;00W!Xn=ySjqYtxFU<2C)Kp#AT$=!_HR^^+?ya1se;@|g -z+k1QHJ2uVtdS1|R$u6NUl8D}>^VtbDlFX>~)wGS?gJC0PnhZaLeQY!eK|U-N&oaKN -zTo+&8f3wDDN@n;o;HYn0S`?!3T<-}F0Ad)iS-&Zb?0zhE;K}C6q|&OcwB3HtXQg*5Dt4rvgQh+-b(~L*-<2ZMz -zJ|+H@xQqUgxPiu4ktVB!r*2JGM4Q=RDFZ(3TFnV4w<>Ury)zVNz$1N+LuQc1%p6!d)hpH8dOmQY=cqW5@O9{QPB1C -zhI%h(Ku(!Ls0Ds2EzoqVe^AE509TaR0=_}}oJ8lyoWOL=)G*iFF&6gS`ik)xYKwIm -zieh8Ypa>Cz<&m>GSb4G|Nc9G`WRv)2;-dHklVP|i)T&OGZL%4wCyGO5_p#|<0yPQx -zoVyciWme2*|E|ChJU&sKU$CxEPOC<%kWDl1!Q9KXKd?YQjicQ8=|wY8Xx#P8ZA^c- -zsJIYQB(`KaWYsp0Q=j>A?cQU}A8@J1V*^_JlD#CyZ7k2Vl>KW-0w$hPtZMBH;pC@y -zvCzT#z*%_9ZO2R?QBp_ZX~8h6rirhZ8>y}l+Qhpx>;!Ah2yRDf?|Flg*L{Wh -zURV37j-%MRDagn^q_^0NZ`dVE(5kr!tc+8vp%S!v0Ee1g^&g=h8QRVEF2{a=uaELsH -zL#zH2>K4YMfR2}>%!im)0qUS9g&mEFPN0VqjL+Q;u*$Ym*0eN|$OvRE%`^{&i|6Q>-7l?o_oAMmvXD@!|N5~g1i9> -zC#)*cp1@|gYy?`Lc*)Z@zNZrF>)p3l7597C%;~^jk~L|)j5B>OoOr`rAf=*NDe2Ou -zPzzZ)EPNl&sUJTiSz%<3;f@P`_u~#pl;JftGXz8P+-gT^67R`3H^*+oN!2xvKUHoA -zZ7NLrKWRSv0Tzh5q;m^y60Q$Ad2AkJ&=(|}dK~4&&~nswPRBbv&{|MZVboet3E3uV -zKIelt=uSE!;3&dZmdAcUz(fgMa|f#mY{z@j_rME06xcdaPUG#>LiSA0UdD@>r@hXf -zu?lj`IDGyFd?w_R%Q5L57%}o4>5P-v!POmM_)UO3zfLh!{m916h3eP>dz%quRr826C`j#g|aM7&Vj!(F+wA`zwt_fOIx;!+J#18{eP`?nG6m;PP -zE!yz<=mV&)JUZ~B`~jcS`KnlBm+so4dnYBc*>=SmEWkQ49pOY#pZTB6F+T4N*sXV#EoXH~0sqq@*dEczq%+o)y(5G#|TdvsI6#mTa9wS<3Zd -z%kq;Ux&}8aJvXG{W`b@z0uD|S3?6-&N5hMmjUIC1KM;5N7sOrnDGi>76s-k|VI$sa -zbl%>TrrD~~&eaN5*GVWxAfeDV$zvHc*dcPhtV5tVdjoH~P;LhWeMm~ajcWmd;I*bQ -zF~`y!YXiBecvzg*gxdph=yG5@p)&inl;F8_l_oX$tnu<~tP|adSK>HT#R&<%)c;7# -z^|@M$S?4B2zLd)`1WCQj@M{HBc8m~VeJPXIoj#BKy$cP+cm2&NOv&akyfTD280zc1 -z2)@wfRgUg~a>Z`=z+{A`EgCm}U@925rkg;KjHo4cu=#1jOvveLlnY#4DmoHj$-cXV -zNF^X~jTAH$cWAkw$^c#qKL_z9vgmld>3iWjOmCnOaMZdw6jgJs;p;Hw8ctyGLK$v6 -z%pr)0eap^ -z9aK~%+3n0&F90zj>a)MzxQ3vEj9E0Ad|dSdSrQjzo1CHsX0MOOkF;tXhQXAVN+U^5 -z=Xm;GhdZ^`71=4d4ih^rGYu^Rs@M7~U(8FO;xC7LHOywEH6@1HfDc|NI%r?r;~@^N -zPV66tyLy-@8V~C1Tb%$qPy^IpJzs`g-3fwRHenr%l<}ashppBb=@Gl3#K=>(cUG?6 -zAJFSQN8`FN`|r)3(fbXcpw>B+>ZA!trJ%MGU}vhc0K(883K)J9`h54tte1rs;9Wpnpfok#O|so|v41qJOh;(ov`0hxdAHo3cJ -zT|yJ@3R5I8fMyVONR@;g?Tby{@}8Y?7>SUotNH~-lE(yjt;JoC`$K^#!yXl)(~I;9 -zHwcHICNh2v@Gz-qHLa0DE+5B7Q?e(Tb(@@H)9SW$@97&pv*x4x0*yK8z|@$EQ0b_w -zV`Bp3iCWTFJ8Itu{fPH=1+(lCDD!OC;T|Fb`ZlzMo|FDGdPzGfB+2nIHw@qhK}=O< -zqvT7#D{O&G|8lq`zZ`DD>70}BFNYiTKZo19z4goC_WE+T8=;fv{G%k&<^OiLW&d-y -zasG9jRZTX2Naj3{2kwzwZR!_-1j-V+Y4tDU}0vn7=hBve(B+#EGHOz);;0r -zThcw!#Ced7NHV{j{3ws|488T4Po$bmsagoo -z9Boxl#h&14aiKlHrl8R2I85Hf%K&bj@^9ZHOe8_`evE$K*Yg{g4daRJy0Eh;`IzwgUPRshYm|Y6+VGa -zaQ-}&SSAn)sF~G&L?GT=-|R0{TsEJ=6IP*#s1XZX1|m1xA|iw3?O+JQophIU1!LVS -zibF+sDUSrwt_CNBsUaFdA{R&vAC#lcON0k};RM^=0LXo?U%(fG_B8 -zfx7A5s#6BFDghb=oyo_{{-?K(efu=ITKyLArlZ(o1^xqEGBy}8!= -zgY~gzxnkR*`so5oYD(wZ^su9Q_pW$iTl4uCKhTofv7;JBGR@F40CxRx`K8r#y}en7 -z+w7z`nd$lF^mvcly|;&~3M)6%ok{qD`x!+Upp -zUTAL0cK>1TId1^Y6ymbQc_l{-@ -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 -zk-X%9Y4A8> -zKhKauv~MT6ecoEg|6trTe=zP4^>D|0)skrXfNwKF0F1kReQ_EL$BvbV2u?aoNizIGZ3_N8av7~X0i>R&ksN}1MI)X&J5$gt=5g%Xm&JA19 -zt61w$CZq^D4ymcpO3PQO-${`mpkY;Cq$2|JlMrm*6J0s2Esv%24{pJClxCAr^tcMr -zFO-IMi-p|zI6Ft%vN6juBcDwFZ0|?{U$uLD0-pe2+yw%b`UB&WD3$77@Hc$=7}b9;Zrp!k+_#?NF*>5XbRDgfZB=8Je^EXpcC(z`wdhk=z`Uh -zl>!lvsAT^O<6ePsfV$mit%oMvJ{CR}9t>9J*XmTp*cG{>e9+*w -zC*&sk2jgA}Ealg!B|M@v_oh{A?PVtQ%v_8=x%QymCzSy^KnX;^C-Wqg?BE!WIa0;2 -zBc%EVG!x*C<%@An+9D -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 -zWVc$Q-=lf+-lOuW-yjtizqEKiVrO -z;v*g1N~@#n2lrD)6i=G6ke%4>!*=Q1F0LH#+GTXgvm4d`R>rHBFaN*8-8+b< -zrX}|rGgLTLO_apU62J8G_?=pP?Db*D8;=?&e1FowvXUH!owQjW?Skx%>Gy%j{n&iK -zL^Fewv9=DD`&7m*+I^W}Q<;qpW7Ka^BF5n2>HCEQ+@D5~Bl@BDY-qJ@H&DRXs!jG_6WDj1(b4(QpHrX2rvd6U -zfraj2+po>+cySFRR=FM5zDCFl4WFJrFy6Z1ja^rSQtqj@#=3@Jo)8V}zW-bF4M`YbjA!OFO_SSnHSF};^n$_FlkD>ySIR+f<4BZ6)} -z^iRXge2{gKVo)Gw6tZZYFDWPWKe__bF6N?cm(Nq!6k5Y^@yZ|u{3d&p%R5GHwN@wT -zwig;H!4#K?>{N%Gg$rBr#m8JuY9^zp*6;h?{Phb+AYUC>l4#H^ -zfiJy&OaXPt+pF+65n(QwJq9UBaxw=f18DA}sPVHYxYDLZ!ksBR-=UYz*s(4lU%-;P -zr4zDdR7fk-=pm$kIxYDNZ6@|^N2vHynp3b12!zuUt=R2|Dk9K#?n7;K5)!`zaKoI` -zy(CKIKpj>bm^*0=h^=r@Q&~op3&9fqJ*ON@#$G1z0l{YckYSp -zE`=!k@@2sLr&fHRjy-~}YKnEltY%;Rji|OXpUnou!1t64?~ewUw#n;=bA$8QsV4lK -z3Y3CJ^reB2wLr(lFTZ6zxLei0x!M%7z!+N)+13j$DOg(4e-DMM@Df}pG>|S0FE0ChA(XE?u(hT^X~>ablrDs;%$#D<+wGv&uM8yJBxns -znpVm|j;6tLo#(v12Fv^Vh|e7km}a4H$}aE}^Ntp`e3IOz8suQ|kPJkEfV=ODu%DVK -z1x(h&Tr@SvyeP_$=aOc2s`4Np#I9L>Ay)-GZWl$qN -z6l@Syk=e`k{GNhSLXxvE$uawjk$tkV$Hb+kg^$?lB!Q32CnA -z((3(3M@lea@ImxE2N%C*BIppUX^^H!l{Jo$*YBR!TDfsti1ArklC`~J`BIB9VR$D} -zo(>TRz-(A6lT$F6kuxZ -z3lgRPE8HJ)J+U1l$(xzXfwyUbGViYN5;szoLYSL=f -z6^k2x;;}-(IhT7v?AXQst;tA(p%q|r_hE8a%C^*B63=UWTkEV?9GxJ}PeEnsRZhWW -z*S8KN93opP7AZelBTf~>N$>WMYj)>{MUwXgr2+}VJ2$3BY9Pigb2y|k9y{V86`xQ4 -zJY@)=*=H9VYdhk5B;uDY&@a!kO6vvXiOd-(svasVg^_4WL}Z_Wd3ZoW -z?6J%18PQjegLu9#j>D;?j%$Zoxu_+kDl0!A$a{W8t^)PD1x>GdB?w|ejG?rdbYzp+7t5>S%mxV?|CzJ25XHZ`Zi!Eo-^NJ0 -zoC+$DABIeJ(3dDS*Je(vvPgVf52FoX_N(BGg>)_>rKi(TaqFFZdzjL!$oobN2@>I2 -zUlD#&#t#HN-I^bGU70<>KokZzi7BMe;c6YdgB0i+$WN<>=0eYn!ZyWhPBHSUIUoua -zDWR-8qv55n8(7;sEkba%hd?Rr4ovaL%@XEn!HqG7w5LpQVuGRbvZ5d1lL>dw6y{ml -zEWp5c(u1zIap9-q1Mg^(QX>sLa5mP>cFc-@+1#H1n_DJ^$C*VyQ7Sqe`_~_v`v<`0 -zCf0A=mw4x9{_WBFI`!#6u-m@yB2?3Et&yr>gI1(CK;|)Zh{@3p9>vQ96r$_5ei!&t -zOGh&uIoMH`M9|R1@1&^6)k?4X9NJ`u0!gy~QE<>zaQ-g7gwYQl8&-}`$1h6(+W)Dsi_m(4vE3Zw+Ex!sIp)^c7( -zP1SqN+jZ)L{<674N3v6~+J9#MZF9c>Z0=3D6#;vgnMVf&>Fg`|za$DC%r>v{OyTeDXQU0d-2?~Dx -z+dq|~ve}ac#}cu`tUB|%-=0de@_rO@k6wDHLKNEwld3O%>Fl@on~T%}yo1jST9t4K -zm_}(Q&kd=2)I`h%huxsnQsN|`shX*&5}$q!$)dWQ0I+*1U{U(!gL7cM;|GpsBgx`t -zUY%(49}SsuOZ;k5NYUmjG5^821Bvq-x&b(M?IcVBWHAf?=eE@S2j_Mo0^rED`q>a-UZRBs&KO)U+mwG9_ZB_|8W<{bIzW>aZC^x$i -z8{MC8zsLGL_@iHQKm=a6db^~G0Jzrq>Kz*$=wta_} -zNu$%y2DeIAq54o&$(NOMK3T4gB$J1eL?V9o>VZU{v~y(mGBlogK&u1WMl5af(Sjf2 -z2Y1x<@0iW4e2YZug1#nHVtS-!^Zg_pBFrz^2KJ86{yZKlj;25NntakN|KQv|W6g?- -zwmFaf;M^war(gm^`R$z++Hdy=$#+hSou-MNYVpB5>;l%Y@~_2fRQ?`i;9|~5>^(jQ -zm|6KLDAeIhrSG1f8pH9*Z<($BqBU!!*K;c?r(G{ -zcGyhd6*Movp%0Fp-`oK>_dWe5k*$mf*_t^ne=t38MsW$6_ZM1`q@QAAY<6{f0Z0GF -zx$&KT!%$e@k#j%dF3@ieC$L%u1kl1AXyl1g5H;I&{`?!~F7$tb-+p8&`y1zO0N~uC -z|HipNX#qI5t4ciC&m~?5u+3D%kbj&H_nYbgwhGXxrc)P -z#<}l=$iJQFC`SCjxq&;|qgN<9z5^Ly?~7)+o5YA~E1k7rl_b>OrtYJs^a8Gj_tfK! -z!(5FDs^O<8C@q2Z+&8Kya%uWe4<7R88;+-VlU5t>i_9Gl4$TZR%PvC2MkWCcc? -zqdolUz_`R -z66O9CU~{{FPjCR(+!-GB_bZ-ci-WAt{Nw13+zg+^!es!PI}TuT7xn{eZZ}kw!@q3q -zIJ`eLH{&tD=GIpyD`c!}?kgz)sd@gF&20+?D;tELg=HNrkpJ-5j6P543ZtJ}X}{yo -zxK&pvaN6+v;{YkbiDHwiFIA}03^H5~LPmM=o=Al{l -zoF`x-#4T=3W!UQA$FAULLNn{vok3Mzw}PgQi!b_Lm+5chC3X=}$VusCrcMQtA@@O< -zP}UF}DU9F)9bbuy?vfV|T>&;X9*{G}E(QG&hCn)JzKLz7tdZN~fbt|>{9LFJ3>4!J -zpvk{%?u@Yn<-cui_}^j<}M)}_+xVqL3q8%IXDlh{AF|N#U_jZZ0^p}UMNwa>3`eY -zNyh-28}~mp_qg!?vALB{fZ_Q&hQ%K%Z2H*+tAG892&0N4*R0JY;N37tpdgbM=mF#o -zRWC{yJ*E#jxKD5)WD)T!{I{FMB0L45kI`e8ARX)_CNNn-1`U00doCRhy^iBeEx4PE -zI{FRrxSAC$-qUM^4%B{yr~G&aDz}E_JW@}@s+M1(wL=cgpr1db_+xWZ_jBnjWGQrk -zA(sm#Zyy)&5%lAv0__ybcMHQy#k9gyE@OojCr#pLg2;FCW_c&YiFwW2Hy#g$k%BCM -zJM8yhQBKq7J1!xceP_)skgKYf#mUTSbEmt~pX!R^Y?O$( -z&0AZX#-R#o%qn`hD~%Lw^s2==8A3#eKghg&EoA~V`JRUw0PW%83UQ5hiS -zXz9NLGu|r^uQeV;b;sY|^sSZX#wYR4+1O54c8H`MYR6Qq(cf+XLjuoaa*BlEG6iv4 -z|6-jD0KqLS@Djd#X^TKox>H@y#)q{oKj1UWItVYwG*++Wfs|mZ;7I2IpNKa0-)IkF -zeLwF}EwQ;yQyPHDOG$l@R~R4LO>8KvNC_#sd;*%=87&LPj@$;WK@sJIOAnDg@5;B -z@QZ#=XF61YX`hLPm*Lz)pLGcE01v7zZzwKMZtYu`U<*C>by3B)o%7M#>OwcVkk6KG -z(x;%EUo?H$jSv<#DmT+-V-&k->uSkSeZ!Ru?!wm9g14Aq$!+_4HrDbnC(HUuC#ME| -zk!Op69ePsyzzPVJ@VO&ZKeJZn9FR?%^E$p7lDaYCmQZ|l@=2R;}dVw!yv77%CZ5<-7?*_`R_G8 -zzIk@M+D~b~8rH*_{;t2-w8F6OTg5k_23o%9Uxz<0qjhDqx+l=>Ob4@I~W6~|F9`(a0 -z4tV(F?S|DwS`SiFWJb`M2ASF~QYREBC^&CupS4iK(ziUUN>!yxLk4ofOVwbZaYt}4 -zWy7v11Rf)t9oZJx|ME(=GE8D8=cR-PQh+0wq1C^aU6xp3SaEL0RdfHTp=GVGeB=TN -z2Mh0W4ISI_RL)~+N0FZ-Xh}K0Mqnt(@8ztviN-H`cYu+cskl^&;AoxU^3J4^Nszjb -z1cB2eqc(k`tq#uu+dy%DCW^UDCG3n(l6NE8qXx_yU;-z1oXA^Ono-ed9r29^s!9{q -zO^}t4*l7Y??FTbBqMNm_YX@={{A52jwToO8hYlmXo7zaUK6Xqc?;T~;cGC-73NSL* -z1vdu~54tZ6b++LQ-r9*}f6eby&VV6GjILIA4D85nk?3!cp8jf>Oo6ZpofBl84ZB+E -zz1Xf}NVXn)-_g;?=A-NO=`VXVtPSUw1@WCNxW;{#D -z1=_k?*J|~Te$E!Fbn$lOk6NzwsIQfLU#Sk6fVi0J^DNcNW+P(Zw}ggcbsIRlBwR2^ -zo_9>2%QftRguC7m;#y5ZF3_7!q~paeX*n6-$h02xT@PD*)$_vM{Em{Mp!9CLd|SZ- -z%5@gjx-lr63V=F=2LT;&1P901CWW&M#V9@{oCFi29WTI1t{_haXbhQ@im^ -zDvL{b9Oz;(SS092&0MDv`??X)!8)-jUZPs#StJ!>I^icAVdW2kSY&HV_9P~_93ewRq3YJBsZsr -zRHZ)TKp`V|6p(2_>#AD{IAHjP4+$=?K@DT3T2Vs=NvlW{Y7W&egyS<`&)}vx(@Nva|0}v;dX)*vL?kl -zOcpU4%`#QZ$Zf~3|_C72z*fyoq-u769T@fxPURJ -z3nupFAi95uBY1=$ZY$T-2sWi-NMk-QVH-$Sx&Jy1kJZ{O^61R7K*IHTbYIeCQl!%= -zHA-d`i`15%Vz$R?d%l=o7HNUMz`;z0E-fds^%CENK8>&}cR? -z){tD&zx(90PSj;<{dtfoo7tCJhMjDyeAeUT<-94S_JZd^$|yCUSGQyeEujs*=YYS- -zwEGD7dcUpN)=RG?eV%L!e8Y_vzxcw4XE+dC_VDxDXHHdsCsI&hLEz$``Vf9EeC83| -znN~22($^-K#y!WT=^fJcY84OygX$aa1h(GpQhxp{LT`;pUNJiZ%IkjQ421|@6YAW6 -z2jPPGe8g`5>q@*iTgg<>HHl7CL2iQ8u702qmC<-U4@;Gj7ONWiy-8H6d|PEh(ZC)Q -ze`EFZM>nt1ndGD!hgK$Fi;g_%7^rS6bW73aR`+G&nXp1eqta}B^oBweH6Kw4-YH0I -z-5jdTXrBTRiH`Gu!5-t*R&XM$$-6_k8I -zzH>3hf%T0&Ixd?X*JBqGYWbIT6dtQoJBf4sj<-7}O^E*fOcDad2JhsSKemP)HD5}i -zb`0(-=lsz{UUAGdrPRdJJv9G)Z=+Seo{T4J+^g4zQ*I#R(6J`$I}lP)exrOz9O%yX -zXBL`dH0sFXU>g1;39;nzO^z56G68%??OZ&A&2OizO_wV{2}6itL~4gEv0_7wB#9~C -z&x^hUZ5`IU3=E=An{c4Q-_HEt2AvG1(hH+j;=PsejXuFy6aD(4E`6n-y1w7!iaMoq -z9vd35L2V7mOu~`%O&xN?m+5x~thO2_B?h(GVig;t)WV{Q?b` -z(oyo-J9GoEx#6?_vALI-AvS!Qk6{|9O|eO@EowC(&Qri1r&RY)Jc-S*2Cz%t@H(6~ -zbp747;I?B0sNcH@B8*|{Nkh@Q_mt)NdwBhReXzZWuaaWyY7C&&D)+C1?KxKPT(vp* -z;KJN|gk=A!3oy!ez(l&l)MUwxziuc_nHb-(B(M>7vEv)KVX9Z9J>|}BZb**tGu3*4 -zs%+MLn*a5t@CIQnCn -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 -zrH7o5VCgZox`b -zDu}9Ma1!0T-k)RAvPh -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 -z;3`2e{R>uN{StnykfjV%-e#JP6w3g4sgL -z?zW%5wTR4m!()Y57^rYVw2Z7?%s96^6qUxZf|lHHoA8 -z^T9Zw^yh|K4&Jmt5>sm;FsHLXZB)m{HO4PqUun&^@4K(&uLPwie0Z2L*1P}gc@yY_ -zwy-?eEq5DZYRR2k5v$uqqOoq4_odxpGr|}y03a9+Hxat~$rKz^cfSv#V_`e@|0ddg -ziO{B!D!?yo!^eWZ*=B(3Mjd(fMDt#LdK&pjWQ5(JLaMki<2w866>&x<`1{$;*zB4{ -z(uy?vB|m{jYf+o2s<*3|lpL&X5w;Iva}W}fQy+`5$-Y@&ghH{@r}8w3>X@gI3OmDH -ztFd|(>8AKmy}$l>1|;<891jdMSeV;-%_fU+rAw>`9bcA?LY$79_8;`Bc}%KJ3U8)g -zI1|O;>x@eZwhpFK#{`+yC?SeJi44*;I7xm!VC;4$N8sAL>#ubW#mwA+wY5{stxay9 -zw$v~c%`zE%{+51Ru4>h?DQ?(ne|{i*ADR8du`1*DYQ~R8{0J3l*O8ZWGM=_@aaQ-d -z(is+qI597kyK~fh?&J%%lD-9BXO@) -zSmkqOw$0_HgD5QOj1p!4ZKg!2YU{x~TX@{TwRruM6=`$#)dPR7ZmWAW?53TaSX$+M -zzQRS`Wn*Tm;a6&j#Zr}AZQGbT5n-!= -zI);svySUUdZt5Fjj>?YqPgiE52_txR6XLf~)x5E^!yL!m2fWpFHKFNy%ympX-&15l -zjxS!;^o?KX;xC;$+3HK@UVPEy5`=+Nc*ldmm)Ej__*I}jI0wM?Zu&DQqP~6+fWXw( -zpqAsxZxXwB_f|f?mwT*Zewr8r%LW5J+r6QzbmT-(0@z8l0h7H@3noqSv*0DjOL(gH -za;H-f+Kyz*%jxizI2?BaM^}}4d~2^E|C7lZ2aJ-zUewGaT{3~lJv@97(CN9jHUpN4V;p`t1cB4LW3yRos? -zNo7_H1<5Y*)B0R*n~bTx$1g4C)gmk3(XYq|!cWN`B169-<^;rgtFdno6)hJ!E?mCa -zNWGL{Ek3%hQ?8ASg_lY-*PYAa#Uw4}I2MPv@*DSQ^;C_^Y?ifVEFAto6FBdtVRr4(|11-Tn -zPF0SBcroI_(4v4MqVBV -zo1SOd-I?WR0-SFUuTuOUxL4a5x8hl#O&xt1yiF&`_l)3By*)CMA&D(;tm -z;Gv?+5$S^B8&|bf)Bf^c^@%HW=S1pvu4#;_?eoT^eZ9O1Q�L=!NfcHTX6-R0#-R -zzv;;EBkoV(YPHN*r~ny-9U6?O-lq8z&t%NO+kjQT2fVWFg)x;7@OMHWM2|tnT4(>- -z>`ruV@FlI!;sNoK+kHCyK9qT8a{>+D2~9cc%%tz!o!4unC=m%m`I;(8xz<#9NN7l= -zSHSVP2``c=$tx^HVAog8h%p -z4YYBgQkfF{M&{9ntmx%)RlUBM_uB5NyvGf0b;LM7R0!!d{Ayo}GrBi6Awr7)ds)sl -zml{F0bxczy92K^jDsl6bc}nF;?}!ikdWZ>F7vu%5#b@VbD(!PR9rqW_9pVy+h7TtE -z7tQUPZF_vsb+S~FFa-1yt~e)h2>|2#Eg9G7o%qMv+l4SL^yf$Ox!ZGt_s#jRt!W^=4TOzoO -z*2ymS_GntJy7B`_=@|gcD+ya??;|qVQKLrsI`*w;`!p)UGQQ3XHHi!BPjCnfkrVg= -z>#w#Ggf-M@D}?@ZW5+MCl|%e+@x$tUQ9~>TD<@!qQpyWOPBvG}+jt-N=dL1W!H4g= -z&Z;JXUf9%**mp_?P&DY4`Ji{w!J39v#b2U+UAAMfllg{?DeI@t3rNp^7S@aKrH)h!a6fY*9EQptJ#&kuXUXxfJ -zBwtJW;6cpW0H_5G=a$ha5Q|1TA^)A|$!bQmhPm1-y>@y4VyCSIMd?s%JVW0hE2t8>k2-BVP=@` -zQ9F>H?+)S(j{OYEV-!IRl%Z@}FA1WM>rG%59o#0pU%24_e1aM;dTky22aYH7CSOU{ -zkBSi8v|v6?j}SG(R@9X^w$mOTIY1E~`t0J{V -z&#VoBMuhp-Ho2BDjo}{AaPMmm`l!d3v$Pi2H4N^WU*Pg%8RQzfKYmtaE?J3&Nq?Ha -zMzkHI4wBS7UdAvf`KP%uQxeIB?KoQ(uaxe16l(sqn5q1wo^683v48IQ@$wE>ebP^y -z(G=L)`qVx`W7^u5&lx!m%moKT~QLggs -z9>BRjuZ66LGBK6PmT-=tu7WsgnhvQnIx-neCgBu^^sdxe)hYNZ#v -zJ6QP%6RPcwE)lXJ8JiwO7)N##K9yC0cOzg@u=fvDp#^m6IxRq9m -z=W^-bjlJV -zkVyK2YdUOHkth>4;DnJZ>&O_@Jbui#KTR^P2#HL}7Bp^624LGxW1&=bTNt*qlxnY~{dC)-n7i-0EhCv-X -zcO(ROAvdDmA|`&c*d;G+zpZHo8Qma>`!p)M-!ZDa-<738rI6p4YWaYt025u$@JiC7 -zo5Ta>eM>(g>f3+!w7;IMI-|Y4tUxuS9vg?teIl0H!&<#$U2_CZhwdmWyN~MS4|7AG -zHt4+Al?SV!X);=+mOh^wlb3bFo~q~~_JaSdnS!)}U{;Bc&Jwq51p9K?>oFXfl|h0E -z#WHBH3)3BNbz@QEddS>6m4I1G1jZJnVXS;j?RE -z>)mZMQ$Y~jc4zYG+tKR{-C|I%RI_(0l5(RpVv-N-Niapp1SZXPgOkrxrYxSgET#3< -zNQ~TW#xuyF<9mdevtKRih&%FxL`o6|KE6eFov=E#h^ExJh-bT%VFYaNJaqUi*bKKT}Kdz;q{@ -zbpO>6pX*NBaSH>WR}eCSz8(lnl#)UTQ$QjbcC*CQ!tNYB(Qav+*$x>lGbn9V>Qvn0jdV^9-Nr7L}zGJULGulannwX^i4{r<5q?I8M8VoU~aT3VZv+PXt+0nxs- -zR4M%O89-qCr&hZ!0RrAE(6J=Hw)MgHKyTXUHl7IDyh+WMeFhfKJ}>?pnz5efW^0_W -zLWU%|9(*7=foi{`>+{!I?iPEaBP`A1`0<@$Vf8Pbd(P+}^o9MN}rwUrzt+d_=@`^e+Ri1p!hkQdNxB!sZKiq1O1}^})RF=icN5_J=4B9K22OOiseg -z*iLwim#FWJz`myGD!`Byi4N8PPkkxyMN;{mpY5B5ld -zyF=oXG|ObV>nnZ438T3mCg|n;I+sXJ4Ki6_L4QV8#vT{_ -zcHu?t98G~VPu^So#>PQj%R`<#tKS)RwsVbkKz+oZ@@)oNauv_VoOy%A5bVTo91tKo -z6rvnSzu;^>vQn$;r<1y1GB%f9?$Hrb9|}))s30H&-1@V0WVS{dkdd5@)sLwekB~WK -zk_H@|afqEtiWOgQwXV1xVGJ)ZLk4((5{h}S&E>@nR1L$6W3*%C$i--ZrB0MHEicw& -zK-o8G7Nl&A-7lb9*Mx)~ms_-Ark$#!33x7zcnpKp@mg`dN$=q3at949h1#Lt)X7kR -z$KjN)KzLI~XDp}P&7}5-*}X7kDh>~()R2&h6n~QxES}c56fS{Kmc_sXvmOQFXu}c1 -z6Hg-Tv_XX`t{Bo7?PPejOZB~8Cq8Vp!Qio?2bI*Bv;9a4ntPdPILWXzcwkCGLLTm% -zOA+SDRfEsJ?3JaxsI|wd+H7G!N^&AUj5Ch#%*QqK;(%QKOz_Zuv~1a1GnFRZudWr1 -zFMKbV6=slEXunt~=zS!JSKd`eD|0M+B^_<7UAxLc5WeoiyrkWCeo6?1HLYjrC|-wv -zutAjMExuTUq!x^vx -zpCwXmw%*{V@w}Yc>GR6luVVflpe$slv;ufzE;7n`Bj~flR)!^s-RiE7uyL@5-L0$i -z(Y$jT?Fkd0mQo>~srhYGt!zd&lB-Fi^poa}Khv^|Px{Kxri44C=T3VhDZ3T^WS%Xa -zNb3#B#1s{RQ&N7ANLTMZ<*ww|2j@X+T0bmjT8RE+^MS;oh>t5HPYhu@5JFjBo#!`g -zS@ZB-h;EkIc~nK&i4+BmZ#~s?kMJ~VJ+)j_-vJdbuwest0dCJey+>X_tm+g|ue+a_ -z7Uz5`+SrCdYz|Itxyj{#sa0@_R(?07ircl~`L%16ik%?kTv3}$Z6SnMV*d$i35X6w -z)^cPPjU;XCwG-_osYt}~UGI(i)~J+~RR37(El{sizjzg0$vZ>zYbaqcmwxZ)_H3fN3=yIwUmWE%iaY+pA{@c7 -zoQ#Q}$MV%%_X>v>gDd|M5GzHCaL)idK&pO61^M{pbL0Kp=brlVxm~b%2ETl6m2Pgf -zU*{ZB+B#X~hRA-=dS#`+lI6WUju+b=l;0N_mR-Oq=q|#%vwvAx*QOHCY^aV0>jnVg -zkOF)!Z>M$Jqph?zF&j#pJEFviwFGKpi -zK&0cb|DjdpR(kRt_}L;5X`)ZWkq -z#IlDW+Xj_PHg}EDA6@u~$eBOcjvw&QjEyG~$8@H0C(*|uOWX2hhb{CU(6+#TY^$P# -z4#-50=?c@wK2*j<$`hhBtSnjK2v{>~MrYu1YgZGY$g%MwJXu9eG(d~`%v|t)ORd#P -z;9?<}np@Xq5XtU7Bvm?obr<|A&LJ|+{g*Iy2;pshe?=WH!{M9d1O!rvSn7{WBkq%< -zIK0r=A^J{hOgs6)p{8>|d8rMV98X+bt4PEW4~@=mmlUwzec!Ny+yzmoHVRDmh``$W -z{2tIgC+M&Wo4 -zadl1e;+6L@rxK}dja1oagu>)64{3f8$+YV3TYNy_}SnG{;7mvTi -zUC583v@E{1KyN7#xM$cIMV2yuSFwLyAZPLh%7JbY%X~(7`RDM29aetqhDz>++Q~wZ -zl+UX+ey|oY44ze)$mtr%KFE7NUlt|;HXbpk^lb<8^>_0{-0lSSN;_<#|0xMOB-!wN -z%CFp%(XQ5VjI<=OnFa(*=-OPfFQ8k~q~0^LSyT)Sn{7#IKiT6>mzMxVnkGm3%J4YP~M-?3*VRTEyN!&%>rS -zR}h0Eq)ofp1S+UT8oB39LEM?RQJBbVBr@}Nx@ORVvJbN=57<_lSb|V^L8>#ON@WJ?MeJ`d -z97VdL$$&TG(=3NOIG2| -zBQm=0jb3M0okdrkr6*ypXUojtCx?ppZezZ4t%6==*RPm-2srw@a0iA^;hq3 -zJomSb);g&^=*3Tr^b+;<;|>G!SK|OPr-XSEAwObnx7v(;Iq9AarqXq+0RtQ}*ZY?A -zn0dSE{sYO!nepJ_ntR}gbEu83mw=YW@VK4!w!>A&_OVB5FBGRQq8mf;_kF$C@Sq%y -zuiVpvWuH0E4~srWyVw|Us6`3*QmYtGL5KA|(me-xvbM63gH+1~!Ad$R2+za_Q{UQ@ -z)pp_fX-0zxB>aT$7KWXAn^-(&lV~;VDTMCrhfNLR9@=U=@)U-(&RZt6PYe&{pn-S* -zMPQYL_gX#jIN4p@z=C!iYu*En%L2acbg=Pgaow8TUA12A&GoSLxl|yO(X9RjO7nvO7p*?vHByVU15IY-Ia)Gr~=kR -zgYZ?&)CP7v3r7r*^xApUh-YH6&amU41kjCdgYV#sr~eQKCCQi_4$z7FBohm0u5KWs -zS;;@K|BNhtXZ!?wK5l(Xe=aE(y1*T86hUhR&3x^)5cKCeCH&E~L=P1EOLPq%<2pM96QKij+KytOl@rHj;=)LweMbQpQT$OIxt@k6 -zR1o~IWaR#RDq#SA>B%f^3Vd*ofSX`j4ZeDAnOsH7@P1F;B{Una?$b4=IC52;A}*^) -zIr!i;*a1osCiJ#Q%{+!CK$r=(5HgP(DC#qp0gCWoj7$w-Pog|*EE4x4-+3tNHv?sZ -zZ#>K+#3C(Un1>cI&CEKg_R{oqT{9NqMFIyAIKvNB;8M1l*GYRs{*6V(C1j+r4-eNR -z%)(sA5AMrm(6N)%nJYN|UzD%+##9q(KdQEksi=PUBvGiUMJo)tl%C12KtSD*Eb0Z6>@MypAa>p;+*F6 -zWAGKN4a&r>wpv_+AVY``rZ1#lK9Cp`QIioZgnYde7FI*vca<$dsZ`WK6Ty?jyqNm4 -zq-{bsaAZe(xHYyC! -zY)<<>dwj0fQMq0uo?@mMZo2ZDre2+3zQ1kWHa<1Kh7(@~^&z!dzwg5AlPuf(grxMuq -zdG=56f6VxR=hJ|HUzX|9&;nPfJoRB&s|7(C7(mf{yE)=?ZbCV%R7a)9${CwJw}ZZ^-gaQ>HJwB#J0@4NiR28;3pD#YhKFw(vgn5)ca#{%WQawodfiaFSh+4YgsJe6H5yRG<^`xuiGtL9NR7l_)oL#ts?mMfagN2cs6CT(Vj(2+j6je6sl%Q=Yn+*7k; -z5%JLVYd^6$Kwk|f%+&oXX)RA>4}#%@A<-wsZWyjt@w10@N-sd)}*2Np1+O_EZh}I`dQ8!Va*$qS( -zMAihZsZ%$2k4vXduxQcCU2EcE%|=zQ#%$!AUa6HAt(2iyHD$L^YArQj;ZsN?nq8H9 -zQXmdZX`qfiIt8>`m0-CB4D3=B!*#rIdmGVzt!;j*48Ry^3nGlrR6fRMstfB|**5)| -z9HBDLPXJZCZTj~HA9ds+mKyfB5QoJmz~><5CARtwyK%f3lT->5_=Cf -z(zrAVGUx!pV96r2>R{p9b}e5=+B(5~=n?SN -z2a|%0T(NMim$#6ZNYzXC2N}DNEvR;dR=Sg3y;&J%bWS~80FUb-zY$@bi6g{A{nTk= -zEjC+~ZUF6<=^deWvDTpAg9}vrDq&e7y5?{M`laQ=ipl+Vi04;o2G#`t;Vq{_) -zRAetVF6fdTu9e(+*>!7xN-B|uW}nn0>mlRvGsrD20+_7#w59au7B9F`;dqIYT}W!KBNVo@#>);tzrLwRx6D9Diy+V#Of@yIQbY8~v9 -za&#jN_y9T}&aM+g_mB7tN{S;-|Ku{qWnDaOQ}2tzy!WM5j3+axVu?_2Q}cCGpT*F? -zR0N}f1Eo9SnP;1k@w<3M{v;Gg6oD?z|4B)o1?}c>qjam$g -z!xU$iaTV$ZOaKs+#Ork3T{P|)ADc_)dvTeQ{t_%{wj4rzvF1>W)=7*3zk)!K9h(s! -zy{EClq{-tEZ67{1<}c%$A>t+)17)Z}9!5tZ3yu!1aHX8P2i4NFN=TAQWKI+<_W8NY -z;eaK2r0NF+Cnxr>hLnI~8X!6>XdqZ;n!Xw(4dOv?`ydIh9}p|e7I=d7hVKe>zn5T~ -z^E1`U$0Rc8aFe4BE8@7t+J*R|>K1^;4ZjYd6;EL`DUpZ|s132rPKF8fxG3e^EgGiS -zhGbRARfo_k1#{d(tUr_48sYGM{`Su3V=ms&ux+4fw{Detnpd9G9(OviV59vxLwe>5 -zEOU{r37jStcforGPD^0^5~wZEYq+vk3PivRnsKPKMz|t!eD@pnIM5P;zVoIk=c^RT -zz85S8Z%v@KS)yfYJ0Z+Yxe#m?81Rwf=W=@r`c#R^cV%O$q({H9cT6g(|;c<2yKQ=~pK?>f1@KVr|r#O|b7XV^LLZC!No;e?2#bb-EJN9K5p -zZk97waSMF8Q_}f_?SfWj+q2mPOwgI1C0*wKj) -z{!~`eVBkm0WX?at?^OZ(Ln0_`jP(evep&Zw#%DSe9_b5C>d{JTE1>LV0pzbm9|EjY -zY{!^p!vp;lHnlEi=8F^%%hVdgOWhL*g>4iy`+`3)Tlhd*9Kh;QZsb8R+s`#-_St8( -zo8?mK$;7c+oC>KjWcuW_)lUX0#Mgj6)Qed|=%-G2>qReK%z@p9Q(bCkTP -zVuFfpS%dR{XF0+fY@|@hX#9zggWj3pGu>{Vcda?B+bdsdYg&9xXXcd!gy>|8T1n?myy%bNx73Y`KV=jGPCPxw -z#)%)-8x-BqG%yn9%roudS}^*hiTq{c`)&yY(YIljOhzwa`Y}y;I5w(owlGl)FEXk{ -zMXVkR;!R?mvzevE377lZX!(sN?SSPx89n&JPTn6hz$?@WS+>X#eCnRNgLZVXlU -z7UPTMlzaU#}4MxyB7qE^cHjhSSOZ8(so&M?UR+;*@P=}iGU|7Ef`SbaaufV>c -zYzw9%q5O~z{{kZepP-NLy(VgD+@;P4knM~o^Tw0>OW}H{ReB0IT!cDluB!?5m;b$M -zAJ5OldMv$*`utmNWg*?^LX*rHk#;c1`t$psSzVrlA<2#Rq#RHCi&MG36PYZ7>Anzfh5P{uh8EdQ7O8I*IPD$7 -z+1IdKzhVxl;GP+Oj-8fKSF=K~NB^=<6;$ -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 -zQQ6Kt8z`z{i8iQuI!vD*NOASiompTKP -z=njW`=VTt&^LgD$$r7aVOb}zv?(c&%%EmzMqV|$68ZNR#40Ht39yIsT=?$cMz@g_U -z7LfrkqiJqlSX_>BjJkYNGg>fG*>-=i-Aa)_8-OuhdUI*qu6M@mVhDq^Stq*o|A7CZh&!ujS8fP -z-J=#Jq$+jjA;la7!C=T+FwJe*iGYhD -zv%`$(1O|P55MF_)l9qaGvV$(Ce(iRegBO!Dx+u~1&ucXCl*?pkBM|Rt83z%~2Mm+r -zjeM=RyHo$IkTc*w#PpPrD~=Xt0os6V0EWb3PnUnG&otNNoI<8JCNLu|7Hkf8pS*%W -zd%)|TZlQnG&7*7-83ar0$y^YmvH)Z@+Qd-wdot>q3pNXs`RbCCkmha0diUR{5RDiq -zfUu=ij0sIZ1B(IK&b9p+*M-3p*RnpA&M0CAJC-hJ{`=z?LlbEdi;^!MsZGm+LSsE+h0yCuuBpM_pwSpbMOebN(@_ebUK#V#o1l -zT2W^&n1%9-TFVBF!B=wqy9?X|vvW$=dznN($;aOa)~4Ok{o#KyWR<=pak;{Ov8tWz -z_SGrq&!?{rYeugvI0!q7A=xK;Mvtmw>*NHq+$qDg<~urdE)>jDUkZG1rU=GN;W=8uPi3hEOSypY6xU+%&2&TI`4kP8KsD -z=$Mv6WJkpBOkIVGQelY|rb3P4ctax~(;gGMP-r{*!h~zc6GT8jdJUUGDA5|IzQ$Wi -zBUB#8*_BO51oAooLFBEqV>={@ZpA9A!c^8N0a{*?9@mEAK3D59tW)ONah9>#4T*V( -zq@g~VaGXI7>5+@{L9_rYZ0CZw8hqTXqKZwMb53!7xVig8+kP)GcpE)_PEt)7(AXEZ -zAc+}=HTRaeUy&%@;1(85BM9x7kQTS6$#&Z;>x(npkGN;Iop7WZH;<5 -zvlcr}TZO}{H}t#7t%Io;$3xErhrIfCld$nnt=V}sq7PjAh6HIr@{fPT3BuTBoWeED -zSBZ}gs7^}>FCL^arx%|HQt}ba&*u#a0eaWuxS=5Z*|D1d)22I699-*QfWxYqo)dkk -za!5*xx~bG06R82j7F{H-C-%LQ*8TD$KrwVKz%K>%_I(OD!+%TTYmk9$-^^-I;`pxI -zqq%%yo5kt9j4FBF$qeMjdrd4uW0E{>cuJ!^H|ixgd3lC1R-{NaPC*h+F!HET4|C3oIwc3MM50{|YaKdZbSC)bz?4oV+GOn{Sc!;cii -z_W#D6TxQ{pVO-G_O8)II1%yCb{&_vnOb1VO^Qwwg7x)h>_+f(1*_wA-+yy#hkV4rI)e`*>GUNErPLZ)PW;5rj9Ia}Z^(q>7H-BT -zR5ISI*xW`oBZ7C#q+H;_tA+f4AKiKyPmO**t@)#8ARKtLXX!1ZnzBX-MbsuF!2T}V -z8U>H?1g*44L`{SU{qpBBmK$$N8hjbP-gX!V7Z6I+5p3c2cHU>I -z9(UzjJy5EqAv!E4*j@G2K0HmbP-_cxXh|l3`{R3R{C2E%b8fQ3$Tx~LZQMkrAF;fm=)VjCFDwxd?A=@=Fftg6U4|RS@GoaU%e}0@YyBot -zhS^zG6wSKgnSzXeUjXqL%Iirc<7!mp_QdeEGz`|QVYY1;GfrAI5&JT!7M|%Vx0eRV -zi~HQf29@<3MCpkatDm3es#WY>kourLh5{A<*_|hv4|QH3d5LCnuA*)ilH_`6%Yoq! -zGdK1bd4}d1_@R~mZQC#4u5Vo21;uSe<5R*-b8d1MdTzxNbhP0N`h`($7k-+!Ha~oO -zy4TUV4U)c~6cSUwHUqk*ql#w`J?NA0GVG%hx9-cNElnVv^kSLPiKpD&33$XiF#8x= -zD&8aus-{OegmXHODTBW^aDr%XPexU4-W&K~vnwQFwNZvzW@(Zm<2T7de@Z!b=s8-T -z|Iv7$HPfIwQ^D0bIG3@z3L>MqTQ*5cfx&G#khefLPlTMj!R?Qy!SiKMO -zT02Y^&BQ4W`196`F_prpA`P-b%wkm$1o}Oj$}e{EUX>}cS|NRx75hmeCp#B{VcwBtVOzLWsC(>nhb=r -zHozel0wXklCNj@lvC0na*A}pTe -zd;l9Y1XzH+Oyo)OLgQ<~*A=KArhW;`vQ7~oYOgFT6*-X(#&7 -zK$oDpvgfcWa1yL^7{$=Q-Q=I*>^ym;787f{fU8rQ_BrW-E&STGB1ea3uWFU#V*x_X -zbdvG9s`cq8mo(M_z0OQ=vW=*(d2nwxp|!RPbLEas*4C^EC<{R;lnR4b-87D$f|x6{ -zI@swMvu?^nD&Z>Y(PP`vE4YJKzsEi@S9{HD39S2xme2o1m@rAo8GW6Qs=r)t(mbxT56p41F -zR#gXb2$#0qk_g?#UT&i8HhA4ENy(;@i^k?bQ6ecwqz5z<(;(Fs>NqtfLQ>hs0eE_5 -z(UvwFPu2dQWg??=_zy3hACyvmqhg;OC?X`#*i-1GVb{4Y#l*Kx5ZiRxWZn|eact07 -zd_4c*Zmca4T*{nDLV=<$j#hT)2e_BU8%rcCMqI@>Yv`#G!ru2yF|a=U_t`(idq2|R58j>4$JFT67A%2Uo(V39Y}-dB@R6j8P+%TpWc

|1XF66ti$$iA -zsa#dZnWxoo}@?mpuy>M2fVCYzux7 -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 -zy*!~Eq&}!QnajOSs*`pn9ZDopcbszNf# -z3EkR*?ZPn=O<yCVhvjwgwwic)uM>zUTWpV~GiY -z2n%ON6eW&(Plm_!i;Y`Clsa;@M#+8|jSMkbJNTDQKGw9w;cGzDog$@b{4QbFUJ7aN -zWA^&}Lo6#X{^okev*-DXlG>ifkG%4@FW{!H=wvud$miRCC2+n+#Vytl=m(wSSHBFr -z2B@S}(n@j@!(w3`Bh&9a)q9?NTBf+>N6{~>z#Pv_UA;qJya}%fGd!xmeAwtEI6`6+ -zno~B-8IKmL9xLoztMMFA3D%$Pe#J$0AhX>+#JJA$q67%HIS37dbv0D{rT|vMAj=LP -zTKPu$XI>y}MM=p|9MHDeyp^!1(vOj%u_B4(8db+U?gB_%sm9a9L1V?xM`{lJvX}7e -z-TailwwoT!+JG;S0Kk1=ABz1})<4o4@yBE}PdyIblI_k{s2V`Kd7Iq -z^$3XoELr9VZXr9wOd3_Bo|UoHA4no5Y`2EX6pLY*PT7iZL-%4|fNZ&0(mXOQ%6!cO -zHG|^eC~hp4op`$C(vcBYGBHDYmgxWh1oAwV&Rg0^KUiY+bjlVfEE3k{wvR$p)+E%d -zf*I9`Zr69#hC3dTCR}ZYk;X-f+t8OeIYMdWC_V -zl&K*{=~kx64)sqXXX1`Ze$sdLg7zm=7zjHHas%Op{2LWIb&9*7Gvkk8zfDF=?pq3W -zOR)9l@MQ@#gIMPIj`Yk0%TNlGl9PEEUyM#Y=3l -zmu`hc$^h~t)*SSMfbr4hw}pVI<3lnTlPT1U(^@ljX3Se?b(0q~S%&J}7YT(PJ&Qgr -z(Mh7ZXqv+uvUBUEmhnPmUZf%@Ww}r&l#yRO(`cUiU{0lRcMz~#xji3ywpwJw55~-#^Ea+;JJW7PIJyY -zND}s6nbMKT(5)kOv?E~hz+eT|K?dc4g=7QHNty@>g6ELr>{oTPrY8g%^0V~Mi6<#T -z>T$Lh8hGaPKP)*sg!4-IJI!^=%8ex<30S}6II-RVIMLJm!=niOi-MQ$?&3QC53-xh -zn)P*=`YyGNc{lHIMY2tb6M(;!6%yPud6&tozOZLwZ9W^QCQMv{n7ML}2Pj5|)iXxB -zCAIE>ekU^O5gBII8eW)8yi4t{E#d2?bA#L0+Ny21v_P|GL2Z-wU+GZ|b=xlX+P&k> -zd1W>AQsq-yk-3aXQ7>wZMm7Qs1VJmRX;itE6w^t7AhON$4qIV>Z5Eo@4+|z%mJWZG<^AH5$7nG7xyoH*0VmMz4sFZ^`*0SSuve+!UiHd`j6v_|+-`v|0W$9;#qNnl -zYuqnlTDM~~M~iI*Wfj|qe<63TkT~c>lsq>gm+`7^tH7PMYf#vUviMbaL~K1f -z_*mlSrcPm1BPk9U>?)l9_wPuyi+W6piu9k3L;$-DxhTg~1*jD!P&HY6dI|Yp-zanQ -z2!_ZYwvoR%-m0N&zbo2bO&?ImrS1$2`qjyht?|K*ImZ1<$-TZ({fi3mVK6?nQ=+}h -z@CEtKjualIGOE`Rc>rzU>Um)Ro5km}w{W9&xxX9qzi6%H%Df73V?kb4oE+AlnrlRS -z9l6B>V(Z+R23sjZaFg~yve~CzDxkW`m}Bzi&Al?hMrHl5NP6iTtEjBN&tbB&*X@{^ -z19eLmPw<(zF_ICKwM%B}8Q8^!vKj+aS%qv^XH77Z9n+ -zlU&{QBVWnvw)ji8fA1i^q$NoD2LXS~(x&@2R%6K#Ea8w*>MfTorm~{9$PqGm2EBhm -zm>Gb!& -zYjvQr^6Y{Y$roQ_w&-T}a69KCekV!_#|Q(KP~S0P<+mO@<_|}?V~ak^!S&; -z;jwsR;yx>qC;2B}6Lz`1+iz97PXo6W5_Dn;$r59iw%cki%`Iwk*&n*FH9=Q8<3O}_ -zKzQko`OVz#A<05!Km;BdxB!qdmW>*$?^dO#+tqKQd_s$nmRT&wlpvA|Omz_1o8Wi_1u;}Y0)e5$aNW(7USW#aXuSWrs&^+o9}J>V#*UI6=OaUEoq -z0+5!D1s{olhxno@dpNKGg!tzpbo_~LhVR+59@h0s2WK&KT%3-f$~!48XnfS#lhX_a -zgwH{8j9{=;bQ9Mq0Wn*JxfL{c!Je2^1!Az%;UZ+rij|tDuu0g=$6z?+f)1|X6`A$z -z?70CPdf?o(Fv7Zmjou<;9jW=H^%V+`0HbqAZw@-wXg{aC#53i7QRr+jH5J54KAhvuIG>3;0VU -z5T2jgm*)>=LpGv4h)zjd#}|L4wdZ36zm!$~GCj5~gI|oEKSyxAyux<6YL|6Uv`+hz -zkJkct-6m&)?gg59mV7l%+cR*J+X6R^Z0y&A_ninAwk`TiEo>r~&Qyp0+{h^~?xhHChDcB;oX8&~ -zLM@D2bzv$`9K$h~XwX(B)e+6oHla8L8$n}KBlFp)Acs0JHRT?1vhgLo=UbpuLYb*s -zucdPq9fcc8F?g#4v3@E!@5gizG=Hn|V6XDH$`h=PnnkKJ7>NKNH?au}dN~xOZJ4;5 -z^h|}-mnIh&Irq4Vx}?%SGIc`WHboz`6?)*fGJEI;oDBm8dqhNbT?bz1*;-*xkE3@` -z%nam&lM)*dmd|P@F+U>w>kfK3_wRJDwA+5r$ -za>!g(&oeCI$~P&^abXG*J(2Eze96@cad#q%)M#L(WwIMLTK;6m!UVH5(GbCDWEKgX -zmNx*XPCkY$A4{%*D1CRba_l;0G+cg==lRhvSXDOPFI`|>S{BUf&alZ(1@Ng^(>xUy|ySm+thUQM8Ruj>TU~y-#j~G-7C`8>;#{_vlMzgyt})9M7@2r -zzpt!JY}`$K7a96#hL(-qI>ia -zzDHlq&LFKl*8|Tp_=SbLfjxN4ux?U{Qe-N0aHaKFETP_hq!&~-LQJ2S7Hzvht{|=Z -z4NI@>mES^VpAKB94^&f9!X+mp#i1xB)#diX1;jmr5pSNJgIW|xyr`&W1_sG?t)@&5 -zb9V4XG1U+=jNF)ag@?h2i(i5%B-3$kY%6!XDDSJTdb6K6zAa`L%}Z?guEndkKv?+t -z^KT96dN{5hJj?eNEeHX-lnWSWz!xJxvyp{_b%OaKjL~$Pxrq(=*p%|w&`sS>4-SZY -za`RezhrqZYeDlyYrqQO4#?J5@o$cq~;^sC5JMpDBWcm{$WhQ%8dkGa2(nsjLR7=vL -z?PxL*6TF55ocVh3=Dc=yk6tem@iJHY*H%g(WkHqtSl!8{P|I3XUXC~F3&Zc$Q-30e -zZb|0i*L6{orG-zMM?&S;WyE@EekJ}~OTsiaEgY~IHD1d0gy!>68K=oJ2 -z7)(e$!EOz~SRMC -zHm380Ciit#uSi@3roDMshs&TwN0kPUWe@gUtk69|#4T+#HOI=0_KUBa(Il(oYv$BG -zo~P6;N{K*0a5uP$)HR}3EQWGS91RG9<`WO}yp%B~;x%~+a&!@rgb0Zn3DwP#PA~qF -znA-0Q6*WOpcbz*!RmBZTVq%WkpoYXU3NMDO?Z$+zFlJ=i0#MXHozoDwNb)#E4Lm!X -z#dDldh)JDJ_ioh12v&L`p-fkJF?c>Tkbp#@|#eB^SYjrAdn921K9I>4ov`33t_C%z=?B -z+?0q*i{q148fhrfISh=f5VlDJGI0E -zFnWpi*XB$g$;-QYX1m2U_S^(>H+GA*UwsyoJN^5`ivp}F{PC(c(CWuI=E2PoeS3Pd -zNBbvU+mgGeCq(azw0_c+6)FKe=PsX3xXXr5_xegMP#kEdGTbAYQjgBe)lR+V0jW(+ -zg_jfFn)4YQu~$3VhE(P5iLABc<|Yn+f0)6QRiscT&nl6=2`$$TVq<>bDW}Pe%q|`y -z--qiyT*7Gz`swmJF&lMJoKXYQG69d|SV(Vld~^ncGT$@lyDVE6IzvEF72{L)1l>F(sab-?t=F{4w%NKUjO@X#+wb|5&^p3Rj_G3g%NUf#qe(6=X2t6 -zR9kxMK)*4;o)=8EL)qDD!>ENrlUuU;=RsvdJ_6K0w7qx4z~r>~bKc>LG{iEb{5!9} -z>0;lFKN@01mMHoyPqsv(=VFd4L}l|*s%0q+r!(T|fuqo{$EN}Az~zcDwfw#0?_us# -zYhI8ky{HUhnPyI`Ly|lu=cppx_v?tVm5IOEFW|))`Za8^{AKB%;5@#cS?NC!q%e(Fb -zpLWHmetXPX%?^3_h|5fy}qReB=(H9nYR0Lk&wrl=W1h$ -z%)59!CqgZoa;2Snzx<)eejgqd=!G4bBe!`O8cB34tmuXD)x0Ajtaf@GSXxI&uZHK! -zdmN|Y07(=4F6(gDri%211wgXWo@dfcVDv*v)O2SG%Ri+MyDI{hCGvL{k4m%ofj0WuD -zQTMFk=^%#pGp1*L{MBt((rdE^f`+T6ysh2nMsMPMPaXjWaeN0BQ6-llu}`sK#P4PL -z)htJOd<#%oZhJzDfEezDr_bFz!|BUS{qx`b$49;Z(&2zNh}y$kE!t66PE+B16T!b~ -zNv&_^n9p)6ZH#^3T4WWbICXj>(h{bE8{hSz%Q1g!3S;GhOmWQyJ}D`zAza)&a>W%b -zk>7!GqrUK$E?t_h*$107ZOD8Nib8QNcxCQ$l-og<3T}bGdfYb{RI`naa*NMaJTX~V -zn~%=NtSd9!(diQBU5}bR3E}ryrgFVHj!U49H1EI;D5;Q -z-2A%8UosqO?UxL%+$L5No{LD*Kx_vQyoxN#|9{Bv(MdYikj-Wxp8t~Jw}JmlhI^4s -zVZ&!3*ZzkL-^|s!$#C^wGCb`6lHqyg*`WVJhEsM~;m!P# -z;VD4BWVoTnFBuNZnHc^{hJT?^p9}CBp&!KV&%NFBxwC|0ct$ -zX#PWnUuXZ94Cm|@*9Ai(>rLkKIQDn=CBw}>{+A3NKK&)b8J}AEImkihVCBp;Zkspk2 -z03CDt9ad!NsuBu*$?%zx|B~UNzhwBL#Q&1ve;%PrB{GBt?9S#2iaV%z{LmcBP0E8Z -z9v-*F+p&9;Q7o{+ds#t%}e>ZX$c -zmG{QOd!MnT1DUzST4uc4Ya@Mca|H>ndRD&dL5UNDPngE)Yh}vv0$fQu`02N27GSzI -zS-0MmQqfjp`;_G7v~~UHi|q|7c?z8H{>^D|^Nxt3R&e7YQtK(7G6x!P!)jIUuD-#_2R -zl9q4{pdv`|NU4c>o)DNHx^D3_ -z*r6>DJCdY*VQ|w_KWd&-O{F~yJi+QSsIJDS+5G_T;_iUijsMLD^yn4UF^?pX*E)4RJljm}3WZv2|RU*&qHn4HifqH%>C!&2PF=?DW8F7DV -z@>{9Ot`-6^Tx81wijFp_o)_S10-0aDng{y`FFbrEG2XWS0*mpybYvNr_&h%UK5Y^GcN^1$98usoU%{jSExJked~b9`4dv1;8IQcztA}D=Q?h3O3OWx -zY+@O_r>xuP#Ne6t7maD&-<%2)TJ55S&!anNo%P=YCJ<}qXiW|>pkxL|aV>12oiR1G -zO;lfD5Qgp?TIDG)2+rXQhF7hHEoc5=;!(+wG<*{c|1*dVRqC4T5nPmk8WP0v;{wRA -za&Y9p#la&#;x9BV+@$Ue{c>d&=sZ19mm-wTG@I3_MauJi4>cP*>m7Qw^3;jszM&Sr -zXUER$>vyq&4#@su{YrmrgS!{2k{}s#`Sm8?6tE>5Gfkou@ks1>E4~m;n+{^YB -zqh`>4YvF4nMq3|9V5B?bXN&ukf);xXfn+CTQ{7bY;_Lk+XmkJNo>HSrh6Zm9{+|Qq -zvB%Y*0UnkR_bW$=vgq5>s7K6L;B7zT=&nn-#MFYJrUV*btx9M~XdZ -zrIW@q;aReDCVU;AQDYeC+BT5{*#5%CLoZ>OP(rOs+zIDI-D-F2c;^S8Ni2jw7Q)ub -zV&*EVX~?-KZeHs70eikcEXFevw2L!0>7*L+EmkP5V=gp-RXtkFiD+sG@fsrJR4zwl -zHG52CZpYa3lEwjjMP^kXN?a-k-T3Cr*D>@ZM_g7^R+#FGJ~!p%r$MG8txW&J6(3wX -zYngoS2vcAkep~}!jB9rguXr)zy;k%Hr-(t$Y5VavG6jyp&Fw0x*>AfT8@aY5Plopb -zFtN!?F8%PK8N3}}v%7MPw}T14j$qH^A0^@LF~|mT?W>!J;9Ed_6mh1L?Y(t5p-qe$ -z0qYLzrd=%bzV1{lq^i@e4RrRY49Rq{+{zMs*a~xN^3MJ=3`bu8(c@%Qdvga_JB;YC -zi|Gv1{THIvNs-Wn6kM5fX%IkDRDr(?c!T$A=SA)Cf9>NlAmM91)i*70^MT*;9Qwq+ -z57Um?ySO1v7C2FjazLwMjwo19gN&jUG!$rcT!JnG!^}MWXZUlCVu-?Cg4gag&k3N3 -zS~87`8nhjdM@HG~)3k4uG7pMj_JkoPKGGZ2!|Q;rbWK7ol?Dt -z;Q)C;AHGL>zFr67ge%YjPk4$bQgjOusbBFceWPz;rw -zBSS8Wwk16XTAxVo!0Q5YBr}7^bfVh@EJGhYA>;RRb2P2G&XU*r*2>*0f61VIY=X*( -zXuTn6u)^1DQ};;X?(#1#k@4?%?h3kJ)UaDpq)uD0D8r4eE^s*jV3#0UGKd@2fCOcT -z+60Evlh%y%qf04eA4$gWmmoQvM4(8+N4>GZza#Y-%p?|~>9N$VL>~V()y`dttiY0l -zPRtmn^Q}kaQ2|N950aqgeuqfi%yct}jY20j88lp>YF$9;QhYMaBjB&cgh~%)C%~H} -zYlC=wA~9zuY}5gOvVoPa?u*l7Fp}~@8d -zV-{B^!(~(3z1b6-nx(-Z_arUxILIAiqCl(_wW-LE0urSlZL*plGz^k-`?YEN==F5h -z^(yw!U!qetgMy*_zB$T_@2!w0Q5vqTpEhb>qSrR;gqZfru*fllUd+es9Hsj`-U!?C -zuQ8s>ANLSt@+LYcU__~EM7l>_3qWQ%Ub6+4jH{-pxiEqNvvB+DB&FS2^#2I>cM)&6{f>(7?zf7&svX(vF+r@R3nKYAPb!kUU)TJoxNAH -zJX#&tpcU^+k7m!{-ztw&pw)`>yJH5lecllGCB|k()|)M}_O<(l9;gF#Ji7HAsp;F2 -zfX#ECY|o$%5BzckyWhXRB^eY$n@WMHuJfa@5VZ+{S6ta=jj~5@v1f-&)>l4Y^+CU5 -z2-0u(K%IK)#RZVNVRw^{C)>2(}rnN#F!7OVgqG+NChLsRCGG4({^Bo0*2k;v%wN(X@Ok}rNqusQ4 -z{%lwYR7<%@*!{d4Y>b64n}pmFV}e|J?5v{axnNTZ#*KPO<>U;!FjMhnje*rfqBo1e -zFqN|y7|TnB*Bt;J31sicz#{3bP=@(N#G17plt~N4V}_57?z!6IqNTxvGCq{|3lwCX -z^Ro}7u$F>L^j6h89OH`Mc17G`?zX&kcP1lX(_xy+AmLrlp6teRtS9O{EJ{n}QhpG( -zwLE_f1p#5OAVs}8*>TW6zdn7?zH5eUzgTnA(^VqC)~jiup$i^m5}9WZ01>D|W9TmD -z@o*z&?XI(rtpMOuKGA=EQ(wDqO~j;z{1NSlB@h3=;JF2>cVlOutBCyO;yL;U=!JsN -zrQ^{v!Nw-0{2Jwr2Rb*l=OM@MM9hdY&>&P>5ZM}tG*@ce76t=Bi;K9}L^blMC8&~c -zUMCC1qplmK1Jf@JAPocQI2DSK%VM}oYi{Xddf6%XPasw}hQ=PO^%Qb=W_KSo-gVUE -zX0)pa@^llmzGtLa-IYL-N@m(#hFj% -z_}KC@?QnwRx!?%0KpV(%s7e%{C9F@@x>zU4yN2dpP7~~k|Ga7zhl;mxGW`hpP=)$j -zhrwTLd%j$WythD0rrXPjK0CZzgRvo)eMF#gEUoKQN~{7N=)?L!oWNERn4$-{tiuC9 -zyzlQ*m@6wK7k_Ac8l(Y33(D>JPoPQyFPVyd*?mUd2aehY2W9OyV~3~R$~(=y>~-;t -zq>OLn`~LM81&6qI|M>24 -zPWe&5JC*NJYTepPrnmOzKdu%6QF@E7_mmaqA0LG<8N-KfH!>MUY%TQ`secfIUyOc5 -zb|*3X=D|=hv_oC2vG%b1h7^Znzu_yoW;n~j{(WX=+vQgD{X*ETJ!ectKDodPu;CQJ -zJXK!iF@s$totOd4_mbV9y`bRo^DMuq4+fW_ND{`2x{&_u7M-L`$zVKy)%5wiUNxvH -zN<`iJuRclueMkcF3^pIi8~YCvE`ck66o$2xV8tMnx{aO16=?f<*qr@K{LPv+7oe)y -z#Glej0r`>t#Zcz+*`0JbxYXYhm;W -z#PyivKU9uy=W^}>I+P%22vhE#{(LWR0#-F->1#!eCP26hgGZa6Ss*!}#b*)#=y=k2 -z)NkbR>ap!q6kILQ`#zq(=RZ6M)DypO%#cZ3w*>*rBjEV>V}eFUuSE`&D8~+HzSb$M -z**RXZUkxxa+m|@6t#gptzJ5gp{=i@Bu1FPXiYx0tE -zotk(vFe_4bd&=cEB)!nNGGnY*yreT>*jST8U70`k^e5;8)ZN+?g(^l&kW$D!mE*IK -zg;ZyyvS@-cOdd3yZ%D!nps?AK1hE*s6U}6#$+8D3h0p3f@Q}3S95yf@tkBraZi57g -zw@a1E117NlZQ>1f@qjiK;eQ%q=#S{QJ7R4zSBqI6 -zWQ14J0V)(R7^ONp2UAg_$?Gw7<#Z^F2LJq#f6k;T2-7#xQ#d`cMn!YsQk10JY7G&CZ& -zQmASe<@?RCIY0~Y@1_8ssnf6z;oHHz{Yb7flw}DZiD|RyU;%lw;xR^ugSBDLDV)S? -z126=jmON|nGh1!6;`{>{2r!AaqH%`M5OJXF;KObzyf-Z2W>`Mz^@zu}A?P2OjB6q@>YlVE -z!TVyfi{y^eL~+@TP;YLG&1Le#^c8-MzVK5sFOInP{xz3W*7)DW>fp(>`A!~(S}_T7cENR}jt -zo=vz&f(6NH;C}KhlilOY{F+k*vh|w3nxB?nGf3Y71F+eYdQ}=|;O`f5_;{nBhgy8r -z=Y@9E3E3;F{(?BNJ)LwyLTepz%e*$X*s+7_N_n^`lE;aG8+`b30VCuAW_ItGXOgk1 -zDD>h-p~#W%9STJo%3zl$7n+ZCny&!f2ninIxJFwQat~eQ&t%1KxeDPqcqX-GS624e -z`H{{Hm+1E9$jEHym92x1CTPY1EhCFlfo5 -zsg^kP`C6#KyCmOS&)Ak5gPb94%#VuFW`GsD+#0CROTO7{gnAl~G5TPpeV^*&BB_`b -z5gQo|=jTreT4G;zYZ35KoFPkf^spMyS~?VymIZFkSAI31q@_i63(#!0)2v+(Q{ehQ -z8L>LIf>Cx`bF-X8PEgag9T8-0hZexEVL1;f?=qvw$ -zTy+F)-~EI4yopfZySc2{dcTSL6raS}j6R-~EG>ih=(PGl!`uAWZl-;9P!o7q(rn$VVewtda -z`SwGJRI4i^?|D!Vx_)|+ZFOuh8SJpWrXp6C97Pp__}ati -z2!Vd=T(W>f04fqw7MvF#dmauMq%t}yCuTvKo7@7Fl`R}Wvj%-{qoHWy|C?;#|Nmd| -znIFT{%e(*I8C=RF*l+0n(v8c%5DF*W8@b1jy~~2;2jC~<)?+S^>F$@lHj;df3OvJE -zOuvlb{PpuUVBc>HI8;J=$aDR`V4^m$D|AwwFY<73%YB)Z9lQN93o00q!yHwS7*OJ$ -zN}V=&5KG&+DZAPag~SP4-OcLYOvo%(bWOS79M-upjk61mP7eGG621>3Z94}vp&c9%Allp!P75$bbx*2m1>%*be43mX00x_8jt -z$GGep6a)shY1>BtFC5fyI4^II3LQ=v!K10M%13yFUpeUCCV(l2uVTiYeDgqJr(@3b -zEspj(-5=J8c~A)_HEKoIpx`RtR#Q$`m4Md!tQpG90r&Dyy5TbiNAkNDOUHocrSnP@ -zw4iEkYM2>by(Um0HkdAHXrO@WupQY?l`5j@bt3XuZ86*`;-*PCWhWwQ1&jBRidieJ -zgsLZxky?$R%hKPFBOeJg*U)9%P;-$$q{2PP@R*Nq&K$F{vuK7_JEWUXyoAq3N~&Ps -z4+4k7Sb-}84_Z$YEhcx_mb{=5bA+pBS8NA85Cqbc>=VAZxK6P&sJ?4Y29>?V_YYW? -z#ICPrCjWo`lX^ZH+EAXix+U4z1#9qEbqSv+F*RHycf@t8r>)zd+3td|&tFyw*MVHI -zJuE`{-q!7tm0tAP;=0(BdQi4CLYB!uC)cWIMc0~>NCelR7MKM5CM -zI48%MoBW4uG{^UKJCK7m=H~Kr`Qc{NH_ZI=5A`q`Nh1-%?vmKrE~r!89J_Ob0gQN2 -zg8uR6G})NV&_RyDh|!QctyoQyy|F`^rU}3!l!U5^)}Ay2Q-6-6Ql2fcG~+x6Da=K2 -z=%MJp^pNpH5zl>p8w*UV(?>GBKky~oCoGbj-l2oFVkznqISHJ(ycQ@*?n$B-<)Jpz -z!PWmqr3?Z@qt~goMvQ-KbGkXXa=^B1TcKR9Te6LS6->uHn!WuljjMH(zUFN99#<9g -z)iXacw>vC9yMI?I#R)Twi`kp-r>CFmCKtM?KYH2ncCiZ3C4rnhkP$+$(sE(3DDE%^k&?0X){GEHV%G`(TPiVkFj7 -z7pTy;9 -zuUwfLeuY@53(eXB(c?lMs=qu3KL?%W>8$>_KpAU5YCD@pq?!cv{A{nu%?4#BMUM0c -zsJS-T0;OpNLdq~DL&vT8kyVBcl$qJlyiSn6b}Z{9xLu237~@9O2zT~fg#N0jvzKL8 -zx!41O1!93=s!K8&aIQg8;}TrcX;U^}5lo<;%(p($ZJy5p&C}n&ZUAaV+nEa_sR%1- -zoI(p}@A(1I5Vhw2`I9IKxeO4i?s?69iqFz0n0n?~FYv(5;%Bnq>ozIUd&zt9#%BJs -zA+P>le_$^c_87%6~AVc01az|AqZkHk3J(d -zIrj67pFAv#p*cs$8xz>-W6XFdhS^R;>DG%cp+VcwE8{I`uD47?1|KVH8b&r)#TNsz_2?C|hLQ9kJU&ym$+q6+F=@IkKg|3765a4iH+b;~t-rTupE=Aie -zVwd#LZ@29TD9842v4-ttw857bY-EKmCjcG*JlF!|DM>=&rEAdYiAA?eytaW@aCfcH -zi)qcABb4^1KzP~ZAx(O6B78zu28au8kaL?kiDh0~jHJXZ653T^t)m#rdJNWqM6M?$A&HZU -zN*b@KC=4ZaF|b9DbF2CUDX7mnp*R$h5lE!xZ_O*e!h|XtM-u}V4tloY!z}G`UsSF`aele!)5B+2_tl*^GuAxBG5yYLBQ(;dGf8AA)LSonFSp!C5 -z1~#v!>>oHz=D3 -zG*449-9$#(E^wOz8M*_b4mXztuB&SWeS`&cQiWSY;@^<)uA%l>rra;=hTM4JHt -z?NNuJD%_}rJ{>d#jl^X;X3S?+7$GoSZ|-~5(MZ1p -zShM^<7jl8~Zt;0T2?q0S9-~3ZNqdcCacTdwv*x9Wjqj=!QZOgs;Hnm6=ref2YkwhT -zspB}uX-=kSI{<Z8`j$(^Cl@99G5@h6Y66AmTPwu08}Ti5P4StH>gg$Cnnnh&34b -zDPxpfBEI(6&!U83e?kHovIuc@npU@R8*evGjk3=Ht%vOTaBTNu?l|29y|6S_7LLqU -z?6qP_d}q6v@i!F&=Gzr1ucz2=uS(%j6je;>pebRico#9ugakOh2LO7{U~=#5(2~d- -zA75GR+;O!|b}uQ`vFmO`wq}o0Hg9E_y*g#cN8W2OC4gAF$U -zAdJ5cqi(vRiMMDPCClirC54C!j6527WmgDl1J?+gTtMKCrnKzY>bR|6ru!z*EBfQ( -znfWC+mpP2cTwL4LTDnij;BG%OE`Iv}&-po+;xfv;E9t%+WFNLisD07x6fwQ@{vtXE -z8}Pfb4a5p{Y3${nyfv6n;u8SNGd9JwcP$fogpEo;=6^4xS!^qJhScH2xgleOGp-{; -zJEyvkt%Sk)EthW^F$JtE`UZ!3a(j(yZ1*YkF5n?EJIhT -zM(;E)vg5+p;9qmGZ&?5n10Hkf3Oi{XCOY>V)h-~rlQe3A1}qHaS)th`A-68Qt4cC! -z8M}Iv5F9c-1O{xlhtEAr&Wc2$xktChPBjzMoo_QO|w -zoSqZ$026BF^7C1}czs6e3|+qAd55f&&7P_l874ys5g7-E0t1h^ -zE9rd}sAua3bH(P9)uqc -zvlYw=@XA0}9+`1W*8@=UwN+9%BY-N%<^j%KY>z|jTAlqT`pv7$(VRxuh$tidovd;+ -z0S{9c6#H>ZW%UI$oINhTpTP!in$MRBA{5ptZmCL=A-RC9LfS1+Vp-v@^SmeBYha@| -z__9W{o_(|9v8I7JP^nxHS~@!MNDzLAkb)v>dpzTdhJv_}pg2u#jIb1BaJ-L@eYH>{ -z2Z_9;O;sPm*m}T^6zYEFD^FD5lax*c+D(YrYJF|$LAqz(l~@~NAvl=b$mzWNn@XMT -z>)=v&o@0>PQf_`hh^RvKRQA -zcO&R*A{6D!U~BvlwZFf$;5e~e00V7>3lD_(m2Lf1r_Hx4r%9Xy@h%z0430btz$Doh -zTX5tO6%+II4y}3(pj?VZf|OOK$2TN?oHqgobOvA{q?RNsYwt=V-eCw?^5BW;nkr)W -zlpM@}xtpQZo7=`L#CyVzUw<1=+F6ITzx8ZC5bQPtcHFK)UMr6j8&aOUr74OVw&KAL -zs>ACV0qBG6A`gWm{xE4l0=#s;{%d(a4v68_c91I>YZ#Q<8@Zvkv^KXx{ug8Z;H?lp -zaXG*E*~Aeob0cRO!*ediYwi$@J{(hkBn{Y2dl=f|BK|FpL~UqXAbKcOpl>@yE>Rb5 -zbGHf1MeT4_nX#3Eye$gh06XJC&(LF#SoU_#A<>2R08L@d1C&#?;d1R_8Z{F1c -zkjC5w0*&0;h9cP6>wE~LOgE4`EX<6PWas@du -z7M6mFVNpnKLfVjCblVPQqY -zI7bt$SkMoi?y$*|5;z=S!ki#0_fr@>=YVCL51mbcWVc3&dq4^37LG9oad1e@ -z7&C^(Vt@0%AF}6sdXi>oI<{lH%*dB)}l@1PC -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 -z&mn(XOx0Cd;S{liT^D&O)?_h6j -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 -zd0P}nHFXDsSNtqu)brN0F -zm@~`#?g)>>Ypi0qzb#=o$McxvKNou#u3%m|Oif=*Nf!7nj%K&~F}8VQF&KjXQBy|4 -zv^s_AQ?dr8x#lp5C0s)86&$Oq(0@pXQ8gE4W`aQ#f$wV4lh|PrxxhroI>K5!4vYERu3Bs6DZ-FV!b}U;O9g -z1GJnD$C+}70v)8JUFl2MmU2dw;@c_*xM>iLL{u)(oS_2pU+8tH)FdHN2_@7(x(eXW -zg(v~}uTj#4At>_GTacv_j!J87EQu4*RB4}2Ef^o9rTmxhn{yGp7N{;zi9{mDc0|kI -zQIIm%Je`?hzQ%kMx;$=jGE`YyOqS#$(EcC4fAuG8oT4n$6Jejk^!c7DYQ2E0Pn!>> -z{}Xr4@PFt@%i8|nGgNWIHD>TZZUoMSIPo&M&Jm_Le`tLC{Ez-+ -zN;L{i<_zYe^THhEN2m_8wl9SVJn>wMS|Z_4c5ffIA(vw9F5joCcq?Krv(vhRGn(Z+^qGxPPLmwJO@O+P -z!6y!LUZCP}5rlfqjNDzGgK;~MD`>3LAy&B?o?VK0m_s&ILhcXIJc+Y#*S2TqbI~=& -zm)ljwT9sNJ;~r`>S2&-cV9ZoT-`LuWD(29`#R9;Shvcsj0g_|s>xxFP_HuuK;MB%J -z|5S62oGbUzEbx|hHQzs$o3?M)Z3KdCi<$7|(pWR-up&MptSAn_nL^YgvMkldQG>5; -zU%ZDduH|z&jex?k9HpHz8zk9Djt;gI?gXEkH(R#ft=&$sNvM|ZRIt|XV%k_c3oa}N -z+S`&qx(*u~wF(_BxOlVqXl`#2vy8}A#84YuvnABA|4Id*5RF?47j8(vW9!Pim|D19 -z$~ia%vAm#1A4x*N%si`z#Jfc6)?FW35bX^=rc>b%639tRygAeaEcddimZNEW9o-J_ -zp~y!;Tsgi42ca=C`;e!~t^mz#xziV2)xG-ck|`BS((q0C(vo`~9EbS7 -z5jQE9^`3tH=FQ<~ep_U}4791JL3V~>LdjcElGl+zMju0CDu=<@^JIaGk@A^OkCWDy -zyg>`o9|q=St2Ex$idqZlhC(k+j>GM;AMa633#XI-aof?2bl6f(*R%xK%pp@pQEz|~ -zX=;lKjD-Zpy)VBT)EYQ6k3rgF0}50l8Cftls|4K0H+n3x;2JAnKo4P#)L!CbA42m9 -za1G?B=p9`W-bK(=#$sqdZemtwA^^9khaT|($qaPsAK)9hUE^9hsswF3%q9uXCla$}6BOTxS -zIA-%)#UhcUJRNvjCQ!G6cmO#pi@E@8zJ1MD>mRX_ -zEAp9xVeQrvA$bu>a^|HSG60_BO@xh)u9Rhh3g7MxDG@>IK=mN2X1(^@8Q5J~!1<5x -z_kY+RLos88D}g~nkPuMd=QEazI_|5L88pegWA_Vdqr$+H859(!30byK4Uksk -zYbHQnQ$K;^iYPS_mhdtpcj>Tz{`;8O-3Os8SFE@c%bHGb{uwv$zO^IzSr!$e8As{A -z%SYnML8tY-5QZ -zfrm>f3=|*9w$YCVxnd*-N~iY$Aitg`hGlmJAn=EuO)M -z1gmz}EPKEmLUw6B#j$gyBVB1^lHwm9REB2G5`$R8Cj(WRgBzN)0N{yj;uJMnr5g^| -zlMwwSFZlkK`X6X}Zqp7WTwDH@t(MY4BSi(p9V;#*2b?4EQ2zlYhwbeN@T0$artWK( -zcR*c_jH?!&h-FWN)~&c3^;EGZ!{`UvMg@Lws{9Aq#xj)|^qy5Ig5|ct4LMB)pvd@v -zwsG+xpV{aRi8g+qZC_y*4}5L>uZ#zvKfP&SECo)8(JWSLhckk*hxCRx(V#&2?I(r^ -zj$2GPvunqJr7kd60e_pa$8&Ii7_OZ^>DwJvkA?nd1wWZVdUL=<(eLmQOMf}Oa{z=I -z_;B9|j&e>{Z4^9%Jm;$J5bz5J<)b@i0B%Wrlydamn4HT@U6?|eAOiB_yP8*&02`Bm -zr5ph3aquACy!0!T;V>qseQOQlKP&N^MOAv -zVtQ|uiP**+?#JVaH?)XF`^;rc#Ny8uRU3~!UcGkllfhjBxx%jS -z71$~4wwPb3t_n{WsiHPYBC;l~=uQVC4m9&N_Tp|o^aE{Q3i55JqLj*+LM7v9Yr(6L -zSbO`9L}GQJ;ZJX2+Z7xm%1CxYFDu3W?x#oXAEvZWxtF0-m;tQ}BkRL-zzxMaE3@q? -ztW%38-at(#*4TYQZ;GY|b^3v}E#<3DFukmi$uOWLgFrpTHZeKmag;}4GOkmDexPj| -z`+7Oigsk~Qb8uOeA87mNysmK<1P^u(oN -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 -zG`1L}Io9y_t!rT!V9bA2S8rPF -z%txwm`Rlx6W<#BWRKbceG<uTc`{@{%f3Gb+mM_us -z;}`wSG>q;6Ws$xdQTG#9VETS3+J^Z4>cNE@YV^Kkk#1hQoyYlfo$2o+JHk0!hc%+j -z*WaE-9=S6g!+do>9DQ!hpii534m~b!w;4Q7p#n4q+u9MaEa$p6FX%a$m7A%0B`CSM -zgj!1kN3in|zI3!^Bf6xlsM+0?>a+}Y_(FVOYwN^VMdqJ^Tr;O%o(D!I)h)svrI}of -zMA|hLLsavQvi76MPe-839S%;H -zMBwXp2FQ)={$7;pkPeVUZ|vvZ39IWD+-k;^HbG<@daq@iAm2+fA2prb5m_#|62VLE -z9dp|F^yixnEDs$o|8z-vq`~Xt0Y+C7Q4Ls%wR?gdAH{hJtBbS&&e-ZiA;%xgpom{A -zJ%tPc^I+s0V|grZ`d+)P!s8T^a+6v5#yWu)5MAo@*?ALqn8S6X^yPm`Bm66&fx=ct -z{~{52Q|v@qHh!RAZ61KLWTzR?MR=RzyueG%|LO{WdqV%!5B0tVj9{oavbWm_py<1ghsd%kWX10J -z*;N?OekwZ24c_k$(g{@8Wuc>`mp -zk2>7*#)YF)nYJW -zSBkk_pzAAs5;IdDIGPkRIKh1UJu(|!tj(M^^^&|-`;imo^7z*-yWlSybbAdM9?ka* -zq(Uq&U(MpMBmXM)(AjDFmBo8ZJUyijyJYJr5BlP20VUSdYK`PX-E~rW!&A;$Vg~Ze -zBmG%9i?G2G*cuR3UIF+XVjGUzB&LeLylT|8n8hnWNM%*$5%uHk?7zlqzj^n!vV)&d -zXF)*%d84XOe^D4{gQUDVkd9rQ_UvW^AO@95$Mv -zYYF>|82C|YzHFQ=@VxX=o$aM%LgJH&YceC;R&qdC??Y`!@t9S@*Cos8ys&Y@9f@-++#Ia -zCcWV0D+0Vg^voko;Ez~ -zeQoFSRX)Itxd>BMe=<9NR%c7WM~EX#i+X^J0Op+0L4MOlG7k7-V+7g5E8neifxM)5 -zJ>tCHY(wlJ9jSwwzb98a$YSecT6Y3ufW*#ky$w(I+Fp|;47&0W=Yy}PL@F&)99G6T -zQk{ft&1Cfu^ni9zS%G8QFol9vV~m|s2&#HH!`9#CD;WbC6ogm4<xghS-zIsgr;tSaegHLNWX}Uo!y8;KL`(}ScDws>ckQ*&XgR@R!g!21B -zXUkRj(*OX%4K}fQB*TKoLMep66r}ymAMq>a>5~D@?(^=dR|+*66Vi@~&NrTgOrv~|;jSbo9#sV( -zFq?_0JSxNZ2_%o>{2<3k?{3A!D8=Szf24sUG!9io3|Eg(QQC;ec5aFeaT8E%NaEOSXoWr{ -zpiH)HMU -z8GU3=VX|P6U`S({uDnKa&>JtT^XrZ%&?hl3uGwatbGWlG{6q`9`^kIow9vqj3T%o0 -zd=C+MY!nzN%=_{4GtIa}-b4XReM=;VhPXo*x)#Acf1EpxkFzg)x~cXV2NLoFFNAg{ -z0P+k#Gbxzd8>f$EIzxLBHN{tFf6m3O=z_qtO7yo~Fzb{g!e1&x*MMiZh`GbPn3oaE -zN6@PGq9brxaz+P?G0dt~a;g^kP((Qib2CCL?EuLSWU#@$3MZ`yfm9x+ZTdfUuV1a3 -z!P*&|$@^cA!!1cKmQ%2MQmo)x&pq`_g4djyp@a$V>AZYl*H-GjoQ;sW7);i2nC8kh -zLlcFm$VQ{U6CvEaIoP7zHEM`}Xaw{2qe@xe7;MN%^?kR8y!2RD@MgyHXY~%Vidc~j#4v8gJ5fI@9bmpEaAs

d?_Ppz$M_f$LvIfPhO0wv^U7Vljc<9kPAe|#8gGPK)U&f^vMXve5y(ju6rJMCw7jw@TP*+w8p*N43pmaM?M+4>%y2-_ -z)|wJ{L79Z70uf;qEP0=^KDLOo_xl=%uk2aTP@9wTzc@G!X_!+!?r$KVX6Qg?n;4E1 -z1OZjrfNhEwPkivzLm*T7&j(FNt1bmY`*%MyX2|2@6nWn;-yw>(0PBUn>Yc40>#o?A -z3?9tYKPgv+pmF-I9u*U3Xs9XD)ZgMWSShX}u)KZ(U~D^waQl=8Rkjy2cZ-%tEtT@1 -z8q>jG4?Es^I0wJ(5Wyett@?~-uz0I`W`uRIkwu{Q-ASee>to~F|1RuW-;%>6BQ2$t -zI`%XZ;M@_IS#`)7S^5sW7VIRo&CZb$U6 -z3ow^%O)K(pb#DhP;-P;J=RZ={L@Q2K{}ntN_87!&S#3=x0_Ug^2IlX+vr`JBmMTp9 -zHTSY6226>Xym_D37XbpqsPf$K9^D0J+yo~(v|%>_E7zIgmg%*AzK`?_m%EtVOOCX^FDxZ>+P9?Sm3Wux$}Fe -zqd865?sC>onODL!Z~`e)>Ytl`UaP=T>| -zSjVZsrNJu<1?;%*pqjITeQL<(`_xR!WcBHLNT80_40?dKV*r}|AVr{IMc0%OXpAH$ -z!$sOPNvD8UfAi6ahOZJHG_6PiaWt9>!RICo=XhLVzdJzX-+Pa4OMAuS@Q!CapJafy -zc#wSzYxrcgCp=PZAT|E@K`!{hU&x6n?YR%&v{AfRP(3lfh5^qw(<0Uz~@l1E)oy=M0m6s0s>h`oT`c#f`>MpZ -zFDcS?;vWRT#-cL~Zxd&N%ME2jaJ1I$;or|Ioftz@_uw -zw??q74Fhke2Y*{c7w{DxT!q85^!iKF3Yi)&(j@++sNVVWk};~}h@w6_8rfra+)x+pBA(F-A9u(0q)lqR@}h>0pd#wRVS(q2Qc- -z@__g8PHERTr5h_*6!A%`FH2v|z-fFRFzBBRxigj5+<;y^@s)#^K-`8Kjc_zV1+s_g -zsyC?6u_tF&2#9KzF&d<`EyGdR8maxg5^-EIP}`fm$zMxxVB~AvM!D-l6@_zAcp(p> -zJ#OU4HsnD%XIkdGD;7OK?nb!o;Rl#DDq}p(9DIv#y+@S6C%YNlnK~NlMkivNOxlH; -zSwuvQ1kx?AyqWnJqu>8}Y1+bE+kAP{{C_WsZ} -z=c~%oQ+v@rKVRC(MCcBPedVg66k?t*T+YwLZu5(jFshfI0N^SLQlDbSGo2|@(2Yw0 -zfoGy@6IG|EP^&gQ&ozq*s%5B4dC0be5)Lpa0vI|i<5p&&R$ARQ%}InevH-{_Yy!*B -zJIgZSfMf@1*fs4m?0miXs2`t0eDg?51cs?EQb!FY`-G(48j~Oi)Hs?q-D0zZvjdZ| -zL}W>xRXOY&eCz -z&u*xCj&Ofldv%9d?L0i<13I7Y%yur(`cHeR$SVhP;rl7lZWyI4I()gYo(q6=>KZ-Q -zHMAje0x&p7hQ*zQlv=}d48_n6Y!}PU0PHkaW?&TWZ=uPavtz*`yOS|8nIfH^h9RW) -z3P=2#$o~C`uIof77;G(OvNc|dVuH&`Vrmi74ftw6RH!h*O6D!NL& -z5>)FRZw2DgvxzY;*+{je(#Z9a78eQn5~Pq|iPC -zSU1pO3|EYy2Pe;ZeI9=F1M&_R1aNo2&Jl(~CF&B7E#h7Mn9q!joKKq;V9Jn$qbwD0 -z4EZH|DUj9;cT$_3mz?h~A?^@fo6~3J(%|H34sxGf4TH%CG~1mV`2c&gZ+>6pn()W$KOgZqug>%>gF&kQj;z!4Jz7m{zV>t<)_Sj9F8_!R%T+9dq@>+G39ISH}*jJ^rI6_f&knB!4TZ-p5uRzT9Z~Z*J>ZfX? -zHbXCUmxspcQ8KHx({7h@L!-X}9!ud0q^;Rol>*TTVa{niswnqS}+$x1{E`6 -zPRJ)?k3a4<{*Sv20#bm5kmm*HHyCo6&ewP@v^xjjw<-|B)EV;t<*C5E;xsA|I796G -zG9G8-sNW9ZwI<-iuh$DmY3^i0%bkX28|pDQ#rG|rmM9Juk?)cuy&@}sb8fnm{RwqC -zm~?R;$5%RjY#E9x2qo$fYHTrVn|XnTrEHc703axlQgL%3p+xJlJ4Sf4PDsPV>QvX4 -zeHeo4^(C~3E{6=bwW?wPs8kKz{z6x(aCy}rm@9KLxGa{;7Pm*%N}Ua>t<@#8~Mj_?@-YR-RoR6 -zXW>YmT$iotng?IM1+SI>ekeS35#&bhy#8bkDkg+gnREf -z7d0pzJq-OfO}5~;U)gqy{t4bl -zV#VOm=C>r13huaA5x=$+{=m*TF388YX1`T%$u-DcWj@MOW<~b30&4Z+qV*Hx8)BsXcH8pg78v5iMK>L2QZL4E1j7 -z0F>h&bNel+4!j*kzQopJ_CMyfi5;W?gas0b2WP3=(e)DAfC9YLOqOs-|Lgr5C7{n{Uw -zg|jG3M7l-nVCqx050T%Tny0$oHzX#pO_-~JwAzlSuNvhC0>Gi;f`1j`ltaYB#y584 -z0S0lVe%hE88mMMNdo~jr5HI;_L`swx|9rgJX&Yz -zBoye3ayl_AXgQg1v;wv4_wml^%vQM&^x-O@!K`6}Vj?|E;@N6~hqMnQnv1?Ih@xlv -z*1udWnIi(0t@0G{U5+yPZ(5Uww% -zLFLEy!24q}bCj*?0rz%{-saQqJy*>Xgjw?m-EW>2GTL;~f{3M1Da^W$vgnd$ruuUD -zC#vMOQ@nR-MVQEi45C9PbkkIN27($fjo|@V4w|gjcNb8&u#iZuJkROGOe`$u!W_%I -zUi(B^G3=bAekGyeJV#YsrRPTqdMQl5P3*}~iTXcu%Tixf%6y!$TxqluRxD`5k>Y&T -z1X{-=U3wiiPs7syW$_m~R{}E8J_J&tf5`1mea4>w-VeDAX*g&vp=HgpOQOFGWOfa7*9=5oBr+Sq32?p+#!-m_PKYPrQHHBw*`o -zOQ5yRU(d2(0r%7Z4sNJxJNv5Ix{L-px7$$>FjnnRDuGE7!0!yf)v!v!s{ZYsKgBjN -z*=-Qyg8bW}A)1(wLgJ+%aY)hxDH*-#XwP`Hj4(xDwr+a1)OQH2y{JJY5af{pP?)y$ -z=n}B{_{nZzC{g;}qeGFJ(1IhcMyh65KE|90D1ZB$UO5D-d9E}}Grzv2*k^>_G$aF1 -z>EgIu?Ke$#3C}!8iD6;T(M0p4do=`MX_V+2Nnz#@SVufkjN4_dTCzUOM*K``0r{?eo(d`GVWP4!_*F}6Wh!pi)GlpY*zqyjl?Cv_mk{t -zzA%#9_Ic1eW{)C>aTi+E@Wh=ClAhY@TTO?rY)@$zeo9#SJ-G>Yp5dQQ709?E3d6+%8H`Pl -zZU}?Y(EdoC013~~q=z%9)D#`%_Oq5Jp`9+6UJ~_BGIB%>EMD1;?o^W(%M?QBce+s& -zfF&D8NQP9dq$o7WEPtMAyB&D*wjTY!_N2TNiD&AQRHc-Si<8g*^yvpR_3;~Rg&cACkngbK~D<%oi(=vkUI>5C~C-!a8c&mCW -z3GZ(ev6L!RC9I;rHNS4CS~uR0w+&3XG<9^|NPGKJFj3qcM@Vm5(z6!U&Hj3{_|l78^Gf{j69t31Y2L+g_!Ta9G3KbBIOUNO -zN4l6{?#@Gb#N{AH4evCkwu(RIL9>T>*jJ27VuIME+kqI_x$Ykg%9} -zy|VWB8NE2Z<`L}}HM#3zcec0=Yx>LGB%dm7O8oaZVBO0GWjQt^KMJvjzZ2T#!CHrE -z*e8VB{h6bgED^Eb*q9qxC$>!Ab`$Wh?}d_vj{uC>d8*#5eiG~S$>tb5q!mh>GRb)S -z7Jo&&t5mYO>dQIzuEaCu8aZrFHA1!7&ILe~g+8pZC1P-DtSmPoF%D-qcS1=wR|lI5 -zhy#&8Kn6Fu0ma%*TP(cuzu>m^LP^E5fi=&r7^Dl|U5=RLxrAit!Z~TZb#o7^ZeN4h -z^$)o1g#SXXHTIYNGb=LP_I#Jn?FZbRQbg_5=U0aCtXy?;<3}_XE@~bPZ*UI^#7fcc -zYtwbh^Md4GF8c7A>nr=rc}MtQ!D-t62i%^w@Z)R7XQ@~EA88r}|>Hwmbcp65%XcrzH^6nN2(FG<)%SgaCS$4P$9*P4N#rK&BrwU$53^q~Gi5T*d -z#*xD1R$%)HW64Vl!a!uhknV0LH6{3iH$Gmt#gDhm^^doG4mO^zq@8t6 -z`yJKp3$GHM$DX72yzWe-c|0=09D1TXwYWt9*3DG{Ac5JJ`9$9|D$=Kw8zA|wxBZw? -zi)BjvA8%Xv$J+dJX* -z?O$(u5)eM|uKpmkzQv%r7icGE;LPqty -z9=loD9C&HP8ktW`ai#WD54)-r`FV>BWgn94x2)E9{Ejq$CtD~cBTP#ylUT!hBS^Jx -zfdNg%w;V|2uJ~(wU#zk -zBQAu;Va}j#uMtG>y9i)&*n>jOL#DSkgJ6oG;q9GiQ9CKdqH8F+HZHZfYTi3<2l!v% -zL@lX!zDj5Xis$-dF+}i76l8}Zj>?bc;D3=Y)u{72xFgD=AXz9Qx#Vuh5Jqt96_Pl6 -z7zyIf&uJ_%J^zu&<~FCKaI2mM{*%#GUQSfWh)s+xHSk(Nw>W)t)vfF~%s6@I`xMhOyg$5;iB*RfwN6&52cR+;M(gjqImf+Vut1J%+t3O2L-1#H -z5R2hZkoNdKck2`P=ahj$^I9rS?R0hJsn6jqsbsN^i3Y=0*q?pr+vZouAS{W$p4cEP -zXjgHxa$1HycP_eVOPcwT -zL$++iA668?H=n%Hb|!- -z#{vM`E(-%NW6@6TH>S4WnKD6>|0%fH=Qsoah&d7i8F;Nt4X+h+K0Z`*R~ -zUvHcGKi;-rLl<7ECRgxDg{6DAe8BO@KZ2E7x -z{-`uRDqH`klO3b)(pRed?2EDEb77Oo|} -zycwnZr3ffgukFYI_VfZ;Rtdj1-b&|{!B-D?Q0Jpf5yKyCULCW8>0Z?Wd9LzQ778zq -zN8;~x>CZ7ygAPJI)s*JF>Sv9XSOLTOf+?Dc`%0y@J#Ehac-sd5c-w^k>utx!w?Ic4 -zbm_DGc-z5$%Nho;BN7(1x1ayZ+lGw#@wQF>+uN?jSms?l6dY2~uc?}^cU3;zyx{z;Tn{3X3 -zn>v#Wijf#$GWVdZ3eEVnQRwMP2z`T003K%`>p`fW34q(r7)pjLimMSTv!cr?vH%-M -zH35V>hXJ3^ZW>h?p1}N`<3$PgkGEYd6*>t3 -z0pymG70(mZi?S?UfBNHX|JGk~o`U@GwxM>k!;oTzOGKcKhpPLiqSJFjuyq|7XscgP -zRqH~x8H2NQXLCeEAY8aK9MO(-*?>z -zHoyV(Kiu}x|8m>?9(?|*u^Uy6K@Edjw=-_>0!F~ST6+pdDk#CTV{ -zRQX>_BUlSwdlC&!Ou=NLE}XdAEce~{K9qZKZE`v;`%fr6v3gN@B1!5`6B`y|S$Omg -zaDPYhc6!m^oB@l(k%B~2T);$Y{mFy)uJ1mcu^*uG`pS(Z{H1?56;CD=IFpk63 -zT&B3f^d4_x5{WFsN&86`ZAIZz~)Uq-HJQEyN?qm4X5= -zH@GdCuLF}}Y<5hrlYp8hPr)cg13~S@)G&`o`lQ~Opu@V3fa`l;`2XX!gZ?kK-Qu;j -zphNP*ZIk}XZ7+rj{SUVtB)abM!)?3%Kiqaa=DE!931Sgcgb`lY+Zy-(<+hpr!)?Q! -zL|I%zAM)aTW1r$rF%&KbzTzR5n$s*X9P+=A{=eKdjRQ8t+im;-&@$M)t>$dA&n#&+ -zx34{5d&!6oGhsDML06X*RSf*$mmZnHmaXMuToT&yy!; -za&cTU2%gEXjIEW>E%(Zods%aJqH{ih=Pm^zc_&hMQfYWXS*i}(?8QOk_xy~J&PO_+IWNCJ~(l>rkwedMclDCGCk0ADY< -zf4@KFiM7&6IGSE?N&|@x*@?bScJf}I)f6L-+TC3aAz=j;#61>an-W#yaQoXJk!z77&?IzIx- -za|43acwq-dx{n6lh#$>(NkGWdk%aN0S*J0urgotJ)e#5a01!yX8)ow~;!VlT-zL-s -zXnXX@T?!)N3gln;phi(%PBAe6?R+ymc>7)SgVZm6i062*^i>UDJpC!Spxlf;U-O~*L>?m# -zGt+WWgYJ(A(Zb+NO-s`q-2oLq0U4&G+GcH&L93D=T|5%5Dr -z=>)`Xw~6&*2u;g7%8kZbBH1!I#lR>^I#9+Ac(^Wk8iN&UNoFxxQt-ZFAr(X#O`@H6d!C{6(5B5}c|kA~aHtYilmM)+;ugbD8PH6Ibs5Z? -z{H$*PNsE2gI<1`Z8$}jDYRzSVq+H7DQfb)za%0-9+EPcs8opLzTu}mk$Zr#xi^XXp -zadv(Y4FC)Ku>g)HACFtVO!MlrLy#8@NEQ*txR5p9ho8NqK_)cT#T{rv=C1Y(JHLAv -zb0?@V<-#HOOV+g{TEcp6F|#$$YV56;Z(VU&Ohw4^cUkFkpK=XOI@-gA8xNbu&9oWx -zDdH;neP7p_Z_|evcJ8o%BH$_$?6h%$nD-2EqrK}_RjhEfS>{11m}|r^p;erBvo8^E6;qkw;?TD5!Uca9e!gpnc$~1c(HsR^XDz^e9G45OC -za==Q$Lm6r0@usYT1jfSzLd$h3_`lL@HvQ4W$G+H<`4+4wUN7oqI1Y@EJR06ejX$aGKPV={|aEw9mxU!CHKndOHDzMHjY=h)RSWFwG$ILo(68(|mVS&$2 -zJ{`JYt7*Iz@E*JwIRPR9YCEY$G*_uEzOn7D|1Y-fIrRp>{eQ6Sfp2UZl85aZ+n)Tt -zuH%IZ36mLLBq`!DxJA3x}VjvnWUE -zB4lu)H;bHbGU*8JKc`$lR($}Cd?a~XG!|rk;Yg8lIIx#<_DZH+tB()M;{N3tD6tFj -ziO+EK%ay!~%)V?^j=uhDJHLqy(@SOeusl-mV#L!{<2B7Ai+oLH_VmRRuwh~$AQiS6nH -zj}c!WMMBpqsm+ -z$9={e&K_U)4Mq#O8jbuPw!>lvx;+=w~S=gj1zx^jmv->xZB8c?Tpx!mYK8f;Qdz~BEZ9d!%tPUDf`cn -zZ6x&h9fBdo69s$d%fN5<*4L0ox=8BkMPZzbcI>!uxW>;QgAmu`a*x63xOchdT{j%_ -zGE(7yx=9|b9R!&>+KhZUp`;vO{p9PYhb87U&o@g)6bnb<@Qn9}l`|ykDBJ$z2_{K` -zCAIjnwh1Yqx5Y=5f5;2cKP=cEOU64*h8c%tp7y#t`eKwHHO5x{(x&Ml61R@XR|6HS -zoO4n7hz-yqFodG(o7eRQ$^@g%cg)5}S&gHwy0Op3ItsLsbZr{$vV3X5^<5oS%BR=$ -z`vloErWG})9znKWx5G8r4q`R4GhKlMetvo~?9j%OY(xY}zMiE^hRVS)ijiBt1|5`f -z+I+XuT2j0#gK3uJ9<}b&x-xB4)^_CA9sEvH-EpX4kh+RWO*wI6AkT0y8;YYgAvV*U -z)Mk3CfKq~oN=69|(d85|!qU%`+EJT$hV81|4dCa1)k71|NHfmoUk+e|QK984akfm& -zCq@3Xw&nj?+kz02Y9XcqgvG -z*7oc2a*X9deOzG>5DFcDKA76KwaxeYJA=ob%k|INUNcfw4?AF@0svh2q6GfoSgRh+ -z(aKGlQ6Uk}@K<+Y;Y9_$_60^apL%w)U%r8J(Y16(l327C}%5UorwA?{bsF=6|MI -z0uoGxjHXx-! -z7QX8eGVf$~sr0z5NLmIKmis^vV6P1XK{R|I5jk+eJ2&*&e&*f&ec*f1Um^1zYzZ&m -zTb03f^Ty*qV2uNOn&u7*l?%YxMS=xcg;Lag`263+mHvdv&G7u+-N)(R249s6^`vmUW+V)YDc;wC{QeEI0 -zk~#|zDT6-K!bg-f{8MowAbpQz#*JQB>oENA3}{# -zriy`b7Wkr!A2w>V4wPP`d*>CkK#~m#n|1MRZ6|Bl2%MbFU4V?9aWu8@^^Tfw;YN$=}v?|37Pc>z}oqf!q0QZ8zNQKb!b|TiYvTnabQ_VDFtSCo~3nGSlXwG4$EF -zWSdw8B0qMa9p5#M8m4pHV0S0T+30ZqfRi>PBS6*7#ribr>mpGFk>@np#U#@hc}e7J -zphe-k2Sxr`+xh>j?Eo2-kk0GLw!!T1i)RtsM%3=cUts;-z4Vge&vWC7Q}nn3kWN?% -zG1($>D0ZhzOa8od*n8vlznXFXkO`9vmK>#)%#5ffETZkhZN^O+H%h5fd%&`(fVs`V>unOCr^G`+a-SagbuBQiBfqz52ml2By#XsuR8iB -zF{;DvC3rm+SQ!Px@8~IJ!S8 -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 -z+%sn=9papvLH=ihQ1cKNjA(Mxs -z`Ce!{FVwL|UFDy_X`{GNLeLCF1L$p7*Bwwne3*}PR=LO!7{6C|rW$HPw`CPvjJb1$ -z2JiLU=5u@gEJ>Afl`b*JToHtzQCX4IXDc>E0KYh$$l^htP9N(;MfO=Pa6B$rKS%xv -zYXa5E>TxT9Ew*t_Py0YoZu@7?c!;_+3MY4CA_%8?%qa9Pwf(-jS)DIAskq?)t^YIs -zAGJM%UGZOPyX!yHHgOfS$bYEq_HV6oZ1Nwqjgk3HZ6D`TqJ2}_qCj(T9^M>$yI*44 -z1sRJP?=KM%{fHk;!`_&t%IX0$u!Dhd&3Po%#PN}Q!GGrA0_u-Pz|e^g>a+34D{b5Y -z(28vSQrivfRj91!yQo3hnm8fr2RxhHth5P)p)g)eJY11#kI^BzBd)2=z`99W?!;2y}fP+v1>L;n_tmb|^Z} -zY*EW;;+7_G@=_5MjBRKA)4grS(01}~dlpa_5NTF?g93YEA#!N4^ -zea3i!ouQRl?F`$p4}5Kc*%E7;{<7(MyhGgDL=a7>Z)B>8`iA)0RuR;{O}xS2{z7mP -zW5jQF#|vP%=4eEZb1Q6?+Eootinn+VNgl1TmDJ(bivbnrK$L)8sc15=Khd*ti9>!z -z5*y25vfUkh?o>^klxUye6!KS8{=l*P+<--K$W9T9FP=E(`YvNRyT32JVg6RavNso$ -zLlHbQ%Tp;(E;QBW;SW;U^13#lWILVZuo(F`oXD=+C$TLyU-6a&%tad>ag4LGgMHMz -z0j1I-+*Ob6pk$fC*akh?qS*J0E8& -zI@e!I+juE*V~Oi4ga~(XOYre)R;!-FCK1!0GC}l9dWeTZvVHr>Yg2#>FlT$Q_-*BT -z<7K$+^0rrY56D0wETQ3o>6kse13qbY(DZ9I`o{5;iIO1qzNfjR>2NXGI4Vi-9S5G0 -zQvamwFtfZ4v+=U+TC=tV(Q<*G{bRl0QbmXkNld}w2?kJbvx`XWsJPvg0ngxrs9*=b -z7qkJwzLvOFoy737u8tUF+&gz&!=jYA4<7UNFDqAfj=TJ9h=ts8Fng0hhbr(PKLD@h -zhBrP*RN47L3=x#qYGlW&tJQkMnFM!)>=Ned4}TO_&Mu5Ke^y_;5-f__JW|WXeoNa& -zu@?N(>Fl|CCm<``cyZQV0eSS*cbU13g&CTfLU9uJsH*kzHROYJ#< -z2uk_oZ{@g}*n(?qtQd%lhpd~M@9#`-zSXGBRn^2|_-|+%{~Ov?6UFiD`i8bOp<_(Q -zhBQiAMdFoggq=_gEf^w2ZEK}|EqKPtB$W4F?ts>aWrXa6v?;S|D{fOuAX%kL%+lC; -z!u%4$2;ltD&&Nu!=n&0|Bq{|KFq{waB_eEF -zM$F|(y%nMbO8$I}sLkkI!$pH8r-X#gvAJ|J7+)d~jZ{6Y`v_;hwz}R|{O347!D -zsEtpHx&lyUx=oM;ZPW=rhB@Uf;SvI=Pm+)l=iKX^P!ACg1yyeCW6{X!^kcTMP7&*c -zes2{>7Ygm<$R(dNDWX3n9{u9+!k^qQf>5xMdME(gq%x-Ml&%N0-ZQWBMJmJhG!y>M -zSGtV@Vs|z)RtnKvuepUz=a+xHRl*~73V65^n6aqOKWLkIo+|Y1Q&NJY`~COI+EQ}R -z$A`<<^XJ|50a5YPQ?||6+thAfxAz70d;e0Ej&`Pq&dJ>CEnq&oOa0 -z9q-GpCLtUAgB*Jk=^VXxDRBYJ7akGcZkx6ixx1MZ~iCDx9w4sSQFw+BXV_2RSS -z?hyLy?5_8Z+lSBZ_x0dv?&ctt9sfVlcJ!L^?>+v{u2%1wmvVdJ6J+8x9*M9@W!25Du&{FS!tBQTa -zuB+28gIZM{&|{e8%L&Am-K+{3lhZdzB2=-!XjB{A1tft{V6ezOH}mgsT&AE1Gtsb)OZiBO -zL4~n;ee>;8hNu2X+xT2v1&2O1#{xDC6SwK9^y$}E2MgCe95LvKS9d~d2YEp-FKe<{ -zbf0&3*sc|NxC{q4N4kR`M}#_9I%lXbEJjbx6& -z+aF$QS<9T((p%Q_!@UF&P=et(#XC1e4l9Da=JB4hP`tw|F^H=d`3W;^JnyvhSp|YO -zb0(O>qTvVFnS}M@sr<8^y2D~f`Zs&2x5dk}U5o?=K0y>?5=+Bfh~B7U)m!!HOS{w2f_$s_jN7np0Q|`7gAc`3-Gv{e!l#SpGuWPH{XlC*&Np -zVb(&%ErLk&5%J=ljBAmPjT2P)6N)HN0Q9YbdymEy&N#F?h@iUq7rTRn1y#AE4oap? -zPt9GGRRe+mwk%>~_831#8#wynE2+mxf=m6a-Bod#;04l%sHweao<96ZDogCN-_d=i -zwm~u}Zedv>F{~XlBiHM#fLM?TIf*96ku0EqJ+0NdBpB11M@n{|UTj?8Ud8_M;geJ1{Y$P}cO -z>5ycZ6l9*OMtxxLxn27sN7xK37!a2^WFat)rWA7>U1tBt4bI!sBa|5ctCV@FAh&j@ -zT7_xg0Pve>lv{rQmuldlaJ0?{^7s0@XXm|Q<;0G23}_JeBXsM!-iV!8U<0;?y;`M| -z{aS9a-`ue&+fU#yT{)LBGw^NsSUVv4Jr0EZGi&69*jO;188!qojks|t`*)`2jM6&_ -zu7XFaF=zxCUsTbFO?I(XHAj_{c|ZZl*GpH{SCZl0g%wij9Ja2bx!2pgd3%=+bTHFj -zYTIC*ZFoAWVj528(vDL{D~LXu$Fudbv1QqK@(V9uAzgxcZ;!k}dwo~bFU)<m}iT1J%4Mg#gIOZ;k3PlqsIyLkunK265G+FDreO%MT9F!z!*_whv^bsh+{s*)J-3g4? -z`LDVI-G8ENZ($1BjqO(^2#%ko7>*VgfImCNAFDmyYP_Xws;~Brx*z0!*K|aLydU_y -zos?9YFpTfwUP$s!7O2S&ozj2Z@f(ZdnV)9K@1-WZG4iZ-Hl3{*w=WE0soj3+JpIvb -z{B`KG5A9iH9DI3Z^HJfGjB%mB&hONC>BU1oOt}4uE~)8#I#)Ue@5Rb5tYP^m`LsU| -z$JgZE{`;koziSPD4<45$ZP%@4IV1dH3!v*Sgjs=S-~MTSE_8Z!6Y_t33Fr$*;Ewl(MCBq0LPu -z1Z+_f)xf_%_^sd>5!s|Xbju=Q&i2uqlj4Ha_oB1jSHnUA;ObF1g4T7$Dt -zqgBJ5PZO4FkV>wuqT1^rQGC9mY1cW?8aAlHx}#Xy@drOJMFM}(ZYGwrChMn=04Zwa -z3nI$BTXl*L%fKOT_5QYeQuv6>MmId*+`iCG&Sj5&472yl`tpKF%beebo}iw<0>Vn_ -zQdSK*YfFOhWV`d~7!vGV^N*y5Mk4FnceM?i_));6TT96YO0b8f2$@4W6ai`e)P@;lhpvPYi}PMH#v0=$xO~7 -z4*xFG>ZD52jfGy>C~;41*{K(HKc2ao+T2`5IK@cE$#&}|JSjWY&>gnNw@`J^a~^PYYZHnQI=ANbq4&V*8N7pM7`SoOA+AFDIWM{}i#C-lJP;oNbS@{C*-es6hxmq@VOV>z~V -z+i2O4960NcET7BSTht#G)ZL@(YKS?bB$&5LKI!j0+3om#EScD1^$!m58-eDVrqxzK1+tBBe{xseld6qW*=y{9S -zdgGpsYJ?XyfDC;G7#`v#^Sb~jIL%1jme;L&aFP0*Krhb+dakO^B~}SLmb}6dRvFJE -zbcElrRl1*3P*f5h4z5C52_hbQ^s -zu)OJGU4@TNyOCj4y`w7%~wBDrx-JI~y5pTrpT}``^s_pE`=BWH0jIDnG -z-?s*#FAQo+3<~NKDIcPcBg8Tunqe`e)3hk2F4o{@arV0E(Qvx}r@O)je%!|eSRW7@ -zdG1sFb^rxOHa2M%cc7c8F9Z%K=NzElp<{yK?q+%Vs^X5J8#Ci5$0(;0Kvd*xP@z+B -zoZ9^{quRICUHJxlL*wHLt4!TyFRmnJ&6B6mx6_t`rg -z(m`F;#5^m_0&DY1Gfco^`%BJVnm5%0nw8JT+umq`oiPZXURQ=I)cuUuJegN3s-wK5 -z%io9Ix(xFVr_A)Wt`l#?DA8Ok&pMUF{+ODs_*xPmH -zvQ7i~dd_ObMNIj*{!MLvzITV4*A+C$!&`g1D&f-5$}g?b^LH@MuQ#tCfk#(dC3`In -zKXqXc-L`IAAoU-r*L1getD`mYdcOsIj6Qu++ea^2%|GHV-;RnqvDMQ)@1mI+0j?I% -zd_MKIKF#{iXnJHea}}2!e}2w(PZDT%gn(Da5q!`=9SFeMnn@{W0iodfM{TEXx4FbACsilu_@_ES -z+LK-P`xAbsdCyP;v-&H_>d2C48YytRci{7J_Te9BWv!^c{;9&izG0dQuGjMHH%BS6S?L`L){i@@@=md> -zrSWcoL*mvxAsli8*~uj7b-lytjWp&I{Y0F8YR -zo$^?P -zT9jL8)II&ywgW`GZpO@0e?DFBBysl0v>ziW6zsWzu{l^ST=O{itT`GXu_gUnA%)>2 -zPxbkDwwq*HCTpmLb9-)&Do2_U`H;m{0Wui!@bmh6OyrI}#g*&B>0m=2p`GIBh#OH?ptDi>|5KGKsB0l -z8XANPS!BVtFgn^!KiGN{zrkrVR}rea#v~4-2DBBj^;q#@Nm!}W0F-XJ=S6w$Td=*v -ztOgIi?}G((GOP -zd~{0|hBNDx>`SEfvoyU-J69)JF3H||*k1bqeb=I=yDqo~k=?+2I?eB$$0=q7FH_ob -z{RBl_K#k(G%$qzic^y;%O7jKz7kf>;kaR -z1Ittf#}Fwfw&?6Kwb1OL9V6Hv9eMRzU#_%D)`4ua;1J@&egtZiLRjks#0R8$t%(#G -zi~{EJROI3Qk1d2p(F<}xJ;^jHW?d0J3$8DSJP)={)rgXd? -z%qs^f$s6u)Q*LiZ(67XbB)8EOHk}GqkkaYUf#A~K`Rz8>WtqT@zUKfTwX+;eo{;+PJNv(h -zS$QTc55O}-pRs2w!K1lSaRk%$_bcftFb+gV>|!Ehg+`Ms09)5g#YNjsuIXWxekai) -zaS+co*w*QwlGi1ve&0!*LD47-`H9uP6YCSs##1N6U!$l2BrqSWU2>1XS5#KsG`R$u -zJ-c2g<5!h;oz>xMIwH*FK?&427?V3G#*gQ1*PA3?PQK8)nbhNrq4kz=rVTS9gDy;O -zT8;gNf&`retT&raeEw5%(q9$nC+}8v0NBmd$%4CaeSTLvT5Dfxz=_jeDY_7wO^--f -zRENlJdbou6*V_&|#1F01qXKqGrTOb^U-5t4p?6ndbSQC}a_TymKyB;@F5%df<|rHB -z51J-LR>Lm>DXgd{D*pAh#}BnI55K+bQO01^RVq)pTI*XwH1iRyiM^hDf`fCa5+L@I -zGokOou_iJ+eFnq)(J3#FQIPtb#H12wttW{dzg91!X)suaLB -zAOIY}6#p+*XD^OSjTQ$i7=xRVgXt55(~867gr9|aUD5qo-7hnKL2=br=G=8o=a=DR -zS=EG^4M*5w=@Mlkh<%vG?&O$RDa -z68VVr&^@~)1IgfR2DlgH&~-QPXvOUW6T{X77IiyCS89V86I`W)xRKYk;Z%T1tQlx3 -zxSA8y3^|#P{OvjqK6H{GTbUjx20zZ=&4>XPQ*isF;l91?q-D%p7hGE5*kP~8?Cky} -zUK*Xu70{_j%%<~D0J -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 -zl=ciS1qZb2egceYW42Q!t8y#XwKkp -zm@*kGEb29`GZVdXp;C!^cBp{r8q8Aovzfi@O3<)&?;$U%{$e57&!{oWADg7r>3U<)???iZA}pf|%%F -zj`@SiDn&SFLG<@Bxj|&3g5dJ~Fpgw*DKCGucIrVspI?%i;0}Y2H5ex*8qxAet}`BI -zi-ScA0kai|Z8E2vtv^L++lDhlNLt_<2MjmKOPg0W#QSP8<F$7-V)ghP>q -z*oiEk+CGD!*BFzGmqJ|g0BNcN)Jz`9PSE!YTq}-#1A}E!o?pk~5AC};%ze}Z9CCDf -z1N%?^+0aa;<6n>b3{Lg=%*`T;rA4YeCxfiY^ygZf=;GwW5C|hjKgRcwi;r4^;dR7_ -zM158q%}p=S%7WdUpnjFbGKxE61$f4UT_Ia)8;WNdgu5W?9C%S-YRqRo^=vD;SN -z{Ra&B%rS!O9(?orra?Atj>oZ1)l$@p2po{5cnRpo2(J`MKFEA9ABP=4Ns6GG>Aky? -z`M|S_l^i#DGK_?@RFGjO-bfR0hwkcC=E_=iTFWo_*7`%RFwo-D47QSk*+Y+n_tDw!9ygpevhQhnN(K9A17FC` -zWf6N-T~b#vigPzY!jJZa{(s2fI%#x{W-f`olS(il

_k5R#pWG&Tu5 -zw)lrY(NFbO3l_V(mj}?r3}D6VP97ps5(^UYb6eCcZ=V*l#d-soSIagD*roX;Fj(G~!KcvS5TUNTxvFne4hE=rFH4H+uPD?Hr=yr>2{78kYcO -zXfZv@k+|r1nh>Q1f_zMU_p{kG^C(~7L9y#%_^XF`}!9l%3K<(=0 -z)GyRfctU`?rfXgS -z0ODBmI^WB>o=*;buExp4oB3g^RsYgK&Lx%zshbThA4EV0b)h!)E>whMAqaS7s9d{` -z#n*c5u!oJCb0F?}e0#+E(+#^h8UDO8q$R(ksH`EJq+l1e6}UPa*yr|ltrjRcSrwdYA0EbZ7xM1D2u-zQWas4B -zxBT@3K&YOnam>m&7bp{kRsFuZ#>2{g)Y#FmrdwN`av3@yc3@SABua%HIXJ!@V})|0 -z4P^|cK?Z1v94W|D2gDq1dKZJ%bO -zDFwymwJ!AE1a($ns76fZ*|9@8{9EtsIWEEoYC9z4#4g^r%zMQrdXGL6KY@p#yzrg@ -z9po-cC)vKvmb1JUB6vz0bCnrQOtMM`CSPtEEoJV&39micUU7)gbvn5wRK~oh^;_*X -zpgEvS3DlBsMW~K?`$vUO0~>Ev*kp`p&rO0R4Le_H7WX1Eq8@u0#ohYm5R!PfQNS8`K0h(zkmu@A~Z -zx2V^u{Nj==${;@6q(|o*^GUB{3=@+;>ZWF{lYapr0lN%jLt`x$Gn!$tyuUBQyA_5l -zyU4}o_mTjJ8@F=v;2UfE%&@N`p7+eAC5{kNpDGzows2Dz7VfHISf6#5SzhsQG@CQ4~kMo9XG=BA?Jpeh?>NrLr -zL7(Vyiv)uuyJU}_Ec%?UPH&-P?XFQb?ZplZs*sA!o7sV!{vKe9u7=t&j!fm7fpbf7 -zY=x7Fn_|H@M4zTH!cDGv`pAB5`3Tr&MWE<^R^*G7o7_n>@4MQaGtEU2g*AnTV79KH -zP5YC!M4{Giu582;8?8+x<+HI;2-)c=73=?k1&mXoRam*LjEigRZz&^E6vCCMU4us> -zKfG~>mLYMrb;VFX$3*x9jcd_5tQYJ}4DCCb3Abc)^R%nWPz{L7WfWN@-m`eVB$q&c -zA|s9^sDL*qF>|77xox&JPxQhy-8@_f;of|1J5Kx&_1ovD(7*Zp>Qbos -zUR;8>n$9iF-kD_dbe5Qh`E2mndc%-5McQ9WWZQtRhde+u*|bNU6_w2Bgun>^MXN;nspj!SqrH-) -zfHg>X0_l1T<*`jy8wte3k|P>^Jtw9P*4dkg0ZMCPF^aJ5w;PxqC!*OW((C5fzZN4Z -z^tR{Y*^ZF59IuG9%iQjb;p`1DE7nI1naPVm)k3?g&Z6}(f;5>w$ljB#%XGqiv7j9% -zgVHnXXwhoz5?A#L9cLG;ffl;Ni~K_H3CiQ5WZon`SgLYS7B{9bP>Eqfhy~>15t*Jv -zzp=?oJXVm@bc1gUxU^r$AuVte&i)WHAyKPWS97w3bvL+U>^%Ft$qdD#&oidg$uWvp -zHZj5ZogksiI7uVpOi&6ss9Z7%41gd8#Hvz0D2LCUzvhe_Ok*uT`^I92D@wC_Ce!aP -z;3sGl%ls?a9Wdo+)@sfvXzTq+8RsUZ6 -z?u&^-6`%tYCk$H1Q(rXMA(43D+*3boN~r%_E^P-=RNpW4zNa0Gf65|k51)m!h_Wny -z=W#9xVsrAy7`cYi7YJ4&SGtJN#iM1Y`r0H@dT7cZQ9~1~#zUcd%9)<3mkL_q*}1(Jx?! -zT={zZMn}iJxZIZ+e&Fzn%gx!YFtSiA$nfQZJ_t#Es9~qTt%@K_cCmwaR;4a@gL6P$ -z`O^2eYc6?r8F>yRex0@A~$+lu>+8sN*l_t*j0DfKU) -z4EdA`8ePd9z~THvm{r`QDT7$ZiDd&2Lyzt6Y>EIYxQE*TU?P{-8!@>}r}!i$U>f@| -z((mtOpvz%dKds>W<7@BUVzT)+C&AQVhl%z-JIE0Uw -zd~IM+AQTnSab(2anVdjqj$rx(g~`O!5myq#TL$QAcROMA>E+rliP#eW?V~g2lPnC- -zx7j!Q$2P!HobR%4RVp5Wwd)8wcHGczRb2AeVs3ZI#pK>A;o#fk&@~<)JMhgBT*&b+ -z{mh_{4|Df#F^7P!d@yaz0UM*L{kfXFBZyghYnm>vI+5=IJpvyCryuRp#aOe9KjVuT -zxQ_KFj=ugdJy~l+?@Pp=yuXICU-xNZsHtgn@q!ccharjAy2kmxz1cCjfajH_XRB>` -zTt`A^i6Punv|%jdy9^`aivtJG;|4#qh6aom$WdXUh2l!Q9-jx#N-hMgZ&(2Z$gSfk -z8Cw@2*+dAi@lChR5^2)QQk!rd$DaK5@GZVM!i}e}@M(8uh{A+)ziZaL7&-CAxThZ( -zIt0KIpHl4QGM@r`;mQHpkMu0gS;15U!Ziu`M!4k{yBPfa?fx6#F0cLv;m#5L55led -ze<0k)m_VH!J__F72sh$703Z}J72yy^y6K?5pm}gA12gJ-26*>q+C7CtdXb&Z^X`IEkmiO!+=GKD -zSdtDT*_QDQaBB_8PNu$`F_)lLL#H^lHHTg$9lDt0PbEPIjtb5IPsjxsKkB|&Ne!M* -z71{T`UwPg^n2Fd9O44;qaO{*g_>CaB-X0w5galD9rC*k_u!!Oy<( -zBr|O7FA!+Q`e_N~gCp_v8ATw?4OunIIK3xRbz*gM<2p?wp$Dri7zq%G$YcBzb}&gB -zkb62vN8yJ*LdXD>7)nLzKwE#)oYy2z!{povvvbqxIMOIs5^v20btj%{0s!)6jP^8p^-JvX8=eJfx+A< -zM^Ctn1)^b)F)Al}3W3=vfLe-j3!pcjI*o1BdRvG*r@Od$kDBovezFm0ov0KpYJhr+ -zRE5ofurl;d=9~|A0*fRXwd=WB-|`;?A0eCtFb?jg67c>OO6$FP8DEnn41_Hd}RG3Zw#%5i{TAmLznj?vn=7q#pqR -zz5w>dwTMyd=t)*ugtNDT4b5gTWv>jyzGh_Et_26EGdI0FQ6(W22tF~z-czunZ^l5s0w{Ssd -z(*zy>rqsNI2-Oi&h7=YGt{rzDRO4C^W;|DPkUV;=H)FL%X?*G$N>t46cLH1q?_=?H -z=o*h@)S;Isrntbf@+Eg2lYnD#IGC0aUfhOaWK2HA&Yn3 -zs^*sn*%jrx1VC5$0CijEiUsT@ePQ5N`y}UWW-%`3*X$Pjmd?Maz1XxnKQ!!sk*hAa -zi6y -zBMr7W14;tQksRbjq#c~L!J(TM+3Wlj>#}tq=<_cKGwQ}5O9&${@-Q-+#w<;c -zfwh#EDXPc(p{u)^<13El`tYT@7>z}OqW6A99{+A%)~yE4YFj7Iq{o}aR4a;tgqHy3 -zL+&5J#)^%?obcn&u0LgEuf|Ed@)Cf>A-2WRIlvH>jSAB-@m#!2X!$WKfxrCY>=M3? -zScfNq>KaN1{OyiOQo8J16?~Pz)h5}36EAf!$vq=m%4Fs)Qw^30x{>7ZLI{0_LVymJ -zDf>={j}MT`-v~wqB8ID8BBQd)GF*uhg7$k!$H$CM=rD<@6318q7iuQp+=w&y_r!zW9FXvP0Km{y|T8^u7K7`$i@b5#Brs3s){U -zyTt|@w$;c#?TAg!yzj0Z*QB%s#cx_Yhr3Q-_A7`A9dJRpZ(Oxt3>QoD>Cq7>pucyM -z;6Yp?-Vg?}*Bs^|zC#@#FsyE`?oZKAY!O{P_#4Gfclm-&$0ngH%;2WH^m^(6*fQ5kaoShZw+&-^rFiJ&%mxxiIz!Ni8x2mF6{wC`HQp%0Vw@x;aSR%9>Dgd -z;B`GCYYy2eKcEvstB6!Rs)!0or=ZeaE~tf}ZG08)a6~XL+hXf%62*jbDuZ!MiNhfy -z)*+P=JlVXJ_&!Y{ekl_L_a~Yyr5Xjk#$>`1^gDV~E&DRp?&HAl -zXMaSoYZ-Z48_bt_Maxa*3zXVJjg}2 -zBJ%x;iOj&4yi$eXzn5?xSiZ_RhsE${K?LIQgf?`ML9?em! -ztCUp}qSL%B6Jo4abkbmtPW*5kvGYR@bo*I#yw+{FAn5;{kFJ)7fc|sH%3Y@L2$djO4>UKo%jiubi@(0SP0ZpH%nq9*Bnk<)06ECiW -zZG}9}O4x=YtKKQepTR;KTHCDMT+PxlhawUrbxnDpo?I0!|&6+4dyUWs1OCZN@{X1V*p3ou&D;Z5eoe^tZY$Z^b2Fw{>W~)S2KUIf -z!TpGCf%mu&`dOcPh|!{_^RVb9qvM{_VDb#w>D>IJU&N}+qW{<6F8Tj5xXG9J4sGz$ -z&zqs7-i!fweU#sPa>5Ov6Np1ld-fG&;d{A!e}A!jBSXY!duoFib&3P4q5JlgoHy+X -z-q=ugU%}bG>;0MY?a&df(f1g3f^Qp-2s6_97kSnK&$jGC4-Jf~RF{m{s?8{H04JL- -z5Y=s(ZpwmQInS-#MZzj@`&c?nWiXvGpHyWct=i)aicW}=6d8?d2QOj^h-X5C#FL2f -zOvqvHfF@=uB?_8&P?)(5X6CP4I`$~l?r4yxN!o?u%Qfb3+JxSrAIp3EU2J}muuls0 -z-yolCTT^ekN%a8SQHSBB;ytS9>y`kYmG8}XK6pS3FP6dod@c95SoO(;TvUGK%^mON -z9qg!X)ddn>*ccb7B#8+BLH}OQ6ZuEoUKSWSZ9HM5c-nastg#gY@b>>8xT|-^S7{9~ -zcIc0`6hz2XD4_UYhmxO;(mC!B?tc1=POZT}YqsNoXO9N+Pw57C*<6V#n=qiXo5KNv -z-FDgVfHUSQI`DStHvxIGqR*9sAH@CG<{qTPg+?07+ZPoub!Cm(+!L7%cDDW@A -zo%R1FxKTjn{}SA<+buT#65Ow4*2Ok&fE3mRFJ;=+#x_zhz`Zdh0je`3G$@(!DBs(Y -zi>iGS`UTmioAxj0Lg!ysj;G17O2WI9AfCD`-xJ>f8C*8tUW;20xfs)bQ+z#Qm -zDHWns*g>PDYfSuuVAbeVol>R6DTyHza`unmp>U7~AE~`=co>?1`x>2Q#L{&fM*Osq -zooBYp_5hV<)eOdq4NryzS+P-fxYSa8L4se+Y2^)#zbW(~JET!boXl#xD$#4S_8phY -zmrw@5Zqt*flR)@CS|)21BuZ$^aJjtzYy0Hz-e!Q_`nZG352LH06`k_ViD&tbY=GCm -zxeUvX3{O-;$Z|J{|CCPwu4$CtaTf -zKR&>vj*1+KE%ZPefdbj{E%HO~WBZvE>%rjzo1UJQiYvCcB)@ -z7awq|R#?01rDeb~5flYh+crURJSszLLq<`Wk42>d1(*uHk{dyoI5mYCaonm(?T=uG -zL2h0m&5}B`l9lxGtBr@k03bfwiuYFgT_Zsz`%ufbXz>ZyakFdhTgWK^>Nd>|8QAs3 -zq6#Ta;L1Ic%O{8JAhVNnHq%MDihO^wm9ck3($9rJX?XBlt`M^@!%%WGO02Gxhc$14 -zKw!D5{yzk_Rk3H~y6nTcQGwmqI4S9&zqTl!MjQQsvTPYd$AFputJ{Jo|M7|p6qh5{ -zG%u9EgQhCW()un`R(#pAc}nuUYfm`>87UUn%KYcC_qmQ5Vg>ivr#>YhD!74%QhZzE -zVms#v_&Zo9jN4qJ&3c~#STyLzEz>pdMQ8VHFEx=yFK4{{DkRy>O68Y8vPXzM;T&Ii -zItHz5SnR@n`Z0D+U3Z97PJ2B?@G8+cFEa32X&P)Y`PIf4cA{-LjXbZo6aZWw%eqaG -z@%Rl-5o!VofR+r0-tMv+(YzE~e%~lR;awtjk4a}(CHjeg_P$m%P^Vim0NpPKilc`C -z%%(e~XY8>r-q;qu6{#ATR?&S*=|iQI9DC(`jO-B`ZGG};8mY&Z3A4+<0(p$ -zl;1i0>j_@DX3MB~u&rnc$>_(_d#^^9s`3=f$u!mOxs2~=)?)NN;fRM#p8MxqubYmK -zvRydvgUgvW*vxv{fi$R=71^veIx@)YS$yCi-dYh)1CPXTYHNDN4EQexRj?9xDDm%< -zg7Tb51lURL`VPk`$BuBRXeA8Y(R_>bkbP5y|%`cKPD3{q23bP6TIz(3PNLw_g*#JxE* -zubNuj`d!e(gS&_RZJh!6vd>MlH6*@9LtgRcasV4WV${2}7WZ>8YH?xUG(G{a0)V6%jy)H+q|QY%kM*M45N -z$DRJ_#z75(G)~xm+>QeiXPSl4S3tfVnv!CI2jn#A-b -zblcztfG`p;YJ_yumU=7aq7NdBVxeHcK0Gaz0wVowaBKfHxMd-vbwhUe5Se44wNeFH -ziVgM=v;Q%;1LOuwhlE*tFpRRvZj#O&MPCV*75U1FbZ>i@bd|EXk);%ckS -z(nmAaJ#~(e-W4>6a`(ur?qt;kS4}1|mKYc~DM)H3G9oe=<@1GX)0Bx-!co?v%eJX& -zaD$+9NASZkHUL^JCXKey9#H7z&Z8YS{>KCeIyx{d>^$5}X+AG@Mo{9{^@^_hM%OJ+f -z#I6z15wZ_~NB063mL!O*yv_ragcCx5ODsr~^BGT(dpHg2ffdr~Nn-Nl7A0Y-L@@>) -zkoXW}X+`z%Ew9_WseOiDTE@X^+PzW>!?t5D0flCg`pLX=Oe6-P3|h73Tluw+Q^8kk -z7F23Eagq2iJZ|!sU@tb?%7F;!L>$Pu*wq{Yn9ff5?>PJ!hDdt%fs38g7RAf1yn;o4 -zMzNVDVAqYj>}7eHWAxr726IQ>IX0MWy!Cm^b#tGS40=3G##LLy=b$8K{IQjW$kF=L -z6v&3gN91F*hhUUJ@SlbrwO;LJam2;5T> -zVUH7S2Ds&0vWzt`8KKvRKE}-p2xb&)GfGDK -z&x$^Ey*kgWnZDe=26qMOZ1Yd)?}gl?XncDfeuqw$z%cVsG~L%05%WC7`?JA} -zmT^M1>o%thuPl2aZ7M+AO|e^sLYm`1oxm+mu}3(5L*NGmeqUS -zXs9^DnVXQgZM8B9yMJ{#aZgaZrt0;f*e<|j&8T5|237th%D)CT9}0N)KL$54t`iuW -z%G|fXec%^B_AAfO?-T1)R?Kt -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 -zi)6Yq%CVKgZ7Q&Liusw5 -z?pjAjWsU3@)XHLB-oKmSR&y%t!s_MV1HF*uk6D!HJ^T#uRB}}QkYQ)-`uGrNSiA>J -z%d)_yq^iN>O1Te#1iQg0kDSs^BeK!%c}^7aiKZSk=HK4l_dL)Ul*^ein$TZnp&gY< -z2+Zadc~MF2gdM9dU_*w~H+gBkYlb%|b>}>i9z@&2buO20!vpAB{x!I9{u!1HKBj)H0kzp^?QW&PGj!i=VhptBPzYT7#X4;jAvY>N{ -z(f~<>ap9bQMa!-#{mw*;HAHVyi4WN$M#fXB*)vzMCTwO76?mDg=7gKO5GoAFgt -zgiC@k<+^dKZT*6W1}A -z`=hZ{;|Y1v*K)wguLYq=%j*T-to -z<0&m+*Hxs`)5ey$ViR$Z;>Q}qDz+voMear=amRr)eqvxM^+C^8mThUvAkPDJW;b`2 -z{L@tL%~)5vSz_O*jJz+ln*3pJkL{lJ_!f7u(N+Qyp#^qREQIFJ@t36UBr;oIDud0}>=k29SP$;m;DT7W&4WFMmF%j00d6F-cnb@-$tEK@c%m}emT)Y(ai=ZhF -zP_-X6N>_oxY6nF7m?{kHh|&bqFOVHpCm()KzGz_XH%`;g>f_erXi7bD*!{@BJyrL| -zSeRS?;%sa?V6Utw158f(c_R_OYH(x3P$Ms9y1HXH8JxT-C`rReGj|({GvdRaBI3i( -zUoRZmck*M6{#fgi6y``;~;11H;DKlMsjGrlQGMIUEUE% -z8*$Uv50Wj|5Tg;Y@l149Ie<3@j)az;wtzJAYA?;Kh7us_z`{Y5>5p3uCb}*XAjiDF -zxBut`zzjyBT!DbW@(b|!IU5L8@HNzpf1X3}7THdS`vBbToGV2?wX|cxq`^7Oeff3&$Xl~42+UeVgpLaOj%%&3V44J*5Kd;XUqY(qaWBt -z3|DTw0Cn5Ne930N-;z(H@le-p)u6m+$=?2~p)^xV8boc4e4mgG^o&2yeSppS`PPiv -z_`7PV_G^dzx2g^qS7o~MJd(i7nSj^e#dF00=NeY -z+@O<0fV6aMgh*U`sAm9V4SW#(J!6 -zI1ymLnGO3o2==SEClgDDzWH{r=Uzwk>Vqjbzf_lY@6?S}vwMOZ8i98vrf$s;;Z(ez -zkO?~0ydJ&ul`*32C#of3N}LbbJ6rR6WFVoYH>d%^Ouq49f0&Qaw41jFCaOs_NfBp& -z2}4Pp*94>LRg!pSQtwI5%UMWwIuc7rM>B${k+RcCX{+@>pD?xIcw`x)5*rc;xZ<%D -zWaFEYS7=UNtPs`l7t~LZB$Pb>7XVey442b9le;qnc+Vcg_eof#FB8{e!rNLT!V2EO -z-l9MV{EY#;P_Y}li4Pz;Wr$qfBUCpZE>r?i*MhC&y}bs3c;X??(8CJ~J6USnHz~Ec -zJkS3;D&P&=olJOF8R)x+w7DOw!9N`RdUoaFf2tWC1iy9cGwSN+ki~Ru`p4iNG?(PJ -zYNJ%$7czsrLfVY#y3$|e4<$$4#3>QbBNE^3V#bGLJLlft=f^34_pHV0YN~>g!<#@Y -z6=`kUX^>!h@r*+G*^0U|r-@^ecZBpyq6;=jEw-wU9<^_f&`jz67r$IJSVst2FQy%C -z@b!7Ab!YyTN-XgjYh0mP?#D?}Bt3{jd9atcY~?YoN96+bDXc^QnA^xOCc7+-;udV$ -zb$WpO%5#$otgJ{}MO~69gmj${xXs~vZN&}<9?x&8A$aAG!QbK%d+x*UjGeAXC?|4z -zD3}vl{9YOv8ZQfpo{94@M%N3=B^E&}zL4syrXvC)SHNdr3fXfwz2aXM@7Mtm?HQ2`Wc#d^FkCF?Y?gEKo#TWrv{2sB_I&9%gE8`&g- -z7L;57t5XkuTu!R&fhc};{^Z#4%xHM|)ST%>PJ>g{ct86@%d{+*)0yUytz@F7dK(XF -z(|gS6R`%L>mJuL)y>yw_>h7VwxbDdadCqyaL1Xvs`s10g?SqQ;^=YBAtJCfL-3j!_ -zYwcHAd04YF-jd?kvv9h8-s5HX=koXpk7@w%xMf?<-{t*@W1(cr`>R=K*+z1$<(gM! -zyW8N)TkG?Edc0-1WgBn5#i`x<-Q(ry^}MA=r+a(*``h#B#nsJyceGz&M#lQ^<>WDD -z_p!YFa~Yo1N6E|Z)4vl~;AtBBf`?&`xC8zN -z;U?6Pzwi0!nENx;_;qq1CF%-5+dhwk}G1!?; -z^TT&K>zF}V+Gwqw5Yl!P)jO=x`8so)p_vKd;7qzLz&Locm&y#}KGV#pneVFX$C#|q84 -zA2`nfQNRlfvhj~z(4eRz&d1}L?uQi*&UJ(WGL>1k5tT~Sihj{ZPPMWCEcx1)eJ(LN6;1Mc<3{Mzn0|^VN>mifdFxe`I<4|HwEY -zH4MfgzO83-8$fHAG}T$JWL(1*o`txH$0D||5wRbhMZ%Q>AWcrCt)_N@rAbQ=Xz1#B -zv~nVW1M)3kV2tZ8l^sPh7tLsnC}HE6p=BQ_I`y5H*o@B||} -z5sI_XH5#zZ*w;VEw)&Bq1_6p>XPm66K(=EsZY~lJOB;97li-AWK{R=k9~ON -z#nZ7hYP?SL-w5}~74!*djw-=2NdEp$HJjBv({_ya?yE9!r9CDcgCC{TmS|z5804g$ -zDu=wmF*u!iB9<9-EU6HdnWP{f567i5?k;e{rEBJGXb_0?xcN#vu4ZhfHcEOf;f0THi5eFZ-JXNRzMYc8QJY0EqGM$C=T#?``n -zN~h+>+QyAlg0cFCFL`OvZY@xcTWNnulQCeXXNIs%$P$-%VLOH12|L^>*n3_cra#i8 -zKQJ#9`*>!v_RZCj55w9gejLBse`(mqw6uulN+0`*mmgj#R9wD&(WK5k`0y6T@OKb; -zVXM|&_H6EZcDF-q^R)eO{*<(& -zwc(%z7|_=nG5+=s!u{L;yxVM$Ljbsu^x~|K@{MrcJiK3v`Tj+?F^S~zXRwXNh``YC -z{WaX%zZ&4+jiluTA7VsT<-QT_yln35Z-m=vE^-#k0cl_$69VQRggcyE=O2U{CN8R{ -z{6zy%`5WP$@3`l~vBiu&B?s=O0gbWdpg8Iiag*}NfSPAbt<2}VuCwGw*9mZ#? -zlL)8JHS~vz^d4WGQvV>_Pm(4z*K^B0=Q-H6ZfGH|>wlic`E{pt5r#P1le{ySUevm8jY*6ZAaYmwYmKon`hZ -z{_N=@0Jj=~CE|(zwO1G4e2dJih&sDnb=7dmx=(nq%IONqs7eRbnRaimz=APh=Ip>y`H~# -z;GwGNU3V9pKNWzG})brscRmcfveh)BRx2LBO(u(X|c+{=CivUANaF -z6ZduZ<-Rd8ufqPcF!gkj$tJGd=BpaJ9R#@FyC#&DET=_qSi!--+&kHenMY_??dTe? -zptg{1P4}gDM9kv!YsY9zz?@T_m2^5yBLOnmA7=$Cg)2AD4Z0r7ebaCq$U5oQ;#=2X -zb#Il8eupxq5oLYI&++vP!yZpc>ssyb<83dR*P{bJ7=*D#nx-HNY#!@v^v2$yGJ5B{%I7@M`9n`vnAgy*a<0^QyDJBV1U|I{1frC} -z7~ODP*zLHOcsEW{9$xv9l3$|`#KniaXX-L}tvh|XsePE=y}#%EMmU)722s7Atwmof -z$Z0CNYsxpR7S;T^M0`~mZf70@*QKaLCu}etk(M?y-UjT7Sd9SXR2(}~W>08#_Df9# -z3GeX^OtI90#;9@#NCxHHit%oH5S;dja3Kl3DvBiy<5PSrRq6fVqj3#MnD{y3Qp=Bp -zS6+R4?oZ4O-g)bE%6V_9Q#y5Qw1X(@5^2nrgDwgz0nG1DmLG -zQVife^7ahOE{3wyl)B)_D@1^`)}FS)1#(I5!MLb7khV{j)8ML9=I2kR$JY)tN~X%m -zyk?rT7!i~={1{L!J>!Ob=ED{}xFRor{DdFLj~`NaY!2-XjRVs#nxdk26?U`g=|brZ>te-8`rW@38md6^L?{j}@CLftbx!hS!p|SYu5>Jai=dc7T-)JQgel0XP%G -zt>k7t(W{R7(cZB;Kd_L%_a2P7;=LU(f0=uY-}wnrS?xnLPalzwCE -zYk?|{DobTpq@A(Uk+2pc+#sr9u2LSL6 -zPEOYaAdPdF?Bz$O)n`^b(cyT44B%=~YBay(;GGexmi~Dm$m}b)jSr;?c^c)JQW0o* -zvH%1>gU%DDFPx(5l{@e}2m2Xb)U9XcuBo@KjP%0VCtp?J2fO7p@AsHD0aGfGVc2hW -z%1}_eh3eyn?s#Qf9+WYDw<|%am&OdOP{k&o!C1 -z^Q{h*lc%*nCx*gR;jhAN#e48q;TFQ6`Bu1l@I>uAeZCd$*t@^2@!+mNST< -zwp~Sk&g=aj%JA{{H6HHP*M~w5RrPLdi=K}gX;p`9Qb}yC`fi;kaiZ;aOMua1=N3tr -z43oaEvo|BPg{PNwx(km=_U4|ulrJZ++dXbB*CdeF6k{aczOWFwc4QYw;!mFD5S{gzS69(~UW -zZYZx^3lCN8tuYlYxnhAE?jr)aA0_XP9hpJdUe)Pcj!9E@c+Vy`bJ4B1$gR7=-k*j4 -z4_)^Z9f-EAi#oP#+p5^MlZtKIw(X>1+qRulY}-l2ys0_YUTxoV+Ib((qqQ;m-@hM1 -zO=FQUxQINO+Vb>y5kXp`^cFX|FG9+%H}GA(0Nw?*+A}Gu-mB>yNw~@}j@cjIWb&fq -zE)tBf5)#Dn)dFarN@#fZ_~S+Z>679*!lL1wd81_naE-$@hlhNw(EsY-lK1wmB?kZ& -z@=`{+=ju3mc70e8CU&9>5JszK8e+7`^&?jQtua -z*!{%y6YY7N{#_^^tkVqgO+>ebK;Ndlj|o2C;TAYlC9PBQ1K}ftE2!dG!LO(Jd3jdq -z&L#6T%pB@}Dco{Tw*R-nedj&>%bB%_cg8n+l(w7xOSocr43-3&$h!K?spgj&Oi*Ac -zc+PVD2}O_3olBpQ;IT{{z>-@7iB$WjrKRar1|!J4@2Wul>$7p)BsH(sk}(v+Jlz&z^NWSzM0=(>p`rCgz&yCrz-uKrPJojk+}*i -z=7R5DiR)*XdXCX#xIq%;V{Z{z2sw83zLV!V-EHkBagCYidPiXdjhKDzj8*2=jxk|2 -z7cb`Vcqza{2Wb*)18T7|j^$nwr`?J>jK_Tl{a~J}@-9{ik{;xFy$5*}{R!*2CwYO& -zd_}NundNOrYA<>MZW3z_JJjUL^WGb38!WBWp2sTcDZukdO7@Tmx?f!*WgKCzwArw3 -zpx$AyX03k^wGxD>m`A46Dl{FDc#p34(4~hjK!x97!Q6Zksp^Z}wD>B%0OLfq`T7s5E -z47`G#Xqk`N<=a72;_fJc44L%6G^npK^&{AoT`3R_VP};4PEywTiZbSd*J0azUhq8| -zBy|chSO -zdrq}loFiHzZ%V~RE_wowtffSk8xN`jl4$-dBrmvs0#5?T7PiTVV?`oE+=fF+vaADr -zr0ifR{++1;MSh@V{CJN_UBU;}&7^vw1w%Of@J -z+|JzNME*om-wHSHpte({g5|fu9fT?}>pW5vCS(~A*OcIVGj(VCR^S$+fl5PY_ADLF -zozlxi*xGf$OF4eAROLsi`HFYuy=%b^7QGCt?6Di_rwKQU@j_08zS+IF6!^z7GNg4+ -zD)$JnZ2ri$`fXW?9#L2lX-f11QWyweRi8J>fl?9$c-m-kM8I@R><(eakYHKvU_g%i -zUOveKQ|(G9W|+|--@I`js28bJ%<&vO(wFXQ=L461>j9k~)82T_Y`eePgUO3_ -zyFa*sYXOM&d<^>OT#n<4GQ+Pmt8%=!x)S#z08To}6{Cb<9Y`p)*hoaG;jGRpW>W?Q -z_Y^iBk6*G2iS(*00xU<(#P{R@L)nxPjJ;NRe9Re%Ile!8sI8exNjSw4%@H5?;p!n7 -z6mVvY!eTmn$AvuYQ{o8e94E|nDSNjN2X#Ij%4r2#$&vHmK16hCvjhGj+-mMBFQY&R -zHy33Vsql-9%cU?PQApniH#eFS#Pi64uhx;=mrjD=0)mgG+n=tBHXm-yhn-cVRC@G) -zn3Na(TTS&#W^iL4dH=XynU2R!Nc;|5eclDEyb@M>;AtZd;M3>e(A=mv11Y}^EcN7n -zm;4vu{_~A+PXxq$BiufCrRQ5Kqd0&U_UE?fB63#;7$fdQ&Y&z54&A?LzWmg}tPUeC -zNVq}K01l;Jn%}1HfGsVh+An`Iz~a|XR*(@|! -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 -zWs3L0B7k6r2fxZJ+pF0;29p -z{2>J?$3s3m?R>hK8xI90H=+a$f+L99GQp@jtv`;@NTD04Gis+!J3?W{>PeKKi)U@F -z0QSPFa&hYj=}>j19VaFiyo8PYRo9h_0M~k7B>+8)(_uX3rqd=cgRUlN@;*>$KqcPJ -z#?T}CS+xol0MKq{JI<7OQ1T8F)9x6Z7_uE(oj@J_o0_Vw{J`qo`x~YeSjmeAHkqJ) -z)n0r#31$Me8g=0&5@`zRCugkBTo)K?M4+vu@cAkm7mMXZI&d-(SYA;9ax4gJ7=#K1 -zQtJqD_Za0jxec}YO>R5(L4T9mK$ZU`x1WUmOKvMf$tiL!TCmCdCAUw3KK~)N(-8iW -z+cAI1?FT1KkDo)|HeDydq_Pm1~Mi|H^cQgQrM!Hsg -z*;2~Vlc`)r=Rf=$RInfw(Qrw0y2-HpZq#h|Rqvv-vo -z7zR$N!SrmasT&ZkA^ChhtkcZN2{gWzD!K?)tix_wvx7TT@hIU6x!t9dPz0@p0`XBI -zmU)2Q!PiCbpd{Y)sR9Q*PTfD2@BF+7j|l -zzZ>%=qf5*oX3EkU+l2T$T%`dMSbEtn_03`<M*au)JQxoWHVpCFxryjD2R1@SxMHhK+ -ziEL#A-nln2D@&mP6r`jdvH}4Q>MS13kyhrd+qV-EbiT3CoS8|hsKogcWDw2(dL3U!M?=>va=VOgkcI9 -z*7dmWWM*;T7Z$2xJvrmc7X5@6rA?CIJ2sJjNw(XwhT-%3)Bu{ML^B>{UidMQIk;Pl -zJoXyk-{_>I@}s1ooq05sA0BlS38$;^FwhOO1AhbM>}RRK7~{`d6s~=Q(m6~)DS)$< -zk_K9&xv3t2L=z_>tyEeKMjxyaS8p;m!2m`L&7mrQ< -z=qsE^6zZ;b70m$gZ0}6QaDIurtYoAS`LSOFpQNVMYP|MtNb;x+7D@QdVCynO;pRgk -zQYUxA@%&Kv4W*`6Jd#-(mQ<9kRa3xQ>8)jq3D>w>%MUdV8YMmmhUd$eyl%@4PalKz -zQcfTnxto|~tOxwTr#QX*b-{qJ@`}8Mxg`mO(}qU}qx|uGYwuE=afw8Bnoy$cv(__~ -zV5y*9T>VcQ>wgSwpqX3)9p{35L^Qfoa?KVpC}i}InfKn?d?vZ{gwA}ZN4PY6xq$g -zGDg@2I)|Sv%|TkNMxVZ<2Bhcf^gbh1A7j=oS*jd{wO}6UblvpG_=01HfY=>`{Psf$ -z7xa;f<4sU@_`wgAQjeEaf}-FMI_Zj= -z_>zJ*Y{c);$~LUuc%tZ~vqm!)tc&c(6EXi$S6y$+v<35Iel?{Ki?f*5SG=%1 -z5Q4s11@7LHEDt1zt%1#-sQr_xDRiG?{6w%VY*740k6l*ollfYW*??f5XL*<-*C*+YYZz -zePQOKTgzv51KOYo`Q+U3{?J4ZDqHW|_?FOI*3Qbv?QGvP)4J#i8&hhcnMl8Z6iAZn -zV#o86Wi9!4+DGIv1J@x>&Xhr3aR@WA%SuEaCrbf6vyRU@M}_nJ^PO89vR(O#rp_~g -z-Rg2b-MzvLD(t6INpNgUjMKxFlHDZdYBj_xs!5f5h0ijrVt{mWG8Yr{u65yCI}%A#Ild2K~y^-aexzXQ?b>sPO^I&nNF%J -znrdyxCR0$R&de_n5lH6(nl>pHyY7sYMwmEo(6xDHdAh~hvpj>tL-;*^`7S-yDGCO* -z-or$X8Q3MaF@jUu%Z_^-2cjz7#TTb?vO9UaC-$tbUZ9PAG=bb-*tpa}jijt?S2V+EjykB1kz3$A`Z#+}l -z9z|0)VNW+`0 -z@Fzb{a8+OwNm4%+e(O+I6-)I)cnJX-RlLJF1IL+$^D;%aQygcng8tjJy2XS`AJVNX -z?xTg;LA_bEfgk`Dgv|3S2ygztkNOfEpnaP9G&Q2SeXDV6R#OcBRI7Dt%jixJ!aZ^zX6Hy@i24Qk^r1WsS2D%Az_Ua?Y9J% -zP7^YWMmf@VK&KE%Br&^!Smp`Vr{HAu%ER<@>Dq?ot -zpu(8%?y1K;$GIh6K(eHfphgw$OuqW~1&FN28RVVW&#fHUNK4ciV12u;H64!;@fNFs -zmx+ap8V3PHDgNiPQ?4b$c>PVT+r71g$M*d?XXwi0i-NgOGgHRzgWFe|Tt(>a?3TZW -z2VLTTe|5h%7R4N*V7CIhdsq%cG;kjuU5rdYJ}iXhvuwFpq(vl{=YE8SD|-`MTow4` -zm@i*1U)S_puy!i?%R -z#JWmezkHNG&qZq*jWf&WqDgXx*h;0_mWl8geerEVV&?c|wBQyk1WAsj4%2x^srZSq -zl!ir;_VtEZZDWnlIweS=F?vA?uyDTmQVJ$6tB7W`AXL>kq5~|E=}J1D=uDJUlm&tt -zQ9PumZRkTPy16nbb^;bsd>>WCUievtPw8oFW@>;e5{x7mQ|JLiGncfg{SH`g&wTCo -zjYp9in`AT`;cYuAHt_u35n9#{h20%gO(Z_~*g08aPyi?279_LEyqt?H9wWiIJ!C48 -zqf%0TV_Q+ywTN(@B^#sEXqTY39(zXd-Knj7ktXr_AjxFn4$KJ`fltdvd4WkcZ2V@Y -zpOCIO-D76;=0W$3yR*n6{Jm&L1{b*sCAfK+um=+Z>I@*nvDHqkCr9?5a84s0N~atp -z2T1!XBYC{6@IRcR#1t%s)8%f;;H!Tbz8S0)_-~Z#Zv*27aftS5m;w2{qf`ZR2ID|% -zAIwy$sg}~@qgOvG6Je^Cw^!kaN&0XfwDQCEcV;d*T5mT%lE>oH2vj%Q<3|}-3Q^Es -zuSpU^^h^QXC+gGYPS{Xj9TfmK0cUM1b|a`1yB%b%5hEmRZL$c;eTJc;U8^qc=Belx++8 -zfgaL(2&MJv5!DpyVKL~VK6w|lUQ7Ra)>%T|6}#5(24umd=~<_UU4d0+4AcHGpHDqo -zo@O35STbaR*{F-O!KV=|cM+azjAEI4$7VO>tO?5G&Fq)MNBz+wCsH3QksuVgZBIo3 -zsfWj}|AqBQY@GmoTe%mdMzv=(XwR{P>$XYB2M6lzD?<{6?L45r -zioF@{D^Jk=*+pok*CNm31>bCtMa3)rtnqfvp7u{I27e-pD`VoN1d$=gG;ekMVP9JF -zQvcw|LkXjK(+(qG4Xpsb=esNbeZT-g@8~rXNVnyi!yxo}7&{EdYf9q53KY;>FheO% -zM;Y8Qh?mSBBU9@TP`b@n;2EO<0#k;8Ew(3O=*Bbz?H{3lfzMlPIlvO~ea$qKhKC=$B!2a;gg9@AK{0x;uZt+6G<`#|Q(gV_Y;KJ=`9(G2x$92V&zq -z!5|?v8keP3nkQfn%77v=oe&?d!L$wKgaXlj&U|V)#RQHP$Y+bfdY|=2MGI@wE^Y -zsP*TLrIS8ElDr$#qH{*+YMksj-=UzeTCPQ~9;<=+)M>=CU}gfGR5f%uW2@E1_Sws% -z?Jnv->n4%>!8B1@CqmX&+~Tj8HgN=#3426TWkh$JqeMqe#~&k$w@+@iKF-~1Vk;3$ -zui>L00%paw!HYYhnDcXuBMMt)En;C!0egc4DzWHKyMP`7%A%0QhH=s?L$}ywvzW5=EPb -zh;S%~gOBu1XDm#$-!1JH3sQ;NuW(Yzr8oMZULE7Z;3GI!`ysA;l)%NX{D(4Xffo@ZhDUtyMpX(+oWySL;(y`gy04qDC -z@ZM&CA3JzLiwkI= -z3l8~qZzkaqpjxx@Y(*ov=NyUBga165Zj$VAFH>5(>!qf}HslrfS6(wia{gI})QUJO -zHy4jg1_Ce@dZI9bIC5eEGvd5fo!lM50fYM9z>%%LXDu!2=GT;Hf&oBsww36i+5K6B -zOyQwMaMASXr~Pav!as*w6wrB`1=6qcg;g0;h|q~=B(Fyq(?)(H>1?KxY!%_|b}eK7 -zC&3600yW{zbMe&o&x47S1NB7xN=LU~`wT4B*icg_xOccTlT=hN9RQ?3sm1*=^#(B! -zb4A;9ljGyo#TAyHut^l&6|thwNLB`UqM383(_|WdP_412x4C(@JER5@Bx1O3+DLtwm+a04gWx -zeCZ+`ZON^V3W=;VD@<+4+sq&Dcj2JNKiGLs7n=zqdC>L(_H)u>>H*+iTOHf -zayd+Pw43FpM)=x4!=k_qK~{j*;?ls{zhk+CKaTzQ1UZ>8A?A^3*u?lih*olIoev>BDHj-?oXU?v0(pGRg7 -zg;cT3U486R62&4@`0-a*B4)Q{j`m4%_0j-<T}5>XKqu$lV22C|+CAy&ox0 -z12XTi^tND%Yq08^bWZX{M*om4D+4!n$*}ZESMUrk>@1GBISR64eZnHH^Lc+?Sfx;w -z9yrL#(5ua=#%*+ghR>MMr@5_*(wGqva5>}N2mWeaIg6v>rQ#_{jyxEr2oXvcu+p(Y -zDF?xe`opckNC6v%7n@y>p~RhvP6g}=R#7y*GW_loQ=Ar?un|&Bn~gkY;A9|^SHNA6 -z+Y^7#)?o0>ZWC>}G@03UkSlU$|4FKAtCxlbsRN_gO#91%BU -zsUuN&jO2@@xPdLT1}L@*YN5AFk1l?;=%u|{aNHM;ah7N`1j#+*a(nWZEh?>#+R)OY -zxy4gE4=dCJtf{)>B!wJUVX&tMP_z8N$m4J5qoUjdHz|(UL|+!~XaL}h*F?&zs;AfF -zwHe7}tzR&MRjcF+Tu`t0y<&M6gyW$#0ve}3rHP}R5)bh8(v97e3a(@gGD3>eWLXA8 -zEf!q}gNr9Wqx?06-(sD~(j*y{`5}B*)pGu;(rY~OO04oZ49q730y=T9X7sGh27Q1? -z!&LN=Vvu!jl~kyCKDM8r35cZZ4B}j4@}ZQA -zQ87Q_p|mS&)6_+3j?6VvvP_8`l$HpDyh?~aw-mE9$YwGVE3xLbRJJmbqiR{7Vvngq -zrpO0V{V4GnFE35N?Jv9SW91;;Y(ZyYUIowuy_4pjI#=Q#i+u9qK!#$r^-yQ$RCZNa -z)fkg(h#(h`fxI$;jRDhPqD=CfEOv33+ -zu1hyB_M)(FI7be(B+K^bI72W>^E(NsI9U920tU)luhFSQGB`*YKy -z0HwIl>6tq6>jIs|l5DKU1d{@~&YvAP{yz?hTWyR*ujw-vQq>qcbLchH3Nbsps7rN3 -zNiBg=;+$mrqY!`Vlf9|zVFQ3a)op0mORj2-z{8MIYp$FlTNe~1?YUaMWCigHBRb(E -z-+3LezSV6t?ZjpQS`_xb>bCN~>bBuckt58-a$DNJ -z>NYEfz`yGD{hEK>pa}mSFqxD3Sa=kjd3vE#jj}Ve=}K4K@AiU71w}`Ub)8hXVu>+qb%{?#%P8Zhwg=tkz`x -zRk!h|8~#qi8P0jwQ+p7YfFy;|Br{wH-HUMQB -z*7B9eqVnEUR4NY8ZW()1GqkD=UT7d5F`-~%+74ZSi#6~q$fdRWD`&4D6_vro6mh|i -zf`LS?5&a*jBvi}rj+FBpSqAgUntCr{flUJjFHw2G{B7iyIxe(XxDSiQ?16#_kVa6g -zfgh653GRR>hE`OtbKXKNZl6{2F84?QGzd$H`#B7+dw|9jF4I>u*f&qBmu(5b5(3od -z0_$G>3vQOBNXc>Z0C)6L^MbiYjwrUg4Zgb=7zmfs8ua3vEJ#}!$;Oos#c5ldtmE@h -zfJE*A+7xTgv>^ecgm+9;Z=QAW;4Fol7r{UGXg`&$M#v@0s-CN+m@t}Qd?YygbI@cx -zeawL*OXvN9xgBMccFUxkpdUxKFilf{J1*IOK$235@p_;H*;9OB26F*+4 -zf2?N -z=;DU_GMOpu7gR#9@>0m>&$n6nu7H~EF>C{HYmY7CmykgOK&L9N$Ebd_1-BG`hObU1 -z5tq#8m+nvMh;xF)L%v~?hsS+dMg^0b*)%1GB)!ugsogqew0@Pb$6Yg-jPIyn$Xc78 -zGyNWgN~vBY&0$Z3!m`*ua2ws}XhaAkb=`wP`1>rf$_I|BsSGRx2#7pt+&>$wPF0q` -z!g+CX0&em;|FqAQIna0{>k-J}D-q$xX-6+5R}lj4hzJb6zpqFU(u3~B=?mFmcNEL* -z&*x?^sTqcnw6g(M@E_O`{LPYXi$n|NK**gW4LheUM+NXg6hK4e_3R>Azb!zrk9uqL -zl6*{X(!N9?r6hT|KXdgKD%l3P6cbIC3-#`(&7s&=B$eIijf+Z`()s%miw)UGv -za^OK-dSZE&9@lhQ(jXYzW1?aAV5+BjodVD)Q@(!kk5kya3p#zTr?E;t?CR|lzyoN7 -z$37>6-zTr6yi!qP(L_;|UmNP4GfK%>ZD1HqFqrZ0GkbUu~E|k8_Db+!mvGN#J;4C5`0i+q5eHQicNP -zh(b%Qh)?`XWitwo8O&oisKi#lX%9w&8cZ3KVSSqAU_TH?9(eGlD?)Cv*coz4yqz$@ -zMDhD0@IuB-GC>(G@7r{Q*)A+XCeEX@^D|2`CCOXurg?=L(0gln{MOAL)1fZvI4$J^ -zl#NCElS2%dFUjZ6rk37F2Mno4WaVI -zv-^S8lCkX(7NryjHf)#G?@T>g%JeRi$(hSu!>BGba_~!??olQCB-*?TW}wouTzpm- -z4R9s;6CXiTVlx;es0COu{49>)xWlFsg2zD5Q>8J$6ge#T$jx`9CTS-ybWh(KT=nD2>ikRMLVsD^E* -z`;F2Ik)}&67Sf1saY&K~bfLz`aWsHFE2_?}-=CPqoT(e-z%nAc!U-w$N-E+9;R|~0 -zwAaJN#mti_cs}JGq+^eJ0dza)K}=Ke?_Pkm4+P6XmLbi||7epj?m7fZ?7 -zG~O6#E;U15Zxd0Dsw;}N`--iHmU?Du8?0xqQ97mfx5RdV2V-xJxw8CS|I-j+OSfQ5 -zGxyTVjX)-uDUBL_-T@< -za5rxiNO$Ta4~nF@rhLG&G}lI5S~BabjOr{6My`?(Us0C9O}8uk$IJ?z2#qi*9O4368C$MtoJe5>2c_an1eb(uFi7#91Ypel?HNamXF -zVn+(dUz48L#z7D+5!Ou1l#wK~b1{J}^SgJsn3DOygGpAc=}nZ+6KfO| -zTh-psKd!H^fAK+V4%KcmzhZLhkONV_c!*P5D>eFIy17hWVpFL(SO0)XYp<)zLepo~ -z{YjNp@rM$^W0z+;#F!c|FGZsIVu0>Y7p3C2bwUO?)1&NIhWNEXN!U%1o}y#IbU24C -zos#r#cG!)Dx|U|;dv2b#4|vr32Qlyl_hy;GTmm}W$7T);P>U`)m_ -z)8^C?mXBwoZjAvP>plo{GKljeh(DAMP`RNh{qUn_vnnut!DyIq)oDL0ei+l+73K%^ -z*gn}EU@DTVL)%rLkSBR}6z&a2%C*$0F@aV1rkv+L)#ION?diKEMzNd#1V2aBp{-_~ -z9Ri{;TuL5uAPdX2P<*dh3idE(+o{+iGm5VPo62+cZgI+qP||v2EM7ZS#BEwe~*ee7|B|*L=pfM?tHr -z#A`jsZ~AGeq8%Tz9vMaUSUcK^Wu~GPq(Rt&AyroU`t_V%XzU#m(-A6Ca^pnf800c! -zFZnzEB_*r$S7Y8`l_nRF)yK@z4WFpw5}&+w4obb@op}r@NZ+XX4`T_<;*reIQhKVR -zaanjC#ZnxOFu_JG^Ie1E0=8y|qdeEc+ND`n{6X`O2~Efg@kQm{HJ|a&ZfjJ~+&Unn -z%tZO2ZqHcb@UTAiS?G*V5QE+b$U7VOrkYVHyF~0?LOR6Ecw76Z#1M(HWQcK-LJj1Q -zB+F^&Z~VaJgTg0j`(J`WS*2ALLtjs|<)Ow`ETwuGcZwVAjB868)bSJGmX%Q4!-}+? -z)pOU*0tK)k3B?tIe6P(*V7ZiIMG3sM#C7eT6@MZYTbQI<0m`Q1a1dP?1E_AVJh -z(xdYC_!)Cc;rxbrM0*%l`@)iit@ARR9ttx$yr49#g(lAG0GX=x#;mpVi{7Zg!l1zP -zl^plw-0|WOw)Wc&I_k_2Wik>95fH0Rj2+*LsWvEn+d1Cz>RB=nEp13=m~TCba6to6 -zZ>spiAy~t4FH|x7jn*XU@{02HdA!@VTcMYeYs4DuRET_s -z*09Qen1szW7wOLKl44gRoY=fc|F7m5+?urKEQt;aKHn8RZc9+$XTNzlF5_s{`HbUv -ziPA_)qO#=^{KInb0>NFJo|BNr)^7$YWFW)3k=~+Gzv2{*FDqxovNDdd21(Fv<0w{ctr-V> -z$pB9-`~m=WrL%O4A7c`Gkb9`_)jJs;BzEkK(T)Uze_ -zh5Rh7n=HZzN1RdoC<8vM6Rrd=g`oU`09+7KgK$#W|&sVL>)jMm6i^sf`J(~ -z_Z-~(x%+D8RWm>~BHE7hAR(Q#pbUHl?&`7OA^I){#o7C5Lnvha8ZjyFfY3T1aOaLx#B77C+w9 -zeV)6N2p!otJUw!L9r1(N2&t9q9UEkS*NN~oolL)J?r653rE^58CAgW|p)Scv2r9xC -zi0|AXwN+-X%y1<~sXL=QN!4uMQwH~faK_;$OlXIg6V@8dEws@|j)_n~0Ot0GdAfJL -z*2~y5<%8}CB2xMa$5B?##TT)$b{5#SeVy^g#{0taRf{Zd{nge!kGTB>IL@-*C3?g -zjTrQ6(cVtwVRwdR+leCf*3gD7-SNCJQNAfIC}_tQDCJsC9>2Pq**()30))f~DVVM= -za*w`7i18&E@C{KPG4J;61FZz+y -zWX7RHS+N`^w!(N^_&KK-g#t^#ZE4#UyE=r-xvo8QjT6YEiemfvX71K0Q^+aiGf5Jx -z6QL<9JWKV(3h9x_wh_zT=fiO{GZ#DBuZi9oJ-6XEA_3T?5f0-haO$e9$=8wj_Lq~q -z5DclAD-rP7ST|1&-W{*O?fkk0vA5^2uwJV7h9OVvpGw+(!tnk6v5mQ;l_V+QynzE? -zh<>QY!w{Gx`@32A6c!9Fei((D@MEK@rcSHWBlLZ^Fzrno6V0P8ZBAyI90g#(t3H3u7{VhDlSV%7?x0yoLPse`>BCyNj!-cP%S@;Eu4!11W4 -z6B|j)x~&>9P<2*|b9Owg4&FaIa$n(di(#bUsTsE}K5@HEjTbhDst`-Ka9%Y?XIp|p -z0^6!%H~=rXziL-4ZnjEZ44EJdlyB1e?}<4m-|?m*`6!Y^<5N|e^lVFZESRSkUFCyDd@Isz4>NTrE3-wmMPl_+-6dsu -znKiy%c{XUGg3m6JKxlLxI|(4!g55k~-*3pO>`6cF1(|)<^_c}n_qr{OO;nN4_ZfAr -zI1?VCkU$XKoN~*%#1bG|JApf8&m;-Izqh@C(NUb$-*XgOG54WQNdGp#KW4-v)mazX -zGIQB!u)sq5sLXmI(0rf}EDIf-F$~;&1e|N_bt}l5OGj9}C8nGUi372dHO#X0?&c!T -z%t_G=RX3ociZMc5WOJs^f&?^9f*uyVt9$M4XhH3)xwwU&EIXR8woHU{E4zpoxB6wp -zUECyW>Z31^VbK8jV71kMILnex>@T_Zj=h -zgZqjnDsyX^dWtYVA{0St*D)0Mh(f|Mzs^L`S?fZw_obp`Dy3CwETi+UR7<;cYQ}{t -z+bf?~)4uou>22iwWZ%HL`aVmc!ONrUPXUhrg=3?7O#X|{@<_*w>BGZUvhZ5nN)BDa -z-8tFj_u^zXK+?a(Dtj#$iQp%>{Eu#?Q!zo`u2&Y@M!t~wh)Emv;1Y`^^1?+m+AWfl -zY{wi9NlDGy(#O1+d8x*a%F7qR1~ID#^DL59=8;K~Mb8{|E6qVWh-EKc2!g&@@T7Z$ -zSK)74>pL{0qBUr(bl~@UrTP)51z($_?AfDQ!oEWiT)p%@JYR1f -zpI>f<(i)=*b(W@H2hXVnuL-<1*EW{kRQhAyL1Pi1o{OBs!^*}!IxJz}rp}&`V&GQ= -z8b`FKN;ccG&moD|h!-s(#hHEL!rQm7*GahUm`PT3xe4h|mx|O)s+!n8d-81Kd#EZ$ -z5pOp&8^O~%Fp6pDeC?hzemkxA&e_o5wPw8Pgn}%o7<~&FFk&I1Z|ykT*CW -zl2DzuoLwoik4GPbJK$N`PK~D;>`z@j+z&*^8{!>+htP_kITYR5K04d)<>?8Uz*+`c -zn7)frmb|6BXTD2Qqa7l1=lJ09;`7`NuSD$U#hHw-^!U~{`7UDCNVHvIgYIvkW_C2k -z|9*-5=~!~ZGB8pit))r|Oh4blU^CZFiW9rK>JwXjBt39+h202^y+|fo?XI%vcyWf; -zSYXwNnXiw;9Y82DHGAb8({e^==pfE(8h~$%GX!=1pfK`NhvEM@ZnaLSG#?c)!FKVnaLyx=15U5rQhnN%Yw!ef2yxiN5D^^dx}i1tU_UfcPj -zZu|UEx1#{+_B^_{L(%A(=zj5Eb(?u%;z{IzTBVde}bHaFgdT%TiFmo-$QtXED3jx)&nL*Bv5bkBZU@AM31< -z&axA>{G+bYLKWL0GWRE#^DvjO!|wiIEg1j^w>$YiHh>5!%xXD46jBz$0P -z$X*3vr&#nX=o44jq#{L694h3zU$jMJoRk#k68aB{La96#liPZfub?z?fOyU{sII@5 -z=r*#@L}Sl%^LKl_$@zG|uZa_X+0j7~4%TDr0gMmUw|m2jptHlNmY->Vd%a?xw_EvU -zzMMW{W|Z7?yUG~MP`fm6Z=whjVl#E*-fIwWBYsX&tVE$#hruT@IET=fZ#3Ok#Kii3 -z?XvO|I$PMrHY7EZb*c5yxQEMN6}Od+06eR-I$ESUcz&9eT@&m<4fb( -zGEs{FM|PngbUmrIEK*_>V57?u2tc=WWrb|uTr=S%vhlvLk^rhPvJyNsBP`xZ2s=5fFCinOR5a -zKQo}bdlgfkF-wN`LI`_5-QX?TpIJS9eYz%ikMpCw+#&UP-t^?WI>m--a25-iiDC{} -zcr?FF`h3@`B>}`OCyNwhM&7YV&vjStzl5!ynDNlMd{(*{Rj$xJx6FX^vNH=ko;P|f -zcu6KZ7N=#kXg=~Dz}liUeTdj5Wxd#+ya#opX65Lxz2?7OoFVWwzj&t2n0vW5@(mDh -zYE{jRGg$Qq_+57`P5kIiQIhqVl -zlnl+#V^#Cm&QMaDw%U)DKj`+qFwi!+~1MsHTheGUKyukt*IKLCm>{)a@-wy6T7zXwMaVL*iel -z4?X&r3X82)t$I5~_jaD_$2Ri0^mQ_Y3xcNt)z=K{^KAQ>gM;sPqini`7bL_TRGTb% -zlk%gNp>EEW4j>DXv^icbE^%i`1fl3Y5$9Ny_2myh38cD@mO%24d8O~ed1dm_mvSC+Onvs@Yvz8t3@;iG77Ai$|w -ze?{w>^&Sk^+)qE!R;gJRkd|Mf5hNyqeq8SQ@mzB{;Qq(legc@=Te|>r`{`!+3Ul5_ -zyFTKkI#2$uxvlUdBi77P4k=D`hJ{xPF(h&E^T!(Sd+0nY7{%PsiKxFa5kRjkxiT>>P?VGPRU9oG%Hyf?wwh1883s}T0se#H6BlJX`_8rO?)h6 -z*WZfUSF5xwY=lvN*@{-^lVJDUMx>58jT^rLf#XZ$a4;vLx3NAq|Ll}iJWz!n<-^2gk^a?$8WY=8J;Zl|+~A$|Rhot*`w4zjHQGrBKU{N(1Ga8b1$Z>KV -zH?7_eRI&zHNtg`JtHh!kzu1i24Hdy`Gb(2!w8QV6pi}(d2bP!mY8067c}$j3c#(yW -z4|{0k>xjw{BU!!IFLrirz3JYi)e>xYjmUPUCl=S3!MsHXg_=$Ew8!6b&!5^Gj7>i3 -zdhN1vcG%aDEWMDoMe%S$y&*LypN!l&LqSAxZ3OnT-9BvV*v7x+plWOFE^g%YS2}`C -zJ7(s5UY|rS0XOT|Km?a(U9*GsiWRi9CGi>9t!{X#d0Fc}KaNI-2W<|-x -zmE9=+klR4x1YUIsSC0g%&-~n@1iXXI0CKxIZ?lrjndA?-ea=zvhujuyrUj7OMVsS0 -zPo4mB+eU`MJTq;Tw_~H(*5|<+=!d5iPl^ew46m1`?e}qZrU0uf?-cv!hXt{@ibGH4 -zkBVF%SeOpyVp}XRrfz?~c^RZ4ph#6haX-_TOnv5S+kKXEi8ap`8+SA};-8ocG+qP;^=j`EUDg#@xT5RfT -zwffFh%)JK(W`z6YZy(~U!F75jyiD-d-=}h;xsiibomG0r9sR@aW1IIKrZXO&PgPDN -zQnOwkDuo!?9h^IpooB0jzdSR*lb6$2PF6lLI_@^V1!G=rcmF0G;$w{ix|88{pH69# -zB0PSy;eJ~w-1yu+nQcE6y++>EI#)P?<%wrPiR_7%A$t8?V}aNeY3 -znNKZ*_Vd~ug5ezS!>oX-yLadm>d~+BMQKS?v9ZQ8QctFv)E{Sa8mkZsMEJ|zB#uXw -zk~J6CFx9BqD1*R63&c0nCxiZUPuk9(D7`oWrG=H`SQTGc@H}}L2=KR~ZYpFg61@Un -zA1r-ECq_*wW9EKlbGS6iwY}|AbO{K)(iiGI-U>8X7*Pcd?$5n|C+Z!7?5(_BuiCe@ -z2Pr9T9|O#7M1Z-?p-&CQw={|$jI_%cLE!}}y$|_8qyVa07hpHFNW++%W?3`lC$9b0 -z1&mI9smdoDwT<9I?TJQMN%z4T5!=?zU=#%Xzs>EaM+UvbUNHa2UZ77m=P8v9&KeTw -z*2l7kN0s=z_U>8>^&gK -zJL9pxY@!zzCKl=qufD%k`3Wan8`O^dc6)LkMbR(RafRleF&*(4N6`Y1+jBc?rYT?k -zA-DGo4)pju_iX-<+sj0VpLHQBf~mzlrgov(vMkVoZ*TOCtZdysuw{s$W~XBx(Z3P# -z5;1$0y=rtc4(7yrH=j2-6iyN_$) -z*GLNG3`gJGOgZh;hvVf&_79q8qhe{u{xKX*j_er?v9!6XnT_-ESBl2G?J -zrSEoQbeGaRPu|I)q^YA@NEVa?7ZGYikG;J0Ti7XGO;|dwWk-*z=-=woMw7*}%aVu? -zew$e`wFxHU*n0yB9K@&zn%T*%b7wL?X0X%sT}oJ|gd6E!m;7vE>8uv-o*FZDB -znJdBT1@KS@Za1EhmaLLJEf|{M-3{sp2^?6CWjO|ifNF_+c%RN&89VleK2yu -zGtC5+<}Ni~G%amUrQR5ogMD$YeOvvY%*<0Qkc7hIH6nE)W0Zxm44N$xN?C6~uQHa} -z6pCQbh8N4ab_J4v^n`la0}6`q%C()&60_jp=xmsfS9OO*m7&%98z=O}YN{YBdQj!u$Yj_SYad -zA=y+!;Q|8&AHyYmOs^;3Uvm58pj7Q{acWqR9#LZ=?L*KVo>IL5iDUnVF}x;obk-q) -z;cDD$hzvyrF)S2KfzJG;zp1zm(D&{Hz8nY8n3LX{)+dAuq4fxqJ30#8e5ovx$`a+4 -zx?yD=LN&SDu^c;X#VS+Mh<0LS3w*yAN=GUe9<>Rb+#6ae*Kp35VhX*opZ@Y=uOU-e -z#prH@q&+}sKJQ~cWj#Ms-b?Govu6(R#0o{`K)(%>ccIxN#Sw8{TvH*Q$KCqD*`#PW -zVq}7Bt^16P>dC5z1mBb1%$nlufxBUtZZBrdPW+Y>!|?V#6enx7FHWo#{a)PrMEJ-H -zWF!FT)k(LzTJ>>tNk$|JU)>nN&Nq^Yd$?8#*_hbm-i%~lHwGEHDOs9HMS1H7qkOiq -zmoX~^G<**B7_st1TpdE7kH2WeQE5ecrECo+CK!C~BhZhv3DM6?$c;=O(Ez!opXE=m -zpWe93snFS8&GgN8q1DKp0FB8dRt@hkVFBGbJCZr#$1_ErpfRNy3&l276%eJ#NaMO( -zB7wTr>dxyjcH#EYYxni_LVmOc*uL^+ZVaoP!KXjBivH{CWn7{>{XX)&&w@ -zb-S-6M&vN1`5r5Y8EEJ*>7WC%lyuh-3bScC*q~WA%A=qkXLmF9uD!LBgXDuFWKsLp -z;g|n0x0C;x+mTBM9K;B$pZvezm9U#ejSVmc_1!<8H@$98LzijL0}??S>h+r8<-l=4w$4`kjWgA{MMZ2f(JMp -zrt5%PZ2kCbncA_zP3rH3H5t2a_C`e1x)0u(gQ;}|mbaOsoEta{!QT`m% -z$QJAt{077g)CIivECxGSfmn14<%HmG@D;xvkMm1z#{66CeJRV>qiNeIJ0B;K!p*&o -zg;+!6x(;yvD4oB6TZe(|JEO)3GAm$zdIjY8mVboE>iv4R2!L+?{0H5}{)=umaZDNO -z7FzKj0nqKnS70Upx}BR0K)3I^Dgo#=uiRE*Vqfj|G|5eRnt -zazGqaqwwucXX~|OUkx`JBQlY!lNzW{6>*%7Z08c{jY13^t`E7eL#>}2t;qtujra;)~;_uBd -z@K6i{D0B4{hc|12iqSaMvM>l5n<2XJJ;dIrf%(lpgyDtLtS?g#R=t?-H*#360crY0 -zn~TOHXh(u>a5~cK=-!PuD=E~e0=j(9Nsq=W;Yf9MuG(+l`t`)}a0Pt_8#)%}Hl?() -zF#aYA97sZT3jq%!J_1vm;T83!vmS6ipfbU^@N(zu&)J__#D+M#YsfCF*|5V_q~t%- -zzuaJ?N`AP!RDp|O`Wr9qpwM*m{uNJxwu-AzDC -zm_X(CIpf+&7T3d=Y{zfh4de{>#BuCAVPg^!t4jN$ZX=pYlO+<7&d5-E7#iG4QiZP0 -zKL8ct*f~g<`$Q=g7DotCj~TLXL_eIIUce2GMgiqPE`ySLZd{qdJM7%;j8PgQ4bqrm -zgnIao$uvR?hEup?;}te=C*)PYr^LuLYsNXJ8s3&`;lIefqS>YmLpY{J?%X^jv!ZS% -z)$LjuO(bryFq};Ddo3JZ-HR2D9S^Q|1qnDf7*_AyCiVsGVE_psn>gk#gT7|K%&+1* -zQ?fWP=uNFf+l?C>8aThBj!}sYNlpFsx&T9SXzTnM|Ad>6zKTcIm_FCo#m@BDuOvzMIIr9zg)eJ8Op84kT{r^I@ -zsYm~!+hJxxPImxwTaN-M`(hY?ZZm9tOfoF%{RiEaZm(lUF9)F8n%p|NmFbjQsgl3Z -zwEm#m7QOd_>w;*KNgSWDDb^p(RDDBOyzUx9Ke4LI=hX8L1Tf!z+|k)`hHSGV2FB)i -zDE|np588)SbSHg<&&oLUuLW#q&!akfybw)1S+i* -z=d<53d@B2*P^7(xURGpQ1amnWZ!2m`C!t$Rp2#VR^;=bk!X6WrZ3bm#G!s(r+@)*#0)ymJ{bmxXp`+P^NIGnGpW*54!FA -z7u`k%`Gao%68_)l_8IH{pxauixi{X>;a;uIenQ;Y5h71nh4gSHhySA62~vO1?cV@& -zyBdIQBm5WLwwnQdL1n@!Am$2EP{@;bWqQ~brVNMpe8cw>7JyA&&I6#^mn|fJ&}}XO -z_b4#eUm?~<-8To-oUV?vy}#7H&gg~)TqON!>;5LAQUgG@=djWTc-_UZ-g?Me%Srx0 -zw;vVL&C&trb~6`0Z0u#>OXktcUv#_iJ-C8CJ|BwE&-C_K|HB!8Zj(d#)^CgdLAOZ& -z=yqJ2nJx4Ghi*&!gKj%Fr>|Nvjg0<(=(bHJ0Nv(5O|trnZlnJP-Ol<4-EIY-+tUDa -z8zQTd45T9ESFzaKzvwn50Ns|XnPjTJW>`~3`-^VB^!`P+Z&kj_P{EqcxbukpR_L#S -zgoMN~vu1IIapp(2oh1x#_b(0-p!v9g_1I{!lyo_OIa}}gi*AFH{fllB&?k!c{s-M2 -zQU;*gvVYL+-9PAd4glT0`HOA?|3$ac6!}2CI%69F=r$PIT`s-2j>bKvam@L? -zFe-}XX|&c(O|t_J0NsxK2i;yf>P@0iCzPwI2B6!>VgI1p=#g~*bo-pr?>iAa3&CmA -z9?*t36#h;V`6_x%V8xk<;!dM-z!e@hvPLZpjmep7l$x*9otPcDF&oQB!?YMG%dWR) -zOn(VKGlw5IIdNDgKP}Kjn4!K~%Y79oOTdL=F0pI8LKI1hwn*bTqvT(7JHixzZm<1j -z0h3llh}I#$VVCGcaRQ**@c*LQ0l^AZrDTypEtn@471M}|wdMeHJ2SdLDk{|Whc|j_ -zAI{OFROGUUuOUt}(~JJWZu03-PjNB^GVU_=#AFuAT`#YNDe{#_Lj@b*(wv*ksZkT8!@@^V^! -zz-p!(!dK7it=jrD=U&Yo5S$BuvXOgb=M}Rnot*LQHj(rl#m|V7;c+sFT -zA=6r=kVV^5I+}CfZ!FK0p8MNZhU|__EURL(hvb15;BH~l9r?Zd7v22r?6_AJ60Uo( -z2AERhm|Q&cNGyfzEGbhq7X@JhrA5D22gCW8#XC5Abs5zi^thG0g&^gn-`fw@kh{eqyVbSGtYKv*ejZl -z-%e|TvHX(O`LY72O0XLsa^)BHO -zlck!(kVu_Q_d_MG#c?HlL8SWwaNFtq190=C_7NPRTrjgqj9g50tyH1khiLbW8&`q{ -z#=6CCiIfz<+efc{QpO9|{k-{lzY%^!i)@4_I9QeGD8WDTW)^wCd -zQuF&Vv9gpH133SsjPwGmsb*F#^)KRYG*u|vsPT7rLjqQ+@*p6@rR<|M+l)5!vo`!r -zDK;xgHAb75>w^zD{Xeug!!wOEW1m32Su9e-2U8p;#SQ;+*HN#@F#l*;k=pklr8fjQV{rG)yCa6$_FxVz6=gWY<~fFoU?!HFY`NK@@4 -zmv}`gp__(7LK;tw0wD%gVar}F@Hmb#OU*zkLR!sds6NQK@y7|zM&dqo7k4lG9)!M8 -zU0kzZKxlF90CrvUz3$}{w1W9ZWhZoO^eRx&NzB7q&=YNhFO@;XJ_zC&ttUBf2YwuJ -zYf>G>mtTc)Zf5<%1;2+{&d%`=yR35LhxHZYASA92qH#(~%~~UeFRE)OsfzXqa-K8h -z4}l6GbaX(b>`o40$z0U2h3vwkVNsWkjmDBidd^65ZBOfyrn1eC0QJI93B -z|9P>-qS4oIX)OsM-mq!|7Hj0y#M|r1T)1`iN8dgLcZa+}_*dWF$0>6K=-bGZ7Wf!* -zI=G~U|IxQ~5_$4VWF~~=jwXPty5V6gVIix>!op(Wn?wX#sed_84Af+T90S=eoeAy{ -z90OM7t$i|w0}ufE_MJI9qDA9|_S)u`6w(xofB|xG5^BYKeF#*@SGkeJlE6 -z156?ZXPZ;V!2Z519p@f8C_a8XNh}aB_{0h2%SH_=NGQSMQr9etc1lM -z6%jx&h098YxM|2Z@9x<}u#CO3$Hv77G!ckV?y}if%T{8{%vqzx$5$^{fk{pjavLm( -zQz=LZN9Mp>B@}H-gT{kF092-c3p4#hvU8hskdS2{8WRy0;*(~hi+K5*PJ@pCgX+lh -z*d+DC>?>2SZK>ULpI8Hqf`jyjG@kBBUxHe!PoX*bl2s`??-HB -zngD)#nDyzW@=F~oWkAdA%Uihlq3B64wsJQ@yT+FLB4f7n~L -zVZ-LVD8yOrmR-e(I -zP|VR0S*@!XGQnjmap{cROys0ua;MJn%Nt4VneskjfNDCY#>4}O2k_e_Du4Lxu;1%_7~!w+Od~|d -zdT#h?|MJ@sP8{F)+Qd&wKU1 -zIscH^-Dz}^Pt(f_p#|{UG25$54+dU;_-%pp8QSZ`9KR~ij=%giL6N}6a6xx4N*0iK -zrVZuIa=r8svSTP{%IEk_4TtIl994UWxzGTViMA8mdHS(nB+9|bqjHC7A6iw#5hR}P -zutny=(xn}qcCFA_a-d|xG>0$@6EGVe1I-JudSJY2#DeLHu}R?amY$T2r3Mfx=tjW| -zy6g?&BX;o+LUU;6VTk#p2b--bU^O&BHyARIkSF81;8NFRI! -zgO-#Y{@Uk@Mx3YZXZ!^rm&9I$VIq<~*|GFnN#r|+T^I|u;S -zN>WI^fI49Q>CNdkGLx~6(b}Q+hu@Y{u(bIC;J3Fq|M1&ZfBEfxdma$dKm0ZcfZsm* -zhu@y5n4k9Y-E3=FOPPh@0{(8?8K)CTzGa&0YsfdzT-K2tXlH*~X;RgkcCh>18!Dha -zRID`CSlm*-GTKopUS0L+l;uL=5od`Kp`#qRoMQ9Ly3EBGK{*uNKQU648>J4PvzRZY -zuD!Jda~aHrM8F`G8_R&MX{#wx-nCwy1Uy80rm%F<#*Al6491~zCPOUrLPD}A^{lY{ -zSA7Q?!q!?XK){G7L2^%~+jIZ^S$I-7$ky_bafp@Q5Z}-6grt(TaZgPFA -z741g0z9bn7qh;f4Q8ozU1LdbK3!|A=k|#)-3?%Y5<|Q02`<2a2E&22%DsP{Lo&d-m -z_tB2`vfT@@#9q<~ALk@EBVdtCaQ)b`FggyUkkF84#~|)@2>A+L5`mGz-d!#fzDQgj -z5YFvNBt67?r{fkT7&|=MgOi(qagH-N?~S_W -zT)yjpO_5skd-XTsHiY}bTB*5J1~mBYd4z2j$ojlX^f&V2JBUiCq#aU|r+kT!d!S6K -zE0MMoO7MQRZX~RC_>BjSBcFyN1a;^;6g9V}ys4Igqianmg;(04$EjTQxpISOgc6|k -zv-p7zO;BD^s0v&-n8Emx+lQ+@AyRVzt8*40HVRz2D#X7EAgsa!IjSa_rfJ}kNfK)_ -zY{l)jdH9u-Z=tH=J;o|@r1M05GuteZ*}f*~4RFKN*nIOAiKRwoj7q)oBG^^pPPdr| -zht={MY2D3dELP>ucV!`#N1_|G3e^_i#m1F#a0qQ<1>ZmYWm23-3nWTcJ^Td>BDlSD -zyg*7_sBsrfh~FWKA$1be99IW7o6EpJB*-+fu-34f(Y2+QTrND@+8f%=vusYz;4XVK -zh3f?GBm(h^jE`iaXs8%J^by7c6}XMH`1l+dTtxrJfzRgt*z*B9-VLZAH5x`2r -z=b0SIzM+OG#omr{$zwktMIWDo6)z;1tm1~ok{EH$BTZeboy;(tW@!*4t1 -z`#FQ={SUw0{fFPqooN;T@Y_j6cEA4c+cBb6S@A+M4YG~dM#)Yr(&eoixzU-3LS(A} -zoz^~wFS8Mh9`?!6|FWd)2`VO#Zj)qQ=-CtNBI|jdi@hg=B`?&EX`+q_@V;=5U -ztco;*3JS805O#ns5b!JTk=5uxPMpvj)BlIx-be)S+gxZrD(=r-dD1@dIiP|!?P2G7 -zk%fwT$)!muD7$<>MkwfR0sMC8AAb8r`~Ty&p?q^%hu5f%%mDoMCRskVCBEolO|rf1>4r8o`|ajwdH1h7^G;J@0wB?ywHUg8b=@$Rqy!#OK6Z%_SdD*G*` -zyW*)n#+dCK)Dw0XO#;M{NPrBr=p?I8Wv=AhdhW;3GG3}-?|+pZVP(Tzc)lwS^c1=m=5*tPlTcjD0R9nU(}ZaNuvr`WTh|` -z$ePg177nGsaN`Q?;c(7{Nc%n6F-e_qpUj6C>q8&XDtU%ahOjzFZ?Zuh4^o4^Zn}M* -zM8$N!h#7Pb||p0aQX_`m!%3$?dKKuGg2+d)xV0DpThpyO>MR_V-bK|oe~J#C-!2EcF6 -z{1l2~f~1>Fm}jiz7gL^;^#{%*j^ANgp^^h@L+v6_AGq@07$OO&9bOqNT&nlmQmplc -zwEvgiHq4y?CXf;T!*5Sxt56hdN!%C0?fN<;tU(oSuZ;>t?Z8-?i(6w83T#y+#pn4BkDbA1^@P?15RR(h9Vm -zJ#DTnrp&RVkh=K#CB1~4jShHE!0q7ELF@x<%tKeO4xi}so<$#jTmZoVaR(_%$KMH3C`K`fB5a?Km4|51%Tg9 -z{)gX=z;R-nM7Y-ZFTYKlsP>27mIm)}!WX``@N1zzlk<6>TbBpOZ{U@D6n>oSs@~Sp`m&p(d_oMGNn2ALJGtAF -zYQ>EsGza&b&j0e;+W+OZga7i|+)zgRejXe~Fg`XI8q%~eOXhPcJK-Y{Dqv7{_GGSn -z-i?ux|MJ`PPVz$k@Y_v_#Q=Vr;SawZ=~u=x=*(KpAF{;hTffMO5=yN$)Mr8guIUV# -zA6v;dGBp%1W|a3v^PhUZ0-Di`AaAa$;i2IWn -zoM#u(np%R8P-A@TA;2SCbSc#=^U8H+cY$6?QCcJ?C5R%XZPv4l=wz+@uK<2q2EcFs{>yJ4Rz`WPT0GcH -z0{HE#Km2z7fBEf|yU%qMYeZjld)uj%x%qYPEr^L*jL3GufD+^m=yI23}+xNXjxp!1YG=KGNuH@AfD*XTI+oL6a^zA*x#ItFs -z-<2Ewwr$%<$F^-79ox3m9d|mmZQHi(ob;Sad#`=|Lw%^LYP|RJ6!JaEm5Lf5Z?H94 -zpcN})cw$!gftZ#rU(q;56G{ES)VT0GZOQ0d)OFcf%>6AoQV`1S0gbjyCV^DB3}<;< -zy#fA4uRIjWaA5VqK*}xA{_!|7iY!x9Tn-zK*8v8^+JJ5V4(omiv1J*dgC`4CnBnF~ -zGBnZ_@9sC4y>;~qLck>75lwg`s -zU3oAZ0EFDMW{Huw|5fW-I_fA?^0&Jl)Lcmt;;)B4>Mc4AglU_FJ!)bAhg(ljaC|!N{DB1zV@+eY8yh -zk#_~@69u)cqZW9?VfDkH@V*Ud2{2`R<^-8_;a+FjoeXFt4%|raNP4}MjK5+%JJ!62 -ze36vBE7_<@zSkY(5Bz6XV^Gagm^rh}P|6bk<#Ta`x&UWdC_4okYPnJ -zM(ru%pH@SXjT5hz#U{39lM~QakjV&I@y}s^K#=a-P#BWc0Eh?igO&dB2XcYHRD! -zsa>kdrt6~wWBF-YfPO`!gGqR4R-_2Nl6JqB&p-9$Kxm5Uz$$+L`ZRx(2;|v;T@5}; -zeqM$WE%y)&=l5T7pe6w_z~@!@!hXiH4F|ic#uKMRa9}%V$GCv&x=F+e3vTF5DXFX4 -ze`A3I-oX`S21{bdS%9fY=hQwglqtEeNmb`FU5GGQFFHkQoI#wj9>vSQSB1vcO6$~i -zn`M^NzK4m}mhqe^*{xg5VQjb-wM;HZRAw4V>PD>0X+b^q|&o@@4h^V>J8|Khi!ndb4o`0Y@~OfsLp_-*(<{PyNw{C3b^{PrlQ!r%OM -z@aaKRXsFkGJNB|~9^}00{Xh6^xBuX`U7#6WYxtr*H5KK6q0>hahl-q9_W=Iz+ZVG= -zKtZ4oQ1`5snWS6my`hQPLrh%;6@|r72o;Jbeppe&IpeesKk)bLK4`g58EEW}eQ?~# -zu)#P3F(0a%^(2z|`wq)kr7`**JD#z`y%c}#-Yu(eZOJEqf=ehz3ZtWk*WBYGTBc!`Pdq+PQeF7SOjR9LfAgY`d?4zp~x4ZV9&pOcDd;F9U^1v@s -z+`rq{ubVRYmPRuicSg$Clrfv@X8xn3*}BhMX7J}&HzyC#)bt)MV%CqRl!Fh9vfQZ~*){u!e$aHOlsq -zDqkJ4+QyjNZh7J5-qS&N`(@VB*`HcMs;I%W1$#epK@dJUJ;%g#@?WPdqyovJNVOGj -zPt%p|nzVT>_bH^=vU!n}t+yhkN2GWxze`x8A(5*64m*ky7>R|@vLG11rB|)VOD9b>!CD+Y-RHJ^0z0QDlxu- -zCHs{szpx`@p3C17x*oxWB&u=?50_-Q|Pc1&YC_jN-1dg&hk`NE8H$ -ztb*0S9}Oz^4Nq0W$qBSde5mXLt~{#mdfGR*dgA1FCYDngAYtFtr4(*q)$kq5H7MUJ -z%p(|5o*eTsBx`{mfVMvCE1=0XqC -zWR>$bWD;QNh{GiQkMNJBBWJ?0>}bhFN`Bd8=c39qul(J -z*4zEZ-}Xdi7W|GqrwBi#r1%cxC$g?JLofBDatsoIhZg2>zNwGCp$!`6ELKf$Ih-i4 -zbc&yt9ETFX9smP1)~9m<={3N`lKbUvyL>p7RzWmPctyx5h}nF5)6F -zk;4!gtbfzfjV&!vZ1`YE}LiF)Pzek=S@=Q{nEy8q%Kho(%GRQ%xpU; -z*LT1{2gT#cIgAZJ;6+!BzISaBDmKQdU-`Muvhf?LH+(n*@WJ`hqa!v~0;0VA#EHQH -zATqGJooZNn#gZTQF3=lTH-yE4tKoc)5_k~k<0a<-&~;6f -zLK@(ti+9=1#8~Qz?Eo4TtBz(E4n- -z$lVi!o$% -zN6{@O#*T}qLn6+-D2vF19jDyAr>mB#l0{eAeR;m^IRJqolsMD&AiE)Rs#}1kf%nhr4nSw8E}KWr-nIB+u3dF4%4h-f~8f@}(%8dQc3>W}A6! -zt)Xe*D)x)*7u7k&Yh!}ii(99SM@9=JcLh4+h*5+61f1EOc2ahVIJ^-u*_zO=SH@gT -z%bl1;xm8G5ovQ1164H#4ttfR&GDEpzPvCJ=jcU*m?pv)yJGXfhp&}Qn^^|RuV{(YJ -z5W+*!KrLCD7J!VFYLB1Iq0IJ0p!u!G9$*@WyW@`*5u@5 -zz^-=T)|eZpPIyM-I=31p6syE;@0gcy3bT~Zw@dZAA*9JJEVU_dwXjp6RLJI)Pc#@M -zJ=)M57LCIstCXu!yd*RDlG^W<*vr56`+?{ke@<|msK_skTqHWiWx)cIE7_|Qff1va -zv#FE*eC-;WtA5?VQgB1#C3ln}s#AF|867;wm=jIG`UMzyZ-&5W#fs%AlM^Q#d)frR -zRN)a>ILd^y#lPuR_;90N7QNLJROtGytiN9pnUvoPe3E|B`Mld;lUSq*=}?G5sEfia*^YhiqVw@Pw+tyLfJ>E^<0nf*ZUf%F}8*>bgjF=V&97~M -z$0x%+T8pz#8f7yhDA${jNe8}3P2Q#+77}(EMLF8 -z$TAA|>Q+{#+%2~S=rIq{NO9P4!HMGu8BD!*|2SC9_%P=;Y`|UG=#VFMdbbhGBSf&dpVL~E}k%()|xKq*#cx#<6C9_@TmeAcsmFJNc?Dg8pOQkh2839!2_Yg%M1LbBzBx7rMN_UcWh9KN-2Xt-UBOZ*-zl`sYQg?G=?#O@@ARbVaD4gI9n9vkwc?!4^%2g)?)oZd6V!7qGk;#J~(d>|g -z#G2a1y#aa>PdWm-)DW5DAX*nLMVidb84RrH=rs?wcn+aVJn=ioU@t6zN;zzVOAkbu -z+_#^Swt#XNL5G&HxmTKh{SpgKG;rT42oN#hLu20o|(fN)?#s -z{S2dIehRkO9idHjx~#I0iLhNa_$6}IRMgYv*|-Bu -z$=KF5%+(F&J;`^~0f-leBf*)_pkCg3u6a|LH&tI@8VoK>dOxH+2@SMPY@4i=G4sW?I`hscq -z^F2Lm1g@$Y9MZ1xgvwKkYl57!Y7Bz_O -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 -z!)H7Aied3k(B~d9T6u_ZD{SqLa -zmvZOCKQi{fk1xVf5a5Vo -zO~r=H*WhN^`Tb-VGyj!;JHcBA)#K%8j?iNEQ_R|omVbpk+UVkYBIG#NBAa(MiJbEb -zq^xy8W*nw%T;J%<9-`hDTcNj2?TEP($~WRJsSX0CSCc+h9NKL}P<_Mmo&NbBmHDJj -zislWAjU5%0eS!e?ETUwN7%C%m96gD@sK-b`N&}p~qv1Bd3uF*cQ~S_7z6X%}Dsj+# -zL-(890?DShft8NJuyxXoTC24IVnNR5BAOUOva$sBveW1muj#HQe!Dcr0(}*)eKyn2 -z_EqLOf%DDPxwNi5$2}xy6D({%I;xmhN1u}6s}`z+6d9yf+^FfFc4i*%URSE6>NSfQ -zAd{C_qC=8ll9zs}9Px$0=XURn8e=oEVnAHtkbw|CoK(nncG?(_y`OWWN9ZvE4l46f -zMsDsn+%+8pQ6D{qK^wyBif&g(K?F8f -zIht!_miLp=eHM}#ZKjTf4GeOluP)urC{2UIdwQ0TAr1@IroDO|kK!xD$)^hZ3+e`+hkNTsebbWZ#3x>0a@G*dE;0p;zE^*wA@Y3(pj)%su2>rBGA&o*;Xlo7 -z?oT50kr*?0Lz_Wv;gd#s#`8Y%jt(foYCE=~`|e2JXl%rNOewcJH#l~^h -z^2qzDz4uPr=yuEcz0)D|C-rfd^@Yy++7G3kI^p%Vx%rm+>ox*0|5H5@x93v1Vp;yX -z`8SyJnq~6!gj(*Wy^}?kvET34q3?_zQ_BI(wmu%na9B~;1Fovj8+G4XU@>Xcu-kVF -zuT^a|ZxWwOa@&LHwOFB>@a|0)*{~YyeS*;8cJ}YZ?j%|YaTL0H-{RXN)(Y2GkMs$f -zQrdW4L|F(A!cKfxHq<>BT)p6k8l70~msEcdZ1$WmMFQ*HIO>qkX1n*Ugg)4z_crn< -zR?$MI%gO@GPe6Yr!OI?wY;-VFm^P*9c|Dhjd98V^x@Atkj79UKSM#XlxOn!tT$=6o -z;o*RsI#D_co>ySP#mpd`Zsl$jpVN``6j{K-xFWh_d#%1B;g{#$x+UU+lb#5zX3c4u -z^HQ*V>=&&Rt=&E~<@ziSjLvzB^|9|~7VRQhKI=HZ$JS4DX@-;D(bL-{yx#~{2i$A& -ze13S2vy;Oc2N4w6l+s4sQjP@rUs-q>jpV?kbX61df8om?)SdMnZ_mY_yPeO*Z(L44 -z2ro84P;%7fb#*e_>Wtp6q#@uTY3;zls5vm9wmiCayDlfP%=MK27rO1U>eB1+Z*;r& -z54t`4g>HMR*G1oC%Tp{8(|tZryp6aB@p^Md2k$&ncUqz|`&Xe7BCCCIX>HrC1SQ$1fl;e)wDX);V -zW7-oOn@MYHnfY5A0plc~-D4X}yGNa!^4=}PmG>0LPcjp8U5gaNsoJ~j8Y;s@RFkdR -z^qXDY80ZZ&5^s-6j%L9%Zd6$oQ-#+KVFN66&eX|PkW-@Xfr_gFsrusCly1|9^z1J8 -z&#mNTj1`0VIkd|$qNpzfv8ZeMrnRje6L!645}x2R-{()&T@1C|ol;XC(l{)&!}ScbKLGly5{4l9no&~32)M7Ldh|0lW~^G|d;+PmX_ -zq1$I)=(g+#lK?+p6-ZAlN(wiAzU$JY%lb)u8y%dmo7Mh$>&~zTB87j%ELqGaoJw_J -zKBDy7`SUebNl`eF1|LA95N$j_<%WHeOm$#{Z=zKr#&kkwdJxk`LOB1`$Ijyi9Efr)x2rP{{^Zot0 -z4~0cGI$@Epub-VD1pc?Wooj~iz1i;MMcEI-J#KnVmQg`3khI9vs6y`tK*r{WIraAC -z=E8f7dkQ~KXz7=_-BKtwh|?CYSV{2P6~hS-^wqXVJ4H-*VfK>D!OQob>UM?|mhPo? -zvw)`nfZQK-+w-65c5zxyEV(`z?vM6+#QM>k%7IN46n(*NbaoZET?(=^`>Gbq9h9zV -zC=d$<+8JDHGTlm?!K80C{gC!Ug<+PT$sZRs@^Vp=;-ZQ5+|MLtRd{?*vH;*_l#&Xa -zozM9sG_jY$k5`2nHKu^yeOEENKhkd(`-Ld23p;hQZ;WayFpzg$xjI-tKd!|#TtN(U -z9m;q0o^L;OP?AXNz1{6^dlOIeEj(Hle4e+He;hQ7r*OC%d$*p|igq;i3&h8so2Fv0 -zO$NNr-_O>RoPRXxE&cY|+}ZQV*}Si}obi7BX!u***7&1tuk1|npRab>{86`u|5mp< -z?>5a4=r?);)gm)YW-g6dU+bgWKYQnkJr|>QhzA;13a8Nd8e9KT -zw}Jnt+e&!z}xP49c -zx4P}#tqkE)mAZ~dIADU~`hk``}$4qcbC3x%QO=_k;64GxN=&X);j`k -z2sTLBlY(Dc!_y*%_{{?=JT4i<-3ZBjcj)4i1kEDt#zw~(3^D?jF5OjUCb-W2FJkVV -zy4Qr(V{7Agj!%z*`lpUJHZdY6r -z{r;8x%c^^8^vVW2oN709p6U0+#VxIqU%KltDS*V_HH`JaQrWi09$KTsD2X-A?;0r# -zM>yusm+M`eub&m>iMTgcZkg(&KfNYZ7cuO@ -zg5S`z`kwbh`cb`+Ak>&CU=d5LiQ-lqyX!27G_)! -z59}0m+wpRwjGN6&xd~1j}Kha9zGv+Lu*QH2%lk#_ayT-R;W%a<^H|kpJawM}N87omu~M -zw~hbhZV&zKZoBK*;mdZ;cs_a;I>_P5*{)H4F$x{3)_uu-Uls-QLG0JHO%yiQ>zUG`eM9?7b~b -zg}5OJH|2hZ+yewyFd$1pqLhRK&M_YA6Vw_Wyh7MAf>@N>TbCnekx#P4d^#778DMmX -zu&CJuibFaQbvi|l^rf>)7$RJEg`@~@Np2}UL49{QHl{pmr8!jbCF}r0p|OIx2Xo?+_28fQC5 -z+?uTYW=ZrUQsxujfx~;B$Gg6Nae&bhlMoFk7^?7F6GaZ-cKDNc4eu7%E6p3lVH<8r -z{L6WC^e|%GhE4C{H^fA4kA4ST3mri46OLK)6kib2vKubSQZSH?&F{>Cz#CX66Rljm`ahXYZ^`Ygbe-=hSyH<67UA -zUBq!H)mJvc?@vpKs)1hsGGA6!P}9WgG#oq7kvLFa+a6&IQ9YpYlC8GAF-991)*0XJ -zDkRuHqcR6(KlaY=-({nV3`LhsJ9PrY$7?vj>n=qlyO%|hJc3beZY~dSx#FWKK48qt -z!!`4V0)^fOxB>tGk2}Pt#$HCy7vEDEkhsRWWpx?PJPplm2L*4S`kFM#0%q4~8TUX@2&x -zjXgLOxH3Bij%xO*Bu7nFx>I-4#?42giBP4qgrvjgi}1>jKdWizRT41JV>{^|cU$a_ -zyN$p5_;}S3x?j%Ry_Npo?lztsdT8nI+rQoIrtMOhf4SRwf4SSYf4SQ&ex?!py7?Fs -zfQ=tn@ShAXO*-J6fU=Q~=k-y4yW0SNyW1Q8A9p)(FuZzjQtz{G6W`rg<9ir;*M0AmtTrj}b> -z{a|U0G&Dlaw`~EKab5HkYHTpUQ--F6BAG|VG(vZ@Gy5>b+j_nI(~Ipn$P`+Kz*^4g -zl6H{$*kMAu{L;PLR(LJ@Bu4k5X#ZFws1htZb7EY+7vOU$>jli}f5O{3Cu7I`=?Z-WF={h3D6bId -znYOSon6WnkoYFQPRAM^VOvIOt^<>v90|&L4m;V>MEnLHBCS{+2es7+~fBJs&L9BG} -zX2f)5Ag`0HPV-!6dQI32+9ltYZsYOL+d7o -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 -z$}~2)yE=xDQ_Np#`^;#^289~{+?DBvGz -zJJcph=^Vs=?q`1P=nMUUM*R;`Dw56i510IFLUs`LtfeRDzgTdiCOlwwfG3Ts{v&*I?g`+#0DOtmxCD7dm&>+z -zd$ygezq>gVC75U#gw~r*Wj-VdoH4L%iZo&T5$%WdkHjSX<>wjFuKUY7;UMQ!+NhV| -z$~eWov}&}zUvq2n-|Gu_%pFpb4wDvD6?T-h3)u9Y7zye055gtrP#zD9ueCSNlzWmW -zk^<2I`$~Zusc4(D=pT>K6t=wqELq-2jF#cTGIZ}yz-EMub|FE;WXAeiFr-;>@d3nL -zLsVNQ;ZXb%dqu3ao?U8Ws8^$6E*6iKqz*g`kP_JAON(yHgZktZ*?_e`I9kf#5&YjO -zkt2i%vHXR-KIS^^Fv*lx*)uSHW0siQ7f*NX?B+2TEIUO?Fe%N43nVFBHjwkyFG5rp -z-I;NQD{D?=c(v)`J*sdhX@dPUWJFrOcCiY#i#`==F<9Yq!(X#|Mw&KDmynW6$(;2ZwwX#5_7FPpUHQRgW&eCcMrERmnCvc -z_nS*0{$l|=6>Vwq#Ht2)ggrAaH|=_0hyTcXj;#+kc8`R+FdTz_>DIG;2cjSKc$wskg(5d?3 -zmCnf|+}UD;;U4nIprr|ukV5J$rKy*>2OtHy@@Iizs}wPvU^c(r&cwPQ3sP~Bi_7C9 -z@gF#9ZQ;o~*!m*VrWj{T&$AdKN{qic4>}$`&4jT61Fdz!390;6fcEw{fxrrvS~Ht4 -zQ^g=;ptZ~KT-=$nT0@r6rvl?vuhwpd+0G#FZ8I;@1FHNhZFBUxFJC!`K!V-d;uQ*X -zNq9yZJ6L?zR~%JEL|<2+-O+>Z?vx`KpD?@i-Fp$5mbE)v6?0@nTmnE?f^)}{O3*6% -zPbqvlx$eck+uledK4-^i9~%a%f0t7voTYapoUrR|yhSseb$Brw?=ODdpeF695NrBbRb4&fi6N~OGTTN)8x+jTmFK#U(ou6*hTmE`!y+82Vv -z#ZetX2>}!K6&SElYu!VrB{8h!s3gji#?#ZjAY0NuD2Y;F4S!kl=88ZH`GkZt9_i~} -zwb0xgv+1DC!ZOJP*8IuwXdu_(eZ{c}5?#x#h88nncF|-g>1EWOe#@o;d~}XUSrfWq -zS0lNrfTAL8nM-L<;fBsQ5d^~C4G!QDtB-VjF_X}NO|PeMxnbWTYfn$P)OBhh+-w@F -z1ZQWG-pOeqF1lsONb0BFUMpxlI8{_oSUDxKJw!-B&DaNW$^?#>34PhADdh@yuH{r| -ze=nBaJ`+E%?60()u(vMoM7Sw*nQ2>Se_Hle+K%(vPBtP?Esfn5`73Ql{gJlS|47?Y -z4OZzhJS63Rq-~x>6NkzTOhr%R<&Y@Esoz%^YaENgIHWL3CEEWZZAXk=a#Y9LDs}ue -z5B<#un`~X^5P@O|bm4=i`XEvZLtBN_Io~n*glrb*J2}{D0w@jRmMW#jE^*E<+j?B; -z3b>kGq=4+KXFw4PHOUIu>T;f~lAtlZvd9AmVh9ix8}IZ3>;s$p@Oc4AZ43BPza8hX -zWVBQ}o_u>=Ln5V8RTUQ}a4W6@X4->~n|u#kx-@-!*=%s{aaP0ZrYJ61+G!kF2f|XI -zYSH2j;Ljz7-=v781B!S=X)|uHL1boJWEc6=ekrN;r^TOWjC~kPLh$rsaRV7q{eq#zkqWv9t{T)U&(zfY>2kTG$>J_hqj_)Wqv>qD)p}jSP?Une$ -z50dZ)&RpeU=Ghw$WiYqCICX-fjhbqKxO>e4Ht}$YWJxFrw@znLrk@S&n1iQqdAxxT -zrAnm}n_E?N=kJ&$iFNlFhiIw2=Ud9v4Y(6fH)H&2chnD~rOMP0w7A)BBw;+xalS-W -zom -zo7{qds!-MWJ9J+0f}sM`i@iSQ`76A0Jrkc;bC!;z_b$B@&VTt>_Bt4r0D!GQq2oc^ -z(^`CL3?GQ4%#+9lxFy0EfrG=Lg+vW57km2~p(LI3Kfa(xs -zq>$qt?MUIz7=kI>ZUqI!Q0TlQ;LQ5AObZ@PG82LwA1nq -zpe%9o(~`oLSfS6C#^;gSQ4d8&9i=kD2U=^x*~cG9f=(2YeQh7VpdgqPG51d_!G*-Z+(GOc2klS2C`j5|AG`vV%*SUQ~|EzMlA -z4^em9_&aH~x{f-CY+r7O}56Gl9}= -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 -zPINKn*RS2Pa|;ktr|U<8!c7(Vum4Efmj98q -z$F4=r^I3_J`OR2drk=qftor3TR`+V$=Ko6DL;9Gk|CP3-{vT=kZ~$~YOXB7+|o+(g^8PuO%q~{p|t3|2mk}1wh -zjrAu{w0ejLhk`izNbhvS!jSd6sM=wLD^<#J#6c6+aNtU2XU4OuPQc3G&LM;HdWO-iOn1`vF$o32pi&!;@Z -zf;Mspt+mS%z`Kc6;~7;rDFFZ8dxW`^Xv -zUx?I>h$yoVk4y#vFcW&FFornt`T=Ild96CJJNTE{E(<3Y`b%x=5tJ4IfdPcKwG`>4 -z+*Hg#qVUkj-%IA!LgUi`i?zh7@emVMi%RS@2FW*c^s$VKxqbq^evSX}QBuxCOn!C!wzrem>I*^#pw-J-WWJkL> -z#&^fpKZcD4GsRp5+KNvbmu2@KHhn~|U*|$Wjt5g*oUr$o3@XA~=01KoInx?xEDM)m -zoWRrg&c~P$owRNgb~si&$_rAmiGPzY1hNM&w(d?&pzVK8(v(&OaOSxU3f4=FmS*M% -z10x5A95HhK$hjr0H_U@}zqEBk-5GBHakI&gVk{wFDow6wJCuL&Wo-6eh!Hu)_x-4y -zhdRKVx<5SY?|y$HrS`m$yNj_A_TR<#B)` -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 -zF#kqK9nyk9NGq#X;T18s{aTrQOO2j6<^=u -zQ;f|xIBsoG5Dm*KQ5R!QtQU8DEvL#;19xKu$RWh`2uDFDz=ofBQpv03{%dWgNq{&S -z0z+y|&Fe9osUbyaPr-elm_$=BT~)FR4~q}X!J*rg^dAaPCP_o5Q?2?jODQ3wH7Tfe -z>b#+0ZEccg^I>cb)^5wbFo$)xf~ej-&Zue*n*%ZfT;go7sn?ckSz$1^3K?tbEWz!REoApTIQ^-aG6*Ubw_3s?WG1-OiFN)A9Zj@ -zGl}f~h*KKgTAPCCPWvW@RnR~-GB$-@ww3~cK&(Wt4HDnKiV!6^*q&z`EF-CChO}

v2tq%>cR&T~-H?T77rE~b?9H;_8%aJ2vq%cVTDy(F16A#b6*YeniJF4cH0P?*d7S;UptmnA2z#Iz;9JAlx;IO(S@smJR;2_JPubHp!i?P7iuZD;()+MbZ%2>Hj_R{URUJ26+9YZOZDA8UJ+3jygL -zYn%MP*7n2yTHC9nBL7(1V=BNU3MUCotXCaTQKd)8FO4c3Oa -zMxU{euisavuKMg^9fqP{yfA)i1l^C^@l`U(8&mF!$#HkY$;QqS%}Dc2g8h)l7v$gV_f}bxK)8^H -z?a4YOzf*D0eM2X_aI~ma;`d5DR3}oXI|yC;yRAs&WcY1CUnDRIcA=wTB77FzSQ$$8HcPcNNS`rz&jcD -zEi+3zCS<-Q>NOr7aXIjY1-ug{;Kwr_r+KF3KDu-1%oapve&qmUa)!gCN$09n6=sNof86Zq6)89?xJTe -zsRL04)#ZH|=zd^h(l?5~lWxH>&>|#NytuKPrx_+Ul;TlF3Gw{oa$2%r>adJ#2vua{ -z=$#kH=J(U5nQ#3N>6j=F!jpt_?w_dI1*n&|ByZ6d7g+Z0w>_bV)%&PfsbHv8Y8f$SLChB0KRO$;1JVSlW?x!RBYI@2Os~df|-ml>U|{{e(h9kfeasyJA`o -z@^n+_FJhdrr6(U;N6IDDSJ$P?IIb~{8{G;YK7cSCPgq@p%XpgIR&TmZ@LB={!}jBx -z$SRK7wh6e0+p63AjMSoEV -z%WEA}rgQzH5IvEhA2snn33jLMqJ=A-t$h6Umiu|WRP8^r7@y~8Zc^A-wsXf-)?2Kw -z{Pm@D$htWmmtZ(6!(!o7QSf_T1s6!_g%_7~1KVx2Izs8H4?Q`fqWbD_e&sP^ldMX_ -zz$wD81x!z7(w?eWjZ?BhF5X33F1_hW<5`*YiX8F#Yb8i56V@qI%&pL%B`MN3%|R7u%M?Ce -z(!tk^yMoP~&$owwJRl*Hg<}ES@4P5CvBTOHTgKg>xKoT%kHH7rYuhv)SBZODOz_mP -zOB0-U(RgJV?Lc$pk=RUSaYBF{_CFN+`BJUOoPCobKg`J-grHtJmpNc9J4*n!wwTG| -zPM61)szpuqRcmoNBh$J{UX3+{l3?|85YHObcABesreL}oH9Q%k=7`N9*q#Z^p_@96 -zKn>aI4ba@FBbJz5*msOJP%TPJUT~Te%a-&BC3r(0;RCN7z!Wq -zOemL@4Vba+Si;0v;rTc#rbL@kv?~KPpWx}k&b#+bq13fA=aEo4AzPApkwE2XVm$98mz00 -z1HO64y~W8wo23XeU?apfXCTF)GmoUt94bvLatSC~QbtR~fQE#l=k>0WztIEe0ke1o -zNg*F?Y}~J1g=A0qe9|=%VpZt}XcN?02!~wqfsi5RXGI_;a($9?PZvTfS%Fas2Ls*_$USgzNqlV`vm}?20{TK1aXD;iA{Dk_hto{rF2?)x|Yt&)! -z)4HVzn2e(xyLZU)0%53Y4FiJ-80esdU<$1=a1rWjM)>UVf+E2zkz{lbX$Q<`b_Puz -z(6*WDvjE*VE;Zd?eKGKd?+|jwFIQo{@dCpi`xL-#Z{iyqCoElh=)_LMXX#BVSqh$ik%pAY)t{wP>LICM>fsx&#+fE -zP%9rHGjDob?_n~*ULxCRxtXuy*EQmTlkD%>FC{-9xV4qz^RDnNF}$}%v57h4xjWzi -zD4)1_XpXrQd_dvHh02DVwf9DgSXzwXJ7J53^EMz3#Ks=d?SCiKJYpSFa$5))O|`1o -z8EWEER~QH32=fS3I3!_w8nn4xII?lMV7pIM9E9?PPmv2Gs7WnyU4=!!f9=NljFPNX&pBZsD5K -zg?6SqoL~eq#EUd|YgJiD_W4F_C^qOiELVV^Vu=-Wmh^j&hJz4=M+kneK)*w@0SpJ_ -zE5PDGU_|(qE(g5c9uLfz;eZ^ZR;~C%? -zTak-EP#~ZRb2b5hNA@+JrRTQhgUp;MT_sJF$CU&xv+L{!a+o*gwL^C-r8tL$e4`^N -zi+m_!qzV=*Ghaog4LXLU3&$(Z6rI+P#JEw2qjVG3oU&4N@?wJv!cS4lK;c{Y1SI~| -zy);|R{08977iutfjyf!5owY{Uf{*HCw+Jux44Z|Gcm_NPF-5~}`YHbBOe9zI>WRFr -z?Us=wFl{Zw#?Z%m5QsMcG6FrKu&9`&hSMgwTDR-b_cI^fu=Clpdk$qaTOk0i^$EDs -z9hoafHtzG@=T?AQ$6n()PV@|rJhCPZV^onu3kqsXr5B5Q%)~zN#1_jLeH>0uxbEzV -z-2@U_0?O_eV0e$lH6}iM7l!vv;pU0jdimQ!ueCo?kQFpiMOfhUvbsZ{6(G>$fg3bS -zs=4BsO=)w0HEc*71f8lxMF!ida4XgYo-TmZfIEgyDVNJWsz_G=$!v2t$t2M9aGpsJ -zW114ng;Jm)&+`h8La8wW1uWJ9A->fCzl*#Kn{gK<_^;Y)3;SI;(fCmc$sZskf(3ys -zcit;1_5twtyQuqI75#?0B%}`U``);@+~H6U6t_^Yrq=|mRg<({mQlQ8r^Al+UFY*n -zeONspRoFpB`MS@55`i3Yr!fRXSttp8y<6|ONNBqP3WtrG-EEa}oqBDmtdhjvCSF!f&x{%28GL8cs0FKwS -z2d<9;z=}tlYuDD)YPxrfu@67Nj{FU?{WWIwswZG8zTui8_PTtKkVad!89hCHHCFU| -zTcT?C;O)>kyt}_XnmWE{=srHJa(D5&T)o?y-deN>P_14ooZUS~-+xWn)%d=T>|P#! -zwV>{W-H%^0^tN|)!abIy=5D8)yfqgIy}#XmJmHSNyTI1))!5b8ZR78+bLwn=;cfBq -zb$)){`S{xTc6WVxb8g|e-`{RFGGlvu|K>Sl|JuLKJO|J0rs7EG%0Kms^Zf{D9_hQd -z_EysOBg+mAb6$aKQ`wW0__PJJ<3rd*YjuSrn1qpKdI}J8j=h+fMqYi|1GGrz=Nse< -z9PB)%=cW>)%zA74VEC?b(c(X|@^70XVh_)4@s+SstYp96V1(+=QVYKTf&PK+=M(MW%|b!(l3*~8 -za`;h;-ULyGol+dKJ7$0=3fJ4v82Yl;ZEVgNZ0Uv%)1z^+4^Ma24}7=-k%9M)8P`^G -zLZPoGQaSYR*H=h7D|K*bj$saU#@^PE)FCxvUZ(65m+SWr;CoN(Vqvgvdj{Ov>tp2Y -z`N$<(p&_MxDhMk@+mj9c&ug@A$ErK-p|LV)Emac0>cu{KhlNfOtc3M-|AeX&<)M=s -z%oa$>Wm4HXFO}_Pa@Uykxt4WkM+S%j!8oE5i{IVmIYRvL!|cq4AP -z%LW@4BefPlZexsKNxGj@%P;)HopCz=E-(j1-rIt%pqiVnOv?fiRGm7NVKc~9W*NT)Y2qilt3>ZDmkt3{eFn3 -zs(z?ny@N_&;#W5LUJk`V3%SrZXEr_Xf<00F((sr70ya0T|xnW*{TnUHx9HC -zd)by?fqIHJy`S#k{4RA~!2J^w-C8wW=b9353ly~>ozci{r_amuG7Q#64vW!i>@bNe -zJT*;vZ!0lP4w)v2mdVSi)gj3+&P%(|N&d#*b-f9}%(NL=(kH5Q$Uvx_$}JQ;JsOD4 -zhAKbQB}f_uqfmJ*C3EzyT0?4K2k@C|R^5EVAFy>--#HKm2L=7U?IwE1>WQD=99Soa -zKO|BO -z6`NNZaEnS0CA;trwsp7_jc<@*-D19(a}IR@U97F$bNvyiO`(;;Q`&@k15>x%1=56^ -z_wq(HP;}i*eC}Uqa)THp&M0^v!#ItqZwb+LvMV{w$(Xb%20O%uYl8i&3vJ2$mOzpZ -z%}WCM2y=oN0m7+|?!Y)H7i2zvBI!%*6Qz!q^}d|RPK1VZ{4DEAluQleZGMJV{6~s! -zp*)|x?N6aQ4FaP=Ph+B+*DTin>9+mDYK-tM{(RPbpWYt*X2Cx9IuFN4Xe)u|or5@Y -zKSxl=Zkjn5$g~!O@2ZJajAd}z}q%-dm;X5Y=V_D5|G -zPjCG0??PY4q(hmG1N!fEIWZrefL$~@bA>ktvPBP0Ro_>=?@!+-@70uj$%Ks>@%yY& -zrS#+$yXU|zVKI3BWCB1CDCqQ^Zxxf1Q|$9e9M=G6=Fmc>(CFXu-O%sI1d-!=UGb~totlgCpX_EHAhv~>*{kNLaP -zCGy|e79TOOW1g+&SvdnGxSr5z?N(?GJY$nnHVpQ=4-oV;1OJDqd+h79-@gW)ZQFK} -zt;u#xw%ugcWZSlF+jf&}*W~Lr=ehU(Uk~B9@x5`p*805H{kb%&R61!6fZO(x*A=av -zs|MJjNZQive6OO;#Koa^KCDLoZoAnVLAXVk^Klh}o_M=|PdI{4;LcH(atXj~&zC&e -zWdUmwSk;ol=E+3^B~8P9C4$x*XLWg#tH^Ap0l4k5zufj3N5<`|OwwO&8}kalZJV5X -z9)c0#eLuffJArTNG8N~r1FkqL@gAV|F+x$t;2d8X!9i@EQRiU}n7nO7}m -zOaDNChWF*D_%o@-9q(#Dej_w3y(Sch@@w9WSD5IA9Pr9Acod}eS*+$aFAXQG2Kqe?=gQNQ5Rv#XZgNz6JV!^klMlD9K=bi9Nl4t*3 -zCjPb67g^CQTh-gaVXLqCaX^`vm+YYvAG`9z*xauKItKJQOLC6C!n~s(HMcJ1*LNw@ -zs{#L|2b-nGV~g98v4iUjn1mR_H)NnmaZr7eOVtxmx9Oju+QxhiI98KvuF4B;=ZIP4f$i=uUYB{-F{SP-ApUGw -z1uMm~ux?r`BhNNIB-K+Hudw~qw(s|O5a6~3}Qrh;P -zkklOaAXq4w%v{CuzG1msc8`0o$ZT9DoolFlgO@J!yjq;?>{dZ&i*XpQi{F2w7MN20 -zqCt4mXfNJ?NWZW@cbY@Q(`O48=Tn!d5=mIKh512HfbQ|ffY2w!S7cH!b8Gq@F=BfF -zP>2&+ZpBa7KAXu{kT~G+=bQTqHb-pX{Q{})H~Fh=2UiZfj~^1FG2WYvRAh$<<(YEqXK}F>|BC6SmEzo&E@*@WI*@}dyPhIS`5$xz< -z$fq5wDjh^;$-5N;Pj4NaEheg559@gNk)jd(bPug}@cNmuUu77!(^ejo3oh@PKk8Zd -zZSJj4O8+Umr))B}C?5cJeziIH8{B -zq~*unU0D9=YX0DmdcRe8A{$b3`};O!u}XmA)dVF1%i^wbS#CWJnJOih)iQxfc;1FN;$ -z+ih4Llm(IOiN3r#W^epNT*amOw7Wnh~Dmi844iz!649P3TqJF~ogrEN& -z_+%}lY)w!-j?TADARxtM@G-X>p7HKB!BNjabp$Or`*#&x?tT?4~~y30qeC%ua1e{?9uYw^#+ep@(yitoh`!1sh*h%g!gnA8=VFB}iat!m|M{UG5P86`rz&OzEb?H0GUCnK{|zuCI; -z9bXQ__B&~Dmmr5{uBL^xF%N++_x`3oT@T@EHA%3c>|8%|o=(-cGq5xu6cPDnOy*v^ -z`Rp#J2vQ9%A3Mj;%!qTW{7 -z4Z}WZP9lUAlibNT0qqc!aA&0Z{5~OCk}zkh3zSG|JqrPPJfu?8)WSv5UUys~>Y;%! -z8fApE31`H`KdpF2KD;4CJ(371a)*;>BC=I1N`0E-4zeFy{Us$FSm}U3@qxv`X??aY -zrGK~pwo7d>;h&SKAp4AM;q&2XSA0ga$l=LOg!(YXCb%;# -zJ}VlgVmh5#r@~^py%BL`ydw78RD3E_3~=);rYUR@-Q!>wdB=+@jz;2uQKgRBzsz?jwgXiaue8;*t!pi0-|AF?5q$o`Y?rH%7yf0oJ5h)L%=YHhe%_?*CX7aX(RSV_ -z=5%nw%pcy^LVQFJVXhs6gPc`@wOKgs`B^|$~Bf0_1HXfZc6rK}H^IvBByw3mk(~g(n -zfLzHaNWYAO`Xi6Qi4vxuh5ezt`KDm8N5eaVu8>b@gw(pP&RcM -zlc1S?4ffR7`OIF!EPG&hjuQbu+2%MPiU2YiocgP5KmS#>5s>~-wl&;ff?Pq_8NWDx -zqUS9qtjdRUCm>dqNWuF05UORXuGa&B@p?$D70I$)lGBL5A3?S~`D4Lyzq}cpZMVN{ -z`ldu;kuPpx=z1|)RTIvr@s0jfw!{9TY|lT+2&LJn^co(YX>(P9#cKbfY|8_bZHOb6 -z5C4zXVGw!Xky`T5RU9l8KqjTk3)+u*8&~Mr3*IdGs`%u-IRlFRn>HhX)Us>s)v6?R -zENgIYwWhJU7nBXpl669W2!lklt)B~8-XC0$OWEhLx#7KceI2F7(nr$xpV@E(#h{_6Vu+ -z1otD0+1MW}3;KU|R>+l;Uh -ze5c+@$i%|^9p+nxi%FW1Lx^iMbEA^_F6Wwe0ws&G{FNaABw(D^Oj!`W^+(UP`E6^` -z`QC0IDa4z0Ur0t(t9Y#CFU78eAQbMPB*rU}0{qVB`!WwWI`aX8T$z4hNg!UJUWkKF -zaoCw@#11D|4!Ix$R)QuxZv6hNrT6$J8ji`9yq;6WZCobByL(v+t>(xnS>&Mw@*p|S -zZUcK@=C&k0%Ul!RaM;3q|0I#_*UwMlG-|XTi@>I?ipOwa49Ejk#(3u6OdWg8x#Y*$@G&UPRq=Sdv!57yLtzTqV2$iW4g -z4a02|K;Wq2*43Aiv&l|?j{oBA&cYk+o>oTzHX~N_9Z<%FCgea%VD7&?s7_6Q4`o>> -z?-wq}I_qT_O2L$Xkm{|fSvb0e%xSUO;SjXE^>&{E<<@5(!xP_GCm!!3Z(3pQKPt;e -z7F2(dcDB2Gi+~0HZB>kR>wv<={PgF~d&Z|){&STMf(*1(P#_%!rdYZH7iHM`Fa&TM -z9Yhr4gaQFUc(nZ`-gbo_^zti~&)2*)2k(Sc0tF0YM{FJP^OD{zM7=xLH^1`8PhS2* -z3t;ahA`iZ2pA38Z*^(PvZ*iFX{r;BR`O|TI-XL)VEpcoI1ju~F2}e>~Bwc>8QmgFe -z)4Cus;w6I|W3u{glrEg03?N&a`lEDYHZ&WM?i{bx&*@o@koiTz1_GUdzU@lNRWES$ -z#@Im-c2DVkdRf5|?uFOQm8E{vHN&Zs#Uqu!$ToWtN`;owV$n#MV}>aaZ$rO7R(jXu -zpgOxuKysdIoh2KZ@gL;$ia -z3qZEbbZC_T$aZt_E$iT!ILqc^h6`GJ#u$i8cJ#%=pHw!~-I&D>OQ-4N9TmpAIYHlK -z&*u+v<)a5jHUP41kd?Z5=OB3|;t1`R7s|3Rf8*a(qV(7d0YJ8O?h#cm544Rm+OT!M -zz?{Od@9-YZM)3Xeqg&L&QNHr$l|lfir~h7pz1ZanIrmI|B5Y<-Xycwup++0E -z_=n9xQmmL@z#3wpRG!*g9Hhcj1wT8r1VW8g#^2)~iH?hUKtrEDyvrTP-48AhlVbc- -za!rKV_&%WDC5T9six@j*M&ATwJdd3#KTH?)ELQI10HB_Z7b(q@)@QfxhiG%&+PXk@ -z$22IG!iq82pR0+QuY2)jOpS=9bic15LS@EFS=9;$Jx+#fxf)d^v{>1q4m7Klr}$I) -z&D)VBVRR|G+m~#m-S=C?(l}EvxU;f{DQ)t(Dq)ZiU-MnY -z9Oe^lE$_Vdc4vWoMO5)YxA_c(zU`urZAvIui27{a{59(EKH+$Z&!2N_D1z7Vg1iCn -zzwU-V4f@IL!DIVtn^7vU3YA*wlv_Y-^qwk|eZqP)_s+_d$us^Ky-Uf$E6Bn_BwIn$ -z@SNtkaMh4%m{|xMT!+OC+dj>U=xlhT%@W^Wq3li1==jjX@w>EMB)kh8?wwQTbol)t -z)4=XeeJv5#X36wZh1Y!jp-=#=Ks(SlcV>n$3T1wq1_s2Pzd73fci2qeGh3T*VG|Ou6UxHu@lVw;VVVS9O(Pl>83NX< -zn$b?U+}gDSs9#uJs7vNDWA%_Qzh=((Z(L0{k -zWQvJKQB;kr9+BoT;k@6oL4*ZRC^U#ycnR+O6n#GEx<9Jp_Hdya -zpcDT#uN(gBCWWqZT2fZEA#SK^5ex5?-AfYdU6`_ClJ8$*dqq2|obcdnshe96HvO97 -zE&I=WE#mHmP^)(g17l(%RBoUJ=vnS(>&hN81XaM2fi!jIpfw*8*iHhkR6L72hUKjY -z|78hL%?13L{{dO81&Jua)@njzCyCl#U&gK4Zk{vQG -zF$=d=a_ACsR-cw08Ua&8-k@;3rpn`@Z8`ouIg-EkqXH06ZY2{j0~8?}t1Dk&n@3;m -zi=m;bevZ<|t!bwx<7=mk49Ldu%E4)052Ub|6S>aTd5-WhN1$uwVG6)tM>}6DQ2kJZ -z;7Mwo^`hH%hPW9Pw#OV{TP=_EJel_?Cijt4g_`L@OEyuE`>5%dkkdZEErIRzR6w;BibAOKsGXZo(dY6b+im6^Y0?h^G%Z`& -z90!h4Z2`!(Ra~&&*f?yZcR -z&u(T3G$oExMa3Bavb~}K`sFV7tpg!e2K1X4;bg0g5w;FC`T~g|Del0_i*kV9>Vhpj -z2tUm?GVf>vwSu~21oT1^|BU-2J$Nb$i?~e?){RS6E6PE%R{opsbaJKoyqjv94KwCY -z(B+ZOF=cDYWN)`GEsma+`p+*MMG^Fl*k~3cWkR -zDviD+qE-G@vU2KVUsGagJ|ZSMf{?XS_W98;z>H_ewBOM#I!Xd+NdW%DD#}CHVWXdP -z-%Nq5y=>sH#Ii!DlCBigBf;0yyEcBQLnM4g-XIJK6(xtYZky3Avg)s~tuuz`#dF-$ -zwBW9-_LfUGsDIdPTl?H@*@zo}^QHu%8vjw7Lmn%Kq8s4Zp?TpmZueW<+Xp=?AuX;m -zTlCnh@5fe)fUUG1kOY}Jg0dCcS}jQ%c!)h^UJNw-OhisGhIRLc0$I;l|ET8=^qNw6 -z^ak0Vmv{Oyl;60hS$|FE5SVCPTA{+bXk;rRN1R9IhYNXKUf~4^3N%+M3z7h-29Lo` -zv&8bbhQKKyWF?_C5G{$?0*{YlMCWP-cDFdlFHZRm)ZPeug}mpLly83dJUqGp!jQ-3 -zk)E&fulH+dQ2FK$^1>KcT+i?P0SP@Yt$q; -z^8Uc(Bqt8`|oYq2ge}qi`K`uNZ04A>O!3 -zuZuyXjXZa&UL{B-^R_#Gk~C!Wu$lU{G3lYu&jykzDNMOizABoMk9Y>kP~cXc}aXk?N|D} -ztUSORINa#scJRi`efAqo(7J$Yy=K#ov@wrEy;K^J!=TsTh_GjIyYe9F`}YpXbgPcs -zNRuWzIaCPqy)l^A^BRZ7yo~N&B!LbE#0fuY)5ScE0(oW8{p3ag>suXsmi)zA_|(O` -zS_jr*o(SQo35Tt1&rrFb3b?v3 -zprmaT4Y7;z+2Q)bAOttzaJ~nsSFK1z`YM+kI62??{nTBN>C|m8-UKpcx@sA|xODxg -zT~+Q(PTACAswk_+cTYOU(_aOA*N{l{P#6T=;knuRCEPPUeZAnbA2|g9$+kP);?2ak!-h@)$<%p41W`3P(&x1(az5~(E`Z;r!MrcGr8<1bt!Hfop6o1my{VMn@}PvIXx|JGU$CFmgPxX^f;H -z{i3^!cd-`Rw^TCvx4gfRj_5 -znt96FvTN{^ITeZvf;UTHP(`EOCH?}O4Ozcdg=xxMQrA25@BE!bC(nYU*f2+$xX3k@tN>o^ntZcc%9=gE;t*nW?z9+ -zgVwUFPiN*yiN-1(2K|r-h@o{BSxo;rXEdZZ_|{w1Uc~lH&M#e{FO_cf*bB-Nks}#e -zvq2{PL=G#3o3XZ-&h6xQM$^t<^{>C(0`Rwa0?FKsBtBGC+p^w_pEb-A;TG>=6h8Qu -zPW&n%ymk5)oS;r{Mcq@eMV!iGIVfsxM^bOm;2W|+g{xBxg?~}xuZ&rJ)2RtdhT~UT -zX4imzZp2qf33F4^JSU(fY-W->MFo@6OUtC#?}??DSavAVpYM_sz+A_86#*KtC=y_y -z()zid&n0TJ0nt$y7}Q}S4#czEan4qWX@tPvrB6=l#Sioh^xlU-B`=AB!e|_5EKk>d -zcvuuQ5-?`vZ!BYTgqPPS03I+UhiGw@K-!1a{!P%x-amh1u#N71&ybAVHg2{WN_s7{ -zjxI#d1t^P;2kAweTfUwIPv6RM7Zl975^Q5g -z%~@8s^n= -zncj(y8Co(^U1i=4UCe;0EW#f?Fi|TB(oM+w4!S5GDN2rnpP#M9D;SxL1AzvDVc21- -z6TET8jgv}d_2u^-Om(-F#aw*f=6^}<#f-#0Qc#& -zsx<)MeilzLP#!?HKwkL=;I{b-a1+rzCPuG5+Jl5aHp8Kf?7$}RR(}XJcb#Il4T#e% -z(DuV8Q2Iw9HF#|30^1;>7x4zMf)7(v_dF!1_V^{c@QH&diX*vZ&xG^#O%iGc;6lSyqbM>eeQCCM)Hvse!GVP-3Or}@TPcbuJfey-;s#&6Hi1DM0edK -z8QZ!6w`&oD?}geUbiuSkT|`BGH1SJk291U=yw*MtPqJzOMZF(PAOk3!>*liRYDn<0 -zkV!I3Y%xZxr{Bfas~s{xu-ie65IIu7k1CwNbq3(>%I2gzcjEYXk?wULJSt3tY<6!h -zl8oT&J87K5GZjJpD7V%k8_7;b4CO$UI~Npo;tm@@zQ`v%P#{Z6_NS0hVo2rY4(5I! -znGK1dQzLr3+Ia9jAZs3bmLG77i`7k>j~b%JG!zl2&#nJ<79IyNwlkl1&)? -z=dy%Ah*rb9Af}`6Bg52w01903Hm_J-201Gt;l004It0N_?{ZY7h%Zn>9Jq{#T5&sj%;TwjfD5GP8by!u2J7q|Ek -zQ%9`-oj|^J9no$!y?=(9KXI#1$W+F_T<`&Y&n}}MJk*a4IdEzYUDNpP&z?1A9aw>| -zNo2j`p!)SjToTiTyabWRJh7bI!kL=w{^f9);!|0!Ns12P(_^zdy;&9!HbzN*f81$g -z7sh0yoi#tpXK`q+GZ!h~H}LIJm6|uaGF+0Hwa5T0dwt!#ks&ZV+5hHaG&Gyopk*YUta$M=-Jh>dJ_Dz1< -zY$N`H?5jXPgPf$?%Hbp<>N?Zy)r&cfqs*fZA!oE^Dq(&r~zwUw-Om8d9 -z@XF^v071WdR^cO-*9*)dkuEmU?WgEu{&X4dwYns+okwSqP+Be?%%un-7QE%(Cun9n -z?wP}Sw)WbWSocEq@`;T<3A7!MI9No|T}yIrAvJ%-#@`}imcRR$>vaQ0UMDz7t=|PH -z^kfx%NF+odN?TU4^Em&Db91WL46SJ+5DGp$SFZFMn`gsdu?^*g-0-wWqI9Nbji>VH -zv>Fp_FD$5zyYVom&QtGXikjr%AW%6`1tcd&9UnqxMG~~124@We#}RA4lo$5cjd4-| -zbZf?F?rMzpWCbID9iDoBfnpC<_U@WQ&8t6_?%cYek7lQkSf*5=zBWS#qA0lFmEtF#x&Gp( -z+$E4>21LH2X)W8Qd1Ft{vOaH}4iKo#FIdE&m!zLBRQqRI$qnRkVSfp35TpMR+{%9m -zZpT1v0Kr`?1|Yce8xCku1mp<)k-7Wokd&lRk`G+TQS6xG>D+H5{AHJzy(AD!nKqZ0 -zE|yG8F!uO%-$v{LWqBayUbSYP!u4B7CifjN?kwF4SN|or(dy61S*x9bZ=dThf{85z9x9l?m6G4 -zK?0>16L)VAmyX(536sa{#$SSaA3$)Ifh_%p;3mHifdLTQ<$03-65M(wGcR=HQ}eAg -zZ}v2u!ko5w+OJ&P{}S8@e}LguQS9Yp)&7s*?yLNl;FfjbuHXrLhjLZ`5ZucVTI->h -zNbmn4xUHR*Hs@1)pI)$yJwZuzw(s}!eN42s* -zXx-yIoL%SH+MAEz8aX$J^K3Po3~qg1zw@+y?rOgu1Qj(Q%dC#1?lJS6BU$dKzRf2& -z!Kfs1D?K)~j(N)nx&H)+5B{#_+2sp+3+}g;z=io=KB7Om(Df}A)2U?jm&j&cjJz{k -zdqd;(IpAhgyGyvA7 -zvER^44{bCj(4mWlS|$p4!Bz^`7j#P-x4GbLsw3zUbo!i7YmTw#7Oz(hqX)2zbhcc2 -zq<>*>LYeQfqAm_1i=HW#CEXwuy*|r%{9I8f^U)5U!0;GRQ?S#{%cX;floBE%U0+ -z0%ogFI=r2`u;!s7W93T)+qM~dQk7@eQuWNl&+JU1r__Qz5T$P!oGHU&jC%Q#s(S!u -zRXE0mA6{AqWy-brKw2w4+jGG -z(Vk*(#!k{r4%1ZFd+|e!!uf^)nwUwK%RQq;P`OA+;@^Ti3DqXv49c2B+_qHV5s~f9 -zz(XI^hEb-tVC8u22|EhUiutyxdWtH+>(-zf9+2H{?-+;Rk(%nCk=Q6XpB#9dn^|U> -zk)NU_56OPS)vlrdo2Wc8bU)%;Na{0_Gj~{q$eavF!X>IZ3{UAcS27{2mrf5~$Zwk^ -zP1g&=Ktcf4kf;j)uwAw1~`Ds%s -zOd-8~kx#Sekpw$kG&igyNIoy+TfQT%l5lTU`%A+^YS^CB09vh(zRM7cr_%KH7E1tM -zB`5X%TYW~v2ERsa)pQtoVZh_NOgOR$re>t56eqgoB-GSSrRW}S0o_S`yP-oIrndc6 -zQIa-W3Ic?~SrSKs;t5svpc_M_C-f(GYR7|5kC -zC5^F3vC;JFsB5MyFAywvUoKk_w4eF*JhEop`_6^r2eh%5aMuSz^1%e9xuBkp -z=@@l0{W;NF`;QgEf&No}O`Wn9>~S{;`k1sOrUpSRl^MAp;B1n_edbeYc`#PAUQ&(W -z8^8BaK8vQYt`yNaOUS+=Ghjq>IDiDyFswN^SPANp9*b8KWY>jSi7-Bza3)I`3A?50 -zNSYe#J;m`C;jU!pGw}oS?~s!nO&;0~s4r?g1t8p#0E8P3rO)Vqqr3fq5+_170;e%t -zD_9+i=?838=TcI8<6eelABxKalC1|n2L?L%qRl~ahb5$VWtglqkb7+|A1~-(6?ZmY -zP-W-45HC_W=43H8cripPUfJ_+eVcZ$_|N6;h!|q>`B&vC#8S(;cJ(CluDFZ2@3B^f -zA4UNqMkbE4tXBSmm|Y=;4^`*Swwq>^Ug)#`DBOusQM94v9d1dFmaEn~{Cu4urH6_r -z-}X@xdj$g-CO;9X@k}MzLRjHxj;wl-2niAkvZ$F~p=C7({wmzr-hE?+?<2ne3in#b -zZ*R6+cFXeZCoLQUGolc5=B4vk$%+|JE2IHizN*ucPC6un8ZV+=t;GF&|Ot>A}E{9Mi618^M@mH;cQ|6UWRnH>nsW(HINQzMbUz3j#J;=8*d5;!r2lZ!LLy&>ZiP%>xkYD{EJX=Q4K#UmcQ&UOnj!T<{kdtsL -zppcGE#vi(Y8R36v9fFwrYTM7U)ekRif^|0=vM;tRQSI0D!&?`+;Awl#JX;zBAvZjS -zO4dD>pek<=rr_s+p6|ycO7i-p7%U}cd_h~JJV#k!0ErW3*q?qGR4&Q?+Y4RrgEErC -z`K3Ql=EM|AKJv`%cZM`cpwOF2KOs^3bzBc=xvMDvz!GbqS@4X -zss=)R-hRq;^J;yjA*kz)e2tB+L-Mh9)<-K>ezu2t;xMc#ys~0E{GxBFL=sg08UMFG -zX)Yi9{5_w|6W044M?Ks#@~GnbaUNhYAsP+_ls`9KYk -zV?{`-CJMzIyAmUKtXxMkBeS4ma=mdB!H=b}Y8>P7)^DQWrMO90b3`}aiLjH8)-Uud -z8xQ4PT7M(?v+63MiwEgFvJ~ZbZU45ZHy2b&Wl}*zg7`6C?&>2b!7IyyqdT+uJ5sek -zRHD;%t-rUowGEt7PKDF055N;I7Bnhr0s(DqSAwl4#wxh16T}l++(IXjI4#Ea)^m`; -z+6)a6SaH;ki*59O*k!^gxiz$yE7Hf)>f3* -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 -z{0x>!Y>^X$3|g=$!B9EK52SQu)7}b}XlY -zp2fLUN#*!DFCLc;Y#quk$r~0ZR@kK;wS`5wifz -zyy+!$BzNX?k<+o$blM9=dBl7GugSsyLPW?^Gtmy1*S=QfZ8skj%6JGB9nN~bE3*Ka -zNWgtEO)SZf*bIapcX~ioECnS0D;HO#6$TEWM7ZD@yOmGR+=5Q*}bt)z^`7O0_oVr7~FzceT1w=q*Dg3%24y9+p6 -z)0X`@j#&|rbP}ys;NcKhq6#%?wDTZ;m7F-KpPO)%#V7aPVMA0S0fsX!D@1LQ)f~AP -zPlqlbk1p0)T>^b))_LROCVBj`)tql)yHC_%1GOrlbDO1v2SR2dUQQQ`#`j1e!dl5Ds+Kn`O)Py(A;33L-*Hd@_Ec9PD-z -z)GUv3;+p_@@8USuTl=tZ{!alo4}b%1Hvz*ioQ{ -z7|#?H)M9FaO&h>b-1He$&u)|{k*$wfU+fcwY#25%*8k-3*mOvTb@)Z0OGcg -zu(WShE8+_120+|t`Pv$GFABRr@U>$H=@qc~o9J2shuh6rf*6p)WL$5W#>auY+88m_l#9C7qRr -zp$xX_@+J3&Hb(^tnD`DR<5$YsRmuk6AM357(^ghnlMR<;*5ACXOYqNWaP{xhDZr>_ -z|0{8aNeSw^_yMij*)Nvl;EUym0VMA40Es&lAaNVoA4yaaJ@t@w0Qt5*mT61IA@^dz -zj5lJ9zcPl{0wnIEv_b``b-~G@gNoRLzY;h8XxP*FIX;Bd%oHUxG~M0Y2-Eg3KmDty -zB4Cc3m(;aqz}}J;HV?ReijAvXS;{VxkbP^gPq?s~R46VTWE4 -zJ_s(z5fld42xS5o4c$15(Nj4i5&W?W5;|ukeWF6b3&o`&5lg>L*-~!NV=h_j_ICyG -zUyORw5>L3Lrk#5^bUk-?V0^16CeU#3xoUMm&aS_6S>HC^ju{2;c_s@h!x^`r-1-!# -zmJ20#eV-Z(eMN-aBYuS+=^vNXdUvU?f{=Ng8Wc3d?-K2XfpJ%21%rcFA=GNE(lrgs -zVtdXHjlsAcD_{A|FEsgG5J7H -zjn{4vcCdrH_epYedL0~w*LN*hM2GyM|x^iDe@d~mZ}CaK%t9G$_KT)zi*A7Z$@VV -zLkK3gFx<9SI=zEt5&Z3nT?sBl*fJksY_uHpT$>=1Rj9ZtLyUzcOIB_uX~#Y5PxGw> -zJeQD&HZCkuO%|;brBLJP8kbso&$a|pnIs}ZY&W_oBH-s+8eiq(7)y6VWKF9K<*si> -zS%Z3*k#Q=H5wqv>;>3BZ`a*SCk02z|JYAc7X!{ennvR*`u$;*N{lK@$PbBx9AlPQ* -zG$%y9qa6%;coMXa7bex5wUeq0e}1f4Y2T{TK{ilEcO``avOS94kxh*ygj{6Qqrc71 -zVEc0?!s>Ga3~SaM08Kfu=c3NS4Y@lWIc?Gh$R;W$Jm^oW%*s|^$XdYZv0{03eOT0T -z3R3b_(GqRbbM1I|HIxnIPZfAwDk(6pgkjym!I8=Sxx`N~1KkSMBB$IL9;9UeXe*$O -zwmZh`K%)2T++@W*W}2UplhyD6b|JM^>!DL75u~=ic9Y~FV$cimuQPpQG-$=%0R>*u -ze^VruG6V!43Mq@+DxyHN{(RTAUfZ%6=kPupgQ*ZLobOzE1Q)~g3DFKvl+BZ9l3^*u -zyKae57f-zTy(PF&WGXW+H5*H|vepBHTbN{GU=R9!`Wrr|RLa|q%bRak(4X-&7}ScC -z-N9&-Edqg+XJ7ET(j6AL0H@r>yXMF-ngUg`mPlvc6<#@X`3|x#I-Z^2YS5t_{wyzR -z6d|JtAU&_+r%@=B(untNOp^#aqsA$5%!RHioh0bAnA^NqY#ik}-;>;5bx{FhlJr5q -z3pVffFvTXYDHSbzIubQs4}=wxYsRY!Y+cBFpnU&ZZ?%!zSXJARlYD<#=_7r**Qz+N -z(Rgq{x4*QkA(|yILt1DUO=|P-?w72i{-<}8@@U8-N5KzL`@GJRp^wnjS+5bS2TQmP -z0NY{*gSp+ZTIBZ88GLK>dEq -zeTGIDixi9YW-%HMOVIE=l1W<_uzkY1hv|A;?O%%f*LP+illazuC~kkdQW22#d&0E5 -zybjaZhY5T4dv9~MX_OmhbmVX3vn_vvx9BB88AzRyp!lo}`SnIr_frUYK&?dy)$+a2 -zSX^+&0`8bv3@(OS)5_FH!-LOyU~qy0XC)G+Z&p;$k%5EwhdJRNikrDtsXi^`KNR<- -zPA&Gq55-MSN6_kk{X=m(2IOn}P~3D!q(2n*d;!1MN%VOz_6P$Gx>Ut~Dek-YOstdk -zmLH0Hr$QZ!Imt2U;6cSuUdsy+Mg3|=Y|?WRAN)^T2aOrlrtc3kfBt8 -z0pk&RRji{Cm|v`2d;#Ar5=Y2{#IXE*di~Vi0|AlrQfTiN8_JZniM6Rqa;NT$4XnrY -z5qJ*&$-fjg4U2mBKNR;pf~IEZ55+xunZ3szT?eK2LvgeCnEXR=`_iScs2wNGJ^u0P -zarv7#AWWN-y&9Ht*Gr*Vq(Qd;sM$tyo+BW+u=G-+R;25cNtfBXKSPcdmt_0z< -zkTBE-W6L`j`K4UsWfCRX{T%d(ruh*&moR>);g?i#M`=EN4pB&7J)3`AWs`|kbNvmAl?$rYDN)&V -zy*omN5*gJ$nS1FyY0pEaN%2D2$0Q=*1!y;K_ -zRFtCLt+aI^rq)a)ix~IHQoGF>%bV2kQeZTcki4TxvtHE;wJ!qeF~JEW6vF~UE9T&ga`GjZ_9#!!IOQJZZ!wg4S`LO0S1GNd6cjkAX-tLV#G07 -z@=kRi#qv}Yl$|AykpV;{8Uk~cJ$ -zTW(O+b|C2aR&g?KQb|XgYLcAlx^n+8mW-K|SC&u=^ZiP|QdBN)kabUomv -z$^~sa6rvxcJL)a{XnBMv^t)|CMLA?w<+n)^JWy6EQ6n!GEPSXlt<<_`rAdKGp@ym? -z*A2VogAbLjku8iu0yd9$!QD-8j}fJLZY8BTcE2e4_?Dy&rA|LW+g~6LNd)a_9N3`s -zvp#F8$AIboE~6|m(9G6)B-8-@tL>CNh%`<32=yeYdV;@3M2V%#k9;H!M^pp8YX#-W -ziD+@f%YwkQI85KBKsbn~DXbCU)xhzLf_Qbb_!}OFD}DHJ650MMuKXI(3&bo`DRyuH -zx&r>dNF=C1|i&>e(C;Aqy -z6o+JZvM?lTJRMNDOM$9@p>?ve0Yt;c1CsG+aQCbxw)CC|3+mdj67(>*1?6`+#4(9z -zEocR@GEu^4&sB`c4TVI86<*vRub!bjlnx#{Cu9W;9ht==V!-#vb>8O~QYi)WqreI| -zqff`r;A5ulV*d>J+z)6T^XnP+Rr4I*JG8>HjU{3PVC}b=jDGsDen>VNGHw7c@${$+ -zl5?Jq&%(oPWNCm5X!4p<;RB4IO;m4;BPOfFYI!rhfmMha_|+TKN`1j#ODDD(2}6evlc^ntgd7JlQY#M-cEIRw~XvL7?VZn -z^Q;+L4d*Y%4>rIvAv${y_*rlrE{`*dK1qV~Sm2h5Zb#ZR_o*jhsY-s}ee9uIRsY+-`2 -zv|KZm$mX;+V31N(xVO?tuYmw3`Y9kg52gE0qaO2jR}FB2l_fI9-RwOpFkIC^abW65 -zVfz&X)`;I~E}PN_t2T|#vqR0^F=32K>ZwKE&Za>m+>&$sSOYOTPWPtwZyM{DC|SXl -zuVNNfpLE0V&5b*ePCElr8O0NI4gYZ5(ZAU<;?C}t^hf{Yxc41?IPTM2Mqrde2dmvb -zppfoLoyPPfXmq8&;baAA=-vN -zudC7%OUE6qcu=I@gtG;d?3y)at2TV2CUxb~Za~7gYj!w7a-TW(ND`-qG%Lu0P{c9-8JC4qd%)HZ;>wQR(A`lJ7ZSX|2dlMB7i2N3aODJTs8*DUJm)O6 -zj?Lm5y+I3>lRvD}SZWStOk4v!8B%t6HUPfql{Y*!4KQWXevg&2*nMYSB#9wCfAb6Z -zhvUY>348Hl9lQ7Cb;a9k>JZ7Akd10XqxmW6(BkiqD?am`xI0Lf@B6( -z6qCJCe4%?pd)R}r6WpA&Esfcf5kqr<8beicB7j!PceqZ@RLLc6L03ZhBLUiTtYgisiPc!AJ&#u -zq{i*C6JxJGZ(Vq{Tey3Ijz}DXXKG#qjMfsd&=`S4#NM?j2r@Iz>fclaaBkFGZNtmRki|Nq+25~?sX||0`=?|P^mu>!V+`w$RF_%Y>Y_K=zZd&f9Tg0v11ni1` -z#%eppZi#Q~6;OjRy_#$u_GOVU#{%|teE?1xN)-%Ox2c=eZ|ZoGJ)_0Z_vV8KQoO4dIplUFv9X+F2R)Jho~dh?kR1@5L2AYX4W7Uwk5!Iz?v}9l -z@h~65Bu9)6!9mY`tmS2mB2%HJzD{WqAPz)RZ3~9lC*Hy(nOb|} -zEaqyA19(vYfVpkCdN9s&_gQvcr$u+~0j&FO<-xPWxG4&U?*)4xZ;Yg)li%k(oO)oijuP+(rp9H!R?J -z$8}xa1dONSsw$V#{jU{EGAZ=15@p=0DohUx#5e^z6AgAxaVrY7@I-0h8|u6LA^r~_GL -zlUH`g<~CQ(sZvpc!wu&a9V}5)6H&Gtfsq0lw~+bp4jAA1z&mHHbShCEe?V@}U};#f -z%J7((nIDk*8OS=ba-ViVyHK(`tw0F6fdyljs7;-ux}wK|VtiHq@diYlSa#sXXSEEQ -zzU&2+B%(!>!~#u%-;=ynXnJT1DD3Xg*&MZ@xtgP8kfC; -z=TZkWS>eFan-nWhiEgf6>y+z)hNC}B*nQ|_`m9c!LsC-v)?F`@+^rCZ*Re||WR?5G -z&dLc|JZ4Uu(?{z`*4L*)RUJ4z-y|rK=J&-`z8ym`3OTh9kS`&DJ9Vv<6hi` -z@28H>eK?1~*F#>J8{2KZu(ySYbGz1)yUWz4$Mf^kb-T&!nMyyOZtr*R&re3*PPsHY -zKlts~Uf=g0+T^Y0$K}4f-oL#}P_xrh;jJ%tj+;Zb{Ehj -zvsb8})_1sm4HZA62vM?51HX5xUIz-*gI-8M>&N`8TI8nRbrj-eXrsidftlF};nU8A -zz36DU(`VIaZ#1l6!c!hJV3_C24~Ew1HmEi}<)exUs=F;Ge`i{CKYl2kJ7N_%dQquH -zXRIf*h}aYuM=CM<+iCmUBlQKfPCt^}QK?H3rHTbMsoK;btO<+)gGKhWRfLSs9tT92 -zgNAidzC}_BYJ%18ALN)mY6XCyaIqH^ick5!B6k<_tr77TFF*AcJop{ao=>hhubbv* -ze6P;o=^j5mzkoIDxj*GG2Pice2ji>uD{e;YAg$->I$O8CuiZfM=ng(y3GmaW_ul&( -zQI}T2*FqcAp9U%gXUqIAvnaoIdk-w5L*Ks=I5T|6K~ -zM10((WXwUHh7a*3?i|t|g9An+HM6J^+n)J44!OOARS`B_=k}q+>pxPNnQND+BybHP -ze?io@;X)T1P_ya$iy0=(X$x+rd6S|4I6ImnbeI*3)0olnuhGK_pLr&sPjM}?`E*PD -zAIZ)556PXCB<9Vy9{tojMO8GFfEoip-!Amb;8y}SwJ*)%XCO&+nS<*W*beiG -zAbF%WFg38|-Y8nxzo6 -zxTgJfP#6lkW&3pCu?ZS7P)Nl#raYZ#J^W}j#;4aylFzvUY*e0@P>8y`d!tUDfAHHb -zZ54bc@?owsUia%9e*JJp?7?mScKwoeZCFhH;sv1=NH7~dR#2aA8$({w5+H|1yJ~w-M(T25Xx_yb_`A@r43Bdw!M(Ab4ha;Su{S -zQ_w!19ty)C1Tykq4{MH#FV*!s^b|j?t5i{!Nr~4>q&N)JV?KHp%n4a!C>sN274tPg -zUp%>S{<}gPQOOv%jtU?RRMk-{=W;Xsu%XQF;v8IKWS%?n9T?l~Z!I5&@q%-l2qIrj -zksN}&+sy{({TyzS6*2^dGmI$*NeenMMH)vVgEPD=c7!d(H9>v4#x&vFJ=)&(czMjK -zkNuI}o|w0X(2@?)=Y?td!@64f{3b)x*9qDCa&?aua7pt_>+SjW8+n-a)}V>++cqB# -z*b@YpVON3P>3Rmq#d-b9$oE^^YC>mb$H+i9`JpFFzAN?RN6Q$UOG|93_xHW(YAKrZ -zP^@!c+|cB#&1?0@n;YC3oXKN>+xgP)eJ~DkjbDPyk#L@Dd(U~P2h3&rYJzR06YmSo -z`6JWsnV#<^{$aNqmh|znzgmv7W*ZEHjp`Jo%?s6XEA8{6c=##ouFIUf5pvv5Xf>|O -zG#{SHSvl+a5(B4*x-SvO%V{T>EaH51fnl$?U6I;FI_o>Lgl(zLUJp^`k}`G;}Iep5Sz!sGRC_tM_)jsm=~}0$|}LYl&-r -z7;*x6G2roA?P%8a`vW;_C0vQ@NMz -zQlPB5G@jYC2n{ksBLDG%nA_k?YuvO2n~8SevHf0r9+vx!b}famsU-LdDWL35p*Ehp -zN9zhvDEV{Lu1<7)L&adfNH{YWXzOV8vD%}Fe&P79z)knEb1_MPdBQz -zn#!p@vqk{_YYr**tOTGE%Kb&yy{)pc!rSPzYh0+cz8oiuZaQ_jx%HGal(WEH*Wm@F -zyc*lH@%wIaOXjNSf)3jDI5E^Wf;dna1JlMV3n{$;5-A^W3G!l^a}ODOPN#7vmZ2FO -z?J)8AQiplXY!TprD|VWMt9B)w`!_|g1HNI(5vkbaQe)OyU}cAuk@>|fHU#r9t-OhV -z9e~PP-m`YYU|h=~SEbo+jOw!i_;-@74{Rpzy$9D^KlKkhJ|REohT+Tf4^_XdY%!v3 -zNae^cb`h_(!&mfpBD(j9q6Bth+#@wQ_yTuKF>c)y*$+rm4NtbFQyBzn{guPRr^Sn| -zV|E3YX3!>uuZ_BCsadY?W53}ky|>)9@! -z*9u&?6cXVT0A`e0BH$D7;0h;yhgyF9jh$3ns+3$Da5E)6RxoPl&WKIV@L7_w@GrET -zKb00mJJq<#A!uZ#A%viU-V>faI2E5;d!SVg&*SrWI^VQC3vV5`ndPNtzItLW-1_P -zC$vNc4R@(zYK+S`EUpO8Drn@bZ?1v4+xEg^IS1n`VGw13VNVZ;nat_1x}U@@i{HoG -zRj{9*))V)hMvwcG5vA)-+<7ma(oKt$FStj`XFL>zx*KwF6AxAcoF8-K{<{s?WC(js -zhes8i)wk#2ILsOlf_sC`+4P3h$>ZyN5_6?*IHk82kn_C2lNP=L@Adi6N>_s;4aDnS -zNrfTKBnUm+l`RktC_@X79F|O}Gk9wRI(?YIufWzl5RSV9(dKVWzgD&u@?kTA-m&@Y -zi$r7&1bj?kf8l17#6d@)L%RiQ!btJ{r#1sOI?$9ce3x>Zc4*Z%db=pcVnL) -zZ-#h#-5OzR#I;cgCd;h<>-5e-W5My|LqxbFzWecM+NBseu@Mj7#TkAkctOUnXS7OU6i-O#b;cLr!>xPh-lqW8Ca@;uEo} -ziMR%w)Yd&AE)NALs*=_!AUokR~)H0 -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 -zUr4yzZ9+!UJdf8hZE1Jqp}gB?Q*3+ -zAx-X=)u3a+Kj+8;>{3AD8FYwgp*DuqIi3j~s%?kb<#aD;HdRxdUU7&L50!qiiDi>hp$O9!Kis}{M0=SBr*Qea}OlQs%a^qG&?g32SU(gObzts`)Uk&(J|W$=#wy4IGmhp-+G7Jxl8lXd5} -z+3ae>vr-^!{@xpxZr&tNMdJYqvJhs}rMuj*!b-y-w4U>HY`h-W)~u -zZa-RBKjf($)1|;>RByj#TDzv3GKT&^xix`R6us;9{)2LdcWT-29&+O)@%4t%j895z -z)$Z-7{h-`w{I=)vfD$Bb|DxRS@f(5iFGK}#<#hCwdjFu@-U=kEXXB$@vXN>FrID*8 -zEiTmzCCDKyD49aXYI2TMPYa?!xJ$>%gJ*?BWrhfPo!o?kvvJ)~Xz>sNCWhmI_dv!o -z1B5{fVrGYfG!jlJqyieNe-K%$W}n%JB3s_`W@$fazt7{;KHt8&-4|ziZyJc(W+m&c -zm%odn()d{KEH4+V62^QJAh7(!XbwHO~BDLo#%6`8sOMpGayPLsF8 -zFhGH#H!~v#D)_j%v8MzR5vL=c8M(@iPF_uxQC5SF`P!ay=U=nYX$AK5?L5(K0;%uk -z=L~3g25Ft_j6ec&6{|LGgK$0Zjh7mDF$4cR#N|Hm)PD#LhN}HN%Gzj)X0f -z%fh1D=e=UlEt7IqeC9($rD4OYO>I~qDPe+6^f8 -zOCNrGNQ{H|_4Gg&b?ijS8L4=OZ-FZ*H*a#=G729O*qv{vC|;r_j-Pf!_zw)BE5v5F -z{Fc=xHl6iIS*8xYVKkV0H(X@y>cH>q+3dagTy8jAXR?6-IbWP4quF0LgK(Kf-*2#G -zLf8RLw;dn$%tSb*U$4^Lazw=>d+Wavb-6)ZsO%xB$XdD#q7@8aRXxPAD`{W2a>< -zK@%>0IFjCFAYKX6Z~#g%8}Pjj4kND-qwrfbaHU6R3N}+TFNjVetC5dZx#q8w(&srP -zgk>ZSm>p6iLtvBY9abTwGjCQm6j!i1?X0U&o{j6EQ_P42bt4@DF@Cyqqih1~8&adj -z^06^-lqYDAt`?a5YfhjJq147vf)sYEq+h0}Yd%VcWe&`i3QELtn==GT0paZpMb_&4 -zJ>L}0^$Nb(gUJDf+bm4juXas~QL>bl_xcKjG^k`S+Ry#ryJ$5j=c)s>2;?qAI$HTY -z+DF2R8OJ-z`AK};i(=>}rmzxTX7}L>nfYsZIjkDi2%d^SlKg;=D`Z;v98&^vm|Mm_ -zBQ-mXAailZ%+2Y0pjVsshFr&uW{l8!>4ju_vu!tdGuF$e1`=xaPT^?*8U`5`No8O$ -zHVE5nM{BN#@gtf*$cN0=O0BNxdj$d?IyDA-|F${VBcOgNp;)ZaWg#i=4Fbx-rJryD -zqCg>A;HFBgEvLM_Mi!`&we}?>p1Q`D4DDA>naBk_$3pMA46Wjg(j;j$Uf0!iGai86 -z5Gt}DQC`f0nJl5JmI{C?CgaYLhN6R_RKMV(Jf$)?4l9Or6K7uWz@ECaunk7`~YAKu#?kBAS2S61>4EdHX9z+LQVS5n}vRrusX%cujK(1n3aaH -z7>q~ELTzFau(kINdN?p9BDG4GtA#XQ4XQ605vcjg7UG6~5a*C{BEi|Sx03+@ -zaV>>h9uWdBXGOhN5}%U%1!8W}$?6#ukxYg&D*B}wMaY16^)mS(K}l+934U*+-V9G9 -z*b(V{*g^DoI+}dWda3vAgWZvZ`XHF!`J1MzswGmfY!9iMu`v$P0gzZu#-m_|p8a#@ -zOtn(!cDKR?Yx`mjx|XAag;4-#e;b -z`Ti9!+t|!JW&J_`o&z(v>BvX#c}+QG>SR>cr@P6!2AzyBLMc`Xt2UDohSY_*&L`ff -z@(sYGY(}ua9;Glrdhpn8idxS=2sG9xDj>^2lg$p|5*iN<3fYzSIh}-=RTNW%bCJ($ -zk60@vo}0|Cq)g)1QPo!I`JsYd3UjfEJvkb&!?*6=)R!f7e`jo0TJ3~XXIcs5IG+{4 -z)={bE0mrb@@H9YK0;R#FfDX(L!NqtjzxYpmMe(Z}#0i*4w*ed}eXYT&trqsaEn)p~ -z7{XuK^--s3Jq?(u3`-?W`Uox{4#$UsE670xZi|)iD~}!v{^{ufQ}2}T;IUY5d{@Ax -z#cK-K&L4}{+@EFWKJpfV)yC7)TnaT=x4Rarxd$jBThEU7+!72u?qlh-$?xie_J?ig -zD5wZB4dcAgs*?d>zy9|1jLFuaxMPqLXa+9hRfA4=7WUs0JE?4H?yy8W!*aNM(b`2<`M3j;*4Ol}`E-1+uP279It7Swff-`kfGo`+R=wrVd -zDg!|tDFH?3S`RM)yN{pXJ&YtvUU_tE&=Q)m<(Aphw%}vTnbq?*&l!|Mu$yN~!}jtK -zyMFr&Uzmp60x5kSwW~GLb(iqYfs`1&1RahyPt4Xp3YABRy^+3T9)fqoBe%I-=Bg#@ -zGe93RVg=_m!ApjwJ<)esZdI(j^jH$2I3ZBgXbOeO1d;R1pc|%kU?1CN7M*Uw`Iox( -zVQC~T2=Slb?DHQ}<+hW9=dpOmL5;c4sfIt+MiQ0hj!{!4>G$L& -z+_5mts|{ -z(}q$+TmO7+l)6)B7OyRE=im;=jiu^vQuW=%Cxa?mr1m5yPW&i$XYz=F$jRYQ&FYzt -zFfpsgLi@u382XJd9glgun|iDd*B^hLc%kQ%O)5Lr(jS)#0&+!{6U;E=jYIb!PaA8J -z{ua_75G!ntr!y6jSEw*H{&ia^3~gjQhfsyf!DbX=H~KubAm^|CsKTFFpYg*iF&V(~ -zNZ-DK>W$nYoKwD`s0pud?7#A3Y*^$n1>AkpCkCQ=AQSSN6?1A+S=RiF952h-*;;6Q -zgZ^&q&LK%naL74cv6kovyOLO}f`n+HcV)BTN%2~(TN7vv4gF3VxZRe4)1dB9bmfsqu{ey3R{ey2){flpJ-o0a5 -zQ(DF@2oj{%lppz`tHD1c3a-R^?j?NqBu|xl -zHjOi@mzIa2Azm-Kk*ti2LGVqXIdMz4X);Uv7+F9w#0ONG7+lh%}6>cE5>PyX_DMfH3GB6()?}mvN8Zq35mr*2Ig4 -zAKbCx9?gkng&BVg>YAghnQ}?{1_cG+pdFOUp00hj?m(nR;7!JwTZY|FFN1DvUk6bwa^ -zp(<5*UJy&!hZM&xTN-{}7%kxO2CB(0^8)Jx_R#Jy^4eQqK$Ejl2-|UE2lIHE01@ga -z5>9v9VURoMCjJJ>nOd3P7^501D);_u)qH`FG{9MFX=63ge0UtzG}`70VT6E-AP%QJ -zSmY5D#!NE^mN+{8E|e~flj1yvhN5fZ!k8=AgYza}>J@I(f{N#>q*kCru1^+YguwqW -zb&u_NKwFrAW2>=kqp{i8wr!_zW7|e!+qP}Hv5k4#bI#0s*}q|5>sjl5B=T^xk%#3+ -zvj{)Q!m8By9NdxR(fX~FNnIq@Wr)K#ck{`dJxF8-DP}bmSe~{dGI`9YsoW|jLATOc -zN=r$Ad0eZc49^;;`YDH&s#(0Qt1zzK!c0<5pag{4S*~qI{9*1m{QvY -z{%3E`n?Sv?c++z0i)f7F1Rs-M&1ZVoJGK>`VI$KJg4d@_Y7Fq$X+qM#WzKH(-QUCK -z+uIbH)xQ8YzMc-m5pf@zA0HG;^TUecd&=GT&VxiaFHI{{b?5K`zXC85Z&-DK3Rzi|--6;sC4K -z$x3w};w8;!^^Gs9huVJ`@(lekbIXY2xmTdQW^-OU0>`p{6wX -zDbyvIBHA(DVDK^%xmRS%{1R20Egt-l9om9^8BZ&#X%JEhjV4gna6?G6mOesh54j#6 -zTdchu@&tGL$j2TN1d$T#@GAEDypz7Dkv}nL!&dx$Nnv9B(KA&SQ!tLbbUl1m)|^#X -zwg}HL^pQbGRr5x3T3ZVX2>5UA~g}8Wp!R -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 -zuN%278BJ -z5DmHS>dU=oeWN6c6XkouOn&=*Ak$4fA>1Bqc5q1pSDdU44L{>xD>0X)^poVH=7qc} -zJ4AX*bDSwOKCNq)c&1B}VS$o4evz?>P&uv>otG~yA?=}~7Z^}roGWGIh6=eRQe$Fw -zi!<=zE4DKueZv#^z6C6wtmlF7i`+V@4y*`5zFb{c7muBC -z^Ydo^iJ=?!Emgw;ZM)+eP(YqyjYLw|=egD3XK?r{;FCEeI6c4f{Ik>?MDm%dM+}3k -zU!e~L+F6|mj^=&|*Pyvh%Q7p23*jIl0q=6Ec+3B{l?~{1jST+*1yOd}J>mm6q>(SsdA;ngBx -zuhtYaoWlfq5^PnCdVHd(OWfcLM9Ys=-w!su9)P(`5Xp@mRi(FAFP*zVxihjhizoIe -zoWq`}o;40P^Vi%SVk-KNxt+3GchN{7?6Jl|ymoYwXfdB$asWeJqH&?K_jIX0nNB7$ -z$aHNAFt;tb)jvz;FqiI#DI3-q%K+wf`+y#JAg8qWsa)W1^o>QL@1&V7l7~qZ7I%OTvbuvt=Gz_$Hug?b4xP!KZ -zF}yx16OH -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 -z(a5@gk^&5D{1%2)M`xu^V?$LH@3} -zvarXJ7mFK(lKKu-teYRueCxfUV*d+~U>9v4vb^7Lmz2z5bl)3Kk0%V~p7I6;-t>yF -zr*e|c%QBL0?9Z^H{o~nuV;^=8SS60Jah}N&uzvuj+@I)NvP{(YzTT~22Iz?E+!Bwq -z%Vzp=m8+Dhq^P+OU#vHDAf*~{{%#zFT5a6m%ntKrI}9EoEjVaP9Vz??4y&LA6*u6j -z)I*euNwqyNWngbcu^q3Bi02ROnI6w=Z-9v=A$7Dk%a@uXIRhnzgs -zu#G1<0JnYUHnG*!MSFhLtu^$N6T*PO>D~3^rM2aYj`8_mrMIis<@(`h^+3=pV7PRv -z_UHDHOpn3k^Y)d2fYa-x^~)#-AR0Y#1H5fLU4XZ}KCPF0@@gUx^7wK5GVVsJS8e6~ -zOs7|#Y0GkGE$;$R@3tI9`w)Kwn-s4>Ta}!rSzebSJMP5zOPrkstZ1YzUbL0a&O`4 -z_=WLm@5xqkwl`L=Xl!CKsEj63656j{=q&)vp59?lY5mvRMl{%0VtBNvyXpNSw?BCn -zI&sr3sRr=2Bf>TX$B>WI*jwzMvPpe|E>fm58Q41|&?~>gsaKdk_%%ULVt$u?H;b9_ -z+Tf)Lbk;P_Eq;y7M9;JU1C1UtAm#_{2{pv*8jCD -zpexcb4QrDUfzEtj$L`Vg{FSra^Ivcq5&&+qyv#j^Py8Uq=)CmK@%=Bjo%3IC+w-T= -zmd%K-r8c;M%ou7GPRZBmo?ex9_OLocjEy3@|CGdSa -zj~i0>@EpEz0ar!Z?UT$jld1Q(BT!+scqC9dSHbSl4!3P4EWV*kf%ZBT`cwb(Cl|b- -z$!NF?a=&6+BY{7Q)s9he&Kt0T2=c=M(o0WtBI>ytSqx5iiFI@9gW*uTwXQ=9@nzbj -zAS7g``guU|$V3Eh3D~203Galwxc~FE0olO?-(3v{!=A>K@G;LWOd$Z4RIDsl|z6RdaAe&y{I_+@mAz8p<{STy)8+gitfoJkrjaiJcf)*EOJRYT*(sPzhi)Iv1s -zZm%223xeWAB+ib|bih7i-|!&Y1|>HQ>Kn3yX|lQ!^^Vi{FR^&|D!g4^iW|z6AL*0) -zpl9y|a|&+HZ|6VFGHk9mAa~)h87t7=zFnVXr>ju% -zDY3En@AbLHnaBGZ_PMEi8a=P{;+SqUVQB?~^$b}E^$7Y#!~AZa=WwO2PWJSlA;QVk -zIxI*Zd1$nh+SmhnmRQ$xIr9~{Oa1{V`{|6Ncunxt&e07KN$P}jQxr-yz<_DrG5fi; -z)bp7?gmYAZ&Q_P1@tje{OBSum)*iosDPsHO+8SzAFF(9!;V2gNXXeCuz`&ng;sT}A -zh(fOcm0vVuMYl@hFh5L=#P)Unt^pB!SjECNw&;L=d--lV-lwBe#?a*z5>BboE=SX5 -z`N^&~wdm`O$v1Kh6RRzbb$xf7m;SiC{Q58X!jB;^OYPoRe5c7B{^6-_K-s)vI^_Z@>{p0(d&?xyQAOQ7Ey@}6wV-dj0Rp3es! -zCz3H;0HU!73|e}1q{kQ#i^#RKoSOgAOWuSufU*BWnL+)~ShE-rqWoH`FQ>`4sqgcv -zCKV-+h@#+~6cgE`^1l1DIFzmqT0O~+hL}b}_1Kf$vX%HeC-_lft@a%U{L??C9VcE6 -z0*if^zrcX@Pbu%8yU1qYiA-xtx^MPZv9aCI3Gc58m(Zb{`2w -z^jCWO{=ypwaLjH -zUr(L2YL&?mcrPG1S -zBrI`VdQS1O=Tdw8Ok-m1AAH|iSL5BkyIk*Dk32N9eQymtY`v{mC#mw}r=dXIC3MY^ -z$^%S;C-ogrv(+KL!1!$tnZB`Ud+JX`5S|~bUp7Che`NZmzjILPW2_w+uL)5I<=xt` -zFR~qG4-bFbkF%v0U9u2wP;Gz5o0cEH3ioucav55cq|Nj7@Ju*QA%MZFSl)Yi%CYL= -z^dKZTV78I6G02n~#h(a~TgSk^_@gh13#+INH}%K&u$gUIult?gYm{RDDUBK4;fu8E -zx})szw6C)O@2r?Y%w7D%k6Tu~c5DW6`VJq`$E`^GE&tbLw8gJa-EYWLK`k*bY2wc>^X4J3cSIh?bJEYE>64vavO21nrrp91|OpokwNstD-n0v -z?=(Ni1_tzMjPn`la;@JoYinrnhRBqk@94U9E&y`-2)+&7`X_(z19K$k7u{A8M_WpM -zIw^?4MS&ob+`CQZ4{-$qlPi -zlVu>9sa;B{;MZ+ia9(UQK<+X9fz9BY`uHrewn$I1CTLOS3td<83lOSPgAeq*>ET<| -z3so~@nD%C4G7m3DMOA#hPeKmChn$JcWG}NNLIel3zo;jyUD>B!Y%oPF2n7BdWRhj& -z{9!SZ{TW^LoECU?FYd!iuUVdOqQCO9ANfxj_XDe)or_4ek+!4t!Ci1>Wpa=odGwod -z`_?)H%!NIHq#%-)0CV4uPSuGT;p!E1aQN8KF+Q)_n7;9DB4-(#rtlewf^`NJAvqyOS>2`AELLK4kr(&#r5xNH&rfsawXJr^|jM# -zzw|-p>Fvgs>mGFJ^D#3!k3{-L^&vjqf<#9{3(~dmPWZ9_R -zH31=Qos~$!^|ga1{~MM}Lo`cSKi85f1PS%gq#N{7;PAMLJ+?BT^m7(-aTqK52=ehj -zzH$@syVO`t|Kq2V(?`#WpJk&28}2f&k>#n)4TiYTad44l%kPTotd8{?Pn*%H`?~)6 -zyzV{r4J2=0q-!yC9Lrxg5>(GdUR)(0tOW*Q2il&Wb&YHr%=t{(S_CUw1&uYXKv$2P -ziWp1Kl=yHK#$TSB3~DvZ8m_Vlw2)`0xLi;kbvUT|A6)%2<3>u$#kT`~A(2Hv;lOX$ -zg-ne&Mjyn3^Y1r5w4i;znl2Fs>fd)+r5jgnX7Rkaj&{709Kk&r`%_^lSKL?z|C-zA -zzU*Q9Z^P25Qg&Q!cMIC{*FMLR@N1yo+~;&oM>n)69|7hzja63|)w?^e%begdz}#*> -z|6}Q_E6R%=>E)oL!z63^3lp+D0UYvxnc%k_bvkgm(qwDl^?hL -z+-8&B8FUWUBdH>O5eB3=>znjU*4f~1-8I`UU4x?^Jl$tamUG@; -z?+tDwQuDr_)Jm|71~xax3~!HeIA&(RrnlKqZB5;GDWBdDH+#H1?nz)T#iqytePJOC -z*l2Fhq#t}uA$sd8Z~WRBZEh-5e1=}-yfEIoR-Wp*TVrZG3PnQKyoa0&2_e8pFeO$4lNr%qwmT=^Z3(wI*)`MgM`+}bp -zvyeED%bf|CbzY6{$l8@su`K=s=#dx0w-I7Y72j~JUM&sxsX>Q#k3X(8kUuG}P66t+ -zS&QA380ATa_apLXBE(Qa^V`7qwhsswX#+dcM_Ueiz8#Jf6AyhcGGp!s7dheb7UK5M -z#Xh>LM9^@EdN|(>hWjqKF!6J*?xR2;W{Shgi9@AHcxtdwTnXqw6;KTyV-KNfM_4h}Aa<>Q$Z{zAtqw(gG*$ -ztvz41_|8eq(dSV8S5mfB_0_K1R6N!j@qW5)>;R9{<+(9<+68Y -z6m}SJ6!%*gu!Paee~$ET+xR6xQCK>!tq`Z8%H$&PZyz)T -zldqT;Ktma*Yurl9{Xyd92f1c0~C -z{&*lHS2Jy)nBY6%!*N<8rAC>|qyH{+!-s(*Xk(-O10T-D<^Eu_u~So;MdP0|jUJd% -zNC(;FD8{-;5j`jqaQV~TGRcLPQJxbch4AHp-;wcyMAN5Oql63Br-xdC|ibh#0chg -z7aIN1N8tGNk*HlBFZNs*q(V -zhHu)E$dj(GC@o-q_5GogXiAAR5DlZ4aRCeQa)(4c!_rkbBOy7m;`x+s%sU$)xKT!X -z^7F>S;HhLaF-J=b=wI4fq;bM+SIF{UXVflAi!_+$bEAq=h#FJnpF&>nn1H%=j(gJ$ -zcukhroMHsUje`1!DDEs`SSZ*ay~V4*oA`Dh$?$*hHu67s8-iM7698{da_bgK`9>Qm -z4LjS`m;Mx($UaJAIcX`>@0Y;#6b;?rp&u$;IXrOD;|K=8+Z}(HPW3-zv@_I2nNk^W=ThsKsqMM_~q?gN(Y~`gcS2MU<^ZJ?J+l> -z)AE3CwSzXNbZ4eV%v_FYm+afeVH7IW2kCXkgsCOP&;kKZ`}euN$WMAkjmd{t2wi&b -z4F8$}_RR>18NcoCPI<>O`THZEomA!91qGZFyWJbS6zCa5KJRb_A^d7 -z+TiR2i`|g5-!6%oM$UK!K63a7zI*KjkpmyDG3il=&c -zd+~2 -zo$UvTkZFD{*Lu6ns)AsC52wCnlqAYFCad>K64N!6TqDnpT5(EIKW?@+pDL#+eJE{+ -zQA=Y9*X3dZ*%>VxA)&cYgwgDcIXp=((nRqK8}4qkCxF2)Ty!PAgwQ@2f2Ap -z(n;viz^u*-FmK|So_jTccrvKV{>s}Us~t4Q0C`)Rb7)4=IB1$`NhW(j$fdR11J@n3 -zFjEKoaEIJm$NZ)xs{CL#2xaJ9dpabf@~4Qrb&y17LLf3%yo&8*86lAu+<0jyoU!@v -zY_8CZ5EU>FP!I6I%MaM;D#T(ZShuMV19|*LTrRv{Ig9V{VCCN@o*Y`v*!j7x6>lGO -zY<@IFZ|d9(-mwNoJbLw?I2zU^f?DQ2*h|76OoRRi>3A59$%#)Bsuso5uMOvN`6q7| -z{FS%yyB~ls0rK`0P6I&RhOz7dMOy%!`YUf=^w3SFxsJ0XbphmU7b|W~fV>?gc@DLh -zn$-7K-p;>f|0{1txeu@X0jXFoIJBo9VR672!LDegH@n5z@Rx*Mgb$8Z -zIc`GEqBT3xW~^%N_!?&>QY#Yr-QxQ}WK%eRT`%lD3he*3h0INIUsYg2iQF1uBW_)%OMMXe?3@jL1arH=xm8eYaBcj0|D|v -zBkkL}wlI2P+fF8GVqF(XCw8DHkPhq=YxJDvHV2Iz|sF9>>ii{YqYIV$F^$F`G>Z9BQ?7ki(t&Z)ZpVXdk)*PP=Szj1BP9V=+&fP&2xIS_;! -zmqJj+LffagVCcFm`}|s&efkg#5qiZOr_ViZRBXI=mp=Morbk7sGbim -z8o&M`!{k~Te-s4+RTP7-N`%P+364UcQUU)Co0HL43t12PnbDkWjaOT|cgKl?S>-oUC#8(7M=$sGjkN3 -zMSV|4S%L@V@>?M1fQTog*ZmZ3Kw<2o`!A$#MTsh5c!4-#s_!3xZ8)$Na#O84ef`IW -z)UG}@&zWuQ*Qjp(+SoF2e61wA}Qf@D7{e -z;sNaVzVkM>H)uFrhYf-YVZ}G)ujhV(w2&wym0zS)GvDw{&+~CmTW_x1d#qN!mA0pK -z(R~n69cw>(e|yae7jC`(*2zvw{G_1F2K08m*82G>J&Rp6@HGg2?!>jHJrrOqYM{f# -z9gdx*5P{Asd!`tjF6uFL-8;QGwoZr7lJb2k>*x5^iLz<}gWpYK!VSA -z{DQ`r(|?r(E<7^LcR~`|9JUXw#|4@1E=iF4Q%t12?pwM8qz+&)Lsc~hHCXw)@tH`Cz}k|q6A;5SyR}S> -zplV|T|G?DxJizt5g+aUBT}P7NJl&Ej$SKWv*c -zuOs2`Q@*ip6nLAH`|F^^6hCJWO4s?{KZ<%GH5TGaYEfA;0nVAm@ko0b1pEY|rbqy$ -zAxj)<`6c#Uf7UDOIy8&$w_HE*e%=r$(7*LF3R61DLIb6X_a5%XAu{2j(>mpga6Sm! -zHcuK&OkPLcTKOle{O(V%#SNK%xaVfN!Zwo@?5Q`j8)=9Z7smvTmTsQBIgopQGhkh} -zkj=HKQJ&L<9gm#f$aQ*#lcaZP8ke9(qd%5OXJ6b?a6fpY{Qw06bZuo5Eht1po=0(# -zH~q9RAzsj|s$!nNB!kbKWZyFcQ&>Ke4AzUT5n;x(Z^#ai+HUlM;~}x-jD&@Opk`@V -zwv8va_JUIO>;(bpCHZZD3~ynK_)%65oz~^Nj$8lp0eyPhbT}HPLzKzabe+}@3LDul -zMm#^5Pr_Kum_N7` -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 -zlt#}v+vwe%deS)HBaD>#lBS@wX>|QZ -zc5IwQ;Tw1)77F05OevHXj*|7KWZ80qlfsGG+1|C@%CnPh4Ai~Qz`C9$gKWBwy<2M@vUUn*Lwumy?mec>WxD=@!R8; -zPu@*RmRnerOwe9ftoBB;%&ju!PW!MtG>-fUHz`K$9+x41fh+wRQ#!oQjd&Rw4 -z?f!*-h -zcfB$Iux$u5eDHIs>$7IrLLAMZR5si-9p)fN3lDTJ$qKr5-60Yx^6fs{wij%^PMTO? -zvgqNkI*DI44-mFXs1adtDhUnrwG_#3LmbVUtpug43X7*?oN?H*XB -z^EcsB`>s{&z>QFZxKqtx>-~fsfzhN^7E#20HJ&H2a*qvS|8I4=dj;|R_@&Ge-_vrJ -zzR|)DgBy)EpYO|sVu9_y2&Nvf(*BXR2YUH2X#U9C^nPrP0%PkInW0zNk%C#=D8=qW -zCpx8>sikH|3x&c^h#J01^tCnh1hZ5XWefa5u#$0{7v$=h;UcJT37bIj -z{k*x>hzMhzzJJ)vz#>Y5R6y?x2QVv~sr53{kWO=SJVBtJ8D%6v4Gt$ZWR=jg+~(9S -z;Z7e-)=SjSj_Eg(hVQMkVkSW(ql_w2I>Mx^L+F*~*E?!XiHYUGJ<5s9o!N0?ydtm$Mz@&g;D? -zPxC`W+#hx|C%{w~P9=Tv85%_!V;X>TpBT)GYUG&5Oez)z1+!|Rrx=)%5~#I=pcs1N -zq0`Jkv$vJlXR3>r|Dc7ynVo}F_ei~XK^rtwtU6*AgpCn+GVgS#6Id*{-U#s|y^bb2V(8zOvxT3dTHpcCD3xJ#$^wll;$qoI -z`SRL$By4!aKT1E7w{fx@Cd0K2W7TS3jJo@Qf&{eiX8dCZs38@0xk<-)qDF)$1?thXIxynt)fR{7s@BGdsk -z^50we`xAX$SZX?{eejOPrf4`zYK(DB^wm#aj1@Te87iso+4wUi^Y=L$vCPmcq)%2N -z7oLPGwDeC;R)n(EFlR#)YT@OCfc&nx`h!l0Vsf>c| -zD>V*>z$?;uI#|uKpkbrcQlPQ})idnXpmn)XQ$L=Kv^NB`UZxdpJHB7nR7qA~A5HvW -z1U^(5Av*@($&k;>3%sv{TZ>1eruRXB2eANcHWv-#46MUf{w#z-esXH@nC@z&RYM;*tJ{F^lZMPMR+ZGS%CF^^s-w08l6+SlcDx}^AuTF -zZV3u`PP$>zgT;p3CJ%o}XyG{@JpOb?!Z4i=)z}k69;T@@1}Ga8`HaWV9|pc}VJ;Qz -zC#1Z1<$<$PVZQ0mfcfc4Y<2nV0nmL@R!2yz3rva?d@|V1g -z`yY85?f;dxA8zi?aQ~6F5y<|Lw|{-f+nV3vLYSPRG@8{b<{Risdo2RrnEji?{CFhl -z43|{~lNrD+b3EYN+znWJ^HqQ(fcxD%)SFXPKmL-p73pZ%9(g))sY>D}6^GEtaB6Y2 -zX;&`PcP2)RDgd;f%f|G#`r8lA%!`YKzxBXo-s{ -z=AbfNuV_Z2{RSxCyjR$60P=k-$WL%C>?};CI{S(=ZpDe;kJhhY>d=99=T=d_rQ~4EeMtE_V(!9r?D>Y -zvO6MpbK2GPWjLq&xw5>L`TA@lVD~LKds{Wf)Wh}c_cqRg+!ux9L2OxAWkn>|rf=yI -zDd4{@_@JIL+}`~@Ufzc68l_J&K2K=)WpQG}FAy1UjRr!>AAZPwZq@{PBj6MT1uceZ -z3_%BCb4*z;FG8V~MuMPN4ei?$^hy5Gs|4ZurMCY{h8Xxwv8yNh)+aZP2h-k=;<_Ix -zOHq@@)GaS?M5t)K5WXj{zZ!SeOfp?$O`;1$fa`p~V|hsaCt5k%7j}?x!R&Dx6+D={4*<#kqpcV#nWAGTMbBGNaJbk>$Ktc>pmy$kF_PASj -z1MbBvsVPoUb&MfCxchp~@8!lkkxI;?K7sPS4(Hjc=yQ0mdwjTm!`onsLP!AXWnb_% -z<^Kh5+wOBH-Ru$$fjS`^Y&7Lszvjwvc)k%pI@QO#8o+2{3we4jsbL8|*-qx=fmj3T -zx(UxP;Nw!@Zr!EcgnVZjAdWl!Kj7_!FL?V`wU+A^`5$<@B<+90+to2*tdM8NNZIEr -zPO236UH*5(3jtLE);R%QmmLfwxc(KmlvJ-C;7DUa8kGtn<)KxYPWwqZd|I*c)sqLNDpm!IZVIq2*?uYB696AiddHvd3MAU; -zB%Do8xMhKn00)3554GF;vt;cEQ&f}TB}9{AIBCWk0ZTbIy9)7-=yxcos7;75ef}Op -z@o|9M(PgaYE8{pd4>M#ckEy~m_{`P=4Rn2uveL&87A>Z6(_WP!^0ecdn(lMVQabk# -zE!(2rv)^}{hP;ey=2B>=Maj!ak|=|y&BAa<1B6JVDsUiqg)JS>4PwnyiK_3*^N%ru -za@~5?P}N5g?Gp?r7ibezHWDv}Nmup1YrJE2djFuDuq?$2Efe^3Gd`X)egTa)mwfAe -z|K5WH%#Ay(jv97Qv??)?!efA}Nb)W0v?TOPAO -zw}b+K6+?S9%lc$kWO(z9nA@6}#^Klx$Ab(Tj57%Hp}QSlGjG7-pdCcGu=V@bjmD`)|&p`~9H9Gb6@tAhy~W;LB&Uw5yBa6AQdz+_d@3bGCppyC -z1!Iv6nu&xf(nb!fWt*4r(u&S2;WJn*!ji#LSK$KU%3dN4iM!gFujXxe_iU2XbU1v9 -zk_^6A7F3CVey>aec4k{W{C?lFjYd%4$b(6StJ4j7b6*;J-^j;(Zt}ly*qLVQ?>=m`KSPW^l6HD}`vI~dy -zPZX)e4I3gJWEAQHsKu!1l`D=(_YI|zb-IWOg@HKv$sB%*gQ@pEq1j_aC|AiD#zPa= -za^b|_091BZM{C|!@vc~q2N!jMLn}LM$M@Klp3qb~L~8u1NfMXTUA4xi9<*NK*l4bB -z6|EQSG$WNJ6-4;7Wj;fhvy?6rm)8fdahMO|Yx4JVh%2yaFFFO%)urH;bcx4Y_kRFH -z&N$)3CM`%A^tH -z?E)@!iZIZdw%)v7-}}j)$CxjzqcjS9YxFvEljq=J1}+JzGd0a#B#L*;nK1s#^0mT-^(MUP+&zx>yMeAfltSSU>fuauyPWmuC82tLG2AP4ES8EBy;^!~KD`_28K( -z;!%dykv&SdSZbx%26#FjOWQn07~zAVIG?*t=80Kd#>+jKBGl9=hVK5r+bxS>sRvoD -z`2#aIJrl`s|G)4y1n#Tk|Ax1{{(-l#{tIt^q_Eci1#ct&2i~s!5#(2A-#ZphF8kVo -z%VWBw(W}3C%hx-3iVZu?)BxH^OqrJB02DWILciDUPC-TlTU?Q`4U_^Q$y?(&d5wAM -zJq%Joon@5H+wdXGm>-k5Vi2)2Sv@WYS++`apVSXxfT+{>uIAJNbE#~_s0lcIUyO|A -zm&499u}6TFjZ;h{KXUCom^~aBK)1*Gd!MQ|+Z^(0mL<(dPQFT!THkf5;H)RUIbbFB -z{s4dT+p-|&5sdh=(|!AnLmNgOJcVQC}Zt|Yawqxq;vZdF6`-AMR2sO~!tx@#wQ -za2W9AcD=u@EKTP^V#jP6m(_QZu(;|>4>Jy0pPO1KMo-HjY~3u(obwo=PG6R!4+|A& -zVT0x@13R5K)D%`_c})0%7)yrct!d#0mI=LDz)x)J=LprkRa~Vi(Nd_+a>QS5=Fh0b-%{DaKlTabb4 -z`_9j8|I7|m^-+q~VC=-DDIdZeCsKr~s1txUj>ne%aC*oy8$@AUO_%kDu*n-QKEvQv -zV~W*)+t@2OQoYvf?`AdNj`~Pmt?jv(dXB&KYXeVoh_{kXp>B{^(SJCPI-yuL%!g$> -z^~0Dan?&Z;AH|u*25?RoB-J3yg?J=7Hh6N -zl17W)x+{;ZY1ITuGl~E6uqwskjMY;Jj=N?Kq^<6NCYFX<5#aOImsN`%zIYYHPnyFr -zO%YTs_C|u-<|$CC^u_L@jb<$0QdMlNio3!tNB7d8L|M;e$#}q<kHn_`2%nJBV^aX{q!d?BS7e2Ft?IvA0+0gr#oo+4PFpF -z5*=0X##F&0ze6iX6EqFcNR9QpJRfhf&=_Ch3N%maZwRI)l{d-K$0N -zW~!_ivd={E0Wk2%xU1q)uNlEn&P|$GGu)yU0ww+b*nDCaYC1Tpht^6iP_Q%rKdq=y=~u?9Xf6&IKpC?33b`z-^bH7(ro`fiRixf|Il+ -zoMs)<9iUfRbC<_n5^xO23JSp+d27GgZmSB)Awz%AQhzrY=OXeD@BEPO+z+Iqc?fE| -zf8PsG_79t!tjE7J)@v%uMRQ9uDkAGttHcT5JS1wfBNe@b%bHEoU|fG-$D~n;#_dK` -zp(;vb1r(OxBRA~#I5Pcuj}Nc_-XGX>b#0_FbYA6QNT`*UUy*H-N|JWmt)H`_`9uJl -zdQAAM+jJqxvBfVBSXhT%!z2qz`Dc@1YA<#NyZSB -zWT|7C?yHeiP-Su9(rZ#QB1Zd_-Y(+X;be42(Rd<7ROuO;@JtnEqyYp0+HoQR7`hH$ -z>fd6oTcN>fJABiVBR1pD0YRoy`pEq9%%S>Yj5&0bn+0)EFu<4X=auWY@sI>CwXX`8 -zVa^uXV}Xe1#hfWvI60kzm`{!cZ#n`P`$>DZflHk=2PDfce9gq!V>m33G3$q)c5=Kc -z(0gx^LwRFwTpBIcUw(Q|ck`Z-4t&Ae2{qP$dAe^pOu5io2m-855KQz4 -zfs=})yy=DhucC-6mp+jis@6EvmGDRzVsg?4T{p4t-1&RM!GoG&tO@Kb0Otb3Hu2`> -z5)9h0hj;}(p)8`YcgSyW>HsR$bQFt_yJdWcDV1%YEVA_nuZb0ke9)^rYr;W$>ALm; -z`=@i~AQh(^EggJ6E367ABaI7qr?WYJh-`mIBc<$ywI>_)oEgojs2RMd2Q~jPdiE&@ -z;%_HE*Hfd-w7o}^rwIC$0BHo(7IZ%>o9GAxQ)EvCJL@al>hV#n?B;?LC^J2uw3~PR -zyaQ-jDQ51L3j5^!wGYXPzV*~PXjve8doqv}cc#nn0ZQ_t -zXc4LbBqq4k%oLM4khHYXF2;$)*h3=M07ewLXF#BiL`1L9^&35#Q;?5Jzn%yA#*X}e -zn@?f%YUHLCO_1S_t+Zm|H_M&k!!)q`U@lmUVfkFkNbUidW`nr1L5@b8Mcdbc5eP}f -z6HgK=2Rk)V*1*IHlAaJZ9gWLDt53&dF`OgD)p;lZBZjUTM -zS6>lGBb^L9Z9|cy!Gc^TKBXbQg;Hp1=dHJw)`NbiN^0;3M=EnFAKjuovJZUy0A->$|@Xq6H{jG#)_LyE1g(*1h^94vaeYZ*AaF8J6bF%sap -zLZA5_Jm=^mkEhXgG236E`pTxrT>dJ=or1A1(D*wRS0Wsp}1U14uk-)Yuiw*40usd&Gi-_6jW&xgZ1gvyb -z9EvY^+Z6|B?DGHu?F-(v|AMzi0gWFjY6*b;fwxg)zToWBstx7vn_Q|Asi~RiJDr -z9s$>OMroD{S%qE-T -zmDo1|=YFVs2{75*0@#tC3O?fU8)#x0M(>B6wr0{vVcd~KB8-jamW3q)>#&UJJCw}d -z@HWiZ=@-1+_!qpbUc -z&SAa|JUn`(QD~PXxV?<2u;1{Ip75Z6l)zNL%h8sd3bo?Pq?z6^h5wr?XEry+atz(f -z+eB=;1%HOxHzem%;!W-S*VS0VPP+2JSrxv+;As!S#p{BVA(eTfCVT*yxQH+!Pbg#x -z^_qSG6?@SDhaNodk(~35(!hH4-0}QTVyXsfUO$4_8Fh+gvi+L~ZfX*z)oa6{a90vY -z`BhvNUaLWpYLF2Nu<~>2Isz_nG_a+LJh=u2kBae&(xL-oJdmdZd4xJOCuZbOoFtIv -zU(9%S-H}TSh@%O^gJl*qL*YsV_f$8$c5wo*9<+G?9T1Gbg)%rHuf?ho-{8St&0((Q<{c1u -z4Q^q_NarhZg-{+$JYL@Y8{US--KN+o#Tp^}3*LUBMJc^T>jN@NwNaH*6#0U;UEWEP -zV^!H6^ORK`F=Y4>`Me~M033h0S3Gnmy4QF0AG`dZb`FxtLwy@4*5FjGR4q|*ll -zy*u$A2Ww$A5vEVrfl=569PExXa{3G2j=&)xr-={W=XnDCg11}$z}s<>i{Vnca^b=T -zU+}i=x4+=+Jt4`4c+EsuW@dI!cg-x5g|&8T!adxcndhK!U6|K*5x$^4YjFcoeR$0h -zQwcN%;IYXJUty5S{^n3X;WO+pOGLI?*AkC*uDrl(^xwC;OthpJ^GqWdzRTrrQAVsg -zMCG1jMsZT}B39_!qQP{aNf}8la^s%P=~|J4mRluqIn6nUevF^`tRkke(Fqy6I*qiD -zPr?X7ZHPocKcX-bqQ2?JF~*R}H^b@|owp(38Vt9uW6*h942PPo1;DkC!Bi!ZZw4y* -z=bmJz5xF`6u69ag29O1|G6Q_GAW%FQ&TdI;GOPX<-kzAnVTApHw*~Y9ivEVT`J(=U -zw^7zq@vrH<1By^c-`?B8&a?4F8+ZX5r3{5uT9xVSI-gyjqezYGUd-F+yy#E=fwv_B -zzToXC^nc)Oz?mAC)UQILFL;~(j-r@)?hD=?hyNe&_WY#HKk)WoHasT^LiRuKHk{cP -zyuIRZ9c?TLp_=~D{4cyM{1?0}H~u%go#gQsyiK$(jTlglt!3h9OaB+VO>V{m1VX+_ -z(`v(xvu9-sd8IEb>{Y+fAfo0Yb8(j|yF$(b^e -zKlMC|qvSNk^&r-jhh+w5BM0k~g$Y*z5^&ZMA_RYtOq`KN+Jxa|p@IsAWygyjV$C0| -zp_$+`V}KoyG5HtXPT~F!ylv(H{0H7H_!r(bqQ0Q-NJq$Qb{q*}*!iB?W!_lcqJftJ -zv!aaT6IGV=tdY2W7D$K*P9UKa7I^Jl4$ZBSD2DHsC86W;BmghhF2*GM3!}QeH0T-( -z#83HNuTMh>Bo1T?M+U6} -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 -z!>vBwM_iw0P1*`KDDP82OjI__wgz!9nP81V -zTs|p|Tj=6`rJ~Ev=Rce_!W0t?-@(eoYaUJFpF10jiXj>057V8nXFOjKCG8rILN-lk -z92VlayX&v`u3n7RSpvC_GlC@ReNv@8h>UbAYy-H!Bpdr|3ps!?{e5Lh(|e`t)~ybo -zMYb~kAhJrKR?W{7!KFa~kRm!zc2gpLwNm4kfERBHw#V>@9$FeMwcIzyLpv7bfzBHJ -z6J^`l^hQ-(Tw(dwR&tL(n?>IL@vngf?MDAAms*f|hT}>Wjm2_%%jvo5ok&^U&JbA#WX3L-WEYJb-tDk8^ZE)~RWzHpA`4L00a(OF -zR>HbNQ?NLSe*|f16t$$Tu=G*!to5~>kG5_^5WtQ_w9ElRWwL{7FuAsRx+IJ-=-LAf -zhc&)Gi>R8~hsM=AsHB$Se%A{b_VJ4BIwIz -zgJ*(CkTl81wFxHZyF}xwxj~Mf3fCE&U!Lx@N#kXL6T()$qBf+nn)5TLbCP^@ycN*g -zZB}%vwFArFXdC_K#p24FjJ$eC6{MCZkt7%tkvpn+E> -z6^m|eb7K|S=1u6}6AkzTD*Ppp-?ggRduU#L^6Sf$+J255hnxXPn79|nA0yw?<+TBr -zW5L2*z(5eU&|>Iz!96YTbs6Pbp#_y0y42>lU!`1f)WHJrhi_?nMp=~K -zUJz=wL{-u9d3Ej%(&)paXFkAZcj1HL=_GTs9WBQlKu>{y=xLYS-$dx+w&vhMHX~fZ -zd#%*B7eiz{y->R+E87V-0?SM<52A%21)P79#i1A&K-eFgeavyu#sAG4Qb6R2^E0q7zMB$lUf5sEt1A -z?eY#VCVCZ<@zYz3d*3kP5$AZBKcAi9xCC+j7C5TQ2rcUc^m&|<6@pJaw(ZSuNeP5OZ_2l*wM7cSWe{v)l`0%3ny>5TAa^EQ^KYL?M -z6>rA%&s{a^ZnLe`OfUB)K7V(xKUEGR)e`IPI59Fi>-(OYf67D7!MWTktDkR`+y~+S -z{`O1gIxOSM@%${PJu86mzRB?D!dfjyOV`GdD2o -zmDmflUA(ikKS0Qy*2Ci=#zH^_GUe06yZ+AL;sr;<=2+saomPvtCv5l-)vM>=vO_MF -z`!=*0{$iUx)W+j?e+$h4C+DX!H~xn-pF8hA@HQah=YPQ43qSBSpRL#_GwYYm(4CIQ -z@+IO*PF@PKn>|ALOvx;0bE6pshm;gew_jjhOISKYRxvNbqUg}$*~V4cKk)XptS?S- -zDYT8#{I7z`{I-|YtY2AHGf${#Y}HskCuBg~6;oqKq>(m8_7NYW?zTU#XW -zhhcjl=Oyl6e~%OGiv*p-1StwTqL*pV;>h933y1FI&o2|`%EbOj(1~$d%5omeAFsj!5IWK -zYat?%aW;>EvQ8&{pU+I}sVDVr!=r}cQ<#%-yW8Q!}QJvJoSuGG!YaLH$YK9&fAW`^urR_2~*BZ6R!D^yd-SvH# -zD8cvq((a-bbfOPokOV2L6zc}ce%bJpN65Gk?+Jokdr^3d&O;|TmFJg?^e9etg -z7?9$$)+JpBSIAD@4C)LSI*;iD?$gm;Q8lyOtq@^I3)gHt=FCz#3+_R)1InC*TSnOn -z>qLGD9G{(?Uwv%;=AW^UQ3UF1w#h}6s2>xxtVFVo+OkzA;&~)@IJu!c7k`YAmW}n= -z#aH$dq}?ty#J5s++z^Pxz4D=a41m{&`Kwrq3Vg0W)FLX_YTSecuYcimeP<_u5x%hD -z@o9L=>K*!pXA-wzey97{&Y?)O4LKC?#V+Edad!tR0g?83IX6mgf}iR}2VdZc&C9)| -zD)RxUD(cDR{3?ZDZP0XR^Q!fO~a$Iw2@2psjB -zY{r%`m(-8>)Z~LS$#>^-`1%vq;?H_mK`n@YH^AOLZepJ;0Fz6s^bI+}+8Z~i_;?z5 -z9*`q7BW_S?=;4HQ=FqYvWWhcB)|HB_0+aG$l@z!NZ3tYTQP+hV0A_jJ<|CMyi{mUm -z*8U^M;M_-FZgzh2djOW?tJCV1pY3n_bVLPIwz1HKd1Er!ZrU%P`s2-R6=?Rf!>%L~ -zZl7A(HB5b1cQzK~k5Fu(OZdW#a6@50dtzWvKN)#(g?xcU`S5J38U2=JGEFe&04uAv -zb+4wIr6+&}TUpm2qb_}O3{Ma1vo{rY -z42}4H6*)#({UE|pSL15^;++isFAM73>+RIf0QXe>uD5zLZoal6{WwZ@{qBV!HFER9u6E6t&AWjf -zK3kXrKdFyv8$*;<#r%4?50A|>8B2#Roi|xPzixT$xPcgI+m?2(KVH94hD{`G^6)l4 -zZi=}yw0iWcdOvRD6r8rnq;Yr}di0+piMQXa{YQ^oTcu&L%=^F2-b^(YpI$D}pQyK6 -zIok7%-TtDJ=vOAzRmQGF9J2GYrnmw`Mj4+{cZ$c_6!o!-Qa(f{^ksFzs1Ar -zk_!A#W`^wB8X82`jpzhP^u^y8thG7$!2iwlw_OhfpRs2NFQn(DnU{v%?vOf{LYeRd -z?_MD-V&?Nhb((L6Pkd^tUCQ`1?w#4)Qd|cfYW;?YzgPKyy5J&__MH9 -zU4eo9uR#X5V%tl=Af?P!jc@qZ0PcXw2SuN*_J`F8sYj=*&(K4#UPdwB%MBKP#9>F- -zdm26WAV_d*8uZ8Yk)XQA`DiS|Dc`XiSC$6T+8hZO -zkf3t#yp@KNlOEqY*M1VAW7#@@RQE;_>5fq=EAz8V#)o;ob-}`p7t{JlYCi84Qz(W7 -zx^@tRQ-3Wd -zfoyZd;J5d(wpDh4Q;eA`2xLX1*VK+e-UDM#jI~~`M`wk?bGCZ^3B*RTWAUD`dr0HSJ-kr(m*@*kL- -zMo!i6hP~tUN13Ti;P1g{vl=yjl~+B;%BH|xSi9o01jk2EN)U1C;NZcI471u-9d&7x -zr{xd>tD_}b;i2~YbQP65KSClyqBu7VAFRx@g1Wvb0mCKei}N^0iC*7S#(DQS=(#Tq -zdEtemYed{@I-HVhh``v17CI3E^Vi_h?p8(LlYw(&2HZ>Gk7|A@;Ec!Rdd@nK&()+m -z9|^kQ)vYHurm^s$QEwL{C-KT&PV~I-q&gsp7THF&h8rO9B9ZK3pNu_LBNrrSKcJz` -zInYDP@mJ(Om?>1?0sl#_`cxT_zO(LRG?FbD-0A&3H}wKj22ZRt=c3`9>b3{PMaK^2{L87T=Dwu+2vPIS7Ny0d#Pa*x$Q -zr6SaLk%{O^>0>8s>%QQ_9KTqu@h8=O!#nfZ{l)PVy#g%axf|v$4X1$dN=}9Tw`XZN -z=-w(Sv~Ev2e+#i<@W-nH&^U9}~Yp*f9oJ -zkv|xeCx4Jn{)M@EDIEKU(J|1nX&=ZRsa(wI96id9?wTrL&~uwKA7WWG(s+sT?i|UK -zvMh||Sk;fP2ke1b8Y0`Cxe%-db9BZyc=TyU#b{8jY!qlfMpFHe+pz6`&Yx*#Ja4um -zfaB5ZRktJHS;4Ic#AhKE{d7LhX+?!1XWhCIFTSG8$Ii -z8Xl^zqd*8Z7ZpZn@JmfAm9?o=G1 -zv_*rW0bM?Qs+<< -z3I{wznqPqR2y0`gW0LMrGyvlncQ(&Chv3W0sm>ckhFE-h@2er_h1VSy;OMwrP31rc -z=hI>J$d9>oiajC>!I0Vywy3!KVRDV7e0NIe+(ps?T;Q#W1o5ryk4L -z)S$NO6zP&g&a5nT^$QOi50uipIv;YgS|44D$96x_-F-JagAe_B*RTo?(p$?=<(i}* -zcv?RttCI=?9RJh%7cMXu7ALq$x%$aRFE{{)KhL+t?%Lz7v+eG*A%o0tQL1p6aB*X% -zK9gR`&yn1N+vkxu2qdXKz7=RA&krArbGMAo -z?<-{n<$&hmKTLHNPB=$uw -zVj4@kq4MS$A)Hnd;~2VHkCi-(h{Om@S~4TCdbnkWR4_J(eG^N121N6tZj;cZGyP9> -zTkA*N9{)!13L2<%(uNRCWp<*&Skd14HqD5qR*qHL?ER{=&)iSC{T%|?UFc5%sKTUy=lsA^DLtNG^9T)bOb0md -zLd6M3WNZXIK9X{)+~?Ew;A%XVe$Jn&j1RddD?}8478cS`CL$|<&7ZD3mDR7Tf_u0U -zNPaZlj?s+mLUIiLpeRj=J;JbV;+0ggd}Zy?kE`=vyAe3`99&hL!}>qyHcWBx5nf!& -z6NhT5CD=eC1x|Ru+PRRM=^%myuII{H(-l$gO+5~mqLa8J1kmq -zG;!)mGH=;mkS1Gzy&_)?O|>q)*8hoaH~ts8y~0qYW7Hlj(0DRD|vtpyM5mIRQF_N)VwaQr9>cE1YkG}iW*;0&MMRsSmdBp;E&+VQdrC8-+V^}X#Uft(KYsq|b>cG?#p!Pd&Q -zayT_LF}k0H_gfJlG4%N5t9-r~5PU|Y_Zk=RH8A;QP*D9-PW|A5?IHVA_l3(Xx+Lb- -z`1bq8HVXFM^5^ZA3!Z>)hZ%9-c8||{Z?B0@P_srAU#6m);v2oWQBo;$%E%^_wGot^Xd7Tng+jPrFAh^Ro>K?DqZKHwZap?SX -z>GPy+FIA>>1>BH=VGJif7k&W7Y=2c)%{MKDB1i)M?C)m)w4>cwdtRkdgPg&3;44qW?F|a4g#I98(V`*V>a7zAL;p|oZ8NR5wu -z2>w!cPhX_=r -z`ZT3@b$6t*dkBF6$!@h+rV+4+;F6KMHVOy429bXMu-kk;>^8RNSL#@+7*m0*BKkT;oIj7oxvD*Q)~kOwk#!jsdt!QSu|IPlPE8Ke-DmBy)J#R`Bj=S{&g{DFn*GT(84}6*VnBYxO -zG;*Ms{cF?=h?*auLV))AC_vixHDQ!Rl+LZlsB;C;9X4YnRC|uY7|k0xnsuCqB}A@H -zHFpRMkemX}84=qgpW|JJuAJ%zMHo~JZsiYzVx1MK9J+Vi3Qlf6FWI^EwD4e@LhI@H -zs3nsC)UF<^3VCTC4d(#OECj|6{m~n2%VVO7jI=~-Ojy%1c}PuzdM!;5FBE^`OE~H3 -zu;#S5P~uWyZKu_HSo4cZL|vh0FPavra}bnw-UJZqInn|ZowZ$N^oj^cG?;upviEX{ -z*YbM56t(1GFML0RmyDuxz=ki^*YE(b!@0#Q^o%YOl>-bjDF&lae851K3mB<6XX%*=ythe0Ilw+bq*bdkq -zmaN+%P(v^KZzbnx;#-?MUn%U~OKTuG2M>|UUOZ3G|Cu&pCOxw~fbP+`Utc@qsjcc( -zU^A+7+%~P-*3Fzl17UqC0jn&2G3u2f$RX(hxpdXB<~`)bE8^=7%^sVS*s9&zQ}5T> -zO5?Yc)(4azaf4H~VqL2vY6tbX5f#E;(8xvam7!hrek~OFwG@)@+(f0Pm`7!nwZ5Fv -zpDu?YrDOq>qt82DzrK5Gl*a!V(9mRBnB{v -zP(S^pb&!E%-eyG%spKetZ}3}s_Aw(f8#9|$S|A5M`!#Nh8}^Y+h?&5(noTz-L%$$= -z81g+>VxKrrc-j2@YP{~^QSpn+<}*TZYhVUJr34Y{NkLJa$xr_FQi?Ic@HO@-q5(TXtA3o=zwNK?n!2 -z+FjVYJKzday!J?#XaO)9rEogwYw`(-ONn<*>DWY&*#yV`>JS~v!rl+hZ4rBO&Sn5^ -zGdl%(dN(-LW|#hYtbb;#HZMXH`In@*Sy`d1V~yP$6d3201n~3x+M!7>t0xE`NU?y> -zORFwR?0p!FHIob=K|!gUO3!N%M~0VcUdp3obRqf>r-^~Qq5!<;dtUSpvZ%=O4*TDShO3vJWcqeKg0U!X&;cw?*nuzho)V+ChU_pm6b_v3inaf}lyc5zmv({z5Sbk>z56SXu3q1L(=D}bY&QNtF;LI;k9A@Z1J -zK*~-=e&KNl%7YmwDFH#bXT1nE9P%*}J~&G{=1-Yf@W}^}KTW=dePiD64F@b)yV1_M~zk+@5rU_bN~8(?ZnS*Km{HmVV;@by&p6O3b%&+KIOJjV%`FI_Wz%%`<3G0X9=?k;U~&Z?ZyKQg`r2DzIX7c|a*I7sF7*Z6Rd?N5bspulOP -z!i>oW`W?#}*Y8Df&!G>Of^!0P5P@v9XXu~?RyW&B<-wLH4pMZAmJJ7xbYq`3oe$TyDVZ&%GVi`5Xh>0!6(Ad!t-S

Z%ZJP!cQ@D4&aGnhnx6p -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 -zK83vBPEomxlwt^LcLJAqcPqhLJDf2 -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 -z_Z$>Y|8UyDPdR{B%Y4Do`ethHCIIq -zHG)mvrsqzc0nH8czHSG$%ug7`T^+h#*F*Z<+^WpDTAaJ&pA|wxB8&T%)g6zx8&!MFnk$HQo7o;em&CI=iRy`^{_nZj8l&2A7rjx1WQhyRY5A!L*PtJ_$GUT)vH>h=hE&wG&%GB8Qx!Ln#hO90AVTCb|r(uF0 -zFCB;AUVM*SNKl!G_c?{-?am9H)s(S>oc8YB9NN*rJU5<&KR15sVU+?Z4h8BW)W1sc -zhO*&v>_vM#jad(4dzVDARZ_XD>GRP`RAis=-YKb8tRuvgpGp^Gcm`QhddT>D?!(i( -zKfn4WFf&bY>hd2Zi&?L= -zEFsNg1SGNKl(JS99iC5A9#36;Ihns~att0|#WLVnC;}NsUE+zC5ZoRaX`0b>S@cXe -z0++nnu@SL|`A(daV-XglMj6qV^%+%h52N@d$=uAcR=6YH${_Z$^kusd(`k8x -z^sNggY1=sz0t0H>V~1Dy`O7-?6rIJgUJQfJY%p6(`x!g9Hoh{f)X)=*l0f!(_fnR@ -zc9y8BE1kVwnSf83S>81$UEslcmFOlg)cW&cjz%H~Ba-!;e(pQS*CFKIZPZ}x!U~;` -zl9FqObaTsXd_AtLs1x%ondv9tJf8NjfQ_mX$H7dP&R`#|*;$3cd5Mz}jProzH`X)7 -zh7DkYLiO!wUjEc$a;so5*1CB5{YtkdUm$`re;!$^us1;kj3QdpMzly7Ri+fzNQ=#4 -zR}}Y9SrSkAcYJ3-CSu}+rzz1i^$O`i$a)8zIGjdDm>CueXB&`CIJ4 -zqS@(6G8h^|FxOXkqxzwbLKe%1sD_9)O&Dbi2St0>WA*s)Ul4cY%lv&(X|vfmDkkIu -z`Jk=degTugHVjs#gRJrslaZSrf7v*^z;CPA!^M<>&wvzv3o^a=Hqa&WQ?>D-*?0e@ -zYf#SwRYF-m^ETz|DeEW1%mj5px~3MWT+)#UjxRBc$9H10h{Z?(bCg9Kkq-&1UCjKt -zTNJ2@zW0D%W3+1=wVQ5zdJmys`J+iB-Y4Rxzu3WZU5&K@iaFVIomWiQ3gR`In5JQfs?Hk<%)lZa3!x3rYZO6H*#KK- -z4m{RprEXcg%H42JmAw&@8^k#!e^R^WZ)X$Mytd6ki#7u5pBvH*!tNWPIZRTf3&h!i -z$kEpmp9q|96-Z15N7y_I7FnwtIH}5#ZG#y5ERC)d4M?z*%>Q7Ly!5UhzJPU*l?ldN -zuZ2u`TJ)u09U~plp{?VyVv7E0WuZw&X4~XJ&y*g#3KYn(!Gbb56&Z&1%toyK#wXV+ -zWoww%Z|VaGh}Db@Oq-E4=|lr=bBngkE*u6T%;5Ve`b?tt=ttkQ4_s$?9_$Q3>Kh4H -z>3G2k7=PDFVxSbwOR1S~R=0tW`?LdJY}#VgLX0dHZ^BQ<;CY)LHo_5-|2fk;7)xd; -zD6Lekq)N%`_Jrq~%`0{zla_=rjzACbz~v*4*~~S&7^d>2o0i7v;a%^!l4P-d*Nr0c -zSz~HUc?I>lBkw~Q1v0@j)>nisq511J3iWxfo(`VuBV{C^^2rD+MVikvPV8;oN;!SB -zq>mUZ&XY&-d~)#gFc!%py%?n9!@5MPW6HL -zEwG5NSyK2loH0hFarq|=@s{5x=92N8nbi4E0bhx=s&HxUwbAROgjczr4{eKOl>`(E -zn37GZkauy#UIxYIt};Y(iYIDO0XbUf>)<5suW;C2Y -zXYGzT>mz=xd$=1yn3S*8pFocV>bo8lHE5=}O)1dgwHz2zESoZw+|UR*Q=^q=D`Wq9P -zBSB3)@M}5E%QhYK1`5Kk!`CKkCTxCM`6MrLBe-K#tr8({%$;Cyik3NCt=_SJk9ens -zD8?wHSN^0HrCB88V-;VESp$yc70B^ZmaHYVFCP7Fz6#{?Qh}WQOYi3hwvBjJvslMW -z#fpLpeY?rgN66S;1tt2T2+_W=uPzpPy#|ptZC5xzXU%*xxihtZqqZNl3X|p5;PpZ> -zM7Wc=QSQf!8$+G#N;1kYX2QKfB#J{iaIr>(iYCOB(zqLKD2i6K@^2E7mgj`1x3Al^ -zAlKidq@z9$e4X2#o?oJ?6ve_+#-nmnobTe6_a)X_kBB*j>>H~|@y%8PZQOn*a>Y}n -zlEy}q<^2nrF`d!x72wuie}Ae;*y -z)mBQ>8s`bz=!ELNn1+?^YJeu`@mfha3I6LuWwn|a<2}&|XQ3r?0=(Mo$ -zEX$`b+fL8E(xaVpHcXTz>Q0y$BGXMHXh)#`NAY|T!^rP%8}(j52>drh}7c{GmhHZz2CD&?d$ -zhJ8iEoVv8~+v)W;)F9Gx$u=$DleO&~^l;Ujr~|CFxQH$|j)5Y~7IN&MYB$C_hh`)h -z9$rT09k5*olOP6gzeA)G>lP2Qh%sY~FIbADdBa_SF|*~uk>7`_WX?#l@M+SztyZ#z -zvm|xitlJ8#vK;W -zj~R!!z^2`oR+QC+8Uod09_da~dmUiqInMp*Gew%UudqDgU&ZObvr$o>$h3<^Xj4_q -z??MH)hH=jK@vDgeHl@hdi6_d%^a9s0<+vJv=|iuEk-Nt -zz$_vCNF8ajhZf^HpvCA4MWIFB3~VtTGO*TEPu#T_cR&lTtC4jvOJ1 -zN#tQB0C6OTh^<|)yJ+cOP-H^Gbv72iLhOEnT_{yLlAl(h&8|i%s2PR+$r@aoS$je{ -z)t*-I7)twn`tu;7orY=EJtrlMFv*wN^45$!A -zd=N5p4|3L5ezUz$o7WK4h_KUX<7+%@0^`{c-ID>xrltZuA=_3Rp!pcY=`|ejXWZ;1 -zCproEy3vLp1feaIgG8=BG^weG*^OwVIx^>DojD -z?xIm|D)R+sg(OrOKxAgMb?QOL<+VktK*yoMYw(18l*d}OX$k6zm4ZqK!`aydhb{GJ -zGJaN%x>e!;+|22R4w1X3aseVv_Qe@oW -zek3u$Nwol)@2G2z9Y1;-*|`B|*ySKgd;r%m{PXXF)HR8VN~{7DThBv5iby@HgWk4f -zT?R&CI=o;9HQZb=Z?|CN_Y&1Cg3s(z8?(?OzY#Zdx8?|wc>N~3h)(!i`L*}6h4tZ8 -z5p`269>rC+vP^~rwCB<}d$3UL%M{qOeHMIp#6|MYQ+zeds_@Z2ikynVRHB!((};na -z20wY4I~OOWn@UU!E$;t(RFQOE&x$c66X>wk+4~6;`xP1#@h)_s -zfeok`RxHMX6mr=YpWjaIGdTE4LUQ0MuiO@Yj^r{V9{=2Qa@)VrE2sb6Et2DA9tXF9 -zlY-3=)#(=Gdy}J@I1%1l=S8S8u~obYNbdIw-Zgj!G3q2G#Pw-mDD`G~9dVh7mw+4u -zvf=yDlMJ8Fq5=H5Pt6E0{id69@V~3FJiT%hpHT>E6Bm7s*4WgmeCq-r>NOOEW7?bb -zc#DKjJk;x*_Ub7mU7oFb6#Gls)JK?S92vN|HG%j3OfZj-{hrA~r`m2%U!N1wIvWYm -zYlQq3|7O@5WAJdKL}{1Lei)M`jEy8I7F3cWhnX-JuQ*cYu%^YGW)CSZms#TB^n_~>|VM;@b8J`gC;aHm*F(F;UI&E -zeYvxeO@&sz+YitvAR;sCk4K&gF*V73@1kDUTo4z9ICSJH57Cl?E6n=@t!0LSu=DYi -zQP|A5y$;dRQq82&Pfp$joVNmkq`D+D8gSBBVVVVK`@Pm*PPRiCl{+m8+PEY@eMr5* -zoJ3DO5I->-!rr9zOkcF(q`myUy)hN^;zKR!f}`*WSf(F^<7cw(6dHOBG|1z_TGMGN5Q-q&ekn(=g{QjT&&uJU%)~agK#A&6&66NSY2Pt7wO`8#VpBK)eZPL_8@wd}*@4Kd-YDI@+d; -z>Lp}dFTxpCmCE5Pb|n!f$`b4CU!MUDb1`632LHVpNgqEQ0!FlAKUH1XnalGO%FDx_$iMT2?AQ-c2xi7a)1igyKT|XzzG$Yw|i^y}O&(Vug&2GR!7F;?M -zGNwNznLikH8!)rRmyCt)_Zb!ilohaxYv8`M)Nfiz8_UC~oiy!#P$uruF~*IJ5DY26 -z^{n9=|M(17QEJ14Wb{3R1%`g~7B4SlpH)XNeAxJIq;q`MRQ?J>hFT6pO!4ZAh74qL -zIWq7Wx&iIu07jBg8!nKuH_GxAgh~`CExuq#mN*9Xlp9@y`h9*1WT>&Mu9)4u3L8I& -zraLA#jgxG_!*>KCqjpX6rzE?FpX#7#48-oePt~1r>-vEN^S%JArR2h$8|x+7RLKGe -z&K{l1Gsx>ju#`{<Yhd)!GdmIwKa?|JA&`*SC< -z;C1;*tn6B@3>k=11B5TCWRnz`zWJS;} -zo)$d+^Sm>ox`^{KfxlVZXjb5o*15`Qp@GAGX*@^iIpEsd)B?G~XIkU9 -zTR8KvRWNz>WbuaAY;fR+?gSR#yv=iOf52eV8{>kb@3Fr&*;wAEIa$)gqgvp7FR7}- -zY;E!4sO->`E)t>ySsqV7luTLs#R^}{c{ErOA^V9^a0q!h9Jh9oWoLmUTX~`)dM5XQ -z0zACE!%h1e3=de>kD>%1v$nTLdJLH6h&Wl!QSV!%gWk>t6UWnq&=kpqgLT=0XXm^Y -zHia98^!DLHT2jMn`;B(>+8$+LoD*1IYRSe5-$7VcQ^j!q3O -z#ts`q1jf;LDF{$+NTY)nc-nX>WxpjtAvVomz` -zB<()prKn42HJLA!xD#JTf{aWz7$S|q=_i@yNxly4M(G#Z{E5w;+hhx*gR3S&$I`}4RWs(B$wYKjR({zjF|QT*lBn#mtepgD -zD#n4BcV)6?S+qafFe_T~==iie)a*3+&Y2q(VX?+5W#re^AX>%Dc5*cMk~_Pw&7lFIQ0B1Q}CqJdkG218wlVL%V6q! -zUb@Im2L5n9C_9+S?^lQmkPIr*)EW;X&0h*@Ec6_5#C;fm9EOsv*ETXf(Sdh!P3C;Y -zvKS8^;Uv6~R_I)xPXi73$<>}gU-Cr6_bS};#0wU_K|*D0nQf814ST22^xAn#&7q@k -zY`x4GLKB8~O4tdT-N_&w^z7qwizatBicYFpg4LSY%Jbq&{5P0($9p#~-qbiS;hLD^ -zu^mW9GmUMxVY=urq|Y5*5H8(xw?}eqL_!!HXKyUwY;_toh4mC(h$7`h%#jI+7FjK5 -zLNs??EvD8Q#{VQ;h2@g0e+4UrzXjN(G6e6x(MxJvAU8?kFXTs=PdL6^w({i8e@n|S -z*zBAgn1uT=gbuAy#>)AP*WfA+JM;Wa560lqw{ymwh>L=s1aCqw{Wf5Bsc0PKJhv!7 -z^JJNv&a6@dIIqWDkBC!Bpr?nT_Z=GmEr0|uB!+^~;4h=Fv%{WE8xR^Sm8+u%svB06 -znSn!Xx(>Ug=y4}U@!XN@IFUYWbO>f^4nLYR`lx@VTN7#0QZZo-YiQO=*7BB~l@gY| -zY4Qt=L1AcoHOT}=OfLGvs*OiXDq|-V5e8voag|}Cn%nH7uQ~G*hsERfUX8ldSu4ZZ -zvNcQ!JsQ)Y6+>pYFwvMUU|hPBIX@w=NNy|Uzn11SRezHNXXg6U|3)6tNZVb27fzi7 -z;S&NN>Z=CrL;hryZ@9>Ju+KuGYQ3qQzk_VeuaU3{7Bb&z&45*5WlChQzAd%uM -zHs_-)1~}j(cKrLEp7ouPYd2-Xbm8QcOqgXY32|4iThxw*8lsT#d6qiYr8tXN_apWT -z-ns_kMtmDE@`YIYQUf+_Jt7v0UC#0pPwEYuzmpzVU6<~_M}m!kKZCi=*D7&H -z39Slye(q-z^D;%EUa1iI{dn!OxSVrs?D~U8(2izKfkmYwTc?kKagcYvG5b@ayE0-O -zg^eqe7k!+65&o3O$@h0qMtConC`j^LojP0DONd}m3=i$is4GB@NnSjtMRx;LF$8C1STv|S2VGs -zLUf@VCqgCob3Y?B@ju=FfYO&R4p-5@-^GrlY8jivLYP3%oSKJ)i+d3#Z&yo4Wq)XE -zlT5O!0jImi-T{VrD~C|Hdqd_HAI4;5N+-fOkNuMx9qv`G-oRUf$x)VT<4|UMRKY|1 -z#%IURKb33T7&nEzwd^2hVEXtg7AuC{t -zdlI_9{&9P)u~X33Dz^hAz|fdTJ^Mp`l&Hn=4A17tbsF6k5l=NHI>;wKIxrs2t*t7z -zrsoA`U-w$#Q5U7z-Y+~p^*{@(JYWqXfDknPWWMH8Oar*UZSJc6BHr;)+nvdA{l%?f$Dq_Wzofo6K3n0j -zLCZ@cBl>m7j>7~U2d!8&emo40jrvo|Qg05s -za-=w+T0xoKbyb>Bhs7?x=^B9z68uK2;WT?qd@Xy`8z>QT!XtR&iznw7{UhIB>ubsf -zE!|u-0gvqrnUsD9ix0J1Q8TYUG@J=lK7*63N}otl -z?F6&gdg}fRZ=YzGbNacuC+)6=&h;i&lWx72nsa9dssD=WISu~^a_Y5oz*=c0xfQa* -zrCgM3P;#Si2S89`JM(k2%dn$-BF<$Nmtio}m-tMu$SdCaEP8EZ$IXr$gCCQ-bj5Ol -zkO!SCJ7t|R#Ip6Q7rajuQtgGiD}OtV3tgA~{y{kmt`xX|TUJHEDp5R%K4@M%o;6p= -zBw}y9J}Pqnh|qz~hi)#fY7UV-^n$L&es7~Mn+M(t@HS`SDxPE}Vs`yH^s(7G8ctks -zjA!6}3G%kE8zuwmYzyyN)muPP-<^S#Eb#fAq&dh48k2ol3o5PEpG7l#0sEsLM*R5e -z8mSJ?)np-pGxSOb?RTwrpIU|OJdsv0BM@L%7K>81&Th_T2}s7_PQT^o(?Hi1 -zg7lTM=?|p9j6kL`Sr~y`6sR~-6%=@#GcKNsWZ;@D)r-2ng`L5-3NgJ-T -zM%bG3#W7=l$AnIYS&jQ4)qgqTRrA(o6P5!B1goaygk@>u+FeXuXARn1_MAdHRq+c_ -zC{aQb*V<`s -z`V@4?P+a&~7eexL-!wHnx&h&Sk?5OCW`~5uc*EH5^!gPZxnS61gQTD8{fT|8+eZQx -z1wVX?vOO1FIOe8bHDQPR*k^3$ChS`fWp&8(v1$oT%ggI6>do5Qh35Az -z_7M+oBUrkbp>&lf;*~nCBF*^(-&@4)DMNrhGIz*of_Vq_O?r1rr_N#}TglHk$hceE -zU#>&e;uUg<-$@zylm2BmP!k?ndK0%TsA>gmHnPc_r6A?V_g@K4le*{%bPt(<( -zKV60wm^C4@MO04ZlZvU|uNU80MJZ}HpjDg-czSjulYtH{B&{ro>ANu!f4pPPwt7*12kx)KZ#S>n3 -z0)SOKmmo47S_WE05aAPfZn$MOFxwRKJFECs=Q$3R9#d(~=iyFH4f|;spjD(G(1uWZ -z3$ThW0ag+1&MIn{j)0vr-CM;YtWS?taq!+Ma_GN{kE8N($zzSk*7O8eMRZ;#nUGJ^pAiye0k}HRR -zfMh>d#Q=a+oCR7%mE;7VRRjTA#g=sQCsK2FRxy!`^rf8BomK1vTE+R?0d=Krpj8A- -zyt9f)K&wbOe`WjuU==q_CcY+*w6`fK`;3oE9`hGYx5TFRnGP8ZPa{%B$mGy|ap-b{a#@FXISi -z1QA{?MoN`E16W0BfK_AzSjACRD)2aXvx>!d -z-G0>5NCJ@oWk9Rg|6moT?yREPomFh*ORR?znqRcb*9Ta|A)r-UxU-6*Y+P}@KQ)h$ -zS+LbwfL2i{Lx2ou6(g$=fmSgeU=>Sa7l2k#*|drL9AFi9)EJ%!&jGFC5{RcX$0fij -z&J_c!VssH@4H3cxDTN{~MTSVi0n{5618oQWMY_-z#tz<7nr -zR2bE6l=|b|fCT`pViy6OgIKuMNiO_JF6HkM8P)J>{J4@iU|O#IO8Vm -z46uqY4_2`gaUZ3~j5L+?^&-G3+VoNSDNU>A0IXv7JjC%F1JEjt8O{m4hyz;1Pazgb1}e53I3^*^j)vArJ9D#qVg#Sc|G -z(sx#o=a*HS0$N3gZ+}|FeSlTex@_43TE(vzCjhG`3bcy$_g0Y(XcbSS={77l`bez- -zR9jjxD2$4ijP+DwOy^TvIW2@w#Zv>Yh2H4QGN^lZ57QoYXDZU -z`Q9oj-CIQkGL=vm)PvQ*BTcoxTE$*o|69Zb|MD``la~_E?|xaulHXP_QIid56*KOv -z;`*aij4Y<91X@KWB!fhV@n2SPY4P4FQUR=@!(Xjp*gvh}EYK>d3!ORKTg6R8pjC_j -zSj8bNQ|txGN2>^ZXBEL12@oMfs1)z4B73Ejz`a#;)wO#Dw2EZN8XtjHF%MuB#nSuU#z13&-Y??R*@KB6<2{)5lplD!72)9zvoy}xwDGO0IP`cH8LD(%D!DFsE+vF -zDvkoIBA8529uCC4RSf-Q6}2t6Mt)nxi!D~02dg+28LfC{6)}KTkrux;4`3CUe_6$L -zYL#z)T19LlrKn$4@$H>eB!0At?H@oz<{~;L{$dqv09LWqTn^H-_s%NP0Ii}Hz$%_A -zJXpm%pjAWySVieSt>VnRRZP3Liei>5n)g-_Wctx6uK571;$A?Q1Xk#uR}F{<5L#oDuX^?D7)k5(~eA7B;P)bM*cwuDCJ0amf`Ppg=HXBB%d -z09FwiU=`PZR`K(rRU}I?lGii5w~8y|S7-pM*!gG`Q-M|y24EExfL3v~qK}PL2xGJr -z(TsOv`y<=F+IRKTH#DSj6O?msOsapeik<(oinIiH*$-Cn>fS0M>KZ**#g2p1zgk5H -zfK@!zJRtyDMWI{_vENn^|K2Jx^E>zgt)j=BRiyvBRa_v%CsPCgSVfmeP~Cg0xcA#C -z68^G^U>@NqtJzbwl@C^ty$WCz`GHmu9AFg_zlNqzo!?u<<$J4$NbCW$iu89@@#Al+ -z=<+^CM0^Qu@X;!Q0IXsn9xLPbsLDI5*q_$*PphaAZwR!Ctq)d_`rayzKSQ{)imi`U -zF*Z*s5#rG*f&s0f!=F}>#d3Jc -zanPqs;?61_Kz8U`wBK7rmpiKniGr>E%PK-j+#)&wt>Py8gH@FIi&cz+y-xnqDy9Lg -zV*hWesQqXa{qC${nLF47tig>EG{7pFSSk-`+yJa%>z!4!`qL`HuFb7)2epVHLRYZQYiee8|F-#N+ -z31Ai3S%FrO?ZGN)0O;QDk9ulMUOkH -zIQ`oyvf2EyigGatk5+NQBdCK1_Lo(p(UO+{SjEVv$_kHG5z_L`Dhl6QMe10Ov -z;slvQcD*Sj&??3Otzy@sRh$4?MNObpJp5%9D<7?5yTRbeORwKnv8c1?-YWWo-dn}^ -zUslom?^bawr5I`kp)i?qFvg==lGk3Htz -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 -z2u&~@qj2#tQjsAgGJ@3&XiAbWx -zpTmu2vE+{FTCodF<7CCWdZA@n9=OWcrnFE4C(3X^pZ*|awcuqSwe -zW7If_q)Pu?zScIy0ErF1^Eo`ycwadKmyk&pgNco>+^2r<`f6AMB}~^V^9sGB3b|Ow -zjTF!WRfw^+r{v6ynNuJV@KH*{%lP4XzDO|dByAS74*ZbK523vUN|Nc`zUmO2dOyS{ -zz184<6|vT|y`%Yd=~L&JfxLG?()EVepwP`J&dr!B*R=H-UpIOWjx5sfAj0rr{8I-- -z4y(eP*>8+7`vqh41YnGm;kVCqbIA`;vbBWOlf5TfH7v=N9!E@3uEMX#u%ZWF~%{7@K=m+=|3>W4b?)* -zXN<80O4~^sfH7W!AW6^wFh(b0Y5>OA(U_G=<%Xk876iZ;F`h9-j%SR~qgrw46=P(4 -z#Ta`;0T`q0UyRZ08DpIODg9~sv!VYe@(aeui6Rd2f-%N(rc%CQj5q*{5ea}X3PK5` -zb@br+l2lKwn*lIJI{?Orf)e{1V}zpB17M6IxuI_+f4pLh1&aWTQNd&W2H_cFWO~II -znNg^pF-FXx4*8B@&3|OL~E*1)S#TeC|F~&~-jFB%W-SN}=e=x@NXN=M8-xy;A -zi)I~%zuYs%cqDq#8=9$H`Ws^;&I#`ZV2pW~vj{I3qteVo3;<*F24IX}6jCo3BZC7e -z0Ar+6i2z`X-n^z(&luwl0Aq}Q!5HfS7^4)n`X7wZ5`Zys>_!@WxbmfV#u%$#F-FwC -z7^D0jjPd*xW8`4@sbfV-ZwbH{cQXHCjMVKoCNBI_tZ%B7D>{bNUol3g7mP6nfHCsE -zVvHEZJ-9V~dk7}F}D02pHe0ArN4+mwIB -z7{`8NjAQXQ_OP}n&lsb@3&vRfZ;Vm?1!I(Z!5Htzin2=4UNJ`cXN>XYUl^nNE5=9+ -zz!;HIO*o!0#xV~oWAg)#C)0}gHf+W*8D!~S55KxnzP -z{6;SrqvQ^`+P^Tyod%|d^1zb+!Wb7<{=pd602m|5E5=A9oeBOgjPdq2#t8o}jFIvg -zW1M}#7|H$vV>Ecd7)MC_OjXsNF-F^0j8U?!K;{)=bOT_FD`Nc57-Q&fj8XRA7~`!V -z0ApnRUopmG0LEDR9~fhyd*0e#jB%`7T(Wxc1!FvZ#Td={FzyR&fH4C78)J-r -z#u!7NF-C-cFh-#lj4>F1F@il~jQkSN0E|&#E}j{HF`8Tv^Zmvcr(ZF~oQP+P5s97f -z-xy2zMUNOe>pxgoFO4zkz3QABMx!)Kg+P^VIxMz$}_8DXJ -zdlxYMiZT8wbhcABBJARPZ!7+cG5(^vGRtS8jN^I17-In#BkpgE5$G9Xl=y=&O3X=6 -z9vdWtRp;puI~h^CMgcHJm=}zZ=zn00XQ0~uV2m9v7-Q{s^1m2kNhD3jZ;Ww98?N~U -zV-$bJ7&|jdd7d#w*)Q_Z&ln@e|BW#!+mM+2PmEFSH^yl4Ul=35Q+{2n`^GcIsHbp1 -zG<0^%q>hU~Yp^foW0WGsYNON{johg_0EF1!GKy^Zy?hW3VrJKfS-= -ze`Aat4ZktQDged^^$*6V@fTy^$7h@#(H^yl2|Hl|%{u^T?WXmOe!5G6CsZ2(R&FZ^JDRsRnpE1UL`M!Y5 -zq%w@odncLXMNj3Fp0VI_qMlI=5=1GnD2jh!jNkuajN-?@Y0ntr=8zr$V^ny-80`QU -z~G -zF?Pev{|ClM1Hc%;|BW$D;=N*w@1HTooQb~}WAI;$aS?zqBK*Y|EB}QtP69B->Hmo_ -zw*L!bEPlZl6^E$4{l*xJeq)U1=>UxJd~DCRbMHSf#;xurRC*3Ri9v%Y5_)Jt?GJGo -zs@<2(lOYY3ka0@ya&%mjV!pr^*=LYCm@%5OdAiC}o6HWsp{Ne``{kmOjiSnYi>r08 -z?a!@S7#eAtGNM^NsCRUstE~w7)sn}Rx2*nA@k(ub&V7sKd_yXsNl -zfM>Br^K2qgn|!rd=BENhH!O{p+xc9pG!`@H`vqEWGDrr9TSDYh>ly@&U8pclzl*R` -zgFFKhBu`cva~8$m5WEQ77@=|$8|X5`P#nBizOyKtFXrH+=Et&LD^v|38~(?$M&=o{ -zR$25@l0EP2H%>Z-q=HR$QE8+68wJ2DhbYB(KVV3oh?6XyI`JOZGdV#+M&(ZBIOrZ# -z5y7$C^%Do;?rt`}9!>9{e -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 -ztkKvPCX+mKSPSwJknFf7c}yz -zEhM&n*-TRHd-i_zyjNaR`ayyqf!`w_9{T-w?Se`iO$Ao~HhJgWQq0CILylv%Z2&mT -z$JEF9=`$g_GQHpmR8`5nd1t52zD@j(O3n+9iZIebnC6mp;PA+sLP2`QwroH*`-Vby -z%gix!iw|5U1OwPYy9Y37J$oks@0F8v1pCZe44u9?pt4N$ShOJ{<+K^qReQC%?T15V -zyM@s(!<*WECa-tQX`xc~6>StHYh?`*8;gzb~d?;y!tt#X| -z0*sc*`WH%tv?Mbw_BF+p)#;rf0YchPW%OV{LJRJA6Mk2DS;{_aF(ZAJ17j=MZ~GQ+ -z@oV&fSb&Otp4Y+Iql50E6 -zDiB|##sV!cARV+0xsK|_S7)R?wj45DK~r;CkrwkzC6n})>+OwlZKS*>pD0f`(xb}3 -zBxL}A<8-%`5@}JbwmHYZTKrg=g%gfySk`N2RgV?Eg!`e92$itmZTjOblwaZ -z9E-KpEhX=)A;N03gmX8>h{_#sJdhqz?cHWRvy5@sM2nfMr}3}i{zO&AFfN=7hqP}^ -zz$M1NDEMTko38d5@s|`4IDirwJaGRamvaBuDfSBqYaBIKseFN -zujoOAd8?to=96PzUXm~q;p~%Aw0?o!D`cBBwg)tK_)yu?#!w^{Y7p(2YD}b}+B$6s -z!^B$!0*R|>ho0qROi|$6*O!vhVP~K+biygo>~zJieNPcl&U!7DMNDH9mpktH8bS -zwDsE5GCl-WpWNWi-LjQ$uF17i7(`@!Me+6<=Gtis*9CK&8KMF8-g}zR^F17i(LXoLLV;Er-sK -z_)pz6!aTfz2M#MEMY8VtF3Na(jFfnT;0Ofa!k<5jb=y%M@MER-p}YW`!4?=?OM8>= -zX%oOTW_(oj1tgFepI#Ek%RdQZZ3&e)I3R&^N4QA@!}a^aHF7V%CXgYvCnXca|G_m9 -z?feg}@!>gv?B%~`eN7;Rke(CBLylh}G@8b|3&9t^xkkE|1XAYhM|3bV3dEsjuJNjV -zK;SijM9}_W^qfE{BB`7`Cy+yc1oHFm1kwp6=idorsqWJkg_i`x)zC`{*pj)0}@Ce7To$FKmw_k@P}*krBitPcLFJHD3|j$fgJ6A<{F#+ -zB#>$yz#rx!h-dyIfdpg9DEVxf3jXaiffNBGkQJJM1hQW7cLK@da>p}-3`ii|oB!b& -zLswoC$conla><+#|4$ZU}o(oDiz$gtPZGBbDOR_%n}H;ePRn;gr`vPG;oMWC$%)Q@TiXE5H~d -zt3=W&ON}F!bB6p_9I&6(AQte5oNN`Gse#J^$7WE9ToR;$Q#!dg=+J;KVFz0s+k{H= -zRODi8pb76vCV+N1fN^mcIL3^toCBAf{CtbARoa8W% -z_hpz4C4tu~GVTn-tk$OTp)59LKF2}uXcERIQ7yR-R*YR8cMn0cgfyfIb%20lN*}Q~ -zUUoPjA%itTt!c1*Qc}fc(Rz6%*u5qm3<)8Ff}B4SD}A7&c5J!=>`RgB_uPr?&wKA8 -zVfSLn48q?{aY(s|eB=S2Jc&JIBR&2QzTIe9Ii*$zH`I{)9Xm33f0^3f18fo%zLy|v -zb`vE0{Mh?FMgVN=IATn^6_5MJ6R}CV1dnC4hN^y-AGvMXHTii7;K0`Kgr86pR{Wrw -z8j(Q|uu6aRtq*=-jp212b?+u!$Jwkrdb=CJG3^P0$Zdf}H#lJW_@Th6-%jTt@hfbS -zr`f~(CIZXb7M6Z%FZFwRtC)#9s^u^`Dj0(SLilQHe<7ubR#$c_XjNcuwAlJ3)xBT|Wcsy`?fSgO) -zu4DQy0|>uL@cfzxt`H||AFOa9BoeTmqQ4>3vG0IF1Ns__^?uPSvnpggXIi`}!%#Xh -z!HnM+(kT*9YJG_^ts5AGo}1rlHi#nIj#T=o_Q;HsSdqe7UR&@EB0#n60obWjbEKD9 -zE7iAl2Ghv_o5Tgzlc3C8g$*p8(MzBaL*dlGUJ@Buc)59qR!of%ye}&}CfV9YG_1_x -zW1Npr?uA3tVDVV_W2VmW8To9bSNaL(8G{+P>Kt>OiT@;-`}z|i?pk~VTIf#b|HC#kE_f^q^u3`!rsSq9FSjS3ah+I4G=g%v6Rofr-uJ~17@ -zC66z-pk`xJn`t5}IR=Bdr6#Q~!aCf>JZwQSxIbd27fYIjbjbnx(p?L2 -z0}K{e4tz4gQdNV=$P{6H_v_P5)iDCq;$!qlE|A^b7o?rd2P%AtgXFbjy>y+pnlY*5 -z)Fg8O6?*VKI2A?I#8ezq8KrLxD5)xt_qUST*j1cpy5^KgHp$y*)UyT~#>Vb8{afEz -z!?_zI>Bn)YJ81-9q-~(WP7)prLC$hy-BbHxzCWzqh1ZGCVmQG8b3qS)5%e}_AQu%` -zA2(d7CRbvb`eSDi<#&aEevR#$^b6{)9S7eH+~-~kVTCC(Gj{gSPSIIvrm2U>c_)9! -zo2~xfxyg@dQ(RhM)4O3aqMaFad^X&KO{N9eMu=%BmNbxWJ&p~sV}ne{Ka2?XW^q-B -z6QUoD{s`C{*SDiNARD?-0ZWNLtftgD4YxT3RiB3~Ib+XL7-v4YB2SEr6DtM&E-B=J -z9=sibl+o+VV(}Qrb9*Bdg2v4giRQgB?}Yu}*XzQh%PLk#2USdu>~>!Id%S@T!(n|R -zjKRgx9y55=g10`P25IyQbnq#>gYgJ-N89jX81>BGj#~UtzPQItIGTM85SQ~HFCjEWE(?^k4&$|1Jr1q|Cd_IAtp(CtG%Fwdg!y= -zNvt6Q?u1)bGon0b18Khs1-pI97_*L%f2(iSyNAo|w+0-K1f<-Hz*aP)4bgG$?E8?Iq8v3ZA -z=C(EuFCqmB6m$mL@I=u+>`77RBHrW63A6+mQWp5eo@<9W6o#FDs^#h8lvEINMK5Ox -zzpDnL#^3s`p4}TUrZbcSj2m-|sYQLSXyb-`;a*H)@e7H>X8_H?K&u^zQC20O|6Bf4 -z^8$SHwj>YWMZew_mUDol&z!fI28zg1Y$wb;K3{aztkt__($?ntlaP+)8y3n$x`iOJ -z-JsL7lGMjkCUY$Xb21CT+$9(+EO=9CpaNXSn8pUt6;9+QuLK4hceqkYl>C8&L3sv7 -zri|2BF#$O=>-a!A+}fKYYW@DWQuA&SDdFvVP+k~ZiV!M|3p7L{=p+}C8}E%y(P)Hq -z1Hbog)Y_-m3LKz!j9K$ZIK({%3ya(`rwC`i>+;6_bV`iCD$3iJsKEe_c~qCLD~e3hZDgeGX_7cg)& -zi>GGVm>QXL#2ye28_=96>d&HG(xMm%^QEw?L+$bhr37R`{TUU`q -z@*5jNxohnzMmpp3OP-{{a9R{kKjsungIkS9%0*;~maZEE#bmDDfd6Wyr02aieJA;l -zRynt>6+LWBqay^8`XCi$q@+|cF8!UCt1wiCR*io17aNJ -z(`h9QVPI;Y68m=aeH=rVb49fIR*WG1gdZ-f40vfT9}mUg=&ib%v{V9R!nQb6k4@OQ -zr3ke{JU=FSnl+0|wc~X+~e08V(46&N@AV`uCKe211ljd|4sO6GVQh&Y0Wkmg4 -z8ow9>!fF0Ug9i9nD$~FeDT6?K){ke1VyL -zkA5VM3@A<rdPF!PIvIugdOv`XvW^>@$3vido)sITNH9z`Nm -z4M@W->F8@sA0y4ah4wlpNviFl2l*xqHS(yg_s-Z0+9o+H?i_Hpbnu^L -z?TgBWo|pkY13}6k$w4WLhN*$vn?Kyhw82im`SM`$E4wghI>9%pV@t;nG$>E&#E&t -zu^DHnq%=W7fKSpEgRfldqm}6+J~Q=LcQF_*!5z+F#=@1MkS`uB?itGK$W@LM9}QHU -zeDAtj#mJubYt)AdGw9heAS*PrnT~e3?A^dRwej#!Bf;$?7*;O1<=j$oN1IMdoEVwa -z$&2XURH6d2RncNLxYryW?~VcAzisu3)a6S|l}@vrP&OPl;L(MK6D0M}D>Gj~IP+$A -z5=q|5eSpwnG5LH$Heg*p_E9AZl8^K0gT+`fM;0zuq@G(~G<|<2!-s!I^&7XHja4h^0Kf8@`RmN%_!nocn*Ua-F9j*)?8I- -zDw0;|jBd!nmPN8hLf=0Z%R5g_y|XAcj7uzMu6*)fUcPXb*vLULR_n_9o-tXf1J|%o -z{R4TUZP1W66l@R8+7bx|`Z}8^&9_Bz?&{(SewM4im;CN(K+qN0SptW4jTO^r#bGSL -z9a|4GHQm{cA6vU}aTZ2^dI4Qdp7x5OQ)U7Nj*pF5VffDU=?ujgCeEQbJ++GpTD6Q*iZK3#S=*M7qsiCLo -zz0{bh+|T6R6Pq?^>OAo82+=oF4Qo}ay3`v8lUbEckBM<-xlpm6Rl2ZbkFL~nXDc1d -z8%kHhGwPE(=L3!O@;6i(u^(y10-qXvOb0QTci}A*;EPEvyJHWlXS->CEvrWg48|F; -zOHDe4TDKCj3AXGKB<#aH5(Slt>f4@&6ZQ}(ESN2&ET~$*Qo1A7T{y42zldS?UaB=( -z<~6)7P^ve|_UuAnEXln}GSmQO%|5%SZB7RNm3jptp#CWj+k`)^6ABOM+!gxMUAfUNeHlEHavATT?F^JkAGutX7B@JU67}D!d4GKnAP5scQq#eOT6jQWS4UG+1<$SFu-qWjTdZds -zd0PrcOReq2Li^zK=)uG0ZIh{AI|806%|_kvVW%OQc1qUW(b0yL^JBw`(LKLLJ7*ix -z_f1~$LP`w-qNMM{Z;QY5pn`~6_-v=CV_VBr7w}-#d!q1Gr%GIQ-oZJec9XleX(=qS -z3PWN_;_%?=n^QH;YKGYzOzA|Nqi2Ym)YeKdOf`8){VZ1uaTEt<%C3R7^q)FVdNcE2 -z?0N}e!upeQ-lAa)f@u5WxWkFhFXwQ1eeis^cf(h_zQ4``?3)AiXZOoyb4#hkmUh%N -zIK?m!%nTo}no)v+^2Rna1^o)-JTp!5LVki=@a}G1D5%9kut?czaQ;h=>)e -z={2{*B?q>(l4y_f*X}};9~I?yvz$GjrkEaz5I`+3N1D^HYvUXSyWefKG^9l}7H$Yf -z5Jh_>q#oC@%i*(s5mpoOu>rRn=A!26tD_6q^5}L)rP0$Zl5~$6wRD=!ne)@w{gQ_w -znyNn|DR4v(hl0xHMEKUxMRrkRyX(vC+{#)-ZYsHUQO*_(hqzE6e-X#(bezo@mMY3;-kh+ -zZkxx&Tr=oJ0Aq3P`*BCUi2;Gz+t8h;GrDxC)Z_rQ)`qDs_!vBoLdAjb=?iY#vTx_- -zUBZt8=-J@Jv! -zASjKp9pZQ~FC*UvO?diTE@okv4GBSv5!mX;xKc23b0_m!vL>k$&H+Tesxog+;7Er+ -zau_)H%w34cZhq@VZGueK-|Z(U3}t_{1irG>V+x69yK3wmSQ8nma0KAE9>Lmjn?4O6 -zh2U7#`$_Sh-hE!Nc1>1y|7v5u5}XPY$gTQ_GCmJ^|Xju}Gz?1xzV_jy`mPj4=R=gpTn3IO7%$iZBT$}U7HVA!9j#@<&2uPg*VvCSckHdBWwGPfZmBFqY{YGk#&O7q7D4`LXvu}w -zh3r!tfwZnp2}`obwbB$hWLxMJ -zmWx?f>!_0N*{U7M>ciWkD5=9U9D4q*@^$#$o``RA6HMffz}HKStQ`D$g)QU2Pa{n+ -zicgC|H3#eO<1L4ynp3FpvC5+DPt|(s@$5{04M}v#yIwcUkcsC~pyEo^&W9u*=5+{0 -zO)Bix!b&e>Q=iybabiAToXUZGFz6?f#kAp0+q-h+G>vuCF@5*Q?#v1o5?zy~z=Pz7 -zKv^>Y!Mbh7R!Hk$j5`}#Hw9NJDj;7znn$tT@ww$hevy9NA*I?325Y1L*05Uo?e&FF -z%#Z?L0wOsA=V -zXZVy8Y2wAC!<5cfJ{8+C`3+B;iB-}+lDRn$PRRy``}1u2uU?f>2x5$!w{uV$P};dd -zCu;aQb&HYpo)GW=(aexY$2}qrU311)KP?*w&KYO{kBl#s1jx$Z+N` -zk321oiFm0Pf^wY%Osw^3ZYlW3w}D66fLcB3TaWyFmJf)~Pf~j2{_!#+(qUDd!}4pR -z3TbZ#22wFp^h>U16k52aT*ccf5sL@nJg{nKyw5e0#Dg|M=CF#jwX~pYu0AxFR@h!y -zvJwYM)I=c63~H@tfq2uFrKkj$Lv0*I(S!#%xry|%2R&NFSoYeKL4x5Tq=|0ayr&mS -zAQ|~y0h6B(=JTiz%SM)ZPFrZurHAcvj>{S^b~Wm9i68I=n&w8G)XO#!lS8ItdZItU -zu4g^_Ji_)O -zoo?G1wbzloJbaaD+QV?Fn*|CJ -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 -zW6XKIKQCB@yt_ycs&S;A^cn!# -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 -z@T^&qM_A -zfDgk~w>t9(KN#9%{K-%_`85-%{XW9u0}ef>$iYGdLSvIop#G{1S~yyFGLF(rq@l(@ -zQ}X1Z>;5@849MqUb(*oAGcX)zgwR!yYLmm8?R_&_S`52-`^JQ%Z*DrAO@?}vWJ$rG -zSK$mu<{@ruIFPq4w0+elm_#Q|_i1X{M6?7%?VaicQe_0al8)>7j^rw8)2xV** -zNxT;fvYkt>XD3+tjxr|ER-)pPyCaULIt)yNd|I8B_?vJYu)G~tFN0<8*7W%cX9^^d -zHgHCxsAk<^A$LrA4+Br=nayFs-Wscww>{=pB3%a*1%XCGTIERldItPsS;dSySpF~# -zJSJK2^K2CYB^q9x;r-S*hhFl0aN2!K -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 -zDmcwA@>@ -z|gO|Ey1#=*?XTu1D;&bgaU)T0EmprKmxxfUmI& -zDj`Kqin?>|JN_UCCez>)Zu=*4DTw;XPcMZ-u;m%BW2Yzqq|;J2 -z^Pzqr0TZPqmc!Ksh9fF(@pg!nx`CjV^^s*fnrSQA -zO*agM5T19Qjcn&ssHk)B)`7Io=)U~ASiGCGk%+D~@;Hr~n)#G_Nguhj;hEtf3fqW} -zcU@%Lr{B|~N=I-b@bTn@x@AuUnaH}Tj5T}ptUCGAtK)O@e_P?a6~ -zi^e(ZFZ*B935>-nxQm52af-*G#4CnXp<2%!4Ol_*bYphO`A10K+{J8yU1kI*Pzhf| -zRMn#UH}}zn!bA$|k^31NY8EjRZwSoH-#XJgiR@omO|LtAhR>zSEXMesg7J-%Mb2n- -znn0}h_pVKy>0zIl&%oy!<*nE!{Yip!c!>7DqsS-fe4+|57(;6?!rV3_m1zRf?5Jln -zSB(ngx7f2R+>Cq(x%4Z2j)!NOJ*kF7kQFdH&HC!qBbAzxmd8K_m%)gYqyKU_&dO#Z -zlL0c%8K&U`4im_pRnaqet&qAG?)Vl -z-UkEQH6!G%gr@RND&H#y{?WUZipte$c&NRS6G5G8_MrZ;A}yOs#GpY8O8yj&W@F(f -zusP#2j%CQtXb=(+fvyzNOA^~=8fN;qZjJlxwxQ$NedAc6>e!m9yFV>7A5UI>xZAv} -za}AiJ!7^posQL>`+2TKy=G+_}u3M$^+IEdS1iX1W=aV#!_{2#oH4X~XNQvtzehQ~7 -zj9YvgXKi5nnrk4H$6N|R?rp%FcpP+(eM%7`cjMVs*lZn!!1RT~ovVLd*{-SuWoNOd -z3*&&EBXSemD#hT=`DgN_)-}RWoVFRiG3qkd)N&b3>C?pJG5Dm_rE~3)O%}ZHIB(9u -z=C9{7w1R#Zacs}zGasOz2atPC&;ykV8dV}{YOAeN4UJAQ40yA{kE~AQ(r98?r!B!C -zQhASDMP^`_gZy~b)+H)71@22Qo2+pItEi8di%_a?E^;GaS$0zsG6QW -z*$vM8a%sFw*VPj`f?)e9rbouCIa#^B&t)COvb3AX7B|?t{hAsYo09bzEvdi0Yrqg< -zc0wY@?``h**X!aQwC=^12vud%Ui3S)m(d&_xroS!RgCHLPy5G?Y+ohg!_Is|Wysfc -zwC<~%!xV}l9_7p-$XHXISwET<{74A(8g;d0t+AK6h`Z?|kx2yVv8ak0=7Xw&p3TZ$;AfzqVFRRI!m3Y%j=-NWQs<)FSD2IX=ZK7%xHt0+; -z@esSd2xbdsNhHdAap8D@JUgg|7Ro4b!7AKBk@cec8R -z`~>sw85w9D781^irkM4R60~G4Pzdl1(;j%O7O@5iv#9T!b7C(!^dqvt>u={t*MO-Z -zvnD1`11Tj3wH@?iQ|aP1Orqew!HOzW28+FY;`ZzS4zivRGD-j-jy?YaarFO(4xy6?+{GsZ=dh~KOv45Q%Bw_<;kL>Zo5=Te-KCX$-fatm{0nd<$Y-qQisT*{W&UpdJL26>A6IcP -zPyPdObo_6KBdt7gOM>MO@|9#St;Nc?BSjEXTE^#m)Z}aXeU1#d#8!u)HHcc}wZl -z1eeQB%|Ou)N-5~gC<@d^Dg+>oC~6mFMJ}HTzsGrhB#cY{7vd;Ajab8~2;SC;w0?ST -zGowv?wqhj;m1u;CUz(`Z*9P{Ysm@phv4AwVhO2=FdvX;KV-NGXMz9h=seuT^g~t*- -zc%7yfLm`pcq=POl0sZzefMFxebfEQRh-{ecZJ*nUEcP_x;`jput&!$cgXHrj7PCX9 -za!Fn+j!g79yQ|*ckM8+^Jw@1`!J!>Rx#Q>QBm3``s`c@jRrb_dHn|Jz)9z! -zQt)rY@y&6w%lKo+m`4aF&>aUy{xV)%g<06m^>)TDZvAf`F=R*xWEa*6ETMJpLA -zYTIlRX1!wDY<>a3B)c%Kbl-aRzrLZ<^;+13{}3zxs5gIRy011MhH#h-S)MkUt^G90 -ze`Gr@R{#my8WBuluU?=xhoZMHg(7Z6Kbx65NDGWgZnF4 -ziB4e7JG*wBI`v`#xsbNZZAyDuooc#l)+~8dAMkZ9E49 -z9N<>+ErL+!P(J#q@<~2mq-m`kUlt{nNZk6X=o9(EczK|5m!Z5?+(4s497NfAY$8aA -zCodWHQAG(Ix3tnBwv@DNQ#h0uE -zC#ne4yS{wE_yxpC#tEtKWMFZPe=Cj)OaR5v6mc*Us|27p7Nr|#v#Y)Qh -zFHqBWW)TUK4zf5~$=u~&h?TtS0ECZZ$r#>Lv?}+!bQ-V-R8>H0nWib3Gi6FotLgjO -zPH>>dg8S@BZ?$_p!e4;PkY$8WmVdo~3gh-}7VamgX$y!Z -z7$QCP=Yob6zk)ucT^H*W1t^ZLNZfS*#qs!$;>ZPeZ(2(o*9lM@YyT*YLIjZ|0LAgw -zyW*IZ`Iq9@1)@y)9XyPcr4y8DYfsvPD#h|$aU8-L11OI3$c$&KJ4ZH@r^_NcyuyeW -zalaMEus@0;i%c0j`JRgK+h-_$ntV!~e<_ZrNF19!5K)Ko4V*5Ye=Ckr%VP8TXd!5-isRV3;`l<3X5$8b|66fP_;8)HpZiB~%mXNn4Zwi_#qq@46ytBjQ6>*2QjN!Gs< -zN9w9~#ZlE@0D0*mr+*HhID%aKr8w@tD~=1XS$U3Ls9L`j$J!iR3ANvf<0%$+{@;pY -zH$ZVzhW?Bpk8h%gJVg>zh=xz~^dE{NkMXi0KyjoUuM=330w|8E7plkaisMD*Z^coF -z`?uoA4p1B~{wR)i)=r`==-DYS?t^CkQXF3dJepe@e^KuM6h|{_TF+H$ZfOI$--_cT -zKyloxgmIm|9kz*2kVK_{!*(zsh54;GmJadLrlcg;ex_a6Wb5+=&-qJn)Gh=lj$veW -zg6_W+M>i+ -z5$8XOW97nc#Ssu~NKwIDRd>Q9e5*JBcIsE;$NN9C6^W%b2~uie2xB{!$#>+%jRp -z*@cL%9qOUM{#5YD2{Q1y58DQpy|CMc>WZ%Cp)76#qsKT-G>I{>MzC7f^NI; -za%`z240lf61p0L7<3r&lKyjS+UZp~OR~+j_+;w}u3udA?9Rd_bg7N+to&ZkJy#HHq -z%qIjWjwJxaFFmxHTK7t|56;6 -z|5hAXn$g?;Q5^9i0`~uWAMB{@lUjiCF)Ez{V2 -z)K}~#PZkEdaOf+~GK}zh<3FZg13}&uK0lNjXggngVSvsdAK5r4EFWm9GVof?l5 -zwd!CDd5zqU`_}?qWpUA$UzXYtYzKwqxH48M9VnM~VH`^y9ZDE7SczB9ra!S;SmQ~= -z!H)V&ifkSaV3jpkfpj(RSxFho!Khxho%SdZ4QLzV#6=2(>f(Af@Xc=O;3$+{m_*NX -zfLWmH#q9I)QjA#jg}{c-9z{7Pr*`^+AXs7>*i-Bd5a^Bg$&;eQvAAIj4$JSp5Pn&m-!o3K1&ui5kBUAr -zMP8B^oMhETRUeBx?nu*Ra36Rm$2?%i}YuxKqtQv%hAK@;sHJFBEpcDv&V59XmoeQ~dTB>S`VT_84o -z9q^3aW+8D(nQ};$1vohw)MUi}I2K#AD$$YF$7?7wm&s%fNS -zA3Tmu$k{~{y6kBM@(nugk2?k=NGKMUIE#ABJtI9in(Eg$6EEInOIxni27}a+G$Mqt -z)LA(CDzj`1MmiiQ0So0W6y(Is9;-L!B*meRDWx-*$FvRgQO>=swtK;LnlMiEr~4k1 -zpceKccRQ?4=*b!Jc#c3#K#H*1>C -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 -zBPFuG!l2yzF^?B -zB~7md41+{Gcb&wWn18WupL-D7v1!eN=gj-18LpLBy57-2$r6-ihY{*h(j1LwWJB5d -zP3Lt)A6ZRiimuxhTL?G4Ty$3Fm%3L^K01+O5?H>R<~OS1F8sjxEklrA0|bjXz=^}< -zI=j-5nv>KBbV#4;QepjatvB^x -z@80Kh_c+~ef9SukzN|6Un)kf)qF)lU*Y<*Mmd|-m1wl48EnjM;uoQnx<|T7?w!^Hb -zK0wAUf2AeqDars|@qp2p7(b~cG0U1?l8ePKcDmfA_`=}^`lHKCrc9b_O}*39zRJO2xoRR=_EtvuFj#WuL^tSy%ate-O&rdej<&^jW;D8w-p9@mr(^Nn`291 -z2@T#)Y5hbyGCKBamvAJDa5m=+Hl?!KOIVXDl$!ERLs(=`wB(VwFFzm{%T(DZTPt4XqBfv&3b`(QrbkjK8c1SWq%{DXAjp3)nT8WY -zFV0tw;oFXL6r7Jpn4U^aji`0kh2x=)4v;pCcL_z%}~OED?+eW*Ns0!u+SXDy}wb&wpROU -zA~4-Ki3b2clOULU6V1_~-#oIY+0hgmsdZj?Vt<9j(+Gxp^^f66zCpRk^AAC7_dgj8 -zWYcA|vW_Ko=|pWk-8^&3suJHrxISpX{j441!yGs;h>MTYKWj&Ye^WcUNdB%JEo1m# -z!y1)dMSMYKlyj^X2qw*T=?Cl>gDB9JQH2KlS3gwj|e2k^RKC;Dsp1s+s5p$!(f -z2>hP7NQT2+k~rSoBFKRCw}sbpT8LeK$yCb*>Lo6whV?4j+HYSnDuVwAB=UI|`lELA -zQ~$qf$1=m4guiM>y+3Qm5Gj7*KWaxvSM4&Kf2ke)%F|CjD3^(U*N#s0eyIPb9Z&lH -ztQ}Xu;T(R~jSyh^$?!+*XixfQ?HC+h(zM&y -zS$>7yC}#GS@Jl!m1((4nhW(L-ynW;0b{|diyOO?_t$_6T(bTtVLmFC~e&t4M;sMwu -z2%z56`);d8TNd2aL+PymdqACjjBhOw{+G0x*WI^BSsjslK5PrLFGGgU0xmyEvb@at -zR09xx3afEWN9V8}qkAA!vFklT%IgY27oGD?F7+Wyn-?ri)R2KmFz3_)a}MsNfo}}f -zY3%InnO&h2oijao_@j2D{YUMX?H>vP9!Fd_ -zuDK&D+h6#pH8TFGH9CH3joayflb>26N!6#;X#AJfNTgxG`46p;OsPmS86Nky);J!) -z{i!v^|E)D{1OK5lmhVgl{MH(K{?HnK{HZm9rvBC%Q~seff(l9etu>yJ{;4%8&Noy4 -zsWpD7VE&J^M&sXFqh8RTT4TWN{69lQv7eN5e!Ck -z4&_s8tdp5v{99{u`crFsO!z}<>@*!eWH44K3 -zTKq$6B(wUhHKJ8xnD%035$^W*6YqY5Rt91(-~$!~DdTQ&Ri -zwc$o*CI@unY>wt=H|%ZEVJKuK6iAhZEm@h61D-BYELLcH{+X)4{< -z;)paqfHd%Z#s#9+1&sc-_xEqL6RHEZVhvgwA&UL0DA*g_SUtbk-Yp -zBX~EiEbT4L!Ax6HkHnHIuNoK;8dOJis}R*P^z|$8MMlVLr$kC5H<$`asKVaJ9(f8$ -z>V)KQJ^^_ct57c*+|!F>V)ZWlLj86uY2Ni4ATnrFJTOXyYZ!QKfMgq@2j7(*ad41r -z4Szn=r%j5j*aZ?_n>K@pL(;jY7|$hZj$nCChd=DXIXVENq;Oxb2WL$AJWh~CS00G* -zWma3*)RH#UR5}cP8aQkv;eEpXb5Lz+190WKox|FM@YA_dsZD@yq#^@%WjtewkZan` -zwufh)`B||{D>wQMws}jTv$f0&cc2Gr_blF?5jo@L&Tnd_JFs|Yld>|OD0uSj1EY@B -zSs`ue5!Wi>2!My}W1JuAKIZ^72VTJZOL*#zR@JN293qC^qO4^Wal}myW~bL;r>mUY -z&Te1cR+kE^%GAo57lsI|GXCPFVcwk329wD$HlCvCjb=Mm$x}qYoAx<;>RkgK(Yxr> -zi9LDOekE)v27v5Ckr)%T;mjevF#y6}4zT{hC8 -z7K1+me-OCdMR1-)|KMeNptsU5 -zieni+W+Dh32sTip@D_>Tou|c)99h>UL=>H;XqC(}Pz|k-vwa*1-Qb20+Ohaxd)5mHMr@Fdm6@9(8Q0=K`p(iQ1XMtX -z$|6DZ`6>9-k1vm;DR04VqJ8gxhS6-*6Mta3waw;9t -z7!Ye9@egT7Lk7hIj0r+8JF-W(eKP>MK03ibPFjk-8;950>LrXO=X%YHlFjINbcufR -z`bf;|xQ8fXE3%T8s1Lpr->R5p38HUH*7FU!x?!j@21F@I7!lTiAvM-p^`2qvz -z5Rve!|0Fl+RFSeNue1^#RB&up7{NC@x9=ne$$^wwTxVME!#5a1N+P@`{axbMk`W}a -zo%dJ*)O)DovS4u7$jDB&4ys=< -z-KDk?=l~cbU@9B1AQd;IbIHLv%Z0A-)SBSo>Qu6}-d6zUk(<_RRyc-}(7-OkbrZ>TM7~Gpk%_7SJW0fJmo7e6>!T+56~0mLS`t!=jUpzB9a!JJ -zT@ep5NUG#V?a39pnRxe_Sa1>@4rf1hK9bUDhOnI#%v*HD{eewbP#gvq-ggHn;z3Sh -zU#TtnEgpxp>P=eN>J#G{)u3h>jG~Bi{Wq-qSbddJqjWcHPl8eC(L~Hd+^0Kjef5u* -zojT4-Rv1Esh!m}&g4^+LlQU7B>fFGa-)!J5m5Cn>TPRuhf-@+i4LIW!Q&(1{9Isq5 -zDE+o3!YoCtye*$xA8QDBvYVo>PJt -ze)@zDCZK&lYGPM7{75|Pk(=zwN~D!hFy>osG7g#>$dO)KT9{UZSgkC_ -z+nr{g$+r)MHT}wH)Bvt+&n!SH{FAXj!hU7Hnr|U!P6}DvVYbuds6PZQSpTF+U|aS3 -z=v@fs=k&TDDfh1kq2r0#B_`vBHLYNq`8hvF6meV6N)R{GV6ECkdYnbW^hryy1f+D6 -zb#0KDv}5F#nC~}EokN!4Z#CiSK0{uS)y?g1_~ -z*D3JV0GxblSpA}YZ>Hj8`IUK2Zyuih4R91Wp88^~dU>IOU -zCb&2;qUh(14T3R}S)d6hmMG5Q1zs^2!_{4JFoRWKE^b1OJn9hr_;hZYP2w9&t__n7 -z229^e9a$|Cf*a8VMr$cT1K6HB{Fe`af|^~09x6#1_>-QZvg=(0oZv35sWHKWuOR28 -zdL~#jw25pDzETpC^$u2aC?uWLY-{Z -zK5kSrVT#oAuk|46uA;r(y+{?V6E4jqPG;LP@S*_LE@H9ohIa5$&9AD^PN?2}wTo|z -zgHI2Du~J??QSI|Kkb3-h;g#x4VYQKux8TRh#ShX7Zoo4+zL+$Ckqjqk(+JBFvf4$h -zL7e6JNRd{)ghy0nfpU*m10jTq9TnZ`9Pd>8%0J?sl38+NV&UC>wVO0>a*tW}r7(~5 -zWe@p#hy-j!)!8gm@l(W5@zLTL#%x)3 -z>aBZTwNXt?SJPbiB4HGd+wPX#1idmgdU_lo<q7S`$r)n@w%htUnNH -zmc0P5#u!s3q@OMO8ykm<6i6xt07X}kvkN|6~P -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 -zW6#o$9BZMick+)>)Bd0&pHE2QP&?gp9_Li~w -z49U*e&j$wu&`X1_#aaB;ou8#I5v~(`A>$`TSHT`^-bZKeu?2H -z;IqR)1yoNfE$C!2QQu;TIKYTsOBX(L-H5r$g8BhU;F!v{wZmu>BH)s|bbJBloI~#S -zE%1={5tAuS>aPl?VfJToP7`}Ws485j&uFloGN%VvVo!4-0F#qRF5IS(Yu0A&!h0$! -zqq%EoI5Xb@4-0|tYF22oTpRs2Hum8#KIF1!XwSVRE2RPbS60LD?lpOlFv58p?QfZG -zRLJYt$^)Y`oXiCd^a -zqfmQ-Bnrhw$npU0uVavko}A96Z%@TWoIkSzq&f4GL>1Nbw5L)}q(VXQd))WYOagSe -z=py~W&cfa8BEU2X+_A@a4sRH&Ym5$ySUt4ejAy`5k{efqua_!7pW==jMye{*W$tNZ -zGbJhe_VaArWc>Lx#5S;1oq|N0L?=}i0=KGTD4Dob7&1Tgc?SdZHuMs5IC7o^Yxe6h -z@-x$E>8U#tGw{RMzz^tCFZ05t-PIjX-Ve#0b+LP?@>Xjlyqwe;!Eb0{NMHTS1z+=& -zu#XgjOZ9&m3bU2Zlr`afHOet?0vNg+kw5*G!CHbd-^wY$SyuF^=bJ -zj>{ABGp@RMU@g}P_lKYX>~OyN3U~S5esmb*FPY<-1nSvo3TIf&$GBY?EXJckwQq@R -zBvQ|_qFuz8ZP1Vw4u7l;p|9#SFvC#LFTb@+~_yc -zt(2-1)4}ID(F}t0xM}(RiQNE_vnNWc>?I*5DLiD=m0u2^HwV=vOgVLz5m%kYU^V-H -zdY_V77q(X=fcy(F9 -z_Y1C-uan)H;5TFD@eYUcZi%M&`Q<0$V?*Ro@MYhcImf(w-W;3O0MUi?`1-FLOr|j^ -z!SUW_pUNpWk?7I5{DN9I-vRrNQ|xC@JM0~e72uIt_v(gW#7xh8l6#*st3YccL#A&B -zA=i;a!3G3R0N;4v5l-S))Y0#aaogEhArXRf0-4M5hEGgT3(<|!Y9fJPRUYljZPE#N -zT*s{FicsEgjc#uqvfnW}w>R{NcWR?(!jLg?a`?-`EBvKcnG-tHRh%N9a!q+R3i`us -zCc#oTZW%f-;UjBA^+{z+!0TP~0^bV)3$}KT^&;A%n1OcOrK-zRj%{O7BzAC{uN{)i -zJg59+&NIXj(2FMCGK?Z{p)BJB^MS{*IRV0M>^_owY#`a%t3$SR8l;C$ZW=3bO#o9} -zt$x;s12Bw)F{|ZcFcu{O!;H`>lCv7xqIs_uQIH7HS>I~3zx3nh8E%m(@=_c92PGA89TOP{UdhVHIkY9k7CEof5eW>|J~TJ -z|6gLqnYn+79XFl-89TcEkH(IUVB(Aah#k@XgV?bR{r@R;RQdlIJ97LF#g04c|Has` -zsvD~r|hQNI?Th9tY(YxIJ#M5o-{}GnyghTr#y`>p}v@Q -z{g{ybTS89FOv8bF_Q>IKr@=VlOEqFXLGlZ=RS=GWHw{eYeIy?uok+G(R*=Xs?8ELn -zYkgobFKv`|brQpr?y~L#)nB&XS{82YCAm~I6PykO!Kql<;nm1&6Xy@u9}>ElEcB{h -z!l@FPE{?Uw(NASQxY!Y|ymufDzfjmoyX}zz7D&_IpdA+jmd5K;@jT+5aPm!*r_}lL*h^$H2!)?&php1k#ftzV~ag=jwXiv*Gtw -zPCjdjC0Pc=o?Oi#8ro5=ljhvxW)}t622!i$pUU~$eg_yGjs|pg$fHJ&KjmN>njhYz} -zY+dPhwS{#dGh*AilZuCbwanDHE|+3>lt$PJ3JIasjAFB^c*v2xfg`io@t783?PZ;C -zn#Zt0#m0ncti|S-1ZWI&@GzV_i@6#pdjrRTAN$DwNg{OAip*yEM#?!#85*xKKI^V=6(m -zWsDDU6sUlF?U78q*-3_H!w`BKB)&78=C7B!$CavYhAp9)<~_JgbejQcyzk!tbiReB -zUIag1$13gPl?jA<+yG49ZNRLT3th#z?}-cI3@o`|MFto*Ns^kn11+wkeQ1nBg&lG& -zRP8po6t#_Hef;V`V+-a|I69ypE~1M?3|V2>+}~>M<@2)0??Ld>H^f)T?JA5EGP_*h -z+`W2EquRsgtVKfsIQFIj;$+*~t8s48ExNfsYL7!&m0)gLvFjNNO9iWX=En*FNZc%5 -zs+Zw`xSkzyc_(;j&uHI2;^bql*yC*CG6APa=j+ZQ$_9iQ-4-iUV?xt|^55sE87}6U -zp8R$&JFT<2S7H~K8hi0K))>Txe(;Gkim?A1tg&9x-s1nl8k7FU8ukAjtg$!y-(rpV -ze`Ae&V(*H7VT}s^#2S-5MwJX`76LXOY5$2eE_oZM*kk^IH9Gvp8Z-ZiHJW{5jST-5 -zYmEAhHG;tT-z@z{SmPc1A6O&LpIBqY|BW@ik^F%*Hh{Bx{Dn1cb#J>wwETrN#wer^ -z6(;?SHSYd}HO7Vgr&!|_%s;Tk0>Ix`4#u~wXV~v=9V~wSz|3$1(e&bK9QRX++2t}I% -z^as|6^f%V{?Kjql|0mW6{x4W#obW5~Ee;gULYuiho2ls|k?e@1S`ySs=KIXg9r(s< -z89+L6TYH90qRi6+<)(I+cak)qVlc0*ygmv2jgIhdrrfdg7%ynx=@36-U&V(X7u@SI -zJ$E5l;Q-L<+OHVaCZ1h{Wi+?IO{H#0HB#j+;6m`@BSEjeunr5{>8{jDxp8JKt&pMu -zwv&||@uZ&k)S|}tk>BX|c1gxLF$lr|1%I!f_n=Ne0S&=|UUbAGx%Em@)}|T}7#56r -zd!)CGUyaj`d7;*+a?JMNIZuBAWvh1GlTjlGzkNkEkv~tNo{nLmAbaTj1-&w$` -zDAMALZnI_$S>4?|6X|U$bEQ8{YwtiMtkBW1lx4yd*Z`7hVJuxSl3=5Oy;yBI-s>H< -ze@?#@9nRD?rv;({=t1IePqV>nBUj$rA<(d2!$-PD$}9lB)cdNO1aWvB3ebp?lG@05 -z53E*JgPC|XZ!J(EqU|2{Ive3xGCDj{Z-87W;Cx5pO%l}4UD0K7zkL`GPgTkID@3`&RA*w$+-z^Z_tGvgmO`Hx -z;|?8aoOFdVUkXr2x4FMv?3$kkbwKIn`nTPj1KSuc)hN*RM@YEADX@z^wgr -z9&pe(>tE|<;8vEWE^F-ad@^Yg2bF%rPCx-jv!)jA~%kb-k%=-x7sy2ij|?QOOC -zQ%F9qsue~)?4;gSetA!&ETEUDb<>V`s7i-?NF0N#gG8AY@y*txsludy3NJ%aaT;8N -z*v~YPl8>v}D}zftGb#X>a<3vA6s?Tf&?hOVJ)icrB3FXgKc6Qg0~KdeQCbT-E8yUB -z!4xXnb#=6?hKc8`WL|@-lIcf(J@!HG83iXJe$uZUR2pyjc^AklLWLi#x@bYb%{XM% -z^{H!AJRzVS1vSEhu6uCI)7np*NBDxtBPotMSNU#J%*1}7oXh~j6FU!Ipp*C8&kl9V -zLrb4XVMPs042Se?w(0e8fUlP!4r{hJaEcAsfluHzizG>5z^~FyDj$;BVRi# -zAM$rhXW5`QFZ=rPYCxO>4fLFaku1U>&vF(LY75J3?;(<*KSM8-q5kTxGT;hCbmsEkgi|^j*HEe@A -ze_8wHPo)G0gr&c07j0tGMI6Qq+U(~Sa+M=kc{?)29Rt(E3UG6bEM#HosFV2sFC3XG -z_0);!JM$A}7JC2udl!3j53mcU$kKam1jryG-A7|`@TFR3{NAp^ -zgqsmh*1#bev+<`SO2E}*4+RxTa955;qXPH-OS8~i;5g(X0W5{UDqP$bmge#W=U9@2 -zd-;mke!$W&3)R`TELJrnAaj9o#u}@;T=g(?0=zK=(Z9!M3uyOfyAqw7c{HRO8T -zCY2&y0mk4=pasF}MeG@IGJqo?`W>~}pxo>#v62|_GnwQ1g?m7NZAL@rRrv15&ph!5 -zarzgn`Cn<&to$P7n5ViBRAAe01rxgomHsqe5P+J~vRf?N0aV5nDzANBnITe*P>4lW -zNO6r8e@)^6)kXS$qbZ)@sVIJlgg2k?^An$$RZdgW%-@dj#H+R4s5`Fb0Q<#3wtZ!R -z#ySDb2@t~3I_cmp&zzl2K2Xf^QPm}GPgtdI;l#0XLJei&q|io>x2*A6j*72xLIl{n -zQAew5l?i4_GF}YYcfW{HhEhFX6Z#+ygLY>!jH_;;Z7={$L$TIzND~&m!TkZT@v{(^ -zJa(CSs_TFi&SYis0%{G~&@2F_m0o|XzZY -z74Z`lQoZJ$=m$GmVeeJFzru+uL_#NJvoDgNsMiR|BQq9n -z5TB+Tv)D7%AP?>qh1?;J#1(#Z6NQ4&9_+k_k&9bs>IJdhuQegH3Ln$60`4odm80}t -zl|;4|2G|N)pa`sr%ce5wv#n~4xCk`@DsXtTnhj)syru5^i0lRK>a@bFFKP_KK(Y(P -zf*iWSVC@GD)5aFSQ<0%z0SzQjD5e|-bdU2vte&^-XvBYs$U9{E?33=H_3%XJZ;#;ES|5MHTI4HQkYM!5AWCD`h8vD3>L3&R`hQ -zW8o6!fITFk!C)`Bo!px$atqZSJD1k3@=kPN{W7RP;R7&Hp}l0pgv=cj%iV<!A%ld{1sIQ#snPLvVaxY>?g|?vX|V$C;9H~HY>WaD3S1Ls<@GI5m_2Vf8)_cT@H8&@RYqGm -zkCiEhKsKNj)7p_wuKQ<;*v|t^?eJzu#wAw~i!3hv;JzV1O5C|YdNl&Vs|c_i_2>v59(sA^rwRUj^(jl_@Q -zrND=0(|#rrppV_04L6h9YQH_vHF<-IiA%J~9nmM?ljbubh;N!T%P}CaZeX?N&E_w1 -zy=e(7oPE4(24s1}JC;ZQI~on^5-j@c^bxoZ-Wrp!8V`y{im?U4BPv9pJ)>ykc=l1M -zPNov5!jVXE2n|90bQEImu9PG+KKlpP$gCn6hWbEr^L&RP23FeZ4nzx}Bf7g4AG5fo -zi(tAp5Jm;z_3)rg{17?8eGNSd7EZEAiD$8OAk~1*+|psW3`Aa9&+4v00fZdebk&n4 -zT~4LoUk-8WRUxgvR3{=j`y-lxNRM9+wftU5f|&3%qkE{E0@@R0jy@Q0h7REX5qn;7 -z`6b{O9uij5-fTmQNS)N95hwo)>B?8PnNokbiCyUkplXM?!g`-|6HPXx;=w -z+ue**YToR0f#g5hP<@y-9@CLVf(Hlqcu6l)Cyge&6Ws0UzslRBZ+itS!f(i4ig%(B -z4}dj62zGzwhvoOSEZXWm91VeQSMnf&Ep17VJV4?>fa6!lg<<)MX-(}d0+oEso$OXNzC|3lq`vu@IOn@AhroH>$WOnL; -zS*_eTjD}dIer$IYeU2ytd{@eGq42CUFL0PrsMxEn#o!Tji_-FGM3&=3&d^2OiaK`YvnrJnzY~1Zrj7$`IbOiC -zxjue;k(4-ask_4@O*3GPk)RSNj^mDgl>=}b?6gOf@1EhZ&7rrlL$;r}2)&^kP#)u-3F|19)Sq(A*7~wsebINA`)l8`PGMxla0AB$QUhK!3u*P?XDN~-u*a1(v -z`yl05?L!-kLUn-GWlLl@P$^t1U;Th$nzzl;D%ajQIWC+NS}73oqB%eiMpq(1bf%#k -zo4J2-X-KcK&Cgnxu%EPxxWu7DTM#OLJgT8%C!zB|mKm9;r|P2y)>>=KiaRZ7%am0y -z=PlF@s}eH-oWZp<=G9!hv)>n@sT~DJ-u)zvZSJ<8kPqoXZVlp8W>{WESG;{@_w)u6 -zw0P9nU3+Q&;@_*;N42n=BEPGc-xySUSteZH%57KW8@aPJgf-)KKY{Mv!N34Mt6Ahl -zdh6)86Whq;X!6o#$CAY$mt6vk;cwx1We`w!*?-Ill(Ad>1&_pDqAln%0J@z)aBEqAg*&QkJKQwFkYL>9_YH-!hezU;E#7_(yUH1zWRZ5PpP?l -z(!h= -zSP}%-Dik^ksAW?{S1ri^J95rteftG1<{-$4Aapn5T_*=E*}*BUo*rzDmadK;ijw9A -zdsCogAy7$r^b`CTFZx-$@J`Mnm*E(YkUtjpbG1qQ_k_(`>If`9abd@qv~mS`B19dj|A(gQ^O1c&}$-iP!g~D0p?#1c-|kb0fGo; -zZI9#IN2Yso))Dff$G{>-h2E2ibb#aXJK6ba6E~qo&{DpZUR`hjxCa|TF`j2x2i-S^ -zyq+G22+m{zV!4pqV+Df0@y0lXYM(naN$^TBM%IngIf01Xkq5Lf-e6Wvqr$ypIEYiq -ztNW0x44`sM|Mby8TcRyeAQq6@Tx2=5zKd|hFxs{AJDx{An6by}CXJ+WYv+CvYSS=j -zx>Bdy(QEXLyr5Leksq<}uv6Jg^S>TIU16XA&p%kXsYb>ixG%laxR{?g2dN_5>4rAUR>@m>C -zAxtH;CZN^C)zq%p0dGN;4r91&&UpgEwRBH^UucIJALYVd^EQiaN2W2!dKBUYph>}+ -zplw(3B1U3|pF-mzib3(yQJjHAlmID(-Wm2~;va*13i4Q>s8=8X&yCjKXC!8-D>yR= -z)00Kr4)n5R0mJjK_kJKakYDphFihHXD&E9J>;`jvux3A$=!qx4e80G8Aoz> -z?VeV5p(>l~s4ZjwT2LRR -zft250oz_TeDeAV0NRUtHhOW!FP!70A57IC6!l5%AF)^Vj0xur?gaCf%*#3=cL}8m% -z?d)rR!uM;HE>e4~D)OQ!5wNQjzEcgITYmRCtn6bq+{yiBtww`)&oKGVekUV@a9%&% -z2l%eYc)=sB+Cz(20&U=ELJJSt>LkMz%XsL4DA^Ogf8tEO0Czl-68`2>T#Pvg^YzVX -zEKI6S)RK)lX%7a=1mE3S>4{}MTZz964)vw4KS_lB}}kR3Y|Z)s=Qg*`H`dh*%m?u9Vcxe -z2Zdkf8uLaiHXcZX(p^g*qVUzwdX}5MC&CU^4|cL@GGkr7S#>vGx~Uvr8yzK|-xM -zqe+8_EM&k%gQS(<7@7rFmzM?wLo}BG^?$cHM4RA%mgTm^uQKjW=h@`ha99)!DuSsq -z$`#BAb$M#q0V8u>c2D`7gZ=F#UgS+ShI3X3Qz4;!CCXvC-W+hAgx`R~DdJXGj=g$1 -zer*_4I8dTrNRLYp5K9lcsFO5JAN>h@H}%T}C3M5oHoice@d7RNL6T52tNwELlyUw{ -zyV(StqY`2o)uh6;%xlq97+DM_2vR|`koR?=J7Cr&sojd6{+$fRGuElKFN9baDGvZ!P>2z3NR*b8`ih7?=2ZN -z5H$lc{dV0?dw8}q!HtE~VnHpN)zJ`Fb}+lW&(zOFCc5)W_zV1?gFcsLXxime&o>ln -zb;4@lMApe=a##Qbm~d7snCg7j!Kgm%HZ8R$mAXduyy~e_I1Dtb*O+mLh^kLw@m#nb -zDXJqe$I-1|s662bZ4G|=l)4^VHWrdYzARweeTBY^>gjb{%P;Bh6J69GXo0^yYcPr9 -z_6C}ehB5-0RGe6P8k~ze2OQ3+_t%5IB?BDRsvA<;gVY)3BoGXNd(mMB4_ON0s5&e= -z5ojWxjOzKQSxCkkNYtzlHg(^wbU;=N?qsmV2r0F-Iz8CCGnk8)P+o+d@>SwFU93m2 -z30u>>gknu#eQu9a^Pr+y?zP73mB|(h9ZVPjEY_pkRwfRgTI@+9wWz56*K|%Yp&1THadfbkVykr -zFJT&V-t_qmHB>>aq|=;^DC|2}ZMWYqsMS=Yd~~x>G`wh~J1pu~_?Ip`;qy1Tp*;~^ -z9vNB9uzJ$-aBvcsJzJt8FKiTo!ZAVL78CaJA1s+_bkG5FRQM2=s=GZz_w)B9(!Y3- -z$&>H$b*2)GEgfjO6ingn<$cAD?_UxH_>P5V` -z#jEv~l?M~(!7egg;F~F+mZp~204UgBoQfM3YDcr<{M5_2NApF<1y_j2xQy@iRNITX24(;K?TQ+&$!{=hylVnTQZy^q(4TGmoAT8PC?-R -zhFG8!uL1($;Am&v<fo%bUWLFtt;t>0cXqlm?Z-VT0k>T`Wv{_3%rd>9|3&*i%EdH+oxKRNje_nqb?p+He>tq$=b|MNNfFWoTbYZusO_4G(wc -ziv%5GhsM&#&|Ly_w|C0+RZfJ`2?M*#uQq*tF@wjFe6p_a_+hi^mK~`d{a^UmM?&X3 -zRWF&&pWmL}?!3=f=x$W6b(I`^L&Lvr5bJUFhe0cyJEy;AXZe}Z=ZPQXG!Qmkg>8XN -zBHwJmQcA;`;f_a9vBjR*mw@noVu}xB&~@JOMKH~&s(5tU%^Y$K<<$&7=<4Xc7V%2U -zZpzC6T -zzoxDO2CQdLmy*^$8byAoXuSp&+%e~zzI2<&d17$c -zh{{*Pg{j_4`8qu76X4HgCE<~SSC}~p25{uqgk)xAW40F@H>Yt0nMmX?AJ<*WMhyOq -zOBovSCr`#P{oDC7p^42*o+e#Pm(xx;bV=s{G}upcc+~!ghbw(4=Xl#DdH$ZFX^7)* -zeT845e0?gUlUse5KWjt>sQo@vA^KXUhCUIt=o{yhiG}2}>@n^&-yIIP^A`8w5<~7V -z#ks5j>B|!M%9WogZjWXJ51*(aKe&EWtg?z#SsZe813)DM8^!+zqd;80P+exlvO#4L -zy>P{+63NI?)#t`>q)g*3*X1c|Z{Dq@kkcldY(J>QjaPcR57Ej~l+H=`&0+-Mw=v>1 -zxQl1&dJJWXUQQcjxm=`FJ`h!=ctV-TqAtm7*(R#e$5w)my5a_DQ54VT%x$^^V{T)q -zDL0V2uqNo6PE~=cgoE;+a%b&XbD-30oklgP-`nOPQzT~MW|Unp?d+pD6GVGlE@7B; -z0IH2y$h13v#4<(;v4kv+lo{yH@55=d -zo#M1BujM`Y5To?+}02GU?tf98jh}c1j -zr&fF)j#YoUP){URFJSit5<<52Vx@LgHB>js1E|`fE6}Q%X^_N+ya5L7mjw6EzNU$7 -zDWuQ>mA`Ki7+v-Tg4$*PfBwZ(n9wZimW)~9t -zF3keG?v%GfLEhicQ&?8nqOEfn5a0MA*SgJIxm0-~6@T>6CRF#<(=?7CR*N6_961{L<#xm>AgU1o6H&G#~vQ!YS)wHcvk49uxZyG@;t6{s(l~ -z&nKv(@xYl2`w8-_7F-V#F#EDTjQ`}%Tp{7ImhvRB>C!IQffffL%FA;Cgarr+^=H&J -zOTfE@FDIOkWq`w2oKzD)pjat(eD3qn-R4VCq4+;?vUbA)*Y3xGXApeMOuC?!R-?^u -z0u!TsXh6LI(vPfHxDl_qq~R5t4e+zUCFOuQq$Xx1_e&D1jCBxK8RyL@<-y#x=q{R5 -z6w?R_+mm1&e^^pT%Re4-?kUUzP-w8)DEE?!iF{&m^iUJ8LO-a7qhT8DSC5v)O -zVr;5SeUgt7H}&NM%Z2F!ft#}Lh8OC^g=vcE3>{20!cXF?B6XXkza_bvErEc{F$@l* -z2}Uzfk5vg=GPFsHmVaqRp{iUxCOgq3l;nxI+mioNXCZW6!RY@ea-Or0_&7jMQFjPJQUHJr4llSy(Vd6~oM`2hTQc7XzH506{n7^@^ha`xWwGZ<>9dw7@h)r@D= -z>Cz)1t4eLpQu5Nj1Q7o*ddzs>Oy2jXEsY}OfD3MSPSNAw)nC9430R8l2`V=Kre#(S -zQ=;VR6%id0$oVmW^FA`T?WCBurja1mU>wAV22}9NLMz)z98O; -zlS{sa%U!~{DP&Ayho087S6oBZC;i2is%}+#iAP`6(=WhOt`W=&`s|0^n>_gDGX`{t -z>pbUyd5}bnl2qgJEDn+ic%C73qw7*XCz4qtOIwib4*)e2=ebSuo(Fb``6vw?4P^bC -zNzj?6UgS|!vRFe}mkU?+xD3IZ&dz{LmFk=rO{cdS3JuC64G%4_~l7oLQ2xWnF*4yCxZ -zY#Ou=7#+`Ius7|;(5IQ%hKz$!O%0b$-YJhezm2ZF1z28cMbvZLW($uQpk31I<;v^3 -z#QU?Y@C{MKxqOj0CQy7BsSlODkyMAyZMT -zj!j6_c!Y{AHP4mqj|(R_hxwS^7!KS=xWEODG5_GF*#NjY@R5LdToF -zWhYCGj)A2Bqa-^jUBa^_JLHJucAkJF)^x@}X9Xbe-+yez_~kKHKZE)b{@ayq0ii=X -z^(ctqE6SWjgY&ws>!2A|2I6c73Ua21av7|u%7@M}Vb!2mplIj^r--}T$!LkznZZ2j -zvz<76Nu2HWQzrvqC1yC14rI)WobvQC?J&1;#-u1NH_rkBgfKZ{^s-drKI%@4tEf?V -z(t4zyNiVsa+-)k;PA%TY+Cp$HJH!bJrh)qW%5+M;K7tU$gFUe>=Cs~tq)aUs74%*M -z&TW5i&%O!Ed02w(SO7 -zrJr)~_{iNnWD;kD#MIpQ&p*Ult>xe}g#`?T(+xIe5K%B6GS>#_xR3yu=|Wc*n1nBX -zr`sv%!9uJ-6_J1KD?`#!UQ-hccUu=%Nv3s1P?C6SfKW_uzQ>jNP_EO=@uB3S`qrxV -z2{77I&loR~eWP5wHJe<4rKsM^bJO?380Y{$q#{3$>1{j=>|>`N1=B`$x$>M8jhGz0 -zjwHp(Gz8>(o^a{?81C~WePLEvNyOfFw4W{06u;Zb-^sv4)JD@a`)P&rZX|&Y%xNu= -zZR7s*C|!)!)L)a|SGK5RiK0O^(XmRn*P+WOwPtEzqvXHU0( -zsxK=c^}wvA?#`or)Fg?aO$2_v1_>aDEte}X5W)A{eyo4TX!DF$Tmu&ihTo9m0dUZb -zb143vB|GB5F$iy;+}Ym&e}Mf)sRgIwApw*T37q%(}USd -z3Pv6W*^wz=aF+$1d2W-B^O(kcpG?5oBIBz!^|u?k3K98LG3;@a-OZ+PPs3hIGRpVb -zb&mJ!n@tE!{;dez{Ead!TpIkjn!Hq)BH(T05@gCC1fAnC`U@(hf3hfFSB@obtg7{t -zmGB3NOeeP`Q(}2Dh|N*bXF?Dm1D;4JTj6=2$_~W`OA&23o=23Vi^WB`(oax7+<;xR -zk|FX+&_H`%#0$I?YE5D2$2vEo{H>SVnEjzaa?GwbpeXj`b^?WWTw7hAU5}eB2p&@y<2I+pFd+dMjY#tX0L8cQr#%rIU`{DuRs75D!mIDaIu~Oi|0HIZp -zMs$f1W;+dRVp8A*H~-dCt%P)5Nxb>UwuVDvz`r|2li||o4=~i2m1V350-1|7a+JOq -zb49X)F;w0C9<#!d5P9|1{XO)8Ay^b~7T)=|_^;|XK9g!Zt?Qh1io^C>(h>g4Bud_U -zgA(d=ASW*r)JTlPl{*WAZP_Q|%zBQuPeYf%lVa5Kv{aFKBHs~2BP99N5JQ(`yVui& -z;;a`r)n*ZIh;}zz{hWW>bpmS~sFQRdO(V_5fpbwE(ptR*xqcanvSdN-+`_KuXWBSd -zh|*UsX^#Y^e58R|=#Uc~tn@{M?1_nlxA9c$4MYzlh;bpVo#ND^r)Z=uoiA)M0>sxHFx)2kEr{%bXuWOWiB3e1ZaIzA%8e#974ktz{frUAM24LgC;h+9=n1LES -zqcSC#U{j3}1rm(2%mfYM{yW4AIH-HdbxSlDX5bl`o;V_fTmR)44hjE3L38mbAMyuc -zK&C#0WO4AAfM0=}BLu+f6$X9J-A5{kF!CA5u-wO#5B;ie5A8md$lX^MPHkgFH2e@> -z+moz2r}RetVRKGgJr9|@#g=0bB{hA+N1%gkg)@F}Srp?THKHz}O -zqd^e2A)eKRzO2wdLxY8%AkLpdBvgp4z)*|qCDC=eV~F(jtHeWKXTTi6ir~0VN}$4` -z^e|?x5`-RaZU<3;!`VVDHJfkpF9uR1Jd|VYCXt;gW%?q5Ln?gvaW-}5??5QauRI4q -zGqy!p0@DK&at(QP+@Qqc$Ist?`s3K2nUr4f%^Okst5MKNlL`OqW5xc4hB_B3`g$8^ -zdOBQRFBOeI3*QoKbX77OBs`HohZV!HLR-?2b}PH4*1>7#MBcbCZSH*91DLwr4!|X- -zK2`|Bm;Y%MOr%y6f#rUzGIdo*X&T-8v|Ruy7tW?7s+EY -z=UO>Hf?S{~nIs&fDEoMdFZZ%yr@Yd2M8hhpb8Fskcc+j(i%!b-J}hLJJG2Aka}F#T -zUBARssRHdMxK>6aTxEtX!NbL- -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 -zQ`~QkD8my%|D8)NUTKF*dbkM%r -z(oV8_9Fj7*jZl#CNw-oSb -zuI$_9#=uQ6(I|+*6!l@KO!hqoJVV^^!IV%j(sPC$b}?)LdB{eUE)oJqKFt}R4(sPi -z*G4LFvS^yCdpNa>@w+*v2|5x$_pTOLDl -ztf?{_F*ax)nc|Q7AMPh393mj<4%t57=`Bo^UAtq{UP|+HeQcRd?7zs!aci=mHB{jb -zTW%d1V35**C(t&}Oe=CyeA>b2<%n_3Oy1CuO*0-w`R3w{Dk<|sf3 -z#Sdx|PceZjZgo)&Cvzwb+f6R4Dpo^zJ?NWIc7%Ok?pjsbnGvc0s2)*8J^lX?&DnYGh7CFB?|p{Wb`_~D|m2nr`I -zGNDFhM%f+KL3@87Z$iaf9f)*YyjeZusxscMw{F{~c&SqL?`WtmmFTK-ZFYOGc{ -zpT`FwifFcY_z1_Rrtt+H_c1d~l?q*aW>gM4f~UT=mdL=+Ulg -z%pE!$Esy0+yQt7oj&e+=X%I*!mOGF&Ta)p*KFu0=ooH|ZO+syXM=`F|xA-1e-7J{U -zbLbe?buk?=Nf))sblCCMYsp8P&p5tzL}>*GwRY&N1!|t{Ysa7vFK#uvkfQ+36BD}^ -zUoGTAY#kf|P+oMPUXYs#lFV(K5xxd)UEi*Y1YPloMY&Vv5WvU*Pb`h83HreYtZMo= -zHh7fx=rIMVqHD`y#xUeAFEzLvSAP-6Uili|CR+Ph=nN#U25&vdp`VSUgWPZ}Nd0II -zd=tB-9L!r-R7cit2pJZtfShErS=QRbLEY+AMtF8iZ?bg)Bz~vgP%~cI%RV@&@i4_e -zYyZ^#8~uPhVw99VAiEH+u^g$_nXaX&i-bhTFM -zM7(se+Z+A)5$CRX&N%2}nnFUFgCPb-QZu(eJyk@6HAW&Cqh=;Aqh9MZ2`t -zv5Y}z2!dm3;hq}DCZ2Nbq`X~s_3D~{Lyz|pNBSj3n__N|{|4uUlDUckxsH6ysAY(C -z97JaP>j8oTkutAB4WHC{a)VM#KWJlKx+>*)JEv$2b&iT&92`A=hyA$binP!xB{XsC -z@HWzzEm?6*sQ}}OS?5v|k$~Q;DO%*%SO9aJ8T89Bo&!Cr$EUWvL@Q9m$pFISS`(0y -zN7B9lgp0KT10yC>oT4+)+dpK@OElL&85Qr2h9KV#)8+DFcmXMatPqJnbDKzH$RCiq -z1GV*g^hlHs&$ZN3C5)bjFB{1eM~hb*kPtJx)PpUqjlPD9VQ1)xp!21gP9`O@J~iDRt3cbGEM#*B|&CW@O$Rh&F9^$dWs(B)xe_gf)OC_fBLs -zUYJ-~I^;qC8*-Y6jvpw#kk)4Tckaa44bg&aA)fbF`XPh!#tLVG1Pz%4h6;XKW0+LG -zZnc_03At6J~VXTp>+E^A~e$;hLE{a=jM-kibqpCfv0j!4s}lp@aCQ*4t>Y -zA#XAu1Jyfo4}byM?VDoQ-;#o|;9?n8YFqBIdhoARCFE0dEp&VW(V`*P=yGqqUg0AJ40)eCC;^{EPC+1$omATag~-9$i3AcN7_keZ9WPN0Y3M7?2M -z&_2RveJSibCtRrx%}D5uVy|X&DZn#5V<4MH=ZSrlD61>ge~xcWS+%xWqZB={87@S< -z5+J8d#vmB)08w$D8$~{HTWE=e=ZK2jgP{%Jd?p73=KdZQs>GWUru}LO36RBrBfWOL -zgHHp|K(n*TB9w7=b-(3_Re0)KgEb>@8b-3F8v-Ejbo3+1<(;~GuzQP4`>m6F7>DLC -zXAi(8?+yJFXojKh@!*T&51*AkbV*^Upw?%64}au^cXe|% -z88E^ZnpAZP{QRlaBa9E<-a{up?Ta~n@w*p)WNpeG&;I$J4+l~JRr|TzC8%r2@I`y~ -zNPNf=jhmO}uM!N7Qr%fokZM1CsnSa_t&NwI1$_WbAquxt`*W1Pc#xmeDoA;J35?B> -zCF)}2*l5fE8uXc;=s)Ms&4;J!+jh+eRq}~14+nZ9m8=$uIgz_65yK1fr7B&%LXQg# -z@YmCAz%nQ|l)9D0ISd8Pou%<{2Ry-X7-fru+~&prP72CsdWAMVoX2S4*4@Qy-t^J@ -z?VH!HK^DAOUEEw=TwSd`ypnyC)G^75Gv~*2Pc*uYWqP=@g_n?CKFDR(bjRT2{6^$M -zr%=Eu0(=4azW$f5&JKrCpdTZk(Dr+J2CHvR()O&0txLCh?`Tdzcg{hWUq84qugj1g{ -zlq0kE$$zz|m1+@sWbpFhPecc4jYN%)wnT?Zq7dI(6+DXg28F#t)MMywDN5uS4pJz2 -zkcvL`g7gr3Oi{C46HlYKZMqN<`ksUO_7{>)mVjKX$?CYEBn9%B+j&s7I`al&OOsu7 -zdA#U}uda?4UHe6|@puuvo~X2-N=WE~+|4KhZ4tXOd`fw_2>RLFDCb}Bc9OPMg^}vMD*xhiKPe4W#g%@^h5{cHH;O;RpX&UQJZ?ucQl8Tbq#9$t!19n -z4eyjh12V{&+lvM~S!1b3B6MJn`o?;&gj9-9nyi4@ouh?l)u5=`H=F|N=4WKfh&N7K -z6O~TcFzS4hy#AmYg08u4&x?q9LojnA7etw!&)4=mKF-S0j4T$N&xXYXCEC -zm5=Y#8?+!L3!n%*P6gr=^}ms{N3 -zAOzwMjVVjgi^*lBDlQdUK%LqXH|M$b5O!F1>gM#YepIUO1A+0H+t@H)mVXLDHAJ(Wz(xKlDR;y~2J3GK_tJDiHz>lh}w~jf@fkpA^MwO@aFd$>C -zqe}9+TG6jKl9#GBwV|{jx}~+$Bg~b?>acyt3tRW{LKoJTS1L1#uhj&|j1O@*6|K@L -z!T8YvwG&#CcGyPB4bNd4E5ZD*m5p7AYu$Fo9yHWC4YjD#V=L4h@S)l=*M%IgwO$hC -zS-x{j328Aejp_>LsOMHFMaF@IN(&zKAqtCCjZ#>x+%%R>x!*YP^`cYqA93qivvuv-c -zZM|I^wCA1bXj{c*U4T%babTe*>z_Whc5<*F1;#VdDAlpTPAH;>J7woP -zIy_)>YqW6zfH;G}efq|J8gH+z%#T~UGp=p96m|bd7r(=(l3Z=sCNK21-tP1;agk6p -zsrNKjMkE-((LfPV8L)DzBYYhCMn&AzGob(}gG&COd^~C!?n7J!SSN;IQP<>#)ody> -zP~Tcgj6PX`KP5-UJvpEx-y??#NWL09oD_fl@?X!$w351L)O8{rm*iXh9=MjtQmbNs -zCjL~zI?+)RC$PcM--L3(r0C@Ge2LFnQT(Kn4UZUK{>7!D+e5lSs)~c35%ELVW{|-~ -z6&6t&<}LcQp9O-Amu?C_{m_h>*atmvIqsPSJ|bd%z`>WH=+va2eT0q -zvx{p#FAe%s*cVJM586$F@&Fup@29Jv&n6gGD*SXC)K3EN=RrE&`)L-mFN69`kj{en -z=0UpL1#1^8@oj-xBi@pSgdahy5X|8aW2O`VbD?jlL1-np;Q8ASgQ)?LRh=dREL(QCQ~*%KxOTL3cpKqXO2G#jJgCZ -z^c3kdbL-*D%M|6X3E2zdEiduyK1hp$;3t>uc8&@eH9&OL#3#oBv--A9JMCqh`Bp+6Iy?Y-VJy=DuDx?v#R8q -zw(G*e@6aq`UZNgBB;QY$CZ;q+Peh_=Oz~%0M-k@ZSS}}X=URQtVVRZooINsi0fjL0 -zHP}CV?6vvI;RkB0*6(Q!Kj5t*DnAt?_d`|p8xTb!YG|U}|8aA&Yk-YIM{i5Xm>ljd -z_&yU#SSa{oU+73BqydZd01oPnSc#9PR0f5ak6B~P-jtHzs>48lP4ae|%Qvbs;^s)D -zY!$+u)UO_TP+(_b7A2Z1pkW>4n9GR;U=_UwCKP+0e2W&DEj769fZc=tj+s1kl-_G; -z&fHz9OMEp|bm*t}So9{);;hw1&2gKuQUccwNKLk;tf*tO=0zWXN^65wAomY})`k3F -zE2l$7Z;ezCSy`>GZSz15g6vb}A#N(R@%&(~L{ -zua>MqPi8JWQ8d8^FAVwKshh=vf3pZ!36jf0B{-USEsD*7h!@#xY4K-#J$jfJI7Mbd -z6Du;;@{(aON)JwwbzTx!el%THaif60e_*(QU|7I-(= -za`Gp4v>^nJn>momAFH`kiUec?->IJ>xx2l%eS7gaz4!h)x%(Wg%OLmi^7^%NqPrK> -zV8& -zl;J41xlX_6XQZOXZSb)T32YQt#FmLUn$=(yaBa?&`}qFt%qJBypEk^V$}#iFj(eHk -zJY@x-Fzd|Fmf7>&z7bE4uM^v|f@dtYcYg1aFOQUvNcJV&)VxoEGIcQy*@IbLJJYSFE+ -zzPmJLoq8i%KNfT1%bH9Z)e=i$sdW3-TDQ~9(7k&5J$X!9QA^ocRO$7f;Z -z4gsA$Hhx%(z0lGToZ0xI$vU3=bla)F@)*1!c&1ISo@ZJaNbAZt>->{i{M{eAUBmCJ -z>q*#||Dmic6ax4wHyjq2Lr>=x=pj`5?KLYt`U=s#nSIi?EE%Cok^swEtnJY_t^%Vz -zKRtg)7ll>-gP&ab$$2Tr0qeY~=gz4%w|=s^#||3>2w?$UPjvN~S9f0#+?{M> -zCT`H+ZIwhf$<692xiMhXRUk=kJMRX|tO#VzHHB3LNq9-6OFZN-(rCPB^5$K7ce(n! -zySse-=IRROr@DQ?s>J;K21KeC3VJWl3<04x7>}Wq9{}ycD{>|^!}p{|kl6W##cm5M -z@lxDN6<(_JQqoIxUTW{ABIc#M9-`DsWnM~nsRu9R^&WY>M>{taGe6~3jlIdo-e6*H -zFmdjsyrIP&m|_o1alK%5kP&TzjCdVpv_XbQ!i*x!sDca-jQor>4>Q7E3K?XSEX>#k -z8C96k~g#vG4YPDWqxc$71O81KTI^dZd2M$pJcaLz{U -zpSQODHX9SIM)K@tgVfi@98MRZfQO*d4)d(6@6XuNZxf!+G -z@KMgFuVw_FW(4PEgon*&ULQxjw<8>rqdIZ~c{v)PEJit-FsB>gSU1`Q-Dnow2ow6z -z2>a1YH=|t;k}JsZd-uod?byWoHu2_>cq@^3E1r0*aIY2a(e>2BrqpXC^y#@S61r -zi+|RxJCJ(S)OmLBj+4^XAo -zd+GP?ZJ~<$sQ^$urK`LFR33mUZ}ls00FC!u;|;v=2Hto;Y`q>@ucl9{T5nR)+wanw -zqV%Yz^cGZl;Fca+?LWz@e{)!j8%tdk%Lr!9d$vBB2UdBlbadS>$h?8>?L%f`m7~LiLd87EQ1r2c+I5&iz=B#tOze-cM@#z`FUGEU-%n{yIJoSc(5 -z;^myg5jW=~j;Pd09C1=7am1uf;)s(vi6crJp;!7RnZ#23lT4yBPBMv?ags^goRduA -zc4zf-= -z-$QYH6DP?kWpCM4auKcAGkPdqt=?R$&VKje3mvuDb4DEL%n$Zyy$WMcO_dxDCUco4 -z%R(-TcVGPR?wfD_?ecRYRGA9Y%8}X^LA>*Yi`I1G=a_b70J8X-l_9>r6 -z)1Q)0HeN4m&a!#;{)_wn`0qdepS$f;Psb`p(`_dupyFaDOXnlVv5vg8>u>)f3;^e6 -zFYk9ncX$53;7@;dzG#6qlIJ-8^6%$07O~D^;wQ9c0R7?oLjy?jK5-(cP1O%GgKdD( -z`Y0+jjZ9Szs;uiHg}*zqtx_C_@(}|oczMvcsMda7%30U9JfXSuf{68MNE -z^Ppt$Am_4cIVA@(fmw0Eq&&ZSsYdWc{rGLp -zl6pJwvFvsQhnnd4KZJ{kE5fVJ&)>3?x4KKe1fzy+_}mF5If6>Vt5{$xkGbSA#qscp -z)x6&)Q|(UYQVhS2mrj{RBbe9Iumo_yzWh$MF;qoT2M};~>ymAjWnJ+d#!w^>`OYS7 -zi-#W|T?{=OD9O|o95osD?S?;JlON81u|}V3@|KMKXsbb6Q=dOI)2YuVap1$~UV2z64IgA_et`WJp!qT3CP&r(sbD&|fOg$f&z;n_dau~tLcjIq*w*&bMo1ooHfL!DjF5wCJ=ExCKC -zjt8K_zgVZAbuh7}DR_sh%>58K>z4!N`(*y*FW=4oj0;-)5u}QU#p`JXW1H%BrPHuz -zSBs-3tc*i$1yQPNStZ5j+_(K`hU4z#dmY(}V`x2$vHUk7Z_VB1_3HKQX1&L+YUQWNZ;TEcrS{Dm<^ -ziv};(hEaKwKe#<(%(Ru9*R00S#M#yv!UKyZhVgt|L;I>X$*Lr(AN8qaQW(+vl^d!u -zj7aT)UH`Qr00@n4Iq@*V&$>NyoJ7uUD1VXF^azW{n$$r=Pe6FIA;xhoyaP*027 -z?;LSEm`>8iYy6jKR>PgrZIa&JUSGu*SJ&68+t-)RIHl{0H*auCe)m?3Vt6N;}V0+e|q(9=|w1=sawV&JU}|mHxStV`u8ssMgO3EB`vP&K -z%R#2d@)uuM@xn*CRdmJQzP`D+d9%9VH*c<=5$RrE-CW(kjQ$fgkLVEDUZ}AGgg^8R -z@YHu*+jFx}Y5FKO3tqQ-r0+$c^aDieFiI$jd~=MtjzKJWcc6|JQPIy^rlL$|oUe -z>blB5;@qJ@*!dX#T@4bbEnV4{hqzMXmMFPUbX^+q$6oA#@l@nHj{7ZV7&DmC+j^UG -zmeB90-|tb&tNP2iWGWOrwhSrt>tm1cg7MdF#xm80Sc|;g((ig7u{Hy^VhSxCS`HLe -z)-;f{c!2-mse^H9Tb3|2h`dkJrj}}iK<(0kWor1;WbuesIBCl=VB_ -zZK(Ao&M=fP749mUFIvICevnxY`(4ksR^7m?i!N88rS%*VUDTx=${?}CJIsjjBIzqV -z(;8PccKAmZJ8!$qY^5|JS?bkKLAa#H>XjBO!O)lAa%Nydj@#D}G(eb5 -z!O>X>!T{7(_{2LV+gSAv)l>EnrjFk=8X{GsVBQJdmTawoOjU+eg!w>^X;;*l>Tq3m -zY~3p`ahCPGPGQBGT%#0#3VCguE1-15Qla6|OV-ti-d%_X#LR|MzyZh-U|2D|5>@}0 -z3mq!90U`t&PXb;h^;T^Q$av6eh0|{9LSPluR9^yQt$hwqQJ`L1(dkmQ2N)q1(o-Io -zKVSy#;<(V8y5@^YR1b`zvJX>9>N?R?3I=ShrYvX_RI*1HL4hp+30v>*`tN}ibyEo) -z-@Whb)&%Ce$LQ3DwC^Idx!fTiD*o6@KpeeeKsL%o)XwLKV8x9ZCaSi8m -zomd%j+)j+jJ%7i=?twhjseeLGENS0L4xCbUY|eC~PkhJPBP|A}|F}ZP4ouV-_=5>j -zU>Sx9V7VN`)ZVL)0LtevrV%GO_OZ)_Ol)0;Etwipz^6>0w8ywibl`C^6G$+@+DwDa -z<#ncz$ud6^o4kPS10Br){M|8Rby%i}g~K3EOwHk# -zpGKQW&^kQz1fNo;U0sPIxa6_m6RSPu$tU)V$D~gl5!rEG!sY3oe<5gT$oSV%a8huUNF_^-bHm#NE>_#(MxaTL9YuV3HB -z$unM_+`PWJ#v8l$iF^_5UeEyS?Fm3K6T}!TvmD65Qr}38uCe@TA6^AA_0jqtUg54Z -zGB+7u%}G3r^%dGsQP&xsP)(NuRThmz;}=p9+}@(vMe>|=A1MO>!Sc)16(vAo>vC4F -zu5a)?R+aU&NP5k(M3f}E&eWR;!W1G0>6@WZdjH}6l?U5^5t|0~I -zq1G28*nnxN`_3c|#V&-DRY`}<_j}bE$BW6BE%tDNqIT$f>F=FOm#LUNtnZbyegAp?i -zBW7cam^m0RGZ-=RF#_$_L~?%j@*CE!dH0n-`?V96oUmjXOTMK$g}=bSPH1vMlL<6g -zlo`ULZniuFUvKG* -zCUnTb;ZP%T3DN*GJGLkFTkt`M6OCAf0ui!a^A;~{RL1d|F~_GDPq!471|R>Ss=I%3 -z>;L}Dh1<~BC>!QW&%1(rv>4aV_T)Dt7Qw#uW^N6gTfV_}Vu&yz`Tp!D@8{#2$&Mp9 -zhJK+gJQ`*==gD*McQ3w1EgaDqrG~c2g{Xf-W}K+|QMOA2 -zkTfDF=-q>D*uLvq&A+m;&-w}pA*IvT!-s3u>f8PuuSCo;Qh9MHOiNu~&Z&B#zli%X -z?_04`H=k66udBMKA4ILWWEe8g3K)Z8v8hE}HU@~Dm)f-fTog#jE??#x$aIZ#?(YBw -za*odq0!U1P;I}{5P$->vF7O+kU9g6p-2EG!mOJcOFzlH->{&4EnKSH}9rkQ`*t2lh -zv(c~txdcZ0XW_7C-mquhu8$6<+n|685n -zF@_?XK{#lyOb^wum;m%mT`4BVElE5D9zF0ZcAH`mwk&0Cf}ude*!;+Ayf -z4Rq^2GP6V -zQx8gRL7Eh@+=+&g1&e!_sA}^O;J9X0($?yrIW)WzUD|iXm~JbPcg)&@WD&~^O-w`! -zQb-N*8Y`^TW7{<7Ee^(#lz@?4M^3g>4<*QmN>9g&hPR?lM63o2z}%=`WIX_1(CrZV -zA5)*|uXtQnbqSMVSoF|$tgRjdy7&T7Gpq5#tK^~QS*>PWw7U+3*P?@V0cAUuXbT4e -zK;Vl~3tE64T36tE7F7X&%gCldL8YznqMb}%RPzsD(^t!eidDefQ+!xD!77o#TUt4If^)?B0{6s3*kuJ4TGrgY&+N -zT3Geq(fP&O^v#>A+Z%Rq!LFj{IelteU9PU+P%|BCcN(=$66M;W(N(vEdBJ+S#?|I5 -zL(|u$*RL`Z5HJg^P_&&oL$fKh)c7<%(Ju$gQ;xwZRT)lxO7E**qIajQnQCk1wKW^s -znz?PwbX&8bttm%S4TBx#&936zwryfLh=W)); -z#@HK6|^w(pLGa={9#jz@p~v -z^89mk;c@rm9{BX(HxT_?_D;#Sd@V_GnoFVV4K;Ma4y -zcjwTjZ&(uNwTQX=^p7+A_wLF1z)vjB;eW$-)~0!)=8xAJF$Bjd`Yc0{ESo+mgv?P} -zlA%!KU$B2FYG*>0cpZSA^M^#V`{_u3WMoat0kIcPKjZ!d5Za$6u*mkZ^3!KFu_NVR -z!~P2oT3ZjvMc+oOnyc$T90LIP^7i)i)x~PH)X;s9Pu9M=xw&3lUM#81RE9m03RZP< -zbfucL4BxfLMOM@iD;81~i|GWS8>f+xval+nwyN|!j<7L)# -Y_pD0p)linyEF$Fp2Vv|m_Qne&09~=_f-cf@<6ij|pPPHK{owF*BP0s>fs +z)D!^N)Wg`+!Nt_W(AzrNMAh}pWlrQ-iZ+&H +zYFATpQH!v4XeSW>NdOIy1S^vu5^D7Km6sf!0HDcSY&C{uk*Oq)NbjS=bMNhR=FcOW +zG*zyB?zi@GraAm&$KUTU*qoo%w2RgE=c9QqwSWEX&+qN9oSwhO=QlfD=nhY{ag4e@ +zIajgk<9lOhXXxpR`}^+T1NZjN-jw>|qq$wR^lc7nr()EtSCRWe#)NxA(^N&7=c`v!N)5%Ltfh@L-=2*~*3?>5Nis3hwd!hyoPQvi +zot=H|I53_erLKN{^4p2IUnkUV?bYDpft>%n2Q}B$qdH?`OEZ?iDfevrCj+I4Nsel*a_q7C3w%Y9^&cjr1~TYIO{*nC+ +z{?A~q$LHaabkjSG4-orlBHsUdNT%GE7TeqU^Y~d?vom!lo8G@~&;Q|y|9h(c^6zQN +zDgC#;z5jPZ-tY0MUH{wd&+Tuk{qHfkUH^CPQvL7sn_c_k^23^tf1Td%Gy3&5eZ>Cn +z{_%}}qgU$Bd(rp7bjN)H->v`Cld!FS-QVi>2fhBO_vhJtYwT3L|8LsowLY@ruZSA2 +z@B5lOc>DYN<6tG7-?#g3W2?P?^geFPh1Tk!BpY><8-v=q9YqKSkFAJR4dqHaSaMm2 +z)xKe!3ZKMJooK3I0FGcxt3|3F+cMsk6l-e@b&EqQGtHZ_opp2HbyqSotd%d#%ibpc +z%zMZ7Czrf-M}H-Qt=1*KlX^ir)-Lur-8-`+cU`>+`tEeIg(&rwYDu)3>TgS8q4Wf+ +z14yBpyS2sW)3$KSX)(s%ykcH^1^=5omLTinK}vDMi783Nr7R)#^5@)^{QltmJ0od( +zwTiP#GivnO6uoa-N+DZ5xpw2aKOk9$5(RPYUtp +zWf0hEixQcv=jIST8AKzS>4Dz{8E<0;{O`!&-kr*`!=HEX+f+-^pvI!>qQ)kD-v_3o@%OFvmFRFP0_l*GBpvP}^YAN5s8t?V`w)EqGHcFI{)3 +zW@|7lv7|5wp!7iEr(L;Q5mTb7if>huM1CunD5n^JMk4RKx=SJ8w^*qkB(13lRg8?Q +za3%&vbh14Ha=h02%Y*>y5ZW`q;3aeK4RB_Z)CM37j0RMVtSNzn#DbQTH5ctS7v?1dJHALQrFx*;wFJFO~o0tlA-RO%%Ru{u_aigx48g3ig9Y#fMXZUqU$xrzv)_=b)k)cmZg5D2g|528QlSPL8p&->MGfz*32? +zhDzJ&MU6X*QqUYLQnZLz!ql`0&>|oM)Kyp*Q;;Ia0SP=US}Mkpp-e75qeniAXSp@I +zLKOC!rR5WvJ>>mY7!i}hB2W%u>@tuupzMd>jWi{-@p5wi@T2tp1spSoC`ezr+a`tp +zQ!*Z5AbyxJ1CBj853T99gc%SJ(S-M~E?$)L_DPH6D)Ys8|=@K%u3eO46e!2LY%bZI()%lt86cC*IKD8US$N!B`52 +z-MnwYV=%eCD$685=a(D@l)Y&g1QwkVQIJE>FQJtLxbdNj;QmjbRyY&^W&k?EQYnOp +zmP?mCQ>H3ax}L!o;tQn1q(Q(=h^j$?0e2i-I(qs|=6RwXG19N{?NBeENN=!|d0R1-&W0X!ATE=z6rc4TA +zwHA4Ehg2lk9g@jDMzem$<}sKS7CmpPHq2JRi53W)bXGVTTt*DAn=}j$!0Edn60QuD +z7UTs&DimF?Wa{wcDv-zVaD6^~MIVr95Jnga64$X)Rrx)rB|@$R0LUZ3mb}Tzc-Mk! +z!sssxQNKa4?;5E6wjvjj|PUJ?HOyzK(m0c +zU?0`IFES^(3tw|--)c1#9i#>5C?qEhL%c->^Z-&y5No^^ld5AA{B)KzmIK6~dZt<{ +z@v>5bfrDF3a0NlI8 +z%tGRzHpIHjqL2u*tB74lJp9+QKejwY9*U-}DaDV;8MD=uIRAfC*`GTvljQ +zHL(?v_C6i?CH_WpDtN&zUXXc*eeHn5WIg}9M=Pw>di&{?S; +z6jsC;7nIl-6iGQxI(v>R?A21NKP?vmZ$uFhoWf?nL?|hFK0+k^BG(1M*np2|-9K9> +z3dY5D@H`2IR|O)Mj2IplaPggZ4FwD!gW~2D3uY`)&G`+nQ?V#2QT^O&B8Y;_hynfz +zAWDK{SC))P_{6G0n*;t-js-(Xw*nHQB?>UGg@sB5ltNB9%|#C|jB2*+lo>g}Zs#oR +z)N!SlX!3H^#yI8 +zCL(mqTIF#3fLOc0shoP;AiPOLRs`7+0|9pRw$wmMfRm`jG+&}ZyIh-dnbR$Um=je% +zgmFhgDJ(a{Y%Amt#C5U)xEH`A0Dl=B|1EAmy@iymp-mSx0Gn|uibD8om3G6A+~dKb +zcf#^TOBbD$Ucfm4YTxKWbrnn?!mhw;f^p;>k=boUsUuZ?(2>S_AP<0Ibj2m4<6Z$s +z`1<)?CF9Lb1?;y(0idQPC +zSQDLPY2Z6XqS6PPE+Nwkq=AHIs=N|)aU`p^x5GveIoL@v*R<%$FgBA-xj@*En +zh~08=i6e0=rg+`?NrR{bI~zlDgO%W8Kqbp1Y{o~X2#3wV{g(`rXMzimHVqfB+m~Na +z{4l_yAbgNkJ)Vg+e=n%bBex0z-E&2l#hX*tgaubX*{K%b58{L^EA!jQ7YYk`I`3mLT+Lv{m{T)$oKsm#?7337~m4861xN?Sfe)AUlJ? +z0;ZVLbSXk_@+%>fryq3kB@cS42B!=%(F^RNKnf`Vjw)$_0v-cy4L4rK)}3LJ;~_kw +zmEg{Lq=U?AYnkj>nG)`63!~d{FAEWnyc-o>hqfICr9(&qOmE)hKmWEkH^ +zz(g_g2zRs!ur5PkS8f`VPR4Kq74ZmiO-zg)MdCoqU{wXdj57`M^#L^zqGy;$sDCMy +z&jh^XOfieont1!CCh~$Rf^h8(-0m&*gH$|mbh^_}R>%(B$bc^+2;U*0B{SB9dBi2= +z+mNG%^zK}b+DkCj-A|vkV6BD~AT(cgBEd*C>Tuo_eU7@IL)^=y7IP8%qF_eST%QBM +zJT9SDwBB$zumQXc`91CPXO#&z0?gp3K6(PATkH$2z2`te3-xtDka=aJ4WK!60U@-9Ql6G7 +zSL*TqGTtj#$n_Q$k^*5aXacE4)dBj=J$oAm@r)qt +zGbS!?EW?)2m#QVp7AwQ;G?PS0NUw##>Pc0Kk8H~Z9&`f`j1_dgrsM>kXni6QjV2xE +z(k}z9bB2hjhY5&fi5Nq8$u8>;0x1bXOdlsis*Y*^w?>~Q&$`Ne;fsaZiN`aniV1@W +z4;AYo0f)|F;Y_eolp%0xghN6QFmqGf6vP_25G>W<=U5jS4|hZXIWsV56mEgN>ggG1^(U7+Uw7H_RTr6<@m&iHxu6+qp)&(#ofyR>wly)C! +zW)54d>`J{TCYRh3#yTxp>YF8|7{eNjm4R&~%r+{5q)MWC$4ZGG?$WL=sM;c!m?fo^ +zc=pU13?9y!$AMN*4^(M_xXgs__dv7BP?ViU-q*OaI9O0LxW-x9P>Dl*Pcu&p6h?si +z_Gqx=LMR6)mMVSLdOxhrkHwz8zlpmc0o1z;zoUJW#Rl?Vja`!M2a*O7O#!pkUG+(} +z5I&$X3FyXOj?>Ur#?|rIhfHCc$rILjW>F45!+{ECw#(x-;1;xLYlgtmhj!xwVy0NT|Yv+GwgWiX13UCUdZ +zMKb>sl&o!5ruI+TY;lqMShXAIw=y{%1OpU!P+kb{T)Se+!f?@CG(9h}5mS~wB+*iS +zE{)xnSRI5LnASk+n+U>{<`b`==aW4yu^ +z1)KF+i96&a>)ieMZ`lQio`|Ya-5W4KNgVL+;XT?McR&?M6MuBXV^UDT0CbEG1WPwO +zo@g-VkuMk}fv^D75O{k*!?%DGm>?HEHLd+hxy8Z+)lVMH){clM%JqtPe%RmMEL1Ff>`jyBCkgilN|zL_96O +z3ha+uUe4kg+)wSC%6$Tpi7eE>gasxbuq#UeXP^%_GH=gZft>w@vV3;LVVus-hwVam*`gXp-4aaO=Y@E_7*dVV8GjDrhrzd{Nr;W-2zqhHZAjx(PGXIPt+$iritlcH!8fxlj;15>F+wM>JJvF`7{3sc6p +z)y2Qn6vnZHNk-h-u)$hDmDNZNrUVCf{Q1F7bweevxi|<@t77TCH!re=>=$+xw}kKHhK~mu0W9PGu#KV)0Dq)WGP~;&PJr)nE_A +zY2!#dNk^7h`o +z?lo_qbyHTOmrR2!Ps>ow16~YQ0~4xC3STil$=m&qq$!r6fzb$gS#?IgobSXi!}}<- +zqZsN>7P3?_NfVM0y5s1TU}vUbfO$O%QVd*2-Pc-XOL-2GMbuvPg(sn2ThsWPYTavEh+XGA=5l$v#ziQiHj&`3~ZA~Oql=@i;u~YUi8x| +zCvO)gPQ7REg>{VCy{P?)S2&=?d@N6va6$Ivrnn;8FEjYiLf(lr8M?*f3UiRi5s#L& +zDpzA|#$(@mBkgAh+i6x@4Z`DKjz%3TJ74w~2v-WMEY@$~z>;jUXEep5C_^Fwfue|< +zz)aFvX}zo9M*&|Y*P@`XeekfXWsgJ`Jy1y~kOt>!* +z(Qs_zz_z|Q!={htz0#El#f~F7++uP>z4{UK1+dJg)ViZ(q_eCf#XlmuZ?Pv$rVMy1 +z7ChxqAGa2s*oW;H5>$&pZtFf1*U5SghG_ +zM#0cr>!Pg7KK}AEPxpeKAFahYzZ_>M`pr`GnJ4QpPu60beE%=`U&RM&@pqPD-T!9) +z2f)An-@q;3|3N+W$HqKDSFZaLOP=~~{nzLCf#3M?{f)`A2UD!jVFs_?EMC8PjQ6hN +ze@}7N`z&6+|BZUnx&Qy!`i-Nt>j&%CcUJH3uRLD5Bs<-IO)e09fR0Ubu9jDqJ10n2 +zgo!+*{gyI*PO=+|nv5QXt=;Gp&^-8Q1%I7Zd) +z4bJz +z&;3=#L<3?N#I+kdS+V{~mVJGZ6{uL{s6vjAui2v!em&r1`p-;N;B@HpJdUG2vnntR +z-={27tP#ezDhaU8?-zSeBFWW8u(7^QG$I~`zn-OB{b}>I7P#C*(fT@R%hHbg>D$VZ +z{$&sz23@^80cv}n+pn^jHZb$Sc4W*Kzb<#w{HgK-LQ3Bk((YH){ZbcQ`~4s3M>h{w +zFl?=OK?&aId(tX`OLWj1A4h3GU8?e#;0?}($*k1$4Z%N;6JW8Vz$)WFT;yGO#So}2 +zXAQIh7=n0fy@?nW?n!Z}QmeL#;!4v7W;GZefMIl-(gp+^;ge&1u7P|6vxnUat=AXp +z$#vp513_B6yWzZ0C(FdDB!P*>_9&yuf;B^SAzGH~3Fw} +zQcphCOK9XNA4lx+D?ls=>~bxZ5sF3i?q6w^9%xi367Ap&48^f>K52hdNb6NPpzG-wVRWKig{zZc{u$(@ArqOZv&nKyJp=mMIbuk4%h+a%>59j% +z>gRz322a{%@{y;KRCj*;p{Dv=aO*i}LlK+gS|8LqD9_-ZA4UK$Ow4;*<(C4NJ4(tG +zDbP@#beXn-+uS>u&U@OQgYZ{PLqY09HnGnXhsY*@udgi|MSZrJJ9Nz}#LjU-!N_Ei +z^ETS}U7e+rmos%+l&rh68jm-iWxmi_x0yG$3XUlf{(ndP>Ym|^KjD+Ry&v54pu52` +zd)?jsZ~6H$-`DMDfR$U+v3i!z-K7hAzpV@B?P3|{mPOgVPNbF8lDd+Y@hu~RcaLH`;+YS5|A!;pJxcM2C;w0UhyKTfc%-HZrL6!4m +zVdmn~BQUlwb<)lRda1KFPg>Cgd#2P;d#B94luA{v;#oR*mqQipTIOvg$Beq-=@Xm+ +zV%yjKPgmwgmP*Ywzedmh^YLV7=chWnTm8*_E}y^W>wu?%H{MR4@?GkmI@Iqi<$Ja3 +zuF$4JuLI)QU(~>s=lyish4>~r7xE6%;^Rv!UOW@xkX2{bT?I12nx=n|27Q)p-wknU +z(bgx%zSruA84}HWjMPK!QWKK*H7)5r_Z +zW0j`P*2jx6cYhsx^p&CC4$b}&-KX``$cqu*jnT>0h)0*`m)SxeCE8l_>l>5i7U*`oNZr$eNHe3e^#sZs +zatNI{$jnk$pJd#+W`Q?Ze7_{x;>J2(rgJEy^m{)#(y-AfNpwfej=y|UCMi+p$o8Hl +zkIgWhAuXo&!-X7glp%G8q>_zjLcGsTN?Uf%*iZfsarOf*)j6<{M%$<_WAMJ3%A3Y8 +z5oBxCsk_Mv`p@%f#wmeKUsF*8=SrqY6FJMN92r$M!*7VHBT?1;koZuo33t1+w{prs +zwCtqH9vQBh%<1RDPZ?62EprG(D +zif%#U?Cj*=fRo~mLZXV*Bhu;xjIF#jw~-*HgR^VSB`J=r0(X@ii2mCkGLhmZLpN_Yru*wz-7&$Aq!E6a==%Iw@z2Md +zVYUl&OP)q#ikUQ;BQ;nrX`u+%1={%5m$7A=G{P~hu3u8}iz8&Zn1r(!i$u(^-Wv4E@n@!Ugcf*?{8oO;Q^*{3e@}eZOPY?};i0ged6#ahVOIsmX`3_>)O+{D9b=()b8Ry;uj4+l +zR5u-9d%J0Aj#m-+kmdwdPdR7{TnvJ_i>qe1KJ*3}kIz3xJQt3A$k)mC>q-G%HdfJT +zITgU({^NN%%WHBgeCDLxMJI0#O28)aS_54;xZ<^hHaDTZ(WxID4c^yo&=foEY?T +z4@N}SvNCzP2~*pM7g4e-^^%<*5@z`Je$&mksGWCR#o4K6|2^Y;MlDx* +zcV``3h-0Hh^5+^ZR&8xE_;ub}$mZ(SkP-`#ia#whdT#}n=tMTEt+)(2JIG}2yU5>z +zbys_)+a0ujl$3&>-?TcNLV?B!lUjqqLq9$CY78z%zt8wUi|argWF<963g +zOdxbv+edulXeWu%YU-k3$BRyJy=%rJC|#SHNUgW^HKFpi>9(YhI4k{)BQ5TRbc|Jw +zz4L@|NdRVtV&vHas@o7d=+Pset)N1P4+AJ8m$!e4i0I569TX(P +zxW{RveP*K@Uo)toGrZdCROp?`U{FX*Tuvu@%34rd`kgcMTb%F$%%k}<&Xe<;Oq<)q +zJ^ZeQ=P8@HwbW96Cj_Y&T2#+x!qU@XEQ{P1tu3gVneAKbzzN%m7y{3Y5a|KMXNC7o +zq?>na)?T7Nw`J1){I;aNn~|ExFep8nu2qC&XcCtI;gX??2q5x03ceRAwMl~+Hbgy4 +zNM}o9w@gyW%LvQzzq$VtYtYWRp0ic8MtJ4YZJVLH?aP?vg7p=9pH`Cotq}Y|Bp#%%jkkFL4NkNQ#TU5U7SWn+Pw%&H)iB@FjrejIe +zVxe=r(XE`G)L^O#{ssPLg0&8plM+2pY~lx)!DJ^&q3XtEJb=14A$CNKsuw>5wpDU- +zH|lh0pWvK{(<`w<0*_={nQqjp2u?5KPi+LK*d@E7rygrzB*XZIZ3mD?8yQZ2JxYxw +zmEs#U{50+n;h+Oi9et#%5rCAsip&dw71V1AD}2}elx+X?U1EP>Rh3@|zgvNHC%P0o +zVQfgN!W~^?p9hE2-@kclJ108Y^QXrF3r%4g)xzyz-^jQ5^@S{?m%yHm1t5B6@xVHF@9L-MKxH6}rVHX~^5Wsf+6iolnm%4TmaK +zLG0u1uR{LYY&717X+=>tmb$8fPp8k(tzu1WFmAk6-H@*cvVkR{O3qE|2yNhoIL0jX +zDJiD7!$IJuayr93V|mbItKhyNBPMz6+010CK@z#1Ctv_jC3L1MT&3g>(s1Rppgbyz@>D_@zjgZ5J-2>wmnFIPe8#UzX +zzoocB_Am8JiD%v4;#O~IU`u}D@CKwoGZ(l1Nt1pK9~wE~ +zIk20lt`VX4ZJ%|yuiw^L9xauJ91V!MarfeK)$VX|oI&g&1c1qk}JZNE!(cI+Ce1;oK>)WfF&pb5$O2-TMh+5%8+ikU7B;p#K#%Bg?pOO^IpDxojR)61hAyCo?-cS+-gh7RdgD^mO-o$Q_>Q46Bws0?(|UylTJ +zc(ig0*}85C8qR73aw}ABq{XT1{$=vlm4w06Age|I0Bx}F_*;rZjeui*f|uz8cv3o5 +z&>4C5pEGN2O@hPY*x6!JE_7@ahk#FMGQ*!k7GY6Tq*tq}a`CTV_XlJHg!4Dg;`X`p +zeOqM1%`H=FRF;x94aP9ualUQFftC7-y!>lIGhF;=N?Kzu( +z>MP)oXVGkgZVRxe?rMDGdbbg?s@6134v(SZS_}%*%tI_2Y80Xokeej? +zJ3JtXzIdC?2!vS+t~iWLkN(vyYt$)%cGkxOJb)%4@hD-i#T(m9f1>mZO5rf+f?&p9 +zpueGJr^Fi_k}7n3G8&_xZK&lu`YX62S1s$QkjZrt)wuYj!)~a%HvKnL +zX8Pvf{%5q&T*XuELQX-$V3Plq8sIf4e3%YU51u8#C2v_qGcxe1*feV1p8|h-jb|jW +z{c-=z@=0y~ci5_b`=V^a^h<6>9ud +z%RVK7YD3-Pllm3zI9OCKW%@k}7FI5dxv3WfTxQ$vb`2@>TFf?oRC## +zM%ZSq1-tht>TGvs8KO%Jv}tuc)Trve4k`?F(4#5?9n_fWAV*b(zQUkH-eY&(lGLuR +z8eS57Y4E;d1jn;BGbf&~F;j5<2@e=kc8n?jgyRnl0^y3fij3*ySn&6kQT%Hpot0Vf +z8^f=PA;)YY)L`yNpHXNHw!QZG`xYZ&w}a_>4u>J}$bWT47%9`&Zl?~5HirGq#ERW}I2N(Xc$M3PP*?O5>kC1Fn6eMK%H&aOIVg(YPiI*caFQia*rtS-ti=a#EL +zT7ctnWPwbe3w}Bkxj1$_^ts{@xrBSmG(mmnDJa71IP+(h3|9F@cnpH-G;kmGpq|NO +z;_!vX8WVoB@ppwIUI8n8DNWgOa6sfWP*`d_iOoOP%6ABg63byXFPe~Cmzoj +zanec1R^MwJYbZ1FF$}o%O9=4OKE)Y_OMMlw3j>t$iwBp%5Gh?A&+S~d3E;V-N{90< +zLoF)_tFWYm2N<%y7zI$d@X?(@j`<{8i3{obsufp>i{u%;TW99BeoypEWTvx_AOHQ +zZ?GQF$to$-3P!f{G7BS8_nTc&~uT*jBez?Bgq3EP&%9t+JSyTyL@xBvo1ge47gAsdsfjn8pGCh9To)~QU}2*A0?|G<_(y2eCsGh +zTJr1Bs2|%Y`3_2m@RBxuuMk)QS%mRPvSIy3QUGAc2dLLdb=yioHQMa>C{iNoe8F;u +zI?FbdG^I>qE(B~0(q`&^kw~u(8%&K{E}*G?5UGHMaWG@0@Gu}#UK;1~rqZ_JpZ#v0 +zK=tBy#XQED>-3CPOD2i+rIqhxf?92>9<>}dAcig57ynknTzpaZu)BCHHwUV4*+Le= +z?D$o(_4?>I9X!cT-gb``3m$EYSa!+)KMIuXuz-cv$p3~dbH~=OK`tggm|+PAbLw)t +z9>!ouZPBw9UFE&0GRI9CD3I^yxz0sI{wa@=&kNH+qixRW_v*N@jPR8ubByR-ar|WT +zNq`q8-7AJxc`39Bi`jD_fwW+g>9hBF!fSPru#^CnwS;(Ztj2}=j8LTW9972jZy`$+ +zIXA5hz^f!Isjd%^&Y$&$1_&~d7$+8qhr|vTo9Ee>`dkq<$Gdr0b+s!>ibv43N1n#t +zAgT+&>#~>dib)Np^iPLxFW5Rjz{eUcO6GHeabxn;c@F-AG?Is5>MN{Q4(Z}Db-}Q* +zi4ek3P3ck23&f4)+*TiC1c?Ybu)y%u<$d`j7J=rD19fJ=RT7y}P&$Skc8usvcaUyi +zM$K`eApx&nriY-zAPb3?$nXR|2^Pg%USt~|L{7B-r<#7yb%=WJBP-}6?x!4|eydimL&5{>Jg2yWvZktYkYjMdNTCof_F3T$hSr8g3 +zIT@$xQ!*2W0A1|sJNkmH-HV{F0@o>Np_SvjYpx9bB4RujEGSAL66QGn*R55vqd0yg +zT;AhOdvqYPl+}GMN|bZa0bUG*68J4t_c|he?v`Q`FzmMCsRH;dP>nv0R+8?*b`vKe +zBHYn&kqoqaI5%4z4ICg*+%ZIdXJE~J% +zDSR2Daxu8f>prw<&)P$ou}T31NpDKdE$b@!qOE+ji+cN^d2U==(;gDX&V=Yy!8zkm +zapfdRjl&YFaoHuj>pWXb^MC~D&L6nH@{Xs2RJ0htK?|@hfrM8_LP?II$GAfdifUtV +zZ1whr4M=!hF1FT#;$u9O=>eW)q0fOIm0)Fo2=!7{Af7>vKntcMJ>voa^^LZ~rkc~u +z&4ZXfF2t-4WTl{B!#Y3~a__veoT_)IB4ERuJ1nPAff0M1q5~&yWM{P1s9$TboQ&|_ +zy{x048mUo?19@h^aqfgqi(fpM8AoXiS-i_ky4YMa&9erXCa})+i9Zm5EQXhBA9yY< +z^fn+8!>8m-c3ls|d@MN&X-JgXFeNXhMo15XlK}0QR~e1Vl;cq%nFTY4Ss|O`$jXQ_ +zPYMnqn!RaS)RO3>i%Y{y%p2_rh%ZJ-1orV|B@pM;A!A|uL(oOFMRAXw%>O6iUg~9G +zCef19D%`G}1`q1gI2f>^FYpw>}9uJiJLbJ +zX+Hem`wFRC(WKEEB8qkME(2e)L_sJJKTx52&pho!vLGB%L5uC~j5&-a1>;ap16IiX +z?K%vKdjLH1CTEMQoE@gVvAToJ$rQ30;lwI#)Z|MviA&4TD6(N!;E&&+&Mh&F^xzBx +zR))QGZkSqO!g92`BrQUVm?D%j6qGfKu11y^vM#yL;Dg$F?I0a`6%I-`C!qJAi*q5` +z#YRS6Jh&Lp%>Zhw*4376eh0CY=oiu)l^@6PcV|BE2d1 +z6RaZ9>0Uc*aRJlD*UYo4wGDA)rX7PqH`N9;qVr0VPX&)_P}|i4Mp`;_6zeSbcDv}7 +zB`l96Q3zJ +z$42T)7%;rb=?}u>zLfYfQ3-g@y9yJ*Yy&h_SYjMeP|^#{tVSz9IZ|9o`Qs&DiW-Ys +zcKjAGDINCbKJTr#mZJ>8p!%!i42WQdSweDS93cS>p*gZq^HT}-qr&)i;Sz;|&ODrE +z{(6NdbseM7dYFcR&IU5*ilEwQDXNXcR0nQFV8@Q1l3WY(0TEio2mB%@@@4(hC}u!2 +zf0sG_BHC(Ki)0M&5N9D%3GAExFy>gjWs%(D5!hJ1mPs!EbAb +zvhd>0WPOM?2v&57liL8T;(lki8b>kho6tHMCZ)C*xd@FVrhm1eTu~GxEnm45+lRp- +zM0t?W`1796%gH(%=;V(7*JbKHsD7WT9uPCyzfvEiM?ZplMa6$5Kp5Y#PKGY9=5|w) +zTt1@F2qz#WLnLsb+z8>J-F77r%pyqk5TF-~H=ApMpDD1GXMrIbie098&xi&nAtcWb +zGs<$~lKF(&++ME~-ciBWzWKRKEoIfQ=_G$_O&{j};`5o-n#O|qLx+H3VucY6=YoZR +z)rV~W(U)!J7}yN1B7FLkH~T1L#dJWD(IG^vyFv_mo4Sz>t;sUo4FD^w>gUVfh83(l +zg?(rUK;$d8*&jU}bdUNFJUclNqG}Bv;pE0VCpfF!AQ)GUke{FgvvZp7XUvnqiOlTS +z#P1o3I(SsIC|`m!E(tRzL97w}0H0zg_}XRl?W+I@Ilu3@xF3m~ND=-n@}9fWlIVB^ +z5w0$$*^8COfrfP +zxrpCJM1ztR%WIcOKY}+9w&2u_n^eG6#0i5R3({qC7XiwVmGgZm2&t4%=6U^%7s(UA +z(Q-uINoy2|D;xEm6vnW2WWrVMVr@D?2I;K$?%G%|SA>I?`Sz#Z14Qg#cUXAF-zfOR +zd{(ru7;E^t<(8iW{&pc?&S>aq^;3CVUd|BHF1fKgm|U*15;=}h_XyDjHsm+-jS9fh +z2URr_iULF#hLyNm@5C`cTBb?VwUY9R&-0axk}ja;zz0Af2#tp?v1TXgHI!`xB;a4TGO&TvPnyhxcT~iRUyW)=onzIM^uE{e9vH7m8AQGd2E?&*lDXH{ifn>2M +zUWnINQx<4fsX{b-$%cqFD~xb#?gtJ?6%Rjoi8ueH_k|nL +zPiM&)Sv;f~a+dTCpga?6Z@~&TAf9JrHpE~AH^M-irN)3EEdmMwR@C~_^O~I=;_#FJ +zG0X?pzL9rBRZCyQ95Uc#6Lx}m+7ZXw8DMacnZeW`A^2P>8t>LzIHa#08#KU7t;y44 +zFOY#8#`3IQOsd&`WKF??B%3&|qQM(&x{VReiNK0DAKq|e&?8!Z1%1IJ#Y1~ESB^Hs +zIqLL|bY_~3eJCC2ee)7n3%Q?)Q7A`s^MHA7qKoX6BBYfcSO#9ml?c+;BB;zoce3=B +z?P476vt1k88mgg-tAiEw*%!9I?QVywa-)5q!bTS=mJ%U;SbzvUYa27}XYh&v0zrY6 +zD)P)ob!7-T|HUTq7o;J{MZ}g(FtXlJbnRY?J`*~i*}?eOWr7B>cG}YBIMNn-!&$YA +z5Bw>cqG17_Y9M4IVv&LGes4;}btvJhIg$m|_6(zJbhTuo|EOAMx?L80_|BP9u^18; +z!z%)t*qvFoMEE?m_%kZ4$R1bPM|8Q61e|dIDCyfZOB^2S9dsduhH~47g3^|L9tnc8 +z2GW@9R$!jNmRUl`#9mnY;td^Od-X{GAk0A)sKEK}fN^~INc&}98anxsSrBCy$0f$S&TWO{$2*_lTsk3E}g40rS1590`LV +z1sJzX#3zdA-Z8^23tLeD)vPl@`jWT~SxBKdxSVw7QC(fQ}C^|}#!O9L> +zm4RT_ofLeHzm3)~pD+VO#qWona^`0VnmfloLW`otBVrof0h@Se^ZbhzO+JKOBuIY4 +zqDjqQ8;TEEGQvVGI+tP4onL$HIum0 +z4I(BkX721l3IdiA%Ee*n;@D^)x@}>_E9chskuclw58U~Vxj7anArfsO#x4u+b~14l +z76M#fy6L6Jy7#bI_}*UA8-FV~O<4>-m|0cX&j8$4xHT|G@h09R_v#GP@%O1eLnllLbz{NmIa@zBGiN9wMHNj-4`32KvQeUdbX*icLHIz*5jDc3p +zBUWA}ZI5E<^@cl7R4;n|<;V>^S#*edc5HnyaUS^BidTs@E=D~8su1INU_67hp{E_Q +zhb}?{Hi(m>_jTm3l{|wAFtSt+MSIW|*SQOZ&UZsyh#K(V45saRZ6i4dn8!_iqIGlx +zo*r>iJ|1zp^nval%F7ljW6kNdSxxywhXM;+U04-pfo+P+&RTrk6JSIn+7>~9K3iT- +z7!6!dFN+=$@Iy{sk`u@(dHt?X6I8$1K%0$K-=>YlonU0tMx-bH~j{7GPS}n-4b3wqCnfAYT%Z24F0DY +zLmr5#4%c11PCTqwPOQ8Gd!B~E!3zJ&-4t+oX1Nnl~<;3gY(0wlR?B(?L! +zL5R3f7mbT+EeE)+G+;u=C62?gMTNy7E|FNa4-yMPoi0~YhxQcjOFyj5&##+@)F4nr-DRDx2tZ27eT_ +zL+}bwZNy5c{b$OD*&>7g=4N)O#6%LLYGI%#poA1lD(KXib~;f!Aejs4`grx>76~OE +z9>SS{aPWR%-3$HPCQ_ogQWn`d_FlL|Zn}nS+6^=ycrRO^gzj_pp1Ka^L&ff5<~BM5 +zNa3ckaC3e7yjfb)iXWrR-t;DtnUq3aw@;n-gv)T3jzY){esMBdioga`o7s=|ls#_; +z*s9w_=@5*tFY2y1+!M+QLSz&F)G+8$6cVxgK|yEWV9UdUAx-2$G1V0{Z^g#H5IOmO +z_t(DW88En*7C +zf<7fljf6{ZRzZRN81Gf8sLF~`q%Dn3IBXhQt(&lf^MZ!~u^q>SJJ#22*ZD{lI$p%F +z@0m=<^Id~eY;7m9JA@aB*+Cs{QhVgNo3_>IL}66Z#lz=LwE|i_gLA3yZCvp~Ks~0=5;535QR~s}cNzq|<-rcp*J*;K&W(Wi*xo1HDM@r=OnTM-v +zsvu&^U$G#m#BR|SF#skz3n>o>IP~f|FwEflTsN?oNZ)|MjkVQaW~y0@^T|AeyDzaUC~Y)?!p9#fk@E{L-HWl~J|vf*iq*1Ry$Ub3E_mIa5ADEq-Ia +zFrz6Ac!&ooK}mEEQjwl961mb03ZUEj0d%h`e>o=+ww*%P$xNeGs9i;63SHsiqQ=n6X~eP +zeU~jskugx_|E4M9_!I&14@bo}`IP&3Fy2{5?`z!i@%qMIi-i`hdg|<~bfAdBwh(Pc +zE$Th4x%~>qJD-MGQ!6`Tt>z+OczZ(%J9pUlsh~h1JzZvcN~MX({_S`TX?C{2H|P*D +zrs{!-i2%_odYv{vx9uD2+zfoEs65$)pv-(|ah77CmX(kcB6)HOyRs_gDGL~Y +z%w@P&^hCxQ*pz(<@&bil2^Ezh{F;{P?IwJoYb6eulK;cBHgNbCrCv|nP0qV +z+Ft7N2W?=c$zvfcJUX9Uo<=P``YS{;*C`ssgumb#EJG?Ck<-^{8AeAWxJ4qSAQZr7 +zDI +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 +zd~Go +z1{hMKivuq-nH%ac7)ME>zl)kBU~YV{fY9Y}y5OQ#P9su01jB|O9C1A&g7BSma;ik% +z_sj@6f`)66AMV1!g;QGXTLp#!3HxsvB>`r=;`8gIc7f}E^F&)1b(*t;E`0$I# +zpR5Ssds3i4JXK4`GgKv;X|EDugYL{Ik`+L3aEXIQE%Zz(S9LLIIxq^rMD>#l2B8#z +z6`&N*korZ>qMsd7=6bRc*HG@jleEaE57iS!QebPy9rXlZ(`CX7Rm-N6MW_j7uwIZL +zBomfY#f5k*wVy3eA(+jTStpGn*<)BV0P5D({scv>$wSxGe>>gUtvgq-h-cYLTBGvvW;iQu|6LiF$CBA?NjNolwn;&;w?Mh& +zq62KDp`*B-*bU~Gs>&Kqq8|}cAp%@^2@j(d@)X0Yg72;Ltb@PMFA^~0!?tB)D4u?M +zVt1@<{|du?82v*%xobaTj9#i3dTqBQwNWPr8bMDZlQ>EUQ!Ez%>j*!Xx`k)ng}-FZ +zfkdB_4eLdPzWmLp(uiOLoMBO!&GcBgZ}vM%lR#sqR6maEOAB3ev+ZA0%cOOC(VlK1 +zNzIe*bzd`JmA3KI<=V&LiEe@HCi6YHjS~4(&1JL8c3e*}Vg)0`&$zWInxOLRKoZRR +zBwx@)0}A`;pm>F!Kg_r|3@KA~s7B}ujWNft(erPrtjsEe#mlRqO&cCj5?gDy60<=KUt5^hyJf16S_fJ;#E +zE*<9`I^>wfNhVZTnn9AL0-xPFj2$bQa4zP{ddafqiw0q){f&>Wod&0Ifl}Th*agsg +zdb}J)GxdZCP^iEbeWP_dQlL71%m$@jbN${(1fp@$#VDIbf_W1S$~B3dLb%)ZG|ekA +zb&TC+nDHO$_$d&aFE~13{G72W5sBj5(Q$(8W!W1mvMq9|X2l7e#`@l!#B^$>q-F8g>6pJx`Q&8yBvB)f)&4__u%(oS|^ +zA<-%;KR57m_J%w42Fgu4UwJe1~) +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 +zsE%Okd`(f!F&ZRpXaf%W1C)(=)4&Yd@+6{ +zv?8qBNAJ&1kyAGAHaub$Z%VAN`5-$)%b;Yk;b%E4FABV?2PScyZ~C_q9FF#}w_I=5 +zM~z1P7O*qOWl5l=<*hjBF)!~U0 +zHTy*fOvcne(9z4(%r97#MPzQ}Ba4fdgGm#i&kph^QDk%7loZ1-Z0E|C9F4!rM)G5< +z5xeU5-}0gZ{MPV3F%MgN+!4Wy6*KQmaA*q!yr!G<8Z`V6{$kT +zgN7qTTIJ60a7KtJj(wxKS=!Zx3IbxHvvQtLD0=f92-I!7a!KYX+7XNkLq0oyiY@5X +zWXi<|Y*95JE5dbO7w;h-+p)AC@Px;_zd=h4;uvuZXek_2!m7g;oD{2WtOSHTU`Z<=TOB +z9%QS#&hPLT^0D~!V)H`(K^dK9;CUzdZS_moq5Ugs@~Y&`#K54dSgPjcuAlcl1^@oq +zCwqi=pcWCG_J$FJs;_(jYSskMRZ%>?w%F7140J-M6cWYNk9$xrVcJ6U +zfRBc5ZC#)c2G?`UFp~i24_*7yUS(?y4{A<>&M5lN$eZMetix +z$YmjD?mf7WH2wFM_J*xVP1s<;^^bOcSW3a6ACLJx+On_j!bWY|GmoDgsz)OSGNQ`L +z{eQJ%m+aGm=_1{PVyEvuQWDEB2F(J01=SdJN)mM4%}bP5)B`s7M6Q=s%ye|>y$)}L +znQM5Ndq2Hd&zZd+PLL6r*G`LHXb>P=T^266PpCR=NLlkP5*&Irn68Y2YD;O%Yb28M +zSUkVZ%O5t+sJtI*c+IYiq2uB#Y6y69>Nx1_SV={_Q~6PX9`wuO(JM+mTpkBVV@k3} +zwbg0%oUV!la@GKEpV{=Y(ED$o87a>Njf6ef>@~OKgK5sMph*c5NNy5xxO%gE8b!Ii~W-WFQp4OigzR*us1nA!6 +z!qWLUGT*)zbh|B9nK^LPQ1<;%=xb!<*?6>IFuG7Oi!h$ok|`S{BP$@@39Ko!M|x@R +z!Ncd%pE;0gU5FV+waPwnaEkJ5AgU7^QMy$dQSe?=7C18#YP2FtlHn0gGU{JNcj&(J +z1azOU*n0}0#n83>*tEaiIny~mFg76KRjvIzl>0+7Ygm8%qBdpKt>0DPncQ};P)4NO +za9N4-E@jpZcTX%7cHH_-Hl>DTpExN`loI#LS<8|N=0nMWIr@sQ7CpifHkXdYUxNeF@I0PY2o)l1;OuoJSJ99BcD`kr>Ij*9eYLq +zim_z2m2Nq5e#Ac4ABKOSEv(4vPXzPGIuD6-+w8iN!V;KdgT3y-C=Mh)8TQHnTuY(#gxgR5&15VT>9)w)Z&U%FwbnmIc=+2?=E43APa9^GIj21Hr?Wizc9}l38Hr|%)LCbTrH@k +z8bk*dj3r|kZ|B0?w<`PDR*QPY!Ajl~sBP|V0#VM2UFNN=hW!kr$}`Yi#LUAJ45HC@ +zeiL$-<$uGGZaB}z7M>NXo|GPpu+y1{veN5XNVMIzTX)obbyVWX74}&?NyrtR?d!}J +zzOnweIeu*R>j-=jGVs%xE_gq?x8Mw7DYTxgJoDf-D71d+wdM^dn6CVO705}bDtOVK +zKi!@iRKGb>V6!8svenm{vMFRZF9W5; +z-)fhZs=+|zV%!(#|8X>l$`wWTtKCrWG|Me*H^<}DEwSww_`Yuj-+fzD!Wg=~g^anw +z_6Hf0kw&{R^(8Rg^5m-Qx5~s-Sv>8L`0qv6ptfnAj6eP+!c_+^3)u4g-6E +zynxj%XW9(%b4@BA(t!7CB^Tgu6q&0;(-hUc=!1r**P;)L*O@`9F!$7gcIRdZ98*#? +z9$#%*vXg43_^2tOiV43z)FZKgK^!RR@yS}VMmf+jIe%O$2_}cb)ib2J{_{)}rxRgh +z+6#RFll=-rPphR|M(TFr!EqU^IXs_&M|vuhhziJKb-1wPOC#LXcrxG_mVLw>)gq)z +zyFudwk;{cy*&vgRFJM_act66U5({Jh2*61gMa42~m}{K(ba@V-Lc1Hn4EA;T+l(@q +z)~&-6Npbf!FD5{p6TI_lwZ31z?}OaPke%iHKIV;zEcgRWk+~=(rl9qa#q9jEYgE=V +zILJc3xL=4?0ZF)_E~I!E*XCk36LI+8|7i}Bco{;y5Igb^;v-yMi8MpiVoN;-9|-l~ +z&Ql7o=H{v|Fwc;~6%P%o&umi-3u52LDB}p@;UmbROSz%YDl?a=h5Ocn*HK{((0UEM +z5h2?u*HeaLckRb8H%;8XM!&9H*?m?&;hL~o)xYsKD5#Z!Dl#|o2_x8VvpMQ}5#RcG +z#M|*VM27CMCHO76J9U6kJkM)Qi^jlG0;07pXb7oNRC<#AkA!TT)8fwhs1=&W1d4Lj +z`au-I{L{7JpIc>sVxk{=Z&+FU?-Q7U{1u&_%7eO8ga5~p@i +zH)8<;{j`{soVvo-fy3a~x&BO_Oi1qE)0?urZ%W1~-^3P>hPA83KZ*33wzP}A{>5BC +zPqx(GoxcxaSAUiqgMi;n54o`wWxHaWZK#;=a+Tx78E^P+2$5WpWS04rVBPJpNot|I +z(V9{}9s^Cw0+0Soy=G;-z2op7=;S7hU2=4UoU&l +zvcu{%rvPQ3`gPMa_u9WCqtMME8X8`9!v*<|NvSC!jD1$mU1L3u%V|p9z`_KDy0^2* +z`k}=>-Vr%M%SH}T@|tsHJB~fRmEk|RBU&GaY&RYJJHxxX)0ubm>bPsm@S9I}=cl1d9o(L3%hrYkTq? +zK`-_<*I)naN46PnThX}+w<`{ty#eMaGMO0%8+`|IX{6WU#=Ujxf{6y5SU<=)t=Q9- +z{kOV$khwWP6P}%ZqQNx*&ohlK6Z*<$?oSs4tM26~b=wLFfE|!wkzPKxSi|Iy{e!B# +zVr^e8Z>mCK)h~EtGU^AsnPa<Xlo771b>2(tntK4#jCyh94jE+xDlEZ68}2^KUOO +zcQMM(D9!A{FzAh2bm?1Tm40=3iN{)1_BhaITVCH@JCTf~_}1d5=PJDh+YOPCt)M~{ +zPV=9ebLneaGP`^?n$DO%f5b9oz#}Sy`<$VQ!tkI+eZgyCJ>S<-*zTV;H12;`Y@N=? +z623+Tl!W>1v(4m0Xw`kOzwdld{22JqfBC~r{fBCG?}JKwHz==vH<)|kb(;G67{liv +z)y42GL9x$mJS5-n?%!CYM+{~4RX&?Jsid&GH!;-(23s%x#SUE>p_O~7l5_fa0!ODh +z4e!L^zqm9CfPxJDc0yoB3hJjwZwhK(65*>WC8_h_a6;e<*=wkvR?lnSlskQ#P-k>%}SCxLce*jqKe>yzij7&T`aYu<5fTjlKOFF<(D1vC|dxF7_W +zNO!l=^ba`im@VAvgRJ7=7cu>+TWCtDhGYzW+MQfU9>OczoCgmYn_}Jh6aKwFMco%$ +zpB+=+BY-~Md6b-~Kxnm&&BlxV-Fg18E3gVH +zNN%%G-k!hNGDdIxiNV}Q((Pk|b{XAn-uBvfwh3ZJoI0x`5vcio(uroxoM$fvk8=0} +z5y_zj{6V9OHZsvpznM@H1FakI`iAQH7i<3$^CCHSV4N(gGuxBs;u}A8Xoskw-d4uH +zoHAp^ua@na`RYI8`9I&9#9PEa=cK~gf=YGL6xuSsS|7~V3WnEu;XU&Gc +zr^OZi&j~>ytK%A{ke@N|fS4&m32yl$ye{ce);}%MzejX*9?MGTOuL6D??~QB6lOy9 +z9?x;>@Hcalg72@kxNG}*-cS9aa^=ASWoVe(U>mJJxSo*qYK4onomH1W$vDnQ?dS{9 +z*L5PB+^sbdcsUa-Ts*Yd>O*&-22JJCFOPq4pcgMv80*Ajo>7Ucjjq{pel-xEvwtxQ +z_r5CNF~LZ_FTJeYyr`_Qu^Pd>wL_BYglu73%ibUV`W!gj!YXgBjlV^Zo~7YVMbc+C!tnZZ8L>a_-~wr +z60z#r`aa?}BcuYpO7uvnI5$VV(A}W@m_T`S97LE*75H4@v5n{iN?Y1gBg$Da^Rxi2 +zB^Bu2u^w~MQuu6y(bx*+pd6-bX=l8*Lj%pNhK}#KS;M77c!?9zH9Tcb2|Mn#qzwI7 +z#sj}5JDFHi-}6g2@n1@y7ewdUbUqjDj1G}>PQcgZCQT~}y6))^B)7@eQ(p&ivr<$_wq72DT{+XtNSV8f6q;0j(rzhRok1#kD +zZ9)-lv%tjjx3oXBOFzchW_zo5WN&kDOhrQ}VlWn|M1{UZrCHyI3T`p3dJVhc5Em99 +z-s2*Q>nnDza~n4yjb2iDw{`@@{0-rPB`8Ii0ae;f=DDd-2}q=D@m3b_fgQiv_A|~# +zV0sgYBMYTWLYOck194prG}bAKbXp((K|2ElMl8lEKIL#N;6xR>E@V(NzL~4w{P;mxm{z#s?H~?Ks*LdKj$e)ihTxF!|M{Q;)rTThmq9?gbAI7okR%w+G(~n>;Tb6IMh7 +zW@)*pUWak(@ri06RsMa`L_UNP67M34GBeSA(kBDDxK>q@iL_Y3J! +z95kks@;~R+_gxw-k_#N=x{%}tEgb?}Vy4X5WAZ9lofKqk6`$jIv3bWmzG2*ram{vM +zEp%N|=OdY0R-han)ZKZ%(KFY=Li^(ZJ3N@#g{dJ8w!GDmJIYSKpJgY6_m2Y;nT%i> +z!){n6tKvW+R)7|E%5<^W(7a2uIve8XYpodh6O%jTHUDj=ykFmnqt@(B*=))i-rL>Q +zx5=$iS@HGL&|lR>hgfAHlzQt2wCy2_f+^@Zc3f0C!0)aw_8bGzk<;X~a17(EoNn46 +zxUHLIxd`=%g)6OxfyC$$EH$s*Vdf42(MF!IxSV|jj%@k-gEH{R +z5|ic28aJX6JxQ3tQD?666KdZ&j`sMZ*1xXZ6!T8~6>76G`!K{YmM`Hu(Oc_Pp-p2T +z@kcdl@+06ZkHw?@Tn +z#mgjrnTs+<8$U@!E^Zf&$X1fp +znB^@{IRI4A?mf#aw@jybu6e^hyoft0m3yDUN{~sY?=6Ddb&C=w{5fss{=`2$;;+_Q +zhb^bJ5xJ+$wd{sOQ?=@EKXN?@S+=1@x^_wW|2AUg(8juZo1?!mn)J;k$U^h!IvpW4 +z+5=<@dqq=JY{K`mib%9u=*8J#wE6x73ocqlv{Z~uXt49~l$x-b6QqIGeN>2!LRR9D +z$^u*8WvIL%Wc>-y4z&0S*xI(gR$UkT1@9O0u_O!8Jzce=g5GtTZofVAKbc&dSVi2i +zyBKs2+EHC@Qg+k5$*|1fgL +z|rkkeFIbZnO3v4;{pYcBGf4r?$uQd-Bpe` +zXd@C@?B7|S!0OdUD{r7APqz`b_Yzo$cr;Mj)GQY{ClSpjb4G-X$^;8%kZD{NoAtc7 +zyr`&qz^Dw5kCNFz!^&x*vOh_4c%l7c2@}$nugyiUiVlG#;uwpdfy1d87;vE$op&uc +zWB7A6H-X+hMGT50Hj&u~r%NV+5$>%ZC~3$5@(h!X9g+J-a!n?#E!kTsi(r}PQ{{=& +zukB_-e0JfC5o!z&h1B!+YBCnh%xpRHaQqyIK>JqsJYLKQx)OdlzM;$Q;zbdzk-0O< +z#u57sNKdL-AlB(cX%(ovITdEqK05{;IYX3Eh@D-}-c;%)ugUw=domTwjY42N_jJ&S +ze9cx8e%R|UEI}e`p<2f=9Qz-UYvE)HP(V2F1`n@`x#IXH@(!Ta)ca|C=@NdJsu1ec +zlbA*lrrtfpXwcjgVqN3*^e9&fC6SMaT8zW@>-vbXRgBFt#%AaXB1A +z)2EzRCPG|n8;q?ibI7SG2>Xm&Q|*aPOO1>j81S?p6#kh!;KB?LDln$7hsT&sJ7&KL +zG_%5BKURi_-m9sy`qxZtD2l&#Ph{4OFT5a~B=iprotMtW*P<<;f +zE^J{LbOXJW7Iq|gRD1wc`-!g)`@eWx`2enz1r}|6RfR%wzeRJJj6YWW=U(7CK3t8d +zy9BV~dk$9gqlRI`;wjYUL6Sk2;nb4KS@uzgZ~tIi1Oj|g%o6?sajMjiT&OL?{K|zW +zf8=BbHBsSzaOWZC5mXg$;nZUc0Uo8pYv!?Zt2!=0Ko_NdZ%8Q9``I(|Hsj8)%|l6x=+2^TPuQ{X4=c89+qP}9Dz@#U +zV%xSVwr$%^#hr6c-}~Oaefo~KdyMsIuem?(z1EoX`JH47tCgnPreQ*c{1P&aLo+Kz +zB9iM#mU2aCwYHAV@sRFFW_TN5lTq>We-JsypsOrQmJ9+bJ<8RESBtoReeQ02bm#xu +zYinq^Bef%vDc@J3*>zja;(;YaPZydBHlfj9hutTLfi+P?I5+Z_+{+WpjqZ-E7gKw( +z{`V8_@D1O8_P9*wCCQ8DHS<232I_CRIBuy6Rzs+5l{mR~k|}PYP>)2#wE3L6p+{uJ +z$n~nrx2;kWOO1pgr^^y#JKB-fk$&MDX}Nt3yT?V^>vth{?u@rgNgE91=iwHUUPFT9 +zP)L0zw?X(8=wRsfrv<_d+^9E(S+t;xgrp`G7?F$?d*f2>RTg*_`%?+wum3L+mx?zB +zP*gx%5FVlEBsAwKbC9QCR2Hu+&B;P_NHrT0k}tNVS?$iSe44c)z;3q|$ar5tWMv-q +zu8qhHw$)Eyd-x21wi0u-;e`|8E?iAjwn7I!!p(^(9m#qi9k);{h;&RDjYLKeo4Ikk;%_m +z!aRX3uaQ#H%;}m3P`2{p!r;0{nvIU`mLKIiWfknPjWX+-J)@;s%V7h!H8(JVr-$T~ +zHH-?x)^NIi_~y`mG`uQZEw$qsBG1vp>sU*B#N>KQL`&yWbKrxif-9!y91!AT>E4(N +zXL^i +zrdG2cUYOtHYd{tgo;WCP+1lvNI6>3pd+9Nhl+wSpI=n6f+ErLt^U#bu +zF4)4(t5Qi{SLbA56h}{7`i5}gjt&e(!%|c5bIB}~4fGonjY2k(|Ik@_uc-P~~D}wiBr;LSHz0uw~E0gol93 +z6jq6g5;WIQ3((tvma%A4tpB9o3Xlv@*XjdyDdt**sZegX6zChu{jU~RZ=J?cs(V(l +z6kbXMS=CCLrl4e}<{^JL2%9UYj~YDRE%sk@R3zf1!P#;dyMzUv^aBGCkQ!Xq+OJ9n +zHW>Y$brB5?MA@*!@7vVC&Xg+gPxf^r@3J|(S6r}Co^AvpOo409OIL!=_QFGw7zA~s +zZ0S8v8CI(p#U&sM#DCMc%;}8~GSJQVXBz`hG>E7K7ywn5$4%RvBtgcJu+#`X7 +zfr%FMsFo9FZ$e$M@DkJamj$CfPleDYFFtQsZRF>2K5HW%IM$y*TxE^J<_Y1}vFLNJ +za4ft~i%7>x(%39T`$~M9_H)s=caAM==y+8t>g(G+8oaeCko8J4fO +zVsY56C@JOR`!-Vo`ks(^&ONXT2%tLmgAdB7zfwu8NTo3R3$)# +z|KYHVp$Wpnc5*muknDX8P=Is6DCUZ{6>YQr3l4E7iq~O +zw6ip$8+O&)1rH|CaBhjF(ulk2m;*h>#|HU@4s4?Eao<(U^e9=icIi)s#m(0@2RiZ8 +z>hP2%mvIQH$QycCVbP8JFdxF?Fus`=vlT4TGPu``AD|Nn#SVsEczrh*1Bi5j@AM1k`NWff)o3mp|_s>DOJc}+sC>?5N`2QB>YdawBA +zDWKwQ!Usn>ZDnsQUCC@!yCwk5>MOm6cyGui<^h+2Z1$*Sv@7&wd$WADLWhuk+1O@t +z3hV`)o5$5wH0cwFy>fOgePk8S2nQ#q5xPDM@wL0JxTCHFUP~t +z*JeHzDx6b%|AoUvyV76W`2XT?b)5dg;d-{wO?zmKY$TT;sg-5e2t~)C-EUjx0;Y^yy&d+47REU4LxZ9u(T9E8^1$PiG# +zh^xlMeLI=-140P7*l|F%D6cToS%UU~HV2IMBG!q~inv{SjMw>^^l+=~{IAw63nYDB +z24sjUM>KZ;+c(9fNRfccFf4gtgZT_m)2YMAjYD^$u~zqQ43{ZLbUks%naF|bp8`|P +z|JLFPD7W5kO+6ed=#$LWZi@H)wzwWnec02HcAn0xyI~*Oij05P@`*Oe+S*wDX(;Ke +zR^g5203pb>bQ%k|-q>P#%atDtxtfSs;RHIAqm|PC>dAS%@I2sg8-SoAM8it00U2#5mQUiLJITh +zQ;J|59tpt^rNzFj%Mv+-wyE}8+XQ53wkT@0Hn~+O4n%_1==)L`JQ&`0LGI?Q=cEJo +zebQ}wbQoG_Mha;(Q(d{rQ#$J5Z88^oWOO9@5+S($GKzFYnc&Q#g`(_56~KE|EA+h! +zD$EPY$kH%%P}CIan}R9Sf}gWET*sPXZrZ}Few`C{BQQzmKoy`t7qvOmt#kB2Q=pkF +z!5{$6-?F9^lw2j_sZAec83R-5X-`R3J4(oyrcoWWZH}XFc6aP +zc~7eesTm|o*iDf34h6OB^7OHd6f{mZIfGM2@iqJX#0B1PnGx;%*CZFxAUF7Zyg}AZ +zKUAI7P+MabaVR8!qTV}8v+^i9YH!@5Ai{- +z*vFWgX!t)Bi4m4XegH2a*I&k1`acEG6;jpij8kL|vtn=X`8n&>JTA`t?Jg!$5g#0Z +zWbw{x3Q3d}WMD#KvOBWLw$qG3TPV-<`~53_IuN#^3K%rofMyIxeYMCTNCrwX^6T`PtzpMb?`BE8>Vf3lCTWyQ$kfd +z*LKk?gg7C(VR$jT^Xh_v-#pFEHNlCuW#l-(Ap;ta#Xv^>uZ-m^LB`ee2TSO +z@P?NR9yxh-;N1QXl1s+h;CWJzJ+pdQnahS4vE;u4xv*$^^PF(GMUYZrOJ5vj3za3= +z=d6aFcm#(SOf!qLFF;L*y#)V^%IHhG7UJbwGlJUEcO2B1SR}(je_s6e6#XLLv-C22-t8*S%H{tuC>#xJF@;{T7xg+MQmBW150=vJLc~AQv#6Ivx=0vd|^PTr>y~6~VP14yOXz +z!*fs&6sB|W4REEy|CPv<02cgTL@uf)U1mq`(q^3)Cy_9yLu`GKN_F+EA} +z>o9*KY=1i;zPR4=#uD8ZT9_Xh=~*um<~rI#%?>YZ7#!kPbLvMP9r-_tTtF=aNjdHq +zqAd=v8@0adf|Q6l+jglpz(&-&o_>G4ywFWO#p`mD17Vm3Td8)krC@#N*&rwyWG*U* +zV7e#%L=}2e+Ht26ae$t?%#4wacwdA*kkazX=qzft>9j0#B$8?Cm}H2 +z|4#Mr0}qOT*{gK+b0QX(!+8&jRJ8fzwd6-Xp1sLU$Qh_LWW;RPeuaX1HpCx)f;Mw1 +zr=#wGcTQeDi`R%apaPJX>cdrC%>W6l?-%7=Ks|HFe}d-yE=f|2xez6+lA9R>Beoql +z2*ijk8cRK(tTlQ_v_)Tu9k=8ex+{!WB;&wOB8N(pM?$BQk1CshBD@Iz0k#X^$rUNi +z$^_jG_Q}S@z{3%r(zOhv9~a~O4w^BE5ScQ+yC{(9Swdwr +zX8KwY5CLNCz*19((#jLhEX5?UzA#gU|9!T8^6xMg0cV1$hj>kvWj3j!g3DW%@>^dy +z*~%gkAaHARchTI9VTu-ysupRLZiCrvtG7n?dRJ4M3xbGXp$1n5qQbP+eNC(~GCh&# +zB7#HlB#0mvnD9b!^{jF6{0~=^au8b1iCvLJCg1ll;SChur6RzW(fw!O(2BYJvU>a +zv6rgLtk&XfqQpZ)&_1I@++K&O6&3lseP +zjILY}rQw@wUK0AhlDSyN15?T(NwH?&m1qCMSc!207K +zfHogBQVt(nyM(Nb@&rlVp18u@M}Brs2VM#4@aa^cZZOxnm)4Xa0shPK@jBiwW;wFZv^Nz~bV~%5SqX0O7Xd-9C)h1Y7|~#JJ^9x<7c&^ttkFn{C9PnR +z#xyaCZPxSWj|EfWBsM2(6kgA7o-1MJ6ioGJSCv&Jw_XqKt-e#qtSyp3+F{}dv^urk +z9!Q)-5J7MBl`!Kj@$|-Bq7E7XD-hRY^(rcrRnaytBu)bPSrDM(K8P_pl#EhiaB@E% +zq|c?j3^_VlNqJ7+QL`#WJc=f3z~g)SsU +z$PJ70t(Pr9OIP8JB5lp54fV_(Htp2co&S&M3KvEqQipe9qdhRLUQeBP$v!iqI57gX +zH@%=>dn~>(+Qz=b9t$@omKmwg-><}>!M^R2k8)?R3^V9uy@e_(`*);^3q#CKn4`|q +zp3)qVPb||Gfq)_$?6xH9^#@*(-A|AF7_1rXpC%-INQ5-4nkEcorOFyI4$_OO4RyZg +z-KB$3Xzy=I3tjMT5#s?UKUU0JZ)QjuO=itnRu-$R`->qzFVbs0yicDRRK=NB|8-Rkr6>{w<0b4 +zw>y9{X5mQmdn1Y@0}G?%qQ4k}rd_vWcS<4)cKXPJiypyQP76z0c`@1Ad$mAOB1a6p +zFnLh2DJyS$&@hY|a)4%FCMGR`LU;~?f##hX!azMN1>j7;t5{BMo-rZINemBVmoB=v +zdZ07$W*Ve^pMXYaNjpPa+)ECK+rBd9*HP7+IF~w>Ym9;np8)8L#oH9fbL{><0T(P)QbAxAbPAdm=k(#S=$P&H&jiy=Jkg>@>F7yMU#gTR*Oo)?2@jm&8PAZZ2*RGy$(aHU)?al4eZ^(jj>d$L+V{UZ6~ +zw*V)Sz1`s)P_ms@E2in{bDUh6U1hN5&%wA&z8O<;@Z18fF7YCuwLBgQ)b-aOiOlbb +zAmh6yFiZ5W3phnF-J@wc^B!TpjR#by->oY(AXn21+ZsNC+E%g!za7y*VZZi{Cz%)Zrs={I4b?ez)`%;?}$h$;B`{TcciSZZ4!b=HB;T +zdt-%rKnKX1gUNIfv +z!*JI8qjqPR2sJa=`0~Mp0v#XxC&(NasGCqB?8CH=0%^2bK@9S1zXL(CHp^B1gXiL- +zs6G7eeXivJeYZ5L+JtFC4{oPG)mNtSTGI~+9u6dy0$JW)I0}17An1;w>T`RU8qyn_ +z6sJrgG?}B#F+T9kE^VL+96bLZ9y6>?e(Xp5y#OQd`lS(rjNlbCInb|!>*CWG;VCz(!mO;3GM1c{(^bL#oeGI8cmgFsm6qCxnik8ZaG~v7yW*` +z1%pwe=xVxHsr!HSxfUi+9#F8gWPt*MA)SC!SVo@2c1l!cB&WmF8uONO5tf(~Osq~A +zH%So2;}ZE +z0U-v{{z(?}Po1j{s)%bEQU>ae5u@CK_}-9Q7_iZYLC+D>kHKRI72`un@g+I`sVT#6 +zj#sE}Iz%}=<3I6SngJ+hF*MQn$04A9W+cMn_Dgn9i+LNd+3;eC&JwXZR9&Ko4s8$=EVx>0!)sSp)&8wqmGCzFL;AcWx@ +zZBATo2p~sZoJtz~N@fGfhyPDJ7iS2Mp)qCPp{IpNhZ(UXT@+s^SxpPEgkn6RF|c8z +zKl;${#{hG55q3^{UvTKg?_GB50i65~82p!JprcLTis$PERSP6pDGoPqMA&R?f +zWq*~9+x$Bh$sOP4Df-dG-SgrQo?_Y|p~CcghDmS^M2E#wo*d{G^N<;ssu4LTWE||y +zGwC3$pRWI!=PJVuWEP&AST(zNaNiYGt9YEmp;mek0Xae|>5n_VGj +zrRS(YtSMo8cdV>|2OH%@04-XsCRoRC41NF^0;27n@ULg*dS>x`RNf^%xneOEa@0A; +zC8!UW>{BK$hoH_g2(?ZF?S_dOJi9W7q4+2wB>A|3jsT0voh%-VuVo{3oHPJSo@b!a<0q1pxU +zgly77RWUkO^nK)PHaO2X|BCFX3jc(q8(4j4vjRjG$4M=DuN8pYYmx4^6|V#B0qbwLE0@! +zcC45$5UZIHG4?cJ +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 +zl;E*70?wK^o{X;$t2enu97MMKnFz!)5iA +zLU*YNifz7>mgLjr-dBH@&Fvw?Xl5bnq(xOzl0{|{r_%Y%xFBmaI@u7MV9`fPYlSPq +zasJ?)I*j@?YLo$?!u9)AHV9g#&gR@hTL68&3*{;&oY|LjsBzLb#jn%9Mt>o)Q-s#% +z>-u}7A85m|^Y8ZOE9n6oazQ+b`It=h_e8O&mEe2xW@Bvi}w|)B`_uG8?dPqzi +z*Ycn2SY(~KF`V0qNeu*g_wqj@jlFjwT+D)f2G|LRxE^K5>JxD{4KhbA#Gg3r<`w1c +zI`H{rJPHl_4x0bg>88DJa_`WuZ@pkqNI#Hgjmyt`)ddG{%Krt9KSg?X5z%LJW!$Os +zVeTaF>wNTo5kq$8UUg8K?l=t>$Bv2{Y$cF8vr3wFDV7OKySTRUFps@xtuvTRL)A%7 +zMLmb_{bNudBOy#@|IkpEDL_gt@yD3FT0Jt|wOG>J`LIIdiB+>xt=mJrXZb+?^YN>D +zf8d1SQB7D1bGXrliKw}ZK68_s-akD1m{wez={%d@ukGE{x!;7jRP*zg*C +z1Iy~qeN(>Lji>g{UFv-3KLwM_mXrRo;V&N)$;KH-M+~Fu_J3p}qD!CX8~>->h|iN` +zA9k<5@I&v9B*|&Q8?gO*t^CY)!YuhoG{g2UTXN$#YsOEA?T3t6oW8H@fbq5|^&hJ_ +zn*jUwt7B|X5hv*Q@`0QW0~7DSa(?F0*UZvDbyxn6lmlU3<;4$QxOP&GBQ~72o#(GN +z_=Ha?g44rk|CEP$_MKO1$ZBQ)U+_JNGQXhE3>v6tkl6318g54L~;r>w`ls!cR@Xwd*eXv^FNXpv&S@%}Lq}LYS +z`pFX4=oq}&R$OMd$H&LRHY;pb0C{mdZ4UqJC^pUx^p{zfv@=E4ztoqt9&KZC)6I_i +zJ>^e7biMbAohvzTpBIkXHEtj6**Nj5s=WlEmDyt>{9n&1cLFjGEh`z(Za^ +zd2ozx0RD%rYlro<%O|9|jRoztrskDbH)mhuc_05kUo-i@MmAd?_AIuIEMcw~OCH{f +zi(*#7br7Yhm3p5A3_e!>PP?7ymSOWHALn!5k?c__(lMWo+-5?g9FhG|K}VXEuo +zd^_-2CyiHc?e78waJywxXV(aJ9gPyI=lh#dpW%QuNh5%9AWNaKL-Qxp*YRlXYki>b +z)S-XG{EQQ&)IL>Ze@P@a#c_dj%Qpo0-ni*Qw| +z6D?)Ah`ud`Hp7zaw8(mlzgl+I!QAvUfZ%g%_4WIzVf)rXt>P=XzcQ!ByV$rE?#coE +zPo*cr;0+o9?3P-{y`X~-OqGwO%3?|N0ylg-I#6ZW4?sxAXwq}8gckXTnyZol_ +z*D_+utNqud{^vHLFH4Hd4}6PdJI~hIkHcV!-;&+wbEMYG*NYaMPq3s^3Qsh)Zp9D{$WBj)Y9}F;3XTgo5u|%TgdT +z!3xF&!+dt{Q=zJ{o=6F|2#oMjF;|n&)2I!(5HU9zAS5&k2sc~CDXB>#3zq`JmqLvh +zq17mJcS0yZP8XybTfu788)T-I*$L`F)AT+He@b^zcUvZUSC24FIqC@NWYK`DUyWjG +zW~zoACy~S)gcKZNFli>F$}5?Xh#$y|RDQOAbUAtxkKD>6xL|6pw}&iH +zky12$2hU1l} +z%h?IT2!C)^<@od;cnKhn-nobqM4BW(sV!vq{7k6R8JCVDhD`*T9Y( +zm`AKRbI8lt);F6pI`qZ7z0<>{C5(f@Fn$SL$FWMprF-w>ONij_7`4=XUDN?if}mBh +zE3S1Oaf685Ukw#Nn4?@-SCe3b6b&j7a?#OhDg`xl-36!+;n~tMJcl3hY$#PuL2VPK +z64IN*@MTXMpO{@?O)Q$MsBl`y0{5c?y{M^(= +z5(2Z2GCnLjuD`An3+G&p3^p`1Gd2WgPX08-O?F@fpWsaYxD{}H0tp8)L3;c`?r=Gu;NcUFIU7dz#=0ZJW*3$0ym)k!6P%qQV +z7?Tl-x7Eds)A(nqF3MgnkOi7v;Ecc6A=i50{rr_I!pX2&6i#wmr-HXz7G7(9Sl(tI +z*cZ$|O4OUpBX(sYA#dDMHUq0$9o`Rb_{Am;cHUTeUJuJI67&Lx_&YVgis(spB?@YH +z?pn?1uJXjBh?RC)C3sp@frqp@{OR0?JN7S|bNsgL8F>xPUS86qN^G6h_GYwZQVBYQ +zo*&&7#u&~)=AvUPbxp8l6l6YKYX{7e?h(GUT8=SJ{xddcJb=Fz3& +z1U^UlmH<`X;3YA$ON455;ITh;LeytVy~ +zBHUpLPZ!+4QSPk)SFAYZl@PZrWdkQIyflu|IeOfOW`x)*u&eit-|N2QsYSYfAv+j_ +zXMLY=A6T3!h&Vkp)jd5Ux?6|~@8RMoktJT2)4hFk8%*s5mpaz0O~!A|0%`TO2lL$K +zfiXq7)%PUDG>~yAo^TcW6;#_Z-F#LRJsBeTuDJ67lP>2`V5)jzTFKQh02YDJx_6k~ +zql(43<#8pg4BcPP=Hq7fWdXX8>H?D?+h{8lqgHZD^dcqM)wgRyK&eyLV-L}xH$(aF +z1X3A`iX$yXhq!i8bVR)PV|0RGYfV3=eja&9^FwDnc8EBPWo=m%Uv~KY8c+e@(r2W2 +zn+8V9v6l_R&&X0AsV3uoQNViCME)6d+2Q-QrZwQytV4T=?;Tqfebz+1yn7t+`g7Ip +zHTI=+^lMf1t)l||=pgG$i;>-ty{SE;G}DZ?8smPoz0UtR>NURDSN?fa%CRIb^oMin +zZd`(matm~*K#6v_E0OT4f5Y3i0$Ff%farbSvHd};%O}6>GZFcjxJ)#^>{^hUMo*OL +zxNr#_j!}V7S9qxPn+N({{g%}L%)&`AkgUBIhfSNP_iZB +zwEQS3Bd4XGchxRU@Yg#jf2T${FK2IW`kXQG1CnJWFw7HM0UB4;5tN(KOJRx6p@OES +zjp_%%pah +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 +zdSuSvJgZbY6}y# +z%GrSmQZ}dau~(wdgwr?`EE;#M1Zd1_0*kh*CXP4TS2Ii4)mA1a#KFqrFuD)4yIY3v +zlm=L`bbGd%EiBnyL@X56TSWt=&4=lHmTJ(sx+sE8iCS4f0Hl%Eo^q4q_CPmL<7wCR +zZ+P~J7?4lhwZt{%iJqAt(dWP`XKL9B?p<2v5PKZN?u4$SMnVhuzWhN0l{KIH0oWt5avV +zHSd@3a(=2_{g{_upBeOrJ^1M5H)mcx)BNpC5TtInGQ(JMZbQw_j{FN*KyYsU1% +z>{m3O2RjIN-kikNdLHXrX+-a@KCM+IQY^3uK@m#Z^pN9^hTNdQJgluZ5t;_kme;D; +z*O|#uS3G>v*RQ^b@EUX#qigN59vC2Aos}kRai7-Ut3jv-!cO%K0rftx(ZM^|AKW39 +z{4i=^{tGPz+aLee>fhJ`=gkLOy#8Q|S08Nga^8Z4k^htC^N)pndiR~$$j_VMl(Gc) +zi{JkGJC>Zzx``}n=kK!dFa|MF(*NnRKui09fuNoWe>l1VVvDKlITjvq{S#3U=Ui5m +z&3V@l(ABUF^6oyK;^FAH8={X8_&3BFAc{5Hzbo?euG`to##xX^?EnXV@iz_Vs;vwA +z+g~djvWs}-vK@jnk2XL=fesu`{(0**(Mqx%-*0~VYnl%cv)F*Y`SxY=^nWN1`!_6` +zKse|zvb!z_yNj{oBB8>%7$(GeGl>-r=ldF=+>6l$FfD?PF%i#%mdHnu|BedXi6J&5 +zFx%)F*dnO<8c%rGB)r(kwl~{56)IcPR*0h+Aq6a*|i+{v&%lkg&738zdKi0ky75|C?E>cUuFs-#aHtT<~tII(6F +zn&MZV{TByYxz7lsKBL!~!omLgtlRSEpI5}?oUbkFx_Ku@mQHoA#bUI!bz +zJ>ex^!zyVNi$j8(sQvuI-rf_Qdx^L&`B8bd6N36pKN4HknX9o=n*z~}x{QKy-j847nF$eZP +z4vCdz$SjIt`3O$qBcowU6*{!`KoH@IM~U{ +zz+JFEI9j{cUebXLEDuQbJn=PZ4l<^Vx2Av#(`>Nnl|lQmjYY1 +z-97FwIvP5LM^hR)BuVh@c>C&AX(|n0-_&~;cZ5(%k2Nif*ghZjLkwO4g6iB*nA?<3W81OF?|Nh2C#vk$_NJSH|x73#7yg$T#) +zO|vgu$h^YAUIgQ(1Y5LtK0GA0P=fw%Y~Gbl&88Y#rRLPQLLE%@>d>IJthMA*tK7b> +z=w7ImmnRA&+tZXdbof2pLYawbfv%~9mb%{8gSw5uvLk9k-|fv)RB&wBcMs=YY+&)b +ze)QQ>2s{CMbI~}RJvHWwGlC$T8`bUVl4~Op2TX?l`)gSNz?4>GO +zTy85JKV8#^u+e(6AnSzFSvr&rDx3AC5c+>wh*#$0KRkAcE6tmEOsGj;FJH||rq9rgvL6t; +z2dq`Cl)gJxx-9%|{d?2Gh@@GR2YTjQ%_8T^wa>5uW39`7`|6FgY5wZv+pk__Z@+r;CDpPTPn*yqlj*

bJikXxSp-9W-RW4Gr(kz4ZFhOZb-Dm-LF+5E`#RvC3`whu?Hr +z>ze-l!pocE$G(~OYj3{D`)giCzHUtsPh3_A +zKQleTHv9VZmv-~^>o4=om#^P^^`Rp?KfGK!JHpLxU%h?(&DSqKZ{%Nac|45CVP0RE +z>P2q<_J1^R6(vUSxBq1Oe*iU)+-Lt|vmruczQJ8rBn%;R&xDU${DAF#;ty=vpZEi= +z`avJ~ft~k1@#r6$pZEjA{-^%HPYpqt`Kdqf!yxE~eZambYWKpG%^&n4eJTs!59T?# +z(COF{G2`DyPiBap$|wKSZT+vR@V|@=wI;k(jqg7^Hqpbdk9zh$^U#GGUksgX!q99N +z+VyAW{`6u?Om+UZU;F|39hzfDG;)u4?JSd@t?T6h({L7x{{8A!jKjWmV8kWX$@_tB +zO_2|t!5MaVSpT4wRA#+ihtc^cM(``?p@sDxnqBh6L-$6nM@^kEAH%phS1yCxxkWwX +z91Mz$=0E9`veNe_yG>U5{$v-)O5Z>54*6kyf2u2FrSDI6d#v>R$u5qyzJEeE`DE9{ +zTHikrocv$kC1;L1P$0jt=;wu$y!hfp+SbPop3~ez_u?PU_I3`n3S+c3+CR-#{_w?% +z++Ocj=4ui$E7M +z@R^INya`vi-Cmp%P3IrJ;|Z-p4N(yzEwI}CM^XhJy)x%!Vj7FtsO8IF(5%+UvMI^7 +zN{~%RysEh7?D48V!%$@>02p#kP5YSacAWn{59Afz$rEHu;Mkr$1|7 +z_!^e&CR+Ni>&xPA|DsOV)u5tJU+~Jjzpyf9g8&h41u0Fz}@)txE{puQC-T4}Xsl9w +zRXjbvJq&LD<(npZn8_!;c)`B1f}L+G_2HFDb}&0FUG-y+-e1<*%oc+UnBfWig8gfL +z2V=nY#cvpI{RoH|hqFGBE6~*?&B_m7&#UO6xmxI{YoLYrE`R*nFaCq*M~1%sB(jgc +zETB2RJg#j1_7mLdfBDPt^rCrsaa##miSC6P-u&UB9QT*CAgQSn5PR_DtU8ww1Nv>! +zzfZ!mzlCmi1r+k|W&%6?&b92r)1N+Y_&%(*|0`X_bB0m8`n$&d!#|%_WBv86 +z&v`!Vi$BmBy)(sc`*yJB^!b0qE2B?e+-`GP1I8l1==orY{SyZP;_*Z-ma?Wl{xlXZ^+kAFCM!WPY}qBGJ)A=B+BY*4Z+%-s@#o<#(fOd +z*+nwzVi_sbhi=WgKYT%@G|Jy*h684P^VOGMzI^%W>(?*8e)aOro7Z!?dP-pbh!1`H +z<+oqH{^l$C-Zw8_e)Ia(5BgAuM61j40AYCN@)yX@x|K9KXIFGTaU +z>ym@;yyKJ!82Xuxme%zz^1PfeWzjq1&(HtvbH^zd#G5<>pXnqq!>@loYg=^^?@Jm^ +zE908a{?lg~>q&yw&O6H80j^PJ`$CMTSIeT;%c3{SqPNSUFPBAMEsMTh3{nH%Ni-Ub +z_lE#hku%+VY7cCt+1ni2$-k-U{y&PtIwA*)v-)SRny3E*4*QF*@sepOwlVNjze!fs +zZ@qDPsqs}kUh1ja$z$R{Gx0g#Ce73#?crbRt{1THaU*bv^HNwaJ`sTq475(`%x$cZeSQ +z&SUL$KJt%y_w4vi|6}HQOWk)+i`o&7@i2O`os0u2)_%#{|8W{J_xnFaF>}BF<7VJM +zEc(DH)XpRI#V5{;-|S2(PSp>6`~9T>@OQ>I_Ufow>> +z`tEhKCfvb59rzJmx>^Lb9?XILi@$f%=XtL*tlwP!;YGi}ipqkb_l{MXA*-pS=R*$?&xkYS&f-Y1$s~!6# +zB6j}fu5O+=itXjvMW^wLAWY}qlu0hT5#a%Avd;zCRHeaO4vMd%N +zn!2B?pI$VfOYre$IMN7IUz9Io+<*K2w=rf}Ld9&;=;oy95R#=f%_4EXg7nR<)<8A6hD-6) +zx36BU)DS`1A%TVB?`4CbO-)62oiJ&$%91mHtd`sKY?tnMrn9qeNJY}xZYcV0r2$>} +zo$*Oc7FW#1wur>PHk6Xq>|m?a<(yW&kkHxPi~lOc{}&a@t^LCL49Hs*Vh<5rn!B~b +z$LXa7s$b9|%|BUzE@Gbepkcs?56tb;eA`S>x6X1x9&VInFLd>Y5}gB5QP?K}L0P#M +z2*|H(cl~^LL@#&d{h84bqd*%g=}+}@D}ctSjMzPUT6HR$9-)3DV&)5`n_tZL(bC~L +z^Ysk0oJ2>q7kbzc>rsR@tD`L3#`^4u>n#9JO*>rbq~Fy8v0_<$zR3oW@#->N0|QXa +zZlwZ&Giah3Z#uVT4WvhFNaJI-Zg!}mb2B+5lLIk70wc69V0#9}6NsGx +z=M)YnAQu7I8L(Odqy^YqxZ`fH@JoY*Uw!wDV4x>uHk!ZJ&mGjph^0AR2Qt%IUbKBe`%`KItcX{TH9+3-dm^QSmfXCT@>R +zX={XbH#CM>lhuR8{n@sDK2N*?QLMfTF1dAk`frWCw^f}XVsD2Cv9rp`Hb!{s1$yY) +zdN{0Aw5D-65a>B(@Ojvq$2AlMq>h*C +zuWp8_a{WU$@6XR;j@`rj&d=Ls=j)oqcM6-EH9iiDoSA{ny?tosUqj{2?1#&nGpFq1 +z^=&SK5P?{Ax&C<$Wz+idq1(;@yKv>fX*{^a;YO%h^lRqh3XAt}n6DjAH4sz}<>_*L +zGhdIWem94i$-58L^GbC?w3%t0SrrRV{T^{D*G^r0y4qpoP1BlkjSWZLLwaFh7sn!+ +z#&&+1qB^(s9+Y`d56qV>KE@Z8^l{G7&$gpKp076-xB9`&;m2c)-6xQrO>U>?KAPV^ +z(>rH*%gpYT*-bLJJEGfSc|Sxq!t@T9Vf_i7A2ItJmrt?x6kjhf^a@U%VBsm=onqP% +zw~p9!{N5B}PH|*}6=!&Gg83%6Zid~K_-u*6R&dr7OHJ_71QRWB&l1~A@yi0EEOE#T +zYs~P(6f<~SFg^X#^FBS{(=$Ci#nW@UJgL*Oxj2o{`Mac +z>Fb@@T+2Y-4&UwY-45T6I(+eF&RLD9ZkX3?kW0RrQ|&xc?rY9^M1AFR#xET@TG@x) +zoIAt31(MIafx7LSxB3X`c(Mr7Y5R%BQ=3j^9DY3D=@2gv5I^U)Cx>cr>h^@}cEIF)fRxd=Ilj@bDAJy;X2Z8Domn~#mV-<#+U#MLHxmop`2ANhbNRDasLUcQ= +zULgOmdLdP&Do0zpM4-N6O$FlX7Wm0mEKs7aSl}IBu|PSGbvmI1SE{$rn6K$LPzeHd +zd8LG!#dR{)tc+c2R@PN(R?t{nxsZ%Ul`9BrQoFb!CbbK>_@s6rQ6FpP0`pL_xa>mB +zW{&^InzJ)lXu?9x;`&03aEnWEzOP%z$bCgMU!~(o7}%yY#5yl-!;iQD=6Eo|d^23P +zz-|kCw!mOZoHfN#6TCFXL<`)rz%~o~vcM<{95TTg5uTW0h6oo#r$0LH(FtFi>Deic +z&ux5CtRIp?hAywsd~n)6F@4(UUph+n|$ +z!wLKZ{ySq|7Z!HbC^N0KZI^Uw4CqH)@Ns_^QShRnFWMhh#^Ni*XYfpAy5^$bE8l2zBcEU>E1g~#(pu|Z +zefR2>2+`X5;QA#`>dWV3ww5p0IxSxuSzo^JN6_*){p`zE7~!aD&J&GQ3krX%TCkgA +z)q;;2s}@3lP_^*t2^CApKvcKjyP~><1zA+L;K-u7g;XG_TgXr1x(j_SgaJ`qe`bCQ +z;MVd5@2BN!){`h-oL66d1{}*Xo3s#zX!$~ppydm`)|a1ae`Y)jse_c8c1x$&Rc4(% +zmqux8I>~9i1f!3@72$x7M|wQOUcCKhjDWJCI@bE#3qMoa*QJQnI4tt;g}wW +z=>eF6{1nKiU_AxoDd>*CI)dj2kRu3=KsSQf2v{R1jleU4%LpJNNSpzJwQawE&2Rhp +zm$;vF-%6MS(eL+3&6%t}2{jOPb_s5xRy3M7+>{vlzAp3Ht4rsDX-#^p+kSUiy+50+ +z#vfT;`%%^97gxN3ZRTjm)v7-#YA;l}3^9n(bahCR+I4q;xWU4kpfZi^SK};vjIrr# +z5@1PFHZgX0uhAugl6xEapC$?FFd%i<$<3{acaY9>Gvl`LIgIp*F~I&NccU +zL)+JNk*=Sc9}W+*A)Oh-?6Vg(=HvRK6_WTTUA^h+N@J$c45lX`swCugp}sm_*A(aL +z9-Bqo$HaJuhB+T|JjQrT@fa?w?vL)87FvQS^rqP3&niaxn9E?&-=+It+K>h$u96-| +zsLysNm--y3H+=y=%*%})4s}tTmbGTz52k>7>hmAI_{00bwx{3D-tWzBcs$>KWgcAz +zXWerRo-OX^yARJ? +z+x_ah*WzD@nEfl^fNa+%-qLkGNUl^X*VQ_CaT$5280_91-STspDP3N7D-|%X-4v(S +zZy>$-Wg)a!!L-?uhj6IASn_Bkm{ksR$x +ze{`Pu(p5umSJ$;Xxw2e=yviN{2O4f;cB3ifBMiafRoY(H9c)X$?+DUY>fIwYav_ML +zii7EGvTsebw-t5KIhZ)Ft`ls!*E+$+*S4@jM93QOvxt}CqXjHQKy`yd^t2}IF$Y_$ +zL070*ksJD&Re@fpTngv3YDM%TH3`F2x7zX07G_8ZDGu$*!4BKBvXAlludV38_Cvb@ +zI){SbqF)=Y)YxjZuErD>3r)ptZPTcHbu+2FTkU7C{K5k1a7DLP!zg)eNq01++?)WV +zt6)PQ(*Y}XOKYI9Y9VJEt3Jtnq!-HU3YlIS(`zEW7^16Siu@<&UJ-nZ(x*s#g0@FQ +zJ)-6j8Bfsfh;U;R>yhdz8jTU>h$`pEae)p;1n5!T9J?*?S%kqpfU`y{HR7ch6UDeE +z#x^m2i80CyhfJ_Wj3?GH!yFe(Pyh0~k0(4n)6-KN&h2d-FzEZ3R}3xl`vyt)q-uK-ssA)EBhI07VjXizcEW2?2lOYc+it! +z#siCoGJgER8vmGHX+1@rZS&Tea*ZqSH4DzgS1e&&D;8{%uUHtNNR?bB1AMpJrS~r(8~;=L?|Re8Y7wrh#^J= +z;qZs!9u9ao(%}$?V;c@?IGVG=I6Z#T12;Wl(?c~qM&rR*J1XPh7>~nv07j4>fqVki +zBOphhI|Azno+ChBxchIAc7wD}328(Rs@fekTAzr&_g!7$??W3J!Pg^ykJMAu@<#kv +z_Stv$A;vefqtS@gzo@fS6=>O>t10UDtL4wG*||>?fHr(P9>@6Q=vxwh-JV2nwit+j4;H?z?1fIytgpMBOC{UK*;f7G^|n6WWM9#3xIL|mgtJ!D +zdwrctE`jw9=nHM_alx4;E{7HO+3LD&T{nTpGYwA<2J-z?n5D{;cArkqdSwL*P$U4f +z>-9%EO5+&T3@TDv<&zfYMwzx*f4I~@4pw9B`iJ6^wOWtld#_hnFseizM<^S5yS_}e +zxqunU)ArD3s~zw9jFUHBcy~8!ceDkoxq!-3QCC}-dv}+X2Hii~wq6~2Yh9Jv)uahj +z>3W|Q=uF?8%`R>W6C&}cnhS*OQ^Lo#Kg?^6yrt*Y2C{KN+;pb1T@8)oa(dc?cAzEr +zy3nG}WfRh&!)ngWQfI9$4d<{qss;Y?WA6v|gq=Lwhpbj%t9mv2;9@b)^fKf`_+7q4 +zx}mj4D;Q=jSi!RQ^Pyavbl(mKM{k_}p1(YnpVJz@@+;FmBBEdqPU(FAW1G;?`L^}( +zch^gZ1dKC=}-NvP>Gy!2R +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 +zG=cUVA%ELE^m- +z+v}RS>zX}Y*X+9GO|M(t^mJ9T?7HR6uH4k@I`GY|+lK7AZ6KEAs%F>iR(9Q)$*wyy +zS#@2r`oYxKwoH%Lw#@cdw`{L%>8{*jYI)^KavYf}TRt||w%lKb5zzALxfjRaP5VR +zrq>>e^7{LQZ40h$di`!?*H0_IegO75YMGl}58C!hB8Hl7uA|w|bbCDzZm&OE+v~@= +zyB6P;50BR(GHQDLZtbsMf&JC^@u5hsZ+bltme;R9dHoiYPuDlSeyr8C7ZeA6xw`4~ +zKv-Q%ZIusKvcVb0(YU_pwbwp1y?zCn>*2Mz{%keZ-v!O}F!28R#cHp|+THcNcGn-n +z?)ok0uH_9lY|^z&`|GiGfBnVTU%#>a_2_N5ehY@{!R2uM#d$SJUBWQ@s-{=&)OF-d +ze%<);>-Idq?jYyap|SkBDcI|#V6S5}QTnE+L>%eq--AuRFVTkQ@*kOC! +zOt;tFV%sYht^cuYvpQ> +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 +z?SEq`cPwMKUn?`n`Oj&gjFpD}5T#x! +zL$_ulvtDDje(gs{KK89L!*Rr8`?>8qz1d#=ikh39qqd+D#xMjKPl)Y1V^^e{4(%U> +z-tWAxf&{NVRuAJeGU#)!dH-R@LL&34sa_c91z;greaHS)t?}QJ;k(T6pavWnEB)VG +zySoh6r>Gp#@{|I)z6j&?Un{@WkDyE*xl878X_H2d-299OoR!V8~di4 +zpC$qd%(17y^!|;SIf+!gq`fKn9GANPvM1iRvm+g8$3LeB-EbgTnd5Aj +zbX5nxyr(A`^a;n2BIG~5dcX^mcv%tzBul$@Mo>R&PP$!C08bwn0Xu1Y>jOyEdkN1{ +zdu{IVMh$eOm!C$@uQOur?>v|lALMpX +z&<$N;1SD_Yi{gOvN5HkjFr4?fw-)gZOgiQQ>-xYI>9Yk*JWQD2i;tFVHw>LF@Swt^ +zAd~N1ngZNa7F-%j*m9D;xvWPXqxSN6C+T51xvSj4&tQ55;~MMru1&$=$p`M52+oax +z(b=<)cOM*w6O=i#4|gqEG8Aqv$(%g2IQJ4d+CQ1NYx(Z|OKJrk(bMz)BEWHT^$)-k +z;J~{M)6+AgQjkOSY0XISUjZScr%+1CIpsQ;e?VX^5SjsF +zK-wpHEWs;QaJ?eif+{;H!DuEq_ZFI^FigGk9Ce$A*4iO>wHyAA^oG1irx{Qgm;y8j99eFe`1{7WnP2T1u@2&O;| +z6s#2T4`Y4-jt>L5UA;$p_Ex>I@EH7OJ`@3lt9x%8klBO6n3&-5060GWpRws)z%z+3 +z;Q7Q`YwPk~W$5vSRgmmquw(i^dgWa`{T{5|=(qZ6tzE&)4?@%HMmw)h+=n6km;lKX +zJ}`Eq37dG@r%@ +zV4->T+13M+ht|wLH0rj3%=SMiA2)!MuKy_JxAiJ#u#Db*WhX!X%jl{fSorrJCFiF8 +z!^J-y(Q7?q?IknG?KOJ@WDJ5K$h2%guMU;k5` +zle;PHE>AZ1(x(HIkrTyKa52gB`FzV2<@zs_Qsyt{Yjxr;ivl +zFZ8nA965iwplWYv~hjllTBIq=2(wGNvIM2YX?dyNuF6qjOfZPUz*76pwgfWFe|@mK*u$ +z{qJL8Rn+MB{_Yz4+0PrX2zxyIynbl;Cq!pE#^9A#XDi+A1V0QgHRfyZg8i@xIbGZ+ +zkM!jx)D)!&wKS|wGJ@9w?~pC?FNq8PWN&iz(mRI7<%p#ZSp_FP>Y<)r;N=@oKoS|) +zS}%)x?(6N_DS0-|$`PXT>P~nVOd8|OLqSR7oIcydxGa})*8SpW5i!EUjCdLI9!4}R +z%)O%hCLh;#6deB>^?I~@RV^G7x3enT)7P&SOBg{8&PHyo{;O~jcDtS2M(#{CJXeq2 +zd-@PmGE-bj`I&TYeW;WNnkQJ3y;3vctXjecbO^phj@HKZl({&~UvMGq2K-6iet5;z;X8?uxyq3L$dcHgkRfeQoaK?B^ +z>D-Gd&&aA&j8R&{2Z<}>oP}Lu$o1Byu>OH(Je3$uQZXX7*`Spby0|R7kBx0~O+5*n +z$QLTjIJe~xaoWb%E`KG==qkSI)6iCtgXrAl`%Sfwi7eYadpOvP-D1IX{vUKvlIH{?Ki;;>V!=uF5(}ysCw8r~%e5a42mymM+uRi`L0x(KbE0^pK>yvUW^o@(L$z2keAUcY +zIHu{ZgK*Iy8cO(TU4<^1al7&oQH>x8r%o_$>&rQ7@hU;#!ddTUdG8{|W)__)y7;969=W$8L3RTZr+&6L8>20H923XVF#1qnfhWdXZ?SjL +zA4}0n^AC@nWb6%X9pBDFV^|ofu^%E18uCph7>!L2`$hn%YrO4#xef=jf^zWd=|^0X +zp7H^9btSYl^&|`EiJ1uJcDAHMDL;rqk)!H5S5z +z_z-N&6WGALqh|6&=s)OdTmb_pL)OPt=s?Bs>rlEeL>Z_ZwjH1qNX#s<3RL_@`2JE-ZN(PrZbrMcD>GUjX +zt0XhnL_Lmuaha%QK%8qtbm)KZb=#mp#j*!_ +zIJ|MIdN`s@pS_eJP6{h+^?a^jeC**Fz6mp2vYIc%ZiWw5ZI1t2K;0MvuQ$cDHaFP*G2D +z*yX^3nxvseU(v1-@yb3MkTg$AfWoIS%EL$!!%(X3@)S{PKb^RcZ;MlnHWZswI!WlR +zHfR+lh2U`=%wPMVtDe1mARR00$}R%RcA)!wcVdW#2w9I6V22547gY@zi|)u4T4eB| +zQLfCGXdxO&vJk`?IiXpIPMsEsNd#V51ui`x1jhWyK97wOOfPr&CFRAi@;U4$)oGQd +z|KpQZ6M`;uQNusz?{UWRUBRLqq996rMdN{D(24iAShSX6q@i28HO<1%YKo+7zHphU +zRuO%fg;ibh@hwhCFh&NxOp_5D4zYavuR4{Ll&R?}FEi=&!xYV|GmDWAI~l*dtvI7T +zJ>}irvnubqG%`o{(#h`RHsk-xG*@=|gjy|lv9e$Z*^z|r%ME)x_}OePMfoX9l?DM3<#h_ +zczNVh_E3aBVRqL{snwf5PU=s@p4?6)uN_(C>VCIgZ#B=srMJ6-4J8dy;bfH_{@mV^ +zZt7YuLWcx~$AL$NS{9=8+=s-imQj6>P!AN5dVhJI$=5xB5r>Ln-IaY#O1F6LOr_Dd +zKhuuSlb446?pZ4B`dO-_(dW;;Ng;|$(QGc2(ojM56`PxQW(%Dm_Sj&OquzgGC<@)R +zea1={F_1mE?|e?IOOb@^C0EbZJd#;b=xs$EAqk}?pp0m4jDUd;0o1#hfD!6R6^qg^ +zX*PB1rw20?fS>rTvG}%jhnf7|=6DPLIO$!%{n1rin?|d2rroj^Z%NfnJ7O9e>7uN~ +zxopFw8JxTmV+Ep|1OaCYwePD(!=7VErH%eF?gEEbQGEWSisNkHbqD>xS2HC-772$@ +z9C3$hcg~GO4AE?r1MfBGTDFEQYs+~LO%`?@e7cX`2v0? +zvRz}c8bFEji}#jNmfZQz<*#pq3xwW+SMrl)Ya=V1a-TVc{4#FMkT7#$7AoMqxS~n~ +zl!z+wrOxZ#14hM`l51v|c7%Bj?G2>2lT#CK6vEhON-J)HQ)yNEn%HtUZJ9}rw&5|l +z@*Vz$B=N|S5lU16#V4gAED-k{BErVGELa#kglt(DKCj!cFles(@iDlgFeOxspNL&9 +zBIpnf*p@CX4q>QH2@qSEoL-FMx!F-o?!8X*TjH(BmTzoMh&m(NQ890=k27VWzRWVS +zolkY7FLJf1U!)#6S5a+%J7`Z8y72$1+?Db=I6D2F_i{P>U{>yXJGV1BECA34?dS~& +z0#c7pwxz<{p4<(Y9Ak#!i+%WM>TO6ABCk#_p1)=-ri8V^p3bKP0XkPpLl|>o0>t^A +zxkz8K!^8Sd^hLL$dm~s7>6qz1mtFC6PN-B +zOhaC)emug{uVaYuxBBwcrEiV_q?@}XQEA^4+#M|2c1oD2Qg`)b*$2+IW}T_)hr3e0 +z>AAB|ZEX(FXk^`MJmFwi?&-^-akg{2{KhEw!X!UonU@`i1MId4Xn!5(_de2>l|>ZO +zrm`evoDe<|1?9B+vGjn?w|0kar8nVrVq6cgBaCHi^?GT(jD3bw1@T8zF~AR9;gVP}aYfk*HAA&x8g +z5sv3~_X9$^p#5Dp2o3?2pU?iFI|Ys!rJc)uxmzDj;tM~!{X{o4oEdU^_0WswbLG&c +zCx6AzfTy?Ba7l2x#clTSPFZN~$7cb{V2~Ds1dIskp?FZLRVk6zApKMp+WDJiZlPW#jdUm +zzjr;C{Ha0H);a9NX>oJpgttK$*l28lk(}&fm@A{USY +zvaluE+wgd=EQZ=s5B*r)C*WaCkM}Eq&enSc9hI;Ma?RAS8THi3r;DaxJ*s#s0!tIL +zaA&RyzU=yk5$d%qL80pwX$DuDz7ksCkg$fYc-dIkWzK?feueVjRcp_v&4zStIwua; +z3gOM$u(<{VOjdaEwp@1xQA6eKybW0#LDaVlcivFbe6I#Rjxru)3wMr (!0krF?S +znuK5+Hq)84wlK{yFD{OF*RvwdnN!^w<`hRm@adW=5QocX4;BVTv`P>`#-eVDzp%vShPb@~wIQR?W40oBj?k&Ad@4~oFh=57GD +z?j^Lr!_?|*00FUG?wHdc9SaRPgyj)uQXuN~fF+A5g(g62lPO@d>xXErH-^t!+e3?@X6(tp#Qaw9WM>6QMhAGSTKe3@)WR +z@7|i#t7p-tu=CyQn9WrIKSZ;MZy+~xZ|XWXB~R)Uw|IAIFVupQKi&ed#R#m|KP*qf +zTt!CQzaya*uIIM%CEACup8N_Y8m$nKa`~QtQaGLayd;&G6}cpplts8C6`fVSDD?-< +zqdMU~zO<@@OWu~sgdN_ciiCOIhw_ABUcB;zR$iX6gmPZZ(gXmnM+p<@jY(c7=4^_W +zc>JVfBc2SK(Sr$nO{7U;jS6eB$YZ>O{`|fSj*mwklkl}kaA)FF3esczkL5Q+WIWZ^ACmKYTPwS +z?(*%XIBHYl@_4n6K_9#}CMTt}h{nBrN#6j&`K}OD6K=)k7|k(+l&+)2(wWROUzs~@ +zJ?ZNMQXoQ1Fac_Hb(WRBp%mw(dCFK|-ANSblId_Z+hz!t6KC1EV*tzML_agenyl;y +z4B&?WkzT7A3G3rZ@#n6F(4$TQaMZc!PxDE4HWqzYwFfW$hGL*&t;r)}tO8>&^TN16O^QDksLFC(9TVykz +z;ln;95^?C8ysJ+tu88p4$`iGK`GU~I#lww4xu5up@WhJ|M +zJqWZmbAg|Rh9u|hhcF~$_H8D?ige^b(}i(Kth{mR2-C8XxI#{d%6sswv36gezLt%3 +zR~eJ$LDL=kzntGU&0ib|^Ybsh%kCoA)km^A;OM2d9hA$WMy5uHjuB6kDme3sDyGvs +z^HDmRgT9ClFDdL>t?N;?Mmgf`(XNpq?Kgj=G82e!Obh3qv0=Qsa`_sy2*!baK6L}F +z4;Z6@KqHdKC}5T0+CchU@sL-fdF +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 +zwL> +z8W|P0GWBWu!pP8iSFI9en&tz@e8QAuFEZV)JRM5ea_^E>D%NjTH*-Bdx~(wI{i-k< +zbTVAUX9A-?nNFhN%xGE9MPr5$k_{gYSf-^02mVGlHe(kGc<27$-Qh!i^~tOGeOlu# +zt)*#!qUoezt6*mbv>b)J>%mP%%7a)fK$Wm? +zJ+QV)HbvG(Pw@N`gz*B`kR9w?Dw!iIILJ&oR~_(~&m&LpqNVxvy8!1&1g|vJlssAE +z5Ff#16qK#VvOZmTt$mRU^!=10tJMR`3=7jjE8_RLyLg@h@(GUM;?+ZAE7fA99W%X- +z)6j8ft$>X3Y6I(-K$5m*21c7?t^N_m+5Sj)%wO{+Q9`xc00;*fwLhMjwRI(4Oz4No +zN~wgR;1BNB7&gCYbh4aenpHTp*9^WF1JEm40;b#wlBd7I4gtM6QQK_(#U~m3!0mD` +zJJu+xL90*HZd~gc%q{csqftUu6GI;wv};byR-}9}L`VAGJCm%Kllb5B`45)A{|#korQXFwCGC_4AK*vHYEH^K?tjFfdcf*(IBnjLiM#tY=J4g{FZJd&cjH<}C(qlP6+7rU( +zQD({s&GykwNsG3-9`MS^!Vj({J}4aP^qE232&qf~0wxV+gq8Zso<=&TSpzEVq?W)Y +zvs6Y@bR4+A5$@Ev!OYau`(;-mrfIdl@|Ie&?-cKY8wBT`9P8fwB>oR8BShO_5S=@mdmi +zL(jt9gWXMJr|J*X)}3mB8{C%u8YKHRZ*ppB;_b)kCdJx{c%bhVdB#qKgY&W+HjUN4 +zy#v^E@J>7DZeh`A$KGFh^@4v5!}2pP)vq1`;jQk`A1Plw1VnjHqY2i#qRK+pT#q!j +zuMv^17svUHWB|C43YtL(MeDgfcMklA{YuMRLnzjjJDl}pQLvYbq-h4vXKuMWzs;8y=ozsWn56 +z!ZsS~?|+_ZV!1{}G_vaHreL0aGE02wgcni*16%JUH;K*XfGT@&zWj;-d+e(KUcNa^ +zgzy8&C;nVR`I}+o(XC(PgvCBatF~%?2rMixRIT&uz9g0MOjwi?PaOTwn?9&d%N=E% +zlQB(-;rU`zE*|L|RPvKK=@FRsBI=v{bp{xJFS>F%Hfz-5p~nlr`J*6N0VMVcbD>Ya +z^>NZK1gRffsXlrq3I0DYs8FFFesQ*yqKnk;tX11lrnyz`Xj5JS3I;NvRjp*~{bud> +zier4})Hw)fcLV%2VI9A0IX2Uv(ph4RvtU@LOLLH>%ka6)L=LH3)SVebmf!R1#R_88 +z&02VTM*IUI-T9tuRwQ#;>)}(=-w&Jb6G(395NhaQYvXQHy?SD4+yD6A3s>!b8^Z_+ +zXtZQK_36eZ{4E>CVoHm=w)TU~*nd>bc8;OES7hN`|M5quaq0CM1NuhjGq2eA249y6 +zn+1JtTBJ~z$|||=3=J&mCRhwI64jtA7L1lRHxbL0dhuHX87&R7+X}2%1)mmN| +zlAlL-qE@;3e^2fp(ZkWkOG*xqRda`w2XLZ2XC?s?(oyC2k&cg?JL)3RGainwv7-6&kj*gR>+ZL{l7(_-O+Q!5yq{{({S8|yQQsWwYl6}`nNTJ* +zH@0QognvcBK^UvR +zvb}@pvfLsx!tu|3ogogVV08Hkk__x5iWNqc%QHd1puQ$}rp0kA!Ic#3tR2l=SI}duM +zw3F&fY6UYY`eKKh(v*7*%PB`Ezr-2Gs%k^sxgfNYIwJCqJ!@JrNjgCly4DMs3ygN7Z1M-=BXfoeoR^s>Vf>;TjJ%Dl +zf`_h2*Cdmx*<+=mcfV}?)!}vyj3i0Ez*iIh$NR(Pzls0+-VMK}nD8I_LxPEa&{D{b<=aPW0$$=fG=c~4t7~;+C4=cLO)BZGr`&}sm-Pn? +zD|JGfy4@f(4vX%+`^weJP~Ex#MJDc_T{XUU +z&)5$>=MhBZ#X={qE71uzd9CVeAkYNSz{x8KD6 +z(z!HzU*55#LoF?WAJoac6En2^&7^T!&25{fMS>hbGWLZB5qi;1i6x;6wI|ac$O1NF +z7cgdIxLJ{_ktH=tgopJswP+;KWXWtjkl@w~WNntJSWK|@Y&+DH(9(K(%tv2}S7dRw +zxfE%_osG?*pnmT;sN%%A85+;%JdHu6`$B}9a#>APRQDv|zsrHuhz)D%M{1L;QJZX- +zRVhCs>*mTD{zmdUmY+O-te=@l7ZgtW6~$tay5;xdl9URRV?{#k6}n)sK>vASd*na7 +zK{TOvM<}k;|M3R&k`~KtT6|`Q8^$H_LnX>@{^1c8Woeenrk=bAq>SCE?f<^&th|%B|ZkAlb3gwxP7R0CRIP{lG;TT +ztdr-=IOwn|7IT*_NrOyp$oxJ}jLRIQbX1($%|5SduIl^xMZE-Fo3;J-P2bblU%5F< +z%3zkZ#-1CmQa2Kf;V**qiqg|#q<2^YyJ*08(~;*sVCc=YfpS>0aI0*Uj9v}G?%AeV +zL-8fg7Hd7R>d?eRl!8+z)aWgLm#AeNTWINeDT~N<-8{yVz`?VDI;Gwk;cX$C_{X&f +z+CGs!hS!Z4VFff;V=-q5np(|vuSSp$`|7qEW$mH!)dz@3IqUg3I!(FMnqsbuUU@F7 +zaqV%o3p8y$u@THG73Iak>|6Fo0m1LEnY755&l^=iX7X44^6^!xkVdS*w2^wmW}?0- +zT^bh-@2q?mCr_+DP*QSV>u=Og&b;_AbSu~8`}PX1gR~RYK)O`fD!C~Y^}QYwa#!|K +zk9@A7&nBele_LBd^$+x;kAQ{^rHT;Ol#`A@?eA +z0#-d2Ka0KxRH_zxYkl({nVlVZkI)PPeoY6bJhk;suP$2rxusHrdTzk<^hauNMLyRO +zbH43jP={a}((zi8P?==-cvgze#k}#>#;c{MO~khgkT{OqJT~F4C$;{d`ZMcgjoF5W +z@o5~pvmIe5r2iQE5_^(3^aV=dCG=SWZW}W3MU3pE=P~Q;vg`RWb_)H9ndXQtnV +zp&oDM?za8x&{_crLV_=$^@x!lVoXPgU~q>g;pv=_Uls97UJC9k$$}^%qu^2oW3w{) +zlcVsv2+M#g1s>qZqR;N`!-)M_!pOwL?@f2cgD+nDhtfU54d@fJ9TF;6am5)o`nuFV +zn)mfvcVgM;2EyRRR3L}H +z3E5Ag4z^R$gD)wz+Nx3P)BafyA4Cx`zs7u;FGISEQCCmhj6R?03ma14>7F}ERp~+I +zZehdhsr|nTC|k@n>FB2*)@!R2hN}W}w&Y4Op=cHRwNknG9mIi*s-;|JAA)VqxGXvD +zENLwpcs`MnHK4dZxc-&NxjC-VRNf)U{gtI&RcdWTF2|Us8rSku?eCz*ALoV|vZ9u7 +z1yzFG@RK-;%KV#=^dh-L@w~L8;9;fn34^y2;8RG|*$wb`bnRm&v%A|jZvQ$#<}crh +z;36)TVo=>rF(o881Y*{TK&Qv{Px2?z?+ss{beJT=!3#Wrtrh8W=O30Y^{QZNA%3oa +z47q2wuy%XRH1g-}*E^P_DAf_8Zy+7g%dNUy>orjap%|K#Q<{7XN=E8t)i!cvoJa3g +z_vBdIsqLOmo?59JA#umk#>3L4Wmx)Qt~COwm*P}q2IPl7dNmWmOf&lUHXSRX0pHq+Il?h=8fKx9s`2BN +zk}S)!j#WDbALGNx9Tik67tf_Z!!FL&T%s~+nmkJ%aFI>evtD&+Z{U`{Ok0g(LP%B&nkV&nmAIkW;Z4)KEH=zmCyvVZKcOh%(Qp*$6Rcg2q>8fF~` +zWmyFE+LtKSwjngGem%e&|T??TOcNm~^IHA09RNYZsrjD_0glMGCvJJwRk6~@x +zIT~h|HRT%GsJOhX#S(dsJHo3LrL~QYSV6%+;Lz1dtT`-d0{d}JeOJAE}LACnMu$5UNKxiI9gRLhu(_*LgG<447C>pM$s945Az +z)X`bQ(^wx=4_2YX#`Sh6AJM3~(Xw#soX&nUt&qa2`Pl;J?a^SVlW#;>pbcWSzTx}Z +z53K)lq!^PXYWXHT<2Pz5HryE~Hc7M}rkuf--t(Fb**TEEZL)GzC_>UF%Xo9eey37P +zOoe??_;gy%542zqGurog4nl9sN(GO1BLOc0<*NyrD$D8x(5*Zk_~|{4L7G9o +zsM7^FRskYMnbe9ko?M%5`?6JZ@{w62>I_R8^_Q}D^yG-KVTHB>t;tTqqJInO_l$pa +z(brqlkMv~`+AX-l^3N`}tqr6!ysTm&@?Qzb8LK&NNID{(PBHEzzU!*S`q%MBXq389 +z(oaDTb6iVp)zQ@X>s=T_;{kKLquNK5jY3y&+$mWJ-h7lEs*Xv4H|E4i;UR3F+57SU +z2dZ$S1TS2ffX~2A^CGs3*7ep_9E*~wJRP9=^1W-tLzZ=JxX9Cg1w;0H|4j;h +zi0&!>Tgc;&Cp>Vz|Fp-)-Tx}}CB~?F?{AcDUQ<=Z4j1C=oJrwW)9IUfPwh-NoRK=* +z=bJ3nJRO&?G| +zt-OT2qSn>jpet3!&*L{48rGl(Ypd$=Gms6A{O$_s+B5H@l$%9o8N~bwy3lG<+V~J1 +zeM0T|gi*phlyU_7U(szNu9|Cr%okYb_PjgGv_MOKbACGQ(`?&aj;1n+p|O?ANAl_= +zV>v?b8#Jq+9ZImcH +zhBVDU+ckwwh5@T%O9}Xdvv?=1(ZV(rT>~~cJwYav2nZ#roDm~heKsDG6B?!+#>s7? +z?9x|xXuGeaicmr>ZxdNM)fQKS^4q*f)jEi-10~PAqtDX7oG^(w05%|91S$6nm@j#? +zFPcDash%I|FoRp+F>{)KW<+D-{Xy_k8P%A#88%S&f9$qtSHm>b73kIn!CXNqTlTEj-d&ALTk}_s?&}1e{#>M1=|B#R}Eh0;_ +zjyx)mJhaQ03}TMmI+#0z*<{DDtSo8?Z?r+Ixa)gL6wRGFR$($f98iqH6QR~vX6)96 +zGbx`pop&0b-yQV3i~Ue6Vm{ik`>+(7^by$_iY8XcbH^24)$3Y(KQrmUhBO3g3v0ay +z6WS1^H +zE#=LZ;HDx8i!SG~$@i}xTMG>%LkWzJy}2lVs>-yxE@i9r+;L=bs#7j|(nout|0u0g +zNsVQ3%~M^4>Y?yO_qtxWL6-1M$71P6EEms-YU>)lM!Nd4>s(V=GHcZ`>vYK6NNq$n +zOT~@v3nUXSUbzFC;53>n4`tZ}^n;;Pa=q-PhVF-I9iszRUJ2+tSkzbLD9Ujy9)Gn+ +zvt(=4lh(heg1p1#AbU=gND`88BaCM#P-bI7b^99csrfqJf4f1Beqj7^`0yUjydP2G +z*mf8k9BCEJH&LDQH5-p5fpiGBHi+hgxXRW=;HM*v!M@oH>A +z)PY(y_ZOO}(DCu9_^&;<%0VoLe9y!NXJ}#}?u!zQq~cK*CXtvJ!z6$1FoRP*K-Jy7 +zgNFPZ+yhO2XGyuXh!$2NlqkLbvwJ*}Qb0`X(&dksP?TEWBE(IIqFx_b6m_i5h%kDW +zeDiYMl5}&?#?|%t@15Bz)}7HRT&Bf&@Z^c9Nd-KIHDHRB;Z*%H#O*}w1DaWvXy2Tp +z#7pBCtK@Lc;XG0Dje_P5s{g!h@t5s(bGv$Zhk#3)v!3Qygh-&C8TQJ5CT={g54 +ztJx8l_K4>VuSQ#T^*tQi0n=rs%xDI#c=8;!P3l@sC1&oYq?b-u=FGbH*x7iAWadWE +zm&go}0!1~X4fG2pD^z83jWso;wSsiRqf`~OtJ#G~yb4UpVJPm*c^^o_)IW*s9nS^JwT% +zl4WX%ZF3aBcY!36-?{q)eQI4JwEns|V7jrds=gKe^+h`*#n2}sJxatCc!gpPcsx(U +zmh-Kew@9xj(OB&XK$s_=95Jn1vxjeyKy_ut=l}F;~+D-YpL +zWP|wUIhyQKH8*@Sjf$MG*(VZ_ZyJW$RS1uE7e7dey|uX2v~TC`Au)u49Qkd4h+COe +z7oiln8eLQ%z4_VCzZ#7G740oO`+;4rIq`|C&m-+p}aqc9KO +zy?^)a{`TX$H;*UAqK{RPUefcY+i&i_eR{`)+^%R=*SAOt>Rlwill5L+CHnihUQcy@ +zdb+WRfBcmyL@G~w)&0D#KVRDudUFk*xa)dDU$cAM;xv|y%0j^D0nB#2f7XG9Jz`#w +z6xCG}cW>xSj+HhHQKwei2gmCEDplL>_nXhlo{u-`cHL7y=j{W;z-4{7f +zu9i&wpRudzdYeQynAX`d+V=Kuil66ii=RtbUgs*hE|7BnI=wcDxPE#kLVUhHZ0Y|u +zJfY2-O`(bVl~;G>{H<;d+6EyLPO(Mt%@8P_aMY81`SD*B9~S%X&%1vT#qmfRfjmDX +z(V@4W-kiIgr;qm;oiY~Js*!f8Fjzz6y3SMPD`)r79F#~s1&wnOmKbmmD_sTrhcwyi +zp%gKRjB!Td?1-*J<_Z|9%5-CnER3Y<+UoR>t}S|t0&96gVC_>D@we+H6YM8gMS=)45`v#!lA|I070u-3dye`*AcHhTAG +zKm7GiBKg^LoVVdG6h|Sd5butgyq59p23NVH1+RQ_)kb0yhiWQotx1o`BP~c>hsL+o +zn)%A=tcxQ$`=5XR7k~C)6A2^NK1kI5pH%YZyI=g7E+YLy@{8ZEP9()`siI*vh%t^t +zygO%*I2XpyIN|H{k?h=l4BwEw@#{|8UM`YY0}MiQ^- +zBwicJVTH0G!p!JpQwbs>kn72WGv5p!&FNL6j}|_;T^NV4&7MK;+ae-N{C-Hap7Jqx +z)>A(doQLAc-;D_O%x8CmidO@bZhyL=H`o5xB?@`~gf~3? +z`NyAJ+hzYGDs@fV;Lo7CeRuO~W0QCMHu=9k{-&;fNPYv;)Sv(D5C7N4KmYE820b&F +zS5}-42F;D97j&3<@b^`7-z>}=X6RU$X0z8xCzjdiFKzeIcW)NHtJJ;BVd4>6S=B_z +z{`vnnS +zm{0|=P1PJXyx+2(9jKQ1cfTk#&0p3v+6=n-{nJ)9?f;i1*Ue90vVj#OisXdmt3(!b +zI9AeeiaEg@y~4GKMVy)>+(g#b`l=l|i+U9!y{+ckBx;cTq +z{cp1-kBA`}k#oW@YuAa7Y1tBCTmRg1_|YPM`1^m9(eEr8T*sM=cYpTVKmXMezOVl> +z>h<7T{W#af+CGZ^n>&^6G|t&idj_maOnh(Wn+D&o^GhpU +zk<79IF#qEBe_HD1KMkeWKjCN8@K@jc!iIhS;`e{D(rpmjtTejXFH5S_ZU51kV*wd4 +z{XhTv-<;j>c4hjZ;oP*({r2|KkN@g#{`wi8UNEfR8IZGc8?J0&ujTu*TYfleYpLPI +z$AXDpv_G9zb^EiaQuYLu&$fq7xmi;|M~yF7^cC18Y3x{g_~@(u`>QvX?7?hjYZHit +zFdO*Qer5km1ToCN1i3D8-}@D{s&Y6k%Q2Is6N`Q#HvUtSHVhn2|MmRVWeHFvE1`U4 +z+LN8D{k1`U(HJ7uwTP2k`^uGGJRW-aU++^Rs`LQAq<%h(K +zuMDlr!?F#8#Eg-KGW%JYi>vXAAAi-q@P9jGKyIEh!~N%x$)(mQr1nlU{KK}UGgkcz +zx5xDxh1zoZQ}(i#8HIUcmCJjths3+F1?go5nz_<&zZY&ZUTAD_bk3%LoY@!$M7?yS<0t%uSad@7Tf2HEb^%bi^LdM9tb{>DM$ +zTm#y8nbsm&Xwnj4Md283@;ggXgsJYwDNkT<6L%_XHP5ayN%basy8TZh#iq9a`;o4s +z4X>G>EMj%k!-Mm$`reGT+Z?2Q7_frE>VKmi|j-2MsFhS3htQ56EE +zem2%Q4$eFPfzK@ps*h%BbgV>f15JY0TFfkFt)w +zmoB|BS*nIM%l>S&#shYclc5X*O>1>iA5A?y?H??gp3#jS)JjFv+RxXMHZ +zS!BA_O5Io1A^y#e_G{Gm8Z`o@ALsY#eN_2y^6lpAsT=>R^t5i^-?^L}Tdr4Kez5_9Ki%1QcS=^yO}6kuE;D7-A?o +zcOkade@;M8{PHK5YFQ>3Q~tDQi__%dPD|xV*qnKGb>IH5jQll2QRV1S0$<2Nr>7%(#Rh_Sqxvd2DI53;^6SWTy +zcO_?zrpBT#hn=F_P;XR6i(O23>C +zaz(8YY{=vd(fpjiisZ%Q6a>tZkC+%1sS?wv(&lYC$#ZrGQT}DN(>qy~gvs@X`MI!Q +zxcl+D +zJ+bunU%#8D!`Tirst_&{@Q*uroRKF@*8 +z4O7TmL?`+%yJeoU701(J7jmGpKu%rb@4wWCf6${Hv~`7nxaxB|rvMT=i{;1L+iy7G +z`8Un!tD8jbPXHb1WXI&#&NGzgj-QXkI7@RI-PW9;eNHR|9h&Ph +z5p^xgckgd+=jTIWz)mQ2;$T03Mi60Muu5dDdVj(qQN^{^JC~+vYR;=wOyJ<+A*KYl +zEviDy&=;fSQ68id^kx;oT(aBo?1ms=jX&Sn21b)iBj;(ct=BVeY#1+(=#H@?&C3pj +zsOC?sc=z%4-3d&u2$9lxHmHc!mq$+4KXVlHT`Zbmx_is#Ki|%Cm0avj^PJ`o@d?bR +zEJR3T9k(YGC<0?M+v7pxBouE>Km)-)WQr4DDu`Fho!*@gNv!c^c2Ja}B7|%gMf#@v +z_U7iBfn|7fWW=7!6UumeY%(R@ee>?)48=iJym)?tCGi4rnh+UM#MrcU@`wnnPa$Tl +z=4C$9i2A@Lzj$_?1w1)tzZ6j|qDY-MbcoP|>^{Bj3E7V|rWrw0q}gtsvo-1{ig`5W +zoh#J+HWzzc&uo1pjEcP~Kjn9Au1|^0h*xrQ8p%8%m^4z@&g +zbsa>duKJ($99itm=ZxQ3uZy4m%vV_&T(BR-Cgu?N4aq6_SO51{)_;T^f8PA!_s%7x +zk@pR|lg##Ul@x!k&0qcIhvYZ@Ll1?KP3N1>SM)jW|r>N+T4t8q3F?g +z(edU{-Q6C|7z%_wK5x?#>UR+ +zUw0<|`!D|fxBt)I{Pkb`#h?Fn9C`b)GwDS?iT(9aRM)A%KfT+$7aas)E|p>*>ZnyY +z{PdiEWmTplaC?Dm2C()5(|&vdm(Ez1hz9?c7>)WMT;S10bl};;O?}z_W#HsT=YRf1 +zM;p3VjGbWqMUe3ej@ggMVDF)qAEY0_@r8!4CXcH@Sa@@Y +zQTm(kw!g=3`|EpayLlVBd273Q+uQJ=%Vrm)W{>rY4OD2v?`_<8b+NhmQbS$!hxuZI +zgpK?1BXj|TUw)`B3k7~4JIcSn=2f|fWrlmx`b!NJqBegVMs0q<;aKry83Ut +znjeziHu8(%Q3%PPpOr2VsPzjw?%(4^=I=?({oxDm=KSz>*-oD|@2-MYXoypZWG?K{00z%} +za@T8-Lg#;eDuQUOhhB8xiQv*V=ZX@ipx3=e$es=K<^$$pcRv2-oNr5NdGXhiI7jbp +zJ%!}6`m;m-ld0ogpUBiMlG_u7HAiFsQiVuT$6x&Z +zPd6f}HkmO0$x`8CzH`r9?2P$Ozw>kalRsJAtY2Ow`6lq-pMD}rz1f)0t*F;G+J)Vk +zTqSbD8A2R4|HbdWLbtJ~0EnA|RhfSF^RL{OUnR1!vEysW-_9W?a~<5A+rg!YwAT6^ +zC&>IO71tW~9mC|9@uxURZnxqa@jiJM-HI1Xj(L0g^}Acz^WQip=8*g`YqwiOmBZ1` +z^lRCSJt1YB#dTZS#HuG8ctpkgmiA(Nu@>G;?jHK6J##Ut%0{D!nfdgPjZ1!6{r}eH +zrMHJL9!}?TIk0Vi_R@UTpZ_Wx?!xQwvTNkRt^Hj3nf&dir>8j>baGuY7ZEla5azxg +zZOL#GCJP)cX|jmHv@Oo{%JI$5_)bR~qqcMBpXnCa9u7!cHS;>vlUhvn8chK;T%`H9 +zOZG9k{qSk#UFic8W?vzT@5v6Ykn?v2dd=;J&D>C;JXZCja+^KgOjp}UqH%X$FY0nL +zKY707+=$zUnRh((ZCjTLB}pcmTu390QR5n2?#lK!tu^%a72#xoQqgD8TrCf%#a-*6nBnue7LH(f3ZXRA~@y%5YPs@DVBW5DYS=xhFcjh>^&3Hwk +zTM|hU_U3>V4M-+0cPI9g-xF@%ez;O9DxA#RZX`z9^v9URbes{C=m13dvJ+MaNQ<>|@HY71yMcO*~zA +z0(EOb4Qv +z0^!z}Cu)wc*^WRdMJ{UV7w|nn$agotp0f6>_v@~!v0pShc;O{&@+tNQCD9gz_xAXM +zf}|X>84+2bk7{fEH?DS;zzP$*BB|Uyw608H|M5sZMD5X6f+8|r$iZv3P7Vq)nW*6v +z_E;Q^DqJlq9fdq7kLJoUkP>lZ`~(T6_VS=y?Wn|NLh0BI66IxRhr3OjTNqHzClDp+&8YsKP +zKWdqaKCq%w5I(|WQAB_*BA$fTHn`xCBvC()u;o16he7gw8*Eqysf2(dBHcf6pv$@a +z@tAo4f^O`<%q$)0e8g>m7hTM5AlmSDN76>LJtjI0waRP@^_hQcwReC;gqFPe3{OM; +zxfiu7U(ox?58Q$kIvIiA>U{4BI&Mpf#BC$0q#eW&6_ajbQ9sz$y&_7Fx!xU7ekd+o +zp=K0Zh*5s7cD>Qz6#c1R9YmhXCY7af_08bNoC*I!mAPYae2$T*Q|N^rt_d&vOo5M) +zbS}I8O!rzpT(#zr)S%Yo#Cg0Ed(necvELs_Epau_5dLy74e1y}tarYK9PI)f +zUYM5AneMt{Ifg_@U*k=FZe1ZcK6^TW)(qCqoS%RNs(qbwTgnv~7)oeibgU#@q_haz +z*Ws`wnn@xB*E{!-*lm>vm$C~UvIdUq{9{L?Ot|szfujwsa}rT$k`9*#6}h;V-qFy; +z6N)zZ(F5p%NCWl}2skvb_)VhAy@OKU+*fhxOYbyZhOl^o9?Ye`hGAv0#{qF5l?x*q +zht$^BTHeQidq!MYRMG(Gr{y0u-2c2ZJpP_u1R +z>J4Orwxd5`K-hmbf#Nq&^*ZHlsLl-)xPi*nSJL`w +z*-#N1s9pnQYp7lg6{?X6HCCGXYEn>)MygOx`5CA?Qw3+F(u|atp4#%*Q&ReBNna5e +zsU8Dm<1ug|uSh%&)rQA`lJMAKNn +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 +zzrFbwzl*1$s +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 +zIt3N8{0$d0U1pu6Tpx*kd#eyIVht8dC(3% +zYkPf$)w+wxM^drc#$qG1HFunZyc?(4Tc%7iP`ijoN!_$W2}>6IbV78-l$|V5>s_0+ +zb?XS0wFZcsM(0uju;0Bw?P +z6HmDJBJx0oZSSE42nkUmnhnAPi3)9Xp5h`BTSE|A^9dk^4oK1AuG56}0s(+-9r*yF#a} +zg)73jqZO4Lpyk9M^F%Re6!r>|RBi~%#Ith}N1G1FTIQurBqXrz;Vm1$h=9vrx&kKE +zs$k|Gq*~HpX)_X0kc`5F^0=u8;z;D)1fLsw_@y;tZ}wV&i=#0;fSxJ}KO&4sgg(~9 +z6<{Dy4$5JFD#YH&#v~b;&XP=8E$zCFNx*S3aH<}n_ULsY?x29poQ8KyjsWE#t$V{G +z41q@`hNNkdj^fo+5^9MSHPR{%aKnWXz(>WhFQEbqI2H$57>1qP1YLBjIOn-F;o4uS +zf}z0D4y!a3%Gu-&GBUYrn=J6KJ9|}3qH^0n9oC8&6CJ9E>myMFBHd2V(xi1WIwQr6 +z-g`;#&}f-B`G>#nqyy5*Na=zx!Li4CK&0&ar1%^JVW{bti50JL`^4z03G!heh6L`^ +zSwZ;PlR=2(fHA^-Xs0lsvzOMe4yM*zEnsd}Ak!kaAX?5YTUl$l-6EdX%Fel_C05GY +zy-8MAv4dc?0M{(&(vj_*W&;n#W8^HUl>jkT53V&Wa7VO9df)1wTc1*$%u_O4`3E7w4Tm{dA8I@X!hmz=FH(P;#g +z*?3u-j*dI?G1|wDzcJvq4TOIpE8%X&8mu&Je%Xn=pnSnz%g{j+Bh(}Q7lio}Q{P6~ +zc$7^N*p8guw<8UstaK2-NZBV^&;}C~E9Uhsm7=x+)E?$~+(T>#2&@_e#ShesXzk}# +zD@U#&Qj-$K_j3$hab@#kPhY?ZY&T0{S9j&{!Vy*``Jo!use~` +zNxH*lJKH-5yD=Dx$T~w_LPzTSC7qf=vP&Yp@!+Z=Wl~reX-m1~>mn}-k^Hf-<_n{| +zo;PnEpbj&YZxcl;$s-Vy3^ICA8C}O&OaCIAUF1-Xl8*Vw`&j0#jf +zs)H@&U=hs4Ry{fjlJf;Du0e;yExZ@dNV`a(1CcOoRL9zhG+If}D{plT{mva8WF8i> +zF&#l5f{kN0j|le<{)Psb&2a68T_Lr$2V +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 +z#uK@BTbGfzd+;X5XHM1K`?Z5eTIwMJdVFB +zba19PR9ZWLVmKDjvGJm&4dbz1YWB`Tv-4>$lA6DRNLNee_TF(fYtMCX&zEp?{6r0$ +zO^c-KTsrdV|iSs%@z^LiSIBZrkq9!YigQWt5qd`;9- +zA0rYz`W81@Rs-X?j{Nad;$Y{2&vT;2l~&!mu^~Lza)>s< +zp$#c2u0k;_(3>=@w4QT>R4@$Dfh*2&b}S+v>S-nRw04xIX!5qUtpiM_pkPiaX`75r +z&BF;%sfMi@GGQ6CnNoD?Xw{2pAjK!aZaLR}QgGiVRz7hjf-55#!7INpBp7X*O%6|O +zO8{@)ZS4QuSWh-ll5*(ecVGn^zI@=bb^EvCKh!491z<)J%ZB}Ih;eyeclhg;;W(_5 +z_sDw++e$}dV($jTE8Y`YN4gBY3n>9J2Uq*hCRq3CBT+uqtgSC=ogXuz2t7u?WSd}w +zskf!@Isy6X>~0oE*{_;(gADWrb^_ROlB4N-Y;_jltKLl#?wxfz6|Pu2CVgaHC&!a@grz+kBGpQN216LF*G0gor@#wi=%lo)J`hCe_#@7 +zuc{}m%N{<7yBbWG9Yrj;CqRryi;^XL_Gy1u{-bWvTEiDIm?xo4ch@Biyv0cfkPlub +zfLH*b(6+I(nFL-V?xm9`#oIu2AA~u!C5s2^a%_}%U>2g!4{6TIE+|P37X{F$E2*;9|FD30j +zEoAKA>p-khYSS9Ko||{?ZYq0a +z=UhDymupBfbyv9oKL{kYUT3w-6y*bL%8?Y~JK?sDh9Wj~?*o=IP3j)8@5(@MV`1n{ +zJiuNY(hpg6h8avRgx?@l2cLmmDZE9n?iz_mEny**2HGF=DR;}1i9MVe2p5BElQmj? +zv>F9F8_;=dMTuKNQl40s(_45*IOx{fEf@u-ONrSK?UdgHaX~7z_D~liBan-xV51!e +zF+zQ}{u3iwe5ZHT@I_Lpa15{ED>4!`{WXvlRsV8^FB=?-bS87ce~xnL`~nDdLKr_g +zZ96j$e6wM@&55)oJkW+no4?KPqT|@q=Phj{%KM-ylElpJh?qqu4CyVzWKxC*mWbe5 +zoxa`e72yDr%b18(-W*|W>5E6~=tyu8w~TL{e9PqiAa|ra1VKSEP +zOklAAE5=nGf)_(5XD^r%CRc9}u|WbsKW4{yA2Mj*##j4GBVvl1QppywX%5F`T0|s{ +zF(H7nx?34@quBQ3LOTgl_WlkQq#%`>4wyEbX@#SRN$m1YuAZemw8e(ywM>>fYt_nN +zY#^?=p{*hzi2rsm?4l+yiOylK>v*WXz_G!5eb_@2xDQr$HiK4H)5hls>{29;I&lTo +zeo`$HmBOvSd&heB1Y9@KUz;v~_D)9_2e@V2aft1X#JW-hpTrn?;vd7}Ne@-Klrm3NX7m`|?a!bu+b +zP;xR0<|D8=g8EpmdIi17zPYmCiW%)LZ3ufN}bj~x&{aeCsEHWnJ<(0wXqQ>7Fh~?M|cLh +zVB_{U(?T2qZdktTB7p$w_qj76SrY?=vDLF=MYRQn7g8^O}(p-{_X}!}A;0AdaLZqomlH98d92W5Y +zU4R2Xo{Ftt7Cc*!cSHxX6EN`DIQt8}39gusG@z=63>UCOkm`|zILCvGcHZQkX~UOd +zh&^)m54`|w*vxXLD7FmB94O&aZE@-+k_l4n1v1cY!ga$pP7a(nwHWOH()H-hEj+6l +z&NLH*XyoKTNiby5v7<9y>wL==1G|x#+|evZQ1M!E9mi=ePLHTjLPPC>D0?ES8xi}A +zZO%9EZXB}0@eJskW)|^!j|Stgp=puj3>(JOu7yy +zI+q+=yz)J>r|C67Nip4<#Ujq*gcLxc-udWqVmF!tD;)x}0YLa@TNfOC+(4n<1UJ+z +zCqFoDEcbORJab{6i9n1v6X2|XCoNyRF!OTsnP{xbDV1+yT2qK?9>k~(Bq?uGg?Q6u +z+R4EziEY)xgN==X#Z(}c#7WvjBaa4Y?Mg;8ABR!ueW|QH4+hy>dX0~?BNAS%QPE)r +zNvKC_xd^OG5zu7?@%XqSFD?|S?|7h!LOEkl2q10tTMpICbz2Tn8F*$;IaL{8%)N7H +zisMnF+c0URm`GN2n^{ZC-&36v473v7s8(^{h(gI|AkPlSdv0*wvkdr7vlBE{B}k&+$XZ<~E6dpVSu4 +zA02FyocKV(o!dkaZJdOhsH2VN^*Tkwj->RkcO_W05b<=5FA~3#VAB*2 +zvT7e5`~_c-g1dZIrAUwibr+m=5(z^MM39aIB6k9`oPrc8=8nBPvXEy0iB(DO+(51q +zvP;O7eA~+~HKrUE(`cWAuGx2=+9KuIUgVyu!O9Emm?sN=kz=?ShrJ4A$2#`OB@#I{ +z3^|#6g+~=5gaVfh&XOYU5i`{ozq#<36sZilY|5TnB%xIVmkA%Y_d$(mt8q2pWc`A) +zn$lXM0c&(Z-t{=rC0vHB-r~K>I!}Oa-WiwL%L`M9MvhA`YIh&PzH+!XZ9CWD6!uKZ +zzxiif*SS@#g2#<%VR_rS`R2}i%9GwI?6|@OeuxMYImxeFP7|{{vRK5_nWc6ZVq@a$ +zq#--(hhb1benhZ_vXK|MA}Ci6($W}D*+6rL1fFCpbrR=G+d5-iN^brg+o^qGqbS(ju +zv$CYQ^+CV|KoNXZ>}InyqD$XN67_~Nu5H8ysJ$sW+UO!6OeK0jtOw?xP9og*eYS4i +zHCmcmqEtTTosVzeR3E%7n*fOOSTUC<;W|f;Oci3;LH}SBFJv#NX%NUavG5e7HI?ba +zv4JSOfsU>VXHhd594I}M6UT>==0zrAM$kYV8^3u++^X&XXVazo0^#%o8^MOKjOQV# +z2It-4^u~5JxW0w+!M$Hob|gKZVyA+h=zZVREPHl#G)scH0B_HV%2~6H61hkG9RT}W +z*0_lUJP=!NyIgSA$-~Ca@twR6^TPfv!OjfmXLraqCkjfT5$HOkZ+)Y0jLDhdoXPDR^1~g*=7qHo@k<- +zN=bY-qJDx0B8;Fa4Sd@A?vgN(z`GX8tJ7FrEiHGf1pcY=_{w)tv_;bSX5w~2)WI(* +zNMP{l>>r4|xKx~PkJPb(X?^08RP`=)ILOp&h)QgrVFvd>qoBR!tiJTG;bAD+D3YNq +zDwC!sNPu7`azcrmUG)y;vHmQj3tUWr1_u|*2EI{qHD8r+z=>aHrv@?LIA7gFd1k+Z +zp9APOY$||`Jqb`QWAM?&G4OqzGKJrLn|K4pCZC`=29A35KzrMP%Mz#I5-$*;%a$Ci +zBjw|EEYJ{xw!q{iLhadGb0p5qS5cO)_;%6Wsi?KrfOlrFX+5=tMC;~|5Ss?fwX7Src*3KqitSE-1R2BC-2G +zipufEv6Q?`TcT+g0Ff1Q1j~S8`4~g*0Ln1w)?%#Ttci}Yb7!zF$?V7^umW=o7bQgr +zR}2+ztdQ;jI>GrTK5fUAM3C}W1E`bWqfZ==Kvnwe&IEv*>^)er5Gm-)MFp;d6oNRN +zR|(O%NImo%+i!#t3R#!*?86_F`s>uzjpo@N9P +z(Fsb?yT(rt6pRG?&P?n1J<&)4N=}wwvSH#a{?!A=15Bw2@vYivFnne3fz%QHRdTfF +z=n{}bofuijyIj*yjEI%{bPMjt?pV(32ka&)kAs&a5%mxjmHYgxHn9<{h7`fliWqiV +z%&s3sNX)t-sCE=FgS2aa`a%D8=!Eoe$dP0>5>yMuMjQ7Vtmi0)n>ZoYBZDa$JSqS4sMWbmj=>5KCgK%gjr>u@j#VLkXvs +z7T5lK!{Gfq{p=9zRCtX_luQbQ3tuEDkiBjy&EA2)fA7l$ho_wi21?u{XgDsQ6nre5 +zU-d`ttU=;Ga?NagI1eWZL?lcf3OQYamkIa@DOz+e!yQJRo}G`KWLF{|>?o>Tp#sp? +z)~~}}Gj@`@-(fH{!=_L1NW3=TtlUARcUeAMKojqt7n%HBT983(_R@hP1n#S9lxkH@ +zCnCK!K?W6qHSOh-(m1jn0381DxCxLZm&YDLZ;7IjPC&59BM|fFXb~h1H9fDV3gtdH +zyNY)fve<8HIS9T2aEzdaaNOmNfQ7~8fpPRo5tzi8r-QJ-0k&W?4dj~>Eeg(su(!$7 +zGLq~Lx(v7VagJnB;@*QZlzo}%vB#6sue=U|Th|C?34{s2R#A(vJD#A(_VMP!dp{l5 +zO=s6T|`2tFq{Z))^i6-o~X?W_xW5<8r0arj0xr(rK5FXyc=_sWsge^^*hjajZr${<5ZR+$-TMNToaD)wvv;CoNjj;>qCZc#_Be;NP4AL6ShvLG{u*c*9x=({~{AHYEkTe|<@u9kQ^yl!=btw1|!N +znCa|KL~ec9ceC+u?a)wWwT`eg8z1Wg(YR)R$Gz1)%API8-Uq<1XYcsiJ>)Z_UCG!F +zVlyxbh+TGU`}wo|ZBs96FP%(otB+K+oxSIWS32$$f`4%eJl(MGS+7h^QtTZXu^oxT +zlcYte9!thZtwf^H;HcIb_=DJ3GLcJ{RKM&JhJjOs3~x5vyu?8uM{?%~Y%RGV8wQ~X +zDSO4SlL!61inn1xl;dPJK9VLo7BCgMyNa;JW-ov~&U^y*MHDn(PZRHndw_|-mlfjN +zS+3F=X)av5F(~AUBnhs!!r@asvjy^{R7h{L#eJr-oQ2>l)m`GwG>v<1CE*@~J7NF8 +zs^V*afKD|@?b6_aHrSo4u))rz)*fJxsnlJ|2kp-WT4Q@Uvpy?Mwt$a{+a{=sBU4MI +z*yQY4#!e+Yi#Gdq)*2RLfV4}vKQX(o2|uGL_Kov4Dt#chCc=1OfWy{t``Wv*x5N;6 +ze_fiqQdI~RbVh054RbQv_&$;)?SA8BPLT^1Xq@kX-4{ii2zpdsKSV}^oOwr2Y>!Dl +zIhuYfyw@y62p%e&;A=H{R0Sg1w~54^*pQUikErb5!^gOFVjHTv=1;hc%&~vX!Uj5s +z6L59wibC*(yyyvwur1_P{c@gnRduwtb5O9n2ZQza5s7lHVD^kmF3R9fWOLqY(Q^6K|7mERIz_|~M%v~}KW1}+&3h1;fJ@aXX +zCP8y9y9pzX^V)!d$Z0T0(suG6XC9^gx+GkHZI}@>vQyN#Ba^gAG<{oCz|Icd+3@ca +zfzXqrSi!OJh^&1Zt_B}&Km9F5$$3CJ*Fg4K4#8g_>KW%3NxK{PLen0Bhn-_c +zVo6l$uhYTu2%l-{l5WiUeH&#St +zn;1)G?r6AE7#O@~HHj?95e9ev`*oHW~pwN6({kaYC^qdykdHj@dKMIKzGN)v5MzEOp +zLGKQP@6=ySf8sZLItQZJ4 +z`+(TA05pOiQOG;{k&>ZGl5g@Bbt-xuHVk<1K91n7?BeNcEHknV$&k!21(y#VF`#s| +z(AEes0==n_A4uTpF(mcdbPxxNHAt0Ai2X@lPzaZ`vJSy8#Hi|4@nuuwWO-OJ +z2&PE*CQeuJv1nRsjX)XifIvze48}uK7a)|BMjrrIa`K|159$GyTS+F@2&HwI(~1vVm-zqZL$)V`nM;^Q^G=3&Fy^2RR6E#`ERZwHS^?N1z+ +zmYpyc@tOvgHMNlGt&?1J#3qDww0aAC>#0&A_JxKmCpP(*=YbH?>PWhX5ONk$y+b@A +zu2B=^9)U2;@z@sh|6L+6te~v62%zqgCON^k@{a9Jf0Ri;EEa~qe=I3u!c_Zgst3{< +zSj}||lYI#*5$+1wnjmyiO(aOe=0ouLp-zbPKzt2CFULSS_AVq!o7#(CWJ5*i4Y74z +zR>Yp1oZFQRPAlVz9eCHl5TNHc0Z06?>f5P;vxbcLkvEJ@LB-4jIwGQk(@Abm? +z81<ERaEOS{!OUsTA*T6MqH_Q4 +zYx}0q5e!X^8IFo;O|=P +z_;5g!NhZ97bqi$)=XO=eNBDxE4%B3fzhQ5RJh^q8S1KbU&X?MaE=TM{rZ9AsI+5@;1`(6g7wL|)7Ht*q{*=3ir +zN{-(qxVmsMAF0X!pu}+@gnFGBx;veNOY^{KgYu1Kh?{U59$1RwFfAdKhVGC0c_e3H +z*UUkr!RQ*~OVgRLYMW&qksp?5)?hxWmps!Z_mznYS4Bv==n?|(@GRP+?!_MZ@IJN`>M+9^=)l(c(556a^H02)|~6G_4tsWqUeId +z3t^K86{_yq2&wCu%HN?AYq>9uE*FK +z7q?Da$e@7B#24vB)I!!3(ZLjm@*-1u&iN=q4$V*mmvVBf+~00cM?m=4rXl +zWYk&rqT^P(qQ#^%jH+Nd<(@l77fU&uY+CC^-+tiD;VAv2r~R^^&BZl1QA006$zMg0 +zUdPE~>@mcy;Gyt|^a#L-Ncr$jFDKOly}=r$@0>F)UzN(N-f-Ckox#wH$#I-J;p0wP +z(!xE!142lscj9sK&>Q0 +z0FyaOK*p&@+ll}#b_NWTMkpnhVd5Y^h~@>{HK3#7?x?Hg-4nX{vKTHP4UrWl5pcJO +zR0{ck^BP#xZ;^T^>%z5cs1nNLA%u}#ah!U!Ck-*hr5>TUbNcEoj+xjY8(qjEuvPF` +zgvYWyng^oi-aWNIJylR5mnF@v&FC$u{4R^6_wT*BKR!G*dwhd)WMh-}D{|25@_BBN +zZZ^bKR3u5#>44j^0+sc05I~1zqb?jaA0JA<`kma+ihRt0s<-tKB6&}gyN}$m46(#goYr(i`ahQ@xG_nN`z$9F<1&t`0CqeQD@S&X`{8DU)QA>m +zoovprJh9;F^PxN%7UI*pGN)5r5;r^U2jV&AW)n`pxmi}u+sj6#b6h$tMj=%cqO`Ed +zGI!zX4U)NAXRRyHgh#$^E7%~~KqdANJWTj)xcUkX%ZpNn;+X0#kye>-^3a`fg$QhF1Wu0>vS)(flD@XJ +za-MZhYH%^tN@+ogxth2H-j7jqkN-R +zHn)9o?2$8jSjcp5HpuA$i@)Qlq?T<$fd$^iw&I%z>WOqP<_%ka(bp)X5>9Lk>lNb> +z!uqy^dA+)%t_CB6JJen$=yD}z4r5@S$6hRbnOLtYJAQ^(Q&H}M)o6>9YhDVmQ39Nu +z$vXt&4iJX>%p39{ZNU=@e8iUMK@9`q&zxz%-`~?g6}UMOE`gRZw6mxz(z+Zw2n~dT +zW)qA>&~cBtJ;)>&Jl(CqPOv&nGuiPC0g-oR{UEurv6l}4x7f8mWW%RO~# +zPd^phFx)*Jr-+u3F4<~_yC<-BU3(0HM>KL3BXg!e8YceJF+cI(;El+vamC6=0@|bS +zp(}8zP=Qj}%6v#&&P|N5HYWIY+1xamKFUL3a2?08_I0a}v4*FE4oTC{K}*TSUK5%k +z4Qb*OyBarsjYRzquCJhM`dE7xz`6hHNV|DzA3wh>g(~cPiSe>;oTXEqer#Cxw&lZd +z`-YSo8pQ|V94WKFm~EFRLE!IcXtlTOtE&&nI2Tg~u(1y9H*CO%GQqVAiBWP%Yo4`f +zHg@;I(!YLZ52D_09sM$e=Gz&YpNHmt#NE8BbzF2#_7D5i2jbZcr~MWt=W@Wt$yZQ} +zXe*4{3a%%&5$@u|rZU)(bXO<~#RNf+C~6BGT~)%El)_z~fN1zxx4}Oi>0<1G=Wd~Q +zNn(pnA6Z-A3WRln999~L&uyG>gZBdYGmZDRu;db#ly(`mv;u(!i?I+cYErA>QPo76 +z4WNf7z&7F#46h<-+4zQQdCb +zC*(GRgj!!b9;tBZ4OCYP1(-3LPwd_NhM0gYd9GXv;IPb!_S&g#2xkoMRN3vwYPCI(GH(g`S7MHhM2c{hQJIbiBUN`)u^SIF61ye!P#9k}vdT!IRK& +z_IaE=^5w6sIAZQm(g7lWeuvT`6>EQEpg;hP>5z!CVSA@ro41lwzg;hFKRm*n|B88EjwOz1Zp7-8(>e~3MIgoYT-e=*F7m3q}w}$B2e_1jB&%~a+`3*b&^w@zG^>f4c{CmectXG +z1Yr<)3Xv4SV#9t=>QbVJRYUruGxR{yfJW$+4^u|sE5zT0%_B8P-}_hwPDhIE%YBl} +zzRvt;$|HhoNFj!|SQ`6WC72#7!^b=*(7u#aFzO)}??a~Y#-R*fn!r8fmRya0tZsZpn9x_TU1>^sqQe%TGe)jgm|4`r5 +z1V?P*HX&rVff7%f6GD6u+l=dL7pshGj-Js7?j?69b9?6!+i_?KqbM9EYN=CSO)3)! +zXHF7vGyHV0yCes}fg^UwM2;?1N>Of|OR+ +zI8*-s?lZuk&WpT3CPoCedA}H1vjYNLCZg&HF*B!Fb8Ue8CR8vYZLpT?{?}z1MfQ=n +z@qJ*QZ#Fj69sEA9-qOXkOOAu^7c`bu!aGZP_66@IAF;x@CLkRTN_i8AG#+_x}Q +z+RE@DM`J9wny{NBF3FH$!b4SfDIQzo4RgtCgKrHY0%M;h1WD(+P$9GPc^jpzrxxx4 +zQFu(DP?ZnWgsyL`w(Pg4;C_-M&bl?9*Db^fbQ#i-fr9@yCD=#s8wp8=copnKhzBfT +z3=;b~SO7qA6*mM{ReW>hvkza{dQOI8E#uZ^wQ)Xi?Nyo*FLSbuuRjx1NQ8rGpKn-H +zs5}z+5Y$}KKvnOT_CB>~7V22U`rtA(P5QGJUplXCUK{8o;q|WW{w956@EHl`%n%Sg +zRS$aIG}&+z#AW)w_vK@5Z$gyJ*+{EKYplA~8!_rxjpkqXCL5RG?_4;O6K9t35h!fH +zxYMciO|_)m%>M2Xf8$Qn4=D11qd1fD?0c(&o*EvEGI3i1@gWS6k$*CrZ(_`i$-_mt0TIFH~~iJY(UB +z_4Gr=ZK;e81#-#g4j~PA*#$eHNV<2I%McNrqCRbK`$Ylr?C%|^67^5SQ@VUP0QOP7TdvyJmY-`$Hc?1rP^hqQEm?UKE_ +za@o4}TYdkHedV1jcf=$=_;QrrX)weQ=6VspE@-p$_`6^I$IB(A@=gDv;&>1dJ?pLEP)EVBmShS0 +zX7CZg%Z>FFjOyO`Z}01{I69CV1u-2+H6ky&qC5x)FPc%N?Bd8KaBN6#GQiWX!>94# +z{d@n%w*fOgbUKpK?L9jbcC$({Uz#^}XnpXS5Dp1f-rh0TIwzw7cnI(~;#sE?wUsT| +z?wy!WVXr3=*(BjUHZU$nP^Y?S@z9*d-y; +z2oC!zr$g8b!q1MwY9{`KHa+z$--ek$*g$y8VEYojYwvF&5u7&S5QHve8C*Z%US$c_WZPDoz)1{8?;z5RDqa?0?&JZv)k=qR3f3 +z;BEz5B0F$xogZ%8gP`8uoNKoiqDAjq31z$qi9hgt@45d17qYH1+%3T=Ucl>P=$61Y +z0?^huWP*PonXUhlbfhpn>IDg|h;-!EJWPYRh!VF?HYs%Y;jcVxeo)R%5gA)TV3Tmc +z17ZEV+%q^D*aCCe9kQ!)F8Y1!a(i^*XgII~N71_VpejlKw`hjH6@ZYRWGo)d1+BuVC +zLaeT&(2;$d+yaSsKXhVfx^FD&vjvFZ50blTr--PJkR>Ma#MlmG9cU&m-A?%Lo4VaY +zp5-48s)&e==bq76u@1{<+8jq5E~Knq5;m#lcI~yR +z_b>LF}d4rth?GO-MjmH_cgRM`{(<O +zjlO;FM!$FQ>ui82{3VTLZJ)xRpE@C)xQ7>BNkP7~ngm?mh{N}8CUzu9`gJsWKev4A +z|M1nPx4v!^A2CLCM`0U2G<&C)Cp5$XW-18ZMF{M2Md)rn^y8l^A4|>m=e9(a|Jfdd +zH|-GXfl(V=@{-%N#Xw27OnW +zQ==ip$zYvmKKKQ95Ru#w>9_FQu)A&SR17bdbFE+a^4quon)_B=<;~-rXh{{$_e3eS +z0uRtIMN|lWxMq7uh`P#E%TM7`d5=FxYCxk}w5e@x9fKL@a;JH)CoX<)fC?+`&VGnH +zh8+r2aaVA8P4HK)NO`*}l|%%Eof)Y<=sdzNqFg(@8x7Wp2@oCA6#TdGLRWw3(2fx8 +zUWMCqzR0@i{_MQ9_`C3nsos_rpk3f-oVDdH^2x-IWDxe?ZZ5SA-?u$CDWVa!{vu2u +zQ@o=jwN9yRR_?dN2xJBV$?KzomsKX_$Bd(T2YIE9W!l-J2tkzSa#GHdn_b!O8~{ +zhzC+zju^6pHQk386PreUYvpsP)b$Y&lx1%Uq+fq-Wf>pY)3}WzS_x0RI??0Qu?EYW0<4!?3&mc2KpWx6+5eu +zKfWNiTanM{KbxMu$x&s6?ykJM)Ps8zQz1pOOudUXDj%BITOm#3dhO*I$&qnU``Tx{ +z`+hegpW4lrF(E?bwqnR9i6I`AZApdn8;2BE%7w +zcRo=zdkt`$g4l}S1mg7B&A_@KE6zjiNC0u=``%vrz&Rv5^!eXNfAX4TZ65dR!e@6( +z5S|HZ9}8A)q!c0;XKKlH;Vo7WCKT*}&kpBEn&gf|6ZZz$@w!!)B#`sTIjyv$wbV8W +z#_}P57QM>n$gjv1emA|HR7T*;*(Mbu`kv7M| +zu_j_`cl3<}*1Oy)WBDVoi*4i5X%LZiUR7M|+(Mj|Kw4M%F|r9d_+$Fpy(G>N*-Dit +zTzJr$b63L03BqmK`sh&BZao!n%9j0xYkXlg9Qus*a3oE+6XcVFI}H5^%f+^BB6kPp +z=O&$(6*oZz56Sh|{Kt`cc(7AM@+6XGrTvBE0dTBCOemK~vB_bOCmAtusIBC~@F3tL +z2-joe-eV_fpxAWF@ZUZXY8(rWVk#WEz)1<|M#I%FHox0mLz08pwIomocdI0e&DMH< +zrINO?+|zbu_5tx4q+qFq;3zkjtijq0=yxGeY&-Yq#PXJzA{!7YF70ahj>yw+3t+S0 +z(koouph$J&^gDfr+=mt#N$4wEG_qUY#a?rz(lQC8YL9aDOrAOD98(f58p+CD8dYuf +zsY{|LgYw!|9Cr!JGkvsIHX_ktK2cGPLNRwOM1S^Lac9bjFp$l_{bp&7et+0}*w||Z +zTl$>Ck(nY|gv<#D5JfCIWr!KKI?$m#aQq;PxU5@BC!WH=TOyg4Z_ZT}QLHBm$q0A#Hyke`kgPbi1kPJ>>->{9BB%62yW^}y* +zzCN;nX9LF21P?JISg26?F}3~-5Ko9la<&I7a2pCg5}qfj%DH}f?84;OXZ<+d5_*M2f&{$PHHW +zlkD38M#MqQH;}DCDg{FsZA|HXFy7sM`-z9^#a`K>(1c*6balGLo>{ZTRFP4Q?@?T) +zC6}@f)B@hJX2W%*>G-XWS=rhob8Ot1AwOozRlE&1iFSAD{~%hk?~yq8Es$?aw2P&U$X +zXB~>mOo-Ip`HI}v52LMAuz^OZt1S@vLsAa<^ycQ4G*c94u?(=ci#E)Vy-SGjx?CK% +zWG?foEj)@HX|Hz;iYf3v){A)uub?gb*GM4}4=wzb%8+Nv0hRrnSmid8 +zBg(|oTw1!5gnilfJCe}o@N#@nOS=Jevrjl07uhng3}_ARZjm6iM+`}xBGJy(+h7Q^ +zIiRF+?y#1*)$EQ;IMZzy?>Buv+9v4AT#}O5zx`nv&ViK&hVVcL0`}b)z8PWenmY}J +zB==n3->WeU)6gNoV5c#I_E-W9s|`_E*pj5&a)-2#!)S7d`s#j>1l$ve)DEXsu=lw0 +zVsZ)Lcyf0LlNFFN15^Rfm`RgN1l7s#v& +zxV57u2ZL0bXbqZY*)$2dgfH52YmZ+HC`i5L3Ps#@d7N1Gxc%^n`7KHB&9*)wNZ3j^ +z&|DMIP?)=g6q4AN +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 +z>J3A}CgqeymYAq*r~;14EIInh%_3Gq@?IW +zBn`s(gs?xc$Tvu#frGXa#m$rF#TMPKaNWL>%7bzu{)u_rSpqocK2Cq`d(jsz5}!xCoB#m{NJ +zEg9Y$#NPP;9_tOs`{Pf`yF!8tL2M8*hZOJ4{0%17B1+B858_1(FFlF!oq@TS4=6Cj +zXkAKhjoP9zgUgWym8u3b74AWUGBvS)n?gUgs&(QntYT)_ +zJakPuTPSZX{W)^QblDEQggSGzj1z^JH+~ENBkFXgUFkohQP>p#lA!hBVygxy+7mgl +zKTXHAkhx^1NvN?Yshu-I=N1418fp>c-h6FhBK|T7T4>>m2$;&4UJ-kXl8J=3LDBA{ +zqqpNKxz@arMjW!;$lBKSwKG44G>>3w@cpSHSbT!!1nf2qedskA7V^M4#Go-oG +zxtD0Tu$+xm4dJT{kRsordW&)QupX>zX_`$4+{bkSu@=E`0Ny&nZh^E{;2I+C7xjvF +zu<0nIw01>CO10Z5SGHSa>fp%&I>zUb^G +z$fLDY-PPWXh%n^RZ~+O=?6(r7SY4s^zBQH>+oE;>QDBhjevTTXUqf|`uJ)P@Lgjl| +z2otzw=0|rrE6Zcg$tTT_^Z;2J9cEUjPQ~6vvCpgpZTNVH`XQE@fBli2CukYSvDyTf +zyChKX+B>;9`w5cEPcpqk%@L%0-;jMpaQCj*Zq*hY53HlTy8&%}Yejo6IZ~)3vB89|Tw2^I(D7sV7BNr!&lwLJT$0UxNLzMQXz+Pt^hjdja +z3-+q8kb!WjM#9H8a6I1x#bTS&Cqh&qx)ETdd-ngAPwc7)`wnR#-0gd@^6`2q+K +z=-4Fe7LS^5TgT!)O3pCJYJnrPGBKl?P$Z>;*x373Cqp1I+`DFmBjviGuCzh9SGBzY +zAtBvX^a>_LE=I>`alJYF{Wo_?-Z@)7vgKALR9UvPitC;dOZ0a#ZEheJu;hsVFWCBN +z(R<$AO;;F`q)?8>`2UmkFH4RqOR^w3@4sk~JGvsslbI`5t=hBxlH1~Vkstv$5)P07 +zN__k^RWoxqBiE@Ov{dcAGa~o^9Paj1Qw`8d9Ux(8soi?1zikm^-zN}QqYpTC?SQE1 +zEl*(pJv0`cK!?;6K75P8RP*@(mt<#XmD}vV3^*BzwB~(Z_u3?s&FIKpeZ91Dt`{aD +ziSvs}8m|H=3?+3luyc@etNH*xsE*Y~jl{2Mfa3>ZcA^%>^miX2P +zfOH#nEnJaSb1g^{kA2udx5!F`!g6!zh?fCQAoIc2fg&0FL8Xsde~|rPx<>Bs5z7n; +zb;AfsU`NEP-nKV@-9t^O3?WU4v5V<1ePuJOpr=jetRU(L;?B!qu_tE2?kY|pvFr1w +zfi5uvoA*=p51caeecT6(NwuT)=J=~$cluE;`k>N+TFIQ9b)q&mE4Klbv8G@GwpQvji_YTKAQuL__95 +zEfb8*(-ciYk&(7*-R3}s?!Z{Y&1HcC>)b)Nuz-bXvicwRWDgI-yeXaTt!$_*9G<;$ +zo&k7CDHN0#v@zoB +z*r+0vLC>(w&!>LG7k#9%p@IbUDFH+-x8>~tap(3AEn`Wh`8-`(7Ll}^PZu&*$`6fb +zGftr0>o8P>8@14!D$Fb3x_8dROM1xa$3_HVmt-m2L6zG|Tga}Xu2!a)W~gC{)C +z7h;yW8|QACqlw!NK&Ezp8CjClLM-T<;6Fzyp1Blo)+!!q;9_4q3!2~Qv&3*>n+4q>`W>eEo;2*Sv$|G +z0b%^L8>7=5y}d=#DA`84Z7D=tAnMV`E4xB49=KfK-0XMh?~A?T>NY1L>e;qmq +z39w!{24aQ!I9}wRTpEln@d<$Z8HeILyOs$(LZWDp`QKA?7RSn+AtgC+ZO9nmjO&h} +zoikv_QNp}^%H^9zOabePe!wB5+@4b$=|07aYk7zp(@@Da8iz|EGQg(jVMSjA%aGWr +z(NfKuY(L>Q_}5&VTNc2?fOolcg_E=n6P%&UZ0&c3{PfR$uze-=!Kvbj9Z;155Pkp3D{h_7Ds_xiE7(X7`C_x +zx#-u#c^tKbt3M433I&dwLDDoi2nN)eW4CYD?89!x{tksH8%b4NG7O9oIWi885C%+h +zQ~vv`RnOKB#*NJ<$@|afU;zpj>?AH3@qry#j#ZLhuk!(BIui}AMlthwr}=mrEJ9(e;*qK(8Il`F71C~r63YsIoyS1wUIQD& +z!M8P{_3WD+rZo-Bfl3jB(9+R~M}h`K2URGNxpznRCZ`~7Bq)572O}&6M;zA?3a}Px +ziK1u0RtKBr2t=8AZ3%K~~y%K9<{&vOh?UdrMZJc+7VZ}nR44rmCCXteeiWEO8wFsKqT7}x9W(@_D~dz60<8W^>| +zb3cORrh~Yg8ElO|I_>YL7Stzp3SgkEaN&V4-;&m!bxeL_Ib`D8hDu@04B-4 +z*n&NmsF;|qcgWUj0OhJQ5~Qp;RGyIdaSRF6&>5G7kXn+kEW<02c#qj+$%7{fZK|H( +zQ*toF>m~!UH`l~0#CyVzpT7-1?PNshw_fcH!EQsm$Mr1awem=DAmzzhnxb%GD;|8K +zP`vIDU_sa}@=!?P4^tT=?n}?>zm^B&12Oa34ss`B4TEz1BxQ7pYjfS@e=+?JIt%d= +zr}OJRnr=kP+&G)Y@SKaOn>+NQcgGYUNdu(Q9)|X~2#d>;QVERVg$7VOqla#<$emI2VKsyqt0R9_|TCRsCR3mxCNAeu3;Z@5C@0U +zj9tdiSnO{e_$Fu0hbn27rakTBsq_i~xs|f%=L`)hzY1?ZnG~%O%vqd*{NFq>O5JwK2fdaV#CUY%;#?i$`xLg;@oYXHymXzHrMX{ay +zJY9F-q1XRV`8s$fw&32PW +zVotbd30>a!5=cjM7WK@%cM>NLno7!DYx972CT?o#$o-C;>-yJvt@AL7vGwZ=pSYL$Vm~ntpz(> +z=(p!JgUbTG9pQWK?fEgc1zGyh`RT%tkXCOM=o+;qN)y<08GZgtpUVyyQ5Noo;kn8C +zG-uzeoG$6QhQta;!B}Q<7BSD8)|mnY<@tkzB+MaXxivKvxzZo +zHps>(F~E6ZO*1d72FPfL-o=+78prmxXq*j0Ks<~^z~hz55SrUVDH`nnCvh&`ww-0G +zC{$FV4B}g0{Q)5LQzF~-!Wn)g69PrW27dB*G9n$@^LdFEL5zE7w5?}3AWC{8y+ +zRU9#dI&8u;;(`JksG)oU^ZdGs5K{D3)m-iiY^vowVx8rQqnu<|u{#GuFpM{vI|Yr6 +zWP$xnLYm8U$5y9p@tIP^3Za)6w@^`;%i@%{#4LV>sqXFpCdapt9~_3j0}A!{JM=nx +zuZwBz4`m^@8xp;BRPMI@9;O$jPvlMNwqm#wRn3r-X@?x5y$#h@SOZ(=u`kDBDNv&M +z&XzssBaS1$fLk>YCe4P+viL-%?T6V61B!Pjym$^d06=5;5rJ@h=fsw>Hifq<&%cu1 +zwHWT>{*vGmh6}F@TNVzawN?E>vo9~iGr6xU8HbTqpIU?1UV-K@5G{3T!P{7%9M!SG +zrqtKNh8Nkb2YJ7gTmqsSS{p!JADxLLkejcO*T`G5x +z*gZ-dmWJ-kyj4I2BrLkq!ska%>U#GnIA*m{3RljACHHEWA4 +z3j4fnfMKD*FFxTB7+>}K?CnIf5=i}odiz5x$%l{T%DckHfxi60l2hz^)W +zAh-lA-~pWh5t(bYxQdu5cED2;vg4KTZE&X5QK@-yz3GH;!MjRs1kkm*7oTHJr1h(MpH$Ui^`L6ex{&PAM6hgP|6`QLV`Y-jbg4q( +zi{3*u`O)>YOZ$SIuS%L$`SSRRlBqF)k@gaAvR@6G4cw=P_fWSyYC>jwloA+d@P^sn +zL7KxXspYh$LB)Iz7~;c&aoNUH_-H6)zUwqo#cN3RUQ~iF} +z@+><8IqZnJO=BUkzKpCvjJx%;=HudJfpB=`0|DNuK18vn_MG%$6h$KegAHQ7o`a)3 +z&RTw@&KxRb0C(%cA;O5*>E0kF+#*&TlsC2PizzUgApZ;?t&ty(5^NYYl`$oZ +z!Fwm(1MVGI4bUl-0MY>E9o|)~WtG1q1+iFpl1uBFd!A#DmGVjFsN)MQj@OQ@mTdPc +z@#gF?r-mg4gT@+01fYS~T<1p^0vha>J?0P?XOYFk5{bP;tu0Qd+*n0`Fh^IY_XBwC +zsNgC$C_Bs@?|cVkM5|rM2P=jP1w5@1_6Fq84&rc;wdZ)RCKf0WTSu_=T1Q4vofR_i +z*;$zu-TSq(eTNE8#+Z6{Ps^5O2I0_s0wydlsRo}@%KLwI6T +zr{mFGGb;?*rxN~vA=R}hZeQW+__g>|G>K)eteu9u`2iF6kbeCA{d@617x0cWF<4Yp +zci{aBh%)%|F3*3@LC^33oJtlB$X4@Y0mD8-Y25$3J$PeN1QmtAqVCaWo#eN5FK56&I%3?>7B^x(e<=5RQ%xS{u8%yCArM +z^Sp*FRj4pkWTQ|!E@ulJPO|q}CGZipD&IF*5&Vnl{pAGc%W~u~c?&~{CzjZZy5ccY +z{S>qo8l@I}_yk6`c8r@PVG?a4^-=)oyleXs10-iDOZMoYRh{Cl!K#cqQ>2KxQHc=^ +z0#5{zVQFsN{-H)&R?5fa#t5WwLRB0Qelsl8fbw(mu*sqkNnyrNJ;5AkNvp2>h>&=m +zcQm|SvAY|+Mvss0DX+SSlfcK#l+B5Cmn +zl_GQ0lEAVzBO5JYVvn^O*=3U*;o&zf1}VJRTePTFNtRHla%4AS**?gBEgmX}8E?CX +zE!|bZ-KTFdnrs>&J#9Gj#4!-Cg}E3zXw+#(=w`$D@^DrR!N{X49WJ_goWBG0vEEdC +zE-|{?IQDU>N-hA{7@^<3NcY{JRo2V;;cZ`?NiiY{rkn-@$x=s=T+nCbuv{LGL@szX +z<%9Y8_aT;$#gTIc`u24=jkZ&qc7dE&(b8Irj*XmyUK!N3huA%km|{K;+tW)L8m&`0 +zA?3mlcwK=@PsddIsHaBkm(?uKw2k|!ug-h=GWgg%yDy-*v$Yp1wXv$vwTwZxKP|cf +zt%{ijNqkzYmO=X^!Tqb%_{5$FT1H(BRQ?9uxqhoatZxSJ$M;JA?}sAU!Ys+5#qT&3 +zlm{>mps;@p|B*Jyg?LtRMl2O^HsZJ(>kho`oF9jRyuYBQu&m&aXdDK_JBF4FsA4>= +zxyWYbaJ7#%p}MyoV)>X^E0%Q~k84~@M?kYJdxX|oEqrWY{?59ao>AheCr}Ts+LJ~d +zr#;e%v5i+!t`wc5l3Atvi +zvgBJNSju~gBvrShJ93HkSISp^1n=H%%6Xc3hv6yEzuj26^O$}G +zq@)HGGM6WjO`q+O4QO!*0=k#y1PBWd6zXf#HcP;p!iSSz$TGlTEQ6NhxX&xD +zZcMTa9B@F}}IPn0%GEsSh7mKKalP +zxG@;Ig%|3@Q{F*LXXs#x5&i_K4n70DQ2VyW#ffIF|an(k7w24^^q6dhaq@=&~YAmSjlwk{Ddg>GwOdQ`B5GVzkEX +zP)6Z1JR;E1WFHZnw(8suj7#^gBw{CGBq1zq7%!6{XdWJu25I(`O24P_6nA3nfw*W^x@ZV6dc6wZp0 +zmwpmJ{QKlFBlU*vTc<4znlP4dN!hPwPSN9X^{ADjFxhnWOi;0bD@H3X^Q-A4t2d3rDORUS$c2$t9gap0fK}Z!#;gX`o@}%eDpKBqg(X-n2ePhS9R +zaMXuBw19r_fT3!+qw5NhUC2C1bdc%Xfc60`nTk6ZI@aL{XgA5fs&jz$7HfPD&Q`L= +z5&AnhoH8b{K~HPm3a%mRlm28&RUcIiftI44-UCy)c3@u6Yv1+UW3q-!sH`s+wR|h2BQ7p)N&PgEb^^eg?ND9FlKn4ZI;x6|DUa=0%tCCHzjPJcE +zZe9}31EE5Key=(WNDUoxYMxA@)dU%tA%h5E%Tj%4X})<2S{yC^+f4aXx1s2_%SPjr +zmrYE{1-*`dwsK*}t)Nm7c8RluZ1Sj&g57bL6?o`)o<9mg^jugq*4yCAgcS5osV*%?uZ)L`dp!&2x^=uD*xNrkdCk +z!|ajuABq8O)XYXp6nAcA4oW!H7O9^kCIF>i%Jy5C+A_RPsl{XkK-UvbSon3>$TX9K +zXmE0nm)z;w;%qdEtQhD*Uc0+o1!(jv0bZNtQq1XzHEQLn?m3kGf1-B-=N*gBKfeF4 +zQwszd&h_Q$L%{oblNCM>`LupuCCvEq=o;BkxRLJbBj7ROsf^byohRv5>o!>cNSe%yl +zIssD44h+4R8EP@MMlLn>;L*+l&TqqNZy}WzR}tszP}An7V@TEyua^!

!HXC)xz9 +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 +zj0XX-oK8JXuXPjkJ}?q9bU^Pz%fGE +zfRGc1US~J>-GJ_EmMbg$k0F#b{;OkZ;g+Vhz>${Vnxmj3_FgWxU8q1`!C!P8Sr=uc<|!-VNGN@JKauuNwlH(5|S +zvkfTeh)n@e)kH$6>W+>bXK|rDjkg#uFjHo$jEchJ{jmcAAfa?uWpn>AR~0A2XqKiRGHau(db{*3B)+?EbpBv=7sGx(VbCD-+7VdE*F$4z9is)z0Jd|0 +z-{8S2eyw4^*bR;4vD9$oln8k3-9@Pnb#5-YMJE1KI~lnMX?&)Dyey9W$%== +zi99cMiil$hra33+oS5_GFzFPH(?C)kduux*{9^u}G(=@hjFFi=T(d0^U_`J(xDg_q +zyDJ-!n14^l6sMB3+9t8lc1%PE7>q7AhRYrrvSFwO)*UNJav!KdN!45MXa#e&{h(%=Bc@RzYDmi~iWFD@KN_Lg7cn{~ +zXrb-IcGXAsm%YFtixU2R-othdlOoxk0br#{q3qi^7dPH~x`oA(FD;@02SUugMR2Dr7QOkHog%iUBS2qJwOR`7})`&kSdLZnnH%@{w?IbN+y`t@VPv!4GOw824(O#UGuVnFR +zi1ahQ?sHi2+f50H{$*DCDR=Niv36;+t`YU`2tj;l=|Dxdv|8HK#e$4BDYC +zvl?FDb-`s#tx(=z=j9Oc;-A`5$-wcn~pkYJ~OxmlsOeun3JuiO1LPH +zYU&PHulQ%Sz}Z~JklV~k)A~&|^yhU?_X9&Z;uSN}$hepg5+MLJfss9J{WvTE58if; +z{B3ef02Y=E;6=e&nWA#rkYPobw!=vQ7_#H9>a%`z&N2;UhRWVzx^oHza{`YL(wjaUq +zFCMpns{F?4ryVlro9fQ=>Lleylo{4+b&vB_q*9@A#bNctY5eN*UzB)X_EdzLxh +z5gv)xSjBRG*}`&-$3DsbpNwL-gL&yONqw>>S>U@k!rk)6uFVIF!4Uk9nlc)u)oE3q +zk~J{RHHS$o;SzGMU|(g2{vj)pqv7-`V}9gA#PuM2%|S1RAy;&~iE) +zXUriAw2`8ArBAV2N*q;+Z>t>Ora?3kQMpBPh6>Vuquil-lY~emlu!fdDu7cLLIvc+ +zMoAZjpvX_JLAFlVE3LJ$Bu+$ArF}lNV0@64@}FXG&QJ7SpgKV%5{c|-?<|8yLCRe7 +zbY$B38Z%Sq^0>*#P-Ss3S*DNR`#-+_>`&IXMA@hZ!aj-V^O`D>y@0V#$%obd#G*6& +zA1$88i9M5vDn(X!rR3U;39R)+jWY +zGnn_@3v-ktp<>Y5z7;0$#B(ib=?I6iwS8QNT#B_-zMu6bLx9H>8?3bO}zD`GFR)4GF4n&mz8nT=*nlN?_rKwZe{(+zXp +zpyF{6gnG`5++Ci7@jZ|~XspyBR=FFVU5a^_T@F=5?hhe7iLs3d6d%DkL)0X)RMl;-!C|*8-a{AH +z@-ZDoN?}=!Qqh?WlI$c$2PuX-!RO}9mh`K&w4Sg>rkhQbmVsoIvElH*8 +zkl3hI=y1W$o6Sda{p>K`h-^g+wNW@*Lfu_nu>cgJackki6$yCPx>_%$7Otn74lY3~ +zFDTPT5>qfU&&nd*U7~gCt`9B9_l9rNp>PNZ0esvQHJ4+ +z$IXscavM29yPFF+UYE-dD+#%M5VpNvN0XnU(&rY$u0|~MqC$23sKwEhYzOrAy1l}0h-%#r!+dNd-c&rQ!kdJ;foxmCHMSre8m4m=A``A +zTm1Qpi^FmKw#a@NXj5f_j19$vlDDEHuOq9BK8D7W4}&x6$p#lA<#V7OC#`RJgBGT5 +z2Igg}w7aeq^%vq5gAuK@Ypj3)jfAtdHg;_T1sA6NFV^iHt5y?=8h%QhuY8bbRl(kK^^Z +zJ@6hpM;4nLS7f`_h&_Ao&gQv_MIuRgI`FnkpsocO0diOtbphD?e9hSFx2}>q@|lBS +z?bib#c@au-=A|7n0G@`r~){73lvzig19 +zn6bj0z@Q;W2q>)GV|O6izBc^Wwr$(C(Xnl_<8*A>>DcPnNym0NwrwX*)>?a=v$6Kx +z=N{vEQy-wls99D2dClK-d4oABd-gCt0+YVG?(hs#T`CNBrfZ--0s|F38%U#70wzIy +z&5B%DU0N#8E1HM}DeZ1+)`_elc(@1?q +zd}*)P@82q3Z*+Sm_>M8`x4q>JAW?TfX~?+|#zf<$jwi)iyn`e!R@p)tap=t;3bZFd +zApfOkI`C(bSLGsy{FWp(meWL!2m0)>x&|rfF2OORW>kLPq5SNiRdL8x5z99`an99k +z#&Y($Z}ffn8;QFPT8JHJ1OZLob) +zYM#eju;UTOI62wdMFlD(8yGr^u3rSwk>YZS^h+HyEb*~Lbt&BN?XR#%y=bxg^qr-4Pb-j9R4M6?79dtypd;rn3v_!AtvUmmV=$(-f<87*KXRnd@$+v3jj +zSr7omY0)EMckmp1U2W*xG#5AVQsqXIR+k77ZsZo>6IN`Ny@t#prru>D=obwT_YY)y +zcT-j-0U2OUcH%xyCGL!s;d;p1UpU+$1BtLmL>lj%O}~MrU$HYZO(;#41iAeN +zlt-Bb7n_HpoClAy? +zZ)O3h4HdVmG5`T02n}p6ZeABa6kvgC*+mS$;NpNm#-n4~Ei6ijd+$Eq@Vt_1`>@l` +zlUOJy7qce|bg%*+k{0M~(koJkN-*dcMQabKmla%O(C +z>0NK*POu_o{ZuWTsEt`_j(E{0m)$OJa2B%8mzRz&v>2N11b0S4XVdr!6^U3Q+*n%B +zpoL0(M}!mh9BEB9;QX_zGn7Jg4Y!!bfLL;?gM|Q*Rh-;d-zo&Cr5AM#QFJQhnJIQ4WP#z}in}{U{Fj +zpYSflw(WVp)M81N+2RT`HeWF6BN@P)%7VQu6)Fz!JV~IEVZaIn19*0gqHs#!%Fcqv +z*!OZ#?s;M907fX7Fjc~WH>YcOu9Y{qRV2 +zzxSNt7Bn@q1j!es&Zct*mnqJ5;KOPHr{=l@e4|l5oYLZ`8!5y_fc^;J)iRrb;4+lt~WU3_LY>y?|gUnHz}m8J{mLMy+7RF +zuW?5gPq5Z~b-UU--<~nLDrWCSH-4r}%Im%RJbCzjUf-@CjvlXvGA3h+vX-V^7SAXL +zuk?I3wE34_RgU6r0d2qoUw2@!h@pRURc8PJvmEh=6!g1JRU)ZN9e<^NeDQ;58fuUR +zurRfcuSMs{_cRXi$sTHChnE-y!J=Bgq&esH-BRR~+L~M13wg4uTmf>_gPu!5>luEn +zm~X4t@(|)?Xr{!gf~(#P;#T`1jTzY% +z{`EK);hkaaW&b>jal=LA^jbBeB4a(oWcW3MkY +zW-r}l+fQ>%8zlKGg7A#7h9J)F6-UfCvlJ;LmO(bjVkL6hKF&Gm= +zGENz$475nuyUPT}Fp^JIStLbx5bSyDggE>l{#gXMNjZq2;Bi;3y@QPVAQTQf#~2%T +z=MDXYYVLY4strzBe(PFGBqU#vbrn%SrB>E08pfqg0gxy%H27X1cD+c#F99!JA83!^ +z9@#hFUu4l1!$UI>;fBT*7lpoN%lJe^GBa0i+eG3JOPfyK9qhwWk$kr41xyoUAZ7)d +z_4S-k6Jb9=IADsGn%9uq>S?;u0>^1FBhh@JrSa&5#653T-rf*-EpW^}fJ7IKJm%4` +z5%bI{Lq#kjp8^X|*D+xIY#ig9L$j9{s=IHwKVno$M_78lV9NT!&Ra_-EC68BJW^(t +zp)AqDA&^{4Emaam2^99Og3lWN8;hu_>Z|(s3#g=~;!gV`JwQ$mB$whYHU%c*>V7ju +zi`fc@Ihl};NM;)80t)2gue!uI;{Yr1#|=qNsQWn6o5^mjj}qrO+;_gV^(E64?g>G+ +z05KcVDUGbplvak9VURX*X!Hh4he<^Kk?Gt^Yq4ok=%jI!Y;Hx34oSLkZtA5@(gz0L +z*UMnca+`q#eWDtNbcCA8oP439bCBpPsPa8s0+b;z3e~3)GDq*qWuzt!0H2vg)wO3| +z0=H3NU~)6A5{k!|51l|gV1f9h5I1fS +zx(uBo8yK7>-!|>OQjOT1a2C##K5cVnu+oQsnuJ4v4PbuvXRUf_X}g(msR#*>#OeSz7Jw^V*{n=qKQAz*_>Stjn%zWX!QUkQQCl6%A%iTWYOr3ZNQz8w)h +z78FzSpX@4_60>rAI47PZK5MEU^#@SCsb7-Ordlz;3kr-ucEu(r`XI@KGO0Z4-6{1! +zEuEH+bfPjQ(Ud#2W0z_pUdjuv>CEI +z1NARQet;qeEWtpY^gj>N(p5n6`X`9yA&#Ju!2FP4C$V1_dKFKrXKaKodbL`Gpq4{p09E= +zm^OEEr2e+&`!RSrBrLmjW09HQ$R8}*w&?1;V%^lL&MdwDakBoaTy?ZJ+RJZper(G7 +ztup6sgH)G$Zd_ic(i49Y+L5FAT{J#5=h^xAR#XC39uQNrUS;HS7ISew +z_$V9#v)}r(x5iPzWShF7K^s2Hbj)V_OWTGgW^%x@)nZtFJH`7R&9>1J&7JpTyvl|p +zcIy?!uA*=BCB{6}S)8-nKjewn6SYOWt!Y|O*q+wi{Wj`QYz)!l-CU;bTL1JBC(!<& +z=D4L&Q>rs$J_sGWbN8%OZiM?PxIzA6gC5M;y+~gRtv3q?v@DDAofJQFBB{gI*m=yJ +zvFq_(W%9B8rSXDo=OGQ-m(I|=is$4$^kjW<1X742bot=Rq5rZ5vj9#%*+LJ0kNk?T +zOkmVJUg{;$E7w!w3n`x}|G{VVG`Q%A&`Ktb)}bJU#QRy%a?$F|V{?wrlGxOow+IN= +zUPjRlrsb241N>ye1cX)?=`FpTUHsd%uwcNQCeO#a(KtIfym6pNkxeOW3ZTLSuFbDiT&@QAv)}*gwko-#4r*qB8-y7G7cgaJ- +zF7&@PdX`iTOhPl=;#|5`k4|NXzX(|HO#<B&+y1@2x!0Lh%OHtytu9jvene#yzHC3#@>T%U%Vm5=XJw86z5uNM`u +z&`RQg-nd>P;;}C$JHDa?8h3z^f`k3kPIypi0+}1O!#7`b)#%5@y&Ccb1Oz`e@>sDN +zb@pV6qES@v#Hh|6Uhh=+^4cyGJ9Ku%{mtNx)hl=l&p2kq>{{n%3rChnC$l=rn_cLA +z&F&s{EN<1yN`9Q)5FgEjHlENOTZn7>NyZ~`S@^B>=}i*BukOszmFouU)|3beFtcjT +z2z$pAKwzi>(%kIAxz#6#hIyZ=6V>WH7YC|VEo!?RRQZW=LCDNZHjh_s<^JekO9sE@ +zgTa%&bh7Y*7l3mpQBk5658z$4emJUk*_ky%Rq1!rypcy~Q-GeAh>aKSsk8=o;RMLT +zM}WscZa%+Cz=E^PtWA0ShP$s)(TVi(e4sLFhFoHm$fGGs=3$iyb;1Yu?GL3Q-wR4h +z62hUBX-N_MfjUpW3gDFNuHJ#AyVT9{V-Y`nwkW=KXX6w%y!gpUJ~{nb_qDCc!N5@P +zW*ZLP;nEk7?Vx=J!aQ6ZQHE|xZ0JaE;P$DeT}sn+bz^f@eGSImK8F`tgD@9nwI{{} +z^^KGdQOeb184Jy{n$&At7|;}}541V~Sn;ffT7c7EZE09R%e>bPzy4YBF +z^K(n)Zx1d-Hiq(%lMffl +z(2fA&7L?kGU0qM#t!XA>gdZ+{Xwq|N41{9$w!nSI*WO>OzNEZeUk#FBH&ei#8u^Kyzjij=q@8J +z1{|}s4^3VqeuPWnDyf4zHrK^Q>qYg51YvDVrWA|r~Cn0q6ZGLyZo}X((Jw7OILdNh#)-;{t86j +zuFnI)|7#R46k&%6j@uX7eh>VeP!U+SKKL!KS}l-)ea$=#oUrB5FM;awCi#S#{=|(} +zd8N?T(|WbSA#raT7YR^)ezT9H +zx!@MJxFEOEpbupFSQ8+!b~S35ruJ|tn8MjD(}sbJP`Kj;#^z)_f63!iy~1LO#FnhK +zL<+-M{OPqkI!v(sBCAJ)cYkb)szO>3(UHSe2MNgwL)t#bSY4O`!M0?XCWw@jURT=< +zd<;x@Hj?yw+CR=ip0U*hNG0}~0s~2zS1xK8ng}5DgFUXRwO-6iyqys6s})`hAgvXg768xpiNwZXyK^M1xi0m;jIZD8R+}g( +zda0;wwm{HCp^kQ)Iqwzo4m*NU&P3 +zMvrnjXK2Xbagb28cZ!8&^22VgLlOIUes|NBqDk;tuU13B35}^|^(w~zEs1-MO46k5 +zJLMtCREU1^Yn)Tbdx<q)`o3uF;MPF1UQ3p&ZfgL2!AZmhY7~+>qkQ@*R7O;xyBG3 +zFMv7GoPi!!c)WCz@!va)2THy_H(u|9FFE~mZafyOBc;=$1Hq-e@!M{yn=peLdCdjF +zYhyW>I3oSF>+1g^X5*Fos}G(b=7c?SQ69~WiX)g-xc`g30%PA~#5N{Ec4!RA8L(~5 +zwo)*LIGb%YzcwbTXxK@ko~bIiJvAa5wvb +zH;UF%!LN4FwN60qA5om-;wRax_~N=_l`Awg=e7)xms!T)gs-&KXt`z6hs +zQ{TyKWNk}u5yzo4SJeo=pCTo)4SoTrW=UDmLKCmce|%qOX8zqt773rp@gm(%lbn(S&q?fL_3F?6JaLL3F)$`B=E0$;peoV%6$KCg*mC{nb? +z01+y4?!tM}eV162;OS#GkCou{zhquKHge0lKNLA`a7%LW1lS})d#%82EhYlB8cT1_ +zkV2}oR)#SR2Q8JQ#1H!`P%`+44bc6&Bm>Fd?fSSELKWmyIxA6-M8?4{3aB5T}_i%6%EZjjcrUY@qa0KqdT#a?+JvoJhgU+>`G +zDn%}|y6{rb79hYiXlx^$zdOnzHOS%u5iP-B=`DQc<3Y*VT;?2D1i-GiWAyrHSUGn~ +zZlaS%i*_YeB0slk-a;SR-%9{gH@Q8yqNImDEQgyuale0w3E42_1}2#_kJ +zPPoFzCiTKK=_ADn6{8)EvKDZAip{MuSvokts!N;$Jt!bZxXU`6C!hi1upG+%lsKpA +zF#&w94PWdA*0~dlfHZCox!?fMd3(-@o9lu|@Em`6BH390aWw_)Uu4GzkvsOa4pUB) +zf|R5B8FG=bJ)E0c#VDDip%L&z^!j0>chHHbv&jT57}!tCV&51s2&2%NZzB}$TXl^r +z^7c|<&}ePLnK>CMdO{xOBnYnyDGl>~&1v0~F}jq&PQWKcQRwHH665j$gCJ5ZQNY~g +z%QWp>rZdKcnJC?(xp5;kDVkKw6~MxamEEO}@GJ{)Y0HDl&k0_u29g__LOjjpmzqiI +zMRE$;Lt=U%BjvBHIgp~vTrqh7D8iaJPF?`QFVt1Urf*@0z}ymeFRyN6wzlI3O2RXS +zPsQ>0S?p5E+=3n=ju^n9EBQm=l-Ss|m6gMeX9RdpxnZv~)7?fQ?vu<eb +z`np^kyDP(1bK`=NGB{X~2GLc38$Zsi$+hWab4KVIHS +zl`vil07f)(DLDk;^edH)o#*EFsX67&+!msPbfIknw-4koO4DKKsdC?Q2o#t0E~TVL +z?4)e2+t_V}_~QrkzCCjRdyh_3d@?zHz0w_{(Z%|ofWZg;1VcbJ1fztMitWiYd`l;W +zStJ)&>Ao#8pFpqsA`KjB*Fe9vn0*M<+`%ixYk%~?O4iT?8pQCe7UzT+KK+BfGK48U +zV#%rW2~iSK`8N=cCLe^s>LkFTLqWQeO8|t6lZ(=kB$N0EeilBcnQz&kd-t#8mn43P +zGN@hFS#b}3x%WMk8ZQ%7gR{1K?BgA$E?4M^N9!XSFDo0n*sYZxI~^97J%Q<6Hy1jL +ziMpDuoFxsewea^&g$An_Ortn?+e;v84wu|4Dm$kf!Ac}}n6%vnV|H`u$EH`V(XYn= +zJ(U#kfmeC91-@E&0hyGTk>EAyd^rzoVDh42B`;SuGm-!u(m+=*Y&au9Z$AU2H=ziE +z3~Wf%86^twjEe0+mpk#|m3+gxG>jbYO4DUuDSdW}z$l8vfJa^O7qf2jU0bS%)y*vU +zcQ4Y?2GBflbL(t6WDXJCU?AfT7U?$7#PIpGA2i-`>aNbTCv*e?kxpR@M&4#G_@Oet +zslaMHYbxeLD$xF%Q@o~zHU_JIlmPP9V`m$Kh51QIozk!j93q(Zd5d4$9#$ +zH7BXE5Cph^c=UQ@6w2Mn6NO8p7{oL0TzD#9;?#A}g=Jt`$>6A{6pmf)^brU1`Ke49 +z%FZ@MtC4(lNU_OqTTc6Nz?)#7g(04tqm55L|0yt3O-ffEu|0JdK=J&ruT!zb*t`c +zbQ>|-uXiB-7MQd+;U^P&icg*HBp~uqhO0Y(2rNI*^gx-)lEs~Wpc4l+ +zXnHfpj!^=IB_NMia}QXk8uF?<<4 +zIyu|2S%?kovoA(<)vK=joIWRaB +zcn{>FvE*{SCUCgM3*`hc#twOEg9&+2M01YTQriE-@J9qm^z5XXznHfw~8Wc=Y$U<8T!R5{o=c@7gNuiR)grwV~e +z^;7wi1teR*Ei3~-hHRd +z6>UK55@C>axhj^`IgEc6rE8xm@L)4-I$cMD(`b+u50h@%Zah0~34vM*9A9=S5?DwK +ztr%#0QyDEal;$019-x`N%)ij<#9+c4YVAx!^p+yuR?B%U+_uB8XxXNU<`>e<7sR%- +zG9C~aSGXEoQ#20AE~c;+oe9(@ieRWQT&k2%2m3P8=oBw{lueyH{3^4>WblAMLYowP +zRF`o8YS&8E%iI*>9~ObmSh0-H`b9Pw$A?g*sc4AUOPCXrIY@zhx{dV^k0oQVE?jgq +zSXm9uB_y=itC`haRsxdJ5vORmOBTf%+=NBlcYgGSE{32xCymG19b&=~3Z}1*oL@bo +zjeXyr#X0#{YhLc)Nh4_;F;SbW%shdtb5|IJZjh|dv(RCLbF43|1)`h1G#IlRrV=+){1bWLHr_xNK=qPx%9x-PTf5vjb?7Fo0|)EsiQ +z6Vx-N2Y+^~~lootKkE~>eGMVW(d)$`q$1(7FzwRwVZ39@pj7-ytarJWu4I>T(@y63 +z-MUYIuXEJAtBoar7Q*t>3RYS2s^2F`fJ@R167Jl#;V$vQP3HL(3yFf6*u5(}LJ!o+ +zUGKfQQW%sVZk1D}a^6^2$Pt=uDH0GvUrtSY!AYsBm_ucnvAkf? +zn<|G=_r)A4OOJQBc3BA>)>S=639+D=RP=NowN=<+WKqZtCdICC@7d`~$ +z3tCnZ@(+S>m1F=D6KL_N3c-yP4vOXTk4OHGn2(c>XOb>Cb6+2&IS;NrZk8vl_muZL +z-#6b6bgsUSCXlBOc7o9ld?O6=lcn^y!sZ +z^15gP$KeWhaND3rFBu{x$#=)nD9s#Zut|FqBW5EGAD<7<_D6DJRMd4mCPIMj3<^u@ +z@D}CjC=k3zXL{yIqpqxb5fd^;uYzS{U=LuW(sMF-dkfDdKeLTI1Tlk{b`9KlNQeD! +zK3cW1pIq!k)?YFA;RCUGTNYEwF*9g2XrGmZTi#1FS_zcG1KV#TxqtzLdlb(igY-3X +z*3jihr-vXkgPv2fsF{B7F&9W#33ldqzDM7;MU5use(rTM$}|D6ahf07Pp#KraLqIM +zdn*NGYPkjGaB4{)E2RD`$Cx0O<|SBl$Z;}=%mk1_3iURuQrlL5{W@(+Apz$mmL#bf +zl<$(o+R(!FMGsGk-)px-s`H`X0pqgWc`A$vV{SPLR%zsiBq&fnm=Pr`Ej9q5Ya+c; +zAy=744upp43d~~oH!CESrJy0*o_$_W(}i&E@2#FM^645J9=CtWtz??O}Z_ +zlWRdK{1I%o7sip|A?58q(>6NB=c@^;L+;*xU*mCPrWGT<5Hjs~vd}-U^2z-mp2)0o +zwWtMgwhCnhGBm@pt`(e-6E|ZWi}yNb$2?N##-Dsr-aYXQ!Vok<>_ig}V%@>eD~yAt +ziy;67fYH?fGiI**N9gq>ZWRa7$dFmXHz`IlXJKA$}{HrkN +zA@pwVg;kVsmPkDpWSF&C{#*;=ot!@~6e7vv4)uKH6UGlDefj +zSpWrsohoI+kp;s5nnZ +zJb(BjAs|F_X!^i~ggK?f06)(}US`Luy>uS(Ex^+%t;`sh<2ogakPTUI>mpEhE`##Q +zct_4sNx6fGwR3og2*Yw^nT`Wjt;QOh65hsFD4ncGsaTisEXM=~G$(gU0#@fBa8Ou* +zRwJf=`6zG6KW6^+wtOqGzvY83b087fhjjuZ_w3#iy92`MM}L$Vr7XwSRij66+F;`B +zJ^3_+>X;?!QCgsxVa-Inah?(Ub;mR@zvxR|TMlAL9*WbFcxj!F*N5VvNj@8A7$vYv +zmxUSI^~PZfx{Wf*x!`9wohlN)87~lVfL5D&@kg*8Vd!ySPvbYBme-Inw#lAq!NG4H +z)R}ZsvskgnllzFJf`X_5+*WnJ2%ZaA;(dU^8)O>=9MSnS~0>PRVZ2YW_fQ2Hq5iEje1nBp2DR8*LE|^lSaU%E)(=QjMN{cQgJsy +zkWGc|SKD53O^O2ow`vPU00@b5r$Gl+go;~cdO|;4I|R&yYTkT2XIw(Hz)scLx=(tC +zPR>xIQXOiVUv^Jyn>ikyFj5`^#WU;$jQ3IRk!5SQ9@meq^X&jW(k60X(i{&HRIj5r +zQmY0zq!6y~E|8FFG`teCbjbs9f2-+nOZongiT>PciH9~Yg(I-r3vv&E$(+q)8VbAmq?G8aJ +z8-^tvL+7h==qZ5)C|)e<*PClSo|Umb*K@|584s8>Uu#GyJ%V@3#%wjJI1 +zMYM6E4D{HPtIabJKB*#CWR$BuZE*K#a{&7dabaIcDZyBb!8}F% +zdi%%o#mdxL#WK9%8mWn(X@g3l1Zv8m&Zj073XSn;Tf(dXv>bt}HF2@BkV5VCiG8a- +z2569$K3kA}vx%U9;rE-y@&>810vD0BbB6*x{9bzr5?@FLwygzIls*YRM9M8(zG@17 +z-aTwz#Cq}4x>(d`Ehc_{d{Wrp(!l^JnHjD;<2L`rfTA?RuOlc^YaYBr#9IPNr4S*? +zorurZLiY&@dBiEx0%kRGw$8oDT<_9eA+_eDWsoGTlyaP4r1X9X8Gp&LZ-?=Txlq)S +z)l7w7hd$=HER&KpfV&oh6J-Q@M^b3}!*5=~Q1v>WCo +z2$PF7Zb@+uzA|ac9rzMFncprPe(hMUJ_k%G$i2+iv5hCNK3`zU2*QjAc3bNEj2hcd +zD6$o2Ipn-(g7bD9a!*6c(<&}Bq&B`7tVd+#8h3t^k8VzpjY02j0u^q{hv=?nmty?8 +zJa{VFlBBUE4e}8;W#xL^$VV +zjUx6h_9e(L<_e2~lH1q1Sd^jnN_et6|0GD&xK +znVIP895QKTqWJhg`f}w8Wm&;6K`nB*f+(sln71%1uU^OEUU6TjwCE%ha*zae9ktf+ +zru=L_VtJE|(C=pPa{?XsaznGU7nabVI&Vt(FAw@g_nvH9kHH;kujhq5Ynhs=?r+wA}Hvv%+SXz(eO_NWtMbWJ+$Y61PF4*OcMYU%1X_2 +z)%&if+^F^sJg7herUh^~&SNnB!s6L-??m`9x5n{x7DpERD}ZYQFv4(r0a~ljLF5Og +z^VJwE_hZ2@wyH#xQ>{>iuL_Ffos6zz5)Qqsw^*wKNv-OY0xdzf>XD2%`421sJ)>0FVm7#5TVC^AI6&N^{LA%DIHf-o5$ZJ)AK+U~Kf +zqsc|p!6Q_*Wj@ywzwkZaMEH-WXHr9p?=#Wjb7A$9s~=Qx_Iur+SSe=lt-UHeGC(ZP`Yea2qHoMof1J +z)gQSh36wkqw>dw9)~s>4`ebx&o5VxZ$eV|W5fq#&1Tigwx>u9_5%OyFR(5B568qP5 +zOpkNA;<=6_()rbb!yqL1B~&of%`0Jl>dCvQIZjFywd^S} +zfHZ9G9<#Uu7y?Ol?=v-VKp873uSECO^ve#3c9Bi&l#pt_S*R;e*jvNK7Y!RQ5p3YJ +zdAFJ3yE6N@g(@yhl}V)<6eRwNcd&&D@Qb%7y1jng+p1Uwx5a$eq>ze|M%}f|L}aUAGl!rfn%V3djrG +zzDQ7Pu0?I%_G01J-CN}B@GtjB$B5BQ7dy+1B{)-1Hz-D}Q}{XVBk8s37iW+%ydllsWqZ*??JQPw7SidOXIx7(?%{ER2sx0*3l#g)(lcVK$kamf< +zASB|>JGfif_dp$p1p%{pFbpWwcblUTA{rEk!Nas?ipm}gta&%Zpu^yBEwZlGL$pNFEuqhK@MiGN1}jjaA1K0U*OyBBt+QOH=fk3=g2>{q8 +z2pT@{DY^c=!swcKlo7>DzFj()F+h6~h(YqcAMLb7q`%LrLwHLUm;${fj=*HT_9n0| +zCP0cHW@3moa4tU3q+d6z&r^n88jnXYL8%ZvCq4i(j~#QhqlL_ra2?s__0(0^+!WElHsLG76I!Qbnm{NXy1_cyH>uM95bCZ92uZih@ +z`&GWI-5SX1%q=Ge!t;1ZhV5-&lWzr#LQPX~$N)a$tV+`ilYL$@j7&U)uiu-gLH(eF +z!F%YKjq4H(JQxDkAaJNf+)tYe;tcze8o}+s2uswL<{vuq*;koGJE*XDDv|=P+*IrA}IR_GZ(W&dOv5X +zSW*rThf(k=C^~^=%DHNVfOw;-FVwCB-%SdULy`gJ?Bva~NDC10Su<%{YlV^gj{P|t +zH(^kYQ5o8-AX%d6_(qK}Uy|ffk*$;{AA2=rh#)!jib@||50nV>=KUx!JMT!~aGz5C +za;}*H-p=fxq$KX@cB-8+vS5`Jq8M4JXZEs1WRGMz9wPjJofn4cw0g +z#v&m3B;ubf^+iBFt%n#`RLtt8`bt19yxWHM@kFSLw;EF$?eYv_!^v(kriFHBCT2n( +zJvgx5qg>#ygjF%UyJ+rpRR9W%J>y5H`+B{c +z4hBblN6^s`wn*)&#H8sBu;tx+7_soI*hQLbq{9zIcCj$P31qAEG$U34G2vUfPLOGi +z#xBtvYYd=m10Gn*@8ZFVD0xT1R4WJYF(9#^Fr7Co}Cu*I~ +zY?1ddsm3s~?!iLE0PHf$VBLc^*SIe{4v4W+D<;rxDB+v|auFgr%BBF`9&`G^q6$b_ +zUQ^k=qn^GJ?FHfqjXcgC$~Xzcq)kRfCC7&S{5c?$)=s$Z^mZB +zKW2)d&@Q~y?=%DmfHfKe5qQE~+?m)w*{9J@EQ43K`> +zx?IbPL#`->KB7$`<`4eU!Q(o|WH22OcxlbaCUZw7xY?MoGQK2Le?cXw^N#)+1L&97 +zUR>lBW1z7+KTU%x#H7mnB?91A#cvW1TnpwC8ur_MFV4e2_RBkK!JZSE2pL%n(m6%w +z^dG9L0L9dv@QP0UMma^og94-0*ajPY+H!fQkP)8l}OaN7Sma1eEc5q +zD{b;Uj3*{-L;`B54f~bPI!)33CUu45bY&%#YAu`ETsAbI%0!j7#d*FWteo>;TA>Za +z#xNnw$pnNpm?%HpdTi0~VHvO%tD|gFUoEbuAb5Sy~gv77N2Al}bSWC{keb3pT$j1&^ +z$W$%bLct3G3BnBu(n0G!$z{sd|LSbR1^wY{!(aS`v)!`&hqK-MugHm+ZzAH*+!uI&DplW`xj^1IVOoo?l))K;omyjW(xno*+&2IyR&`uKhAdP +zpUyTZ-`_ji05$*WY`6WRvwidLob4_2Y!cc3b++yPaJGf#=c)grv(1q3hqJ8@2K|rD +zb~4(hv%L%XkIr_P&R;s)Z~w*F{uTM}o$YxKtNf^cbhg!PKAr89-<|FBzjC(oKmO9$ +zR*3&sXM4B&Z_f7h%b(7+JM!<&Hp>r$M+JAPo0mc93Y+JXqfF7v-m9wp&1^-3{FAfIS@(ytO~Cp0 +z&Nk!eAI^5{KRDaO*0d-f0!jbX*;a`8duO{i*2-yBoOt)|oNev5U8DbTwhIBxe*Vqb +zR`&gCXFGk3$_AW^_&+(@1X_RZY^NdqduMwb(Y)*rXB$%o!TSI1Y;!LB=4?-8{;#vG +z{hPC$s`u}lZGFBrdV=2n2WQ)~_0!qz_zPzn1>yhVZ0o1};cPF%3>p7FI@__xfA4I^ +z*Zt;fd;aNc`^W#IvwiUw&UWPgI@?g%e>mIW>1kpAj-^!B!Fd!`bGP_}$rd?fH++_G9~} +zv%Ru{69O}8t*?w{;ji3W&NL>?aJSsZ3@QH>wj{#jk|w$win_5(%F{V`4?yV%gm>< +z4dwek&Nhs-CPF$UQz$|s&3s7menwMn|MYd&c%r-ucDPTQHH)14QeT1g)Cq(+HG1$W +z6cwsL3WxL%S`sMs}dNOK#2Zly9(llwU!ZktuU+kMELkUH~E793Z_B5N-7w-7_2e46KrkG1W +z>v5^0avXkxrg!Kw+uSI~abREO$L#&20t@gKc@7>=k3EOH%EM$C$M7^hzGF;@ja%1? +zI2@?%=LRa-#63$I0>#1=S$8Fk(*Ar&)Ra*LaOS-V4AM)9l40fy1tSMf8_n9Joe--Z +z3iqSiZD<=+`DQ+ewAo-m*PofKp0C<@oGrZc@c?4KId0_sJotd`TIHwsbGS>}TgFY# +z?ixmpnV}M2o!SYWXH`tbHM&qmjxUHmV4l29Vz!r-2;ZJ_fJS3NvHxatxzt$GoF+}i +zW1WdJ{alS9EIewj!E5V-=V-&(L2)$;E@&h35ck%6Balh;wAGL7S`QwFGN&62q*E6f +zte;tQLVsDqtdihSziM0&AJy@Lidfb2ngl0_%kt)4?I08mgS@!1Qx0IQPF$GZtVnyT +zc3M7)x4HQS;&z2&MQdtrPfbLK8>OX%7PJ2D=SiWFGDTJJ^e~rT6ek`ej2rW0L5%g- +z6(hXnv+$YgDGw(|ZBy!9Y=m%`MWJZ)>0L>k@O|Gb($buAm?B1zMNO+>HtQN5Z!y;i{erh`!KZIX?Wjg0xvwJR@nBQh +z*q3e +zF)$A^{H6I>QyT^Jdc*0~zz513cO$H;_-sSU+3MyFiPSY2{Ae|y +z7k^n@2jUcJ4`Ln~$~xeLy845?zj!jCF~qbjLvYDFI-^^FRzz=0laD<5&lIkrb*^d5nwtu1a!yY^d03e&D=zKccAQEd~SLiAS)b1K +z%Wuy1Izr|KTx|f5H35GsQ@^DQ`XI2t@6Pr?5yaM~vyEVi;PIQYjRGEr^66|V)DaSY +zI@@c~qfiu10M{_)NxwVWeV@)Y?ckrzw*Q!kax;(zs8Vplr?YMEz~n7;sS}s^KhAbA +z>8G>pzWC{EgT}-lt%Jse|L$zxy755?sv@i>JA%ete>&T}C={0kq%j@8Ioo&S@wswk6LC$<~s$QSY_TBJM2~ynT@6Psc+21+arVPJ3+tMP4-ea%W1&2akjEkVN +zbT?6cceV>)ps&D16Mu8Il_uje()EM=MSGG!w8X*Fk?hbBvRm>jBHjpWz4lrhdq&Eh(YcPR*qsfH2N9gqD_R7dXKYrgx0q5ib-MP4EzUfR+U4C0{DKt>4P +zbwVPONzf%jGBL3PiuJU+nJ=tJd~|v2eyu}_=-{7b)4ZqjX-b|P))$?V4w1f}g}O=7 +z&jUq3cdsICa%tk_bwtl+ZA$5xq+U_26Upk~_>3=|l-ge)VgTgs0S_C7%pHd#+jyUN +zsfxmf-jtLgQ7fjQL~P(9t;MCuE!B$4mST|vFXY4Ic|sC|vZoL;BF#U@{7@d9A9IE6*JHRYhrE^kb03iXsL|sF>4hjQN5To-s@A_5ps#yr^ +z_M5}GP#!qi+Kch>hU%I!2(>`mdUZ3a|bH+kmKN&(wTP +z;90ZAYBIP@Zm^s5h+5-)*^jQWO3p!T$oQ~_L&%Z+&^FM8%0y(~aD-rrLhzrE1Qkxr +z`$i=OxO#CLp{{bmObv;ElqM!8T{L_RhKOBMFc;{r2__h4+SvUlKxUI@X4cK975)G5 +zb`Q>BcJ0EqW4p1_IE`(yjcu#3?KEy|yK&OkXl&cI?R;r_8_%=%o_D_g;hMG1nQNWL +zZ)cfL3HD={mO->at-$wsxne(pndli)z>d2M)H*$vFt}YJ`3y=QMsK9AJ+1>9 +z6gfzOP+^_kEaz74`epJLQSvdm`};ea0w7O)q4|1g=|0VWx6KsDl0Lg{RR_cBOiD$i +z?~Mg%In+ +zKi<6usqp6rM@0!P|kh9r;^v5@emQRP3*W +zAa&JmaMg79rFtSWZMbzuuBX31o9b;m-q&gh`%K09cCyA2qPLW$ZoWy4C4}LC?y@F6 +zLs@b1mqM=v;Wh;4_Zor-_;f#|Lv3>YnPQL;^cx8dF%%K6Q4k2y`Xk37^lbh^glQu3 +zJHYPDti=$%uP+Yj0iRwna{J!rZ6bG$iq}K;9j?*=dIGDA6Ev66lDQvq8;VUvjtKd0 +zal<-KltBTGg>7QgKR|U95WoH>1j$fCa@vVmhTt>14l3Fqh^}3-fyolgvrK@js+orF +z3jOTG^qHzxQNK(mTxwh2kjv7FcW;bwcYGG7%bWSiY%ci`%=#Id60paZ0zj6c66`H% +z56a%2(p*5Bg*TfI%C|Ey25+bk+3tj9ObXG#dK^JeI9KSaDYKToK6KIKQ|VA7n +z?-eI@@1hecoy(|W0j=@2KPnP}i|R2PZmsY|zx!0Czix$)Yc@g9vN#YNY9kSk2wPOF +z(u-i^2-h(bQ1^T|v(@1 +zvXxGetn)+*B-{wAXO?H#^5Ic|_feTR9-_I#-Qs)-NC2d9ZrE#&a%1Od$3%bLR;v9X +zpCF)u&qs|27bfEjtk}RVU!UKSa5Q~2648?%1TKY*`-crchsukB&tomr_i_fZ3+F(9EF~yo` +z1OUM7m=akm<<>c*+&g6Z`8}PUKzkxcsd=1YZj)}J5)jgl-Bm}Bqlh>h(0WFX4;Ot@ +zU{bMtt9JD6-M#>+=Rp|L?=47%BlM66!koH&mzB;iN%+~$mv2Xht`ejvsx*aKdX5nD +zY0I|W;NxVv^GXN%I;2m^uzfgU6q7^R_7(ROghJHh~)5!P` +z$XPfD&zD9!?ue}8N_f{7*7g?w+1oP?FE$~Uw75+j#x +z5X0q*TvRe;e(D@pj=f-+SHH>IEqQy9p0J6A(X#GW$TC5!TESQd@bY;U5Gg{sp{Sz% +zC7~#|@-=gFIi?o_5D5Iuwt6PCA>@cyGH*rW25a!4c(sgLu=Wi7LzZEM@2a-HoL|c} +zQz4hFa2C(@!Dk3R@E!nMrT3M=1@WQ_>pW30Nrk)hwKBqi_!Y_`4AB*$Hg|^~4BLFW(>WCxYYjkc2r|_acRvRq;w54&s*1 +z#X;1)y(L_Ph&)}Y4i{Z&&C?5(6EiihoHynm$pVHkj>qaSfQOxi7|`{o;rZ7!owmDVfRibMos7JQ#n=nuq}8<3l1SpkRdW{?x7e# +z6?@@@jvj`fr@pBgb!X@)12Dx9i?`n_2VN_bSFPzx*avVbIl!z<+k!effSBfs8Pm^g_)B>atp~*yH(CwJPc061jiSZ4e&X0Er8~bj}lIg +zP42U`yM2V0tQV%&>zpi!EcV3*ck{Hp((F*y1D}7B(c`PnX`9vtaf5v=A%er0j-gK6 +zpAu{`+BYr7q=78TWDkC-^vIyLYDTRGV_}&4@reZM{-Po8!J7{EEEwaXzL^9>5Q0|{ +zNMBlw2X>qnxFv_kGcy|r0Q85j(=6>0b=i9J-mfH4WbD4?_p|^ezK_!vf;G$vQye=A +zNPGuysh +z+7Qno5*V-(`<+EneV7T`NgYISR*>~dU&|^4UJ!8m#;opR>3Gfw)?E- +zz)|F1p>0+a3Y_1dZNIfwXdCU@E3_T=3T+1fCw_;v5lmR|#D0OctF!(LZBIsjhql?& +zgYo|gZEtuIZe_Oo4sF|`$%5$*{by*~#(G%$pP+5sdrUcn-=Xc^@YBb?L)+8M01Z-o +zJ##ODMc<)qBHJI(HqrXLK@>1V{BO|qXIBu(XjTmdjPX}!`{3`;HZoP_m;V#AEn4#z +zXxn~p`YJBd_Xo7iO7{wF!eQ@;umP!i8&U$&eXi(m7QAKgnNay$!2$f`v(6EZ8NQMNM`>7wEd-z +zEq3mAXj@G171~bt4sF}~4sENwLfcVO{|0RfFPXa27{9jgXd7<*AE9me@6h&} +z{A|?SKS0~8&p)BuRdG%%?=>qZ_qaK^FKk`-ru3^55GX$gGD;?{|IfbH;A+T1=`M0dWE*7 +ze}T3MQ~n9s&gXHZo%l1ft?}QX?HH-=&~}*tJPrpFh{un=@?ZBEHHoaG9o1f}8XnXh-+8%j@ +zwugWWWbmV9N#_3yZIAziwsWa|hqmQL{{n5Zd(%wjti*tM{)D!3ZVP~(euK7Af&T_= +z+y4pLM*2cB^9!^c%>5JEKKv`Ro%$2nj{G~codmxL_X=&twEYTgTbqA}w%-ypj-CB) +zpzV~uL)#L6g|>}D`6@8lX8!IQ||l6r~U!d*#pV0Q+^S?mbr@uklVt<0RqyGwRvtIoUZS(8>3T^NIGqm0KE3~Z=`6p;w +z>i-OF7tj0#ZCA$qgtpiJ1=?0v_Fv5Z0c}%`{{n3nZvPH#PyHF%77PCYZAVr99omlZ +z{|Rl&bsc6n{uSC5{~g-ar~VFY=lwgh?eYq3XB_34N5xX#njMKkC+b6$4+ouyhpl#&v)c0kt&^BW~n6c{L +zp=}Ak_#P<9W%~$)Q@oc(>nnYmbrN@{ABSa-UIgHbK9Ojk9Zxv~5Pk@xaI=NUH7h|v&v +zwYWCGMZHs0bh;HCKr_>dincI#x1#rTA6d-UP1&zHOs$FRv&;!rZ-NMmhri1CdRCun +z={srqgaB)qwhJ1YOtY}-i~|Q_MvzYrNY9dF8xKVY%^puUcZm8_zVN1kP}oU$q0T^n +z7ec41QcB^|b6JDNCSEUlWLVT!)n7M40@UuywG~xq?_Re(BNE?a5Rhg+5}{)lG+wsu +z=LM!#>?y~Fz00CjQQQe)nXi9KoZ$bul2q}C1q$lZ(})!%1&d+1#1I`avZIciGlQez +z*mZgdT3Cxg08+np$@OAx#l1ig_oRVHg=9YTWF18(v|p_Z83VVWtkz +zEltO9MqIrSL;L9&ak~lA@Hjnw?%CcFZ#s4F=*s=^*77NOgYINq%JXi;gI)L#17^)h +zgkd6_VQ*og{C?o&IeacMAgN(zLYaKa1E$%b?C8E`&ceRjA-?Hlrny|HBrXr<4k*1S +zG4tVGjpv~CgP>!6a(aX64R;#arkC|oNDdp%)!yV@Kuc13CM?@Sj;qaE2t1o+jh@GO +zyp^Nyvw$#yLHmn=2YYFUMcTDW)s#HHY4hH;hWP~i^iW6liKz5WnukNGMYAbNX4mOt +zjRj-c&O40dgwXgKyfN9mFqZYNzL?o+L|2++K)8i3M3T^c}f< +z@XC#eYd=p{c4ev_A7nIN+k36MlA(*T)WE27x5Y_De+xpU)a6yCyP~$-|*>kO*Tf)zlv0vq)0IVkRw|`E&dhb9l%fJS2Y)+~9VK&oR +zvG#pIRrR}^ULxtoJE|uA1Jz#RP#inPSp-j*0|RvMXSJqxbPhB^oMIqZNn*b1nYRlr +z;Spc4Nm_iL7LGILv3Y2E*KFGsnyCdWagTtz9yqBU(HY|l`lyqXl2E{_Slsi9p^oiS +zF>lQj!B24m5G#o! +zNocq~AN#e#esCmn|Dc;Aw5_X$90jB0CtSR{Yw)>fm|g{myXc4A4@IlIisMw8~f_EFW^=1L}o +z17l189!GY0KsKM7&Bb_@*O)+PoR^MRyms-H|KNm)pn!_Iul}*mO+0hv(y+K_LtQq +znOr2|NTF2ugbWk%Yy@N^!&YDtK7)f&7KHNXwdXN(*j|jVZSd>Owvr|ID#`xzj_YSz +z+ow)ZZ<8i5X6zY2LbHAIGc-}L9m71;y4>RD)Re_DSM$E%%ZiT5%$s$VMTA681Q?NC +ztbIQ$$alATZtSZ-S2;Suo9eF571hkQ^jRO()xu|&v+XM!07!4xEYPMQA@E?V^j}<; +zXq0G~RU9OvDZvkrDcE0wc38+8PwX9|1A1~Zc@^DWVV}Qb2CqF}exk3&(tCQ_HUD@f +zq6X>tQgaO7S^2oeBwjsxHiqNQzP-v7Zv*OF-H`xIHtWbBRL6-~aqYKo}P|l(vuCk +z(5Y)DtS69fdv2PJ0%w}m6?u{!Cy +zw;omsx7>7{Mvoj>#G^Bh_&iNr4OHYGoh{HDDz#Wz+whE>G?XOSt?+OkF7=LIrhCQ~ +zfGSti++NT;T*G788vz=gdxSOAc%H{U+k%~~b8$Mwg52d9BJuVG1<)j+J3+om-Ln1zT8`izpMa=uc_gp*%o(wh99Gz0( +zR{e;?S^6P@!5a_t^JUL@h%j9-;-l%k$@(@0@bKEs(<$4VXR?$1Ny9s%I?EGbvXdtF +zYoxv`Fy@%rht7c&4IoB{CWbE +zgSl7HoYp{riEh7XUh{rJkGGz^Q){E)IfW0xJk4S{M00P}4Xoc29^izS?}AS;&^fob +z5~w0Pj%Z#N0mNBY*V@4ETQJ9Ehf&*&72EfPFFT7?E_H44ysKak=iPOxZ+o%8wTrC{ +zJB08(`(V*jxpTGgxC42({%|f;<578eG?JR&*NKmaW_$1w~FhNR&OWdVFJDhKP0-s0-lg8Fyfu_HL2 +z;&Z6LTWo}xmhvLIBz&P$CxxoFMU(Bkp$u1=bhlYKK**XO((MvWE$;yCcW5x>u= +zu)+-OY7kn-A?4e;MaIC>J$_b1HTG-12vc;+Gw1$tfq{keVs(~xftMpg|a7N21a>)R| +zVT_-+^_v2>DyP)!Gu1>@EJ%2p&PB?nx%I#;1oMKUANv>vnB2JouP0ETZH9fOdu(E{ +z4h1TDK2jAhm*w$GwhMmcF5g>Kst`fya_u;DvammgjB**S7*{zqnDWNB5_qPB;=FAIiDk`6dIF6A&^n>xvu#tUh?C1t$Cd+$>DNWIJ(o!=BPQ?j|(g}Q-#*?iYGxH$YS+-~GEsbbi8g#1%-kUNCJQV<-G+?2V +z^US0h%-Br0X#d5Bwm8sK#Ajys^!Tj+PnvoLlil``raQjtMcUL7mr<*rfp};>kpZ`i +z+md3GBwu=-e1K8vp?X^vNc{TL)fO47bYkW+;K7Z1*qy6r&@`wpodN9%WOR9$vx_Vz +zuur7xgkmt>ScjD1EX*<@ZmzYkwIM$59AzUmn#LP|*e0zX$0%O{l>_y+ +zp&p4iK~Vv=#9u2k!{@-Jrlw6tsXCb4S`U)}2ZbjMhu~;9j5YZ{2$-q$;u=82w$!&d +z^SO<-s^ZIY#XS{5R#sso8H0j+SM`ny71=^FBl2nJ(VbiyXx*>^g$AzDA*f$N$k^tWk{Kr?WFZ9I&; +zJa&}5>#mYFQH7gbOuTn=8f6kur|6xT6`_+Q(Yx`j2KdUXAYT;MQ)X4=ti;WZ>R4y< +zIWu+>DqXHPnKRL^-&W~@^^{DMtr04?L*l++bln4pY$zyoSYa&{#clvfZwd&IH(hV7jW-IIBJ>(p5zYdaSBcc0+$J!9Xp6{ +z(H$|L;%o46!)nIT!*2EU9Y*7Pm>EuEqi*<)DFoWlo&Q*Fw>~-eB=5mm3_))?_%odI +zK{y@{F@s-R2z#3@iv8QjT_n0D;RSD!3r>#%KyK!VmSvV*>QhhTQ#WvmeDFyLq^#3< +zZ?z-_;&^ik_r}i5gJ}mF|JicP*h|D<`gfp3Bciiio0dqKeH~b5Vbv3$%C#Z`-!u?R +z*O?=jlr3c(%yeLg)1pR)bJ*&DW2p1m1kRj%*q{VAF4zp;_;8oHCZFhPU> +zpkkdLBq1_2nfv#q56(R&m*2qU?g^rDHG~ni3rT%_fGBk*2nxWyPMcIu@)|bJglfvu +zUkk!6x3EF7GwCuB%1F=(8fxa4pWl#I`2q?tl4XVOZ&(JM7zfLcZI7-VHvtBSF^FIU +z{gzFz;BLO`+&lHfZM7NnJB&d8nd{rb| +z`s;IB6bgB;e)zn^uQkxlkiL}`Z17x~Vg>uQ%48Aw;C9G&1M6w~I!mSb9lLotH$|Oq +z80*RutKZ +zP4yQrrtWPu7M{!0Yw{evXxPKgxLsRkbfzTjG#>->-;BkrGFtLa@On-^Y#oG)Ctig2 +zwFU4IJL#5hP9)g}Z=wPSAR5(d(Sbf_08KA+q2NJDNNhnTy|XDLC&Kl=;rW)LJKqG- +ze7_UME7SA9kr>n}16eEpUk;aD?%~O&9tMV-zoT}hvwnFI%g$ZnCc%Nd>P1cViE018{3zH8$N~+|3F&c!0B(=d=b5718=zfsKy0 +zun_9f79*ZO(MZMv@^1#GF`V(p%pSue1}jPWhVnOiaz4DA_%MUTVBfpkuw;1fyy5mjl-=JZHYa*nD@^7O1WH +z!NIr2Cv%{z(k+i0eKGj07&^_q@O>>Ydv9UXHz$Ciy$k17Q(Bdnzy>@XnpBX{Mk0g} +z?Tu{pSsw8^kWv6y^l3#O6kqv$I)^BwjH3erHnxP@WG0fCyu!K8^mP#n6R#K(#;@uu +zE=yuOCh-UCKK60f0?%pnre@_cfb5IY1D|xgdmBqnaH;63II86g4~-OIHu;}N^C|5h$HWK}K5 +zQ*(C9^s>d5p?Mpm=O4VDgbG3%?lsbbM@Ym;t-8q@WOL}fZJN54l)8bkGX+3c*&MX7 +z$WBslbl|AJ$}*Vhlcd+N7-fJF9)<)j&^mwaxy&FjbN9`pZY+s2Rx|HQBW40hK_l1J +zIZl-3?rb8WDy8OlB5g=W|dPxH|;MjJfD{Lpxc^h#obOc3Xv+@OezV$2Ql5;P}%~xRh +z8wu`c_uEG)Jv3_9ojML(-y@ogjDZLYHoFl0`~GgVM`UJ_cFZ!=O732WksM%ga$VZ@ +zXAZ+9S;EmbdWQpRGU%|+cc{LCd<>$C*$UkFpvefWE|4$62rGoXxN2{)T@c!xi^I}z +z251i=L#yI-2@pxJPS!8;3Xgl&H7#Jm1n{_tU_1!ZG~xl_Cvh<`BMTEyD@nnP +z`EZs&))^`>hY8#`^6T-&`~oXX0FfEYV{nKF!WB8YA&$N>o3Z&tCzu2H0}MusNMMqV +z@Kbq^qxeMOC2hLn5>qoCg@|9*H6rs7Y^VYO} +z_J;vU=rkQ;6)+BDm6klU2!T3*{g41NAi{=scFRooL}hC)K_t19RYO!q&DTw@_B8{Qq!UmBsVE+KPJ5*f+T$1779xN#?{IyBNHsuH_rTdLM4hM)sF3NZ +z$2ocQ#75^+k{oE%T~cdOdYm?c=n4Sv*SQ!Mg*fBY6ExXJr|eZAx;x4h=#K@!h02Og +zpk?~5tfYRQrr9^+K3bM)jKGyb@9D@8g}(u2xjo$iYVXDAJX)q3!PZxh+3kww|4LYf +z10@7$@Kvr7dZ>qe*a*PV4HVv5J^KhsMF0(uaq7&pl-~(1jje1hHkQF*aXoSk>1p~9 +zBN3LZ(*AS|WQY~tUf-Hx6h_j)JE(V^W)#KiAw=HH?gra}QQ(brJyWtO7 +zCca;DaWHqL6(t{cxRa5&gZZkfqz5eLA|{e799RU1kqvJ+UsDiPni>2Nu{<($?eUSE +z&*aeHLx@-SJgiFJ22jzM%7*~eiHdJScm1_sF;!K)7Jx~q4oTH-bfMJo(1{iEG--t` +zi;m|^89#v(bcd(g*6xU2@05AQfXV|mYQ0Er&c2P8v2JvzA#DR|z#(L$DR&r4?4Z5u +z0~^_9%scpe$1i@|mP{x)*tSS(GK)^6orF4k>8Khy;rQjuhS+o0pnFv58MxpOVzK1` +z`s5BFv)$2ts`APM<%XO)s2ana^PQMF*x8u%6+CSE1)+unrgxV5gIm^mK +zBzu-~P_0t7D+jg_(+aeHVHm~Z#?RM{9~kC*GP+x)d1H~a4wWEtqCdrJ?;R_uN!^9@ +zGx&yZYmnPh|7LVJK%~9rM%%Sc_Dh|%<-@y#HHRz +zFc=Y#G;CtUY7@ZRg;g)U--HSq9rU=m0i?8IjTOic=4EqeZr0Iji89&@##4;8XW&)~ +zp!Ve@#dr;Z+6?KC@XB+qdP^(NjWC`+4*9JU^(lp=Tr=PSgQXN+4ZDBeRmC<=1oHS9 +z9ZxUJ-9Rq0rh6DXXNQb<=jXNCyC<}a)pQtsd3)F1%I7wNEX{KA6j>a48{5&b=E3u@ +zCx;}csf6Cla40DlvInW$s$|ZT+@qzYRH`6;6u+YrL;E(8n8eqny80)$gT;j6C4&SW +z1hGpZO|4Qxks5u2Z8@l|`)or6A4YPdp<&Vun6HqaeAN>uK8EfNEG)5S +zl;O&BkJFH^c#V48hnZ-?9ykQ>uY;TwAnBN*gh(@2X;#nVFjW*nr|qYUxAyVfoXMU} +zBY{comZR(S+AhX1NKCY)jbB3#s3XsBX5V0mr!X?AwzFQ_MCKcE^ZZU;gb?Iv}ASo_oKq-3}OeHnke6P&+U*>SGgxC +zqASzwR!w~IAblOVo3o`wOT&4ndidI52n->X0uh!?AF-&-dIFO)@N`4K5SroW)8{I4 +zv=Fk^%hNdEujcSg0UOF1Go2|w+*qk*15H&o!>1xg(YtohiDPgi^nw7MoKc-s$ru00?nU@)U$UdG@2Q!D!tJ5 +zJR|Ny@`;QM)dzx17j`Fi02gcBie=H6du$V(H+?GJv8#z0M7w_2*M^|P`1pe^)st9o +zZ+7VMz^hU)nz)D!uHDDni}6&wYjQg{*@ej<*&`+#nlj|ws-ayHF44hdVoqS}oUAVc +z{ekS*^OKB}>Iph#1-6J)-b~lVzMqwMHow;7T(xPWdj!SW4)M@3NG975UOUq7wSH&JOD05fA +zJg2XixWoc`(mix5ERiMX$m9C~6n{H7tU~+g_Bk72KzPm?Ne*n;kwujK8e;u{V8FHHDLsY8Ua +zUOq@(4%7PO-_FG}h@Ll +zY8m4nns&t$$kKpp@vEjC`cu>9gEgMdXty@0+5@3Tu6Wh7^?uQ`y-(}aUx#Pr@0zxJ +zF$9xIiXwEuskQI$PffcQvL4pzcTF2}$C>d+xDM_s%G;d&; +zeg^P}S{M(5dZiyBZwXaDP*_+u5OIV%5E>Pr`iz*glIMbRI+f8lkna)(-V|%()VPWEEq3-oLX^T1if=b;#;XNxh{hNA}3rtb);*yhb3%-SFdp-`#_^k9IydT +zMB!%~MV0h0xtp~KIo#L)?g1d$naOCxkdSDMd`+Y%8w_?{SCD*0O#M2=O}DW#t9U^9 +zhb7@Zn#8^#Kxts$HMH^rS{&S?yja&IBDRPeErl{&3Mwz|;SB>w<>f%Q6JeLKA;exa +zv&jSju`32&7!trLWkI`f6d`&41=P^Ek=cDLEQ$=LTR6E0RY03^(K_)iQdVn{2w}VD +ztI3OikDbDE|CM0ybR_qT>73`&jrp#HVlQ~naa09nNOKS5e*Aad~AX$ppBUv +zYOCQJF4+g>%;J9eC#DA3Vm^k>>FR3yoy)<6LU12yT?pvzz=gtRLDz$Yry_Yfb*=j2x)&6RH +z3C?RB@TIr!P>=^wa|t!USiJ|a)WCy3o`T1UT0HSx`|jb@cZg6jkPX9Lka`~>RJtrI +z1K7e(<VvhO{dU9ip))(66&}Bpa-%6UJ;=YL3UM +zbM(d=JIEFsex;vc>MF0_~aEnpR=wHU2eIH +zJ#YQr^)zRE@d}PoIMk`qh2t~}2D_GU@X2lKU6I0R|_tfvB1L^PMo-XVF#%yIBvtOajJgD&6qWW@9j|5A&p`& +z$)Ao(|4H~T>KcO~8KoOa94ci;lep00njLU1O0+`AcSfd-QNJZj9n_zcrHyj_0D +zw&iM9O&OnWFeyF8(w^hbgozsStw)85Iui%VgTRy`K1n0Prlx>QIq1AE|F0n=_ +z7dhp7hq#|n8rv)w6D)*=Qj5ucIZ`L@H;I-+MpHCUot{L%R@tKW!x_QE5aV!5W^WhX +zJOe3uvhtRNOn(m3}QkjpwNqvc-!Kz +z5|;Hz$CDojqr$@4AxW{;2FnsUPk7GAcUnWzeRje<-Bps4PnU8y){pQ4!?h#&=e! +zBvR=!BPAI!s~MQs#3ls#sY%#Ui$*1UBgPd+OuiYe!qosR)%)3AR#r}Q^dSl7^U5z= +zYCH){%;`iYJlVdW2u#6 +z+vGT*P8BkH2ZS^5X*0&l(ZUBOv&i3^Td5B0dhB=+l8et@>7FnNk +zd9DkJTQdAB?FY(?zUriGZ_rtf0=~1&l%qHGGZRezRkYg}dFhaS{7cs^PaS2aRLXGK +zgK+~Ql`WweW``}cu*LCc;xdk$7ZI$Jq$~RT##<8Va4}*=Y6PyB_OTgQy@Y(|+WG|$ +z=4=Pn!ol_Tuq&v3Rsb2+*&=n?b;`pI!vte~Hvkfu!@!-2<5mq0bfK7#F6TA6Abt6s +z7#Fm?-CF?f#Gd8bI8BB@Zq3qtHa`a%Cd^^V)8iTi^Hl@Ao$)RA^>J76klTbh@0(RF +z9FW^AVI$Kb;Si|S2c$Jg)U_a_>}C*R6CACMWK!${`Da`^wvjM)Quhsk9fgeZlE`&bX`lvw_dz~vY*_{e +z3<16JR_E2^6t?vI9F?T&s_?wGl%KX0`-{?n8S@|Cvz{@B3S%Nek7>+rNx-?4=#B0xo&1MA_ybgsvPz{19f`+$Np-E{gyMwMG>rjb2;_!M^ +zE&)azkW0m7UZo94UCzQ<2K7HMLd_9Cq5kM{WiP$ZpI0pRA{vZbA;$0_Ozq~<+2BD +zbEsWsgtLYL09#B6erCj?9$4QzyO087wpGRIU<$URP +zn$fKYfB4`dg-+c>Z>FLhF|BA1H`LOEFtXWFp^x3I?rwsl>k69G!&^03fMLntZ6n_U +zmMp6UkEN+!i@W(GYY0hZVQdZ{;h=FeiyIbAmJLlzj70d&ca4?nZlpqQDA4=xxSn}f +zj95UuB0*71UYz!zkbdPJ%^3zzFzZ~j`xKqOq6sffmE+S+p@~zVS0fp3jw_BS;|?Y3 +zS(|%XYI|VW;XM@=Pt6F?znS~z_t@x +z64JdPvsT7zV7O4cLZcS=&^g!Lac(DIGGH9kKl0Y-g*!DXP-w^c@F4=%TIYLILoe9-Z<==R!>6B` +z_Q=*hXxfo$KQ(QlziZm>FA{EINP*~o(X>BpMxreIs%gvrQPaM&=av0M(@vU_ad!Ui +zn)db&O*Bs)2Y11eD(6q;2HSMrJYT6MsKQ!&IS4}&@e{SVl!gozO|I2^Z +zv?rH-)3ot_)wBt^{;Q@fq4Nh#8_D3$ns(;O4^5l#zi8T46YT6nR0~U)S8}onAw2_{2RDaX75dldXe$lksJpNhJwplDx1^@E)KWW;lGJn*x +z#o+&4(`G~L&Hbrq`>9(Q{m(V+y@~IdHf_T1nl{UKOGy8nfyJznoo +z)K>Tpn)W2v|3uTqkNBx+N5DAg{x3D{Q@B5B+UF(THEqRTHEq?%KWo~#f7i6%yZo+c +zn<)LzwBI`=i3R*c)Bei)Q`3%7{8iJQ!2h3W+MC(`P19!3`c>1GF8^KA-X!`LO}ltf +zH`wksO^(si~QJrr!4_tS_r-t?Rsw^JDh+S66U;PM_xA +zns(W{`#+ktjD}>UeUIVMU=Yt{b0YT9K!e`(rsy8lhn&TzZJRR3?9c7XhUXxeQ5 +zXxa>T|5MY({#(=D_xoQp?FQC=Y1*4||5MZEvH7=}_F&L|YTBbq|6bFMFaJL^ZGnHM +zX(P)0PfdHY{IhXD-R5DU5u;sarBQGp1Rh)9p +z(+|BcKvZyjcg48Y2E|pJdw)-0tso9lwuX!2pTNUFpRZX@fKHp!COS#6)Y~|rt>*zq +zE*47O1bdzQbO@&SijzOkN(4ksZ71!crmDJvB?{A)k^9eMAMnBeE$1hM#F3q?3}MAs +z7EnvGiAe#nb;cgmO;>++NS6*8fbuLMNvk|Nu8c6m`DX-EQ +zVc;bSMh>e%lq8#}?KAQxkFN%hRteej_fDXCFa(uqfMqBq<* +z+^rR?s&gD9DuS@GJ2bTJp-2CvX(P#%qzBFXWa2gX*0lGX=%dr6_5aqi7x-1bHSH^4 +zoMx5tm@}?2fx?II^XZaE{y+V5Bg;GrklcT1+Ho?tMBkb=IMZL6b^zEVBC2@GUz#?y +z44pIy1}u!mx-jwZ@o<`su&W%eAJI<-V-nML#(~ZYJ-RKosd+m)p1(BhtZz+w?l$IU +zdCzSW(|7qDXq3Z~#QC?T?ftRad+2l8wxBxZ@&m2Na#?A_^oLJ0)A`S0^u}} +zHx_?s+8OJx!BP)yM!Li;^5mHQ<54_tgIdkGCFVu`5VVkeYZ@#6(zHJ{^mpPPpyH7J +z(zG${6U^)0gE8JlG>qdK!no>=6AYVtNq*_1RKafqUKSjDYueWm|DkCQsrr?;!DoMW +zrJq7t8B8UiLC=rGzU`H$@p_y&q8IRt_n!XT04FW}OVh^QEXHNK +zQAaHPN7EM0`_{Bg;8g~=efLz&XaCl;eZDpA9^FYTY<;I)z`rzYKN`5wRfr<-7V~5! +zP`#))Q8J%rzp^4X+rKq!NTs2T0-T5Dzcg(^ihnfi)o0gV-I)76$l`dxvW8rOTc6#tb$#H7NMOIc^Vc>$Di +zxzdbn<0$b{Qs;EB3V9Y#Y7&s*Dt?umWsH!Zs);O2`TCn>sfuvc%BNWJJo3~*)Tu~bRK$O#zJXBJmDCNk#w0N+i}kRxr@5eibXpN +zlu#e0o&*HSw&e=Z4B{+AW#xU%a=yTP&B<0KJ3`~L>YXX +z4q;K5u6WORoDU$i$p%;pI|?MMK;nPIY&OIaHu0FMX=?RaF05x&h_To`C`&wqNX&t% +zVmze!0(fV}1z;;C*Z{;XExXzP67AYx@z5oe{?t5?tqO@#4PGtYvSI{>$Q|2^dZ{6F +zAWAg!EE5Jcb~Ii#6@wq>H5@+ves(n!7E3Cj4=Z9tg9r`owfE9R1i-MPH&}|k#{6g% +zDx?E_GIxKUVG`y~Nip~gCBzU48ejxm%A6r5*^t}y3C;$?ZjPkO0O4Nv({-r{z_>i- +zqg7mSy5t^H#Af8@sBX7@tAQ_F{ +zth1No5=h1peSpmMqsS&FAzO^rZq_;^VYx{+Ph;gTdx*_f9XT&5>iV +z@P{?a5cqSm-C?nwmc~SoNF;Mg2G<%!JumDQRN}KTQ0;i31MKDysU1Bk0C3~7K+&H{ +zoM@*~RdpzAJN%^5I^SXvohXiMIWRAEOOHVXk&tGwts4!il~=B;U(2O*5!VK-N#UhcKHoF+~V!O7!rN(%Vyn4HUUcFqTs`rjv +ztf_0r_ynJ>bCb{dscjSKZng*x$t>Bx)FS+4_;wnjl;EGv1fp0Rq}$f`q-+IGC}8SS8)W2=bJ_@_qY5!#qxLFWM0O)|E&%8OZR;4v)@EZoJ6vYY(`lZBl_V*zPX +zG8Yyl+*5+lhrvZzF`wCsccrh-Vq%fGJqBl3Th3VVWtueqhvCk^0Q5Xg(#=-DhQX$U +z#h9I|4ukcL1h5C8^xF&P1wuhJ^rv%YM1~KtXAgnGenb^39`%T~qKiS;sY)=DnRSza +zA3;M%klmSUrjPpoOT(ycAsese0O!4G6i@}~2P#plAgGMON;rIey*Z=l#(qmtT|w6F +zK(O)4m5C6Ief~H%AN&mRt3#!HnCKmo-+6W`H34F2!PCjF|1S*ptr={E`U-JlkR%59 +z?7-g)H?Gh0LKEQX-wgLE(1J>&)?k&nYJA?Du!E2&*dv2mgHj5fK~Y^Ne**DRh0J<7 +z5PL`4;~*jUs6KtM5^ImE2Z1~y84HWd;|a3%rQx8MX~A7ckm4dScSt>Z@J|0x{ij8{ +zS30{4EzftSRgHBcu1K3HYY_WY*T*yyF3bA#eyJ}NxeSb +z#qA_>X!q}X-12?I+@->30WR|%e;wvC42TTF_qGp>NHTY;QA1qDeVJWgxB>aq_=zh_ +zi-^LyobVQcv#t<#{K9$rn9f6w-|oE-YdS{MuC<5IbI1eRlY)V1A^C5(&c@38E>a9B +z(hHkd5rX+}x`J^1M)fN|HBPS@G;ZA4Zyyh;5BdP||_Y +z_WX*l2S#g0AWQ3Jr6sr^n>&@(v+{g)r}5BUqqBHrOj1efBg=xvtQO$hWPD4hSBrQA +z_PM0vl_i$e1$z;bW)QfMLxyPn&{ +zdPMq50E`;o;HWBQqOe2`mG}yqI4gS +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 +zx@z-$)E=z!#Humnc}}Q^pT5v2yTyz}{|pt +zzKi1qJTzphCsb3{L%!*h?4doJo^pN?(u{-HFxI_i#5y%tW^SKmeX$9c0a+DvL}1Cq +zX+QYnTg=cz6~Lrr>m7#XLg%eTz9^db>~&F~=_n^RHr|c5zMY)i8RzHw;NVV$SEgb2 +zkA|PMylp`ie52~JaZ9msLU{a!b-}$S_Xhsqv9|;=(eaDP9lX$UcwmQy +zh7B%i0YS@RBP>!jDF8VkMWO|nGz>w1KoC#B45qN022XncX#lfQxCtj0Iiorp)S_d? +zq^F>yLG)OTubu!7$pnbC01VAB=sP-_w(Tfs9-XsoEq16Qi_mUL>L|C*x}oPR@v!bp4yy +z8M597?mcB?1H7NgxuOMmJWVPF08{n4Yk}xh6%{2PLzuc}TzL0SZ|%)X8+s_d>{P|z +zVa7oz5aV&Y2&UD5sMg6zQ23Z+_fzt7#)WWfmQODg8o&FA2V3#nfe{$IkggbX_<96W +zLzn-oX0O_o4pP^$RhI4?fVXXPpz$H69XoVg45F0RqGS}FZ*X`S^89)}PQJBs+^`5N +zvh)=&Pc&yF{P@deNv~h^c1DxF$y9Aa9NsZGi(we?-Uj-&J7smLcn{Lu^rTC)ec(Fj@l?M`JlIxiHTG$ +zs_PAF&=gIX8|G>XQ`J}l)Ru_hKB)kYxP6^_m`di?N5Fu-#y>S)d#rsb+LUB8@??x8 +zLRQWNov6ohQ>pqt1~`n69_%YiC_g@N>x*=|3d>}ncNwGk9K?LEC1D|i;NSz_Hlbfa +zntTTQ@MLpw$uUB_Nw<8St`2x5k265>XE2#mRgc55hZ_86cmNol6sY*3+=upN=1aFt +zHT~6f*r=85^n-aO*fqH&tm@702r{Yp-jK+;G=c?FwDAy0xi`FEeRNguq6KCoF^rWi +zrrrJAqsz15@$-6Betb><{3iXJ%g}aN^+KX=Pc=vt;Bg+oOPe?Wz!~Fxc;V6clWdW` +znBsFK7nDYBjTz73Qc-5)_&{;Jcx`v>8)rI@P#Cd;dywK6(aeCqElsQv;yvF(?UaOi#OK)#ps`Z0B#l1X)rOg_DGb9GTL1_lE +zKRk4SW=uAbJGCt7@w0#ls)hKaBwAj^d?C<^d5)_EU_M}q?nRE}xCffpgeMxiT1NK~wry>7y{}kq)Kn6O +zABEgZD;lg4P-41`pA!|)Nqd?xWiH_of~ilG;3xKZ=NE}C0xoi))Y)FXDB*(e(tMpP +z#S0D529ORE>dBGw9$8X&e@r~uMO0@$Qr%!o&LYV^Z%93=h^8ajc9<&H%%%r{6i?t3 +zI1!Lkb8EVTb7R=_%-y$6Y|v +z)E?eJHvhrSB^nM2;h!0V?eDZ-m5%B?=jOg`vxF@1*^O?=jQ3~_!2apGJ7d>Bw2u2P +zR(h(;DWa9)6BAM76K}E!Vf|wt0ZG=64`IwnM4x0;Js_~M-D+v#Bb}wZF*UXL4WhOd +z7Q;hfMETFbm&}|f8kzOzWgpk{x`TLU--mh?Qj&X`qz3A@@kv=;)C_mxAZwYrj +zwM;r4)J9^uJxAsSy}i7Ea~Ugui!%1GD^j)t_QekAFNBRqLU+onZxQ$x!ENJ>&|!gZ*eK3r8i;FvIRbI< +zC_7f7N%l!ZomIelGiQt;A{KUll}SNAmD=6(G7u9 +zp=adnJlM9GsJ{qu`{xn5jN3!G#vU-vlSJ@0!95-GO>keJKsXhD6WoSne-qp^6`42T +z7J_98z9EQ?H8FtXp)ucwi`=hXdB@+tnL+F`-KRrTHcl_H;+m^rq1laH5n$4CXdj$Z +z)+LgZyl@gn1YgNB1+p*^?l)V3m16FZLpN$zoOU_F4FlEfVqt*TsGlWjs!zhZNFSne +z>>Ld?$}~^!+9Z~Cc!iX*$V-nww~84U-z`AUo?y!Nw5%U9u{RJT>JjI{cY4#kcfzLL +zK>*d!v(!6Elk+SY%|I^uc&MZ)r?iC!z)p+}%@9ibO&xV@a0W#ms!M^NlT{FW0UT2_ +zG8Tp>?%9nmN@1k&y!}*ySIM&~F(P9_!vD>0?CLAUu$&swWxfGsSs=F3Qxx +z6!4|#k*|YS>h$%a;x3v`cw^@({w&k7sdEQAfZ1eT2`F=+v^m14e>ZufOEi| +zAOXHxC*y|i)|?$^EiB9my;^O#+m3YCy6mFCcDIf#VQnbJcDT6;DcT4j%6z6k0Fgg; +zrZu=92qkV7Ty|Kf%Vg9mEUMz-wZK$%F!+Y?26xqvIC@dsBh!cTFNU%!iXfFfXf2{<+GREL8Q;YxL1is`Qk6FiOb(4q_O +z^?B18bV_>HfoEvZ9{Hq%K1FNr#$->t7o-u84E(Dpo|8Zo>MH(RT1D8YHgLl{_*>|o +zFo!(>zd6xcaKRfSI7ACTa%mGu!%H|%Yecsm!>TnxzC&Yz(W4{Ig`dQK3*7K+;KiW= +zXx{?&52GY=k@=3`=V&_V7ti%jO6ia`u9?ZpAi-|WAlAxnW?Yzgt=sBh1Cyq* +zvnw+DE8p9$hrey%iL+ds_62DwokMb54dPU +zti8*#NnNudp5*GwvHV=Iyimuut!LQG=(y=~aq2Z2y8>tIw76=qGI9x&6;#PVa +zULvzYGYMy?_T!5CbB$ts&6(__lVv`^k0W819U?6)Z-M3l);nGljtRWc@)6F}&PZ4c +zKXcLXd}{$py{M8K;k}qdaQ)#UVlVbVg=o(Owp;3oU#%?HBs5EoHyfeMRGtoBix^`E +zwV-QtG3Wc(GAGzK(l6T=YAb8TenUSpUj~z_-3Epyn?38XTBkH#>=DN2?kd)ZeyMX) +zq5;LYo;+PTM4;s(^oia9cXlAu!3i>ve=LpG`Jz(A?C%vUZo>vydyJot_dd +z^8xcA+|n>BD!*h64}aW`GdUF<(i4u2ZZTv=%Zy#sxw}*t`Ynl3<$Ali#-AtSg`ra| +zoxe0^o42vL;u8(fS&CoiX3+TJMg&T~VVOTV)WJuAj{X8Wy5~NrT-f_t;FkOrxD$WE +z+&mLkT(_0AIj3&UL_PH15pWPQbm8Duz#EqM7Slx|b+`Y{*Oz^93jWP&Ndq04K)X%` +zQvPDO1hZs#Q$Bif6%4f(4flqaGeO3$i~OWJV>EUYWY>yo`_eqT+X?GnY6n*$w@k}r +zWEtbnF+0%?+=d#S3<*mfpV(MOa`6BKNC%1R?FB8p(uVq5Z3=7>>ap#re-&o0$2;7a +z#N)D5hcuK&;lxCy1j$<+7ojh{f55qhacx~ucF#EYo&&UFvK~wA&Lq2JyqI_UEyq+$ +zba%R8mWnjT{)F97alNX1yvLaSX4oAYr-Mf1W7gs35bVZ8L15-t@ZwDh)LiF4L#!Hl +zQT(2%kjcMI$0hUU!|V|pv*W=-JDJ(YSw5Wlvn&IlpnfA_35rs*8L!2p5QEG +zg%oQKsa$4<$VVnY+O5s7kp;?od5z?uLxGjdRIypD;*xiJg&rgJ5#mva9-A?7^BiB* +zyDk!iv6R^z$$zMI-7DIO>OJOsPB}i*|IahS5jlndJkS;IG1~3CBI31rgub5nY +zHqdp$7xXVxJ8Bt1gj*QMVV}$b?kczMFd{HZdj~TkGzNHw&cEPtT`>6AwG$=ZAyHJ_ +zn3_(+;4O4U4h&z+oYwCIk^SuxumxH|#sL68ClFbtGz>1?0#=Q?7aeJq-rHCZH!1?3 +zuItE-3UgorGMJp-*^yVGg0yI5Tb72;TGB|v_Fn;xp-=?-TGaUWlvZHJJ|%}XEM&w# +zjqJvr#q+*;-s-pB*r$^k;rN3gr=J1NhbdWnJpuR6u`{-%a~d9;#i9~^NppcRDC@Ba +zQ6r8guV{o;#>?>+<8|DWQswTKkTWMDk(-6#fe5;0<-z@L!48_kPPi;~g?sVU?`It`OHcCY~L&l8Jb_gW_+0tE!S74Dp4+kbFV5 +ze;{em6Js8F6@9BTCa6J-gSQZ=j;LczgU6Y8 +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 +zZm7lE&Cix*)!g~ZsWj-Ohx*%U_U +zr>l&8DN+V$awbrk+MJ`cY)zz?=QSNggi2^wf++satNo!6zFroZ6+Qw06maoq8EE+K +zm#`QGq->OAM!aQONdSh1(8ALdyjyD!lc%Pd8r}V_*EEH>Y1dz34Je +zUwaME#x|hwI@&p3;&{Kl_^`2CY3q7q+U-e{UDKhURhC@6pN|(N?b!2GvUz(-5ot?0|a@~5zD$>5J-Lk7lxh=R&9$pPL0g>vOh7fb2Pmf +zvM5Lpg7THo(&a$X9$;GCmL#<~>N_)%|9(MY>Mvi|NsrO_b=)B*%2r`-`0BVp>rGf? +zGFsDhZ>0D*8TKdnQ1mO`Akxo+9C7UrTH}uxC=8^=J48QePp4w$0|!E)XQVNEC!vvn +zi-~1Zb^5T6`E_TNt>Kn)ta(tdX16tA0AuU~dlp&i9B3SEjNaPPnF-;R;Ow8&%cMQj +z!NyF1(!bnv8u#dmq0ocBGNIt#20SW2GBB6&s$*&~u4yT>E5`WG*vw()*on1q#n?TH +zu0^|^c5l$HI~?*t_0SaNBT?*!%dtSy2B7Z9P$bb~@SKd=OJy1rI;96l%PoVt@axhX +z6r2d^lxtjRFj5=0rO4UruuC;DR*9iuOK)Rk9AK;#VH7bS6`?9bfu=nI><{siGzA$u +z)F?PhcZEIt)(*o +z1716vEM?x*-`{;=MXA2rNOgViyyee?{qe+}P(2g;GwGnX!^M#WMay>tTnVcRvznaz +zv)aQ)xxCbBHH4i8A8RB|jMby1<$Pz{%@+p`m;Ha&BFsxTv9&4>(zn584p6kfHO>$p +zkzF;b?Y{-labzFJ>JTptXD8(o>IT8{1{ewOT%mm7pgHO2Ojg0g3W4@$0dr368#igo +zWPCf^SW&nPq<#I;UD@$OGm@C!4mT0N8qP8wR)GCU+r16auWyI@CiyidG9WI*&RNv+ +z0y&|!B5LEMA3(X|nD6V=J?n&tSUx(s +zK|YK6mSvA0+;T$D`?&YC+adKv0O6+d>u-l!n1PyymSUaMA}#?SZ@5v9@)U^`va+=U +zRYbx{b{FfQgh`_>5T1t`W>+9zxvp6(!dt#Lz`;(@*K(yvVnHj~U<1H~7N>dW{G#2W +zN=dCPZf?!JzHGT#>m}6%Z)XtzSWO(+TMjXBuJeM!TX%VXAMT{X_R=VLMBa9iAi>V` +zj#}){5RznH61*Cf2VF{H5xQM19f-z)kd?9qkppS|^ISy9T1f^7$gfISd|-#x_Sc*( +z4{%!UIzOVx7TV;|Yw3fDI-5kXeoh=b2&?50QrtkN=JW=`5KB_tfYEkmc)l=$LfTyI +z0>kJS48{x{@ihx4yIbDCe1DInES-C5a9-sQJ0sVEI^&DF(F!T| +zbIi@ic7*UW)X+<>pfo69i3gm6f!CW4;i9le!hPbRA0Qt^F{-29`K?(G;7u7ch9O>_ +zuYs*r6s>2W866nGg_=!e`E|!^i)@F5uemXo^@f~XC`;S;r!jBaH*;{xU~EZ0 +z4h4XiUJN`PWAXc9vpXpp`sMx>2EN@aGj32*^8fg{$L_$|YysD?Dzs3w!(t=^(i)7>v}0l5oH)Pb>>y1(ulBg{E**JAE1xnbHn|g~ +zt&a!?9L1V&Nae9@c&ykaN(u=yV9u9Lp}VC{fFCdHAkN6-zd1jbXmb24+0k&aeWaTgWxBC;kW8hzXm +z+8BDqqX8-2ukemosSgs2Oih@dfB3X!lUsOO)5*b)tuWJAQ$Mt+w3#iQJYvqkx?$0h +z0VH$)=XV+|MToG>nSK{sxvLPdxLQQDvQ8l<&bPl-_p$ut4Luo_{2-9iZY|-eVS^GP +zKS<)~b%@UP55#>IQuhsUXO(MdOQwB8+{{G${4V}Q-w?Nzn(sOhWe=Qxt!R#m^(mmj +zyi|4{fM*FccL05A3}y4GKe0U{|Mz?SW$YYt^5pS|t`BcxcoiBc +zK?G8aBxZFa1vH5ZQ%yviWBDzJL5ZADo;Py-cZFh@Zjvg;KoBRU|7SpkgQlz951b#k +zuuw>@Jk2c-qWNE)bu>4X +z4uB`D)|M@VH0PReq_}SlLALS9lwrSl=P}v=W$_UPQUb~_-US-tto-6G^aaH(uMx(f +zBR%_>CH0*KD*pH?^KT33Qos?&q}N8Qe`g0Q)qB<2b&P`kLfq3wL%8U0?WLOE5O-`n +z$jmpyy(TxxXTSXoabwXlsKl-n{e`%X{|DlBT*4Y`!@$!`xezcF*!PiR>kb0h`-v9w +zBH0=%0<9M5C7=x0N?g9xZ$60Zz9J2Co^cK$6%ghCR7K(rI)_|HRw;dSwbsW7vGXS`2H?O&JiS +zqbTGyok+iE6pIJFsvmC2oJ_*)C3+gp0iOzDzA!Nfq~2V_CM}jqA@?!H +zwx%+VBthk36>?`I{oj<&VxiQhuevySJDKnvV%~ypCYQni%hGD@EoqTKB8?7 +z#I>q7^1x{8=NdEnOS6Jaa7~@W5^0ZCze{pt92KZNH77gpLXS0m{%Svoj{lpAp{cx7X(`0X%=w_mb6Au>rsBTyy +zx3;{=W^+uE_2U|vknkUwJeVFNY7n=;%W#?6+S{Q`jhU;v$IHbQeG>PPu&?fuk|KyLo#8d|``*q8zUzDec2{!Y*(nx16~^W$9>oz;J?LAoMuE +z3`5q~U2o-RVTw|pL3)6rg&eYU#)B^n3L@iPwxmK(hsUxASU4SQM$mVn#zXV65)DQa +z`i?(R#@LcmftFA{{Dm}HyTCY`){(i;p5WPv@)B&Ar_uyn{6A*rBfB6{@>*5$+tXQB +z9S9t*t2wxusr@4W?G#U-$SiP3IiHXhX>s8NCB1TSt$!7KGGnY#-R{4+s{Bjh{*l*A-M*uNTYMz^?hnc0 +z^zvG0-NB1_hNDYdpI~umari@kW~3QY1{WZjAF-xAl_mzr0%@_SfZo~x$#M2+zyrH6 +zxSS8>2NWo5zQ7za2QCc0{<+jzBD&1~lBoypL*#2qMB7WXZ2>r=(KN+qSLJ&!XZNIqe%ki&LWB2Pp;aLs3lmEB257Vln=&RI8hak}On{3CJq{!8N4{gg40e{!);`zvw#QvA$OAT103 +zN8-k({3~%A7JW(;J<5qT`?ju;>9y4rV~t_R*6VptnBUp3z1Kj +zIDmvxpaEV{3Ngjmg9Oozp@`b!TKGT)h22{m)^uib(*8oFo8iYz_Vve+U63Ld-Rz@Q +z^&@bvt;n&MAIhzzM3Iq^-{C@dmS(b0q6IPh%% +zx?d%DYhrD%z)ANAZs%a*Dcp-5JfQ!o;QPSAd-`-4#w;V-YY_wYp*6q}n7~Ot1E~0% +z|7Am19uF +zO+K6>smNP*KqUm|4nuP|j%kc8f{iPxsmbr{5nEKR&Bfy0G)N>9t>Nwo<_J+eEvEOJ +zIq2X#&3ub?%hCx=kx@(!SC4at5)O2wp`SEccX9F|QNV3`cM@OK7fJ%`?6mO>W@P$_@P +z_VFMO&H!$qpS@CvULF|9ur`azd6ZDCq}UG{Kytn8sV+%zB3{cDO=qJZ;_o{@hy5N5 +z@**mI@nuAFY#s05Gq>6a34!lO#OS0V$-2i(^Cy6Dn+vs~((!@a8lv#+`FfNDh$Pet +zL^6A*;3dcnU8(cnZA5>fKP8qy0d6VM`X!>o1QxBP;4idO5Jn^&5gwUd1xgMjVHvA^tGwvuu>krO;v@6e>t{ipOh!_B}1}@;YQ0x+VJtqwECi+}J +z$uTjwd*y^P4@qSlNODHa48LeHM@0}@D^X>%wU1dcdySrEB5%1)9=^jSd?_wY6&-Ze +z!bLB@L($5JIS^GDpnSfj>H~l%ate?BYwwXaX0xrzOxlyS&;cm%-e6M~6o%@Ir5h+< +zvjsc@&u1`&8P>V_)pvhQAD7*cnTA;}6C|Szo1$n1L;t&h?`1J{n7CQ^&ImdI=9mk+ +zS$3>Ye|Pje|6!_-0G6lrI+iuSKmVb)Oa4P~r~E^4$Lzh2jgP}s<9SM`-bQ_BXDmMZ +zLrk_}+qCN(c7wtKy|Pb2r~Mbjtsik~FmZMUl`k>-O>uir{~wCmHWQ^+`!B^E^-Xa% +z;UUgBe*{#@uJ7*sjzkfpW4O%ARsJM4my7%W5H(7o~S3CfNUO?Ls$$a(oG#$>$rB3%(zq~|79wh +z`6w^Z57T)7E0@ +z-QH)yHd5%1YG^M-#KJ}u0ik+2xdEoqYHEzI8+E7>tOI)=+y+n`F1Pp<9!cyb +zn8{?1@)W3Nb?4%c>gg2f$4e#q3C-0ih#3^qN{@2iWicU>e^K0R|4`h~|Dm`o{!-jZ +z-xT-UUy2)2s)oP@1G#_2;4j53ep=Eun3?xYac{)@o8m^PI5NZhhvKGI{13%Vg9wND +zAh8Ix6P-F4ASdjf&UAA6a3l0BZS?=B>d5 +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 +zfW`%Ulq8uQKzyN-UHCUWL +zKu3!NPk;mmZhM01y*{E0aJ;2IMx4@-+K +zPssmZ+)D&!|BG?+On+nCrhhSR_1mkYv{zm7jv2USWoW +zbNprL=(O??aSH` +zt9B$dQrEn{Q4>)BbmThpcRuP8El5FUxA*ZyTA5l0SJ6>47-mAwGcvS6(I37s?((wn +z!}|fu#aoqTK(&u2vDc+8e!edb5t4n +zO5Nh5x4TD)C(mZFFvPxZ1R{zdo(@4RxLSn=o(&TAJfwsl?zgbUI^3O*+A_$@2@%!+ +z0duEQ<~fG2EAB8&-oXX3JpKf42DZFVbr~(V`VlJL#djAUzMQPyLstfhzrVJQ$i+*t +zT`vM{VxZu}lgYVv<`IgpFH2yBL<`=>o8-HhpFh@`H4r2ru3OA$=FU2P<88WdjESL# +ztsYlE-nvq$lv&`OSST=YFJ{V{NUU+6skZvN`zWqMqls|$M?Ou5O +z51ebhEw+NUTY&PI?atsk*HxA6Bl2SB-UzM*_Qm46VHX`SnPx;NGcNgPs|!yts?yv1 +zbwDcK+|rz)fj)8u8b+V0^-=kVrL=hN$ogb=uhI02`vP@w4FPC-XwGOrl^6^6^gq#B +z90dxkZ0sN^t;szRZ8h9>bqRPrOqKyZ4?-TA4`}?*^7OsrNxgjCj!mbdA$P&N; +zv&pT>CX#HpClM|T#SfhLA{D0fWt8*^LXvbxlH{}?XW`a+f;fjCtt}80yJ8I2J@mm5VXWB^IeQVrd +zl!_*qptyx-D)v7et;bzM%;|O<0y=nPRZZ4kXHka5vk>E3JVuD8AT&x_Z}7GTwJMi~ +zC}^SR(Pi0I(D{WMy`_b*_ICvzjf#HI=l~${eq_HYIR=IB2T@~xZKw?usM*NK&~Mo2 +zYLFx@t@_6fya5duR2@$l@`Y>h(fYE3`W{Q;yxsGDig=x#7*dt8Sq^H|jv}Zl#sr?J +zB0fAeocKhb^bg+cdJL5lf?EU63*wlE4DZxLi41?JAF5b9x)f +zYhVoM=9uHqOd@w{jU5py6G9aT{d#ZM^&m+t31|@!w9>F%J%@vv9W!*SqATw7uf|=S)k10YXn*ZYH6V#hTD9vI7UgOznb>@&z)cAj +zk@r9z)TRpr0W^Lf9u<7W(^UQ7HvjG#up`q9m&kI1RmbBGeaaEM`{eOkbb~!~iv|3fqjw0(~jFsT+IhjYCLH~Wkh|JIN>3@9m)RgJwM8&|lR4Bbf^M4DIM^4DS( +z`gpIIhx2@R5UT>>&nT{|W2Fm#6f(B+Nn$y+v>_k#PPU8ndTk>osjk+%v-AVAkfS0# +z?ZiGcH@@VAU(oU(HPP6C18BjyPKuE5MdaJT3WbkU(}b#vm}6s)LBd4|^9j#29Y_OH +z4ajhfPcbpdsNENzBO+3GC9fLr?y}k +zO3<&hLx$fPcgnQyGJdPXx5iEQc;X7A;`Wcmz1SpgB2q7(W3H*aSz!P6t#QA6YuxV6 +zVJpnZ1gT$(`ZnJhx7%^DgE0^`(2d^j1NBj6;A{rv5U`W3JS*<6 +zwNh?PNC8vx>(Lvz7M~mcIu$H4?-ZElH}j_QwvZD6Dgps8pHNB<8*wC+jA{NmI+#W2 +z@k5Sqww#rDdu`|uH?m3s;!#XUyU8&|RS+*}D;?|u+adXQ?p{*k$`8z-z65xWlckT& +zl@T0AC78!PDhxEgv8FxXgGJ5vB})wGb%<_aoEhAjDH;ebVmdVhXTDVkj^# +z<8Pt*j^K|cdUXdF&M2Xaj2HqqMZJrygn&0>GN}8WvBr*&zFo9 +zJaN#}EyxRBL+l+B*2M>8l5htSFY6GgORU?>=o3e|qp-fOAgv$N6elVEIHdWrHFL2-Z1r1^jq+ +zDPlwTqpceq0D;X=<%Ys{h#qKAP;F?dk7i(Y;&<>b={Z^w5BwsdTODyI@L0%aEQn~> +z^)slT_M^kQq+qlc0AqFA`8d{(GIcl`9^Lr%YWmEzAxCrnLMNG`%cME1yD%6IhX-!s +z+fU6%fuz}cQ0xHQr8R}BkyO=w^&l0IN6q_Z<3AG>#W1iF+-<;l%MY}qKvx(vWKXk#%`&m1!f{>6jFMQ0W49h#LM@< +zesgsBzQ2ys4fC3++76=Gfh_2gBReP(H}Sn`)^_LRjtojxI@#YVvv=uIrURf{g0CD` +z7_&>d69&Lig&Kt1r}v+$Hc40dC=GpUt9AXGFG=74E{!(+tR)8mj9E?mEUE>|4QHB5 +zg~#^@SqcdOJTQcnC`FKIrPf#eB%>@;$WKK*zSUJewIc$zD-#i_u=MzP?8yW0u%bym +zoP)o-G-?$UPq_09l365>cF(5_p06z``7&y@4q=0#<5)1@s4;cA2h1WwS``=K9}2N1 +zKEhaS*lRgAq4z6La8||{+Dw+L;E;d)%3F_}i_PP{z(BBZVU=vQkV--VGkLFgq`mQC +zlQ)}0%-=_r8Srfd~Hb~yn~n8ws6Sef($ +z!!^U`w&hbZn#|T>%n*a&NCN8xzDar{zH0}=vMi-OCX5{MWZ1gUuI6Z;(53HV +zozaj=sdy1&2W4<~Qph9SRqr0&Y+ZuSM#4H|YI*__nmZO!pY4xZv+e|F%i>-Bc^qoi +ziGR=O_KTc+tZb%~HnZNWqzRh33G^CAhSw~BM^)D`8DBFk&Rz%D8JJsJ$+-SPg~zj> +z6602hw+Rjsivo}b`~nO7+t-Sib7Q=dR00&P8Qz!UNs< +zv9;_9o#7izl2Ua2LKZwk#SrH<$$MCVTJQm&?;~xEJgSr`FgS;VrO<&4+E>XJo2j(k +zE`yO+&7G!zBB7kL?D@rCR!|*hr8IVc6q_P(v@pLJgK#E}n7sgg?6nXjp$U0A3!=-# +zsxR!^MIBXT!>31Vc&!}qAR{(o#tm^zs<*9QxlbAj%|VLb7^cR3?1NHmK$t|-8!fkd +ze-x~k_dq$vbNR$S=}waaFb5G2oG*u+^_I)nCIJ&K_oL>em5SJjqAUq?lnXq9xTLo) +zp374|@T`R%d-C*Pbn*dqJ%iJeZ6Do+cyb*xBxlUw7r^CGS(2 +zq5=S;cMzO)a+$-qDW~Cj6X@sMj19anX-N*!1$w1~AJSKdmIkGd(gwKskev{JV7o5v=FJv{QXA(-r3Fg!X90OE)>@hvt=} +zk>yLkgThXj)`sZGqS9i7F6(k#O{r?;5sHAO$|5!t2VroyVh#l3G3^+l^bMy~MNmY> +z-i*L8`2|mk#1B86XrW*uM#bjDVikb!Wk06|6;w}YAB)+u9_>l&g5P%`JLfe*0K=MZ3cMj)g4aP8 +zC!#?_naHI83&@06yC8IQ;oQPK@-xAkpq30P#k7=Bww`mWY*|W6=(+tx^aw7&jp4lc +z2Lg<3HE=+(H_v{`5`$(BbQG7_3k*d?!U`r>)TF$I?9ZCC>hZy;#TVnk&g*Qw&5lES +zg>hoEM}wnxy2wRyRf$O?0j~lO*+TDHC1G(T`WFs~qk&Ad;?ffHOt7xg70q>w9kjbI +z86oAR0ra%hewKB_04WfKU@QX0_Vy73j@Q_W%-y6rwRL&cwHT~fz|az@=$($RP-}Fc +zK$CvS1Z;7STb5L?Q +zqHv3(aLm9vC~{EMo>f~>( +zvV+lRIkpD1#?Y!?6U!o3ChN1U1O3;e7^Sm-P&chcG<9l&TS>mgI_q$}CB3a8Q8 +zX$vMDd3_PBfqy3b)g|?K9VpTr +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 +z_)}%B>{LcVp$e=$46O�W%bDOmx#-V6z%uqQQnxqMrYQ!5qT?`cN6>O*v0}n#Xmk +zM28VQ2@K{oE{4T1m$765i*btv^monG`nG0n6d{`t%`ALoegy0v$tMG~UPxZ=V6~{L +z3fP|^iAe)4v9T`Rx5Sh)M8j0dshvSk&8*GWr3)^aO2hI8k?G3?0#*P>4VN=nOX$-J)oB-De!MRw+2pUo4DA7)t^t&=1_$H`j&QUgU^Up7}F4|eJI +z_eI)`uC9Zv8Hh_<1UzQ;DnJ$0HbGkqQ{)=h^um$kG46ZK1LkdLcb}95fR&6n)om`y +zm-X!Hq9gr)@Azw{dMb|T)DA-j{lXMo9QF7hBlg#?Qad}lsj;iOwT6~+!kT|(^6L40 +zs_XipqJ4fgPG8gMwRdf5z6{gEWwCrME_HV9e<&U`FL(RwUq3p%4MRB$yd1ctZf|bs +zhP^I~Puoc?bkm&3cYkts`wZXu>hzyYpRJ#rJqddV2j|t2N=ta+Vk$VdxcM#gEy%%fE8Ps^eqOpm|pt6Z|NqE10 +zp$|VKTboC}CdIsuGAdr*P_gd$xba@re2!@LGJM*eTjPVFp^zeSdq5J&#I&jX!=+K; +zJ4%xtuhS*(J*h^+9KC*R{vr+#R<8aG{mm0X)@O?cGQ>&448Pn12?tI1JOmhaa=)-I +zm_NcG?dQxj3CWk27`SJcMatHM_iC^o-E`zve?UjLdk&f=T^1_iz8&7J^G#097QY?L +znLou5J2(|7JI{;aOXP%^A^JsZlMEkyce8<{@iiRyJm8xz&yA5+{8puSprtmb!DbRI +zCyV@7`*62T7k6~6BjtPwiiH1o^R*PV3tdF${-bNIF%@S!1E=?pjUcLPgc7yhVlxgF +z*Radw`UNNjI*1#AIKn;ihTc9M7KGMCf}Ca^cp4a^V7pHeqorE(m-tUI3;FkZ4KT$d +z!xvGqsR^gUY8ze#V04KiXi@u5@Cgm;+n5v$!(%PqtXURww +zV(I5|HhwCJ4FVu$VoX@9@LT#P5%+3apR{2r)JQ2Af#DlKAw^x??y%w(o%mcNrrA+9 +zfHxS~v0(g_zS)3%#-8DRwhdBl8UzWVgK3Jo65Y0wT$yMBOcl(IAKDxFidfkuAMn|G +z!Hk02^V`0sS%!@rJNOO^W@9qH8OvptzwK=VilYoZr*HgI3QbH=M(y=kcDf1;?+vSJ +z093zgym>-^VV|4ItI;!O50)uNGo)5fM9-LoAiuC*G?We7k)yS;5zPY-fha3~$CwyP +z{F&8aO3NVNbz)o7>C%^5RWmc6Jws_w@?TXu@B>jjL0EWzi>T&X)n2#}1h9Ss&WN(K +zLvPYtnRHC~R<++696rBQ?UNyU$G@ufm+4K+*+O9hB2oUVM?^nRNW$E(;(t`_`fpX+ +z?OWBZW&5jYL;u_>(`Fk{`M0Vq@U3bCa%F*#mi>>aUH&gs+g0pa)!zC4R<)D!Mp*Zh +zD5x#JRqdN^RolPkU#d2M+2+Q#svXw5{d4^NA5|Nz0Ti&=D3<_oHVW>2N@gHP=fsmQTtZ4-)-L=HO~L4+8cjW?N4APw{KM&*BHblRv3*} +z4_F>v$qhm$mf{4Kvk4LkS`my14{_%wLDILXjr*-?#|g`QtJ=b*DIVg`o!_eVt(8$A +z-uquwn^Eq$jaOmzGF19ss`l!`zg6uu`u|b2w-02nkN&FK;6Xfr0vLA3n%}B6!Q1~; +zwO_wg?V!^CQMIf8qiT~F|6f(R?Y~rQ#&1>o<-b(zsee@MA@Cg2|5CN5u>PvrSWYvR +z8w_Lhn*7Bmi$3BIZFA&!c*)If|E+3&S0(?d+B-0RRc*?@s`k~ls$Kivsy6<=Rc)hh +zRr^_N@7KRn?Q|{?^>0PRBfR3 +z|5CN_{#(@!X8M<^eS-@f@vUkXe5=~j|KF-M+h0|C_N{6={I{wN4qo}gwd;RX?bOTC +z8Pac68`MI6`yW+1Kk2Wkt?;dC+kC6q#ytP4YR?tdeyiFNQWBW6->NoEZtP!G8@ZZl +zy2q>@+W(1N)m<+RqDW(J5@vU{q$j^NdhIC-YO`mobwU@dqW)M$$_B=zcZN&pv|<|1 +z_H^vbO-|Wdy+9~hixEGX@?IdD>bY;ilIw6nKuerlvDTeqX^k3LiFC7HGD?C_oBlj4RtKOS}q`5XiwJ|~P +zYB0_Ubg95r^R%sh2GWigH{x}z9PJ!z#c{(IyIsHbpISXb^wW&sHc#)jhgvycMtGaS +zQ@(D&Ul@$uvEeId$Nmx{>W=eC-D>3y-Zde<@K)iuAyYO!SzRfj5~vA?|MlyjeARCn +zO#ymJ!I63=p8*&fIaex|*9oxg48d~wLvy)P`|fPl-?<+3&+K@1CR!-#jMEzO?UlSS +z7p7+4z`ibCb-z_QdBO`YJoN$^X#76pf58}|!xoNmMkdZRJ5o~aUPldL3imhUxd +ziDPI&ZT^O`Wo`*Y6g={qNjLB_f5`DG9DP+{{iiO*)-Xy;5%}Y_apfl5g4AtJ|L3dI +zqMv~)zsfo>R?L~d2FpX!^N)c%B{e0Qjf7t>w6_<}oejojo@+a+v&J`ARS>;=5uQX% +zFd@BJ6Ugrjyx1B6eY5mLjG +znOR)66}rr&<~xI0)ARFAQSMMdsC_yI&r)G)0NIxZkjDZauqw7hH>Q$Jwz`7+hh|qx +zc^~>PQ*TVrqD)OOz#r9I$smgqTz&Q%#6xyliFegZ0C2v#l1IMvtEJGVf#)b=4vmbT +zMvh=eyF`1C_B|d}Smj=(%_;dI;xw6n;9?NqwxZZ;KRsuH%sm +zBDTeQLQ30sTk}ms^!3A)F@D9yg(b +zoO;o&=0X32*bmcR=&sX&ABzX`btNC4>vZR8ZFUZheAQR4>MSQ+KE7-1@xM>_zQ&Y( +z%otqU9O*q?MEt>KOT?Zr5$lSD0IV%{QOQ)u(+vX3hO{RSJu?=t1+0=P~|%s0~TF?(1ZM0qYriu +z`lFGYGJm!F5`?WwkTZcF7R>I){EJ30tPwFCm;1!aUw#5aB-9^b`gK3=gy2?|Vt8CmO<>^rbyh&Gy&b-d``1S} +zBo!X-Vkz2yU*LruCPnarz3h$%F)rh9@VCHOe&QbzHQ+^SI68g3f`z&1M$0^i&czQL +zT4C~T^+WU>ZVW}$WI>8u-2T>2cu4UDce*NUV +z!-PWX&9MOXc(WvH?BunjGk7f+h8aHXAW@CHTP^cy?mqJ}2bgJ>Xacx&9IwD;jozY)Ag)qSIk%H!r}>5lLvXg3D^!)7tKw5Z&1G(;_`A2Smv+ +zn{I}&oF3P7`5NPGqu^u8gCUF!7PB$$+@h59N=AVRL|2I=$3fOh2f2QXI~+DubS1Fz +z0fX?AwB^KC&ZwsQ*s-{2a9$72ud=QurYh&`5+uL=eKd1*68)P!8}JMIFdI;D*CXhn +zL@Eo%&RDElB;IkhQ_e||+99SkZ()JAZMRR&xJO2?Fht%?;Dylw)S6EYp4iI3;Jn~9XZSJX=hGXKs^QMLPJqa$85#ki)hm&U$ +zNx<2K(1rvIv3$08sV+1Nxyj80h*$p1*4l^ZK!WI;aFRcHX1Q)(cf$H~#e$r(p!Km- +z~UI4>c{J;kdrVGl}`{lh?MM+MDgA*JDyuz#DV0Pv#fNMds%fdM*WaKi%cOM +zoQqTfF0z#zwt#2OnpA~}e7UZt?HNoXNWPwEvg9=XPBV=1@tAa%9g2P*GZEGE$cqGu +zIM-xs{1SK3?nbd8M%s{86h+q^7aJT}Q-~~;w1aP!f7>6$bCjxR34y~$jO4Qf?g_zd +zclg98vs8< +ze{(rJpL&TPRFY`6(Vsvl0I(hAL@Ar1gfZYw#+)4VmV7i10X_zE{Y2jVbV3(JDVTxj +zKILef6DOM{J1zh&fr2!(ezEx1@@^72Y_~%KieO!(W-3}mgmsN9<$Rar?DZGoYe37g +zhQP@;BXH1~f&4r*5ak}7Vr)F<6j?x6C;_W}CyZU{0w^=C{0Xfah*|HJ-^CB`A?j|F +zpl?3#B3=4x9-E4$bDd1p9kTW`&m2U@B?X&M(%36P>E_-Uv0{^w*JI%jb7N^%S^9N5o{=H%yJ#jir!3@VY%5oKCLJ&>bp0!$V+S29G$ +zJv`*0Jvmdz5SO`SW8o=4-wg=9{N+?%gn&;XL>-4tUa(!lE&Tdp+;~;#$N~`X7^rTS +z4%K{=s0=k2DdgSXsk=y(GyfApp1X<_Fnx!*sRk!M7zYUoHe4E%Slm +zx03p23d;PT0x7#x*Uo7rfaG?9`$lbime|A(FpujuoYyZFcnUa%J)y?7z@TD?U!CF^ +z5T1ySBm)F)uuTGya?a~v8L9JL+2|aB?9D!Wbc&)p$Tg1hO6v-UP{TP#v-~4sA+nY$ +z!jte6SOAnW<=but%MYxrt?}b%4Ab!SJf=4EtG=r{PA)q5YEcCs20D?Jy4Fb|SMZUv +zuDNk6Ox{_o=dwqTZH^|1%tS#Iw-4L0qasCtbHKn#MUsCfxAo=W_Aq5_n-g$ +zhhLY?W2tzw9I&}DJ@0U*YmT^7u&l9a}l9=75h!Lt=6^-dB> +z=v-F5xr>a6@IEY;HZtI$4d;V0RSV?>@Bjb@kmnyQJi9)e&OO{XB!+2u)N<%_h=5k} +zOD3$`FyF@Err&&TKu*cmH>DlfGB!5_8P9zPo%Vdg=$c}(lmlv@<#6c@q|XCUhrIR2 +zkDrp6LbOF4V77`ndPsDM7+&M&K$CeMzqLRan`vKfI|LT^KZI-tIlmDL|M+vwP0LtdH>roAy=kMrMQ3nVcW@z +zH71Aflmi0yy>IM{(7TS7p-ALD#?Q~;eGki5C(^+yV}|Wf1C6SUSXtDPnx^Fk%8fkU +zE)J7m*H01wXCcvW!&94xC^r<7k;L)hJ}^2P5ND=cg^fl#)q#47KlV@&lz>}*PKSRO +zeFU$8-vH0W`}SH!bii!5IZlAOL#KmV>ZoIc%~Llmfv%jF=-%4T7dHy%*i1a)=f&;B +z*yHD~f9P)|df(gi#Ne<-ILKmgV`L7MYm%sKY7h{~X3+Su4CU#e=mgi!iM|RjVXcqh +z`}=0U;aPq(X~=N28<`q$U&9A}foxtr8Q4`ue;%LmvVgv75WQY!zfCweNLKhl-;sjo +z1o17Xz`BwekKvIc*-=JZ!ii|qvfRi9gqIHq>ROg#eyky>N_99V8LzDGM6U*65kOZ% +zB3(102CPk3_=_Uje>1k;p)^6rtVh>y7C7q(HlM*oE+p}g!`_mEOB2w!&g6fOZL{!1 +zj#x7}+c`yHwIYxWs>JHnoOS7Osw~q2glASb5JPj6nI6lI;m|S+uD@v$e+*^_s0Cvj +zqSSQly?ot0T-w31C2nvw7Z$aZp#CvA&)5n3J +zXN3xtq3^?GCamp30>a?*T245RS5kcXnhFYJM;6g*!`;I#0(w5 +z?)9T2om*I9DzS7S5ph!e6AOE-lp?!bfe&D+;i_(FE%2U87uB&#g;|UX2U20Z@6NEl +z{0M-0kUd}`=@p+=S0&XFPpalDddq1Z>r+;nSj^mvp9$^mQ3Q#t-xkuCXf`fLeK^`a;Z^k;c=?>{nSPCsr2J`Ae0 +z6SF0s)+9(Iw*VN5II}&?BiQd$(BAgIU7@L4{(`DU&NYRNhvD^4FsB$R&q1&Lxg${2 +z@%GAE;%`)@>d-=!!}zLSUl5nG0@vyFR(zN^{dA>{kIi3G4=2c;Gp-;Dw1F&#xHhP(~Y1JRjAMPG5Cue&zC!q-!0ITY4?1x&pux6 +z!B`Q@J|a*#mfH0yB~}3+^kMxVPGTz=OxA;3*5M8y-uv$<(3KREvp-Zm6;gqz1?Bei +zCr~DVpG?KSY@Lz!fvfh;fm!>`rp42)ZN_DkTuqY6XfagTIERr|5RF~Si7~COmFSZKkgPn +zQM$y}@01&)M&4+giQND{`2x{>~EiB8g|BrqPpYWjR$?;4a9Iil{z&#sXG`j7hLBsI3!>j1%R>t#Zkz+*`0JwFfmwlMl6;(E;T|5T8#=X~x0dXyk)2vh2x +ze*cl-1gvVv($|U_O@M$I29P$tvOtnRi_atg&@rX)D8I<()#2EwIJjD(ANzRzn*Z`3 +zP%r$#F+(nK-4+Be_khpGA0xCnIxTXbL^-xV^VLpe&Cc-u0d+-OZ+lCD$L^af@{>TXXte}|+OI$vhY +z6^oa2CJY^Ga;Q7=`yT%Wjexpao1#$VhzXJksi$&$RA#Ga|tpdhi;KfUuk!WSmV`f)(08km2`j-MGQu+(#`=@)M(Ov +zjBP$83Zub4f5aeB&%zuXCPLm2qToFEs|op$(rB2EQ=OuFHT2Y7Y&K$SoJF8b*14b!-mMf(*PV!6yne +zoJ06_aB$zFD-I=j0!U-p%sSXW?zMP~5h7uA*i#B8G1~wP0VpQVl6*~`go4&v0%=}x>=0!@)7wf4TNsL%46h03_?+joUzo?1s=uu8!`}J68o%i +zhR_gkpq${t78TwbmT)sHA9Z`g1yD9(kYYE;|%?p +zQw6g2n!lPKmS8hT-vI-#*_3isI%weU7jpS{qo9LoeA4NKhSUl9E35v3K(aoad_qEN +z9db+jHht5wgX@ZUSQN?Q#J~+ce7S%b@&H4-cgz#nSdkTa@ug7aNNa~e(S|bECC-KB +zV;ScwfHz`-yEv}Vc7?2=tNoe0c%P~eo`WZHYj$PjjGZ6xOmK;Iua1PwhHlw9_-KM= +z9MCkfI2C9HXSKjYWcC*b2*7<&AZ$yw9_ECm(A`c{M2j-&zDJj^Xx1L%)oycT!Iqeo +zirCGqNJGFR>Hq;|B7~FlEAg4z<@Cr$F;rmgP-#Vsj#Djh?9#nZi+72BxE@WN9}IGb +z)J=L+lsE&d*k#v1iJtS$ZX;CGfQ-=xGwu6SMi)!Pw20Wq#&CZAl%Og0w53JBN0Ejk +z+0nsjG}h9gsI+WwbH4Je0VORhvRi;=r=4c)f|vr=2kMB`ITnn%+p2r^8Vw=Ap7G=7 +z+#D&A{rT%3rTf&t?$ZdO}Q`HuUf&#xkvGBc9btLXeH +zSj&6+O7(%fAo@M=p#kFtqPn*Hzx8G6U9i-XA`CbqP-x20!+E0n>?zeZr#{j4T?+*h0XA4b@(O(nF~6vRFV$sT$!3(H_V@iD_ZicFTGin +zeY2wTrGV1^C|RQ*JBq}%^F=fRq(a6^?JR|0SD)SKO*y&92>yifoSh#sF+DSO+SZJ4 +zKQ;Fq*7q?k`v$Fn!L8o*5x^h^9UV^88|XsES4J>yYBci^?%`)j3$_Vx%i)<#;ggvj +zSnYVssRG8~e=kU@ +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 +z7(FUulwBge`qEVEaq457(eDW(J$$A)b|h&% +zuLgwi*J0#NH?;W{O`~KR9k!(qae=c(Bd_ENL4M$Bf|E-P+|ag`Gg}<}`ZR?&iC)n` +zAJ4=i1m6ce8Sc%X48uCr^I&^>I_6f*yNY0~0Yxih3-Yx}qO&=q%UQK*x5QV&_sH;>I*ovW><$Q)m#dKYCix7r`R=)CmSs0Q +z%j5K%h#xSaW-ec!bdJ|YW4*(RWL7fGJi_VL_q5K{QC3Cdb2oWpiwfy-z;u!-(J^KxNaZDqDuxQG!Uu!NI~n +zZ0<^rpQP;B`oZL}`6PM&6&)-9mY;q|B-@dPTdK+MTt +zU4tO!HOF_5G?UtvlwI(8=}PSGZWA?%mj0AbI +z%h3cpOp8$L$1&yA7u0a}X8H99Hkwm?zRVb*uvYL$6_O0e4QvI{Ziy1}3V)dNy3s!uSDW4#*`%wo~XmA +za)%Ge!3?^)8LqwRH)bK;6TbiaZBT0GCE9-L)qWt@tqA?-uR>lej}!+|p1h?giY&I` +z!8hv2>mC6tgzX{^g(Utk5kf-1^t}FSc|bl8Ew5D!$pT>165-rVV1U@G(p17)<|&=C;|217*h}j +zhg6MC!q8akZyxwV&YaIz(kxBKc8r%0EcE48s;Xb(G^qSaIPo%_AHa$&0q5LgWyUMi +zHOm{t;l>N#`h;tEP&bap+g+ +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 +zuof-<){KH+19={8n9(Jas|RG695FQ{#+q +zAi*~L#G5Vth&L^KNt9|Fmtkj%OoB~s1I4i9%^5Zu%tczsT+TnITrOOI9Gx`APtdlN +zd4SE{qv~PQ{Gx)y*lxIeI*z42ue3=h??Y88uHL%h7P_nmlO-9Fy(9)#bNb^385K2` +zl^CsYKb2hg3XceMGzCZmCn>(AxqpP)Rd18DqT}$1N`>izM^ll^@cY{oyP1Li{`jG8 +zW~hb{DQ>0ssX=b$s7$E?z>i0TSkT2T6`WFJNrvR?wc}?n)R6b^+Tjy)cU9_i>6VaH +zMd2(fdFdws#D7d4Gg5l!wl~_+pb29Mm+bv|<`g|HSC3jb3X@f1&jb}4xMH;O64jbs +zQW~a2$<-?&IwX+tV*=-WWN-tFZ}p~;IK|=;4CxqomEo-909e&sW6WY;?a4+vAt>cN +zSeSy2L;kjzimSB3DPjq`E`B9-Y0qOS7_arseAB8{k79#(%|ez+f*}6eX4omRQ|APb +zp1uIs;HVFMXaW7;0YlYtNBs)DT_`?DbdZ?cfc61Hnd&?lI@aL{XgA5fife%OBbN9c +zoUP3sM`&-Pb4r-R3O%iP&$x!HPx_NBRee+?v|6%ydJ9bD+JJdMul>+-lLp^>#(*wy +zjWG?(i|t3tf5zci93&NRJ>yVK7J0-L06z&Kw2`TU!+`4)r>yrS2fPq!I@JiMqF> +zUzYHz&zauYZnKLQ)9c05T|$7dNRV@Qh`so`r0R +zWqj>Tar2UU9tah3^?TK6Kx*iiQ}bjJt!_}184`#Pwrnd;EzMUiL5rj1f14?v$~t8I +zcG+m0^0J9ZxuEA6&{ob2xfN6j!Y*-^kWHTDnGrn>vjPtt&+|t?h@K0p#(Fzkp;Iyq +zTJ6$u8t+%N4s|_x +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 +z6aj3h#J&c0aodKh?$)TWn@_cO2uKwidOg0SgH +z#zj26&clz5}T`$*GaTG@#d-l-|(P! +zog_@FY4_XlmAU$y_pdYbJF4|Yw&twGFJ9%}oHluQ&(?=#ZnAv#OF)mR?;ft{p6_JS +z%uNAJt_Gr78hmDw-yA_NceuG+6G0w}Opttg!$KxoP+1{KUU}|Xbyt_3c(n>zoV_S` +z3_Q!Yp}e*oJ2iE5Mpe1w3I#5>3-sxb%bp*pvchycJHBx{C(c~q$B16cL^t7~v}_A| +zdl!+bt<5n6ITK`1Ssp*kV@O#PU*SdpM$qyd@xPT%gSUdePK(K;c4~M-_AHPNrFOwX +zo7@||3Fl!fK;$xeF#|dT5$;`F+duI^`h5MuY*F{ZxYo!@{M|{1$0ICX68LO*)N5y- +zju(&!=@_2jwI%C|fE|@20~c)(8U4j82Nl8M2HfVr>j^PVJXFk=8Wig;x{DsT1fqv- +z9T(9+jAVPZ2hA;N-b?r}tczS`oQw{g?w&QLJYzhe!yRzA3VOH3C&DK|lv +zm~ChczGdgWLDb#CA!i|BOXm6Y4GzIRqHA$ +zzPO^aGBeXH8{$`hKqVW1D9C33Hmu}OAu(?*>G?4nJoR=el$>-%#>7;6K%8?IWyShO +zkp!fkzVCZp!ZM+XKp>U>^jnd0Hjd0Z{87LTE +z?YP!3Bkq_x)ujjDdZ@}v_`xBnjquz^OIYqv2EFl{f3}$uddvEcS_QHNJ)Z9^ +z3nAIL5IPY83sPrQ=#)a+ld(3Z0$h&Z_iH@UZ8GRsmcSN^Dm4?vnK`hKOsf(Mi +zsr{6PVdQk7!k1L@3Gdi@+ky=)Y7tn=eLKY05Do$J@e?KbddK`iz_n#WaNCY#_Az3~ +z>Va+L^PwUgVxR=lxX3GHAP~T+zRcHJ3JDD0bEC0ge%oQuYlJOB`bF8jb=gl&@?ZTi +zQ_cmW2N)b`&A;ygZ6T41Ii8?L_|X2OjO%q@CC!FdP!2boryx2-GNveMr9M>lA?yJA +zPAv(M?#T!QUV%9@X&6X;zlCDhD^oNC)FTC{cFU>Xv`6dvd3Pjhs>Ltm*5py!9UMRR +zTm`s9qFshIXbaQB)i+X>4ZV<6}4^4 +zJx4+DC*5*0f7h|+=&39*G><}(L4aPr*D*60?>FVw((mKhNI!7o3x(%^*@wuwjO@7* +z2szH*2;t9$Qw4&X#%S__iU7Ps5j-D9OFAF`v!p^fZqVJj-Ju#UPVV*hmG_CE`MUCo +zTC{nTW_9vDqcA88wZkK*Pw8*jD*kdy^?A6DC&>#2SnEmqX*_wmyIcysnbhRjjNtTr +z3_N^u}Ae_fb +z2W8UtLdcT@lfW)O8!hy!ywwd2`S;vdh1=K7G1^VEPnDzIcGKOe5tIN7Q>owQ>SaDR +z`^V&K??f5uUrm^>AJF(&Ins+8kwKLvtCBY&lYK80%u(*jRJd% +zv@>NKU7TKb4AnT88?ocOdPI~G^Xd{Qz*rL7OpVbYtpbYn@gL%cR_Id#e@Uet+rxIPjDpO$E +z?TJ9dptTkyJRJ_h$zd)Jm(@JCpD9)3aR$lPspfJAM^#Yd?e;8LYojhf;==%_|08nK +z{2!5fhJG{n?Oo)KAt>5AF|-zKkhv@**!_XkBka+kZzs*5K7z+Q)xvuVc6I1iEV%Ks +zJ19FWMYxg+SFI+D%T3ZE1XFeCm_5t|yUCFqIsTol5f%vg1z(tD(--R4*E}JRoa@V0 +zQsG#;ahk*?t^HALz5E0Mr%FIArvQgZ4#+JgWGmN8tB~2%1z4M5SPQ_Yi!FN&G??@n +zSS{EI%}6v&WKN$V(n=~A_?PS}f&LAG+T%4efv@{x>CgkWN%ubLWP2lDOHl5sc+0Wf +zYJyJ@G9CD~IvNu*5ZxEw$(FFSkekbCpY`6W`BbNiu@rreIlep#VimOdd<;(S?6slY +z(SCiT(-(1~Eh3U*TUQHW#Qk7{&+%+JYn&pcz&m4YW!2MWMYP$OJ29%o5E5M#yobG; +z@I3zL+pJxVm(CvJz#MukYw03<>p8RCH1&-X-3KLUNqnjkk`A_KhY{GIPF7@im)CnP +z2B(+Ti@G%@yFwD +zk=yfKAnzk +zrsYt~TJIZWd9|$t)DWe331!z#R-7nHlmqb`tv~Un_o;kN$pvSpd&T8ztLiM`Q&o|A +zuXTJ-5(6$o`?`9a#g_`={TcOFt+U7mc;yNwxXBr(VMx*Xi0wDc<&zz{_|Kh*o%fBM +zMQB6l-R=Q>Sbu2b0L +zCI#n&EnN^FW^V``bSeyS!`GIGIsVXYTaitoq67@@Ydvzz714~-n!9RG{_q&1&TUNX +ze?;zEr+1NCV5^dw?6=4bUA>Lb&8NI^z~g63ikkvDW;tv#r6Onl=$!O(4m?0po&<7N +zcwOw*cOmc}ik~sy^_abQs=mOEgd@q{?;es$0JKX2T|%&Y8VPzG50u=3A_&sACRJk) +zE5I`}bp&1MI9D|VME0r6pARawV7VN;iA%%M%ff=8MhCCr{2_YgpeQWfDjiq(_yT(s$f!UkA|ReMvP +zErLv-7Yvv`Uqu~DGPT193E(7UzH}mc<)&?Ss)VCOGaX~i<}K~xicpO1y^}(i+*Hm8 +zl;Y8KxElkhfs6iI;|5uB`7ARWl$ixYnoK +z@{72V;bsdV2FRCwcjQB5{?>-Cs45fIV|Fq5lR^xI$*+Q2eINK+71fR^-F7E(-GUo8Vdz+^cX60K`?ZSg{8s +zq*QNNL*&N#5V>vMMQ)~li`*{)_=^}J>82B18`{4`Ztm=VMDFqbEplJ| +zx5$n6TjU1#5V_suKSXZR50QHdX#Sym78Cw8f#t?iF +z^}3ooelX1M#OvXGSa}aF*yU%6X>Cm@`OS`G&RE4LN%;AdV#6(7ywj$zQ(w2&4#?RO-#*#ntAivr3%?|A-Wn-q# +z10l!t>k<$E+zb0vGjF=5eEufzg;O38ccgeVNvns5Ry9(!bvzL?O;Lx^fOU})9x$O8 +z7$hYXL1w0E%+w~?QJ5z@2gor*g37=t-6Cw3bQ8MX^>8ob1ab9BFP1Yu>QP>P2d3H} +zSsR$teVDTqPEH>9vk3lJleJ-n7B%WDkpXeu_R9+ezv8L6WQ1=F5v+RcE>Ia_MS-Ba +z`SR9*=e{PegocJuBfz)}=lBXF1861u9AbncHHLGe^8G0@mViI^?%*WFIs1pmP4`FS +z*8MGV%YBI4h}C{ghJgnZ3$*OQ7{NTtTg&N_PO0>|p~JYYj(uU6DcE4J*a09?yJOq0 +z#q(@lha6g!Bv9>A7*8WU1g5xttE@iTH26eH50$jG4QrJ(mhXE#?l#<@{+r~c`XIS= +zNp2X<_T4T==lsW$=_K;Cv@zUd%XUz2OAH!HthE^;e+cE!2Ng~|&gbEjc|{HDh1{~E +z)->IamtyoSp36u=+!!9tfRX^o)uhyJaRDzoeimgGPkcJCn&POE>J27Z9Qhc#MI&hxfW&K|Y^}*wC9b#yZV&?60NveC=^GN#_m0c5?*8$sxaGz(n%o{!MG*q(p3`7V7rFd*HSt46a9 +z@*ndxl^-@#rqWncS4=4*zS_@mdKHb%-1Csdiou(d1pij-$?vv4NAJv)CchALD0{zTxRWZH`!}Nnl1q{ +z<9HK=I`%j>0onP5<=J){{a)b|0&Y5KEab1_-rjtZB*8xHwGv%1yc92aHSo@!WtQ;) +z+EdWHWr~EtnC07oZbTCWc#AecO|4X;Jl+}=TAy6{@2Vw!m}=L(NczRwzdKSI%(cr*Pk&Csj4weH`td +zkikH5daV1%h9B`Yw4fVudEx?wzRgTQ~hK1gIaKd0LcAG*3~r +zZuWk?F^bn9`xGcthA>vio_dY9+JVw>(Ex*lt*9-K^O;tlc;0Ajw55FQ6wVm9ri*@_R1l_4WeD`?BX61S&aX>{iKiLfUT#u +zewF!*kX0a0A2eB?z2%qDKbb$iXsEFFD;{G%U>wA9e4L}%DbXak-D?2&LX+J1v)Wt& +zKV>_^UQ(IG_Jmi1M>)5Ig2kh#*&7e@2|xqbuy*j0Bkd7%oLdT}pyO05H1ZO((U_}5 +z#Im@M^6i`8ofK$Sy +z?ohAENt1%g54`KepvnLV#0v+F7dn`cg|#MgnIEgPJ72X3Zfph-)nabXOW{uDAA)4* +zmWJT6;0gGAL#ts&B;y17ELXSIkt1wM+^v!82<|lqsAs>ii;|zo`aRUm3VsvW7xN4{ +zhoQ&T%6Vq7R~l_=!VnMBB>7&}qaezVbc-N{k-cjMPV`IYP&_vf7(|9P#@9ExU%%Cj +zyvO-q=PhzC%Sb~nn5E$ay`Ma6=6$Gn)`9`Vqz^Yg6`w*`So%S)32&z3Gv23J!&M_UU*Ws~BkyW8k +zPWl*xoZ=awoq5T+LrJGKBoBK;duydUU3ka6 +za>aN-Mli@fE+wx=OflqxcTWwrOmGgzTLqpYLjrmNwI^vR;#0ph!Q`e}WN}@_Rfw$N +zCh#Jw=5slsUCrKJ6<3X<&aAZ}ONMRv&{;`(S}O6iz#2lU<~wUc&-5AMyG+s4Dqz;E +znQ+V$gdh)D)i`Gdg89hl?=9dPEv6mEaeDTBZuj4yk3?F+W+-bsg9Uh)(x4O+n>CL# +ze-+eSzJVUHTy(TRa0anI++SJ(p4Deftc+c{wV&%sP4OFlrg#RQz<%O62LdZx;cs<% +znXkfrEk^f}Gv}``8kuk}aA4i-ovq~-qYiER`QxB5Sgu|J$sQ@^6ycSU)^S;Dh9j=xcr_xhVrOz0>gCNp8AhabrtR$YVjEP%WF$ +zRp6P)Gh2zlc&Tf*mJ4bkbM`D+$I5-BC^JTb?Ddl=)u0cOJK!O^rmg%r5O4yD5sd7E +z4B$E1ABo5QZ$?b4ao3ZXs +zQ5z`&4jB=s2CrqgVx^{65-xjA_9u)}QN&^O;UQQ}bEuR4WR22jwe58$q~aq@8C1dy +z)(#OnJ*8vQEi6J3D$P>*gLNVzGk2QnUUUu7?O6i;N-Jl2V +z4U8Cv1F#?loaIYiJht +zwWB5Q&+e;5(Yvw;Xp)M?+e1zRI?w|{tao{sK8hB4Etzpw4xz7ir6_p9^8NXG-#)j5 +ze?jb(8uLZ=1?awqD1@Fwqs8pJyb7A1fcK7f1#4JT&5U2u~&hn +z2n5qm#*nXaI;QbmE6HiKt~OH@xaY!>)usr$#j~zZzBbBbRUx#AZ#gec)g@?)$Bv%$?t>Y=EIMc;_L1n_vSm;A*x=u_Tr=a^7>A4A96xW$86+(klaJi +z=j1Qd8-izPHhC*QC}1$A`PBd~5)BDdiY0r6KS*wbcaq!eo#dYQO>&oi{UEs|{*c^y +z|020@F<02pgK|Bsc0GlA9s9(k?#9JKu3q{tSkNOFT~`w7*9V54FV}$>C&yvy3Dmsiw^1 +zIBX6;0iW@Q8O#G~v;;sYX=NMu%7zR3v231wJCSThl_{xut%kaDEQ0&s)eP^+>%|Aj +zo%=y@8%HOLeqY!gW}r$vND}QpnDh6bvbX{;0*Ut>Pqem28TwY-fE%PAkro@_Eu9|1 +zFWK~@$eSm(g@HvPo!6_+SIge#)oOx&XTxQ(Pz$uqv~S0tRtmVLM4jz1FqQrx~TY3f~W%;(uuGgoeMVJ>?KY6M4mwMBv8-KyDs(dHn2i>?(y#gQWeHX?7f#obci{_UG;A(#@Q!-Q@su +zFi!h%n2^rvz#_Vuq=|wc#s1}ZTWfuHY-m-=4gfv7Z7n$C=7EW^j90tEw4%s%tP}z@ +z_|Ix8x^lhCJ1-}QR-cO=T`?I1^ecAaN=Y!|vDK*Z*O5q*P~SM<183U7Si%ErErm{& +zSvmDAPg8*tk-&2b@{nUdfITS>w04p|n69{jPXgzT*8zBqP` +z6R?+D`v7W~OSz)ip418qB?ydFfh+Q@9~(uh6a>C-zvVey2>|L{ +zC1VSnG5b1~7PBZK)%dkg<|SIaituR94eeIJrGO*mc9m2}UcD3!zDZ78d;Ju%5BSI@)!ER#HZ0eht;H*j*IroAe16rr1qe_R^bj`t*dId% +zXO@cXF^hnw$l&7`&~kI00z_gC@MWcU3J)F7!Og@%co%3|kOJLnojxI~#V)N?I-AAf +zId9}^rP8^zJOnrv7OQ(8G+ETX)gca&wk!M;%Ke(4f$^E_B5k2OF~95v+88k=JiQ?v +z*m4sNz$fuSs1(t0!1wY-#lG~KnHyxyfRVA??+nE%d@C)irE+o%qqgB%{5+W0lJl2Tor-lu84w&=y?tVc-KD5vzAUdX?%+7p(%{Q{t11<6*V_7!tdZjss+DI`tC +z^8^`eW=48`Eq&s6fWRgG*Ylb;uACtV6krI +zM1zKW6~i8HuC +zizBr{`OTH8H6)SSo%H|-5NVKuzXXmT=@VHJ;y?2pYfjcI(gcw*D%<`J<2j7RtP2qYh(8yhhsfBiN2C?aAI~mhVGqeUf +zp@jZ~YJRKY*CcP5%j73L#&$FK#QxJ4(OCUmoYAUupW7f~KP)fZNUa82RG2=AHH8y2C(6igy)}?2`6RkR +zW_4$_ARJYIj=?%7*Cx52!dylj3-)^b5>93?c^e-mxCrqhP>(P81!kkW;|ynwL<%CR&dEf^zBYvytnnn=dp2FHM~!4}se~ +zRJ}>Ypyt-f>r+EzA5D1sOa1;2d!C#th*_3yS$?7hqY_0 +zy^m%3#CB)T<+N5e)_`~yHMUQp5m&v01W2lWOWSdabtjwMP!hXPj +zPE#HOJYlY%?5FIeY2ri+FE6}60Bt^}EpHP6vK{!iwlG9#E#)eQ1(1s&BC+giHKzxM@(?fGIBcKT +z_^rMlEyzoUrK@^s3q8vYKC-IC>&k^l1Cqo~p#7CLX|FfLXBzK%~*VNxa#Fq7zJpW%f<7Gw;ii&$;o!k1{6d$e(Q +zWwcPOK41%|-WOa5nCSDOl|3p&!kKRknb9ECw&u_DvVi!TJ@;A2UH>nMYY>I{x}$pdZVD?B?9S-E?2DZp2tp#zhIZIn(Hl}prl}LU5U3Jf?2j1#oi>}X}iO)$1PMHdzvUm%(q*Jp9s{7CUiB1y~gC=#UzSL +zA}>OP(YeFVABiq5+N_(Ndd|;%A4wimMNyKbYBHz$p?z1TU+4FHbAiW^EGj(|39k$U +z3=78a%z5OPLRz1`%2b^46Hw68RW914u3pvQ +zYX6tWP4Xdf-!`fhvowY(dl<{nJR3kok`3_!i&^ds27q7(OB+i;8eXh~-TQigs{r>& +zkoq$51%!N2wp8DT7w4x|!P}oPa2!QGD^W1{f#d8+ICQyEGarBEO}dfJbud@mr#Ge6 +z8wkLJkai*k>BSfDT3dwkTjW+FsyWQB???QX$o+Kd4Nw)Q@h_2EhBa37`)`q(O>yKO +zk^2r^-2?8)!oUxy#u>!2%Gn5IUY!s*D}&i$8#Y#=qla9O82$5I)aUY}g!yXVC?N)Y +zd(ND9k$W%(s`yvrWw4U2Yb?$>%yyVOZj48pi8sb~S<)9k)zUJhHlLvXh}=T3Zr8wM +z=lZXghxb4Gfit@KX7csqm2tZP&=8C-4z)9XWd>xv0kb7i6UJ5?41))IMT#t?TV`Ik +z@9ZA9LTOc*VS$8fa@(#@iIf^c*UQEan8iVJsDo7svTkNzc|a^~cmemuXAVMol<3N3 +zC_(#CaaE&xu?+dH{*TBl +z)B0QFPI?!)@igWs&aqxb{)k4nO=A1>HiGX4Z +zqZFJCgvNY65g!3bb~ZYAk+DAw(b@?jY_VbqBZZK)aZ4*43cPA5{vp`?s|zI+K=yN5 +zBA+3wva#tEA#XfdmK?=rQ5r~U560SQ6{*u27vff{@5F1rq9XXAZ12!$N`>P|l}d4z +z$JH93uXO7|pbQ39T^kEpC7PZuq(u^>iSvtKLo(UGfEwu04Z))*&mq>Wq;&Bn{0TAK +zoCznz}?ok6_*%tg)1GPuX&F|y*V8FG*SAh*1U+{IC5EeAH}7eH +zMLv#a0m<_#Dr<8EZ2z^=^KK4Hqr{S5!;rKoa+1!KuGG^3&>|+>NYF@Xz2&%{LOl!C +zJV|V+q+NsQsB(_y4aiIk3`8wZg)`W3`$!8IADhsPq7t=DCK} +zCGM$I10ML*SxGFc3PmCP@gPF_HlXAVJj1iROspDRv^uU`meYt1j-Njye*!<8cKBXQ +zEa;Ta4U~#lVFuWAYC3^xpfbY7KYUlC3AmH=e-}ns_UvVtML9QzHBGjn%EIUm&Cva`&U-3iy+d8w0 +zs>}5f%y7W^ID<=J#0DQ(^LA}MJhU5}Ie-YGZqMC^L+qIfqu#s?$o_jWcglQDP$O)we% +z;D@B(Lki}?LC{JGH!j*4VyBgXY@blo(x3SX{!PwW`4^b>-7Ce0b3Z6DdG3J@ivf+g +zQo8SNk$W*d{axhN`VhGrBw0R0?oioDNCY$j^0~!g>m=VVu=p|ogrfi<4ELFz1!g4V +z0W9bnzOydQ#bv*X+>$N}CTd$V{}H*p964*PB8F#`9Wm%XL~iz2tb%XP+n8mj7j@mS +zD%|uTN~TKnDBjc27|(lHi9@^09j)Rr| +zBXU1|a{VK6^Sq1P93LWgj&^&$Akyv^bnJvGB-Yz);L%TvSU{{`fDdzFG1e}$Y@)kVR#uBh^05%%ulD1Lp_Mv9lDO*A +zqILe-^L?!IWQ&~q%VITx^>Eb)fbJiW+f&uhNr25x58Hbug2r3+kI0RZtZ(>7`nSj(KcfHrB{#h7e~H|s6&uZ4|1EOAf}y^P+))@6`kY@iA7DO2Zoqeu +zoBfZ-t^O`@@APaVD?`nK#}pEUZ8y>>o|=HYUGIjpq;~uO&u@y_DROU4ZD+`V1K`Dj +zHQ--tQL>Xzet!z7YmCn7mJ?j=J$Zt!UT1EeEzlHDK@FhqDL_7R^J4WHIRf$*cfI^mL_K(Q@dG=l8#{0L(ef>w|29316{1Ca1=b)SEuS$ET +zhXAWfTL)5ny>a_A|acUfUxR9UdJpt$Hu +zml7@F7_|FYYi1hP!vQ0hQ<$WLo1Tspuf`iP+~g@iiSG&KlgalXVs5f{b+$Ag6-A;6 +z$BdaIaF?)0Hf#>8p(mb%Y)0Akp@QO-Z^7TyC;;qOoMHrm^<+d1`3kRX`f+r|^s}q$ +zS$^cp*#>AFL!%@sZ37U<-zVLSB6%xw_~nLxI_RFTE(OUhLXxb@Qx17dh!dRN#&k=F +zL3N+-gMps!q<8>LDuo=V4;Q9{EN-B%(v=+g$q_1ds%E(72S>9r%YxleLyX*D3PET# +zEQBN-q$OwfPhY)@-1sLfDF0LBMx0Wi{Sdh+|A^dpxAGTUcL~2mZq5HGa^L<-s@$~KQUeZZ4qP4C+hkNSo0HhPlWI9`Qx%ld52WOx=ZO(mVk} +z@!irx%7pA69UzRwOA0!p=sc4N2h!+>!fTguDdS-?{B(E14+h=m$L3JKF7@J8Aj|o- +zHtVxxx#V`r3o^_XK>XpiR@!dl2?wh_f37FS?~yMNWU2CYo;dWav0vFcfv}_TV7M_g +zsqH_-8lRi;)8vfd=!~pr2T|2A5$>xK)K6QD=~iFl&ElX9BC^0p_e54o?yd3vVY9P* +zJsnB0UZf-GSv(Cloxq3S9PtR(43UqetT8sU5mm}=B*;Y*EiIa;7U+%RQ3k)CI&-#R +z@9rq}eA8pI^`_r&in*GSHDQkGs2P7gwNl{4R~UIvF7Ebq5G|4|URJbBcC~^K!p0OD +zAX)PuHDMMDzxTLTdd=WlUdWg(=-ZbYC4t>1JCYvLq(giV!&7v43-GTi6-NqSo1dWK +zoO}+55G$#we07z;xrUk>Nu4|;+Ds!bjz|0t8hD-h7H47d25|+aNz=awc@@93@C(N| +zazlV8gtmnd9bsW)p{OC`6*n(sAgAZKBn0t~U40_s$=g$NN)cYAR)ilj +z2fKF)lB4TO$SZr5<>$DacQ_JHaGv;K8diMV2Umv$vKifWtF{yB#rxlPhS?6ZMEdc} +z<8Cc=fQcq%VBIY&*|AoK?D8RShO&n#WTHpp_4H_y!vI4^mdYQ +zmnV6u{9=LwR(IS1U$Vg^Ug@)eiu4-t@YZohUjPCr+C2Kn{^FPxfo<6#Op2NDY)qY%B9lD4to}RR2BCbd}X%Sk>=AkYxoNT!p +z8p((ct#TP5nFi+1tv$s2+^I-%+*SGni~&=GZ8e6UtHxuL39DdF_{cCD6is^pf$uH5 +zD5wyS$`(L`^=k<&IM38vTAF^%T3wAaZUK>BbjKR7haR2Dvc|KodyYsV +zQc*f0NCw7GK(WrYv-1TdU$^Rib*0xLg|_odv#2LgcsC|Z4rdF^2|r8T%|d;U+@M=% +zkL9E_&TDvhIT6#}RwREOCZ4^M+-7#tOw>INlnWjpVA-aRe6_BG^^G%PnwuQ9%F`#? +zYd40XN_($yq#V3l-b}P +zSnRMGc>rKI?Zdp2+^LxFB)8`xlbswM=*>IHZTyGi79sLHG6U9ht!(*Cav#f1EU#_7 +zliaaw>3V(kkmQfPIofDn6iPkt|B&1y?<9AJt6-J}cr{mneoP+Mx)oNV_r=0H$?YzF +zndIe|fAVe5RQT|KH$9-o)R9*;{t!qOq&y18UkW`i+ffM+p^!W~P(J&PYMe-A{%Kg^ +zExPH0lMOnw4QHCHS*_TDlk-&oRajp$K6p>!PaE5KPVYLhY* +zdbsoZZibiG-?8yiQ-pZx$hY`9=^sDovPi&gvWP8*@NCEFm&+MlQ7Kz(plKHVP2CLs +zhI-;azUehyX#YW<)_94ob%_a;Fy(DpucBIw$K@zR?p(YzS=rKD)2k18JDc3tAPwkT +zkK5s=QM&KMQJO@6)8-USrq78KUPd4RGRni=gXvO-E8lYIG-Q@B@LT)fEwzol>lCFJ +z0)JMv_y*RLQ2hb)*o!1@y*t)|E^&rqHw6p35tV%o|MOCk&Y&4BHQRlo +zZ2;@)VWadks@!!{QQpH%m-H?S@D&nmF*TYwd}kCk^f^*BB>;az631qJnp-iyyXl)c +zU3Nv+($KIBTu2GOn*rrFvO91Az=JOWjkqZyu9(u!%)*ccT7!6+`a(Yk5VIY46b4xq +z3ZX4`w_l!;Gy9>+sKCSQDMe{Kwe$9nr$-Qj2TFJsxv2@O-bL;vpSOqG5Z!36vHZDkx($fzZaIpr{1GFcyLtm3LE)%~Ac@25 +zBXc{?b|oet3ePkByomU1f`5tJpgoq+wVF!|_2<$V?hb!M?w?(=^$mb6zeVm1pz$df +zof#WV^@QWxm?N=x7%Mk8b8~vBAt~e6aMgINI(~aw7_0l^71cT%l9=&yQ)6(zD@es* +zkZl5?vMrM*#{cN+|QzSuGVxL+V2d>WjzFhR&nH)S**h(IW!9i1rFEo~vab +zDv;J?8Q7?A)?=K30~{MF(NBC#0=vFj$l!-O#Su0Vg88#R7TzsN@y$xo6aIS{ +z?LtUj^|pl)6SRE=jKOxLL(ojCGKKG!Ni(!ElO+`iq#Zs;?x8KNI@s8lSt5B4PsFVT +zy?_VB3h;6Qx_TL}i8rS^tWn3LTjj}wZ#-Ugw(Qz33Kppzze(<=hGH}1^JbFYBzM5C +z#t)KPwYjgBtt#M{&d(BC1s;rTIQrajx?j~0f>O_LB8>p3sY2!JKy%KgS#+Nih1|h( +zeFzvcnCR>ipbY*!d1G&g_&~poJcw27VcF<oL! +z>M-g_6^~%rpBCgQt~V9b56D-ksiz3j0iMq0!t`QzzSiE%lEQuS#>BAAgg=`|{hXO; +z;O{H2ip?RFHO&!7AvorQ<&Xec&$#NF9!-uarxKN)RBCgyWKW6iKIa<255nly098sZ +zw}H>u1%MK+?bw`B7!8j +ziUZi)8Ndqo3bQsRStYHOcM7Y;4FKH=f^*x>|N2}V}X0`)Yb`PF7i!e`vh>BoRwZJ6gX5TSq- +zOHn;iUHJL}V=**(;GGG1Z(yi0f`(u~!Bgx}b3~SF=YqLrjx7H=^o{H5_x?1IxzEF? +zUP~n}5eCdVL?vzqrZFR%LIdcW!a_`-idhLxGGlIzDWTy5=GkR38TA>6-VDEVnT3p{ +zBjZxJwd!aftA#Fvnh=Rc@@p&YF;L^?X~_Flar@hJthO)kIa| +z_xMH`H;I;F@1TNQv~u^H9f@?*e+vqf@}b +ziV0b(Tov>{U(5ncvigtGvx8W|&;CEU?t#4zZowXQY&Ev+G`5|_wv)zoW81cE+h$`l +zNt66y+j-MIXJ*cscm7{uU)SDiuX~lpJce}j_C+ASdvEr;L?;oiW&@cN>E@lTQ(>^{ +zdbI})#WShDHE3gWr8o;8AR`WB7#oX0QVxzpH;ry8Ga%Lq*r;*sq$zl|iFh)A^>OEjI>^r<&d_y4cG03 +zQOkU2Vq@h8#YXS}SFvu{M423%#IFDW%Vf0iR$U*gLIU3wHTN#S)77^&ryz~vWKa_@ +z;{$V{TBDmaD@>0ku+U(RUSqLY^2*~0j5teKM!%ak6uUXa-&=yK>g1=$4uLKPX6)IJ +zifd^P8%;J5$>K(aRarpUbqI%`d>x!wNDPpa8KoT~mQ*Ks&pq_3E!pJ28*feMwz~>% +zzTidc2Nh*f0u}ePcj=BFs-ROu7$mWL8;ft0PvS*GGgQRQ%)<64)Mm9a3~JT1+_gC> +zVr!#EQoNfst1G$VxgSZ)97S-7r*8;W0K*{&_)QKWk_M71PnQ?F`$0N(ND*cmjQ0}_ +zygwKR(RU9U%5*tz-;Eh6)Nr4@vv)sRQ=bzWjhE-)P+8C+eQ!420q4_BG2F^SHRF@fotq5fU7do1|9^Zewjw>8>rD3ax? +zDtVv?l)yI&W4#ue!vkMPTW;}pHZF1?SZVspeEq6Sg*NNaTJks~t^n)ySx}3B*QFbg +zW;T@~?gJGy|H+u9!V)bL8YUeY!|if*bF3Z?N?qw+#rX8=Q(9m(g6Oa_;$x1XN;$X!V9gylJgCsi5Je +zkVTZ50ks@RVMw~SONq{5;^dbJ^khq(dxiIpJ@f%Q8OM;c;{@?Bkge6a +z^JM;EHUe4*;Y)star0Dk3iTfnOT8@1xa4(#j-y@vKjQG7GkPUHQz1R98xjKIYRKP~ +z2p*j1-_LnPO0z6>F~G{?ccHTKDhGKrGCirG_4XHU5plUv&F&{r?4V-HE}%WZ?1OKj +z3pZdb5HnAdP+%@FKHQ&y=t>6ci*fS>$f&-nJtuY*ttb>dHje|_V2hA^Nz!65E46#W +zxW+r?kPKB8f@Y1a23c_?(hzX5N^~-S3V*%DHa-dL`l*Q{y(7Y+vUZ>ZI}G`q>VpdQ +zKt{9%yc|WDIBvB2eD13oYT+bnj5v924HIt=eN09soC-Qd0{9Emz{lCk%)4=vbYheT +z;b}rDUrm|e8mz!e>+{OkWoimia7($fU>YFZXbc$|=G*-g +z(gD1;X;F5v3AlRX0y?7?C@)mD@>i`;LcC^T=kzmusRW~>EXv176&vs~^g}$8^dZzl +z4Z`vd&neJkN?F4+AdT4nnKU+7!^VQcfDjwiOTY=-M42^-J +z36I$xB(gx(XgvN=(`VW;wJD6Te9eR}CTE}#9se^8KK_(c9MTeo-G62(W9p=4=`)2z +zE(hS;Ro!)^iY`t2PfYuvwiKpR4~&ad35CEGZ(8xCpO_66lGLLyEr{(~K|6QyC;?N7 +z>@M{O(I8*0wA(NgqgR(yBhU-dGK|hcDk?KF&tQ{WkRnR5Yl;pzFs&d~#8WA|)Ul~_RQzbu143oW?Z{SLV4nqf9G^WAUW7>k-d*8Sl$ +z<`hZx{gF8G`xq}jF2NOlfwN-q3EkW4(9rK~Z!O~P(9Bt7rr1@ +z)QX5@7C$r>%PM-4Bs+Osw8ZQ_wf(xn=MhKGz*RHuSf=FTW}Mw`3)di)bmzKkmdULK +zrvr9SM|TEZdG(TAIk~8d=e|x0@IFcgC362F<*;9L#tf9bAR8EkSY2S^0IRnY92iFU +zBeywLr9s#89PU)MX!}+C@rBDTD;gHETjiO3M)nGPkOBxXCw2 +zOyDR^H?4KxH`<8sxyS;>?IRNV1Hz3*H=W4I2L88$C-)e2QUDaxr*jEDOnlmU?SbFs~ +ztbeDu$81dd(-sCM5LnY*kzCqIngs0dt};ElP$Wd|2^?MW0S&I+@YH2qB>B_2spCuW +z4)4ax+EkU18LP}HBWD1;q +zm#+bZD2J32^M~+3RCg6*hg}78<(6AC~X#EH1b1p3J#!3rQl``;E}pF*2`2mJ{Y7V$^1Lw(4fd><|V +zf>DQ=V7m*)Y8o1$QKw=Z0doRCEG^o!LeZXuZ(r86FB_}-=oqt-Y1-<93HP(A3CP)P +z*1Sf|B4*!ZVi}eVzU&`#1dhqI0C0JDpgWT`V`&iwHZnhNs9hJZ* +z&=oRHiOcwz_|S$H+R)q&P*`z)d_iVkQP^k=e&lkn&62o|H_1vHkJ}1C8S4Qys-A8` +zV1h9)0Nl{$%yqh2mrYW&Zugzfk7dZZ4ekcLlhln40d(bZT1b%$E*tZ++D?uI| +zJB^E41Z5~)x^5vuQt7%iMR~(&m?aJcmw*frSEHH^br&S!a8cJ0D&-XkMK>CF36N=z +znMXIq(L+#zQ?ade)w@zeQ&?0oZOvItGF-3j;cy&nSb2-;=oWd$F!G|!;BvarC4J0@ +zZNs?6@+aa#O0|Gr1F-s09EbxC&dTh%3imV;$krJWKWQ0#ZZ*X){W(={MjmLim22T!_A2~wTDtaYGL7K|=RNV9;InC1txT>n^6vGYeH_>H#9 +zT`^$zo0QCcb@vBWHcuGLE#(yqyy*pDf7KM77qv-N@&=P~Q~sj|i#fc$e=@vc{cOWa +z;AmfBi4&weN;Hh*Z~comMCgdi+)~fA^9v>#)r*vsak1}vJ&}H}zEtXkIa^Vc>huW0 +zvbv4yEwI_KbirUv)f9*>nMFd!kQG%w +z?w(;~n-wl=%KS-RQk^oRwn7n}>(Ffr_XWVsWA$x3n;1QN5 +z#>J-En4ZB4fVpI%W0N#O6&qqwwXt1T4-^#+oBX|t!i+yU28JjL9s971kE{gT7Q4?k +zz#(;X28c0#Wr%=SPw}RQ-6@wn)%0m30YXp*N)e0~{sH4|0!pXi+qERkE#bU?n0ZT#qS#6P)rI>NDZCT` +z--JN0BJI|8XPU|MYnv=&uoWp0gy!i_4mD`{n6XQyJ+QUKDhCC`+s+wFek&K_6&7F~ +z049i3jdzl?NA9j}sDm#TgnxavEzuyz-MLqqbWLN@CcUc2VOSHhcU;qW5_PR&J_0%n +z5ZRaOGVZdtSJn!G!VVHmA&y8Mv7KYX`Nk^}#E2VW{Ge~fyP_>xnm^D~e=aoIw2<1z +z(xp@MKHD%>CZBD4fzk#Uh*?6az_p!xb6`2qUcbGg +zcF&)evol2b6*y@ZK&p#Q5%Xx+jCE$2p(2)1K#2{kdyN2CcinB@HHVI&1VWLP!N5pu +z4^Ezx%v;sndaiFrh6L`N!%Q1BP^Q{Fg_3KoW=y~whOs!-2wC9+`W{|c`B=B{02|+! +zKkR;`2gDbE;*>wi9?NXlI%Ut~Fw+b@D-(zm#=$IINriD)XQDtd29YB1xFyL4b024V +zGtogd)&8TBdg|f;d2jjUtD4q3iq#h|nwrsY>H=K(C5Yn{qP~uNP%hN~la29+bTaM0T){%%G2Hev +z^VW`(-UVw^q)pKtP`($J%h8N5Waxz1z>&B3bZ8HDX|(QAvvO7p2AVsl?l21H6yBFD +z5RGF@4atoeG^bdqc9{Ph7|rm0;W-N`GEgYTDWrayX#u>p6cRGnCb(tsfq<$^Oq8gu +z-`#03mLGj|%jE>Hi9d7H+N}GujXZfdqjh^Zd;p$Pb__G9K0KjRgNRon5sPYzud?Z3 +z)D~VKK=$!NW*8;kwOAZyoWZdn92w}ZUEf9N6Ti(O+^!?|1ryq-^>09Hc>O@jU#RIJ +zLG-UQxy*|c=@Yt1p_0SakA~Vj`fV}GC7g&Q1;4_NZ(>x`jehU(+0f@lhm&F^$DLF| +z!gd5<+A~hf0W-=!O?p>*L#-2M1FulD6Llh+IPSal@Qw5(e?A3vh^Ft`L6M28%Zja{z}PrA0=B +z&TEN%S9Gz4yA0s{NN4k(WbQmq4>M;6E#BhmPgEP2eBS-K+GBI}tDP~ct6Q4jV~L;h +z{F>bRCgtO-#HbIyFE)~$h3<_bA^Ha|y3bS22NSo0n$m+C=1bv5Ox}V`lg<{~YSr}8 +zQvAb5JL`S<&~+V&-nJ1Fvy;~Q(#*4K*am|0jgs2QQqhe+E@rh)oYQ^@UzW#PUd_Il +z`R)|oQ8U-?0K|rFy^z;6f~~WdqmXDE8Rwgc7YBKZ4aTtsb)FLN#i|*g_BBibf+$zl +z&xiRiz57)yw-%KK%u@wh7wdpN_!4n91L|x&ACVJMe82(>{(j7<${zmNCd3G0U(+67 +zjy<1&i465Mp>AS4pl;U@X)+76a-`W@;Rzib!|3!WKIMdK>|zjSiEqTG19J~h2eDp{ +zbh9Tfe|CB$_q2Vdy}B+wJa&t56TzT&ClQlj`_hUvKeO=Y_+`QopwS|(?dq*6%h50R +z%9kR9u`r!3xJxNecl!?Qy>@O$Y}I?;TZ!SfQeoSnw_|kY_-=E(n;WZRo{?Y;`wJ>) +zqGv;SJ<$`N;9;I&y)=DCTxe9O`#TSQUh)>&!=?IhWK)v5(8u*P`6>fHDxW&T(9H#3 +zvX|qv0K};2TJl;yW7bdJ)Gq`r3|?!yedQeJg{_#G^FDwUwiy2ROP^PYoJc*hwS|(m +z0L+1#^0f-sM+BEjf^6L1M0v31>IOqJ!W29+Ubv6H(#X#mU^=*~p}D+7B?^^y_~=(; +z^jvg&bkTd#tv1?Etf+ +z^_WrQ7EaOM&SGL;Dsg3ZzI*DRfMKDX%NwMFjuk_DCX4}hGB9n}WdXDp;1+d(mL=RI +z-@VG@a64W*It|Z=Xj4dBSJ=;K=80eoEa4^i%ALlH&x0rCsFCT7yf5_HTkghcxwf3sm~BJ*L+ +zGkGO*^xJ+Lx_HAooLdXY`vsQi1%$MRR@O@njO-?>a7l5w{>)7#KAu9612Rp+gcqP1 +z37D`N9bA%h&%Z(31XmfCM^;^^fPq)0Gx_2#)N|_Ei(d-&>kcpQ#JIADUF^X=xZuf; +zmqXq10rV{X`k=P!eM6g{i7PkVIv&2HXrwgVL+cg%=WJV98M+O9g%`zx%d@UlJu~0g +zrPX2GBRspvHUU`Im$l&bZ81Zb_f&j@N`YUcIY^w#**#WO@U3v>2+K>b%@5|hm1lij +zKcW|dOu*tH1F%;=bRQ)$_uwmCZc4TJcdmJlf}@^xgyn1E +z!)s*lNAEnov!U!GXHIYNuq`+FbU7A5p83M?P%+#YpVKA2ygrR3v2G2bdh_}5gdu&} +z+zZn$9;{L|`Q)&w-Hm14m?g}D(E*E7r6oXXs=iVIRLSRr99J;=jFlSCs+m9seBq_{ +zdM8_1Q|Dn9P5uOthMQ47W +zB$By?7`29?Y9Y<{-FGP6wJ*y7T +z?y>xqw|)D4&N1;y$u-G({x!}B4&;{uk#ld#-gAV(tbS(S^uBp%n*edXb`tQ(^%DSe +z6s(hdf?w`A1SAgt4F@94EVbF48x*?l*CQAQs(Mwy;>fUxqIe3hvva_eUbH9J$+zB`mY|?Am4@aupJ(zBg3W$6) +zCUarlZ+mC{z(LcVM!-X85`IabIU4G`TQJK*b(0U}khI67b%`Os)P +z2d-^Z-Oy~C=0ZZ4smYx+qtI8-6wsrc=YWigh-s+~cVMSz0U;c;Obn&$C7XlL!{O{4 +z^dkdKLdobkC+5hzM~;w*ltddE0KOwWoQ73wD!j=qdQqVoJq#RSyBIAMLbxhd>z&ft +zc5PW6jbG9XMqo)H9b~tI5bLj!=%H@`*X^zzNhX|(%A9B^gim){o|)+Z+gm%UzPht! +zt3cu01bt+ZgFn^JsOZwjC^rY_m$LpzqS +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 +z2-MbQaa)kJ$Lnci3T@Oaqpeq=a@w}xY2p@ +zadwxOutcoc>m%n7uXsJb&s&jI4))61bA;hAdK+B$dQ$^02pf`XFpIQspZj-c*zhyi|$U;SdFELS>I1qb^m{s33h1CLPNm_MC9j6OlLWXV-JsddTUR{BT{pyk +zc*B<^rp0yY4h_}#H+3@jY$SJs#7dmw7B5-U8;ClKixd*(f%p?W=9-Anch>1_1n{%dc`8@L^9MOwu|mS!=uaQDpR~ZF9(K(`h&#{%%|P +z)V7NtE77`mz3@*C#Z#u!U2;`NCr40;69AvuHsw91!5?j#k-#jo- +zdszH%aj5j&s>D{G%md5rA8q@avJJ7gc)8$Q0W)JVwe9umr?w62=0XSKhw3t#F~pRG +z^u79U&LQiMwhiO@N87HQiwpSFw#z=XZIPVvKiW1dhOtbXuPfJ>8IT@jYk5{1Qsha3 +zXMY_jE|x&~r?%}VW_oW1p?snkdwCGuWAye%+s@;k?V!@$0#yg(Rt+$D3L75EOaP(F +z!rTAVw%hu-Kmu0zBj&v77eRYJwe6IlQK)TWzfW!3jSOZ{A7d)mf5(?X8OuaP;8WX1 +z$*9=9{YTp_`_#4_{%G4HnUo=dQ=i&)9*>qXp`sOI;?LP?U<5a!274Rt*ZA&+a|0jR?f3K`qZ}lgywX$I4Pl~y}f%^ +zNze5;>zzKe?J|hMFJFd!{MEMY5I(hSHqq}@zcv0#+urGznEKSV!F3MYKDBL^zuNXv +z*k5gX;7qV>E!2tJ=TqDE$JHs51;N}1!M6GNkbtEe +z+W=1-{Xg2a;itC!I0rO@k@uLEHS-LcuKY*a<`H5^`$yZ(w%PfkZKJPP1L3YYWk#%j +zYTJD~f3!wyM4tADiZX+{XRT}jHn+V(u>4@f4+0u|x$e`(v}pW1e0UZIgn +z>_cf-MlkTGC}5Sijd|F~tv!Koj%3BhoOd^j81D7i(u%Q8_F`-SM6kgQr%uvAHFS8{ +zzp7Mjk8pGUR#Ts?jSSi&acHdjcPrL`2dR`)3`jp+B1FTAFOa-f50(0rE-k58T+VDI6n(;m|- +z08ZH%fnveo`#hZ_m#GFhn7k(gkpP#h%o6N}W=a8*6)`7GEiw;^GGtfm^k!u)7?_A5 +zLvq%D!H)L+u5UHVZbyjmVmHIi$aS8mg%($2rO|kND;THs2ul8tT1Re2S**RPXxU6} +zWC}!#d8uegL#2CX63$mRJTN`gllkXnMb->z#QTC@gwI&O|61;U8cQ}Mpx230S6Y^Icy9JuhB>5ttB_ww@VU9tzFI01Z8$FQ+ZH=L>Xn`A +zToeV(#1n~Dp&4cXvKrQ4(4KjD+_~zv8dM&aU@e`m06l2_@s!e~~uOU8x%iPTw#u{qICkDJT?VT1zh+~SDy3>jRJFV=k%!A8;~dKm(EOw +zUrm_7MAZwKc4k|mr7h{ro*Gq28KNQ#REGX#^qf|`D-eRwO4Z*&lvi6s8U5H;eD1QV +z=bcaqb0^RWp$J_X6F7xu!_5na(^_Kb2rgoA6)fLt_@S#~*MaCxk{>og9%-Ze%Yv&- +zAP`S!y~#i2n1p<4!Xrh#6`78ujs65_wJw*{bu%8Io*)p408w77y=5F>o56B{^9{3( +zk?_L8@?@XD{R^d01SBiQEt75DlA!L|jF2=YmJ!4@Mn62E;mDHB)GQHYuP##*Y$u$q +z+|77WFF%ewj&LG#vw-Q0LtuLLJn!&ZtHjh<+>}T!k)#*K$tTg>oDMCwuA8P>1SYn=?XWw9V+xXCxG*ios3I +zjXJ#J;^HashQ(fL(1rCKHu5r_;uI|w7LbZPd(0z5{GHH%C&9^D%#kM$AA*veDn8-qIx=wWx=CD_j*a+n=0xZ?B~#8xtH;fM`WFvo3k%K7w% +zAHOV>bl3_=Jnx +z1%Dahlx2ai8Mfc-RBN1ZX9Ji5E7$atVW3|rVPSOZhF_;1x!l-B4YyeeJ6^k%IAupm@y684O|u#D2qNx*_t)z^a^#Hew|yD_pDB|z=Q+41I9O6;DPlpA!?r;HTdi$9 +z3N83~$QS*TZ4=3p>G}opQC=u3|2=oygfjZCKV956a7SnHFt1wMXyuKwxDRIJ%0(^p(bKB+V2Fel@ccj%JqDU3Gp7pkSwbI?GJWG1S~?|0yqQaJ-las +zGLkHQ;?aphk88}7Tjo=fLi*IUqyJ6YCeE|(`P8=SreP8wi(x*sZ42FhY1@uOf3)p_ +zZZW8`KiYQdKiam;)<4>|%%`>uCHOree(&G4ZHaxtaP6jGxW@m`wr}k`3DrpSB|f$7 +zSqv_U*O|Boahv5o+IIDSYTM)gPi-56{2y&Q$ogyaA8mW1oo!I=KeTP*|J1f2`{&I6 +z(YC>khsT>DfCN9aZDpB%Y1_Lp|6AKmX8d<;`|*FYZD9p@od4FggD2Qs%09JipZ~3G +zho@h6{?)cg{pS6FmLH(V(PxI~zxV!^wypg1|JSx3|7zRD&C)D?wQUx|Kic-jzqIY) +z5*!bof77=2{%YI$B6dN2a{x%2Lz91L+lzm+ZPib0Te{DF`j56fUb_VCEgzyG6cE4NuRYX8x;-ToiicJv=@n{xDzw(a5c +zpW5~okT*fX@ju!&?7wT`8hkQhif3$6To;m4HZCm>vZCjAQ_-ElJSrO(RZF{z3H8rZ= +z)044SPVLFt^8ePhDL=JsjGv#{c4F$MwjGl{zVTPvuK%lTLu7qw+i(?usDHHW +zTV)`&|IxPf`@&`m{zu!!{y(&BA^Y>c+IH#Pe`?!_=bzd(5zZfNo9mCZEd#wUht={| +z+pgUBqiwJL(Y7rd%fWU&we5kMY6zEq)3zTiC}{p$+eUQw4{dwnkG5S(_o;2GfBBcT +z9S9u;`(N7j=!S +z%c<6pDG>9|?xagq{OY1V%mY_%&*`faZ-~YilWqjc_g=!mwOf8f(F~DPGcsl@U*)^$ +zYzvl8Xr8=<+UD=|l`UE77S-JnVfW~4047ve&1 +zuYjS_dXP<^roTTtlq!~7vu^vRXZrxToK&v2FSMg>)rOqGZSI7-%K|4{<~i3-kUrZe +z)D~alS=Liwgq`i!bRtu@sG;|Lzb(Mz(=6H4&(@k3yYK-aN1ME#&zwd9<28XO3?whW +z%B#qBvUQZq*?H9(o1_TrS*6PqaD_z~)PtN^i&=u*V94bH$=ioTbOeJmsX)Jr<$HwS +zrJ~zls#dTV5xJkD~2cMq3f`L +z1mE&h%L2o)hF>(nnEcUeBeLPvP5|uFBEq6bd@CAEUob`rw6}9#cf=!w9%(k +zEpy!kU~2VDUygNTcU@2<>*SN@!<|hFj1fUn%N*1~gww&9`^I0pgYhPj`r2kxfpf@f+cLVsq~nZ%bhtu)r(ed?%4!}mlSQKm)HPfa5@lkDQ2Lo!uZvyWy^ALk +z!$2a)0p|ya>VLy7;pL)>F~3GIE@Z<_>JfqZ()@-$Oi`?~_wBe@vGt4dRBXcc5ZwGO +z_(e5!P_4riV-$FurM$0r5@5vNN5oqAGyzzPUe@VR5v6Y|K{1L&BpHX+$aY*0rABGq-Q<8{KilF(~9&gC|R5HuIkfJX_u8#$!goX?2hT^2F5 +zo6|i*o#pJ~jlTe?qvM*q!Yhf}e1A3BsiF@~O4mN$e;_Vy;rT$tVVY&726hP3u+*v2 +zbHb}wEz{h%DvH)}M~#swy)djOK=xD0hx%PyIRVAGHb~u5YS@m$2wJs}uFDXUVP$G( +zm#KuSw2=wYa*su=X-CBjS87)G0`~_=epf; +z+SctgOPV$ddOWzD1)4rnx5rMnSjdvASJwPWj*uUUc%(TiB7H0Rk%BKQTX_sBLPb|oyVtR)DrZMp59a@q7V_?km +zbtI~^>tnU#_YZb^EY`(~XS$ho=GcMg)HP>H<<$c})=-0%>?J4dPFf^{8ZW|Lt%VTE +z`-SWT-N<}%QvF)Nse=O7#u1H)nuRpsA-HWD9S#vpXzpL!CU11;iqmw4i@NSA6WysG +z1<=`ZtND^;rT-mtJ +z^ej)bVIk>E(!^B~O+( +z<@|1KF9H~*1_|VBFYO}ewJhwf*vLI)bnTpnPeiVAA-brVHb8YR36#IuSsKtI8%c5>CHV}L%Y!Xee&4!sKOFvQbVgCy!q-I +z=Be)U`t;^`C17?L&qAfHtRjBt4=#fB>Yj4YbC6r|0VGQX3u|2AULR;cQ1FHAAf2K! +z`>~ZXyL_1@9is2I>rBRdc$~$m&{;wuljfekN3!3^?38QCFn)iN>sD`V;ema>?lFck +z#iCFy%*>RD_ORahFYY1?cMi+B;X#*J&@8^!#-eBdDo!itoQGvVR0Ge!{^`gR^xZ;7 +zK8r4gb!vEgQtsQ7NO>}n%Y#DiOykMJ&GLwzONNf-%&QvY$M+p`9)}p;BP1GnnI=8! +z=Z{nBR!Bh!E)H|+Q0Gp%Q!v~t +z*5FGbg|HK2(wX1u;%Tm5$`#AHzu7@LtK>^?Itgbs<_U+w!3X2BpWIdu(#oI|PHE%Lw~x +z4O!+dS(0q7uR6$fhEXdz4jNc|uC9wpn7ogcu;tkn7J!;g{L^%JI31Q8+=&IQwO%NQU>__m+^>uY$)s)7R~yjgAP%rwoUj;>86VarAU^c|*e% +zB#fdMkhcz*JP*pP5<6*hCw2&QvdDvu`-8I|v5w7df~VUXM=JjexmXjQ6t$rtDNmp9 +zAV)r^@r=d^j;J_gvhV&jE=cGkK}p447owxOr?7fZ<)x%p=rnnNYO)39C9itI{dwj^ +zg{z%5r?-!Hh^Yn!z^U>Ti34 +zx%d~fhvZb0Y$TY$fLBqu%)k^F(&jXEsq7kO`I05))WIrTMhjtvnn62hNizsj7NfYi +zcS=y%YAN0I=S9W|EyoCR{o(fovV*44cl}F6l;o;mQgXwb@?gqiuKFoofk5%r}UA +z@;Tn^wGIdLZ$Lx!L|*t|bK0T4nXnhs;a$)4U} +z&YHHpAYmn~$&o7Js3@d5_lBP6AB_bSV5khqq_L9OXK^qlwqJm@XYGLkKp`OSn9b6O +zH#Pf$wLcdg&!G8-{aTO7DyIpbmcGkT%jH&&yl +z_Vw}{=dr<{x7{~9V2LD3_q|+xnt{Gr&=n}cjS(lN=8 +zC5GgiN%CYQG<;#w=qscKOG8|p`sRYK7}VV*U)7titg@r@OD8EU5l3ER5-F;jY5D?b +zD1R7;1{u(X_ReQ`b@QqVjvEpRnJ>W_VsrHo0^vxaBKC?#S(~2YZ8WeMISZ^TAEG;)CP!)d4IPL!%Z$1 +zuEY);CRt|W9RRCBuk0A>E=o=aCYQCl3k!k$viq9Sq-OLyD#4^VYeXMq6M)MP3OnvLO-k3Kq>S~?oaL)Qy0c$0xO$TDJ4$*#60vXgBos26y}r2r)O +zn>THY>?Un_icynL0<>j0{Pm2o +zO`N`%bfF}%x@}M9{)6@ni|s}w|R +z_*?J{MRC@T?B1hzoPwiGR9iR~Z22V0gPiRr!!wm@DyAf{Dz{|@=CpIAnvk%-y+)6% +zch2Dr2UFQ)95~R8j3pcg6Kw$o)YH~1uxq?%tS{L;C?Hi@P@n^}#8NuTqQ-^zk1AD? +zvUn&A9~3)^-|C346WdI0?vxLLVbMv73%jCxR_plrX^n$4B5Gr$VQ^epZU8>t)UAjQ +z?F}gR^M0FaX(h*~b9}oge*=V%1HuC8x +zLzmu|L=@gqXBm8V(&Sg#sjzEGZ#yby2GO +zP=(TFm~b&MQx&oBjK{v$J1^a|*A>1858%2Oy`hMg9+D`KNfZ)qM;*+gpd(LchPyh@ +zNU?x#Q%G(VRf5$EKe+ezCpwBXdgRVNS7E9Ux0-a-1g=GYeEQJY6^&PD>00qgW8S=~ +zt!vQ;(591#Rl! +zEGE^1jD#e%a@bW9=b>&l*o>uxy#XK!Qs%X&58wsl=K% +z@z)-k`KIS>Or*!sGO3W{0K59r(WK~=-m*w4W;ci=iNZ_&jDi&X8B-}MnHNdj`%b8I6uAIx#s4Q-pQ3ey(q+IrsC`3);#cwK^ +ziD+wgDp$Cf@0=W{U|$?!-|g36e@Zt@Kwrq#S`vZ8C@f2HQ-mPn_bUij6JkzXpuZH8 +z@3bT`S_#_zaOHrn2^c0u+iyh&kaN~M6-0qjHfP_RWJ)=eI%i3AFSdbHvxJzi3LfI! +zVvfPpOwnO33fw7xd;<3~O%OPLjJ{@rt3mD*HYInF?U0AHBbtL#=8Pn=2RbZI#HlQXr&o +zdz#dWNj~BUc9`iR`1g{)s0YMVP~WhYcVzLsT^BA0UMcwXBnHsf%P=jVJY=$q3VU3) +z;I|dU_A-2i%b`v)KlKF9%tb~k_s~>Iq8rnOnH4u2jr0f)iZ8!1f+e;iV#?C6KCU!7 +z=IyL9j(0)*w;cQ1d3T}JyB8pjT0*}+6f3t4oEnFB`~tHvgK#t645fCXKDaB +zap@!^6K5wJuY-Fy%!c^0JRych(5~+n(*RLPn=b8;NwcQ^tigt +zc~Yfse}X%By!>@NdAHZfg8}GE7>pkeL2!tzNEJX18KQ^W^(NL8qS#1NF9$#nYr5ND +z5JzPVSF0(;Cs|T#2!SkW1Qh^BGy~@91cp_==W>dWW+o!PE5gkKW(%4&9~PpQNmqWn +zBj38KzPW^)(nVW}xmTa_T))OF67}m2EMb^yRVoKLTEF}RsR9HoEiVpr88|bdz7W}} +zn@E=3D@7dRew2nq5)`V)n@NR|DhZB|LoUI6=G<@|azzR6s{cEgQ))=D&o`CmRap#D +z9hT>!8T>U?hwy_9j&5O6f+3JbF7|hfFuwI3(AZ*EG*0N8B1UeBSqvM +zJ~XG`CIt+gw4PrK2wA}wg)Ko^N}#E8k6rWm%)6+>H4XSZhK5w>6$ +zKG+X4aUPhSd}_uay&UqD5Jf{&f>IR4fuAsR`htp*v^g}aVWlE|Ca2@W^meK&g_#wm +zuV*aGr-(mmo7kPZ%Gi>HL{|@PgscUor0FW_hrZY`sDwT}ZL3j|5j|Ji+IaM1d5W$3 +zy)eG^$MFcSUd9L@wDuy|lR$%A0D*BXOBHh0HrC{4K%B%gc-jMAgRn(bi1ZgNiTmk@2Er{T?gt-S&CXPOjKc%qa)?%;2tesc0bVGD^Uht$Z*7;DV@iZ +zL!+%Y0-&(&Q1kN^UBg4@B55|t3(SYM-^nOy=^7y<1vzNZHKc0CD18A@|QAz=6F^vZOF(z>E(V3d+wOn +z+O#NiX86=Dx`|Ra*Mclg(1#1R3jXGy7HMxZmut9Iw55G`8BtYQJD_q5&5Q-KfbGa76E +z;tlukQ)aMaGm&e$g4aGb91uz^8Vw0jT%ghmss9%Ez9!t_bus3ZPNQS$voKtvKYjR2 +z%r!bU63G`^A&bKc2H)1P)qku((qmeA*aH@AOINSe{#j3XNVcqgLm!#Vf}ds)R)CdK +z&x;c*!MAL54&7+?l{SxqM;Yu{Q9;D1cp12sMj5ZMLf^`>?So%AO1DPzMgibf8Ybqm +zHqTD;XySqIwQ54*;kdbUeQ8Bcyq}9b=QJJ4U4_66IcOkF-ymKp5ZC8L%N1P6L3rR< +zC^e>aA160%3PWfjnC6f(mLxqT59v)W17k)22jDuF>Iu5c@S(@+=oFTa%7@bxg!8wq +z#{=ece%GMQ!y3BlpFg3~+Al0g7ZdKZnaIjjg#!77$>YcLdVL!%=Gf +z?$V}~0&G3q>5@i?WjEO4l-Z!C0OU5KD>@29xDm1N!eT$M9f(eMaiZ0?YOMujeB%^7 +z?>^r2j+DNc3$IJDtNIN6=SiFymE<13EJP$45aC6dr-UH2&oV-Y_(UeBN~@7zBU^j%T3UfE-OWej}fBG0ufkgo<$7Wx-nS +zQNEGHj2K;KSGQ- +z4?R(;b-yMMoSo1CAv5zj?1BgI;hA10`8|^bg|)J;&Q*Es+*)aGI;FJNCWbYd%=H&2l{f5YU$&V +zff~BJ6Ry$>iX~8J_FV_Gu=MW2{=OLLmr7QBMfGyF!t+tO=jhRPvfSuu{q8Bv&O)=G +zU^@O3ajsqjwdL4rccP}skM0rTqybkPZSOA{D>ZI(Jx@*!+TrV6nEdb{SlR0!y*-wV +zc}x>9-&4CD`xH>V??dzJ@aW@%YNDASevPKM;g=zWzQqw-S{L!MtJs_BFis+n#)w3H +zG!ue*!mssI#98MD9UjxWt+QBSJ>;kjGIQ}sa$^+!Wu)s1y9GjLTkHn%?IAazCY#1~ +z>UI?0?Z(5zc|zg#78wZ>d3l{q|2blTKmx<1h%qjmswDFlSb}4JmCukF(UyWE|6o*o +z+f>z0b!fH}@V)R#obRzee=+EpzJxc=Ze8OGhzSKrlv)6!w~~iUEEAQl +zPiR7gUOq-n;Ei4AEm@OFUG%CdB>d63=2J-j+lyO-DV1oYr5u*! +zVB#Tw|F6BDHoy4!S)dhrIqKqwz~!<$pq>HU%IsUhI7dN$+)$W;r9rGu0KDeB}1Q1rKU=X=snKfYdh?$z~V@DL0=~#)aKwJ;EJdayf1Qd +z^#RRlpXr^9*qfymGn~nXACO>GV57INab(0#nn{+{7y%~as%M8s#>Pby!5rsmknagP +zt|736ICS`S9Vz`*FfqUwMeMGi`@A?a1Wz5Har>pG^2y1Z>RWhnKNy70^4OzkBKIU0 +zL^&-Ac#)M!>_B5@fXw=mf^6y)giNtXeM~)!i&9pBYA;XHB)s~G?=b*JmAsn$t#CT? +zKz@9KHf7B*Vy6QIZVAaMkuxFt<@PqNeie)@tgeKGB7emS4o5}|fmcxxwz3|dktk|u +zALbRfAY8!ryPu+RKQjx0!j&65FG@LaL&8%r*_OkR?h>iAEMx8P#Z*tElL`XMPD@KT +z_ +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 +zX`x3 +z@qT$fwZ2#evTc8Y-4d5p+FHTSbEA{mNr%sdqA&M%2S=mMW7^f_-fyl?*U$GS`mc3T +zpSU)hHkbF?^~31m%ggn{Npg4eV6yPKhZoaXf6zL&l{9=QT(#Z~PzBc9E1kX&4y>r=ZchxW96g_gk+Z1T%lD-wm*gbl97$ +z6b_7$f`YkK$c~%!lZ@2q;boWDH3mSJJ>7}? +z?tkf+a_TZ6;D5iTkw*J?dVVut)>QvV#UJRQ`;EzE9cG7I5(30H>;MG{+eG7CCo~6)H1`Tcc5a +zz3pGd=pItr6GLgCkOhYV^@)Rcn#-IMc~6^%n^{AkCcqZLCA4*{HC=v;4IXesi2gxR +zca^t7UD*XmX=V6A)tMLkm2?<}8Kt?L@0y4tm +zQr%pvfxkG>>qP+(=!;1Gld(>ww*tp8tarBNg+cvUtUdgCj;#6@2PKCGP=|QwiWqaC +z>8tSlW(!-UwTLwBhq(g8>(sH@F9|qJ;R5l{$Vgq~*LZygu%BsH=lBw)1PF^15|Gog +z{pUy@d#}F2R^uvE0G}$HASK?sKvlJ(`ZlV2kM#0FnfeF!m(6RL-r-i*GRXHG?*za( +zfD{9#uj@3^L64yPv1nyFD@;qSbAf#z3uCCsH=m8Pz>-A%)bXlYRIA6NniT%y*>Hzv*%}O^vzrEjp9jObrMf(mGQIg)g6znHb`x*)(^WkaogJQ +zgpcna<&v>}KZO-rOeJdlx;OHf9{b-a#V!qLn}S@u_@5hHy?ma33e1Jz8zb&-Rx +z0G-nn@GryH*2stuuop|!T#N=4j?ofST$%E+F`CXAYbg1%Xk_a~9&{;~V?`oMvKC1lb~c_#h4t6_)8DVV-y8y#2+_N)f|QEzjOCiE2e)ZIZn%wv&&`f; +z;dTlVUg%GkE1OPMNZRLrrD7;qmA2rohz2F=DwYOg|;00MY^U`?0bo@_;3=V{j$^kM*lWN5KwC6<=PBe7KOF% +zjv9X5FxGa5p`?rjx0`>Jb-{5!dNs=B4t3FFhMM~Qc)ZGz4u1O6%aU#!u9e{e47sH6VK#zra2G<_$>>&T*Xe;GPVeb@84+AGIBvc0jyW8L{k +z#q_4pbFJb$xeqy+m>l^c#};yYAb04utjgGfJwTDP&fP1$qA3v&xrUnpK*;HSXZaxR +zQQBn-M)>BE1rqa +zf+&8dt+h_{vKQY}CS?pV9g8+F$wPr^xb`xA$^g3QPy>_9XIxcggt +zv8NJ(i|{wz`f7;K1gF(ti1ee;s*}mlZDo0k9yk;dBD{NIfV^n1xsvm@inpX_6coqr +z+t=1`i`5)Ag-_g561oEcsg7b!b+U}ia3&UGTB1w2)=JG{B@K;G217(LuTRvRh9_!6 +zCYCt2j7zZH52J;6Ztv +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 +zEGqMXj&qHgCidR?q5x)$>uf +zJ4i_`?->ONI&vfR;<6tar}z9RpD5EjMV_WsgU{%ofQStB +zUV}W)y`2iLN8wF%ZANXgbB@t$mKe>5o*#QC`p(fg=xk3oXTkpzFkasJv4O^sbs%Z}Q$=mgvaM9S);CxRoFQ|)L?e0#TV%RP!06&6p(;fln +z%Nk@wvpD7Ye{0+I`~T9mOC>(FZEYM55l8gUKecUqp8wRgfgO19|IoH$GX7KBE|W&)^R^TuKW*eo1^6qZQJ!9+BRL`|D|m!Hh*f{6~DFZU2^=wf7iC%{?N7y +z$3C@f8R~y&+Yzzb|E+Dy{Y~433j4dZU9$eEZP)%o+cqivt!>Lx7XSnM{i$tx{V#31 +z_;1>_{=aM6LBjt-+eWVbL))JFQ`_eFr?#D-@ISO|qpIK9c8SfWw(SP`scnNi|DkOU +zBK@IlSNx%E!`!f5wCx|-_RW82+x*5t#(!wrM0Nkrwr!yP(6$rf +z(R1tnsckbDP0yM9scq-}scnlf{MNQ3M*gO4$NZbNt@^2LmjM1xZTk~!{D-zZ@SoZ? +zC;6wgedHun`Iojm{V#1>rscP`4dL{k+BWROziHdPzqM^rZbi#~)3(q4rfs8?|3lk0 +z=}YJI*jM~R+ou22wxMMgsC=}FVCww8{;6$a|4rL={?xX&|3lk${!`m#{y((s-cM~C +zU-|!`ZKwR!wqxFtQrm=PivFo>*M4f-ViW&|wjCz@scnN_vHSm1+aCL^ZD0S^wuxvy +zwe7s?|DkOY4gN#hE<;UC_=mP_{10ur>9@8`q5YrQHo|Xh+wTu;n>c&Goq)=b2Whmd +zTPM*1&bZ)DZTsj?Z9C#`+ICL(D(}i~ZJXy$ZF`sFAKEsB(?7KB%71Fxh(1N^e`(u0 +z|D|n@{iSU~;QXO&%WM9jZ7YC&YTKCqrEQ<6eQMjO=Krp3*E##3FxK~fYTKd{|I)Tw +zg(C9*(zbd2scj>M{noaRvp%(LHH%GA+F_GLz?pw(+mt2$(zYQY|J1fy2~J%8(zcoY +zFKt^|&vqMh=jJbMTgL2f+BSC1AKEtJ;D2k|2QYtX+wmFyTic%gr?!3im$pq*_jhfZ +zdGhbtcEKky{4Z_$hsifV)4#Os(U)nY@aObeVU)uJs-`aKv?Eg<~ +zJL+%R_Lrppm$qH?hqgWRFKwH%;@`CG(U4DV+o1TrwCzR0Keg>v$lu!bo|6kg+ +z#eZwtwhF(s?ZuBh?-%Zm<}42959N(_?vKHbvYxvSn%r0K1M82)kC$%j-Z{y2Kd-vC +z>J+W_^2q1#OA<;bV$SvHbda=fJft}*?)qRl(2v%m9;Jz_ACbU7(Kfs6$*c-C-d-P| +zH4j*Q(2Dcto@pO2L*fcVET9tC&Y!(ER$+)4ES_q07BK5Ff>?hnNb!z4veW25hm~}y +zkJW30&e-ndbl57lYa^I*BYKg2tb}Ar4kE`YYlC`og{Jef8EHI3$__^&rR?ekOH=kVZVArDJ?^d~ +z#7}s;$*Axq1pR)wXvzvlhBxW!Wem{IHC;?9u3Jmt21?4`iv^c5(_co>Q1y8WQXX)* +z&UJVTrUvh3wYMKSR^}?4qi#yGG)sZohn>Y*LckhJU}6&Iu|H(@Xpcw?D>(N2x~^iu +zs6m-mILv2=_SGFUowaUIyZT)blL@Yp7zTxCMa)yU%*7vFWeLrq5gUX +zwb7w{icTn!A9|ntA^0%sno<#V+;l#!bqKUieme-7)1*^|DQQf$TXn?mezZz3gLR&4 +zVvv^`BF%KPCT#r-$J?TPrM +z`+Ips;B}G4yiEir!hu}0c{ATn%@Y{w%}8hGAnQ4RqZdO)pHO4etg7qAkn`+E`t{{MjS~HU!Xb+w;~A3W#V0D1+?7fgio@JiId9z! +zy=s?EwfL=Z*KE??Mf1&9@hczvjy)qiDgWcoxiHa*VZDrnADT*Xe-X_$6nlAovFIvq +zCSO_4W+V;mGH2GcjITBal8pcrwZJxD7M82OdsI8GK$ +zetA|^)6>t{L6!*M1uWHT-A{Uxe+lbd2CAiyH7w9Pe$v1%?I49zHyy~ei0}HbC65?jDBzwR}kI$jso^_mP?fiW60>Yl3~_Z14{4RYle(YYNNMoYjm=#l4X~!zEg@)<`LhxKm)Ez6q)u +z>wdf6=+7Uk7e~{cd93L2j34TdnUIn`KZg};Rpo(zfJ)G0Do^O`Y47a$l~Q+BgyIag +z&~6N0wqNcF`uaJ7iE9`IWY=y2k!}`fk8NfR&{^D-c$ua*3IH7$P?^fRoKRTgiX4Q3 +za{|K0EUZEds&bTs2;%Uz~5v(IeVNoO>$t{q{m +zGfy8Cfla>&O9KhJ^a+lJVyI7>NWankc>df&>GKiNw?|O|`{|?8Srhvu+V_6$*O_w) +z=R<6vpzqS%kGmNOYjdcXs?M?}M3~JO{3H5q{?RSZVHV{b(ko^DRkfSqlQ;v%V5HnVKEh_wj?7w&{B8m`Bhg0>0XT|2+e8ZVtjz*_}s +zAANtKAkyV|8-#=^vK3u;g{?y!zF0gAU5_#v3bSpte!%EpNzWi`m9-iO@-g9^+SLiC +z%uv{ldz*HTIY6T*S1OZoDFms-`G}LaOSJ28XfeyzQdYm{u(hwH^O)zQkXMpu&ogBi +zlAE6C4byulPCQddvg6`@z(l$E1KfJLc58U`*e35D;4{rU83y&~2)_9ydVBP1VQG_N +z)&(wfc$~TBCt_Mx-S@A_G6-i|3=MIx_fLwkt=@6;w7CH7lx{FQ!$Gg`58_A!2wAGvAc2)MEH)X`7VopaZgu`4=Pwt3Y?L@8|7$%ySJMN=%&OZKjbB`#eux9&@Sx6V=6~~{$%jV +zBgZ+huh9H>9O~M7d){2@aU0%KuUoBMr990Fmzo!6k9w;nq}AIGd!b3VJt(}=-k=;h +zKr*(*Zi1MWxgan$FWGP?>9TgXglh>``DtRyuaBfKCzaU?&}vJ~?T1@J;r)ynP;z(& +zd_FumP1uAX@XkgljxrOx{^VRGBe@b8b-r+<1ij~>j}(VKb)24mLz&PkugC_B1hB;_6F5$Slyc!c-A8Sl{JCX0vk{-)8ZyTUd4MmrJB@&G?``lo)3a`=bHsZteHMA(L)zB;uis_vW8YYGQZ$nCnA9Q722 +zm^Fi&BR|Rwa*C^9hGl`zx#mw|B8utmw6!x-$=vMzY;Sn3iSqx_y#M6q>fQ$bFXtV5 +z^jKC{lTqV0HAifMAu;yCEO5t06KNrQM(^9?QYEDO!)9JE3yv{Ba)a>FqF31@s0T3d +z)n~6oEsVCK(7OOqd#WaiEr|+E34X^|$U&Lt14y;v0K7FOV>JN(DI5u=aGhH;pf%nF +z-Cn`)tw@K(R>jIotwBD70|F?y&&6PJ8*=I{D5W5(4`oO~!epQV&<)d%u$H(a$V?u0 +z`WF`&Dek6qK!ujr87o7}#OSB63x(8St}V;uwkxx1|xW^_O)d1UiB`XxWFI-y*h;>`4wY +zoa*QtN-&u4FM$l}a_N|3SO_GB<*h=$H(6ZWv5)5Zp^o%l?Z`gr(1)}X@%WuuoY$;bqhW^nUtVUq%%~lyL~(5NM4VQeE5zv +z*=txW@Z@`yTgTY@iDO$`lU1H4fRHwi-`g}sk8mMtF6*rgF#$ps@-{WMgcl3wmkVG%ib$lsARO)Wc +z#j}H;Y>G|fsOy$=lFj)jqQG;)brw!s`w3;?GNK)$~bvBgbo`c#`0uKLS +zzDG|>NGjXGS2tZaPUZ5DnrmU)bf+Y1jT&lC^-$|s_ty%3Exzq=AoA%6PiS{;W~_tO +zLa)MmafKO@%&mJxK~I^3<*3f@1KNQT1E!lV=XSEiLn&BuLG_`s5ukmfvBL)>**z5b +zh~{+rGDxS1_BFTraX5y)xlHh$>x^t{WiuNi7pV)n7x(xQ2-*6n0zo+{;d(8VFD=3s +zhE0%-yiFbJfeoYX6RFa}eQVzX^Tb&~p{!Zulfr#x0`6N|0K5i%DRZ5zU;>kthymn? +zq$1QMRof4iVo%abnjRNc_P +zI_^fUV^$t|dzNMS4vYXQF$=&M>C2hN=~85$HB1i99BFe9RQ5*19q~F*q}#GH0*e)o +zHRYYz!F2;KOF|>02YGy>Ejer`i*Gvd!VP7%S@d<61G@~Sp;$@?}Qz>H_K3mi6b +zb*lu6-vF6_(G*N;FS_{SqXD!o><*BhX!4U*#r(q7>4hL;J2%8C>2_9C$R! +zdVb~3+Bf|juy;z@eWRNiZ1dh5Nv>hHxbc&TGCd@gGZBlWFx~H)O9dcM~1mMS$G&t%(`|9gtB~g<cpz^?VChPK|9#D!(ktyVF7RBwM$pLlxc=z$);7TwI2B+1} +zZE>GQhgfpMO=CADuJ +zfyOWjb}LV^DQ!J;QgsD;K|0O_((unqZuCN^!oLkj7yN)?A?G+OjW;mG7F6M+HG|~; +zxOHk25yZSv_*lusB8-DjM(d9SHqB?#@vM-1^ivknu`l*GSxyh~L6m~AY3icTaoYLm3P +zJZMc@WDO3}>PoGsc5*;w4N2(!Xgx>_L=xmk4aJ~bx-X0H)f+tQ(X%7LuM%0H5Im1* +zT-)$-Bg1Y6sdb+h)q~v#i!;LGaFZ)69$bdxpt8Zen+utZ#o1T4V!5R<;2RMCjs^J( +zi1)PpZ2uP!=Lfl%>@NNW#K+wi{RdFNnE54Ee5#csJ`YDu*krT6Hw8agaEB!jn=4v? +zWQ|7d(t3;mx1z3jo*v&**8HhI%#NgKX$UGdDXSSQWD-cLPZ*ouQ+bnc=yR#JVf!58 +zpUfvaH8^x;onga%#Q2wt9a0-)vQ-cvgH4**>U+F`Dd4lt)~&qzYI-~G4o}z5c$y#^ +zu3O3eRxt3r>rdmnI12$AHVfSxNXEw;dTcVwfED8BjwJ5hOFXrx$PHnnUj>xi)o!=u +z8dFsuE*8b;Z|Z&p#yc$%ZafPjdL3;TgSXA{kWjsiTxww{vk#~quQ~V5lD*pk1_zu- +zw+U`#{}&MN2L)xP=fimnI$BZ@4$W;UJ#^63Q=+*-JfoJwJ|ON3-{AQ2(`cJnr%<;b +zhCa7Nn$@o4YUH$zh>oOGh3M#S4ho0TK`rVhX@yt?4{mG&55*h{%Y?@c?gpmh!u=CY +z@%Uea_*wC`^&5{g9Zd3Y`n>gk9hq4g0ofcJhp;DB=~XpY0V|Fxq +z6acWzf-nj*7VX$BaB?G_2@?$YX3q64$36hS?*lQA-iM98-?rLNwrZKb4(cr#+J-(z +zddOhVeqykqA!HzV+)& +zGvG6%0g!pcxxvtrT{bt8Ho-+a5(GYY?|z?eEQ*B)thViFmEANJ#(u;=lSF}`r@U;` +z?M!!{0YpA%lnA5G5Mt!kN8REAA+xM>hXCj@7a;c1xqK$0Zo41&>16lR8f<$#*mF`7 +zA^i`%6kZS--IwY*00EUJyn>^@VOF7#Df^femi|`1wruVX$Osxl`9tNaU9GB~Oc2)i +zh_w+DKda-pVJO}NKKmYnDlG+caGv>r!4tVH)5J*+c0Twx|MWctVwY&7kb)d8Cffxu +zz@hNV`sg>#zXPsooz<(0yMfWn +zgf7!J@oOy3`~v~ZEz&|4$v2ibm7NZN+rt=4W+aMRITGBEEE8KFpa<;)%$?1IPv|&- +zs)opey23AnT)UTeZB0+O5Ur5v>dUG)E<#OuB(@xgy6@p$x4Uzwq9 +zgnuk?XZC+A@oc%jmUt+lrrBvrLSIMGG8dT;Di4Pb6)p4K(ZVrH=FndNkD#A!_}_icv!uU3SK+wxWPkq +z>C9hCTsX$;+Y(p&w!|GKoJ#(+#9zKGaj7@|KUIRMsxPF9>lHe6=5KA)p0iB`!odvhST)r +z#seyQMk-)7H_4j;R1|qX3oxJMc2B_{ +zwy%(}Fp$CRs^7D_1Go&ZF&~K^6TiH#t+b*1HaQ<3l}gURT*vXLwi}hIAYxKsi0kY( +zS@MX*h)Wle?IfuDJnUlmRR+p +zrkJS0pC61jD;jR7n*b&IT#<~-4g_=4y_*|B&K2U1*s` +z-2af`MSC+kf9`|+lH&Zn7Jo9G-r#hHss^fZC8#}(FPQfy;8U7I?q8m!vIc;4_^D?5 +z^%PV#{1&P3N4KZixW9P7dHT@oD1V-@SD28#?DC2dS&gvBx$)fCN2s{S*GrgTf`n{! +zT&_}ymKsAhOvMeF#hwklztY>`w7y)m9Xt?}c!&Tp#gLE7hFGv%`hD=y+iDNsQ?5Yn$LLWcpfY@lIpMj9w?wvjElm8Kk$-B{H2vAIX~NK@s4j-SQ0ynAns;>hU;7<gdqHAVj{spb9pk4-<8Q+pXhW^++zFg#MsBj{uCBL|Nr~ +zXpCE?D|7qLnl>uWU@w6F*+v6HJ^J-^e?(#*a_n{ksa^0>h1HUB0AJioRiFzCaS|*Z +zctdq6-W)}vC`}~wM-!tw66y0A7os++S|aZEfCvF7+ecKIQk6Io`(G?KJO8WP*)VjA3uyPo8Ok6ho`BBYJ}A +zBrBSEhJF5L(qAS6wSvZo9d-jnNF&3F3pDoF6t6cidq5}PcQ%?+4c=3v8QeYyKqtY8 +z#~$b9+(Gg`HyaW~5q#3?4lj3CS~I=S6JL(SQvvE?-S&$aokODcrRGUeY1V{AUe%?p +z6;#*v8(C4N3@@TX{MVXAlhPc3TOiNyU+74^9sSN=zz+lu##b8-`Aa0fVR1z1lmCIm +zJACio7_83o8Wu5%pE}_U=K+gXV{>bxUGZzi;R<(fJJP8z#?1L+sGaA#LAg}n#tv@8 +z_x(+kcvEzL;Tb?`U~`ye+ir!-nQ;x6qYa1sps8p$ULNK+PQ#5{h7MJ>07GL?A +z`2Ur~kN(Qywtr=Da>9RPae^Pfr0D-Gi&y-QEIzb{x%9uXIG)!3k;Ng$d&~Zn#hnbS +z_7Wp0MaW9ke;4BVFH5>S?c=X@!0mW4s!E;=_(634Si4EQ#I#Ve9Qs3V%zY0cNkP3~Adm +zkDvlf500Xx7>WEn7l*-RkTbOG++Z~kQy%VoYDy$4mqUc%_ZS>BV0Dykxlt}8)(fJe +z9D#pix@wz}0gY1t*tVGIUtHW)edQY$cbHKRs(kzTAu$GkW!o=?C%e^v?hFQVc^6)W +z6>lXCU56)KT>i)nM;9|BX<|{a?!{{)b)Q*xYAqP!aRw(5Y1@+|+bOv|pA1i(Me47s*Cc5!2|`a8db~6Kr&YXFOD6%Ul;r +z9{w_arWl@y6C{bd0WF&6sg~y9){`B|e6^)|Xyd+GgEyTfd;>-*08&{AQ&JN=f)Tdexcey`;O_L#Z}XXll0 +z60(on&`f+VtxtKR=l?*1%PM|P=5=HKG4j~yoo>L!biFkt=gcI;6e(_xH6RD;z~q^C +ziiHQ@!;RJNPpW6Wolq*yNNj40!xxYfTpO|kubW+M=};uq6j)9PWhycv#RrN1>3y3L +z>mc}4F_#1;gD%x(O +zy9l*@a)9LA%SvVVi10B{^&8Qn^tHF~n|{b?~2F4r_talsPm2EbNCIc$#cH +zZoOj7%j4G3-e`IIxa004G5L$FZqCA0ncygAH=tFS+p1IS?2ZAb;)Um=DrfGXg;4Wb=>{y(b!>_#Y*-UaB-@$!>X~FgC +z6aaRtPSJwFdXr*?{DpTm1K2;u^|PxJG3g+OZ_EQUPshTA#8!ZOg*UWj>7<@jPC&wO +zQO(>6@T#HlXg|eT^VDOWGUEA{&vf$=V^I9rd|{vh`*kiM+YNBi)JW0|Ft$9E*4y{v +z!3Bff-+nq{#$a+D&U2>b +zfp*Ucv^p9@(Bv;EvP?3GR6CN#D|;)7u#NCn8Rz?NW!!xFUuC?Uos?mPzB}`h?`iFN +zb%UTmtV35CxqDa7s!EbExlyt$z^B@_dn|@bCZrLE$9P-4TbJ*Sw|f!`6Ly@j7POs+ +zA^DFTQ1rwp-G03*IVmA*erf6sP$Gl`Po?|h&B}r+U5l=v!GAO3H2*g<9_dH1W=mo) +zcFkLW8vg@8M~+*6XUUjoP8u$^XGCE21|6r%lsc>&{aEm4TbnlMHwO;*GyPC;{3MLU +z;-Ku3BjMvKpdGf{rJV2A=X-qsGy-PSOt7{d)42zyl*3j#ZZ>ceIaMZX}!?M<1GNvcJ@e#&RlY2u`@#t9@ +zgtN=BvEvp4F`y=?Ob!~GPODTWtiw27UR*l0xX&<9OCJ6@-IgR@<#-nZ|GKP5ILC%Bn&rYyEjS+Y +z+DVQp>KtXB<0)JOvj=9jTF0>nP?!B-9f$c!{95N$MRLK@4D{#JbC;guMFzC`9o^}A +zy*UzH?Y+}U_lqEM+OS2`m1G*crac8L4U2k6>dUO|gYrc4a~5|&IHAftnCI$4`Y2{D +z1;DR2CX9(>a8+xNEs~7J2hq^)jw8R-UbFm+lO=mb238N90 +z;N{Q0CO(;P(0To}!`Ce~;6lWjrlQy6qpZ6JBwCGg(S!sfKn%?c$0%SZtc5$qt1LDL +zk-Q4;R=5Blw|b47iC*#ydwG}r5aE=Ig^C%1aO^H +zA(leTJ;cnv*7#L`Lcf_y8Ra|UD7V}$jUah|Jmj}E4!MHz*BY-ba0Z@d@HGc>`D=|w +zWv_l)6&1Ucyb%S~=YLuQe{WW;Tal4mrSo7LPlh +z+b0&b=Rbt@X3|sjDG=cD>dRfY%W3vxB{VUHyd}fs{iGpl1$kQ#m!!owvB2m +zC&ejL*Hqms*ojM4R#|XncB+q;FC8Yn%x#2Z8fZ1Y{(K~Nqk7h2UmE`k9Xtoi3I?x0 +zg2&VY#?c(}ka8kOg~lI9*Hv^zz|kYcbuHEtltkxh6RQi)B}tgab%wQs&zl58cFLZTPmvn=kIx +zq|wQT;I^PB;}u5Id>M$d;_3CZ?-^qusT|>bJv`H^NSTetEBnyE5)wJiKf)SkW~FZ0 +z8oXphiE{BdwQI9fv8zCkX<{11jc7b8+AdCVTF@(6I$(T$t|Z5ioWc}^$%?2miBgK` +z@w+9#6H6f~N>ItxKU5&A{*b|i%P5pA7d958@NpeB5-VghmckXuvxq_0jAk@DCh^73 +z){g2IU*2T$F8^}+1IzH!4knXz39O4?4LCHLDn#y`cPb$iYsjvx)J#a6kRHBztGG(f +zm7Ca?@o`(o6mz+a2^O@xGtMsidf#XQcCxq#eC7;d5FHIL8a`#wScPoR;~E2ZgLyaG +znaSPA>qeG05n9h(vTsx7)~U{XJ$S}*wv*?K#pUTdovXD{!$(!!=ChB3z{};q5z?LF +zds}a1m|&P&0D_Y&@lG!sh!$PMtm}@-K&2wKoSIME2$O>*6?}|~|2#B~3Hj9o<3Jd9 +z1*jhwu}&fL4?&+5N2VwE0#iPPLw?q_XERW>g|lFdEV|eOWQq0yO}0fi&(@N<%&o@s +z!3r)WvFkTBuH4)Cjg7BH{ez84kAXcU_p} +zAQ1<5!Ej&)nf0C$n!;OXU?8Lf_er##o(zcC#KoMK +zp|6Ow|7zoM2`b;(c$qQ172bQ&w>CbJ@&3Mu@K+lrdKux8(J!J^qFW|vW0<54ab455 +zVl?>H#&KgY|CFgnL}lkvj$D;sfnQ5-D6$KlSo)-jv=gq%u)lJAHSU3wvR{*&2=-d! +zTo*HSx5Ux*SCcnDzC&Q9xTbIxpuxF&N?o~ +z*56h?_M?)jdLCr*>g6T@py$E|IA>))oU4Khkc&4})-R-hU>zk_z(-`4B348=+OpRH +z;M)k%F3(SZ;D`A!pblgB(FDv!{0@E>Y!poS|P*m`xbmhA<0_nm_S2x&$c +zKU*0DR+m>70&Mhz!8MXe=lAP=m+XSAcH51GJ>xoS11(rBPvw!idVc7Lk!wZ +zPQQixxQF8N5E^2?!p>L|Q``sKD*Dwi*;o}fxBz&gs0I)baIs1`K~)r1g3Z_S`$w{F +zl=pafM!4-JgjtU~#ccj4^{>YUgI_`-_7OiO+CgkG!G@NkM3C`&mjGE?$uXjkGR3p| +z!u8b&@(!~JIyLw4-K`EmsJK$1<-8SG^rxyIi@cx~Bh +zIFm6#HK;hNLkyY6%9k$5Y3cfm*DU#hZ|hBk>nCO?CJJd3Bv6#EYggO)uQmiyS)@Y4 +z4Y&VLhQZDH)VwP>GnDU$2%9zO%U;}1xQ2B>!QhqcBjq$Tz>9Wj`UdK;tzocd7{51v +zY5u11yc{vZW!aa11%~f;T#cW&!n8^$sL75vCOGQ}^~A54w~XmHEN9djfLQA`;aRCU +zL|#GZ-=0tjNDDQ5&xAix7jl!8PMKQd<%ALYM;sS2t2+Q1cKJsfk9r84JZsk}%={L| +zi(2d^f96Plic^DLW6SXB`thimo{YdFluL^@PxiC`;#QW0r#=?qbSNakz7XJf!eSs( +z0P=vJbAfy2X@S$NwS6yPvtoySxc_fkDR-Q@-Og$q_D>4Cz|xJJyuxpGV^{RKkQo +zT`G>?136!zFf6@#I4VMgsE8d`PxOaEorxjkR&nZiECz`yKu*lSDlQ$Y19^>*k*ia+q+$p~Nd!9WV8DCm4p^o@9Ee-(DX}aW3YJWJ{CL4_ +z66?OHxrNM*L}0@|?N?}#E6qsnM{utPNY0{5G@@0Bufumg!jA=MP-B-ophnx4)!=uY +z%WL8&HjVXm2_p+TI+#U4h+hZa2|=K0rnUm!->a9L-%NB^#Y441a4UWA1zA+IoH;s| +z3#qK(Hr2=qiw}Q+ndm%ly3r~z#!z=~Nw&vZ&CQj`IKot57))Zl{oos=rQXp!KpNX^ +zmo4rBt+W=$g|Q37*;vZ;t{OzZ?iNjD6PmS^QcW0a$swCV`;~f`GnAnZ17ijgl6?lW +zz`w6x>;vHv7~7c#v4%Aw7o|Ko;Aw(!i$7!JS7mZ94}r9%wy=Xr8LEjomuM{4DXO^#!wXw<1lh#=m6F8cw+$hVf&wtS_P +zh4<;-#@^2uCIEyYcR4mJ{cer8AdxNFl1Y36o_{UhUeg9^2XseJWW%fxot1zs*8Q2c +z%2b5?YUn$eBI{-c(_>#?SDNAxR!{Ru1YKh8lj(_N90>7^s4+89L=Y!e0RekB^IHI) +zVbta%i`xSZ-v9*YiVO=}`gkN8kdh5UA`|;_!29yEHEaBy8KC9vdQmb#vuAeiyi;4gT;U%;`C4AgYe53K^f} +z6opRlvp$09A_!F3)a>)E!NMFfM`XQo4zg?E$nq~o+q~OjtRi8bXB-LgUT%4hFkop_ +zQM{8L-=wfdF8O(mf;fsI?IJtN!EiL8e@cN_KdY@$VY +z9f}`nM@s +zh1P@4T<8c1zAxPkRxB?@b0RBAi1qosm-_(2!wpI&M;F( +zBAK}=ear!qyeg+W4*!sI6ouHYdJRX{`?yC-P*t7WWZ41Wg~0TE8)8#U?JmR727)L| +z>DUU3Ve>Yj5M;*wsr3Y83F%?#5kf9?qR;GOzv`k*cKFfy_$IrD@Wv}1m2O}*1|?uI +zPkXb@xPdYnMK};b%a4(`dig}2A1Zo^02zNUJ@U0#>_mfTH7xh^PYPIDXk$bkCQWOK +z9=PF#u>bVHamQ6w1!I7uV+HJxf(cUqWwX)b!~lO0kD!}`*$(2Q{Q&I^#)22$$DB4! +zub68wp@(-)UA_jQ%R*$RcB1^1;*DF&!hycBNxcmPWyWLT-*vifU##Az?EFoRPYwi4 +zmtQP$qZ370Y=E<-TSOcvjKuJe^fbA(21S#MPE?|&*#r0!JCmb#CAU@!k(l4>H>V1V +zhQL2>Cs-0QiAFA9MsT9r@gK9PU9m*6xNNfka&wChG94jC*iGqgIn4{)rS=$SkCzk= +zXISwpw2JsCE4ku(4)E21P98EIuA8W)E#lSY@Kt)Y;-$iVg+FKmZn-N1mIX +z4e3L=T{k-J+r}FLRaX-O(m^dsq9(2d!&nlgW-~1p!UJcs4%_m`8Cfc^G&%lsCTV>a +zC!y1ctLS&Ch;i(tf0F>cQpPf^<1Z3=u_4jKz$Muj;3J5~A4)QCG2$xy`J?VY(stP9 +z@axa@+9Q$K=fEE8^zVPk@vwi%aiFlczHf5e{$FyOtUQzb_m(#0nKX^W`hXGZ|5vyDv%!~Ev>1; +zkY|+5v*c*d@$w7ai*PfPP&&|xW#z+!2|ZW2#aNj$yt+pjR~4@VtUc-J4xf2LML% +z|A!pMy~Fm~Bb*$PhWaMQWvNzqd_JQ;jl)@>WDa2tJDz&6RV2tU>l)Itv&>=oqxw7}C#5X?*(4od_i6$6onT+Nb>C@8&Ev?*d0YMJEP7l`HB! +z2iy!_9y_nU%#Jg0hxaxyOq(MfN`{n2Lwa-S%U~;Z(+0`OWFm4+KGI8o&qu(dat>9w +z3^q+Rz%@x0`VspkBqg^?U9Ra7EJfRT_{{jnxLgI}hygTL)G_G0%OaE^dA-oY(iw2` +zU>^Z=yO9TC_2E~f>zFh{@uYhKhmf_#zL$%AirPE;nFhLfTY304 +zCwsyY07tc(7w}_1%x)fmC9GW4dChWq**fBBdZ58eCges@Jt@!1$s~Z7Yh*?sd`I@W +z#l4Q?!^WCpfHX(5Q(;+iD}uo2g1UJVd)ZFv=Lshd7Q|*JL$nfFQGV&1O3hpv?x_<%p7?Gm7E>DTFcT#rxQGl=1PpW^vbKvyIj>A?VMJ +zogpW3Y(XH7u&{U`8GawSHj9-ItKbN?`keGZ_ +zJEa+`Ky~D5pN(Izh5PLFUS@DQp%^Pm2Y#zhPf|-I|(|FwTVe@QWlao9WjM(?=>-G}YMWd!K4+W!^4jB6-1#Pl| +ztgn`4P>#tTTR>~d6vo2LI1lz2s2F}m^Z7b4u+#6OWz+>zPf;&08*Csr +zqNNbG6ssr4{zV8ek?J6O?0cJybvS +zMX@_1&&%t1$kozn;lY%`rz8V9iY^98&d#TyrJL7fTsQbkq6nENs@e_9^-P{((>v_} +z!q|Ln95*de`6d5o01oPiRsbuXc9Zi5EwvGxm+_wJ$1}f}b_f!VyID9406AH*-a#?6 +zX~sW6ww6ML!qq(T%EP4^S3Is@E=9t2pG5B;x~#+UR}qgp`snAEd*Bf6~$;Ta1rJk%Qax$D~51;6<_B_VeQ;RBbp;VO>J1tsN0NZ~FwfG8{ +ze%<482a^u=9MML@&2$yJrV$gAV0T+~A^8r$t*zXVeTjI1{^1rQDC&^y=7tAQdhQ;h +zKIxi^1dW>%qBwQZ+#j!OX(K`GfhV27Z;m9Mn2^f6V@INU#xkkoHXA&cF;~4gP|vBV +z>JG^f>fx`tN6zp%M|}I;7&TMCW)CUAHMxzS{-)c;dOC(bXvvD|%{b`;I`b~=zVZ+6 +za#xWUE2VDiHeN?_A>5BA2G6rS?wDzU&HiEI9Q*)2g*f=?!QmbxT5`hR&_;C8z@Jk7;krSv~N@KA!&N;L#BPrtj4)KjQL~z0M+J6M5ZJ`y&tl +z5q8s{+6+vd@h0o=y?5*}J!QqH*BA+q2jAb!pa^)L99-oD_&0}cT-;)c@0DU^8o4cI +zow%D-nvF9oRrS)f!?jvL%)s4knLGEs9;5qK#5TU8b6M2LzK&( +z8Pk(D4w(3#RqQ_v_U2_W-*pXynFe_rRYj_3qizgATD9US9LM^f@Xa=+iyUt~|sk|L=`%pIu0r{8AaF` +z&ehrTu7q;7SeTj_{r9*;o2UFmAz>`fap<7d+u+p(7dJPR#o4hR!eE#(FE3?ac==P&E_$h12w#v4PZ_xJ4>ErR~`r>Y`sY|zWYwP>%`tauLFA`z5jIf9JPO6+G1ORXZ@w(P3$eO2}tne7BD{Cdw%s+*bN}V36Gds^G%LpCw-IS +z&`|%7;}=N(A;+hV|3i*X{3XZ3{+k>xaQP28zV$CT&ihS{(^~#7IZpK-a=fyfTk~IX +zyvP6lkmDm*i;{_#d9}|7th^5fTclWc8K2Cv?NNWpai<^1ShaD>IQi82KF$GUE>{w_ +zYRf(^<1Y?#=|(e>eZB+Xs_+n&zWxGz{l6ZM>xVY#1jUPjz&uLfN6ZCMMCrGSu}N>4 +z03yj)>_9!7N71NH_`9H2uzg$*sxd%r} +zq_tFu0cqEI>Fnn_h%w{V*8Jisj>`v+uQ8e+SC&X*YrIsp8p&Lu)@Ga5pdIKTCIw>% +zkImiMM}E2>)UOg})eFKi!Wsp-ypbE%SEBwJiy$+Xf4|iLQ;auw5hWX^c07z`#zU`- +z4MaDqfqs=a?0AbBxn?*7Sv9V3P=If5uR5c*aWPtE2IM|K2bQezNwoCJ-TPT=@5>1$ +zS=(uw(+#w8>6Lnx?UlGmt15gP*1+TwtNcxlACvzNIli3rmmJ>*KiLUQLVzQRj%{vT +zX10Dx{7a5c{f8VU)eRC(OIy51B8ICKxdU0Ajt*X^#mTVsEubGatH`;VQ#n +zXf-VmvofXOTV?xgczoYO0$tW|D$42Dfi|Jd$6qV70rp0{<~sF@>* +z2vN6`O-y?S#t4p>l$$VMih7%yy>W@9*+>RT+QmnOZ5fq40s!{!*f4C-L`IsZYojwL +zrZD|d{Jc!i&3?L;Ywbp#2En*uR?tV-~DF>v39C1psi?2+w_Mm^wGvN!hRJ`D($Wt*HQKT-r0M^ +zOOAMEiEz|TCM}9bhy6V%gpEobH_scz>2fO~b))3ub#ajPK$G^&yjaM`E0?ZkubsFD +z#v%E6=gsp)(=xQSMl4_C*iF3f`dG5y;{Am>ZuZ)RcQ;h56PtsjQH|5NvFGqjj&JdP +zSF;bxZ*n~2iwBH~FV=XlNI`wPc_3mJ<)IVM+udnTEQRETrnUK~6$mWA4=wqD>x&R= +z^wJc**LsLo2&kFv=AxgnvkPkHBAHUcQhkE +z_&6)7HcwF(TByT~y8sXRG#@k%_K-LtnjT}ccX))bwt#pEJd_(#= +zg4hmp{+59t;~X)&QSp1h7Jp#_RE&`RNv+T?1zv0E%K*ABOt#!Hrpn8-5>qyz{H?Cu +z47I-VmpjI_uFH$QRl1Ij&S>4QvR@9}2Rhh?wqI*>;C?&-0^frU)mM8`Ku=E9UoTr< +zEL^wpN>5&x7y0YaJ#&{0I$Nx36|{>}aZg{JY>%Z2NHs*d+m0+uPP$(+Q?FY{wK%7T +z$(4&8(MO;hgxX((?&EacoX)TFYIjWadnQ>06sI +z0jzt$h?xsO92NOCLZXukq7Tnj?G@=s@5DZ9rnWmKWhOmKb(`m_qJ0>XQ`dts?d@No +znG&uEdz5Y|Su173JgXhQ;jsNJN5=AOg@p{Fitokt;uFCQhmP>Wxx`ebtQRb9dCF~`^@qeUN>|v+fJ3|A5_3b!4WS5O;sL)M;lGv +zO&9}H>(7peV~z(JO=8+lKB}_Vy#m|3$%1I}lWF?9k`#&PKd+$nD%cLHoT*|XDf9w$Cd|cq`gHj4%aKn3I +z|38%719M>ezV7?j>e%Yowr$()*h$B>ZQHhO+qTiMPUf6z@3rnZ``laiMU47ajrx5* +z&+}#~-etH%D`yVmn7go8!ND#M>B_{m^QNs1YIoZEr&kFb$V&q);F1RemB<4+s#U26 +zG4kX?$apt5VfUF@a?vvYRbT)CgGJEAL4wI6&P=;nhgywbVTE-fqnU+jNT_(u^SP+Y +z=u%_MEC;Kpdd>a^`qDTZ+P*?BD0rv +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 +z8U}RNnMi(pfdD^l +zGUwJ9=d53F7P2Zc-UD{0R|BvANw@tn>X+;Jo$anED}&QsR}hw$ucZzTMvAhCH*WS_ +zoln;pLTA>m?rAnQG393g-Wb1=gB$LWoVGZO=v{Tf6?qY@K3~&?x{VRAfMj^cGmRuq +zuPTCaacx@}C?56gP#xGlLZ6}_kTw$`Sh;li8&c+`FO!Q-K{J6E;pp!J_iu6hqRTH_ +zQ*4hQxRdlLi6qBCbL8`iT-}9Gv?4v@FvFncTO0>dGH|$#YIWt +zS=UnRrq=u~alCBzzr}HKD*9wK8UiF+g$E>P_o@WKHf>jUy|Ud3YcuK_c?s0U+c@ZY +zbR@Wfp4TqU{>R6kKBxSTKB0N69vaCU_wIIH$n+umiA>OgJOW2Wn*KkB^SR{UR5Y{3 +zYL|nkM%%S2N4XwC`pAp4^kWwa}U{2JtKr@SKY7)xB`(+6;ZS_Dz!NPDJv2 +zytRiP3etQ0;XBsVP^Cy-3+0mY`yAX3NK;%d4ELZ84j$mP>np2IOP##+S#WggXaAs@wW24v-?B3H+TJ&cPl;V +zhfxVR7U1XO<@(nL@hR+*K_$tK_wDe82^#f|D_Y7z^hG%$&jKTAyf3A@!o>Se>TK^p= +zIZxb2km_;TE*13KTWV(EeC5eCw0`?z3O&Zl0T^vhkRtd|=^e`x#s$S~4~(9Uq_cmM +zpWk?Oy+<(*`bHR`I6Cc_$ZIn(hgf=CuM0r=>Ah>Wg`9FiNZYh-vJB9PHe$%Hnin~m +z3p^4nAXNZz7z@hYFn)>$bk1u0Bw&}Ysr6`+Y`zs)h1bkBn +z#jEVkcPd*T6=tJT3*kr-z7`mN(a~zE80?unMo0ihF0+ku_&XPE+Y2RRE$Z207ToUR +zZZ3!gXkNRC7;&w6KY*hjH!shI0V2b~;n-yIQQR{gm5OTh4jp?Pn0iJ{tadt@$M}t& +zA5k#xzP$>zHkK)xbyWMa^8JAI3g0^vt%|(7YOt&t@x=+}3y!M5^@L8%#adm0bI_TT +zj6-3Ak{n1uk<9E1nJ*6E-u^s%o0Zb?B?bc^3lzELs?e_fY;Ol +zzRWKAjIXhOi(1xvfMPpfF#HU*j+N3qbq>$&8xm66Uo=<($JkAE^nntF5hQ!1W +zz4MCjWXFNZ@8#V#h#@ltlXPzw18>kl+Eb<7-GZB8zU*oUZSvdka!U^Z+RodE7%+&F9xf{(^s$>{w5#*K6T!;QZkc2tiV +zBs52p>6+m?zA0n;R5d^-GdZv<%%Zs=o#Ku01&DW{#{2~V`vZIoa?477w^JW7UjL#0|LsjTRiRMBQ$nu~G+9*zOc6C|ZG(qz%{Du-Tp5YQN*X!iCRZ@=9ynN=X +z0_xm>x_gv*ewaQy930caj>QeKt-ruQ89!7jq&&R8_4_W`Ylrh@%KZfBN;`D84<=y~ +zxYFQ%apShAqjCS@#_`qviyKepYT#&b}! +zA6#>BocJEc%DVBREa6Er|KY}~CmYXKdz}iosKO5H40gcqy0m&ATK!WuIge6}z6;gP +zX9Y6*gGRwzvRoMFF#B(AeE0=sCo*P-Aj+aao513P!kdKhU)*@5PAL{R*eSo&Q$Y7E$OZ^$M$ZhMPVJGq;n@uNkD4TAB +zYK`k!>NUhig@n$G%B~P8AUOD46GFCeUdFf%?HQDJ@-QeVoJt%&@^_Uav1wm)N_yLc +zc(tahsNuob1=nbJDJ0Urxp8}o90A%FlX-{-CVay`y;AEei?hNC^wfkbb&MI=yu_xV +zot9=lZsaovB%QvwaSn@9IVla67Ixj2C7-w?)KzM}`gxgpX8|eSb713vvkfSbRjWmA +z_sF0ay~*cy=HKp7M&2Kv(Q_W=dQWe>O7u-5#!4GinU|0?zShGKladwMj^=bQo^`$T +z?9rzjhTj9~oHs`yNQ`u>5tuAskSRrhf^V5B`+qXcI<&+Q+*0ZPB!2N#aR4=6fA+ca +z2$kGuYcE-L>JEB_$r@OR;7v;;CGmSWYJCXy55J44&hxC7aw08>{QGvTH8Acaq)S0$I`@yf*up9E@Pf1msET{*s#Wv;0TWym2-Z~a`5nC|{QdEZ +z!%s35UX!6`Onegk{(9v!9U~ZQM$a| +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 +zFC*^MMIZX)fVK@^z8U>k1()JtO(Cs?LEq +zEVhw7qo5#HrV`_+m5=AI44bT>IOPy({b5}YNx9|9`M=XxSH1QuZ>n4Wp}eo{PoYT7a7Z|wuor3Y +z+vAzc{lKVT4&`%KNeG&)JL@GFEHK*L27LKo0B-5+qlSFE_Y2;$H1@{ab8sw^^FNs| +z5-INvL^&u&;}*xt{0(QY;*xijuY-?;-hCjM9bR55bUJuA&tbBV>*CC;UGt#%sY@C; +zq;UZ}_z-Ja^{AtO#D6R{<;!U8W%f>xr&-MbfP@9Trk?uir)@5W9 +z#p)c#k2#WH>O_wL$f6@c4`jS8GDFzwNd5sMr!Q3#rw6T0t`a)3W}(ez+XP(rg#h9N +zmDsx8&g|^TyYI;0jGMo)$KbM=PT}0-uMVh#aWeLkG3wL}K%%Qjg5np59H=<%&c@&) +z+d|dis(0RYN83i~JVa;+!`${LjVO{WYao9u-kXw&u3Z0W+u;-A%8vB?0}FpZpT^)% +zWpM@~))R!&?C%oO0nG0@z<{qEghI0ZQ)tLvyM +zX+i!CF}Vy9co8)yhHt&wNcX?>ZclX0zxD2DkKhIY4}m +zWM8;Ubmrd2ULcv$;KJ;TE12GnYumEaY%&+fJ$#zGeZcx%#FgFO56g&s+JHF1b)5dh +z&PY9gRGeoms5^~3J-zPrOxZHPSfMGAn7Wf27s2g*#}Bp~MgVAnMk0N6cU8h$T)~kz +za9O2gr62vp2YO%=(m@(FRiWx3PXTz{pY%Bm^>BsWf6Q$loUwp7t9}twCyIsvlgn<+ +zArHc8-tK@e?m9&S{ONU$4HiK3PHDgg)N#}KYUIMl3)x+Aj^V_xKuv(B^ +z$&C2tz-q81cJ`g&NIxcW9FQhXtJKGJVc_cxI~!;(!qFsU6;o*s=T{(qBT(3)KfSM? +znYx$a0o2{-iW)_o;z1=lnJx*ZV51Qroq4K^^-ns!3uP-B?LN#loMUvL3U?PIpRSsw +z*+#&=@5a^<{n(U)5>*RK_V>y`=nrf-I(?a##5eK?Tu1ilD2`&ceZgOf_^Xw%d#G|i +zZ9$$B{MgtEjLsN>hPB|+zh}fMihyE_0g?JmtXR0Oqqx7nS +z$ejCfg>$|9k^pDT#r2hlb0N`~Q>dFO1fhIR{MhWaU|}mz=)H{~n4)NSyO`Qk4hjwE +z>I%;FN`1~r_l}!@Ay+uz3(9UU;+lS9S)S?ip?u=G*fEI1a-*5}pTzQ2YCLu>h;k^v +z<_p+PYirVkq3pYP#Ez~%Mewg@)E5|^w!|~IOex5JS55+NrM8ro{v73Wt_s&VZ=C8U +z8(OMn^th=)yM7BbPCkLq<8NoQwHWb*x@ULtHGl@j%qj4w;gcm!%_x={i1j7RZ+uyH +z!6y~oX+mXk%-zmfhM|Feb`H31Z9X2}Ks7oQCC!5t6wv5Y-Z5TCBa_yfH%@tB^rYg{ +z6H>3l3OXjap3m^Cw{I&r$3&#W2fa_8R3G57(Fi7m$(Y^h`|}4jFUGRqSN#iMKjky +zQ8zdo&>8C{47uF^!dVUEdbTOZak +zcepFVyAUz-i1RiO3X*w7z)v05a +zRD_`?yE+i254!4%u!j^ppQR9(<^vLY7#VS^-Eq +zYhSM5M#YomLlfg8{_OSNW#fLCt}~nr@x8ceWtl1^64a_oQ4v>?qB}23+k8cHg#j$c +zy%QU{K^Lg&z)RBL3^*<`cM0)nC*vz{$FX2KreeG8@oY1~VZFSy?&tnR9Wp7CQV2g7 +zp6pF&?UR<+8C=5NTPr)CJD*|P6j@_qKtnnk7BH9uK^9#0`?hjfPZlVhoN|?!lSv?3 +zMl(k$3>wvaGpvs-B#(wg&HI(7+;OS@#dQYW(Q`xC;EBvm4YQ5$UZoJZrt(Av8c&y- +z{cN*%C*`3|`$rDtgvPzfN0p}NCjIK137T@&Qn{8bO(shc5JjxYtKth!URnmdKlQ+x +zB12F=hGa}k6HJ(XhaPKq^l;B<$=*OlOzgbY=F_a7m6J>bzH-Ge8b<_K`-n+}eP8K_ +zfru&CuS$k-3}*i21N%W`b=%&?Wfl8HEe`YnGr6J(ncRFAr2W>IN6ZMP9Qxl_fk;P& +z>PY1c+5`S`00@J03`1Z>`Ctw?Udfhi(oq)hz3$mkg5Z!DLujrdIAlWu)r?(dPpj*p +zro=J(kPnZ+YH_sLy@|gAtARaV0*Q-Po+|t=W;$8N8#Cc2&LsS$rH2?zU1=(UQbE`9 +z+?)wvZjcGEqE}^H3GuW3fwnr7_~3qv|_s@pH0 +z?#MCMnqlC>Z`Bw7%F!y@XXa}g8^;>}&UNdxOq18M_8BLI&B7|UisPT#Ui*E^ek7#P +zUG@~KM6Ci(@uTwl$VeI_ljM=t#Fwuv~6C}T{ei6`*tDaIv)L_ChyCUC7oY`!)u=ZGPbGVD;fVWwo%*8#z!y*S~O)XcxZG`A%azT +z5Oylh1d-j%r^RVSuQKa)w@?fws0|kR +zAr;2EQh@Ry@1_CfFkf!TdV};8F%}oG+sJuujAcQB9 +zwl-9?9{WD1k=r>&adh2oyIijPkG{4OVE{o+uh*&}oUa|Kx)fFHisZuDUcgwSG6;l& +zqq-Zf&vKMPrM-V$|HkdqZ(G5JwLp&=gBH2cc?x|SKDbMKI5c(lsatacU&LA`5Q}Oj +zBjiPO0;KFrV$)sN7>TZaGQpo{46u=iB`5KVHNcTV^!l650*gd=S6vi2pNvCT5+1wa +zR}PE;q#{lnxSP!L-8r5VyYMA)+5vlyI9*Y?;kv@{YL8=U-vARHogMt?{dG2PICz_n +zUO{MYURfJ(uPR?cZ}xB3Pj@)CAleG}2A9M|wIEK2%zR;*5j~6+xJ{4W<`)E7;7_nHl3=)`7lr!5P72f@Wj7mIA`6C-;^r;-ak$m`i%P)0w8!T{6_iLg{aMcc&AR|Sm&KK`g +z&yY2q^pnapHyUnGLB^Y6l_mp;9c!;AqvNwns@I9aSDqpNhJ7{KNF@|rh?IyhMQ|aE +zfsu4Lf23tzt5e{iVHLrTL@L`0xk=a0U5U?550*xa6oX<6I)e=3lhklJ6b%@-@5tYM +z2;1CrVR8!?Fr#Dv6B(GKW>e1V>!oZW^2)(2%p8LPIN7x(o~a5ltwVZ<`4kJ6EkRDr +zPXbBm#8@?jL~^g#9HB|SfPnwnF^K6)?-ULn~#G9AM27NDKdK5FvuAZEiO&efWjb7W-U!@E9@w +zJj@U;_;rPAVSyf3xD-R4r?;4=#d+#1-0T|WfCujj_XK}}err(x0wAK;^#2Ri{sHkH +zu(lj<>%fpFlTIaUZbyd&WhDMPOYxMfMxzf+d#-6pbQCg-t%Br>fKqDPPx#~IlCD~5 +zrGn^25Io~SX=@9?Tdt)~7qZSuC?`E)`}x%Xr+@ +zk!LO7Y|Aa=(9on(ZOMtN%8nWbaI)#*hlWk#O>N){=ef0;NN9Oh4}FKZET&V&qZsKB +zi_U1Jf@7QnR4PM@f%Aww;)y_B!C34JV}cjlM-Y2j!5{V0(wtLJ|19V3brjXnIGb2K +z@?PpVrOmjj5#lx7QpFFH4)=EQRx=Xxpklr+XT#Ge!&j7;U*hjQ&n4Z6z?^t;$|%7{ +z`P+tURWhzEqpF+jz8~Oea#qS;fZC5A6x>NQ9;{d_6Fj))&wG#3G=5$RhtjjC$ +z-Z9-T(H9kyH9duIb~~w-=m#(+E5S!zM#`v)+5a}R@BepGyQ{?DZ&UkGoR}ikTdF-4 +z#Ow3@rS(LSshF(DZdIQEVCgnIQHn|bC$GU3xzLRLy!mg5+Cb|WzEjzMliGE2Y^hgI +zXR;b#D=x)+_Jq}gC5(Eu*{WKbDMp4GDIa| +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 +zhlOetXJJO!IwJ}VuZ +z{vi5I#LUF+XZybF0UDP(%bZeS-DG!4{(6Dh_f`4n_l>#A-!A14QK0JP>}_)t1tL#c +zAlUHKn(g+W)tt*{5RHT}B5tK68dpHLrEIM+NlZnQ61e(lles-nllT%7+^to-x!1;G +zE#z@r1paQK{#3FYCOs>ze6Cz%K!1evlH};iHi>faI)4{0nfGyfCrT+wQcPw?y@=gJ +z|COZJc1g#Afk`gHJuMI^Ggf9Pf*_N4&>Ry6eX27B7lrVYCLP?``foj3h7IB8-+Fdm +zNq<+X(YKy00D}$sm!6G`44U<~o^5`U0EooN`NJ9LGNSxl`T{=XbMiXCi<8dghQ;H| +zJ_K=~1%bP%FW@S|kn7N6AS<#=8f^)z=jFjhI~1gx5K%GrYQWjv$g4C0Csa>%n?T26wbfxY?%MDv+dEZ>He{^%NxJ#?0Ufe!OlJi +z{kF4fdgRCp3dS70{;{)B!V?t^@psK^Jvx<`0HHl_^zy^wcFA@_K{zVVgHXoIqVhFY +zks3dxaKP*OM&W)RD_-+WG&TXg<|KiSI&J|?u0-fGSZk`spXEiLgv7yEy3Uze(b0@Z +z5qpXfiC3-Ww6KD*I67UH3&X_?n@knd`R_f0#XduTWP< +z`1KpEe{#6?^P=uEg;q~1qz--vCtPHi_Ex<}+!|TMNctGg|08!AOQvGV7>sEt49;>1 +zJ)7aYkuz+3+;;VGEjpL$661%JgX37SnWPc}5DG}eBh9V*Z(GAj#JoLp7fFdc{{~&E +zFC{>jbITvEt5)b@oSygEd(}V{!xXJTCsvn8G1aK1_$!mnU^^xlyjR^S`GZ;R3dy3d +z>6yIC;U{2f-1K)GYRT**XGL?h)EV`v +zrV74bl7Ims@$d?I(Tl}vL@7!nL|VrI8vyXj%7Zs<^HE!|V?pmR(VamsUI{)~@qaS& +z+vF>SPC3(E4|4$ymYr;`a&%a;gzi~6!SX(gG(N;9DyQ9S60a>dgEpNanUjj{07(Oe +zDEXt{CwY$YQ1d?kd|ag{kw+C%dK>MDpL5+Pp#t6>RwU;vuUSx(I`51`60zl_wJolI +z!=kzb$f?PbWqZ_fBj;t{IYladio48R?HtQ9l9&;%2s3h6$pZME0H~vDr+M+H_wAH2 +zRHjd*OuHc9i}1{LYm81JquWanEHG|)7c5(S%ZniEc +zd+8b@(_7N~piNIP|KjZ)*u&7;HetuMZQFL**tTukwrw?yZQE>YH)+t= +zNi*5qc($IIdFS|!?^mp~?seVg6&b+>m~HuC5JPiS?e2}Dy(Y*vS&}C5nk(W5T1yk5 +zJ427Uvy*NlUniDu+$$FQCJbsft-3tcVMvaY?u)TPD4t^oBSRizkAD?(5Kz2m@*|-c +zg2+=0k(Dh8Kc@mGztJ%!v+`NN9k3lXB@6A_*EFqkMBTk$4 +ziJ*8E-;b8vXH#PhG!@~F9nWZHD*_a(9t2%XgWoE +zGhCD(8Z+9w4_(RkOnlrmg +z7cMQldBM@DxNq^WH1#Z?=IYqS3u~Wj^Vc?B^RB@o+cEB*A>F~;mtuM(y6`+CPB3Wo +zz{0ZopTIy>K3c*8580T}eEzsRv6QTFaO?%8qT@ClJKm8(AvaEfey4wUMIW(nq#{1a +z4D9(CMta|=R`J7x0)scF_~Aend+2D9Sr(Yk@v`O`<_`MxTM;3Zr9srh=}v}qH~?M% +zWM4Ew>6-Rn7|Dw#S20I2$O4;lbdwE2GxkOdRZZ6EM7$^ouH~Y!_%U0Pg}P +z#mA|Api1{-7GP-*TT_4^GXj|tgq+r-=F(-G0ix7t^=IJWUvLrKxbr1`CpdMx+ +zCcDCBIR&Au$(zdg+PY6c;bfC8?)UJT9PLm>?_g@EP$7-CrdnGrzs}Lpq(t=|=N_~j +zbr!*9OY*?jCd5DE9Bk{er(jmV4OEU><8r+r_dIl17@F{<^JCzUfe +zl0h+8%-yb&7ipxbW)V&p$Kq2Wsd+w?Clys=kr+ES>y22e#r8a;cHQDo{})MX2kpF| +z@vsyz}W<#zrfjKe}S`=gMPxD!r20DzropHtAB>G +zF-CsE*+cC=;q376f56#B&va0WV^F`s*_63|g|m&Deu1;2-r;P(U*YT->%RG?(Z}yu +zSnqK5u)w2@vC=!7UHuMc*W(VSlsOl%{u$0*d55zfUf$vCxQJijY}#Mp?D?>|ok-a8}}!iy`178@;5je=xXc8xn%wi +zID30Km;&&z`hO2+Ut~HW{u`Wa&^6@sA2>T@pLphK* +za5k0AJDgnwfb<_YI}qF7kx=G+D&QDoK862JIQu}f1n&O{&fc~B8=QSu=X_v9q45*W +zcKHR)Harp}EqsTwk>BBL%3tAZ#r?m-+1pV+;q1bs-{5Sfhrh$w>u~!}|Aezy{sCu~ +z9x#5-{}s+2k}|$I)5w$`#PQ%z2XMQLdtoIKaG?1soXvV4<9P5da5ki^O!S}N?BaJg +zn?~{-&c0aq1I|X2dxx_d9RDkv-TMw_n;X8v*)=$3wvs@_6aa>bc+G>{AW13iSH+z +zjj-_toE`8hoW0;ZqGrG7_n-Y2IJ-EeU=x7+%b(zEIm_)C9x(I2z}dFH!`XQ6 +zaJFZ7qW6E`Yzeo2fwM`Ne}S`Ye}l6dE*YBt70w3LE{6LXoK5r&XNyGt24~BQ{u`W4 +zlEcek@>e+9?f(pCUy;4T*{Wkqg1^Ao5+7!`+6G(q58n0yOBsHuw>YpK$i$_MhSGvEpCgY_dP#YjoSA=gtLou|Nn)vP2S<`;h%7J&Y$6I%9?jL+bH=LIJ?S+ppVw! +zzrfiJe}=PJoqvO~M}CE~clrJu&Zf)%9nKbX{WF~X{zvjRINRk&hD}iPWcti=KCGa_Wlo?T{ZnzIQwSs +zC!B4*_)j?7;Ws$@o2H9g)!*Q3I_Uqv*$#2 +zwuFs9-ap~&fuz5}*>2?j-@@4-Q2z#J|Cso{gtKRwIx#c<1ZPA3pW*Dh)STpy{|%h| +zO7tfRk8=U>^QufW?cRQ&YpYu +z1JYRKnO$pyhS=fCz2^2un3%)ScKwppY3l6cmfNaXLFD +z+iO3!}xe;gN`nNvQ38OICGNU$ZP;m-d^6mKF1%Z*1?eR8it(EwT!&&1He# +zhfZ5PExe5fM3YgwNSCwLs-AYey20S5sqT^By2+J5p*6uNgxfPo0&cU!{Gu$|7*v@UA53_^i&fp4uSyYJyLecxg_|g6@xd-^rNw$Ruy>5IyC+AxDF!^-}YsOL-(~ +z)&6Vud32{mW7NqA`h(Ua%*K-MP5qDN0h7?S$4}+X=X>sgaIcHqVtrSVxiZ;&w+k;Y +z)|D&d8;Ocs4=u-MTwj-bel+k8$>LI^oqTO}-OOuh(N{5T43m~DUW+4iXtd|z!#>|C +zCgl&`x?9m~St(Obx~*VuZ<+-NzGm*Ig{42|FW~%wd!Pk{_to@{$|2UpwvaezTjT2L +z2z%B&jacGo7Q^76clnYNVrhzS-chsB$_u_6nhMTqbj>;Y#$^}QGIzdP7iRuSs<(*- +zgp>15ksJ6$l8+;s+VgEpEN#cY=klyP=hFS&ddqs~fSLV=*1(mP`{EhmQfF>5vYj15 +z{`99A(8hX`ZT1MUia_6h+@{bp2<&`bhRKg5&R5p=nqCz?Q~c6CI4FhC){a-^`CEB@ +z56zhtnGVx?dp?iG*qDmh32FwGu<7X;&pTvO1*I8^ijSKOYvi$?b3QoA1tKtT_5eBytsoV>2?e!+j6B;UJF$AGne +zBZ|1_D7!l*>L|oL`TUvRP3*{#8%qswbmnPF5f|LYl}zZlVD~geD=h&D|N7%%&;4uN{XBBOcH=97sg4RH{_!yxh~{_J@4+7EqrG+SNEq@o;YzreT|7W +zJZ|-ZbQ5qEO0;UI(;3`yO;XX-Rn#jzB#IwTh&px7v_=hRupY=(*8Cy2Oi{pZw42Fh +zt*Hj7BtY`Gg@Wx+BNA}PTfH(?_i~+4y68rGoZDwQsrl@&cfm|vInUlO8Oihe +zkdxGttAJR^U5YBf-`ZSYyx6Y2I);0D)&ivH;gQMN!#qDDg^Q3|Y`Idf0aG6exu@z? +z3ZF|@oF5{=)AV) +zBuq`;j53ikh@L-7H9CusbYr1cvWneMT6OA&-%Mm{q&GKP5Kc4Fak5>x3r~rUJ9UTe +z@hwzsH2K4EuZJqE1LMa(<~zp@QO3!7VWf7QQb^$OX+ +zGm2d^z0&S)<;ecf#f*XcY8!S}vwwgc2U+#JRv524!bfwig(q~&=IGLKlJbCD7I9;B +zdYw$L+#@xQg%~SuI``wK>yjzib0p)vT!VpdK$)jtgKphZ3^!NH^S7n*3<3m&-!crM +zy1-ba&W6;w#pIcNUuISMwz?~yfiG!%-Cz}IUA&w`b7MH&?u)bpbV8kM|fG=`|` +zHTOo=cFx_vOXN#h#fCT$XW;RLIszaEkz{`O)9ZU`shX!7ZlizNWK;;$?7`X;Ra^B74hfZj3oPx?Q5hVll6MO&aZVe7M?GA=y%*(%^a<|hprnc +z(rxFux_354=1s+upisou}2u$A=y%3b_YG(E~p@{=qE}1 +zT#?~*8;HLni9LB+!FM;+-ut#pIh{kvdks9Oc%nS@E#1|0bR<{16-WhddydU%k+I*O +zxN_cfJOHp}ex(XI;Qv0o{R!8ex5TJF^5scfy*h24G1!?vmpbz6!vcmBP01y0G-QON +zUqaxEdLeuhc$FtPr}3l3BPoV@DuF2wKMlrI>;ZbTff{kz{LR9L9%V59{^{o(Wa1b3 +z&4tp*t7*Hf&1kuP_vcg61bEmEGTZy`)b3Xh7%?+jgC}Qx+ks`a6azOc8D(972WJd{ +zs!n{LsI_6*(*&qk_*xY29{P(uXc57Sz|K>D2u8ZSn(Jl&1)m*!B-ZVZmdo@{9v^`n +z=b}^G5qu)?Ig6$u@X&t_w7n&wg#2zF);0=%ESo +zxNxT}pE^Auw?&U4xY>M#$_r(etQ(5#XmW|D0-dAlPsJrU4%bx~?`R8!Z=3)$S^b#e +zhle}NT$65C9`c?{S}i6|tf}o7qthSZ?0tE@zRuFGkv7}Ixw>%0RwRuH_sC?+g6R5y +zj6E>T-ddRt$<||LAb=5`(osDEc?n5AIh=5JHM#KdbN)sL0FG!$9xO0jd8w!+zoU?o +z;k0bzO$|;Q>hMJ?=8%U+&fcD7)cuFip)7FWRV)@`!td6%O^bU|gc1X>~{j0O&rSDq}?B@s?@v;Prwc(?rrv^#Id|szFCnp8nY%i?@ +z2#)3~{5rE^w~p&NYH+u@HECHPhz3&F4^PI)fF +z2A2r7fVnO!upalu{o6ylQr?t4c8$u{QRaAmPqe)N1Vt5RIgH$^%ePO%sun7q&vey)wQ^k9HbYB-&yGx>^H{ECnVSMUo}bty{$oG=AcGHY +z;OtujD5t65iDBy)EFR&?UPFqK-;yFBxjxZp4uvBF=?Zc9Zl}HrPcv6Kpg57K`Zt>U +zy5pnBCqiGe;2};i)Y1b@RBFy5KhvoUrNDU4)~eJq%qVQJt{nH8eU`VxP?Uo`#xXi> +zlvh3zBC2J1G)NSMs?p^K!tVuJQNqGe4T7Z;%bn3$N_8P--+`lY&M|O>OP(4*PvI0Tu-_2&J?2iK#1-8`N#Vfyo&~!*1R0u +zO;dTwUXVuITvXMMnI}89UnD^c6F$^u{{R^R$os|sA)$?890bV81hzv^vS05Calz<* +zLVmUL8M%*qtQKbGj!<+jjiZfa#U79e5~r~BHgb?Zm0f&4?t423N^hIQhSDw6W1CZ5 +z(zS5Pby+upF7ReDD@aTerf}dQ%>H3%V8z`Lj=`SH=MkVjAw<<%ZvBpZIzNT2vD}$9 +zf1F#BN9_*(3pv+95bx_4^lx8sftThq@!GhNEp&VRA7sZWF&Xt +zbl*US(=526vGsuA3MnDituPDXny?loxM7*r~3rZ!jQhTu}plUY1p}y +zGVuJA7Oz$Wr-ljeh^?`wY)*>nKq!jSFIn85QvnjzAirZbUaA`)^Y`#n@!RR}t8JHV +zV>H1)OZp2ABJk5imo4 +z0uY=^Po5u?V)6`_&eCqqAl6kjQ#ox~`}dI1VCtIzOUj +zzY^GYCiS!xMht%6*L(h#HiK=6gWLnZ$!to8P;hO>flmP<(cUP9s!Tb2YS02kiXTDE +z-Cv++GF^>R4DCayhcPt1m0fTSwv8sLmk_$L#sbF%B-NMa0j(FEL(}3l+tc!N*!3~w +zmfu~}D91t&RWg*iCddhaSC36T@nc`@fxX04R;99Bp@l19159yqWE+-0nEp +z>`YNIMD-V@2!9q1tIyC?&`u6{e*u}FR$lK +z{^$y~Bo8l-RXnWE65PgoYG0$N^yUmHv`TYr6w_eXLg`7wtiJ*!o{v}`-K|?Zhz#C# +zfO}B}U2g-AR@6=~K737JQLppkN^LM>lADAOH}c9hoYL-R8wQvPuI6M6BTnYS0Q=5^ +z*R2%DRwieP!PgUbbK=W|G~7N(IEeN8lx56(S6o`*_z~|YUEThBUK-tOb{2S?R8*Y*=UW +zpz8`Rmr&^fkS(`|UJs$Orl(vFun6j2TRP)maB0%?!;oq&5cYPGXVy_Q?#IQXGs)LT +z8=B9LyCQ&F8KuH6T%(y7o-a?Y_)nVQo6SDF444&&aCK_y7^Q*-86*~&Tp%CnFj=}P +zguUG;xOy8Mjj93R)J_Z^epohdT+-NT=MdqXi4@DMFWL3e$4!ot180pLP46k{pv|b_ +z7A#$#-eZD;OGD`%fh!>3B6fi%i>WT|GV(~4aE*mYav(%&q+qZ3U0e|gYLC}VPqP}W +zlt5333*ww`&z1|Sfn3bSQ7%Q55SlVCzwYv}{>cH^>s^r(5YAex;y`ja6qx^bzMK$+T_)`Rtw; +z1@=_GNx$W5G?wKn1;z(MRg4@-n!8xRLDCF>5y4SU3y-sWu9UEO*CU)?TIwa}_;HFg +zc%c8{2YH&}M09GN>f1UZ#j%_3XVOb{Dpcnq!gl?j`E&ZP@mar#8!u`;sVtu^h2i0p +zYV%NFt0_>-IM7vr6k)ysH(Gt~x}`xb@l95iH;42*`IqY|bsQ?6=*ZTnZAj&k=|{$g +zNZjdW?)WWQgy?V04o=g2I^TQE;3xQqFm|0SO9sU|B>ctj$ft}?YtA_*43dC +zE+@c{tV-Erb4EI+Nk5G53QbC(y?gB{;d?zSnJ+MOv9l&5(jQj&sfH*Ru5FvW&^CTf +z9H!fyAqnQJP{u>eQ>}|&P_%CA;#dnO%UIu+zrNn74fWMKUvCMIS%e^WeH(Py?pT0P +zdGjk@pa>}*#@)E(sLhOuo%N%0%K1Eapr$+tIv<^VSiww|jiZI&q +zRj{uLIwrf!x1988eQ59gB^BJ?V~0Ej(<97M1EGfph!5X43SqCsEFPG2tQI_@+PTWY +zB}O$%6*y|*jttJ^q^Gc{dMn!W}7%G9 +zR^fI>f@fcAxjbBG`YS})zUV{*FQ-~{L?Wk`$q+|+wlZ?Sc|RmDJVXn*XoK;{d77Dh +zC{~EKz&LoF%)!Y6&2~-nn8q>Z2)#HXSn>IgiZb>DJk!;X?=<7hqj8BrtkknwbATda +z&;*D9WG9Bl3YpFW-T087b*C7odI`5@8)VZ>WwZ>`}vcA||n9>_Uz +zHDSAL`IJcf-PBj+yW`wv`{AD%v1>T-6e`;7-a3htWWiOYC^jaP!J{17s5ypv5Xi2uXOXj}XTHB9yySh3%Nr3gGFgk0>WRaOdZhwuuBiU$?@pIzmL9 +zK;pr+Lj;M|Q0o6Y`dLaQR`J48232g_@`r_wM!+P2H!w_(iQ=*HV~&5fuGr#UbO5x` +zPCWwshXS}GP4!!JnE11uQzRsflQ>PXnpPKH?iRZ6(2wyvGBE4g{i)C;_^xs_p2Ix# +z;mRNL(RHD|MR&MRppYi@%G}bj;Gb~h0(LOM^9Z~))Lu{Qww8Y166L;yI~V8_)xXOY##9Gyy?Ez3}S%?_Q+D&L(qP$uYTJ|j--vUFFDnsU9f`Y2na0E%f!1TexqI3XPRC=8UX<* +zm!*D-zB|n$b26!6b*#+t`V%P=)s^{f*_lu +z17ypkdDUagm50pR2X-_eJ-$PCaIiX{vBTDPeK8*>PV75Q@uEc?Az>@1?ZrnSd}LJ} +zm2N58Wv}M~F`0$r`1>rB>JnMhdTHyE1U)HoC`d|{;Hm1IeYLaFNHFe->C&);#*gxY +z1YIt!n}T`xo=ao|h<;_gNuYgs}t%@*^{t-X+~RcokT +z_}`je{PHEjcTa>bPu`XgwTeiVLyzCS*p7E2Jd4nU&`^P#)hRu~bwH|LW4xFWJs&7w +zzw(*_=j>1nX%E@GJUwD_oWqM?P{r`>3;Ouc$ww`tP?v6^g|n;e>6oYt`*5H6NeJ$@ +zh};r_&EI@h@RwHcG52iNHto(wpx3u;SAQQy0UktjQK+W%bFmlmxnh2$4}#=~9Y67wL>y1`x17+wEybl4s3dx@_PeO!A$I4poBYqi^_sQ_f!O8bx@RZaE1;-rFdbOG`1O73ZgT2%O|lbm+g +z@9-0_L{eEEo{d!+RL&%691a@>xw%<9z#42)evVPD?<=n~n=11Sf(FAFGl?X%%bZd7avs+l2mpdanNqN+Y=%QAuqYbkG@5yO +zZF(T+R}%W0ui +zEJ?vnI6LnroDHR)#biI|sf8nAKw~1-?F_{VU+f?pQX7gPSqE2cORbzydL_n(1-h#N +zg!n_}o?u&c5lV-c<&%i2qiCZEfN-OE$VC4uUmDu`Dkke9D9p`Xz|H_<(%aS-2JGN0 +zukU)@0$!HmB@a1{+0-PgkqvUAHEb(JDlQxB%HCM)g`l(_&sZIlob>6ICBMH +zuviDhr7(|frMK$h-$bfA%zO*B;VeibB=oI%Sh1t#t#>q9zp}hQ^~#caHG&2WlX5Ak +zyTkdwa&^sV_B#51UGUR#VT%>ZhM>A#QBNEM!z4e5yg`14EbBlc=3vB<{KZ0YM6XkB +z16}5mSNeG99mC?O#nE(yKV4<2Orey&;c|XPz?Rdhz=o>D5k`Iie|rc7}kNnV)E_KwvT9^ +zO(4DPfcKu1PqI*tD%sM%2beoDchs?ZxM<{%baoUx6H;+(lD*YwK_Ru%dkFYKlR}zF +zZ9Y-(dpqSmT3N&rop6(91*t@W`J<@W56+KY0dl~owL>Nxrw*~N-PACI9qr&7;%!NgokYa!o(9yf;_|8 +zB^x{>o6gpjZf+zICRzsJwZ?Cm1BoBLF|e(2HevuVZ^5-q#3nK26)Q3DhbU)aBNdek +zsM4V+XvWYq>y-RB@wF9pt*7E0u}w|-n7E)KKcu8p;Hr7YNJyu*A3jT~ba_yWueEVJ +z-L^qunHG}wex@yCNFfT4|yaaLod{pG0lRH +zpCINGrqUr3m*b7BKXkF<{6r^{s16f%rMxu@%kYEOkHwBFRI;Q6j!29a%+JQxbkkkiJ9!NHOOCPPOp1zuf=P;J_2hhY +z3t@$ZSEd$W^NLero^3jKx5}J~8epylj7Ssb!4~1R(W|1(`b&MN=Glt@ESJlnxK5E3 +zO83;w(J^kA+aOGxmbfMEz4%I_Ew|t+@MMbnaQL+oc?4`QsUUY;6UWw`zyiDj@nZ;I +zf>7Jjetc17>xXJuagqTnh#~mifdlMmuzFIZfsEA77mL+`$Xw&jZ~WHtD7ZE3-2ox~Qz>BHz^uJ^9gBJ;a#LxN +zipk|73G6#)ZsN^Y*u2G&r5I&Q&m|imijO}!X*4=-+(A#*6wAqu?s$9weqd)Je +z&+IqN3N>N3t0fdkt+gsBb(5)5&{d3Om6sA;)s7iMap$lyCAd5=Iu8Vm>_MtL?*M(m +z@tL|Tg@KD9HiQxeF6bs0Xe!rIh1f=9T+Wh-mnMs)r*lEJWN1 +zdSJy@uIwfCYpR=6%V74!-D^leGAz*LB52k!mzw2QTy~jK@>GKbUEbShNxM3op-C4S +zVV^a9La_G_5GAfYh3YllKK4zN1YVyFPGQzOTe>xlutDl9AmqbKmkS6?Q~#D@v+mI% +z3$b2|kA?2L-lOLOQ~W8);aq~qR&*is2BOinE&8hHbAoOtoDh(nYK*^HK3@#_BY7&A +zu(%gcp7T&X$8?pkQ0#kuuhEbD`MAMa2UD?NX)SCf5stk!L$kwmG>0Sx@mz<;VnoHB +zwgP;+BckR*FOfFc%iS+HyF)BWb9lu9D*Hbi<`k}ip1LH6NXxkf=kriGEs^XmR=TQ)o6s7n#&RII1Mc&hOw3|j +z*k&coC`xL%!#4z;In3vh?b&?Hc@Z-uRj<=fcaDSd0Ka1DIDWmz3d3i}H=)zbbq-%L +zHLdJPWL9CCq>Z&BECEeb`8*072PX!^mRc|VgtNYa>MW#A}ZyO1pC`+aDn0 +zZ)gz5A`NE?X#REiY>oA~CiAjQm|-kLTG<4qFmE6zD$vjuuxCAKicfO7{x(q1;9C6Z +z2Q!zNUp44?7`1?xzGwyuzcC~4e&Col@RQ|U~up3Os5=cZXQLsN!Hnp$Aho{G6sE)3K?)WF*AMj}+& +z@P30!D&hxn0A&QDz*+6fc*Bd0T&J=vnX0MWj#z|iTpK0cG2kdPM9mtfS3%pH0B^q=6mt +z6cPyDC|UIGF$2*Zq8%Z*^7x#(6EHxXYwCYIx5N1G`Mv&aq2PrQ!4NpG5zitOtNF4YZ| +zK4g=6PM-eT;q7)LE@?!~-O~YfgtL^Z%bSl}0B%F!3mQlUqNmfSa +z%bbh7CH{~omyG<=U +zcw|_T0?FxKfr(Lx_0i5B0cW2{?6uKR)QNtrP!cg +z(fpAR=g4IJ2$3!gC#62yQOs$FS3nWx8bCUUC96tXs!${#r=v2Bo=Hb{hzF+5o)bVQ +z0SA>KHp9;se_atIt9Am0Su=2~VULBOL`5LdgW*_Kj(XfSLQ9Yj6I=4YF`|PN{9xS3 +zv?PTFK!o;s*ct>Ztg~$Llcbt(^Inlqk3GEYmnrl`wl+2a^S-_axNB@_)4_o8?Qd|I +zJd6PifMgSxwGRBjvw?JnEAodJwq8dJPy;Qj3hO`;0!uZqoMC~&7DIG~W;A!~@Lq|` +zhkFSul5;tCmnb&DcH&r5&0YxA+ZTbELa$J)6r5kF;tfo3JQTSo%^(F{@0^;Hg|IH= +z`&SCExk(U9=)#D>rvwN!0GXRp1on=0iM6~Vjb+9Vi6zHuQm~d}EOV;35oS6KIh@veDrWD)7Nf^ns8iMF-r65SK +zxFS8iZgPhwf=iPgR5iNya3iy`IvY6;PdRg1b}qVO3@$%8hrn;%?t1gro+9A_;+naF +zF~M@m>GKWK$XV$N04F8MA{~{IIA15FvopyVHL$&5!S5GAtS<(*(%r0GXY?8aZpB>i +z-rv2Xtp(7$9!)svi;0ytLw$G;TYZAGYKx-wEsiw?kD@rS>%Umv_s*!dRgp<`(iS!V +zEz;YrOv2dasVz>w +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 +zat9I1>L?(iRx9%ZS2EWHly~Y{F +zJ;5DonqgIF=xPPv#Q9H+pBx+v@F +zE3Ncs9pkv!oJ5mxl}E@4NRF3OS=xQWXP9&x3vY<5c-=5=;C;624PEG%2^v(L_2-A(lQn8L6|{9jCR&z# +zVGb>3!pt)Zm2_pa3KB5O2n?Iu!nZquh^p$ybRBN1k82lUrY +zGp~{SQ1f_H$4CY3ta5|BoB2WeY+IQ9e@(nNd^cn9JZ&WQb6bw)dxPVJ9XF9@ZnLgD +zNE!*C?+PwCBR=z!l`j)`O<5SXL?E{0Pk7E5Opzy1hV^Aug0UikKl0$qR)pMS5isDF +z_&BG9h~oE0;DL>q#)4v8e*DoD{=q)H>*o95lUGdihwP{I}gaK +zir0j!uZ)Rsmy`Su%)PCKDr6?I6_qg4GzI2;?EF>>6h?+LBaqdv%f;A2hG0 +zCe#TWwBwdEqvxk_cS$~fCTD2tbL3U&t+&p2QDaqA&yoz!NywrL>FRC%#E9OEaS0Bv +zU__KJp3@IAolGr&u&AX#uu(grn_%YETAp{2OwL^K5EgN&nTQ|f{D3McBk{)@Xa*`e +z%hhv*(GXXnKhYIjE;fTvg1V0>L&4Gu2tycrtp6nA;eHGaOfLC!(|O5zI0!)CE*xk{ +z(zc{O&IpN6$$dCzOYIhmOpt?V^#x<$n9ie@cV@dWjgbll%@({wfD<9$7gmQ2)Xl@px@Dlh9-zzvb1VI5O46_=n`+uEq)`wW~e5GJ9iLII%1i;Eat%5RJ3Cx1MGaU!pB^&`Q9}Q0NPBp8R +zvnhA2I7tG?;Sdl^b38_m@kl);LT3i<8_^)DjN&GWLu5o^Xb~FOI=_2I04OQP1uY$C(d +zz|%a##foWFuo!_+@J;5CFs|1lwTo-78B`lKt&@ +z#-VbOik4HWCS2sdfMD4Z(YpU|1$_Qx?<`R*H{k+?st^HhkuZM`0F8VOWB<5jdc#y|JR^Pa;v%kecRP^*WD# +zKTYWE(+Yxn@Sp3lfs4dj%=}f$r77NBr-!0{<=Pt58^fr6(=3ZzliHkU?-{r!M&XhnmloBo=ByaQutT-*mKIU4JpDjf73$ +zZ^0Z{s`ADCPN3YajF|RbFM_rVha~7>r1aacgqYuDBwt3(@n&$ns{MSDGsvO0CxXeM@PKD-MyF)xHV6^nhBUbB*Yb|Db*; +zmqr3wWmQRGj8vp^wLD*JTm`sP{v@H94KGF4GVvS;Qu*2&%}aA;-+uBh1>yZS8gYr3V-Kw${ +zO{`?d1tnzn&^)a-je@P~P*M~y0!g`0-%HoRZ(J&gLb;wPV>(Xn0`O98;&evCm?iUh +z0S{oXoN-z~j_k +z>9qE2sf;UZjdM+3aj>5boAaN&`Z4Z9Q7lYfq`|@v{4&bMa$0Qr6JHrR~SktIH}`q+Fh0Gb7S&pn8=GAnAc?<=Tx55%a#PZF$2ORRqTB9|=7 +zUAY}Ev1fvE!i~F8H;&&>ywZL_ra!W`DAy8qDLhuB(SCnpyf@O0B$H|&c-Pjpsm#FX +z?baI|Pv6ge5_h$GVTuNV=tIC11?g>56;yx`8y#2crXOe7yTSSQNsB4O3)+p^9{HKR +zw0uJ7`rWpnvh4j*<-3d%m{)cyQ6s11D6pc1s9@lBmXNB +z?$J1SA9Ew#IZTxDZUa5RiuX?O?bi^t3s>@I=;2{3%{butqRe#yKa&%e22ALN&vM*6 +z4XsqsM|`Q5Wf_O8KG;dTE6^t%_boI@JR)RS5AvQEpQr|W*9yv$1Hj^nhh>&^ahSeL +zKEDG|Q%ED+tAYJ_0p{vxF$oTbGp*!)64`zuw)`5>3q&M@IcjhLx&l7yT0x&0pVQ1wWjn;(HgCsRP{k8+BMjB&)FPFOkwAhzQjhRl$7k7JN=AIA2K|6S~d +zX%sG)$Pr{=*To=)iBthX`zU1qB*(p2a1>%sp|$>AELW_qb-1o!CwN71-0M~S_6b11 +z_DJgfyIG_m`1pzA7k+ObfAD3FCtb@??->)<>`3ci=$Xz^O&*Mil=ZR=#IPgf#I_R- +zPnk2z9j-m`QzA2%I=IWGU0)K1=UBknd^v-ce=E@w6Gt_6TcO65Q0{8kA?DjCc9MKfSLHm`){3?`+Le6^3{`S=IoZ?&9BAgam(5a?DsFx>DbOK}uEO +z-byRH23{TMr-1A{l+aiP^XOklQ43E}K#}OE!(q +zvqR0^v7v|xKjikqf8@5r-#)B?=pCnf)BCr|mP3@xV9QrgQY#<&l9=Yk9U!N?o~iJn +ziMj@b%Guqh#9!&LXLo<~OAuEhFf0pgT7uh8a~Oe93LLC<`#~Yyl{y6JOVH>_1L5cd +zXz0!7z!MZ0nB^>qreq3S&TF1oA)eo6Zspm7K^&2gYvEV{*Sjt%JZh=7#ZqxQDee>z +z)Zy>}``f3?Cz280k`ugiY}5FqUo>8s#yU-%c_h|TAAWwRBRPj+ZZ9?R%sDqH^21E^ +zK?v$)4Vi=1F@Fi*))q6lJ*M-1ZC0Zp`>hl?n-4EsAgjTeLH%L%x)a9++kB9teWa+g +z@82gIq5cz%lfOCj8>hDB+=!5{6~1SwbwWSEN%?sraAmRVP?#lq?iS1npV%!@fIQ4@ +z`GPV7a5d~4NP*C@xxCx%%zrl%{*c#fu&PIU(<00enjl!8X_xc +z-ZPTV&%uGcK+kNI9@vJ;Dz2C?Q~pjh>A=M};qQoi`kH|~8qeyEVUhRK{C?3PsoiY< +z!(wlzbuwFOao&+&XWndN2&V0^)!dxSkG +zJHgFX+|rm$9x*iMuQ60LCjw}te22RQlz@FWx!%ET&)V1ItO!PAnWRUGFgjh-VH$*! +z;o;Z=d*j3&VR6kXkU{~nfuAHon0PbKF`U88;S`icO&O(_d)Qi9ksP-}Nr<`r{NT;O +zU&p=fb26?Ua}a6qik@r)UAE4sOe0N5Dh0Ni069xQL?8$?Q9$>fiaieQ^0k5bL!8TT +zlIqHVkYJWiVy1h>3%Db(C%p2q6QMy?b<@IDBnr|6tP)(6@wnz>rtfA6RLa-C{cREi +zvl@kZ1p)>uAjlt(JELxE*+Z*pI!p2#GH>QCgX>uK3m~`hCkS_QNO21W5wC~X@=9ct_go)rlA~VibDz@hab)b +z-aPz#Zb+gl%+rXL>6B6mm6Rj5X5NN)>{?uUE(iAOb4zc}X{nZo2QWxuI^=1t-WjfV +zV(MWhygvyI?GL84st<5tM_@Cr0W$B3ZI1ptfS*I_Z?hvFM=t1wI3!u$WtkZKfY3-P +zgoTYl+`<_y4kHrqh|p(1f`J^e&_nOqB;CG&JNYw4JRNS0rjm@w{MIdHh$QrY4e@YJ +zWH`0EX4QS}-{dytlN{G)GSZbsCdpxOL1pCTtZ+z$eA39Zc-JABa{!(g2lkO8G`bK# +zTce_U$t%9xOim^6&@9hZfP(1CA5)c*nyMr&pmh7ZjmU(#Bpet%Lg&%l)!?!A)y!47 +z++rB#R)+^B1w~}Nqn9yF%RoBg>`qYuX(QHgz7?o0#oK;;RTgQs<(3P9c2k82*+>Me +ziNJw>frWR!_I`T{Yw;WQ#g_5HgTM^(C7SlWKi}nvI?D#un>|)m(HM)k60h``698mr +zQK1oz@a%n=pDEuo)%4LaWT#O7sTU$R%C5mDYh7)6jhjZx{|txHs~I4gjI9hFlWWc8 +z(Z^UCA?9;d8V*xp%iKp<0#o7sHUyg +zn!R1e3iFfK&R4rqzXXkY@uMu%F?-m3b%pvYTc(alU14ulvgLz1+N!{fxx#*7BT53V +z0QAO6Cyc7B|z{$7Un +zL73=beQ%D5-^3(6j<@2Q&HR!fgrGpv&Lu0+FPYG=MU$W;1p>_k|%aWC4p9u0Zm|}$Xvyl43k0)SVt&&FO~yV$n}Ki +zrn^8uErCRn4Ut4+@9keJOaq7`W!QJ+eDxU~S3OF_IqW1b*t@tGR>wT1vK(xtZC23Y +zx@)WJg4`$~wL$rsFl;Y +zf;L*%T5rl3-zZA)C$|37$Sp%z0U$S7BSimp+yp;>DPbw*@(;FG7KZ}&y7rS$4+aZ(Uaqmr*5XN`j86kG_c3# +zQy$n>n;R^Acj-2{wWWvlw7fkva6a?7E)ug{%cpm|oICWp$M2H)V`7=ku2uER0lLUw +z%CFhgj^3kZ;q>y+4u7@hbK|RC5XZsy6_?DtwRJh4_wnw29Z6>^rKwiWFK4UU$hW8F +z>+$&T^6~NA$Xly)VtspH{kYc7?|SR{`tmxpwI_CDow$~_yVBE8=vuF}6lcWm)5qmi +z|6c7-bjj|7gWv$aW)?L){jmD61xe!IxM#nepd#Rn4;Gvmc#{w~{cSf`89*K^; +z2{>5nNFG6Cmlv$r-HGq3E-MhBpLuu4g@c +zVzisAAC{D^ka5iRq9-CUc7pQ?Y!QutCtKHq^L6DxZQbWxx{}*srtx3N0sqwqRW}NY +z|G@2SFXx>7BL#w@c|l;F#n6K$eQ{z8dwDqIS4;p=l#Umnfz+grYgpV9*b)t2=35iu +zFP@))OnC4+qCFp7a~?O%(YPL+!_z%JKE6I9*mHl%V|Gw#GIsb^?birtu>z#73!6+| +zeP6qQq|qIGxDw!}Pw&0=w}M8k_{)VhsQv~jdS}bLFSAI$4p|Q@qeJBqTIvLVWsBWZ +z_A^~1*s;q?{xMZ&EF+FeZj%oHfLKlR4^I4;i~*ECN|`sZvyc +z7w(*q;`KEwc$to2Qn^3L1O8MFHVx99$W+kb$vubk7RYC)3!FSy+-o=kNk +zR{)2`1VD;-SI<)(|G`>`U(`XYDaanhExLDRJ-;yJhJ|)4!p)R9Ivi=++V)0ORa9QS +zX)Ccupv5BN|9GjdPP^WB3Z@P<5VeGab-f`}Mj%Zd3YPDs>N)7TbXVvz&rnqJ%VM_5 +z$!31J@*rH6uPmlJ2^_Fj0W*EnK$&v?0z$5(h9MDS7^wYJ!eNCMz#^im>ZN|+ +z89JeXA1db=oL{c?wQ=Jm>@h*7Kw%5gN!9Qs`m79ZyRO=XXbXF +zO{K)~e)7O!DtXBjIwTn;dFhuLNk15TF86_`F*XA$21IoZ83>G@|9k%9QBibsM0v3; +zf%1rFneuBHnWInj8dB>Du&?5>>gF4|Vk--Uy<=gJZ{YV!ZowN;Ui={YpcX;kkGSoA +zD|l*!4cHO>W|LNtvD)IewJWFMsL5fjaVcqG}fp}#-QOzAgBWA0qC%OK=b +z^zb^LA5Wjrm|FmB*&(G^SGG4`p7Hgwf=zFiIGVKuP^dI9 +zQHr*H_^8E@bo$*bhac1;@Mfz2yTz|#E +zZ&VWuzb6cZkYxsAUK)@rWG57_=B8?1Fx+K<;A20&ReoH`G~En7@4=`qnZ+ojuM`p{O`Q6rA;=`o1J==2xVJ@B&Yd@V1y +zv9xonFaU3MqHLU)Th#{W{w!{i1@aO41+*zSNfLS_c`JJ(oHM*ERQM6OTHNde%}|`a +z2lOqz$>eYuFUBps1928N;3-|WwktEl+a;H@1?!|gU;EgXOXc;FoyFy&&BvGBXCg6; +z-5#Oe>$WfF**PLiqq~sTTr4x?(z4NQ>h~vpBe5H+OKj+^^!O(R-lgi=qfO%GnKdkp +z$9JukNv$T$J?9)KFB-E@>tU(N%4HOocy1;HeCGVXNP4D +zo^ZW?;PzUDM$;q354hdu|9hUevkrcymajl!4(HYT2i#V>`w!d>BL2OjIrk6T4oD-C +zeE*AK^gnQWT{eHgNUO=)8#)r2=E-|(!X=xi+LCpMMfXb)~`}u)IYPfRXlM}N}*j`?kw}K^Lk%WGb<{+|AE_YCfJlp_qd1~ +z2XtX+%8dy0iWO5e;SVG +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 +z2w8-2 +zD9GJgMSeerkZQwDhy~!?zOX%hq_4D!D(2fNXd!8%XX=n>{7C%cqr7hm!+iEi3f@r~ +z-}ZLD=vy@c6{Ex)pd>ZK6GP59)S{_Ec-Yxz3bER9oyQLz*in0qlmi|* +zk7`RoNmpRze)R%avlVM6J!8JSrx)>TQJfIK=Yn_;qPg%Nk5}~QM^wR^rN_-`hHfCm +zPZe9N_PJPa(?lFN818uDcV`Iz{t1fM=18FJIf>#n$I41+G17a4!n{Kq!N7Y0`SRmHNNAG@oPzrEgSV%?s$6CTjWEKW3 +znpYJIJ({oX9C;sV0ZVFX8n*&W$#PAtK{A5Yz~dlBCQ@REwW>T{uwn@YlI@=#FI-S2 +ze7>IJA3iShUM=$_(YB15$ZynSUn158n2tb9DOKq>(=ovKH1sucIGi#WbR#5k-5iA> +zBQyMh!D0i0OdC#DdW%-wf5<+c)ft6YlfihC^dsQF4Osu>w@Zslr2IlxW7M)ix5qm~ +zUe8t-Yeq;bMbFDg_m#hE)Lx5@%(YI*f}G;zWGyUM_GH1YXSDzwv5tm^`74O%uM8$# +zkMcUKp@{(YY~};=c~J7j7A}*wFQim(T--}h_^0pd(8`*1iSTB!ci%c|ZMDwye#08H +z2{9P;vrEutO{J(7!oo@_Qdz=9UKiIZL4*EZAyVFO3r1h+S)Jqfff7rIm<=hXp%|!VhwvBhF +zerbga>#ClkgcxZRRS+TIeR=f}#Lw4KqrguDpz?bRdYUfzxKY1lKx3 +zdJCl1*5V$4%n3ERvqJd|PD(kGLwikbHzH3{kz6jlDOby)A4e!Zpt-rzbak_D^pF^w8002l17VeVrL$CYQqi6q1s5`E!Slgp?jr>5 +zmB05-2*X6gS|kVw=n_evam{WTyRC_u!ei}|IDEc4bZ%l&QXfA72tsH+fEgHGlP-m( +z%vC#WxPXu;yxBD!7u=hGyr@!&+{?)Y@6cWzRBacg@{1`SU!E4ydpAz__EfT|386<5kP!pO;A16l!eL+B7O|<$2BX#yVRH=d80 +z;kR~YNv<(;n03?V84^q9@m1Kp(8HfgXEL`&AVliFu+u$Zi!r-{i?;GER5b|w4A15Ui!4p~LG;OxE;*eCrHtKwRy-5_)&Yx!sCkKA( +z9MMs}-7?KJ(UP0r=}8eBAeTgHDG0FZoY169E(q2kAUzdqT;zRh@ehHbmFcPGD|S~e +z515SUKaJg$K13iV;v@LQX;HVleOk~K>kVXHtyITrm*JbhU@5kBYpNaJKK>Gf0REi{M)Ca>DOdIIZ +z`m)s~hwO7)iO4t)^-qMdtzs}7x&{172~qdoU+oC-A*u9CN06;_e$>APBa0PNG6fTC +zJ0OrK8sIwkwd1$kr2-AFYwMbOgj$OCa?B+K>qfPoR9|YM?4YvnWnU)+nJ~VBm=v0R +zQyRrxO1-vCH_74vQAu08r}C|oVX;n-8?CXhk>CWbU9bVo)^2JQ>UE&&d>h=9D?4|9 +zIpDr<{~FwoSoePoZX#MMI#g`!AA$Pj{~FxJ-v;+w1~z2=x4{h*@WXMPRNC;r4Q?UT +zQQ=4)8q#gN33=dt8{FP1Wd!o>zlmG4yFSmls=XWVlNyKf+fu%v+y~PEqGgz5(o;Uxy7AT_P}d +z?0*~FZ==0PCBM_M{x!G(V$Y$e?bBgO07L?!lG?Avw9|C|F}SCSlScnBxLM@B4Q|+= +zzXo>`l)QD2{m_2AFG;u{0cNbA=lg8?Erzh-8e87C!9C=5cR0nf_aB2hqTH~E6g7aX +zc=@M{r(rpQ_R#)RKO%W^M&OHM2iGa3d=b;rWxqc0;MUm^;uhv!v~^!mFy-uRC8*hM +zEga`Ds#+

M1Es?b!|p;+q8qS=hJ1ecbX0zVcY4|JUG_tX^gr&j4xS{cCW8W^gye +z-@?y2qNTTd7FJihf*LlQv15mF__y47a-91S)TE2ciJrf*iFb>QcNcvmyaNwGdEqq! +zI>Es%32r_)-mOW{@p!nUR42Tp4A>U7 +zpgAH>^Vd;uM=DGDg-A_ycaBKcAh+NN=cxEEVN`C6uIBRH>Sp0yE$FvSfucAGOL@xo!5qd>u&~W+ca91P-ACx*!u$hRymN0WfTYS8AV~y +zuNZNzeZJ#Ov`$EH>C-*O|0<0eB_<>ndybp#=ifm}KyN_W)m$ziJm8b*l8O%T?oY>* +z-{j--e~kekOkA6N^i6R12(hmvp7YG2A&wALpDZ3rvT#!*S_OeFd1AO1Iuxe9HzOc5 +zHKaM?(UY$4Ci8=IzgsVdPu8C6oCT>`$pIfrl!({WBw~^^iMn^lVIG5XB={+MHOoaq +z)}wnlVZda{W;PXTN%OGfywI*xdt)Uh0DOo~rD^039Rw!hnnl}BWyB~s!6p=6cL6A5 +zDT!I~^O8D+_0sKG^N?5p4B}6Edd}{A+ld#Bw%U?smvIuTmJ?6hO +zbC`p&6+Fpm1Nz2NdZ&GlX+ztspptQbiUgrqLX-{TNA@D>H~JAHK@#alNfC59Y($iM +zYkm>@tDdeBu@s80H^PHbqWvffG^N~?W2L%z$VR%rdpl&TY8^24P +z_@3AckB$*Mu9eHXBCDaq1DT4iQ)~)BGv)$Lem_$-iBcvxIU5bH2glIW7s~czL!1IRVtfNkjfiMdw|D~lSbI>|+l{7# +zn2g>mNRqqM8os;GeXH3NI7zq8cRwM&U&;xn0UDwl;;oRy3X%RCDeS30%m!G_vLl^}^5-d~2>Fd|vR0H-%z{4c{T<^0WX4=Cr400Y2(Gu$d=-wZeV|1jKH +zY;XZdwhzVL!nxhK45DemA|1XG4yKP6ah}Ty$D6r7jTlSH_=6$k_=SQu33|GXtVf-* +z6HZoMdpv7jh~2(0aK?Q%{D1d@5_Z-S-LZ=!o-*^)N}A;DJmg4T2NKotj=$(=1>hes +zi`d0r#>*!v%6)4x{DGIo4vgVT7kqwTB(lZwsc9W*`g2W4(mxH32u7(VJC-`gbxb%@ +zP_~2os<;^T(r7$#4kXG8?3DqOVitfi(wA{V))z(rd66?zlCc~x^+@U>nOy6}WY7G03r(5ZtR#%?t2j +zCDc(4HsKn<-$iq+McVE}Pq@WS6jL{lQz{o#hG6$S9<{?7>2dwx>VvSO=ekMb2 +z5;xE__?i$dl-Rponm>s9iQC80t*+`mh+2F&UySmW^qJ*eoc?@mKVE;r5Y_N?iA_#kLri00=@o!&j7(+-DI +zdbh6PlSpieMrprBK0NF+qxC%m4p{hsWid9QmMh#e^5(h#gVBY|5>1gD5ueN^Y9tQE +z2CV@u*h&lbHql5bREo$5J3#i4f^J6a)IE|$fOz-b`Co^-tc_JzmX2o3rtUuu_kvSh +zJ2U9PovBGl!e57bX7nG2o8n)GTT{T-<%xE53daIV3J0H8PfsYI_IFvWKHri@TOX-R +zX&xP<<5)xJkNJ|q=9a>J`nM#A$G=5s2 +zg(UnqlPzOOLRtA?@WOt2Wc#0?K4K}9Nix`3Ac`wFm;=I@ozC&1`s#Kwh;8lg#4$d{ +zRHvyPHpJ4G%!vtq77qchB-iJcW6p6nmlmoX)Qi304bGM@cwCq2pFaBQBpgAeb2c#8 +zSoV2?PBJ=qYl8q`WaW8ubBg04Ck+VqMR{X;R^KJKV&VyHH5fSBrmdqTfRaHyIeVYx +z*X|6ge=sx$Ak7AO3#oUYY@5udkxA(;5VyP-e5AN^hsH^=LQg4e7PG$@A2^CFF%v8E +zLLJhT*N3`oHo(fEv*mXN-|S!s=B|iNk=_BDKP-e13Csy!rAk5D)sHX>hXGC^S)_&P +zGV=-x+>>^K%&;|e3GG>;1MTWH0OD37gN>|Tj*gguyP_QJTCIsSh3gA2kK%WNF5-pC +z{UWK;;)K1Re53i*?tM(6Ho~Y~v|2HUBF{L~-hAPn_Jzs@QL@d1#MF-{tTlW0*bi)~aa80C*0A;_FdK&!&_qA2RJHc7z=4QCUF +zRRmltg)&4(e@l=*hbC%qKRanDW27Cci!5vB`13X$2(GN@z*f%Wio2Gig%8<}){U6s +z%3SH@izhlBdTT-(`DT>9C_3}t3`x#?_zNepO+6UP+##0ifI`BsLr#s`oF_JD0AT9@ +zQB5W+n!9tNlqNheC-uOpwi`a;IOicnsN6( +zZARg|PV +z%hUf3U%NpA?&sc$2HRfsnY;a>YIKH}Qd+o%2Xs;PRkbmqn#ri&?gxIVm2kIS-P?H8 +z7*&T)&!m&U`;A8XCBF_JMCk!1=iqOEHzZKZac7C8w>7LOoreM$L5(0wqja^aQQeaT +z!lDpYQ|=rZ!1H~ZVxWAhQFTT^cJRVZEV@3gJmro_A1`k3u#S4`YWh!PcFU`*CWn>b +zTOHb +ztpd($T_ek&!<)iXE3_iSO#t&H3yx)H!N+1w0d{IPoU^jm)F9h<3&i9Q-DbJm$6(IE +zMCzJ+F5CEN^D{4zx9aEo+LgXorx&WqCQ2vV{eekRhW=U|Y@NXMCe@NN4_!Is0}D6C +zRL%i?J*F|LX~gMD7+tqQpf;B=*Fl)CFOVz97&HHS|wNpe*Fj4rHv-vveb&V%1g(y;Woyg63f&A +zEhi7_s)`A+&9Njd9k8$}Na;xcx7)uwT){>QIkLEkE85@rxZums#)~jOi@;hu<*!P21GOU=SHS+F8Yzol7&O9_~ +zJYjI^6f*t;af8b5K|!t3XdC?(#7$u0mhcU6pMOK#_)y;vH_11|J#q8@K-`PAU3j}? +zCR?_37++3A=2t$CH_ls9n!-{KYu*xlXVBlPe?{&%415o6x-k07mBq|BnaQBNJBe^0 +zt`V>B16ivMvk`L0Q6SJPZZDqqzaQBwUV=CrhT{O&D}RJQ5a}0t6jyXHr$RYIsWz(Q +z&9~DQb({LXBl$K6dUJ`^=q)P_CeVRZXS%|*xacx>XD0xQ0v9;DsuU(Eea0d8>mSI` +zRF+zs*>aSYQgyE+ +z$}O3MO8vfmLO*PL6>m|5F(_JNYO51Og|aJxaZHKBAuXDa%1B>q@3a6OvgtNu_kY0I +z=cE&G(ULV|?Jac$cd!tC{uTV=@OaG7=0M9)B^D@-71%XqG@XZSBrrh)bB +zxJ;!#hR2$(@L$9i(5vtJV<-8YO;5NK590O~x@>jV6dc+0YM-Jh{#@YCfts2y+V8h{ +zy3CxF#+^)Sq_4%<=N+>7WmRj$J^*&vouR!}uuC=7%JF9BAjthtMHYn?hgpA +z7fS&fxZ!1Z&3N(p@&51;yC#Q3!!=AFid89h&=%h4bHL*YUt{j=*2)FmHXBrL2t +zR$AQ&{Cc;Wc5f4E2^~s7wk#)&$qyXq*#~u!YuqNn4OTPw_lUUV4^W~lGn&m_+1)S_ +zmi%y6$#ou#=pf-zH9T+7APw&Ri8#8jrdW4!U&qx(uQ0&4`UDb>`{^=i=cOFE!Ax>_ +z!HtssP%yurKqECwOU7Ty`P7sLd-eh#v#vsaA?}4KWUpHXhvtzyKry{uS#DmGe;{t( +z7}qpsruMAbR*Y=nh#1$6x+p(6JBJ_AsU^18{?uVI|3KUT02^BsAgc-A6LGz`v-tl9 +z;yho~byrL2ZY +z&iWb)v>bSjxJdXY&!%5L182)4Ycjl_;HVjI3>CBD0H}^K)Y!p|=)S*6{I8U3A3S|X +zHEed1oa(DSvxdyw2FCq<|D?q@C(C{82JzIUje$$QM&vuUwNYsH6^5Aw8RDdHRVg_32_UaAWTp1R_t1rW +z+P>^*N@fj<(C3c4T1wby(cW-7Eo=`vq&iL(?vHq;{EbQ<;EpR##jZ;z +zXp%Xh-<$EFg@$qyAmg1CaC=>8*z?`|MYqItC-qu&fYda6ym$8*0D6G_{9aM3#*nT{ +z*B6#(b|W#ES~gpm~Cy|k+c2H6RDh%ZAjH9v*(qBwhBV{h@Y*%d%M- +zlQC_JQfTeo^Q{fqA>Wol`o{oG3o^^E&uSu%y +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 +zDiZ;ZlLQWv`2%D3X<YNC)o +zyUs|5qPzQq7Jist&itM^%0y;}10Lvm1CTY63Fx=)RH3Nd)^j6!K#!)$Do|IDBAn5% +z$paCO=PfJfFMtf8d{HmA%j%71VLHqRejqJcsI42780MQtYQO{!o53TERf%@#lQIL~ +zhPH1RFhHgC1hiSt&mML7g`3Jg7XrHY)(Ft`gW~g0iR4>}T?R_F%U%hKk%_~O?96=- +z-dYS$Zdt@wl*uBBd}y@4Wr&iWGuU?)S+($^QOaZ=vO};lShqTyDg$v1?~>En?1s@{o&yzOT_Wrs&9BzQbwg9 +z`g3!k%LETFL5&g-vxjTv!{kKas=l<1nj$@xxV}sPeM3dxG5y&eNxP(n +za5$vYyI;IEg-Zv0wiip&M!wfyhT|?{du4Zn1SH7h8qt%7!8_9LlXmw*X3a+5SOtkD +z9^x1lK@f@aB3F2&TpZ7I{3Xt50Tbz3Yg7U0KuQ1+GFoYYs!9*^5mOtMN0uQfr7nSB +zJs(>^Hf}L#nfmzI3Z{X#q;Z-uvEmV^1h^()ri$^E%8N6|d;Sb%NWwB>mAn}b)WIeZ +zQRE5c9t(jVWC7rnip}^#bQr-kTln(vXKmZfOf?vNBaFtt{i{EyCo$4IJ+g?Hn}zm6 +z8%mq|$>P^p2v6w2X4;4P(C}rX{ljo0-tk2G<&CTVdG^yJ_>E(aQAZz#ET(JYGgMeC +z)quGKpH(ZN>Ykt(j5Xp$RL7IP0RzaEL$4mB%20^1q)&K@65KAdL_R>xu^ +zlpNkTYKd^m{C0gf+p}jB3Tq4M_N*q3P3|G0lz0bBqFPL44;^aH0HK-ELs1TyO29_n +z58Ws>n7${YeCzg{O_dnpRhHNSwVe0k#z;C4hq7R=GTDkF+&|UxR3|Xv0bp*TLzwKc +z7>b)PsaI+K^2<++E-+ +zh$zRgdngp+n|xjx=^D@T=w1nP(MDJEOT`vJ%)XH7ET+T!!BLGME>hH3g>hdDr_=yNy0PA$bV>THY|!j(GuB%iTm%}>kmg#V +zxD9L)e)CE$fK@36NEZ`myC906?W`Qzj_LK!ABxl6$f>Z(8gHi$Xc?CIvpQ2;vK5SU +zl&@n!t$H`vor+%TOEUa~FOQtYHdnMi-p;NLcOH&DF9?UOma?nw&Zc&Ix4IrNJ`XIC +zn>8rET0raS4!hLUBs&3Z7Ffr<~~)g +zDg55+`s{4;ta&LvB|2l>$AQ0vQyGpNAOGBB1qCx*yn~O$SmSFR)gv$6qRzhtCtN37 +zG6of8^ox(|*hbhO;=I2TZ0d03RVSsBtDV%fyL$N%Jt_xPJWum$+{a=A_4-Xcr>X&B +z^2nre(+x5iY1OYs>c-Z{6^!K7>tIb^Cnz*8B +z?J4GxP{e%4nyw|VooK^?_aB{e3@JIv={Y&{2$<%keMe8CREB$|G4sl$n6q_n}7C%465<8UjU-eZvaFGASjr_@xdDWUZ=gywtS90syv4 +zA|?0f$`b6H1Al6$q=-Qq0Af54^IGEhG6^XwzpI|Ufr_ci?VZ1)`A%(vWRl&&R79d% +zJ7`9(*INNGA?5NCPL3m5oPv1Th)syr^%N4kUm4cHt8eHcTkEIy#4h$yq1Xwrut5GDd +z;OhO*kr@&dY=r$fzKEDlC-qSm$&;&FI>@ObY)XN;Hc#U+P4$*PhSb-S*DHDhl1v%yI|6HQc;h750i6%{L~Bh)!rsJnoevt-N|ms +z2^1O(n3m?uwFm?oVdxl#Xe-yb+@vn04 +zaCAZ}AEldSs){%xry`fV#4-KP+G@OgY>6(pdAyXCbnk~+e4-)`V)yG4Y)^mJHi09W +zl;4**8tM4m_y%}lNzC4WZ5jFPd&*#VOTQ< +zkSZ=>^Y!Tjvo>3L;^lge?=w=5)f!&Sj}jKuHhWJ#XW7`cZb%_7V_%PRe7e!P@Pk-w +ziQXAv-JQ4*UGG<4DLAd=r5;?7&hnQ-+h)zPRW|A8$|h$fBX2$%6dnuuVau^J*R?4a +zZPZ;4^`D#}mLYYorR7c*dv1KcA(pyCaqkqerCYsE%3m;6?doOPDktx^6)Kj-Vzl2L +z`aaRS94B=t%5^ql0$BEf5wZq=*eeUHz4#{+g&&?v+AIG|o`}8IO>OorC{OrTi?psZ +z!UQvB;O+#ayLx{haK|4G4=G*Kb;YT~dNg=oVY7iO#U+Vsg$DN{%bi3I{-lH({5{2o +z>=IsqyOy`Guc4~xU3(;<{hcT4K(bMN1^D{jR2egXX)+?%8Zpb6ec8>v?Kx|$YrX=B +zIpMsEpw)Q@jZU|DGiD6WF1OgieVw~lVH{HVxa3k>M?q6wlY$z<;9m$TPD`9OMa +z*ccF8HoWj7pe3wP*>djcA38mHubSPxE +zs`}Gs&XtRwyld=or#1o7kg_)L^WZ?LPNx%@Rh4Gt&ZaBb(czXC48mwNX|5JNF9^T`Js>W?cTex(+G)2Smz47ER-FB +z+>Z-r3ONqj=SZIz|9l_v5g?8FlVyyYRKEIu1jlxQpl_#v@H9+BswWd_ER +ze)4N`4}Hf<7%0U!QiV0tBi}!KkimS*h0G9`@~F;TtLAqeD`g|eJgC4$WNAK+*2a9| +z(N$K-cnwR)YLg)krqXc$7wUCj>V$O>c?XOG*#i!IWRe_%iMR1K2S=QC +zRK(&e@hV!=W{sfxp|sJ&nFK=Y5qdH<$_o#0T{-Zu8XspH~Mv%rMWN@Z_&s +z@E3X`cdYn)nvcmML|rjnDO;^vfxAY?7p_X|{~vF6!ITBSv<;i??hfgaPU-FjX({PO +z5G16frMtTXq(M>|q@+{2yOi|32o>XgYQFjY#O^seyT=|-C>w4}4(8AZlzJ+}#;z1j +zz8t_*fa}+>!&}Ir2Zck^l}h8WZ>c>(HmknU8h@vCxV5PJq8x3myEi2X(?@mCZtD18 +zPu}ne&Qwd=VhUl2ka+@S!~y6a%?LX5su_Hw=JO|%7wpb2%Wdh-5+!Js=mWsO_6FSd +z_W13`c;Vd0ftEp$h)R&a9U;SN?Onb2JSWD!P;n~Oai5`uX$NdzRVdRwGa4qVl9fbC +zcHckEweyY0&(KoQNXw)0K|(uv-UPbN@4NQ+DZ{(S%xfL&fllnu9LUpo;dir$Ba(-y +zt*7Vq4rk4uJPIl#*zjTrn9VjV4>0`&a;-z?CBd1U%DSa9Qisb=fG}BvTrVmIms?T&8bn9puI-ryOPsG7^Eb +z3F&v2$q%rU@w88JC1SiCB;oPfo=n0A9=NCInY{cma+1%$SW4`jpQc~e2xcI?(V^BP +z-ooXpeRg-`qdCT%no5sGpgWm}_ +z!0xgtW1*;C27_o5>p-06rxT&w{QC5nWY^(0-WP~`1)Lk0X^1t+$lK4TUMJHkVY&vC3U4pxPgQTd@PxRX?x#rfGQXdn9@+S*4qk&C!a4LurL;LzMg3LUieB +zl}rqWlcC$zsRYTFX$zq4PRDX7xJ2WY>&-(`^%2MKJD8_5v(+56scSE_F=gtkzkE5h +zGBiCOXgVALVNuh(Jd1U^sO~E(2V#EJDylurw;}bN)7$BQfS_K|>r#msx_Q2>)mS?) +z5iG);aC)}H(&UP;SaP;51&xrgag@Nfaldw!j=p4thJaFu_#44+SZu)X)n)X6-~jK_ +zKAk#A@P63yZH#d=~GweH6ZcmAdxn>DXjF5W&u3 +z@9(qR>pj-^lgQ*>)<)EgmA1An*8*l1FFwmvym~joUqSqNvrMk~b3i*khySa6XS$%! +z!z~JHd~#F`>p<|*jzltbeTovgu&_vLKPQ)uf9uG~IaFVUea=z}8_ +ztHKhmKGuX6NaWdMd%bpot{=Ov8B1KQS2Ko*P1)(2KOqa4Fnb;8YYb1V;vvsY91TC> +zp@kIgVvMx%dyhxBrhJC7WSQM;(Bn<)1AkgZyf={%bu209*)8lwn-%$KtGN| +zUOZkIl_(D&n*StdA_U^2#;aMcjF}Lhv}^>@M)TU(d`IX75#Ni)9Nnqh)SpK`n-J6SwY?vlU?=%Dz92PSzcp5bI2hd=O6_9MStuevH%cLOaK +za;AG%sz{DMLa_+-cZ^BNQ}bqKW0``Fq>WnR!>4dLNTko?j@9fEUgu7VoHbhf0HrN+iXW@#}XQjDwBzi2^7Q6lc3S0c4_bYGyrdG8sNg07ArDiynEDACmLf{ +z*K4P9jJase-&y9<9KcRuHJIRe$<2neK#-(iF|mQB&L2m0R^Uznr@aY6Nm6_X{SMdv +zsddbkb{Z!n2X@Ip_8q72$5)(hWWa~>Wpg$Wuw4?25z>|-yky8tx6#vW?DvA@-%E6F +z@!CV6MjJa1H;iux^PK66kO&(TKM{QWNNqbl0uA&N#3^$o=h@lQgTg^JZ^;aMmUs*W +z#ATvHAk_B0c(@_kuZYeja{VYwZO^SH)tq2TUxMn>zvdjpAfAczmw(e3iCL7Z3)|#Q +zsH&sFRR#pc{iShnNT{-D&dOa?(B_QX`ewJM1Q@f{0sD)L4&nPz1u8?+9SFOrE6VvJw^4(j-r#JpXMD+ +zngIM7Zr>rIzi*dnahL2zC0$_o{wV7YJG6YIRaI?Ub67bGOSNw;YiQ4lt@vuz=krC- +zJto$KRX1@c0+d_ChU!*3Y#E%5EAfsn1j;z$z?e|MRVL;vdl3SW!25wS&7$JJ8IBz5 +zJ?&_w;2S;kNDa|RkhOCyIWh<&Vp9WbVJ?L9*y^gsE>H +z*VC*`4$I65vD7*6{j#;BcePZRRs&&TB+mV1%`mH&7WKsFgc#!(S>~R1C6JvXT^>8# +z+h+$x!^J-Kw7WJdSVA;G=)4q~?9NQg*(;A%ZRZuj?AX9rybDj<(%Y9*ABVre42?Um +zXCx%3S|n&GK^HxdMUh;$(0)h-%Bc$X0z?;-h +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 +z#T31^77;NE5=xWd@(2{PB%Q@^c +zl)%74qe0JSY~na#H#pLUKgI13$CvE|t-73zeJrQL?-*p{lqm8{s#<~uUkuV7oF#4N +zc%8v*lvW!A>i3-1NbU88s~L{^iXWU1>`Bb%tCGfd$_Y8*t>-4h{^rna*DfMH^8D&F +zP9gFu89Jlz4oL)2W8_RsC)JwPiz51@F=|FYLvIlbf=F0E=1^F0BkFuSBRg%@a +z_67`q<0Pqn%wthcv|ys?+D+^chEF{3PdN79b?=A@d?M|ON7i(MX9wtJPTkh#>@xc*|eKrRbxP3YjWO5GTz|XkS-cDzWqqu +zo8c=rcs8wo=`EhEyO%Wwz_WYq@NA$MCZ{_*dwwu9kU8-Oo?TgehiCKO;@N?tK2t|9 +zMF2c|=MK-NhhHC0E4DQ&*_fwtxxuqF?(uAh?TyDoTtHGcc=o2UFqTSxjxXG|8bQ80 +zJi8fyXLG3j#IsH9>F{sy?0^FRo*mzq#Sg%_K7>CfVMfc(&Coo}D!Vz_UjI +zcy=`a&-VU-XBR=1{=l=*ap7D5cs3QiB^w5d4s4de4?NoxfM+YE;{{{^@N5Kc*r-`@ +zgy(7)>!jt0eJQ<0MFiQy~nft>g2!N$-J#qoGX||vKJD$BBmhkZ&&(^)ivnPPWghKD|Y@d5PTebHV&vw7Tvx#o; +zY)4oCp1s(y-0DHL3Ba>sf8g0@GaT7>c=q-0csAiLJX;TdXD_2tH78}A|AuFO`XV&} +zz_T~*@obplUwF2>ni=ICo=s?hO&I~ev(NAFZ1X!jd!H>h8O%}O7SGP(8Hobm*-=@1{Tc((5^JUbXo +zUaU;;4$p=k_=#r&sd>fXyj$uyOiw>Zi-GRA!L!o=cy^`LEuKxgxLU^Va*JoTaNpqB +zu4OlPw*N0Y+Yf+egUj9G*)UiDJX^x)7oKf#i)ZiN;n~M+f>dY#JR5s)`!_tBS8-1G +z0iIn0z_VlS@NBwUJR3INoDqO$`@lcIv*}G-Z}4p8@@5uK30DA~&GG}!F1p3D!?Z}0 +z6>jkCqB}fW_8!kZ2H@FwT&C0EJ`eG1^i?7zEnjaq|KIRz)ao5iQA;4Y8$4TWkhAi2 +zr~_PyZJqjkqa)W30)@!`{3M?{nhi6j`yq#-{y}`3DcbtCU +z*(n=TSGRa}&qF-B27qTnrT)aT(cl4ic3}T4o=y4y&mIHd*>Ue5;Mq`A<7>;ec(w+? +zJ)Z5U=nq$le1~U~R!LSU+~C<={{hdgzrnM^yl?RA<3I51NMLE+oO?Wb^C6yX;P3#? +zPQyK(`vcGR2?pTVG9M#lZt!gQmjFDw_Xf{qxWTi>ivf5x-@ozfp&L9Kve85K2cC`f +zC7t29L0*BBAF)CP0MAxv@i4OLd7WCZ3Ba@cf8g2tb6(+XWF$9uwt}P`0MD+t!?O+d +zg-HQ;HnQ$5o(*Xih99{YJ)&}hXNT3cle;txFA8-QoSq5ccc7Ula5&rZ0-vyr{;@N5WSP!&p) +znj1Vj_Xf{4yv4KW0eCh{=|AyoMqU7(T{z1Ue~V{d-r?EAKk@9%8$3G@fM=WD;MrEf +zqeZuPHjB>{{zo1!dVeZZuy00+mMEN{Tt8T1K`;wCI7;+X8?G%$t|9Z*Zc#|HUQw+S^Wl! +zf8g1o|HQNH@A2$3lY2b7?FXK1^EaL?%6Nxo_y5APhyI0UFZ{r>YyO32f4af5{d#70 +zC3_#>*&l!4*=cupcK;3yF#Yd%w%G$b8)|_CRk{5Eo{i9xdxK{~;rXgQrGMkukw5Tk$rn!z(jMU18~{A~1oju6Evn{b2LBV!2Di@q3(ppWhO+z}&tCZ# +zo()X)0M9KC33`Q#5go9h>zjZ#_Y*yYQc)WR?E1JAYr +z;MoR0@$4{^7x@qI>9>a0uk2{S(h7 +z#r_k|{>a?p{kV_@^A9{*;sKsbR05iLi)W_}KE$)R@9^yGJ3M>koss2x5xvw{cm`UQ +zZ|xK_pi700srAYJsvsLF^43j3WM`+gTFy_u@eanOs@nxx_HuPK7LT2DX4$;bReic? +z>A{pD&}(4C`iXWBW3(Jq&m$KK+&S2}2Nf6+d><-?kvomYPEOFW?6izZb%&@1jBXw{ +z1Ql2%~Dr6p(SVz%JbqhvL3VMI3L +z`OuSP-!$bL(Smj-RAVvxWIEB1xkVfIN3;2c)GRbc=9Ood>OXqaYCx^Ldpw+t{^b)) +zOsS@y&G1(3`#j2YD-x;Q2>hfHayB~PWdYCAeYhwo2X2=0P3c%;`XeG6B;_CgpNNrkkCzQK{t90sen+P +zm4KQ6fqulJ>yL=oGt?i2b>)*&wBXLyrZUjDV90#EB|0+qeH(SRF|j5%VYB)wW_299 +zOHWMtgv$_R>!=y0tyELaoQsPd)~A(*5NaReggB6=axDuplM)9S%i`PN**gA??bso# +z!>T+vXpJT&0{nU!*XB&xt2pn?O0@EwpGkWTft^tRnFd@sh3U4I<_A;h!Rb6X +zAh6kMHuDgqf((Pm+u1Lcq$|86qw;U>$<)$Nn*F@}iZ)7!O9bCqnM3DEl}6cYNn2uM +zXA({f795T_7P1F~zI`%kI-*JGOBZQkhWKg(CD +zSjjuaJ(=5pNbuMA5cX0P&N$FfgKQhTD;>YBF|u+^yo4Ns5?NEM^jJeoP$3ze>0nYK +z1Y-^;f0-tjN!gCr;2BkHAg?<7lRMJUwwwHiXAVYOm2#Phw!nr(uLXPqx69A3Y_p_glc1-PtGE$=pe- +z<_7vtx;#U_xKHW#+6BVTcyc#X>9wn;*gKpqt@^*()K1L7tuJ=fV5bDE4 +z*Szu6$;H{$1>uK2wqoP!!q!U`TNZ+RvE~>4=$JWEC2Uu(U!u==6Jg`yRj{!%qFo_jE_V`$cPkh)^PET6kJ$RHtl5Q8&!w04-k<|yVBv0Hbu!q +zS)jO)#r?8t*)FPaEY+z9V{spabt2`w*_pHif+VdPzU*BfzT-G7C3^j;0oKWR9`)z8v39_li5H +ztDXL=O*-TDjXbkE2l?}`pO73LD6nQ+(0gyuWJez>wlI1`;})b~?z)+UjKt2fCxiG~ +zGVPssnNq<9gl`TfxJO192}JU-jd@#gd21X)cY;i<;g)&vzZ0wzePV0v{26kcdb}V+|a@N1TpV;gc7f__pG0IoE6^M+|IUwE@NSbYt+$b{{X=n$E{Mp;Os^;{S&$jI +z?&)(ktnZ^)=@1x9(G=k_sXGzyCbrNZ3At-vP_Rg7o8}{IQq3RytSRclo_n;$xyWG? +z>ts^`v0`b?6iQi0h;)6qBza=aOl!02j^{*<3&H7)ecD)uFOk;nvmVF^ht>AA@eEJg +zOYzgyzC|GVetAonDi6b(5j|yXH20xUtP4Z*=q|qE4+r4xSKkg;x0G0NDRXS+^oW7R +z4uYbkU$l!hc8)0d>#paFT18pH&ZebMr{x70r$1{deXgoZnrEvs`*m}G>uc#jzu$6_ +zPPu|{^E~h4nmWDc5L3O=Wa#M8lsDJVqUzn!@1hg?-&h2U*{e3l|pN`WeqVOPzeiiOvmTh#jk +z`fIlHDB@Vg%9jKMBnzT}OnB5fp9pTo*dRI)db%TPO%52CX%$*w&BH>krsOdpOHp!< +zNi&P2b9jq!zf`C4_Hn1-kFmn}qDI(kRb8YL$87R&_H#*k?R!?*z`KSd +z3@*VeHRB;Cw&@D?Mf&KeyF7OMrgN9nHjg9|eGYk*v#B@VNtvhj1~RBe5Kl_!+py+- +zu^yCCuvZTl!l@Ec_Zist=NF57C2SM1sF`pfR+D_fCPBl6keWvx$Lqv`E&<%sAoD&E +z``f^HY+ZcgCS+Dk^kVL-+V}=02?QWM0(5cMa!oJ|{1_kV`T^(Wir3WyrX=K12z7FC1MiTZ +zJ+(y`)G-LyYnjy8vGq9>oy+l&C>k72s0udkI?v*pR2&sk5sV@$%&l%#eheRnc|7%! +zhuw6)&lqkUB^GPAxqiaE;*tU{Wl}&9c%1oo)FfQYRhqQiX6`yGQ8;OhtDO#h8|BEB +z?FCENi5t0qal)%`DFtm-c+>ZaK=T&s1ioM`NufO+(rdGUoZFxD(n>2;4@jj-yfrov +zrX&lV1BKpj@t8N>L&N_g{qxcxKl~ +z@OT>23Z2jzDt&4-w+>83AsxwDCB<11(l +zJi71G(r0R8#9P(9qDxV+GSWTZJa0X!?2NkJr70pg29*0)98$gw9(tdO=CtmV!UrRG +ztfj^}HoX9o9Fae678^6{)I^O!0jK~I!&jZ|JE;g$un&EkQ}5fBR#!&lH%YR^X9zl#7Y`ppxjWN?7iCjGr^qKE4TRIeI%)mfSZbd) +z8zT}ONL!9uZz0y1WLO#|qorHm@gWv|lkrGE5!Sk(PC}v)l=zj8pFErNa<#hQt9>a|?sDBK3t}#c#}c +zuOhxMcTdqK0k7yw_bevyaW@qa*q{6KFtw>5D(G_$%RqgUV@#@#VNd9f9F}-EwFSVGN9k0x@r3L`UEY!6B>;_ZL|_fZboKVHyd9U1ISBmddlWlfhe6G1+J3p +ztVJR3D=VhEE%llQwk^(lFBB;qF8vD~qtx~eoZOK?FQzAbtWBTt8iW;flti4$g*Xyj +zLc-Oi`BJ%XeFIIgl9W*4Vp`vOjae-U9B~Fy&E@KBIa78agc!Tdf5FhiS8Nx{&aJQu +z*TQbM5w~+nz{K_K@r1nMI8}v{1kIXmSjk&O`nuuU)12I5kGJ6pe!3|bcCgvYPg6o?88l3Mm<=U>4`!e +z>qgSVqr~-{NKL27X`dsl*a|&{`!g@`o8?pH*Zvb)5@44Z8XkQ84Rp4PN?uPi+vG7Y +zh{vzekLpvDu(o!v%3|j0N!oJR~3@ +zXqL;G6NXh{ul19wVGOgRpvYd_Nf*jMGoG=$B&PqCpgoG+==W}{oH@ETDJ<%1QRb`r +z`4~~gFDWZunc+^pTWJTOx6A71*i@09=9;C*Cg#M2kjv3 +z2CQcEh&h{3p;8=XSqaqZz-7bei+z}$&%S+i&mtthtUv*lGS+Q!LPt953L=? +zu0sB7Ng-Jc(_W*bRle;xTae@xQyI71BC8;y_dZlP4bIiXa+t+vd0ciS$jD<40|*_- +z)E-{AwDBqb;JsKt2!(hT^);9S9;<~@{^#vy>VjMJem*C!>rQWvl*w6@A>+GtE +za+wi6e2rK=B>$%sFIn1C@0ydVWiO?$H~jXFF-NvV@fEvY +zL^R#@Nx;~UqU6DcY*$%9q7101m)&wSj!(S;aMm?QOJd%~^qub8Xa$cczidc-dYWMv +zfYWM}@dPU>I~psWMojr6!+k+5DMmHW#s9mpJdXIui` +zjEq<;jkiqS*2z4G{Ix>c`19rruGHMw`>dbB>o{C6FrqdQPlHmX!9vPj@(!^0<93$T +zkz0CeP}(4re#y(%eK|ws!PGG?w1zcNV$TRJtP{K{Z(--P3S&Gn?7dzIY7h|Q(FQ5K +zUKW9BFnKW(YK3Dv2!Q^=ZP#X9B(a(gm;D;BS2oCpYfiksrn|YsNLg5Qv$Ma@j=U_A +zpE-VGPyKCsIk)T}$@2|RQMgc8jVIEJ(1NWNH1JFMz#jJ%<+cKiBei(9ur6gg4V16Z +zFWn}<$>hj=`ccXPX5M4lK$;nOb3YOCp0wjWg*Y@8S6UY5Yd)|679Tb9)=y^e+Eh}= +zk4S78Mze0De~-0NPBd6P%PMXau?3&!?)D*>-xt4Ab(})&Ii0e)C+!F%4w`W;<&3*T +zhMjA?6!xhVW@641$Z!)*5jsY%F&sWn50B~BGP4B>nzySy%#@_@{5c*^)ZUIzVpH%l +zo)-)f&9c7;S$p=xQjCVU3rvrP^BOvno|C)YUrzbpuV`8Dw(zVG%`8O!yRq +zJTstFLwQ6$T-St&TPq+`(4yl+Hn%7@>FAmkr4jT+gVtNGcRn_YS#&YJl`oD-{D_dDq}t+YbZEE^yX-0hWNOM4o}iDEYW4b_ivsTq9hX1jr#vsSHBUgT0|ud{5v)kB$plONZC7 +zRpLxwyh7+D(Zomk@B$Fp&R)`D0?AeLqEqHmfy@gEs9?0JeBaT9hyLEe8VM#Lf#xp} +z=ZYCo++qN74Y8Sibzb*zexvqmn>1aRcN=SUdLmb*iLzK|I@ox5mj*7ks_Ym$ZCEQZ +z`bqY2$Dtmmj1~`Ke0^+;KGJh~H(w@kf33E#@{ +zmm~Cr_|9c(UM)FtM*Dp*090AUa-CF0<%C6U)tAiyer +z>IO{4QSF`AtY@8WlJJQ=00XoZX;(4_VxtHW-NO}G00X_z?Fq@GHBrPtpi|jpk3G^0 +zZK)_S267LLc9hSXH3FumZ%dxNK3kdSl2w!F)98J%vEhw#`f46@+~)OWZVg +zGv_erTsnF9(fO0Dx)@d}E;nJZC_`N-Au%c6ZUH0ettT83c6~7I4UDDLh33yb*@bbl +z*(*llTXa&8lfC!!zB0r`JXq0DEsEmjdTXNgT;`QG#|NeL65jX|%X;FRbIv;>Hx)e%eOHxa=0+AdGMA)9js$|-#d=l7e|HaZ}qfT$3_#Xa!ri`X^*VEp;zrUKe2avDW&7Sh9V}Np3tNKX~dl +zZ4j;X=(z4!uge%-7irsw2iS!fk+3>7h|y4vPW@A+AD*Q1yr+|-OT?MB7ksHQ#tURd +zLpMxYMAFDtr)A?w5=JywdbrI+WF%uRGUC0k>htsDQEj!pEbZ2tK@9|e9yw3Bczc>0 +z6Bn)PjpF0fiE?T3T!KBv +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 +zZqPI0kMI|@k%ax9F?@6)KCNuFC +z%JwQgN>Cqv?8aOwKHW6CCgH4NogoJEF5XYUzJk#5F%qXu9 +zx;{{@kTLg{cgml?Pm@Yu?AHzTKKv=VbFUzkx~lOD +z_Q$of{e&0i0x9p0aYfEOZ9i;0B?M<;suRlqPVLvD@Xvapwd)nIj&NQ9eF_T#!Hka5 +z7c>;9nWPR=2bt?9{5_IJ{P=mybMg9m-*0aZjSMsh>%Ya;ASu!M$x7P +z#`s4W*^v)Sf-BYKTl1K$OEX?d=l4ogy&6r57w#Dleq?(7#+?@5d5=??D@8?ayJib( +z4*DU5{b%GME#Ko=(s^okMsB_i>wD40-wQb2HjgftvnD;hi`ZK!Gw71~w<8&Lb9!5h +z4Gn6yg}-OZ7UhT5ac9IfHcX7c|;7OVqm_Ntrqu`m6nCh`Q`yCoA}Kwa^%|vjBc&qkmE2cji!ezRTvNbu;z6+^NLAw7xdmu@*k2 +z|MI0Zbf@J$e+rveo*574VTV{gQ9KP;*I>fIDJD(X=IfK&(2)+3S-``%Ao}a^X!9)P +zRp~Q*{fh@qaxu7_^H0;PhrIR2gv^pk_sOjT-)DVv>Yvw`FuOap=n>+iyN(MyJgIcQ +zCM2m-J>6}R_amvgfTIMS?$d@L%UgD +zY93aPFXwdMBfj%vFD}R8-kUv;6x=oC-L1^m`Xg_9=?Hj8n%i(Ns`iX1y$gOL{yW(m +zbG#MC9f4_iwW-0vl1Nt#{!0(d=WqA*FH48F&qBd{Bca}qH%EngbP=9>R@g_LBKg{} +ztsfhOH<2-p7Mk#Jis}sPrm%6@n{$(`z;CDx=n$@D@yShhBsPygbM%lXzCIzP);iFb +zRa$|ppdFjfK4)+FCp|+QNbJwb7>U9J<+h7dqv1U?&k%KEK8IYZNj6vI1-A`ChB-jn +z$7_#O?u~ZJhYJulT`M5PBqrvX7Ac6c4G-D%6oxCPCc6#kcLzK%(A%aY-WJtvE`hCV +zzp~6H3!c0~`(UV&xt$&6*u^G=!>S)+D{jjWOUrWuEH&0&K=6kq?!vAf_X=c +z0NK*kE=)7#H|RYTcK|0OB*r~_O5oEusyNnn&6cYUh|ZQ;&1u96ObpIprHah1lxI7; +zQQ+KT9LDMrX3mv7GR(eIaGvU%MOt7<*7lZ967XOAmN4)hH5nS=L=3f1oVi6S?r(;8 +z-)X-?lKk1bvRClY^ajLE?F61$y~%c#aw8YS54rrg=e|SC;iYnV044V7d$_S)gD(a? +zrjH0w=nl+ADl)?P@`#^w2}|GmCGobe;}7AsPcB7RX|JLy0!#W+BMFo<7`gl^2BLsqy`^@>9eC +z)U4Pye{Be?^^7%TMw^fANDE^6N(|z=`9692f@9S`8JyApqTu_zxdoHf68l+a6C-~> +z8aIE*j>XR(jg|WCN=lF99T~hbW>VC-C@P*l1h#M|<0oC99F-#hiOBQ?=CRYgFdj8?K;ftb)W%Xs_r0=>+R<& +zk4^Co^>FD)=vSWpj!e?To%yK8+Z092bxS%u`igV?ab0`m=Xo|2x;Zq&?wH*la;KX7 +zv6C6O>dH41rI%Zf$s+&87TyAn?Ul&e-zK2y@;5^=$ph>WkYqTOwgK#*_KiRSSkjTs +z;F;m6RG|hk1Vtyo|B{;AWJP3OzkTdTRB~x`)O-xqHsr&F8(}znXs&OD*_*C6}V*b+7Nw^jvK8*!X0Frp;wC|6Tu* +z(0iM~9E^Ov*;PS0%*~Jhcq7B(J(u1jiF}tdF975R+paA~bAc}v1qWvW5IR3G8Cl%K)Eiet@lg3bre^2+*!V!%t +zKdXQYp@M-8&3zsS6?-Y{tWd~2%H8Yk!pw`mzgu%6VZox1)xAQd^L>T1kCWFMdN}vl +zhG?mx9=d7G((LKIJJU58@ROLx-`_v3!|>AH#qVVvaeylUzH +z>bZpv$GRyXy~ys?_3zts4m80N-rom@E2DRBc_Z|IVS`YBw;&Qh+v({k((|fby5?98& +zMw{r&=$L7d1~gqSP6Z&r4PmNHH>?UdiPzjDqiHZSa!=Ojk8?_UU0GS-nAXpnCF45W +zyJoGE6h~HJw~<9$3?~x^%dK(L@ET3$X5I~~r+MLRR#AYhH*aAt}+dSNFYOU1CG3dT{wgXy!PPl0t$MJp~+ +z+lQ3KZhxbCg{kl62zxNv+^zi+L*<_gj~rB5L<8RKD9ExU7BwUjxYPcdHra%OUVy_S +zmEiU9x+}drP<-cN%};6;e8ta?3ts@8R56{yaM*B*`Zk6s(~&HK8IGaJ85+8g&u$8Q +z(V8^Z`a=O2!_+lrcJRU~?i#SnO*Q)CwzyYEhNW9mHXF_0wS;|o6aqPIjck(4BESiXAT|=j;N9AOar^A#At4(wf$l4pmKA;$ +z@Lv9XkHptu`cb{lCgk1%DzxKt!19PH2wzE0Z}&j7Om_YQ`g{8!E-UmQmGuJ>VP;D@D|j>!bFZW;1$sf>)1% +z!Gwhmt|_YV5ucJ0KvJ)upJ4$SNj3=1I@g$wQ9+Sc~wGOu;Y +z0dU>h;Cf`NQbdA%!z;Jbp#Ed>~$q +zegmU?3T@`kRgHLAdRj&lRNWv@c(9MFA5$jZUVljgxFrhKM16tW0sLIjAd7_~5(fOp +zF_|1@Rqq(ML0&NWACcXk7a(C#inYLe-s1`#qOuIJE?WVLK-%XP--h;cCpsh#Yqwn? +zDFR%QGwRGyKbKhQlNNMR?hASl^njsKNI_)VFf{^~VGd8~{8yiLoec+MOGknFr7hGR +zxeQJf(fKv(kL1j^_=`LmK4^9OyvsTi0=g|mBAw4>)~tRd%epYC{2pCe;C4F2Nky^7 +zk}#@)P|5T(BZ-ia)O}8ON-g7_$h_*3CHXssPK8B?;IW;!Z +z6QLK}jH&#Vbuii(=0O0y29ic(J8c{m)8RWRMDykGz4oqrJ|2`{cTQ=H7Ps7jP65-Bo_DkhzE^#=Z)fJu_vta+w=R-l +z5`w3e+kMwXn-90v@z|3ewsqo7Vb*rnMljyjKPliJ)(`W}9s>Tj=d$r&g}!))g1eZePzSE5ezh# +zCis=0v-MU2Iu`C95e%8Gr0GTup;RLnn&}lc9Bb`kiRqN&zZqhIV*`>JDDz;otFEDG +z@LC)-xI66!wR53gZfa4VA!MuQ%YP@x3!2s5P3ag{20r`nvcv*{+OR_>QL0mb`+)8 +z&05T`!BpduNv#!vX+D)U^S^P&IgV=ebo)q}LiwY)_^ti=n?^WCYUman2`qDL@nY>y +z!Mf1B$r?s^3^I362HB4YpTelp(*%t3{rDEjA{$gWe}<4?iniE=<<1 +zLcUlzcMX0$mN4C!h8;2-oI^^l{A+OmXU!KhWp*9NsL-2Hg>wqx={?$c1VEs%~ +zIAQr~6Vje00|e%n9xLmOXS`rcATt5Da0-^~Pmx|*JXxH5^`y4;tmJ4-$$4K4oQE{Z +z!5>b~2GB8#U^9&jH}OJ%Dg(eaMFV2Kc{;&R$%K~!7G#x|g7tm7%9^sYv1*DxcNzec +z@ebgK@LPRrjY*F+`l7+ZLhZXsOE@NHz}CH(1m_CI|$2wlG +z@~6huyyh-XDrLD*DpUgoEL>5S$4<6^=PRQA1A%An;0zUSRkd`MZWg8p%)T4xlwe(K +zT-(|5ZrUvYeA2*TN~z;w6A{xLt(p~*oKWS@)Kc|zqa0yNy0w1k*(hyntOgUJkHl6D +z>#;SY>|+5Q?1Nd`?`u9r6Is4$FkYDQ3giY-{8SQNk`@4r2=)e=DZJHd<+AOkUY-0u +zR$l>s1G21OsNe_AbM<8z1aks)Kb^qy$__4*^9OgzDi`yEfkGXWdb$aw#Xxlz?yFwt +z9p26)aq)iwXIJnDT;Ja>9xbFJ@gx!tpI$>(+~A6g4fXBq_)k)*(})fLa7ZKoVtayM +zFOMV2QH37r*oUwe#wWiRhK +z4eZJvSm;ie{FvqPx%Wml=v+B=zlnM>^YIsKj!<&FJ2wLv2-3WT^Xg}+tdt}xfv!%r +z-UPDRRrga1z&YqXf%!XYdP*_WRK;k&W?w+WfmP9xHtuuzV?k&cQQzuaM7P0p*TF-L +zF1d_COSi`DGCbGL_vsSqJCl2!TYCPm4pzNicAazk0k}+w`t^9fKl%EMy@6TPsUqL> +zyck^-dzYEBEC(;_zus{k2?MSu>lQDzH>FD3wc+$^(Fo@|htKR#B2U}V1!G_igwjE$ +z!w@$oVMQ)-hxOTs?hutGV))$aQ(&%(WlPsR)p`j;#2WYPq3V!lnHc!;H8earQ@yVz) +z|50SbfY)d7=Dq$6>k)yZ@O*GWDhbdf1#}C;iaZ|tITa+e3q=rYU_+|TAYP1TWM&Jx +z-hHKJ_JQQvP_!gcYRP&#@{pd1rJsQXLyZnz!*wQh>8K-CJ3a3+y2C^mP4hG_q`l#h +z9!GeCfwVqdqti_T!|T#|k@&&4w7>ButHbY!L>#j}?Y(rz7lj?L0;~R^DNhucKsCgm +zaH)nm4qhBbnUma$UF@a08J`OR09Z&^&ZDDN{T8gSOcJt@)J_3CeFr!C48qN%TrhIeOw +z?<`m*TvJj?x(YMT)(c?G +zTCAJ&hWYZI-pR8~(aKNAYjr0`_t$SRS;bcXZ4FPBnJ~WzuFZrt)9PZi&&7qCI^xj5 +zaMuIBJF5?o{G#@)uOsi(;AmVUtk4xd`S3%D&)zo$LZ;FE(VK5YCEzhv4#T +z@~5=qM@9ugPM{f)m8;276mE;NajS3(i>IimP@(miH?sf}+$p+778G+Jle#`p{R{LU +z&~7&cSo5(KyppKWsV(`h0wGM7jf4r6!J`NT%a*o!eW!6Lk&9!^BSQTIN52ck#2$&a +z))t623UP!JPTKk`1x?Nr1T@&2Sv6i( +z{1Q@;7if8F7Nr_ogeAR?{$z#@yr6|=&3|*cM1{oZO+H>YhIqv4`FuZ%7jv*yKi?w9 +zhtS$!A~u>Dcz{?Den-uA4z81y0{<&-JEi^~@;31Q%G+i5O<1MZ+MyH4MR}=^LVB<8 +zho!{!?^i!LU7;YTou%T*ly{ZQ(if6t(}!DXW7D%CvC<(vW-sa3M@tVgt|rs|yRd)c +z?eW}ygbQWJ@_MUlbA#PkG!4zkG#D#itg2R +z+|)4PuB+ymZ#}4g)IFi!)4^Ow17Ud~1*zzpWLpe0@wS`J& +z0k6s=Yg1K4AVW6AV$m!LXOBmcQBw^A=0z=UDG^#KrU+`_%lZ~2gul;)c8Q-bz%Ljj +zv@A0MPdqrxA}mfSa#Mkf3TnXdakQ8`jlk{}1-ZuCTu8L9=kJ7_@15??@2?r(F};e3 +zPL=%6n(yatj)00(kawsbh1=m3ooH{cIG!|QUT2wp$Dfxl8&Ao9(wTCU?gd@bRz-;{SxK=uPY+mQ>3|T-(Z2#falFZ0y?_Fv9 +z@U74kFo2mHsa2NT2u2?Qw6AdiHh|3AF_txjnhG}!#z!=MP;dd9mU!oTh4DbZ5>!sS; +z`^G&?9|pN;z{%!{fvU`~P~|{5%*FmHOJ+J|GV;|iEvcdNkGUMI3D-OloF3eCxM~F< +zpuvtx1A{l#EdHOhefAPU?;z@-xT6#5e;~@Y$$?^rSO=PjtTU*UTnX#dYTe~r(u((G +z%V>*e6$|HnYg}SO9RfQXW3^FJNzx*PDyt_(#k2(*?I-;x+zUOKgg**5i5IsbBj|t+ +z0vk>Ul=8m{H+|bk^CqZw8c!BY$NoPGH?qtt&t694JBm=?en+#h{OUgnx4FdRo1<~} +zH@>f8zZfz0uRGNh67UWJC?A#5<#0!Z0iiqLEGeEJ!Xn*uCCvM)QL=UVAmY*hc7CQA +zFPHkN;2AA-Eo3nesS>eHdY~TT6w` +zIY~<)=@FD(x(QgkSfW4BpV3ceQRrcwUd;OeVn$*v>v1M#j3~De4$KM^n>6`U*ij|t +z{kikwT?gCO1iJmw1tt8DTZYmlW-fM9a}v8O0e5K%510P@+|Cq_#|S4~0;PC32v8V8 +z)CAB=V8o8X@rE+!;ZL@jz<7;O%7JcVjU-X{Q^&eytQxe%mK=!1dH_wcbj1>*TxmeN +zO|iEWd(8(`XQhlG#$d9$#kMyg`h}f+Uw|2L#}$@P#u7{jgziM&+>&l}WVm=k6(pFg +zzl`RGw{j&vc0~EYa!M~}b~J-&sLsQ +z2u69vg*T;zhPJL?Vk&gs$?vnlOIJGVN)uubMior7x%L||p@M8wS5@c8^tU-m7-+~J +z+BS3k1~AlUB_o+onKfULpY{@?uZz@*1t%2!%n_6$a4p07SXREEh_b=~jOM6EEVi@Y +zV#fEmTmZ=-Yj1J;5zjLvuT-JFWSUi5FECeRu7qFBNYUsO>E#%B=Gj7qmV@KjuXznIXVW +z)3r|l0CA;yT<>RH&nJgIF~>;88hc@EtXJsP<&cU8R?YF33?ZcbxImcr6#oWh1ob_f +zqT9HL$5oH(v^k5{ti8qh?!37*WbmjvoUl|-{t(>V{}9|=|0TG=+T<5fGkxq` +zDwF{JA-HuwP79vm%6|y%w#A+1pt~z%@rpihOrs5AOOFX94F2cnVDedP7E<^fL;58z +zpI-bmOwB`9VvHYxJ94@6`dl|t`9B1AO{(hXe+X{8e+X`fe+g~~N88|nkwaiV7E2*Q +zOkZJ-ulde9R8f>Q_Vj-V?wtRZ;FhZ}E+IqyA-LDc<-Ck55LJE%Zet|M#w^m;e+cdh +z#}ek}t3gGg#+`}fAA)=Chu~iAN3~d54q(1r4aIeitW-vzW{Zz;KHCFfytcxn2>Btn +z_gf#q*B(ps{w28MSfesPTzUT?xPjexloQ7h=26g%G{0xnSU-WV)*rJVg>eNo-8oR6 +z1}|20L?}pHz42J&Nlf+cea6517lOKDJNz8VTxaocd>_wc`TmOFD{IPArPnv;{^^@~ +zxoNbPn+GGh_H28-B*n<>`ZcLG?mcPP>bMDw231C&;eaPfb<{fmW~#qqOs)>K2~W&V +z)i)8jY+^Dti{K_d1j2OBPL?QXTy&Yy%n_H*Mc-`iq>M1su05}L7V!ETfP{Z^k|D7o@>-MqmnLMToS39 +znxRhq4ullU#*ZDEwOrg}cEN7p{ty1G2>2iCECK;yO1;Y!D+=Y11KYu>0vhTAeJCmqX|W51^g#PUmTpblQwKGMROan;?+)d +zf|b51C=!p-x?@gRw6@-0?G7Y$s<-mMsqOn3vxm)Ng3Z{Tnh8Zw8*Pe7Lu5`Aw3Xv9 +zl~zJH#>o>XuH06}BsSkRQNm%P2au}odq7njA6fHCuQ)g=!zdwO!oC8%HkI1;5b{V2 +zt63`XGGwto&wI#H^jAv56q&+am)*D`kON;qAdJRadl$@AwnwbnXtL4uv4AukS#Py9 +z&)$F8H$lQ{nN`qYq|Gjx^u@i5TGDUXM1V`qF)8UnSM6#f_Y_c6q$P7H^(x%Z87756 +z*t@`Q+-LNmuB~SiIV)Gs&fTYg?aD3`m>EQFg)W0m0SOwzkJO(;aStr$r8)jO&M +zEr+HnMTATwo_VYe-B}1=dR&cc+Y3Y4tguKo%v)%J!=Qt>vD{76AWVT%L2-1Lc4KlH +zv(_woXz3C?5>HVtZ}&zYkZ>k0z>R5XPb_h_$dl|=?6A;%H~DRR9?0sW9IpjK>_%2Y +z9}z8goUvV`8}rO{U|5ZFrc6Kt5_ +z;svGsre+2rx*<{si&Y9;GT7F9`mJwj{;;=D`-KC>wmAnUHa-w%d&XFr*>6c;u?Rk) +zhTN6SS|!G5wQOsUrZ-0E@F>dRfZ4yKv5Oh?_Bbee$k8|)@ytFoPbm0eMUSDn-x={x +zjU_CNmj@cozQ?D2sa%Ji2!Hq?vN*lIQLA@y7qWoKfoY5}w{Xt}=b=q%DkOsM;>Cej +zS1Uvo^2-W0T~fekZ3bySSnYGeX!bAVzF`IfiH#CiVBuZ>K}``}ZLqx8X4Z8INsNoi +zsrbSK<_m|xbP@Xlj%+5K@LJ6`JOtlF>$8(H-kclO9^=yilrPR9?nJbmi;Sm +zgWL!c{s`Q4djAOAO(1r0h>1kWi*o-6-1=9h2aHe)mwjGfu<~Z|>HB!8C>^%_XT}%Y +zByB@&&+Tl%=hom2K%Mln$zrA`3oh_+UN*_fF%WrB^&Wms=o<&(9japAkUsZ+9hplJ +zRe{DweaJg-WO}!RL5F-Uj5NFjV9g@$Ys_lfGLP?V{2+pxBE-rQjKyvBtKwXxlGIgS +z&bhB7p0QRb;JT|2tIT#T>?`Zc;FKd!gHmE-xse+2h!%6j*YRRs$TI%{xTXIAxIxi> +z0B*?|G|NMRc&T;e$8Gp3@DK6)E3xi-;W?fkfID%kF|}%Wr39M&`JxNS%IFsez9}>Z +zUa7B=%Yx0B&gZlfjH1@~KDt*}xs2VT<`tYdD6Dy-D~39nojiRp5>{Hu`IVA9Ackj> +zFFY1TQ;!mx-xQgk@P7bqh4*(W=m=ykQ2JTb)*JpbJB`#_7tPO6$FxBXgzE$Y>AcYf +z0O5eH&~VL8G%^aS +zwW#pj3JAK-5cK%g=qt9`PrD@BGtjY&_c%^FsvMeB!V?WTc$7j(i!8 +z;MbvUkxTC*b7gR58QE-q0Pa%5_G7s0{{q}w{{guBckYD$1-KPoUfT`!e*kXQ-wOg|uN1&((d6w&_x+(qqdMDhqU6Lt~W0=$^mQZ6nL +zoh;x-_vU70DbxU>G!0|_0l3Sjilx+rS`JWz_+6guGG@@1Sq-uCxPAccL1r=JDs}ra +zo-Kn!a#DHr-XIP>)vHo^kJ%$`uD>{cW#DmT{3TmNBeeJ-PqCf|!5!?yrx2Jzh7Eo1 +zd)YXgc)2ASn6J)xvm&YyBD5%CeWu6r?x^+#H%`3)j+#KSl&Hs}%*w1%*un>7$UPoG +zfi2ET%FSfWT+HI={I4kENZCCsCctl@MEP1N7i;7L6O5_@C|!pMg^Qg6Qveq2%8`FNb-IiFHkW3t!&B^Mp}r7Oqo53 +zM)z+NGE_ +zu#l+oLk-hqHiWrvH%`l9uord(-=1L$BmV#WZHor~|M9n9^;q~tg&t_TLFU+-dqfVb +zF@W|BtbhD%<&eQmJjtQ|!`~JZWEm&u23^MI|Bt^-m$jreujAwPz9?0nVAd{Mr4fyd +zVjAOq-Tuh@jcbp9&=ZclIPhP8dy1mhA84GMW~QbB0`>pqZ#yA?2>t%?w`Z4r{Ov80 +zqBiZ{)-LO4xwtBo2p-`U(5R@b)Upyz<3wg@+cEI;tliO1|N7g5JNXl9?mE&|z7)`H +zTXCl}iuoH)o)~&*jPY!LHYE3CADD$?OK=^-o>-Oj3}CJEORI5wixK|ux1aK2nPC8c +zZI{H^|Ko2brZ(e~F~Lx5=ilse7{dcZABlnVyUamSo7h0vspa^RwpcL?j(n2#k;9PmAXU)2^D#= +zy-d30O9W2{z^sfrfsp&HR&yI(stUK?Nri=5xK{^-VA(UJJ-I8ih@-DA_8@;C%cMEF*3Ougd@dqrC0=o^S*cn&(SNAv=XNiCOZ4!so^%16f)qIq= +zs#95L{9IhhzgwldX)g6Th%p&DzxmWWzofcl10g1%5|}2 +zWaN|j&~;BqQG52oNR{GR9z*oHwV6XBM%&KvJce+iqZZXy@A`esoaCx;zn1Tz&qR`R +zjG0t9_LPkoh?xT$RMQWm81p9nLJg^C*!MN9s5&lbb7BnsQ7f1%n^ouxztvWM#tL%L +zXZVdBjC`!5L0r+uuqR*v5N3!0X#`xa5Xd3lEycP;HqsP0+y!5f9|$6O5XoH#5yEhL +z9#zxsedkJ~30dSO*!4-6a=0L7f26Z_&#&iWI!5V&drrVrbT#E@a{}DZu4pHecm|`H +z!&G5l>fc^S-^!isDqVzy_N+{kC>gF=(fQcW7f5-ICxuKm1 +z#$t8nk>>UwdTUOy&|QY{V7uzi@L|J+0?^of)m>Du$$3E>I~NPusuwiX+K?^ApiJGF +zY!MMimqO~c31|C~jMYY%IPlB01txjgrQ5&x+DAw5`~LD>`m9qF^lZIHi5@es%Wh)? +zXLOex4>*oQReDRW!sTcco+`o1!N##<{xZn#_{3azREf@H)u>2%4|wHsvDGzO?K7*d +z9*$SS%%yKQCw+2lXm3z)xxErSV;kXPfSMuW& +zbHSGhLbg0K7aVTu`Pn<~`~mC~@C#OzJY_u?A`0UD`oL)QX13?>%xHQP&EQxV{W@Is +z5DZ8zoUfA}pVd$4TEbL3kHl!+4WXjQM)`ontqw;5L9jz)Or#-=Znndp{XD@{fg2@A +z{h0X;LVv4RX&k{z2vDoy9nBj$&D{U}qqu#Ft%^&z#Uy1{CKwY1vPE>bN)HH;cj9meNaC|EH-~&(-FInXnSU<3NEBjks +zsBt~mtJaWRschkwfgL~GCBYNAhG)#JrJ+AkoePLnjf*kLk_I7iZZ@j<9&DUs_W*?u +zF*@T@^j+y`;!-Vev@nB#16RIf0{qAfRM~gbZ3u#%Tf*BW%wD(xZmd|R=@WXR9O(xj +za=DfKW_SO}t<`OXInso#MnOpDDHTIQg*!pXY7gH3undM`<~}{O7MqFu_Yb^?MW@38Jt}Dj|9fV* +zvJAn+RiR(5#meZdt;4r+Aq~~hfuj)6yqky$4x-P(%%aDg(|zq&0icAzusly6g1JOR^@m@aTZSuh +zr!M7ov}mD_c&F{qaBom+8>pG2GP~PQ${^cfVWW};Ai&m66$qAc3TSJSv0!;#SzT(lS?Qp$L+;;|#G6K`~a45}| +zO8-`=9b<+y79o!f`@~CGwC8n_QwFCx1+ug|2e4<0YN{idgvbt@N#%SEj*18sY>oIy2F +znP3xM8r5k6pQHlb#VT&Yc@P_;3}KbOzEZKgePO@jS;vCiR2@XAQ5{(KTXD|eIj|~j&c3xztZ5&~`2^39w^8{9(|P)&+;$lPMW!e?)@3!M(NNCvTT6X3_*hBs +zz)~O8&JkwyZkA%r8zO}Wqnm+5KqH`7Tq(0j@%s&%E9*!&0T9aYoWm$sE2#irN#ESa +zwz3%S6W8-9<+^ODzB~WPek08a;|Rud;qAm%PZ1eDqvC`?A9n41&k^@hl<~fYTJgX7 +zwyrYGfAwvoAAP&3!vW;$(>BU +zy8urzp8_(SV2_W%M5U#;8>Fmq=QVU@G-UU%(n;sqr_(zf9$|~Ew_AK?ql3R +z=McCOj6FSpr9QK~-+vute>NbSY#l1;*%Rb6QqQpPq`X#Oe)R3!|LWV&|JAppaD!=S +z?you7p(55;{-bXb^`KXUu184&WG-Q3U%|rs=-V%bk#=X*!F1t@(Y=h;*6|XxXEu2# +z$MqZorh#qZROu71CrK0G&~b%{BQKEa&5ZE1Yg&qRktur0@sI1UEpj7uizmsfkVoES +zlF18PsSARss0Q^ULiMSGyOy#&JNfYi$MuMXEY_in;JJH<{xM|NVY?(FEzHj|_I&3y +z398!cUIm=`Z@Y8KB$w|`CJ|ecy}mvl@@xxipMEGU3LnaJYz=H=1Ax0D4Fc4sk||KK +zep0SXl6F=SMMif +z>B->`iJe#~RE_C3M!rnXGXz$PQq?_HSdbbYNTO)-5D^XqarBYi?Tm$~_PeFoW=1Mi +z&$c8$7u9uP$Kn7`by>k^_^aVrKPOuz;tr2ivfEGSyCJ=#p}B`r7oyO`X_H8;#VY6(y5^y<)ZJZ%t+r^1#9uQP9@`@C%|(2m!LKee?e3H*5Isqlzz?`9G%0jf18-%d1=d)|pC +zJ=p2dtcqlxdxg@*T|YG~wjsaJzw(+1lJkBsQai%(kA-+-G7x~7&@+WG#IZ9om@((I +z>g3)K4j7b{RibRb18Z4vH@}?3BQyY#i=9Ld^`2TWGKGga!EuvMpw5duD*rrgaX{xu +z7D&JDH%?_x5ke=PvAjN6OdI))q>H(3vUP;J+qI0teS$h31S-<4=h7cB%hNQadt;=k +z>bS@=rZ9wN>neDfDK})CoKU8Jm{*?kFKqPrN)1o){Bprw`-sV!pA}YpPawjcHY#``YmHU +zdeYeahWb`@lZ|O@ny%p9`nmz>gmRcKH(YO${EYy8y=LA4xN7W}=_f|fZeohGUHc)q +zSu1+tHn;QB!kFXAO+%oSiAWw>k2yxnDz6C}N~*0R44y{c;D`KJf8bTp2(A`JaMCQx +z$VE9MWIs;(sV6PWHO5Z4KSRc#{40sF>Mt(aqs)nc=Jt+pzTBiE*O)p)RAB9KD{iS3 +z06ICOy;2L>5ga^qqE%i?JfZd9um;!^m+DSmx1XW^^4oN3xu099nba5V%_B$1(E6;o +zE3AAR#}Qd;29U(D<7q^EIaujBF#P4vb{^hr`fB5aI^ndtmFSrUhMu$iXK|Dqc +z)UwSve#mI4uK0x<%4}Z*>KZ+6HynAj7APr9i`+ON$M*MTxdM?lT7rbn9TF2`|SvFg4IuapaY9)6Zzya +z%N!>eq+aE~M{B@;D|6P#T&>*edLwb#m|{FoQJQ6+B{;;VL;MpdTYo79B0@1^S0*6w +zF)%e%b+?KxdPn3Sw~->QQ@__A9k{|+5=%ud`whJjhh;TkMR$?OjpmQIWB_0;cMi>& +zkR$Ex?5Gt!-RYOh?6w9Kx_&C_AC*Nq3x?8_nU#MZ$4=D4WN4ZUPPG@_Ew4Sosq!9) +z{N_>Z6a(gy3knw4S2KRpZV5C%tYRv3MKQ#_y+|P3I1@97d-KCsK6SYRy2CR1X57PS +zaTHCb=w^Zc1hk=VBkJcycjEag8`2CdoHuyeUO7DY(TcLFmA>Ku@x+90-z$NpKUZzJTsgb8Tzdo +z^%0WGmBay_gPs6`+O(&GhJ0aKJ94z_pzfz1IG%UBe?>h1{xKl8VEx-~)ijQn=ENIt +zuFCpwRV(2gjyhoDyU;^4wYsMzz{2=T1GzTn&V_oX{B)N-1 +zqriMs+L^rHF=ECO1WeiNmA@X2(4=u*Tx*9@LS=4sFYZh;Jh@Dobm$sx?Y#G)*m|H) +zUilG8=v)B|ybA;YBz__u17gXu8h>Jk;p;Q&K* +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 +zOO^{C`44nnw`L->gN{)+908VTO{ad3dcCu +z&RXzAn(zo0F$0wNwXp4kbq1D|y1(3VKgS9IRb!ajSWk$5GU01>mP|s#iV^M|IWbus +z^dCDUA6{^qOF@bMi*M%^)(i>i2Z6i7{_=hWVJshXDI+KnL8GO +zS%t1amOR#bInU;WQ8LAuC~cWt|8IO7K@$r*<@Z1M_Ql)mr+K{mk9Z%F^OOvs`bw}> +z`2WDSul~WeKf)1eFSv!ofAi{_S~3OUo#3M59P(K)IkVt%l#P<){6tnh%!w%_v=tDg645|i+> +zy37fOZ;?w+^>Dy<0}ZC1+FzUL2Q9n5U$C&hZ{tmuUkwq6?5qYj +z5Br1kTxC~GEQ-Gs4ni_IaS=~Hkek+^uEpTknmM+G@fjLcf?yQ6*!}s13F~EV@Q=N{ +zqW<6PZ7b1auXO9Jt}}o5nV!!LFB$?dFy82Bt;npPf7#pI@mIxXNdLv&=2>^e%n4{c +zFkIn}Kw%H~)~mo)k87aJ_GB?mATd~J^)gS`8@m)o-A%bvIRilofmL-&#hPu#78UCG +zK&6}qe>@G`j)@kw*XA2y<$fE|9LyARna&efh!Exeke3&fW5~JbSi6yPB$u}S?nXL# +z=6a$|N!mW!*YI_Va)b{7= +zwdnQs5oj~Jh@0M}f|QjAdfg9@j0I-=f|>-yl|k43s30|)*3Uo +zLyTQgMPY`@?YAEX9uz6_qjMR%CeCDnYrCc;e(#I>B|t`}xnK9w{oVGdBWG%=o}>n< +z$HT)e|Jd7tRW^TqppiJ@cO@g~O`K$m8YOphTcwtU25GW5kZ

8zY8LkU~?~d6F!8TR4m*z(hd9!Rm0H +z^&HLgU;coc2@LD|8ic})!KL4XMZgOQ3j!0)Z`@o8FshjpMm-#ey +z!7wH!$Mdo_f+h@xoUTDmBLpBUc0yhlkwN-_bOkOFEr^Uf`C?ev8xjdDTyhg&I-yv| +z(gj3r`=XPn*g`CjTRbZ8=#Q`P#ouA%wG^@*EmePKtxZVPWD-Lv$}9NIArtq>q0{Z@ +zhvO&*er%F7$Vk-evk&w9i~Civ^J27^#p<=8-@WhKuDj^)PIpy_g(jBvF54wLKkBV4 +zAatJFefxOBM+LT>Z}2t#2*%7mH>X=HeTf67b1V5#w?LlKDuET{PJ3!Wxwfe8{;fWP +z6LC>cE1plK&Ksjh9n9RyRfNSSh-TBMCn?byUWVZrHT5_+BKX;g4bkh%kZ37tMwSJv +zHXt=MylKplfFB1DLd0!ynCzfKdOg2!8dCWTZxejcrW3%=4`I4}@@nF`Up5`-*9LPj +zYya#@h-DJ6NudzX`Ed?9*dRniTV$3?_3dKLH^f&tHXntgXh0L;a0&#E>T@y2$ZIVC +zo&9H)cBX^~G7NE6zYQ|vgkkE7h`~&HP4#j{(3P5F7KIaD6N{H^R!4^;CXSsK@3Y7_ +zhuVx<#I=m8f~fequ4#M0e!Jvxpo&qU)~ogfWYSw;Wr~5-?aPZJ+(*R;1lP7Vm}ulWF~8G7 +zd|WjfMxxblHz~XDeYb|2LQzy1y7-kee@Ov;`Pzt}IWPN;jD|8v5kDJq``GDW<_l#o +zssuaR449-kU%%kdJ32G==XdgLi%nBz{qVu3t0mD3HDL&em0YMgjI}M&NAyHy4&wY9 +zqu*Ik-SU!*uP2dhaUhdz7P*_Z!!?09)IfY&D$t%4eAKQ~U%>wXg?O8k$mv?ZS5bn` +zw!;Zs+Hhre)s-Jdre#JmkCFoxjkG=SWTG_yE94iZ6-Qiy6dRuMV~8{1$-?V~f^M#O +zh@K;(Cv>lktNpr?_JyXLcyjxsPI(2+4g|f$el9-TYYQ3!u}q+pKPb{!Lk14ompD*H +zI}BPfdC{|Pm_fP6$dn$xH2I6|-}ZI@_y4uGnY_f>aL|^zyaXzo)8HzrFTwO#C#l!7 +z>xW<~4!oT(`d_%LZr(Zzf@#?ZYuX-vzcKTyNqO|;c^7C~8GpM^hj$x1751;q>bS}e +zlenF{%INX;*IC^OHQ__cX10`KHYH)R;U5iFHfeY +z`}HiHOrG`mnSTL~F55BpqV6`XSO$LjdlR0jI|&Es6rH70UTi$&mox9M2KLl_ejEWO +z&o=54ZzlN+`rZZoUfv%jcbJW?t|oWtjXs5ljEKDNZq{1R@qNBJ1c5xC`&Zd#(Aj-e +zJWT;&3!tQ5&Y>-1Q|DJ_W&I%2K15_qCj7_Wyy+<)eqy(Lh=l1K;AsVMu=9+s!sm?( +zHi-)>n{Q-8mso(kVVoggJ>~UXR}hpsPn_KjzPB$sfR@)op324U5(F%t=B7If782rY +zVjycpYF&#FJI+FR8Yp@;%(S>vUUd+{ok&$X-6F=me0YM+CQ|*A*lw1BHV^ +zME}}OQ70U=3QtmkN4(b{1}uh9#2fdE@+uryf#9f~?;$5MSHA4v^UdKaG{0N!O-jA{ +z25`O;BOOo-ud_F9vQe|n~r$9}!PL($o3Lo4u>(`vI0RE`~uXqoe|WgmN7b-jb% +z`Qn#JKz+Hh5H?&Lq3^74S8hdwm5*qmq-j%A_PPTb+pm$NzOBtvv)!1oQQ +zJ^`#{9G#%$+KSk5iwCVXsm%4$d4_K_{Wp4>-2UFdZy6?qie6)cV2COY?kk?Mi4EDN +z_$|N*j&UTRu3r@YnC}vMXJpPR5j|P7!j+MZ0pjOSG*4v;FQ4=$#ZwH4#2U;wv0ZIR +zQVotKp><2x?sTh6j4L^k|>AJIE +z>T%WZ`KgUsNWDDsEV)dlRV5-C&8JNR@*{IW#qcBLjDi73Gu_7BS~PIPsw;^N4x +z0K-hI7Zz7?Joc8O&4Z@4tomZt7GOxU%{mX{?B_s(Zd>RbVgp75ZY`z6)uwngi2`*b +zRH5%TpCQlX+hYGkmV-L(%()sjhsBlZgJ>n;foMf{bhbf6fR|2=z+UW{WlO!oH(ZB= +zB5Me*aYVLuZt}K$YuH2@5OjG3Y^{{8h_or$!nN(4*S0P+Xwd$7oXjy34ch&480EG) +zmK2;3xP=oP_f;Vfo0yuK=f=$^ctA_hi1&>Vh)^iHd(jv-3#)0zv;x@G7n&V6O +zW2$^@(iMoJeeVCxZ?j9Aq5l_t8z>x+NZ4&6WtrW`nE_*;Lk004{Py?lkqRH%PHdPz +zjYMLaLRHcFM%8UYjE_P2Ew!5MpP4I+vv4^GC&mT4!k<6;d!ZaDQjl(#V917;aZI{V +z-_{NLBZ^}1p{gxC>vH^`v;W0!+y9&2zHmh~vTTe$n?1ll+b +zU<*@@E*aM8j26i%o7uiz+_l`KMo4-)B&8n+@1)=D0Gzse6hqwjAQY4to$_@ZR-T*& +z^vk~9Sp5;!VNdq^$sE3bL`QeOHJ@+CKhn>PVqzW2-mgft$D^m%go1y8jW8NuWLG>P +zc1)5Z5t{(a+mAQ%&ft#WBlPuquij(zY54O9qgn~C5Gr@-hFZ|`pFiosN{j-f7r=EU +zchPa8)xr+{5|Q-%b13@riynC%#x!n;crk$j6HIdcjB$78tUm%6jscc&>=|YxNQV*z +zW8*Z!uxaAnv>)}aw5ERc2bz-GF)DItzj3$XCMLJkohAwdHQ;SzVI_Xk*3X(2=dm8A1u2XJWqI_9`&%ub{q +zrQK^8%h1f9oDLE{tQfX9)u$XI#QFjwXzL@^u8%C50=G6ITlM*T{nLfMY6D%9fCf1S +z%wHSI&;f#>16WtbDz7e7^RGS(pSQwaW}XLyWtT61Lx`Qkp(R^(KYJaT^m1z>DX+df +zoX$04DUGCi`;Sa5k9*&1^B=Cz$_P*Yb{H=A$R9!S!s&mJbxtb#^F6$Z8%@v7F=hKN +z_yxwPouyd;)>Yy{`?h01n +zY51J(ckNSm{=pt<`WpK(++OcfcC^**zZth|W&7S41?;@7*&wgu7pA9v+$GV@moNO= +z#W?Nk{3A`<=L +zgkWOg+ex}Zx55oOX)o;#2hps`DXu*41Qvhy2bSOR!8eT12lzFWQQBjUhk;m;K1k$QIN)5T9&kw4y= +z7r#rrq4}4UXTz?O=59TW8$wbFLGqvlklrt+q91iAHwcFy!h6Ul)Bw);i1ua7KkI~< +zV~rGv0);hj{QTC_L5zg(K8t+ro7+@{v@j+fq9*$U;rdQ#(#sw|Xu~l>&6Yvd#tEn6 +z_zR3!eS?i7@pQK6loytnP!Ll@ZjRco0kw9d#U6HZWya}m^UUc1$1hGdbr3T>7$X#@ +zQC0X4aISk!XM&>kO~fxqTo(J{nj8U!Nf}2$+`UZxRzw%*m@fig@5h{?m9n^5T3Hql +z_YD5!3^A)7lDNCf&(oYn@e}L9~-heoPK0r*QE+GksUvgS*$9ytK@~lnDPCgLwyV +zSoL6kc5fzrviSBv%Qmjq!uJfPDc-s!z%w>t&GP95IQy|mbGs5LN8*5-ipq7A_} +zY3)F}H9KZ(RfHKsH;6wa4B+?ZAo3&v@+O^ksJ4+G`YW}D6K8uY?)r3B+nCBTu_E*p +zJPv!$S1OqNcz6RtJ9)(Qp|)8x03f(C{Sq4N?kPg#1_pn{Gk2$FEGpwmwk*v)bLKPn +z6?4GVm5BJV5JC@S&>px7@l^waCqz=Mn|X+E@YM1SEw5UyzzYV7e)I`WivWX>B|2rB +zk{n!a;B{L0Z73kO$WT+Pz?Rkv1>?w~4}4Ap^01D(p*kh@a~`LC6gS}z`tbmxb_-cU +zb|Qc9@zc%iqdzC8s!^6JCymI>=G5T^J4)yXsZ6({li?&+V&lZuVSMJfX|TDlaF2Tv +z#W4`&j}!rZOc1^f&9j*gUksRJQGnQizVByKE7vqz0lL24{>paoaD5x}{3EY8b{c8} +zp@N0^m+uy{)*OqDr&0<7^w|##z9^R_e2o1MzQMUkGxe2nu%Z4?gfh>V=vO=j)>eG8 +z4>HKP_eW_x*uby0bL64s_rFj^>*~z_;fIgH06r}c?$-8=6kDa?ifY2bo5Ni2gC}PH +zZ9^d=){al-ZdHHf^J69zz6BiO`k;L&rL%qR;O>Z8YuOL|FTf2pMIpAXN36BQTzwwD{` +z(V^1IPm@A62fq1;7%!Wbp3x?E468;4eGIYdM1gPN9}`cEN|#432JMn5mv2YqJ@`6V +zpLdCDtsoD-(*izCc0O(H&KUaRwo6o39<@Ff`esNByCb3N0VH2b3Se{GH`kI@drZM4 +zJEM=+cKCc>k=4rI>+pxASIUY!^RM&%XydN3?^CS_R!5WH2iY)pT);#as#6kkUh=B&G4rzfAZ;w18 +zq8`?2{TzFdpf`KcYAf1nOUtIRY?G5sD +z0s=#7?x21B@XQ%-1IUj}&}2g#$R9I1VCpZ?fig=$*o-E9$7h&0Q;OW$hoTfr0lPtP +zDc`G!i$I@I40kce`A(T&Q!Vn$pfY?2R>th5-w +zEr&;L>3)Wh9NX;(!%<_e}#@;=M!fWa5_hwbJad1e8ay);rNhV4IH{H(==N{Bf +zoOJ{E$)5D8jjP~R`&sB3y!lxWrRx+k+M%a(6nDzM7?C! +zU3clJH5UDcv^P1PYkiN@bke}lf2g~_0*tI?Lo>sF=vp8gIXDh>id{bDN5D_Aa!)s0 +zbl4vcY(plR)12YoVbnvBP)NoEZslYgE@=}!gj{#L7scN5Akx=hT=s4cCDtSmos~%4 +zNkc^#@@u!N;9aPYJ2OFUCh~`M-*yRLkaNEjZ>eV)(jWFkVe;#=liaXcgwm=v3ornJ +zN_MgaUV@meXi{X?usqN<06_r7HooPkTXhOWlAmi@s*)>ntkOUQ@vW6AO@63RGF+c# +zBj5w?dP*n7mc^fW<)KM1bR2wqg`F}j=dkatyU0(VY~3QVXlGPGqLqJwEVyWr6Bl1- +z$iO{&-X)-h;ZV3 +zxi*MW@0G~b?~g6dYupOBjL)CQAY~+HoEK_3?5*D4%b|C6u@Oys@&&u7m7|AFb#E*3 +z%%}&lXwy<3um_+Z%O+Gm&}ik5!1K(fhD7zoN3T(K&0toP4+fQ~IaGc);yz!9CycPV +z#@Mv%gC(IIOSzq4#|AQ8(IpT1>`)fKENjM?{ic0AL$jbQk7PK~3?%J^!eEex$#G?G +zf~v(Gn>7pjUjlc>0aH-Z?nM4vSFp^3<%>aA@SDo_VhI1m1niTA{N@!6y4-d9Dx#$7 +za__@AUMAXA4#0>ZY!z2xY%WNuFO&j^EVDrn!`5odurR^JlbfM +zeoJFv_N`g@+Rfr +z2Us0KW=TBb&RIdm@}lF3U?d+}?k^}(CdM9SClNp;mTiOHG)@mE2IjPX2&nY+G_vxB +zEblMxFvVnSj?*XH$(_ORs2nI1>wJPXqTo(oPRn}1F@Q{D-a0(x0-=|e)7&?TP4I*a +z-&VuVimtlOp|J@!TPna%u5w`I3|1)6X`i3hD7SgRsIKhO%(l^@IH6PcEQ<={)_*#z +ziK-U%^BN1pFQDz0Fw+ifPEy*vQAkGRA#}d$|3#1Ls@91g}zPz9%o3h}$ +zgjxn9uOjh~A#r|**dwarc1)U^P>mY@-ErmjJ$nqFr^bj)f@T+;xJN=8xcw>(QH}S< +zFwFEV;kK=(n?@$Vbl8K7UPjZ&91I=X-fo61W9XEQ-HWx +zV}z|M;JDx9<@L8$RtWq0k4ZHVY>uvp#uY_j*o<*%_D?!(XyOk)TOx2cJYIMWn*S|u +z&-@R8J2m1(=>Gf1p)>?4r4g|mf0IYdcSsE76%?lRJH*hl$Z@sDis0psO2#B%Uj +zo<9e>lFu?@M^@I~QAY>GCROz9SH?>u;>V1`{PA+(jvI#>%JkMUDV|p{_($Nb{||wC +z=3fFg(=Vr>#l5rt6u9I6EpR)jhy16&eenMfxcmMkaCiMLfjbT+%ADQWPbc#ATE#ug +z?&#hST&7`p^!j6^W9x>&i4_?G$&=g+IFJ)Lxh)sT1$@Y3>_ +z`&0XH!o-5u;sFk`P&rW?MtbtyS3k20?~qEPg|P&?#yWS3sBwft;dN#9NF#g5chaZ| +z)b(UOF3)WLL=!af@HO*78n=?EAe5FI5+$}h{s+L_O!E)GeJ1uVfSd4t0NlNg)qY## +z{{px#{{?WT6#PYy4j4I7|0}?)D)#>$;QnlCsrTr!*ZO||+~xYFonZ=HvZcxl=bdUX +zd!DU=L6xt~U8Sx4(zNPJW%5i@rW`y;kEdss2pb!TAjQyY;8X$I*ER;HQzyfjszW3R +zS_=#qZ!nqJj))1k$hRWA3J%_M(gyf!>Wdx6c`z +z=zr2%K5Wfq(sntVPUl4em*0SAi3*u_iPgc#p{J)MrsJcOvB=|$AQ5CU_LI%fkNlWb +z?Sj`T)~C9?1)XF^c!Lvz*PqlG>TyZw1zKO5pfsoMfmSp(+;sFF#|8Z+n@d;BGI#Sq +zEBAi%LJBzny=tSQY4tX5;6pQz%t?^zB5C5XMP7_1{!J^xe6riWxxbtU0R` +z0^(yk5eg7AD`sC6@KwX0#Djow+G +z7KAif@XmhO-1vFtx)uf5(bcQjZmr9gwd*JBTw)cebPXL{{eV4cPZx`e`!kpxt`LE$ +zCl@biOEk30UF?*+D2veN&GG}`qFAX++gH1nWLUas=Q^eieWt0QFMn;#rwjALpVV@N +z2)&Fne{&ad)j7^Mo6gBCzrO;2H1z>&HRrabw{CyuoBVznI#5dk2)ikAED6*t3e}*+ +zje~B;63T!22_+~QUGa8vhejE+O&RP3l?@C0^=bKw(it-8S3?_G4Ni$#Vk3Jyn1j(% +zHG4pGpU%Q*kveDgv)SvEA|i_-B2-#z=t}N=v1ex;xwe&!@WEAP(g>FC32B`}kHQ#= +z7Xqxq(F)TJ7F0f;{-f+?zU|G0#*Bf8FIowL$<)WM=cVm^M-CSpcT&=zE3QO-Z +z(f4qhPgom~TQ{ZL?`(CbI#?&UYeSuBhx8wa|;wQdm0TMo)M*%Z*EXPrdN;!#Jfgx0V)Gxk} +z*1Xam)F5USy9EV{R$q>m3aw!Lt~ZQtzX$5T@av0X$a$@J|1t`(tuIK6N!;>aZW?ex +zKkRs;zM27J*R4DCNf;5*OH9&*8#v2!dr?{P1Nlz_i!ts2h2Zsi!Xl$wc?Io!9 +zEav&Q{4;mRGZF6nD%zj9VBoZw$Njl>gieBeNe>467W0}H_7R8XxD?ittC{oh&udzf +zYy9kUwkNNG$GN#EeR-FvfTSnxw^I;CncnPE-!l0@-Y_TVok#M{E|oO0AcV5%^3a$4 +z`Iu205}4%(#&T!0=7)ZiAf?-i@#zDdieY46OMXaqjL{e@1!b_}#tkCmKCp$kdYHzE +zShaUS-w0Bxm_njEneEgR!&DI +z<>-u8H=Zs+kcVeZCA4@zy&thEDHe+MfLuZlLH8!o==ctAKk04?cl9THY!Dt<8}yH% +z`!wx>wCUbXZ7f&-#e6d?wrm55I^w3XkcF#HPP~y@l}Lo)oz~(anmyDBzA*?_wi>hC +z2g3V@!Zwi;hJFD`KBspfwui{+L{%S2tUWSyR??hqh{=Wp>_1qPW^Ph}d9!EKMq_wPyp9eIt6$WY#5>lwtDz$p-V&uGrM{B(lmGmv2p +z60`e(xDBr5@o-gEMlvooyqVd2wEIEBwicLYnz1AxFH-~Fye=O`QW~P;j8-paK}o5k +zC;Z%b%VJIL-;wH71ig_bKV;rr&tulGn3N)eE#N(8FOPgJzwcAcRvGa;;6oB<8mkXA +ze6hYp1d1QUFZDNgasgNjHaSi~%$x3%Plx>r5pD)^OXp++cbd#Ku*&pv%n&Rk>c%gA +zuNwr)sm)D>71qB)-!7td_&@!P+mecfU!AI1PJYl`s{5hYvA=p@u{GcC6))});|Z0G +z`f&C%=jyVXcn_J8qlp2P!C!TY4OQ0Lt{IMTF`^y!oPnk5jwtl-he6v*`8ve*=1-R@ +zdw25MXf0tw)Qaa%lguMCmh6nh8=^fc`OLd$5N=O +zl4sLCIg(t8Zioj@eS1M5KT)wzUqtu#l+1Sh-k#Qg?smGcqr4HQ48?aObvw?r2C`1b +z@M}pi;zgZ2>^=p?Rlk=a37_BL$xkhGhN}5=mf7pezXvjuFl^PV;c|@xCmPpRG7vnq +z^VLyfC*z7@MEx!wPhq4VDQ7@qhkQ*6dnP=1nfVy8%1 +zM?P~a>b{%CE^dP9s|C#H>{TDg+oy4VVbhv_-WfC$dTX>|Valmra%8CTrNuYTF7X)*0lrCDTkx7b9-ToCMtUm?$}Uv(pvp_PGE?e_TQGD6Q+;*=!!ye +zw^u*T?8e$}YC^3Fb;7paNXFdAlF!`LMnED}SQPkoNW2!PzuTC}qO%1N779^W`Ap?Z +z$Hgs|7R=1n`a)l9MR@BK;?4b3)N=yWcUBqt)7>pf=gwmR^1WvX)qmMz83A}2b2T2*lBPj;(q&#q6uS0>AD +zflcNMnf>%5Qitv`>{RTMtQF5c9oS1MDuiNPS2)>JbVwE~6V5q)ouS7=m7uex$?@@% +za6z2L@YfMJr6$WYbnu`_MSp5AbS-uaR?1I%dBeG=wZXM!`h?H`6p8sCyXd{09m<;1w49 +zZ@sH~{A+NU?qmtW1zr8$ZFmn+En#j%qriW8)E_x@G!X7vd-_L_ja9* +z#*F&J5HLhh)eR~K5ESoEDc%kuW$nLpA&!aSySd4By*sm?;#+>cMEYc;N+d^_aLd|X +zU@TQSK2CcNfJh10h +zQt?V}rBr-21VVG&Z+0E8ZEA>FbjruYP9$}dDA!jOD0^S#wY!{R>Q&!4zhgN0IBR8R +zjV0&{SMRky=$q$b?kcS43#E-V +zRnH)E=7cWx&F=hGCxzH2#;_D^=@5MEa)b0+KQF{6RO!zB+gDCu#BcJ}+$nN3(Ga`< +z&t>yQ(M4I4zekiy`q}ou3p}8t78!uv{rPSSi$X#ROHYnj_=EO~JJ%Td6;qsu4mH|e +zx&GLNowhOO7HgW0o{=)a+Qu2DfH)`tyQFy@$z}KTABfrz=*QG|TJ7$+WyKkj9)O* +zJLT^L4NJS#lQ2FBAAWx*klD?wXHZ>D!1Vm%aFtV8_@imId~PT?tnqy;x+z;9vZBX! +z%`BWkBb;YPMZ+_qj8l6q8*feU_m}uY3+{D}t=K-{z0>Rowdg1WO+UNlJWvS02$byJ +z!bR7z__?PmO*bTS0Pq|e7d&7SjY9ebCOvqX*C&wpYk%%Q|CXE~w~2bo0+PH=@LGIK +z=NZxK9Z0Y?4d6LUb=i+#N2$5W9|<{BUExRG7jXY@DolQjSe@KbXmo*!hN6sml2 +z@my+*5&bY7W-NE)r6LtJI0}gY^M;WSCv;n>c99yn!DcR4V!bC +z*6HAKV&v}+CxvRF;BmZ70q~OkohQ&*?R=OllyJaZ$siV6FjWOd?$pvamgMN$11Oow-y1d;8Vd3xnOUPOt=?ZzbokQf;N1H> +zPTTiuRssYVROddIHmOrf?xrX}jkkm7M0?I(ry1{=N@S^N%~bhy>C*n1Gd~WubG7A$ +z9(}iT_w>wO=N)kLI>;C|bd#uv-Woz3lT+zJfJ_U?OoBNgQ~|Z%zgeC`Z3)^xNq%la +z#BKf|PdmX}jL=ExUyju2ac~N%kF;0A70Ws>RX8JlohUQv7yp?j9$Y~l#m`*+D-Y+h +zs~RqRsBX3xDsBkDep`7>*g0qJ$pxDQ`8U#f*nWM$)`@h_ai|=;Ev35WGQDI6E^%Jk +zh3vM-fj={MUk}87b9(rTTxX&Vf>wgBs5mGtMfJ>}bt!?@>JY+t_Bn)n@S6#QEv1+L +z{CZ6dE*=DOQ$~R$(Wtp@bX<$U5*IX^JG2zGBNM#7))7)yIIg>Taq6Q8fv*?I;nvZ^ +z_C&<`uRm+_(Ac|Pnrj%m#Squ!Y9<(FifOUK`OsDF#UTpM?~ +zM&tH!iha5-%k)8LH@}NuyN2A=-FQpFLfttM6^r)D`o^2P*nG8AAJ)diUsYkMyPH!s6(3XiB;mDNCcE-S@1+@Mx4JjDfFagFIVD +zfzbi7g%i%=;mU3V;**n--Fk)m4(JfELlQ2(*ARn_Ol1u(1f4fRalxn8A^=O1K;Vkh +zG*21dmv7!0LW_IOYV^}dTJ=|hFljJ?ju#KVVzpjpe0#Wh@wuDGBvZN2`I&z{ +zpAxqyIfG(qIQb&3FJlJU&Z?v3yW;Pl6CbIGNz%uSYBetmNz9aWE4fv=ZAk=nQqY+z +z(4cMhj3Ivh7K*EpN$hX@+?%!NoANQOPCj_awQKu72K96->y>Z;$xpfpuq4Y&HA%XS +z>~{02It%`@WZs5|FoX4571@{8d(&A`<6P?w@}zrU-Ce9E!z}6l7W6aY<&<%Y;T~Mv1gsS@=vfQ8xPqd!^GUq*~C4S48@y2llC@5A5Hwj +z*15N&{w%2PGZ%$6fc4Rjiqxp2N5sCT$cN%m3V}8V?5pHht*{kJYgZzfe?DoX4>!76 +z$y_MvhypC)B9Uv7y=O11u +zK*zB`aj;zb{hKTmqnTFX5_%LUiICLHJkGTfLF$gWyuLSbOV5StQodBNt7P80_N-i! +zd27?@F3x?#L22Ocw?Dk7!p0KQ`n^K*Sj@B5xdSO;-`J)ZmEB1zAX~pJ9f0;jQ-Eg2 +zF744IVW>Lr!wq6_lVX2l@gRq$IX{#KNEP;zvdLsgN&gHIcZ+)SoEAE_WgT5EdoC4$d>aEbAj}Bvz+~J}_bqTrBR$GgcCd<&8lv6J;YXgOy5DPoMLXSH +z1k*NQsZneTJL62!=+4}lqK(9F+TV;+2G{o9&v5Op%U=AlNyJQQ_mZn9Z~^$*^d(zp +zlxdise6zj_Jy2XRp-y%ZXKUR2M0V$y;HkEdg{8&li4cvEFfY_iZKLG9Csa}RurZ4V +z12Ar)P@^7UOV#0cyfOy>F3p}N@iS0iwTidoD*;sxWi>ub3+@|>>W9`7umwTi`k{3k +z_<_hZv4qi+9gS^wJ)iWxJA%;7w5DfB(xR9}y`Hq6;HIMBc(sI7X~Xy!8kIv(Wx%dC +z91V~$BH&Ial+?x55@JDfv`R92Xzh*k(&y)T$o`NLC_)P+lK{%0-ZIcC_nUB24wVbq +z&`)z5be>xVkQ8$x`++=p4TY(6{`(WoAlDaMST(F%BBSJImu(n=IozP|Bwav5O*?(E +zS0t(Vc&Id;ZI$yMbypVf!@3Avr#kv(lq=Z3<*N=NHdchXU(3}!q^k}v=N)!uzZk{6gtm*l51qX4S)oI>OvUHez|2Om9)KV7Gp#T8w;)xo)Eg13!<$7yJboI^^2sh7`@z4Q&l)cUhR$ +z^jL0(y;zZ4K{uoRZR7{bM%aXVpYQaF|=HOcEv-FP=%>d +zc^MCjp)h%yO{SHkJTjtYl1t_^E&3v`j$1_uAEY|z?us7_YFcmWc7nD%cfm7?V!ZW{ +zeS8<*8ovq!qpYos$~rSIL64>Hqx^mKKo*t&iN!=IDfNvuj>w&NHi56)XHncron)~# +zc@IkktSiEQOq75?jeRJtuyJ)q;97AeM_GA+A^xokxx9q_#~#*casD7%#k(BO4VN!* +zzc(Z35k@TAKJIB2P;t+B5!T3mKt#8z@-}l(XAAd0p2QE%95%sl{Z_O)WC7U`?ty-( +z;2@*gG$z-DM)hR3fD+_kV{r`&)@Dfh!7A1@L`{P@8aJQ_>;b-Q5z> +z-3`*+ok}Pj(%l`>A>G~GNJ*EJf}|ks=K+l6TJPS+_x*}{X70Jp5l2k(A*llsv#0mz +zo9q>DV89$sL!%K(i2F!4Tamu~y7d@D3Y(!&&0c+uK0T+z_`Yfp+Pm^wn#{^dQUq{7K#&~;X*6({=VtHSQP3bfc*rZN +z7FWatZ~>!hWFLDSXGm#{)UKuYUA=`PO_>u1FUc=3-2pEG>1iRR7K;_K7ZNcyl9yj3 +zgmtSI%PR_6R|tH?dYiy4x@vPLAF)57ue^U?&>ea>=hvb)L;~u9P==5-SYDF8*zJH~ +z;+zd3Vo2u7gjYcMBl%S+HgnWThSg@86iW|zs71U;FGMv%@pPG2bpKNU9GXaD=t#cO +zgv)LvtDrC1st8EP_LxuJp6eFijB>%r@z@hGYV^x`v}k#aYrq*+qndsaKH1n_4Z+Pa +zHTg_zA!mQM>AJ^emTW_Mh?_htSwmt_Ne(uYy|457fPFr;!*pohWfW0oqF@?>Dt05R +zSGO*Q2{ETI6k#s2ZJZ|E#mkd`4O|EHRl+>4BwpRc$w-ST^%HB_rs=MJGw}%bOKMKj +zbn6!od$84WEvoGY7)8%1v=$F@q^8{C;l{` +z3OFD+SYmzi-qthvh%=vKWa|eVj))vT$6D+W`AlDtj8pj<%G`2qme^*tq`y@I=_Tq|XA~93LQA($udjPS_qgs3Ex}&swW@*Nl+b>~v#4<@Ei@wN=vI|5W +zS?MI{D2@_r17;1G&d62Bek*!*!T88TxpYy`zD%P7JO>mx*{ZG~B(Bj}KmxUDGyY52 +zE2&vQE?39aPyP;_%~G}y)9)*`v&9{r)VmDYV-pFkl{=wU8J*PU$Wdc_tSl=hhEI){ +zBz6sRTu-&~%Bh^MF&E5hKz9uQ?XFSi*V0LqrfmyAFEyx#U(f&GWTvPn^pQ&Xm>VCj +znBo~d_*SRK#Tk5@v`dS-#0$4;KUX3Z#w1x**bxN#>%0{wKXzRfiEq+347@>U5(h6_ +z_+pBC_jOIOU5FQQC9|e`?)pa}`iG3ugRKI3Fk6Ex&vFl}>W^7pwn>?4ZVzwLTIS}X +z&r~Nm$9}h*w_fApZ3zn7RzzjlWR2|*@FNV +zyM^v4V#RBs4y~CWs*9P7SlzH3b29z+!NVV_U)A($3|Gt~3rE1O+3IkLV8J~9_}t_> +zF9z5Mz2U4bjM8vh5?C(G={U#~&h-gVXP|*HwsIF%%c~9EwH2RP5IZFpB7~^kSfZkFUu9CY;~VhgYEMhwPg2TW^D0s2)i1p^lu_pB;P$bQikyo2-qhFsW%%o=)5NqFSV0Ur +zSk)}gr?&TzlhCP7qo}&_ub1)U%l6S_{noxTf6(#hm8iAOzL1>4qIVR89PV)0+i6xd +zLRw#Jw$oRi`pRj*cn((_Ye}pSu)D*ew840JoIVxGlU8ePWcYl*M=sNIQK{cC1Yy~S +zxwRIiS0ls8>0)!o-+fL^C&}^*-yL8Eww^ILSx{Ke1DzI!#n9t$#sA|h(y8salT+ph6c7--R|B+*RC72+pW2Ov^f +zxR;?^L2Jc-PCbLV6V=$g3sL;cgJfqwb<%^9swlu?BA4mgE|fcygVgTZRE9rgDw!m* +zB+-f{zk&lm1@gn5a=H%W}lnSj%W+oC_ +z+s+~sbVS`s@)Lw}sv{LO5P{2Av_5?}IfHUD!rw^g`LdOaBQ#OeFHDVd%aZ1ej>KLr +zn2R_3z{T`KTREiHR0$=ME>z*FO0BfU+-f&PLhlKyKQWMg6>op}DK(5DRZK!27m?Qi +z9>Usyp$`$~$pUiI0$LkS+7n@>(>9Pt@WQsuM}Z}9ewzA7m9yP~}_ +z6}g7U{I<5pRl=Chi!<ydN%jQ|(W$1QE7Sa4$PuYoGa_o|c!f`F>eS@cyHZoC2ECZ}S|GJa%y^lHOd-(%M9 +zCM{nZ%0tlSs)NV3`{Tx)#yx5}+5r-rAkdQtVjOTeEO{%2s$?$hqg>g-WBMR< +zKGV4n6P>`#l!Phd3F~2k>~l4^OwFYB>f?N~xQ2aXyzbD8JjH&C$n&20eA-6U5IH4D +zVr9q|BZyp5U^)_UDqJY;fm7pcOHAU`G;ij`0 +zEN_(@SDO9sp-|D9Z5K>@;}!Bs$DtDd1|zKnVG5;6Xx=zs^hcxYE?b0Kc6Tx9 +zwb&R9&isfxu?T)?o$wy3%aNr+hWk#lc#!ZL9;>erjrodpJY9P&pWIqA<*6c#5cguL +z!UyQpkoNHviIAVlAJ~%l@V9yWU_MZ0E1=4ESTP_5nL7!MmvQbD^UPaTmdM)9pN){J +z46s#@|0F-t6FO0$H_rmNuRg_@eEea5ocr?qiJZ@th;Fr_S;rb*MMIN8e7J?dg&$1( +zY(~)C6C8~}nX>rQ@gVEqF(Ul*97LEsL2-Rtsa +z$R?8?*;W#NCp~=Ij2Pi-`4RzcGU2v(=(FfS_A^pc0W)^7T@Ucy+I7md`3`wwOJA>&iyJtuGQ(j&im!Rr6Y3 +zb{|bU(4D)zlNE9!ELQq-Hg;Y!VIrDDHyCwD&fJhP{rT0~yuwE79&?1H?3qq8SCOpT +zPtQp>2T$lnzq2lnyQk)%V3CikpUbo$;z3b3-+`VRpBOxI7IVr(E>*6JJW1@6 +zMu^J!nbeO~|8*!wcn`H&0p37B^b7n5F+^|GkL-P=?sFN|HK>k?D}Djg4fX@8&y-yf +z)Hp@y3_c8I}^nHR<-@eP0t5Y +zSSTt5<*gQB%ZU$S?~J8Y2~`ou6LKBnJKfBwWuBDD+O^`ECZ~M4aemB3C +z=j5sO%L6Mn+e@7!i9Ab_FkLtPu0a>fIqo8*MKDjkvuV9&PIPc1<2%N4PLh~oXo)jr +z_zt9FVS*PH+m{PJ95i{X8Qsa1ImoALZZR*GxD~;&i1De45-7O0$VaUyM(HcnPY@vl +z7=>_p+B3T;Z1` +zL-vMM2Hw0My^ibe;^W^h=B_a2BkDUa)x983mewk3_Vavi*D)MLDSK0g&ttNt-a)wf +zm9Jy$02g6|rRqrwDRpAHJy_)EKBIB{D=G>SguLS9b+CA7N#1g|u@meAkAa#Z+El|N +z-l{uc=B)6P1^wWSv9b|Cn1V%;^VlAUHAL;|?`l$Y@Sl|}nKeKs&ht<)JkvQ?Mz@G? +z((uTLFRaSGH+763t+~OtB>z%E^~1((1X4XCHd?&qFFb$4K{j{llOD +zeSkG>cX&3)>vEfd)`Q^K;kpMlX>vE3y{Xb^zSL2Q`W9Q8ci|*i!3KHU+nm{i*8!0z +zLvJpE+)K!adIKQXDQA3QfEX=Mm(v}_bR3JFkxhgrUpi4x7!4j2+&!1=HSE;gx461H +z!HOP$!4n{wu6-(hE4yL*E?r*@#5Zzj(fLe~IJbfYv6l3vQ?clVozT+-Y}cFEL38Z@ +znu`88vH1-#8_aZNusvI +zcUSs;u-%aSDi}u1o39J!UO0d_sm%A@HnbA4aVytXS+i-NEewS-?-|cg=%`TqfS)Ix +zM+xLM%+%4OgPN1X%~_wx+KPUiHuh3d=GX$7lTys`MBTeL0=i*prJo$*g3xX`VtB<% +z#Fom4w`|PdE)zUV<72C_GrRY5WtI(7qJu`%p0K=fRuI}Wv@@aC{&b=KclPp+tB&6}>q9K;W)r^fBx>5L +z9@oOJP1holPQ1`}F;~r_qN86zzTUZ`)9vCwX8ONSNGNQaPp^*8Rf<*R8yTa_=gKu! +zagG#?r9(v+v4D(r4(MR$iH$D#E-%P@KI^zA8S64OXd0Zk-{E%Q4cN`A3qI1+r2`=q +zw++wLe-d6c?WOcIrrUtX1h#y5Mn4ejBP8v+9(j0Kn-a!yMVHK~U4L82x6g*#tgjpJ +z{TBz6ayj%n@1SYS=*5jH22mXk9nvZE1KAxMTo+)TTwPwyHnj4jSfWZWtQYABqU&?f +zkfzVC!@;KPcU*5)(fRGDVLMhIQ?S5Fc1Bo5L+PgBygduAXB6DtGF +zm*I(1p5S_jbodR@k#h4Zqg>%C)p5%N3^;`rkSJ_#>NhkuOx}9JEB>(ITE{RMwu!PP +zCJDn?L=es(eei0Ny{23nTc6{inn<=a(P{9GEV*rR!v#v6sPfe_&$2L3_@pK<(8xBv +zDbvNru3USAH}bh^4S|S|(7MAEie*_>kGUn`U)a5HDDutfAU!RHu~ocq(H(a^q{k?a +z$}5P=E*~!f95{BW=uG +z#=-;g!rTJ=`7Pt_lNs)|^O70iU0*cI93ghnqSl(?ky@WytLPc_+Apo5y&qtGd8MWh +zA0{;i!A5+Y=8w#plNf#WBH12fWNFFSC7t@6(-A*&e5td+XZaf01m%#`vTY|82xQfX +zyO{4azOTrW%t0$eFD$98@aqfuHw|m@FQ#tXOjxB7sBkz@kAmN)oqi?o0iDy}iz*e7 +zATDE@nyVjEQgwdGY0{)-NKP{?dD1NWjho4f`sPa^nrds$gnL}45F;pr;+7*Bq~UqS +zLI3HiFt28{FU3ni$;np;3k2SvI$RDLmu@?P%bbvN?1H#x!l2IH-^CQ4G;b1v#wkJ) +zau0L_rb|;1of@(QS;n%mad75l5RfqvV99EOQSbqbw0CK7`zuhdoTuOVJ$r*38pgQN +zR$vcGCvP#oNhQyb+E+%{f_$`8t*g{xwu<+uiQ-zLvf&zOSN+Sv(74NHqW}`925Asc +zEI9EVp6aL{H7v9~TEcg^;wB +z?y&P12^8uqo!!kAyuCg<@Jef7q1U)0qm5ERht)&UDz0CF5&xLur8l22|9##c}+Gy2P1DV>q1La*~&m12&m%+o>Cu +zv~G*$Bjjh4v`(}_O_&a`Z)2SO`DO7gZ>OHbDHMPrTuVNa)hS52#yE`rh-H?5+HAwm +zhD|{&#yc*GAU9DwBKA}}?FA9LC21}@t~%yQfM0TotpuSqny +zx}H`>fxocSJqb6v@+X$c(tUaMeZkN^t3VGwKV59RuuDYwskNtKjzE{~j)*JKSi4`N +zw`WweYSGWM+RtbAP1FZ}(Ts=mm7W1-ZG7!Gh|5kw%`(?JjufO+^NoGCfvwRRJU^;8 +zpKwvY5J~{eF>$Ucf-oE``hwNqW~>E!bp{6~$f^009+$V`4q38`nimx9f@%Eyq8)fm +z81E@(1;ATFas$rJN|J>2kvi}?eb=tYA_W3OgY`#r&(Y6Tml1Qof?5NLEuO6!Yr>NW +zyHcg%KvZYUd_NI|&{DZNI|?)A7sA=ZKQ+FN-z73{o}-f1mjkH{A>W#H@I$$bBy7L? +zGF%y%94B!yiVI4DMH7&ylDs(HrgmsoSZH3UP>1KwgAh@X7$UajTfuAXtjK~##uF_N +zgx>vLKy;MZ1@0zyuB1p=K9F-^{rL4h{$AtUGXcz*Q=;TCtt{-6PPlm+S}P@;Gh}?p +z7$16he0l^isN|wjy-CR!t7lZl;Xb1}IyaUHep{8v)y0Qd&-nzYlM(UGD3@H{GG100 +z=E6^zh;-9fsbTjlqzid{oh)5_UcQEjb!9L5+DDAJH3Ur%cls>T?2&+ff!ewGb;SouvQ1EOT;t^Ywv^jI0STBrE>%MO^>9masnvxMTFNJD?d8EvPzcQq6e;Zs%y>tX)BEyG)8^|m3y_n0&Uc7a89}x#+3Z&$KAMylua7e-QTyfz +zkx0;B*BZ+x+e*qnIph*FL|M7biFrLR?h~S5%|t +zSc)_?x}t6UN61t^%C}M1Ftg1C3WJ3mGSRp=bckcjKuP&^Xa=>5Da-^<$8OvwGu+Lb49O$=*F63=1ve0@jSW`3y +z4tRJq_4v%ZxGloBxrV>dj7dJpY+I;LWALP|9pRN8J7zh4qoq;FiW*YHDY +zA%Oh0MB7j!?L*~ReMc=q2^4smmiT4u-a-j8#7V`;maM|rk{Yel=JG`Br%-;`iwUDK +zCJ0D2NWKXdA9JG9LKc1q@-Bf@MgODlEy{jP#BL8$?9;OebDs*+v#2L1OD|^EF=)&+ +zF-YT0NZSNI1hcCge662}<{Eki2j>h;>Fx4dm3TfH>0RHgbFg2&9%O6ku5hyxg;PO6 +zQdH)|Mc|WZvl>K$A#axSH_OI?M=CB&rp}hnQr?^(e}%yYTxz-spUQ+ +zy5JNGFkcO9IrNRh4|x|OZh@YuDXi|O1bBWn+C`}}`MM-Fp+6*eEn_lwSH!T1eKHKO +zM`VUb2DeL!y>;=|7C>ABt@p^4(tNCW1eRX-be$f0x+fZvAP)p1kXduddvzA-NisQd +zJ^x}9!=5wHP`&XKpA=boNv|axF%jyW0t>xyu`&4Ah^(Og9EHaD%VSM**M2+aJAG%& +zZcqO8aiY^jWc9%h!de#CF;7N7YMks>^*f7g%M3c6-t;+Y`j5WWDbgw*E70EyxV&wU +zkq(Bgm2osBd`a^oM?Jhj!ZKrFKDUZJdbL*$`9!+2W``^t)oBHfB00waXP`*g%*M=L +zZ{)`d1Vs&0BV$vf57yFP(8#4vZT%%Sk3+=BwpKqF$rwqh*`UswKQ9-7!g|fX5jaeM +zQ)RI5a?QUi_({puV0{*PRsnZV{y?TS5l2OgX;$#s5qt+B&R!fBPeB=3nMO(d+9d3b +z^^IUTo4Aah$jn5T>q2T4R*%Y&3F +zr7K(<#f9S9@qO$v9KrXsbili1DLiSY+N=e7XzQ*Q3ThQ}Z#q8wPvB%yNjCjKVmsR;@Llb$ig +zXR$pT-H6#CU`2w)!gUl-q)VyT5Q3m( +z{UiG?(w`%uTO}3GhunmgQ~8_PXrHo$aTc3=Ua&5vPY@>;zKDZZ-S}k6mq5nRtgqAu +z3LP_(t$(Y#--Q^TH%YlhQH6=mH|wWd9z7DpByBbGDXSGUbXBGG15*N;pedM)YgCxo +zkQ4fPMt9puq2CT`s}+B;vZ4vsf;){%C|FVcvG>;yFH^X*Q4{!j*-|$8RbycXE%A20X3S(+ReVx8I*weDKL7Pj*oK7zyfqtZ)1F3-DR?QufEr_Q_1di4P +z;QP&3wyNXROXKG4$jVWu(9Wl~ktr-V`MsZ1GGo}8M%jZT>DKWaEA;h@gYGCOV{+He +zU-aD$1id{Fyh`!YMHEc&Ktf*3U%YyPPgBDoWJX2nAdj(|(bSpf#$F2^gt!C4`xOH3 +z+GyXSi$E}TosN|H(svPj_nV4$*G;ci2A{z2C;K$&AgT!wsl|9cQCn&o73#J!NAFa~ +zNePi{j8SYF&L82HLB+BtB=HJD2zezS3_8$gQE<5AI#|9W{H>4++y)gjbA2(K$g=Sl +z*E7B+f|^5KAst+dlO8_%5b+XZRTUmJ@PPQc)97aOryZ*isqEoR3QFPl-dFZuz#G+O=;o}Mch>1x>a75zneGq|e +zh-w3$n0k;oNjJzwws^&pcC>R&PQL4XOJtst? +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 +zEwjS%9l*^tGwlqgo!G)d`IxJ%|8O%>_fPG +zZS9VGH(M(Mzpxhn3w-5jIYcdL7QoH!0lL|9KsTEdE7;I~2VXgZwqxe$>&fZ(3>QPH +z>PVb0fSdgc;AWS8Jro4E*;g^9BdkegL{E48AKdJG;p7K5`;GOEs>w=-I>625`WP-# +z4t)l6v&{i+cDCml(9NzE=mWUfA^HF^M(`g;x|JCpu;AYPO +z-0VT(Nsw(=6iBnK6B2j~%gv6n=2Cu}>b|?DOAlcHFj3 +z%e|W|4sf&AF+Q6s0^ID`zufF{fScX@+szLC>1Lb!WEGRiW?y>1O8v-0Z=!fE7RAf4JE_KsUSNA8xkT +zA8s}*#-DCB*`u4SK_CNkv&#W)Ho||q*^)pvTjbu&?!9-jWy%?4)})Tb~aHBp2XjUjW=}l?OK)zI~rAapznB +z;AY1f&4Dfq5{$+@&oW^42+$8A0JzzT05?18PdB^PYN9|t^|zZX0&uhY0dDp_?s>?A +zn{5kpvtI(-Y!{%Lo&4L)CcowZ2e{e7MT0;$+XaG+9^hufF1W}7-0U5In+@()kFB9c +zKzHwEze5ez1iIO205|)|8AIpd+m-AYK7gC8Vm4y)%gyEre8PoRL;ms6&Bl9lv*9yq +zkk%X>6M$~EvZC3>5+Db-*%KwP;Q%+g@zKr30=U`EzuoLC +z@BIfi+wb1Z9^l)>0J_@hN-1%JBPssJ~eP20r&-p%Iyhnr1)?`GSw+5dF2zx;Bu?H=6hSx?ZN51s$* +zW&={if4bQ!|8TRhAKYvzfSc|A;ARin2Z;dO?4&>3Y@z>`n;iylv(v}q?%izd-)=U= +zgPU!J3O@YkX1CwF*%1?Nlyu%SD|CbRZuX}pQ<(=hoAtrXCbS2-*`bV}lE2;T%LZAk +zUv4(ry_@X@bh8(MZg#Y)VM<}Qg%I2r<<+x)6F&pxY;1v(6}|7 +z05@CJ;^+@I+i??1n#>^^{-4PEX*sSI$lN&j%Oq0a$s_5j2iM}((8-E6Z*H``JfQ8c=rcst{#o1O9C +zW=8?s?BEACJL+#YI|ATlAG&2O`ymxRxY@Y~N59-`5mIm}%-E7lbOf(vlHHe1_qb-E+7;E!Oh0C2N&f4SMnzufFCJS?Pi5V@ajHvAuM_S%D+ZSvq| +z3w;UZgtGd>%_fiXe{{1W9^7p6Oh5f-oIl-c&j&Yq66j`A-n-cy05`kur<>gibhEpD +zx!ET`H(MQj`_au_jI3q(?Pk}~5bFTk?5%hZu6s9|;Fp^n0(7%)0B*J<(9Kprbp3~$ +z4OzV*O|*_&H1N~SK74Sq4?zXy45;F8sD}{2bBy781+@ovfo?YJgPSd)5NC%Ca(wS* +zhXLK}IFzgZcC&B);b!9j+-y82*1AVGd--DRwPCkh!2np7jKhob=LSGGd+Nc>mU(cq +zZ~t(!yFbi4xY@V>{_ii?|%cGmE1aPx+HCe_0ZgvO2%^m`}*~ZU~ +zhJL!)O26D}`QL6f;!iib3Fu~b^1XO)v-2L^Y(xW~n{5tsvx^D9;c&R%RV37@U;wBS +zr#H_J^Yw-Eb!Xf4v0$dKzT5=i0^x@06ul|k-)=VQFE?BCmzxdu_R-CzW&pU^rN7+l +z01OvzfSa90JV|co8Xg8NyJK-R2dZ@MW-9>Q?67+`8zl9oo1OEwn>~cg%?#K3Zd_tM +zVD&FIo0DPhUv9Q9z|EEdL-*(gy4i34actVcI{ +z6X0e~eHsF~*)UrF?Pk*v1Kn(ipKi7-P8HD2Mzeuz%Y6OlW*6PN*_{t=HtnOEy?*az +zoBwvRYq`*YZnn&Sy4kNyy2;G(-7%MHPWT{MMaF#z5EU&S-E5)GD)N83*%okPERf?h +z%qKuMy9eARuiMOvNH+jBUht^ff}-?DsIGHOTXT#d@`aMxH#|_-yj9Rak-yyRhG1-N +z-;ZC#CAmK^-MiT%O_D|TZZ_=Z%f{bscG07o{fsl}^3lx}xOcO??%iye{od?E6vg{oBokJ-BzXOMbc8-2gW`{=ePqkw4t* +z0-&2s@3KeKX|VO^X3ziaW{-?LVSaG4rT%uav;K6m*Zy*|pGE=P?67+`o9d^V-3xTH +zuYqoMgbwZ3Ki%wb+TnXQ8zK*s{@%@A69>airg?C)nUDOY|8}!29^7o>pKf-?|8}!$ +z0dBSf(9Mp?@wWb_n_c|iX2SyA?C{@icC={7zuoNOKiq5vv_IYKY@nOn_tVYJx_7e$ +zieeDq?;hN2*Z*>}wf}Il`Tyx=-UGVX +z4i9cN;q!Yp+wsB8evMN4Z#P?kwz~%CW)D2N*|9)3dl2Ym7yrx6p7_(vHu%HM-u=_f +zj;cfCe{{2_^N5yzy4eknZZ^g0PdD51FE<-87F+h-%|`v@W_Lci*%XHUp1<7e;aE}S +zM>l)t!Of<+ce9!QbhEqv;bx-&-0ZCX;byD;|!^-)^=6z|EHW +zUv72?(9MQA?)v}O-2TAvkm{t&CdJfW@}<#|8%pne!1BZKsP(&Z#R4B +z-p$?sy4gg?nWApQSS|tw05@A7;AWdWy4lGOZZ^*!Zg!T>vS2^J%^rDlvyFeb*)+f0 +z?0{cx_LOJ-Pd7XEZ#SD*>Cw%G2)lQ)sUO^IOMsiL@^3f$9O!1#{pDtBaCN*)UI4n; +zTYtFOcqDy4-E7xiZg%j!n|%&+v%}fHWG0dU-0Z>MZg%`1ZZ<^Ey_;P)5Ox0OW~=-! +zH@gGiW@r1J{B*Mccc^~5*|raE_NV`Fv%fyN*@OS>W~cpjv(+BmY?PTl-E7T&xYby&}s?ugo{i +zIzPs}zMp?x{c--|Zq>@4@{a$t`-9SFPp`tDiAYeYnzZpD!<`1Pyn@0bE>gz)?-qRr#VcLK&aN|n@6N;=F{juXSJ +zBRhy6U*f>bh7AZt!b+Y|T}8fAN##jsJX(IAKKfQ@+durXsY4+}Tmmh3v9>4T@Jy1- +z$9I{0$imKKN|_a=f_1a7BLy{s=i;O85Ek-e5$SS}*jXsBT^0p|5H{bo5N+u+gdy$8 +zXZp8#B9pt49j2PlWWF^pxefR8yK#kpGIup4lEVY^UTCbB}J81`5xj> +zn?Ng3GGnpn3vQqp=w=^CbGsjZmvO3V$`p<2X24x-{s{+LUOC@m6b~(z7)i}EtWe%-Odl} +z-U{YSbk}Z1uR1EnzPYssaKIl&U+Rv@%e3L;(>N6UOwUj~S_(z3P3oOY=ImGzqT}4i +z6)bH}Xc;-!DerDq+ZKsV`iieUmq?;KlAm5&pbMT@6WT%G%kk`Y1k5@k&e3utMNx2j +zU4Lt{3+e+#Xz3Gm`Di1^$(ol}gONtgGmX^V^MXz_di9{<=E8R63WDQWizy&`fEKAz#DVTa)&B+vMMWLso>HZaWwy5}FG +ztXjF0yJNKfG1_pbT6D~`W;g3Cmj)s))AyhVmJF(#=8E<{NYn#oX^Ly83;&z9vN5r| +zXVn +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 +z^ +zuf!@zv!$*~LQZMdC>eAU*BCW&>RKzNty`J1ps6>f$Aep&ps_Jl-l1ITbfqu#fPdnS +zNokDy0ewzX_DN+f=_HdCNR%n!;T!O5VLNW&7Fnuw-1?l*`O@~ps1QiUsaU!q*lN;^ +zQ@7e8zZ(y785lEv*3uJ_^x5v4`m^#Aw@e0ss*U)DD5n@NowEIC{ndw8R2$Cd-%#!T +z)1(Uks*Mfv3)S}C_*66Z2dcgMcT_vsNl^Ybs_j21gyr_XQEkgtRGXd(fNBd7{{z)7 +zc}2BzYDW9Dbc+5Xs$GnS`|TI1?f(a=4W;q_0@coZLA6z~Ur}wsX#lDX7Twdok@;_^ +zHjL>jsx6h5k0x6EcT~IZ71e$d4?wl)0jPHQ3#uK$`oB@_kcB@{?dXa>Q0?5w|A}hf +z{vFj$`xjK({T0>T{a>hd_zS9ywD51J_6-2l7JostXKeo~s!jKQq1w!^sJ88&sJ0C9 +zZ&Z8Y@b9R$QuDu~+Cu+CwH^N(sy%>_{z3RJR2vTB71fT|i~YY*?VaDK_Rhbe+Lte= +zc3p10N&o*wwJ%>#ZJB>XwOxOs+RXnzwX1)l+V%fHwP{O( +zXn}72H>yoa^mkMnb;BQkYOB}&4b>JBkevDx)#h)bqW_I*PyQEF`=i$7UYp|oiE3j` +z{2kS9_&-qX7^uK^zff%)jMD!PsP@_`s=e?Rs;w;Zf@(YdS5&(ifNJY~|BY&&KC@ie +zNJo)K{$#wNzCU&%Bx9i|vA8qH_#md*X-A9boz-4f?Jy7d9M;N4)vE +zz;211h!4?sG)xuez>z9;ru=t&!RvcqA5%Ri%W!6VGNC6`F9}ACmNV9L-q0rrBC}mr +zB3txjH((`sX%KY#&?Oi81r2UWei%1t`~a${?eBZE%LV)c1T5$dyJiUGB>!YH4Wkmy +z7IR>QisYgM6+9EdFx6UGjH*6$=1)k)|&HG#+h +zH%lD4AZ`l9Mwl5o2|xlk@Mdg44iZ%23F505habPm8z_c87|um9pY&WG3!r<2ZJ~Ct +z((}-QwQ+lYiwz~W-0&FW3xbNZ);yGh{yqwiO$ip3;);9+Porh5A`*pNFy;02Dc8t1 +z(nXlG;8HV!8x-Q&u4^(^jow;wAK +z{6;$Y7Ij}2O9Cs<>7J(|{PjTH@V%18$l^Cb>$MMxJj{}PmOB&`=F9bo=3;dxADT`1 +zCX7FT^p@oh&n^qPTHSjbWx|xXTC`(!~TWu +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 +zIhnwpKtK1G^2e3tDFtb?7 +z0U&pWtu|HBZ;-oJ#N0gd73B6WF~A%81#))+K<&M(jo`9&uC+~e(M)?(+c-PsM3vnqU!3XF%aX-d9E%SOntPLDMr16;NKuO +zl^Fo!&fI?ixd$zv5dk2#K7lj+3&?GqFu|)-B}2sQYCu5G&M<NgdjYwv^?4|y +zK3R?ketTC80J+n`aTxv%a!b#R)^~QCkYh=X0mGbz8q!sAOb&q33eG3Uxfr*lTPqfa +z;Rj_JHD&z>4fQWc1^yP_;<@$?KWSZK&@Xf4Bu4OO-33t$NWW4De5iVB&XVwhe9WlX>34RbP}NQAze-2mv$AG>NUz;@N6Fg9N?Wr!M5t8}dq>-SUmP$r-ei(Xt=kc}+^<5#655*=RxF~6sv>w +zbf`|GCR=dEb{#le8?@=beLT$);#%Qz5j?}m85T0AbOFf6*=-`NxPVWGLm;)8zEg(z +zHzmV(Az^GXD$`;2``YiJhUTn?a+uZ%r@Zv4ifYyI6X0f*P&~s6v~JY17Y@R{VL=i~ +zybJL^wJ3t+QH~WS2uYPRa=iJ7C|57eY}lz+20*t#A>+LrE;T#U4Iz!+0Cfg@;B~;S +zg!+zqCHoeSH3LfXlIT5sG$Uq~CCw@>U`e&xmB^Mo7KZ(@f2+9uubjv!arCM>Y5NJ&{U?{Q51%P%>@dBea8(gHeHMF?-fDZ==Cz +z&yRKZfnT|HHbrymuSbP;lyO>D#DkFD?!X(79rdj(D2d)wlE(4d?&#r9v&gsI3gov? +z93ZD*$#J1LFck9HmdkTdHt9ZW?}ApRA@pE5d<5~!E!5dnI!)w$o3J)d4OwS~6e+4~ +zJ(iY5e5vc|Lb*yx^bVSALa+gba4JX>IP{z1&mbbovvG@_DDdUqmKpd +zR-H=)A`T$rVY>`)k{_sCQ?w^pcP?7%txx;!Nv+`d+ZaTgnWEeUQp2@?^Q^jfL +zNuY{3^*?Umz!UP{Jvx`ce>D)~OS=GSay13U5h3jRoNmGz*8KS%6s&+9;jUoNqsQ+T +z$gKnbx$6NSw=4;gWzm2PXTeR1Pzc)TSo;geZ3zImr%LV?ERbfc!mmfWYCL5_n3U8L +zb37f514w!L#)QIF#a}>fvPW|(t}gN{%@)Nu&E;^W4~MjMYq&SI(#E^or0nKs+}bf0 +z#^+<&0^D$1#9GKAR=mTB3ND{bX#WJcmul!|!;6CUsfq%mkp^IwEcKn$M8+o=To!s +zei}y{g~eO7MTYq+xQ_hU4FC!f?Xc6k9m8vpo|2(xBAfU&>_`NLUW`D&l&Zw~F~IrK +zSUw$gXJ~UOEL6bKk=s$p`YN;}m?h{bh0iS)KF9j5AkjVEm~-8(YCT~=JZki4OE_wJ +zletq$*g7NF%4T|ub%*l09{gL0;y|b=_vSi0wt)B%dcd&4y7jCQD`+M1H29YAg!AQU +zz>!z)y0MAxR_%gYWl&=tudTk+XQz;7of(9tkqp`#dD9?N6wR#^GS +zEw8~)3&oi$^~+VE>ta7T>VD{8Q*HBA__3fEA4=i_HAKxV)XLrdjg_G4A5Wy&J0;3OA5 +zl8eHiIn>Olw3PXcJ<=suS+}CWMM&sI&G@3N61HG;4zBfS(j=^58_xX>hfzaD)Q_~? +z4v=H7;HIHw@z%5^jA0Tly19ofJ;d1~e@g#Hqz=cp+Xn-DbIYaPLZ2@fXdFwjN3QTKL%KqnP8 +zeTuCPJb&DtjKdkKvuXUYW5YR>o#1SixLUwreZWaQ@b;8S|7`ql8wfM_@>BwIanjCs +z5}}!*?z-*{8kiV+uxn)uj?idLVCXie;E;o+0qTDB1W&E@`X|zJ4ZfDl?1F#jvR5DIxekbJ&2` +zK63_NDIg2HL+%{;@oNW6^5*w;O`Y9EU+nJ{nXXlt>>QT`+mMOGMk5GE{SBw00}1`E +z%{HukP)cwJM3_GoSwakR)fuW^qcvXrC94tM2Y?YCVs*cmbXQIqnnkdygV2 +zFMDeUc7{^VP96OZGOoiB*LM8}+(TI3;c{xcg51Qj?-X>(VWv104FXa{UB)vT)t!-u +z!&F>)iWFxg-nr7iOMnf#kKDM%^z48V9EuCftL7B~K<)_=Z7oJku|GiW3N!K^t-^ZI +zxOX-pLFgYW7$d}Nze#CMHkncOPwHKtfT)uUcbteU7U6s?yg?%kt(7G;LzfVMpd*QB +zPb=2Xz((D#?>P!BCJPWU8zn@%RVRTg4uEMQI+x|54Dyl>DDhiWYQaST&sG2FG2jrubmG!EU;f11{Kw?0gZbmuU +z6cD-TVkR*xRU_gK&Y+u=3mDC6ZVW2I)zWip1r%afY{B8vtkJi<$DcKoirBXdB+DRr +zFzCD6F6&f@;T8Gf{uCd=iG<3e`vNdc%3>P!=-be$JhPi`rP6$1G7-h0(rg@% +zTQgv>lZeOL%`J4BpZw#jChl;OAj6y>jKzHFnK??IcqWQt?(ZZeNSD2P4h|oU^nD%| +znOmNCn{+lVF7M8_&+e+~POiUt1^e92T^>&D30V6zm2Q6hxp_!-{F%G8`RR}(v;G+Wd+>v6?{)Bd?mtrYENg%mM;qra{(1mEyUzRn811j!dXYl +ztvaQ&v^1&M9}>+DGol)ia#cKzqcnkb@vYG*k)`KeSBnh$64#?ywHw|iE^oD6YI61u +zbl-3!G=4lBKujMl#ch18csxr!-&C@R6{CR%MW@kRBq{@jfq;MGb37Ir-S{>rMh+JK +zLYW|T+@Cp8uT7ClX2S#sQ}JL85l{Esc`JuwCP$L-?a<(7*_-P#%NqgQ-tdptZdr%+ +zW5U4?hf3-6Pv_@2AItRd7&mdZ^}4_)$aS%GKi&2&WKTCApCb+)TP2}jJ#@4?wzXu) +zd&)EXXoTODk1Qc9l?=^x0KIJ0dYBIyILD+ZV7Aiu1XgDY+uEsk9cwCKZ38J)n|+R* +z(_ykezM=b>v+GR7Yd(F3%UXKbnxVIyP#sn%EVE$siP&>i=%;y{=T8{EUe*}oxx<|J +zv4-~#ChvJA1J*u|Fvp~!4sdWA87H&&cLcSzbw&S2gSP-kr<2C +zOt;jef5*6ky;=W;al?OcIm*&T+KLki80DkkGvKkf9cwYeb(l_VGM%cg-Q6esUl{ip +z^w_+7PW`$mbTlQ<8w(7Eayln?y5u`oBIQIlT@o?PRLbw?3x5Y6Q`pVU+c3_ +zG<#V>Zg1qPM7pT_)YIer^b{2eein9izqudIpG;%@41Tz%JQ?21wBs00)M9A`gtm2? +z2@4AOM8V{xRsrak@4i0*8_9W1r+uG}vqTC=xhuyL#S?<( +z0>)N|Fj6I?({v~*fW~dp6!SDU+;)}y1E;$b{pwp<@=dBaADP^H_D1^!OkwM1=lYK( +zRT4clX7<9NtD`&Go%(*%l82y0h7`Khr~+bdX8;=adUhz{y4BtKc{MzGkBWwMOddev +zo;qKS^=fL86?STX9DG;CkfCWcJ#Et-574;zeIn*Cuo^y*&95Hfe?Fg7alPMIJ-nM< +zGf3rn_JC9MB_4?w$*D*?#bO9kp16m&*<6Yw&`+HBzOxR{xC!CJ-)qmkYTWl3d=lUB +z9^tT7T14yKl-=A>gB2dPl7Rb{8lAXBNF)n8BrqXj=>y_pMI1QK;Mvr4aOOiMM85hVBGi+p8>{`otE$fsEaU(u>+NW*ox_q4eVJSchjng +zK8}y__i`utDVX5o}}+@D=LO3l=f(VDhsM +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 +zl+`<*TzWgM|HghYp|srjF>f;^K{S@j +zY}U>-(;G#y=t_x9bqCq*ZbUnbN8=4_gIst+F(SuByKfy?Y%0B)yWBU%x8ENXdEb^% +zCnB+Vc1n;-6Q(0Aym!t(GjiTnZHuMzLPTq|Wy1~Z-Up^>J`ri7hqR4&c#{zBy==bU +zep}-dT)!rrxjm*>GPJCXI8yMQxGX$pHc-*J&uV8GLMX)U&J^1 +zleWMo7lAJdqKaomne~WV*gc)e`F&BagwlirLuIUS3%3|L5_*42@iO!}nG10I8?~pv +zDR{6_j)CJfiX=F`D!m)Vg9MJH~!^ULULIaA{@~m*`-T-Sa)FKz*DM?smcy+Dc~Bn<(Skx1GWp +zG-{RL}5)dCyZGG*?SK~*;L_)f<|Esn|w30IEbu +z@zXJ}qiW=yx~G3LX44ifgRVI0!825XDL=AKh@~}Z27!|}it|~}5?%?bZs3EyagUzo +z^X;O|a4OIE34%+*)<C +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

O(r*P@Yp?y^TOZf7ti6E06s>$Lpz8O>uc8Lk< +zCDhR)LTHO_G6>Q{X9H_o2ip*dGGYUkpuYa~xaGDuRu;@vnCVG48d-Dl1<5O-`0cEa +z@0Ih2W8CzN*m-O&loWJ0+PMwiRs)mMF*fLhnwAur+(qPqu0XAZFRx)FHtkmUed59s +z_h()oTy9_RCcZy^C7}3O8~wf_yu{KyW}&fPn|%RW7iu#NJ*8e{;Niv!7ueX}$eD1> +zWj2hQ!1r_+j>68wm4L?$0h3!AZ1_^Bc6y&>GpH+p>Y2uRp9~<<#Shxz3^<@CBvE^< +zW3X-AtveJLp={tNP5_WAP7w+4)O{BonD&-eSLWZSw`Dp;~k+(Yt?> +zrRtFJ)K1}3Xgh3l(mQ3@*Tt4X4`qFA1Ft6iFyfyk#3StqO>%4B@+K3nT)w+?GxC6ZKACFsA-$0{Jj()w{Pnm4va&p{9AzE{} +zJbI(7)vcDP3^lA3ElcD~Q_;ERWm!A~fAvgl__CjLK&s}2ok>gEREa1lG?)reB +z{}?e9fozH9y+I0~y2Z#Fr(I?y6^D4;T48uzw=J1f&yZyyuW+ud2* +z+RCGWP}zoXR)ca959%%0otU_4osFVhGYox(MHW$xy*sn}G?LSD=2ua!5wcgKnu#S< +zxC=~}2P#vwSLFUcioI;=>Z&9|!yd>{B5ZOIv2X`S$Xn4%y}0P^0sG}2HIkph!r9*~ +z0)TArnq9bL9UNit^{@vTE1jkR?GgFh#8Rk%f5)QCK1y7ErA?=Nmzx;VKMD|$ekQx> +zBJy#T3(8cUaGr2!%o^ZDZn^9}9Xwcu1TuoYC;igBzs>Hk?z>&nqnt69m*e1@Mw<}9 +zi-sXmDB>no}!Nm2*KXiNgpHcT?ebaYUegm$>_rWo<#gf!>J=RfqenJYO@l*(UvJ6C#6@zkMZK1wrXk=9 +zLai{azr$1Cza1MHf%VU;Y>y&IDcRwce6qpc)O=00p9=&t5W3>veBXB-1?~X0cO*NO +z9nNDFdY4tBp{-J#6-Ye{`A!u{2j$G{@*3$uDj)`K7HdHm%LRqVJM*3K%bZVn*!%8Z +zdixn$9v(>#rVToqtlaXCH +z-DXa-LLF^ldMb>*4}Y>9Je%M!~Erk~7i>Ze<&BcE3OdqEXx +z4TTGCpB%*m)Vy||T}1WLmz@*M9im<@`*xgf+dkw1J1XgKGfN~P$dGB8Lxg*u-mtNJ +zd`t@S0S;oI3o-v24_KdgO4}@PGP`Ahq6y}vx6*mJ9lNEXGU@ylkXR`+thb@eQA4;F +zfY!NAC8%IBDYW2#^CRw)bMsQX9IeHxo=Q0#1{I?2!)VwMc5TwF`am->g(s1J*=i;e?|pE{@{KhWDYgd +z+2=Uh@r83_P6{iV0TgVjUv*cE<;rM|v~mPG12{rQv! +z3)_aU)NJcM>m3GIp~$ne?^G)gxNMlV%w72GIQhQ-a +zw_)!mLI9i>awTs^4cVM2GsoJcD~xqu+{oiv+*2MyVtt%nK>jDI!g +z{*)MWH8b+HljNFg6@vpO07bz +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 +zOmXYZ$ZgOB+LPCMp26b0W$rsPHDtf~HR +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 +z(s&7vISxfx)ZCz%% +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 +z5Y|M5XM^A6imi~awo)N0Rx_zGU +z5>S9sTNvP!-3ZD24bW?HO+Z7I8i1fs9vFOy0B}yWu +z4eLm~H^>B`Pw-*vre1j>&hrtyGEc8%u;( +ze|E^rNLHlBSF6B>O9Ot%qg>G4`D|orYEWT&V)cGw0zj;_nzTaUZk_jI)%D9}T7DY3 +z+;pn;27v;DJX-v(tZU6qi8JVgZdtfmGy_Ew2{TYA_!m48y!GA?Mud)O;hU)JkGlD~ +zMHFQq5oHT%!I2CBsZczOr|P_$^F(DydDZxeB$LMxN#@Yen`k3b$U~QTQ~LE+9MmH% +zDP`0R8G|Y42$}I>dIN9}Tx|qCdFHUh%2=jvIe3a?(KYci#amZa`0D~xwTx6LpD#eD +zz{{q_N?2|!OYzFjOPka4m_;9zhf;#FHQ}8Q8NAt6dExjc(i)CKqICqLP3J|TjeX7y +zMw!204Hn{D6bhE7yX~b@X)t5OLcpIyMzGmuauS_em!(`)#i9LHCY +zVXR%_ns1MWvpq24DC9V8Qm@=LI=XKCxFuXJT?E`U_MJaOr8Cm<)OQR%HZj7DGXpNp +z+w*O8J$PN;DR}0J(TZE|w)WI~NAXbp9`LT*j=I=-&y|V4+Mj#PcTFO~Div9e`*u4N%Udly*WFfZXVY +zwq3Jh9^cky`cO0Df3CTh+-2aL6)SJ`amjpRqN{S2@WP>Er&YKZrM@)dy~xSF^Wfs5 +z4#vgw65ZPFNXNXWtWGJv7kw%J2UxGiIg_h|QmrNH;)gX1i9z)T8m&d`6VJla`Q0Tx +z`**kXj|Tpnt9K_nua2y3N`*akHa2U?8(QeLM*$Ldt4Gg?r&h=A$nN~^{AJHojqG%7 +zYhdk&oQ+p&)6&xXQmKtsMtH6GqPsiW{$RjjtF;_g_~Xs(_nY?br7)2n8K`)P)(QEu +zSSuKB-Ima>G9@>ONw{kKtmC?0zi!oNUquwD6D`pKkznzQ32k0RULfT;12oVyzY|cW +zh*T&a*0nplhK=Y~fXN4B<_Enj7BJ-R)H6$}pk%jAiWiOGr%~s8+GUPy-@b!jI9s`} +z)Sd2%6EEuP?++=Y36e(+Y?rw8MzLmf=}@2j>Y;=|_@z5vdvCySEp0rbJ7pRoJ?wVzr1(xCh7doPBOfX5D>rl5Bj +zm~-@)bcVf4d>h-V{QRvxvp7@0ioHVViNE+`gLvXC +z3+{3zZuf30ArPlvMOvN7+Wp|PwVJd23tv1q-x{QkP_8%!4E+iCti|kol*OZduRyW0 +z7WkyFi($LHzIVm2Qh8p}g3d~oyXQC<$8(*ECnLhmN(jMK&4AxioGyCw7+zsHfb93H +z)E7XSFK)iY;^1MnOa@A~4+YLuZS7~{8?|Eq;}XCJWl~$JMbh)JcWxPcE8j0=gZYBw +ztaA>#RpOIHVM9h>+x~1LM>E&C9SE9 +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 +z?pKFydCzJ(qTNq0HIkYTwpUgG +z?HPMB4=LrB2)Sm07%v;b4cbKI%5GswY>0yc@h;NOG?KlCt+MVK^9@&m@yf03vmJKY +z%|$a46@rI~dFJNUl+^OTp+>T8i2{sEVX5Qc9kSkHX}XRF++z(QNyAofiWFYYm7cu4 +zwC#r&h_7p(O?@+=?R(R+9$7o8bTYDF0+=CV@s4-ji9>@cNg`H7A!LC0#-h_GK{O%e +zCzaK})s=OwqOv%GHEu>kJLZ*j +zYUgO5uZ}o$J*V-Ej;~i&GA7 +zWN*=4r}aTNO@*(XTqUxht|U|mR}`8^+a_Z&nPu|t-k&^>Dt^B+U_R25PfB}3dtGHr +zM^X>oCf}K4<$~7kna_Mt19<==BeMaU{KCG3nv5V|n!i0&Kf4L6`DQa*K%r;;g!2Ak?Jcc9Mb@tx1d<(v__DOx!8Yk>=acqw$7NmQD +z?9<;;MXyX<4pWfnybEaurQxC*La<(e;0$!U=p|=WLL0Anmv!tD2|-3jRlCXWLkB%! +z`03VYH?#?nwc2^Of6m$IWxCUgRx@j((hsdcQa36Oi%SnAtD{!;goiQ%P<#`yVL)ED +zC;N{N(PtnQPNcV|K5jnQoh%J%i$6$G$>QZ6PiKlgzUzE8EhC~>)uFTe3 +zat?fX@H95rc6@PjD>Ps7(il#hudW@oY-Pg7{ZrGB2SmFRFC#?abo4@IvF^&rF6~kw +zB1CPr1WNaZhNuUtUu&^BZ^VLmW$V^6Z125ot=`GkWMw(wQJC%nL+RdY>2G +zXaUu6x?MzZuAynY=%%->60$%P55{4AYz5}*$N5)rDL6#wIPkR7VcO1LBjz?5!gbSf +z?;~4HJaIJk-g-~foHJ)hEi;jQOwVX^*TC|CvRg2@_6q5#b>MOark1j0eNTNU*ZN3h +z3j)YSZd-_kQ3y1`Rf_kO(nb=Ft^x{!9EHrj?ION*(X!oB!qlW2i?HJL9P)BOD!}wy +zP0Wg|%L4}T0?mAl{<`4uxGJ^4&}SLS9`EU|kfOvS7%na;V4g8UKMr +zu7mIy-CJ1G@63i`2n!@hEzAcP{QhCVW!*(xpAnhAuxtb2hG2!h&P=N;EErqA$GWu_ +zKoj%xdI%NF&cqhkAEP0Rbdw3vX@37GiL~_6k3fS2&o#2e<#TvC{s7}{R9IDlJ~1c- +z?%^t0{-@>MRc&jyaACq0GB{7-1g!*M#0df%oT$QyPdH*OUX_%Prh>qWBFijpIK#y5 +zJX^JgV_g9i%)m-aR+{)CM3*YO-B2E7?3P^qF^N_{0YH1v;xeBoMug}*sq*j9)|Kys +zWQnk0Ea$>)sGt}(J!CL)n%qUMr9iXhOZ&0vQT*iDNPAwKJNgLOJp{mkC3aejaSEFT +zamvdcS$}{zgqKc)8xZd!IKEP1C$%OH`ED}pVpk=eMuF4dq%ZHd>uioV>gS21Kj=^3RfcC4Z+=DwCx^W)9e?P^& +z9$#oxqBVk0@?k?yfh+11JDL#xSv{9L20_;!^ +z_pk|&O)8kPoo3EHjG8d!4U5sSMTyWmgmjnU*|<0sC--jB4)UAgSr%s8XrtZb9Oz^_ +zf#Kd&rA+M9Q4rLqE}cw#pi5D!vRIp!gV-`zjcElz1V$59A4;^xidA2!G!DgqYv^m! +z=yNE>1$y_50Urzuf>Um*<}ud})RPc)$@|m`8=)~#$X0hAM<4n#H%Xs$oNvvY=ti=C +z+&{_5Zot;A1dD^i7=^kH-KeJjbq3 +z?*UiIsf8H091D`%r_-Y#a)Iaf? +z4~KYaqEEfvL>ZGr8!KJv{9zSN{^6^&4XNfd +zGzW_AC>AU??^IB#;Z}3jb_j9!zPmLf-_6QyCzUNW8jzw0P0EAbsK;o_f2%p7n!!N} +zwpO>>$epuBdI3w~)83h>Mrdhxd4Tl&RQe6+NB>UBp}orihP*{%7V;hIb=bucu5%}@ +z2#X5Lela+egT~N{MroE=-^}ioDShUSj +z%3K2z)__|fNIHw!(es?F$6QW}bwAcEhmG( +z#W#Fr2|Gs>*+E}cRW*>2#6sT6 +zATvi96cETp{>HP1S~>4Mo{TH=+UZaZZNnx+D3}kg*S*5p0VTw +z4D`@GDtulQ$h(5bO7RIT#g}Rlo|F`F?A!R>{)|n&kNkNM-ciBFPH+83rI4CFQnk6o +zu({bFsx#S{Gi#MVGa-li?3n)C&9dPz=qas$YuIC9IjQpv^C<&q6-_=-*%E&9DG~{9 +z5~e+O`#zv3d3iY=WMZfZ6K8A1K0;<+$}B$PeD6WS;n1kB>b5(Z6fGT>d_6|ek*HYT +z8gfT~qB$itZ0#4@(7E%NeU%h*;zw)|`5mq@DB5TOO_;3YPF!>=*7!E1Faz(>ZV_)g +z-3!6uaayyz8I^}OoWi*`Tkn`T;e*H)f_sm&%BZ3{ +z)aEw@D_Yr?R-4OY+PAl|w}{>&$PZ<1)_(`hp!F?(25(}en#T`kX>}74?Unw@H0cZA +zyQ`E{KAd&=qS^*At{HIuqe^aN`Pf{X;b_WL%^m7A7MI?#M>koEkR$}6tqB1neKzBxPGsV0Ip8}O%Q3H^L#~A|hICj4 +zwi6+l^!^4OO9=O!Lvh2MEz1M0@xyV#O|l4tq)27T$2upNoi`k}-{0$blc(QhdfmU2 +zVYg*D8#QK(XEjuK;WTd8Izyy14n~A3<)qwYC71l6&_vvodIaM-89CFB;QKnyS>~Be +zL*KjXpuI(}FnEfoZI$9{3qE-E*trQ+@V@3?0E9C)Y|}6eJ|gX7w-dfx!+*5ui9jaI*x_RJSc#EmI7| +zJo8`mVDSB7-sAL|@uZIuwakGp$S8%bQT7``WH)l^t90uJoJsd6o_5l37-G3?)sk5> +z-_*ReOQspw$?+p9AxFA71V<(T{$XhMyRvb_+CfCBrwl$D+I^VMhW4^Bz|dAt%|tnh +z&zKEeUk8Q01$Wib2pG7;yVA`1qPG5_Kl;hgcHL_!lm{5vF$KX907Dz#z;|f&C>#_$ +z8QRP19#{V?5+s-vhmbrlB +zo(%09B`_>D**t$RfT8XC!_aPe{|(}e%3p@IokKC+v!Pvh3^25VTMPvNhIWip{R@Dh +zeX{%0&}NfCN_Huq0M +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 +zSEBhsZxJNo +zKhR{V(>%hpHBr{Pt9?d0&XC?J&I$5fcgZ_}SS}gCipRCTt=zk{Wz)kuje`{@(Z~?? +zowz!yx9Gyj}{f+k)I9V!fqn +zKvhNMQZfrn=<_;~)W8kpqaiz04#>P9R+XWY!U$(|R5YTuZEIio#s +z&4ZvSK2U#e#-#>w$EtjsSk+DGtyB@lY?uOM;9WqzSvgYyiX-Ezab5pRUfzZUw{Wv? +zy9^yuxNpd`@e~HQr{i4l`VW#PILXy@5fZ^;{%m&PC+@yCVkn!#Fk?;@K~D2sB+cjX +z&>QP-oFbU6(NJp>Db|Qlm3_wWhhj$SR&fjWlZLM$+jnld{5pWy-WHX_DqKKwkdxlFdzh>b?WMsO;Q$_}v}PNH +z7I7Zzf@JsPL#=LtYb~DZSHm=ibTy%T*U_{E;;%bqR)+cUn6RIFqZ(HWlm$(99n+Nj +z*EO-O5`90guwi8gZmb{b +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 +z42Y%l{-415sQ$N{o@r=8Y5UMc!sWdV~ +z3n3SM0z+%Q-5SeI%q6h_0+=?Fcv|JpvkxNWOA&#&A6sN`?I0nPH#Su#W;y}{C)zBx +zY%`mcCuvqNkmWNFRyt4}K*x2CDMx>_S#x*vlJ;u_R$Zc(PQ?S&gq!4UBxhJ$uVc!! +zA&wSIk*#V-YP&;+6Eeil+>{eYOvo(BA{$sE{-EfAu&3TQ@5!{2r*QR(w(mVvyaN|8 +zQv*kPaY(+B#j7n+4g?-+{mGKFP?bFuRa{cQo1GeZq+B&{28AwJYvXR|r8c=PkVf^+ +zXR)XCJPyYkov{wQk*=qPnFE^>gW)CyL@5EFIW3`(1N|h)7-orY#vK|J1;U0K56I&h +zP-Rz^<{UGahPq5-c!8JCh!|Kpl{?Hn580X=jBIZfa03Oj9y6g|b?!J+tYNCUR@`6b +zVnS%vc55Dl5l6M|1Dj2?#qy|R$exnmTRh#u#}egcR}9HG06~&E6pUX>UD%Y(||;IdEV +zR8&+>ww~(UqCl#tJCMBMpVH&H`&l1*FD`1%;ktz%t#}nUqVQP0Ms-^ +z_O$imumn7K+d1;L$uR*~SdxAh1#2aT%56i2HIdBE8En&s0Z<#{x1J}mwW+$>Ij_1B +zO@5@3hc3xhV!BqyH(_}Fq<(j5jk8&x)1Z8}5~~dNlHTHX$fU=yrFb3LjjCtGY`M}K +zvYYuo6MWl#1g*b#+y>h58>^po$RKH|JJYL^R2)$uAbib1FXtc4y@w96 +zrrP)g6DnjkLT@N5aZeWKo|3_rC7IBHLkIJ4o_PXJ`!V%BVUJ+QaDtJTdqM4ibA5_G +z;r-%2PamM=bU4nKLlnp%MeRzT`nFUxsubT=IlxVWXe6R?i{=a!m;b`DL%}8qkxD3` +z2GUgkjV`naNP~@%E(}4DpI(D(ov>G0Yhy{Ah^9*Wd}_h?AT8xT_1~P5=(Rv~f=VP3 +z+0))x29JW2x#sD}O!GCyq|oJYlary!;$pHgAMy5oeE->>tZ|95Q4fTD64U23Rq%R& +zT%VH9r~e5*XZSx{$j;h+<1Dl68=hT?d6-=eRYdL&?L3LIuxjZM +zF1hHM>U#q>tpHU}m1hM7o(*T#TJY@+-=;(15E95qOq?8Q0wbY}e!Woa79k1jza)fp_7jnEVmmyXXa{KISd%KRNI7e~MEr?x>T24gMDIaf; +z_Azp|7<7jAcFUfk8IX;*F7OnhwyO^xx8=@abXNE3qmL$7EJ?$g0;VPR +z{BV54|Bb&%DXq8o^A{I~6Z&nD{W8#|um(vQiU}oeMM+*qA{l)QjfouwC()A)E=I~n +zKRr%bU-AYmOn(}fm#xz7x>l52h*uPPadDh+m-Be*)U4IGCoksK8iAaD4IYcZFyJXXi0byC_Ih~=PDM7B<1PA+cJT=7W@OqVOi7#VDsZS +zW3PX9mE4if91Lr}9tg>cP?9q*?T`WRm7h9DuJz|UtaH?`kZD>G=4d&B87yrvF0w0nhtDKjW2P7|_h +zp&B5q$k$AVzNU-4uZQO~3b-_?+~k%1^*x +zmW!dibSj-Q>2fmzXreHsg+=a08&%&xr#J1Ju%2a1RH0ieR32Z!Z+Cn~StVRP<|mV`Y_xkb|fvXf=)!qd!a%ubu9Oo6-P! +z9OZC}$E;rX0p7SqzbUW%bQI=H9~M~dQw2U3RQ%1WN?KNBaRn~pzOWM^pCmaLeM9e! +zzHI=FaH}({-*}EN*4N9)D>O+>f05fAX|DykRB`4Q12K=q9R1uX>Po-=idoYz-*VNc +z2i=-SAvz^MW+n#&qX&q>{nZQkh_-;lf*(!s2f#3_k4Jjwu8uRScIZ99y~ov02oTZWDF$n100k5OY0fV^ZNG_`O(s+( +z5zrl?hbC@1Kz(vhRX)&`^Cc;1jS2WJ<)w-8rZJ0x$EN94*Q^3t4KD{DD49mgS;`ph +zQI07nNLx$nR&@Nf4%#2oRv45zR(k>D{a@>7*BO0wzMsP|>Gg`^B{oj&l-rMrxwlG( +zqx%NBjR@g^W&~Xp9J78T?x6`hULbgIMpq*{?K3c4w5EN3Q)qZ{Bo{rxRrVykC3}PZwO)JEW0Pz{%n(Bu26n +z$(Djza#gU#iP9L{B)Xdh-Nmwl5K*kUJ5EKyMv}r?X+R=y)_casgDOTJ_-Hr!*|sV? +zeK1>~`rz7vzbfM3^EFo7;97t?GdbQu%_W+YdK)UMAX|fBEP{(w(yHc7F;T7tyN4IR +z8gU+mAL>rsctw4$AW5`sB1yAA@iAx_VGQO}4g1ufSkFCnPt+(G3`&CrdC12aIZz!` +z&JCGw%0VgYdm3ExlTlz +zIBSK}Rd)fdnB^1g%~#?CRPKB*`rmw;i}?Lq(7+U#4pv+H>h%|#Y@@Q@z&uc_GcYUq +z%ayrd_1~dZJ>1t%LL&M0J7#b1FAMwY@0RiP=i%)lr?1zaKbO~^#f86r?KAw#*RF53 +zR{wDeWMM6Tl`d~DdB4>8?e%XTIlTSc|FJ?Gaenz7CV02E*P%Z3^7GpgUEh{;XkUMx +z-@apczpml+=k@LN?fYYVTc_*W-^1JIr?_m +z$AA5ObNyiRSJg(+7vvle@{ga86AK((4_MakqO&Dx5`;5so$-j><1#;BG)bf +zq?y4<#$NDn=DvN`#@TnL3(%E=t_otEMHALq4U9A@}u^}mk-9X9`rf1W;O834>{0iGI$DF#W +z-XxP&>ITe~w7Nq`0~8GECjQ=|(;PRC0xq2<8n{z^NK6ZYG=c#KV=yHxzuw;VM +zkk6Hm$aEwo(aYYp=>_9^Yorij9-MeiV3?D-Zpk2l)CH26=`@HnSW=n=e6TnlBAt3eYSGmLoD(;#3 +z2B>489P9HIiYt)mPM5j#%1`O#Vnu|WSUckvS&NjZ0{tZNU?Brg5+NVklN!mtv-(21 +zJEA3o!^mUAug)e--F&BJabCnDvxzLc=yZ##kHSitn%eD_1P(GqQwLbz4u;jT8Juo_ +zsW9|tEurzsJ#-4fbaH4Ax@W0JOlM6$+L?wSRlUiAW|eE}zFs9xbovQ)Y@(Ww7;X^6 +z%iyFIU-UMkd~LnTD05^#4r|+O;3Wub^wGaGP1IdrMh2`pcOgJ&ffrh1}o@9k#AsO +zM0107!1tEaizFIc8p8ihmQk>eRGS|Ickx2#Yx4k;iRx`=s+w7~a@OG= +zs^he>&$8N;(Z=v_`;V@Zea!qC*PTh>BU(YD^9+X>iX)}BpALjcwc6mJudNTd*`}8qr6{K$l +zCTRP&dz{a27vb&5{oC~~*~L~<`g;hLZX&CUcb_nMagCkg67{|Tb-6dgN0=ng&8oKN +zxB~Wq1{as@J3o;NWwo;fp|)e4A@SShcy?kFU%v%+^!+^&9>`b*@4kqXAheA!rj`OU +z3}G93xW2PC3nk7`L-3DBUO_1@nPHyYf6~K(DrrV5gKY}Lz?_H+SsD3}U^SGF(m&Os +zh~cqzR~2{5+$b4VXL2_lxy;8O`}#qSvGk6j{J^x`^sBc484=wh(SJ{8qZ7o@9V&N0 +zH*^PG+64Ip`GT1V@#Mwe$t})I1KopDLZbG`5hU_5i!j7j-a`CG`LfZe4?g@$+=wPm +zIJ!%smfZ}2e)|qn8V$4Gk8ZNRZuQ;DEv!*I3$IuF!9qG0@vx9f7UN1xX?&nYY +zFn(%Z!BkeiyZ{I7#SJYxi#cwZIo*|iOZ +zE1VwTg?o5@eTf=LbL8zQc$lAQSCM$#N&VVd)L~x6ZIFk2Tnog*+#_e@f?rf69T^b7XJd2@unF +zwlBV%>Jc9|pZ3jWls;4C&qXZHg=^g&aoPG>IdKOEf%+T@9Z*|qhJmA`#M1i_e6`)h +zL|7;7fu=4Zu2-LSzhsZqA!3uOnz#lPHCUFCBghx_u&HcqDIJHofg +ze>5JCP|ADRJv^2&fojE<&`(}|B=hA{af0QNJ^%K5NjE1CWPlK+O{pym(<#P-X7F)) +zW5^y4roS;D*~MU;{#W{G_4w;A|KmStW&AqhqdxB61QVWDRbO0^cd%vs@F)lm3FU4F +z1uHNa%HOHEP^ +z=HigcmPkjv3Vo2r0$wn)+08VipP}!hz5|kz0+jVUrZ<>5ojFS2XT+_oBI(<>XiY_; +zTw&u4OQdV=RL;D~QOIsSg}rHFih6Ry3?b +ziP#1O)sE3}Jp8ivz02Q_Fpy1e=ksE)Su2X+1k$RZRQ|6+;&yvqfIvJlN(hvMTd*6S7VyqnubtM4e0}vmt +zkOWo(5UI0Wg0Dbi>%Wv3DP5i%1>{y@ItEP*%gL;p#KuVpq0hgge0aam>XgDrC +zdeU^a#U~JZPSs1baC4r{J4v?V&(eaO@o9@^Lovl~xFXd4Ai9khHY5NyGEnekd^myv +z38H?2=UjUHvenkfGN1}vTG7{jqlvG&2g&x?KNpq}kR5bnr2Y4@cNb7FS#(a5EDP(D +z5;}-)vKtiR{XE^!?!M{Pr^3U)f()i|if;N63^An}V?B|AXa4xmM#6u;E&Cn*EMGkP +zu@pN#_(s1TQ}7~6K7zd3en<%v%)5y)S?J--=cdM?}Xz}^;lPjx!h$;Md0%FoY(pw)3R}Fzbf2L_i +z0Okd^I{clE|4)`omeBU$&dsL>)xpB@^-}ufhgX7{+csI?;GXrZ+b8vWZ?gd+AKT3? +zF>D?M`?t%dMN!-Rw_n(=blHp?(XH*DbkcuLCth|BcU~nx{?bSSus7M^v#P{R97(^A?e5n$wEl;yPPeWX#Yc>@ +z+N01fKDWEY<+YsRfixAI?=dxXnfTn-ue|qp_C9LX&Q%)AU+$0KsU6vRkkH01^7WG< +zUvbrqDJ(r{TbVn@TSGAEpvq@78Y#K}K?nI*y$@CiE_)*}W&Uk>6U3}@kTro9GkWx6 +zexgAPYXqU1ew#qJ!jN!yy&v8wMk_wXH0~aKD@yzrgWpPk>x|+y5B0k89W^6dvwkDcXQH@Wl=tA$Vb5yTe0_ +z^U&{n7kJ8V{2^WgzO;nB)9))Nn3Ha>$b%?cykK(*gLlgxqP}p0Fcl94xND8ShF*fV +z>(n>sp3p0k&<6)E@k%V$E#BTvcDf009lH+u@8(Wde(Q*i(CI#>N;->JpXZ+^Qj5P! +zuW0pJxq)a+qt#`fZlx26fnX5%;PYA*ZQa)+Zyh=jS}%eHu*91sSz;&OEuE=rM$=3G +zZ3~I&;@x7AS9AB?mMOqYyW|o;q{DDJHdCzC@H|p^+hk={Of1i`iyLw_GXMJgJX;xT +z5?WV>JpA3dRS9RJ`lj_Lf;Q2l2l4tUx7Am{`WQ_b2%XUq_hm65j&QPl%2xahPg +z+RY0vazqSTPvE?mmb8{NM|d~({4_}q%K?#b^q`wzEXT*$MZUy%TPfg};$R3}gRN}H +zE3`-@y^>C#)6i94$z_n$%t4|bc9f0rEO(!@gLeq2 +zNT4}&4$p?-;aYhXa^38x8OO)~w#De0XIZV^uE=TKT*5>gWxWj9u!`yu!z+BLLInu$ +zV=j3mqqgm-8T)4*hcXF>C0Da#EyA(`W}mehmSRUs>3B>J9Ua}Xxk +zBZ;zm!|Zr$brJ-UOU|OwN$zFQ4jA2s{8?m*=ipYPvTu=%WWNSHbLONfbl%H#J#EgQ +z>p9IeJia7=hxO4!irykdPhSYHve(iKc9MuAWjl*w$WE04gjbQ{h*Xb +zQDPWyB%>b=x=P-H2L~SwxV|FqzB-|QqEySkZXdEVj*%Tqqb(Nzlt49_O1~KVb9h(r +z9M;<|4n?r4QZp8ga9;Ec*=s<*vV_16HzR7$oPoR^8;EQVP9-+%+!UEW +zm?`P1`%W0TR0U85T=@v48;DbH7T?7ycn@_piqkjk_>vC&*>_Ea(y30S>JFKDnrAkg +zEbfBY|K3cxVr(7mw%mV +ziV*5a#HT~w$rsjBpoOR3hm}{AmMj1PkDe-aX;DpkiOf)g)YO>PIFOu9*uIe) +zpTsxu1;)kFw6|ejcdXURjGA +z0qf1yUpqxh?&K85dZl#*6sTc8qgnm|z7W~T70F3>3M>H9nR2$<&h!IwYfHTDjbR!- +zp8ME_%c8&P_Je~CURq=Uh;>fnq^@a_NEE#FtZQy;|B_!;%Q0^eq?&_C95YZ*1?}CY +z?4XEH;2hAJMp=m;^qM~G%INsyt6CoLv(Zb_&JB+~?~5!empYck(O+w19eI55NYRuH +zzd<9vhS&~lL~LmOgl`Q~892*iU?#_4{QUaQKRjL5cco&`vcRUs^tr>GTXV#vf=!Ke +z6k}O3x;|J7AZ6ErdeZXv6<;>(N-)Rd4o8kYw6a#=IN7+#lbIpIC$^pQ|lNo(1v|LnRCxS3}wmp0Yr&eQzr(BivmFi%`UKAL93S +z|2~K1)QMd1jF@42)IcL^BUTod>wG01aOM*AH$1hG$Z1e4QLl^gX_Q{looMy!WkL4m1d>hl3~9K^Q9@Sx;Wc;x{6FnP*K>#fc33JVe8h|!o-cKrQe`jdDLTSQ}S&gn? +z&u>-}Y`%kwSxDd^i@hb+mIk0xoyq*}>uTLNI16Stc&X{yFLJtjI5mQ0O5Cv7oLJOWochP; +zkhf43^5^c27Hne-9%-Z5BZmU2eh11(hqwJew+b05L)nMZOjy~4M1#R;w47KT-=vuI +z+5Hp9yaRrTbh5awWxs3}2RJOTRWJTWPYE9m0h}Dl~y6Z3PDC9Mh3G5Ud+2!#uYb3&x +z)ctBL&KBTQFUrwCf0ldq{*obcdbt|-FsPz}{1VdYc1x +zg{H3g7pem+ekU;WEvf=%(yyJm7Idm9(i +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 +zqC{2}FhaDn_iO;<-o#|RaHh4%vBD&hwE`=_H9 +zFw<3gNPz6~qWNCFHQ#JQhwgJUOcG)stL=C~X!v3mbT{QNww)+l8QARNfF2q18P;Fg +zmYO6;$R)utsf +z^|xDZ8bx9xmRM%E(2ow?iX)@|-r_RrjU2rZVecTywI!H*%SO)yQkz+vsO(sqOft*E +z?whJX4V%%0=3@8iN-EqihtGkrge=Z<0z&KwEL!eS;@aqJkRQ($iRauiBePO +zBXBJTBYT@UR<1>jeT8VK6VF-$)8o<|s<=D_zXt8+X)OafLkp`%a68$KNc{*Z_}N;M +z!3IeuWsUR*$hua^0>yCxM#@kneaoeJO}aum63wh>o)^fo?elUax$&CB)@!07!yYSh +z8zh8#S`I41L=3CUb@!DIn;56k2^^*GOg)qSUr60#>$p-M>E5K%g|>y<5CCzS-Omil +zR^2#hP7T|(!7AyX*lx=aV2<_f@(k<6h=R{uu#y=*AAooO@?aB`mm~p+C$B-QCl=je +z@zPpi!QQn%A*MES4p-Wr0s&^{4ryYOBLNgTGeBK%fq>h@UM$P2i5gOplcEpr&9j-TOtW9pa>`a97G6Qge>%x1PEF>%XskbG5WRNO9*ii7BhC +zqP(eWiC%u$hZTMSJx}yFUfCkjNosb?1(I_P1PScIdTauT_O%Su!r%*4IIjIcw!O(0 +z`GyZ)rdL!Ox=jL$A7=Hoy#m4>qDi?6X@ZMQT>sK@u5^Sm$Yf%dPP +zYEX#p`Z!7eNzA~e`IPntHWd0iZUZ`^>OsqJeCyYZ`=}>-_y-+FV6VviD7aOei(sU37%oJ +zLMyX|2Ev0VCWx8GF`7~$J#Ck?O^yt=10xH!EemW{=M1`r8H7`#rS?D@d$=R!_2>0g +z%Y@p(;n6Ew7qIcFt|?+hao|s#!bXfWc`g=z9>~&-67p_ni5=vhD#=U2lahchDNHO> +zJVA;y +zU9Vg-qw3KnNI<=pp)ay+)LfqyDuPDivhEW)Gz&Bln36Zwy()0&HSH@+;F`5~FkQJc +z3BWZ%{B%}NKZjT|{lG2cgy&tF#|0@EbiBEb2Jt4XHj>As{@bpaw<z~~dk5qZXo-}&p3Bh$rR*3a4 +zvLval$qQ+YW9Qaq;5LpR)-oPy;9{FS3!2d{3^vusM} +z_BTNxEKY^FBh%@7E$9>9Sa7EQP0fJma(c?kA@Umk?{;bTuMcv&Simx3I`wH)RM$-byhg09m`NLafEk +ztXWNEiMKsTXY +zKIt~fmYxcK4JrsL5WKPs#0s@>=;Tih4Z4*01iMGepV;?EB +z1X%w(Ea?kp8A@6us;6m^?I+R(e@)rCWdckLc#~3BSV>Dia&u2!?F_m*38O}+zQRx* +z1>uA5G^d4EPyGW%$$-SDFKLZ?hcvr_sn<5hvf*Gm|V) +zt&BQY2E8QN_0MuYJSO4+M&!)p^hvLHc{ElVJV|6F(%e!{7o1vB38zjY~MkVDFJYTvHo4Z-Zj3RY=ke@*U)JasPW^b0*wC#k| +zN#A*ha*K2Cd2j00*$id|c%h>!kIY!6%N{uS(lV*+5rM3JelPv0`8_MDE4C?^Xv<9I9oISdIW2|slH!&h>%z-xTFdRhU5m;0%5m! +ziFt;I})TG8i+rUx4k)<7u5vWMuH+W +zxiG?<(ZO*XA@pjlMsgB4q*YPw{ZPBZj}Yp1q&tt)+>?+_CD~1S*>Zh#>_EF`zZG8_ +zjUhOg4di&7`(pn*~QJGBD{Z5n9EnZZ{7qtW{QT7%`pRsjsOB`(|%=1Oi^pj5sNa_K&X!{Mc~>7U%@Qf=ewySW?>+ +zPrOANvc$n7^)yws@F6jnL33BbtyhO>u7lcZae|3PZ&rGH&r}yIWQT8yW-=$S%l64xE8vwgQ@PEr7<-#UWgk +zi)l{E6eCJX+bp%Oo#%YL?0`hKjzww;z5G>6f(V{{nlXq#N+EBNl8vE|JAwa8s$8*r +zvf+tCm9?l*Wz>mlH}NE<6&Ee8%L_FEnTO7#o^9`q_{qJ7l5*EtJm8(lHZ?Y+dB@Ck +znQOh)sUO7H`gMj6-u3KtKe6oM9RV(AcLsJ1Sx{j*`!0}dp+f_dl(!b>sw9{5n5Z}s +zP-L(&{}Kn##t}~#KQ;!++QgS +zjJe&FjnNkHDw~U!Z6}#3iV9UPgZLI$e_%y@mB@7M*sia~IQc4IFH`tAnXPQh3sQDA!&m!`YynCi4G-ae{WA=DD%777Y*nV%Bpm^9ANz}?(I +z+W6AlgT)ZIKp_%;gDhw3c`?oXAuZ%~L%g?!0^K&>!}vs_iTp^ntr%_uP}AjP*ddE( +zuS4+;YhVdIws{9EwMaDH+0qVrkHY{k;8u)8M6=*B&)$4#^IfaDz#FCIho0MJ-` +zL?B$-IEST-O}5+R>tFfpYV`4Oeu?u5!-a2#E$IW&+Nw;U*_S8$nN(Mnh{JfQPf0;c +zuR!w{h?Y7f->m~smg-PpQtFi5gI^zP|NsANo6FX+TVA%k?B!Zmu4UV{-Ii^;@Uy3Kj^YWX>!g&6V@kf +ze2rH?@jT4k8;aGx6K}V9D9O}K7Gvh`(gRjQUp!fs(Qg2i2_N^C$#)%6ZcXHdc@SVD`77$y8Jt6LJtnfFX7fPm-L4?mSV`MnJqFEqEJ$S~ +zld`LCD<(;!)o&sod-zqm(|VjEHUi5$>_u0K<3L)`)6CX4Ka)weoKUG5mr1E|?84N{ +zHY$%fS{3q;D=r>p!%Vuy!=^~)_~&^^<>oypRYnw&e;d|=uDXm2J+|pYDTUH>?Ro8# +zI8xo0v+W?qsej$yZ%%Lhpf_4?Ei+7rKK#vOFhuNgzagzcdr`l>t0{yD9m*KCGJnDh +zcyI{Mx{n0|-F9)6!|P9q6)moBtKPui3zbQ?*Z%N0E3EtReW7;a8?x;7{pF-h( +zHEeNuk)hpam=>-1C_uHRuu@nf)3d~!mlw)RE +zf&~xwt3^=-3WM$<%JFaF2Dqn6!9jGVUjW{6_**FddI#UiQqUkCzXot9$H$x>+xg1 +z3h#qo%)o60s=UQ>4SW5A<;H9C!qsa{bIk&hKy1dDgGj2PF;IJ?E^F4Zy=Tdb|l^Z%<4km=kn&jS&Qxygoawt-TW-cBqKGY9No%EnhFW +zmWWE8>p{bkj`ReHjQ@ +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 +z$4q-EVqnjRCfDjD%e%7()ta@A +z^hJA?Z;|Yn6A0TA<0Zh}CLFRUk4iKbxbk-N*ymrrsrF2F^U9wBJm+p@^J7z)E8oX9 +z=e5gc-PU&kTki{#AjN6cj>r++Gx%{&Tcco71)>y_XoJ1p7tHqxofq5dL^3?vBkP}r +zcFSsF%kK^{rLG+#?XxH9wuOhCPeXfs(!y(R2rd +z0cK};qhw#j2&s}V;my}d#;0^w?L=o}s-@p-E%dro68kAVY)?QW7x~1CtSTdwyPdl5 +z;3I7Q#DpZ=bb1O*4&ZoT60{Nz-&AeMl%!i{UkLRNu&@WD!ReYf1(_x*`53ew=Sr=*Ait2; +z=EHGdC)Pj~vH}~$kYoSKZ0se7W<8?aNC@=ad~RQ4u5){OvV-i?Hu$@HehnDW9dXs% +zrl1DvnX6WaE1hQp9yA1^@YLJx5+Uh!H-;MXm6E}46Go6i!S3iv@m+7dx~-WPZH%Tr +z=5^~N;JPBCepHbmkD3cDrhxt)4Y1VL=b0aOaa%2BLMgtG#a2o25P@M715q%h7_fZu +zRkDX +zr>k|}Z!NMO#s$7R^~=ylYA0$#$V^>OyK2|cA^V7)*r_Ru8df&u7!VLrt`2DL +z^Kzua;LlkN@g;PEqZ`9hneMTur+DE;3n);vLSvo1n=@*^bi*enwgU9+yvdzvG$q|n +zn4|!G+tNAV%Ee;3wo>v%-<|>J+j%z9ie58lC`oAOQ1dzY^^{#|pX`_KEwr{r6g#+(b +z9)^(yTVpd??RZ1j;!XdE4=0>Zqb;c!Hy#lnBMQ*Bzcfqw&1V%-NG|j1nye@GBIG&* +zNo5{+tApvQ6O1SxHgze!?Jw>`!B$URS;EnTz6+BA=-Y2vBVP3F_osMCFZ%X~PR^BO +z2Up5HwecB1-_~m|0&*NEghJ|KDuQj_>9gCfmGr+7G&CB4J0d$&c +z574)5j%Z`lTySxtNqu&`T?OMuT+5oKs<>yorvm2z`nG65Y2S;!4M9Of*zr@}#*kz- +zjdbhU2k6^uoYQXJ0RVkl>_y)$2k6_M=A@!qbF)GAFrr@c?L6^gC1YTsTfVAh#9;MN +zwFL!QbFOv}Q_GGe4a7o|B-K!TydI!2UKD49=&+Ny4l%f(X5$fd69!pyO2G`JNgI;U +z^TD+8H%-fzU)l`E)Zc_$g25Sc;x0vrqXl!f0z?Z5daVU%{sy!_3|Tr<``! +zU4W%P+=jf@bTQT;X{aLvr8?en{*SAFWOy$cpJ(Ps*N07sD5R8|q{ZWSYMJcB!2D +zoqCi521n?_u!J9;xc=*7_%h7<`d6Wyb=Q?oYg~ewx->KlF%+y+qB72YEjzmk<4IO< +z-8{y0SBhnYG`!E?E&1=7^GfAmcUW%(YbCu%r4gV+;gNzKLMYDHt$>64J%r<235^IJ +zn4uxRd}Kg07v3htico1A>=)ECWG}|Ag#gKH$}>dPUnV(@$d`eZEx}m^=`w4I#-#z% +zUunAP+G0z=AedYvu6+}=G31yScxQ{wez$jB0}0o)?_wBiJ;=dm5x9t2f75si15At) +z+e0`Gr)RK{QGe%OFv8AQQ(_h$1nB^XUF@Y^BV`{dXClJwd>?E!4+r?$d4)meIYfKD +zeZ}S&2^Ao=0Dl`YR*WQ{(g^B?atO^bw+`G1minV6C^pg{?d2eGNga>`5Uo+|LFkI; +zs!SHam8;Qjf7_?3q4-nIJ;Y8J6ugf)kUa*QF)wK>)E60mzb#T~?S5GT@V7fv7(Lqb +zKnOa($l#1}a;sS@T))ELw>TU;UnvrF+r1z8SY}}8C~D@qwTL*qBYp0|BXB+D_AShX +zYmI5;9eyFqmt;@>cCi5cx~$AnE#y+0>`(~yv*TVJld54t7qpPkaK+Th=*-i2+(@X@ +ztMt<|y|4*LzWFen0}a+fL{V5YVl8tybrD+kkA2a&c(CK9<>3u-_CdsXD*@EB{nMGa +zu;28fDvMoFWn)V^4%fk7zfDbEf2f|Y`jR=V8cDcF9_6R5_pr+v_8M#n0B|c2sgH3w +z=~Agq;>JRNpGU^C>Srp5{6#5>Rc$!eqccV7ZsV`RqTr@*8Im|;>2KR=loo5g1E&Kszuo`UreS%%b +zpq&tk`;++mZ#k$*{li*r+PdjFeY0oHT69x#6HA7jV)F_YL-H1GDW +z;GOE_w<=8VC}*(~(LLyY-?pltf+Ws2*GR9)z$qr +zH&^Z7mT`^!v|T&2R2JvC3<9lw(J*^_M01kB)#CAd6#2Mxa2AQS%pgGu^h<^p#P@HeJ={d)E&SA0MBvR(to(uRpkOKiyw{xcTV$K0|kfk07Gq +zt&WGg>Q%STN}G(VdieAGN5?z8Ggbe$v+pUn+qVhI<*<^lA6sN$SjJ1g5ff9@`&!4f +zDhRe|_O2ibH-0D|fr&H*p}={5PDJ0R +zYY4LC-Fy*bv!?R*_Qc)(O&M)Z^9TVh?x3L%v(MM!HWwYLMX()=1o}v|9qpo +zp*sJOb7xxniae=SfnBdYcLqNhCsR+3{p{vd+F9cVG@Ct^iT1R8A$<*-JY+Zy%D|v6 +z5MIaw^sT11ana8!a^5R?$=hi`y0~XI-%D=^*tSG&AHIyc9ttlF+*?yd~GRP5Cz?YuNWwD)>l3S>^j&U-KjNkEVQTfauG6nY|M6eKLRS2Wb! +zeEPK5Q`!vX +z-#fi7jUQQa0G0C3dTRk4rg}`Ij+7rGM_Ml%X@NcRT3m&IR{ +zQL9>wt%5WUf!`Ea3|T)`Tv`_yt!+s{B7;BQW_*7@IgRS(?M@+zM|wX#;gWS%N9FxN +zM4J6lb%a)r6Y~sF*;!-3PW?#2+F-o#@$K9|yfJ-v$waOgigwn-LSPphe)J@_e4wZd +zi%CVcki}<7g}TCxE~u0zj`Z2KjY`TE_|BNiGb_&L_{z;~lZ_mEU4GP=bGvE%&tKBP +zkCL8lJnpe-2`AY>?du+wct^iAgq%8UJssUA9O{=)J@SGL@kHtM;>suXHTKF71-q{D +zw=AculSrXl7=tg{Yk7MKRD^`wrDgQ{SD!BU7%#mWLwd5ZH|2g8T(Rn7a{u(I3DJ<& +zmt9{N26gcjwxTnzYhWb_uhy0NLjVeDk@sC62}6Et!m#MrvBciHj%1dcl8$T0&UZ4W +z{-vSc#a}3Ynl3_0K9O02#Z!oVB|{#yh7fJ@2&4)NNIHMZzM$K1ZylE~+q&9&@;n=XXYnDX +zVwksT!*E~YS6xe=M<*7uN?RRjt*v+%`a9O{gZy6W-a8ClDYlImm{yI1 +zJ7}hDb>OO1BoKMrToia!tSTYf(onky~t-?*YoaZv=Ji}wPCH=gME%4#kowLyaZ#_S0 +zbfZOWMf4KWAoj+O2>?0U6~9`_4%*UG({iZ#rm9nZK>8)-Yvtw2qo&F0ggzY0LBZOX +zF#f!n?l;@*2b|RnCw^gj+)J3cGFP7>Qe+>DnVm9<&c6}If9tHXj%c*>C`(21^92mS +z{SgYwSbe+XP4)L4p;{M@^@&T1uK7JNJLXDcKkHWa?c07--LsXeq@SJ{sPu>N6Wr3Z +zE-pXkjOg;XGs5Lnyue@I*?NN$@s@JC!hBwi7=S7hnb_4024=uSV +zF_29Bucq>+F#`5tcLj8B8(YqdBOsaAu_6!kD`lQ(9&25{UnM-BWz;f#Ov_RrxOu+; +zGgeZ}KtIhrU;WXA-!IT_uwl~|JqM2Wbo!g^S_?DFq6xZn{PKf(3Dqji`F3;n_Iu}EhQ*1z3EoPHcOuV;GXhRb +z;>@QAl$yio6!TfqDzg#^wKK4!-QDuv?~&7)97l|5v*C-;X`NOd@(u#iJ%^4ZzAr0I +zNNso*&dOJ)QM76vBTvRW_Ul%%EiEf6Zk7nSr{k^cEL@cxnXZZr7s#x+RoF_1?~Jod +z4wGj(>@ge3uazGR>5Un0MXYl0xTGLIw+)^7jyGP60f%f`gXtypw +z489oJz(@c?I~!nVUzQ7H01R#ah>1zw@6`?ML#s$^|I^U6q5R9x#{H+Ey(h@6Qz!kW +zp*{3sXvZ)AG_((eIg*CFfWSvl_{X%2Ukq*2--b3Sz|h7#0~p#(ndqUZvo1dkZT;8p +z8Ucp3F2K-^_5gD9k0rL%D(kTQX=vNAA4~%bZ8?CU{q)PwZUz|IWaN6ApzQ<|yI>d) +zNVPTgJ{9d|e;L|5ssKZK1O;GdR{;#|CV-(`;Z7}0DNa483=STgd=4qF4luM&A*k5_ +zhPGkaFu>5J<1$P7}`W>AcY#hr11Gt&A!v!HSqvL +zJLtvGKKN~D>%JJ;`T#@QjEo|ZfRD)>sLzy2?T4X_`PHt?L)${Wp`7^N4ecxEB+{<{ +zLmS@pI^H~fLizRIhW64ALwoXG}#3uFNdZCC1MAgdpSHU`{ZhBjW=PeXh0 +z>X)J205G%@8$0=JUkq)be;C^OKMd^vme*;&4DG_-hW4lCpN95eo7bg<+rJyyBmXe8 +z$Nyny^Zhimy#R)G#!o|g+QwH4U}$gsZD^b3{$GanC0{`{*Ma(rp>6uNq5b&N(6$fu +zw)kmiA8ouC+Q}#y6@lPLy}u3ZS_{$VABJ}F=1)VLE#bw`MnXOP!_dxKLNoqtXkW9u +z7}}q40EV{ji=mC98f2MGUQkElBQOC5{manSz>$6pB|Z7e&_?n6WoW+v7}{%gV2B!S +z07JX8R)ynlLwnD*Hs`0IE%(FFJ^&cn{kp!5mi-}h07Ls+Hgj*hPEXt-GH$G+;D@2D +z(F8EGW&bd=%>ahBX}Md062Q<7i~ZZshPnk9+LYiep78vQzYOg(e6)&(%Mvwj%br~heavn7O`mAYrZ`8k^wzZlx#(*Xz@zYXoL{XiQ%yAr1A +z3jjkKdqr#HPeVKU#n2Wrr2nv;_uqzg?@-Bw5h_o+6Tr~+1OIJk@BL+H-;8M&;8;ZXTZ9DL2m0yOo@lQjWYd2FpcjXU5n`Ql{p$#ms +zan&9AVrZLd0u1e@--dSQi=o~Bm!Yi!Ftj1cvoC)c+6ab4JotYZ+SX)-Z~#NQ6Ge{V +z#n6_{{>#vw1{m7-0i4?|mU_fX=uq0Rh_Jt+@7~0xD4DGcSLpx8@|Gy1wa)h6THYWd{hIYo^hW4S= +zzZ%*;c_O{@c)2 +z_-$yHYyu4J#RsjvABMJ^#V@vb-4DAfEp;wAr?OSpL({CjSgDw3Xzf-xt0Z+S$?n +zFtn)^e;V3KYX6^xw#ol8wD0~jv6$#p>6qMXxsc{XqUej+J$t#4DCmN +zq1}u>`R|4{Xv&_5dz!;P4ed*qUxs$|zZ=@!s=(NP8rt_T|1`AQmH*4o&Q$nmXiIlB +zWHRj!8UPG!1f733v`I-{3~iec@=v>Vx}Zhsis +z9n191e;e8}KMidzKhTBWhIY)0p^fJH!_Zy~Da-kXp?%2qVrUlt3~i?`Dx_jBhW6gy +zhITFoz|gk*)6o9%TGfaBI>uH4c@V$xbW|WcFZ4!b|Jvf-U1lfNP+T7 +zKMify|1`8uxlJyA8rlN?WoWDYVQA|i{L|28VmgXvzxZKjLv{Qzw6g(*wjBS9p?y(z +z-u8!~EnQ9;{bFd7h=JSvFtqi=LCBK!J$@M4yhmxg)&F5=SN}A$U49$dr +z+H7GjhBgj(>^}`{Q=uP*HqncrP5!r`T_hqw@Lz_u-=Bsy{XY!tDS)BPBJ$hNcKBgv +zR{;#|r=Nzl!Ro&l+D!R>8``w!|1h*I;Qz(YMs56IXrp@mFtqFbGPDU(|IN@&crmoI +zssM&|Au_R1>>u*Eb9ke;y+{F1p`jMv+$2yi=7JaVDoF2kh +zWY=1j^V#1Ib5X(A5WS|rLG%*a!lsb<;v2>@guRz_!>mY_J~D|Cnu4^^bGadLoOo_2 +zV;MFCBF?DlmM(m}lcjbMFdIchJC-W{4 +zY%o@+R$>}&QU65l9oEtpMl?}h0$l?n22&6Lx7uMyLmk!IiuBGllx}C)%)Vr(Kn%n8 +z$0a$&eJsOvq$Ed0YWK>JV)@FXU-Z%+jg+D-Y<2G$LnGgwxCI+5jm{mMW2Inw!os-MP9NQE#7x^yZ0P5&o`0uS|(w;wo#pQJ&vmNc6pv_1(?7JFO8 +zH8=C8aXj*afk1TN@K$eXK3_z1cd?&eEw@ZsG7!2PBx_$o8JOUD{&l9YuF{qV1Z9IlxVaRyc@eUN8tPqC> +zY?%-YYY41qF4QX@Pxim{>L%%yo91 +z7#L%^*!w}eL`o$h=G;OGU2NLoVdk1)YZB>>V}3zjAnLi6AK+pBYkwBKoo}zoYu)m0&_p1b7Zw!56@W$x_UMy +zg+JC?9B$HJmD~;)UV1cwA&xYJFSf|bMw>X6D*af^?HN?Tx(XPb2B+O7BgLhqRhu{w +zU!m~m7NCsp7ITdz8o&|m0sZffzx4kHy +z!)Z^4vW@$#u2w|;C?>?7;66Dob#XGV%AtgXp1@d<@f>ic8GrAtFLr|!ZO%bXwx+P9 +zp#jGmPl-rmx5e?!^&EO3g}q%pRvel=xwjhRjaIF8vtF_BXywiBZ4p6+GN1 +zq+%Z&xjCFGpN)F|x4n~@Vh&TEh8Sjyebv;Fpf1TlM!xHj)i?(dX6SaJ5K)o3O?JDs +zePOJhO`+0pCZllqyi-><^g&DIAzP|jZ?Dz5@}}9m7FZzMgUXwFK;}>tIya^+%(WD3T4q-q#cil-@#EZ$y1^Ek19q~mtNNeL2%QKm4E7)5sm60Y;|%b +z7tAEkRHY$A_S)~-g8qixpZ-}0f+~1)I7mHmpIFGNwz`RgayIkW3J%TjqV1ga`Aq#tD&E$F$8H?hf%>{75VU +zushGLE->ZR2rl0!Nqv^Jdh#+PR<5FoR=Cmk+ty2ROP;`AJgP;Z#*g~)Y9?kk>Wsj? +zhwTHs{nutA?h@prd1#u|nGH2*D04P*;j%tBme* +z?^aYyp)ajBW-Wk(@Eq*s`QAgp9w}qD7Z#Ndu`YM11_RF`&ksH&)h)+-c-4N`C`(Bv&eCn6@**B@jj67$xi +zD7lz$ijen~NI?+ZoqIRhUm3=uQ(>J+!i0(o4rz5URviqMXYcEdMAHi{uzb;0AcpMn +zL3)c905Xm3GVYpH$Z>~YT?Mz#j0q^iQ*q%fFFwo_Mgk=)_a@>;i~_J=1to*NtzeEoSFI)V{Udt(huiAm#_Mmv +zNAF}N=j!P*a__QlW@&3!%OJP4NqmyD9PBD!bR1?lZKZ4o%p=8nWaHnnw%wrfIO{|yrB!^?}Y2nh8h7n`8xH0OK7}O8-Rq?_2xo#>ER|2IL!RxFWqof(nrFj-6YPnRZzyV +z+Batl12*v_2mR~sakQ?RzJ)M@QKTW1S}>bNdt-x2O%(u7$f;Eoygh0_rrSGWOnJ5l +z+Kl}i95E-^p?jwPQc}hfg?sn@HYS)@r)xCjKhP)KMof|v?V+HxU@GbpIf$bgcA;c#2KWB22WeBl^Fk~PSNM+8UpLQu9=3tF3Gw9%3$1YjoI6Gkz7ry +zbR}E0w`NgkU%m1pu{>g11LkKbk?Bbh6IS=Sas7pUm6hM8^~NTf4U$g9*>q6KrA@ae +zVU|UY5HsyPH2@hnFA^#2d(JJDw0AzSsrbO;LeEVvMqwXBIRnRn{hx%#yPE +zrYcdxW;CLvJfgFoex+g$Q!+;hus(l&W*XSYIF4eD_q06s41p-RkC@N3ZKp4QT#Gc>Y#M7ophh}4y!vY)Lr +z8ElYuQtn8PfD~+%EKnRL0HzFL(zjfi*Q7VJBkRlp=XrrV+deO+^mZwRVQ5zBNBCyn +zHc(u7CxXzo*x9nN!1yk8v(+BR@ng2{)d|f74 +zv@c;$TG$My)>N94OIPi6ncJs7fPD*zOFE0XGRT!ThE!lxvD>*%c8{4x2|+FX2-WXX +zln&5pu-GL)J-dM3n99RUADV529GJk$AAQDCJIq!hGP$0M2^Fe{o+z(Lc)ccGGVHN3 +zw?R(0r{$pXOa!#bTz6mju!(Uhpukc3&Qvw&|Ao|AwvH=xlkQDAU1(d#5CI*hss7BM +zY}JjE=G3-r8?2HJO76BCf$UiCF59qPj6nF@1uL21^8vgE@DDaYc}WtGcqSVxdt%Wo +zFfXk?7F1pflw)c$=WwO{DG+UT?vN%zITB5wGXp#Z7YMseY|OG;zDYufmkwj2 +zbyf2r&=KyC%=Abp8*0i1)4gA`^dU~V3VNkfBDLtqitB0YzyAB$H&@HygDiJmlgP5# +zD$1V9mgu#ZeOTca(DOuN7jpb^(|3+;aq41<7s@`20J+p23YHeyEnWFzi%9oAfV>*K +zv9YOpcug;H3LWUaGWP^Bq$cp;Qw*k>&kuMcTSJT7W&=jR(a@tM@B6Zsrl4#_N9OAD +zsTp&fgA`kp2k1e)^$EG65RFeFK7MIj`3xhHZtPSHoQ&hV +zc@1cv@o6bJAqTK5U_zXQet}si<_suE!>j=wQo0jSRj}<>T5PWZRpp +zk#G3$WqO6Uq4gxN5@J?w+bh8BA*PhOkS4^~#Pu)zX4NlXr(Mq;LF5r+JI|ZM9_R(T +zsWyf9u8*Sxs>BRznonteV0WR<<2Il@svfi^$G3jnxQ}|$2bmV+N~W|~uaxGde|TE9 +z2WbQm_dVVG_Tr4so+aitbRD+R=nELjhu6_ev(4K%QCG7~HW?uQW|mf-0| +ztGY6UXox(BWrDDI9HS{H($jXS+vLb_J1`P)+p<7?bYXBH6bJs)FKonElk{To=YcHUC?W5L{@6kOsgmp@JShqIlJdkt +zB^0C>v>@W-*vKN~PEWs0kB1)OO&%#Pq#!_jhy#(*ZE1Qy+qwQj%2GpZhK!UxoQ8TumIM$PqUp)P2gF6%y_U9&((fhl}*-K#Q}UemtP1g=@X2h){H +zlh9lvL{Vq;^mDv5(+}K2PORRgd0dc!LHnEgXb^SM(j!S->c8!(d8=aM+oFaj%t3Ux +z>INAY4LjkvzTmTz%`i3N6iwT<2O_lryvTy28d^bT=l`9}Sp%7fBWQAD& +zB1@9$n!J$yICgG*25#dBVlCsL1}?VQv!KbXqq%HX*0>}{8Mkw!sFqD8QCwJ&7+Kef +zxX2=-98W4Sh0Nkc<9U?$W#9*^` +zMJAa%zBt=WEWx-?>7#7o@zwiwWGM{$2mxeBa>QxVw7iwucpEr1%H9^V?6T^^zTWn! +zWwR5M!{St!J2IWV*Mg?;jn!xR-_#PAE~lrw9AdvcD}_gqWihFUru?n4yNF>XLcr-h +zfY*Bj6MkpGmXzN3`oe7IhP!pzdkL}jO;;nLHG7=0cngc{byJ3rrh;EyP;v +z%$gNgmU!Efbe?Ae!tiT1CZ`)}db5U6GL3edQt-Gy(4(GL+6uvR;A(-RO9|Xiqn0&W +z?3d+f3UK1RqFg>4iEe^zn*D&t#Z_Ld!ux@_a +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 +zdp!D22bC#i!;Gxv;3iiSzWle +z$P+HO_R>dJ)B!{?j0Ca) +z(Wt>3DCZ@UZjuObhbPJ~kW_hLFnkeJxv^-{J!^{G0QFnGC4Db{oAdgm0c_QGU +z03N|2h6nUV?n$go#$G1HsucuRpandjF(4vi%^Ft`6SWTbX+qj~#eM6YVRcYSo|JDo +zVO-cJnTANDyq-sR-FJ`CCxE6oc;AR#z5=O-CmYc8q-Bt4n{P +zu~@XI!K=7sc!dGIwGhi&U8+knzL^y)VYdw7rq^?0Qc+ypMuyyFJJ@4QY+3@yg9h#4 +z5h#c1c=k}T^7IGsK*(M&nx+?+3gB|2-eZHc=@Ll#t$Y_BLkgtzRIPWYYO=alv1lDg +z)@UNwH8KCu!sEU&Nobn2K;VnoLoxc&^|4#`88crMG%fSx{uLEd;|eC)E?#B68a5la +zPj~O3YI&4|%y~!QXBc^&CGKKYdU=Cu~t)?{{ou>uD;h7IOc#G~K +ziaoXGq!*(o8gUq`0rUCj9qn=E@(bO}p-u*Hw+FyDBm8>k{`twP?JF`OyfX_>GWAcs~E`%cE5 +zZM_;;AVq8y!P0Xb2}N~g$Yjq>inQ1b5K6wnC_^O|GWM17spykcw*!SlF=5SiLe(T5 +zZoUhk{u9O&YHBH>ZO2ilRYq_}%lSwPJ)?HclZpo(SSI#lz0Q)3O`()->(x1{HC!d&VX +zWGB@^APdjQWgNwC_wJR_P9Dyhl`%0LWI@MoUv05vI>j39K%ib*!{RK@xjO4{b3{J% +zt|*Nct{R4-WE-geFp;VegxP&$@H4IYef|3W$8NKY>ly!QLqAO%jYp~xFdSmWg`xJV +zP5*@wO3qDS&j^wS0*Nk~5Vh +zbM(-xPIlK|Q^uVsQbe~=@evIIPXv--X|B!wtwvi$%G>3J2&D0ftT;UUs-LO-@jyEvuv~_-2cYKAcQx2ixSl$ +z!4fi6j_jr{+Xng9?5={C@w&O&&|SpcefT7!$)*v~)rLh+90LJc=!>z1MwxcFZq}49 +z4`)FWj6Ax0!$mcZ{db@|)|-ltIYyTm$2<<@vAL_MZ9IxnGv0iHPrY&NY~2^r-WbSz +zI{w|!ftzDAteGwV2vAX4C}T*D@Kru$#pniaJT*?WNWonMp +zt6w7f#xhYBK9=HqeWP0sEc#9C(BhJee?vFFsA_0}nwu%^Ti_*{WYUyrf$R!{ZVyTvTexDETF-%fM7>%HBc +z)fdp)+1QJf+L+a7YWkqtpB7z#R#{Jj1U@xJ%b@)d;Qm#se_~GrC8MSUDt`mtT)Pz@ +z)Heh8`LodfeJYYIOcETL|Bh8bSpeGs6!x#~Kf)%t5RWQOkEI~aMm8?Tx&yB}rN^Nl +z?>F=mh85fqmBWB|$Iy@gMU00volIsnS9@y{vU|%RmXDFOVp*5rxWpyj2xzutj?j9m +zg^xAN->aY~zJgD_JEeXOzjED@KQGC4o#NQmSkTJzeQX +z-)`umS(Qy|eJE&pMx&?Q?{>jeGUb~ESju;cAXTTNZ{*_bFO;qR4qm<8lDm6gcUO1Wu$$dqV3X4Tt- +zQuWpx5*S}yT1-wQ+tjx=ET24RaNOt&UBeUk;xWx2hBMq?vKIaoR2_TW +z_*K#0PV=GGBNM=GH8xKF2F7c{PrTXUYrJXVOT1Jgvf#2S`*v$<5=krsynZD`=gt(RBr+T@Wy)s!206!iTd_h;XRB%d>1sM{v*N&e- +zQ$t?EYx{3-+f}L3rBgyi6^XMf<)udgh<_j5XQa;1ZELioK@-LlE~)x;%_(|Zt{%B^ +zBqpoIo(VEG*oslgOT21&NvW9SGo?b5GXV3H2zi!NL@DZ1T6sRGg_5b`gu)b&@IRmiFAog8tg2nQofZx**vg +zyJjInB~B3kwjOpW>eM;gqlYg5HaO}-A6h^?xJOg9+|gx$xGvZD&Rsp_LDAUxn&QEfGKX)#g&;B2TKg#^Kzj>>>c=iQ1q>}RexFxS5aOCc!) +zuLl_vn2MWJ6L`ilRL?>t#XP*$rZ{;?G!KLdiTOS2)FU)>%&F~U;;pWbkLeSL5VmYB +z4^7QiFHVc2<$s$gAImyq^>&$P?DDdXNx7is5l~jn47nv#3c@b2mJm%I<&m*E_LBk+ +z9nbSeLWnyTMveJ)Y=utA)N8g&(`me46^av+4Fl}q{$s!P&m@dhALZVeSb+J#m|lfM +zE_Jc)4*J2o0WU-9H0|qp@Q{IR0e}5W^8hoiuhcP1$QJO9#FTcz3OqK;zmV+Sp_uSA +z5UM7I3uGcB^thxx$467%LSj)}SrkL>k<}lv25scb1`8B-PGvSqIMo)ZpTs8smEfA} +zw=%RPc%M>>$q0b1C!VnI%e;|kCOOgI(k`b1_7bRaLyO|Am;c@_XKRn=vE +zdSZ=gIn^z>vi~>cHgMfB`TY6w(^f4IXjs?X#hZZlg)=h8LWv9sx{ +zaB3-h49=dk0h)eo=GTCKF(#RDHX@!UtH+#2p|VhM)zy@!&vZ6|{ZlL`ujP%i^CWlE +zp+o9+JQQ4WVslV|eG#`c1Woo +z)uGZ9M%vS;j6=r5)6Q5=RE|LC$FaApQ0gSz?k#&ZhqzBKoCdxt%oa0a8uRGvQL)WR +zf*jhoxDSYrQIa*ej(o9#2S=jl#iR33f}h_nBxq7=>iU3XijFX`ac=f)Vt--l_uky +zg3cUA)q?x%4%t?ZaU;vNyjTE7j#MH?;tJAR=RQiENH&RqoGG|mQ-xj%R2?j((tM+N +zYFmA9jlug=LnnkwT(w!|WzEO!VAM*68Z`oQ`bRK4Yg!s}O`ecrkjpp$JFEeW!^}=d +zz<>W-jpNI`syc$~5<9jFs{%Af!K4#I+##{48#!Mt%Q9$;m7q84juc#L*E?7ql^5Oi +z81WvJ{L~s2261E&-gDdz`bV_Rbl;JYtz?UrP}x>LGK3TkMAt^IEf~<<82hIw+PIZ7 +z?nK#SQ}-WW2a`)B%yZV@quYtG6BSHMt$7na!(6gA`L?OtI@zY6*@WQib?^)nJ_E_n +zg#lD$S~l+9iFL6}>$NM20L^Am-Cw$x=SsXr$Y&5IVRl8`AZsC#sd{F$G--e&1^~?f +zPU%zGhXFhr@*`ww+;UIY>2{e^mTu_=1tXvmFecE74mQ&gCy%GN)&;58icnx_7t?7Q +ztrcROL)Oju;0|i8;XMa$L0F<$zr<2G`JFd9kn@ALrA$C1wBjxSF$tt^);Tq`!~X56 +zIh7F=xMyBe!7a+Z&g;ol!$1}T_)L#5Q^G1{`pgOtL25Fd+JB=v +zS!u&wpJ*K|wv>Ihl;b2QBC?@R^ef{=~{@DC`>-Z?+#(?z&Iwa$0K7@ +z^x{M7QU*D_I1ogW%aRy~*?X)X%kQT7?GnPPP9H{SvTw-r037JT&J(}SGall^G0?8* +z+#o3mzys_zk}H@UcX6PMI{46r1{UsISpl9Gy*Xr^oT<6O8ujoXdJ@6t;v%r|0j;`B +z>BLy}-oT@iMmA`Z9Wl?i^D;j53}AV3!`_VYbdzb^`oRm*K0V7NHn+4lH{7}=d99e- +z^ugI4e3tZ6{&>z%L_pZcB1j}ba5_g7`Cy0wA{d2dzmh9rRIQ4v6h8=LDp@Uw1k1}m +zEQgXX6RKwk;zSbJ48a3wvq7Gn!NP1f9(w~VG=wR#q#q!AxB#tcNkXws=tcGRsFc#p +zaB2!X-jptuGe@81W$OM%=S^f#EFFT-2)y8R_Wdi=*oApd-p=HqWMi4rmpgUe0yhQcn +zGo<`W6*W_evR&6 +z35Yyj>-)Xf$PI#04d%it0~cRq)A50vYAyTLVi62$2frj7;j4*lpKsMbadj%tk)Nc~ +zlzVCt?}9zDEB(y8bGPn?D#0bisHgs@!HHUx;RxEQ68vUra$&vY{e%Pbzb2Dvt}gI) +zS1kP$f7@~bPaMdSbRc21kag4s;FLxeXHj7Xj*Lv{hBen51;$6i&wgbm;i(iRc6KBb +z1@amf`AqB&!~ksH3GH^E2jQh5)fE%PiE*uZOob5@8^?Xh`iL!ySDOy3HHGu^FO`ZF +zR#z4h{Zuws__#I_Pc)W}Fk~!L!j+;|_QunFLNg`MFFWf0EHyab)2|L)PoqavVWKGr +z*2gGbAmKN2Buo(N-$7kKKHd71sieRN5DWz+S`1+Qx1%=1{RinxQYR&2AX;MbSxDXn +z_X+q8q(uAmb%a6KbMq!jVv4-$G0eBIPm_L8fQQx_PtV;)7@OM49B6=Ob4_~g6w({r +zhjlh_^xS3gqFVAnl*aT05rM+h(ovAe=vBi|gGxo_T6F(pTFtDd2@aq4NQ!V*RyF8oJtzm{g9z5B@a@wX!F~h9j92KB#aAAKp!`}QErEUk +z&IXs9-1*W>O@IKRd11-%wE5VxgKjhPq67n5>ONX3v=A~I7g5^GjS?u~&(ULE^lmWAZLnX{|xpglgp +zDTx*wG$`A6$X@Pg#Y&l^bB~5u)+9cNwL69W>MdG-R$hNh9atEm%!6UapmFOL|141_ +zR|++|InrhCswDM0GG9-0}D9DvCMq!j^y&(ciUe2GL)x1!K1B?MmaWZh;o*o +zjFi=WCHvkDd|8vYs8|MGrV{U9-8+jvRTRUjU4(-+8=BP4z4<2oR|eo?mRvmay7aEd +zXAOi9>}EXygfkBxx39&hvZt1G=22Y^0$6})?0wr +zPRI2mx`9|v+`Km1CEkg$Dzudg>+Bh-HA9H40VGGGH&j+Z+i!L>N&CvQ +z{F9hl@BiKkpVzhwo68bQ3{BxpPjHPF0w3=heN0&{M(Y6p_?Vn1f~PQnf8|0zMDdao +z2)E0z=S13GZOZ6-<;e^xL!z>~R`3Tr9d(6VeNrx;Ahb*`rylRNjF?9f_oUvz*`sDm +z!b&iXCdAsl0vMuAWnpmj`srj2!%mf`-n8$0!h--=@`(u6Om3pZkYy4fXn6XAURUuP +zCR{nP+IUON|4gIud|FcL7q!Q +z#u!uDnD_rkyD)`+kxR^z^V**N;<(mfb!UM6>!`kFwR<&&AOJSLya_^o+iFQ^tQ+oR +z`sHs^Lv)`r41o@ffe>_Dpe2YnDvu9AjWBTU$lUfy;*(>|o8mpP45^D~G{;vXddLHb +z?JLS~4F#kwv)0PIAYY;C#2l*C`)lgS9C?|A2|BnFz`UL65Uk9HTzY=$nnA-agW%2c +zq18E4ztdGr=ufD7!-VNGT8A(tV43znZZe>@W-CzA5t{;{s*!|J#SIlZ_ToZw8b2{$ +zV4}=c85M=c`(p< +z{^H_s8<(*JY9HyOQ&@&`MFP`EIgyRAFzJid0RQ>cS#Y94o6C+6Ya_Rzu +zQNNIAq&q9{W0WzX_PDd-5G5lXOWk)~PREu90Z}q8B+6t1(9BgvWL8HR^?Gh=NP9Ow +zxcP(GT@3r}gh7MQYlmYcr-#PUGDLHj0c>Xjzrll5^jh73q3J7&Y2h~Wd%2vsZax`P +zFLuw5Zd!6=s6~=9>#$S)iDEUHMMCq$%HAkz6M0^26%of2Omj}cIWgzeVbUq;r-7t8 +zwpMnA`^ETwRTq^xF?we9aLu+vfDyqC;YNsb?yhV^V*Y(S#yIAr)z*oPvg1m0fWhce +zVK}d$AsUux2X5Gsn6N^gd<}X5?o?;<6nT_01m{J<3=|Q(oB{Yl1-&wd>C}aUHEZ$W +zJX*q>Wk0BxCXZA@5i5M*ZnU9O!%etX*iHG4uGV-AV6ynXsnq;qvmj{^PwF_u&JUk;}M`fQ6~XrYv3$ANV9~244)yg)&toAR9vUHChw0nYif>G!hX%b +z>XzuKQ`vz^!c9^&k_{~`-Z7@!5c>?q$Wk>#wtYj#CS-`8smj}t7?4?zMQX50_Jgbj +z!kT*JBq-xf(!#|v+CKMG{tm>%3=JIZ#g6$x2Cp0RDMa(Z?#;wk==60Uk#uo2G$2^h7z{TtAj%H_6>4#X +z9Q7wbMn8#vGwcwo$PhN1cz_|7z%9GhG@F`1JJcjr!w$QALd3w*srF&o^AN4c!btXJ +z22oHz=`peU73YjY#u}!osb%|XTv-Uk+Ga^zF|tuDd(UE1X}&x%88WBD`Ien-=3|L+ +zvkN+A9DpD}9TLW`sV>Y=2^zf+Zj9%ayYrgse}+f-CxPNtqJ;37e)p*vu`vOlu~&f+qf+$Lt4mLD>q +zKQ8-vJJ6&fyJA8b85a{=A~>KXFtV>(JM?qFgSVL@pN)n6U1|>+rtk!4S&biFZ+=_bhR~!#$E+V-d^!HihLHkA0N?pNwL- +zgK2KjNqw>>nd3VrcMis&Jgw=HDxqRi_@w;Bx+!oYa1r9gmXx>f_;%0`iHDY +z@`l%63G*Wdk*x>rYjS$o3~AeYXrOVbg41G`7Bj_@mZ6u~zP<>!spGr{pz3iXo9-!%TY@9KLFa%kAdI>Uh!d_^ujVW;= +znhLG+sRiSMw2=Q4gL8hO*96rGDiKd)U-!l$cqF83YaWk8J71z_3RNCAISHyPTTGJa +zBl!N0^Ply}5|=0w^?=(aK7ATfMY3lw_Hp%Q^*^!bbpQK~RIT+7K0_5eT$)5-09n%0 +zCos%&utZLaW{$vK5hr6N|2f<==M-)3KmSWV8Doh=lWhjm-g;t=k|b0NTI!d?1fF=x +zMa>Q2P&T&rOP^A)Hp;g%--Osv)`8br_51)JHuWWVhP6eogy;5SZa#nofgsyG)m&`M +zfz@SnppS2f57oY`T}>G(mzb{G5RCCshQDWPdQcf@#5>?g>?darunOwB--4-h^b!NL +z=cdBw0lO8kmub_wfk&F@J=B?vW=?|~A0|Lu$m-MdQ<|W%IFVJO|@@Ab-$M +z=!RINYIxdGY=_xpQANc55YiJr3!}C^LYI=R$-i9BG}fYY^JoE4qq$)7=`$8hW%+Gt +z>sv){dN`Q@c=3<{HgZ7nEbjTUu-j&@q083tJsw6%VNs4!(U}dB=p=au +zYYaDn&uurG*I%^_r`RN9%Qvc8>u=G4td#{9n*$YYPAXl7m4#Y`4rlzl$$V6oj|TmX +zh*rc<8-=q4)J^w{8K4k_TXPpK2*8`#)q2sja5>d=v@DU)g+l)3`8M$96vDf8> +zZp4J2m6J*2HKXcD3csYC18+F?Oh5XD?`k#U32zByEE7`*frTo;NzCRL4dS3xy~%^; +z40_YuYBBMLbxnt6OvOIgsHgTarUyZN9Kgt%+g6wQEa#C3tR5V>7__+WbP +zQ>WSKpt&t~N~1HoR~~IN^ +zQ1xVF!dxs9a3KfjKFfrwEP(-ygsGt(6TAK3nvZ~MAVx*)=#=%&oUYs#LjiIXvqBRA +zxJ}u2@DE6Epi6%T2hrth*V0xc^rNAdkx(29ukI2db|~t}5;xG-SvaP#11(*m6KH#2 +z7J*pSNAnbW?(ozR!m6-DMwh1dw#HUMexs9geD9C%vBI6eputH9NbvI+%T4XK +z#nKEKr5@wa#gkEMs>vdH>rIhBITFZ|lxQ@u;Yz&Ls-LIuqz#2R=U}~w +zX?3iuk`l5J^#rZPL45Rw>EqSo-EdRtKo5f~ZrL%57qWmi;?W;Uaz7rKIn##)%KNnd +zxeGG>wyR25RwShb4&y$v5+O&D7>s*E>xI6p2d8kYJ*+>tj?mWE%F4?GN==NB(;Z>2 +zIl7c|W*Y-Bk6BawR4eLA&woL$X_#&)Yt({!&Akxq5+F^J1A~FYxuTmgPR!b&_Jr*{ +zF1|v5hz4mfC^Q53nE0n{e&K2JP0Z|Ss%7E<-JyVJN~b-fD0`LY1BW@kvaXtA0=`R0 +zYNGsTNDASxs+z?GtUz7E%fSI9(ugTa8NxlvG6f%LZGqi_ir>~i2!uilz4FLvEr22b +zOBwAtqc_sGQ|L#%UfFnwjZ-`2_M>3ztvceUzJYrqLWQ6jz@3GSSq}*<0t=w +zgnHgV6$|2$vdURuK!I-?8Kd#{xu}tK%)y +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 +z*0UE?3+pv)dLZj*Ua5r4Z9XaMsA6R_Z +zV{YDwq6gMxUr2Jc%=-gDtf4C`8Q47pMCe=d54%!j{q?V+?b8OQJlB&SZRcPV6af4` +z_|di!qU;$$TaR}ejb%Y3|1!YcA}Wbebt^!f>Kq|WebQao&o&d56ji?zQ9z;m^LuXl +zgv?hE!bwo)?t$;(HGM&3L7_I+c?UF&TAvMNex)!d#(|X4GUJDwL>-&0=$IUqT+N+_ +ztqP=4rLdtNR~3PX%R`421Ty*{MuMj1bn6K>E4Y97n3EBf^JWpOg2z?;y}|U{1EhfazbuYdUs+HQj%6pq@Bq +z&us8%q_+n2xR8U}1%dNLF}RuEu&aH1y-%d73l5|C^96BQ6TQ^NSLD4un}```Q()-% +zI;qk#znBH1Ko(~=C;*$)1|~tMQf>l +z$Qe#TJwqhK<_;`wL944ctrtj*J-+ul!}C{jL17d^cI4$>>r?sS$)*jnetNwu`&y%; +zk+|%rjjImt≶5A;ozN*2Vu(82d{(MJH?Z>3Djw7;<4`{O(Qt{V+tU`^PSu&e3u9 +zW92&8ySIIPE;0VvA{~n(KKOg{c(JJB`e&2zO0&yh{it`wMIRHs%VBr-1t4bqacbyg +z1&mNb@BeLX`L|8Nox(_>e&uZCMUm%RupE`KJA$_!g($$93>Yrw>P|cAfFiDBcg+12 +zfUEO&=($2yGwFbIRQp=_3^RXo``|%G;a(^UX67}6=eJzi&86lJ6u*xuJM1}4)-mI& +z+8eqdLKZ_N&*EJS)wVg}3K +zw%^ccE8OE*{V~|^pUi^uMB(hg`tp79YI?>ET)%e^Z%OuL-_?sbrsDT~d{~9pPmkAJ +z$Ru$(6bx=q4FkNu^`t85O+MTN9EP_wFiblBbu1VLezXb;)%9Elz-^BG`)vw?=+TH~ +z*N^*V67hocyPk%%d09@tE@msUFx+XK?5I6`gomnp5jYSc<`*K{afk`xsH# +zwnMlnIs)XSb<|LlabVN!0=GrwELHj}BqZIFJna(0!GV%@8>}NvKjPcNrJT0UO-$0t +zCtp=N7rl1&aTc|0WVcka#k+P(s0Cr+qDirRL3^a1BhvTIi$3P%{xY#0!4A4sa~Oo` +z@J|w5WAbg9!X|q$XxZPkFtP1>`^NF=PM_i_G@~;8U(k^Y#$5Q>)GIcg1eGgxIIOf3 +zX_o6F@Z8;50e=2@e()U7wIiYgKlZiN!yL-#i#Qkqg;qtOo_?vD7u81cu@pF=9M(~v +zO&Lg%T$O?+ZnFV;t{cSHC*XnHgOIhtjs|k(I)EI~-?%>hStSw2fnQuW3xAl>4i9aq +z4NZR6rnt*FF_AS0>vJ3(>y#uJU{lSxpLsWsag4*987;*-4Ta11=sDH=t|sCmx8-)6 +zgkE>OWlyui5nJs^uA-X?(wL;~28*f>xc#GsANpl63sDlhGXO!g^$yiVl{YzUz)Epx +zaqp3Hkn%_Q$R)C}O*fgLPRuWte89j|$j7k(#(WMq@e<7Mn-XhNeQ5i3!V +z5G_94-)5LunW0A(AZD6BGou^4XZ^lsVvZ<+US^#&gdQgEuEW7K%?0m`DaR1)3DZtG +zvNR)?RSBs~DA9^X+-u2KiDK(L#_oJ=JnJCRbe78JWUozDyuWTlf9P1~U6JTj9^1zy +znhZhnxLs7xH|~zR@;EH#f{E_E4@Q%gzj)ahCimxe7+BGs1tdsl4iYJ$(Jbl)*6xTm +z#k;ZV!?CPGG?jn!EcI*~tmI*v)XETkw0_zU%}=S+yHQlaKth?7tmX`HDSa +z4OCH_n`g8QP(a2JCrUP@RI+eT$@6%SiR8CqAtCYhdWMM}hPg~+ +z^J%biGJE*)rG{`n+`p?m5iad8BS^H=E3soVjE(e3MY*@lxfnmfuh{oYv_*`%vl}_A +zW`qpl;g8xOPtkGR?W5(0rqO(s{V3t|t3asm>wH5O;LWNzV{Q-rt%Z1SN6xd|eWfFQ +zYzNES&($bZ-68_{|FCw?I!O;~BrUy0C$x8ZjFzpH?78Ky2S!adf1T|B07Z4ajYY`O +z%&Yiyg8Q^DaubojI-oxC4hjZ;Y5dW3ER>jCU&t3pE`ssQPzrK8xI>8Tx4uOQHj-mQ +zU7fIXIZpCG&bI@Xr}`9f#VcOOFqR5$k65=ye57ri#*%y|9NFO{kW%F4l$E$^X)`ZYq3R4@uNNWr6`}q +zq}gk9ahu7}z>`v-wA~$#RXoUk137X24to9=08Ic!RQR8P;dpGSinbSfRd*#%Do2Df)#A}%L~nUQcXLE!nQOfC0;ig4{HPqZ=vwg+JixKT4exYXL~3x*@x-8|dWIf7J@P=~t4F~@f6 +zXkvOPwRUZ*Qb^8nl +z(SSwPU0f!WhfjHH*|uMQ{WHXZ-(O!z<7hJU +zUBDK_72n}v>5=>FDhOzq<@=JbR*ji2$8EyuL4TFG9^oqrFoZauBL`g|?X6`(bvY`Z +zP7fj&bhpQGOh#;!WF*f<=+LqS_>D1x`=TQ#5FPp%(Wb}AZclO}aSSrdm^=j5UK5+9kq_8>*Gk#&mVS0%7*#_okTA)+lT&qF$QuqEA;!(o0_shiy5cJ&D5Ag#P +z8hSlvN300cmUO`ja){u9EMGDhgUT-7Y~ku^GAO!T>FwoG?jNv-MmD4@MD>fWH~j0^ +zhkok^NC({>yx1p-9*Iq4P^**v-PRZ+N|r4AJ;jm|(OpE^=H7O%-VXurhdb?K+k~He +z*eID99I!XDHT%4%_XM5)jfWkm?j3NG|IifJYqQsr2k4XM;yP1%6WT=%w%WX-uSn@) +z!A9Iq99m73$Qc55SSs2Y2MH}lguci+_4B49mX>zYqQuUunH8IbFh=TE7JboUEebD_ +z2YO4!+}y?1saMK^G1DjptO4aLgJs|DO=6&Uj+;10|1JeSQ?tzK`|Qf{A(5@Y&OOMH +zX~;qz?@~2!1H^T?3aW=&LkzOY;zbs&PsxRvi%MEydt+|5a0v3Sip>X8AQ;$my~O0) +z5GV{7WukD}a!_KlqL=?L^BmEug?)AUtb+UCgh+0jeT^3e(wqdbEbQ|OAvKDGPZGWE +zv!QCZ6JHuRD$rYIj&V}6`n7?8FWd#%lH}6e0M;2d!M(8faV+{^xR^yEntggx3S8h_ +zSy#yP1=`nmkhZB8|~nqeXj#j?0%re8xh06FN7du5M5VApl3yfZ9w0vm+!NC9 +zyIB#B7?Um68%91V2kkw5Q6o@f`**2~jh*aPeuBcyVhbm5ZwRG{s*rp#82hoTj_^ot +zEo=UD&MeUQdaTRDo7@>4aRu!VMZa(%fXH8a@a;tPatKe5>ps5rb@%LqEEZwI0|wn9bEE-YEcl`fXW)p*sZ4C+P`=n4KG3lYN?V! +ze~J`J0&t5$a;TwyK{jLwtM0hch<)N;{6 +zR4$ocq16d(rhi{788+?GIk`PoCW(JB`#ZW!G_?>uc$t(n +z4j6b>*y_@wdV}4FiX6RnPOT5_T}Mm_O#G$BHB|K41s9_lm_Zs<6a0S9+y|orj4!PQ +z0h)zr!-==A!FL;MJ7Qb%%fJke{X +zI5|-51=dw;yl?xe3L@5o1 +z6=TP-O +zh+ht%1_?gilZI~^$fAYchBg>Ay8xz6auD>j~ +z7Z}2*hx)h(Z?1oLmhA3cL>RL2jcf*XzXCK%GwmB3VCKhl7}~M2ag-)y#~?oiQ#W;F +ztV9-v3cBj^cnrrgj^A=+z^n*oDxP*WB27G&IEoNegl^rSng}~G#-dOT>R=1zvEBiZ +zjm{FzaBrD)ke(8DhsDRN(@aAPxat@s9U$MR-9Tl*H8GdHt%b&M5*i=>QY*mDnFPU4 +zT&Glm?|%_jZ(!f{&Opf$vE)@oreCPo#L#aq(q=fTbkC**Aqa9hKoxOG<;b +z&#up5Cn_zKc6XVxZC$L%MN-}S=*Mj2Y7D-2({-QiEoLC2Vio8svrx>tTCERAIaI~( +zHvFqJxW<<*?9|=XCfN^>g-_3>*yuj*H8A%y0Wy0+RyGy-BjS2v#2JyF5!h+0)Xp3^ +z#5Qxa=D>zq-lrFFBjP@1FS4ll5h&&cX21It)7}!9u;1NLw(i_L{zC18;==mjiJ{W+ +z)Fe4Jf`}tf_UX;M-<(^-YTU^=CP5Z@Q2?>jD$!HWVYi=n&qjr^t#^0~G(R6x~AUs*b>SBUX(lw4m +zRBL+!70q7Zg9|CX{biVe@st0T)DVgD>TgU%$D9LNpGV^_al^lVe*`5RwUdp?m;O3y +zruXe(OCqGgag*I8b-W|6!Fau3;gDT?cGAW&<>!LNJDUAr66Nak{{eyd3i*kcw0^Dp +zLzo~}Lc<}ha$)eR0gul`k+n;-J6A(wgfwZjI2whY<;S#conqF!PPg6GlAR=(*Z8;y9RBeNr&Oyh^UV?y}s03z;5!`7|ao!LAkVvC_%;oh~zh=x-EP)1ovvsFuhm +z-!)(8o?^al1g^_R0sejcGZ}=_G^d<~@(2o3;H~d~?hzi2y +zDZFuE4-F_6`?6bSxX+smb3YG=?z&)enve4=Xa@c(b!qq7`R!6b24!1ev`3`^T{IN7 +z8?a{H!%!7oOI$Mq9p>2Xl&JOR?Gf#Sm*PSk!L00NI+eXJ__h|a5}&MMfq2cFt;)Os +z@QE>O3ofj>1Ggjz!qZf_4s%P +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 +z5Cb9VnHAg{XPnGyC3#&76CKBq39g +z1%qLJ%CA+)771gElvFtvMNk7Mn}HT|b}t|V5b6G#gH|q>BPq4bxWR@I`El_+ikYDT +za=q_LLnSK5VYsBS`2og)CA@=1!(>Ds&J_P8{%x;uD%0}-t +zex~uH0X_5!&`n=RG&_;=G#!H9+-n +zuE&Yk$FAF;Y=*kzsidG4!L|f@Tf;A04|VD^K*9UJyYT*4hsFZ2HtkO^NTS{`wF);9 +zj%jHaDh;h4J{%(3B9y;-VpEA2*B&HRkzps{uF;fiqmZYe|M0{HEc8HdM29#4#4aZ| +zdHDcWnV_jO5QU}1sPSOPkx<%HNgZRXy=T;sxX>`0M*~o@1Mp*Rp6G%NQ10<@QaQ&_IIs~!}9sSFsQ1uS>odSB($dG8BD%qjPO +zH1|EMzZiOLyEnZDq*y2fn+`7=Qw%3nhAK3A&g$j9>VGtMN`T`3Xl~BHZ3+?n8MwAl +zLgmj-UD!!fUT~&4jgC8^42SiV+vnf!iN}urqq&Fvqq%`I$o|pXacV^-CcQfay7j;* +zQwvfFO&3h>;luHV|3`C&E+vJM;~PW`^G=h=67Z>5tAfK5CjCcqvm*JpY-fadD!%=E +zBM!;)LeIZM7+muPZ-;Zm0~n54AEca!jwf`pikM7j34SY68@xg>5!qsTQIXw8Ou(Vs +zmYzNc|Se%ZRql +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 +z?-LF|n5KDv)Ol6ZUhaX( +z($)uR`#O`LQdF9Ng`3c*<6t*x(9)(36UV`4%Y2!30|ZA(Z3+*m7eoLyPFH<&YmRk{~ +z%bMlE$dE5WV+#CO7ZtdkrdegaY%a}T$YLhZylzfb8^ErQM#{dAkKqF;vnsQCh +zNPsl^B*Ap&(?*%pJh^QOw!I)_q+<==D^dSR9A*W0VVRz#ChsRk)9{~n8LECMQ696Nr8l)brLEM6R#2IsQiaf*M&OnK$&^Y_<3`C6 +z{U>u@XB4le$OC--$=m}4|733e5%s1cU9$gVZZh@u5?<#AVxhJVQqNa+&AP>5PB_J& +zpX-^0+_5KGqS>UkARv_hatL=G;wBn|KazbBjt05FPU-bsBYEGDSxR>5f5G%$zNvTI +zhW-!c<}jhxR?7)oPk%Q4T1|?^(Hd9F6XVF;BQ3kSMdU?01bCKi``8m05YIYw2Nx%6Ab2k|${0DPqZ)W}v=GGYu +z6!yK%X8Z?pFE1eGH*Ns^e_(D*{K!Vu<_fW&M|UjCy>`QZ@3u2lwsNX6CvGERpq2ZW +zR5{lniQd`Da;A{dYzgVL>v%K2+`Yp)aL`{Yoan%SEdoDzYtXj0-!yr=^iZmWK|w9reOn#zLQ;YtB!_; +z)!_{o^Z~2Cf{j4E2=p`N$WxA@I=8lz-xgT@)`b)obm$L>w2=4FeE7_JSNs_VYtW6I +zKi}>5w0nzUY-z-1Wx_Fey4t)?%E0wv(odOh2MKft95wFXdII@=u+Rw=; +zyR1jfta3>6>I(I#i{9@%TGxQOyn|k +z2FUZoK`Df&T(_hlxJJI!oUy~y8rt|rgX7f*mZXsVRW~@M8vFo7j{jut+kY~*9@mjW +zcI9L#x&pH7TIxi~QmG$->4@hwPI_fH%h@?>Abi}% +zTm;4(;tjJJy@#tlaUHA|WfTHREbg2@0ja7orRW$BAMiEByJjk+)$S?IZb))ST`!)D#!n1T=b7@t4RXCHZvf^!Er5=hn*`O`qnyBIHPIYiL9%9I&Y>+2{S +zepe~wWY}UEDZUbp`TWfcZQN)UV4%P-a$;)JB+r!9wTlSxZ*b_JN}!PcY{Ta>-_z=M +z=qvLJ%w6Tg$sjj_^^`nOb037}^Qitmnmdv$;Xj&NjfCvEql|k@vc`e9vBKUq+W2Ms +z192pf!^R?nJQ}i{1(H0+CT2+y1vOB{QT9a_djsXSV&#Y#xX>!ArPiC<`UG2Yu$7~8 +zLcDJtexK!2R1Madh{56iXznzidU+S>lc!;v)(7==w86_UlKuiV1Rg4P?_9>RhPm?>H +zHX4pB8YjPO)SKKZNr&Kw|AS61le>itr#=^&{g`SYJ9cKs&t*)@NHqTP;@9`NF-b0J +zMqqyfASll>H}f&oJx&`EO28Gsx?mahyI00)DGm?HvQ%M>?|oT27gS=zI-;HwsP(FE +zE+R7%Llv;3A`1C(#kTXsQuTtO2Qt +z1ou9tbsQgsj*d0F3!%1WoE#H7X$0-#`=!ivfZ$c$WUjwM4gme5xo3cn-Dq1!lY6Ev_voc#DtJU6aJC>E_|- +z9zopCVfOVSGt;ZT(}S%ps*mTADK2wVW>CbJgWj(Y<~3#=EjjGG8UtfL+BWNf^5n|jzg +zQBwEBb{Wehnu0I@dZ6!YW!Ey& +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 +z)0%Z)uEh}8QM7cs# +zGS}g;@`|_U_rBrHNFo8nA05pbnH~IS?78H|6@OK74jF;t!%)E-3525Y+_#y~Qhi-Y +z@iTJHl2Uxqd*&GH!uuvHx0{*fj)6KOJdybC+Nj!U@;XCx#$ykWvOyJ=FM5r{I*iXo +z#~F0+J9yjBsW$6r!KzG>M59^7kUN**`^v=_wIji|g&@01ndflqPb}Ve%<%w$)QR=L +z+lckuP;T_nyy5avAnS?5L*$Xd(_`6+oIjz;nU;3`1H7&Fj_u6 +z?p>eH=#?JY>}G~wky_oqC2QUs&qf+l;1CJP&7)Fy+g+edOk614L+sfP)% +z93tWad-^YFUAVM9r2Lk5>|AAj1i30IJnaMw1yJ{VwgF?rzu4ZLOpIIQ_dRMWdf0$! +zC&R<8n?}?7ELFCD)37L<1Ur(^4CGIHm;D~;S%P| +ze?6=QLoLZl^Gq%=Lh5iNk;OW+|3M;9mCd4B%HlhZob`t>gyv`TmC;-5MCcgTML``^ +znnY59+2!#F689JLg%*B+Cy1)^F;tLAXN!xFla_F0?(R^C@D|rlNoWu0aof-OgI4-2 +zTCwmvL=VPHk9?|p)jhI2AxSHomZOQQyUp<*%^@#`+{j~3KyE?rg;y8+O!DxT5!_Fj +zLVpIWrrEa6ELm1PAFYc8yTV>vDwrfg$_Rod=sCAxWyhS>>wpvfeZ7`W0z{Q|FsZQd +z338w2{s(dkPSD`>)S${?iQkC{Q&wAbKWq}NT6*l>$vnO8I3yKi{SV}(ltrNbAIMGG +zwlt2CeX#BFAIL3f3K0U- +zy2$0_^OFzVV+c~6@A4{6yq +zOzA27@(7U!^%~#Hz}sq@x~-W4nc?q&46(u+g3xA-y7-OA2D@)(s<5EouF%c23I=&mT?7>!SQeIu~*|)1p|JSILo_==7<01aSy!KLbV_> +zejI7hvQ(!`LuKCRu0|)Rq>#k*6x~YiY=^0}FA*;D=2OSrd$@s+eAH9T4m@Sn?L$~$ +z^Z5UWO`5Z-i?+mc%wP4IEpsWhX>y7e*l&fj}&`}*l|TV-2feR|wMHUj0s-|78uPoTs2flZG3|9RXDc2+(M +zNq7CnWzp3WIw9>5nPKQ@iss6C;~4*%Ni-UgTQgQ`Po6F@IVjTfPST~c{UFmIbkEo7 +z+#lFqoRHotR+thpSNU2roJ1LqwyUTT{t;*KTG?Q5L1#7ZX5CX4eccTp`n_>AbT*wB +z$Qf1XxN46)h5dZgv-_p>_F>D{^aEKK(*Z>`=jcP&pX`xE5G?)FI) +zBI6wWxDC7!7cz3uyJ|qygxzNDkualCXk1fQ)viNY=2Mdn%lYbMUf-$fi9r>ktx#$Q> +zNxmCZOE;;upAD~nn9)}2R!T^%4z4p2zmLe3DB|k8!l|oxQ74IJohP|e&*b%_C5{co +zy(%KWPPOKktkXG-=@eBy49-V(got02^s{#T$5lqC`s!n?*RzUrat>y?4T5ssS9s^2 +zuMO3^FytZwOn+cNmAwAOohz98upJ&ouZmblP19lqyyX!vgkMAeWH|i5_CIpOn--P|2 +z-!3P10KluOiJf}jhe$q<%;$DOWF+AdY+3N6bSk{Z{&%ibyDd15Wy+U+f-|0PMa +zaoWVy`6FEBkUm_)GL!tMx5Wv$B7j9zM<1pf)U18g6k#9XY2uc+{ld@W$A(hwD1xj +zWg(O)-lR{Q|8qtLL7;ZAhn@_meBKchm=#oPezV$}kbd)fc6bsc8O_1Gx|P^CEDlF` +z-sluEdOLn4CitYe*$#zN`eP8MWqY`Ks1|<6O4ZA({3OrX*)hIqb>%m9q$-53dJ|NF)n1_$^|pEUMrAz0HPxf9y|*zm;{R01^oXw +zO6++=YcK7fp?9Dn26Sv4P3f3Y +zD=D3ODqz8{72879T)_?6t)VIN_NfzC{aVK8c1IrzWwS&>m3XYVi@K~ilzA;Pl{Iq4 +zD%Lw*FRSMr!_Er~#m+hTLK8tubJN6UJA~gnWdq!(;aDe;nnSow`TPgzA?_uWQSkl> +znWek$@2Xa5Z}Vw$XTRUq0;-u@KW*;#V75l0Mp=YKP9h@kPNGQkCE^s;!HrVUj8`hGXfUG5wkXWHHcI~>2;}c0w#scqGzg3C`(rE7CtM&C-kP((E1j;T +z&@Fb7ct2YWQd2s3(Ql!3YJ`6)b*$~US2^999~C=NfX9Rd-#8CHa_>?{`$h3eGE)Zj +zi|vOWt+c{C;Bs%V0b3eE4h@H#tN#6RJ!s-j+x%1LI|#%|R4)Vt%2Y%q)M$ixPXbUCmO +zW9bD{xfB@iju&VB(tEW42;=$s!q=d^5%hb6wzmTbDDoTZ_HOUmIFn_zHJ+NEQhkpy79(>zg`9f&8WE9z}^{CX)pS#C&Q8q@45|N +zShDQcz+!xgaKOE{^)C!&VGbZI+MSpv`HZFKt$6i1gvXJdfFvj8cWKC= +z-JOK@BW&?Ma*wj5yBhgEp%xt_M|A{oJz}*yMM3?8CZ7*}-^Kv9SY)P8o%?IDO_&=j +z;sA3BDq_wf8`wzi7yB>tjJNYHY~6eckCm@{ox}w1513`Yh^)rRGsiwW?5~!6PA~4a +z-fqy}Q_WeN_n3m7c6tOq&M{HCy(LTL6FF^H+T8Cm!5@JC&vTpq$8%e(*S4N-&~+{i +z>+69&$lLxHx9FpJmLdDseDd7qvD>=@cb +z}vLa_Ny`sDBBTq1(ooSPYi!i3mIk +znMNze6MH(TOFQVeN95!Ww81|T;RY-Iy%%q#C8FND3GacN(f`y7%>7&wZjd(}e9O8Q +zN8^y=yg{=uU^b@XD^${Mlh6Fs#zZqjqx$xNC-OOz7`0I%{>HR=(errzlic^ipo{6o +zy&%Ra1>tK;g72`vP1`-Yq;C`XGungIz7aQf4=|~qJeW7o_+?sX9Uke{7VBx-K3_eR +zpR1Ou8qvn+MOhEG{rrXFdTsLUhAa~P3fZlf%ed>exKQypJyCx}z)qzNYE5qJsZl65 +zcDG99R-po0-*i^?=|X2thXD8=wiIE;q3Uu*sZ0q{K+-W%3|sS>YxevGTj>0D$h6$= +z@eI)g>#5uWlCA4p|MNvzUv5_Y>XZ}1Ro_pd`^SWD_7&h>GT+<~v^jcw&!E793^64{ +zVt)DJBuL*pSPOs^yN1lc6h3P)^CW#4YNfaFkJJA5H#Pvq_yg4x+SM1nUbLnsB5`&n +z^uqO3v8Q?_7Mm87*H?5BB>5|n7O)e%=^|`Q7XK#kVCr)W!l=q*_;stbF;t+cRcbBy +zxtQ4xS7vCOQExfXZTOX)Pi9K)`=lWp482PRgl`6i`!l9piE#b7as8o(>lcB#bl#g7 +zy5p8Y)VN$8?>Cu>7*f<>lL438k@K$XFEKQ)5NAlVQhV(JVf#G8XpA39<6CCx3LjRX +z<4+2E;J(+`omaux%ocRXSj5#Qi0ct1fslAen#4C1I5|wX-`Z6$uj=pL=Yq1!V~Rn}aeLH}C8r_6 +ze2Vsu(D5mtU;XezD8+(AHVC8tl78eD*wF&=?+xiw-!Toa5 +ze9{2i-oFtQuc>0Z18b_tn{v|q35AA7&%7)>S1j;}z5%NqXUfe7 +zfYlPj0V3*CJRL|@&xs?{-nKG^=yn^|R69XG?^e1h&5`U?;B+$PZmKD>3RU+7i8ygH +zAspeKo2AJe2n-YH`7NLAo@x2?Gbya0M41Uz3MK$VLk-ir+6y|^*gAytXrkohGfCGn +zK02B?hXsFogwa$deV#8Yzeo~g{Redef}Rm8l4g5iPgmZ%ust?(WB$7Grw2ivuG~QU +zey9r~egJL{QdVBO;493*zCi)HO!#0#S10~OVH{hYpnu@aj-$Ux7Q=PfppHlZ>z_=V +zI{G=#q1Gp47y8TAx;C6+jOn_n2WgzLqI3yMy*`G#TeSJ3an- +zXxJD6#;n)9o$yA7wbX(Gv#%-HXBXB16X3~0mL96NB4oZdiCV85!w@p}WrfOj*^xqtG?vhsS1$;VG{L)h1;n+dxgI$f_>|FgQI5WVM3 +zM?P1W#ZJ+3bf**dZ;f|0TiPTD@JM +z5@v=k9br#!ifAMw_bK$xJKm7i8%cwg{2&^#lw7NkVmM6?f|87^gH_NED-J*tdH31= +z+fbR#6p}uJ^Ib*GK-vHByIqG0QEU#}l*d&XkAwgxA@j3b?{>jQ_1HHm`&)8nE4Q2YGbEvlyKW{>MN9GH;SvSmV4eHQ%a>cJc6tRna|-*o=2RK4}#xUUAB~gDxnh= +z-}$_s|M{=Mpt~4Sexo!MXD+BUu0nRDB>nvZ;%1zDSpW5n#2Y;iP8mcu!@P2tDVXfv +zVJ1GUH~XSnUC^;tP`&`D*HTKUGd%Tf9?Exv)O1CwL+x+&2JkY^!X*)Tk@j> +zB1b=PGJ*vt+q+3bXvQy=YlCSGUdZGF{@U?D#;-uD`2LLy)<&x!c&1~--)dZ0{?xi- +z;ac|;C=M_yr;nWLUS~eFZWnqvF5-JS7X%1kn-ESuxC-YMhZO4UARVadl-c +zz3J)?34hcq-DM2E3#(jIea@tU5rosre!by{Fy&;}@8J^lXI=v?az+regXyA09?)ZF +zTcFNoQkF}1I)5YlCD0BayIII{?3t}K2 +zTcvU$heiapK%#Sqn6CdIZ_1bT6(w-0|9j#O`ii;-Qv**`mrt%cOTA=Zh`6K-cri}! +zlvb`!c5S_=ut146BXU(u!h|oDF*w)TRv`eorKKA7=h=gsdZTJ2b@`g>_z|&6RL0?w +zIX0k}(EoJ*+WVFV)QK~x{Q8Tefg#(@t9^lcrd<=Gx-rr0yTYGMczej%3vD$^eX?GO +zsWQpmN4lGT$Jryap_u%Y8=XKFcva&@Q~P}-6o+xRX`wln=Mu3aj)tV@0221?V*wE% +zhou0x7HxthK{@)O65Ye2IwVlPU#|tM1%(8)Oehj1@=vI12nhJ3V{#UuPLbSc;Y~jL +z2uPnrx07!OzS_46pz3+HorsUJ9sk7Ll7n+|N14|AeI?i71@7;$5B`I@9A-^vpTf0A +z0WIA8aY&Bj_RHml*O+3_LNQu{u2dcmO~+T1dNsGgF(FiE(%@mM^_2}YCD@O|&>zlX +zupYsUauPTq=(`zZU)wBm|M-Sgd}|eoOdn1oL4;#pUA-z1=8n +z6ztL4Mlud-`^5=bFYF%Aas=;>>K+5)rJ`q;plW5InRA7%hZB?9n41+S)V2HY9hiam +znz`?a?sF5un6Li^-)`oDwgy2<(bjC%|KqyV{^Pp! +z)#FG-Rh&Ezx>&8#Oe@w7l3+CgzWOU$KuS8xgd)mhx2*GkW +zpETJ +z9(q(f9$MXhP3&FRk-zKlI*-;fjdw{J-uokq$GAeHwn2c2F=jRU)P#0_T6BW2GELb7 +zH)>Lw`1iHmwfC=H&j^rHAoM4KBW%`%a<7JLn&6gQf1Q%vNhp{zunmJ_Ev7o4jW +z*M(tQOcGp)t1z|2eiLpsdv%VO7ECLH)Vn*O8VQQcH+e&-v!{%XBzZ{qWsn`L>{#^V +z=a3Ul=Qgx=0&~0=vJ@l6p2NZ0=H1#dQrV=4jFB((R}5uJ4IhhH@JRf8w)3D2^_e}3 +zG6IjrHA;P<1$cP=k8%QbBBQ;3&4SsEPW;{c+o*vJWL;42;F)sp~*AQJ<>G${e7rgu3v@O!I%Noz4L^uPcxv-$(H5XxC*!BmKN8FoswiU +z@ZQ5K;{8y@WIpTyGF8I)=@+X<@x$H;z1e?WH(pG@_erHTxbpwJ?%c{&p>*teRKyhY +z-})N9L`O#~%3cBG0Z0tf7SMtQGOnLqcXsr(!g^q{t+j$nHa@0p;V0Asx|b=NJRO

;kLyXV}XdEns!j3MtBfRuWb`{(Xlzx?kW6Dbxbt)XYl%kE=xl(C9_Zm +z{2$o;{2;Hn=d9^=HY*-ANM8j6vH`52eHY%e{j>Pqzx_-|WC1Qb&^_fL`%)nP3So{c +z{CcB5@M2LP>ygq`?fh}TAzt%zYt+oA`9_5APS{6MrCRXD{uE0(^ZBmdVM$6peQ?W~ +z5i$PPAB8a~LZ!-|u}sTIs|^WzXZlWo24n&&%!L^)f1pupuk2`~GDXwi2if>zltS_& +zk6)gun8-oV{x}O*6QI6=7QW2mY76)AAmptOz6apY=fy +zEQ3hOd&JC%+h1nn*Vi9;j%&3iSIA1854mhO&%1Ddz6f)eQ%#?o5g4=d=b?sguo9jl6yeub;s^%CD|w1?fmNU +zkrjALp$ZV%&nil4cS45xM7xjo6FCp~S@jRZqTNn{kL>fhv-9?GkCz~*Q@f)})&-y{ +zFVA%>c8RUz#XB3#oyMBt{7U^LcWPVTdN;9Pbv{hEH*J)xa90|mb)cK6Jle_)dnD(P +zNf|hsVulq2sE^{f`4{t^&qcs!M-U!uJW@qwnADm$>MDm%HWt)Na;41K%P6VvO2@X$OikocMN+A=do1HJ8yK?9@ +z=9nMllo1n{q+T)(4ezjbZl7v*q*JmY@P}t?!NBxa-TfuAWq3kUWr4m>D!39Ht7An* +zJ1$$%X(N6Dq>_Ho-Wl=YLPVI$W-Sql+YZXWd#n#ZasNjcUx#Ry6S0S*Mgd<>=D`|k +zj(Ovl@V88du2_wnDmUs_ze;w#JENy0wx@7SPa|I;RX-b>uTDRuwM0i>bIjd?@zQpb +z-h>;={*nx|g?YY;bdIX3(*zTh#aD(w9Bjvo5ELRWM+pCP!D_zm!wA*_)yT~q=v54( +zAO0!`?TP`8BGPb%C~e%J!rmNytH~Lr2av1v%zv`o)g01wLll}*eU0+MMup0`+e!bi +z-7G}b2&kCw-YJa;;5qSqeYE?2qJyW8+v}AS3r4_F=EQocnQ>-aG%A!D6OY#7_ +z{et#NJ^wg8u*;PvpiM7SJ>EL~=TGKRIrE3y25H7_XRMH1%E{XISQ=f`YPf%Nc^v%0 +z%H#F?S`=#a&()`DKaF +zC0UzVNvG)fBO*ah7b6<lAY*_f}5WGG_z)`pEcR}|NA)m*JTbRQFK*Y>-~ +zWFj{sW_7AoUb64t2;$gsFF5s%NiA#R&@egCtfFtTh$ET+x?F$nIptqCsB_{X@*Hym +zWRk>M8h@&$wuI7PrlSvy>?_CJiHe~N%^^)b*?wg%+$q9XCN(52J^1{r5gNBz&cXsE +za>hZEo`75<{VM~_qtr4i=QiCLmEP7ic?*h5@RG}(&_ +z(?4xj8bazcukRx}>3=n#JIRB}gBzt-!}dHc9TJ04hoGss3d}C8tYHUd>4=3oHL~ik +zkC54aLpvw%u|v8K7MhwT1=||()swdnm0xW}e1-`MGZ7_$r|6}X)Gn__fUcjC-;s8f +zaHp0xv^LA1XqK(+Zfa<3PKRY?s)KBvEIXWaQiTQS`LUP%guJLIHDS36>$%Thr(Vg( +zU=_ls=9H-Gx->UX%`C+!W^)j@&cos_wxL7)0};o +zE)P%s#B(b^T0B9`rWfIbSEki3Sn>FP+7L#Dp4ECRSvo{Oe;=uify#5jYsE}GWdH|f +z%1U+nlU75<<6+|Kx()=^Sl-~Gz7mgvtW!UYfAZ|eK}O~hKm(Zv*kki$;%t1>Zyl$; +zLIt;3$?=@ZRFMuzje#p1q?71YlfW_!Cs=cU{GdI +zCo41gwUu+)3Apz;9M|$6J7t*j-^~%=M~Gs@+NK`^yNJ6PxWruU;@gD~bEJQq@< +z0^b8d-Dm^ddr*Wg0NboCGXn-+cedNW&IPLB|7u~OSFU^CvERtsg~uQdwv7X&`dLSf +zz{6@CfL@l2e$kivt7RmgXT@jk3AFmFo +z;D>XSf>!Cc-H5aQbbzOi*O{Od;!L){7lr7`2hqO|sL@9L>tJ`|4`&xHw^u~_DbbyX +z`raSp&X+Nfi7F`zlt3`>SC_erg`Yu!?;YME5UlYEj9Pp@e|=avYy{tn?)F+Pl%?LL +zREq#7q-It;hi_YqZrkMRi1#b@+rw6^F +zgWAU=ODhkv=a#>> +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 +z;6$`5b{z1eR)*yJgs^c +z12-%|L4(>{;0$aD+s3<@8uXEfH7t$LT1DwVy!d?nE(ee@FK230xq6GHytcwCh@RQ- +z3omiGUoWGLdZ}b5HnAyLx+s;B^GQ^8(1$sBQCBba{oHD5n)9BBo?$tXfn<&cI +ziDw27u$Or>{Z>;7%jO)TwF3Q;_$boD6n7&BRYL!vR$?&<&w@pl<6CUZbm9=~kVf3$ +z{#=FAsqpkGHGt~PRo2@tjsYCI&+dT0>#{nck-z>0(Ap;aV&FXfv&VT^;k|W+Nc}Nh +z3gBJZ#qv2n*|PWhY6kd?VWmXd8A3l$0sRX>#-h_OQ9#~1--S|T^7%*cc(X{6mzlOg +zO5jqYWudLrH(LMIi>M3GjLIuqse2Tgy{};`{^I4kVci1FL|E+lPTk6 +z)C~AmboV??w_kqS%|^lYqY=x`wGoR`E0S_o1}~2)azI0$3DX{E*_r>=T?3ka*|ClZ +zY-OYc#+C^en8L^+O{%MGg +zS99?9DE|*}K#sqVxP5y11?=$StTAh2(N7Qls^&H&_uK{0#I%EAlPx+#iJO67Hf`c} +zjs{E#=pL4_u|{q`Zgl5fUIObT#Ge(6_{8a*Q`qrVuTMx>N^qq}x+ic;7|{v7<>Xss +z;TAD#DXI?Jt(B*>htt!?_ppE@do-8R8W5eRsuUu@Aj%fB;ut=zQ!Ads9;5!w`-^7W +zRMvPsYtKLh!&Q^+bZYFJ9;`L)rm@FR%iE{N!|H$Hgec>RYJ#FU?OY;le29}yB{C0U +zrnU@;5MTjNVAf^~WDZ?@3!pGKN|wEYWNeWCfKMaujtzV;Za-5w53urvNv~uhFhgF% +zX>j%yOLZi}<|D$9z&(EvoGzfLPX%^q$m=5#9_Ywcx%J9o`)rRo^i|NaA8%Cjgm*b+P8Gtch9wdTVMxzny{ +z(G)p3crRx>Q%gJ?mJGADjRwnQ=AG&t13e@XTdQ~QQ6MDVUpLh{&t0+TklJ35-n$)p +zC(2h6n{m%~Nju!m7SYM-0ycZ0==)Z=Le10C5853&%QX^{wtpKV;|19kvZ%90H#%Mn +zWDQl8nWP0PA#rKEaK!1;DwRr7_&UuGrN^{b{<;PegyEN6O`DE|o8%jO8h)k7C=rpq`b+s_P1J08OGJMhmxuT +zVfbn55Nc$QD}~X5r%1A_`4n1qqd~J=fu!J9BcVnm +zaPn;pfEe|XEs{j5Vng3w4wKlaZXPc3Ph8GJ&fUOaNI5BB6x>o7hg2e#JTSe4XRo8U +zBk=~@FmLzi$x#>zgx5fV+gJ8WXj`8ylT7NSYNUR^Nv;L0MS{XLuIjhjIA3%qMY4{O +zUN^;>aw<;^sBD9d@knz?66jVy6-(%>TgXoqUNIHtn6!H64d`KoHh`p9ql7wo_`%vG +z20sOS|Jf|0Mj +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 +zF`5pl9|s-b9!h2&s@yc>0wcsfbp^Ifi) +zrO^rnOCV|ytIL<|rI|z@tW8iiF>I38%OSO=hUkDSfF6#pw3J%wwL~~&X|G0ki_M}U +zYvh>FLvLc=`kUva+=mo@^ckD5_L62}fH@V^{APFb0%kS$DcGvE#s(pw6PwTd_uo%3 +zDy(4Sp=UYX2e4nhF}f}cvrb>t4pp6@aVL?c&(g|1>XZq7zcW`tMMdr}KzYFu3M7T% +z<352^1ew#g564>D?iAZ7UbTQ;tmuZVMW=?{3J~+#0&DJZS=}^H0md0mypSPVM{@pE@_7(Jt~LiNQQLho}x<^4mGqKADOHu*K~fydU%MvD;Zli7jK( +zJ#A(xADW5&_G_j8_f5AaaJ5squonZaps(ylerq)bu~u4`B)dD4-;u4y(dgaGI&j^u +zaH$^W77Ut=Lws@^QxV%EuFF0hj7OMr6C20`m^}hq9CUX6`%=mk=U2=Wcw%%uZ$WP)jxKC#fUyRP; +z+poWVTlC@Rhst@v?!3=lw&_>4p{j(0}kc^-f#_+vKGQ=A7=#5l=g~oWKcSj{O>DL~EM@=XJ$$0HJ*M-JC)HRe +zGyiy*TQ-URGcYCK@e6m+{hQd3wxuYd6t`h0{V@b_3-=}T>i_qZyv>V2v;RzlLIU! +zT8k`zXFM9jc7sxyi{stfoNLR8x#cPz(EAdF4<4(uS_-8ap&dC%ILgl6);IltjM{iW +zds*zGQ5jVrWLbkN>Rfi95y(|V-r?AC`6Lw4QH*S&ZI?7*xB+6fYHLR43{uX^P!p#H +zq>1rkPu%so{^As?B%z8Di#(tzZ_X;0MJ|lP>Tou4n!KHpM?q1n^-4`0C_R1Kqqbi{ +zcOxNmg7|U%Sb{eL1k})co?3CAKKbFf2=EJz`_OOH*;QzKd-u2v=%DtP)0Vrq0@K?8 +z)IL>m9TIu)-(JFpPg!U8l_M36+d^$ak$KZzFcBpm`FV^LYbn<_-L&MSL2%XchpvV` +zZP8qqYuo@1>gEA(!Yp7;0U#o<$Eyannm?@4&^KfBTuU4XI{Op$Y-mn^L7^@%<6;o5QW($M_tl6HCdDo~PzRTkD_HzmRxhmvQxU}38dnqx +z>F|nM9~V4N3z1gbzeO +zPEx-i6W;$f)3@DZ?I1;9$uT#y5sc*luF4suKwy4l$^P4~-}E^&&7~L{oF~(}U>U*| +z5a=$P(#zHQ=$r24#A?RPKbGtZje)Mh-pXp+a!`s)0O@0XX-)+UBrXX0G-D^5&vv-@#_N2#fnTwydm2IAQk=y;E0htcghP$jE!{wOsN872 +zhc;l^oVN5j0!+(R4jqvW{C554r*T;g9R$hJe6RzJx{){Z)~zo%qvAwV0Kx|3 +zNTcLKj5rLQLn#M5rOqopD5q{G={43lWtt@>ssm}-Jq(G|d{N!5Eyu%!k+I$b}Ce?w0RppFmSbRY5WdbMwZo4!l;u$3_W}C +znMrtR{r}_F&4|BrH^?`htTE79G6cO4(j|f1B3rrT?r==yJOMkbnM+LOHg))A!?rW{ +zHR0~Pa=osDrZdiXg8HC3bB#ZMW}_^1Mik59AE@$m*5@6p2Fg`p4oa4#=A-ux}slgOclGJ2P`4Yn91vk2_wC2 +zfC?t7K`9YV;R)VnsC^QXV9wqA$IAp%3SDgSM)pf~f^-KczV=BousC*di3)yMqfX>c +zn5Lv;um^ybLE!`_g^vkIB9BYr+KPN?Rj6f{Q;F0 +z0G$D@(!*%25V=iMLu~s?3MOA7tHH{UMEQ``jN5lHKUTTEmr$-e +z$3T7%Gio+}u`Q0J?;)^>TGF)J`zTA>B$_LL``@yYiG;-#8*PeY@e>t(ak*wE5~TG8{n($KQIifL}Mu^ +zyoTO4A+S>@3ilxzMl*~UA-#;`nS=^YoZ2ySSh9MgR=c?i_W>YXg02I)blPh}JI2I2ZgG0Tj>Lmjh-LKz(W`H9? +z_7$R(>Gzg&heIf?p=aCV>f1579VO&QceNVo=@^}1=&uS +z%|%1si(PLV<)f2j^Svb=&q?H{5DAk~SUEIbdk1)19eOEnNbJ3fXP#|iH#a#0MhBEe +zjWZemVG@devI5$f9=r=~<`BtFBU?WaVTC-3vnujAjUTgPN?uLq!6*EYO)QKmwMxja +zgBbY))Uc-tZUHmXRyDDG8Lo4Qk0U}*9=VAey#RM +z9FEH&7E@Ikrzc2f5DcbPg+hzf&~I8U+v_uCfWn{IxebQSCqu&Jk0WlmuGC4qGMy`x +zFg?B;(KG_3f2%i+$v__vp8(|On@U4^3wuJ#OUz9-4b4CW)A_Jr**?umzE27G9(Dg& +zpy@w*aqc7ACsu5C)!yAjNCqb{g{`5^bWBVKy40cQ-?y094QupbuE!P$w^(ezF}yR> +zdYP_84Yn0Wv^r;s5(N9?_#WJ7{#j3R+}9W99;lCZeNlXrmaJabwD0V!5C%`SQQ +zqacP$DZOWtdO!WpD3uL5`jX>K8Zzji=P2q+dvfeQwD0f0#^#EscEcG@xixNON8dh5 +z9PdpIo(1r>fjx=86N@+!((%?0@))K?cJrLg14^DcQk?4bVY`)6jaS*S(1jVSA_k0- +z7Nh!&gNsRfT_+Duj2pa6wUXU*?${vO^^qIWi0^-CEZ~P%$eE +zV>yc9TPsT95Us3WKvIdCjqX=GUyheRO571&q9cY9u(5DK`h=uw%fyBGB8WR*;)Z_u +z-G~|xtb#M9^Wh=PYXUBF0I9$phyy+Cd4Zni=0lP|qsX%ugXdEU&H`-eW+~9BFcNJ{ +z=Ad5OWlJXRoQNyyhfVhI0z8T#S%k+0{EZ}H^5n|rLoAUGOxi%+48TT3HC}c2%Wdq_ +zdGbdFzqSz!5uV;%OQDAHp1!~=RNEcgC61vnv%Dh2%p?$K0<9P7J*zS5RplYDcJ80P +zp?wgyA)bXjkSx0ed5dh(*&md|9ufp>1=vZ9&9s>#N+*hxih*1NwDsITs81$ioynMW +z4&&IUdiJ11a#0jn-K?VYqQo=ypukEMJ{>yy +zr`?IzjKN9$ahj&k8<=4W)gnj9!#4y$i6XgCz)*wUrF_7FwIYrQrOm+yk$-NjzD*al +z64A*nLL0GA6ZYn1KWgtc#LEPv?A@KZJe&!^UUNnz%e0$xJxOp4gf4Anwq=atnIoM2 +z=XP8yX)HN{3VK)l8}%}*Q>FpA`12cRxh4sxv7x=yG@cTFx3v!z-XuUP;B(~S*)d2~ +z>Nj-cMV}MwNrFxr9BC|`RNe%SsZ*w;?&}4-_L6?YUHXHzfP9Uex7RV)- +zymkUCX&GQ|Cc?$;UdMk-BNC82g%-rdLMs&;!fAu8vTeB0)RwVnJx3#M_lOZ_v?i>Q +zA<=imRDvAw(VXN=QRh)&LNCuY?iaHCah83^@UnpBP)B +z+x0w34(|(&Nkt5q^-|_RrA-!nk+M&%J;dA4rt@NoiNTC^g&|(oxyA;leAEgyfo+2X +zR+dx`+@=Ys)=yYIP$ehaFXd1N1T^gdjvqBq#|E5?4wr=?8kc{{L)Dcgf;nFDa+Q-J +zDcyMHAP?~zsdHSfUw67+S3}=o~i|J(v7( +zH@ChmO4_W_U*%0@?VRw=bw+_2qe`IQRRSY@3rEpk0!=lR;0`t#Qm`rvG~i{R4Jhee +zHufV>v5aX9U!ccal8JLGhsLiTb%e^goujE=FnVZp?IiSND~trHg-v2_JfKRmjPTOcORuqj6<`q880rc3N0?gX;$bEvrqi5g*C`uu?#;?MPG{t7O8$P$V2iST$BR^l`4pW^SjW14hFfxn-P +z0-LY+n5v31Wb!$5;=?R~631(&>Zluz*UH+E+hB`>aVsfz(NEKMHR(iUdnCdyQYYh; +z@=JN@Mg)MpjySawYPrn9rKl5-ob0 +z2{EIyA7bBJGj@a@k6TER9)w%ORTA^W$4;*4xzm;Ei8uvZs!EFgEh75IV2P912InHCrW^KdOXiaWJ1{l79EXM_w +zQu09Y0?lc{F9vGFrBt#BT2Kqn=_EKRnk9fHG!Q+r+Lgq#p_QPW5KA=e-6-@c+7~{dU_NMZXd~zbBy!v= +z`H*xi`eFfogWT^Eu-C7CWh)H}MmhReaz%;#M+@G4xV3Pdam%HbJIR(`M_DUZjR+*J +zYZEc5jZJ&@!dZY)vp}_F#xp>m!i~g39h%oXr*3GGwY7a1)2IyMTx9;}o=)?YLPpLL +zj5E8ae;jE>zL}bG+9zpvj2SIul?QpE#<@Mz#J!|uB$8RNPJ|0xD +zB{S?N33-MC3J?W8Mkkp;+7lDoAcBIncP>KgVL+2>fQ)C4>%kQajG@oPTqA0?a)IK- +zqNgx$*$K}AgRCly$!#KklLMFxl00UKjm2v%e6q9L*@{V*R9KV)64x}Wvn^HLsN%=g +zqi2(z3iwScNUWUo9?wK4 +z&z)rDhO853kg7_Xfo=n3%Z8)UIwNL7jQ{AR&Q)XV39TVFAU}O}f*OnWN!otI-eDonpd*Gq#RfT$F~?aYNJ5c~K3uB|Pi|_E;hTQ7NW{0QgG{ +z#2(ZwmxPeo$qx6{sD33tgt5Jvp}YX3wqeukLojkm;5Z*6AhB>axLSf&e!}L}ZqByozhR1$CM? +z5PK8ngC4T+w`s1U#$YSR$xyJBr;*|eU|Y!U6P-2DeTA`l$YBr{jcC*}>gJHsGo$_s +ztvm^>aC_S$Tv9QW23ZN@G3cQWlWapnr9QGsjdrEzjjc`5GUVKHfeXDRSinrDiCOjZ +z{79u_T8vuRijWaD0zm490^w*!awnLyag6>LBFvk_4?E}Y7W}Kfsa1blu3~3uP|59! +zH{q3@e;a^T+hU^sq1=4rkh#ZdkS50@T;-YnXuTFUhZ|Ao<|!kFF_967*)*~Ku=k3yYBqg+yXm+#hf}0gH +z4Vv|VtPlaBy-|;8-M8S&>)*!nNiurbdCSo>zG-U7b*?vz5?VHYfJ{Zc1B{fzvyiVD +zGcbk0^4zn?s867t>qM=gy|l?w;{r1yf0fITJZ(YGl!Sk-(?istYH|{7InIV_5LXKa +z3Z=E)ncf{po4jfp;+Q&ums=}l|8$n(aJlqzC2_LPjw0O{^aOlr9fl=CNrdF&9Bxji +z1G)#XlC#za(O*g@9;|wd*ZJ+Y>tJ$pq%#G?vc>$x;*zEE%`2a&gsJ)-P|NpeXso8V +z&k=PSv+X(p*kB +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

    K;y4yqD|-?I+>;zNr_t|w5!5eM=_T5 +z5R_I<3;KxsXF5-8&g}#fd+njU1azboO +z)DA0!aeQneJyK#gA~lO3btJn?nXxPFt|Y)A`+z7NK3v4&w|~6%@!e+O0bpOYgj!Qu +zMG%R&M2&>wcnllj0tK&)V2>)smZ}UxkSJ6Y=KwzG0TQs(ZoSlR`;4mRqu=CZ_69H! +zBWildQy4(^jfE$Gd}Kld+rl=fyf{s&M3!=!5{zM-YG#s_bU)Mly;{(r|NK<061^}9 +zNmid%YdbAg<&k5XxA)wtK4tSqN0bioB*Ls((vSIJgj=6s1a5OC;DnoTTvDfsQ-T2N +zB(ldDgA7)*LzGi-P||{dlgjT*{%ow5;I-7x)b;vP$!Bw7oRtC!(A?T(?QLj++c1*% +zw;(npFZyW*-6AV(#DE@!zc}Yh4=0dN1a-(DXGM*r)=1Y|HQ60LVi{wX1m$nQC`Dsd +zZ$BEq`KTCGgpeA{G;!X3vo=M)HWGOh8nvh+h&z9Qe=g*qL6I6$e2)|3mljUu{gnIz +z@q20dJKTX89JFA}U;Vhzk9yGul@`=WGC7h?^fNxpmQ7`)T=I?I(@QW8n1%iwuLSG5 +zBFG(Z)DNgh4_f7c(VA1>fqtRcH!3HnQ60wpx_Z)(U=kD(w?eM+_9BXMLaY~6q7=x` +z9VqjhyR1EIXWl{Y0c11V=!l_Pm`)GG8b?mwTG>#0I6ZqEQ5}ZkRiucH@0FkkG1l-Y +z^_m1-#VL-G^6s*FargsNuinl_Bn3(bb9)_5K9fRYRI}5}DpDEr^!xO9=tq31HK!%2XWfyqK2r=HS5#Yx;^ +ztmJ<;!$tDkYX?NH>DXujOYA<&m0%4@mkoS}M*3v~hUEvkkd)e!1`#C~00lipLoHq5 +zQlxZje=lezRh3mamMQNG3@8cd2y=T;nnTP|$6<=&WIR>MiWT=Q5&N~6M+U6In*uHf +zo@e9WlaSWiCx|ohV#Ni7zx(S`Bl(RDJ@OaI4vQq#DjsU!=B{`aG`X#7+5#!6yf%AY +zDIyb*xADTNM6@eWgRBVjf2~Ym$FoL8()Mp-M8JT+Dp>8OkV-=MIf0OYV-|WTrfCiX +zqQ4-{BUY%Tu=xqoA9{3XNuqUi$zYZA*;0(MOT-7h;i80Lf8tP~BfPTHw7Qkscw0C% +z$`%1n>(PPdd%GP|#|9A^Hjt3kaAeA{7e)XPTpN}i?J4oq*BmLYr`T_=N>TMHS25X^ +zQi33rPHj*pvkgk=Ua;ufF0<~bp^r$!hr8{4t{B5%dK$ADA7&&f%k0%Dqf>vYBNP`B +zfV!Pqh;0{~r|Wz>Qp56vcvE>&ZhZsHJJTrHM#o-^4E7R*GV)5UaPGuS>OIY)k6GV< +zip31taa}*H4F}d)Ir_udWu~0wni0-)<1fl2ZyFar-zD&w&fdEJDEDG(*P!Ay!+j66 +zZ@Qi6k#sCZiVtoPjDVNzj$!TLVmh%vb7~L!?XD1ne0D7px(BdMIV(^B0K&0yXGlB* +zt_>L@oH2mm^QzRq*f#(Qub859J_vAxpswf#{ELptb{pr*k%j*>RI-gWh=Uw3%>?YO +z!T$*So5W`ib=da2$&O1JP{Y5b;@q+Tc2%T!E`6^3NavoSTFGH$Fa>{%>t3`HP +zxWp?=nB1spvC2MWU$Hz61O +znm7-GmT>i_enFui&EZJWH1<}LL)(xPAjyZlyN)!*K(o^I1l|&$^r8LX2vzWg^6^h? +zf)lIAOzTt0cz=!#7VzbeW5wL#2XEN8jJrT4lw`D|GNRV52zrwnns`d~;{F +zH}=edw3eyA2`wF+c%X(xxKE +zk_Y@qp>AiobBG3G_VFx +zt~W11iYc#d9NfaOQo+>C=lq9dpELMLB5`p4fzEYQX}eVw6B6mH$-~L<-%LdKL0JcC$zeE0)qFw`%qc%G~(v@B_%ND3xiuvyw +z5POGX3KH+0J`C+~5&GB6i-e*(12hmx>?I5jdVXN*61&=_Zj*eMWEy9chUKcnE+l`+lVbi9WAVgku$bdEV%TZ?y$)-&#m!M`anc!+dz>TDeeI!pldjW6vV+HHA74o8jJnS1Ha3e>s|Z^W@$XOV{l1o%v8zc5uQr> +zX3vB4pdN!-Oc6g2a89u(Gv-j&EblB1cTTg~{U;3M&H1}#%sdrxvGOHxnh%QkK|Oj; +z2k|P8mTt-z^8mL|av(e7%I}a^;=n0cJ{_Z^==$8E8zPbjR2RgN180Di9r6wNt#fFj +zNDf9H1Ir~!W@bsr%@TSj8_`bN0i;>ySfp6#o%955 +zUjcwMK`|R`kPAe_6J3^pb57HSiyAq!t2ai{JbT3NlOl5*GDJm8&)n;IkO +zC9rcHb!b5Meh_2p*9rc-ZOj5MV%fWrg%MPwqa3I(Wd%-3<4`}MP1K%tDnY6WOkdfi +z!)p03`#PV2`)*Nb9tZU?7NlIC0*B$SOF<3l(2FUGv9P$9FDqT?_qrS22mV7(lcjU +zRI9H}92uH6dJCP7B(KCMF|4Mw%bJnyb_B?1h~C7POeJlAH4Fjq(0+~=G-GwOR?!_& +zVm`&eK^izdNY^D0-HJ~qDFb*dzR0>4dP~YDAW$- +zPL+sx?%pM&xnN=-sBI}FZ6%kJtvc_aLg&Fqcy^Ga%_+BU`zRX+f#U>TRBxn50D9jP +zjeDE7aqhe>rnNtmh1_mP^cL$rg}7qys9d)>FZ~>DAb`;MY8{?k$D<9^S6BmE=yT_{ +zK)avibob;zAr=fU;EwTS>&}H`0feHBlZVoi83q*Z9!asTi#-4|mLCxa*CnAeS)0P! +zmFFM)Ytu!(!9d*-e8O;1PBah5(b|?oDe;p;(<#O8S(iT6GreWQ_6jtQoKY{}w|bHh +zCJhZXrM{k8Iyt-bAn%7#h5?nUwE;BQb+zaAbeu#PUBLD&2)KDL=0vm!{<)q4a#`%s +zsfP`5sYFf^6&C`7_Ll{tK~XiR!@UR3REjaQLzq`p!$SnzMFC>F)pL#JoCPNyxQ~}S +z0{2k +zYh>Olg=x9d!t8g^&Zj05r<*IluHnC +z-v^*1k*KCbH;TtmdrHP|IAIAkq%FN-7%88*_{1P<(+pCsvRu +zBePG8WhlGIW~@@esmNkRXa;Ak(#S3c?bppb8WOo;E>5n!wvwyn(&5vGhm?ya&#a33*Vfgv@(>U{+W10h&1n +zEsurOFtb2%9_ZOi(ImP49y~LBAQf_rgIy+&0X4Ibc;zx$OOsQPZV`A}t6cgAh +z5tx1UBwD0D}kP>PAs?H~Tv{>D* +zd{(-U?9t5IAx`g#w#3qVtW172Rlw!cQZ@R~^|dpm5?ptxe0hAepiD4tZ{vrYkayXy +zhRp`<)5Cj^kDN6jGf4zsl+Xp-XZrUQiBU`GzG=^*ina%m!h${(v@<0}&(M@D-0!Cf +zHdy!{_CMW-+WTLQ$%}lto1C>2X-mH^9*{7Q!;YBRZBT%eE(;ars^PGn)^uLHED%nw +zd?3JEjR=d_Q+rN%bobGNb6LOY^U)_6+f>W1)R}`m6yR=MI7ApTcDi@U`diev#*C=g +zrGD3nMbQ^4^9P +z%B4j}LfIwEk{&!l->0Yp^+ZGWt6S3AvDK38ekI0lY?PlF1D=F6$}={}$!6wc3Tevto#A +z%7Wb`kV89&AW+$q@WFY~ydzkbM2|eXxk4sB+W@&MDJhUjzQQO2M}&JxTJQcj7Ivs` +z;Z1HJLDeK5jvp0J{|VzQPjd^8A@~$TiBTQTd%Px92DDEl{K=ZqkL~@>7%|1KqDd@! +z#d%uO119ca`}X^4)pwyiM4eiRGY=(I=9xQ1)+`835 +zrY(^o>P96-Gzh$sK`WN#Jsuxwv}L7yTyB_wGzMdHK!o4)*jtI+0gT+7EGjj$cx9C* +zt-A69LgHyU(D3@4!SiGAx*c1u*chP6F}IMk0SO1M*phfdJxV*36#&rv%}SuLzM_#I +za!zN(Csc~eQA+~L-i&Ot?NBi!{Pl3E!~PE!5HWj;7S-B8|JIqaI&yu@9VXuw4;93W +zxAAUEca?BAb3nnS&i!=WdRfq<>Vm%4y8Ws6yK3gyEULoo8_N{5SX9_Q~coU1oA +zKbCp64aI#N>T~x{Q^$A|rKUZLnc!0&T(i$re)wo0_v!reKnG!tu~ZdwtCAD2wE(g) +zHz`nIX2r5XWf8q_#itU<$Wqn&#&M*?<1WYLA!~2mt>lo?CY(HeaElwU^mZGfm8Ynk +z)8n1l2*Ph;#A|RD&(`%A@)*7BHtKS@N~wGys!Z{OG?7JJlG(CNRHTo!1RrI^4cek8 +zp3jNgbO}b?#!^#iAU9#{A#ges1+E+p%7x0AwQEg*QnfW2)u@1PorX-2n2DQFdcl5Y +zAI+&C>Z9wzFzWzR9g~u2a{!5Dc5v%&t}Y|Ddu9WIWQn>yQAgn|ELU#sujGE;e?P?% +zvN)1wpx?g^r_pwb(=Lz`6w+Laj*Xmyjw9L_hu$PnnV=ZMZGX)?e=R7ru{5bL6et2H +z7FlUSZKV;hgB4G$_&yw~zB+SH^e$h(?h7=8Z0*HL?W}63aFhp7rA1euRWZ{bi4Tbb +z4B9UV?r&|$6I)YBp#~~{-y|^V_6myHW&pqaTIv6NQzRRtsDj1sI28bV`QWp{{x$qZ +z+9VeeGefg034YaP0bX}Xk3&J;U(i!nR(V8Q<1irJ@m-E}oyc-2^F%KG=%Y=j?yaYZ +z9J}boa9+hC6pnyq8_e8I%;Ul^f4T0aXS6Sr(pV=z9j86FjIo`s6t^roN$5Mz$IrnP +zvqO%OK%fI9)mI56c^ci0IhySaMhHI>G`(QZ)9x44qNA34iv&w`d?+W7l|sakOSBIy +zfE6=0wh{3-cEA?$)G1hH;?B~Y$Mh>8&yx7{n`dKUV5bwz`{K}i^m_=Wtc%$^`Knv& +z*?*u3)mHUS&}HAB;Eu)xCo=2@*t2SoJxsvt%la_>laIMT!)49oNo3QxU9tl$4n~wu +z&j}C~ASl$=sBM;jcMBiRI3ddbhp{-TCV)V(knDKh=cBpKU6!HvyX>spu)wAJao`yg +z9}|@>xTV!-Gn~N0Xd5bUZ-Dh92^Ma|t1kWU8LJKOv%xjxfH|ZnW}){>7ORAH5LX%J +z%{k>k-L~jcG^Z%05gfKB!8(4iSxdK73#~GkqX%Q~KTTiF$FSnqoRb2UCpjlQ}DE-6rjC +zNv>u~AfR&$g9B}X(M;5RRR)&?ZPKFU@0wAlELV%kPIL(+d15X%cO-tX%)jg4C>B)7 +z8y2E1`BhPgi`GMJMkZ;A8b=z^cg0V9vBmH6O$%QVr5Xcs*x4eZcAwtz9G0>j>6VaHrMPD@f0BWpR}fZLf<^f-w17tlij +zmSWEY6`Ma3Gb@KFQF8T)hz<#){FuOb9~sJ76l;2<8R7 +z_CwE28hrB^1G>a@p3}fQSfWNrs&RN02T287&(Jrc3sXNPl3DbYwjkRd0BR=AbDQQp +z4eS#0ksCT1$of8$pfgRq$fc-ev4*s+7q0Yi34%GDjRBbo**P(q&V{?q0HYVO+9tw& +zS)ZyI*MkfSDm5|n +z1U~0FG@q4hie-51O>y&rzgcy$pxfeAryi-HV@}PJK`3E7&`x#`A@!c>Q%m#BOVHwI +z`9I8*k98Z0e!FZmPI=kHq+HPF8K@+j4Y?ImD#9*}=zl%yvrwPvCj}lBdho9Wp`@_R +zdOKX9Q!+UfH7$%!|ajuABq8O)XWA;6p!siyd4)#>L-Z_F0%(@u-|glH+Gzy7Vam0Z{EOl +z*^?#+gJ_lDP!=8i_Q^P-SuxOsyh7)ElR(9@;rHUKjlsm00GMsl=?|kIP^#kkT^vVU@YaT(XoM;Mv27^y>he!sH4QD%e +zgKTc%-sV_h{<3x~Srr;f95+2%i3m;iCa8EJOO0zuJnjZKOjK{WkSOGir$TKqQV0Fm +ztPU)ue#H*!rnwqbeNxRYY_QdmY% +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 +zLO$0S6=Q5^v!nZ3bn?|0W_8|e>KDuqT2VT+ +zZ}r6=b)01NcaJ&45E#%HBth4u7f*yds>}~TlrYeD6k&TK`N_GJBl4bEhBQ+&THvc0 +zJ;Z{<_EmLw50ylT<)CHRo^Q}~Vhz>0|1H&J&a%zI0v*B$AmFlA1pD-%2o@;<2R0}WD73vH#Pk_K4KKmWbRu$>1+_EVfS`^@70_0Vq?f90=-6>Gca|f8 +zw-`(?5ooKZih||+u>%kwp>(X0x&N4|igRM}k@V5SECCRQf2ZoG8+8}^r#PMNm?mq0 +z#!FxY-$pdx4M>Tw#UTmQ)2YfXkf){g%-M&2nx!++6CNA`b09$^JBCEs7XOiuR6Z|r +zb760zj4*?=Vjav($|A|-tJZ*C9YEWFeTHP{B~n~~cRWGnSAp0vcR#&LF_9i5BL)d( +zPBURJ>Q~Z^Tyh6~oMnw*a*}2?F*6dewEe}~>2P^+o>uZNBm!lF(=1IvYu3)P>h01= +zK!@2_I)CuIi($WIP&DYh4g^;6^-x?|2Ny#I%$?)>1{S`}#J({M7-HX8PK&UauQQS3 +z!jBcay;Q8dOlye~wM=qhA9gDLqF9Z%N@|`s+M{wfk@dw+5m8OS6zC+K6La32CZwWq +z8Yrt>o|2l^%>OqHQCSmXWM&W7Y|9L2BDf;l2$9^~b&g2We{APCk0ph*&1IwQxDg#- +zpt{r;E_-OMU|dI5k|+*|3yf~%VWv6Q}i;!++M=vmBxpy2S3K+;I{p_BsdQ-=+SLqMn7ac+F- +znJ5>}IF?*dh3Vf)BSW+ha?ww~Yt6S?W7#>oBsM?*(ib)}Jg%3su=uQ86aP!r7^zM@m%#Cs&A@ +zwKndSUTTv|V#U>mIX{X$t>>{nr`gHuKq=``YZync5i%HVVnCEFK)xYJDC8JGNizBg +zI<*JnD++`SHy%LAHBihpW~U?0AR&s0*njIT*>_ET9bvXgwyb +zzbfxIRIFjDAh{0YvOZHZYvY<`WC|7Z+G2TBGGtFl@GYKh;bWQQW>?J5H~>MCIuwjw +zOI_HZk~I2U+(b^J(`S8f$~BT1=C~z7b&%nJ+i$8~YZ&VsL2&}4c#w=|O4AnMmcqXA +ztb^t=y(>bQQ&GJ+*?M9Ptw5@&J3zkTpV3jtRiRk`KHnSSxQ-Y8x`FQOWKEw&_9-s15R4&lB0& +zWH~+ORaXMd&#k1W+hi*-T`QEGFxQ@0;hl9OHw$!7lk5K%dzCZUTYh0pi)DvN!#Pn%R +z71v&X+Q-dD*MCN)GyLx_ByMfr_zYG4aE*!303xM1CNRu%utH9U(T>2$5vOJ*8#=-? +zXBdt5U;n0m8Rr^>CUXYU(RpEx0wvTBTHBYx1fF=RMJHz9YF +zbKt#J{eA!tV|xu=VeODC;kmsn@d+#l!5DOEtqCUFF8<`oeHxDcq?Krlhe9^Rhs2J^qGxx +zPLmv8CO}=t@e}(gZBX&J2tqw)M(!@p!Pp7ltx7(Rfe&Z)|Of6_e^A^91nXAqs3%fn;I&%+VW+e=KF2AYWsHG1|ZnBm?&|w3Y$TP74Z>aMez}wIz&w( +z30J)zH5l#o#e3-DT0X|pC@L(=QDQo?L6V)M=wO?}jo@?hX3O@YwdE9>glhRtjca`` +z=8?6t;L>v-#w{tP>#(s=tI*+stv8vE=K747c0{%!hS~_7EuoH=&$$2;qH$~C!W9X4 +zY+bt-Qw!Iut%FMt%L@YafixA&%#+SYyh*ff-Sxf&6<_~0o(hMMKu%)f&7mgX!IxdN +z98Kf<=z4%LMP3SO%i$Ryxf@4Yu7c{XmfY)l!)#*0&&roc=Cz>fNkYG*q=RU9?pc0x +zhws`oV}`ecdae_12!Vwv$VtrRI2*)4yLyu+&js}6a%;uJpEg4s;+UF!;;P|HA;e}+ +z9%;j%oBmTvJ<2zn@VLqGN^T=Z=x}o($Ln(G=So6uAB$~o*TKZ-sQbAGv8%I|6VY@^ +z#~XZpjNB~-ogmBIvZrVUWGAi*6o#nn>ca=`d!Odca)9Qx+zF0yb+10V*|dx$Y4{?J +zX~{i593Sz|sGXGUdY`}l;Noz2zb&#~2HMozAb&$Kq2#S7$?M25qmQ969mL@Lda}XA +zNcmK#$4To;-k^o)cLVdXRT{5rMKy-`ib5|gj^pog9&b@i3#XI-aof?2bl6f#*R%xK +zOd*j=QIUW%Yif%MjD-Zp7vFwY=s9q#9;3F$1{A19GO}T=RtdP0k@Q$(!!=gGfMUWF +zsm{dNKZNEZ;2OwL(L2f_-$l?>#$sqdZemtwA^^9k`wQX&(jDm0Kfp+I&Er}+ss!~s +zOg0jVW9ijhGQAh`p +zCn>*?OFF*y?c@A>?svQg&ymF@#}(P`HJZ;3EVOB^Vv$Hvo({Y%6R2xJO@JJhMO^?k +zpPv)<`g^S8j(p~zU%T~0NM3}JoOx;c1b`>K6Jg_nYiXI}!k4unX(EUps4ryItk<49 +z1G}sioc;)Z|C}IuK4ZD5Bh(FVkE{yJ+l^@bC#zG6s1q9X}A$*eWj=CGq;<5?+@`g+qWt` +z0fSjChW65db&jjc&GcZ9!ju*kISw|(zJudk!CG&y2~W10C)hN=U)*isnR$=g&VnqY +zgp(g_Eb$}oaI;DW#rtf>=)B6ArXiqc6a=tf;vfyEPDD@c6%bfYOrk0$d +zx8C##lre#ztV+5IT*hNzCqh0+axnUa +z&KrGu4~F4ZXIS5Ojxg5O$;m6^N==%P+Z}1I1-cY?<`@GpkHv`n)GF#qzyFF^(=gpq +z)u;m#n@1r!B|y?92Lz)Bh{FBV3;Bq)fW(3yQRN;;8;E}<0fG1LNi^y@Sy}05tbhEJBWZ&c`FRso-f{gIi!aEmv}5hd|6bT|Z22+_m|T&K9Bli6mdH +z!y?S*yM)P~Za;g#FszR!@8IC`fB5TydX?A)IgWpw$p7}f{rCUjpUgn3I2h~YxCwUf +zU#M-Yc@8x?@R%#R`lcdR)CWn~$a1MIhoLsvBb=Eu4DR&%uRs2Q+aTUR5ssNyB7nCb +zYD37OIb=vfPVB=FgBZ3w>5MR+&y&qs6{iGz*+#=8Uz-GYa<{RlKvAF%p`B4!$B&(C +zD6R{_Qe0y##7jSY0AAQJ$X%}9tWT^AsqA$9RwKyMJyt7isco))c?kwAI$IFZTFBYR +zU7+4>%Y%W|tv(^l{OVru!@R9Umg9nh02uKX@52I|_!e#UL>}yWc-v_7*epXi*ZU!I +z)|G0W?+o|wJsmW$pu|MGLrf+`ut$xa>G(svkCfh%7S2j5lf&) +zRuOt`Qvr2MgT?YtI>~|y9t;XN*y>kStkik~K}~bxqw}-l^vAh@QEJF!pfch5UEt12 +z>I!I&$UW*pUn^QXa!A^R$X>zb&6T{h;!db8Z0Q=iewUD$9KB3J>xKMl^&$@cj@cfJ +zfO#xLLdD#GRMvlSZ(eDWNi>nM9wD>R6~{q82>mM~ +z`-#W1xX*q@yc2Z_0>GZd&ri}`OS##%-&t-|>rC`ibrsh$6h{5C%5^D?8xlWzUg|<} +zix>R(ZZy}bXKLC+y`OD8KB*9=_a@;6yMOE(THnsOK<|lH$~1$-lsSDfRiria(s2Dw +z8OA7Z=tF%4Ti9XE!@5MF>vDOK<&|aB*a@bAaIXYp9bY<NSkaF!8-=6lJMpq9aY;n}?jh-b +zme?ZUTVjbII#p~(0U7Z}k2dkwUz50MUf$>6swxlNTvWW3Uiq1(km1$_08M=W$s!MqwDbIdOeQpaI&VhA^v6MdD@!IJ8#Uc9Q0t6OEj~TWf%2w2pS}COR +zL5GUkM!A=?tX3|p8aK*NU;MgsY(~Xk1|Y06sy#9mzi1t#;OAv4M4B4O%}T +ztQeyAoi>kCe;Hct}jWONPj#-km*!Z7T=QT2Q0U +zv=9g|9;P+HD3QVSQ|^Z;MuSuSY4(EZ>+==Vsa*oqacUm7W?|F3pksiTqiMW40G{ge +z9W@=b=70O0JQ#8trb(9~uEwHZ!cDbxJWW)8mb +zw2hI=QV5hj3aEopYc%fEwsB)I`ySKRg|0(wxE`WS&J_k_Z*JT)8E|Awhk)1GaRg=W +zcK2L5@h%pG&$7c85qXd9H5BngR~4~~{>N%gz_FoH|T=2n#RS~KS)tFWh#m=*Os +zh73Ue(;4>Ah`yrRHlgk4Yy)B>C2o<>t_o`%#aPxuPzpU1Mfwww|4ipeX#WZB_u4~y +z3Fyev?qwW_20C+bzeiLyH7zhh8{6$monE4J7@L6VsvTA;@}%LBGci&^G>URd5L1#} +zrfk-gc3BeSkqtr=8y~Ks@!LP%`}l5?`~a*kTSC66ts)jhT%xISkH@efE@0#-`)oa{ +zVnV9QUT6d +zzES!?jp{J&*VU7Tgs-6XxD|GlR~b>1lXAUiAEiKs?m%hk+-2=yJM#{D4`9UEOq4!s +zw=kU^h?&KaU$(NL_HcUkI-+(A$EzR|9r7!h%2A9pd`i9cNq~Hi!1i5MTz0_l2k37d +z3xG%pWE1B0I-Gnag+|=wtZS$ul|fIxPmjl+)~w4$DiYL(1Q3}7)wjnB6MU-fNixmn +z>2M#)OlN|9ZNq6qn}&Tj5l}K-S?J@uR62k;iCc`7{O@M4OP+gem*_Pe8%FML$4#N)mtvcVSf$$(=7dq^%qo`>GxlaSWiCx|ohVg&^&_t&RJ +z#vB{Hjhp_NptqHQiL!fZ{veC +znZQ?~23e845~kPd*&-w9)5jR8Jh_6|B$fp#0Qd={3LLl4M=_Cg7!dseQ6sTIErlIX +znEsGZ?kCaL%{ARrnrO>0$}SNfc#^9UhJB0Eiy0%9ou<{TGP$@eoEl{xDp-#Th|;(F +zFy*CRuiPYspqpbg?62TU~qH*1hV;sYn~*+Uz) +zy&SURn#b$#UsH8&Spd5!XuXs^*EG_(=crb4SXqo7L&KcDAJ1ly6Bn+r$+OJ5`IDBh +z8>48&56c$<@!tN4BWLr+nzjYC{A8yb^`|jBEH;+NXe*WECnSHNRWBCFg530Kk2jrX +z{C#B~b8y-Ej1o;T8_2wtpnOT5NB$=uJ7ZtD3Mk;{9XL=Jwzvto==a2V7_@|||4IuA +z1>OZk(ljQQHjJ&Zlw=?F>AX*vCoMAH6S!6Y{f7dG1zI!MN4fn|pYg*gvD05GMu`#~ +zEa1E$pNhH1FPz9&ku{N#6x>0@nP_;8?h~)C(#NS-kdxv2vfgGznzVuYpe(&;(^mE*)J9wc%}yN2XV9`GZDx}W*Yp^C6# +zd|vUhhLf{eUq4@|i?eyGjgch^Z`;$K#lI;MWnT#ZXmW4HWbb70rxNxmj@at8JRP88 +z1OGyR-~!UEM^4a*x|Kz|9nKFKfTcwF_k3neaXEa$fwUlvqhp9Q{)pP&-};Ji2nN~; +z7jFcu+xkZqj2LG^AD))?-6g}Az@+FBb1o=gj>}Y>0VUP|>Va}S`VdVtebkb6M*2vhL{M66f9unN0t1q? +z@+h}b$m?ZGjqS$L6q};Z;=u>OyLv{BDPGtv@=!?P52NkaGWqhqmj|GBkcLa2Aj@4)mOjw#5DfVvsl<04A1n->X1 +zcLr#nzu4bEdbj-oIx(@UeHoO$Nz|LpCXewEFV&+E?o!TYxI*JN>~qc`DW%~Oy=%B4 +z2l^Y3%;MU`G-@R1$=kYSrLUeb4})wx4q*JI3Sk&qS@XFdo +z?5Q+qVMUCb(jCeJ+gMxg0)L%E;A=s}mWbkr%R%b9LNRBEKS2b6$r;TQ@h +zm^h?vh#5m;vA=oXPq}l+nIvJB#$!7MSF6T+mOLJzth8^oA7mNz7}R2l_=SLTidC7h +zgt}&VXK}c*7c$!Pf`PPjQ;rFyq)K&XkPnH|d{Ds;BHeqwh&S0e6549-z%r|Pc62z`R{MBtbtd0}E +zdEPR(4D?hC-*a!zuemMAav6MBJ%EU!iF?y?%+H665{H%NUVUA6_Q`2h*@5`GrC7zvCl9*!yAtd(lcjVRI6{=F(5rgtaGNWZ +zFG5Z``KsR%Ij&a})90ef`0StcgfM!by;+UVbiEGea$GK3G5WqF=2pAynsF@_M- +zw$zfklFP|ao%hh7^I$YVJILAQoZI&)%E3Y4IDsD38|e{n-w#Ff-sf$cFJ2eZ+8@e7 +zZZ{-)i*3pwt{6ND=WWh#KZiRQDRe+v33k@;=tJ`z*1#6}eDPPH-7gxyd-kA^7X}z` +z$5gd-=fbi8Lea;m@ZhOoK=JOG6$LLb0YKyQVI)P!DsZwkmA9+!KZxF@t9*hD_DS#w +z!$n2YGH^$0TN9?l7dfeOil11QKGw5Hn~=0oK|8n(VsTbALKcqK+qBs%13BhPYIgCy9zHX+QhU +zg7KqB9_t}I5-75AjG-OEvZ@*$BH*qH5Zk?-TQuh^IPt)JycT3Jd%SzP=d6XaUm0e} +zLWMXJ@$zrQ4b1eg_b_Wta314$sscxyZ5J_JiB=>mwnRW@_q~g6y$0I}9Hu;U*pc7) +z>GZZrqUIAZ)ti#=K}Vj7@3Ts0o66qoU|l +zV7O)%Ij#uM6=tn@tA5sJL=#6GhDmHjX5EJmg1;eP02b}$PJIuO&eJ)ug47rTekNN(*+mXxlM_xw +z7BfOKIBSz9dpY61Zay^K)CCtjdut_E&834uoCsHvv%NcG%Y*S;*p61BCj4`78-*KI +z_$5)LjWae%13(nRqRkTn>}Z~``4uUPvn@}Kg%^pvYhlwE+fe0Zw?0ezxAYL2hyq?ag +z$K|3pI|l#9R$qD)S8C-GofU?=&P_-i4#$*YAgaQ#t(z6jVAGRnYt{?TnO8mQ*0d0B +zirZiC3O3y~`Z$wUd@C#1!fqMDO`k_e&XoNHJth|aM=^m(xxDOeKmYhHV?3U(1O^^2 +ze-ICZ>c!+DB&7jvvyXOUuNfr$t$jB?hnz_3M_qjWM~l^Ire^f3>uYC(DtPW(`SSQ`L78CQKE^M(A)j(y4Vw+zr-%2TFF9L6W?WVR +z7-$T0+4ol@Mm;43r@bgN+8M}V1-dI}XG)A-peb8;JWf@8u<$?Z|9TL$_rDyI7y0xw +zIfEsBw)MQL#&D*NR2e7poL~Gk~;3emqF9 +zQRs9cjlp{--UDtb!S(a?4L}O+ejSZ%wXE`|q#zb6kMd{{VpsMEv!n;lkW!91P){^; +zzq%!@9a}9_-2-E0+qO08*tVTiY}>YN+fK!{ZQFJQ6&n@Xs@Tc*uC@2Q=bS$=$LM3W +zr?<6jjs59y6M1+UIEYv_uvd&S$`f7(j*9kA?WQ*_{8 +zczQ^i47+s7-?I7*E@E;_FVB?iwX5`p!RR8qDs>^fz+5fCP@^ewRzI2$g5AJ2m|bir +ztCWdR^X&pQQ^7DL$#;xW0`CW +zPpY~)Ml;|~*z_$?*!T$|KLU88u*N78$~mwh=WL$8h>X{%X$mfaAD0Rqy3zNzLRZn0 +z#yrm;i=8J~{r&J}w#!W&o~2@fxR=I8jGacN|0AcgrHH!{14PY}fS&aC%hNR#>P%bN +ziW(BVbKyz7aDOdo(K;>0YUd+6Hk49s-NQl3*55+P*j9|*R|P!KkmMZBEemjg#kw6r +zf&Q=X-ea?E=`R~$7DgwhY9BD!a7`zps!#jH??siraN=mt_$}-PDZa-v~{nb +z>8ex*y(v~U1D25iuPPGD_U~{y0HN8MdKFEUBQ0r%PtW6o0BM7{r>4|u(`2nvkiN29xbM1yV9Bh%YWO=lG#g;dGf_L%gpxo2~;R7PAn608SYQ> +zIUGfN^nflYZlGmuW!0HmV6wEeLAouyesTS0S_rUl6!L%~gb5wZx}MFQHK6a83pAOr +zeaXzguMhql@eL~ZZee-FAeUNhc4tI-y!lbi2a3oEuwHC}cO7D!%faW^((%wj!BD}* +zu?azIn%D?@JYVaP=RM8Ga#%Jo7_G~{e}tfJPDE>#W~#!@CA@&tbX>u;)mY$@UJ}#? +z3Oqc($N$lfi2GV%)*oAbpAJBd$uP+vkrL_I0NkVx5{pgWM +zu@*b|kA4Idhx(?l^d2lI?`8NSD?#_F4xM%mtu$W{krY9iZb>K%Mq_S&No33e(2o;K +zR2lzUKbB56Gch$RLc{nwS@OT}g{Z8I*yi~z@liYxS_-$SeIlMV&pbo_Klbr{>BlRjlZpXt +zQU?>(8yv$@H0&(eA~tu1bx6Lgj+hw-O@xdyn+^zYuNfAeC4P)~5ka+bzo}(12Hp2U +zjPT=tx2$`S4COegOXsWbDAwc$114t_xSBJ1R@RnVR_EsF?)E;#9(s+Q%@5 +z&Ii{{>tAvuYsT>QW-;+20lyb>{T(9?H|KlJ1o!E(LM#R$aQlGsYz +zq@2mqCy}PkF5$*hnQSBHS;GT=t*n?)#TYq`oY7>­w_DLtn>Orrc`;|?rJ7b_hx +z!gRHdmxa|M=rHotq6l4%^prUGLKgo7dBV0s4Acfsw_APqOh-u6-9?b&Tr)}kHj +z^<1VRW^hpos#-sag&%A5A5?OXg4<4mr$j(TC^v(?g +zq)`%dgi47oQ9Pj64%hNhAJnqYJTstA`Y=OII~%NP+K14&$&+0iT&Q0AvQf0;q5mO} +zC%2jU;XEZ@w(&M2jyAum6Q@cY+J=M#I5~FB#*)j*;LF` +z<;w68{}qsR{}GU@{|HFdYrv7`8@SPAA%p@kPrX@4%l&qi%%s?CTmb78JoZKr7-cbH +zv#K|lv;9qe%-*Qk%RAE>(w(5t-3a#Cov2Yogks;`yid~nn&L*U;iuc*KtMmKs5F!| +z-#iLk_ScT_*_0!K3`ond(cdEiYW6D+PlA?kC7vx?*aG^X%!3-W;4Bj?nc=YYmNpZ4 +zJ0L7`Uk+2zj0@dZ1&RA~2!qX#>6S)bJuAv}rCml$`v)UPpyC_||1Ceu3GEesGXawC +z%TsPTOR+M;p)e<|+vxGU13UOSWK4_&`Fi$~(dp!rt_YqmRauzKkDHX=IXmJj+aNRy +zjU?+__RXOqa8vYWj|)mvXo{fXGPHj&lD+H=JF`7+d}&3*Fj5Ufjq`}TK`6(QhMTla +zTB1pSFDgT0F4q=d?mWiK(QHhTmDmspNz|wBOWqHDjZYi#mvNYbKEu;z2bxUv&q$%W +zXeFJ`ElmFopw0Z)Lz>eqf19Y{)sIroZqpC}+GN1^sC}Md`oY1*A3hD4-DF9Mydu_T +zCn`YBxP(^U@^g4P>-sC)FyeDh=pul*8(sH&pqmKE#tJ{=e1d8h(G3`*B*zXK*FY;@ +z_0qxw*d<>c|K<^`n7mH4Pty%>sY52L>a&+s+TD~F9wft=ol5od969pr?b%5W-WT=< +zciv2kw!_Nfzb>)pRmVV9g^~0YAFn^9txnS_!`D0(vz=Whnu2Zo>+<;BOp^0v&-G9? +z&V91fEUpsRgLQ=F;Y|5PqIEn3!tZ=6&NZPi_nU4zWvUqu9aJn?rnVdb75$X2qiP>h +zyaMpxiU~B~NQc8geZ99%(8_;Ynp`SgJ|O(9l!TYeI;fS5?@Z>*qacW6gL7cm3drjzt*7pS+p;Vbm~$ggIA^>{7oxiCuCRGj +zlZ^GOBu- +zB>;#}R-UYvb~)o8{77l7df!5DWYHvp@DF}$P~ifvr2;!?5b-S_!Wo;cmn}ZLAdL{@ +z9Yeh^mcQ_0pBN5S;<{m*qvg0o6`oGCgl?vxhaDFp;i?*0vpEAQg&W9fURpT9f@rWC +zV<^-=NZS~{!(aEoM@tI$Ign9E)Aff|9*tcAx&arZfvs?G*}lve*N(_oN0@E#tpu_a +z=vGOj&*@Q_QLBSEtdW$p_F{kMmmR(O2+b@wt0`Q5=U`D%)I&pxzN7E=S>0=(r@(^+RA +zVtsY12EtlQ3JKS66mxEPQ)85aR8FrgnOZbgeW{+;G50VLVm0q{sCDN^|VHk +z2ow4`O3`)mDb#U`u)1U8;;UVHU_0QbzmS@0Epqx +zpi%ypYla^VUomrHrr}}?3V0RRx@-f{b-ze=fPYuHZoR095ky?!StOxy#-l;pR>EJx +zB^J#5Yhni?2$ORa$tQ?-=ofTKQDMd&eWSUjO}~_+u_D@up3UDWh@VxAh*#WcV_O;AaJvR4 +z*Zdf47IfXBXS9+6`DTe~@gblyD{XfgrIT#jDX(J#YxVWs%@d;!8#7&M@Q4KHky2$5 +z5SUZ^ct_HGv>H|T&$x?>QkS{d96GvHB=h+z9%sL3$ntqwfR9`dXmRxVhb=M%J5>e} +zTZ>7>zmD{e4thsvO45qZ@&Al6m6@&BAflzGyH0z%I~S8nii>XK-u#+n(@+$fw(ckY +ziRf)*seOmz*(_ZYeAS`-Rk?t*a!*3ZdX1$<)Ave$s{wvsl8QIMsa18q4Eh7Cdrcu= +zpLVGJov<3&TmdsFE4!4I->lH0 +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 +zLmlIR#4oa44xt_n#w>F;( +zhHEQl)Q~v8(xdEg=_#G +z4r56s)*A~4f^t`UTPnoeRIU>>g5-RN+msmhn#_+_Mk-j%DDs3G#_Z<~AnCT)VskpU +zDqa7?tH3^_bKKJR(xCHuc-xBfnDj;BZ(i@gb!zj&TVo8pY1lW=2&t|a8(_m?egUOH +zC7&+?|HMaO{mGOQXTudO-5ODLYIt!7XO;`wEze5}CU)NG?9;cjt_kR0$8Je?sT6Bgy)AZbcdVZ+X@DHR4{?@t*d>yin#XSmdP%u*z4Uq3Ua`BYB5nG +zw^aTT>Aim^zSDAsy?(4STucS5diZo`LW}O{?PbT(qfO`4fdqDTpttrIi}&6C!S)HY +zlP=R-x{-?~<0;;pjeVkERz#|hhQ^qW1zbD8Tuk+6KY>jlShi?o5YVP>vEu=SjlR|2 +zFEm9Zm6;>$bfhGt%Cyi$mpcIU#0o=Jmn7H%ZG$_~(k`NiBfvTje;JTgmkd6Uj>-B> +ze{4Zc7vKe3v2u>{{koG+^|LH%TI!=X_LJA_qAezP(IU0EB~OkGbs5bwNVJSv9CAq- +zBw^sLpOauH%rThOrTlW8LLle2`%NVh{ppkbM!erj0=HY7;Iq=P*;rebLd5X4Gch## +z5#HFbiKC6VdU~ng{XpN(sA0>Y`~G +z;E9vi5w_k-qa)u?t;gtyP>!2Wv$6$Maq?8s-_PyQRXa$qMnjK-xZ0)dO7U^kF&g(%1Z@w +z35W|DP`;VSX3ZCgjN=E +z9oKR?uN?a+ys`sqj~B%#)-sHV4(* +zPQ1XB5hgQr5;8JQ!0gP7A*_Ee`@%5Df3EYyInUVC6{7LnONF^B;YcQIn$9_7wjJgL +z*MX(m5$6sAgc05~Cp1b0CK@jwNnNzRZo#dNJR-2Ct9aDzg{POS0KoHkFg;@ +zJ!3NTQ-%P<=C2?2f*}&FTiJ?v=lj%ttdFrralzPPW^@xkcsUqRKyQfSJubZ>k@ksy +zw0nbf0uwy_1ynD14Xllb7%%@+lx>#;D;dTQE`Ox84E0vOpv*)J$0DxqMq8G{6c1hh +z(X&s?csMhOiNPG0a&x(58wnnUNJae>uRfPQ+{D@$NEO|zk@QT^C%5FmcJ8Rh(Q2e$L-rUR6T>P6>`cmQI2 +zT$N!Q&pLymuY?hg3Xm6@_z-P(qcxy+;b^a43kAp+gsR68D4 +zbMs&9xU8K@jS`<^i{Y7jBVjLVEL+rQYY>06DZf{p6)X5iXz-tj +z6}u9o0}LS-&n*J1-vo7KLGL-xNs4dn(OAWF=}t)7Vlo67`oEgnZ!rZc)~UZeW&5G7 +zvWFKD?f%@U_g*x*8sZ7rEik+g={pUWqBb-`;L2|J<*izq)2=q&1!(q`@N+lWhXU!)n|+@BO1?_s+57 +zoD(%)Ir>+(WvI1&SvOp_jF#XUt1OGAK|&N>d*6a=TK>Frlz65CJso?w5F6;MPVXWw%L+n}0xd4HG5+pqB$bhbr|!(VD& +zdHq^nTp84kMA^y{bAA?zBzMC`o_ZPuhkQD-Wm(;GR3G)XZ5yjP +zg;lM&VS5*8M6}jM!ZljGt31$OZ8mQ$HGxqm01C~`Y__};nA^Ietu{pdU`-o6?cAv% +z@{dWNw_09S&VV!V95gSQ28n|!WQR5f384J(;7C{-esr30@6ze@6>i2JgI<-*u;`3d#{-%`?P82VD +z*t)tO%y=)MtZ@j0cxit01r)NQz%n&Tnqnf=8}EW^1ijG|T?;lqv}mo@_nBt%9P&wf +zVO0oM>a^FRn?{@w|?)FNYbFr9$%!}<62SssSE-tyIo;xHT +zODyWZLrJu6Wf< +ztII0q34C!4iU>nbSU;H-l)}_wW*Sj5IOqPj{Fo4|QOeHYdoE<%6y$39I|L(fS;?k_ +zC;J2U%ZN*2C7-zr)>E75LplV0vrNfGU3S>dI~cU>44lVg4F}r6$fhR9QBFf5eKtds +z`Y3gC!^pHSywCOSvEc?7y+nsIEG842maPV?V?p#)MT@}cu}E9O1EYpH>a78cn&5C< +zD}N+i(`WAR9 +zm!MAV=~E~K6a(i*{i$ZLUUvTw-VI +zgvwqWzW=0igBjBqozgxuov`zl@jO&DP@2n+ZaHZ7UpW}fKl8?)IqJ}D+h-#S81G+_ +z6c-bE-z>Q*M#YOHuM~5R<^*T!HjBm+U76g!5_{AcFF2VjALi1Kr2$hs0iJv>bkrm4 +zNpV4}q5g#%As3M!{@JQ3x4_p)dryG#0(^i=f*ys(JDi4Ep~jb}eQZ5v*K`p{vJObu +zOz#1bzPW4aPJK0d-4^LoPYDY?*)B&rkhhIIsv(ewMCPx@BQnlVq$b(Us?&9!zPG6d +zb}8BZ4~4G?!wDTY1F`(;#Kfc5Np5>BtdY!GaUlcSX%z$-qU99OAx480j@l5nrgGE< +zT5DnOxOn1pLCdlRQkSQQE~N$-R%WOfBcXh>xkSt7hqIV!|Ky&p5zmuEo#=g} +zHS94zbq2o$bD1H?i6MwR +zLt%P0R$NsDaF;Ga^amJ54qJ^(rE&|^*N#JLuVM-OEHhTY9EKH)VGfqA5eHH7a5<^m +zyQTu|kyx234jwG}8(0fkw4GAHPG)7*P`5fS9Rx-kFi1Ovo?bd9r<_%S7FOoPa3k!S +zl5@JHWkdkClk<&|l;6kiLvwrkAQ`WPeLKDEhR3^cbUgVZOKX;moG?36ro@Sh;wGHH +zgG;Aj;r}4#}W1@vrH={d&q-{=M1D`&X0^U&Rl8g4^E?x@7?p3kKB&Iy! +zeymbtrJG_ACwth}Z*`x04tNo%7<|O;&QfHPTv;=f@c2DGmyL#PdW6w)vqtr>4mqr{ +zm~5j@9G0X&%LHB&jyJdz%oG|HYM#5_9=FDyH_`DY0~?GXqD;ol=t&EJ->4EiZ^pN9 +zp6$JSHS;;U@kdolA9&7HyisSe(oE(y4D%xgPF1`?95i*SqKjGB6l&78yD$MlfWi^w> +z{Rl@Or6ermn!>Izp8_uo<;q5>E6vJBZctU=7c6tm6*z*ynfqWiWdqZ5W)&hA^>9Ws +zMo%01QpJ^LkRzIwdfzWZCFRBotK5MI)mfujB|R5ye3WE>95ct0c1Y{Z8+RfoMcAn* +z2ZyFg*nQK5u9-vVG_5t_tohBJt5J@gZqtHug(=ix{x-~Cq8E*$hDoIA&VI5G;A-WnID)@1$o3U=6_{-|fS}$>z^-}fBc7+nrjv+|fOyy@3?H@z@VRlT$ +z;c4715AqxErYVn)k`Y+y9M5!%aZb({g#vvTlKSy;lt7VDsk?=6|FFQxid3u7Izyx1 +zDt*anxOp2V{m70J`xDKfCrG~BA~~CUQN)+6@EhW%)rmqxgdH|?=*=^t(zgBIj~fol +z{PZaD)1howSdfwTQ7P=M=`78mp7IYBM`&DZwIUK*+Zaj0U7y3T6u*RKe(ueFf`E)% +z&`{W^b*GHG4J{TV~SM*QRh|JFoPa-1lhbzaK4HIF4YjgZ;X_mkB*4-d;?d +z0o0uFqX9Rq>~kMP_VUv#t*g;bt3T>ECATFZW*fuXs&1aE5BVF5y$HPX%k*XZa8OLP +z9$+dY4ATv7B``m`nK6cwwkPY>ipmqQJwR_nUf}!An9}@P?H +zWpmskKJJr|TYYby6xefH{Fsb&V)Rs^+G3jT`wM}ovhWcb2B+Ydg}{J)wW)xxS)WMw +zf=q1)j*|H$6IA$%evh@&E!-6{O_qtq9hiWF!AeZAXz47Wm +zBpt}D6WxWHwUd>=o52ayOI+CJI_{_sab9~1vLTRGrEt^qH$e}r4y~|8lX@!V2qMAE +zT*j9>9mYm0u+axAz9mhcIT9lmOVaeGk^7(h;S=UrciD(UB5&H}fwzK$U%O)@4Kt#Z +zZ%{cGCz4?^acR2kSBi8rn%D=!Rbcf}DunQ`0=eG=@v-^178$fIz~;%ZFp6cJwWPNX +zD%+bmI&$*mwH#~wicuShVyiw6jcOwED6o~rrA|UyB=pZUR@EG&6q$AIMKtXH +zFw~_t%5ZzDa;vCWYGDOa&A +z_FRVX78;ppJzr|j0e&o6W(!I532>j4-2sWWxy02UQ?$Rmi3!X9o}BNpnP`HerWm%w +z^hz8yB*=l3MvD?shf$4ISP;wu4t_Qv;MaG@P*zQwctQxr7Gxmw`}%Ab|K7Rr<_)aQ +zy$kNeb_DlB7r3)9U|B38X$xg}$LI3Ki)D{Q-S67jQ-*$4SNFTX+gGV1`>B!vj0ktU +zDJ!Do1LoNguDi;<_|b+|Ysoa+=z!9!_XJ^mWS$OXb2?jVXs0D1_S>`VD8bi()4>@0 +zGQV=c#N-}li#5WbVC9v5Fa+5gt5q54U7}<-1Rg(PGG}Y?Nj2s^XncO3=nPR%VVg_x +zIg_4e)V>WdquRhwfa|DHw)9TiPrhC(0M%^?#3>a}&qBt;oC2#JBa|%?q>S8(6154f +z#^2ykGoSg1e9xV``+|vhssW_a3Ywl+euIKlc6-9i#$oZJU#RGjfu6>3G3lZdkaABb +z*OIwHA;34veB!ZQ!a5|(UA=e7kH2O&08~sj-7k=?0aHQJO-`Z){pc9hW>k^QpiS5^ +zje*~Q6;-Ht5dI3s>)i?%Y&{|J7{lnxnKMpL?FH<8h4_Sy?04rZ9ibjEypZ#=6x;)@ +zLlOX%39@tP!fi6B_9);{8irv}`oR5ginfpYQc{$h6yY;x*bubG8v#>nN$-SVipyTy +zq&ZQCU>SoJ?d^&xf^78hqojkx8a;sz9WY8hFcC`sK&|Qdp(Mx^CU;k1eBY0^ci$Vd +z^kaaIN>N*M0mE>HXfZoX!I7N$pTE +zTEsiDeB(%>mRQ$$9mYLCQI4%jjcDK6Omfa24S&0aiQa487P#{;V+uJJF$%a`~hMk5yUFi<_bdLVKO)_Dh>$(?Gk*FTw$I(IZe1r5!2`XH696}G-{gCPDqd$Rj +zp1BbI@l7!kwl~Mbt`Y@lJOfOQu~txqH&d1(Ru?n0?x>z6x=cwK)v8}Jjm4r6Za6e@Uqz!4O!7OiN3f-BRcRmGHvGtq7JEv +zwQc?V`PKD1I(;C_S#l<3P) +zQK@fq#Y3z;&n0Aq=XsSyG$qd@EE^A9t8fhCim8dh;YpPk63(fhLaAdWW9@xTR7z-`(Oxc +zgz4gD;vnyXV2}vpkP&MqqA=0dOf6eikvY4T+#!DL;y0v{xHcP8ejf+yLQG8~)VC!t&+qP}n +zPRDk#^UgWfT;JNeYS;P=chy~EjJl5Nqyy$lT9hpBWdXB$96}ou0S1 +z!V9heA%p=vAQ;eId1SG8U9rqM3x>&-+< +zk<*WP&B%Fif!`NH?jKh}R;|vPjcHgJ6#HYw@O>(XGjv+=#fyn*K9HP>X*UPatPg@F +zA>}nsb*N8(SYmkoOEs^X9pU3&Ve|QsXBb^Eu!Ar>qfi(fq$`1S#dKhHZ3vWwTSSJI +zBx>wr1QoW%gc+Me8A|20wp(1hZrq{zTbokco{Mx&4hJ5{n73u&~fc4PMe;j4x7$i +z?1@Kfvfy!nTI`X}2E_(jT(9) +z&7RfcEFzjciv*uIuWp>&8y;M{ZrZ(Z+wUJjg%=79?lssQXj*r2r<6;D#8#8_6%6q2 +z&{It(bG&r8Xn05cHtY)(G3N0exPQ~nlyr>J+ui*I84&L@{-`*S&TtLOo_(nJEImEr +zvSk;=DPzr&Lc=uB;{t1i)B%$NFi +zaLyCveFMcO$X)@lzaZQ;)h)Qy$t1)G1MZY3X~%EbHU;wBSnAb-86O%)!WFY?gi0{A +z*LH~`?Q$mY0A-UVsi1+>LLf_cu^18YAWUmaHputq4Kj>6U_&ZPidNPo&f-*7LKvl? +zl5|6nc$*;UXpWhvT@4mQaL?(8)6D&CSYai +z+_;>K+8@(fyCWlYT)!}dnL_T-F=SrX=bpa)A&DPz^Mu*1bv^tRqtA+izqBL^mi8@= +zp?mbCHTBt=TRZ6?o3aI}pmnZ{&YbXAlI_}1P$9opZVIl>H2#Fiz$`PRyh+6!H>v@l +zR1Jluq)Mt&RNxi13*j|HEfIV5RX655%?tpI6I`#%!r**6HJUTBuArRueMZSgGi$_B +zRum|Qm^e5tyCL?pB7`X#Z9VPvQ*`r_6{8Xb0Zi1Vf4Sm#m)+xXI+Gk1a`a9e_{+mx +zu^LuXW%A?^>kt}tGnvF!N9Um3oLq5HCILBJGxm!awv(1vi4`pcKrH9p>>~UoO~Ufv +zra5{aRwD +zWfY?4bm98F(BfHN6IU#|hc#Ld5CESM1HS(Z_Kb#4vP1IVlpqrFu2wV031`!`W4!-^ +zCCHCC1x-wxk3dX&avX2HF3~4CP>C55idC$fiKP4v3VLYR8q!pa-}b;0*iIzK6G-Tf +z78S(dT2}{*bS@6b%_5cn{~nna`B%o>FZe%{8=@z}Aow?l2BhGQI~ZM$iO42Y?YSNv +z63^X8@N&XWh6vouEdAW#X4Bif8|R~ +zsVpQCzLt!4SDxD*+2<RtjY6Af6V;A0kx=%oZ{#?=sD +zY=~Znz-(dAc2VX3xYFs-)0k{E7J)&nQ$SPJLH@ZGMVWnWx&~JQa&Bn#Ke) +z&OD9+9#qRQ#s8uW^lEa-vZmH%1BzzcpJZ$v&^fwEz;L3=O8X +z|2jRl3>|iWXuSwR7yG51Sc%J3JvzIo5}-|u1i-o4OEuwM+5CO!V+VZ5xeo%KqdShu +zP*7=gs#iTo;M=?+L?OyouN%k|Tu*(@IgMZcTS7rPgxv5tHj*Y{_(X)71oN%JPcUg$`JA^lP +z4;#S@1>uk_Xg6qn!d{tpaiI=f{gs}%9-)>^fLw({N+VntK0q@M&3e%I^lblYm{Lz_ +z-cTfZsXS;O3{~_mHvH+2bLfv$;njyutTbQ9qrLbbr>h3Qf}PbZNTD~G-6hE%3Kg^F +zP(-;YwOKX`0s(#|KQEqn+!KZ1GPi95E%u68npS*G!x?=ipyBILxihNX3OR>Z6Rm#2_j!7ypNFVxSE#1b)qP|VnI{*=X|wQo|c2d=rFWPX~?<++PN93 +zX!y04xP57CrjtU|+(dRI$=A7}?tJWaoV+!77oOuKS2RjwF)>@iJ)SM_m?mGYP#u(T +z4#4zHEW~P%S?oLy#@$TYmoBLJL&j?p$cH$>yo3D2AZzaUgbNh)wRBPwTmg2L07AIVFl!az*u_a|3HmWE +z0~~OPvg^Z^Z8m}N+oV(-sqR0Bp3_1y7a3yc7)6sG8HN#fFcxuw`8ea*TtG2*vtLO&Hqh)HH6a2z +zjZ!0j@0zOcjzCh~EVu2%fmlYvSXA?In3fVjEk}zxLsuetu|Dk5i(=qLYXXg9%M(~b +zNukExM>6vQxmf595pmUM{8HrBa6MpNvOSf>gk8pLe+RSa=aOekS|nAYSl9)kD|)mj +zCQqg!ojV=3U)Hn6l7v7U@E-Zv+#5#hsFQhUuiG^i)RIG$wfuhggF0TrmI`sOH=WxW +z#QOuW;VE?pWsgI>@{SHzBQTQ$c{+-!PNQR2P~o1_AdB?GvDP)5B9W!n;IB(&b9_Of +z)!sj=8Lji@w^A77yQ@P#ATxeNECpDI1$L%tVY&9xB962df%KIv`f-x@qRf}A0x_P@ +zIBJ3et%InAiXdLJi5wS3%m~xc%(PZT#P0;?E5f(AeC&LbSx%CP9lLtcHneGI0$`6V +zSRN=nOe|!z6UkByA-f$Rpq9{pb3pIrXPtuE-;CeGI5B7J`Q*3}?|5`V9(s)INwRjO +z;V^TbB;a<1;u9l!V{m4kBWuapwx{yRue5cG}mIuI865Y)cOIWQ>X5APE +z6LdxX^dZ@tZR`QD@S1?9_cRHJP)n9U>d(U|N}?no@{D5L)8GS2ONKWaw00LrmY@6kBm!OhZQ*PtNZZ`I2=sc)y9d+EfqWba+`fcda*Ooss5gO +zzt55|Td4^E*&%jB4B@CXwewQo-3*AZJ(LF)$eGX2j+wbvIm%AFMjMq+qce$W9qgr; +z{ak7L!`)#>Ki-$-by$ot(1qM(dq1wd?|wlI7FNIimG2lEP9&+%$-&$gFuBQR9ajcc +zc)8+0r!45Ofd^#TIF%!`p?0ruJG{Q3sFT>BUf4ZKzu4%Y&%KNVZazWfId8kndEd;h +z7-=*ML|)j(52_8h))RZ_q{;^Z7*84M0e7DyOXX;G*MEOp91?$=x|~fwpTN`j&0X%X +z3Pa-iS7<(HdPYo1Se!Ua)ixuA@SQCf`|b|lRQN}%af+k9Uijuzjw +ziLklf?`JtkAE)tdA=U6fbs^}Jh)1%yR`zrUBqX%% +zqvhL^wDRnEnAS1e;&0+_g;$*nfP2(M)%74E2h0O0eAa~KV34(Jv2Q%c~=A1H+HnNIe +zG?ljg1%cV+i#m)Jqj1ZA1F~sWMjvE4kk5iqLJPUoU8F0oJb`x+I90quDYhy(BjZ7q +z_Gpbd7xoBlBZMkBpLHYq0smvXKAY?ht1@!zUzTQMW{1t%5Hcz;Keorn0*-Ic_=*OV +zKhX9MRbF}7x0uPoqdDGx81fZOau+wWvD9P +zP+WFNUee#;U1~ntgin8f?_M{nEgSWEaYe&eHDQ-en@mIg@rIgS*#=fx +zOvEvbRnrwEY|Iy{u#mv!y&z~wSkpjGFzf(XCsXaa3_79cib`34fwX6+L+nfbpKq~< +zfW;}rFm;}%61K6qu$a%Q-eW*(N>$D?5{13{I0JZ!OOF*Z9^^u%sVKxRCn1Edp9rX8 +zW^s!5Wn~R~dEX2bEnC!E=s&~;QlXB(QG^+eeQ^WXg)Rg!`r*i}R3Kh!i7t?jM=tR4 +z_b%#u!bK*X3BRCGs}pLg*r9IYsJxBTnJs~W$a)FeO^wU^9r(78P+s2Ja7^%w0pq;+ +z(TR?Pkns{>sc(}?p8nitB`9663&h97&^h@FBb4!2YpQE)$tsBdJ8s$cJX`NdJ +z?b(=F$f6ms{BXQViQN8L931Sm&kbH9zK$R6V5U&YKil9V5LK=w=n)koz* +z0qwb?JRG54VJ>G|9HjV9a8}c|9-L` +z8gjPCdtYHz-PCC`f4o_M{83^iR+R{o0*~wS<2CoGIgGuY#ST~Kg{<(8NB4!xlgNxu0#G9Uu_WbN6#SG~TQ6VVEBJC}X)FZq~h5izk1S +z@ficlL&g|?EOc+16E?{|DF6h` +zDJV8H^Iv0ukcU2vgKlAB)`EoU5qndpeD{5#)=1dJJygsB#4e1l%})kP#f-CGMq_7p +zF+FJuvZOQMmwikGok63zSzfNYmrlv1+feUie+zI*b}IYLaVzwH<07L#dk}Yij=R? +zM9dNp`4OF$%g?cvxB*Rmft$}41a(J#(?7M_4*r#RX}-vpl)jRR&SU?!C+&K8v<a{SXRsp2 +zwM!A2+bi6pE&cpuddtGjp#>$-I*UmkfP&?l@_SzwA&Tbx!o`XOQ;@;(JfHf$xxo$! +zzDvV|M_b1s@LfoB$q$6^!$w%@I4FbXk?v#MaSK0FRY8zD)R>){&Q+apen*W!3>rCS +z1?M5HsT5LO`xSFq$1pEBzWJLh1{Wo29Xk)><{I5WrYIdS^NVu6mo-=nfk^4q@KB&* +zIYEBg#18B=$#fppDhB4;-)^|0^XT_dqmReLKYziO5mL-1?OV1$*frYb#HdTk++Fgo +zoh!c~4R0WKZ2e(;D^^4eK4YDX92n*02y--;!MUE}f|Cr2gBqRW+{lmvb41i9GpR(( +z>rSxY`3~V#-_2h&_col27{P=XMZbg(K1dwKt6r7{lz!h;5@p@=D+=poaGnZ{|GvY9 +zxjp2-f4$1WNzy^DW+kt(M3ap_7o~<)yhLZaT8Ye|Ztfu16?9d{9l7_7YKq4##L|nf +zmoV4%?`S!ruUn+P%=a{MkvN70GW}9P(Cbje|F()h0$ze%%g5vnHzXvzaepL_J4c(# +zaHxURtVi({7QYb9^NS;SJjDOP13}0uwJV(gu$ORtFHA_=a}Y5CuO1H0q%XtmNSFAy|Forgpk=qo1Z)Vm|h!2 +z=JZ=9;&s?2E{(erSJ3$qtmZ;(;cLlBQs}%U=w0S~$|Vw%vv#tNNU!g%>&L*>lv +zD`9D{roGXj@NNu4`Zv1)wC$V%yT^^5=A*|7sBNYTV6>Na +zbv7S9L(7k!N2v_RUqH&iAfgY}8Y`2lSY09W^>c}Zf*!@*_r=ft7f(e#7^obrn8C4A +zt`2>g+7R9VX<#K#KHJ&df||>%!6xP`G5iS6aDVCGD={xp!}q_Pt5aP!U^tLI;p$u8 +zDACxHCy)HcwSPU?Yh1-du?yrt^yrWu7%I*|&TF;hD%nrG>9h0OFd*%Cz56UFU;b2B +zG0}up#$6q<(Kbv@NM9jt4Rc;%sWy;bk>D2JK}L5z>87g0142XjVJ{EN7ICXlh7nKn +z>gA4EkO&i_SVv8M^lsK2Gl7e2owp&L*W8I`+zgw#I*_aV+M0GkzIhSWM~thL3uw5m +zPMJ`z>nTfpaXR}u>IVfbuEorw4&d5=M35tCGtrn!4crBqb8)^e2*6*4P1tPa=NYXS +z72mf4XZuZ!hD*7U?$$NNJzD;v9Ws_a$ct`Q6#$H3Rv?f*9vW61w>_v`F>P9``Rqj> +z<=n{8CANO*>d2eRI%A;q;5^5brWOEO4hs&0x%yQwyZ= +z#;vi-BYe@W&QQkpWzrMJk!?Y_wjE@)`p2ygo6Q*TN_NxnC*cZr>x5_#^C8-6H?+|ERnGJn9McDhK9g+YEU?8wpU65?63MQ+_ZvezQbK +zun%@4THAf74!x|k#BY}9Wu9rI<M8>I#v>Y2~Izg!{<&>1qu{md?P8}X_E%MZ60Apf!|$ctS-~<^%eeo96)F%+Tw}k@7vlL7gF5E +zMTRvTyQ|x%E=tI%n&yj;OtS7e9rH-8VqvinGmUIN@FuG +zBL#BrEYutpriJw%h+&jRH!XB-H1Uc=H6OKch|-u{_)XU%8}AtpoN{yx$2fyH&V&Zh +z?Ae_MzxHI6u3HC9lFUG;2SUqFwmBmUUm`YH=#8|T^Y%mG+uSLpRnC#?$%z`Hj+?lh +z5!JK2&1t1sQJdtQOCpmsV2_46tUUzuErf);KUt%&_lz%il5tk$zxpvtq(cYVpgGDi +z08i%pIOeg}wDn9#<Yjs*9&gG$3YR1Z;#uti +zU?B<@JNuL)uqwC$;gLr_H=_5J7@{4rZTttpGgCfS=BI^R%J~B-Z&av{R-9NmhxYL^ +zHJw&JlcmxiDCgjIVAzO*{KHztwk(0B=8FUF%T2Nrn(Umm_-xsNri9U%l4rLeq04F0 +z1JdRlhYQLIiBHl)7v1-9_}NEAblzNVB+w9fcac@e(Pj3^te!mf+{OOl!kb__)v~dPyGyF|9yr`*=hS-B?tMLhzidK26 +zV!9CeUqA{ZpZapgT?L`{A5`UrLk_BJREPWHk+oEI+u0PbB2Bs2cNE*U=Z`=HcPK)X +z=K|XZBsk-g`MthbViBe&>F;lrC?PBS*IWX>R*%XFayRli`4FTaWk3 +z4%pBXCwNx_Q>pc{h=p0j(9(>$v!cSAEt9Rkr+bv>ohLv5mkMJ4-zE_ox}C`pbnAyxB1*vI +z8L4<_3$dd|25|iw%MER4Y{ArDO`XaClrS<41vYP8hlWbDWc=Mb^g$t;tf`ZZ +zrL%Xskxqsp(GdM8j}#*!6^yQV3m6$*`d0{CO;Ru6uqIf!h1j#$#f$+zu}|hhjrdGI +z1+Td@jv8_f|PSk&yUHoyn)v3a#;YmVFo!fes$-!)m6<5H@W +z!m!jD4&K7!lR6CTm+iQCj!c0!qkhYrg-!e*q#?M`Bc`o$m)u{Ej)f3XHIp2Rz2dz9_^|=MM +zw*K;chEXb;8{b%shb)97kooPrHv7GyJ$Q$flOkF5t%)#RTp%TUA=G&Hv*pmA4R{dF +z2{2#jd#TKUq%`}uS61C*e|@Cx6-SQIWc~VfiPQgbiFW_XC5|kh>i**r`5`$ZKrH|3 +z5+g4Zovq>trs|uXl+=(M|5RTL^IC{ya)oQ(PTVpXYHm{e(zj`i0ZX?>FuY^5Vr4EL +zPs?%R(cu%;Pgq0_F3vbOF-rf;3#?#@vaEm33LT~L?o0p|-q!Qt0#8PO1j&y--g7${ +z8q`oLAm+PxO(7E&qGP9fX?%;wg`~MAS~25LIvtJ#+(_ZEmWHrVfy3ntaxeccmMC2F +z^_$^eERmsv+34DpheX|v27AGwi=4w(u&BZlr>3;!u${D=sy#ZG{LhfE{}a1zL0=k@ +z*#&7`$$<$n8Wvum-yB>303Xo9XFg$qaeN{B!8{$v!;*1)>z{DJDeaprkLG1B&(=8( +zc;%IavlJ1fl>P}r8VGj^!0$mr&`@eRL826g@EdFh-R9)VK`r%D9vs4M{pgs_{No0V +z%UB|csBzbOk?FAFtG)X}JOD8z=;so{Wiu=K$u`jHnK1CFaaQvm`u4`)`T5~#pstk3 +zU+c_eetG+xzx)IW7(llxlIX|u5Zj9NxW`}euvFK$Jn;)*L|Tqmv~F4SxPGdgZAc@6 +zok>dZ{me#?>D-xO+GZ|mNI83cD&{y9gfthJSXd@P2BBr(OKHRccIuVNA0G^}z#|*q +zGCJPBW)CsMqrXNJdDNOx%n6qvP)R`;qruqo7_Dg)Mp%DQ*{s5;TXyRrjuje74|bxR +zu_LBN*w=N=IkMEx1)TG@@ePwkak1TYr~6aNulTB0#D1_)t_j^>fWHeV`nK`;bL2;U +zHx)-s3)PfWcTf?{zf^@e#36)H|M)PnpbP^bH&x9jLe#H-K##6s&}c3-$sf-cqv6y7 +zneF`7qe5EQ2f38}l(kJHU=;gC6Z^+;@%{%*#M1wN(Zn)giqt50`M=U!nBb2oo|87> +z+#Bu0bn+2m8_&AZ#s^Nd_A7Yp<39lLyq*!UHy~=Y)^tD>P|+(n_JSp|Fw_ZZNkg!r +z?CQ89h?=FO!PO`&_#C}@h^=wFYkZ +zNo&|rey5w%ZGQ$PP~Ha!QkV8Yif%8wq%edaW4aK(Wg@oQw@i$+kN>l&)>J+0d`Z;% +zJ2p4Z4jj)4p0F68umud<(u~Z7fR*|ovO3z%8qI4wdDBO_i?d&KPIny6G4BC__&ozi +zH_C7F>0aPI{2fqC=srvIFnxbJL%9ASvKh7hT4$}Zf}i`K*oGpZ5HRo^HQZ_5xpv;3 +zPu4VDl?K1>1!ru{=W8B~ZfvowkzZ|#RAS#CR)efw2L;{jUkotKW}XE|0J$O?G#oM^ +z^tGFgg3e32KC*p+j3{ZI5k#M2FnY$jzUIPf$_siZ{yy#D^jj;?xfbZy^9iNc`2$a! +z()7lmgXsUW_}?}W|GzfT`oA{OVBmk-M2P>`#0lVkY~qUIKQ^(20obUN@g#?Z{4d8b +zuS$QpB@`*iqn`&o>h9oP0x|J(o5S}@c#R-b1T7lDkM++8fa;<>$rl9I@ga6RW4ihW +zXXo0!bp7u)mTiYUy&0IQDiiWiFki{rzAs<%x=&XPISxvzIWP?Udz+EeAw#1U6U#(8 +zQjA63PIyj#frNCP2P`!n-@jlzUZ#O7SGr9NrY7as(%G%s-L^~y!c7g}t+t8X$2Ljc +z2t@$gk&px?<eQ2``^4~C5`*0D@<`1S&Y#J|FMY!aAGGcS(Wo)LZ}F=v6E=b2ew6# +zzqih;dQ2MXou)ui#WfP-F{;`QQURk%&_<}n)5`?*3C?l1t&p;#6AikH!R6k8MKoVTntY#A4YVJj +zvr-|?+9NHQ?j<@f2Cn?C%QAz-Ks?&nlnnnZ!YXw1;Hq}G@}oX8@Y +z2Cbn{LJhuFtJLmFGVyk+ga+R*QQ_EvA25$m-L#32qf8fNR^vAencItc4EmPj(M(@i +z;9bcXQ`R@~djAhh1o|&bBp3OvBRaj{gp7HNTAQ`pizhjneh)KowCSdniY%h}uS|vq +zWN{ntGH9H$;>Q40;FCG2`jHdxM}ZwiOJLixx$RuRsgB?Vd(xQ_1C=mx?MRHU#^W=A +zyjQ^dJox^S>JYTk$g}p;Is0mnN>vih+@|j$YLuekZgAb0<%mKwBF8Jx6CkGNttdu> +zOC^mA{1mnDBO`r?G`O|Jj|O%OnU>GNhq&rL#!g6g%m%M%klC(Nh738;F7J6efkD>q +z{W5DUBRiUFSXBgC$g@?lO(yUXZzV1-80uz(bhuvJSDt)e=6>J`?E(elT}jB%NGI?m +z9wN(#$8ojQ>n6%C1e3|#5H3%>(rPXydO^B*pHK-kw<|kR2bnm<*?YpJ52f0(a3r`6>58x9Jz{N`EwE +z(ty+Zgo4OsuKec>&sG{uQkDdW+rQX +zDVLr%-H`jzrx9XDyeaJ1bQI?{RPemObDb=Gx=s5{6Q67FVt!1g?;E4neHc@cNxtN? +z=-bB(_x}IbM45S{jBlGrh57%ri6=gVyX#|)BE+SdzaV#NflFA^TG)R=(tA=%?91G1 +zUFjbdr~Ltf&TmSixrw2D9w4NvDEb@^17N5kfIl_vUAhk)9ie>Rrnp|ZbR_YRZ<847 +z(K%D?*S7)qoQtZc_s7IN|0EU{Ok}F-|p>=QRS>xp8CwSS--cH~o^u^7| +z*7Jx2UMyCLA!8rvT>l^+s_-7a+)~+1q4`4s!@2U`c~PP+Ly{eCfL4ZG2d(uDgS=Uk +zrWO3LS3mm6at%84D8!4#=^FBb!nVqtxN*V_Y|@kw(q5|eK=0?REu=|6lwtj*7K_u< +zInyA%0-=oq#QPf|uXAwN)ei6g?RJN&ID(#`rD9asYGXEimwiX1{arLK%eF5jKozuQ +zR+O7`VC8pRS6ULeJo$JmlIsRQc_mE$fYg_P7L!$MTsN~q{E&uby++T!zeKnu%@}4rE-*DRs2j;t7U&6|>G3F+(7R +z5ZIJ7s6tCR-yqqf4W4jScmpGFDfW@rFYSR+n5g4zB +z#L)jm;wJl)fkHGfH)fK4#A8>|{}@GNdyAyNa+0HXV>xDXgu-%|Ym50(4mEd_Ya*)e +zrC!q4*gtg`%@b|Mqr93g^BzuKJs<`+)zmhee#e?ELk>UFPpp~x0Rv0}ZtGUnS6w|W +z#~fIjyLzP2Jh0E)q7*l)IGWiu@**l$4P`4Vuy;@?=b`?z>kmx2za1gc(i1Lhr3$`4 +zRmt`Y4kk$|GfuG}?;m@&bO2Uq5dp(@mstwC2TmxGDnO<};%n31dbeQvlu)@zVsSLP +zduX3;vCTyohK+udl%IzJH%dgIk!J%xr&lBlCVPK>pL{p#>{NOT-ZC-?f8 +z|86?7j^NGwvWX2DZ`MEA#K5lBwkT%9_6?7hU(9E%MF;-O4xub`!v`O7F;n@?;GY%c +zmP$NcRwcK>=?)N%iu5mi<|#wyfXX4P^{T-PWkEy;_w_rj?H2ziLHxdDbw-vQ+BwB; +zD&`-sBLxi)y0GNc3H-M4Ae%;0rZ0WsLLH3MjEybg +zsKY}uUn}M|pX6qgp|$&Z?9D9t6^be?UPCOz#J7kZI8 +zVBWNlxr80m?`}EoHc6|XKOa#OPN>1`sZTIhB^+56o^&a1fEQk1m}&R1oqn1% +zEeU`WpzH^r-)u#wJm}Y;1v^C}eaDRM1W@>cjWzvO#A?3aMjaQFORKW0ZEBW?z*%Oi +zMVA`GOC;BHfvbCS_7ffO2j+qLdloAELFZ1&Hk(wS6vV51;`Af;tYa4t0ialqs&T!~ +zi$JnAAytsDzR&x@GjHfr&g9igt!kD-GKo{hk+(CC#3^cQMp4%y-7ZM$T0KbYHYZz& +zQs^U0+c)v(^d&93zq82pcNlnm-Kn5j$;&0drids;B?&&UAn5W>3bES#0`X*DWRe_Q +zt+T&|GN{67rqQ#6u213Y?4KxuYL?k7afn<*f_y!8suFo4cz|L7{|PKchX*J+?0$j| +z3G8(c2f$D6ODPd$q5L%G6rQ3!n~`sB4)lq!=CjKWwT-FQ;jr!Y;lFu>38Of`gh%k) +zI58MhrK_EB9}`aRzU}=v4(r&1*G#tN^)>b1>6 +zF}+U7Syn{}Z=btW$KKtqt(n%#<;;o!`Nxd2?Lcx9_}BAGp~mIR$*IJ#EHoxT7?8Tf +zZu-rDb~c*%1$DA<`DP*uMM +zV*R~~2_wXzVB99H@HA1=P1p+5X_mK?F~xK6Z7FtO=O~RIQm~kjft8N2PU(-FgP#*J +z({9Y6d|S_U<1kKd5v%bEvvHoc(A)zBK})IDKVXgD>Izr1OYcduK +z#!K$!J^|QcO-LJ#FV!yJkSZ5FfpA8c(8i>l&jl*$2J@uIER@~k-*Qzs`=g9;S<79C4GCGY2%E}MBY}0dNoNc!JIQ!Ehi6tbcPWM}Y?a+niFs*&gC-2erxaqUrS%sCm{K()Gl!R(_cxo!&+hF9 +zR}fY1!aNhD|7{eP|EEzrBK|*(qBw>Zia#*QKSuF=g`?$Q7vKK(x>VP?f^Oa*(r}mf +zg!3v6RAl;Z;)-0pX1_)wJT$!h)g+NXs3Dd|)3&(lFX5B=Bc#>Wf1Mw#0d +z%k7oUR}tI0D#mbokB@Nn6(bp~#ccFp?g*28V +zq1Ei##`(j&0p1 +z3MqQG6~($8S)J2|z0)diDo`NTnsdsy_}H)tb2~Bm8^`wd64n4o8O>eNbQ75!Lr=L*r@KQC`q~_|%1*HCTF;6x^mrnLiPe)< +zYBrD}$GgApI>tW#_9bEPqMuIu!R?blgi|aYLv`hu9<(>`mh<9 +zwnk0Tdpq(3E+2W$WNn*=F_tg9w6)Za9J(x&C5a8W?G~8N7*WH?i_6xW|05K!{;!1M +zq0$^VWM{|&ma|xJ$E1?a&bBSd_B-8qB+cm!EIog>d_BIGCn6nDxUu{>_->h@rM>Uq +zFN;|4>xl2R;z?16=4iuPoW*!#Yce%HbXk<$wc20-uC2+(n0TMO%VX058D%!bJceZ5 +zO0WZbUXP&otio{}taM^F^_8t9C)69pj0}jo{xF#=rZsoy@q-hmNsNOw1?ML_BP(2R +zRBfsP50V1{W$g$A>!B@MA+5a;?ov>F98{TzfPBRyHpOmFW80PdI{iP{LsJ;6z2O&w +z7)iRvJE7md=N`f_^|f~}vIy~7J+6K3O@8$PF+a3~ +z#O%7MOBzwR5r3vrM((~gp?Q-v8uGkz5}o0dnj{cpuu1xxio=%d83ZK&u=*9$FHx+xQ{x}>{SI9XiJT(W@Ejm&>#{q#2q!9PIHHud@J +zb-ZCrPgDw^$1@{~C$XaXe-cIaQmw21K@|Hq|2I)oZq32|CW=l4|C1=t-2$3fUkUl%Dpl2oKQ`=7|EXhS(>^{Y{=VO8 +zC%va})QnA$;0LxAiT1V~Ic|T^X2HtJAv@$fNgYs0(DS>cU@C=X7AV@DoOOSdz~VM= +zia}NH%82ojj9i%5=e+iPueW?E6_r8^XPMrEC^-zxJ&uviRs0&(Nar`@o+Dm@pR?A{ +z1l*MTD2y2d+bW*IitF73UUo3;R(0-@RB9q5LBntVl-E?Dq$5Rseg)L9#U+7a0mPP; +zp>>ZoPaV6W`2%x}tNSdhAZ!~=FJD-NXGRrTThE>vx23dBGm2m@v13pA(+4K%@?GL# +z$Lak=DGS+3e?!E3w!5O*fIuDLhnS}dc>=Rj`Z{uG>P9A0I{Cb0pBMCcW&Q4Hc#l6Q +zSM`YAB?Wo0ui~!)YrjK#A%y5t*gCLmk~`#-+fXZsE68oY1%84thk2HYY22~UM1Xqx +z&Hrd?h=vUo4t}|QgCC?JT_=SKK0o4GOkO3g-s(Y`80c8bV#S4SoI+l3??x+m`1##d +zJT5g<7HJR%@wc**Jrmsk3W@rh+nMH9-lS&ThKaz~Q7EfVCJJi&u69IK)Bap5Rupw} +zs1lGW^{Bl>@(YYP0C(Qfw&T>MAO3|K@+ddQy8XnrZJO_VTd5r`@YXmHu9n{@P=l(k +zcR*e1LNtv{S~b;>3>U^M3;c{7LmU~0z_`QUhyZonDv3e=oRij;X}GL*oME~YLn()q +zZy(1g-G#;WbFYUx$O1W6Kmgs0o{t*8z$<*B-ZJKCZgf6Bu?LG`hCi^gBQ!&46kMqy +zAkW8ssENljn1p2fFQHz-XwIZ&2FI$E5 +zlY&2()h={(;|QV~cf|{$lf0u7qiWe{#&QT+Rt}#wEepn2X#0`UN8dClcf^F4Cb?H4 +zM~kc|hg5w`MjQ)mknA-@K8NlUvMBYizy*LL2C!;&*FHEeP9BYFt(4=%29$Ws2rB-K6f3O6ivNuiZ@!TtI=06zn))+t +zG1YNI$_Ak0jKsK%%~JWn<+R&>kmATcND;1fzgtigI1~UY1UUHm#A#ss9NBX}%NMav +zWDHsyToa!hxCytiqx1yv<&hANxwMr)hdV&oQ%#BRiCI{dCnjPt?3Fm??>O~Kk8Iw- +z^c&q#A>4lVAoOIVcd;B-5#&u$n8c+t`Xa9dy5)+F(e*fY_6Y$;72U!@GBG@XtZ5id +z43nvstxY*3W%Zw0_bpxD2PFN?S3~F9g_NRU`C2b +zfnaZdls#lGYvwUfy<=uUs;Y`eEc@SnVNMnv+n*pi?cSyQ4Xq3(?WaVsnIxY*iMvB{ +zA`9XD3t~&dow2G_QhQ!^eEJskP+#b^MC$>_9Ze!@KiGg +zmS0h`#zfrxM~_9}z)?_vDCQ&?TuV7^ +z$-=E-(A;uB?k_}^%bZ*F)1G2ACI>?mV|&pW(FsC6)K=ttRha9gF|DR27WVAR9AnvZ +z*tX711N)r88_q%~q{P)@DhQp+2hY|tLiA{Gp_MK--?{knOFEaH6`$JzJ77>bCnFfl +z`K6)znq`y{@zycf8Ho*_rvn_qtVnfF#~`r4-06*w9KUE-Q$37;G6twK +z2d!Rn?Oa{J06nBq6I|1uFDlN#(p}&n_%wO^6S8D8Z%l!A>UPs-pPvZB4@lwSScxnj +zAjfciy&I)+hPBwQ(&a{f{-}ig{W3mgBUwHc4WI!Vl2AV-z8P~AJafJH*@ZjHEP=VO +zfHAC_GaW43WA`0ijM?hT`mQ%>{N7H_#Y)ko*Z*)$7 +z0XmIHw5sQgTfsI&+r!8_;ZNpLx_H9}ZP$y`9)DON?nf^Nn7xW`hJiejxX@Wlxe@{~z +zhz*H~W*K3V3ePxdO$lBKtd(fxwS00fK~6i3!NaQ{gb0aS%9|Vd9`YYMXY}>>$!K-W +zwjg0Y|I+t4Q>AImPxASxsiRkX{c!T4u3?8!SSZ*?r+qSIL4cL#M6^DiBMq_oCUF8O +z>B0`!Wi{#O9=EylX$O#J&bA|c`??WT*c)7E2g-Mvjxw_KzFv1$Kh)SV?NNf#g$?tB!nEH +z9Jri9;C?hOEz$pcWa*P5q&ly87lUPiYB*ih$+qP}nwr$(ClZtJpf=<1A_dY%P +z^cnpV*0(k0oY!-69WTv^ +z6m%$c%ZII&d;jnHr!|!Q%8GIV%P<~WKEtJH&Ek0m92l}2`|A|e|@bq0)FV2?nn +zGJGA4U#i*TT#coZ!34SXPy_vyqB=Lb%JVq^aM}Od0?OJ-_v6lE>aiU0NU@%?ohr1O4nnuo|2dDJvo7&Y>rQ +zN39S7&u{f{a_Dxz=v{Qpg1=W>7Qb$&YQzO0(w`KL`IDuk)Ro6eRl+q6LTIzm6s4d{ +zn#iEL9JKjH()nJn~qk`I>+0zx5?$>G$pf$|)rHmGJW26_TF&r7V^- +z8taFN9OXX9ITxqv#>94Q9hQhm{A3o#1i3_yu~VtsL5{pRM3c~};o|XBpPx9;Jfv^R +zlR{u5$^B>r-u%*#B2iDslxL(TAXITt;6XUJ-ytEbZI8axA@$<1i_aX6(=@TY5U*mZ +zJ6VS$pBt#F&QyIk__wk4ph9~unQK;S2J+Z=zj!6k+R+<`Qv#XDq}H}R4@k>pTY3$_Xe +zqJfa9hsU!7sJH!iGq-GDzhVc(anv@MsU&7$4MEuMFc%O}LN2w%0-xc5VNgP!Jx3O3 +zJI^)c&~|qMQ$;o()kO +z%1@%B?;GCRiM?1v_UrM}3VF?Kcy;MFHbG*qAQ{gTBDsBsi$zS!fm3xAOgT&o8+vns +z0@|nHS`A5N8FuW{i}110N0FDj%eEVU-HNf6 +zQbqJcwU7qNgZiRIpzsY7f{D|!pwxCXpXlp}H2?alm0%BkxO<5q*>V$@Z*7=8ztULXRuc|Ay^wpH3p+HLo$59_ZfR!OGeAg +zY7t8ZBF4U37-IICyrcy12((j~MQ;WvBHZG3J|6blFJ{o_iiImPIwu}*(eeqM02e~) +z`6k!GIF%+kH>?7+jOQrdb6Yd@oKNcY%JPUXCCB#Yw2X@wVQO)H#HM;%;^Fm-*11|g +zbdr@%XE@JvM3~H=8@+9)rNh*-GS~Fz>PlIQs +zIGRw{#QFSmRMx3Ib^q#yvd7bacyx+?SaFWA?0?6Ka2nX_5H0^3R($$ztVsNW6_x)N +zR)lQ*AFOC(t@WEQuC->itBi&D2P=vKT8slF|HF#j|36q!=D)Dw<_}gJ$L2@!wcc +z{lBnc(bE43E3(_9L*uZcXx*MEvR`2LV*>#=$6<>^W4D?14YD%dD8n)YsgN!gVUlaS +zs8R}pmj+{TdHCX-P;W&NuCIeldn6Q2JGR$?wyR7YGkbQAy6`ga5XG<&`J;Q4A-jUL +z+d0`7-2H1Vo+&&-%)wV^Jfry6*gdy}(f*7J#P8y$b_A8inajtA;`VE^+k(w&$z=?G(0P8J*gk +zg(d~E!18g0OO;G%&182se;y8Bk6^iTUYA1XpAV1$50%td%KJk&^o_FVqx@U-`O6Fd +ztQ0@Jv7C<@YSvUVpE8JG+rQWf+3hEd6vbO+_SNAG3)J%^Zz6*-+PP>Fd1+6jwXlm$C_1%m<8 +z;8E1pxdv5H)(oZ{@NIN=M$Yh#M|~sK?!#M!&7(RGLVS?fBnLP=5e&XgGS8)rD()ka +zxbhR+^>!Ej6dIdla8&Sb)2l8w^5J=~JfY|LLF;#eY^J7??^KNL$tcay#!oBhXIr;z +zSXf;QhxIoO8eK(xOVIR;UMvYBe6pd&sc-KxpH<;?F>%n6j7(dr$P*DDVbtd|^brbv +zGfb!nUVyzK&?q2Dv#3qNYtsTm`o{F1Ww|KD^eG;uB%;DWhIchFo=i5J8o=40OE79* +z^ZPsB>P5*MX9}=fNT4lvgm~fgJJOmb+$Hm!{tM|WIFB)r-IDeg%)sh>Qo()|7ot&& +zzLvNxG7j^CzrTo{;wJHFG3U!nm$nI7O+`M@6xzQcM4xfiJZzpDYVfreq85+Okta%(pwhWoc6K!z; +zIyN%>Go6KW9AdG>!wO$9Wr>pOE>*&htYrK6H5>UO)%owdN>N=tP-mT3*B^4bSND(Y +z$bM~e84ppDG6FGljtpR9tG;gDY?#pp>8-7aDxcb#AHZXJHP5*H%PYQx##DiV^1bgy +zWX-^^yI*R5q@HzgbJP|Exgbv4xMBwx^ +zJ7(adsoH0*V#Ea|kKydf$4vd=9A1^nSEE4F2K3xzs2R^;n;bLKnVV8s+%2^9O%6Nn +z*%C@=PSX=^W{o|t;0gIs?7GFBGw7U@?%D>H&&N+A +z!%yNqphZ%pOpw)XDMBhfx%N@#-cPAXTIaJqOHMDnp&>t<^J9HI<+7z{AvbW-HJ0N_ +zrriCMb<`j5c<(l%iYPk!arWiBbxEe5f)ZO3h|7r#qip0%9YXupFR5Er86Qf2mIy^o +zk)e#ks;~##YPoh+LM$L2V4hS_3MSf)G5FSafDGy#SciPrN(=PKFc6Hr4YF_zGY)kh{Oud +zSh#95g~AStk(;!Q>ucO}-Syom0V?CMr-DS`1I%@-&@s&9R7J;e2cOZKFy`+5{b?vZ18sW6C+(bK#A7v}LK&5% +zBxB1IO@8$Koa$=^u&Fz+NxN9uqDb-`Uw8SrvCQgrk!CH-u8ncJ?NRK+U;)q?yY3h^r{CR#q&5D4n@T>CsQ5mF4ECc?sPDJ2ei02@q7}zhsVnA#ZFEY +zT+{Br29Q)RQ<;dd_}k5FWvXk5K3_1um-IW(L`>-m+KH=yUc|2tCz{Q+^W}UUyA6lb +z{iOOO&4S?eeebG@kjJE;0GBu@nT%Wy!OmsWe-|znYzE6mbw15v&+5f18pZmtQE!;ZF{G}$JJ?I$a{8Lgam*f0bQtSlfeg98MF;+s)9|#M|R0sf# +zZz(5=$Vn_FEUhRgfv +z(AZuZK4q1|5<+M35!7opIR4tC`vVluO{)y|Ti&qAz3 +zW(R2bf$M>arIg@eB)f@KZn@Na+^nGfw-m +z2NR0HNePnK5Z5AArbGOtGfl3fH>Bq0$gg+}K73m9YcD+?7q?F~*E((-aR{X?O0}&rD*MBDyzJ(wjI(4b%ZHM+ukdtM +zsnB&rCnG^>?hz`?@4V_efqg*(S?2+2IPhCesVy_64%K%AsJ~*?;av}7-e!7T_s(;? +zK{|=`7efcCPdVly*htP!0DYOmH?pWqlk4j@zV(b1B58U>$D}=mWl?XH6v3o0aEx#s +z>gN*65pW+LgKQ<~kZp`|_np1vHRX+(uqBLx&k8lB= +z+9zZtYZPzJ(BfI@eIsV1PBWePwo8z4BtoaB5S^VZYMHT$yz$w+@+@N +zdQY{$1gMeGN6-Hd#Z3cP_=k26*v7D&i}UwHePu`X9HbcqxeIy|P9*+AJ2c=lrVuP_b%D5CR(1@3S!g>E!b +zds`=)dh>qH%M$F^_Qbz>0^ypiveCcSm;n5URr_J-HhEu}j_~tvSa4s=o}W2u#E|@{ +z%)-%8C~qZlKc)=F?JR-ga(P&bTtrG&+`svD&^wZDGUG8nz2n*^5+uerq+Ow_Jkp5@ +zf{h+(Ah3swy6xe$y7Y#rs9Zr+0$c;a!l@i#8UqmF?ILWLolvn!uZ>mDz$kSqrfW|T +zzBPJ(TeK7>4)F?{CIxyX(%-&T)#B6cfglH86?MQ +zGfc4&z7%xR4ti9msJ6M|O9G|KiBcTkM_d8b0orjRSq9bd|yF6oem#CqBpb?hryb{k_|th^oQBHa+}<< +z7M$yjKx6<^ADC8c;PfKd=ag~da>48qql}06I*Eg)wzt;>om%Y2szI4MN>Q?V?TM?^ +zjo`yIG9;iRshF{wXA4nlf`7c?bRYL97njcTK#4m)9sq;rs(T3B#_H5Jt1!;m(F(GG)sv%^hxd +zf58rPJFsN6a#dMAiE-ykm#}?(<_TW@-_A!s62#1-x7Dqwexc1bZD&t?=;$~>G*T%| +z=>{c2vW@L!0DOl<64i7ER-^`Y2iis>B(JJ0>monl6cx$sQ^L^#9kv`7dWk1U{{>Z0 +z4mppgnd}V~8)_w9gReHbpWF5yo+xsB4)ntl^C|j>3xPpUS89mH>{> +z_n_8Y{Lz|#Cqxs1h8RTAG1s-)JuQ2)Ky1-fl1`}^R7M~+gQwEVdJVUIoG7!aU|(Oc +zILwhW!eq)QL=^T>A+Iv(TI8dQIYEk37AtrNztd-sLLE8#M|M2S=m2rdCvkL$=lh1W +zwsaAU#igO9=0<$}s)(hM)vM2jx$^H`CDJ}qK7dw3VHrF3$Y68jjkh3eu>%o$qH80`Xr&U#V+uNo0Sr@0 +z(^3l!&!)Hos!$w7tCEnCkNw2N>fUD6y=KD|Q#hM*-6twn6rsEvRZel)5RK>JyeFmg +zHr)ddx5rXTkZ=cWhb}0hp#E#)L9t9F7*!6TsE9KR_*2G7f-bf +zv&Tbh^q}N}#B3YaQe@o?z9m7*&I#9&N1*lc|@Y6+{eg>aK)XwD(_XLjlH +zpvKMQ%16j|ABLbyf)kIpjKBHdb#VdV-~hnEt1%xWd2b#IbsqVPL7Ni>;))DEqu?Tq +z70oG9y$?=^AxHe1=WY(j`nziA9Yk@80fW!@E4k=39AUZUe*gX}@&v+M@t>3;CZkG# +z!M@70^0khT{7l4CiBu9WMh9?lu48I*=oK~DDU+YQ2^J2E6WrpNzuL*|nI|2%1zf3V +zEs?~KUDq$Pd5j)R41y6%o?`9BvP!mLd4(Nq6*^eo!0Tnt_pqYA3q6~gfXvyVIkV+U +zmc|GraBlP59NAB#-G~|ITx7^|MWC<&_Vdw$=*n&gCM)2VMSl(@En2Pje?qZPP$*N> +zfelt}kzW1u;6st4nk`&2>R&eTkJyfJxz4wkeY%pcQs#3lZ>dcgZRvEJ)}x(`0I +z1Vv8=f&viWro2%z@-ixuh_0AVU6j=#%0|jrMiL)D5E3e!dK+5{$1wE`HYxk8s49u_ +z`u!ebmtI`K@jewd(>~$;Nxz@7g-0!M+=av<4#gj=E}7!eqh(C&{gFWg1RA0$VA+SV +zoj52LNezR|GC$U!W96)pS0^Yf2xNh0;^z*3z#udB+mob_yLx{ONF8&J?|=n +zM^DIquaqe$b(1McJrySqi|)&D&W&97D0ZPpy*Z6n1ehTZ*I#d2#zP|+2ufP($?x^$ +z3hJkHvKcp?URVU22@1>pwuk<45%%hsc_DJ8*lwy>cWN1hm? +z>Ku3@v{BeK$Ms%$hc%-HoByW}b+FS+kIvyvisz1;T7eu(uzVHC-saj~S4%;77So}D +z{2b_FT%b5?n6_f)-t#vh3C33qiU9Ud`JsL?iD_#;nM4#Qu~L=>Ufc*la@SSHd{Ka> +zBt>9la(pc+*ANilKkIP}0~o+KJhc*VQI5b(w-NFjWWfOP5a$s-{k`VpRxkEFxWXT@ +zf+U<~fox-dMA87am|$_Iz2aWab0OArp_gsP6wDv1O52*KeKx<)=!$2Vqn)nVE0VEQ +zPzy)-=tQSS8`Teof-SA?mFjK2ii|Hu+$8P>?}PcYT737%_@C=DWQ=Ke*C|9l&7t8U +zqe&PyBuL&M-*m_aB8409S^pVC1sq@9@NsPC7M?;O#VIgGXA(2zgp>Gh$dH*e)f%8* +zY#!jS$RRW~0<`bk_PAg)d*{6i0RsHEBk@J%QYwjpn{izD>!IEqDZfqlBR8Hv?h*N( +z^1t`!mE%Gk{+99>Mkt$=yv!SY_=Llv#vR9*4R0Nw$rx3!rHEntg3aBR`rRe+627|n +zmJY!>&kW(9TZt|tPs*$u#2s1D)To8y15@%Fd#pUE0mPAOpJQ|~*a(5rlzozlcKl+8 +zxVau_>euZApK8mL35W)y%}ArOgdIdj{;vjiKS%JebvU%-ZZBf_%E@_sP_|riBK6uV +zhu?s3!m)Wa&QZ=!pv+m^KPs`G9%~z|4OPd+S5D2+tr!yv)k4c>X$2m|CplUrmF$|i +zP9FP1jYwm*=gpv&mGqcTV{)lBC?`gSYr!S-*~*u7WQ6G$QQy!I);dVR46GMR{+%;h +z1xFid%NB=PWbcGsH-abs_phdIJW@ZO=3W7*!BxvsEcMT8+aL-qnww6^5C;FgIiNbJ +zQQMfv@HY=|Vl`m$)vQ$f;U!g88QVRLauI-8n$aMD= +z;{C&S+bMxAvX9q62n>ojaEI_K+tfUDaw@7=2ddyMotC9AV`}Mne^4r1FLY<|=@(B_EXTT;Ika9mzD3y)pWHrN8{ +zgJv226{oIykO4H^OP2L#pL^)r`GGM1bOr#%3ehuqIIskdymP4LxqXv3mn3~;{ScB< +zpvVJxK)d=4TGb3D)O&`VSeb&FFY$6e0{he!fIiX^ZLusqkIeQWqq)svgbTXij;+7x +z0`kF(9pw+>D2ljF&UgMcHPV(FHHr)UX5WZwGL>AH5%WqLrR_BT+dk!0T56#D!=?Kg +zBs9F|^81kM`Ke35D!eT|RV7j%l_gevXuzt5P)R!)@^{6KEdgg!+2|`wX~W +z@BI88vuJmunv$%>P40f1LJ@{$ +zhti1io2+?y(n?duSciZJcS5Tsf9e*S_VP)b#=WT@?Zk#v$G6HoLv>UZloWO}GQqu= +z>=g}(M?qw21mR$=a=;i`zOwM=H%AEX2~$256d3|yosytXN(u(V-LWIY9@BRhZAj9T +z0WT{zoz!S@&2&$Y*eQToo2Mdx)bG2D?J(3z(0fjHa&#Rv<9>pP+=D{g3+LTu?6#+a +zeD`Wr%zv13Hfw{MdN7#8D;(drr`KJnN+mmL2qiv>9Cd?mc>^_R+f-&E?kkA6dHC)~x^##S_BlfBH~}&Lgi|J$lxu8}`IO +zi&m52n@5s76xmN^2>!fIdc+@dslkFrQH`f2o;VWd$%Hl*l*M_*D!SpoGk&fIZr{YE +zYzg*QCOO)@$4f%Yad?eSZc|}$LxPq})OklRa3+x9?ov-8)6r(PlpGw~{{X~6$+k!| +z&x02^!85njzQ;{l%F>q{s(m}|l%|Cuw9VkQOsAEd{S*6I&wq}oiMy$ +zWKC(Sy6YQPC$0JhBIqJ{3ppq(KF>%ZYN^>+JcPDh;uw*umddlj^gR)BfMSNrUZ$gO +z_e4r0g~@>}@#+5SJn3>Juq$^03(Tx$1#He}bvftnqCKLs6X0em{-5LFG^R~bu~S6h +z!-zk{4{%uf3hPJ4%PGeTV-n)bjCoR{2F8Aw^9Y&jJk@}`@@^(qA@kdZV9 +zbK>qd`B$UN9Ae6TuD+Q4}I3dnQB8kXRT} +zaNKQ`ww&x0 +zVM5D4>8Q^p3GIn30TD<_N$8NP9vb=B?ofBF}nXSe7 +z2T9bQjT=#21fQ&x=Qvwxgs~1^(Yb+QNn`zt&r$Uxqgd&;LhqH#7CISDoCM$^MSd5i +z^%Ys^J-6oidaWYj&Z+{r#-#FwfeSntIDE!00JH*%a5k($Cw#5+WabLW6g?Hv@*Ecq +zpEo(wIuWcFrnd@a?Z8-vlekw&B`_=ZADt>Ny)QpCGj$+xxz>2Odo|}t(c9u3q;AE@ +zve$-8gIzBUdeX;b(GW2Gy#7d<0|haA|3nFwmwoForyGcH0c)5Fxc;?~j#!9hHi7yh +z9+k1EKj8lM;tE}T(v2Pp^KeVcXh$@WTt$KtLm%1^miS;H;}=f~q_>-}Rh2SltI|OQ +zEmGk@+^QH35)+} +z%@aE1Um}=@!{rbZV>{>Nn4S7KOKNboXf$-!4rL~eW?`nFLuV{R1j0(rxL4VT0mA%j +zsGPv36+w`bu83JlLFBbSoR^PN0tK;m=(XzhX%^9^cj=uh)EL~}$lGYvYL9_ag}9Xv +zZfFCuHw8kVCQGa1Wl>La23Su&k9BHN8tpg2#C0a50+k+`pIV@`OWtNr$=1wq1;80}9l-1>Ln?X(YI>3(yJ0W*{`{>)u-Lc;p# +z)6gi5$~ymi2ytHjo@;IAa|Fd!5tOr3!iZV?g`vkMqaBVj&vbcxsNLj#B(x-AEz*pF +zhJ3aXls_dGT&lc=m#6DZl8&)sOGR|}0X~|?7v<#!2WrK%fqk~7Em0u+*qH>c%sL!i +z#DbdTa{BiWB_G>(_@cMUEz{Ne=iS4F@0z8~arI$u$r%t5T5E@BpHmnLTFJ%@%O@{4 +z=&YVl{2agKzYt83thP%!XucZD(!_j-<44 +zABj@&K7a>cM5MNv|8+{;_KBZkVskpM!r72BZD$Ta;10RLe`RIaIkX%Zhmw1~w +z3^8D9IAm#uHoNkKK0)1`#S-Dzu2k-YUm=i +z=L9*jJEEXygYT*@Eytc+0i+5Ee#Cz?v(b3WSH8{>ZJ{*WIxSctHZ?R&KB~8|F6zh= +z_S~j5Kz{+Cgw>d3?g|iY>|!VBnwl2B${h*F-yme4TlR2^nnK0@;u_M+`^7Pg*ubV> +zlE>Q%S32(!u~-v_q_n72856w~2qoIY0NX8Iz{t-MGWw-5_T_PFVQB84Pc8>3N8R8M +zx*b+0(BKz?+1UMg$7A>U$|hx`Wl +z<}U30H$XIf7c%ag$cLXW+`-1lG#ebDfOpY&4%M4eX_D1si1(s+)&kD9+|p-j$*ds{ +zq^S80Aip>BPOc3w&_dp*oLRdI%M&CGvjLp5zP5gixb(>HHJlUY-*Dl5L)WC?I3$5k +z;*gj3T#%33Xt_+yTj9|Qyt48yLV@N2W+If7<`rennDqvwWN?G%%r_a$nJP{;MB=M!l&kw +zE8{I}Q3u+g@nXLUq6Wqu*402-EPJ^1geBI@vWTw*g8YMTo$ELY&A;qfA9e-oy4 +z2vQpQmEccFP0rV7c_7+tnFOYG&B`wqhL#$9iXfSRYF<}C-MA{SZGz2Kh8pgxMc8#d +zs~}ATemw`|;&m`VOylb=%~4h#*H0jDS)@HRO3DZ&u`o2l4dtC*5StkZzVQU3`L+AK +zkp_}w=gk>feo$zO3@wM1YrAf|zlr{Df6#=*>`wNj&6s3QY8i00u*$NV5C`R87 +zUyeQ_+@nh3AR%8`qv=DE>DTh{Im3E5Z9cK=)X_22x-RuYuht)ORHboF)B>6}W#jP5 +z6+vqeQm6<_dCUdZVOg)n;oJvpC|$&2Oc=+tb;3fw+@5>vln(YmlfZT{s`SavlO)N0 +zP>=|L3v^!oO_gIn7Odt?eksdYIE$esch+91(fXy6WERLH?=lI(`hQ;09!y&$XgmRW +zTpcm6lKu0ilGqOXJ2e}0{EZNMyMoxPq(dKqiQ4=35_o?x&3m2+k>4&wI*DZ +zGO4(b>dKT}DG8}xBz~{4^M)h9ruRLf*5=6k;97Q_juE)vonJsPVtoo$vU2rrtip{R +zX^14MwPB}md^53-SugSZ)@1Wt%+W&>|EVP|0`{4>hqGiQC&iAWNgG^^i*O#5aCL!0 +zDcT*y_2QJ2B&o0oLlcV0W=<7%|I`h;z{Ft;PlW69!IgF3$yn}stwV6MuKtjEOj*9< +z^Z=~gim)vQ>Xu8QSER6ZRKvrb%BM!8YmS%oz8it)M8r6|0c}X%>q=wf1z+ER-l=41 +zy)tWEBd$mj7$R~$HkEYmV>a-d;aQcRt2C#&Jt}j50!bZV_IKsY`kZ!;2io!&@};)T +zIO3*(D=(3YGt%#uW~ZWG-@^|M|2@_^Go?=rJYp+3qJrRPRt8z1#(-O1_9ebR1W$8m%5i6F-thdrZzcuaCXdpm3%gm? +zeM7jod)_JrIhhu8JBkwK0B!V@FZX6+LY_n-5FC~K>q~%Kin?hxPR$%edRAD4DjXI*Tbt+?I4cAzj7jBN%O(7*zp4E=3X9N7S=7}p}1n=rGjRR_V+`p7p&dA +zLaD#HNQgmhHnx3A#ya)wdjs +zS)mDwT7jFD?XPP$I|W{GDZ6ZL{J_tY&Yt>%!!5gS{I_GMtrTvkK>9Eh99ZM|dD+}3 +zwhR@&=qv@}7`x@{ +zKd9z2rPLnnF9+|z!}bM75wFct`OGsc!M1@TWPgQ>K*Yi$8M*}dSR3seS?ayicvqHw +zWgEw4>eNkzlz<}_b-|a7G#ZJx3gVdbuxd*yIgTpcv4GYDmRQY0qI&l3rxjC}$cNan +zMq$h5fdhr-3H$Cxn80dp9GTeTzY4-(yv7Dz*ckfyeH^HUh&34qWT2IW? +zr(cB>1l~)-q{{42%yRWk*LDl5>(~mPI&PUn#$yy~FI*fEUUq_fHdf!l1Z|K0x+x4mu +zx9u?PWod2xt0g*2Bt!*idQ!Iroax*Pj%4o_ti-mdgYSI9S2gf*vEj-&ww_Dk1f#JT +zRA&UXX+wg2S%Hi4v1pjEo;IpBW?LaxzJRb+39 +zYo!Gpr#m#j{imqN`t1;;)mF#nv*}O|Ge>kBX;is7!4;qih%rY#j>>Ji%sYt0JkrB9_1dKgF +z#&{|+>;91ugQ3+yq?Fu;6%GU_oSxnNu|bK6_gp5bu1vmo!J{TOoena4%bIdqrutwM +zNYGAz69g)v%pd-9B1@u&Cje!Lh^LHxSc(nZ_)({D#sP^pzZ4rXo4#{@ASR14 +zp-|(OwuUI5HZb~0m5~#B2;dUdy(IZg+mXw)*XWxL_%K->JG}{ZBrOXSO7Mna!BvQr +zm9&{%b7uLPNM_7hiX2QE&lx|BhS!o?&8}}C^$4E2YV8zHRn3&mA>UzJK`MYE7bVBs +zDS4I^8uHYr8bZ#oUiVpmW|E<13t~lg@c5h{*toySW(!tdvd_fu0g?YhoOl*OgQDX> +z?>Fg=1r2y9g_0h9mQ5W)SXjkd93<=5crf*t6q-gS0IAm-=eEo^0xA$}Mcv1bKTJ)* +z%*@bh+w2&S5UFMgNFDkMJY*Q~#a)vW;V^D815c8>+UnCC>p!34vEdevjLm#dy?*$M +znq9Tuaq(pk{S=v3iHJA$%vuB**{Bo`G*R5;=spW08Xd1Y#%N?h3#7;=$L{PC{rZ8# +zTVGE-eQ3wEDVJs&xp#A7cl=ZcS!|K{ulewk&0!#{lod^;^}*MpoOaa8l5XOz>T|hK +zc)=dad^?2Yh}01Tbl9wiU_%UJilzbP#`_LrRYeILxLm96F9s^sr@o~UoB6`9CF1aW +zX*i!AFi3m|`cx_g_>q?_pK9MxGr?$8E#Os{klnZgz@WM4LGrI065;)R25j5ht@T}h +zf4@(WZqU*L0>Gqt$Xt$tJj4{?ATe=vxiE+OV_4Uv#lZE8UnBV7pa~Ru9;wPX?ly_D +zk7--pxl)rGga?(b&#hP*Pzd5G443vv+tVfXvV%I6OcO5~&M_~SnbJtoU)A*6AJL2q +zS{)zlMO{jLgnl-Mh(?p4+id{VK@p7 +zW&&6Qg*jtXn*JX6bFg>dk_gu9Iig8LktibV3$nMoTL5~^9rm3;|!fUeiLh{n~+Mo_SVkc0m|C~swlGpz9umCpF}UY31wNmnUWYW +z7X&QPjO6C;s)5ZI%iOz*{rTQ13aL|~krqD+QR3{ED(M)-AD9*k +z*Y)4siXK|TAn7tah4jqY}wbia{z8nDdkp=(oRz!pj5DZa*{) +zn-`YcNq(OCcw)uG0z%%POUFx!^6@Des-)Btsu|I)Ov}TXLZgktj>t8?dO|}>3LKJX +zy}ZQ1hPcQNsk@OK?e|t3yh>5NG}Sn!P{VG@ii^I|DN?!H!b_Ab`sa7u$`LUjs$MHW +zw;1O}F(o=1+k7#wk@dres@?1R&jnPGb5fYl +zdTQkF!_AH$fF~u^EULO~6SC53LGX_Oi2b&~NB!Ox_2DfZqb7um1EN_Zki~>%7?Ie+ +z{@$?B`Q=|zpwZ16rvX}+c?5(bJAS4DvlD-S!%Yv1dW#W;QKY{kCrtDk0{MVW#LNNJ +zs-k1_xaL+8PmO^S3_9Q`@;p`=@HBy{6T0f^vo-%D({3fbtYt^8vlg&`!(ce=pSXLq@^NEixZ2+Xo`X +z>h^wrEaHuRO%-8B+U|rg>O~XEW=y@C;!!=b{zmRpo8Q{(TVC9I_b4|5F?vnWE38b| +z!`}-B;iy6nL19dUZPi@oXl9Y&Buf|#Hg`N(#06M+asi;_r-4g2^8)F}$Lea?erX_` +zR&G7bBEeXD;9JEsN4R3}#KVKvO3+sY>+&vn$BKYb_RnY5b7E{LsS#bNlS +zd!fX;Vb&q2MXo;W%ZZt%ZPfA1YwIeqR4GoxqTy#G+_?5qwW +zxZ205iil%1x_mFYJYENej!SE*8o^1@e8uA0!8vP}9T3LROYH~eTUDaA_h +z!E7x!mV~e$UcA^&Fb5nBhP+mu5g4eWd4f>5q3fqnq4BrgZafgS?W#c~Y9CzFBMPoC +zv#$rZJ%ep3`3yAyZst!PP}vNtGbrtR1MG~229&|h5V^FhDllGZ@Ve}iVcszC(NnQF +z5P#lE^KiUkElVWzG^VR|{K5~^rVWkQ5h*qMI_}$Q+Lfy04R3#nzwN$rv|gp(S!o|$ +z_{{?zJm*G&dY`{Os-MrH)>J +za4j1w1)W3L*n39)9uy7W>i`I8Ny5rxJjNVvWXmPVb?S{$t529jG#@RyzBPkTEO4QG +z=(>f6Jk)#-nHLSuiT`U@zC$)5Df1BCy%``kwMB7qgPEX4(ry@Gx25{{<~T5qyO%1}aMXO!o8Wdw_T?nP7tLrhcr-FM;T0OFT4 +zZawYH#n8LvpN-JzK){%$!oM2L56kGN**n$}P+*YNH;vFwBJ=yT|_ +z{HrA4WCFO#C!u{hg;|D?z7Z_xYU?5x64tu5&Q;!Gg!PrL<)vHHX5$y +zT~9gcLoDF^auAtJw@vi@VfR4v?1bq9rr+g2Ba!2m9w+78Cmk$YVIflrv5;Yq-;L-Q +zwuw&njjPgQgs&U&TueFZmJn)yt}EiP6{m4kw +zVx(DK{zVbhq`ru~AL%6lh9Lj^L=k1ShrbX@9ob99G4t*))%si6VcdZ439anM6rP+a +z9DW(KF6FR;&hvtuN4*81jl$!I!HdTe#J3Fl8j&RTszP+wwaAO4^=s9`nvfdDAKoe3 +z@#VsfS?lo%vOFSE&;oGh=sjBY*{FBq?i8nuAt>kt3jIFmr$>LnY8S032Iie<5TR#R +z=g#cI2v_?j7dfh(^Kj}oO +zH@7j`>cB}t;ES1bA3^9{Q=mWSV9*TCDT{%nz1P8%U`^afhikPF-lON`d|Wa0^-eU96A +z=4CFF@}FDx6X^x$-w0jVfUkn!kW8Z2kI_ZUKTSj~js7faUiEGYQ7Po+OA>4RI%GA# +zUd((>R0a;vra94i?JJD$COkXj!l2%N<-~_#v7a)R289;+iOa-rG;6Mne!UU2%6HYO +z@UHRZeEX1zTVfRQ89?ysM?LELPZJTC3c|IpF$bf^G-9i++|->tF=EK8e|p+aO+uH) +zoy +zecTaK+=@#9hhNOaZ(H{F!s(2C_xL7Vs=9N;ZYN6IGLkJ~S0eU{@&s0Hw|-JKfW|HAoY{_G +zNb*xcp{j0gQDOeYitIy|4{_Dw!(-1TfUa_U7Ys;W%tu4{1~7`Ccg}sO&a(4W(U!PL +z<&Sfkkw^05aZDurt!^E`n~al_HRuKQ00G3# +z>?f@OL%k1v(4lF<&n=pw{5(6mhXG7AUqv}* +zT+e>)I*_R&hNCSKmGng@_Ni{`Pd71b6QMROUPNRzC=LR!%sd7gt0*_sFS<4HrzM1g +zr +z)-5;4`6ObFdfG(ps~N7kP*~FY%4wu<*k0O(vmTqFI%w5CkJga-ri +zM49}&f|z8=872Q#6&oRU?b4#x(uPQ;zSYKlw0SeUd>A&M2l*~6i3%}yE?F)$f{}8Z +z)<=|V3)-S$Q(@2lmctyMzkOyh^f`|ZJ91*1VGkvb +zlgwzQ(tflp_gEtDskZma1e+HVIzpMoptSjp4lWgoLnF@zTaX5rrfq@}ON>sSh2~Gr +z-3h?Xw)?GNX(*l*RwDA(%c8$6KIIl$_)+qRR&Xk**9ZQHhOJ85h+X>7K!ZQIGZ+WWcJ^R9Q>*7yC2d7g8Q +zW9&ln{MtsQEdGiX5zuhAcvbOEz20J5PvN)Ul2GssGH0WQhV4E}Hn9&eLMWUdW*x5k +z@KhuzNtzz)LZHvwYeeW0>?yTY0o|fvRrO8RTvj~S7|)e%r7tf~czri`ZJlmBt-&U5 +z>JzLwl6e!4{` +z4`=zR10uy*0vTinT3O#2@J8g)_*v6MeyXVlqK~Oj?kw4G8niqn%KHHGJ}5N-ra<}O +z#K^h{VKhi!vY=2ALjCCa)tTZ%Kc3@v)4h+Gg(P;^$`+n}7EB!{@Aj0h3l(s8=`adK +z?S0S1k?KkjenxghRak0>A+-L8h$i~Guw>}7mBK~rUhRDR_LhhFevv=LV)MK#Fx;QH&Y8XgQ%DOy9|s}6_-qYvh79T8iiXmp+2nhRL9GHeK8F5a-@4k;OE +z#5T-kz$c!Oi9xR7U4Z3fv1zsBbRRR75Jyt*!lyH;io26IF~wL@S5#{QXIv46zLC)NtuM0HcN)r#i}esnSP +zE46ax)r$PFW1T5K{krkSAkl;F$TM-CVf>f~Cl_@*?&36QA`BwuD5K9OA+RdORTu`^cqTL*kj1Tn;yfi2K +zxRPHd*w8$$?Xv^YUfts?HQ7tR!dGK$i~Ca@J4(p`1E?7WkquyY+Dcl=2DD`CKVPnY +z2+RdE-lw5>t%#zpQM$ADDJ +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 +z_gT5Z4>ID!=hFmB{Ql)iQgjS2>>y2 +zkqFHV03H7kBY_Wk!4=FD!(nv?LW1VT7Ho=1b}!>Z5OftH(l|}% +zQ)eez?U+t9X!spUZdWWOkbJWYVB(QJ_+Dn`IE>TUqH-fxgDj~-Y=PoE5OD_`Qkn&r +ztunq>s(XF-+4JaH>lI)|4rZpa{>O~0oL-m6*P?TD>|;^2;M6dZ;2<63N&SQavpY3` +zucWnzGT2dJ@B_j?NQqR^F1`Bep +z_&ScPN*jROyHjMcny0WsO*`P%S90qZ({-Js@!sw?F9yKWWLlqiz7RlEZ=HBjL`v5U +z-|0T_$;&JdUSgslRDDJ?kZ6bB{A4o2@uKPHF{-vE|6cxZY%_w5SG2bG-6i?T1mqru +z0yrPWusaBNjtrq@ohrUN%jl(VG&&iwpbOc5)kh~Rh0i=2=IzU?E +zbjGP@$!IGIZ5B6PYbLKf3|`V2saD^>R5+F*Zu3QcM2*UF4Fhc?w!R9MxJAylkt?!^ +zw+!xL`(vCg`F0(bY;-FcS&gMB3?u79tQub +zZ0hi~@)JZtQv-KvKX)cdQ;8(QG#+&?%{7>cB~-*^(wh-TQ2{vr#dQ(uXDcfz>}Vh@ +zkqcD3BR|E{NXvXABRJ1#$?`&84K}e_Mo(DTeypQ;Hx>|}fDAd{^d +z>3IEGun-nMdJi<(uOe@y7JF@0adU#3Pd?*HASblegsv4=E+C;}yjgwlI7Gv62KjN& +z`?NQ!EG>yobtnGGF)EPzKa8Y5Fo6~fX_k1TEyX{KBs`KyhjFX#(TZ-WbNOFJa?5R0 +z=nyl6gcZTA8W+2&_S|nlkbOTP;j=a1lJwydWEFP +z#5pXhzrt@cokIy)FWMXe%xPo;C5GXvz8y{{@})7z!nmK0_E20sDUMMy>CGse0xR9mb?X8NxZ!?(UU8h_HO1-_9wvuPkx{? +z?C=&cDMicPFDToRh?}wo?wu2n=FkgTbrZCE1HdfgNOL1^6lP9WvH&PM!75X_{=>eK +zZJWiO#r;>Yxffzl%x!HK$F3brl7mspt2R$%6}BJ5t=ibZceimbHpGw~1MHKKE}+El +zKfO|1yGIp@?36FMrK;|-vK~I;7cs!$Bh92-4MsgmeN3rK`AVg6b@H?#GUX{j1A~f> +zt0KIUjV`Vi0FM!m!G4=$6QTq`)R6;}H^z==(nOP`Bzp=-XoK%}{6>*vhvO=Jp@1GB +zR4g@o>=BX~ja@cYtm%M?U<8HwT=eRFASlN0`pz&Q3q8MUjkS0K+SHPzh?HI2TS9F{ +zLATTw$?BYekbX-Cf8Q{a>bq|PToDdN^=`!qKRa*dP{ +z+_O;R<(p0pTT@~Sdk}?&WW*a93P=K-raS}h4*1Vxul$G)+d)?k#Rs;lQn_o8;Zg_2 +zkMy1E1b6Jgok348elv5u!G%M%3G2;0!IKaFkBs%Y&aW{J5+@kHfZeTu#$u>1RK^2D +zamzZ)*CKLHb*kQ!88I0R=2V?zc^X*JgWBpcJ(*}EwY53W))u8d$$!bZ%xZ}%TatcW +zEGmBS?=+dH5|J%kduR<7lf6d=f9J5^*3CU{#A5mB{jhjyPcOD;vuq^}l;rz8F*f8iIvIq1KFpK0?ASPYcl&`qy+dV<6cu}Z+-_RVMnqP +zVm5Uj?loM{lgE;t)I8aG()icQf)n5?sk$Bt#si@{EJPDengpNP3kdOFDs8hMC +z#0V~k%4a-mTCy6`FLSj^mxL^@Y=)BJsK>(}5F3zSiA3@4oC4TsWD2EINr)L+?~@axPLvYWWt;SqIc0?0)syk4ipB!qP+p${T8Far5Gm8V($x{@Z(7G#a83c{K3m(^y#yDS1}u;E|Som_uB +zuZVBFdW}UOnOf{OUYO;vDI=NmA*oxD#xDz)Wi^;7*|HEOk0OTjkLZcSvm(-Qq1=uO +zqSxTN();XrMDKq8N@B8;XA(dznkc?`L*jKX9j+RqzBYJP8U+%=; +zMSc@wp>{Pj+cV4bY?Xu##T?cUCgv +zi0}@;N@7+hu^;7U|6T~9OYc-fjLqbYpJN9$(CYl1&9A)eBU*`-`GemCWP_Kp$$NW` +zcmpdXT@X~{tu|P*ZFyML^OlWCNFo{^@ke_JveA0wS}7;C=ky#aZEKWJy{AT13b8F} +zDAl&9diRjGF%b?~On(gPr}K57qk*W2n6IxAQwv;E<1f5aJ}kjPET#+)iC^DZd&Rh3 +z46otbTf2Cw6tcJCN-E~w@DwY!BahEgbSD;c3!{d2l`X*RRJBnJU$w@k`{TfmpF4e` +z^)O4^ls0gk=a(9>rqvL2iQn9YRcAZ#ciwG}B5Aw+ktNr6(g*?L!PO^fxsZGupYE1Z +zne4e}oYDDS!B32bwG~Y0!59bDk}V6EYtfiJiagIxP+{7&a_xZ-%$K3X!T;Klf&Z~3 +zPyVqb0reUuQ(?bB`ihNwTS|^2PoXG^7uApl10F%vKf2^Y?CprllOzuvlz0Hx;^9dz +z)cJpP$>!UjCwrDLhCuVlI|W*WC>#;Y>Ta29-Z0e^okN{kAINK0=j@+ise^Gy? +zcWhbginfQ5k>zyDpSk0uwHiH8`Gz*XSiP{#itIjUfIsv-#hB4orDqnm@U&Nu=);{_ +z+NM?f7qdt6P!sz%S86v_spPO0Oo7SPy$jeh!17<4&({kT){PO#91y +zPEfo##IhFzgGenaq1B{K^CJZD2x~0k16x4IRQ2yqr*V9dKH6m2nW#pLOb954l+k-f-bK-Y?)Ay9IqB~{`Dap-#O +z>I%?5=rCtzf)8pPqKRi0#p`wBMG&MIws$SB2EY +zwt=7BYveD~I9jw6ZboJ`?RziHS?U+V&&%2a@K2m4|<;xBln +zmvnPQF;UhhoSD*lBGkvK4Ty?Az8Pg#1OAvplv!ZBQdGf+5fa8kTYpacRMg@h^-7N^ +zyLJ55&cE^W>qR2^meDJbMzcYV*B~r?Zsr9J9A5qwJB}gCN@FHYg9~Z~M<6A*+@B;U +zi-Ty-&hxJ_dH!Ez5+;Gp7~h?YRF(TqfJTn=UU!bo`BUguT$O*o#ii#K|C&+h27CA5 +zfkgVDvNTF0o)AT8D?I60lLHwSm$WlV1y`}N=K1U8C9jSEpintEQv7oVte9?xh +z+$bbhh?%#FyRIDV{;xJU{r}Y_but0kr0id95`DlK)23_mAwYI5mbPP~D6SeOGF4q1 +zfnvn22*6E_VEl)h6zoL_*R%w=f9kQO_yuW&Iwu2{wRi6*VY7&YuTN=nWglEpGN)Nf +z-bW?n#WJR4je)K~Ivkv=anWG+zJ9BiD+H7N94({nbu=g|A~31vD#oC%>Xa8)ZE0nV +zq`2`s@%VA5SB8bI%6K!=sC@~##K4E8gBhw(R%;nnQ8D6}133TiT<~Uwp1wJfk3oyz +zceDnBNEAG=ldGORj<+EWYpx!nty1bX`|HYAJJE5noT>7+k6@@fA +zVvo^$#7th@Jllz#)^tgH)poY!FVfi)K?(A(C!mz0gwQyaqvJh>bcDm|B)q+CQSL5M&!xunU_88-GFNg{MkVG+(@Tx5#h7hm+=;h#}g}hX}S<_ +z>Ki6?-`3i2qP2^ZCrEs)qjLa)fHl#c;oI;4b!Cs(Uem1fCW!{o8;K)?_e#N})v6{> +z&GtiBUC7H8+iIMXnsca;E^N=M-vgCKU+*CV12=2&s8qlmw0Vl{nLL)UzkEM%X_JJU +z!up8c*~#%=bF%S|ImzO&3os`)&;Kze>GgRz_UrH54se?}x-fuw=M-QEL_#S7k_JZP +z>C~AZY!INSMdl>L6~ElEnV(%${mOVpzU9o>dc;ILQUlUz22D#Sz4WY;+MVX0Yn_ty +z4H7=p(^lOoC0{&c8+I4SG@Wdga(50kS-GTCFpBqOmYp6ysCUx96gM@c9dWUS$Kr79eYxYH@U*V +zC0H$KV(3|)`%rn8=*2CNYl%C>5=1hro}@=E$6;z!tUb>VKllthNBeUV!Tnw&Yjete +zU=+gvZS^)3iOa4~UzO?X%ybXTp5GKLAWd=D0CVw|5A}=<5Z9=Ng1w9V-s&RraTtv< +zg&iRuHjZ^)83Zg@OoX1-Vspdq90)XQen9aadZ?!kkq#7RGAlZyUV=*hJ&FHp+G*KI +zgeaV7%tJ%x`B4%v$r@I2mggOcDY+Wqbej0(Klr2;YajLh#3z~mUwqP)LeA+q`%-g0 +z5o%c$Pvo~I++g7-G+M>L@qhTqfPeW(4aGj}eRmefX-NbE^1SMyM)NiEI|siz#|;bG +z#=7stG6E*&@_Njh&^f +z&-6>v7?^u^8H~D>YDe|!IqTtyqtQisq?l!e5gxZHQwjK*Mz>?4eR57$wVmft#bc@E +z!nh&f5H(bAm1WQYXPS;V3>3OYn9+FeM7O^c$_y$Oy+xn>Dqw7)cAO(9`S$DFK=m`E +z0qY-tGV{fq=m1aNFaf^eX1mH!V{eST3c+lFlv)e`P~J<*;3H^Pz7jOQqjdZT7EuyM +z;+rB2(s8WMBh*w*Eu5t&(FS`8Nemk^Q`@KD?etm;jQD=cR7Pj#09x7#TJBS^$3b?p +z<>v)W$ZL|bt`?i013CTM$Tip{sC2psQ(Aab>}PDfAszS%nWp1!qPCM~5jD4K^QeP9 +z?Okwt1vW%~R8wFl7)hOlhapAL+b|WJ7t`oms{on*2$ay}+G>9V%A{&#z{cx*`b8*B +zD4hbKOLZLG#?|O1Z=k0PtQnikN9H{)zAq@&cR_6ar#}_}f1x;3+aer?C?v}LN_>VW +zk);VZeS(gBP(R4CGa%l%>~SrWMFNl(lTcPMOpf#sl+2em@R{ +z2kg$V;k>w`#InCB`Cgwhr&!+qm!M?&Uj(JpUxG5}V?<})g#@u +zeH<58!3t(XaQBxE49SG$G8wI-7jcRNrc(g#K`Wfp53o&eRV7C@6JMRw` +z-;+n(ubx*}!b9>nv@B}CI!WnSy_rxUbs%{bcaZIFk4=3B6)wIgop*HJdQjY1blMz) +za~fY5(T;4c_+#Ia8FdDJ2dT(b2U& +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 +z`TVwFna>m&Era=j$y9)t~ik_lYR%b|cnu?Lh6 +zmGDcg5$*OsdrWi?;Odv)gfq`5rjy*KGBS`pBAn+`?bC@}nci}-eT^cB%AP-HGDpOZ +zOpu?jPwH>l@YoI5r2?t=%Kd|Y2%%%&fZ^Un4Gew{q>gI_gY@c81q!4%8pDF8asgqa +z^@9LQ04U$3TF)?>M+3LO6=v2T*qFEF@!I9*8F)*3Qu2oS|B>rj=-0m++iBJw;DNV33uLAzCl=+eWvXnmnEG1fk+#i;b +z5+Z%wtkv$^e`xXH;~;_xS<7mR9YYXbL@7{30Absay`s9?rQs^}~B8n%UOl?i-9uXPKu&Xy#n}p3M +zwO;h +zJ^?l~`aYr@`E{8W%x9zKWo2}G2Zy9;lx0Dr^I;aVcR|C51wAp*Z@yo|Q-RB}m5^nJ +zohSPJ27^RByoD&7(z$LP10yDdoQs}hfLw!@h7LennmpGv%ci{Ul1fGxWw{_>3 +z7L318dwP&hp_C9tiJ;$tfsayeMgCd@+5~IO$a1dV*G>EZS<0yO75+P~2nH%VQs~)(Kj!#FIa= +z(KzL;n+|aY(^$9cyBeNG&~|td +z&ZwRtCnXb;CmwcixFWje`dO06BBQe!xP~VmO2U^;b)Kvd)3qcN@qOZm!N(`<wo*))hujvre4D5ngNN&B_RryBR{ +zX#RYs=BESHnq)HPM83iWZdV2v#^``nQ$+Qa;6lvRD*d2+y0y13QdHW{8k@W)$ke~S +z`P{J!|3_@JH~AJbd*T72+W*7XKeh+5t_$0CY}>Z2j;)TJbc~K|+h)hM +zZQHhOCmrWWk1@wwbFTH??+>VNRa@1y)w!QX3F7I`gDBxC; +zXSM1s`tZ79U%~}y6QEIGQ-YO;h)V}4jdT-a1m+|%%9EdB_A0ehWqJ;Q1%3fc=}gWt +z5>MkdW0@GWqxzX_ZxXLDRJq_T5&uw|2x0IStjz1iJw+%nW(svq1}Ym0uoxi=mP1i# +zwD^eYKgI!|&}30u6Y>xK0gkG=s*s;@58qKIRvjM-lll;cJHCJ>B-<>v;L$9LwR`mem=1`uLG_*3LIlN>3cA=UnBrUDnKB` +z>rE_SSB)XMf1slVd)*9h+K}k)LJLEs<(;TWNPXMkHJVXPlJ=FU1nlV=LHuCp6+odH +zJiXCJ`!NB%3K=4iItUF);K|D;za;Peq2nFPD5O1hf2E+isHQb;7oX`&3ddeINftfi +zg=WBv9Jj2`-aLdBwE}ZQvF_aX1{Tj;8O}!QD}qeR~&Y+g&5Fnu2PP +z20)0{f+qnYNfWZqr&y}ALODD@T~VB;j$6mJ%Vt$>#i#!w6p7On*x%9(a9T#qM<7@G +zxcVcQ$(~0z?W=w&Hjz<8Mw|&H*mwSvu%0KO?Q-BPC9`V?@sJ$Z>l^Cqj?syMOp#XR +zU8flYv^EEd$MD&hd!0NnEK{~YQe?S~(nuMaApdFUc3;apD*wZDhZI&WEe +z!9#f%V=+}9773H`2A7Yzn-3h#XZRkY1qAyt8lTY;+w%@fiTf3Eu%Fdc!^g4-Y{~0j +zZZgYFJIshm6Aw{Mla{#OcTVuy=ahxiUkjv^Gc4;>SwxJZr!E7EGIsa5vTLT8H1N!8 +zBwZ%@cB4A<2XZscDOobx1$lw|Px&Qoc&)ZIU>KO=vTeM^5;K!hma<+~yatB7qyArd +zGRpA9Hm{ajQS3Wa?u0s^z|WgW#|xduYP-(f^3|2ka^^^U_drC5#b2kc+?lcay`b)= +zf7!|Lp7I~~HZ{!$XKrQUZPCFA?t;qxbR4<_eHs|=tKx?8#fwB#OlVSp^_T&q+$28U +z2_Z9NlWSQoCYjLc796mL;FK%&sX%;rrRWD5R&L3p_nw&;zayfoQ#DY;nGzMy@%TyM +zG~ybM5iq2{{8s8iw>YtMaVRsD`v|86s>ZB--~)dmY@W7n{@YzV5mdFE?J?)zzIzrY+{&hLl!--$fiJ +z<3wfx6W)`HGd1Z57>N<@XX@z7C6l-wM& +zD1i6SBkhVELZL>n%Nia2n!YhE-h4`D+|C2J@nJ)v3=d?u5kQ*KlZ8$BxK=;JlQG0e +ztURiz5T9EIIsc1Gax_>~VwXR~sO8uRX3s(qC8i_~LW{Ah;}oN5mXHKiA*T>=eCols +z#CeSQ$EP_Ksx?b=&Pb|Qtyyl&2f5b7Ss+H$ko)kbV{%ObbWYCEg0~eWt!7UjG#v9p +zKo7@<>xc2oa!9#|B=U%?Um?7*Enm2W9We7@3a=w`4dDM; +z%meOucH%3XtOh0d?901n8*Be6R8n`3bX3x;Eg5`klDniUR+@SAdus%XQG}zs0zg2WtGe%Nn!EkQMfnY_{Mi|#YB#e +z^{IX7bEz+P*<3+?h8lE%XvSCY&6h&m8wQgE&I|U``ZtedXJFC>3Im}Qf}+HWecGE^ +zI5c>2V#S)cd_S#U-E}JugAA|M_pV1yWb>SR-wcdA+C*D~O%W-)6z$%+r5m7-Qno`r +zyt%-TZVB#pxnNpoiq6mm7F`+v%USv-0&Uywc9iKJFoyG{R}LL`;P1bQJFLQ38QpUM +z6LF^*@s?Py*)tc2$jP+~5`$t`lM0q +zMimUE8O_J{Y$d&DM0HjWjw8`vO1lu^(8J@yL$aS`l#Mxiq4*g}l|AY$UYRAeluHxd +zkPS1E&CeszCr+o{%Xl~QHydQ{{zpiDpYHlkA!!%i5Dd+D%dszQU~SZFQl4l*g1W%l +z0n6#{osh=e0GY(?O95&C7=ux>)njOuw621f#wI`Ly<<4&S857vw*%!pwKc8-M@EOE +z5U=Dt){+HbRHLIL;=EV|tiW;nJo%%r7?5RiY-7KzW=~iIx~4#{rnJRRM-mLWV~$!# +zePuvwSEq0^d5Y5Pf&+^waz5BZx=(B5&eX~$3JVb&i7V3N!eW0qPUyR#eGV*V`nxFB +z-#9W%Dwe$!*q{O%F}iuO=1e?2ha33VXy9OpnWPt4V%8OvI!&-tYjWNRD9|G@N5wd@ +z;oD#>UBEK$^TZ{^>`OPC!?hwc9BFYoy6PdcAyO4e3M=YJGR+>8RAFXaabdwH%4fp{ +zVZhqv4G#){j5oTzU%JHrvBU<_I#R?Yb;P2?xSO$&M$Ceg@2`M`dI-|PK@JqwmI{!< +zg&wC)g@r+LxD{2b{DNObu7!TPDcc(AnQM$Kw~>Ac6|-Z^!IIaK!a|8yg1fIIpDEo6 +z$Hat(f8oeR0*<%`P-h{ZQ6Q!svBnCO07_2nG|Ts20rZ2vAVN&U5pH+7>F@WBDf;zR +zj$p!ii}AV#u>w(X>RUT1&FC-JAASI5=M+0;O_5}D+PcB8D>Y~|S=h24(#dQ*KAHAM +zAyxW^Biz^KL7jh@NKl|ZCNdiYg6sdci45aqgleQ^q-?Syint%NL&hyE241Tbxi5~O +z*sB$Izm55nb*%=JkWTyKA$=VGOHRNq>7JL^n&Lic4*7GT^Iqnbj*Pm1MO`c? +zBP@s{I)7nQ?1ar9uwSQ~#BIFfn7gab<^*-L?;QK(6=FE3f*3Hxob +zZPG}X|G}SX0Yr(Ez(-{|tX^Q-!>pAPh4aX15DU;Xxa|u~k<9He3~^mo3LgtM-b(gR +z%@X)83Mu)ALK47!QAix~L&i7#bbgo$j0^*E28ryNBbfwWwY=3{fQ&sh3=(L*a-067 +zxY(5*mf9WsBzuxrO5!}9BGkSrmQ{XxEcnBOUrTErurg}D>6bCb7Kc-zH4RV$%&+P$ +z?;=VHw6rBUa7EGFj_t{H;9v3N1pb6AVf+w)v>`+Pc96Z0-(UXU4zhXrv1t9;OZq4$ +zqWD25f|BTFBGmR-u%BBU7Ed*r>%^FSKZ#l@*6TyQi*}zN8l&hrn~Kn|8h4QVP$CM; +zGcOikP_nDV^b_9IQhqvnywMOnDc!{BXQBR!fn?jvLrY>YWFQhF2?lFA>r9;8IM3!P +zmFrQa?oC?2%CLc)NGyg(rgW5_#IF?>5nzB+H81RMdeFhe^;)DB9Nw&!E{37S9^U-g +zzI*#AqUM>qzBDA* +zEKUaH4}tv2@DG9Xdp^S~OPh)g@ipJyde=DhiEWDb)i6Agu=bI3JzUb6o6TpkF=+Bi +za}>q*dgjQHoOjlE&Pw7V(WN9I8i)$>1t3L_bdaPJptg-cp-PR%&^SZN69?AnlA3A- +zrZ$TDIaMQQL9UMgq2F@&wejn|{9`$FFSaBSKJD|kxq4P{dfNaDIIKy%SalsG6eYg?GT+6ToT1y{71*c^WByI(=zUEmp?c{ +z-J8J?DQ7@z&84E!MCJSX^XLuR=mg)YoF}-xxEAcTDE37Rg2580IvefZ`mwtE0mXVu +zFg_lnw^}!WZo7A_C1NAd&hCk-%Ci^0cQsuwK9VPP3}p>m$i{;-UN +zd-$?=63Ddel7XKqS$8c05bW0#+G)$ct`3e7kYi^S3 +zT_2K@+U@}Z*ovkU|6|CMAV~F$GSqK1#uy*G2-K>b-)h@d)1ql4_bM1 +zM>{Yj8Cfz)WwGS50fL#cwLUkg*<+yn$oahPHt(V=albz@?T7-@HJ-~~IVY%3i#rV< +z(%k|;;JL^WdD3e0p5MNEQQ(MvQ2Eun{#=Po(LpPVwv0De@sG*R^ +ztpl~kTjB9x2rxg%SOmf8(HefB$`#eGZlfd6#B$JPS&PAnPHHA1)fX}mz4s>-(uJV= +zU>JcVszu^iY%F9H1+^7vUE!%SN5j#pQvO(51(a9nR=ZMZ6^UDfUwq&)lZfda=SvA} +z*{wBfl^%^iG4Q&}+zNc6;GAi*Z{Wu0I$rY?bXz>DKFZFKpCn`GMoM +zFs5GtW1Gex4awg3!dgh#S9(6mM#269lZc)G%}n*}_O6Yo=EM1DkLQ{VhEP5tMQerR +z_qZj?Y*eQjH}IyVHN5#b$&*0|6)RtG0#)?adE1Dut|9q&_l856y(bNIDPZ|y@%HZ8 +zK){Xnt5~@tqQ0I$2L6Nfk!J92!QU!m9KnKhVvTU~DyVXJ)}5jY5IwSo&I^(Zr^5a> +z^^|{Bx;Hng$#)!CC|uEL0YT6dX03%3C_!j@Hd6gFDPyre_7Pxa)bS&M`X~RLl{gS$ +z>;6wa$&gM`@%a7PF+J~6xT0jTn8W+m-5g|ME}Wo}4X{AX70M;z)A=&%(WL8UX1D_O +zG3_bdlKnz1kAh4z?gD{Q@bE5P6u?U;m+^~H`BPkg0VhP>x*DDvAUm_ +zZt*&*8EsCTojn@CyxE~%JaJUo!arugpj}|Wa3|B}FtWffzzU6VabiT#UmF_)VTX2oFntSVlalQyW(I5tDs!mgdBL(Ao}sAxVD?bOa9PDR%7IU)5o5@TFR?{|E7;U +z|Io(*#Q&g=M}N`Bu$F)5qonaa^ie_|Vd~;8%Z1&@_W#Pq{@G#KFZtLYmmCXDprHSH +zvxM)B^4cuU!D@1-tBXT2Irg#=BPqjzzRNk2m!!C#UJr-s=$>{0ee&pT#exWD_sHyj +ziH<;_ts`&~08`MD6OHXz{xnKztRUC&^G=nkd5FZ-AFYtLFj;Yb{pCDWFBnX4R&hGK +zm0h+B(b7W`+&ZoEa&^A2IB_E$Re9)126p*di@=H|T31^G+hPdXPack4sWm@7Z_g4C +zZWOQ7^=HMG!C)f(MFln!?wTbNUyZiWf|W2YYOC3#J3Yk=-^eh{6|*N<5a`dfuDbnj +zzy~PS5-4uu7rkLewKKh>k4u`tY-!2bw3cJeelBf9Y{HGZXo+<&@44^FdDW_>A_%(( +zB^K#dW9QTjpb724D4r0)pp8Z;R|ID(HC`bY~o!{WqG&%h-u16IwY3BjfS!BB|D~fdswh~Qn=&=V*T9h +z%zPj!Nvr8X?tn@SGjC)RIDFI+9~PP~;}a)3G7H-zg~lGxI6e|eF2ALM_~2e~b3I*i +z#IUG>eTA1H-Fi|a;ISEAf%1=ZJm?95KBc<}SdCrPaWzg7rADDCAqCsX!oyFQAbHWX +z^lJ^(i*MJaE4jeR1%@er#fz%0PtZ7P5auv4trB$&pU8EFT_wfnTkm}MO=1>oFW$nG +zRRd`bufAA9QT#l1c?>#kcBxpcY#9kFIQlK?dGqt_3?;7@N)*p6>C6-0^#DBY?5lBk +zuY4h=yg*kuM^llW7X`eE;VoJzjG9~Q|C%I6K#781bRM4Vz8q{&ap4eViBhG(PhWi6 +zf|h~hM4e4-2wmO+{_}DCp7y$VaDFEc#)$q?#{21S=15I(yzV2~HXKd@79Q%7#$udU +zldIt|3%^gv;KFyfW6)F=lWV5h=*%$=;P!lc7tKfYo`vtm?OT@dQXZs)VFT)E#CL0= +zdApfQ)ELP8jLYeU6UnwoyxY39qrh`nQU0>X(O-nX`$k3zjEDJ!935&IT}JwN_FET2 +zTbl~GMIs5KJmXU;)~JUQ(tZ$?=kPQ|G#KHc;_j^^3Eg(=w1=Wr)4vK9MoySJ%n@Ar +zY8WNL>4yq^?Prw1yiKAeE)0i=2H3$lYfB^pnx%$4^axzdz+u{Mvfjmr2 +zk1VXJ2k~#-NZs%^Z&doj8y)}Vjhuj;x3;7V{^|VlW#JTV2yIJ2>vleR9-DFyIBcA} +zXbvOEx+grLK$46W^wCsopJRx;Th!u~@Xe&4Vs+=MK;xM8?yozjWw17#J(sd6+PBq3 +zhCNxGv*t%9m7tWs04~+%6mjuWVd)mO$2z+wPS5h@5J%~aKDY!*2D(P2h^o{=ejmi< +z7i1UzV;hfgrqjD6PIKMP4lDhW)#S<-wf&}+c~uTlB@ieNE$+2Iu>loZTZkDWRU^^& +zeZ}L-O$tP&x>#yf4yzO1w)lRQ-%;Hjh&OSRhypYx0mpN|GZF +zr|NK9eWWLEziz<=EfPDD_cB_0@>`_QqIhEchycC5XAo{Lu{ASl3^>F3FnbrY`yQ9a +z+aUDx*DBlKvESQBxn^hsP7tc32Jz4|WE$Z#J|^60{G1#j>ym{VhgzCe<2(bT_nK$*kw}ir9 +z;Wg>no4Jjfj%lv@oLm5yWl_1pg>pY_Y4--ps+;^yB!)N^XueOu)!WEEVZH!GmcNay +zGALJ*@&yS^N@sznbn}{7_`$uJ+rqHq0;r{gUN(^eI!;OPuD*sHiaCL=VtSl5Q$R2* +z&MN5_!Q2u6qEt!!tzj|seMF@cj0jgQ*&Kv6pmI9LnFh9M#Zpv*7vN1A=9q259qTqD +z3mKB_r3btFVdL!UV3|=N=X&=4LXFTaf1$?yU#uxkdiN(5FjNnN)*#buYaO+DeFSRLgTU|egu$M!J`hVMtV=nr%C&rB*$KZ!QFKlyA~%J4KiwEq1f0kV +z3;UP04=ApUOA66hOva(hpp-q$C^v9VzLDrGfwvzFcfhEd@jX{a=9k{~oxz}RP11oh +zx$&IUq4d49U?KMA|0NoCt^c2*u_3#6;VW4iEKF?c@klQgPdvU_0hN~r;{Blq&Gx`> +zAmKcq)X(y<&sj9lyQ#7Us8{H+W%=WM{?Ut-0uis{HIjEk +z**GI%gJv7qXW3#J={uIZ8@W{+1MmB%npY0lkS&1sqsgS+P}A$-s=LYsz~fll+IIY^oDaw^om!2rXnY} +zkm}|Rl*g-`+XMG)_G6##;ZgPcWbul#i78agt?apmDkQZ&TqR{v8mNp`0ahVy@|(s3 +z!d}Tm$*(l^LOt~1>v2W*8jI7!A&CQLALV;}|=0!l1WK>ZLs7aW8``(!Tqn{2Pv +zjQu&aqXdm40tz|&Je4>#=}t^Go?U*9Aak?|0Z6n^IzB2q68G@&atnth^Zk< +zkgVR!En%5b;ZG_nK|}#g1I^T?zSvkJM>Pg0gX!A|t2B$|mZi@sJ~o4w**StNm)c@} +z^N|$A1raT+{Di~uBS>An@5=g2O(g~N;Efpq#gLzu1*eX-H;DreR{0U7RU8x!(|VCT1Q|Jz0(3Xm--gzP6?2Y< +z<*_;GS0LHQcp`vY%JlSYFZK~pFKR_`d$JgKIsGI_M#$j8@cA#?rKb^B=pYTLk&2ab +zdL4^BvW3t?3qbKlB`x0I#uog5C8_z@$c;#k>`Rph8%a2iqx1l9L)ytk@txjOkLd_l +z^(n=BU+}&8rS?pa_B8QHov7jI%IPj;n8@I?EW-Vd+z}@8TtG_T$@O|5cm+IvwLzqa +zd*T+r5s{;nJ3w`mku|TlKnD|6!?1zg&P{3H6dPoj;Appt=-y1@I^AxxN$E4jpH3RA$Y@70#(QM1LX#kb)e@lhO0Oq!15- +zKZWMzuq^Fs#aG|580&j%wQ(u0dhVl{GLb}+ABPL|PDvc|qhc?L#?>Na#U{{^vy$!r +z;=;w%>U0P)7|=hMalhdUGoB0$PB&Ma6oC +z5fsMwqRM@Ba#(z~+Fz70rAjcfLml-r{V;Nch%}Zg01at-SoCkoC>L&tL_S5j2Bccp +zVe0qH#QQJG*dYEz84)DbeXjpd#z=_@hakhior(33Y~yI?pL*y46$~$@@tQrQUke8j +z`su;vYhjArKS?yp`0&6DJs^ZjtR#B1`WS)r=$?M3 +zNK%7+FMO!!;DrW#^sco}i@muc?nU)8Y>AndXlKfp7S+~_rWbPvb&D`Q4L3lUChsLD +zV1Fr`joIwYoX(U8`>~algW0UZl|@JMS`a84Jr-;7^j3y`#9OPQzu=g53osFZY8Iav +zw~S?ox{IE%%Ad@I0{e9Tq+z{R-$5l_Q5K&s^rM}Su+NFw +zjKwg2@EkE^amN3N6f#`19rt$Gc9dk%hdV6sd!MBC2Sv*EWS6lB&=o1YmpEPzby~5LdZ?G +z?VQaAIdI#~2LexOX_C>M<~v=i@qvc>VTb?fkmWJ9y~LJ_-#f5oN;xl=JIAgyKy)QN +zzJ8gF$vj3aI6nU3Q#s`(5w#9&Q +zUdyvpU9^~ALyx%OAPDj0;*P9gga#U%-7)8_LHf*KCO1Qtse;zWfwW5DTBPt>2q2^~ +z`=W?~u&If+;Be)rzETvHaJ;T>zqP3na;&Ci)M{kwKyPDkIENol;P^d6tMl>shr`UO&a+6 +z-${eWeq0iRcXWUnzRASTlTjlz3e`Eph%f0jGDr@s4DAE)k_p?44{c^kcRLZLhS_cp +zc4+O{QX$OPaNXSGN^@nPN|0n#89qW9V9RNtPu0OoH(7HbASBTlpfxq|9G~FI_4iL| +zMr%H~CGZA&t`g)Ah>Uj;ivh|^Brla@svw&TUBJDSl)zPztU8k-+x_!qZ2Vv^P!lRX +zos9rwxidm-g|nEH#I}fIP{NgEJNGt%HB>=sX-?O8%C(0``S$s|##BElXhQ?%U!v#y +zmR#Q!icbt^i@}zAj;tYV-I~lJx#-+YRRW1rr#He=8tYF`OSCdeEM~Pj9&=?JnAZ_? +z??tda)7k@2;?)FA>uwYfB$p}$XPN`~enw7%-yDlPt;!7`DTy>)4=(OGFN{0wwd#;c +z12Z%Hs)$!w$-+2#6Puj2jv{d~$PDfpax|Q{2Sgg3EiHQ#a+~`=IJ-C6seL3}e8Q8s +zUabcSsw?sn7r{t>X7??hsx=gSXEYDUkH1KSFGnm-bHz(VP=!RSBsGDv5Dh#__|@R- +zlJ+{ig9h6CB{1tU2Q2D3a8LUYYsp+OTP7Xx)4CvB2}a#5$sZY7dU^eQkF11AZVShK +zw7~9XR2%Sg`68x+4R&~@)JFpL<$n^!slNy#8)SOhs9Jtk@5)^hzhb13$~$RfFF&w0 +z*lKswr4czF5ZGACAONV_1nDo1COgTuN97@j$H~i?dHNLA`c@}}$68cTpoO4PxU8JG +z;__yzOffexU#{3x7m7Y1`bsEH^;py1LQ|H?1X+|U&M_HiXltAI?sOwpNT*F9On@ZI +z53nD!XeO|j+4hlb?GnBji$Mf&)WMX+(qTY-mcThZ$^1r8Tv8I?SLrA +zQ@>|@2BWr-^0o5gV`7$W826WAi#b$As{KpMND!4B#eic-kw_7C9vE!;sn6+eoHrQ1 +zyXEpPPl@`%DtUZY9>`&Q{^qdTN8^ihWLk7uj6FFwx*9XC8}1)VNvS@wHF#!r8$5a= +z4x_U#IVd~IZnR{1i*JH!6o@&GScaMja17SYC_V5sq)~cNwOJ{Hu+LJU%pyQG>%h^P +z$v8QSVxe>ET}J~tE`ziav=paV7iXt8Jezz5bbJ8$(hbFuS`zRLo;@x|tD|OfvbOhP +zR^lmGKy46XTN)kOa|+?-wL30E%syuJKs_8?4U7W^_!;a%8C^kkZ$YD_5*sN}Ny=2} +zA`+fkRw!j&9lrk7I+I#}cjxp4bF+vRDWfdNIZ3k9&S)k=p01yRA+2-A7hw!D`a>AW +z82=Yx1pE!`_&Bmj=G=L+NiZMfKfH=C;nPrL$zS5x?>*)Hi#eCSn^sX4tlFUud@B +zI2`l|)~*ZPrgH0jR0Rud-0HrDBpB&68m;}+#(als01b8qWlE;@;P=YHs1Xs+uhZ53 +z05kj9%npP%oiLQ*l&_j4g+gd`zbZEa&?GKRUCeR}vf{>Gf?ro!+rpr5TV +zdV}1tRbe5{l|(MCfvA-Ffq>Jzcw=yCbMkzIFcbA+=#wt(gBmWNX^Ih|gOxNTj@aQ5Bnf!}ctXSUg`6JQK$SX3q*DsWLD>{XE%O$K +z@~BJ9sNDmR%UV|a0h`VMX-!?uI>cAra=33+eh((b8ZaYJ?cDKHtYQyn7H@FfB%&6fk2Ls*-u$qyCD^#T;)C`9 +zg3wPRh3}=lX^!3nyY@C3%{_U)mux3{dCX%n9H+~RoIPBrelKLtm9DfKSN&eTBnLC@ +zMMW5?q{dX-^hYs497GL}{ko&@ez +zd+MIC0Z0^npeT&shsa4M0v{>L|n!c)M9+B~;) +zONNd$ZK7Z-MUy_~BM@`r4lP@tGK^*GqX$Y`*7&I&BOR{wXCe_pk2VrGgYRGlX_rv` +zm>f7=l}C)DpM|SKiLGN&!7HbJk0DMbj$R7}iOj#*ZxC}qlVe^*00Rs|bS6}TAx7p{ +z>HvLn)L+}wwb%y6*Q!9sfMl?}oZ){YgIpL-YNUGFQZ<%~di-FUS^>wNAIYXQG* +zZ|T|gOz{GR7!{|~aeX(pJueD7HEJ^4te94>4td!i6hycn1ubmLniXNK*qsiNupu7# +zvO@k{+y}zIomt2gRNS&JXC+wIBB9%s|Jy}uDhY2Ei(rZqvkNQBt`bJw_w@bYW19$G +zwAqQrbnqn~6G10n?JlodU+;=Jsmui<|0xhatB{c4@&gy-B{%p}mMh&`vPp0rLt=|L +zEwRWRmFn0WUFx>jT^LB0uAJDekkQLW%Ys^}T +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 +zu|@Cyxc89~najW3;#2g$-C_>6$mG@Z8QatO +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 +zyH6JF*iM +z8@>(r_$)Iag8Tbb&cyfYtX|~Cg`&}7;dj6)V=5Pfp7q3@)D(IetT8K5Ilbd18?Ok; +zZ*gd*H$Dv%TZIX@!2o}>il$xl?MO`#!^c8S;9L?YH%lXPHXD$fLSLU_37T(i^;v41 +zC+@^tup3m>n2{T&OSfPnTEQAgQ3bxOeziF>*CNaUM}Sl4&^Ab>>xUss{i5p|8abV= +z0AzMb%-ej{(wqzWldtj(OEXY0XTg%?L;R|3p2jKpG@`$_-3@e3`dv#D_iQ($_ +zH1v$nsYJs5UG2eiCU&A@&$Cnclqs^hATPq1*lT$7vi*c*HK(NTBqr{s>h@GV-v&JGss*4Otk2*4_J|SQilg1_QMNj!e^HO52l9d(3@2c7 +zDe5aj3;0HyZkd2r=Wjjo26hgZp9w-a|C@CkJ<%>twUOlnVnT~ay_cq~dxWc&eP6(xPe6duFC3XcM`}c +z7Vr}DJlD@&#nvn9*4~-&aDw< +zJl;6IyYX#zt7THvs7ygD1^bL(#(3@}{t2@JaI)veFt^k9l`Q22y;dzi_rk-jjcy1u +zFT;)G%mb{I=$V_^^|I^wK%9GOpko~ry2=a|EJo_KdY0@^BN&x>S)EJueBc{vJhq6| +z$T;3=telPUe3ddRP3Y!MwLt_&g9&-;F`C|^JoFg(7C(5o{pvA_@%-p9vQHoLh!yLy +z+J{b0^@7svcp-(D%f=xX#|;vw^yoUU!e(Xap`dgxgT~ +zk)josa&`2@239#gzc;nMr5i5s6MW`HQS?q^pYQiWVz;YU2glcJKBBl?ViEJtXW){# +zC$(vx6XRX8_XO9Whz6PTi}|h=@4V1j?#`i3hP4ZO(JtgLJ|C*qp6WA^Sl1dAHGZcX +z=ii2*HQ_xZpF`Bg8Y3afyVYE+U{*GtVV-A-KLPB}Bs|8y3xng@J8_h}Y?QkN+CJLl +zWjWbW@N(svElMW`uLW3hrS%Khi%B)eI8U0F{7jtZgd|xem_;wCh%SABIiw8KeBZoa%^2y)l()JQ25No3Ov%Ci49UNvd%fbI8)Z;eL=s(>b4&)ub}j)j +z&^k@q4kuZK__pSmxO-9P*SPSBT`r=#3P^p_O*=hPaW^>aa1g6_Q#(G6o|ejDvFU>N +ziRGv^ffEP!cAoI1!N|Oen3ZC|VtAgG5#EmV&-~UUvo+ijawQoh&tFOgYuRT?6C7*n-Ov^5Qw1Zc# +zqky20ex@J^C%GY$o+ExzSicZHqhDF70nQVW`!(!2Xm61f*`#L3 +z^9~pK0ke2)^D3{+&M^CEO`ChphMv9w|`DDa{v8nN<6h&K>i!|RZM4r7m7H}DtI7h|r*XOfAN&WjVU +z_I!rmLTce%ZEYmjZ^Bb8BNmud!9-#Ll4cE*`3s*wIsjHa*Tdn9W(2qjuJ +z=bEW<+bn*2_u7++g$C5rv$4Lup4?SKshpBZusi7R>W2uUv_Bxin1Df`(pTCK4W9>y +zFj|#|skOeuOLTO3!`07>q>|Q|2Z%5>?mt8r5o8`Bj6q<+GwUG_5ypFLK!h>g8>u!%G$rVLbB7I|&C1uE=FxxF{Go%ojPlEZ}(z}#_gWq8!RXmIEyYjqA-HcZWJad~Ud{a?6F1RKB4g%0$)ByqX +z7q>o!e}~xvGY~2T5fl8rfzYRWC+X^XkmF~umGo}fJ#MyX?G9w?|nwtBUC}i)`-Ny3lr?s +zLY1MJlnY6MVAz0FR7Bk7u#|zTl!J#fGc-XeF{NF`OO&LH2x&FVfvVr*A)d&8u*{w^ +zt+9Fs4^_&V)_kw^3B#t7H+0!<<36f8EU4kaDU|tY4jr+9iJZ{}$@ZJqRg;al5FXZS +zCwPz?R^ujhP(c3|TPk +zFTBIOkY_|X3g%+8Jwx78>eFW_$xfXt +zqnE%1wzP06iK?uwD?4u^ +zbR3%MdA`0RQZHUwX$gv}lURjm5iN+M;akdomtBLoD<6=pvZBY%QaTRXfU7|is%Hb# +zd(Lynz1VHlV+l+CrTDVlv=c_^aRj#XalC{^F3dEZPk5 +z3?CsD1%-BLab3^d7(<4U{75&8F=!*Udg7;mfNIsez-Wr+pz55J{02!XG7x5_jvKil{=LxY*V2^d&K93eUPQm +zM_}t6Fca50Uh26sW~|dO +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 +ziDHp^6#@d9UBo+|%aiJO~S~RGg}X +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 +zor#bbc6J=Cu9*VQJ0 +zI;p{qpqvVix&I^N5t;ucBJPVL4%sNbFV3Iv^a7&!Yv5OhflL&sJwxC`pTS}~a3YN0ogV%rkOdb4;(koOs_}_o+Iv=J +zXheTyRK}3(zI`LqycfjDRbe2oN>{dpR?7l*C-HsSk_0y#J-fXXJoj{NA5%I=x(sp5 +zP)KQc_zYE507ov&3kzMVikC1?1xDSH#av#jq{89bndrN|!d=&k`+tPpQ)3=nyN2u7 +zZfx7OZ8x^<#`ZQHh!HtBlW_x49en*8j3RP=j7PAY?=y@ojf}Mzi3FZ;EZnS;4oB(f0a;)YwK*<2x!gyvFAu +zuxysX&y_(hnYO(UvB~EOQ(^Vo7FSzFn9)h&p9o?gp;GEa9oPf$$kn)nl5VcT^;kjQ +zUk}*j@;Pq%(JRDi62t7F0#V4E3W4$=x}@JgA(tcD$dcG033xxfXwcrLV-mGe^J6s1 +zpv@mLicSZ$bn^RA39c7Soyozxrrzi`Y8*7-$f;!!u%&Li4r$DZ2%N#&!W|0niqykm@Pb7GmkL+rcugoSu`p7dv~r!RpPD^{2x_3g&z%J6i%N2m8Jv?@vSrdO0QPzB+L6 +zI%6pcl2|$&xVkEp^*cyQ!_&K}!IpDwF|_`yv&ii|9MePGx}O>g#pmnyi+4NB9bo;H +zB*(AChX*`Fvmx#>H~Q5y|cr7|N@ +zn;LmmjI%dOFJf~v9d)J|?K2ee8HTsI);I!D6I2Jv8Eg;+d?#B1O|=v*dHRxqxHt-Z +zLW2)PMh0!M4w}VpRe(UrY0E8(9%`}qL4~OHH3RDCb#y|`F0#nwAU%k8(79;b(I-(t +zv7pph)MM@)>CDkozt;J9;W08u*0gAca!qHcGW3wsB;YbNsC~u)4ceZe* +z+C+c`nI^GNRc;(tB`Qdv;G^F41;KqLwB@?mD{mqancJYWV;TS1AJh6I9uKvP*`caW~*MAhp06$hkV<}ViK7}3~Tx;)TcYcM1MRw8O)Gm28G>N*@VBwdAq%@T6FNxS(NUqiC0 +zMp+FPSh2qjQ&`PpnU;oxaJ2afPB(Ob;oRiI0Zq{R1=XNOHA2A6)(`7$7x~Luiy)09 +z7ow_?i8=1I1SrnSq%jX21-Ec?qE8LbhT-^a-$q0nds+4xN!UOu(>F*-j$Yhi&RMp6+pG^CO$9-p* +zA{cSdq~f{=KVoTWJ8D`t)Yq1jRC#K@;L3I;a^y}L$e>JiKyj4W0GRNOYm9B^hdT~m +zf>G#o2HnCe*{5#AU3&g%|CIvF345M8gYb(cH?GbMrnx0d1H)U7W(tTIg_Pxh^;os$ +zSR11W@PsSy{XLkM0XX`UYJYYZ4wp#HwuZgA=APRb>8}A?T4OlHlBkewb1>G^E(9>i +zd$@QbEl3P$2+l0$Cx~;kRAt6J<$QMPbQBNONpm^t2!yVg;H0@V#Cm%>ESi1+`;M`0 +zGn{*HsmU+Dx!a3%eH$qHDbw)rq$YIjplSjWS03BAERsW+)@F|=wT=O6}!+YwYh0O6tX$a4=kX3fU{W!hJ&Kqwds +zc&Qz~RY9|n@XEgf%rC08pfr6^jwtEE3Go&C8Q4k`SzJEzTKXB9a%>G@hZ?`zy!p5^J0*t;7Id&9=dY(VnKKN2recFvkg?hL{(K^kqu|8VWR_EvdL^2Tq|GU-d&J|h +z#a`u;Uz4$sBuqxS67y=v@Tp4(VwzbF1lY?4Y!92Weg-cL_8!iqMV*{yEN8_l# +zj3m5yfQ&#d0h`jf@TjIr?OCG>72=T#y`7W9UQTjMCo$ujH0X3eZ9kuwv`>9?l)AK` +zWE0-3V!N+%S)>F#)D|izSR73XS$?BiwZA%$Hd|GQujb2pRopdpal#_yW2%QGrnK-n +z!5_qeKy8O8bAN8b-|X#0eaD@oD{%WEq=?sMz*g?C20a53R8Oah2~-6VVM)*-qt&4xJLrB_xo53YI8hUGIr)LZ`Rlv +zClplnvcDx|KqOQ34$sw?d}+8oS~FvAxO~N&?A?2H<%?7Lx4j`SorUWmX8XHn!}GdAh>BRW(t)6 +z4fLFuSYah7kq%H9O{&`}r$a11#l4@V7Z3$lb(ks%!OXSE#ZDEn5Swa1`Shfqt5W0R +zM_3#h{vxF7oGm0;4KaZUT)TI&k9WLM>UN_Y4iM!PO<1Swim^7F)YU9T=!37Z+vhrL +z!&$S~PN4U#J=uA~`#y;&1a~h#t6m?JnUS$Wtz`!xP$=LHbW#Pc9KI61VQ8vtAYShZ +z2u)*g+CYSdty(_!cv4DE!xoBmERGQTHqB*UDf>*r>zR(z&b2B{E8CT=K0wDP#&g}A +zb#c*C6|sfR%|cX0V0aIk%=` +zQV13cI&T@bNP2fygxt}T*;h$~T-uRlTRqon7{Q|xgg?&hYhQ8L)>0+zsfcKxcjv?_3;* +zhxM+_`Xvv~r=5u?>r$*g)*SmLBGVzN-v!abffBaMR+_H0Zx5ab4m^n7IDEU*Pw +zn-95LdBh>h&>H=?X&l@1ezqra +zu9=G^*ui;%>S=`;jwzxLwR44KemVEO7OFa|dJ=j}osWTx!as2Jeg9xj`-OWZ16*&z +z%n<_D>I?}Lp}Nk#rB{;fQn`*)y`9-qa)*WVGUV`_vKjhS-C8V%9* +z%;}>UexLo;EQux45Z}U89&Hm?Q@_Y>OD7h^qB3;|#hl?ll-4$`>P<}MLewl_<*U#p +z5j7}79dzBhYtxJqOmZyht9ei#scXF-u(s>8c&R$~_YwPVxjjtGm>;s53F7hAPI>ULZxg8{lM&WGrLViz3l{M +z&)(xqQhHiHs(B?J^*o!82|WbI!6kc<&4JIEL!DPK(0Bnno~MoVtgQb{Y*r8*=m)3| +z+po`fxH}la(14dL@<+k73D&5tE$Obrm +zTdJTgfuZVsAxG*HQPe@X>$B2i<>)>rz!FwDL3}UlD_T<3AtJY`(t@3Xk3nvl9G!b? +zCM-8FJHU*0M*?Flg@DJE{EIEi_@V~%D +zaRAt;+IIaI_lfRT_hAF$E)?)RY7YHOgCnft$n=(C4port78CI?>wh)zVy1Qqf51d|GL!%wL)L~eCx6|DI|~% +zozZ+FkD|Ke$A|p^d(UF4YV3CxyOkrjzHyOs3VAb0o^nXcQHw%bT&PlRIgNuPqY2j)t~eDV85GL`_JEB?esBnWK79+ +zR5KzwaB^g;CYqa*f-4MW9MFa7I4AY}etjzNenAF{G@!LX0#^A{%49$oBD%twS9RU@ +z!5xITx+Y;gqGuUppNn*_V8Zw=>x5{S$&uCVc3<1}30Y~C +z{RCWV`A)3Uaawq+toR)7$twwO6?XL8C`MW`LPcjUza3ZwZdkUL%I!h6IQdXitC9E| +ze97FC)9UJ#*+j9#uPFR$_@oY~y-O_f5bEL?i=X`fJDwo-5W$82mV@$y$B&7(zt-Dc +zaYGb4_`RZ)V~`R-BvbDlku0#Z44^djZ=Vj>q-Oz?Mm|ExZYrq&9En}{hsBzz-(vSF +z7qkZz7p`iX*=w)E)UjGJSSJX>MIIJXaajns+sZsTIQW&v!_rjedw0tvE4=|`UX +zEXcm98y|Aty(XBBJ7GURFr)}xabAYHKk$M;dj;7e%EdT~(#C5}PdN2tD0_DB`(gR8 +zuE9iRpzX}D`6uS8cL}wtm)ubAfqD5|zV0;{a!%RNV+nw1RQ&OWX)FRTjrkJ*rttv4 +zG>(K9RoZ_Y8TbzNhiSxB#)`4v1~82sI}67dLc0{`#-YR6s%pyWTbqbAB|@Ui9B>8C%n<1(Oj{G^Wn)Q;FBfZB0Jz*l`#2oH2g +zht&C485dAH-mG3Cj(3c^0BT3dOr+0_G3F=ecdkpEGRFB7lA$Wy(=M+5WLd)5s?I;vKCxkR7XqNWFooGT5oU#^GCajKAcIH^W_D}$y_jE}(18K2eWHgk_oWSJyfJ3Lfex-h$4?~#i-x&{HCazRg*Q_^ +z({Oj^5Xl$6pD-3R=+2!fs^%CR9(a&c_oSR3Dsx6b)od~6_lW*sXZ#BDRR?aGD>_D_ +zLD7k>RL@jZqufD#?$GL_DQQdEbP@1PO2;^K|FLUgk*W?dH~+N%noov%%AlmO`BQbR +z`abj!3LRCZ021f2EI?`O=#h!L^@!Tf=TILz5+ePb?o>S{FGM9^DTjM?tlS*lqj{HDye)vj9 +z+65k|ps(Bh;qTnM(ygONX%}X(;Np5!`r}~{by8VOTmv_E-q~dhw)U6(m{itu-baHW +zd)=uWq6n06sEPBD-SZDcVy_NPQ1Vsvr0YnmHOuB7mrXIc{p@64sLy-k;z)T4f6d1{ +z)50hXz<0Gm%Z*6)W*i=F&+{c_vf7VJ`Ad7b(F +zOZIL-{0L2f_;YU9Jg31`d${eaaa>btrUcu>3WiaLSY;^-6qgK`-QZ0hH_lL`t#A05 +z>PO2M;)&*l7d0(ZN7u@;aV}ete6|>ahnWXfL-q9+;`&w{$v`g6}JMQG^+ipG$w&S{81V+^q%XSy8Ej-R({tY#}IghAY(43kALIMNf_)! +zdpP6L|B@xRr?A`&zpA=ap!OB7>l`B_)qM}btzbTn?l+TDLa5~jrp>H +z4f|;CKmSzV@4_;((UrQjK5%w+U=E}|X~unpr6!bphfCZ?s2mkwuTF!0R0p}WP?vq= +zJr_-5o6R5B07|0cj7{&6!I+I-<$7HL8Tdq2lAEIdS*rIpc2v`vbp0DU8vcnL&oBPO +zj%j~lNB<6kk~y^hiXCw_>tiuqA)&qKPpD?aN)c&fA<>dyzjm9fZW4!Gc~{!4z^`5K +z>L-j69Zn5!qn~mjqlGy#@+dm9*DFH15pLxgqe$T4yzNX0{f!-$M**?pRX!kg{LC*G +z+{zWonj8KTJ2oi;W(OPqvE%Pb;w;i2KYG3C!?)2$KQipu{dc1*RJlPWP5N%H)TARfSH +zrvIQlkMKetD1%CZ!ojccUCLcI7uRj%+9_(VNa1hns9u$6{Yl+V!VZWXt(pR1$Ws1| +z9U}p;;}{@ztbvqw0K|?(Gk;>oE;4kxhW`~i?gSMcLIVS0#~h|SKT#r8UDRiLmDznYDYMWK;?@QoEe}rmCJ1zG8|)$?Zq}pZc5gRT +z7^msn$td+FcKk8%Mm)`$+dB}8eI(61o8E&@waS!*A#ikq@<(a>Yy8{$q +zXpyk^NV*PAM7?4(iRXN!v-q*~@_2-<<)#Ac;~*rvcRFKxZ%jvzYopp?M*cDojb|Tvpi~^)Lh-up%9dt{tb>9mZ0_=(r0AgNRejhP@7n0o}&GEGuP#;9x +z30CKJh|Oa^!|+C`p`&o`1 +zt1kax8q@y9j;`d6r@eoeMoB>I*px8(l^%>cAdFb%Fy>lN>Oy>wq{g{ZN75%>7WmY3 +z=;(#TWE@3m-UAIMlf+6Va?uSW#5*}&-7fmcDcV&Rs@~^0Gqq6q0+eUAPobJKDQ{j! +zC!JwdsME<{nXO2nA)1CZgm=0iBj;1)*NR(MxUJvFiy{!`hi>?}V+U#+sjG~G3?px? +zphhW?%;b0zVPz_a3V7uil=Ngw0QtG4HnePI(1&+1am)&CWG$n0?cQ_xF-)JY(MRN#FR)cV4p*PLcmM{+p8_u|w2o8#=mbBpI$Zn>9gu +zv&&p_XK1~;9Y0|?R9)3ujT||S>E*khUriUIQEGzZkihB-BM;_U%%6aqTcMEh_92BM +zuWs^jgN!3Fp8Z)71a~+4W`ecL;i!EFB^O&JLpCQO7}v2UAQ0}> +zA2BvW6`h$GHHFeBr}hMtO{QL^gv#WaNQI$4--i~$rT{c|U8eA@PRY}DmSfPuA-w}& +z=-zWBo!}XvTg2q|Orl{=6-z?w|*2yufVofZMdckTN +zqXk>vTLNOoO(m+@!+)5@;{TUvL`4t`f2{#){+DS?A}ufEfmO#6^U(l7Lv*^Tn%NgK +zXE2=wiXCx-qfh*x;^2*W<6T5<_6>LBGa2S&qSp^kqp0jVI9EE@ybRrRI>MTt5m;{x +z!97GiU?osR4GwMwy&L2mQ!2D)#qL=><>0vbO;lSAgPk;*a@n8w(0?#NQNSOwg4lg-cNJtsU&e@NS +zAoWu^x$XdLscA2Ptl<6w_ya8Vdm&1-M% +zi0wxzz1>w-gkx6tzBkFvtiU->FF|t){h{R(`?R&iWa0Bqe?arvT`g-)n%E)c0)&s_ +zuT>b~wcva^Us}L=Ejsf=ukKsX4jIpARoRY$IEJkNx8H9S*i%L6=y;^)pigsMV{T)| +z4@?YE^WE>ox|~FKo7rrcm_o(wr*=O{>3d}0rw%Jd?nh$|?x*a^g#-P_Q3F~n5wPrM +zu{bmJ`N|2oEkU-B6s;7Uo;E9KnLC~KAz_0ax;+E;=J*M(K0n!XyU{J7KQN-jHe$&B +zdtOnNSDqU3wxay2hJhcQ+IJTP`iagk2;bgS-_cTHNW}UhuxT}gq7<&UJS@6n!C0yk +z-YN)q(t1e=!3sOak)-I7%it9{#Pe?Nl3k!z%DJYN5_BLarMOyfpUp_SX!Nz}hg +zBjVJ*Od~*u1u%`NwB;qmQb}V@q+s~1qI=E6|Hh7MbIclm*zs+A{69>inLz;mpV*Q7 +zPwW^#`k&Y_g8<|H@D;X{sG_f +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 +z*fecq!hQ?w?FO~jf=;@79Devkx|MQw +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 +z57EeC{g-Hr#03zI*#99K#V?{UftfP?5RFl1 +zyKe3m*c8U%WW+}OLo}NIB^t+>=v@9K8kPSS(fIjaL?h=PqS0ubghR@k+AySsoBl7+NSZE}1+wCAF6;)%-oyHq*0X#@Hq(I`Gy?`~7al%ZuWF^q|kCfMa8Qy0}7at~}oAfk->!&Cph`F@}RpVNZ|_61ATGgCc=e)sN?9{96t87#0^N&KiK&{gCXunZ~CVg+Cje(FD({-CZ(^WqDI=k?Mb^C +z?{0(bEHQ!2@V7PWDW4LeaH~{w5xf_lhcx6;*R72XSa3+excb +z&mOGEaqCjNZ>22d$$b#k{5z +zp4b;+<|xWTdVL`fmCifz7~WxOd{pyy)t%tHM3rN^p}|bu3vdR-Ee3uTwvQ4eiy`1& +zq7f+~vJLpph6xz#pF-&@Ow|;O7gcxc(RtK+snPRe2W}zQvU}3mqL>9jiX;81{1{(<5e$9f0e#+>BY#pvsM%a&tQ!g +znw-5uhr2)I!0LXuYDv(3u4E;zE<}-xKNtNDt9V(q?O-J`AG5RzVdvgf6?f#>J*XrW +zKO2F`$683O(6?LSjQGf5OF% +z8@G$HkYQ5;tyqg@&&|KbKxPv|biIn_?E#2REwm_^g<&~iu_H$BE*Sz>C;`X9?LjIQ +z^dKG?A8h4zDh{+CLTp+29E(uS8phVIWupGc6=XmR$FOloS>m$gw&PajQw}j*2A1M) +zX1plux(v_p@BeZEf3-OJAi&r|;iGJ=4bG?B)U!G#0VIL|XsCLSjI1ZKBs!4R=Zy59 +zIKJoYno92MVbvurWWy9W2(B0e!YDH)2|+q#{CUl`x{!n~lY}i3zqzJ42o}S^Nr#^@ +z`5&T@^)JyVac=xgG$!{%bN?k8X*0ixM(;6t*BGyotmwtGEv$p0y=&{*5l=t*niIh2 +zVw?1i2Yc1YiU5gV+t2wT@-j&B4pJ%nfRLOP;=RDdIx`!uVPU3UMN@e9qJiS&r7Z$d +z3u=w18d#V_W~s4Ar?!q(!p)!{JHrFP+%5XG&vpVyn;H1$cWb=L`;HV)+RSBNC{OOI +z%|8DUjZ#sebbMp~n`jjJCK^lSHcs(AXg>AcR*|m*fXL7cspiaWrX0q{cVzP@{493B +zX*n~Hmp0p1T!xU$18QyUYdEfPMx%d4>UOfNud-$7?E}~`jAP-|Z&pN$E);|gN6X*E +zw=)x!oDA_7m+~vA)ssHv7q}{hTxg8L{zbjL5)BW`R!V~b);hiSkj4h&cT+(fX9I1v +z+YA;-UGj0~xy>%}GXXf8=vI13ZpWJ&)dlUqbgg9Qa}TGT$G^OJnPL`xD^;3$RM&`x(k`1=rb;ei2?y$d +zZJ9+R19SwrX*VN{mnfVz-{eSQ%+F6!oN8bSsh8FP2XTT~+& +z2tnBHg;A`3QKOT%nf5bgD-Vo4{KQwE^qH4|4*R>dfe(%r3 +zt~q!9-Tb9nFA=*xd=5PW*GT8^7gRet2}JDC*Y4+h$$xM+Vt>Pok0N*`;~C#D<2fMz +zsdOvk20M^#O0kRa2VGpYhAD=sc6IsQ<-`!1iv5Dd7`rPyDb6aeQlciBM6S5wG1FZW +zhpL>iaV3xw{XvkEwJj_Sx;f?__XDS$>!h{awQDsN)h3o6S;k&;nD5nYW5bb@`$wf6J4&p*s0@cXi@SRfJ5bm#j +zOeE6z4HL@`0|4ZyzbhzRrJM9MW9~164M$hVB+b`k`__V34C}KEq#yqfTfy@3G_%Mc +zGVqtO(Mft+OqiR0co|pAA61bPs(AiQ`w{=%a0WZp$mp#KNw)H4I1FD53T!+J8C}X- +zsFe{d^)(=yuTmeZ!nyvHqh){_eID1$$bka1jz^U{^K189A3A!XZ(2PY_)x&JOTI%N +zeC@&QZdFo-_)`QlThq&gpEO4xBQN|jb6zcNdPVw9VaS+_GixQM-1YV^%vcVuu;^yf +zZuk`Q4KohSE%4}L8HZH4l{V_xOq>s)5jU|i-yiGlmk`*fj5_Ma;ynC}^j}L5t4R0D +zha$7D25ZPgg`8%j0>~;u!UaPhK%; +z<5gm(^dc@&Wf~OzZK;YStZjfcan{$h;Rw|-w`<7g7RFk;HWlmkW29+KT2&|!&>z6Z +zr%Oc5p$Q0!V5-c&UNyRzwVIscB7X{u#4Y}&*OI$kBX`{U-qC*4JoTmT;xHn3c&=fc +ze6$Z5aYmm)!`E&@gVP>Dl0dKS4&W3amh^7t#Le2+u7lcEju|r(nr{Wnp8LpRO@;#c +z$zKsiyYL}57Fz)%5aA)fFvw1LnkP@E=s_u}8h;fE3+w|}(vh5PToTKN!z|nGP-U9z +zXj-o_T=n28?(|T%h^`;;?(=z5F93IjUUEd3N|~HiGW^SH*u+nv4bu3+0rKoz`H0zeq!_?-0Q33(zBnBh;N(=*%GS +zNl!UtAA0A#eDWCcAK!m|5*`P2B#AE__Egljq<|9fT#Y?gn`ByJMt@Kbna~o|4my#- +zx-~B-%OJ2;#}gOsh0omBgH2q{57ZNj#Br9}dN(4?*P2Ku&@Fvvd;FT# +zM27El=ghy;sJ?5zf9y-aB?#xZ)lUji)83P*rdWCEIKi^BihV|zU8UvY60H(lvPOg^ +ze3?$Lly-rVcoDbUGh-VjG;N8(I-ieD`H~|Wwk24mk@I>zlQ;#>DDQkc3=pvA5=t*B +zxBR)8SzM%-Lc0~LKW;|>B3o{;@hG(-*Pa^;Rv#>Dlk94vv=96A+Lod||IDAxCcL)_0_QVok5Q)a@fd68Y=p4R +zLjgpqF^-tY;fBSD3fgktqZ_Y}?_|GAL^CX@_k)M;vI@fV*977x!L;)Rb)@j6mrM@P2>S^6@={cOWFUER>}{L1X+#9%7oXlF>jslmrukgqs+^R|!M5c1H8hhiPuK +z+Zns8ad?HMV`fkv5#_zn!{vKg$&)v3h8hfPz7-Yr*NjCshb~E|aJi#1d3<%VD +zQlH}!KZSxVWfUySgU2@+*ULi^yMY{B9F!&Xofk{EGO~C-fu9Xn<4vbapvEGO5g@^05n;UQHA=`scuul{|4<)Cm}r@w +z-@7Luqwl88+l|iuI=$DcbY$Z}sGwu`xcA~@e+b|j_nI!5GpO3%&fY74z9|M}P}B_( +zf~e_v*IP0HSpa2rcz+t)|aOUZ6#OOVWRY +z%3*b^>D+EJqI3KbE(Awli@Q|IHyl>N9vQgmpH?3hBvAu=`iULSezr35WdoNdqz`UV +zEAlv>V+KE{i+l|)4SMzovlqzROWTffX>t9dnTHuy`%q9hKI9)P3 +z9=m{kTn7^GBycjebDCPac<=ngijAiAwo=$T1Cke9Y!X=rKX#`3NI>n(VogXF>753_ +z+;PiUPjs|v9MwT&&jS0T>+n9e@YLPD6nkok6H(e>McI+6e`P_o2d9G5KUj +z3Oay+>}-jUu^1WOqUz#ZEpfdk()NSI``CuGSGA|m?2BGNa9tKk6yp4+-XFv=fA4lY +zQ~0WqzRWy74dd)+Mz-NJKNxRz)$j^A1P=7t_AdSDDyD0msY{1C34}K2 +z6Y;f)$FsEG)yuDQ#ws;z5w3yLX$A-D3n>?$;x)}9NdUMe95NgKUofNfJ77#{)6!4e +zd3b|Y(wlohtfoBo=c4L4e@Bo;@$Q{Kw?RN8*`6m%A$sd4`z~BCPZ^?4o8K%9Jb8eL +zI5P~m%iNo+S(AihWLk#t!=Wrm2}}x`hA-26Fikp3HDhs)DZn}px8OC!HVkOfcKSeL +z3WhWM=28pxQ{EN9s;dZMA{U^!I%eGwgA~F-^p3~hm4Es{28_*)8--jG%?RKw~x%{ZgW-4!ehwrY@P`H&j +zw8Ji?@ANjcE?f~f_DE;~qjFe1+mA?t?h?X_3SIC5yO^C!x*#L49Tz&+_}Zc0NW$a; +zNx_3^s12AGI%vqI4 +zp@N^VEU}Y~3nfr$VXVAt_d~{T_-Pr_+Nn&wR +zf9kh8u$49NR{Y_7ECzEyln?gCy!_$z5`pWh +z2)yHrwe%?t>`@o*@3Z&1o46V*-?+L$fO<}^1eBuZ3*CrIH3KvQcHKeyIAPTdREj{= +zJCRc;)uegl3~XSSAMBP0O7&C3t);4|9~6kMN>lx{sVxvME>1^yZFbMz{CESb`%rfQmFFH%cSux +z>Q1*Mm$JGIC8C|d)&90|m@eNW!4AhN06!E*87aDnCju;`UDyxch8ID>$`}3+9b2)Z +z2E4!?0O%Obhjc^2Snh^MB(KSs_CQDG*X)v-P2N6&wVq~EIBw#+krpe23hr&U(miI( +z!2Mvkbu+M8VuT@P#m)`C8NKmyPZ!D8TC&Pq_Y$_4vc8e`>ubk_D*#|LO-QUZu{0Y} +zK8sdt+dHg~ahFjuv(_uIBxgfSG8?vb&4g0^Svdd2k+8sYCIcQi%_Anf7=TK2T$?3t +zJUqT=z^y0=EJr%`wQDdHNK`*B8uJf;1#}#{$^A5Ocnm-v6%w3VfAwYR=fvYsGY*s) +z`w9_CRg!j`1ur7%g#1D7U|p?C++37=#|sb>K<3AdFh&H+1r79^_!TfCqumgc-z$oT +zwd^S}tnd8}zbl}Poe-}Z44xAqu-v2!>oTBRJ+ij|{H;BDr_`E6wlr5T%kj11Wy`0T +zj($tHlRUYgtDof3WqR>kc=CasqW;dc0}yC;B`HZH9m^iOg(xN#$Jtb`86!XIM=WuR +zu{8BYrQ`IZ2n4g^ZZfp9zL0I*HJ>=n{ax}P7>G!$n4A~3+M4vVWAJ$Gcnc929h +z9pm#k+eLGLAB|r8k`sfUP>vHyb|n5A(>s6mc~GRg)%*+I-CB7jhq1{BEhz)d$F#`c +z)leeCUc4}|1Tsj0!U&%^gXQM8!vxRP8m9ZPP|N@0GA;~T@%`&E_I|sJVr!~pzi`O@ +z>oT5@eY=c_|BuT^@$E8RD)Bu@tj8#jphy45WlT<+wU-D~v-Ex8OZ&%V3=bt+bS{ye +zHC>zW(x(|HdOGkzp!hIRElr +zm(kvp$I$T(^4n$1d~es4#QE|6cNqyApD(f>4z5kxbV3|CXp<}5U?KHx=~&|A<(qif +z%->F6Bn-qYCfD)^_;W2+3Bh9@>fAhIw^ewLUv4Svr%(dH0b$(u?tI9Rm%&L6H-Ia{ +zuY)Q3hJoHJOVbKG9n_C_n6H6{9tC+(INU;M$n2^-2pcEdK_<-@z#XJ&5A=C%?Z8cc +z{WhxK)LL+Sx?mi{Re-W}1bctO=XD9ux!M67p#E~ZiNo$2St-I+uDATD>viacb$Ep5 +zZPo?MKwJf8mmlpS7FyeGM8ZNNohOw=P3u&bM +zDgquXZY1muiDOmLpnxc^S{7Vr;F5!DK)tZunW^dY%AG;LaW`LT!g4E=CPyKmfl9B# +zAoiy@&`w7=YXKVY=*yhZ#7|ig3N48aF_m8 +z^+&;^;Pmf-_d2;C%aF`*Ja^oEx3W6X%xAO*?XXzlx#o_MtQV#{Wg^sNV+#FDO=KVy +ziOpNBAUxgVToWim!TQNYo3LS1yHeu(;y5nn*t_T$ogX{l0Ry9&xzBZ%{ouf2L){or +zcK&D)YgJGsiW=6}&=5&t8A-Aw`CvrHm7|av%jhURM_h_%1JHbtjDZprB0$?Nj>o0D +zmlT@qqDvF`{o_Hx%U#ZV$Sl-L?TI$A1%2?> +zx%io)w$ShDs;eb#?<;bL5v<2BCq+89L5uWJG{hQFOikJm9Ob`oVeXrboxAM8ae}yi +zRo5Gs^{5vV`zV@dpvH)spZB6l=}`FZkb-{yW#U^!tByJL*ik%?tMDL!??Sk}oy^<@ +z#Rt0?Dj8VV$CLk#%KfTc+)w$l&5(#9DGA)u2&NGyYs0-M +zTC;aD`!kdMi3pL2Jh4MB^1(v3F)r4ME{QMh3X|{KpJGqgqW0ubL~WXMeiq@ONfGe} +zSw5E7adH_Uv4ri{=V?0aFhQlLH5XYCMyO2Xt%WyV&J$S_mV7Fy{Vl9eH`VfaHR&{c +zOcEA|pP&yJA!RF4?!mAU-rpt~`a~N2k^`9|SYOF+MZDr0Y!rT4rnEf0%%*l81C(~M +zOmw~`yg*`If3KaYMBYelfLO%!>F&?x{Iy}>zS35^FQ9#Vd!5*h;5K{G +zGKA?c+{O$-(?sW!lJ#`~KC$NPmRTY8kySeE7G1s^H*e5EB!@__5MG=6+C8ddH8Y;W +zyh+`c9o+Z>SdEm|6df4{N6A5!emK})1;;sP&bC=9`D4#ba9gb2n~kN?>XhwdRAs+! +zGB@Zrc=$IpQM=n8SW`k#&A8b2B-aDFeSAwTxR^cK=3W$mhC&GWmNcGCxNDb9gEZR5 +z3RlZ~sBGp`ZuRG*{G-A(H!Ys8$Pqtfzoz2oL?*Bn3NYz~PeKTm^(#ZvU)$@^104uP +zZIbei5!T&=t$sO8|0JzPdKY|Ait5`sK;aJ+EU2q(qN}f7K$W}2H7P#sNFBhleQz-i +zYV#ht5HB?w<$d{uW1t{-PF2_dWWl?CW9&!+{mO6-`dT~1%`)Lf7zn_Le{h8;6R+ty +z;-NQ+TyKE3qfaE+D52V3M`!947Q$<`Z(gt!@fdvRTk;wUOFwg31rF!LZE}|B>)9=y +zl6;y@YxIytmtwE`emTa(Y$fTH0|NHRxbb|}LC_s(jfd9;QZindqL@2ccr)V}mOjFS +zxaR0e{p20GbjIrkYm^FgNXqq?qq1rsUli9^)S|{Kp8KrCFdGOb|1d*ImT4ayq2RU&O$HtMC_%<5PuT*fN@3|EPdc-wTr(jdrjJUf{*ok^b!y2)rY?Q2rZU2^Zsh$LP91~#3YlyT2qQ6*5S@JS| +zc>+3Nap_pIXq5>oFvgXAxb^jVj-1~IC4%9RbnXrCb_l-j0NGzLuUaXntnA$~S>NFB +zn-+U!=$XlZr?dGNka+Gh`=Km|em^g^rDd_ARleIIln1}|RO8t~jV7QmzNX$J +z4_|_5k*)tQOBF1g5&74%D^UORmqWv4nieqsF&OijunsYU+Qh;tF`;GT^1@y`bBuY< +z&PPf}baG}8@?v>iXTLt!%(!T_@8|5v*T=#>q}HE=@GN=b9+Z3K_mOPxNv(+R71XH< +z*Mk##=CzcF&~u*X`ts#H(9u%a +z&BvV=PBQ4od8$kPLBz$;PkrRFSU^X{%$&M&%#OZf)eS!Zsk@saS_Py4KOP%L3Ls1A +z(m+s@N}-O~G>U{>hZd5pSorywjNQ5E*V}lE@A;Qy1o?+$9JmDgfXpke>8GHXLX6;F +z;AO_Y0q_pZ_9N+S;z);0tz6`q$s{)jN+s_C8(+^$&-X>{n7fsWUL9whffQu`JUBP5 +z5{TSCLVg@8N$iDj0Ftk+$~)n|(7}@!2MoS(7bLJ-Ie1o^A<+#meIkY;AFdI{Rkr#} +zCi3c1jd=xWAt4cruv-I~z*umdzYd=SW8c<$B9o$XUs0^vk<~qY*gLHPr2qzStGOVL +zi;oSju&@`SyK!oNFJbv5DWlm7hfu~)!?+nzo=Cv|CBNWM@6mD~Tn~B>XUHh(gla0Y +zW8^K@>3nwxL|2=mR@n)XUF%&jh8jr+_3$F`FaV(xRh5$V0z?>Z`nWjP?#-W=t__PEhE=jia +zP`$;5*}c6lF~=2ilJKF@94UBb=mUm}SV+gDlHbm@9ntnX?L`#T=?xYgU$=Zcu8$Wy +zEkT5d`~~Q4nUR%)|Dcd%Ea-KlDH{1nQK;rR#B9ndJ1Y)|H?$cUAP<9K5?OQ`uCU_= +zXAaXCM;$VbPc{Y?n2_JKsS4Z(j&S6)BVa6tcC3Ze4#wC^!S!(vWg`6Y6_c1`yFHC< +zSMuw0yAH`UW>6S=!!L$0lC+O^g3)6N)Cb~85dhuSLn6lYbNfDL?Al*aNkb*S2ZWL!~dy0WtAr#AHnSSuq#WHamztLct;t5Xsc~3r5KX +zi>q-d?PE}-42%#hhjtl41427j@JbC=r+z)M!3*Fy6@A7!?TPz<>n9naRY5OS&!5fn +z-wq6!wsNV*jD$-4ia!ky!;fMy`vfF@Lg1rJv8^iQNZJ7@STxTcB(kKqnBSdVz)(I6 +z*@DcpuXncP_v7oMYmt7oebQGtto(=GT=vY* +zXZC=H{F2nG2(XixkPfTv9hcvkR8XcZ8A?G@!6|)QP-x?ta~12Vf=?Na^~9)K@VV7Y +z6m#AUS;in&*3yEodGKg5r7?Z5WFh<|UK;_oFuJg*1>{3ro~#mR4zc$=KjA@6Zo@ubEGsE$A1H0L`5w^u)(yvhocKln8hHo&A;!CV0L(SskB(+1% +zkK|B^AfxCu?!O#bX*`o4Uvf|FbUSaj#M!U5YH9lqjC!yDJg~6jE#XF#R|H?&t|xE0 +z4=mfq4a5ibSM8+NHAtH*#R-;&6vxjtAT{aujkTS>&J4`lvRbcFBwIq*6P`;-7 +z)6FN`)`rt;a+wm8S3KQ6Ji`Qjyb|eBce`CXI6@6l%nm(3Z;uS>gQgoPLF*t!3aoOW +zDX?pUlVsu~b2$1tve)$``TukYd1l$-t{*(E4S$L#R#rIL?G?3L#vk%NQY&=-A@>_u +z+Mv-!&SZv&X6l+X+h$fZV~@GjXNfD<6fA3KJxO;bpujs4*YdO6!Oup?b{wdtZrK)K^Y +z!G#x~< +zdsGookEaW}n;F^&!j#(;o&h^J#M=Iu&8k|zm&fH1!1uV2?I+hiuGsQQGGWS>4f=ej +z?+BN~E|$XOOZs}1^Zp1VvxpIAhS6exnVJC6GviZWk^mZn>bqgfZ8;{>>g@4~ormC-=To%R`i{AMu>f-xA +zdAcKUlp=nVb3+;f97bBZZ^4O*BrWRql1K7KHMdybt|sYx`F_@7%qM4oy$r+)gK9_) +zWt741-QqX4m~hDgKwFj}*0)a5cyrWzzz9e`yV5CFpXaQnS-C88yCMK28n4{wRz|mS(T+j!gMqg +zet{jxKra?6pDau(Q)f{k{izy-d};|SOs_sGo@z@edks0cFNP4{?s$i1OC*~}N+fE1 +z(1A?0lIlhewbL0Kw%8ais?-22bg6n|4gttV5*GvyJ_w)l$YXNy?J|PY!9p&i&FpY8 +z^Ui#`jB^3-#>TwfA%_;dfQ2ad>GiB}cN{EbHyZKSTEF!Ha6&ss$M9U&14{?O_;wi~%l~m15f5tJzFkJ~e_Y1V|G10`RQN2nI^Qm1 +zKbK$fx65efK=bV~7Rg1%UYteZrfr5-R?C`D8E6 +z)!m700cB$}PT6mlF`H)f+hxrA*JVWib{V;`@Jpn1Q+!lRYO#^G1a1W(YLLr%D1?BG +zgMTpPFUJaLrQ+j*3;XFV$yN!?0W*cR9Y(z`)NQj~%0`#XB12l{p2d@#RjZK1IZ=fM +zHX~+PFc|(Mk;;9z%$z%;vGWlHWyO}?{4BkUWY@=^xoo}p9N8O^(s^@@Wc^sdz-(qC +zVYWwf_yl-swO10x!&>fp2$jdTh%*Ane|zBCfwmJOPn3h*UEl{(Zll%^mYDUAn;wVP +zZ=br!^1c)d;K^q)!9n$1Xv@QXQ)FOzu@_#H3F;CS)J1A(9g_calJ~B!C&8Uo-*3WN +z!~Nl|+~jc5L@Mf}x$9o)Cu-FcVVd&&l_HFpATb6|lr@hYHy^7sQsbh&!;NB9rG@d2G}46XHOKNZ +zcb<`Rh47fNPk`7S*e|kefE%j`k9;N}G8o$<5fBznEk5XWeCeQB)$9!@l|v}dAbcN= +zoFrqu%{SXo3K>{+AJ%a$js*%@~=yKMA!6C{&=t(ZW=Vkj{oIuWk-QY32LOin`cE0KEylfE)yG +z-C<8@E+9Wr2NxbXG1C0s4)^ARoVyzkSMB+4fU@SJlNK~|&Dd1-&)N)y=2*WD* +zRS0}$OJSW#1s7|s81k@|P8KzzX&B{dIsFWujY=L^Wzv;^EwnRT9-Nq%olzb43Mh1qFL~f9Oc*m2Zn*I;V$nniG-n?~{y0pbf)ujH*GU@_B`v1c+ +z@`2BjJS-KQ(ixiY)j-9iM94zx^C3N_0MCH1@?fuivy8l1?Xto^KL24Eqd+qjcv^*! +z?TOaHsQEiv#1%&x*!D=v0?Hq9>nalK@*-Z7Qpy(2Gc{AVZ9oUsD!1#KWjn1@v1T +zoDOz62!vquS*o(Uk#l|cTm<9fiim$Or5DFiv-C`Qhj9~He8?vp9Du=>7GKGp=3iJkY6EuF8l*-K?wZSR^?noFO;>8fekn%6Y31@T81rL*!A7d2 +z$mtC15kGC_k>hgFnr5gS61lwu5fV6Jxr8B{%~Zzl*lSckXmcAlo)2z*dX~<(TqZ2G +z!C4OoNVBIeQwx$U?LmPSJ=+!2rZW+&oKLxqnpk3s#z2pFPY8Y+3FxKuP){9A`xfGc +z(ojk_t!Lfx`28A&m@yGQLy9mx>bYmOG%;nx_KXOo+Cj`vbbcRjagh#N^aewR%^XKM +z#^uZxZqj5a<$*+(ZaX(;!JA4E0WVUGs$U1t5=>dK1KefEOIPE{k)(9^0Ku7K=-HC) +z_2cRc`^pd@#xS~|4h+fcz2hzP&g~l}S_6k4@kT}+8yC)t4oom6uc{4gO>Xwv9Ti^xx +z82LW`zbfM^aKT@dv4qWR^vJ+!aM&;9JO@Frz_L9whuC#eVcNo!) +z_oew979-tv{OGdV7}weN_(Qo6#*Hjp$+l5le} +zGZZka8;%(;SKD&tI|MqlAto^L2}`ok-o_cl&AKWU*(z7NsG6*veti4M#Ru>l#%^klyRIv+9Qu|Wm?1^ +zR>@0Rx<8lUh0AHLpV}Ys*u412jB9FsY%OL&FCs9Of>Fh?=fu|jMj1~jo9JG? +z>Zw5|WRhlsm*X_+;~ezK_Y%*6P7Wbod%&2}T7PlDv&98#b=Gc8*Y$lk#9qS()fq1pJaHo6k23K^nB!;>W1QH*En$_ZYD)+QNjk5USV<5oFl4h-vT)z?A}NZP +z{v24?gi`zEyTu&uJ;{0i9hYJX{6!h%#J*9+%Kw8h +zK76B$Js*6V|3w)YL;s?TMb%B_|3w)!_My1{K^ZTZ3(*9>QN}cAka*xLUB&BS%BA0r +z0>|;T$i){VW@JT((w=Nk=Knz%&Hp#bSQaX#oU|Uw(R%rfG9nZ6W4(!dqm1s*A5d1` +zC?noeO>*l@jrg-op;RSBhr2BcA}IFeiI!0oZ!)nbP))*Gs6%ImfZtoV3P}^0$xq;1 +z2XZ_R@0Qy9x`L~7Oh>DTTOUX=VAUigSC-6 +zXfY%9^#_7;jVBSH&#(^NXm(ZGA7d(5s1r5?YVm?$AEMA(-Yt!GnFbNTX5q)eb%#%@ +zi$lhQK&fZ16Td7R=dwBx-gP68OHwA>z{nL^V%^FF@6wK)Fg%Q`z2nd=&m=PKmcpL(XdcvX0L@d3 +zNu4rtOVeR0N+~9euVlCtDk1W5X_oj8Zr~ +z|DcQ*e^JJ|h}C~lM%e!wWo#fp`v+x|{YDuT;Vek9wlw}@7iG$#!jtktXMJWX$5{uuTH +z7?1-yf`iRWBSHNRND;E?58$>-}Ic +zZ|#)!_2MIxo-&^JHDtRVt&8^#5?sm}3C_m?;8ZLf@T#PCi3>;UPYK;j7J4;r5mX7y +zSEt$&Xy?*jTiW=G9E3`d)xejGSdGSWjx&^4a3%u%7op{M5;)A +za2SNFFwpDHTrM71l;QZLnS)el)g)2ivn#K;+1Z5^B8razU;X +zL|?#FlMn?ojVYRS1CG+I+ia7Q1{lGhEKYu>p-y=`X4JC@LVqT}xM+V*m}McU +zW)8}b+V0fc4xoaj-I)tPdRB=Y_MFVe +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 +zx96h9#SmA>euUftkF0* +z4Y0C#MrasIauP4`rhUPP7+jdbR?%3-Q|_wL`vbY3qdDKfppzBQu!7?zkMQ7@ZH`*G +zq{0T8H0dE+hJtr#b>wQ$S&i{LqkE7NM`K{#k|9E{?4d|d5)<`3Oy`b +zFKZ<Y%C +zFVIJV5;>K_9r-84pJ=L)nKxGfCYvtU#fg +z#|Z^Bx4XpGWXicC=P)hqxG)-G*FDS!2DLvvS=a?dVnYETatCW%i5w=o3dn0Z#KLgq +z>k^<2R{8!;Pb!u?1>&CWmZ{-LDVWmLPN9zx=y5V!U?q`jj-aLq;hHPT +z%70OQT6YQ$w)7r&Qvl_B(hWUwXhw-Ab&$4^V&tl0R3|5pnwe@PEJ+7u1}&L@k{*w6 +zARjf=fR--x`}HU#j99}Bt7DOrWSe@HMipl4YG~$dFt%I72F27YOfrW{-AaiFC1VTi +z|0Vg#=wmu1#y!3(V*6_CA)-in0(%w;5CCTC7q72T3#s7L>a_hxWu+d;{1Ik8hH$&r +zM_=sdg0lDP(iy;NxCm!p7&|}(r@5tvUX1R3y-*F9lUwYVHCN-^;rIx}u4Jmxu5ZJ3 +zMlaLzerGZggIwt+{o%E$*nDTP(dZG-t_}JF;SL0M_|LOKTtDM5w6_2j1cAf#uK7TX +z3OFjS5sH=echu{V2!>_s5g8ZEJa~&~)u|$;?1*Ww!x7<^v}qkcQbxaP-HkgywVk81 +z9|{j26kItDepCCt&exLk!+JVU1XXP58_rDnLBQOuI$^AdCb=*(Y7L@ROz!k4A4|JQ +z50=O`6bnOpdk)Tnjmof=*Zvr?(<6D@#C!;xHL9Br2+@C{sObE|yawb%LgBBnkkB}O +z;Ah?@w90Ym+>Zp{i|q%j@YQ-gCLr#btF9B`XShxe=zB&*q$vY%N3BwvR2wz~m)Hk{ +zIMt?%UxrO@5VaV&M&%5U1dL~MDM0GQYC-{A;kFE7Xnq=d5xh%y(ZOdXgZwlnV{Zy# +zWB_^UFn!Bkfg>zxLdid57im>{yZdHjmlaf4&k{)WBe=Or+fm$2|?*&8SNGOPes$RkR|r6etpf +z!UP93k*_F5HxFuR65ZuMy?02a#PEWtqJ}8$O`K3f>mwARkG=)mGe)Qyf{7Q5dYSS=~19PZrf~C|9+S8am{Q-xh +z?^N-MQ^pd}{3jirgcJA3D6AsFQ^_=Z0>zgMb{c(IC4hst`hnA0)Jg&n*_RSAChF0J +zb8<`kOg>3k@p3IK6cS2T8m$w8CVg}(I;Neea~^#@(uoeE8$zEy1kFu2u%oYx(hTpf +z${+USWIi;%debT;JIK>bw}nCY4RrWTloNx)SDkCi8D6)3`c^FoYYgM%S +zoDVYaj`T>%>EzA_k;|B3OJw +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 +zTGL +z^ZJ(LD#|fc!F2@nhvVPZR=S$YBW(Ak{KVt%#EW8EBigRr+f)X+Q&o4k!e3MdLU)P{ +z`aps?*^~L$!09~O!gW^Ily6#6(k&Q=>g|ylb^m}f9hjy6us)rwF|gGX7ajFzIZE)c +z=dd>dyPQ-RuderuwZj_XRJia-mmm1S9HT`U@jo +z!XQxa3E?l08b~(T&T9!PTHPR9kwj`4k^9yTU9=sXZ{qz_wD36wV6qPthmZX^ +z2Tr`fD&zySl^B}FN@@FY1ijf|>sD<79$?-42Og8cc}bx^A5-<{^RBfLn1BKxCgX@W +zU(3fT(83>)wS?Oan@}%-eqw=8EBm%-VIn=^i&C>&hfC|RXbaGBk~xc6j|ThB7_Gue6&JS0fT1mk%ijgX;h$TXp80?m531v=S9wWZ2*(zmy4W_VZZC+3}FK*X!ci~-!2>vBkN +zT+QvJb%U-wnOy5hqJ24j6F||RpwPO~b57$(H+QX=^BR3 +z*oGFkQYM}yOoaH_kbb$PytwRf0uAK(k&M?!T+PkmTiR_zG{JZ88Ut%hnSd~#lnmZ4 +zyN{m!2PwYCif)Ql4+wo}*bLeX;0z_Dzf4X{SoAtb1zUlwI}sS8R75hykt{tXaMV(- +zY+bXaZ&PAL-~>2#iY*A8L*;smJKAIIoR*k`2*{5FY?XS>3imuX6ZMN>bpbZFyRRwG +zf3Jb3y3-L0vGP0-ll`>7t01H)ehdau+Ve@41?vDJCn#~_metV=wnS&kpP4C8vVRu? +z>h9dC;^u-u3hNi$ue*R(rV7Vp6b!i&;CH1k)W;+kaP^wDJ=Kf7oMoaoDq-qo=aMRV +zPPpv_9ibXK9@R+ooAM3^I%HG*nHrlBX@{B=!wIym$+6$7xR|l)fVGRgF|Z +z_4CLL6dE25-BqhI_g*$q>s2Eb%0THn708v@oF?5JZSb;W%?Kly*={S;kO)_I@ligV +z{nMtV(&8o1x0hf^5;yzk#KJjHy;aG;C3Sm(-(sK~L^<0*SqfZwM?R}a?5VP2BYwlE +zF<%vwFS_tN5)pWi!UgNg11XO4N!k12mbF^EBk=?Mke9t>mLc85HrUE1J46Y|TE{%T +zP(d;wW-m>gB7LL5JTU=33+{OdyH`2n;TrdXNk$H=3sBHnkJx-1pkvCL5)ZNCb7Ijs +z2`rg%faxH+s8!m8RTdjGwHE98nm?lcFI9xiAwOs{tLayRM4;0VH6KRJp9RUTnDiJJ +z%`*DQZ1N9PJo1j@LA)jw|A#6HIo}Ui&izXj!3@DNOh~?|B8|`*F*?yVRV>N;rizXJ +z&IAnu$$^Y+;hW!7@nP^pG3t4;G*$64 +zYqMRlEtW$Df@+FvhqhLW$XZF!n-W6eHD8$r$rz*tQNuJz8fVTRRog?_7sPl}*%phw +zNhS$e>O?jD3{a(Cc4X_OwBLmeqE&w@4YdV@;1y$xM5&0Dc^aXRzo{b3zf>{tAF7BZ +zyaYwbD%nR^^Gy{~n_ny0$3Pxv>nhB1#egfFbN-=<3jb2Y3d(P)IGxa!pp`TCO%?m{ +zzNw-HlLB|E*HkOhKGYIw9th3HZ=fJf#rH@_ +zQ41Lb5N%f`v^D+Z>lJT +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 +zY_EjYnm!cpNoS)(MfZZ- +zjj8;f-A&`l2T;t!UsUnLp6fw*l$swpG2!KcsM{p#PC2kE1hr^zC{9-6XPdYZ+1*z7 +z`x)FpE8g^GUoKSp4&9~gi5zPXB8he|ULbl};fCW1NQCX2;n~PhzSn})ht*GlkLmZZ +z5UzL!u6}PHY#GNmoYH{$OGf|tHo6L*`w8Au233EE_d81Yux1qmuY!Cc6! +zFf*Fw_1$Ti{IEJz%tB=v6v8G)2qWG{cP(s-JQ?=oy_K6PGc`?*qlixJHqYh9A;F?R +zomZ#IURn4|TgjmP>im+6*t>n1Sm{u-j=@$S5c`blUN!-#Rs;)zT!v98>H}Rdo7_$A +zQ7)}G{n^tun-U~mG)`)rzYBR?D8z&q2W8=Yd!58W#FasnpWj}31(2Vrg>^5k=pwQ> +zJnmcz=*xETlL&VKOOUcJJE)Xk$Jln07=Qu-mYe+|9siivhO|-2gx|%#rfiR{yf&b( +z9!D2HiVZ|;CNygh2sc+BIuPj|Lwu5DuOkhOCktB!WflUiF7Iy4;t@V;;jr!K*&hYyI{P-eke)p+(b#M*v4--Mw41 +zO>X78uFOzX7{8tNUq=yT1%$4IK#JTVprniV{L(_3j=gEK2%B4c4gR!Xuw+G5kBG#o +zS{AYtHU_0-cEbCxjjJhd3Hbb*v6=wEOoN6mH`b7itm3P;QD){tC;Bs5?5cO4kN)p6 +zyoHbLjeTAu;vEj63U_FK1Ln9qguE}Xh +zJ5S7aNfs~#*!Mos@Z^CGZ}g2B4b +z-}<>5BT3uGrmIw>&Q4YIvmU^Qkkq8o*-Ov`JFFcQ>VA=bykn1*4!Y2HP4DtL?`eWv +zCl8E2SX6$+l7BsiPLM%_T6}kw+ +z{fhgLI$T{Q`w}!o7_MkYGJs8^C=U18Y1?e%sFYrz~V09jm~q$u+br*#== +ze?nfEdh=Rcy|Y`%_xKEi-$zb<0Znv^Vqg8Z_=CyEW{i`7pMR+2!Uy1>c;NPD#*>bR0dHy|ynE1~wP +z=BFgFbrElT4jj(5l8g>EUe)n;d=x7C{jYdAO*7d?skCNKWfSprSjLG>x%Z(LZ17a9TvIA`Z`%MM|G+bYd!{sSi4~c69FP15G%No+* +zANVTrQx8tM_uFKnBD*j~CD>UEvAi~WiIT6J@6H8&7PIV8-j{s?c=miTYp84=8C^Lx%b(#SZSmUUEcUq;E +z1Rkn1qF~T_t>e!u^!bg=VycTtV}G{_l^0&4tY80B^;K+&<0SD!1ScRgZ}guiCs0&# +z1fkJPd$-{a*BA<%@a=#@qi`{P)R!HE@2d5~Xp`5b%++6<2E~r@a#fr+e59jfg)uCo +z>_TA?jf6w>Pi)%&-Tod8d+apF({6cn-R4hV4Vzg)Ws02Nfyk_+=?;nc?J{~=c|>MW +z9J%C0Od#MrZf5w`<8A>Jp6?Dx-3)7HyVCc?XWw)3NUFb_z-TvM%j+;N@xExCBzi4wna{zb8fELH&AfVkYW&7rVYPm)^4J)L;P(gen@CP=Q4^lIei! +z!aRi-*0`|&i^a*+yvpB8Iy^>$Ko&qUH%I1}`y>d^(+71pk84MpYqv}F)`EIW`rS6H +z7OO +zE527Eh_KES%I(`l(9oHINzQgE`DbgI?~EApN7rX=O4u;wN`h?Dx~3wBOka>#SBw$6 +z+vm-k0#| +zx;Sk>*L&SbO6KSl{A>E#c6VV54;*tuVf^@Q%O>Eb*&mlk@R+8W@*`B{hTm51YnIqs +zA+}Pbs*C>Fc#>{nnx)vbMkvQ&*jbLq9SNy1tdtYoquxZ!8E0mW67H4jFB~IoLCxJu +z^q*1Xx>ja)wv#`$A{L2*7T#K+-cexzkyRuJwgc;8j8|6(DKBu&K;UiyMa!74ebvF& +z+r#hG#b6Bf05Bch1OBfE=3)8lT=js+7xC;e&xvJQ%*WDMDsxNTY^#O}N(rz?8C6fX +zmlRN(z$1T0o-o)waPFqtR%UAH!vYUoJ$~O$|5d^W@|@%I7aSj=)Y_(eYhe$($jQo|UX-*^J%jHq +za&)<9pcdrt6AyE-(N9fdf`02yjM7nXy4NQ6-p`oI2x@o2zkWMREW~3s?`3jXDIwar +zKotl?yVqKKtqo4RLN!+Ee|0Lc_+6rk1t^)H@7#HaEr6)Mm!0^?Isk`?YGQL1s5?%& +zORAZ;;lnfjfk^@1v+s)ubtPR`mo!m4n<1iN!jlrMz@#GOAqntbB$%U{*~ou0&x4M% +zb5p`nBAijTf<s6O +z=tIq>uDeCugO4atcmlipjYh%2luFJ_KZBs`{*VyqX^@M5oFtB`&7nWLxN6}qkVXyR +z4@-rnihX)0o`_Ol*FkVcG3;>4xa2#T`l(t8D!j$dx~RaUlqiZnKrR+!aink^bqo3k +zjoSe9sU1RDwawP4#}#7%Ob+O>UGOzrLKk}_S1LeN$jl;AsavviSb9Gf2Q3QV5qiAK +zxm&oxFmY9@J6Jm~!NZ?l<$_1QQk1+iPFD3?mJ0*y4@TIuy(IT$CkmZmtiVhV9m3m}h+wC<0tIIhjBXX4Y6=!_4m*(9Tl#^`CP` +z&8NIE(5LZLMp3*A9MT@5xjbO=HwhPPBv)QhN3GVi3mPRb6D?`$STSK|TU0^bp!3ME +z!}yuY2f$JHSAH_+!O#h_@bO7DJf68X;`0v4-dh?ib)#S4Q4Ea_2<%Cp8NGeSyDI%{=9F)w(qdiOiPrBZup +zm{}(ypkWci#R-ep4aWz+%2JIDG>OqyuoYeD*2qx`5m98TeS$_@gAr^bFDgFG)?X~L +z$|^U}U-;*PQ|x&8O!a4u-qju1a;v{n9gSdJj&glyhh3`<_0FK{uxh|r}wgN>F*qiR^`Z1Igg +zM`pc|{(6v3+r-WT`(%3XI0%FiNy(J%zKfhl*(!Y{8TZ8sfD#AA^F-P(7qGrHxmEnD +z{y;<)s=maqzOsE^(@F`d`!}_)=Gw4$sYp$SE1v$Z{%6El3$^5Px5#bg}9b-Qti@?GO3o0_DxMa?M4sR +zS);gHr08dHsQRe|p=9lTMBXI78w1}J$a`jt#;?EcyhSxiETg-?0JtE>K=FrLv=B>6 +zZLeCM)YED)%!9D<2#W^7L3$HL<^w|q8)m^yLe98%!&#xKEKFU!b<_1W+o_wt3wRYT +z`0_R1eGUXL?8+-^?1uO4rgU>+ukI$>ut;?vx(P6h#Z$+MY-h26kL?f%1Sa8OP&amj +zIl)I!=q~}5I01eC4*-ooa=*EQp9!~88B{=tv8rvE9J!YhVLUdLo9KK*8`zeuqDLh; +z8J7+Em52N<1-=F(F@5oB+wA~+<>HtID|mbmD@;{B&~eGX_NA5duQdm9R~UPrzCJJe +z9mv3A%VA^}$=l7uXbo4SE`I}JnJ?Kb4VOO2k`68GXBnZfnp!`uuL(V2o0G{CredDmt1zrS1HD(E10=cHvLq>p~RfUIq +zVAeJ3f91gavBlZ-1EDolV4gav5Bg;e?zXUw37=C5O20+uOEvG`J-lsQ&V4GgBGnTE9 +z2p6`-DhSu)-)OvkvC(gC+W$jdTNN}Y +zlr7nXCFh0knW>omm@;WxQfVb>LZRFW85s>{O#q}EbC0*SM&3CQ|9z7%8+i<>C=#Q{ +zlgUvqF*2K&kVipK6m61(EgZ7=l`3J!k*aCKBTGc(`vX1-94Chs_q;RFe@PVboT0r6!V1^u}wFFyNc +zJxctUuGisQj>}~$UPA(y{7a2wR8+CgP1-&>rIJ{ZTEe!7N>KM&w#Y$by)52d)VP)4 +zdA@u~oO8t_LI5Qm;JqJ;&GpGiIro6CBD|rf@Ug)DTB;`Lo?MoB4-Nc)(f^QOMGhWf +z%Lyc`o=7coo=G#F%z>m+EO}UuJlsJdp)=ZSHy1J8J-bY?hg8PfoD%;&h>zVN-#d5! +zG0Q(*yd;M(GPWs4)$H2O7hgHvM!ES%ADZt#42i1&+~}hn5@PHwSy)X=lPHtrNC?Dk +ziSlbjDsqxQ7#57;qh-=g)}->4m2KFt!C}-QSWU?Sm1IC7cZ_sf)2{<-+;o-4v}*K= +zwAYzHZxI{Gk^nmHdQ32)1XvbAprONI)N2zHkVjX?n6SKltY?1U0vZl^P}$)Zb#&q! +z#>ac?_xrEx?6pT&y)nguN}@f4M*@45zR`i{5?N7RLI)cv&y+;emB?YKm>sBx7%la7 +zZ|4@BJ`ZQe*8FttS&clACR75GmIaL03|+1up5W=(gDWtik-VpS&WR9aY2~v`a~?s| +z>3hczIGYGL8+7uics3WT;Ro`wyOf_lvW%30)izHr{yE-sKLm2YjT3t +zHO7sf3DDF9@d6N|%%BphkwC!R+<9uadrIH#ku~$^@N%8ewQn5|MNy0OZlzl!X=$*o +z*U?IX1hW0XEX);`r7&PpIi#B0oA>fA#7D`A-kpBs!SKzgFd_Bn>$A5KA5V|;n3YrC +zTwTYZvR!Vze4?54TvPH%nz=+8mt*pNC|Kyx+XA81RW>RfKQ>hPq76O+x~Z3ZVKq!+ +z3yD_ajBVFq&MKh?1HJ8eop0PhM#Qgna2DyQ-=vzB1?*DVdawnPS4v>KNr9xq +z83^0smGWRPTuMEgRS(HQNdn$JI<$P@=po)1m6%%XB#L8W=znarH-FPIl*HKau$x;N +zG1e(dTLOmx@0r_%^>%TNRWFORGQ@4dFlF2f>(>~N4670*+w9xuV^LmEuFRcYO+Sa +zQa$+qcgl7Clq+aJ^UIJmA9Tsl1eFkd%aA6?WtYSLR2xn&O(4xl`{JP!BRU+0sow^L +zTiGesBkF9bZ`zdbxHAr=H_Kknlyz=%9llXd3+hoI!S%TkNS+;X$y&p3SdVQwubEa# +zY??865kzaIPwYe5wWv{b(b7F?tYeXstTV3vdo$hhc}e1+5M@}xqS~9$s$LAX;;`-! +z;=RdZK8OV96m4q|8wvKGA(?=>O4s%C^$pfKq<|*+^~geZ5p_u$EZ{X5bl!5#lX)6o +z7?_%Ma6lSeuG`iMK`Pl6P*SW>+%1y&L1G}o{z@_!zZ&4_4bk;rArODOD0$x^)z9SB +zI#-F!*s0RltWh4?UIaDErc@H%==Tm{n+q7?<_+DulG*}U<~x4U;ssSZyvws>92~|c +zP%i~T*JO2xz`^7sdFjJH!@y-!!8Bu6u(0DP|C03`p4;cYQEAHJ%Cm*%5PUjAoZLN% +zA?&pc+eYZ0k#Zm(xN9XCBM(5N#P;*AKmMrpaglIpE@Z&KI7pmV6tE$7oS7@cbD~Er +zr^sn$9XjgvwlEUX?I&(D5e{LGgs7qrst%8-1+!$|V+_Pq}FGS3bDM +zBzc1traq>Zv)=(czoGh%YuH)dV!#qnq*4?u +zv5-n_5f{{5;t2sGwZHPrER8lOSW+GgT0RLMSj;5)V10(ViD8qxUM{Ka8lnRXr41gA +zu(Xt0>#amMb!o3fd5g`WcUjpb7-`(TrF+(?!#Sh^na|jSH9={0stRiUvO9VKvzq%H +zY&BbFgOKvhXSw&k{yN2|u!2#Bp5=NUz<&9`xLm?8>-1IYP*s&9Zu2ayoTCc|v@!mS +zT#3R$QD^Zjp+Hh7K28Z0!QikD$J*NI6x%3XwSrzysB^74HSAVED##XCa}O}*ndw{L +zagBV#3mHmC{+-eA^S>OeyCxS!(76GPc99oJ3>Gt&Hkrv9BRaMCBn_knOZ0~TG0rc|G=bwKx`hP$5cmh{Dr6O=t8E^%C6+iN4UsKtlBDRGy`yDxY9E~;Zh0rR#tuM9O6@H8GciT0W}Qf+)NGGNV(+U9&%mV%*NYNaiYZ#$G%C-cG(*! +zkDFa0tf4=*g0*EG6&>T*mP7Kr;k=0zurE`kyvF7=x@pksK&|s#Q3)f=FlwbB_K!%3 +z2^%^PmpQwq?Wq{&1(T!2LDC<9i@bA??lWC>jNNP>FjqgocXG;O>F>-pN_KiJ0*t1k +z7Kp11O#&y0k)bxQVhq|G5+sGFY*0i?sP=)qV~x)2kC@l#1ed>fK)(XmsvWqDJbjly +zGL1i1ShH{OACPGMi^~e!wB&kebBq_{U)EB)ghxkMru~i@H3rE>=lA^F=cBvLm!d*} +z?7Z|yc0kHO!t(Nj;0fxl7EBcrCJSUY8Dqot0?`vIIgtM)M{hS^aP2urC$fbvXT{iM +zW$!VuyFq_~=ql`RN{iFRVi2_t4Ol(EC*mhyNw95BZ$qkU^$v6=idbPLimyTYw&>>Q +z9|h60Jk(?MvJHg8QA_|Edzq^cx)T^r~dJwzUhthI@VSL_D2pl#! +zJ{EMzmmuCfi2}+oY?4P6oB!nqpYIiq9VzU9xH`x6N(@P%q +zlq~quS9-m8x@$qo0015=JBs9_s3Of;9MVfX-7Y_B4dIg0RsobupMdd!Zn?$Gp^ +z_KJxp`^eWZHms#URYXfp8U#0qUtHQtJo>7+Ft>OCTvXSeEtmz&DJY{^pNyA`<`1hh +zq;7O|2a-&Uk|5(uE+GSz+s00jBP|~QekKNV +zo8~WRx{L_b@YIi(gra$*hOm&*4+2Pq^G!At=$f2> +zl-lhyy=4uiUF&>0JA+ES@f!j3?sl*4=rBka2G@jNrswV(V}B~qdI;dKUT7Z(?TTfLs`S?gQZR3S8iF``Hz_VL#B~9KGVz5QGK%=y~kih!U}#CN#7eI298teH1zQ#9C7%k{NmebVv~L&M_iEi +z+}J+DT#~g7s_|_SN=dA7ojr;|B|$QVTOOfYZp)r^Lw;yF+*fb>&Kl0UcdW}WIXmzM +zfZoPN)S3fwRr*jq9(?ov34_~RmQP|J&yQq#m5tbE4qBRD0SQTwEmnI6@diEQ;vR4F={A1FxlWTyY`t@SW+-aBZTST*NaM#? +zF~Ri#1Ls+Q_NLt&`XZhAy`J~R9|SD +zzIp>hFdOrVdlq&i+&V{5>-|>X*7x`vHlL}IRT1_4uug_Wzs--SSHkk~qNVKOkzTm|54K$C +zAc?fy>Uoi~pI)X#=EjN&9f(3PV3AgvR5jtVYRpW2t{O7Z*9NX&vNDu%;Z&aB6SByW +zumtn(=0Dzspeor$4&TUmDNe96ePNWudkq|`YbTGW_?I>6Q2vC0$`RxuSsQUsL;4KY$w*VO`%HUTZ3H^K^g*7jCY|B={K9*C> +z94L?fCb0l=JCBfHeC&3Bj0H4D-W?EUWC#dQx5t$-PcFC2tI!nEG16b15i}%T=w}Il +z)1Ihg4}}2dL +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 +za&ap-eJ_Ap3D!(|x#R?9GO%~+^-6IyC!d`O +z!8F+OS&GQ!G +zXG{9T?X;*Wf}sVC5)PX*DMGyD{C`KOor^)}y +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 +zWN}gv5rp8e%1ldG&}X*PtP36(o?)da%R>8 +zvmr*Q9eahXF)!loovw=Oqy}IDe=;2R8zD6B>%OXA(>mB +z@g52QyIl(dhKz~DB1w59*d>_D7mTejoCVIxq#!Gs0s{-PsuohrjaeyH@75BSR0r#^ +zW&IngIV4}Hc$aFV+cRYR$BewC+jH6m)5sA7vsQX}&7l%JGu)ww4I%P5my)S<=uuaguXY3VmGa0 +zLQG+f4@hK*!ZLzddAt{t?a{j^yeYvt;6_pF-mg()ec{nE>`+m4U6RFJICn8#x66BF +zeWY+5M1|m$bc(lXcv-*68|;s6BB75t1lrOKc{Q4Lx}n}Qd3V>M0`dafMvfh=Rqp@xj@s!>umscEJfh>;*2l+uvBh_i&dYoVj; +z)-eHgtso-oVWA9&W-xkFCdw>S{M=mkWiF{Qg!RZe&NN=!bD*{Xz(4 +z8^({!6D>9Njmi+{3wd*q{vYz%tf0Yy+>~8ta-OK8ITe$S2`5JrQY%ps3Snu87;89d +zhEmcpw|HwQ=$Zo~$xjq!BacB9g<=#sGg=BNdZx1%bSemnyw0R>3y1jtQ7QxW;Rr*kh)$VG#0wMJ5wn?r92{b02Uj7wWIKBQS(fv +z4O~gwiJt43to)GE8X#emR&%CH5*4L5h;y^b3v)$@Z!Rqgey$lU*wq&&8!jOOSJB^X +zTgvp2wTwAyp_NIy{gCj`s%}xxACto4wZ7&<$xoqeyM5Z4W=URy0+{%vf-)-HK^L2} +zwKsAmvLv}wZjz^9eQkO~1|qBJ=B-KfTd1PP=858*7BdYFR^VHVT>spWk6j@X+*trI(jOZu$svsNWr$HVckRcl*wWw1d6!8GH*$ea-cvM7K}ws)65>-lgw9Uwqd~o +zcD)qAa&i}_F#{60VmMrzeiiuVhL%oKtI;B>MATo +z*)~1^dDI%lgv;yOyvGwx@M9N8o(+DHM<>RHyd7h|kDsEmmmXnu#VkXV679}i0(h|G +ziZ;xt&>iJXXkbHOtfGiI6H`nTvkmnSCAePB6O2ErGo?o~lGkvKIT6AvseG1UjKhpF$8Q({<0WDC2brNto=vFJY&a*K6c!_Y +z6+znA)!dO7ZyKuby~C4>Ke=yxzl&%{p7{+V$E>N{~R?->HRZu~`zACToynGl1io +zu7&YYw4zrda=CE$W~7>s6t(-amJ}Zkmv9+{onKvD#p7u!?R@%0HS4jaWHUKqiZq&S +zuzo1`?9tl-HCIay%5M(~s(fBYr~%!SO+IloOkxX)R{e;_F2$UgLJtn~mTNnn_z4;c +zxpU8ZM*e`c$e#Kj`ZP`8sgl-%-Y~kP0PdXNnBF)7VQXAc95IGV$)~*XaXV;Iz}tI+ +zmQOsyh$}`VCf7~z6X{=nOC2#I3EV6rEvXRdRT +zy7bB7De!JNoUBrp;9#*THD0@zD)(eMgHWUCy{G8na@j>x!I~9qL~P%+{4D&Kke-jr +zWB>dh6mPRoHEbxzyu{Dk>w +zK4Xl2^}A`gEP`g&p%l7=+c=NT^)M14#<(IwVPB(b$~+2(@k$sJmB3>J&|9;ukM7gpe +z6MwN>r6RgWe{W!B2UgC-f2t`1P)x)G<9^i$=l5D2?}fxhT=AVP$Yk2b8B@3wNjM59_9w^6yWIipOlWB@ifO;UokcHWL) +zf(?sxe2Tuy%PI}gG(+mIas<98&$rwu_HQz|zFz1CJx)3o^sp53J3M$=OHnmWe`x3@ +z?{9J%alMT4bt&$P)1}T%+cP_!kldZk6ylmvcwKL*N@g!%Jx6;Aeo@K+si>3P^7e1d +zXI#o$>=Zi2MtD?nvNGF9>hXA3$J~p>W$I?3tq}O^J~UdD3$c!ctp(?91wlfM +z?=aDna)y_1?;Q;ZTGQELlU@5Zs-UAHP?OBopzJ@X3*SH1cQ^hyM{X!rk69s& +zPE?dgC|Wn%N-(#SFbD7uX%qfYDSF-L~HqDni~Cxf>K8dhx!A+SM+h) +z9UO5$3DiGv22#RvIV +zWL72iB~&d6V1HOGy6bWzwFajtBh<1rP>sA8G~Nw=dh@Lb((?_MWWh4!>{I{+WN-4E +z7WXZsRl7`E|0sEuNI-l#i$O*&;&%v93kI0el_Z+ILc3x1i^51>Gv={oNWh}eX}ac{#BE1p+QykXSNTba)3#Dt5IQXa~ooy(lO24jB00Hk9R0E>|dX +z%J&FYiLEnsV`H$x?B$hktTlQDzX5>9NDsWsjN=1 +zBlTK^^Bznta9OK7Z~zyJc!H4q0gNEP?uW`(x8$isELt&p+lgGz$EC9lk)oN{2^{sM +zCY9k%NohG)jwF +ztEpHFfIp@Enuy?`92FP0bMkrOZF%x!(~(ZXTK5Z;1;5tqx{@_VDv(3JSFnU2W6g9? +z)i*DF0i<*CWF~laSL$28p=<(q +zXEDQZ*y)krgr6d;a3g5VVj6-gPKPmJBq3MWSO~HjJI_zAHp-=xi>H8``~<2wO$&0Z +zFVbdqZ{{1);}7IEFJDf+jito+)1m{`q3lDAWQmOfu7E}=+HN$4)xtv-iP|V3k}PPv +zi^RuUw^;d`_>t#Y37iPgN*5@>2AqLZ;XC+(`jKN)z{jzn5a1+o8E%K|#M_uT7BkfB +zRP7%%N%1=#j~(J((iFx|XS|jtPJXFb$UWbijF#x6(4|vb#1TA73wkaFI0gKPje9Ko +z1{^SMIYjb(c}W)?E7u2sfW1qrH0z-*pfcH3J=ho(WWw)WfLuh-J^a- +zQn~I$@fMN-w><=}P{mkKnv6_~PB_?aNtDC5q2pA{IGjY)_(^U6ve+Y-LMlO;J|_o! +z&q%0A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 +zJ}sd$2923?bryHCrPH_k>tE!0&Tz1#) +zPM9=N$YK!;u!I;f{iFbsr3?2@df(9bk;V66>+Yaj=Kl%3E>cT}o{ST%8IC_R>0*Cx +zp1`0yU{$8aB>`+t;tS+VsumXdg!8k*JAvoMc^5A`=%cjpVyMS3`{E^2!z+0HI|%nn +z{s*~^{yH_{!i-fBM>Ks>t+0l$|6&FFu|{`|v7xEh`s`j+JBF@Up-CH%&&x>BnsF{i +zWX}p8t~5`{I4y;lmV$O%ICdqo4_KMo6On+*kO{`OF!we>lqhzh1T*uahU7Fs7K)A# +zXEPe@&^nYKI4yV7TzCBnX +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 +zm3L6X2-jVEgQS&yXmsNnrI4HR3% +zySpr`3^;nH;9yY1@vi}QT_D=8Yx>~Wp?z%|=tq{8+l4)8mc14*MV@{a6O~1KK&#FT +z&P|c%A}iW*-q$CI<=*|ky&14NL4GSPSBQf3hODoCOkt2UkSpTK=F>+Q%Ls-L%~oS{ +zvCOU!-x>uFDHKr4&J`}UrRyfEIbGnf32wfwJzauaKtfi@g-hC2{7OO%ES>{w +z-K@y;S-zE`p`9T=L{t4*)?DoptMi9=68%8;py_ +zM|IdCKkopRSw_R%oH%KBQdlrqP-_nzx`$|BQrauVtS+a#>%zoQ>Teg)cSPc=3+dO+ +z&{lUp5IX4T(6=0QhdzlI7CYa{zTNqaZ(s~~ACSIoDDibv!eo?&{k2~aB|uJl&S{$f8OZ^E?%}rqh-a8 +zE|VGtiJhY6Vng}dPrb4$IT;i)4Dad_uusuQt}pqK)nnjP2y*^1Lo#U!Ec{C)Fz25z +zWW4>8^2VK)R$rtIOb=muR5$EX)>2I4w;I!Sh=!kQEadMKJ{H8XOAB+;XtJA&QEP1T +zxJ>Cxs=a*Bt58e&aUnKA{FAo@LVP#jE{Bc~kl9fSFpdQmxpLJQwY+GTie-+mT(F7M +zp3qTu!q1BNY0_XM?ZKc~@ldcA1l&P2DGu2v){Wa?%1_l#_=oAkg5$xeDb;FxZWAd8rr+tG9e#R|tjQ*klo+axW +zZ>2e~ne#)d-$xYO4|~wUAH>b7v_gg-qP=WnXBD)FuP=X!)q#J1`@9(^bo7R!Kw>gA +z33tqVeOZcNRzpxNBsN74F!+dvTeA5f(saufUo%`gvGZ_>D{*-#L3$G;Nk`g5!H#LF +zFMaZYG^l-h;bqQ%u?%tmqFYKo$N@JWo2#Hx*+_$yS6YKs2EFR$;;ngzJuwBdJow$V +zhn<*2ok~?aBlN)w@149@G}~1V??D-*)F6}MCUH>EI?r3j3Z4$MS#>GA1vQ_Ju%2nj&+QvEyuSl +zgy3H}NEn%UU{6d4cT2y&QK_#|u)6nN>jmvsb~3iSQkkdu*BEKil%XM2I&>-rtKiV$ +z7OY1s2lvy!U=?NwW0Jl6RBK>1{UO0msDrQ7QyI&J*;5mp-rbGF4J<<9zmsz!P?|e(1BAmZLEHmQ;IgR3){1c +z&V7t*ENsT7*#4nWLZjy6SFg4tr;hL1LF;arQR?TDM06QD((N&h$& +zJd>;@vfve!tMtp3Zl6v$J@(B|OO#n*N`0^^n~w;DbD#BjA&~pp!6`#(cHUGFmnOp7 +zpPzdSM(_I5%ruiP_Z4~6*MG!E%^E~##It&1_0cH3grjS@rfRVUF4Zzq$yT1f*A$bG +z99sL*ldjsn_59>rc*q7r^dNo;rtx0QeGn=uEfM#)gGcb`K=r$93vTJ7oV}SiH4!g52WkpaQfN}=wLn1tADlkxQPOZ6Ast^ks +zLf=E=yv&utcwL*i%zf(Pl*RPH5YAh#&j$l2@|0Lb33-xWMwm)FaAiU~aM2KL&H68L +zm=5gOf*0Lz9wFHXT_}>|mJuoDODvt7_#{~xjEc3Gd?T7XDzqW6aSAq)z@HI+t)s#G +zfUYHUSBxr#rV~;QUCzu= +z&W@%F=aU%d0j+)tX8cGqrOC1dl|^08T-%KOw3R +z-6oCZP699bWf^HssSjR>LVn`pn(w#7rS~2tyNXGOsJ8f!lL>?wDA4J8@CJIU&e(0O +z#LB>1AL8bPUBUBMC4E;Ko5{p2V0>8tz|4R9o|=NyEc{mEVsEsf&j5ol#x-d|v$yju +z(t2$p0*_^pqdY2WVP;;fFJ4|NhWf5V(h2xw-vQ>$GQ_Sg^+Dpqk-HF%yAUulQj=A& +z^EGqM5|Xq_hjB5r#laETc)jnycrr?vP*rM%;gJw4jGM0>RoL#Y>GN$7rm!O#WN~P= +zlycd?UE%ze3Am66vc)Pc12LE9{EGe3lA1oy%Y|xpivRO&SoKbkhn;Z&ZbFEJA)2I?ZptWZ3YXLMO0g`sua4zu*R{c_ +zoGM?JB9lDn-?Ff3AGYP8l#g-7svDgqzwADblUP2czMwT{OxA?Qu7Hj7VonUd+}DZ0 +z=_o +zE8A#s2Q2tq2HvOko6{RnM5ltB^l-6$TOxqpQq{;-&9y)-MgAvCSl>E+bI#s?jA$H) +z^r5)T4mi^A*YCu^2Vt5FGGehm_Gp6%6vr5xGBJ(X5y;=n)AfROWu}t%PHX060nXP1f$u3i +zK``wV?3E-u0=GAKITgiOz+&ew7QWv}>w4C^>5ivM<_zU^v=a}(GbTOi!i_~bago!Z +z1Pvha64(}s-@<(QK6;l*bv;0LN)+&=9TmQ`Bg$XxsQw@ASk^JXfJO6|}jzm{x@BJV@@BV5>p6tQs|7gdR +zh<|Cv7DT?8qA%_El~elCj;#MnJN`Bb^pXJm(vBZkRBQieM|H*jXh-P(YDap-{YP4{ +zZgkOqYeylCFYPEQ`=uR+zO>^efA~Br!oRd5;Nc(b2%b5K_@y10{%S`R=l^QQfxLSF +zAOalQ{@>aW;!8WSARw3c8QmWL)s9ZHDdGQ1J9d$oxv?Crv*k}!QRoxRf$N%g|-N_)rg +zo`}dU1J+`=Tf@z&o)nZa6t;obv}J?^VTiYW60|(y?z%JpXiu%{Iw9jA=)e!u>%GoZ +z7Da?FvQDj#@T&;P;VEg*IDCg%*cXifH{D6NEswlVWLb}EDi4<|B~%LA@}i3ix%=Lm +zX?4=EhUo;*GLhCH-4rMb;0ZUKws2$JUBV$9Y_|Jazq&d)eu&KxE2>@P!NMAMz(e45 +z+sv)u00nmP8tlyob})HZLPB!hWtx_i-cSgg%84#0pYZ#Vx^8M!!eF@I@$@nzIoJ9( +z_s-M}(I$gm_D62VRY@@I3+sb<@HDyBL4YW`wg3SI8iL9=+dvo`f{%GEF@|3^DQG~2*@ +zX~#{9wYC4zj&3;rXvf#of3&0TXl&{~+EKLud8F}wv?JetwIg238^Zr+NAxf4h#V54 +z1M(m3sQXttg42CzN4PKTxc@KhC}sRtJ8~KSK$tN8(vBk9UOii`o(?C~riw6RU3p%RO^}AYQ +z+l74VfFyGQ0y%^6AInoQS1Kf%DsL0hInLGyW!bQDAW1&VMI4%MH*CGqjog5Z3$k0 +zz||v^j3p|4kh#8bG$W1?aC3DcZ3UKlOH43mdV51vN0 +ztPRbB4km73Db*1+{L8OWM(dtwwP8P%8qjnGN&!Ph2}))2h(=igo#smV`aTiz%*PfQ +z2acm&_^Ps<_$1-mHEmEpy^CSY@<~`I5gWxxvIAq +zF0dk$0`%K7=FO#k;C3w0dIi}hab-fJzBF+#cWIx2_pXD_CC#<0onPjTDmyx5q74b$owMPRw +z0VA9l7~q2Iv0s(+m=ySs#GvZ)+ctW0oe7<>+}4Gul3jl(Pb>9ys`CWtfO{RoN8-cs +zg|=M*d--OvdSPI>Un;`b=(d~V6!tf9a#3{B3}!jUWLm$o36g>)Y`VN`myR)P&KkV{ +zT;-#1!Jya#fxQXAQ>|IjIxj$VBt6E~2lm0gSJmQ{__yeeE@57Q$v=&4&~-c`=^+>D +zbx7FboN(l^S$NBG4wEB(PV8boA+zMo-kg$Ec1vVP|4e+o#~>XR^f)%vjC^&+5Q=>o +zACqy0BK5;IQJdBOXl&#i?@n_6)aX7Wh!l2W55#R<7azjvrkJXhwni~;!h#N3qHloG +zMTy0uLJ9{rgSFvmK&E1KEG +z4Il6n%d8c)$WOLJtzyM3lco$CoiG$n}ropH&<|G{cCag@FGs||?~7MS(?%}c*C;;d|1dbp!VdrXIO^oZ0-J(xv(G2h1O +zH)#nbSVtjI_PoW*VB(`(KyR$12XI*SUXw%v=mh`(M(y)2% +zy=}=TWDD0GHpV)3=_7uV*~FVOdmUxA#=dB^=c|#L40wIm&=g>TH=i}+qvONmdJ@LV +znwpyTT$?hy1^&vj-Zj*laI={taTd5WgfO38Pi;b_t4kpd+rz;$1?x$cLY(F)ihA%V +z8^Hi|!NW#bX3MgL5YXO}t$0fR;Bb*2JCFHE>_+rWIZSfMoWswyu@YU{70GUwwe3Mvv{aTBsreHh +zK4Hdh9;VGacN};k04(NAIqA!+tK4D+za~$Z9$f^=YBf?Wts0rQb%wGj{;WA7H4E=s +z>aGqwcVyuP3vpcJZ4Y`uSV4-Cv!jO%K|v_;9LK%F>M{Np|9)^sNak74_Utip(pwJ^ +zO*0sbDaHYDQ<)gU;5CWM9plqyBigf7_2!J&qo^WLLU5$>FZs<7NL +z`C|k$wn)7obyf-dX +z#cVmXJ4U$0=6ymSR6QC;8MK6omc3z|n%NnbIRRAYZC-1`}br?K^nN&=?UM_C7uelY_6yl;Fu&^MbACnO{$P!2`!Mzlo +zDy-452Wx~SXZI)=MBG1u2-!&StZpcIb}WgMYWji?p_k)$LIfDDO(!)K1ekr7BybCk +zhIS#Qa7&n;xprc2PtlTX!|^Y%k_kc#R(ic!X>7-K{TkXXZs_FgH7b_;Sc)&t6ZirK +zGhrU~Sl)I^*RaJ~gr?_^43{u`|J-Yr>=3W3md+J8G8=#avz*~@{f@WnwXA4O=a@}? +z)@@8lPerT_g|kaFe9#!KZzTWK*zYolxqJ$4qXI5PdOV(ZaD&t`1>QZC_2Dd&*D)D|kuEXSN2PfF*H}?LuScyy-d7H==ONemLdF +zPWRIJxOKS~2!G6iJ|*9EJ=oOrN~R+ILh}fC-M9D^cYvuXzF59S97`AuZ$G*XHASAH +zve+pI_i2;snK!1K0c}c##gAcaV6P-)~{;jy)_2hELS%=5Ecku{R|IK7X#42H% +zD6P;68Fv$t7^?G7){{+C=jS +zM1uK+d4nch29o$9`=#afd%)IYg(EmAJpb~~y};j1VT){axaRLwY!y{d$Qe%Q>1)cv +zpj%i05_KcVA_ir5>|cdQDFKBFw87m5_ieq)OR{Y#1NIPu2C=hTH=7P!;3T5n!DOF6 +zRz>;mU1*H6jbgfeP?P`j2-N>=8;;=APv+VCt_zq#C65MaTIuLyP|O#ISDDnphNZyjxLb +ztv0Mxe6_xbmS`^{wC%K;nrp0NFMjH++ecJQU>{u8DGq1-qI`%7q)nbAJ$WqCa7AhG +zMvPPxDu*jkHgi|`2@Td6bV~80aFZYqtd}{_uC0|u>@HmblP01O&*nwTG4D~-C{Ha0 +zFvGF|%!qclL=fue!~%9EGej){w24TKb>i{Y|32t^ysfKEz(fxMuhy?g&@GICVx6Gr +z$Yl@Ur?2bP!)bvx%tR~hLpD%O`A!2ZxFhg`4DMBigGJ3&klIN_SbO#Xs3r)mY$ +zlqbr>ymEp`7%A>^O^0+OJ>hrt;9`>jGhlxC_(o%&p!54Iq=}c7Ck=3jv;2@KF^m^G +zUo6_)&1S@%U8Ao;pF(a>wYm=4Dm8t)Yxp{fcwg9u1fPDZ6DNVVz2 +z!he!NU5XRAPQ;5Lj#EvYlCUZsX;5nn}{S~uf}Hd;AH57?WVYPR6Km1`$0 +z1S2%D@#Ub>Qx9WXd#U5rr=jtw2}_gM464fHz&(kqmFpIfIA>M@ +zt@j^F{P@Li9T#0D*>xSqQ1ckLQL6~aby+X>ad1h0>51&G)}h)f)K*JjQl0$^b15>Po;ikl4{ +z(9|>BaI*iSU_c1^Jc=QM%ebRvMwl^U+6997jJ@w@-F1}-Z|lPZ%3pM5vuH#Fu|g`Q +zS;{;q{itE-CQC<&118$UK9$!Aw{6wydCA{tHfsnlC>}{TPZ(n9yfp8@P9rODPi4&j +z@@pt4Q^r!$n$n=gM=vD15+-xGteOjWc^ha&0L_&E&FikeHWaadCE=9Tr(rUL|AGZ) +zs7qwoQj3)Wa8CM7*U*t3+?zzjIhm*f>KA|-w|`aJ#hA_sc%!0>FNX;>Qx%D!nTLuL +zJ4bM*ltHccf`_SBO%a-9?f95Psguri)yDQGf4d4fl67ELF25D=F@k;5_~Bjl4~vo$ +z{DJvcVEu5XIMKc%H>2RV1#Qp{KHc3UjxuFL7-)U5P#I4f*)J-`r83-*xbn9Vd6wf! +zv#`PiOuf2WDKm{CmoxR&pb3-4bNAJVbZ}?9J$Fo8a4W<5K8Hy2f2h0br@G<>&-1uD +z7r3~?#ogVV;O_435Q4kA%f*Ac6Fj)P1-IZ3EQActGrK+0Tiv_Uy_Bm9X7w96dq;}i|M^dMBw-bV5hR;PW-6#s2B28zFsi1-W3swF1z{d@Va +zyY&(1#wuDA55{5%Ikr@zQ-N-q=nON3FS6jM_FJW3=|bEXA1stC%%xD=NqQV@IBJ@OvoFx2aXH@?0s*M9U$*Q2U%U +z`Z#f@v9f+v7tSk6-^NT%lhHusmAH +zVg8#3Rtb9_!&}7T+1V2O7?HI3^A^Wr=Bm?AgSi|M3sa)z6!mWeOv_E4*2r2 +z4`l?)dxfKM*9l^M|K1pLFq%qFcd|DlZEr0z`uVU?{uf0Nk=)&|**4h%nLB>pXZRn(?tO$kch4*x`T# +zTv5pxnC8NI!YpN&zmKBaGrHNc +zpe9Co9asqvxM|DQXA=|U4K|g-#3`J#iYE; +zWXy+MeU#8_10Rsd=609~;_xd=>>ZEmO4lHwQ)+t==%=`RKzcn=+w=Sv>^+3d$kNFR +zxxSw;dO{Voi+)}nS6q5=0EQ!;(WDH1d5MrjfwgG#9a9ngvqqz9<_*XM-Gp6T%4`JY +zEjzZ{Fp!)|? +zzCPPHnJX0HItYcRV83t6FW+y;y_*4OK?pQrpMvX))w`(?*kC4AR@B4O%NN14Kd6=Y +zv$g2>srOWs@FbWFFa|FQ<2fQ$)J +z2l?Xf(U=grlCut`-P=^J)2mygQkIQGL5g1uJ5pU}4r +zNXPBJ+!|GoGDsb)(8owChpdpAh|rQ~CNGY*vD%seqGCkxMV$lxpgcnnVaii8#x+cm +zg+>|CtWy-9ijJRH#Wv*0d`S>~5+5j7z;`Fcg +zSey!xSI2bcGfL2&H}`lmRt-*>c*ka>S;kFEanu_*+y2%);2lDaMfo=B_RKwF0{*6U0wKY?40ViBcb&J!;wUi=@v7({OCGnl +zI;YITf7posVMey +z7U~>~lOM22y%6u&XNDUG@flGlc1Ks3+JoLocjHBE09;>UiQhf0B(^?1j_t1EN{e*B+gFUJ +zNJJ^4cf>^3WwW_g2U{(DjBT-D|Ag)mc8?`Vr;!n}ASS|_ygWsIg$+D=D_Dn~XtHl; +zox>u&6#KYUUtdSrmK?RxS;8D49wCZJ7>8e5xrh2_MH2iR?qdwa+Z2Zs*N#oH`ZuxT +zr+;EcsecDMlC2D{{GZs-^WVUZ@s0ljJHD6xe}Ns7#s6d2@woGU#*WGVz>aJ*{}Xon +zW%Yl>j?Y{FHg+`nAK39gQfcPj!;U@wf*m{lv)D03=U-t*zkiJ#e>49JcI5mo$Bs4s +zf*p1K9qf2%^uL51wf`45-f*o%x{|m6=gX(`3c2xQQ +zId%kd{|k0B|IcAZ>VJhDRsQd=BkjM&j-Y>y9q+jQ%dlhq|A8I5F8@1r~0ndqO`QGDyaW5<|<-YTj8EwSU~|F+oiy!AhT9hd(z*irT0!;Yt!vR@MNkeGei +z`SN@pc99@0HdN6lrO_NXOm+xk%+o_riZkS>tKghg-qNFH2W(B@pH_^&^ShsvinV1b +zHx-yX-|1X2h*fC1-RJoCZo2KTu}UQHQUvopV-Q~_XRuZpk`rZN$nr22F)1qTx$eRfUbx(?)EA*IYh;B|c7UglB)v=I8P +zs9naYHd1r#d+BLF56p!~Lqsa&JQVIyjQyqF+(F7=@cY6Ek)NCpH?KjK5q`2*mV`5y +zbk(nh3nj>a;yX$TcnjR=3bun|98IDw&RbomWv^32>p+H=Hnf3rp`}C2qTMoqLo2p1 +z*XOPu=SGq~5Be>1_x)ae!A$}yLS0sqd|I?QxW!^yOEw>Kh)mwcqtZP+%U#@l3}r0V +zT&9xEw-9vv9pcRs0O41cjet3{E@K59lgh7Br(V>S%~13fYpeNFCNQMlbcWAG2Y`v* +zx_J1-Qk7MJB@XMp%xEXD;v08H<$EQu^Y=-*;SD-zdY{S_m)O*s1Og|UH3EjO#cg4c +z!~-O$)}k75w#Cn%D}zr%`72T|)CBbQRtVAyVWQ?%X}QvvMD37qr#JX4OJEY9H*7Q4 +zs2X2NNd{YD2dj%QX$P}B52<9NBP}0z*|r^aeO(ZJ;4FA{e<6pWzA5Av+||(F2Pk9g +zMgTFhTZld#>dh+W9pfwR#NCUb>mqJatzw!tSU6aK))p3{T;Up+6i*J~Y32jM7kuWd +z$nfHAme|kjO13$`@5ru#NVP7$lgq7*Src%&zyr2*a`e=*@GkKH3rxbx!SSE=#JNXF +z?sBlq4>=}~*k5QO77y;tuc&a0(6MaH(1m^Vj*2z9rA5N5S2Q +zf03*k&l4A;FBB24Iy{?bdTwr6h;Qs-69YtQSgw7)Zkch}B(vZ`4eHzk};Fk +zHFqqnI|kdYOXrIa#M)g*HH*Gg#ShKxY6%?l^~U4hp%d$(A_YB&P($WpySW+XZn0F{ +z`vdRUUm_brPWiokuA1g`P7Z| +zpkN#U08?37|FLABU~G9XSX_?@*xC(gTcTZ?e{C+)Ahc@n=v_kXZB{eHErdpdM40Kb}WuduDrcd +zGUrm-;%@BH4x2xCW^kThE3e3dOB49a4k0z^T~6b^DVzJ#afr}$Xjz4MHL1jm#gNDS +zn)qYOtn=4Iu=t&RL7lBVWq~v?bf2c}^&M!2l(g;`BR6=Q2d-s}>RL>T)Z +zrI=b-#btNTC$7^8`Qt_>N+U@XD5$_>Y83HEydfYrnwzmJcjB$ANZ+N@qE&5JBIE(` +zi!kfLW-5P~5+LC%U@V##YW9M*o})wckFK}J1~Mqa|1;%*!?+%Lv3eHT5k+%!@As2G<#-KosAUiGV^Ld4_Kl(u^19=@l5V*y +zyfi$mbWtVxXcgnz8|tIT80-9mD$}Dcv714fuZPH8a0~|Fo!Q=D%XBy9(jYizZyGRl +zDvM_nt2fGJbW`F=P6DdivU^9j?o?0^D=QuJQ@0>@*ZC#mxh`Tl%8xg(3Q!Xw$bd$X +zECimmgK88$)-rkPIWE2&K`C3LvK=Z_OTsNYt8(6sNrQ(sckh*_UyUE|VhJ10fU%A!F%mw>I6( +z5kM|IK2gU=)g-`oDsu-v*-a6Q2gA!p=bSv{d9T4^h=LYf4)HZOaqZMat>b!SWQB_) +zixoIK?ahzbNAXgeblcfxCGZpvzs3t;uypr2St;=IcAwfdn3RZXzQV$Ct5!fXFph*V +zO5`>OMdL3KlR#O;pPdAnDui9G=9q%euV@JRkm?vx!ivw@@=XNPhbFsoF&R1WupCm5 +z;L$KHVgaPydU{Q5HMd=GlKHkVV2i4)^rwwT>M8@82E?BNT`FHjvM6IDm*%3!+3W4b +zcwr<$Vf0BnRi)sk18!IEU}1GXw#RtSixr5K9ldf%Qr}rd3ps)f-)u8F0si@%V_)b| +zEUT}Xw8aEsUDd8CObxUzf3Tw}wq2BoW_Cq6F!dm>IPz0%m%*Nq;(x{g37FQ9?6554 +zn8KCsJ&^~-K;Tz>3tGgZXLr7bE!cwW91LLkaKX3 +zOO06quw^{W5o2XfuHCQvD?Hd|f`1xDlU6)=1!g+VCT6yHfL$zc+O(}nd{_&g +z2|UbdGitO+=Hn_RE*aDOhU!i15nRF3-|eJd`sLV5Makl$Ne4}@ekkyaHt;EiMf7O) +z_#KH;^2L +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 +z?(#7kx%5MZQorJNWn8(?Ef97Jxl#wApf(t? +z&o-ZdqBt$ZZ_knZ;Akn0^0s1&01+v8>{GWaGpX$Z4z1GJwe&1Tz=hCwwyaP56}Gdn +zxs_Q_^cJ+tZ?0G|7~_;w$&}T +z%fvj)77R~F*Ye8AGTxGlmdNKGekps6Srgrk>_1|rwYyB3r&%hdY9)T?s(X0RHm<&h +zM#MZZ`AqhbKj(RP{Cq#}63NX +z__y1^A1m3nkWv@ZvIBOdxgw>joZnY5I#F2m_&>8JUnIcmr#cUuMA2l59l%7{|3p;C!(ly*zI_iqnJZ@ +z7Q>k&`xz7C(H`I9o0uRLDH<1q05tUseVmXt +z%0}fi)5FVbe%WIj_8ZK6k{=l}3n)t031sWcj;6La(@?HT(q5$0l*d<6x6lxag-=9j +zPv>ev?c4K84i^V}0hw-K`6e2(pql_GJd}t}<-4%pj>3Swg}62vP7lVox93Sj%i}L> +z`e$^>4#Az&gnxyh8`|;9$ri50hmuI}DF1$S1*>=*L7)m^*(VH!29l0-jn%C*Zc2WW +z${zioiTrRf%b>7a_WLWnQ>1RsI6f){6`LUGb*WgQQ#?_YRD0S*P;wEq^F5JgyIq1W +z@7U-W?{bxOmdyA)1dVOp{K3dLXW$#CA+{nyjlQ2r_?bWrPe3t?E2rc+Tdcp5!_D(SWs)GOH|5 +zzio!9l1)vj;`^yaoAayS$8njNN<7^g2h_}fwdE+_{Ob|%_+EmmhQO8y*{t*rF0(_r +z)W|Z@+Yg)QL%IZB?ZEu>V6(17XG*fmJ&0QBZ*WRXAx8wFzON{W11QNdb>{Ng +zkju%!Bp(8ix>EW(F0pUw>B-7dQ9VMUe0r+bZ?YB}c1!6zqCYb}xMYQ~q_$u`p*hx& +zRZ$tXa-u&^j4AypSf_4qL-nZSeVR*dY`us1yt6XlV@W<_Bg5n}hvjfJHn&E7Q +zFfh>1PISZ;@n{`!49SSCB!~nn%pEs_Gmu1%<37i-mErW-cZX%z$C|xnSzy%v;wn6n +zLjO3By9I2tZC2FUW>~yC#w6j=73D>d51Up8LH|@*G;FpVd~k=Q)@78gKX%JCQU5-+ +zDElcu$!+~4VQUIWYD0Ou>V`FO8atem2@WoAEyG|i!;Mex>xWbHAV~|ghLza>y8q_) +z(c?uRf}aEHQEo%e{sx(B-FG~gn|rcV{V8U&@CpU<7)Jp2QwGe-x<+iyWW3@2hQ?`6 +zUR-QBw=!IrqHc+k5_ZG1{gxBk_dg6u?eKth$KqPJHBIOhbU +z5JmHEQNb=s0O=C{RNwA^zoCJSHfMN%MWq2+6uimE@)zE=Hoi|W-`Hk76mOwd%i2F) +zf8B;2qFfmg)!DiBrc_KCPaNE`fPyj)H7|Ry9T`&;XppuYv`y3GHp$Oz7c5^7$W0#d +z-Q##R=>ny>Sy0?>Wx%&3;F!>x8Vcx +zor6HtqFRf%X(J63JEgN>z`PYsH$Sw4KUPp)qDDyKFqr`eRt~n;QvKX#=Sh>pzh4RH+-k+XI83~Ha_>uX} +zOg*=BgN<#62%nMRDC79k!@=7;{k9Y^P0z)Yv}q(Yl!AuspD1{0NU|7HBbiW0FO6B9 +zTbEV&&Gf#nE4T`PM_(hzA@NYs6#RsP>JO`!AEh!TV?T(U +z9R6#1lB*KB;!k;Q5svbrBmR$4BNN6Y{NqKZ6;}Qih-pQaDHx)%oXy+eYU&N>Br!R7 +zG3Plks3iAk0&7fKAM&3;2m^!{{`-8Q2HaD=!p7<7UA}H!L~qUteP^l$ +zXig|4%?A%dNU-t#`m+a%`Sd@mtv)?<4g3j2Hkod`gFgsX=>;nKQgQWrdZ=bP5Q;5$ +zUv}Saj7aJQer<##rPGScE==E&y_%1klvchDYa0eIYFYVlsrDQdmx0@B?VpsRA49zJ|SNZ2sLG*WJeP~2!%5j38#LWm5sB@I44}80$19T +zAu*1riwUHfJ-{gGZXGqn8ihvub^7c{E`R-H1CHTt+>U)gt(57b$Vj#)ipF5}QDlTr +zbJN!`sXOJqv_71?5AzQP!#uKPEDVV0mNUh*a9=cHmwMYhTsWud^X(Z5@q9o+|Ab02j>PR-B +zg8+Gd*q8L=b&sIS$OssoJnTqfRQ!-A%iy)~#N+r?K52M->!7Y8wrA3<&)lCLFjGcU +z0KiRyWAfwV5?qVwkkL>dy$H<_raTZpG{>?IiU>t*2n$tW3{WWUoUTrrLA0|e79PRr +z;~gmjBK{kWtsdko25iH8)WKIoW8}n=Hx-P7PbQqUE0~P#1u{F`RpQdZ`jDL*9BO3g +zf`cI9PYCexdMsWf2bNd&4XgPDUb0#6qnJld!W9Nsr_F>N7 +zD0wl<{3*+dRKYsm9cd_<8&)Yvd2B7=r3lOadcb|_&M(uRN>OqvX$xKe(zywtwZp@% +zHV#(sb6t_=fiEZ`se{|GSJbjp^8v`g^nxtR)Xg2;UO&^?9$YeN;-im53H<_;dp6iH +z=%>xx@)c@_LXt+S)I^kh&{;wjvfO*KjSsL*c*hf#d#!Ic&R%=}KEL%ES#dDa{ng~c +z%i{fZCQ5(APu`>g%$fFO& +zYsbCq$_`%-1gXL0X)q-6n0^C(;@UQ~R4$b6c1(U{1^P;?L>d#F?`+$=Wdj^3f2qav +zD{W)~$>hpv@Z>9r3`K2F2-@NRm^|`qVDa5>WW5H?Pl5ipB}(2CqeoqsvgR1v0+P>~ +z{TnfdXk>@S<6r~v*x8zfQq8M?$Rr;iH)oF%rA;8fsNL+$5*eD2?;ID*Nj5Zq>?9`$ +zCZW!sfPy%6S;4Ag`DAn0{b3?*5z{F=m(u#(oFi~Inxb*B-n;M@O`k^|B$jr-Qd~Sq +z-?;W`BC7gE;X0&?SsDnsn +zfFZ>)nF0nL_df4v&7E$l2mi=3s`MlncGlzCO#l;%mP)PJ*q@i+Rv$XV(XVk1g)i#i +z`4QaHO6kq@%kqNsk#`9=QlXYD>vV7{8NqnW&l=L~ZdK>Dd#2#7F~fe0Mrm6!7wE6{DyToSZ0KZ6O3I(Xt6JU(q(yU{ +zgQqe!C3RnQ)NYcsx5$`c_FsUVO0*SIjs|ugS?Y;t$k+0Zp0fNNSw84eS7;Ro!cm}B +zjX!ZN@sT7vm_w$fhlVlt +zSuezzHb#|p+{)1by466+;_B*1{8FYggQqLdxozFFdhq}kAe0;RZ{x`#ob}Q&w7O|Z +zc$6>(O)zyq)HY?q$p>Wdh!+1z+YPLA&sj?e2gn!Qt%gIDSTT`R*23LvZ;HR4+}&@H*5;CVI7Xm`)IL)b;|f__c#e^whF;2qRRKG +zCu&oN@7VVGR{2y9`QI-sT}IZ)6H`PBp{bWkLa>D5twxBZ?+_@%R#9>aSWl}~k*(&9 +zUXp+Lj$CA}s(CLEkIe5A-Zh5u(aTk{8PO;u5$^>H1tVIjxZjoax%`HqK +ziHCn5&N)1Ey9;dNwfa7&Ta$MD?WfVuTV^SmY!enEj>k?gSkq3jPT%zd2CY~89=atZ +zE)Nfz%$rCZD_8HffYl=k1My5EV&Ia2(q^L^%Y(dKXQg??+9A=*+0~RFf&mP?}P_%9N|2SP3>LBgHF8gLmJg`lOmqku9yVc7?Lim}-e+>*tDZ{>k(rNIY~| +zx-+vgE9+BS28rFi?kW5)mnB8faT4pLx6i+O&XE +zv>JN;SA+3ATk_deZEgqeL4DmvHE!8X9rH@-bZlD7<@|G>l5_pqf{%tDg8P-$yth$* +z?GJN~oS_J0IfNBPH>WH)roERR+AYCAv43afO`{VHe1Bsv5x(`E{G(K*k!G>aLQW=z@sy-!mZgyqc$&0q_JbF|NfUvpS;5@4_8`l}*V +zKHc?V%b%d|S+TSTp3;Tw#fwSUAJNle^zljqO1WPORG +z>4B%RKfxP5-^!jdrvEJGtM@Y5W~=q3k3;0XZO@xm;|B%dcW0}>Muo$tA0m0M<<8$j +zK7XJ^?G_uBR>*P$H2 +zdLumoxd})@gQvWr?*r8$!Ngb%fX_6QYdz(b8R+WZLpvNye5|M!Hs}*a3m4sNGoxJT +zL%=^Gjg7YOCLD&6XCK)r8M7%0mrFSr0ow|L8hB*&xx1uq%;gm6T0SvAKvD*Gl|uJN +zRq>W!m@_RCZzO_%$~Pfzt^e-|zE?v_X!%=t<`kpNMoUUs0I2(oP$VJ$&(r>Y> +z4^7bulhaYG?FZ!26z{AhaFw@VGAnUuE?IPC1s^uw^*mfziYk`6^kaz3G%*%q%CsIZ +zmR2>BJkLqLfQPG;-m>t)NF&x8Uk&4=pfHYeY+7;7z3W4%!GeLv~l +z;<&A1MYv&24Hdx+1NZZM{1uYQtQps&sAMG +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 +zlH+rSoxZdv_5hBlbkz8^(n*x|UgtV9E_y72Q +zxjTF2-r2KXW~c0(!y@%vRx##4G>26nt3X<>f-`=*eFom6{o|AQ!%n{fslk)rX~9Uq +za}&AyBgS?nFKT&W7fjh#XOF%jPQ=UNGw!_67ZP~JRuSpRY3X@cF#qg}@9I-kzC^J@ +zrgJa9?fy@(@kN4D*r~h>1$Os2uIeVA-Hj`J&$>SohN;M&`a9ApS-}DmHyi`~BOiMl +zS|x0m`vgY{h9XkshvR0S33~net8SNv(|T36;N%i{r+7}o_m(Bcp&?Gw#JkDt>W^>7 +zCiCucsjLLS#Y^!I|68*)&E5d{ig%tIvh+o%{mppe8^X;Gq~6zbm+1B!BHr;uPem&aSzCQ9VP%g$Usi==CJV~%(*$NZ=E1t4mFO9#>xkUWzm-x7$je7DpAayZv +z1}v4LkQ8$GS^2cttZDcC-|p-|DGnf1mhpb}%LEhL^C#exOi^nsnN)ooSE?M@)ho)+ +zPf#4pWSO(7^J0X%^gqGIscUe7588bL?^Dm8{@$1D!G2gE8Os8fj-^is-8`j~Np7!w +zTfeK_)o?9V;mbdfUy8}>k<(XE^=cn%a&3))A>;8;tCWw={>s#)E8F#_=ii+yuv$zG +z5LaM#GD%0t8ALto!)s#X?w%eeTgJH}n{gC8U<;K#2lW*8Vg3(W%R969Fk3iTXLP|uwf6;Eleqk?*?n99jzocty=^wQ> +z^d&cJ_|$Hn#aIZm8@+YA@x?zL$H80!y}F>+vdpS473II!{*!&`j7yKU9)HZ$ejqR< +zGi8SDN4<|;-bJJ6L-Oypd++|H1N1rtZT?hiW@t+A#C!CwD!kKqq;Kbk(z$ee>GJdS +z{ZGB|CeFU{rgg9)k{kp;kTl4AsQH-@bOLrPM5c3KMsk>ctFgB-6z2y8>B} +zfhJkoThD97O}PHvDD9YHYUOp5`#Prb&OE0-Z2i9UM&6Bwfw`vw98$!@VwyC2m#?3% +z&l7A`RcCRAzEmu#x)5vi+bh`r7S2I&`nk9-vL{Bie>TX`tt#4QWMGQ{u8?ULN4FN@in_)2UNw5yL^K_h?t$cUm_ +zwn5+bpNu^(I7`Z_SZN2j>^6tix|6Low{PUWe@*VYGP!RzAa3CL>)V=UQtmUuEU!iF +zO3m2&4fAdqWn=Hqb>cO=_x|dySFqND!H(yoo-A8*Mqj?<4ayCaE8#QNvtcRK%;Z0d +z6B&E%?IIeWP0juiuw4~<<$3sGHHMk%QIv4k@5Dz&?eBo)ucyoUCjPiHIkH9Y{LP$u +z_im*MPY85=4wb;#m)>`|EDp(pB;A9v+5vAKChDui#h}}I~1&Du7c7h)U{lb8Veq5z<|6stjJ8{i7PdiPFBy@PAu)Q-cn +zw;|2uxD&m`*Br~N(e`=5Fw_`CElgfUt@v!*OoG?9Uzx93Zc4Pj_Wod-z{?u!V&q{O +zQ~i0NsU92jwtxvX?)W#*Ch|;%ZVcamp7d!+mm708UwCKm-TnOOZm@;x(iGtRs`|o} +z9@9Un`qwemBN^ydZkn=A7XO}{@_H7-w|9C>q-O%tuIsPA{Ni5OS%R9O;yoUnv2u3j +zIGLQ#x-Qh_MUOlMXXrGt7UI58Ab +zD@JsJ9rcMG>OwassxR{a$AMeY-5S +zhzG1+)lzhfmX3O)mAYWEu;yyWU!U(Pb6@vkSohAe))J0~e{G_oZYfAf8Q*uZ)>6=X +z@d5thNklIjyCEvhOuX|FmzJ;I59YIrGwpK`CPVuP5?NoY$G9vsow@C^TC@NLUtc{~ +zwi3Qe*0p`8t5g6}62Et|uVDONo@>Z$^p`_Z1y24~74WT%$4h}}7@DqzYl!7<$Q#j+@pi3F_-1vgLcq>=VG=s%$9g&PM1xx +z@J->e&cdSh2d@1r)5br`(Nj)RELVaynKVDE5AlrA?XA+8x%(ggc!O$mT$;S{dX-0= +zWnA(?_gNRCgl{?CP3drjOKYrZ?oSc}6PkMEyMjGAt- +zenzAyDuoOzX^MF3XdO$X6KMt6_d~3%wu9JA+CDGA?K4JeuH$5PJ!fz3JQ?{Q#o~w= +zvHA+;d?`@n97Fg(yx4vGUsj{-5B>Z5Cmn5hlq|d2fdG@EXzfKx5#QeoDxI~q#7h}n +zX3BI^G4ZjJexzP5$Au)(t87F`=@s$mGnd#QPtwD#dTP?MS6rgb*PRQgA+D3$X`7br8o%4RM(Da9 +zfonw62iA7dCB+jq6H1B|oFX#3=_|6d16- +z(EoYgK2?a#W4`Id6>*S?kZKfb9=V>rW^cT +z$mn~r5P35f6XoOZg>+1C9C5sGMPI#dxzYdjO3=IjTBPeN2&uE}I9S)rJ7>)2Tn8$4 +zq%O{|oo^(R_VJEc@BzY!8<(+fF(@d7hG-PiXk~QbGb=0534UF%TVim=rNTMf3w68s +z4)8i5w-jrnS_x_aPNAwvnru&tuFrv9ghMGPDgvwl-C+t&>UoUD9|%+g0&~c@KN9lR +zWa*a+<^2o1gyz0MN6|jH-j~P}ZZf`aZ5FCBh$MFcQRqy0zpF*%zBmEW9j($CH3ZOGrtMF^9(VJRA74Cb+o +z*L~&V6-cVqF!Ks{UkpW=p@6w0FEd`?I}vh>4ND|pu^)OIOdad&Kj_*&&fr$xkA1n0 +zpKogoX0rNC5K1ybhP6`i`-eZS%ri#j&=(N*(cAs(9o30)3|h6<%{x?nJc#M}J;>@b +zWteA}b_e{jNWM#{xd-*|SAhSaHlat_ktsQsUi}f!=W<~=>~6u~8~%%My6yf*+qdFE +zg}#`{ER{d54xE1ZrV0@I53dj8++eGI%M+~TjJN@t!*+zzgYCE2#))6avDB%RM!ez(x_T^;7el#-mEpf_HZ`M-5cGSs6LxCUT**Dpvd +zIkx<}ldAbk`_cl~N#JoxQ2p>>=QOWV$_9^eLNGzg)~PE=EJ9zZ3TJ8jG1CO{qD}&C +z7@GRs{owN1R0YM=bkXH2uZoj|&i}AY#`d~u_nVZS-m1Yy4EzALe{jFb-J4{{bTsL8 +z)y5#z`9;zJioIY#iLuGBU4H&!%1CUo!ff1U!cQe}Sjn5IZBH9n +zD~w8qzD4<}^+9)FqM%o?2g{V^D~L)l(td$F>mY!zohu!vBoRf5tx8w2<+qvV*#D(; +ziEkIC4GY_sbUsfBw=ecPCR6VeYEi(7T&Yj+Fr%ywn;)J7 +zyEcA7eKh3HeKox<+yPv74cnz0{ao)L3|2Yaa|Ie*o+nV+0F +zt%FFk>Z`jAFWcP<$$jGU4E~#cS>hT^9%TiKFooCwWvxAJ^;`ZFXsQy{N` +zr|{mNz3#K=1M2%BSJUKNfdxwd>LBBoQ%jmGdDC68!|q<=@i0$)>+z)3tIt|g%7=o> +zh@7$#PA(*C(aTG!ap1Td20@}B$l5u#hL=@pZ4Ez0Er$)xf!_|f +zwuOOJ=0qBi6w2JTvL|}7a}I1Av^M^Jd6T?zK$zPG%(Yc{p(l5CNd0qbrHIMxIYPmX +zJ&`h3TW%i`7&JKxKv|vX+|H$7$-8|x1QaIp5j`Fht{#A%1db(Y&Cc%0{Qn%PZnpXc +zj0cCqn<+-t5kXl&EvjA-L?U9wXF3HQi@@aV43)E@ClBVmN2`y6!_fSUKU~) +z7zCd|Y^u+-?GO>JmU_oWab+J0v#%|}?o?1_!l4NnX^%B8);%-QlU`$n(w89zshmP!sdkSNhjAjY|>>0p2-vKJp%!0BQv8t~qP(YXn&+=g?0itBhVRmd=V!$ZU`+s?Ngdlg|F +zfiUZ`wVf$FCN|=h)h{|4q!_|33H>}sG2NOTcSS{Oct49sr6Q6Jl)}McwP3|)~7nXLtGnV&p +z->wc?D +z_LgkKbq0!KKe9B#kh*s-{G8`;NppU{z2agyey&hJ{Oeybcb7$b8q^)eS|CLN1)0j? +zKszOi_M^8KOfiV{(r}>3M5NefEr&*HF3vNz4L>bk3$Gr&|Az%qbvO1;$(c*t5lw?0weJcA +z>$;r?d!%vk?|a>+pWbtl$%{o6MKkEhx$SQffC*Gaee? +zp@*DG^>mO?@Ycj|^~zAtb{OafG20e4UY8z%(Ul*|=%0#kGZYQ4C`% +zO!Z6`$oL-enG~FSXW1V*Z;Q?mj#SL|a||c`8jhXxFXw`nUlv1gA8LxNRi3qr=iIRP +zarzma>FKTY46$uLNMY@%AKq}0!~jDmaW-h(cBo)#6&ZYWHjjFemc#fbiP6nI?XZN$ +z78cPr(2W54?h$D30SPk!ph>?RUY`p(*`e#BM$C7++(ZNiQl0Qn5-_A7h`4#C($hr# +zzOS69v(?JOnn$9UN+8AdJ?TcxFyCal|FJ@Oetu;x^}ta8lc!%ZGKtpOpu6Ru$W+0P +zJA-wscX7#qKb~r3S+j?2#RxsE;1u1MEQ+c!dgS}Mb-(NO7=UwcmSu$gu9fxo>#; +z;hXj|)+v}zk3vZY3Wv%@?d{7{qct1LF2yC#IP@SI<()}Xnx&G#qANn;?k~U +zH_zC6mv7xQ8=u>z?H!j$xjv|TU049W=0*3L`g43v?xx`kyj;w1b{S9Umg2)4sa;~M=2Qw$_TlB$&aqI~RSEO5mtjkC$Y`vFI#mx7 +zKuE-zP4ch=t*wJWkoQB!Ghh^rQ))EiUsA>_V{i|fyWIbUdw~3c!|_8%+jTR)%3*0P +z{h;$uO&uqZVF+mhvllTuul;^s{ca$BbDwfdA&TMf+YLCKbqQD+J-z*Uf+ +zg_A+x%)9#As2siVfQBS*%u%5A^uwL8ATf;*LhmrWo3oyFfR_SOl4sj6r^u0rtlihA +z_(qK=o%l~E+-dO&kk#+0AlnSFU*oZs^xZPmRvb4xv$LGAi_1jao?9GW3||C-2ac7k4=O8dAV{G@1|*H7XMXK0EGOb=)h^ZT#GsDEpjCdn2N9o6NDMNTn-{ciy^joD>jKYJ +z2DJJiprxTcE4Z!?<@{^5ZOXp1B^zYu-cX|I>Lev7r<4*j%^&nN!l!VCAN?>Nj|mCg +zGc2^vJ0N#~^YQ%Mj+XzmG`9|-S}>M4C~N%qR^_1u`__XcQ7*Zi?z?lS17CHZT#6d` +zq=rx0;^QPC=-x^S(!TGr97;dH0`Oy>(v7|OdT7cCN@GFv;g7*^V8uPS0;p`7QcoM%A7 +z?&7>b9iia?YfXh*vFcYczrxkUyavhMh~ZfDUlA|wAd*v1li=LqN=qkmP%QSZSe_A7 +zd6Vw#LR;iN?iAnRRzd-0zteX&X?v60Hg3CU%OEA3+eS<$D@Ux5ns5Q#TRCcDw{63F +zX>9R#X{S*hH|nmKMo69c!Qz+9P6&uAt4X+G%{TaS|6-tAY(TT{Q0T+FDc`0etT*T8 +zq60jZ(k!~uA4+Qbs$k2FY7~VysLp2fFY?RABK+-YioQ_N16U&xf8El1j=U*>wgjbp +zJnWwQb|Z|eaO)xRK;c#|hMbeWf)6*+uL(NwIH`y0#kU>jq&vasI)?v&w0wN{$*^eh +z!OEK}ufX9(T3r8`{UBt?wJBB5SZe2ghMEs|k83^7iE)CT;77POS3b5Ki^+2~v$UDd +zkwk_0=0E5BK|cLf!A<34@36C)CqUsIT5Q +zX~6hD>N1kej#Eq31ni)H8OCsUWh@sHF{qsaN4kh_B*Uk4kM`dv`i8H)QT&KHP!Rf$ +zK(Z4)d{FzO9#nfVjBtY4(_op&vtySTA`h--R$Ie3y2gp-b|~;H_l_2=AskOn;^;aN +zt|A`Ml%RXLD2t+XCPAMcVEVO`iNt|lyVD>IXoC{w0U_5bWQ<0KGq!%mQU+*cR +zShfBHgV4F->N`bQ<=L_~1x90wLu(J|$6PIatMB+5J`jn +zfi@H(Bl3C`@A=JElZl|fpQDvN5_DE{tq?61%s5dAA(yLM28V4Q5W(}FOy|$mTu>~` +z4kzu1ukEozsfpkvQ)|gD(3sthMRk>6fgv>U3Vy=#NFlL!4eG<#ctBa@2GAxff;Z-# +zTs$8@=+}a6NPGY=20hpkkfI7+)m$0>}}1>uU6q* +zDx$G~{s4wKZQ2I}&2nb4#JEDooS#e*Hi;j-__zBRbpyN+JS8bRnn)W=Q-3Z*n94P! +zjeM$8(;NJIn4t?t9I_XZi_>ICOR3|EAZj5#6-qiP-1-cyN`$#=!9)o=RwpZ8lU0ZH +za8%1V`fkSo_1M`7Xu?Hs$-%^l9vO%=D^U3o%8eE=DzOI;QkoD1s2Y7Dd^SmNLZgma$HQwL3c}TNA8py +zcwQYDYo9S+v^DDHfK;O-w0b>^4FIx0-8vRx`dslp=~kg3c#7EbdBVJ+R^)c!5x*@n +z69q^VT0*SHQoTF=;0htqJ5gJ^fGHRqtIw}!ln=VtN6kyGr*C*+LE~K*>KJ2yQ7g5+ +zhcUA-ZNX7PBYiv%n+yUM?xLX7FR^xI6gOsr*ZFfl-}6HN^ptbL0NN4!`Bc9aoV#X- +zVKgvvIEH}X0W{K%oFo}vesjk=84A=`G+f1jZ{4^hHN;pY-Iz*;3G<424&>tYyF+SZ +zyvmt8&rlEMD2>Bn01-}G{plVP3!svvEyKE*DZTuy$i9r>wb%%3%9p#KA0S}7Lld<(fdaX!%#e5g^FTk?Q5R}`;JSO +z?yXVWRgl!_rI;4s!tpm#(sADzvXiJ*{$Coifi$q;X({&s#!xlK%vZ)b|Nb&hCWb-A +z>|Li~WL~2f2PXqs)d$OS_@p|FyH4A`b>x+-1*JnpcQ^cUycik=jdYLc+Dq0Kx +z`92RJos3;!h4VB)xsBx+JhD?l1gc^2;lHkgCI=8Xnf;>}i!&!H+br{%5kyNsyY&8~ +z#?QRjEzBK%L3;9ej+=9Tmu14S{p$YPj6)b4%*9p$k8na?w4>DuA6V@*L%&trvh?g% +zIWk(8a@+2xneXp=D$+d9Da2fFs-yFrF*;|!;{J-ICn +zl(#;&+;gZ;C-k4Y_=>uTo~ZXt^5!bt>tl$5i*s#S;K9t_I=6Z|WW@`69;*Fev~Oyn +z0|V>R(v&@o?k6YaU9(1%_*Ldq +z1?QI%nC3P>{DDkvieO#W%MgScq2r;P^>lYni^I^hXGnrYmr!HO +zEr>MTywQj0%ie-PZvK7s$_eN|m9ZEvj9VYp|FM$`PCENa+fs5vIklQosc*8F=R#Rq +z6X|Xb2siRdzT$AEzIBY`%I1L>>2bh?l-m^kP5@ZeBDR|(15epcRW$8{>YrO5t0|!3 +zGMhhQN?}Sn{4M_B;8E3k>Au603v2WFgqsICqtCu=7J)n_ygaZh!^^m#+}WG>=|LE$ +zdiBOPg9I<$SDv=gG8>}`kMQV*rhtloAO{ieyJ1jP<*4G)FlFV4OPxpIY`1w;KV1Bh +z+&I!wfiCx84_($P~57FxCZo@%NiBFtsCDrCR_lmv?Lc8v2@Q+2F;O*&3)H?_{v_Ws4v78KiioG!anV~Z#&L01PP8GsDOW8fwCnaPi#c2- +zmu{el6^Lwm^$5J;f!gg1`ZX;bws@hfEf5Ef^@EdYcrb0gM0<9U{fvE4jl)|@wSk5d +zf63QdRhAXWF);Yt%ve^13!fVjGTIOS2d9`E)*~99=QibA!lk;Z;34lQFOM=xvz|7> +zLw?__i|fmjtH@Img*e+do!*zu%6vM2LVDP@)mt0V^z-g1ZYsZ*t0>kwPwyLp2&SQG +zT)7?{m&<;k`QG_}K15w{K;n!H`eu7Go9PCY&>l8>o6MY>t^2uLOHih*>{s7-OI@h!8&e|@@cX8hIY94he +zW4ViwWbiwxMovw3<^5PGsAHKihoQ^C6@X=p1Rcu^Y|uCw2(Ta&R)_4uy+|dA_sJ##nhE@ncV6#R+rk)8Ad~Kff>{!MnfM8PW!jU2 +zuxg?IWZhXk##wlJV`W{V#e7q^Q#1G5xyMNusl`w&-k;K)`qluUa&uf{)ZDZ0y|-h0 +zg`~XJZ$9>?xkA% +z)oq}v{-X^!`+k+&a!|KrtUCE<>>~OoA@H=T}WS4pa4%q5& +z%99ScQz*qr&32@K@e8@+*!s1nz}>wWrO8b~vI1&8JnEY0E)qx!&;NeFw$rPXgA(*s8D?60QPB3FKZJdlU +zyduQ&Gps2QQ8`nwSH9U8DD?6?IpE+{#NL+6_7NU(KI2XE3O4Jd&WlFm0xak_`Sm7n +zMmTUId|!teB7oStm2^d7>{eRkXTQ`7xv=lhun?`KfZnP$gq*K|U=}J*Eqmi);123t +z*iRk-)h5Jc`21Tac`~#x9eGc7SB`|+DOkLQr}KwelidNc`A1riY3`s>TIxwjZ98@n +zNLi%UiP`5Jb<*4c!p4+E?`fa;{3POHQR-<1f7nw#Z5n%9?a}eBgFAg#s5yfrp&_MyABH93HNxGH6jJpuon?|5@&*gW +z(0l6l;~_`NZo3rEh2^tB?=i?@Nx^DAo}U)>rX^K!on_38?q6(lYyvKr2uG7=RJ`6% +z1FYLNL;k)4+26|LFhIq|g959j*B@g)4f~4?dwpLs6&_scg*$jQjJNwwGFLmQLhWrg +zj9o5o-hIY*&kVWR5*M0R%Ie|cFB<@q_O;7)GJq773Y+5mk-1diZk6Z0HU9VI_T{v> +zN0gdW&(h_|WsrW$<-14zrd-g_X$vK8;AtLE`s)U9B&i589j@AE9&~^-+n=uVw|!Al +zUe3GtQYm%m%gy;0En%9LFAJV(Xev$0mpt0(Q~UB~XoUYEH7!UBzgouP_M>~iy=%PJ +z+@LT~jL%ZAq#?fnw<1kWGkCg2me&YwCA!dQa4vL&9XBH%9^3hv)QR8s##p1e%km%E0azyT$-$P +zRPU)4U +za0Ipb&P^&RRLoYa?5*MBbKazW6t%yan*F%(z73>af)7|vMw6b1k6UxWy6FF}*B +zydX6hhI!^eLyT9*!8WQxv~nmmb$6JCfO^!6)b0a_aH8$4vp5`T>Q-w*$2^CZ07I_& +zmeWl3mTSoUOvW`e$_{48X@Og={q=6S&kQufFH?y@12GB{3mFix+bT~fr6aPxYgGzx +zg)|O4Z5%TY<%?8(8`ZcoM#0b1Nk`kU#KE9shTkQQ)-WPH_N?V7h=1gIoP?M(BsMnE +z@c7ip`VaaTo%f+!ED^VI+|a1$q_YnJ +zVeh;65e8M+(QubG>XUO7d5}=zHtJ&x8i;Dqp?{zou**K@u^Z=op?pznA2xU|(BJ>A +z5ukI!Dc_a1{OMxMGhiC$)O1L3=VRroj +zEPdo1rbjS(lY9(!H7-Og<8TjR`sAR;SvFJ*9!fai0jfa^7->j; +z`9XO2J`9R`s<~UtEvgk$1-b9(%%6F=OhV@47sq!rpxv~mRcIYkdtRY^It5Dq!sy60 +zsx6JCkv1J?8E4s#gR^U3Y5?|HnYbd9$=us6qH@r^vND~BMwYw^y^Ll<)q?)0|xQ2%1^~S?npg4b4rTO +LDIkFN#;N}YR&K&K literal 0 HcmV?d00001 @@ -154805,7 +154661,7 @@ diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/brow #include "content/browser/loader/navigation_url_loader_impl.h" #include -@@ -992,7 +996,7 @@ void NavigationURLLoaderImpl::OnReceiveRedirect( +@@ -971,7 +975,7 @@ void NavigationURLLoaderImpl::OnReceiveRedirect( LogQueueTimeHistogram("Navigation.QueueTime.OnReceiveRedirect", resource_request_->is_outermost_main_frame); net::Error error = net::OK; @@ -154828,7 +154684,7 @@ diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/b #include "content/browser/renderer_host/render_frame_host_impl.h" -@@ -2668,6 +2672,12 @@ void RenderFrameHostImpl::ExecuteJavaScriptMethod( +@@ -2672,6 +2676,12 @@ void RenderFrameHostImpl::ExecuteJavaScriptMethod( std::move(callback)); } @@ -154841,7 +154697,7 @@ diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/b void RenderFrameHostImpl::ExecuteJavaScript(const std::u16string& javascript, JavaScriptResultCallback callback) { DCHECK_CURRENTLY_ON(BrowserThread::UI); -@@ -11319,7 +11329,6 @@ bool RenderFrameHostImpl::CreateNetworkServiceDefaultFactoryInternal( +@@ -11259,7 +11269,6 @@ bool RenderFrameHostImpl::CreateNetworkServiceDefaultFactoryInternal( GetProcess()->CreateURLLoaderFactory(std::move(default_factory_receiver), std::move(params)); @@ -154983,7 +154839,7 @@ diff --git a/extensions/browser/api/web_request/web_request_proxying_url_loader_ #include "extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h" #include -@@ -461,6 +465,7 @@ void WebRequestProxyingURLLoaderFactory::InProgressRequest::OnReceiveRedirect( +@@ -462,6 +466,7 @@ void WebRequestProxyingURLLoaderFactory::InProgressRequest::OnReceiveRedirect( TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); if (redirect_url_ != redirect_info.new_url && @@ -155052,7 +154908,7 @@ diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blin module blink.mojom; -@@ -914,6 +918,10 @@ interface LocalFrame { +@@ -915,6 +919,10 @@ interface LocalFrame { // the given point in the view coordinate space. PluginActionAt(gfx.mojom.Point location, blink.mojom.PluginActionType action); @@ -155226,7 +155082,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_ur #include "third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client.h" #include -@@ -445,7 +449,7 @@ void MojoURLLoaderClient::OnReceiveRedirect( +@@ -449,7 +453,7 @@ void MojoURLLoaderClient::OnReceiveRedirect( OnComplete(network::URLLoaderCompletionStatus(net::ERR_ABORTED)); return; } @@ -155235,6 +155091,441 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_ur !Platform::Current()->IsRedirectSafe(GURL(last_loaded_url_), redirect_info.new_url)) { OnComplete(network::URLLoaderCompletionStatus(net::ERR_UNSAFE_REDIRECT)); +diff --git a/tools/eyeo/generate_interdiffs.sh b/tools/eyeo/generate_interdiffs.sh +new file mode 100755 +--- /dev/null ++++ b/tools/eyeo/generate_interdiffs.sh +@@ -0,0 +1,150 @@ ++#!/bin/bash ++ ++# This file is part of eyeo Chromium SDK, ++# Copyright (C) 2006-present eyeo GmbH ++# eyeo Chromium SDK is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License version 3 as ++# published by the Free Software Foundation. ++# eyeo Chromium SDK is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# You should have received a copy of the GNU General Public License ++# along with eyeo Chromium SDK. If not, see . ++ ++if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then ++ echo " ++ This script generates interdiffs between eyeo Chromium SDK releases, git diff ++ file will be saved in `eyeo_modules/` directory, created if needed. ++ No upstream changes included in diff file. ++ Module interdiffs supported since version 115. ++ ++ Usage: ++ generate_interdiffs.sh ++ ++ Options: ++ --full-sdk Generates one diff includes whole eyeo Chromium SDK implementation (include testing & CI files) ++ --all-modules Generates diff files for each module: base, chrome, webview, android-api, android-settings and extension-api ++ --base Generates one diff for base module changes ++ --chrome Generates one diff for Chorme Integration module changes ++ --webview Generates one diff for Android Webview Integration module changes ++ --android-api Generates one diff for Android API module changes ++ --android-settings Generates one diff for Android UI module changes ++ --extension-api Generates one diff for Extension API module changes ++" ++ exit ++fi ++ ++OLD_TAG=$1 ++NEW_TAG=$2 ++OPTIONS=${@:3} ++OPTIONS="${OPTIONS/--all-modules/ -- base --chrome --webview --android-api --android-settings --extension-api}" ++ ++if [ -z "$OLD_TAG" ] || [ -z "$NEW_TAG" ]; then ++ echo " ++ Missing arguments! ++ Usage: ++ generate_interdiffs.sh ++ or see help: ++ generate_interdiffs.sh --help ++" ++ exit ++fi ++ ++# git has no diff support for binary files ++# also remove any internal CI files ++EXCLUDE_FILES=("components/resources/adblocking/easylist*" ++ "components/resources/adblocking/exceptionrules*" ++ "components/resources/adblocking/anticv*" ++ ".ci-scripts/*" ++ ".gitlab-ci.yml" ++) ++ ++for module in $OPTIONS ++do ++ if [ "$module" = "--base" ]; then ++ SUFFIX="-base-module-branch" ++ elif [ "$module" = "--chrome" ]; then ++ SUFFIX="-base-chrome-module-branch" ++ elif [ "$module" = "--android-api" ]; then ++ SUFFIX="-base-chrome-android-api-module-branch" ++ elif [ "$module" = "--android-settings" ]; then ++ SUFFIX="-base-chrome-android-settings-module-branch" ++ elif [ "$module" = "--extension-api" ]; then ++ SUFFIX="-base-chrome-desktop-module-branch" ++ elif [ "$module" = "--webview" ]; then ++ SUFFIX="-base-webview-module-branch" ++ elif [ "$module" = "--full-sdk" ]; then ++ SUFFIX="" ++ else ++ echo " ++ Unknow option: $module ++ Avaiable options: ++ --full-sdk ++ --all-modules ++ --base ++ --chrome ++ --webview ++ --android-api ++ --android-settings ++ --extension-api ++" ++ exit ++ fi ++ ++ repo_dir=$(git rev-parse --show-toplevel) ++ mkdir -p $repo_dir/eyeo_modules/interdiffs ++ ++ OLD_TAG_HEAD=$(git rev-parse --verify origin/${OLD_TAG}${SUFFIX} 2>/dev/null) ++ OLD_TAG_PREV=$(git rev-parse --verify origin/${OLD_TAG}${SUFFIX}~1 2>/dev/null) ++ NEW_TAG_HEAD=$(git rev-parse --verify origin/${NEW_TAG}${SUFFIX} 2>/dev/null) ++ NEW_TAG_PREV=$(git rev-parse --verify origin/${NEW_TAG}${SUFFIX}~1 2>/dev/null) ++ ++ if [ "$module" = "--full-sdk" ]; then ++ OLD_TAG_HEAD=$(git ls-remote --tags origin | grep -o -e ${OLD_TAG}$) ++ NEW_TAG_HEAD=$(git ls-remote --tags origin | grep -o -e ${NEW_TAG}$) ++ else ++ OLD_TAG_HEAD=$(git rev-parse --verify origin/${OLD_TAG}${SUFFIX} 2>/dev/null) ++ NEW_TAG_HEAD=$(git rev-parse --verify origin/${NEW_TAG}${SUFFIX} 2>/dev/null) ++ fi ++ ++ if [ -z "$OLD_TAG_HEAD" ]; then ++ echo "Interdiff modules are not supported for version ${OLD_TAG}" ++ fi ++ if [ -z "$NEW_TAG_HEAD" ]; then ++ echo "Interdiff modules are not supported for version ${NEW_TAG}" ++ fi ++ if [ -z "$OLD_TAG_HEAD" ] || [ -z "$NEW_TAG_HEAD" ]; then ++ echo "Interdiff are supported since version 115" ++ exit ++ fi ++ ++ if [ "$module" = "--full-sdk" ]; then ++ # Find lastest upstream commit for given version. ++ OLD_VERSION=$(echo ${OLD_TAG} | cut -d "-" -f3) ++ NEW_VERSION=$(echo ${NEW_TAG} | cut -d "-" -f3) ++ OLD_TAG_PREV=$(git log --no-decorate --all --grep="Publish DEPS for ${OLD_VERSION}" -n 1 --pretty=format:"%h") ++ NEW_TAG_PREV=$(git log --no-decorate --all --grep="Publish DEPS for ${NEW_VERSION}" -n 1 --pretty=format:"%h") ++ else ++ # Take advantage of modules test branches design, ++ # top commit always contain module changes only. ++ OLD_TAG_PREV=$(git rev-parse --verify origin/${OLD_TAG}${SUFFIX}~1 2>/dev/null) ++ NEW_TAG_PREV=$(git rev-parse --verify origin/${NEW_TAG}${SUFFIX}~1 2>/dev/null) ++ fi ++ ++ # Create a list of changed files, it's important to create it for each version, ++ # some of files may renamed. ++ OLD_TAG_FILES=$(git diff --name-only $OLD_TAG_HEAD..$OLD_TAG_PREV) ++ NEW_TAG_FILES=$(git diff --name-only $NEW_TAG_HEAD..$NEW_TAG_PREV) ++ # Combine and uniquify. ++ COMBINED_FILES=(`for R in "${OLD_TAG_FILES[@]}" "${NEW_TAG_FILES[@]}" ; do echo "$R" ; done | sort -du`) ++ # Remove files not supported by git diff ++ for del in ${EXCLUDE_FILES[@]} ++ do ++ COMBINED_FILES=("${COMBINED_FILES[@]/$del}") ++ done ++ ++ #Create diff in eyeo_modules/interdiffs/ ++ git diff ${OLD_TAG_HEAD}..${NEW_TAG_HEAD} -- ${COMBINED_FILES[@]} > $repo_dir/eyeo_modules/interdiffs/${module:2}-$OLD_TAG-$NEW_TAG.diff ++ ++done +diff --git a/tools/eyeo/generate_modules.sh b/tools/eyeo/generate_modules.sh +new file mode 100755 +--- /dev/null ++++ b/tools/eyeo/generate_modules.sh +@@ -0,0 +1,209 @@ ++#!/bin/bash ++ ++# This file is part of eyeo Chromium SDK, ++# Copyright (C) 2006-present eyeo GmbH ++# eyeo Chromium SDK is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License version 3 as ++# published by the Free Software Foundation. ++# eyeo Chromium SDK is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# You should have received a copy of the GNU General Public License ++# along with eyeo Chromium SDK. If not, see . ++ ++if [ $# -eq 0 ]; then ++ echo "Please provide an eyeo tag argument." \ ++ "It is needed to find vanila branch to generate module diffs for." ++ exit 1 ++fi ++ ++EYEO_RELEASE_TAG=$1 ++ ++CHROMIUM_TAG=$(echo ${EYEO_RELEASE_TAG} | cut -d "-" -f3) ++TOP_VANILLA_COMMIT=$(git rev-parse --short origin/chromium-${CHROMIUM_TAG}-vanilla-automated~1) ++ ++if [[ $(git cat-file -t ${TOP_VANILLA_COMMIT} 2> /dev/null) != "commit" ]]; then ++ echo "Failed to find vanila branch." ++ exit 1 ++fi ++ ++INITIAL_BRANCH=$(git rev-parse --abbrev-ref HEAD) ++INITIAL_HASH=$(git rev-parse HEAD) ++ ++### Remove CI & testing ### ++CI_AND_TESTING_FILES=" ++.ci-scripts/ ++.gitignore ++.gitlab-ci.yml ++.pre-commit-config.yaml ++.vpython ++build/install-build-deps.sh ++components/eyeo_testing/ ++gclient/ ++tools/perf/ ++" ++ ++sed -i '/CI & Testing module start/,/CI & Testing module end/d' components/adblock/core/BUILD.gn ++git add components/adblock/core/BUILD.gn ++ ++for path in $CI_AND_TESTING_FILES ++do ++ git restore --source=$TOP_VANILLA_COMMIT --staged --worktree -- $path ++done ++ ++git commit -n -m "Remove CI requirements" ++NEGATIVE_CI_TESTING=$(git rev-parse --short HEAD) ++ ++### Android UI removal ### ++ANDROID_UI_FILES=" ++chrome/android/java/res/xml/main_preferences.xml ++components/adblock/android/README.md ++components/adblock/android/adblock_strings.grd ++components/adblock/android/java/res/drawable-* ++components/adblock/android/java/res/layout/ ++components/adblock/android/java/res/xml/ ++components/adblock/android/java/src/org/chromium/components/adblock/settings/ ++chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockFilterFragmentTest.java ++chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupInfoBarTest.java ++chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockPopupMessageTest.java ++components/adblock/android/translations/ ++" ++ ++ANDROID_UI_SHARED_FILES=" ++chrome/browser/adblock/android/BUILD.gn ++chrome/android/BUILD.gn ++components/adblock/android/BUILD.gn ++" ++ ++for path in $ANDROID_UI_SHARED_FILES ++do ++ sed -i '/Android UI module start/,/Android UI module end/d' $path ++ git add $path ++done ++ ++for path in $ANDROID_UI_FILES ++do ++ git restore --source=$TOP_VANILLA_COMMIT --staged --worktree -- $path ++done ++ ++git commit -n -m "Negative Android UI module" ++NEGATIVE_ANDROID_UI_MODULE_HASH=$(git rev-parse --short HEAD) ++ ++### Android Webview removal ### ++WEBVIEW_FILES=" ++android_webview/ ++components/adblock/android/ ++" ++ ++for path in $WEBVIEW_FILES ++do ++ git restore --source=$TOP_VANILLA_COMMIT --staged --worktree -- $path ++done ++ ++git commit -n -m "Remove Android Webview integration" ++NEGATIVE_WEBVIEW_INTEGRATION=$(git rev-parse --short HEAD) ++ ++### Restore components/adblock/android/ as this is shared part between Webview and Android API ++git restore --source=HEAD~1 --staged --worktree -- components/adblock/android/ ++git commit -n -m "Restore jni_headers" ++ ++### Android API removal ### ++ANDROID_API_FILES=" ++components/adblock/android/ ++chrome/browser/android/adblock/ ++chrome/android/ ++" ++ ++ANDROID_API_SHARED_FILES=" ++chrome/browser/BUILD.gn ++chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc ++" ++ ++for path in $ANDROID_API_SHARED_FILES ++do ++ sed -i '/Android API module start/,/Android API module end/d' $path ++ git add $path ++done ++ ++for path in $ANDROID_API_FILES ++do ++ git restore --source=$TOP_VANILLA_COMMIT --staged --worktree -- $path ++done ++ ++git commit -n -m "Negative Android API module" ++NEGATIVE_ANDROID_API_MODULE_HASH=$(git rev-parse --short HEAD) ++ ++#### Extension API removal ### ++ ++EXTENSION_API_FILES=" ++chrome/browser/extensions/ ++chrome/common/extensions/ ++chrome/test/data/extensions/api_test/ ++extensions/browser/extension_event_histogram_value.h ++extensions/browser/extension_function_histogram_value.h ++extensions/common/mojom/api_permission_id.mojom ++tools/metrics/histograms/enums.xml ++tools/typescript/definitions/adblock_private.d.ts ++tools/typescript/definitions/eyeo_filtering_private.d.ts ++" ++ ++sed -i '/Extension API module start/,/Extension API module end/d' chrome/test/BUILD.gn ++git add chrome/test/BUILD.gn ++ ++for path in $EXTENSION_API_FILES ++do ++ git restore --source=$TOP_VANILLA_COMMIT --staged --worktree -- $path ++done ++ ++git commit -n -m "Negative Extension API module" ++NEGATIVE_EXTENSION_API_MODULE_HASH=$(git rev-parse --short HEAD) ++ ++### Chrome removal ### ++git restore --source=$TOP_VANILLA_COMMIT --staged --worktree -- chrome ++ ++git commit -n -m "Remove Chrome integration" ++NEGATIVE_CHROME_INTEGRATION=$(git rev-parse --short HEAD) ++ ++### Create Base Module ++git reset $TOP_VANILLA_COMMIT --soft ++git commit -n -m "eyeo Browser Ad filtering Solution: Base Module" -m "Based on Chromium ${CHROMIUM_TAG}" ++BASE_MODULE_HASH=$(git rev-parse --short HEAD) ++ ++### Generate modules ++repo_dir=$(git rev-parse --show-toplevel) ++mkdir -p $repo_dir/eyeo_modules ++ ++git format-patch -1 HEAD --stdout > $repo_dir/eyeo_modules/base.patch ++ ++git revert -n $NEGATIVE_CHROME_INTEGRATION ++git commit -n -m "eyeo Browser Ad filtering Solution: Chrome Integration Module" -m "Based on Chromium ${CHROMIUM_TAG}" -m "Pre-requisites: eyeo Browser Ad filtering Solution: Base Module" ++git format-patch -1 HEAD --stdout > $repo_dir/eyeo_modules/chrome_integration.patch ++ ++git revert -n $NEGATIVE_WEBVIEW_INTEGRATION ++git commit -n -m "eyeo Browser Ad filtering Solution: Android Weview Integration Module" -m "Based on Chromium ${CHROMIUM_TAG}" -m "Pre-requisites: eyeo Browser Ad filtering Solution: Base Module" ++git format-patch -1 HEAD --stdout > $repo_dir/eyeo_modules/webview_integration.patch ++ ++### Remove webview integration commit to aviod conflicts on shared files from Webview Integration and Android API ++git reset HEAD~1 --hard ++ ++git revert -n $NEGATIVE_ANDROID_API_MODULE_HASH ++git commit -n -m "eyeo Browser Ad filtering Solution: Android API Module" -m "Based on Chromium ${CHROMIUM_TAG}" -m "Pre-requisites: eyeo Browser Ad filtering Solution: Base Module" ++git format-patch -1 HEAD --stdout > $repo_dir/eyeo_modules/android_api.patch ++ ++git revert -n $NEGATIVE_ANDROID_UI_MODULE_HASH ++git commit -n -m "eyeo Browser Ad filtering Solution: Android Settings UI Module" -m "Based on Chromium ${CHROMIUM_TAG}" -m "Pre-requisites: eyeo Browser Ad filtering Solution: Base Module and Android API Module" ++git format-patch -1 HEAD --stdout > $repo_dir/eyeo_modules/android_settings.patch ++ ++git revert -n $NEGATIVE_EXTENSION_API_MODULE_HASH ++git commit -n -m "eyeo Browser Ad filtering Solution: Extension API Module" -m "Based on Chromium ${CHROMIUM_TAG}" -m "Pre-requisites: eyeo Browser Ad filtering Solution: Base Module" ++git format-patch -1 HEAD --stdout > $repo_dir/eyeo_modules/extension_api.patch ++ ++git revert -n $NEGATIVE_CI_TESTING ++git commit -n -m "eyeo Browser Ad filtering Solution: CI & testing module" ++git format-patch -1 HEAD --stdout > $repo_dir/eyeo_modules/ci_and_testing.patch ++ ++### Recover HEAD & branch after script - usefull for local runs ++#git checkout $INITIAL_HASH ++#git branch -D $INITIAL_BRANCH ++#git checkout -b $INITIAL_BRANCH +diff --git a/tools/eyeo/snippets_deps.py b/tools/eyeo/snippets_deps.py +new file mode 100644 +--- /dev/null ++++ b/tools/eyeo/snippets_deps.py +@@ -0,0 +1,61 @@ ++#!/usr/bin/env python3 ++ ++# This file is part of eyeo Chromium SDK, ++# Copyright (C) 2006-present eyeo GmbH ++# ++# eyeo Chromium SDK is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License version 3 as ++# published by the Free Software Foundation. ++# ++# eyeo Chromium SDK is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with eyeo Chromium SDK. If not, see . ++ ++import argparse ++import os.path ++ ++# This class reads the dependencies.jst file distributed with snippets library ++# and extracts from it the code which is required to support xpath3 snippet filters. ++# The extracted code is copied into the location pointed out by output_file argument. ++class PrepareXpath3Dep: ++ def __init__(self, args): ++ self.input_file = args.input_dir + "/dependencies.jst" ++ self.output_file = args.output_file ++ ++ def run(self): ++ # Create file so it exists for sure ++ with open(self.output_file, 'w', encoding="utf8") as out_file: ++ out_file.writelines([]) ++ if os.path.exists(self.input_file): ++ print("Copying xpath3 deps code from %s to %s"%(self.input_file, self.output_file)) ++ lines_to_write = [] ++ start_tag = "/**! Start hide-if-matches-xpath3 dependency !**/" ++ end_tag = "/**! End hide-if-matches-xpath3 dependency !**/" ++ between_tags = False ++ with open(self.input_file, encoding="utf8") as in_file: ++ for line in in_file: ++ if line.strip() == start_tag: ++ between_tags = True ++ continue ++ if line.strip() == end_tag: ++ between_tags = False ++ continue ++ if between_tags: ++ lines_to_write.append(line) ++ out_file.writelines(lines_to_write) ++ in_file.close() ++ out_file.close() ++ ++if __name__ == '__main__': ++ parser = argparse.ArgumentParser( ++ description='Prepares snippets xpath3 dependency') ++ ++ parser.add_argument('input_dir', help='directory where dependencies.jst can be found') ++ parser.add_argument('output_file', help='output file where to copy content parsed from dependencies.jst') ++ ++ main = PrepareXpath3Dep(parser.parse_args()) ++ main.run() diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec @@ -155249,16 +155540,16 @@ diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ # This file is used to assign starting resource ids for resources and strings # used by Chromium. This is done to ensure that resource ids are unique # across all the grd files. If you are adding a new grd file, please add -@@ -651,6 +655,10 @@ - "META": {"sizes": {"includes": [10]}}, - "includes": [4980], +@@ -667,6 +671,10 @@ + "META": {"sizes": {"includes": [20]}}, + "includes": [4960], }, + "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/adblock_internals/resources.grd": { + "META": {"sizes": {"includes": [10],}}, -+ "includes": [4720], ++ "includes": [4970], + }, - # END chrome/ WebUI resources section - - # START chrome/ miscellaneous section. + "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/hats/resources.grd": { + "META": {"sizes": {"includes": [10]}}, + "includes": [4980], -- 2.25.1 diff --git a/build/patches/eyeo-117.0.5938.0-chrome_integration.patch b/build/patches/eyeo-beta-118.0.5993.48-chrome_integration.patch similarity index 79% rename from build/patches/eyeo-117.0.5938.0-chrome_integration.patch rename to build/patches/eyeo-beta-118.0.5993.48-chrome_integration.patch index b2eaa7a2..76d8452b 100644 --- a/build/patches/eyeo-117.0.5938.0-chrome_integration.patch +++ b/build/patches/eyeo-beta-118.0.5993.48-chrome_integration.patch @@ -1,21 +1,38 @@ From: chromium-sdk -Date: Mon, 21 Aug 2023 18:20:41 +0200 +Date: Thu, 12 Oct 2023 14:46:02 +0200 Subject: eyeo Browser Ad filtering Solution: Chrome Integration Module -Based on Chromium 117.0.5938.0 +Based on Chromium 118.0.5993.48 Pre-requisites: eyeo Browser Ad filtering Solution: Base Module --- chrome/app/chrome_main_delegate.cc | 7 +- - chrome/browser/BUILD.gn | 32 ++ + chrome/browser/BUILD.gn | 29 ++ chrome/browser/adblock/README.md | 3 + - .../adblock/adblock_content_browser_client.cc | 322 ++++++++++++ + .../adblock/adblock_content_browser_client.cc | 320 ++++++++++++ .../adblock/adblock_content_browser_client.h | 100 ++++ - ...adblock_content_browser_client_unittest.cc | 198 ++++++++ + ...adblock_content_browser_client_unittest.cc | 203 ++++++++ .../adblock/adblock_controller_factory.cc | 67 +++ .../adblock/adblock_controller_factory.h | 49 ++ - .../adblock_telemetry_service_factory.cc | 68 +++ - .../adblock_telemetry_service_factory.h | 53 ++ + .../adblock_telemetry_service_factory.cc | 63 +++ + .../adblock_telemetry_service_factory.h | 51 ++ + chrome/browser/adblock/android/BUILD.gn | 68 +++ + .../adblock/AdblockControllerTest.java | 43 ++ + .../adblock/FilteringConfigurationTest.java | 418 ++++++++++++++++ + .../ResourceClassificationNotifierTest.java | 135 +++++ + .../adblock/TestPagesCircumventionTest.java | 51 ++ + .../browser/adblock/TestPagesCspTest.java | 51 ++ + .../adblock/TestPagesElemhideEmuInvTest.java | 48 ++ + .../adblock/TestPagesElemhideEmuTest.java | 48 ++ + .../adblock/TestPagesElemhideTest.java | 48 ++ + .../adblock/TestPagesExceptionTest.java | 100 ++++ + .../browser/adblock/TestPagesFilterTest.java | 101 ++++ + .../adblock/TestPagesHeaderFilterTest.java | 51 ++ + .../browser/adblock/TestPagesHelper.java | 121 +++++ + .../browser/adblock/TestPagesRewriteTest.java | 51 ++ + .../browser/adblock/TestPagesSiteKeyTest.java | 51 ++ + .../adblock/TestPagesSnippetsTest.java | 51 ++ + .../adblock/TestPagesWebsocketTest.java | 51 ++ ...ontent_security_policy_injector_factory.cc | 69 +++ ...content_security_policy_injector_factory.h | 49 ++ .../browser/adblock/element_hider_factory.cc | 63 +++ @@ -30,47 +47,48 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module ...subscription_persistent_metadata_factory.h | 49 ++ .../adblock/subscription_service_factory.cc | 66 +++ .../adblock/subscription_service_factory.h | 50 ++ - ...lock_content_browser_client_browsertest.cc | 122 +++++ - .../test/adblock_debug_url_browsertest.cc | 301 ++++++++++++ - .../test/adblock_filter_list_browsertest.cc | 246 ++++++++++ - ...ck_filtering_configurations_browsertest.cc | 460 +++++++++++++++++ - ...ock_frame_hierarchy_builder_browsertest.cc | 463 ++++++++++++++++++ - .../test/adblock_multiple_tabs_browsertest.cc | 159 ++++++ - .../test/adblock_non_ascii_browsertest.cc | 77 +++ - .../adblock/test/adblock_popup_browsertest.cc | 462 +++++++++++++++++ - ...dblock_subscription_service_browsertest.cc | 204 ++++++++ + ...lock_content_browser_client_browsertest.cc | 125 +++++ + .../test/adblock_debug_url_browsertest.cc | 314 ++++++++++++ + .../test/adblock_filter_list_browsertest.cc | 260 ++++++++++ + ...ck_filtering_configurations_browsertest.cc | 459 +++++++++++++++++ + ...ock_frame_hierarchy_builder_browsertest.cc | 464 ++++++++++++++++++ + .../test/adblock_multiple_tabs_browsertest.cc | 160 ++++++ + .../test/adblock_non_ascii_browsertest.cc | 78 +++ + .../adblock/test/adblock_popup_browsertest.cc | 463 +++++++++++++++++ + .../test/adblock_snippets_browsertest.cc | 80 +++ + ...dblock_subscription_service_browsertest.cc | 201 ++++++++ .../adblock_telemetry_service_browsertest.cc | 256 ++++++++++ - .../test/adblock_web_bundle_browsertest.cc | 426 ++++++++++++++++ + .../test/adblock_web_bundle_browsertest.cc | 427 ++++++++++++++++ .../chrome_browser_interface_binders.cc | 9 + - .../client_hints/client_hints_browsertest.cc | 12 + + .../client_hints/client_hints_browsertest.cc | 9 +- chrome/browser/net/errorpage_browsertest.cc | 8 + ..._page_load_metrics_observer_browsertest.cc | 7 +- - chrome/browser/preferences/BUILD.gn | 9 + + chrome/browser/preferences/BUILD.gn | 5 + .../prefs/chrome_pref_service_factory.cc | 11 + ...hrome_browser_main_extra_parts_profiles.cc | 26 + - .../profile_keyed_service_browsertest.cc | 31 +- + .../profile_keyed_service_browsertest.cc | 42 +- chrome/browser/resources/BUILD.gn | 5 + .../resources/adblock_internals/BUILD.gn | 29 ++ .../adblock_internals/adblock_internals.html | 38 ++ .../adblock_internals/adblock_internals.ts | 43 ++ .../safe_browsing_blocking_page_test.cc | 8 +- ...subresource_filter_browser_test_harness.cc | 8 +- - chrome/browser/ui/BUILD.gn | 16 + + chrome/browser/ui/BUILD.gn | 12 +- chrome/browser/ui/prefs/pref_watcher.cc | 13 + - chrome/browser/ui/tab_helpers.cc | 22 + + chrome/browser/ui/tab_helpers.cc | 18 + .../ui/webui/adblock_internals/BUILD.gn | 23 + .../adblock_internals/adblock_internals.mojom | 20 + - .../adblock_internals_page_handler_impl.cc | 97 ++++ - .../adblock_internals_page_handler_impl.h | 47 ++ + .../adblock_internals_page_handler_impl.cc | 115 +++++ + .../adblock_internals_page_handler_impl.h | 51 ++ .../adblock_internals/adblock_internals_ui.cc | 47 ++ .../adblock_internals/adblock_internals_ui.h | 48 ++ .../webui/chrome_web_ui_controller_factory.cc | 11 +- chrome/common/BUILD.gn | 3 + chrome/common/webui_url_constants.cc | 5 + chrome/common/webui_url_constants.h | 5 + - chrome/test/BUILD.gn | 26 + + chrome/test/BUILD.gn | 27 + chrome/test/base/chrome_test_launcher.cc | 7 +- - chrome/test/base/in_process_browser_test.cc | 17 +- + chrome/test/base/in_process_browser_test.cc | 21 +- .../filterlist_that_allows_resource.txt | 7 + .../filterlist_that_blocks_resource.txt | 6 + .../filterlist_that_hides_resource.txt | 6 + @@ -110,7 +128,8 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module .../wbn/by_scope/pink_subresource_loading.png | Bin 0 -> 775 bytes .../xhr_result_3_subresource_loading.json | 1 + .../test/data/adblock/wbn/index.html.mustache | 157 ++++++ - 104 files changed, 6042 insertions(+), 10 deletions(-) + chrome/test/data/adblock/xpath3.html | 23 + + 123 files changed, 7677 insertions(+), 12 deletions(-) create mode 100644 chrome/browser/adblock/README.md create mode 100644 chrome/browser/adblock/adblock_content_browser_client.cc create mode 100644 chrome/browser/adblock/adblock_content_browser_client.h @@ -119,6 +138,23 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module create mode 100644 chrome/browser/adblock/adblock_controller_factory.h create mode 100644 chrome/browser/adblock/adblock_telemetry_service_factory.cc create mode 100644 chrome/browser/adblock/adblock_telemetry_service_factory.h + create mode 100644 chrome/browser/adblock/android/BUILD.gn + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockControllerTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/FilteringConfigurationTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/ResourceClassificationNotifierTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesCircumventionTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesCspTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideEmuInvTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideEmuTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesExceptionTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesFilterTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesHeaderFilterTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesHelper.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesRewriteTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesSiteKeyTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesSnippetsTest.java + create mode 100644 chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesWebsocketTest.java create mode 100644 chrome/browser/adblock/content_security_policy_injector_factory.cc create mode 100644 chrome/browser/adblock/content_security_policy_injector_factory.h create mode 100644 chrome/browser/adblock/element_hider_factory.cc @@ -141,6 +177,7 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module create mode 100644 chrome/browser/adblock/test/adblock_multiple_tabs_browsertest.cc create mode 100644 chrome/browser/adblock/test/adblock_non_ascii_browsertest.cc create mode 100644 chrome/browser/adblock/test/adblock_popup_browsertest.cc + create mode 100644 chrome/browser/adblock/test/adblock_snippets_browsertest.cc create mode 100644 chrome/browser/adblock/test/adblock_subscription_service_browsertest.cc create mode 100644 chrome/browser/adblock/test/adblock_telemetry_service_browsertest.cc create mode 100644 chrome/browser/adblock/test/adblock_web_bundle_browsertest.cc @@ -192,6 +229,7 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module create mode 100644 chrome/test/data/adblock/wbn/by_scope/pink_subresource_loading.png create mode 100644 chrome/test/data/adblock/wbn/by_scope/xhr_result_3_subresource_loading.json create mode 100644 chrome/test/data/adblock/wbn/index.html.mustache + create mode 100644 chrome/test/data/adblock/xpath3.html diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc --- a/chrome/app/chrome_main_delegate.cc @@ -215,7 +253,7 @@ diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegat #include "chrome/browser/buildflags.h" #include "chrome/browser/chrome_content_browser_client.h" #include "chrome/browser/chrome_resource_bundle_helper.h" -@@ -1756,7 +1761,7 @@ content::ContentClient* ChromeMainDelegate::CreateContentClient() { +@@ -1783,7 +1788,7 @@ content::ContentClient* ChromeMainDelegate::CreateContentClient() { content::ContentBrowserClient* ChromeMainDelegate::CreateContentBrowserClient() { chrome_content_browser_client_ = @@ -237,7 +275,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn import("//base/allocator/allocator.gni") import("//build/buildflag_header.gni") -@@ -159,6 +162,26 @@ static_library("browser") { +@@ -158,6 +161,26 @@ static_library("browser") { "accessibility/page_colors.h", "accessibility/page_colors_factory.cc", "accessibility/page_colors_factory.h", @@ -264,7 +302,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "after_startup_task_utils.cc", "after_startup_task_utils.h", "app_mode/app_mode_utils.cc", -@@ -2065,6 +2088,7 @@ static_library("browser") { +@@ -2112,6 +2135,7 @@ static_library("browser") { "//chrome/browser/ui/color:color_headers", "//chrome/browser/ui/color:mixers", "//chrome/browser/ui/webui:configs", @@ -272,29 +310,32 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "//chrome/browser/ui/webui/app_service_internals:mojo_bindings", "//chrome/browser/ui/webui/feed:mojo_bindings", "//chrome/browser/ui/webui/internals/user_education:mojo_bindings", -@@ -2086,6 +2110,12 @@ static_library("browser") { +@@ -2134,6 +2158,8 @@ static_library("browser") { "//chrome/common/notifications", "//chrome/installer/util:with_no_strings", "//chrome/services/speech/buildflags", -+<<<<<<< HEAD -+======= -+ "//chromeos/components/kiosk", + "//components/adblock/content:browser", + "//components/adblock/core/converter", -+>>>>>>> 9402d5c48c0e8... Squashed commits "//components/assist_ranker", "//components/autofill/content/browser", "//components/autofill/core/browser", -@@ -3340,7 +3370,9 @@ static_library("browser") { - "webauthn/android/chrome_webauthn_client_android.h", +@@ -3411,6 +3437,8 @@ static_library("browser") { "webauthn/android/webauthn_request_delegate_android.cc", "webauthn/android/webauthn_request_delegate_android.h", -+ ] ++ + public_deps += [ "//chrome/android/features/dev_ui:buildflags", "//components/image_fetcher/core", +@@ -3599,6 +3627,7 @@ static_library("browser") { + "//url:gurl_android", + ] + ++ + if (safe_browsing_mode == 2) { + sources += [ + "component_updater/real_time_url_checks_allowlist_component_installer.cc", diff --git a/chrome/browser/adblock/README.md b/chrome/browser/adblock/README.md new file mode 100644 --- /dev/null @@ -307,7 +348,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/adblock_content_browser_client.cc -@@ -0,0 +1,322 @@ +@@ -0,0 +1,320 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -329,7 +370,6 @@ new file mode 100644 + +#include "base/containers/unique_ptr_adapters.h" +#include "base/ranges/algorithm.h" -+#include "chrome/browser/adblock/adblock_controller_factory.h" +#include "chrome/browser/adblock/content_security_policy_injector_factory.h" +#include "chrome/browser/adblock/element_hider_factory.h" +#include "chrome/browser/adblock/resource_classification_runner_factory.h" @@ -339,7 +379,6 @@ new file mode 100644 +#include "chrome/browser/ui/browser_navigator_params.h" +#include "components/adblock/content/browser/adblock_url_loader_factory.h" +#include "components/adblock/content/browser/resource_classification_runner.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/common/adblock_prefs.h" +#include "components/adblock/core/configuration/filtering_configuration.h" +#include "components/adblock/core/subscription/subscription_service.h" @@ -424,7 +463,7 @@ new file mode 100644 + embedder_support::GetUserAgent(), + base::BindOnce(&AdblockContextData::RemoveProxy, + self->weak_factory_.GetWeakPtr()), -+ adblock::AdblockControllerFactory::GetForBrowserContext( ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( + Profile::FromBrowserContext( + frame->GetProcess()->GetBrowserContext()))); + self->proxies_.emplace(std::move(proxy)); @@ -739,7 +778,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client_unittest.cc b new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/adblock_content_browser_client_unittest.cc -@@ -0,0 +1,198 @@ +@@ -0,0 +1,203 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -775,7 +814,6 @@ new file mode 100644 +#include "components/adblock/core/subscription/subscription_service.h" +#include "components/adblock/core/subscription/test/mock_subscription_collection.h" +#include "components/adblock/core/subscription/test/mock_subscription_service.h" -+#include "components/adblock/core/test/mock_adblock_controller.h" +#include "components/keyed_service/core/keyed_service.h" +#include "content/public/browser/content_browser_client.h" +#include "content/public/test/mock_render_process_host.h" @@ -809,7 +847,7 @@ new file mode 100644 + } + + void SetUp() override { -+ RenderViewHostTestHarness::SetUp(); ++ ChromeRenderViewHostTestHarness::SetUp(); + + subscription_service_ = static_cast( + SubscriptionServiceFactory::GetForBrowserContext(profile())); @@ -819,6 +857,12 @@ new file mode 100644 + profile())); + } + ++ void TearDown() override { ++ subscription_service_ = nullptr; ++ resource_classification_runner_ = nullptr; ++ ChromeRenderViewHostTestHarness::TearDown(); ++ } ++ + raw_ptr subscription_service_; + raw_ptr resource_classification_runner_; +}; @@ -997,7 +1041,7 @@ new file mode 100644 + +PrefService* AdblockControllerFactory::GetPrefs( + content::BrowserContext* context) const { -+ return Profile::FromBrowserContext(context)->GetPrefs(); ++ return Profile::FromBrowserContext(context)->GetOriginalProfile()->GetPrefs(); +} + +const std::string& AdblockControllerFactory::GetLocale() const { @@ -1068,7 +1112,7 @@ diff --git a/chrome/browser/adblock/adblock_telemetry_service_factory.cc b/chrom new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/adblock_telemetry_service_factory.cc -@@ -0,0 +1,68 @@ +@@ -0,0 +1,63 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -1116,11 +1160,6 @@ new file mode 100644 + +AdblockTelemetryServiceFactory::~AdblockTelemetryServiceFactory() = default; + -+AdblockController* AdblockTelemetryServiceFactory::GetAdblockController( -+ content::BrowserContext* context) const { -+ return AdblockControllerFactory::GetForBrowserContext(context); -+} -+ +SubscriptionService* AdblockTelemetryServiceFactory::GetSubscriptionService( + content::BrowserContext* context) const { + return SubscriptionServiceFactory::GetForBrowserContext(context); @@ -1128,7 +1167,7 @@ new file mode 100644 + +PrefService* AdblockTelemetryServiceFactory::GetPrefs( + content::BrowserContext* context) const { -+ return Profile::FromBrowserContext(context)->GetPrefs(); ++ return Profile::FromBrowserContext(context)->GetOriginalProfile()->GetPrefs(); +} + +content::BrowserContext* AdblockTelemetryServiceFactory::GetBrowserContextToUse( @@ -1141,7 +1180,7 @@ diff --git a/chrome/browser/adblock/adblock_telemetry_service_factory.h b/chrome new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/adblock_telemetry_service_factory.h -@@ -0,0 +1,53 @@ +@@ -0,0 +1,51 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -1177,8 +1216,6 @@ new file mode 100644 + + protected: + PrefService* GetPrefs(content::BrowserContext* context) const override; -+ AdblockController* GetAdblockController( -+ content::BrowserContext* context) const override; + SubscriptionService* GetSubscriptionService( + content::BrowserContext* context) const override; + @@ -1195,6 +1232,1578 @@ new file mode 100644 +} // namespace adblock + +#endif // CHROME_BROWSER_ADBLOCK_ADBLOCK_TELEMETRY_SERVICE_FACTORY_H_ +diff --git a/chrome/browser/adblock/android/BUILD.gn b/chrome/browser/adblock/android/BUILD.gn +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/BUILD.gn +@@ -0,0 +1,68 @@ ++# This file is part of eyeo Chromium SDK, ++# Copyright (C) 2006-present eyeo GmbH ++# eyeo Chromium SDK is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License version 3 as ++# published by the Free Software Foundation. ++# eyeo Chromium SDK is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# You should have received a copy of the GNU General Public License ++# along with eyeo Chromium SDK. If not, see . ++ ++ ++import("//build/config/android/rules.gni") ++ ++android_library("adblock_java_tests") { ++ testonly = true ++ ++ sources = [ ++ "javatests/src/org/chromium/chrome/browser/adblock/AdblockControllerTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/FilteringConfigurationTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/ResourceClassificationNotifierTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesCircumventionTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesCspTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideEmuInvTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideEmuTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesExceptionTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesFilterTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesHeaderFilterTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesHelper.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesRewriteTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesSiteKeyTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesSnippetsTest.java", ++ "javatests/src/org/chromium/chrome/browser/adblock/TestPagesWebsocketTest.java", ++ ] ++ ++ ++ deps = [ ++ "//base:base_java", ++ "//base:base_java_test_support", ++ "//chrome/android:chrome_java", ++ "//chrome/browser/flags:java", ++ "//chrome/browser/settings:test_support_java", ++ "//chrome/browser/tab:java", ++ "//chrome/browser/tabmodel:java", ++ "//chrome/test/android:chrome_java_integration_test_support", ++ "//chrome/test/android:chrome_java_test_support_common", ++ "//components/adblock/android:adblock_controller_java", ++ "//components/adblock/android:adblock_java_tests_base", ++ "//components/infobars/android:java", ++ "//components/infobars/core:infobar_enums_java", ++ "//components/messages/android/test:test_support_java", ++ "//content/public/android:content_full_java", ++ "//content/public/android:content_main_dex_java", ++ "//content/public/test/android:content_java_test_support", ++ "//net/android:net_java_test_support", ++ "//third_party/androidx:androidx_fragment_fragment_java", ++ "//third_party/androidx:androidx_test_monitor_java", ++ "//third_party/androidx:androidx_test_runner_java", ++ "//third_party/hamcrest:hamcrest_core_java", ++ "//third_party/hamcrest:hamcrest_library_java", ++ "//third_party/junit:junit", ++ "//ui/android:ui_no_recycler_view_java", ++ "//url:gurl_java", ++ ] ++ ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockControllerTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockControllerTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/AdblockControllerTest.java +@@ -0,0 +1,43 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.AdblockControllerTestBase; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class AdblockControllerTest extends AdblockControllerTestBase { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ ++ @Before ++ public void setUp() { ++ mActivityTestRule.startMainActivityOnBlankPage(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/FilteringConfigurationTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/FilteringConfigurationTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/FilteringConfigurationTest.java +@@ -0,0 +1,418 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import androidx.test.InstrumentationRegistry; ++import androidx.test.filters.LargeTest; ++ ++import org.junit.After; ++import org.junit.Assert; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.Test; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CallbackHelper; ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.base.test.util.Feature; ++import org.chromium.base.test.util.IntegrationTest; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.FilteringConfiguration; ++import org.chromium.components.adblock.TestVerificationUtils; ++import org.chromium.content_public.browser.test.util.TestThreadUtils; ++import org.chromium.content_public.common.ContentSwitches; ++import org.chromium.net.test.EmbeddedTestServer; ++ ++import java.net.URL; ++import java.util.ArrayList; ++import java.util.Arrays; ++import java.util.List; ++import java.util.concurrent.TimeUnit; ++import java.util.concurrent.TimeoutException; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, ++ ContentSwitches.HOST_RESOLVER_RULES + "=MAP * 127.0.0.1"}) ++public class FilteringConfigurationTest { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final CallbackHelper mCallbackHelper = new CallbackHelper(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ public FilteringConfiguration mConfigurationA; ++ public FilteringConfiguration mConfigurationB; ++ private EmbeddedTestServer mTestServer; ++ private String mTestUrl; ++ ++ private static class TestConfigurationChangeObserver ++ implements FilteringConfiguration.ConfigurationChangeObserver { ++ public volatile boolean mOnEnabledStateChangedCalled; ++ public volatile boolean mOnFilterListsChanged; ++ public volatile boolean mOnAllowedDomainsChanged; ++ public volatile boolean mOnCustomFiltersChanged; ++ ++ public TestConfigurationChangeObserver() { ++ mOnEnabledStateChangedCalled = false; ++ mOnFilterListsChanged = false; ++ mOnAllowedDomainsChanged = false; ++ mOnCustomFiltersChanged = false; ++ } ++ ++ @Override ++ public void onEnabledStateChanged() { ++ mOnEnabledStateChangedCalled = true; ++ } ++ @Override ++ public void onFilterListsChanged() { ++ mOnFilterListsChanged = true; ++ } ++ ++ @Override ++ public void onAllowedDomainsChanged() { ++ mOnAllowedDomainsChanged = true; ++ } ++ ++ @Override ++ public void onCustomFiltersChanged() { ++ mOnCustomFiltersChanged = true; ++ } ++ } ++ ++ public void loadTestUrl() throws InterruptedException { ++ mActivityTestRule.loadUrl(mTestUrl, 5); ++ } ++ ++ @Before ++ public void setUp() throws TimeoutException { ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ mConfigurationA = FilteringConfiguration.createConfiguration("a"); ++ mConfigurationB = FilteringConfiguration.createConfiguration("b"); ++ mCallbackHelper.notifyCalled(); ++ }); ++ mCallbackHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ mHelper.setActivityTestRule(mActivityTestRule); ++ mActivityTestRule.startMainActivityOnBlankPage(); ++ mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); ++ mTestUrl = mTestServer.getURLWithHostName( ++ "test.org", "/chrome/test/data/adblock/innermost_frame.html"); ++ } ++ ++ @After ++ public void tearDown() { ++ mTestServer.stopAndDestroyServer(); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void addingAllowedDomains() throws Exception { ++ final List allowedDomainsA = new ArrayList<>(); ++ final List allowedDomainsB = new ArrayList<>(); ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ mConfigurationA.addAllowedDomain("foobar.com"); ++ mConfigurationA.addAllowedDomain("domain.com/path/to/page.html"); ++ mConfigurationA.addAllowedDomain("domain.com/duplicate.html"); ++ allowedDomainsA.addAll(mConfigurationA.getAllowedDomains()); ++ ++ mConfigurationB.addAllowedDomain("https://scheme.com/path.html"); ++ mConfigurationB.addAllowedDomain("https://second.com"); ++ mConfigurationB.removeAllowedDomain("https://second.com"); ++ mConfigurationB.addAllowedDomain("gibberish"); ++ allowedDomainsB.addAll(mConfigurationB.getAllowedDomains()); ++ ++ mCallbackHelper.notifyCalled(); ++ }); ++ mCallbackHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ // We expect to see a sorted collection of domains (not URLs) without duplicates. ++ ArrayList expectedAllowedDomainsA = new ArrayList(); ++ expectedAllowedDomainsA.add("domain.com"); ++ expectedAllowedDomainsA.add("foobar.com"); ++ Assert.assertEquals(expectedAllowedDomainsA, allowedDomainsA); ++ ++ // We expect not to see second.com because it was removed after being added. ++ ArrayList expectedAllowedDomainsB = new ArrayList(); ++ expectedAllowedDomainsB.add("scheme.com"); ++ expectedAllowedDomainsB.add("www.gibberish.com"); ++ Assert.assertEquals(expectedAllowedDomainsB, allowedDomainsB); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void addingCustomFilters() throws Exception { ++ final List customFiltersA = new ArrayList<>(); ++ final List customFiltersB = new ArrayList<>(); ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ mConfigurationA.addCustomFilter("foobar.com"); ++ mConfigurationA.addCustomFilter("foobar.com"); ++ mConfigurationA.addCustomFilter("abc"); ++ customFiltersA.addAll(mConfigurationA.getCustomFilters()); ++ ++ mConfigurationB.addCustomFilter("https://scheme.com/path.html"); ++ mConfigurationB.addCustomFilter("https://second.com"); ++ mConfigurationB.removeCustomFilter("https://second.com"); ++ customFiltersB.addAll(mConfigurationB.getCustomFilters()); ++ ++ mCallbackHelper.notifyCalled(); ++ }); ++ mCallbackHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ // We expect to see a collection of custom filters without duplicates. ++ // The order represents order of addition. ++ ArrayList expectedCustomFiltersA = new ArrayList(); ++ expectedCustomFiltersA.add("foobar.com"); ++ expectedCustomFiltersA.add("abc"); ++ Assert.assertEquals(expectedCustomFiltersA, customFiltersA); ++ ++ // We expect not to see https://second.com because it was removed after being added. ++ ArrayList expectedCustomFiltersB = new ArrayList(); ++ expectedCustomFiltersB.add("https://scheme.com/path.html"); ++ Assert.assertEquals(expectedCustomFiltersB, customFiltersB); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void addingFilterLists() throws Exception { ++ final URL filterList1 = new URL("http://filters.com/list1.txt"); ++ final URL filterList2 = new URL("http://filters.com/list2.txt"); ++ final List filterListsA = new ArrayList(); ++ final List filterListsB = new ArrayList(); ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ mConfigurationA.addFilterList(filterList1); ++ mConfigurationA.addFilterList(filterList2); ++ mConfigurationA.addFilterList(filterList1); ++ filterListsA.addAll(mConfigurationA.getFilterLists()); ++ ++ mConfigurationB.addFilterList(filterList1); ++ mConfigurationB.addFilterList(filterList2); ++ mConfigurationB.removeFilterList(filterList1); ++ filterListsB.addAll(mConfigurationB.getFilterLists()); ++ ++ mCallbackHelper.notifyCalled(); ++ }); ++ mCallbackHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ ArrayList expectedFilterListsA = new ArrayList(); ++ expectedFilterListsA.add(filterList1); ++ expectedFilterListsA.add(filterList2); ++ Assert.assertEquals(expectedFilterListsA, filterListsA); ++ ++ ArrayList expectedFilterListsB = new ArrayList(); ++ expectedFilterListsB.add(filterList2); ++ Assert.assertEquals(expectedFilterListsB, filterListsB); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void aliasedConfigurations() throws Exception { ++ final URL filterList1 = new URL("http://filters.com/list1.txt"); ++ final URL filterList2 = new URL("http://filters.com/list2.txt"); ++ final List filterListsA = new ArrayList(); ++ final List filterListsB = new ArrayList(); ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ // Create a new FilteringConfiguration with a name of one that ++ // already exist. ++ FilteringConfiguration aliasedConfiguration = ++ FilteringConfiguration.createConfiguration("a"); ++ ++ // We add filter lists only to the original configuration instance. ++ mConfigurationA.addFilterList(filterList1); ++ mConfigurationA.addFilterList(filterList2); ++ ++ // We check what filter lists are present in the original and in the aliased instance. ++ filterListsA.addAll(mConfigurationA.getFilterLists()); ++ filterListsB.addAll(aliasedConfiguration.getFilterLists()); ++ ++ mCallbackHelper.notifyCalled(); ++ }); ++ mCallbackHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ ArrayList expectedFilterLists = new ArrayList(); ++ expectedFilterLists.add(filterList1); ++ expectedFilterLists.add(filterList2); ++ Assert.assertEquals(expectedFilterLists, filterListsA); ++ Assert.assertEquals(expectedFilterLists, filterListsB); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void configurationChangeObserverNotified() throws Exception { ++ final URL filterList1 = new URL("http://filters.com/list1.txt"); ++ final TestConfigurationChangeObserver observer = new TestConfigurationChangeObserver(); ++ Assert.assertFalse(observer.mOnEnabledStateChangedCalled); ++ Assert.assertFalse(observer.mOnAllowedDomainsChanged); ++ Assert.assertFalse(observer.mOnCustomFiltersChanged); ++ Assert.assertFalse(observer.mOnFilterListsChanged); ++ ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ // We'll create an aliased instance which will receive notifications triggered by ++ // changes made to the original instance. ++ FilteringConfiguration aliasedConfiguration = ++ FilteringConfiguration.createConfiguration("a"); ++ aliasedConfiguration.addObserver(observer); ++ ++ mConfigurationA.addFilterList(filterList1); ++ mConfigurationA.addAllowedDomain("test.com"); ++ mConfigurationA.addCustomFilter("test.com"); ++ mConfigurationA.setEnabled(false); ++ ++ mCallbackHelper.notifyCalled(); ++ }); ++ mCallbackHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ Assert.assertTrue(observer.mOnEnabledStateChangedCalled); ++ Assert.assertTrue(observer.mOnAllowedDomainsChanged); ++ Assert.assertTrue(observer.mOnCustomFiltersChanged); ++ Assert.assertTrue(observer.mOnFilterListsChanged); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void resourceBlockedByFilter() throws Exception { ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ mConfigurationA.addCustomFilter("resource.png"); ++ mCallbackHelper.notifyCalled(); ++ }); ++ mCallbackHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ loadTestUrl(); ++ TestVerificationUtils.expectResourceBlocked(mHelper, "subresource"); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void resourceAllowedByFilter() throws Exception { ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ mConfigurationA.addCustomFilter("resource.png"); ++ // Allowing filter for the mocked test.org domain that mTestServer hosts. ++ mConfigurationA.addCustomFilter("@@test.org$document"); ++ mCallbackHelper.notifyCalled(); ++ }); ++ mCallbackHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ loadTestUrl(); ++ TestVerificationUtils.expectResourceShown(mHelper, "subresource"); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void resourceAllowedByAllowedDomain() throws Exception { ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ mConfigurationA.addCustomFilter("resource.png"); ++ mConfigurationA.addAllowedDomain("test.org"); ++ mCallbackHelper.notifyCalled(); ++ }); ++ mCallbackHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ loadTestUrl(); ++ TestVerificationUtils.expectResourceShown(mHelper, "subresource"); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void resourceBlockedBySecondConfiguration() throws Exception { ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ // ConfigurationA allows the resource. ++ // Allowing rules take precedence within a FilteringConfiguration. ++ mConfigurationA.addCustomFilter("resource.png"); ++ mConfigurationA.addAllowedDomain("test.org"); ++ // But ConfigurationB blocks the resource. ++ // Blocking takes precedence across FilteringConfigurations. ++ mConfigurationB.addCustomFilter("resource.png"); ++ mCallbackHelper.notifyCalled(); ++ }); ++ mCallbackHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ loadTestUrl(); ++ TestVerificationUtils.expectResourceBlocked(mHelper, "subresource"); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void noBlockingWithoutFilters() throws Exception { ++ loadTestUrl(); ++ TestVerificationUtils.expectResourceShown(mHelper, "subresource"); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void createAndRemoveConfiguration() throws Exception { ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ // Check initial state. ++ FilteringConfiguration.removeConfiguration("adblock"); ++ ArrayList expectedConfigurations = ++ new ArrayList(); ++ expectedConfigurations.add(mConfigurationA); ++ expectedConfigurations.add(mConfigurationB); ++ Assert.assertEquals(expectedConfigurations, FilteringConfiguration.getConfigurations()); ++ // Add new configuration (twice) and check. ++ FilteringConfiguration configurationC = FilteringConfiguration.createConfiguration("c"); ++ FilteringConfiguration configurationC2 = ++ FilteringConfiguration.createConfiguration("c"); ++ // Confirm this is the same reference. ++ Assert.assertEquals(configurationC, configurationC2); ++ expectedConfigurations.add(configurationC); ++ Assert.assertEquals(expectedConfigurations, FilteringConfiguration.getConfigurations()); ++ // Remove configuration "c" twice (2nd attempt has no effect) and check. ++ FilteringConfiguration.removeConfiguration("c"); ++ FilteringConfiguration.removeConfiguration("c"); ++ expectedConfigurations.remove(configurationC); ++ Assert.assertEquals(expectedConfigurations, FilteringConfiguration.getConfigurations()); ++ }); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void cannotUseRemovedConfiguration() throws Exception { ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ FilteringConfiguration configurationC = FilteringConfiguration.createConfiguration("c"); ++ configurationC.setEnabled(false); ++ Assert.assertFalse(configurationC.isEnabled()); ++ FilteringConfiguration.removeConfiguration("c"); ++ try { ++ configurationC.setEnabled(true); ++ Assert.fail(); ++ } catch (final IllegalStateException e) { ++ // Expected ++ } ++ // Recreate. ++ configurationC = FilteringConfiguration.createConfiguration("c"); ++ Assert.assertTrue(configurationC.isEnabled()); ++ configurationC.setEnabled(false); ++ Assert.assertFalse(configurationC.isEnabled()); ++ }); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/ResourceClassificationNotifierTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/ResourceClassificationNotifierTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/ResourceClassificationNotifierTest.java +@@ -0,0 +1,135 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import androidx.test.InstrumentationRegistry; ++import androidx.test.filters.LargeTest; ++ ++import org.junit.After; ++import org.junit.Assert; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.Test; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CallbackHelper; ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.base.test.util.Feature; ++import org.chromium.base.test.util.IntegrationTest; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.FilteringConfiguration; ++import org.chromium.components.adblock.ResourceClassificationNotifier; ++import org.chromium.components.adblock.TestAdBlockedObserver; ++import org.chromium.content_public.browser.test.util.TestThreadUtils; ++import org.chromium.content_public.common.ContentSwitches; ++import org.chromium.net.test.EmbeddedTestServer; ++ ++import java.util.concurrent.TimeUnit; ++import java.util.concurrent.TimeoutException; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, ++ ContentSwitches.HOST_RESOLVER_RULES + "=MAP * 127.0.0.1"}) ++public class ResourceClassificationNotifierTest { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final CallbackHelper mHelper = new CallbackHelper(); ++ public FilteringConfiguration mConfiguration; ++ public TestAdBlockedObserver mAdBlockedObserver = new TestAdBlockedObserver(); ++ ++ private EmbeddedTestServer mTestServer; ++ private String mTestUrl; ++ ++ public void loadTestUrl() { ++ mActivityTestRule.loadUrl(mTestUrl, 5); ++ } ++ ++ @Before ++ public void setUp() throws TimeoutException { ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ mConfiguration = FilteringConfiguration.createConfiguration("a"); ++ ResourceClassificationNotifier.getInstance().addOnAdBlockedObserver(mAdBlockedObserver); ++ mHelper.notifyCalled(); ++ }); ++ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ mActivityTestRule.startMainActivityOnBlankPage(); ++ mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); ++ mTestUrl = mTestServer.getURLWithHostName( ++ "test.org", "/chrome/test/data/adblock/innermost_frame.html"); ++ } ++ ++ @After ++ public void tearDown() { ++ mTestServer.stopAndDestroyServer(); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void noNotificationWithoutBlocking() throws Exception { ++ loadTestUrl(); ++ ++ Assert.assertTrue(mAdBlockedObserver.blockedInfos.isEmpty()); ++ Assert.assertTrue(mAdBlockedObserver.allowedInfos.isEmpty()); ++ Assert.assertTrue(mAdBlockedObserver.allowedPageInfos.isEmpty()); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void resourceBlockedByFilter() throws Exception { ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ mConfiguration.addCustomFilter("resource.png"); ++ mHelper.notifyCalled(); ++ }); ++ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ loadTestUrl(); ++ // Observer was notified about the blocking ++ Assert.assertTrue(mAdBlockedObserver.isBlocked("resource.png")); ++ Assert.assertTrue(mAdBlockedObserver.allowedInfos.isEmpty()); ++ Assert.assertTrue(mAdBlockedObserver.allowedPageInfos.isEmpty()); ++ } ++ ++ @Test ++ @IntegrationTest ++ @LargeTest ++ @Feature({"adblock"}) ++ public void pageAllowed() throws Exception { ++ TestThreadUtils.runOnUiThreadBlocking(() -> { ++ mConfiguration.addCustomFilter("resource.png"); ++ mConfiguration.addAllowedDomain("test.org"); ++ mHelper.notifyCalled(); ++ }); ++ mHelper.waitForCallback(0, 1, 10, TimeUnit.SECONDS); ++ loadTestUrl(); ++ // Observer was notified about the allowed resource ++ Assert.assertTrue(mAdBlockedObserver.blockedInfos.isEmpty()); ++ Assert.assertTrue(mAdBlockedObserver.isAllowed("resource.png")); ++ ++ // TODO(mpawlowski): The observer could also be notified about the entire domain being ++ // allowed: Assert.assertTrue(mAdBlockedObserver.isPageAllowed("test.org")); However this is ++ // currently broken with multiple FilteringConfigurations (DPD-1729). ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesCircumventionTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesCircumventionTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesCircumventionTest.java +@@ -0,0 +1,51 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.After; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesCircumventionTestBase; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesCircumventionTest extends TestPagesCircumventionTestBase { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesCspTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesCspTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesCspTest.java +@@ -0,0 +1,51 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.After; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesCspTestBase; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesCspTest extends TestPagesCspTestBase { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideEmuInvTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideEmuInvTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideEmuInvTest.java +@@ -0,0 +1,48 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.After; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesElemhideEmuInvTestBase; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesElemhideEmuInvTest extends TestPagesElemhideEmuInvTestBase { ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideEmuTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideEmuTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideEmuTest.java +@@ -0,0 +1,48 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.After; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesElemhideEmuTestBase; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesElemhideEmuTest extends TestPagesElemhideEmuTestBase { ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesElemhideTest.java +@@ -0,0 +1,48 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.After; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesElemhideTestBase; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesElemhideTest extends TestPagesElemhideTestBase { ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesExceptionTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesExceptionTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesExceptionTest.java +@@ -0,0 +1,100 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import androidx.test.filters.LargeTest; ++ ++import org.junit.After; ++import org.junit.Assert; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.Test; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.task.PostTask; ++import org.chromium.base.task.TaskTraits; ++import org.chromium.base.test.util.CallbackHelper; ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.base.test.util.Feature; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesExceptionTestBase; ++import org.chromium.content_public.browser.test.util.JavaScriptUtils; ++import org.chromium.content_public.common.ContentSwitches; ++ ++import java.util.concurrent.TimeUnit; ++import java.util.concurrent.TimeoutException; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesExceptionTest extends TestPagesExceptionTestBase { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ @CommandLineFlags.Add(ContentSwitches.DISABLE_POPUP_BLOCKING) ++ public void testVerifyPopupException() throws Exception { ++ final String POPUP_TESTACE_URL = ++ TestPagesHelper.EXCEPTION_TESTPAGES_TESTCASES_ROOT + "popup"; ++ mHelper.loadUrl(POPUP_TESTACE_URL); ++ Assert.assertEquals(1, mHelper.getTabCount()); ++ final CallbackHelper tabsLoadedWaiter = mHelper.getTabsOpenedAndLoadedWaiter(); ++ PostTask.postTask(TaskTraits.BEST_EFFORT_MAY_BLOCK, () -> { ++ try { ++ String numElements = JavaScriptUtils.executeJavaScriptAndWaitForResult( ++ mHelper.getWebContents(), ++ "var elements = document.getElementsByClassName(\"testcase-trigger\");" ++ + "for (let i = 0; i < elements.length; ++i) {" ++ + " elements[i].click();" ++ + "}" ++ + "elements.length;"); ++ Assert.assertEquals("3", numElements); ++ } catch (TimeoutException e) { ++ Assert.assertEquals("Popups were triggered", "Popups were NOT triggered"); ++ } ++ }); ++ // Wait for three tab loaded events ++ tabsLoadedWaiter.waitForCallback(0, 3, TestPagesHelper.TEST_TIMEOUT_SEC, TimeUnit.SECONDS); ++ Assert.assertEquals(4, mHelper.getTabCount()); ++ Assert.assertEquals(3, mHelper.numAllowedPopups()); ++ Assert.assertTrue(mHelper.isPopupAllowed( ++ TestPagesHelper.TESTPAGES_RESOURCES_ROOT + "popup_exception/link.html")); ++ Assert.assertTrue(mHelper.isPopupAllowed( ++ TestPagesHelper.TESTPAGES_RESOURCES_ROOT + "popup_exception/script-window.html")); ++ Assert.assertTrue(mHelper.isPopupAllowed( ++ TestPagesHelper.TESTPAGES_RESOURCES_ROOT + "popup_exception/script-tab.html")); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesFilterTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesFilterTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesFilterTest.java +@@ -0,0 +1,101 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import androidx.test.filters.LargeTest; ++ ++import org.junit.After; ++import org.junit.Assert; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.Test; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.task.PostTask; ++import org.chromium.base.task.TaskTraits; ++import org.chromium.base.test.util.CallbackHelper; ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.base.test.util.Feature; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesFilterTestBase; ++import org.chromium.content_public.browser.test.util.JavaScriptUtils; ++import org.chromium.content_public.common.ContentSwitches; ++ ++import java.util.concurrent.TimeUnit; ++import java.util.concurrent.TimeoutException; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesFilterTest extends TestPagesFilterTestBase { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @Test ++ @LargeTest ++ @Feature({"adblock"}) ++ @CommandLineFlags.Add(ContentSwitches.DISABLE_POPUP_BLOCKING) ++ public void testVerifyPopupFilters() throws Exception { ++ final String POPUP_TESTACE_URL = TestPagesHelper.FILTER_TESTPAGES_TESTCASES_ROOT + "popup"; ++ mHelper.loadUrl(POPUP_TESTACE_URL); ++ Assert.assertEquals(1, mHelper.getTabCount()); ++ final CallbackHelper tabsOpenedAndClosedWaiter = mHelper.getTabsOpenedAndClosedWaiter(); ++ // Trigger popups which open and close when blocked ++ PostTask.postTask(TaskTraits.BEST_EFFORT_MAY_BLOCK, () -> { ++ try { ++ String numElements = JavaScriptUtils.executeJavaScriptAndWaitForResult( ++ mHelper.getWebContents(), ++ "var elements = document.getElementsByClassName(\"testcase-trigger\");" ++ + "for (let i = 0; i < elements.length; ++i) {" ++ + " elements[i].click();" ++ + "}" ++ + "elements.length;"); ++ Assert.assertEquals("3", numElements); ++ } catch (TimeoutException e) { ++ Assert.assertEquals("Popups were triggered", "Popups were NOT triggered"); ++ } ++ }); ++ // Wait for three tab open events and three close tabs events ++ tabsOpenedAndClosedWaiter.waitForCallback( ++ 0, 6, TestPagesHelper.TEST_TIMEOUT_SEC, TimeUnit.SECONDS); ++ Assert.assertEquals(3, mHelper.numBlockedPopups()); ++ Assert.assertTrue(mHelper.isPopupBlocked( ++ TestPagesHelper.TESTPAGES_RESOURCES_ROOT + "popup/link.html")); ++ Assert.assertTrue(mHelper.isPopupBlocked( ++ TestPagesHelper.TESTPAGES_RESOURCES_ROOT + "popup/script-window.html")); ++ Assert.assertTrue(mHelper.isPopupBlocked( ++ TestPagesHelper.TESTPAGES_RESOURCES_ROOT + "popup/script-tab.html")); ++ Assert.assertEquals(1, mHelper.getTabCount()); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesHeaderFilterTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesHeaderFilterTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesHeaderFilterTest.java +@@ -0,0 +1,51 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.After; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesHeaderFilterTestBase; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesHeaderFilterTest extends TestPagesHeaderFilterTestBase { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesHelper.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesHelper.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesHelper.java +@@ -0,0 +1,121 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.Assert; ++ ++import org.chromium.base.test.util.CallbackHelper; ++import org.chromium.chrome.browser.tab.EmptyTabObserver; ++import org.chromium.chrome.browser.tab.Tab; ++import org.chromium.chrome.browser.tabmodel.TabModelObserver; ++import org.chromium.chrome.browser.tabmodel.TabModelSelector; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesHelperBase; ++import org.chromium.components.adblock.TestVerificationUtils; ++import org.chromium.content_public.browser.WebContents; ++import org.chromium.content_public.browser.test.util.TestThreadUtils; ++import org.chromium.url.GURL; ++ ++import java.util.concurrent.TimeoutException; ++ ++public class TestPagesHelper extends TestPagesHelperBase { ++ private ChromeTabbedActivityTestRule mActivityTestRule; ++ ++ public void setActivityTestRule(ChromeTabbedActivityTestRule activityTestRule) { ++ mActivityTestRule = activityTestRule; ++ } ++ ++ public void setUp(final ChromeTabbedActivityTestRule activityRule) { ++ mActivityTestRule = activityRule; ++ mActivityTestRule.startMainActivityOnBlankPage(); ++ super.setUp(); ++ } ++ ++ public CallbackHelper getTabsOpenedAndClosedWaiter() { ++ final CallbackHelper callbackHelper = new CallbackHelper(); ++ final TabModelSelector tabModelSelector = ++ mActivityTestRule.getActivity().getTabModelSelectorSupplier().get(); ++ Assert.assertNotNull(tabModelSelector); ++ TestThreadUtils.runOnUiThreadBlocking( ++ () -> tabModelSelector.getCurrentModel().addObserver(new TabModelObserver() { ++ @Override ++ public void onFinishingTabClosure(Tab tab) { ++ // For some reason TabModelObserver#tabRemoved() is not called. ++ // Let's wait a bit to make sure tab is indeed closed. ++ try { ++ Thread.sleep(100); ++ } catch (InterruptedException ignored) { ++ } ++ callbackHelper.notifyCalled(); ++ } ++ ++ @Override ++ public void didAddTab( ++ Tab tab, int type, int creationState, boolean markedForSelection) { ++ callbackHelper.notifyCalled(); ++ } ++ })); ++ return callbackHelper; ++ } ++ ++ public CallbackHelper getTabsOpenedAndLoadedWaiter() { ++ final CallbackHelper callbackHelper = new CallbackHelper(); ++ final TabModelSelector tabModelSelector = ++ mActivityTestRule.getActivity().getTabModelSelectorSupplier().get(); ++ Assert.assertNotNull(tabModelSelector); ++ TestThreadUtils.runOnUiThreadBlocking( ++ () -> tabModelSelector.getCurrentModel().addObserver(new TabModelObserver() { ++ @Override ++ public void didAddTab( ++ Tab tab, int type, int creationState, boolean markedForSelection) { ++ tab.addObserver(new EmptyTabObserver() { ++ @Override ++ public void onPageLoadFinished(Tab tab, GURL url) { ++ callbackHelper.notifyCalled(); ++ } ++ }); ++ } ++ })); ++ return callbackHelper; ++ } ++ ++ public int getTabCount() { ++ final TabModelSelector tabModelSelector = ++ mActivityTestRule.getActivity().getTabModelSelectorSupplier().get(); ++ Assert.assertNotNull(tabModelSelector); ++ return tabModelSelector.getTotalTabCount(); ++ } ++ ++ @Override ++ public WebContents getWebContents() { ++ return mActivityTestRule.getActivity().getCurrentWebContents(); ++ } ++ ++ @Override ++ public void loadUrl(final String url) throws InterruptedException, TimeoutException { ++ mActivityTestRule.loadUrl(url, TEST_TIMEOUT_SEC); ++ } ++ ++ @Override ++ public void loadUrlWaitForContent(final String url) ++ throws InterruptedException, TimeoutException { ++ loadUrl(url); ++ TestVerificationUtils.verifyCondition( ++ this, "document.getElementsByClassName('testcase-waiting-content').length == 0"); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesRewriteTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesRewriteTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesRewriteTest.java +@@ -0,0 +1,51 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.After; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesRewriteTestBase; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesRewriteTest extends TestPagesRewriteTestBase { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesSiteKeyTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesSiteKeyTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesSiteKeyTest.java +@@ -0,0 +1,51 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.After; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesSiteKeyTestBase; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesSiteKeyTest extends TestPagesSiteKeyTestBase { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesSnippetsTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesSnippetsTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesSnippetsTest.java +@@ -0,0 +1,51 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.After; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesSnippetsTestBase; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesSnippetsTest extends TestPagesSnippetsTestBase { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} +diff --git a/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesWebsocketTest.java b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesWebsocketTest.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/android/javatests/src/org/chromium/chrome/browser/adblock/TestPagesWebsocketTest.java +@@ -0,0 +1,51 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++package org.chromium.chrome.browser.adblock; ++ ++import org.junit.After; ++import org.junit.Before; ++import org.junit.Rule; ++import org.junit.runner.RunWith; ++ ++import org.chromium.base.test.util.CommandLineFlags; ++import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.test.ChromeBrowserTestRule; ++import org.chromium.chrome.test.ChromeJUnit4ClassRunner; ++import org.chromium.chrome.test.ChromeTabbedActivityTestRule; ++import org.chromium.components.adblock.TestPagesWebsocketTestBase; ++ ++@RunWith(ChromeJUnit4ClassRunner.class) ++@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) ++public class TestPagesWebsocketTest extends TestPagesWebsocketTestBase { ++ @Rule ++ public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); ++ @Rule ++ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); ++ private final TestPagesHelper mHelper = new TestPagesHelper(); ++ ++ @Before ++ public void setUp() { ++ mHelper.setUp(mActivityTestRule); ++ super.setUp(mHelper); ++ } ++ ++ @After ++ public void tearDown() { ++ mHelper.tearDown(); ++ } ++} diff --git a/chrome/browser/adblock/content_security_policy_injector_factory.cc b/chrome/browser/adblock/content_security_policy_injector_factory.cc new file mode 100644 --- /dev/null @@ -1868,7 +3477,7 @@ new file mode 100644 +KeyedService* SubscriptionPersistentMetadataFactory::BuildServiceInstanceFor( + content::BrowserContext* context) const { + return new SubscriptionPersistentMetadataImpl( -+ Profile::FromBrowserContext(context)->GetPrefs()); ++ Profile::FromBrowserContext(context)->GetOriginalProfile()->GetPrefs()); +} + +content::BrowserContext* @@ -1994,7 +3603,7 @@ new file mode 100644 + +PrefService* SubscriptionServiceFactory::GetPrefs( + content::BrowserContext* context) const { -+ return Profile::FromBrowserContext(context)->GetPrefs(); ++ return Profile::FromBrowserContext(context)->GetOriginalProfile()->GetPrefs(); +} + +content::BrowserContext* SubscriptionServiceFactory::GetBrowserContextToUse( @@ -2062,7 +3671,7 @@ diff --git a/chrome/browser/adblock/test/adblock_content_browser_client_browsert new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/test/adblock_content_browser_client_browsertest.cc -@@ -0,0 +1,122 @@ +@@ -0,0 +1,125 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -2082,14 +3691,12 @@ new file mode 100644 + +#include "chrome/browser/adblock/adblock_content_browser_client.h" + -+#include "chrome/browser/adblock/adblock_controller_factory.h" +#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_commands.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/common/adblock_constants.h" +#include "components/adblock/core/common/adblock_prefs.h" +#include "components/adblock/core/subscription/subscription_service.h" @@ -2142,8 +3749,10 @@ new file mode 100644 + ASSERT_TRUE(ws_server_.Start()); + + // Disable ad-filtering. -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()) -+ ->SetAdblockEnabled(false); ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ adblock_configuration->SetEnabled(false); + + NavigateToHTTP("split_packet_check.html"); + @@ -2157,8 +3766,10 @@ new file mode 100644 + ASSERT_TRUE(ws_server_.Start()); + + // Enable ad-filtering. -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()) -+ ->SetAdblockEnabled(true); ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ adblock_configuration->SetEnabled(true); + + NavigateToHTTP("split_packet_check.html"); + @@ -2172,11 +3783,12 @@ new file mode 100644 + ASSERT_TRUE(ws_server_.Start()); + + // Intercept WebSocket and block connection via a filter. -+ auto* controller = -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()); -+ controller->SetAdblockEnabled(true); -+ controller->RemoveCustomFilter(kAllowlistEverythingFilter); -+ controller->AddCustomFilter({"*$websocket"}); ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ adblock_configuration->SetEnabled(true); ++ adblock_configuration->RemoveCustomFilter(kAllowlistEverythingFilter); ++ adblock_configuration->AddCustomFilter({"*$websocket"}); + + NavigateToHTTP("split_packet_check.html"); + @@ -2189,7 +3801,7 @@ diff --git a/chrome/browser/adblock/test/adblock_debug_url_browsertest.cc b/chro new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/test/adblock_debug_url_browsertest.cc -@@ -0,0 +1,301 @@ +@@ -0,0 +1,314 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -2209,12 +3821,13 @@ new file mode 100644 + +#include + -+#include "chrome/browser/adblock/adblock_controller_factory.h" ++#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "components/adblock/content/browser/adblock_url_loader_factory_for_test.h" ++#include "components/adblock/core/subscription/subscription_config.h" +#include "content/public/test/browser_test.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" @@ -2242,6 +3855,24 @@ new file mode 100644 + .ExtractString(); + } + ++ bool IsAdblockEnabled() { ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) << "Test expects \"adblock\" configuration"; ++ return adblock_configuration->IsEnabled(); ++ } ++ ++ bool IsAAEnabled() { ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) << "Test expects \"adblock\" configuration"; ++ return base::ranges::any_of( ++ adblock_configuration->GetFilterLists(), ++ [&](const auto& url) { return url == AcceptableAdsUrl(); }); ++ } ++ + const std::string kReadPageBodyScript = + "document.getElementsByTagName('body')[0].firstChild.innerHTML"; + @@ -2400,52 +4031,46 @@ new file mode 100644 +} + +IN_PROC_BROWSER_TEST_F(AdblockDebugUrlTest, TestEnableAdblockCommands) { -+ auto* controller = -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()); -+ + GURL enable_adblock__url(kAdblockDebugUrl + "/adblock/enable"); + GURL disable_adblock_url(kAdblockDebugUrl + "/adblock/disable"); + GURL adblock_state_url(kAdblockDebugUrl + "/adblock/state"); + -+ ASSERT_TRUE(controller->IsAdblockEnabled()); ++ ASSERT_TRUE(IsAdblockEnabled()); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), adblock_state_url)); + ASSERT_EQ("OK\n\nenabled", + ExecuteScriptAndExtractString(kReadPageBodyScript)); + + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), disable_adblock_url)); -+ ASSERT_FALSE(controller->IsAdblockEnabled()); ++ ASSERT_FALSE(IsAdblockEnabled()); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), adblock_state_url)); + ASSERT_EQ("OK\n\ndisabled", + ExecuteScriptAndExtractString(kReadPageBodyScript)); + + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), enable_adblock__url)); -+ ASSERT_TRUE(controller->IsAdblockEnabled()); ++ ASSERT_TRUE(IsAdblockEnabled()); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), adblock_state_url)); + ASSERT_EQ("OK\n\nenabled", + ExecuteScriptAndExtractString(kReadPageBodyScript)); +} + +IN_PROC_BROWSER_TEST_F(AdblockDebugUrlTest, TestEnableAACommands) { -+ auto* controller = -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()); -+ + GURL enable_aa_url(kAdblockDebugUrl + "/aa/enable"); + GURL disable_aa_url(kAdblockDebugUrl + "/aa/disable"); + GURL aa_state_url(kAdblockDebugUrl + "/aa/state"); + -+ ASSERT_TRUE(controller->IsAcceptableAdsEnabled()); ++ ASSERT_TRUE(IsAAEnabled()); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), aa_state_url)); + ASSERT_EQ("OK\n\nenabled", + ExecuteScriptAndExtractString(kReadPageBodyScript)); + + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), disable_aa_url)); -+ ASSERT_FALSE(controller->IsAcceptableAdsEnabled()); ++ ASSERT_FALSE(IsAAEnabled()); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), aa_state_url)); + ASSERT_EQ("OK\n\ndisabled", + ExecuteScriptAndExtractString(kReadPageBodyScript)); + + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), enable_aa_url)); -+ ASSERT_TRUE(controller->IsAcceptableAdsEnabled()); ++ ASSERT_TRUE(IsAAEnabled()); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), aa_state_url)); + ASSERT_EQ("OK\n\nenabled", + ExecuteScriptAndExtractString(kReadPageBodyScript)); @@ -2495,7 +4120,7 @@ diff --git a/chrome/browser/adblock/test/adblock_filter_list_browsertest.cc b/ch new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/test/adblock_filter_list_browsertest.cc -@@ -0,0 +1,246 @@ +@@ -0,0 +1,260 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -2513,14 +4138,16 @@ new file mode 100644 + * along with eyeo Chromium SDK. If not, see . + */ + ++#include "base/check.h" +#include "base/environment.h" ++#include "base/functional/callback_forward.h" ++#include "base/run_loop.h" +#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "components/adblock/core/adblock_switches.h" +#include "components/adblock/core/subscription/subscription_config.h" +#include "components/version_info/version_info.h" -+#include "content/public/browser/browser_task_traits.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" +#include "net/dns/mock_host_resolver.h" @@ -2587,17 +4214,30 @@ new file mode 100644 + 1, request.relative_url.find_first_of("?") - 1)); + } + -+ // Unhandled requests result in the Embedded test server sending a 404. ++ // Unhandled requests result in the Embedded test server sending a 404. This ++ // is fine for the purpose of this test. + return nullptr; + } + -+ void CloseBrowserFromAnyThread() { -+ content::GetUIThreadTaskRunner({base::TaskPriority::USER_BLOCKING}) -+ ->PostTask( -+ FROM_HERE, -+ base::BindOnce( -+ &AdblockFilterListDownloadTestBase::CloseBrowserAsynchronously, -+ base::Unretained(this), browser())); ++ void NotifyTestFinished() { ++ finish_condition_met_ = true; ++ // If the test is currently waiting for the finish condition to be met, we ++ // need to quit the run loop. ++ if (quit_closure_) { ++ quit_closure_.Run(); ++ } ++ } ++ ++ void RunUntilTestFinished() { ++ // If the finish condition is already met, we don't need to run the run ++ // loop. ++ if (finish_condition_met_) { ++ return; ++ } ++ // Wait until NotifyTestFinished() gets called. ++ base::RunLoop run_loop; ++ quit_closure_ = run_loop.QuitClosure(); ++ std::move(run_loop).Run(); + } + + bool RunsOnEyeoCI() { @@ -2610,6 +4250,8 @@ new file mode 100644 + protected: + net::EmbeddedTestServer https_server_; + std::set default_lists_; ++ bool finish_condition_met_ = false; ++ base::RepeatingClosure quit_closure_; +}; + +class AdblockEnabledFilterListDownloadTest @@ -2617,21 +4259,21 @@ new file mode 100644 + public: + std::unique_ptr RequestHandler( + const net::test_server::HttpRequest& request) override { -+ auto return_value = -+ AdblockFilterListDownloadTestBase::RequestHandler(request); ++ auto result = AdblockFilterListDownloadTestBase::RequestHandler(request); + // If we get all expected requests we simply finish the test by closing + // the browser, otherwise test will fail with a timeout. + if (default_lists_.size() == 3) { -+ CloseBrowserFromAnyThread(); ++ NotifyTestFinished(); + } + -+ return return_value; ++ // Unhandled requests result in the Embedded test server sending a 404. ++ return result; + } +}; + +IN_PROC_BROWSER_TEST_F(AdblockEnabledFilterListDownloadTest, + TestInitialDownloads) { -+ RunUntilBrowserProcessQuits(); ++ RunUntilTestFinished(); +} + +class AdblockEnabledAcceptableAdsDisabledFilterListDownloadTest @@ -2650,7 +4292,7 @@ new file mode 100644 + if (request.method == net::test_server::HttpMethod::METHOD_HEAD && + base::StartsWith(request.relative_url, "/exceptionrules.txt")) { + CheckRequestParams(request, "true"); -+ CloseBrowserFromAnyThread(); ++ NotifyTestFinished(); + } + + return nullptr; @@ -2664,7 +4306,7 @@ new file mode 100644 +IN_PROC_BROWSER_TEST_F( + AdblockEnabledAcceptableAdsDisabledFilterListDownloadTest, + TestInitialDownloads) { -+ RunUntilBrowserProcessQuits(); ++ RunUntilTestFinished(); +} + +enum class DisableSwitch { Adblock, Eyeo }; @@ -2681,7 +4323,7 @@ new file mode 100644 + + void VerifyNoDownloads() { + ASSERT_EQ(0u, default_lists_.size()); -+ CloseBrowserFromAnyThread(); ++ NotifyTestFinished(); + } +}; + @@ -2694,7 +4336,7 @@ new file mode 100644 + FROM_HERE, base::Seconds(10), + base::BindOnce(&AdblockDisabledFilterListDownloadTest::VerifyNoDownloads, + base::Unretained(this))); -+ RunUntilBrowserProcessQuits(); ++ RunUntilTestFinished(); +} + +INSTANTIATE_TEST_SUITE_P(All, @@ -2706,10 +4348,7 @@ new file mode 100644 +class AdblockPtLocaleFilterListDownloadTest + : public AdblockFilterListDownloadTestBase { + public: -+ AdblockPtLocaleFilterListDownloadTest() -+ : AdblockFilterListDownloadTestBase() { -+ setenv("LANGUAGE", "pt_PT", 1); -+ } ++ AdblockPtLocaleFilterListDownloadTest() { setenv("LANGUAGE", "pt_PT", 1); } + + std::unique_ptr RequestHandler( + const net::test_server::HttpRequest& request) override { @@ -2727,7 +4366,7 @@ new file mode 100644 + // If we get all expected requests we simply finish the test by closing + // the browser, otherwise test will fail with a timeout. + if (default_lists_.size() == 3) { -+ CloseBrowserFromAnyThread(); ++ NotifyTestFinished(); + } + + // Unhandled requests result in the Embedded test server sending a 404. @@ -2737,7 +4376,7 @@ new file mode 100644 + +IN_PROC_BROWSER_TEST_F(AdblockPtLocaleFilterListDownloadTest, + TestInitialDownloads) { -+ RunUntilBrowserProcessQuits(); ++ RunUntilTestFinished(); +} +#endif + @@ -2746,7 +4385,7 @@ diff --git a/chrome/browser/adblock/test/adblock_filtering_configurations_browse new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/test/adblock_filtering_configurations_browsertest.cc -@@ -0,0 +1,460 @@ +@@ -0,0 +1,459 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -2768,13 +4407,11 @@ new file mode 100644 +#include "base/memory/raw_ptr.h" +#include "base/ranges/algorithm.h" +#include "base/run_loop.h" -+#include "chrome/browser/adblock/adblock_controller_factory.h" +#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/adblock_switches.h" +#include "components/adblock/core/common/adblock_constants.h" +#include "components/adblock/core/configuration/filtering_configuration.h" @@ -2835,9 +4472,10 @@ new file mode 100644 + } + + void SetUpOnMainThread() override { -+ auto* controller = -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()); -+ controller->RemoveCustomFilter(kAllowlistEverythingFilter); ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ adblock_configuration->RemoveCustomFilter(kAllowlistEverythingFilter); + } + + GURL BlockingFilterListUrl() { @@ -2867,7 +4505,7 @@ new file mode 100644 + std::unique_ptr MakeConfiguration( + std::string name) { + return std::make_unique( -+ browser()->profile()->GetPrefs(), name); ++ browser()->profile()->GetOriginalProfile()->GetPrefs(), name); + } + + void InstallFilteringConfiguration( @@ -3211,7 +4849,7 @@ diff --git a/chrome/browser/adblock/test/adblock_frame_hierarchy_builder_browser new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/test/adblock_frame_hierarchy_builder_browsertest.cc -@@ -0,0 +1,463 @@ +@@ -0,0 +1,464 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3232,8 +4870,8 @@ new file mode 100644 +#include + +#include "base/ranges/algorithm.h" -+#include "chrome/browser/adblock/adblock_controller_factory.h" +#include "chrome/browser/adblock/resource_classification_runner_factory.h" ++#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ssl/https_upgrades_util.h" +#include "chrome/browser/ui/browser.h" @@ -3242,8 +4880,8 @@ new file mode 100644 +#include "components/adblock/content/browser/adblock_filter_match.h" +#include "components/adblock/content/browser/frame_hierarchy_builder.h" +#include "components/adblock/content/browser/resource_classification_runner.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/common/adblock_constants.h" ++#include "components/adblock/core/subscription/subscription_service.h" +#include "components/blocked_content/popup_blocker_tab_helper.h" +#include "components/embedder_support/switches.h" +#include "content/public/test/browser_test.h" @@ -3404,11 +5042,12 @@ new file mode 100644 + } + + void SetFilters(std::vector filters) { -+ auto* controller = -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()); -+ controller->RemoveCustomFilter(kAllowlistEverythingFilter); ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ adblock_configuration->RemoveCustomFilter(kAllowlistEverythingFilter); + for (auto& filter : filters) { -+ controller->AddCustomFilter(filter); ++ adblock_configuration->AddCustomFilter(filter); + } + } + @@ -3679,7 +5318,7 @@ diff --git a/chrome/browser/adblock/test/adblock_multiple_tabs_browsertest.cc b/ new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/test/adblock_multiple_tabs_browsertest.cc -@@ -0,0 +1,159 @@ +@@ -0,0 +1,160 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3697,8 +5336,8 @@ new file mode 100644 + * along with eyeo Chromium SDK. If not, see . + */ + -+#include "chrome/browser/adblock/adblock_controller_factory.h" +#include "chrome/browser/adblock/resource_classification_runner_factory.h" ++#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_list.h" @@ -3706,8 +5345,8 @@ new file mode 100644 +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "components/adblock/content/browser/resource_classification_runner.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/common/adblock_constants.h" ++#include "components/adblock/core/subscription/subscription_service.h" +#include "components/sessions/content/session_tab_helper.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" @@ -3737,11 +5376,12 @@ new file mode 100644 + } + + void SetFilters(std::vector filters) { -+ auto* controller = -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()); -+ controller->RemoveCustomFilter(kAllowlistEverythingFilter); ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ adblock_configuration->RemoveCustomFilter(kAllowlistEverythingFilter); + for (auto& filter : filters) { -+ controller->AddCustomFilter(filter); ++ adblock_configuration->AddCustomFilter(filter); + } + } + @@ -3843,7 +5483,7 @@ diff --git a/chrome/browser/adblock/test/adblock_non_ascii_browsertest.cc b/chro new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/test/adblock_non_ascii_browsertest.cc -@@ -0,0 +1,77 @@ +@@ -0,0 +1,78 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3861,13 +5501,13 @@ new file mode 100644 + * along with eyeo Chromium SDK. If not, see . + */ + -+#include "chrome/browser/adblock/adblock_controller_factory.h" ++#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/common/adblock_constants.h" ++#include "components/adblock/core/subscription/subscription_service.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" +#include "net/dns/mock_host_resolver.h" @@ -3887,11 +5527,12 @@ new file mode 100644 + } + + void SetFilters(std::vector filters) { -+ auto* controller = -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()); -+ controller->RemoveCustomFilter(kAllowlistEverythingFilter); ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ adblock_configuration->RemoveCustomFilter(kAllowlistEverythingFilter); + for (auto& filter : filters) { -+ controller->AddCustomFilter(filter); ++ adblock_configuration->AddCustomFilter(filter); + } + } + @@ -3925,7 +5566,7 @@ diff --git a/chrome/browser/adblock/test/adblock_popup_browsertest.cc b/chrome/b new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/test/adblock_popup_browsertest.cc -@@ -0,0 +1,462 @@ +@@ -0,0 +1,463 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -3945,8 +5586,8 @@ new file mode 100644 + +#include "base/run_loop.h" +#include "chrome/app/chrome_command_ids.h" -+#include "chrome/browser/adblock/adblock_controller_factory.h" +#include "chrome/browser/adblock/resource_classification_runner_factory.h" ++#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/renderer_context_menu/render_view_context_menu_browsertest_util.h" +#include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h" @@ -3955,8 +5596,8 @@ new file mode 100644 +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "components/adblock/content/browser/resource_classification_runner.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/common/adblock_constants.h" ++#include "components/adblock/core/subscription/subscription_service.h" +#include "content/public/browser/render_view_host.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" @@ -4129,11 +5770,12 @@ new file mode 100644 + } + + void SetFilters(std::vector filters) { -+ auto* controller = -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()); -+ controller->RemoveCustomFilter(kAllowlistEverythingFilter); ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ adblock_configuration->RemoveCustomFilter(kAllowlistEverythingFilter); + for (auto& filter : filters) { -+ controller->AddCustomFilter(filter); ++ adblock_configuration->AddCustomFilter(filter); + } + } + @@ -4388,11 +6030,96 @@ new file mode 100644 + Redirection::ServerSide)); + +} // namespace adblock +diff --git a/chrome/browser/adblock/test/adblock_snippets_browsertest.cc b/chrome/browser/adblock/test/adblock_snippets_browsertest.cc +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/adblock/test/adblock_snippets_browsertest.cc +@@ -0,0 +1,80 @@ ++/* ++ * This file is part of eyeo Chromium SDK, ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * eyeo Chromium SDK is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * eyeo Chromium SDK is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with eyeo Chromium SDK. If not, see . ++ */ ++ ++#include ++ ++#include "chrome/browser/adblock/subscription_service_factory.h" ++#include "chrome/browser/profiles/profile.h" ++#include "chrome/browser/ui/browser.h" ++#include "chrome/test/base/in_process_browser_test.h" ++#include "chrome/test/base/ui_test_utils.h" ++#include "components/adblock/core/common/adblock_constants.h" ++#include "components/adblock/core/subscription/subscription_service.h" ++#include "content/public/test/browser_test.h" ++#include "content/public/test/browser_test_utils.h" ++#include "net/dns/mock_host_resolver.h" ++#include "net/test/embedded_test_server/embedded_test_server.h" ++#include "testing/gtest/include/gtest/gtest.h" ++ ++namespace adblock { ++ ++class AdblockSnippetsBrowserTest : public InProcessBrowserTest { ++ public: ++ void SetUpOnMainThread() override { ++ InProcessBrowserTest::SetUpOnMainThread(); ++ host_resolver()->AddRule("*", "127.0.0.1"); ++ embedded_test_server()->ServeFilesFromSourceDirectory( ++ "chrome/test/data/adblock"); ++ ASSERT_TRUE(embedded_test_server()->Start()); ++ } ++ ++ void SetFilters(std::vector filters) { ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ adblock_configuration->RemoveCustomFilter(kAllowlistEverythingFilter); ++ for (auto& filter : filters) { ++ adblock_configuration->AddCustomFilter(filter); ++ } ++ } ++ ++ GURL GetUrl(const std::string& path) { ++ return embedded_test_server()->GetURL("example.org", path); ++ } ++ ++ void VerifyTargetVisibility(bool is_hidden, const std::string& id) { ++ std::string is_invisible_js = ++ "getComputedStyle(document.getElementById('{{node id}}')).display == " ++ "'none'"; ++ base::ReplaceSubstringsAfterOffset(&is_invisible_js, 0, "{{node id}}", id); ++ EXPECT_EQ( ++ is_hidden, ++ content::EvalJs(browser()->tab_strip_model()->GetActiveWebContents(), ++ is_invisible_js)); ++ } ++}; ++ ++IN_PROC_BROWSER_TEST_F(AdblockSnippetsBrowserTest, VerifyXpath3) { ++ ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GetUrl("/xpath3.html"))); ++ VerifyTargetVisibility(false, "xpath3-target"); ++ SetFilters( ++ {"example.org#$#hide-if-matches-xpath3 //*[@id=\"xpath3-target\"]"}); ++ ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GetUrl("/xpath3.html"))); ++ VerifyTargetVisibility(true, "xpath3-target"); ++} ++ ++} // namespace adblock diff --git a/chrome/browser/adblock/test/adblock_subscription_service_browsertest.cc b/chrome/browser/adblock/test/adblock_subscription_service_browsertest.cc new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/test/adblock_subscription_service_browsertest.cc -@@ -0,0 +1,204 @@ +@@ -0,0 +1,201 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -4418,14 +6145,12 @@ new file mode 100644 +#include "base/test/bind.h" +#include "base/threading/thread_restrictions.h" +#include "base/time/time.h" -+#include "chrome/browser/adblock/adblock_controller_factory.h" +#include "chrome/browser/adblock/subscription_persistent_metadata_factory.h" +#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/subscription/subscription_config.h" +#include "components/adblock/core/subscription/subscription_service.h" +#include "components/version_info/version_info.h" @@ -4556,9 +6281,8 @@ new file mode 100644 + // Using a custom subscription URL here because before test sets + // up the server then SubscriptionService already started fetching default + // subscriptions. -+ auto* controller = -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()); -+ controller->InstallSubscription(https_server_->GetURL(kSubscription)); ++ subscription_service->GetAdblockFilteringConfiguration()->AddFilterList( ++ https_server_->GetURL(kSubscription)); + // Wait until subscription is downloaded and stored. + RunUntilBrowserProcessQuits(); +} @@ -4862,7 +6586,7 @@ diff --git a/chrome/browser/adblock/test/adblock_web_bundle_browsertest.cc b/chr new file mode 100644 --- /dev/null +++ b/chrome/browser/adblock/test/adblock_web_bundle_browsertest.cc -@@ -0,0 +1,426 @@ +@@ -0,0 +1,427 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -4888,15 +6612,15 @@ new file mode 100644 +#include "base/functional/bind.h" +#include "base/path_service.h" +#include "base/strings/string_util.h" -+#include "chrome/browser/adblock/adblock_controller_factory.h" +#include "chrome/browser/adblock/resource_classification_runner_factory.h" ++#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "components/adblock/content/browser/resource_classification_runner.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/common/adblock_constants.h" ++#include "components/adblock/core/subscription/subscription_service.h" +#include "components/web_package/web_bundle_builder.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" @@ -5093,11 +6817,12 @@ new file mode 100644 + } + + void SetFilters(std::vector filters) { -+ auto* controller = -+ AdblockControllerFactory::GetForBrowserContext(browser()->profile()); -+ controller->RemoveCustomFilter(kAllowlistEverythingFilter); ++ auto* adblock_configuration = ++ SubscriptionServiceFactory::GetForBrowserContext(browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ adblock_configuration->RemoveCustomFilter(kAllowlistEverythingFilter); + for (auto& filter : filters) { -+ controller->AddCustomFilter(filter); ++ adblock_configuration->AddCustomFilter(filter); + } + } + @@ -5303,15 +7028,15 @@ diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser #include "chrome/browser/chrome_browser_interface_binders.h" -@@ -40,6 +44,7 @@ +@@ -39,6 +43,7 @@ + #include "chrome/browser/ui/side_panel/companion/companion_utils.h" #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/web_applications/draggable_region_host_impl.h" - #include "chrome/browser/ui/web_applications/sub_apps_service_impl.h" +#include "chrome/browser/ui/webui/adblock_internals/adblock_internals_ui.h" #include "chrome/browser/ui/webui/browsing_topics/browsing_topics_internals_ui.h" #include "chrome/browser/ui/webui/engagement/site_engagement_ui.h" #include "chrome/browser/ui/webui/internals/internals_ui.h" -@@ -1032,6 +1037,10 @@ void PopulateChromeWebUIFrameBinders( +@@ -1043,6 +1048,10 @@ void PopulateChromeWebUIFrameBinders( media::mojom::MediaEngagementScoreDetailsProvider, MediaEngagementUI>( map); @@ -5336,21 +7061,15 @@ diff --git a/chrome/browser/client_hints/client_hints_browsertest.cc b/chrome/br #include #include -@@ -651,9 +655,17 @@ class ClientHintsBrowserTest : public policy::PolicyTest { - // Force-enable the ClientHintsFormFactor feature, so that the header is - // represented in the various header counts. +@@ -653,7 +657,10 @@ class ClientHintsBrowserTest : public policy::PolicyTest { feature_list->InitializeFromCommandLine( -+<<<<<<< HEAD "UserAgentClientHint,CriticalClientHint,AcceptCHFrame," "ClientHintsFormFactor,ClientHintsPrefersReducedTransparency", - ""); -+======= -+ "UserAgentClientHint,CriticalClientHint,AcceptCHFrame", -+ // Disabling AdblockPlus because the async implementation of +- ""); ++ // Disabling AdblockPlus because the async implementation of + // AdblockURLLoaderThrottle::WillStartRequest confuses + // ThirdPartyURLLoaderInterceptor. + "AdblockPlus"); -+>>>>>>> 9402d5c48c0e8... Squashed commits return feature_list; } @@ -5430,17 +7149,12 @@ diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BU + import("//build/config/android/rules.gni") - -@@ -34,7 +38,12 @@ android_library("java") { - # TODO(chouinard,estade): Consider breaking this target up into a different target for each pref file. + import("//third_party/jni_zero/jni_zero.gni") +@@ -38,6 +42,7 @@ android_library("java") { java_cpp_strings("java_pref_names_srcjar") { sources = [ -+<<<<<<< HEAD "//chrome/common/pref_names.h", -+======= -+ "//chrome/common/pref_names.cc", + "//components/adblock/core/common/adblock_prefs.cc", -+>>>>>>> 9402d5c48c0e8... Squashed commits "//components/autofill/core/common/autofill_prefs.cc", "//components/commerce/core/pref_names.cc", "//components/dom_distiller/core/pref_names.cc", @@ -5459,14 +7173,14 @@ diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browse #include "chrome/browser/prefs/chrome_pref_service_factory.h" @@ -39,6 +43,7 @@ + #include "chrome/grit/branded_strings.h" #include "chrome/grit/browser_resources.h" - #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" +#include "components/adblock/core/common/adblock_prefs.h" #include "components/component_updater/pref_names.h" #include "components/policy/core/browser/configuration_policy_pref_store.h" #include "components/pref_registry/pref_registry_syncable.h" -@@ -196,6 +201,12 @@ const prefs::TrackedPreferenceMetadata kTrackedPrefs[] = { +@@ -177,6 +182,12 @@ const prefs::TrackedPreferenceMetadata kTrackedPrefs[] = { {32, prefs::kMediaCdmOriginData, EnforcementLevel::ENFORCE_ON_LOAD, PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, #endif // BUILDFLAG(IS_WIN) @@ -5509,7 +7223,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" #include "chrome/browser/autocomplete/document_suggestions_service_factory.h" #include "chrome/browser/autocomplete/in_memory_url_index_factory.h" -@@ -241,6 +254,8 @@ +@@ -249,6 +262,8 @@ #include "chrome/browser/signin/signin_manager_android_factory.h" #include "components/commerce/core/commerce_feature_list.h" #include "components/commerce/core/proto/merchant_signal_db_content.pb.h" @@ -5518,7 +7232,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc #else #include "chrome/browser/accessibility/live_caption/live_caption_controller_factory.h" #include "chrome/browser/accessibility/live_translate_controller_factory.h" -@@ -714,8 +729,19 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -735,8 +750,19 @@ void ChromeBrowserMainExtraPartsProfiles:: #if BUILDFLAG(ENABLE_SESSION_SERVICE) ExitTypeServiceFactory::GetInstance(); #endif @@ -5552,7 +7266,7 @@ diff --git a/chrome/browser/profiles/profile_keyed_service_browsertest.cc b/chro #include #include "base/ranges/algorithm.h" -@@ -192,12 +196,22 @@ IN_PROC_BROWSER_TEST_F(ProfileKeyedServiceBrowserTest, +@@ -189,12 +193,22 @@ IN_PROC_BROWSER_TEST_F(ProfileKeyedServiceBrowserTest, IN_PROC_BROWSER_TEST_F(ProfileKeyedServiceBrowserTest, SystemProfileParent_NeededServices) { @@ -5586,7 +7300,7 @@ diff --git a/chrome/browser/profiles/profile_keyed_service_browsertest.cc b/chro }; // clang-format on -@@ -542,6 +556,17 @@ IN_PROC_BROWSER_TEST_F(ProfileKeyedServiceBrowserTest, +@@ -524,6 +538,17 @@ IN_PROC_BROWSER_TEST_F(ProfileKeyedServiceBrowserTest, "feedback::FeedbackUploaderChrome", "sct_reporting::Factory", "ZeroSuggestCacheServiceFactory", @@ -5604,6 +7318,24 @@ diff --git a/chrome/browser/profiles/profile_keyed_service_browsertest.cc b/chro }; // clang-format on +@@ -570,6 +595,17 @@ IN_PROC_BROWSER_TEST_F(ProfileKeyedServiceBrowserTest, + "PermissionsUpdaterShutdownFactory", + "PluginInfoHostImpl", + "TurnSyncOnHelperShutdownNotifier", ++ ++ // Eyeo services: ++ "AdblockController", ++ "AdblockSubscriptionPersistentMetadata", ++ "AdblockSubscriptionService", ++ "AdblockTelemetryService", ++ "ContentSecurityPolicyInjector", ++ "ElementHider", ++ "ResourceClassificationRunner", ++ "SessionStats", ++ "SitekeyStorage", + }; + // clang-format on + diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn @@ -5617,7 +7349,7 @@ diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD. import("//build/config/chromebox_for_meetings/buildflags.gni") import("//build/config/chromeos/ui_mode.gni") -@@ -217,6 +220,7 @@ if (!is_android) { +@@ -220,6 +223,7 @@ if (!is_android) { group("dev_ui_resources") { public_deps = [ "accessibility:resources", @@ -5625,7 +7357,7 @@ diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD. "bluetooth_internals:resources", "browsing_topics:resources", "components:resources", -@@ -268,6 +272,7 @@ repack("dev_ui_paks") { +@@ -274,6 +278,7 @@ repack("dev_ui_paks") { sources = [ "$root_gen_dir/chrome/accessibility_resources.pak", @@ -5778,9 +7510,9 @@ diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/ #include "chrome/test/base/ui_test_utils.h" +#include "components/adblock/core/features.h" #include "components/google/core/common/google_util.h" + #include "components/grit/components_resources.h" #include "components/omnibox/browser/omnibox_prefs.h" - #include "components/page_info/core/features.h" -@@ -607,7 +612,8 @@ class SafeBrowsingBlockingPageBrowserTest +@@ -608,7 +613,8 @@ class SafeBrowsingBlockingPageBrowserTest {kTagAndAttributeParamName, "div,foo,div,baz"}}; base::test::FeatureRefAndParams tag_and_attribute( safe_browsing::kThreatDomDetailsTagAndAttributeFeature, parameters); @@ -5836,7 +7568,7 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn import("//build/config/buildflags_paint_preview.gni") import("//build/config/chromebox_for_meetings/buildflags.gni") -@@ -235,6 +239,10 @@ static_library("ui") { +@@ -231,6 +235,10 @@ static_library("ui") { "webid/identity_dialog_controller.h", "webui/about_ui.cc", "webui/about_ui.h", @@ -5847,30 +7579,29 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn "webui/autofill_and_password_manager_internals/autofill_internals_ui.cc", "webui/autofill_and_password_manager_internals/autofill_internals_ui.h", "webui/autofill_and_password_manager_internals/internals_ui_handler.cc", -@@ -441,7 +449,11 @@ static_library("ui") { +@@ -432,12 +440,13 @@ static_library("ui") { + "//chrome/browser/share", "//chrome/browser/storage_access_api", "//chrome/browser/ui/side_panel:side_panel_enums", - "//chrome/browser/ui/webui:configs", -+<<<<<<< HEAD - "//chrome/browser/ui/webui/location_internals:mojo_bindings", -+======= +- "//chrome/browser/ui/webui:configs", + "//chrome/browser/ui/webui/adblock_internals:mojo_bindings", -+>>>>>>> 9402d5c48c0e8... Squashed commits + "//chrome/browser/ui/webui/location_internals:mojo_bindings", "//chrome/browser/ui/webui/omnibox:mojo_bindings", "//chrome/browser/ui/webui/segmentation_internals:mojo_bindings", "//chrome/browser/ui/webui/suggest_internals:mojo_bindings", -@@ -457,7 +469,11 @@ static_library("ui") { + "//chrome/browser/ui/webui/usb_internals:mojo_bindings", ++ "//chrome/browser/ui/webui:configs", + "//chrome/common", + "//chrome/common/net", + "//chrome/common/search:mojo_bindings", +@@ -449,6 +458,7 @@ static_library("ui") { "//components/about_ui", "//components/access_code_cast/common:metrics", "//components/account_id", -+<<<<<<< HEAD - "//components/autofill/content/browser", -+======= + "//components/adblock/content:browser", -+>>>>>>> 9402d5c48c0e8... Squashed commits + "//components/autofill/content/browser", "//components/autofill/content/browser:risk_proto", "//components/autofill/core/browser", - "//components/blocked_content", diff --git a/chrome/browser/ui/prefs/pref_watcher.cc b/chrome/browser/ui/prefs/pref_watcher.cc --- a/chrome/browser/ui/prefs/pref_watcher.cc +++ b/chrome/browser/ui/prefs/pref_watcher.cc @@ -5885,15 +7616,15 @@ diff --git a/chrome/browser/ui/prefs/pref_watcher.cc b/chrome/browser/ui/prefs/p #include "chrome/browser/ui/prefs/pref_watcher.h" #include "base/functional/bind.h" -@@ -12,6 +16,7 @@ +@@ -13,6 +17,7 @@ #include "chrome/browser/renderer_preferences_util.h" #include "chrome/browser/ui/prefs/prefs_tab_helper.h" #include "chrome/common/pref_names.h" +#include "components/adblock/core/common/adblock_prefs.h" #include "components/language/core/browser/pref_names.h" #include "components/live_caption/pref_names.h" - #include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h" -@@ -66,6 +71,14 @@ const char* const kWebPrefsToObserve[] = { + #include "components/privacy_sandbox/tracking_protection_settings.h" +@@ -68,6 +73,14 @@ const char* const kWebPrefsToObserve[] = { #else prefs::kAccessibilityFocusHighlightEnabled, #endif @@ -5922,22 +7653,17 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc #include "chrome/browser/ui/tab_helpers.h" -@@ -13,7 +17,14 @@ +@@ -13,6 +17,9 @@ #include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" -+<<<<<<< HEAD - #include "chrome/browser/3pcd/heuristics/opener_heuristic_tab_helper.h" -+======= -+#include "chrome/browser/3pcd_heuristics/opener_heuristic_tab_helper.h" +#include "chrome/browser/adblock/element_hider_factory.h" +#include "chrome/browser/adblock/sitekey_storage_factory.h" +#include "chrome/browser/adblock/subscription_service_factory.h" -+>>>>>>> 9402d5c48c0e8... Squashed commits #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/breadcrumbs/breadcrumb_manager_tab_helper.h" #include "chrome/browser/browser_process.h" -@@ -109,6 +120,7 @@ +@@ -111,6 +118,7 @@ #include "chrome/common/chrome_features.h" #include "chrome/common/chrome_isolated_world_ids.h" #include "chrome/common/chrome_switches.h" @@ -5945,7 +7671,7 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc #include "components/autofill/content/browser/content_autofill_client.h" #include "components/autofill/content/browser/content_autofill_driver_factory.h" #include "components/autofill/core/browser/browser_autofill_manager.h" -@@ -334,6 +346,16 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { +@@ -341,6 +349,16 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { optimization_guide_decider); } } @@ -6019,7 +7745,7 @@ diff --git a/chrome/browser/ui/webui/adblock_internals/adblock_internals_page_ha new file mode 100644 --- /dev/null +++ b/chrome/browser/ui/webui/adblock_internals/adblock_internals_page_handler_impl.cc -@@ -0,0 +1,97 @@ +@@ -0,0 +1,115 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -6040,8 +7766,10 @@ new file mode 100644 +#include "chrome/browser/ui/webui/adblock_internals/adblock_internals_page_handler_impl.h" + +#include "base/time/time_to_iso8601.h" ++#include "chrome/browser/adblock/adblock_telemetry_service_factory.h" +#include "chrome/browser/adblock/session_stats_factory.h" +#include "chrome/browser/adblock/subscription_service_factory.h" ++#include "components/adblock/core/adblock_telemetry_service.h" +#include "components/adblock/core/session_stats.h" +#include "components/adblock/core/subscription/subscription_config.h" +#include "components/adblock/core/subscription/subscription_service.h" @@ -6086,42 +7814,58 @@ new file mode 100644 +void AdblockInternalsPageHandlerImpl::GetDebugInfo( + GetDebugInfoCallback callback) { + CHECK(profile_); -+ std::string result; + auto* service = + adblock::SubscriptionServiceFactory::GetForBrowserContext(profile_); + auto* stats = adblock::SessionStatsFactory::GetForBrowserContext(profile_); + auto allowed = stats->GetSessionAllowedAdsCount(); + auto blocked = stats->GetSessionBlockedAdsCount(); ++ std::string content; + for (auto* config : service->GetInstalledFilteringConfigurations()) { -+ result += DebugLine("Configuration", config->GetName(), 0); -+ result += DebugLine("Enabled", config->IsEnabled(), 1); ++ content += DebugLine("Configuration", config->GetName(), 0); ++ content += DebugLine("Enabled", config->IsEnabled(), 1); + for (const auto& it : config->GetAllowedDomains()) { -+ result += DebugLine("Allowed domain", it, 1); ++ content += DebugLine("Allowed domain", it, 1); + } + for (const auto& it : config->GetCustomFilters()) { -+ result += DebugLine("Custom filter", it, 1); ++ content += DebugLine("Custom filter", it, 1); + } + for (auto it : service->GetCurrentSubscriptions(config)) { + auto url = it->GetSourceUrl(); -+ result += DebugLine("Subscription", url.spec(), 1); -+ result += DebugLine( ++ content += DebugLine("Subscription", url.spec(), 1); ++ content += DebugLine( + "State", + SubscriptionInstallationStateToString(it->GetInstallationState()), 2); -+ result += DebugLine("Title", it->GetTitle(), 2); -+ result += DebugLine("Version", it->GetCurrentVersion(), 2); -+ result += DebugLine("Last update", -+ base::TimeToISO8601(it->GetInstallationTime()), 2); -+ result += DebugLine("Total allowed", allowed[url], 2); -+ result += DebugLine("Total blocked", blocked[url], 2); ++ content += DebugLine("Title", it->GetTitle(), 2); ++ content += DebugLine("Version", it->GetCurrentVersion(), 2); ++ content += DebugLine("Last update", ++ base::TimeToISO8601(it->GetInstallationTime()), 2); ++ content += DebugLine("Total allowed", allowed[url], 2); ++ content += DebugLine("Total blocked", blocked[url], 2); + } + } -+ std::move(callback).Run(std::move(result)); ++ ++ auto* telemetry_service = ++ adblock::AdblockTelemetryServiceFactory::GetForProfile(profile_); ++ telemetry_service->GetTopicProvidersDebugInfo(base::BindOnce( ++ &AdblockInternalsPageHandlerImpl::OnTelemetryServiceInfoArrived, ++ std::move(callback), std::move(content))); ++} ++ ++void AdblockInternalsPageHandlerImpl::OnTelemetryServiceInfoArrived( ++ GetDebugInfoCallback callback, ++ std::string content, ++ std::vector topic_provider_content) { ++ for (auto& topic_provider_debug_info : topic_provider_content) { ++ content += ++ DebugLine("Eyeometry topic provider", topic_provider_debug_info, 0); ++ } ++ std::move(callback).Run(std::move(content)); +} diff --git a/chrome/browser/ui/webui/adblock_internals/adblock_internals_page_handler_impl.h b/chrome/browser/ui/webui/adblock_internals/adblock_internals_page_handler_impl.h new file mode 100644 --- /dev/null +++ b/chrome/browser/ui/webui/adblock_internals/adblock_internals_page_handler_impl.h -@@ -0,0 +1,47 @@ +@@ -0,0 +1,51 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -6164,6 +7908,10 @@ new file mode 100644 + void GetDebugInfo(GetDebugInfoCallback callback) override; + + private: ++ static void OnTelemetryServiceInfoArrived( ++ GetDebugInfoCallback callback, ++ std::string content, ++ std::vector topic_provider_content); + raw_ptr profile_; + mojo::Receiver + receiver_; @@ -6296,8 +8044,8 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom #include "chrome/browser/ui/webui/autofill_and_password_manager_internals/autofill_internals_ui.h" #include "chrome/browser/ui/webui/autofill_and_password_manager_internals/password_manager_internals_ui.h" #include "chrome/browser/ui/webui/browsing_topics/browsing_topics_internals_ui.h" -@@ -435,8 +440,12 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, - // print dialog. +@@ -434,8 +439,12 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, + // after the host name. if (url.host_piece() == chrome::kChromeUIAccessibilityHost) return &NewWebUI; - if (url.host_piece() == chrome::kChromeUIAutofillInternalsHost) @@ -6388,7 +8136,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn import("//components/captive_portal/core/features.gni") import("//components/enterprise/buildflags/buildflags.gni") import("//components/feed/features.gni") -@@ -1159,6 +1163,7 @@ if (is_android) { +@@ -1206,6 +1210,7 @@ if (is_android) { deps += [ ":persisted_tab_data_test_proto", @@ -6396,7 +8144,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn "//components/autofill/content/browser:test_support", "//components/back_forward_cache:back_forward_cache", "//components/browsing_data/core:core", -@@ -1537,6 +1542,7 @@ if (!is_android) { +@@ -1587,6 +1592,7 @@ if (!is_android) { "//chrome/test/data/webui/mojo:mojo_bindings", "//chrome/test/media_router/access_code_cast:access_code_cast_integration_base", "//chrome/test/payments:test_support", @@ -6404,15 +8152,15 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn "//components/autofill/content/browser:risk_proto", "//components/autofill/content/browser:test_support", "//components/autofill/content/common/mojom", -@@ -1864,6 +1870,7 @@ if (!is_android) { - "data/", +@@ -1924,6 +1930,7 @@ if (!is_android) { "//ash/components/arc/test/data/icons", "//chrome/browser/page_load_metrics/integration_tests/data/", + "//chrome/renderer/resources/extensions/", + "//chrome/test/data/adblock/", "//chrome/test/data/cart/", "//components/test/data/ad_tagging/", "//components/test/data/ads_observer/", -@@ -1956,6 +1963,16 @@ if (!is_android) { +@@ -2007,6 +2014,17 @@ if (!is_android) { "../browser/accessibility/image_annotation_browsertest.cc", "../browser/accessibility/interstitial_accessibility_browsertest.cc", "../browser/accessibility/page_colors_browsertest.cc", @@ -6423,13 +8171,14 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn + "../browser/adblock/test/adblock_multiple_tabs_browsertest.cc", + "../browser/adblock/test/adblock_non_ascii_browsertest.cc", + "../browser/adblock/test/adblock_popup_browsertest.cc", ++ "../browser/adblock/test/adblock_snippets_browsertest.cc", + "../browser/adblock/test/adblock_subscription_service_browsertest.cc", + "../browser/adblock/test/adblock_telemetry_service_browsertest.cc", + "../browser/adblock/test/adblock_web_bundle_browsertest.cc", "../browser/apps/guest_view/app_view_browsertest.cc", "../browser/apps/guest_view/web_view_browsertest.cc", "../browser/apps/platform_apps/app_browsertest.cc", -@@ -2682,6 +2699,10 @@ if (!is_android) { +@@ -2733,6 +2751,10 @@ if (!is_android) { sources += [ "../browser/chrome_for_testing/chrome_for_testing_info_bar_browsertest.cc" ] } @@ -6440,7 +8189,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn if (enable_reporting) { sources += [ "../browser/net/reporting_browsertest.cc" ] } -@@ -3514,6 +3535,7 @@ if (!is_android) { +@@ -3567,6 +3589,7 @@ if (!is_android) { ] } @@ -6448,15 +8197,15 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn if (is_chromeos_ash && enable_extensions) { deps += [ "//chromeos/ash/components/network/portal_detector:test_support" ] -@@ -5804,6 +5826,7 @@ test("unit_tests") { - # All unittests in browser, common, renderer and service. +@@ -5857,6 +5880,7 @@ test("unit_tests") { "../browser/about_flags_unittest.cc", + "../browser/accessibility/media_app/ax_media_app_handler_unittest.cc", "../browser/active_use_util_unittest.cc", + "../browser/adblock/adblock_content_browser_client_unittest.cc", "../browser/after_startup_task_utils_unittest.cc", "../browser/apps/icon_standardizer_unittest.cc", "../browser/apps/user_type_filter_unittest.cc", -@@ -6466,6 +6489,8 @@ test("unit_tests") { +@@ -6525,6 +6549,8 @@ test("unit_tests") { "//chrome/services/file_util:unit_tests", "//chrome/services/qrcode_generator/public/cpp", "//components/account_id", @@ -6465,7 +8214,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn "//components/assist_ranker/proto", "//components/autofill/content/browser:test_support", "//components/background_sync", -@@ -9917,6 +9942,7 @@ if (!is_android) { +@@ -9998,6 +10024,7 @@ if (!is_android) { public_deps = [ "//chrome/browser:test_support_ui", @@ -6522,14 +8271,14 @@ diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_p #include "content/public/test/network_connection_change_simulator.h" #endif -+#include "chrome/browser/adblock/adblock_controller_factory.h" -+#include "components/adblock/core/adblock_controller.h" ++#include "chrome/browser/adblock/subscription_service_factory.h" +#include "components/adblock/core/common/adblock_constants.h" ++#include "components/adblock/core/subscription/subscription_service.h" + namespace { #if BUILDFLAG(IS_CHROMEOS_ASH) -@@ -652,8 +660,15 @@ void InProcessBrowserTest::CreatedBrowserMainParts( +@@ -653,8 +661,19 @@ void InProcessBrowserTest::CreatedBrowserMainParts( void InProcessBrowserTest::SelectFirstBrowser() { const BrowserList* browser_list = BrowserList::GetInstance(); @@ -6540,8 +8289,12 @@ diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_p + // filters in order to avoid unwanted interactions with simulated network + // loads. This custom filter is removed for tests that specifically verify + // ad-filtering. -+ adblock::AdblockControllerFactory::GetForBrowserContext(browser_->profile()) -+ ->AddCustomFilter(adblock::kAllowlistEverythingFilter); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext(browser_->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ if (adblock_configuration) { ++ adblock_configuration->AddCustomFilter(adblock::kAllowlistEverythingFilter); ++ } + } } @@ -8161,5 +9914,33 @@ new file mode 100644 +testFetchXHR("xhr", "by_scope/xhr_result_3_subresource_loading.json", xhr_result_by_scope); +testFetchXHR("fetch", "by_scope/fetch_result_3_subresource_loading.json", fetch_result_by_scope); + +diff --git a/chrome/test/data/adblock/xpath3.html b/chrome/test/data/adblock/xpath3.html +new file mode 100644 +--- /dev/null ++++ b/chrome/test/data/adblock/xpath3.html +@@ -0,0 +1,23 @@ ++ ++ ++ ++ ++ ++
    Target
    ++ ++ -- 2.25.1 diff --git a/build/patches/eyeo-117.0.5938.0-extension_api.patch b/build/patches/eyeo-beta-118.0.5993.48-extension_api.patch similarity index 96% rename from build/patches/eyeo-117.0.5938.0-extension_api.patch rename to build/patches/eyeo-beta-118.0.5993.48-extension_api.patch index c90e6f64..5129d2b1 100644 --- a/build/patches/eyeo-117.0.5938.0-extension_api.patch +++ b/build/patches/eyeo-beta-118.0.5993.48-extension_api.patch @@ -1,20 +1,20 @@ From: chromium-sdk -Date: Mon, 21 Aug 2023 18:20:45 +0200 +Date: Thu, 12 Oct 2023 14:46:09 +0200 Subject: eyeo Browser Ad filtering Solution: Extension API Module -Based on Chromium 117.0.5938.0 +Based on Chromium 118.0.5993.48 Pre-requisites: eyeo Browser Ad filtering Solution: Base Module --- - chrome/browser/extensions/BUILD.gn | 13 + + chrome/browser/extensions/BUILD.gn | 9 + chrome/browser/extensions/api/BUILD.gn | 5 + - .../adblock_private/adblock_private_api.cc | 621 +++++++++++ + .../adblock_private/adblock_private_api.cc | 674 ++++++++++++ .../api/adblock_private/adblock_private_api.h | 328 ++++++ .../adblock_private_apitest.cc | 984 ++++++++++++++++++ ...browser_context_keyed_service_factories.cc | 8 + - .../eyeo_filtering_private_api.cc | 770 ++++++++++++++ + .../eyeo_filtering_private_api.cc | 772 ++++++++++++++ .../eyeo_filtering_private_api.h | 360 +++++++ - .../eyeo_filtering_private_apitest.cc | 155 +++ + .../eyeo_filtering_private_apitest.cc | 161 +++ .../api/settings_private/prefs_util.cc | 19 + ...browser_context_keyed_service_factories.cc | 4 + .../extension_function_registration_test.cc | 10 + @@ -38,10 +38,10 @@ Pre-requisites: eyeo Browser Ad filtering Solution: Base Module .../api_test/eyeo_filtering_private/test.js | 460 ++++++++ .../browser/extension_event_histogram_value.h | 7 +- .../common/mojom/api_permission_id.mojom | 6 + - tools/metrics/histograms/enums.xml | 5 +- + tools/metrics/histograms/enums.xml | 7 +- .../definitions/adblock_private.d.ts | 172 +++ .../definitions/eyeo_filtering_private.d.ts | 249 +++++ - 35 files changed, 5347 insertions(+), 2 deletions(-) + 35 files changed, 5406 insertions(+), 2 deletions(-) create mode 100644 chrome/browser/extensions/api/adblock_private/adblock_private_api.cc create mode 100644 chrome/browser/extensions/api/adblock_private/adblock_private_api.h create mode 100644 chrome/browser/extensions/api/adblock_private/adblock_private_apitest.cc @@ -95,15 +95,11 @@ diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUIL "api/favicon/favicon_util.cc", "api/favicon/favicon_util.h", "api/feedback_private/chrome_feedback_private_delegate.cc", -@@ -826,6 +834,11 @@ static_library("extensions") { +@@ -827,6 +835,7 @@ static_library("extensions") { "//chrome/browser/safe_browsing:metrics_collector", "//chrome/browser/ui/tabs:tab_enums", "//chrome/browser/web_applications", -+<<<<<<< HEAD -+======= -+ "//chromeos/components/kiosk", + "//components/adblock/content:browser", -+>>>>>>> 9402d5c48c0e8... Squashed commits "//components/cbor:cbor", "//components/commerce/core:pref_names", "//components/device_reauth", @@ -133,7 +129,7 @@ diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.c new file mode 100644 --- /dev/null +++ b/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc -@@ -0,0 +1,621 @@ +@@ -0,0 +1,674 @@ +// This file is part of eyeo Chromium SDK, +// Copyright (C) 2006-present eyeo GmbH +// @@ -156,17 +152,16 @@ new file mode 100644 +#include "base/no_destructor.h" +#include "base/time/time_to_iso8601.h" +#include "base/values.h" -+#include "chrome/browser/adblock/adblock_controller_factory.h" +#include "chrome/browser/adblock/resource_classification_runner_factory.h" +#include "chrome/browser/adblock/session_stats_factory.h" +#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/extensions/extension_tab_util.h" +#include "chrome/common/extensions/api/tabs.h" +#include "components/adblock/content/browser/resource_classification_runner.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/common/adblock_utils.h" +#include "components/adblock/core/common/content_type.h" +#include "components/adblock/core/session_stats.h" ++#include "components/adblock/core/subscription/subscription_config.h" +#include "components/sessions/core/session_id.h" +#include "content/public/browser/web_contents.h" +#include "url/gurl.h" @@ -183,14 +178,17 @@ new file mode 100644 + if (!url.is_valid()) { + return "Invalid URL"; + } -+ auto* controller = -+ adblock::AdblockControllerFactory::GetForBrowserContext(browser_context); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext(browser_context) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; + switch (action) { + case SubscriptionAction::kInstall: -+ controller->InstallSubscription(url); ++ adblock_configuration->AddFilterList(url); + break; + case SubscriptionAction::kUninstall: -+ controller->UninstallSubscription(url); ++ adblock_configuration->RemoveFilterList(url); + break; + default: + NOTREACHED(); @@ -490,9 +488,13 @@ new file mode 100644 + api::adblock_private::SetEnabled::Params::Create(args()); + EXTENSION_FUNCTION_VALIDATE(params); + -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); -+ controller->SetAdblockEnabled(params->enabled); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; ++ adblock_configuration->SetEnabled(params->enabled); + return RespondNow(NoArguments()); +} + @@ -501,11 +503,15 @@ new file mode 100644 +AdblockPrivateIsEnabledFunction::~AdblockPrivateIsEnabledFunction() {} + +ExtensionFunction::ResponseAction AdblockPrivateIsEnabledFunction::Run() { -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; + return RespondNow( + ArgumentList(api::adblock_private::IsEnabled::Results::Create( -+ controller->IsAdblockEnabled()))); ++ adblock_configuration->IsEnabled()))); +} + +AdblockPrivateSetAcceptableAdsEnabledFunction:: @@ -520,9 +526,17 @@ new file mode 100644 + api::adblock_private::SetAcceptableAdsEnabled::Params::Create(args()); + EXTENSION_FUNCTION_VALIDATE(params); + -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); -+ controller->SetAcceptableAdsEnabled(params->enabled); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; ++ if (params->enabled) { ++ adblock_configuration->AddFilterList(adblock::AcceptableAdsUrl()); ++ } else { ++ adblock_configuration->RemoveFilterList(adblock::AcceptableAdsUrl()); ++ } + + return RespondNow(NoArguments()); +} @@ -535,11 +549,18 @@ new file mode 100644 + +ExtensionFunction::ResponseAction +AdblockPrivateIsAcceptableAdsEnabledFunction::Run() { -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; + return RespondNow(ArgumentList( + api::adblock_private::IsAcceptableAdsEnabled::Results::Create( -+ controller->IsAcceptableAdsEnabled()))); ++ base::ranges::any_of(adblock_configuration->GetFilterLists(), ++ [&](const auto& url) { ++ return url == adblock::AcceptableAdsUrl(); ++ })))); +} + +AdblockPrivateGetBuiltInSubscriptionsFunction:: @@ -550,9 +571,7 @@ new file mode 100644 + +ExtensionFunction::ResponseAction +AdblockPrivateGetBuiltInSubscriptionsFunction::Run() { -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); -+ auto recommended = controller->GetKnownSubscriptions(); ++ auto recommended = adblock::config::GetKnownSubscriptions(); + std::vector result; + for (auto& recommended_one : recommended) { + if (recommended_one.ui_visibility == @@ -618,11 +637,17 @@ new file mode 100644 + +ExtensionFunction::ResponseAction +AdblockPrivateGetInstalledSubscriptionsFunction::Run() { -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); ++ auto* subscription_service = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()); ++ auto* adblock_configuration = ++ subscription_service->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; + return RespondNow(ArgumentList( + api::adblock_private::GetInstalledSubscriptions::Results::Create( -+ CopySubscriptions(controller->GetInstalledSubscriptions())))); ++ CopySubscriptions(subscription_service->GetCurrentSubscriptions( ++ subscription_service->GetAdblockFilteringConfiguration()))))); +} + +AdblockPrivateAddAllowedDomainFunction:: @@ -636,9 +661,13 @@ new file mode 100644 + absl::optional params = + api::adblock_private::AddAllowedDomain::Params::Create(args()); + EXTENSION_FUNCTION_VALIDATE(params); -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); -+ controller->AddAllowedDomain(params->domain); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; ++ adblock_configuration->AddAllowedDomain(params->domain); + return RespondNow(NoArguments()); +} + @@ -653,9 +682,13 @@ new file mode 100644 + absl::optional params = + api::adblock_private::RemoveAllowedDomain::Params::Create(args()); + EXTENSION_FUNCTION_VALIDATE(params); -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); -+ controller->RemoveAllowedDomain(params->domain); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; ++ adblock_configuration->RemoveAllowedDomain(params->domain); + + return RespondNow(NoArguments()); +} @@ -668,11 +701,15 @@ new file mode 100644 + +ExtensionFunction::ResponseAction +AdblockPrivateGetAllowedDomainsFunction::Run() { -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; + return RespondNow( + ArgumentList(api::adblock_private::GetAllowedDomains::Results::Create( -+ controller->GetAllowedDomains()))); ++ adblock_configuration->GetAllowedDomains()))); +} + +AdblockPrivateAddCustomFilterFunction::AdblockPrivateAddCustomFilterFunction() { @@ -685,9 +722,13 @@ new file mode 100644 + absl::optional params = + api::adblock_private::AddCustomFilter::Params::Create(args()); + EXTENSION_FUNCTION_VALIDATE(params); -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); -+ controller->AddCustomFilter(params->filter); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; ++ adblock_configuration->AddCustomFilter(params->filter); + return RespondNow(NoArguments()); +} + @@ -699,11 +740,15 @@ new file mode 100644 + +ExtensionFunction::ResponseAction +AdblockPrivateGetCustomFiltersFunction::Run() { -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; + return RespondNow( + ArgumentList(api::adblock_private::GetCustomFilters::Results::Create( -+ controller->GetCustomFilters()))); ++ adblock_configuration->GetCustomFilters()))); +} + +AdblockPrivateGetCustomFiltersFunction:: @@ -717,9 +762,13 @@ new file mode 100644 + absl::optional params = + api::adblock_private::RemoveCustomFilter::Params::Create(args()); + EXTENSION_FUNCTION_VALIDATE(params); -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); -+ controller->RemoveCustomFilter(params->filter); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()) ++ ->GetAdblockFilteringConfiguration(); ++ DCHECK(adblock_configuration) ++ << "adblock_private expects \"adblock\" configuration"; ++ adblock_configuration->RemoveCustomFilter(params->filter); + return RespondNow(NoArguments()); +} + @@ -1113,7 +1162,7 @@ new file mode 100644 +#include + +#include "chrome/browser/adblock/adblock_content_browser_client.h" -+#include "chrome/browser/adblock/adblock_controller_factory.h" ++#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/extensions/extension_apitest.h" +#include "chrome/browser/ssl/https_upgrades_interceptor.h" +#include "chrome/browser/ssl/https_upgrades_util.h" @@ -1121,9 +1170,9 @@ new file mode 100644 +#include "chrome/common/extensions/api/adblock_private.h" +#include "chrome/common/extensions/api/tabs.h" +#include "chrome/test/base/ui_test_utils.h" -+#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/common/adblock_constants.h" +#include "components/adblock/core/subscription/subscription_config.h" ++#include "components/adblock/core/subscription/subscription_service.h" +#include "content/public/test/browser_test.h" +#include "extensions/browser/background_script_executor.h" +#include "net/dns/mock_host_resolver.h" @@ -1163,8 +1212,9 @@ new file mode 100644 + ASSERT_EQ(api::tabs::TAB_ID_NONE, -1); + ASSERT_EQ(SessionID::InvalidValue().id(), -1); + -+ adblock::AdblockControllerFactory::GetForBrowserContext( ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( + browser()->profile()) ++ ->GetAdblockFilteringConfiguration() + ->RemoveCustomFilter(adblock::kAllowlistEverythingFilter); + + AdblockContentBrowserClient::ForceAdblockProxyForTesting(); @@ -1238,25 +1288,22 @@ new file mode 100644 + + std::map SubscriptionsManagementSetup() { + DCHECK(browser()->profile()); -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser()->profile()); -+ auto selected = controller->GetInstalledSubscriptions(); ++ auto selected = adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser()->profile()) ++ ->GetAdblockFilteringConfiguration() ++ ->GetFilterLists(); + const auto easylist = std::find_if( -+ selected.begin(), selected.end(), -+ [&](scoped_refptr subscription) { -+ return base::EndsWith(subscription->GetSourceUrl().path_piece(), -+ "easylist.txt"); ++ selected.begin(), selected.end(), [&](const GURL& subscription) { ++ return base::EndsWith(subscription.path_piece(), "easylist.txt"); + }); + const auto exceptions = std::find_if( -+ selected.begin(), selected.end(), -+ [&](scoped_refptr subscription) { -+ return base::EndsWith(subscription->GetSourceUrl().path_piece(), ++ selected.begin(), selected.end(), [&](const GURL& subscription) { ++ return base::EndsWith(subscription.path_piece(), + "exceptionrules.txt"); + }); + const auto snippets = std::find_if( -+ selected.begin(), selected.end(), -+ [&](scoped_refptr subscription) { -+ return base::EndsWith(subscription->GetSourceUrl().path_piece(), ++ selected.begin(), selected.end(), [&](const GURL& subscription) { ++ return base::EndsWith(subscription.path_piece(), + "abp-filters-anti-cv.txt"); + }); + if (easylist == selected.end() || exceptions == selected.end() || @@ -1264,9 +1311,9 @@ new file mode 100644 + return std::map{}; + } + return std::map{ -+ {"easylist", (*easylist)->GetSourceUrl().spec()}, -+ {"exceptions", (*exceptions)->GetSourceUrl().spec()}, -+ {"snippets", (*snippets)->GetSourceUrl().spec()}}; ++ {"easylist", easylist->spec()}, ++ {"exceptions", exceptions->spec()}, ++ {"snippets", snippets->spec()}}; + } +}; + @@ -1516,8 +1563,9 @@ new file mode 100644 + // Map example.com to localhost. + host_resolver()->AddRule("example.com", "127.0.0.1"); + ASSERT_TRUE(StartEmbeddedTestServer()); -+ adblock::AdblockControllerFactory::GetForBrowserContext( ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( + browser()->profile()) ++ ->GetAdblockFilteringConfiguration() + ->RemoveCustomFilter(adblock::kAllowlistEverythingFilter); + } + @@ -1870,8 +1918,9 @@ new file mode 100644 + &AdblockPrivateApiBackgroundPageTestWithRedirect::RequestHandler, + base::Unretained(this))); + ASSERT_TRUE(StartEmbeddedTestServer()); -+ adblock::AdblockControllerFactory::GetForBrowserContext( ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( + browser()->profile()) ++ ->GetAdblockFilteringConfiguration() + ->RemoveCustomFilter(adblock::kAllowlistEverythingFilter); + } + @@ -2106,7 +2155,7 @@ diff --git a/chrome/browser/extensions/api/api_browser_context_keyed_service_fac #include "chrome/browser/extensions/api/font_settings/font_settings_api.h" #include "chrome/browser/extensions/api/history/history_api.h" #include "chrome/browser/extensions/api/identity/identity_api.h" -@@ -69,6 +75,7 @@ namespace chrome_extensions { +@@ -73,6 +79,7 @@ namespace chrome_extensions { void EnsureApiBrowserContextKeyedServiceFactoriesBuilt() { extensions::ActivityLogAPI::GetFactoryInstance(); @@ -2114,7 +2163,7 @@ diff --git a/chrome/browser/extensions/api/api_browser_context_keyed_service_fac extensions::AutofillPrivateEventRouterFactory::GetInstance(); extensions::BluetoothLowEnergyAPI::GetFactoryInstance(); extensions::BookmarksAPI::GetFactoryInstance(); -@@ -78,6 +85,7 @@ void EnsureApiBrowserContextKeyedServiceFactoriesBuilt() { +@@ -82,6 +89,7 @@ void EnsureApiBrowserContextKeyedServiceFactoriesBuilt() { extensions::CookiesAPI::GetFactoryInstance(); extensions::DeveloperPrivateAPI::GetFactoryInstance(); extensions::ExtensionActionAPI::GetFactoryInstance(); @@ -2126,7 +2175,7 @@ diff --git a/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering new file mode 100644 --- /dev/null +++ b/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering_private_api.cc -@@ -0,0 +1,770 @@ +@@ -0,0 +1,772 @@ +// This file is part of eyeo Chromium SDK, +// Copyright (C) 2006-present eyeo GmbH +// @@ -2440,7 +2489,7 @@ new file mode 100644 + return info; + } + -+ raw_ptr context_; ++ const raw_ptr context_; +}; + +template <> @@ -2538,7 +2587,9 @@ new file mode 100644 + if (configuration_it == installed_configurations.end()) { + auto new_filtering_configuration = + std::make_unique( -+ Profile::FromBrowserContext(browser_context())->GetPrefs(), ++ Profile::FromBrowserContext(browser_context()) ++ ->GetOriginalProfile() ++ ->GetPrefs(), + params->config_name); + subscription_service->InstallFilteringConfiguration( + std::move(new_filtering_configuration)); @@ -2950,7 +3001,7 @@ new file mode 100644 + void OnListenerAdded(const extensions::EventListenerInfo& details) override; + + private: -+ raw_ptr context_; ++ const raw_ptr context_; + class EyeoFilteringAPIEventRouter; + std::unique_ptr event_router_; +}; @@ -3266,7 +3317,7 @@ diff --git a/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering new file mode 100644 --- /dev/null +++ b/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering_private_apitest.cc -@@ -0,0 +1,155 @@ +@@ -0,0 +1,161 @@ +// This file is part of eyeo Chromium SDK, +// Copyright (C) 2006-present eyeo GmbH +// @@ -3283,12 +3334,13 @@ new file mode 100644 +// along with eyeo Chromium SDK. If not, see . + +#include "chrome/browser/adblock/adblock_content_browser_client.h" -+#include "chrome/browser/adblock/adblock_controller_factory.h" ++#include "chrome/browser/adblock/subscription_service_factory.h" +#include "chrome/browser/extensions/extension_apitest.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/common/extensions/api/adblock_private.h" +#include "components/adblock/core/adblock_controller.h" +#include "components/adblock/core/common/adblock_constants.h" ++#include "components/adblock/core/subscription/subscription_service.h" +#include "content/public/test/browser_test.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" @@ -3319,9 +3371,14 @@ new file mode 100644 + void SetUpOnMainThread() override { + ExtensionApiTest::SetUpOnMainThread(); + -+ adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser()->profile()) -+ ->RemoveCustomFilter(adblock::kAllowlistEverythingFilter); ++ auto* adblock_configuration = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser()->profile()) ++ ->GetAdblockFilteringConfiguration(); ++ if (adblock_configuration) { ++ adblock_configuration->RemoveCustomFilter( ++ adblock::kAllowlistEverythingFilter); ++ } + + AdblockContentBrowserClient::ForceAdblockProxyForTesting(); + } @@ -3436,7 +3493,7 @@ diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chro #include "chrome/browser/extensions/api/settings_private/prefs_util.h" #include -@@ -26,6 +30,7 @@ +@@ -27,6 +31,7 @@ #include "chrome/browser/ssl/generated_https_first_mode_pref.h" #include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" @@ -3444,7 +3501,7 @@ diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chro #include "components/autofill/core/common/autofill_prefs.h" #include "components/bookmarks/common/bookmark_pref_names.h" #include "components/browsing_data/core/pref_names.h" -@@ -177,6 +182,20 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { +@@ -173,6 +178,20 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { return *s_allowlist; s_allowlist = new PrefsUtil::TypedPrefMap(); @@ -4063,7 +4120,7 @@ diff --git a/chrome/common/extensions/permissions/permission_set_unittest.cc b/c diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn -@@ -3535,6 +3535,12 @@ if (!is_android) { +@@ -3589,6 +3589,12 @@ if (!is_android) { ] } @@ -5382,7 +5439,7 @@ diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums --> -@@ -35148,7 +35151,7 @@ Called by update_extension_histograms.py.--> +@@ -35304,7 +35307,7 @@ Called by update_extension_histograms.py.--> @@ -5391,6 +5448,15 @@ diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums +@@ -38452,6 +38455,8 @@ Called by update_extension_permission.py.--> + + + ++ ++ + + + diff --git a/tools/typescript/definitions/adblock_private.d.ts b/tools/typescript/definitions/adblock_private.d.ts new file mode 100644 --- /dev/null diff --git a/build/patches/kill-Location-fall-back-to-system.patch b/build/patches/kill-Location-fall-back-to-system.patch index 94bc4e17..055ad664 100644 --- a/build/patches/kill-Location-fall-back-to-system.patch +++ b/build/patches/kill-Location-fall-back-to-system.patch @@ -11,7 +11,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/services/device/geolocation/BUILD.gn b/services/device/geolocation/BUILD.gn --- a/services/device/geolocation/BUILD.gn +++ b/services/device/geolocation/BUILD.gn -@@ -162,7 +162,6 @@ if (is_android) { +@@ -163,7 +163,6 @@ if (is_android) { "android/java/src/org/chromium/device/geolocation/LocationProviderAdapter.java", "android/java/src/org/chromium/device/geolocation/LocationProviderAndroid.java", "android/java/src/org/chromium/device/geolocation/LocationProviderFactory.java", diff --git a/build/patches/kill-Vision.patch b/build/patches/kill-Vision.patch index 4f7f154c..56182a75 100644 --- a/build/patches/kill-Vision.patch +++ b/build/patches/kill-Vision.patch @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -296,8 +296,6 @@ if (current_toolchain == default_toolchain) { +@@ -299,8 +299,6 @@ if (current_toolchain == default_toolchain) { "$google_play_services_package:google_play_services_gcm_java", "$google_play_services_package:google_play_services_iid_java", "$google_play_services_package:google_play_services_tasks_java", @@ -27,7 +27,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/services/shape_detection/BUILD.gn b/services/shape_detection/BUILD.gn --- a/services/shape_detection/BUILD.gn +++ b/services/shape_detection/BUILD.gn -@@ -110,21 +110,13 @@ if (is_android) { +@@ -111,21 +111,13 @@ if (is_android) { android_library("shape_detection_java") { sources = [ diff --git a/build/patches/prefs-always-prompt-for-download-directory.patch b/build/patches/prefs-always-prompt-for-download-directory.patch index 979cbba0..d160240c 100644 --- a/build/patches/prefs-always-prompt-for-download-directory.patch +++ b/build/patches/prefs-always-prompt-for-download-directory.patch @@ -31,7 +31,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/download/download_prefs.cc b/chrome/browser/download/download_prefs.cc --- a/chrome/browser/download/download_prefs.cc +++ b/chrome/browser/download/download_prefs.cc -@@ -282,7 +282,7 @@ void DownloadPrefs::RegisterProfilePrefs( +@@ -281,7 +281,7 @@ void DownloadPrefs::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref( prefs::kPromptForDownload, diff --git a/build/patches/ungoogled-chromium-Disable-Gaia.patch b/build/patches/ungoogled-chromium-Disable-Gaia.patch index 7315fe08..e923a088 100644 --- a/build/patches/ungoogled-chromium-Disable-Gaia.patch +++ b/build/patches/ungoogled-chromium-Disable-Gaia.patch @@ -24,7 +24,7 @@ diff --git a/google_apis/gaia/gaia_auth_fetcher.cc b/google_apis/gaia/gaia_auth_ constexpr char kBadAuthenticationError[] = "BadAuthentication"; constexpr char kBadAuthenticationShortError[] = "badauth"; -@@ -272,6 +272,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher( +@@ -260,6 +260,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher( const net::NetworkTrafficAnnotationTag& traffic_annotation) { DCHECK(!fetch_pending_) << "Tried to fetch two things at once!"; @@ -32,7 +32,7 @@ diff --git a/google_apis/gaia/gaia_auth_fetcher.cc b/google_apis/gaia/gaia_auth_ auto resource_request = std::make_unique(); resource_request->url = gaia_gurl; original_url_ = gaia_gurl; -@@ -326,6 +327,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher( +@@ -314,6 +315,7 @@ void GaiaAuthFetcher::CreateAndStartGaiaFetcher( base::BindOnce(&GaiaAuthFetcher::OnURLLoadComplete, base::Unretained(this)), kMaxMessageSize); diff --git a/build/patches/ungoogled-chromium-Disable-profile-avatar.patch b/build/patches/ungoogled-chromium-Disable-profile-avatar.patch index a03e8ac1..4ac0e14c 100644 --- a/build/patches/ungoogled-chromium-Disable-profile-avatar.patch +++ b/build/patches/ungoogled-chromium-Disable-profile-avatar.patch @@ -14,7 +14,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -1459,8 +1459,6 @@ static_library("browser") { +@@ -1463,8 +1463,6 @@ static_library("browser") { "profiles/profile_attributes_storage.cc", "profiles/profile_attributes_storage.h", "profiles/profile_attributes_storage_observer.h", @@ -42,7 +42,7 @@ diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browse diff --git a/chrome/browser/profiles/profile_attributes_storage.cc b/chrome/browser/profiles/profile_attributes_storage.cc --- a/chrome/browser/profiles/profile_attributes_storage.cc +++ b/chrome/browser/profiles/profile_attributes_storage.cc -@@ -989,7 +989,7 @@ void ProfileAttributesStorage::DownloadHighResAvatarIfNeeded( +@@ -998,7 +998,7 @@ void ProfileAttributesStorage::DownloadHighResAvatarIfNeeded( void ProfileAttributesStorage::DownloadHighResAvatar( size_t icon_index, const base::FilePath& profile_path) { diff --git a/build/patches/ungoogled-chromium-Disable-translate-integration.patch b/build/patches/ungoogled-chromium-Disable-translate-integration.patch index 4b552980..61363478 100644 --- a/build/patches/ungoogled-chromium-Disable-translate-integration.patch +++ b/build/patches/ungoogled-chromium-Disable-translate-integration.patch @@ -6,13 +6,13 @@ Remove translate offer License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../xml/languages_detailed_preferences.xml | 43 ------------------- + .../xml/languages_detailed_preferences.xml | 43 ------------------ .../java/res/xml/languages_preferences.xml | 5 --- - .../language/settings/LanguageSettings.java | 41 +----------------- + .../language/settings/LanguageSettings.java | 44 +------------------ .../strings/android_chrome_strings.grd | 3 -- .../core/browser/translate_manager.cc | 5 ++- .../core/browser/translate_script.cc | 19 +++----- - 6 files changed, 11 insertions(+), 105 deletions(-) + 6 files changed, 11 insertions(+), 108 deletions(-) diff --git a/chrome/browser/language/android/java/res/xml/languages_detailed_preferences.xml b/chrome/browser/language/android/java/res/xml/languages_detailed_preferences.xml --- a/chrome/browser/language/android/java/res/xml/languages_detailed_preferences.xml @@ -81,7 +81,7 @@ diff --git a/chrome/browser/language/android/java/res/xml/languages_preferences. diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java --- a/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java +++ b/chrome/browser/language/android/java/src/org/chromium/chrome/browser/language/settings/LanguageSettings.java -@@ -50,12 +50,6 @@ public class LanguageSettings extends PreferenceFragmentCompat +@@ -47,12 +47,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment static final String APP_LANGUAGE_PREFERENCE_KEY = "app_language_preference"; static final String PREFERRED_LANGUAGES_KEY = "preferred_languages"; static final String CONTENT_LANGUAGES_KEY = "content_languages_preference"; @@ -94,10 +94,10 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse private static final String TAG = "LanguageSettings"; -@@ -106,27 +100,6 @@ public class LanguageSettings extends PreferenceFragmentCompat +@@ -97,32 +91,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment ContentLanguagesPreference mLanguageListPref = (ContentLanguagesPreference) findPreference(PREFERRED_LANGUAGES_KEY); - mLanguageListPref.registerActivityLauncher(this); + mLanguageListPref.initialize(this, getPrefService()); - - ChromeSwitchPreference translateSwitch = - (ChromeSwitchPreference) findPreference(TRANSLATE_SWITCH_KEY); @@ -117,21 +117,26 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse - return true; - } - }); -- translateSwitch.setManagedPreferenceDelegate((ChromeManagedPreferenceDelegate) preference -- -> getPrefService().isManagedPreference(Pref.OFFER_TRANSLATE_ENABLED)); +- translateSwitch.setManagedPreferenceDelegate(new ChromeManagedPreferenceDelegate( +- getProfile()) { +- @Override +- public boolean isPreferenceControlledByPolicy(Preference preference) { +- return getPrefService().isManagedPreference(Pref.OFFER_TRANSLATE_ENABLED); +- } +- }); } /** -@@ -141,8 +114,6 @@ public class LanguageSettings extends PreferenceFragmentCompat +@@ -137,8 +105,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment ContentLanguagesPreference mLanguageListPref = (ContentLanguagesPreference) findPreference(CONTENT_LANGUAGES_KEY); - mLanguageListPref.registerActivityLauncher(this); + mLanguageListPref.initialize(this, getPrefService()); - - setupTranslateSection(mLanguageListPref); } /** -@@ -172,7 +143,7 @@ public class LanguageSettings extends PreferenceFragmentCompat +@@ -168,7 +134,7 @@ public class LanguageSettings extends ChromeBaseSettingsFragment * @param contentLanguagesPreference ContentLanguagesPreference reference to update about state * changes. */ @@ -140,18 +145,16 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse // Setup expandable advanced settings section. PreferenceCategory translationAdvancedSection = (PreferenceCategory) findPreference(TRANSLATION_ADVANCED_SECTION); -@@ -234,9 +205,7 @@ public class LanguageSettings extends PreferenceFragmentCompat - return true; +@@ -237,7 +203,7 @@ public class LanguageSettings extends ChromeBaseSettingsFragment + return getPrefService().isManagedPreference(Pref.OFFER_TRANSLATE_ENABLED); } }); -- translateSwitch.setManagedPreferenceDelegate((ChromeManagedPreferenceDelegate) preference -- -> getPrefService().isManagedPreference(Pref.OFFER_TRANSLATE_ENABLED)); - } + } */ @Override public void onStart() { -@@ -274,12 +243,6 @@ public class LanguageSettings extends PreferenceFragmentCompat +@@ -275,12 +241,6 @@ public class LanguageSettings extends ChromeBaseSettingsFragment // Set the default target language to match the new app language. TranslateBridge.setDefaultTargetLanguage(code); } else if (requestCode == REQUEST_CODE_CHANGE_TARGET_LANGUAGE) { @@ -167,7 +170,7 @@ diff --git a/chrome/browser/language/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1895,9 +1895,6 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1930,9 +1930,6 @@ Your Google account may have other forms of browsing history like searches and a Websites will show text in your preferred language, when possible. @@ -180,7 +183,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/components/translate/core/browser/translate_manager.cc b/components/translate/core/browser/translate_manager.cc --- a/components/translate/core/browser/translate_manager.cc +++ b/components/translate/core/browser/translate_manager.cc -@@ -825,8 +825,9 @@ void TranslateManager::FilterIsTranslatePossible( +@@ -832,8 +832,9 @@ void TranslateManager::FilterIsTranslatePossible( TriggerDecision::kDisabledOffline); } diff --git a/build/patches/ungoogled-chromium-Disable-webRTC-log-uploader.patch b/build/patches/ungoogled-chromium-Disable-webRTC-log-uploader.patch index 9153e29f..52869f63 100644 --- a/build/patches/ungoogled-chromium-Disable-webRTC-log-uploader.patch +++ b/build/patches/ungoogled-chromium-Disable-webRTC-log-uploader.patch @@ -76,7 +76,7 @@ diff --git a/chrome/browser/media/webrtc/webrtc_logging_controller.cc b/chrome/b diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -102,7 +102,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -99,7 +99,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref(prefs::kWebRtcEventLogCollectionAllowed, false); registry->RegisterListPref(prefs::kWebRtcLocalIpsAllowedUrls); registry->RegisterBooleanPref(prefs::kWebRTCAllowLegacyTLSProtocols, false); diff --git a/build/patches/ungoogled-chromium-no-special-hosts-domains.patch b/build/patches/ungoogled-chromium-no-special-hosts-domains.patch index 1203aea4..dba70ecc 100644 --- a/build/patches/ungoogled-chromium-no-special-hosts-domains.patch +++ b/build/patches/ungoogled-chromium-no-special-hosts-domains.patch @@ -54,15 +54,16 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/search_provider_logos/BUILD.gn | 2 - .../logo_service_impl.cc | 16 +- components/url_matcher/url_util.cc | 83 ----- - content/public/common/content_features.cc | 12 +- + content/common/features.cc | 4 +- + content/public/common/content_features.cc | 6 +- net/base/url_util.cc | 21 -- services/network/network_context.cc | 2 +- - 50 files changed, 61 insertions(+), 798 deletions(-) + 51 files changed, 60 insertions(+), 797 deletions(-) diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -1038,10 +1038,6 @@ static_library("browser") { +@@ -1039,10 +1039,6 @@ static_library("browser") { "page_load_metrics/observers/foreground_duration_ukm_observer.h", "page_load_metrics/observers/formfill_page_load_metrics_observer.cc", "page_load_metrics/observers/formfill_page_load_metrics_observer.h", @@ -73,7 +74,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "page_load_metrics/observers/histogram_suffixes.cc", "page_load_metrics/observers/histogram_suffixes.h", "page_load_metrics/observers/https_engagement_metrics/https_engagement_page_load_metrics_observer.cc", -@@ -1944,7 +1940,6 @@ static_library("browser") { +@@ -1989,7 +1985,6 @@ static_library("browser") { "//chrome/browser/autofill", "//chrome/browser/devtools", "//chrome/browser/favicon", @@ -81,7 +82,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "//chrome/browser/profiling_host", # TODO(crbug.com/1335199): break this dep when favicon is in its own target -@@ -1968,7 +1963,6 @@ static_library("browser") { +@@ -2013,7 +2008,6 @@ static_library("browser") { public_deps = [ "//base", @@ -89,8 +90,8 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "//chrome/browser/headless", "//chrome/common", "//chrome/common:buildflags", -@@ -7694,8 +7688,6 @@ static_library("browser") { - "supervised_user/kids_chrome_management/kids_profile_manager.h", +@@ -7789,8 +7783,6 @@ static_library("browser") { + "supervised_user/kids_chrome_management/kids_chrome_management_client_factory.h", "supervised_user/supervised_user_browser_utils.cc", "supervised_user/supervised_user_browser_utils.h", - "supervised_user/supervised_user_google_auth_navigation_throttle.cc", @@ -158,7 +159,7 @@ diff --git a/chrome/browser/android/signin/signin_manager_android.cc b/chrome/br diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc -@@ -1119,7 +1119,6 @@ BrowserProcessImpl::component_updater() { +@@ -1121,7 +1121,6 @@ BrowserProcessImpl::component_updater() { std::make_unique(); std::string brand; @@ -169,7 +170,7 @@ diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_pro diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -2918,7 +2918,6 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( +@@ -2916,7 +2916,6 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( switches::kForcePNaClSubzero, #endif switches::kForceUIDirection, @@ -177,7 +178,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch switches::kJavaScriptHarmony, switches::kEnableExperimentalWebAssemblyFeatures, embedder_support::kOriginTrialDisabledFeatures, -@@ -5104,12 +5103,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation( +@@ -5131,12 +5130,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation( } #endif @@ -190,7 +191,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch if (auto* throttle_manager = subresource_filter::ContentSubresourceFilterThrottleManager:: FromNavigationHandle(*handle)) { -@@ -5632,7 +5625,8 @@ GetClientDataHeader(int frame_tree_node_id) { +@@ -5662,7 +5655,8 @@ GetClientDataHeader(int frame_tree_node_id) { } #endif @@ -200,7 +201,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch #if BUILDFLAG(IS_ANDROID) const std::string& client_data_header, #endif -@@ -5671,7 +5665,7 @@ std::unique_ptr CreateGoogleURLLoaderThrottle( +@@ -5701,7 +5695,7 @@ std::unique_ptr CreateGoogleURLLoaderThrottle( std::move(bound_session_request_throttled_listener), #endif std::move(dynamic_params)); @@ -209,7 +210,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch std::vector> ChromeContentBrowserClient::CreateURLLoaderThrottles( -@@ -5717,15 +5711,6 @@ ChromeContentBrowserClient::CreateURLLoaderThrottles( +@@ -5747,15 +5741,6 @@ ChromeContentBrowserClient::CreateURLLoaderThrottles( GetClientDataHeader(frame_tree_node_id); #endif @@ -225,7 +226,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch { auto* factory = ProtocolHandlerRegistryFactory::GetForBrowserContext(browser_context); -@@ -5779,20 +5764,6 @@ ChromeContentBrowserClient::CreateURLLoaderThrottlesForKeepAlive( +@@ -5809,20 +5794,6 @@ ChromeContentBrowserClient::CreateURLLoaderThrottlesForKeepAlive( } #endif @@ -295,7 +296,7 @@ diff --git a/chrome/browser/domain_reliability/service_factory.cc b/chrome/brows diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn -@@ -821,7 +821,6 @@ static_library("extensions") { +@@ -822,7 +822,6 @@ static_library("extensions") { "//chrome/browser/devtools", "//chrome/browser/extensions:cws_item_service_proto", "//chrome/browser/favicon", @@ -306,7 +307,7 @@ diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUIL diff --git a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc --- a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc +++ b/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.cc -@@ -115,7 +115,6 @@ constexpr char kOsVersionTag[] = "OS VERSION"; +@@ -119,7 +119,6 @@ constexpr char kOsVersionTag[] = "OS VERSION"; #if BUILDFLAG(IS_WIN) constexpr char kUsbKeyboardDetected[] = "usb_keyboard_detected"; constexpr char kIsEnrolledToDomain[] = "enrolled_to_domain"; @@ -314,7 +315,7 @@ diff --git a/chrome/browser/feedback/system_logs/log_sources/chrome_internal_log #if BUILDFLAG(GOOGLE_CHROME_BRANDING) constexpr char kUpdateErrorCode[] = "update_error_code"; constexpr char kUpdateHresult[] = "update_hresult"; -@@ -600,10 +599,6 @@ void ChromeInternalLogSource::PopulateEnrolledToDomain( +@@ -622,10 +621,6 @@ void ChromeInternalLogSource::PopulateEnrolledToDomain( void ChromeInternalLogSource::PopulateInstallerBrandCode( SystemLogsResponse* response) { @@ -412,7 +413,7 @@ diff --git a/chrome/browser/long_screenshots/long_screenshots_tab_service.cc b/c diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc --- a/chrome/browser/metrics/chrome_metrics_service_client.cc +++ b/chrome/browser/metrics/chrome_metrics_service_client.cc -@@ -628,7 +628,7 @@ ChromeMetricsServiceClient::GetNetworkTimeTracker() { +@@ -629,7 +629,7 @@ ChromeMetricsServiceClient::GetNetworkTimeTracker() { } bool ChromeMetricsServiceClient::GetBrand(std::string* brand_code) { @@ -434,7 +435,7 @@ diff --git a/chrome/browser/metrics/chrome_metrics_services_manager_client.cc b/ } #if BUILDFLAG(IS_ANDROID) -@@ -322,7 +319,7 @@ ChromeMetricsServicesManagerClient::GetMetricsStateManager() { +@@ -338,7 +335,7 @@ ChromeMetricsServicesManagerClient::GetMetricsStateManager() { cc::switches::kEnableGpuBenchmarking), }, base::BindRepeating(&PostStoreMetricsClientInfo), @@ -548,7 +549,7 @@ diff --git a/chrome/browser/metrics/metrics_reporting_state.cc b/chrome/browser/ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc -@@ -801,7 +801,6 @@ void SystemNetworkContextManager::AddSSLConfigToNetworkContextParams( +@@ -819,7 +819,6 @@ void SystemNetworkContextManager::AddSSLConfigToNetworkContextParams( void SystemNetworkContextManager::ConfigureDefaultNetworkContextParams( network::mojom::NetworkContextParams* network_context_params) { variations::UpdateCorsExemptHeaderForVariations(network_context_params); @@ -559,7 +560,7 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows diff --git a/chrome/browser/new_tab_page/modules/recipes/recipes_service.cc b/chrome/browser/new_tab_page/modules/recipes/recipes_service.cc --- a/chrome/browser/new_tab_page/modules/recipes/recipes_service.cc +++ b/chrome/browser/new_tab_page/modules/recipes/recipes_service.cc -@@ -51,9 +51,10 @@ const char* GetExperimentGroupParam() { +@@ -52,9 +52,10 @@ const char* GetExperimentGroupParam() { } GURL GetApiUrl(const std::string& application_locale) { @@ -629,7 +630,7 @@ diff --git a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metri diff --git a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc --- a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc +++ b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc -@@ -123,8 +123,6 @@ void PageLoadMetricsEmbedder::RegisterEmbedderObservers( +@@ -124,8 +124,6 @@ void PageLoadMetricsEmbedder::RegisterEmbedderObservers( tracker->AddObserver(std::make_unique()); tracker->AddObserver(std::make_unique()); tracker->AddObserver(std::make_unique()); @@ -666,7 +667,7 @@ diff --git a/chrome/browser/search_engines/ui_thread_search_terms_data.cc b/chro diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -431,7 +431,6 @@ static_library("ui") { +@@ -423,7 +423,6 @@ static_library("ui") { "//chrome/browser/companion/core", "//chrome/browser/devtools", "//chrome/browser/favicon", @@ -677,7 +678,7 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc -@@ -623,11 +623,6 @@ content::WebUIDataSource* CreateAndAddNewTabPageUiHtmlSource(Profile* profile) { +@@ -621,11 +621,6 @@ content::WebUIDataSource* CreateAndAddNewTabPageUiHtmlSource(Profile* profile) { // chrome-untrusted://new-tab-page for other external content and resources. // NOTE: Use caution when overriding content security policies as that cean // lead to subtle security bugs such as https://crbug.com/1251541. @@ -715,7 +716,7 @@ diff --git a/chrome/browser/upgrade_detector/upgrade_detector_impl.cc b/chrome/b diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn -@@ -140,8 +140,6 @@ static_library("common_lib") { +@@ -142,8 +142,6 @@ static_library("common_lib") { "content_restriction.h", "crash_keys.cc", "crash_keys.h", @@ -759,14 +760,14 @@ diff --git a/chrome/renderer/url_loader_throttle_provider_impl.cc b/chrome/rende diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn -@@ -6444,7 +6444,6 @@ test("unit_tests") { +@@ -6503,7 +6503,6 @@ test("unit_tests") { "//chrome/browser/favicon", "//chrome/browser/feature_guide/notifications:unit_tests", "//chrome/browser/first_party_sets", - "//chrome/browser/google:unit_tests", - "//chrome/browser/media/effects:unittests", "//chrome/browser/media/router", "//chrome/browser/media/router:media_router_feature", + "//chrome/browser/media/router:unittests", diff --git a/components/domain_reliability/BUILD.gn b/components/domain_reliability/BUILD.gn --- a/components/domain_reliability/BUILD.gn +++ b/components/domain_reliability/BUILD.gn @@ -1338,7 +1339,7 @@ diff --git a/components/google/core/common/google_util.h b/components/google/cor diff --git a/components/page_load_metrics/browser/page_load_metrics_util.cc b/components/page_load_metrics/browser/page_load_metrics_util.cc --- a/components/page_load_metrics/browser/page_load_metrics_util.cc +++ b/components/page_load_metrics/browser/page_load_metrics_util.cc -@@ -282,9 +282,7 @@ bool DidObserveLoadingBehaviorInAnyFrame( +@@ -281,9 +281,7 @@ bool DidObserveLoadingBehaviorInAnyFrame( } bool IsGoogleSearchHostname(const GURL& url) { @@ -1602,19 +1603,24 @@ diff --git a/components/url_matcher/url_util.cc b/components/url_matcher/url_uti return GURL(); } +diff --git a/content/common/features.cc b/content/common/features.cc +--- a/content/common/features.cc ++++ b/content/common/features.cc +@@ -178,8 +178,8 @@ BASE_FEATURE(kExperimentalContentSecurityPolicyFeatures, + // parsing the signin status HTTP headers. + // kFedCmIdpSigninStatusEnabled takes precedence over this feature flag. + BASE_FEATURE(kFedCmIdpSigninStatusMetrics, +- "FedCmIdpSigninStatusMetrics", +- base::FEATURE_ENABLED_BY_DEFAULT); ++ "FedCmIdpSigninStatusMetrics", // disabled ++ base::FEATURE_DISABLED_BY_DEFAULT); // by default + + // If enabled, limits the number of FLEDGE auctions that can be run between page + // load and unload -- any attempt to run more than this number of auctions will diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -462,15 +462,15 @@ BASE_FEATURE(kFedCmSelectiveDisclosure, - // Enables metrics collection for signin status mismatches. Also enables - // parsing the signin status HTTP headers. - // kFedCmIdpSigninStatusEnabled takes precedence over this feature flag. --BASE_FEATURE(kFedCmIdpSigninStatusMetrics, -- "FedCmIdpSigninStatusMetrics", -- base::FEATURE_ENABLED_BY_DEFAULT); -+BASE_FEATURE(kFedCmIdpSigninStatusMetrics, // disabled -+ "FedCmIdpSigninStatusMetrics", // by default -+ base::FEATURE_DISABLED_BY_DEFAULT); // on bromite +@@ -380,9 +380,9 @@ BASE_FEATURE(kFedCmSelectiveDisclosure, // Enables the IDP signin status API for use with FedCM, including avoiding // network requests when not signed in and mismatch handling. @@ -1661,7 +1667,7 @@ diff --git a/net/base/url_util.cc b/net/base/url_util.cc diff --git a/services/network/network_context.cc b/services/network/network_context.cc --- a/services/network/network_context.cc +++ b/services/network/network_context.cc -@@ -2783,7 +2783,7 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext( +@@ -2846,7 +2846,7 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext( } #endif // BUILDFLAG(IS_CT_SUPPORTED) diff --git a/build/patches/webRTC-do-not-expose-local-IP-addresses.patch b/build/patches/webRTC-do-not-expose-local-IP-addresses.patch index ece7472d..71fced69 100644 --- a/build/patches/webRTC-do-not-expose-local-IP-addresses.patch +++ b/build/patches/webRTC-do-not-expose-local-IP-addresses.patch @@ -17,7 +17,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -97,7 +97,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -94,7 +94,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { false); #endif registry->RegisterStringPref(prefs::kWebRTCIPHandlingPolicy, @@ -29,7 +29,7 @@ diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_u diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc -@@ -112,7 +112,9 @@ WebRTCIPHandlingPolicy GetWebRTCIPHandlingPolicy(const String& preference) { +@@ -113,7 +113,9 @@ WebRTCIPHandlingPolicy GetWebRTCIPHandlingPolicy(const String& preference) { return kDefaultPublicInterfaceOnly; if (preference == kWebRTCIPHandlingDisableNonProxiedUdp) return kDisableNonProxiedUdp; @@ -40,7 +40,7 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_d } bool IsValidPortRange(uint16_t min_port, uint16_t max_port) { -@@ -782,7 +784,7 @@ PeerConnectionDependencyFactory::CreatePortAllocator( +@@ -799,7 +801,7 @@ PeerConnectionDependencyFactory::CreatePortAllocator( break; } diff --git a/build/patches/webview-Hard-no-to-persistent-histograms.patch b/build/patches/webview-Hard-no-to-persistent-histograms.patch index a68d209a..32b96436 100644 --- a/build/patches/webview-Hard-no-to-persistent-histograms.patch +++ b/build/patches/webview-Hard-no-to-persistent-histograms.patch @@ -18,7 +18,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/android_webview/browser/aw_field_trials.cc b/android_webview/browser/aw_field_trials.cc --- a/android_webview/browser/aw_field_trials.cc +++ b/android_webview/browser/aw_field_trials.cc -@@ -49,13 +49,6 @@ class AwFeatureOverrides { +@@ -50,13 +50,6 @@ class AwFeatureOverrides { } // namespace void AwFieldTrials::OnVariationsSetupComplete() { From d6aff9d77d3ececa59b87c4b712b81982b1bb372 Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Fri, 27 Oct 2023 16:15:28 +0200 Subject: [PATCH 02/23] v119 need some work --- build/patches/00Disable-FedCm.patch | 20 +- ...00Eyeo-Adblock-Remove-Privacy-Issues.patch | 522 +++--- build/patches/00Fix-chromium-build-bugs.patch | 79 +- build/patches/00Internal-firewall.patch | 141 +- ...th-header-upon-cross-origin-redirect.patch | 8 +- ...e-kAutomaticLazyFrameLoadingToEmbeds.patch | 2 +- ...Temp-disable-predictive-back-gesture.patch | 2 +- ...mp-remove-support-for-shared-workers.patch | 2 +- .../Add-DuckDuckGo-Lite-search-engine.patch | 836 +-------- .../Add-English-only-search-engine.patch | 1529 ++++++++--------- .../Add-menu-item-to-bookmark-all-tabs.patch | 130 +- .../Add-option-to-use-home-page-as-NTP.patch | 50 +- build/patches/Add-site-engagement-flag.patch | 10 +- ...e-new-tab-page-for-default-home-page.patch | 10 +- build/patches/Bromite-auto-updater.patch | 28 +- build/patches/Bromite-package-name.patch | 2 +- build/patches/Client-hints-overrides.patch | 20 +- .../Content-settings-infrastructure.patch | 178 +- .../Keep-empty-tabs-between-sessions.patch | 32 +- .../Move-navigation-bar-to-bottom.patch | 203 +-- .../patches/Override-Navigator-Language.patch | 2 +- build/patches/Remove-help-menu-item.patch | 4 +- build/patches/User-agent-customization.patch | 69 +- build/patches/Welcome-screen.patch | 6 +- build/patches/autofill-miscellaneous.patch | 41 +- 25 files changed, 1578 insertions(+), 2348 deletions(-) diff --git a/build/patches/00Disable-FedCm.patch b/build/patches/00Disable-FedCm.patch index 44bf07c7..4e187831 100644 --- a/build/patches/00Disable-FedCm.patch +++ b/build/patches/00Disable-FedCm.patch @@ -4,14 +4,14 @@ Subject: Disable FedCm License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - content/public/common/content_features.cc | 10 +++++----- - .../renderer/platform/runtime_enabled_features.json5 | 2 +- - 2 files changed, 6 insertions(+), 6 deletions(-) + content/public/common/content_features.cc | 6 +++--- + .../blink/renderer/platform/runtime_enabled_features.json5 | 2 +- + 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -418,7 +418,7 @@ BASE_FEATURE(kExperimentalContentSecurityPolicyFeatures, +@@ -337,7 +337,7 @@ BASE_FEATURE(kEnableServiceWorkersForChromeScheme, // by the flag in RuntimeEnabledFeatures on the blink side. See also // the use of kSetOnlyIfOverridden in content/child/runtime_features.cc. // We enable it here by default to support use in origin trials. @@ -20,15 +20,7 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c // Field trial boolean parameter which indicates whether FedCM IDP sign-out // is enabled. -@@ -467,15 +467,15 @@ BASE_FEATURE(kFedCmSelectiveDisclosure, - // Enables metrics collection for signin status mismatches. Also enables - // parsing the signin status HTTP headers. - // kFedCmIdpSigninStatusEnabled takes precedence over this feature flag. --BASE_FEATURE(kFedCmIdpSigninStatusMetrics, // disabled -+BASE_FEATURE(kFedCmIdpSigninStatusMetrics, // enabled - "FedCmIdpSigninStatusMetrics", // by default -- base::FEATURE_DISABLED_BY_DEFAULT); // on bromite -+ base::FEATURE_ENABLED_BY_DEFAULT); // on bromite +@@ -385,9 +385,9 @@ BASE_FEATURE(kFedCmSelectiveDisclosure, // Enables the IDP signin status API for use with FedCM, including avoiding // network requests when not signed in and mismatch handling. @@ -43,7 +35,7 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -1596,7 +1596,7 @@ +@@ -1603,7 +1603,7 @@ { name: "FedCm", public: true, diff --git a/build/patches/00Eyeo-Adblock-Remove-Privacy-Issues.patch b/build/patches/00Eyeo-Adblock-Remove-Privacy-Issues.patch index e8d79eae..dc850b87 100644 --- a/build/patches/00Eyeo-Adblock-Remove-Privacy-Issues.patch +++ b/build/patches/00Eyeo-Adblock-Remove-Privacy-Issues.patch @@ -8,7 +8,6 @@ suit Bromite logic .../android/java/res/xml/main_preferences.xml | 19 +- chrome/browser/BUILD.gn | 2 - .../adblock/adblock_content_browser_client.cc | 26 +- - chrome/browser/android/adblock/adblock_jni.cc | 50 +- .../adblock_private/adblock_private_api.cc | 66 +- .../api/adblock_private/adblock_private_api.h | 49 + .../eyeo_filtering_private_api.cc | 20 +- @@ -27,18 +26,19 @@ suit Bromite logic .../extensions/api/_permission_features.json | 8 - .../common/extensions/api/adblock_private.idl | 8 + chrome/test/BUILD.gn | 5 - - components/adblock/android/BUILD.gn | 4 +- + components/adblock/android/BUILD.gn | 3 +- + components/adblock/android/adblock_jni.cc | 50 +- .../adblock/android/adblock_strings.grd | 54 +- .../java/res/layout/adblock_custom_item.xml | 14 +- .../layout/adblock_filter_lists_list_item.xml | 15 + ...ences.xml => eyeo_adblock_preferences.xml} | 39 +- - .../components/adblock/AdblockController.java | 56 +- + .../components/adblock/AdblockController.java | 51 +- .../AdblockAllowedDomainsFragment.java | 7 +- .../AdblockCustomFilterListsFragment.java | 32 +- .../AdblockCustomFiltersFragment.java | 7 +- .../settings/AdblockCustomItemFragment.java | 20 +- .../settings/AdblockFilterListsAdapter.java | 6 + - .../settings/AdblockSettingsFragment.java | 45 +- + .../settings/AdblockSettingsFragment.java | 44 +- components/adblock/content/browser/BUILD.gn | 18 +- .../adblock_controller_factory_base.cc | 5 +- .../browser/adblock_webcontents_observer.cc | 25 +- @@ -48,15 +48,15 @@ suit Bromite logic .../subscription_service_factory_base.cc | 11 +- .../subscription_service_factory_base.h | 1 + components/adblock/core/BUILD.gn | 39 - - .../activeping_telemetry_topic_provider.cc | 243 -- - .../activeping_telemetry_topic_provider.h | 84 - + .../activeping_telemetry_topic_provider.cc | 285 -- + .../activeping_telemetry_topic_provider.h | 87 - components/adblock/core/adblock_controller.h | 8 + .../adblock/core/adblock_controller_impl.cc | 58 +- .../adblock/core/adblock_controller_impl.h | 7 + components/adblock/core/adblock_switches.cc | 1 - components/adblock/core/adblock_switches.h | 1 - - .../adblock/core/adblock_telemetry_service.cc | 244 -- - .../adblock/core/adblock_telemetry_service.h | 107 - + .../adblock/core/adblock_telemetry_service.cc | 258 -- + .../adblock/core/adblock_telemetry_service.h | 120 - components/adblock/core/common/BUILD.gn | 8 - .../adblock/core/common/adblock_constants.cc | 2 - .../adblock/core/common/adblock_constants.h | 1 - @@ -106,9 +106,9 @@ suit Bromite logic .../blink/renderer/core/css/style_engine.cc | 8 + .../blink/renderer/core/css/style_engine.h | 1 + .../renderer/core/exported/web_document.cc | 13 +- - tools/gritsettings/resource_ids.spec | 9 +- + tools/gritsettings/resource_ids.spec | 1 - .../definitions/adblock_private.d.ts | 14 + - 103 files changed, 5081 insertions(+), 1085 deletions(-) + 103 files changed, 5070 insertions(+), 1153 deletions(-) create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.html create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.ts rename components/adblock/android/java/res/xml/{adblock_preferences.xml => eyeo_adblock_preferences.xml} (56%) @@ -165,7 +165,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -166,8 +166,6 @@ static_library("browser") { +@@ -165,8 +165,6 @@ static_library("browser") { "adblock/adblock_content_browser_client.h", "adblock/adblock_controller_factory.cc", "adblock/adblock_controller_factory.h", @@ -177,7 +177,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/browser/adblock/adblock_content_browser_client.cc --- a/chrome/browser/adblock/adblock_content_browser_client.cc +++ b/chrome/browser/adblock/adblock_content_browser_client.cc -@@ -25,6 +25,8 @@ +@@ -24,6 +24,8 @@ #include "chrome/browser/adblock/resource_classification_runner_factory.h" #include "chrome/browser/adblock/sitekey_storage_factory.h" #include "chrome/browser/adblock/subscription_service_factory.h" @@ -186,7 +186,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser_navigator_params.h" #include "components/adblock/content/browser/adblock_url_loader_factory.h" -@@ -61,6 +63,13 @@ bool IsFilteringNeeded(content::RenderFrameHost* frame) { +@@ -59,6 +61,13 @@ bool IsFilteringNeeded(content::RenderFrameHost* frame) { auto* profile = Profile::FromBrowserContext(frame->GetProcess()->GetBrowserContext()); if (profile) { @@ -200,7 +200,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b // Filtering may be needed if there's at least one enabled // FilteringConfiguration. return base::ranges::any_of( -@@ -104,23 +113,6 @@ class AdblockContextData : public base::SupportsUserData::Data { +@@ -102,23 +111,6 @@ class AdblockContextData : public base::SupportsUserData::Data { adblock::SitekeyStorageFactory::GetForBrowserContext(browser_context), adblock::ContentSecurityPolicyInjectorFactory::GetForBrowserContext( browser_context)}; @@ -214,7 +214,7 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b - embedder_support::GetUserAgent(), - base::BindOnce(&AdblockContextData::RemoveProxy, - self->weak_factory_.GetWeakPtr()), -- adblock::AdblockControllerFactory::GetForBrowserContext( +- adblock::SubscriptionServiceFactory::GetForBrowserContext( - Profile::FromBrowserContext( - frame->GetProcess()->GetBrowserContext()))); - self->proxies_.emplace(std::move(proxy)); @@ -224,111 +224,10 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b auto proxy = std::make_unique( std::move(config), content::GlobalRenderFrameHostId(render_process_id, -diff --git a/chrome/browser/android/adblock/adblock_jni.cc b/chrome/browser/android/adblock/adblock_jni.cc ---- a/chrome/browser/android/adblock/adblock_jni.cc -+++ b/chrome/browser/android/adblock/adblock_jni.cc -@@ -24,6 +24,7 @@ - #include "base/android/jni_array.h" - #include "base/android/jni_string.h" - #include "base/android/jni_weak_ref.h" -+#include "base/time/time_to_iso8601.h" - #include "base/logging.h" - #include "chrome/browser/adblock/adblock_controller_factory.h" - #include "chrome/browser/android/adblock/adblock_jni_factory.h" -@@ -71,6 +72,10 @@ ScopedJavaLocalRef ToJava(JNIEnv* env, - const std::string& url, - const std::string& title, - const std::string& version, -+ adblock::Subscription::InstallationState state, -+ const std::string& installation_time, -+ long download_success_count, -+ long download_error_count, - const std::vector& languages) { - ScopedJavaLocalRef url_param( - env, env->NewObject(url_class.obj(), url_constructor, -@@ -79,12 +84,19 @@ ScopedJavaLocalRef ToJava(JNIEnv* env, - return Java_Subscription_Constructor(env, url_param, - ConvertUTF8ToJavaString(env, title), - ConvertUTF8ToJavaString(env, version), -+ ConvertUTF8ToJavaString(env, Subscription::SubscriptionInstallationStateToString(state)), -+ ConvertUTF8ToJavaString(env, installation_time), -+ download_success_count, -+ download_error_count, - ToJavaArrayOfStrings(env, languages)); - } - - std::vector> CSubscriptionsToJObjects( - JNIEnv* env, - const std::vector>& subscriptions) { -+ auto* controller = adblock::GetController(); -+ raw_ptr metadata = -+ controller->GetMetadata(); - ScopedJavaLocalRef url_class = GetClass(env, "java/net/URL"); - jmethodID url_constructor = MethodID::Get( - env, url_class.obj(), "", "(Ljava/lang/String;)V"); -@@ -93,7 +105,11 @@ std::vector> CSubscriptionsToJObjects( - for (auto& sub : subscriptions) { - jobjects.push_back(ToJava( - env, url_class, url_constructor, sub->GetSourceUrl().spec(), -- sub->GetTitle(), sub->GetCurrentVersion(), std::vector{})); -+ sub->GetTitle(), sub->GetCurrentVersion(), -+ sub->GetInstallationState(), base::TimeToISO8601(sub->GetInstallationTime()), -+ metadata ? metadata->GetDownloadSuccessCount(sub->GetSourceUrl()) : 0, -+ metadata ? metadata->GetDownloadErrorCount(sub->GetSourceUrl()) : 0, -+ std::vector{})); - } - return jobjects; - } -@@ -113,6 +129,9 @@ std::vector> CSubscriptionsToJObjects( - if (sub.url.is_valid()) { - jobjects.push_back(ToJava(env, url_class, url_constructor, - sub.url.spec(), sub.title, "", -+ adblock::Subscription::InstallationState::Unknown, -+ /*installation_time*/ "", -+ /*download_success_count*/ 0, /*download_error_count*/ 0, - sub.languages)); - } - } -@@ -167,6 +186,35 @@ static void JNI_AdblockController_Bind( - adblock::GetJNI()->Bind(weak_controller_ref); - } - -+static void -+JNI_AdblockController_StartUpdate(JNIEnv* env) { -+ adblock::GetController()->StartUpdate(); -+} -+ -+static base::android::ScopedJavaLocalRef -+JNI_AdblockController_GetCustomSubscriptions(JNIEnv* env) { -+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); -+ if (!adblock::GetController()) { -+ return ToJavaArrayOfObjects(env, -+ std::vector>{}); -+ } -+ -+ return ToJavaArrayOfObjects( -+ env, adblock::CSubscriptionsToJObjects( -+ env, adblock::GetController()->GetCustomSubscriptions())); -+} -+ -+static jboolean JNI_AdblockController_IsPrivilegedFiltersEnabled( -+ JNIEnv* env) { -+ return adblock::GetController()->IsPrivilegedFiltersEnabled() ? JNI_TRUE : JNI_FALSE; -+} -+ -+static void JNI_AdblockController_SetPrivilegedFiltersEnabled( -+ JNIEnv* env, -+ jboolean j_enabled) { -+ adblock::GetController()->SetPrivilegedFiltersEnabled(j_enabled == JNI_TRUE); -+} -+ - static base::android::ScopedJavaLocalRef - JNI_AdblockController_GetInstalledSubscriptions(JNIEnv* env) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc b/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc --- a/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc +++ b/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc -@@ -75,26 +75,12 @@ std::vector CopySessionsStats( +@@ -77,26 +77,12 @@ std::vector CopySessionsStats( return result; } @@ -358,7 +257,7 @@ diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.c std::vector result; for (auto& sub : current_subscriptions) { api::adblock_private::Subscription js_sub; -@@ -102,9 +88,13 @@ std::vector CopySubscriptions( +@@ -104,9 +90,13 @@ std::vector CopySubscriptions( js_sub.title = sub->GetTitle(); js_sub.current_version = sub->GetCurrentVersion(); js_sub.installation_state = @@ -373,7 +272,7 @@ diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.c result.emplace_back(std::move(js_sub)); } return result; -@@ -345,6 +335,44 @@ void AdblockPrivateAPI::OnListenerAdded( +@@ -347,6 +337,44 @@ void AdblockPrivateAPI::OnListenerAdded( namespace api { @@ -418,15 +317,15 @@ diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.c AdblockPrivateSetEnabledFunction::AdblockPrivateSetEnabledFunction() {} AdblockPrivateSetEnabledFunction::~AdblockPrivateSetEnabledFunction() {} -@@ -486,7 +514,7 @@ AdblockPrivateGetInstalledSubscriptionsFunction::Run() { - browser_context()); +@@ -514,7 +542,7 @@ AdblockPrivateGetInstalledSubscriptionsFunction::Run() { + << "adblock_private expects \"adblock\" configuration"; return RespondNow(ArgumentList( api::adblock_private::GetInstalledSubscriptions::Results::Create( -- CopySubscriptions(controller->GetInstalledSubscriptions())))); -+ CopySubscriptions(controller, controller->GetInstalledSubscriptions())))); +- CopySubscriptions(subscription_service->GetCurrentSubscriptions( ++ CopySubscriptions(controller, subscription_service->GetCurrentSubscriptions( + subscription_service->GetAdblockFilteringConfiguration()))))); } - AdblockPrivateAddAllowedDomainFunction:: diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.h b/chrome/browser/extensions/api/adblock_private/adblock_private_api.h --- a/chrome/browser/extensions/api/adblock_private/adblock_private_api.h +++ b/chrome/browser/extensions/api/adblock_private/adblock_private_api.h @@ -541,7 +440,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc #include "chrome/browser/adblock/content_security_policy_injector_factory.h" #include "chrome/browser/adblock/element_hider_factory.h" #include "chrome/browser/adblock/resource_classification_runner_factory.h" -@@ -735,7 +734,6 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -756,7 +755,6 @@ void ChromeBrowserMainExtraPartsProfiles:: ExitTypeServiceFactory::GetInstance(); #endif adblock::AdblockControllerFactory::GetInstance(); @@ -552,7 +451,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resources/settings/BUILD.gn --- a/chrome/browser/resources/settings/BUILD.gn +++ b/chrome/browser/resources/settings/BUILD.gn -@@ -72,6 +72,7 @@ build_webui("build") { +@@ -74,6 +74,7 @@ build_webui("build") { web_component_files = [ "a11y_page/a11y_page.ts", "about_page/about_page.ts", @@ -560,7 +459,7 @@ diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resourc "appearance_page/appearance_fonts_page.ts", "appearance_page/appearance_page.ts", "appearance_page/home_url_input.ts", -@@ -371,6 +372,7 @@ build_webui("build") { +@@ -372,6 +373,7 @@ build_webui("build") { ts_composite = true ts_definitions = [ "//tools/typescript/definitions/autofill_private.d.ts", @@ -1113,7 +1012,7 @@ diff --git a/chrome/browser/resources/settings/page_visibility.ts b/chrome/brows diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resources/settings/route.ts --- a/chrome/browser/resources/settings/route.ts +++ b/chrome/browser/resources/settings/route.ts -@@ -183,6 +183,10 @@ function createBrowserSettingsRoutes(): SettingsRoutes { +@@ -187,6 +187,10 @@ function createBrowserSettingsRoutes(): SettingsRoutes { r.FONTS = r.APPEARANCE.createChild('/fonts'); } @@ -1164,7 +1063,7 @@ diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.html diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc --- a/chrome/browser/ui/tab_helpers.cc +++ b/chrome/browser/ui/tab_helpers.cc -@@ -21,6 +21,7 @@ +@@ -20,6 +20,7 @@ #include "chrome/browser/adblock/element_hider_factory.h" #include "chrome/browser/adblock/sitekey_storage_factory.h" #include "chrome/browser/adblock/subscription_service_factory.h" @@ -1172,7 +1071,7 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/breadcrumbs/breadcrumb_manager_tab_helper.h" #include "chrome/browser/browser_process.h" -@@ -343,6 +344,8 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { +@@ -350,6 +351,8 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { } } @@ -1181,7 +1080,7 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc AdblockWebContentObserver::CreateForWebContents( web_contents, adblock::SubscriptionServiceFactory::GetForBrowserContext( -@@ -351,7 +354,8 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { +@@ -358,7 +361,8 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { web_contents->GetBrowserContext()), adblock::SitekeyStorageFactory::GetForBrowserContext( web_contents->GetBrowserContext()), @@ -1252,7 +1151,7 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn import("//components/captive_portal/core/features.gni") import("//components/enterprise/buildflags/buildflags.gni") import("//components/feed/features.gni") -@@ -2699,10 +2698,6 @@ if (!is_android) { +@@ -2751,10 +2750,6 @@ if (!is_android) { sources += [ "../browser/chrome_for_testing/chrome_for_testing_info_bar_browsertest.cc" ] } @@ -1266,16 +1165,15 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn diff --git a/components/adblock/android/BUILD.gn b/components/adblock/android/BUILD.gn --- a/components/adblock/android/BUILD.gn +++ b/components/adblock/android/BUILD.gn -@@ -54,7 +54,7 @@ android_library("adblock_java") { +@@ -95,6 +95,7 @@ android_library("adblock_ui_java") { "//third_party/androidx:androidx_preference_preference_java", ] -- annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] + srcjar_deps = [ ":jni_headers" ] resources_package = "org.chromium.components.adblock" } -@@ -92,7 +92,7 @@ android_resources("java_resources") { +@@ -120,7 +121,7 @@ android_resources("java_ui_resources") { "java/res/layout/adblock_custom_item_settings.xml", "java/res/layout/adblock_filter_lists_list_item.xml", "java/res/xml/adblock_more_options.xml", @@ -1284,6 +1182,107 @@ diff --git a/components/adblock/android/BUILD.gn b/components/adblock/android/BU ] deps = [ ":adblock_strings_grd" ] +diff --git a/components/adblock/android/adblock_jni.cc b/components/adblock/android/adblock_jni.cc +--- a/components/adblock/android/adblock_jni.cc ++++ b/components/adblock/android/adblock_jni.cc +@@ -25,6 +25,7 @@ + #include "base/android/jni_array.h" + #include "base/android/jni_string.h" + #include "base/android/jni_weak_ref.h" ++#include "base/time/time_to_iso8601.h" + #include "base/logging.h" + #include "components/adblock/android/java_bindings_getters.h" + #include "components/adblock/android/jni_headers/AdblockController_jni.h" +@@ -54,6 +55,10 @@ ScopedJavaLocalRef ToJava(JNIEnv* env, + const std::string& url, + const std::string& title, + const std::string& version, ++ adblock::Subscription::InstallationState state, ++ const std::string& installation_time, ++ long download_success_count, ++ long download_error_count, + const std::vector& languages) { + ScopedJavaLocalRef url_param( + env, env->NewObject(url_class.obj(), url_constructor, +@@ -62,12 +67,19 @@ ScopedJavaLocalRef ToJava(JNIEnv* env, + return Java_Subscription_Constructor(env, url_param, + ConvertUTF8ToJavaString(env, title), + ConvertUTF8ToJavaString(env, version), ++ ConvertUTF8ToJavaString(env, Subscription::SubscriptionInstallationStateToString(state)), ++ ConvertUTF8ToJavaString(env, installation_time), ++ download_success_count, ++ download_error_count, + ToJavaArrayOfStrings(env, languages)); + } + + std::vector> CSubscriptionsToJObjects( + JNIEnv* env, + const std::vector>& subscriptions) { ++ auto* controller = adblock::GetController(); ++ raw_ptr metadata = ++ controller->GetMetadata(); + ScopedJavaLocalRef url_class = GetClass(env, "java/net/URL"); + jmethodID url_constructor = MethodID::Get( + env, url_class.obj(), "", "(Ljava/lang/String;)V"); +@@ -76,7 +88,11 @@ std::vector> CSubscriptionsToJObjects( + for (auto& sub : subscriptions) { + jobjects.push_back(ToJava( + env, url_class, url_constructor, sub->GetSourceUrl().spec(), +- sub->GetTitle(), sub->GetCurrentVersion(), std::vector{})); ++ sub->GetTitle(), sub->GetCurrentVersion(), ++ sub->GetInstallationState(), base::TimeToISO8601(sub->GetInstallationTime()), ++ metadata ? metadata->GetDownloadSuccessCount(sub->GetSourceUrl()) : 0, ++ metadata ? metadata->GetDownloadErrorCount(sub->GetSourceUrl()) : 0, ++ std::vector{})); + } + return jobjects; + } +@@ -96,6 +112,9 @@ std::vector> CSubscriptionsToJObjects( + if (sub.url.is_valid()) { + jobjects.push_back(ToJava(env, url_class, url_constructor, + sub.url.spec(), sub.title, "", ++ adblock::Subscription::InstallationState::Unknown, ++ /*installation_time*/ "", ++ /*download_success_count*/ 0, /*download_error_count*/ 0, + sub.languages)); + } + } +@@ -125,6 +144,35 @@ void AdblockJNI::Bind(JavaObjectWeakGlobalRef weak_java_controller) { + weak_java_controller_ = weak_java_controller; + } + ++static void ++JNI_AdblockController_StartUpdate(JNIEnv* env) { ++ adblock::GetController()->StartUpdate(); ++} ++ ++static base::android::ScopedJavaLocalRef ++JNI_AdblockController_GetCustomSubscriptions(JNIEnv* env) { ++ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); ++ if (!adblock::GetController()) { ++ return ToJavaArrayOfObjects(env, ++ std::vector>{}); ++ } ++ ++ return ToJavaArrayOfObjects( ++ env, adblock::CSubscriptionsToJObjects( ++ env, adblock::GetController()->GetCustomSubscriptions())); ++} ++ ++static jboolean JNI_AdblockController_IsPrivilegedFiltersEnabled( ++ JNIEnv* env) { ++ return adblock::GetController()->IsPrivilegedFiltersEnabled() ? JNI_TRUE : JNI_FALSE; ++} ++ ++static void JNI_AdblockController_SetPrivilegedFiltersEnabled( ++ JNIEnv* env, ++ jboolean j_enabled) { ++ adblock::GetController()->SetPrivilegedFiltersEnabled(j_enabled == JNI_TRUE); ++} ++ + void AdblockJNI::OnSubscriptionInstalled(const GURL& url) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + JNIEnv* env = AttachCurrentThread(); diff --git a/components/adblock/android/adblock_strings.grd b/components/adblock/android/adblock_strings.grd --- a/components/adblock/android/adblock_strings.grd +++ b/components/adblock/android/adblock_strings.grd @@ -1488,7 +1487,7 @@ rename to components/adblock/android/java/res/xml/eyeo_adblock_preferences.xml diff --git a/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java b/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java --- a/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java +++ b/components/adblock/android/java/src/org/chromium/components/adblock/AdblockController.java -@@ -85,6 +85,10 @@ public final class AdblockController extends FilteringConfiguration { +@@ -73,6 +73,10 @@ public final class AdblockController extends FilteringConfiguration { private String mTitle; private String mVersion = ""; private String[] mLanguages = {}; @@ -1499,7 +1498,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock public Subscription(final URL url, final String title, final String version) { this.mUrl = url; -@@ -94,11 +98,30 @@ public final class AdblockController extends FilteringConfiguration { +@@ -82,11 +86,30 @@ public final class AdblockController extends FilteringConfiguration { @CalledByNative("Subscription") public Subscription( @@ -1531,7 +1530,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock } public String title() { -@@ -129,6 +152,7 @@ public final class AdblockController extends FilteringConfiguration { +@@ -117,6 +140,7 @@ public final class AdblockController extends FilteringConfiguration { @UiThread public void setAcceptableAdsEnabled(boolean enabled) { @@ -1539,19 +1538,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock if (enabled) addFilterList(mAcceptableAds); else -@@ -164,7 +188,10 @@ public final class AdblockController extends FilteringConfiguration { - if (title != null && !title.isEmpty()) { - recommendedSubscriptions.set(i, - new Subscription(recommendedSubscriptions.get(i).url(), title, -- "" /*version*/, recommendedSubscriptions.get(i).languages())); -+ "" /*version*/, -+ "" /*state*/, "" /*installation_time*/, -+ 0 /*download_success_count*/, 0 /*download_error_count*/, -+ recommendedSubscriptions.get(i).languages())); - break; - } - } -@@ -182,6 +209,27 @@ public final class AdblockController extends FilteringConfiguration { +@@ -144,6 +168,27 @@ public final class AdblockController extends FilteringConfiguration { removeFilterList(url); } @@ -1579,7 +1566,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock @UiThread public List getInstalledSubscriptions() { return (List) (List) Arrays.asList( -@@ -251,6 +299,10 @@ public final class AdblockController extends FilteringConfiguration { +@@ -196,6 +241,10 @@ public final class AdblockController extends FilteringConfiguration { @NativeMethods interface Natives { @@ -1637,7 +1624,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock - final List installed = - AdblockController.getInstance().getInstalledSubscriptions(); - final List recommended = -- AdblockController.getInstance().getRecommendedSubscriptions(getActivity()); +- AdblockController.getInstance().getRecommendedSubscriptions(); - final List customStrings = new ArrayList(); - for (final AdblockController.Subscription subscription : installed) { - if (recommended.contains(subscription)) { @@ -1783,15 +1770,15 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock diff --git a/components/adblock/android/java/src/org/chromium/components/adblock/settings/AdblockSettingsFragment.java b/components/adblock/android/java/src/org/chromium/components/adblock/settings/AdblockSettingsFragment.java --- a/components/adblock/android/java/src/org/chromium/components/adblock/settings/AdblockSettingsFragment.java +++ b/components/adblock/android/java/src/org/chromium/components/adblock/settings/AdblockSettingsFragment.java -@@ -16,6 +16,7 @@ import android.os.Bundle; - import android.util.Log; - import android.view.MotionEvent; - import android.view.View; +@@ -13,6 +13,7 @@ + package org.chromium.components.adblock.settings; + + import android.os.Bundle; +import android.widget.Toast; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; -@@ -34,7 +35,19 @@ public class AdblockSettingsFragment +@@ -32,7 +33,19 @@ public class AdblockSettingsFragment private Preference mFilterLists; private Preference mAllowedDomains; private Preference mMoreOptions; @@ -1812,7 +1799,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock private static final String SETTINGS_ENABLED_KEY = "fragment_adblock_settings_enabled_key"; private static final String SETTINGS_FILTER_LISTS_KEY = "fragment_adblock_settings_filter_lists_key"; -@@ -51,6 +64,16 @@ public class AdblockSettingsFragment +@@ -49,6 +62,16 @@ public class AdblockSettingsFragment private long mOnOffTogleTimestamp; private void bindPreferences() { @@ -1829,19 +1816,17 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock mAdblockEnabled = (ChromeSwitchPreference) findPreference(SETTINGS_ENABLED_KEY); mFilterLists = findPreference(SETTINGS_FILTER_LISTS_KEY); mAcceptableAdsEnabled = (ChromeSwitchPreference) findPreference(SETTINGS_AA_ENABLED_KEY); -@@ -59,14 +82,28 @@ public class AdblockSettingsFragment +@@ -62,14 +85,25 @@ public class AdblockSettingsFragment } private void applyAdblockEnabled(boolean enabledValue) { +- mFilterLists.setEnabled(enabledValue); +- mAcceptableAdsEnabled.setEnabled(enabledValue); + mStartUpdate.setEnabled(enabledValue); + mPrivilegedFilters.setEnabled(enabledValue); - mFilterLists.setEnabled(enabledValue); - mAcceptableAdsEnabled.setEnabled(enabledValue); -+ mAcceptableAdsEnabled.setVisible(false); mAllowedDomains.setEnabled(enabledValue); mMoreOptions.setEnabled(enabledValue); -- mMoreOptions.setVisible(AdblockController.getInstance().areMoreOptionsEnabled()); -+ mMoreOptions.setVisible(false); + mMoreOptions.setVisible(areMoreOptionsEnabled()); } private void synchronizePreferences() { @@ -1859,7 +1844,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock boolean enabled = AdblockController.getInstance().isEnabled(); mAdblockEnabled.setChecked(enabled); mAdblockEnabled.setOnPreferenceChangeListener(this); -@@ -103,7 +140,7 @@ public class AdblockSettingsFragment +@@ -107,7 +141,7 @@ public class AdblockSettingsFragment @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { @@ -1868,7 +1853,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock bindPreferences(); synchronizePreferences(); } -@@ -122,6 +159,8 @@ public class AdblockSettingsFragment +@@ -126,6 +160,8 @@ public class AdblockSettingsFragment maybeEnableMoreOptions(); applyAdblockEnabled((Boolean) newValue); @@ -1958,9 +1943,9 @@ diff --git a/components/adblock/content/browser/adblock_webcontents_observer.cc + void TraceHandleLoadComplete( - content::RenderFrameHost* frame_host, + intptr_t rfh_trace_id, @@ -66,18 +68,32 @@ void TraceHandleLoadComplete( - TRACE_ID_LOCAL(frame_host)); + TRACE_ID_LOCAL(rfh_trace_id)); } +bool IsFilteringNeeded(content::RenderFrameHost* frame, HostContentSettingsMap* settings_map) { @@ -2046,7 +2031,7 @@ diff --git a/components/adblock/content/browser/content_security_policy_injector diff --git a/components/adblock/content/browser/element_hider_impl.cc b/components/adblock/content/browser/element_hider_impl.cc --- a/components/adblock/content/browser/element_hider_impl.cc +++ b/components/adblock/content/browser/element_hider_impl.cc -@@ -190,12 +190,12 @@ void InsertUserCSSAndApplyElemHidingEmuJS( +@@ -208,12 +208,12 @@ void InsertUserCSSAndApplyElemHidingEmuJS( if (!frame_host) { // Render frame host was destroyed before element hiding could be applied. // This is not a bug, just legitimate a race condition. @@ -2100,7 +2085,7 @@ diff --git a/components/adblock/content/browser/subscription_service_factory_bas } base::DeleteFile(path); return result; -@@ -202,10 +204,11 @@ SubscriptionServiceFactoryBase::ConvertCustomFilters( +@@ -201,10 +203,11 @@ SubscriptionServiceFactoryBase::ConvertCustomFilters( void SubscriptionServiceFactoryBase::ConvertFilterListFile( const GURL& subscription_url, const base::FilePath& path, @@ -2204,9 +2189,8 @@ diff --git a/components/adblock/core/activeping_telemetry_topic_provider.cc b/co deleted file mode 100644 --- a/components/adblock/core/activeping_telemetry_topic_provider.cc +++ /dev/null -@@ -1,243 +0,0 @@ --/* -- * This file is part of eyeo Chromium SDK, +@@ -1,285 +0,0 @@ +-/* This file is part of eyeo Chromium SDK, - * Copyright (C) 2006-present eyeo GmbH - * - * eyeo Chromium SDK is free software: you can redistribute it and/or modify @@ -2228,8 +2212,10 @@ deleted file mode 100644 -#include "base/json/json_writer.h" -#include "base/system/sys_info.h" -#include "base/time/time.h" +-#include "base/time/time_to_iso8601.h" -#include "base/uuid.h" -#include "components/adblock/core/common/adblock_prefs.h" +-#include "components/adblock/core/subscription/subscription_config.h" - -namespace adblock { -namespace { @@ -2277,12 +2263,12 @@ deleted file mode 100644 -ActivepingTelemetryTopicProvider::ActivepingTelemetryTopicProvider( - utils::AppInfo app_info, - PrefService* pref_service, -- AdblockController* adblock_controller, +- SubscriptionService* subscription_service, - const GURL& base_url, - const std::string& auth_token) - : app_info_(std::move(app_info)), - pref_service_(pref_service), -- adblock_controller_(adblock_controller), +- subscription_service_(subscription_service), - base_url_(base_url), - auth_token_(auth_token) {} - @@ -2323,35 +2309,13 @@ deleted file mode 100644 - return auth_token_; -} - --void ActivepingTelemetryTopicProvider::GetPayload(PayloadCallback callback) { -- base::Value::Dict payload; -- payload.Set("addon_name", "eyeo-chromium-sdk"); -- payload.Set("addon_version", "2.0.0"); -- payload.Set("application", app_info_.name); -- payload.Set("application_version", app_info_.version); -- payload.Set("aa_active", adblock_controller_->IsAcceptableAdsEnabled()); -- payload.Set("platform", base::SysInfo::OperatingSystemName()); -- payload.Set("platform_version", base::SysInfo::OperatingSystemVersion()); -- // Server requires the following parameters to either have a correct, -- // non-empty value, or not be present at all. We shall not send empty strings. -- AppendStringIfPresent(pref_service_, common::prefs::kTelemetryLastPingTag, -- "last_ping_tag", payload); -- AppendStringIfPresent(pref_service_, common::prefs::kTelemetryFirstPingTime, -- "first_ping", payload); -- AppendStringIfPresent(pref_service_, common::prefs::kTelemetryLastPingTime, -- "last_ping", payload); -- AppendStringIfPresent(pref_service_, -- common::prefs::kTelemetryPreviousLastPingTime, -- "previous_last_ping", payload); -- -- base::Value::Dict root; -- root.Set("payload", std::move(payload)); +-void ActivepingTelemetryTopicProvider::GetPayload( +- PayloadCallback callback) const { - std::string serialized; - // The only way JSONWriter::Write() can return fail is then the Value - // contains lists or dicts that are too deep (200 levels). We just built the - // payload and root objects here, they should be really shallow. -- CHECK(base::JSONWriter::Write(root, &serialized)); -- VLOG(1) << "[eyeo] Telemetry ping payload: " << serialized; +- CHECK(base::JSONWriter::Write(GetPayloadInternal(), &serialized)); - std::move(callback).Run(std::move(serialized)); -} - @@ -2409,6 +2373,35 @@ deleted file mode 100644 - UpdatePrefs(*ping_response_time); -} - +-void ActivepingTelemetryTopicProvider::FetchDebugInfo( +- DebugInfoCallback callback) const { +- base::Value::Dict debug_info; +- debug_info.Set("endpoint_url", GetEndpointURL().spec()); +- debug_info.Set("payload", GetPayloadInternal()); +- debug_info.Set("first_ping", +- pref_service_->GetString( +- adblock::common::prefs::kTelemetryFirstPingTime)); +- debug_info.Set("time_of_next_request", +- base::TimeToISO8601(GetTimeOfNextRequest())); +- debug_info.Set( +- "last_ping", +- pref_service_->GetString(adblock::common::prefs::kTelemetryLastPingTime)); +- debug_info.Set("previous_last_ping", +- pref_service_->GetString( +- adblock::common::prefs::kTelemetryPreviousLastPingTime)); +- debug_info.Set("next_ping", +- base::TimeToISO8601(pref_service_->GetTime( +- adblock::common::prefs::kTelemetryNextPingTime))); +- +- std::string serialized; +- // The only way JSONWriter::Write() can return fail is then the Value +- // contains lists or dicts that are too deep (200 levels). We just built the +- // payload and root objects here, they should be really shallow. +- CHECK(base::JSONWriter::WriteWithOptions( +- debug_info, base::JsonOptions::OPTIONS_PRETTY_PRINT, &serialized)); +- std::move(callback).Run(std::move(serialized)); +-} +- -void ActivepingTelemetryTopicProvider::ScheduleNextPing(base::TimeDelta delay) { - pref_service_->SetTime(common::prefs::kTelemetryNextPingTime, - base::Time::Now() + delay); @@ -2435,6 +2428,40 @@ deleted file mode 100644 - tag.AsLowercaseString()); -} - +-base::Value ActivepingTelemetryTopicProvider::GetPayloadInternal() const { +- base::Value::Dict payload; +- bool aa_enabled = false; +- auto* adblock_configuration = +- subscription_service_->GetAdblockFilteringConfiguration(); +- if (adblock_configuration) { +- aa_enabled = base::ranges::any_of( +- adblock_configuration->GetFilterLists(), +- [&](const auto& url) { return url == AcceptableAdsUrl(); }); +- } +- payload.Set("addon_name", "eyeo-chromium-sdk"); +- payload.Set("addon_version", "2.0.0"); +- payload.Set("application", app_info_.name); +- payload.Set("application_version", app_info_.version); +- payload.Set("aa_active", aa_enabled); +- payload.Set("platform", base::SysInfo::OperatingSystemName()); +- payload.Set("platform_version", base::SysInfo::OperatingSystemVersion()); +- // Server requires the following parameters to either have a correct, +- // non-empty value, or not be present at all. We shall not send empty strings. +- AppendStringIfPresent(pref_service_, common::prefs::kTelemetryLastPingTag, +- "last_ping_tag", payload); +- AppendStringIfPresent(pref_service_, common::prefs::kTelemetryFirstPingTime, +- "first_ping", payload); +- AppendStringIfPresent(pref_service_, common::prefs::kTelemetryLastPingTime, +- "last_ping", payload); +- AppendStringIfPresent(pref_service_, +- common::prefs::kTelemetryPreviousLastPingTime, +- "previous_last_ping", payload); +- +- base::Value::Dict root; +- root.Set("payload", std::move(payload)); +- return base::Value(std::move(root)); +-} +- -// static -void ActivepingTelemetryTopicProvider::SetHttpPortForTesting( - int http_port_for_testing) { @@ -2452,7 +2479,7 @@ diff --git a/components/adblock/core/activeping_telemetry_topic_provider.h b/com deleted file mode 100644 --- a/components/adblock/core/activeping_telemetry_topic_provider.h +++ /dev/null -@@ -1,84 +0,0 @@ +@@ -1,87 +0,0 @@ -/* - * This file is part of eyeo Chromium SDK, - * Copyright (C) 2006-present eyeo GmbH @@ -2475,9 +2502,9 @@ deleted file mode 100644 - -#include "base/memory/raw_ptr.h" -#include "base/time/time.h" --#include "components/adblock/core/adblock_controller.h" -#include "components/adblock/core/adblock_telemetry_service.h" -#include "components/adblock/core/common/adblock_utils.h" +-#include "components/adblock/core/subscription/subscription_service.h" -#include "components/prefs/pref_service.h" - -namespace adblock { @@ -2496,7 +2523,7 @@ deleted file mode 100644 - public: - ActivepingTelemetryTopicProvider(utils::AppInfo app_info, - PrefService* pref_service, -- AdblockController* adblock_controller, +- SubscriptionService* subscription_service, - const GURL& base_url, - const std::string& auth_token); - ~ActivepingTelemetryTopicProvider() final; @@ -2506,7 +2533,7 @@ deleted file mode 100644 - - GURL GetEndpointURL() const final; - std::string GetAuthToken() const final; -- void GetPayload(PayloadCallback callback) final; +- void GetPayload(PayloadCallback callback) const final; - - // Normally 12 hours since last ping, 1 hour in case of retries. - base::Time GetTimeOfNextRequest() const final; @@ -2515,6 +2542,8 @@ deleted file mode 100644 - // from |response_content|. - void ParseResponse(std::unique_ptr response_content) final; - +- void FetchDebugInfo(DebugInfoCallback callback) const final; +- - // Sets the port used by the embedded http server required for browser tests. - // Must be called before the first call to DefaultBaseUrl(). - static void SetHttpPortForTesting(int http_port_for_testing); @@ -2526,10 +2555,11 @@ deleted file mode 100644 - private: - void ScheduleNextPing(base::TimeDelta delay); - void UpdatePrefs(const std::string& ping_response_time); +- base::Value GetPayloadInternal() const; - - const utils::AppInfo app_info_; - raw_ptr pref_service_; -- raw_ptr adblock_controller_; +- raw_ptr subscription_service_; - const GURL base_url_; - const std::string auth_token_; -}; @@ -2717,7 +2747,7 @@ diff --git a/components/adblock/core/adblock_telemetry_service.cc b/components/a deleted file mode 100644 --- a/components/adblock/core/adblock_telemetry_service.cc +++ /dev/null -@@ -1,244 +0,0 @@ +@@ -1,258 +0,0 @@ -/* - * This file is part of eyeo Chromium SDK, - * Copyright (C) 2006-present eyeo GmbH @@ -2739,6 +2769,7 @@ deleted file mode 100644 - -#include - +-#include "base/barrier_callback.h" -#include "base/functional/bind.h" -#include "base/memory/weak_ptr.h" -#include "base/strings/string_number_conversions.h" @@ -2835,6 +2866,10 @@ deleted file mode 100644 - url_loader_.reset(); - } - +- const std::unique_ptr& GetTopicProvider() const { +- return topic_provider_; +- } +- - private: - bool IsRequestInFlight() { - return url_loader_ != nullptr || weak_ptr_factory_.HasWeakPtrs(); @@ -2929,6 +2964,15 @@ deleted file mode 100644 - OnEnabledStateChangedInternal(); -} - +-void AdblockTelemetryService::GetTopicProvidersDebugInfo( +- TopicProvidersDebugInfoCallback service_callback) const { +- const auto barrier_callback = base::BarrierCallback( +- ongoing_conversations_.size(), std::move(service_callback)); +- for (const auto& conversation : ongoing_conversations_) { +- conversation->GetTopicProvider()->FetchDebugInfo(barrier_callback); +- } +-} +- -void AdblockTelemetryService::OnEnabledStateChangedInternal() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (adblock_filtering_configuration_->IsEnabled() && !timer_.IsRunning()) { @@ -2966,7 +3010,7 @@ diff --git a/components/adblock/core/adblock_telemetry_service.h b/components/ad deleted file mode 100644 --- a/components/adblock/core/adblock_telemetry_service.h +++ /dev/null -@@ -1,107 +0,0 @@ +@@ -1,120 +0,0 @@ -/* - * This file is part of eyeo Chromium SDK, - * Copyright (C) 2006-present eyeo GmbH @@ -2991,6 +3035,7 @@ deleted file mode 100644 -#include -#include - +-#include "base/functional/callback_forward.h" -#include "base/memory/raw_ptr.h" -#include "base/sequence_checker.h" -#include "base/time/time.h" @@ -3018,6 +3063,7 @@ deleted file mode 100644 - class TopicProvider { - public: - using PayloadCallback = base::OnceCallback; +- using DebugInfoCallback = base::OnceCallback; - virtual ~TopicProvider() = default; - // Endpoint URL on the Telemetry server onto which requests should be sent. - virtual GURL GetEndpointURL() const = 0; @@ -3025,7 +3071,7 @@ deleted file mode 100644 - virtual std::string GetAuthToken() const = 0; - // Data uploaded with the request, should be valid for the schema - // present on the server. Async to allow querying asynchronous data sources. -- virtual void GetPayload(PayloadCallback callback) = 0; +- virtual void GetPayload(PayloadCallback callback) const = 0; - // Returns the desired time when AdblockTelemetryService should make the - // next network request. - virtual base::Time GetTimeOfNextRequest() const = 0; @@ -3034,6 +3080,10 @@ deleted file mode 100644 - // response errors via GetTimeToNextRequest(). - virtual void ParseResponse( - std::unique_ptr response_content) = 0; +- // Gets debugging info to be logged on chrome://adblock-internals. Do not +- // put any secrets here (tokens, api keys). Asynchronous to allow reusing +- // the async logic of GetPayload, if needed. +- virtual void FetchDebugInfo(DebugInfoCallback callback) const = 0; - }; - AdblockTelemetryService( - FilteringConfiguration* filtering_configuration, @@ -3041,6 +3091,8 @@ deleted file mode 100644 - base::TimeDelta initial_delay, - base::TimeDelta check_interval); - ~AdblockTelemetryService() override; +- using TopicProvidersDebugInfoCallback = +- base::OnceCallback)>; - - // Add all required topic providers before calling Start(). - void AddTopicProvider(std::unique_ptr topic_provider); @@ -3056,6 +3108,11 @@ deleted file mode 100644 - // FilteringConfiguration::Observer - void OnEnabledStateChanged(FilteringConfiguration* config) override; - +- // Collects debug information from all topic providers. Runs |callback| once +- // all topic providers have provided their info. +- void GetTopicProvidersDebugInfo( +- TopicProvidersDebugInfoCallback callback) const; +- - private: - void OnEnabledStateChangedInternal(); - void RunPeriodicCheck(); @@ -3251,7 +3308,7 @@ diff --git a/components/adblock/core/configuration/filtering_configuration.h b/c + // Adding an existing filter list, or removing a non-existing filter list, are // NOPs and do not notify observers. - virtual void AddFilterList(GURL url) = 0; + virtual void AddFilterList(const GURL& url) = 0; diff --git a/components/adblock/core/configuration/persistent_filtering_configuration.cc b/components/adblock/core/configuration/persistent_filtering_configuration.cc --- a/components/adblock/core/configuration/persistent_filtering_configuration.cc +++ b/components/adblock/core/configuration/persistent_filtering_configuration.cc @@ -3296,8 +3353,8 @@ diff --git a/components/adblock/core/configuration/persistent_filtering_configur + void SetPrivilegedFiltersEnabled(bool enabled) final; + bool IsPrivilegedFiltersEnabled() final; + - void AddFilterList(GURL url) final; - void RemoveFilterList(GURL url) final; + void AddFilterList(const GURL& url) final; + void RemoveFilterList(const GURL& url) final; std::vector GetFilterLists() const final; diff --git a/components/adblock/core/converter/flatbuffer_converter.cc b/components/adblock/core/converter/flatbuffer_converter.cc --- a/components/adblock/core/converter/flatbuffer_converter.cc @@ -3903,7 +3960,7 @@ diff --git a/components/adblock/core/subscription/subscription_collection_impl.c diff --git a/components/adblock/core/subscription/subscription_config.cc b/components/adblock/core/subscription/subscription_config.cc --- a/components/adblock/core/subscription/subscription_config.cc +++ b/components/adblock/core/subscription/subscription_config.cc -@@ -221,17 +221,17 @@ const std::vector& config::GetKnownSubscriptions() { +@@ -239,17 +239,17 @@ const std::vector& config::GetKnownSubscriptions() { SubscriptionFirstRunBehavior::SubscribeIfLocaleMatch, SubscriptionPrivilegedFilterStatus::Forbidden}, {AcceptableAdsUrl(), @@ -3926,7 +3983,7 @@ diff --git a/components/adblock/core/subscription/subscription_config.cc b/compo {GURL(GetHost() + "i_dont_care_about_cookies.txt"), "I don't care about cookies", {}, -@@ -262,13 +262,13 @@ const std::vector& config::GetKnownSubscriptions() { +@@ -280,13 +280,13 @@ const std::vector& config::GetKnownSubscriptions() { {}, SubscriptionUiVisibility::Invisible, SubscriptionFirstRunBehavior::Ignore, @@ -3942,7 +3999,7 @@ diff --git a/components/adblock/core/subscription/subscription_config.cc b/compo // You can customize subscriptions available on first run and in settings // here. Items are displayed in settings in order declared here. See -@@ -297,7 +297,7 @@ bool config::AllowPrivilegedFilters(const GURL& url) { +@@ -315,7 +315,7 @@ bool config::AllowPrivilegedFilters(const GURL& url) { for (const auto& cur : GetKnownSubscriptions()) { if (cur.url == url) { return cur.privileged_status == @@ -3951,7 +4008,7 @@ diff --git a/components/adblock/core/subscription/subscription_config.cc b/compo } } -@@ -307,9 +307,7 @@ bool config::AllowPrivilegedFilters(const GURL& url) { +@@ -325,9 +325,7 @@ bool config::AllowPrivilegedFilters(const GURL& url) { const std::vector& config::GetPreloadedSubscriptionConfiguration() { static const std::vector preloaded_subscriptions = @@ -4300,7 +4357,7 @@ new file mode 100644 diff --git a/components/resources/BUILD.gn b/components/resources/BUILD.gn --- a/components/resources/BUILD.gn +++ b/components/resources/BUILD.gn -@@ -79,7 +79,6 @@ grit("components_resources") { +@@ -76,7 +76,6 @@ grit("components_resources") { deps += [ "//components/resources/adblocking:copy_snippets_lib", @@ -4311,10 +4368,10 @@ diff --git a/components/resources/BUILD.gn b/components/resources/BUILD.gn diff --git a/components/resources/adblock_resources.grdp b/components/resources/adblock_resources.grdp --- a/components/resources/adblock_resources.grdp +++ b/components/resources/adblock_resources.grdp -@@ -20,7 +20,4 @@ - +@@ -21,7 +21,4 @@ + - - - @@ -4369,9 +4426,9 @@ diff --git a/components/resources/adblocking/BUILD.gn b/components/resources/adb - ] -} - - copy("copy_snippets_lib") { - if (is_debug) { - sources = [ "//components/resources/adblocking/snippets/dist/isolated-first.source.jst" ] + action("prepare_snippets_deps") { + script = "//tools/eyeo/snippets_deps.py" + inputs = ["//components/resources/adblocking/snippets/dist"] diff --git a/components/resources/adblocking/elemhide_for_selector.jst b/components/resources/adblocking/elemhide_for_selector.jst --- a/components/resources/adblocking/elemhide_for_selector.jst +++ b/components/resources/adblocking/elemhide_for_selector.jst @@ -8117,7 +8174,7 @@ diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/b diff --git a/third_party/blink/renderer/core/css/style_engine.h b/third_party/blink/renderer/core/css/style_engine.h --- a/third_party/blink/renderer/core/css/style_engine.h +++ b/third_party/blink/renderer/core/css/style_engine.h -@@ -242,6 +242,7 @@ class CORE_EXPORT StyleEngine final : public GarbageCollected, +@@ -243,6 +243,7 @@ class CORE_EXPORT StyleEngine final : public GarbageCollected, const ComputedStyle* embedder_style) const; void ViewportStyleSettingChanged(); @@ -8158,29 +8215,14 @@ diff --git a/third_party/blink/renderer/core/exported/web_document.cc b/third_pa diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec -@@ -655,10 +655,6 @@ +@@ -678,7 +678,6 @@ + "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/hats/resources.grd": { "META": {"sizes": {"includes": [10]}}, "includes": [4980], - }, -- "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/adblock_internals/resources.grd": { -- "META": {"sizes": {"includes": [10],}}, -- "includes": [4720], - }, # END chrome/ WebUI resources section # START chrome/ miscellaneous section. -@@ -1221,6 +1217,11 @@ - "includes": [7440], - }, - -+ "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/adblock_internals/resources.grd": { -+ "META": {"sizes": {"includes": [10],}}, -+ "includes": [8000], -+ }, -+ - # END "everything else" section. - # Everything but chrome/, components/, content/, and ios/ - diff --git a/tools/typescript/definitions/adblock_private.d.ts b/tools/typescript/definitions/adblock_private.d.ts --- a/tools/typescript/definitions/adblock_private.d.ts +++ b/tools/typescript/definitions/adblock_private.d.ts diff --git a/build/patches/00Fix-chromium-build-bugs.patch b/build/patches/00Fix-chromium-build-bugs.patch index 7afc431f..7fecc35e 100644 --- a/build/patches/00Fix-chromium-build-bugs.patch +++ b/build/patches/00Fix-chromium-build-bugs.patch @@ -7,7 +7,6 @@ Subject: Fix chromium build bugs .../AutofillSaveCardBottomSheetBridge.java | 2 +- .../org/chromium/chrome/browser/tab/TabImpl.java | 2 +- ...me_browser_main_extra_parts_nacl_deprecation.cc | 2 ++ - chrome/browser/download/download_ui_model.cc | 2 ++ .../api/autofill_private/autofill_util.cc | 2 ++ .../api/reading_list/reading_list_event_router.h | 2 +- .../navigation_predictor_metrics_document_data.h | 2 ++ @@ -20,7 +19,6 @@ Subject: Fix chromium build bugs chrome/browser/usb/chrome_usb_delegate.cc | 2 ++ .../autofill/core/browser/data_model/address.cc | 4 ++-- components/autofill/core/browser/form_structure.cc | 2 ++ - .../core/browser/ui/suggestion_selection.cc | 12 +----------- .../core/browser/webdata/autofill_table.cc | 12 ++++++------ components/omnibox/browser/omnibox_field_trial.cc | 4 ++-- .../phishing_classifier/phishing_image_embedder.cc | 14 +++----------- @@ -28,7 +26,7 @@ Subject: Fix chromium build bugs crypto/BUILD.gn | 3 +++ net/BUILD.gn | 1 + third_party/libevent/BUILD.gn | 2 ++ - 25 files changed, 48 insertions(+), 45 deletions(-) + 23 files changed, 45 insertions(+), 34 deletions(-) diff --git a/BUILD.gn b/BUILD.gn --- a/BUILD.gn @@ -56,7 +54,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/Autofi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java -@@ -385,7 +385,7 @@ public class TabImpl implements Tab { +@@ -401,7 +401,7 @@ public class TabImpl implements Tab { } @Override @@ -84,29 +82,10 @@ diff --git a/chrome/browser/chrome_browser_main_extra_parts_nacl_deprecation.cc } // namespace -diff --git a/chrome/browser/download/download_ui_model.cc b/chrome/browser/download/download_ui_model.cc ---- a/chrome/browser/download/download_ui_model.cc -+++ b/chrome/browser/download/download_ui_model.cc -@@ -177,6 +177,7 @@ bool ShouldShowWarningForNoSafeBrowsing(Profile* profile) { - #endif - } - -+#if !BUILDFLAG(IS_ANDROID) - bool CanUserTurnOnSafeBrowsing(Profile* profile) { - #if BUILDFLAG(FULL_SAFE_BROWSING) - return !safe_browsing::IsSafeBrowsingPolicyManaged(*profile->GetPrefs()); -@@ -184,6 +185,7 @@ bool CanUserTurnOnSafeBrowsing(Profile* profile) { - return false; - #endif - } -+#endif - - } // namespace - diff --git a/chrome/browser/extensions/api/autofill_private/autofill_util.cc b/chrome/browser/extensions/api/autofill_private/autofill_util.cc --- a/chrome/browser/extensions/api/autofill_private/autofill_util.cc +++ b/chrome/browser/extensions/api/autofill_private/autofill_util.cc -@@ -42,6 +42,7 @@ namespace { +@@ -43,6 +43,7 @@ namespace { // Get the multi-valued element for |type| and return it as a |vector|. // TODO(khorimoto): remove this function since multi-valued types are // deprecated. @@ -114,7 +93,7 @@ diff --git a/chrome/browser/extensions/api/autofill_private/autofill_util.cc b/c std::vector GetList(const autofill::AutofillProfile& profile, autofill::ServerFieldType type) { std::vector list; -@@ -65,6 +66,7 @@ std::vector GetList(const autofill::AutofillProfile& profile, +@@ -66,6 +67,7 @@ std::vector GetList(const autofill::AutofillProfile& profile, return list; } @@ -149,7 +128,7 @@ diff --git a/chrome/browser/navigation_predictor/navigation_predictor_metrics_do diff --git a/chrome/browser/safe_browsing/BUILD.gn b/chrome/browser/safe_browsing/BUILD.gn --- a/chrome/browser/safe_browsing/BUILD.gn +++ b/chrome/browser/safe_browsing/BUILD.gn -@@ -210,6 +210,7 @@ static_library("safe_browsing") { +@@ -182,6 +182,7 @@ static_library("safe_browsing") { "//components/version_info", "//content/public/browser", "//services/preferences/public/mojom:mojom", @@ -194,7 +173,7 @@ diff --git a/chrome/browser/ui/views/side_panel/read_anything/read_anything_cont diff --git a/chrome/browser/ui/views/tabs/tab.cc b/chrome/browser/ui/views/tabs/tab.cc --- a/chrome/browser/ui/views/tabs/tab.cc +++ b/chrome/browser/ui/views/tabs/tab.cc -@@ -536,7 +536,7 @@ bool Tab::OnMousePressed(const ui::MouseEvent& event) { +@@ -540,7 +540,7 @@ bool Tab::OnMousePressed(const ui::MouseEvent& event) { } bool Tab::OnMouseDragged(const ui::MouseEvent& event) { @@ -256,17 +235,17 @@ diff --git a/chrome/browser/usb/chrome_usb_delegate.cc b/chrome/browser/usb/chro diff --git a/components/autofill/core/browser/data_model/address.cc b/components/autofill/core/browser/data_model/address.cc --- a/components/autofill/core/browser/data_model/address.cc +++ b/components/autofill/core/browser/data_model/address.cc -@@ -30,7 +30,7 @@ +@@ -40,7 +40,7 @@ Address::Address(AddressCountryCode country_code) + !i18n_model_definition::IsCustomHierarchyAvailableForCountry( + country_code)) {} - namespace autofill { +-Address::~Address() = default; ++Address::~Address() = default --Address::Address() : structured_address_(std::make_unique()){}; -+Address::Address() : structured_address_(std::make_unique()){} + Address& Address::operator=(const Address& address) { + if (this == &address) { +@@ -59,7 +59,7 @@ Address& Address::operator=(const Address& address) { - Address::Address(const Address& address) { - *this = address; -@@ -44,7 +44,7 @@ Address& Address::operator=(const Address& address) { - } structured_address_->CopyFrom(address.GetStructuredAddress()); return *this; -}; @@ -293,32 +272,10 @@ diff --git a/components/autofill/core/browser/form_structure.cc b/components/aut void PopulateRandomizedFormMetadata(const RandomizedEncoder& encoder, const FormStructure& form, -diff --git a/components/autofill/core/browser/ui/suggestion_selection.cc b/components/autofill/core/browser/ui/suggestion_selection.cc ---- a/components/autofill/core/browser/ui/suggestion_selection.cc -+++ b/components/autofill/core/browser/ui/suggestion_selection.cc -@@ -152,17 +152,7 @@ Suggestion GetFillFullNameSuggestion(Suggestion::BackendId backend_id) { - // whole form. - // TODO(crbug.com/1459990): Use this once the new popup with submenus - // implementation is complete. --Suggestion GetFillEverythingFromAddressProfileSuggestion( -- Suggestion::BackendId backend_id) { -- Suggestion suggestion(l10n_util::GetStringUTF16( -- IDS_AUTOFILL_FILL_EVERYTHING_FROM_ADDRESS_PROFILE_POPUP_OPTION_SELECTED)); -- suggestion.popup_item_id = PopupItemId::kFillEverythingFromAddressProfile; -- suggestion.icon = "magicIcon"; -- suggestion.payload = backend_id; -- suggestion.acceptance_a11y_announcement = l10n_util::GetStringUTF16( -- IDS_AUTOFILL_A11Y_ANNOUNCE_FILL_EVERYTHING_FROM_ADDRESS_PROFILE_POPUP_OPTION_SELECTED); -- return suggestion; --} -+// (UAZO) removed due error: unused function - - // Append new suggestions to `suggestions` based on the `ServerFieldType` list - // provided. Suggestions are not added if their info is not found in the diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/components/autofill/core/browser/webdata/autofill_table.cc --- a/components/autofill/core/browser/webdata/autofill_table.cc +++ b/components/autofill/core/browser/webdata/autofill_table.cc -@@ -412,12 +412,12 @@ void InsertBuilder(sql::Database* db, +@@ -426,12 +426,12 @@ void InsertBuilder(sql::Database* db, } // Renames the table `from` into `to` and returns true if successful. @@ -340,7 +297,7 @@ diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/compon diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omnibox/browser/omnibox_field_trial.cc --- a/components/omnibox/browser/omnibox_field_trial.cc +++ b/components/omnibox/browser/omnibox_field_trial.cc -@@ -1091,11 +1091,11 @@ MLConfig::MLConfig(const MLConfig&) = default; +@@ -1090,11 +1090,11 @@ MLConfig::MLConfig(const MLConfig&) = default; ScopedMLConfigForTesting::ScopedMLConfigForTesting() : original_config_(std::make_unique(GetMLConfig())) { @@ -381,7 +338,7 @@ diff --git a/components/safe_browsing/content/renderer/phishing_classifier/phish diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc --- a/content/browser/browser_interface_binders.cc +++ b/content/browser/browser_interface_binders.cc -@@ -353,6 +353,7 @@ void BindDateTimeChooserForFrame( +@@ -346,6 +346,7 @@ void BindDateTimeChooserForFrame( void BindTextSuggestionHostForFrame( RenderFrameHost* host, mojo::PendingReceiver receiver) { @@ -405,7 +362,7 @@ diff --git a/crypto/BUILD.gn b/crypto/BUILD.gn diff --git a/net/BUILD.gn b/net/BUILD.gn --- a/net/BUILD.gn +++ b/net/BUILD.gn -@@ -1659,6 +1659,7 @@ component("net") { +@@ -1651,6 +1651,7 @@ component("net") { configs -= [ "//build/config/compiler:default_optimization" ] configs += [ "//build/config/compiler:optimize_max" ] } diff --git a/build/patches/00Internal-firewall.patch b/build/patches/00Internal-firewall.patch index c8e63c64..969d48d1 100644 --- a/build/patches/00Internal-firewall.patch +++ b/build/patches/00Internal-firewall.patch @@ -34,10 +34,11 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html services/network/network_context.cc | 73 +++ .../network/public/cpp/simple_url_loader.cc | 18 + .../network/public/cpp/simple_url_loader.h | 3 + - .../loader/fetch/url_loader/url_loader.cc | 145 +++++- + .../platform/loader/fetch/fetch_utils.cc | 171 ++++++- + .../loader/fetch/url_loader/url_loader.cc | 4 +- .../scripts/auditor/auditor.py | 1 + .../scripts/auditor/util.py | 1 + - 28 files changed, 1502 insertions(+), 16 deletions(-) + 29 files changed, 1527 insertions(+), 21 deletions(-) create mode 100644 services/firewall/public/BUILD.gn create mode 100644 services/firewall/public/firewall_features.cc create mode 100644 services/firewall/public/firewall_features.h @@ -55,7 +56,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -2495,6 +2495,7 @@ static_library("browser") { +@@ -2552,6 +2552,7 @@ static_library("browser") { "//third_party/ungoogled:switches", "//services/device/public/mojom", "//services/device/public/mojom:usb", @@ -66,7 +67,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -202,6 +202,7 @@ +@@ -203,6 +203,7 @@ #include "sandbox/policy/features.h" #include "sandbox/policy/switches.h" #include "services/device/public/cpp/device_features.h" @@ -74,7 +75,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc #include "services/media_session/public/cpp/features.h" #include "services/network/public/cpp/features.h" #include "services/network/public/cpp/network_switches.h" -@@ -8329,6 +8330,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -8592,6 +8593,11 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(page_info::kPageInfoHideSiteSettings)}, #endif // !BUILDFLAG(IS_ANDROID) @@ -235,7 +236,7 @@ diff --git a/components/webapps/browser/android/webapk/webapk_icon_hasher.cc b/c diff --git a/net/BUILD.gn b/net/BUILD.gn --- a/net/BUILD.gn +++ b/net/BUILD.gn -@@ -1098,6 +1098,7 @@ component("net") { +@@ -1096,6 +1096,7 @@ component("net") { "//build:chromeos_buildflags", "//net/data/ssl/chrome_root_store:gen_root_store_inc", "//net/http:transport_security_state_generated_files", @@ -270,7 +271,7 @@ diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_reque } URLRequestHttpJob::~URLRequestHttpJob() { -@@ -574,6 +577,18 @@ void URLRequestHttpJob::MaybeStartTransactionInternal(int result) { +@@ -555,6 +558,18 @@ void URLRequestHttpJob::MaybeStartTransactionInternal(int result) { void URLRequestHttpJob::StartTransactionInternal() { DCHECK(!override_response_headers_); @@ -1528,7 +1529,7 @@ new file mode 100644 diff --git a/services/network/network_context.cc b/services/network/network_context.cc --- a/services/network/network_context.cc +++ b/services/network/network_context.cc -@@ -87,6 +87,7 @@ +@@ -88,6 +88,7 @@ #include "net/url_request/url_request.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_builder.h" @@ -1536,7 +1537,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont #include "services/network/brokered_client_socket_factory.h" #include "services/network/cookie_manager.h" #include "services/network/cors/cors_url_loader_factory.h" -@@ -1625,6 +1626,9 @@ void NetworkContext::OnNewSCTAuditingReportSent() { +@@ -1622,6 +1623,9 @@ void NetworkContext::OnNewSCTAuditingReportSent() { void NetworkContext::CreateUDPSocket( mojo::PendingReceiver receiver, mojo::PendingRemote listener) { @@ -1546,7 +1547,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont socket_factory_->CreateUDPSocket(std::move(receiver), std::move(listener)); } -@@ -1637,6 +1641,17 @@ void NetworkContext::CreateRestrictedUDPSocket( +@@ -1634,6 +1638,17 @@ void NetworkContext::CreateRestrictedUDPSocket( mojo::PendingRemote listener, CreateRestrictedUDPSocketCallback callback) { // SimpleHostResolver is transitively owned by |this|. @@ -1564,7 +1565,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont socket_factory_->CreateRestrictedUDPSocket( addr, mode, traffic_annotation, std::move(params), std::move(receiver), std::move(listener), SimpleHostResolver::Create(this), -@@ -1649,6 +1664,17 @@ void NetworkContext::CreateTCPServerSocket( +@@ -1646,6 +1661,17 @@ void NetworkContext::CreateTCPServerSocket( const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, mojo::PendingReceiver receiver, CreateTCPServerSocketCallback callback) { @@ -1582,7 +1583,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont socket_factory_->CreateTCPServerSocket( local_addr, std::move(options), static_cast(traffic_annotation), -@@ -1663,6 +1689,21 @@ void NetworkContext::CreateTCPConnectedSocket( +@@ -1660,6 +1686,21 @@ void NetworkContext::CreateTCPConnectedSocket( mojo::PendingReceiver receiver, mojo::PendingRemote observer, CreateTCPConnectedSocketCallback callback) { @@ -1604,7 +1605,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont socket_factory_->CreateTCPConnectedSocket( local_addr, remote_addr_list, std::move(tcp_connected_socket_options), static_cast(traffic_annotation), -@@ -1674,6 +1715,20 @@ void NetworkContext::CreateTCPBoundSocket( +@@ -1671,6 +1712,20 @@ void NetworkContext::CreateTCPBoundSocket( const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, mojo::PendingReceiver receiver, CreateTCPBoundSocketCallback callback) { @@ -1625,7 +1626,7 @@ diff --git a/services/network/network_context.cc b/services/network/network_cont socket_factory_->CreateTCPBoundSocket( local_addr, static_cast(traffic_annotation), -@@ -1739,6 +1794,24 @@ void NetworkContext::CreateWebSocket( +@@ -1736,6 +1791,24 @@ void NetworkContext::CreateWebSocket( mojo::PendingRemote auth_handler, mojo::PendingRemote header_client, const absl::optional& throttling_profile_id) { @@ -1705,14 +1706,40 @@ diff --git a/services/network/public/cpp/simple_url_loader.h b/services/network/ }; } // namespace network -diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader.cc ---- a/third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader.cc -+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader.cc -@@ -648,23 +648,150 @@ net::NetworkTrafficAnnotationTag URLLoader::Context::GetTrafficAnnotationTag( +diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_utils.cc b/third_party/blink/renderer/platform/loader/fetch/fetch_utils.cc +--- a/third_party/blink/renderer/platform/loader/fetch/fetch_utils.cc ++++ b/third_party/blink/renderer/platform/loader/fetch/fetch_utils.cc +@@ -97,28 +97,153 @@ net::NetworkTrafficAnnotationTag FetchUtils::GetTrafficAnnotationTag( + case network::mojom::RequestDestination::kIframe: + case network::mojom::RequestDestination::kFrame: + case network::mojom::RequestDestination::kFencedframe: +- case network::mojom::RequestDestination::kWebIdentity: NOTREACHED(); [[fallthrough]]; + // Split destination with new annotations ++ case network::mojom::RequestDestination::kWebIdentity: ++ return net::DefineNetworkTrafficAnnotation("blink_resource_loader_webidentity", R"( ++ semantics { ++ sender: "Blink Resource Loader" ++ description: ++ "Blink-initiated request, which includes all resources for " ++ "normal page loads, chrome URLs, and downloads." ++ trigger: ++ "The user navigates to a URL or downloads a file. Also when a " ++ "webpage, ServiceWorker, or chrome:// uses any network communication." ++ data: "Anything the initiator wants to send." ++ destination: OTHER ++ } ++ policy { ++ cookies_allowed: YES ++ cookies_store: "user" ++ setting: "These requests cannot be disabled in settings." ++ policy_exception_justification: ++ "Not implemented. Without these requests, Chrome will be unable " ++ "to load any webpage." ++ })"); ++ + case network::mojom::RequestDestination::kServiceWorker: + case network::mojom::RequestDestination::kSharedWorker: + case network::mojom::RequestDestination::kWorker: @@ -1826,8 +1853,33 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/url_loa + "to load any webpage." + })"); + -+ case network::mojom::RequestDestination::kXslt: -+ return net::DefineNetworkTrafficAnnotation("blink_resource_loader_xslt", R"( + case network::mojom::RequestDestination::kEmpty: + case network::mojom::RequestDestination::kAudio: +- case network::mojom::RequestDestination::kAudioWorklet: + case network::mojom::RequestDestination::kFont: + case network::mojom::RequestDestination::kImage: +- case network::mojom::RequestDestination::kManifest: +- case network::mojom::RequestDestination::kPaintWorklet: +- case network::mojom::RequestDestination::kReport: + case network::mojom::RequestDestination::kScript: +- case network::mojom::RequestDestination::kServiceWorker: +- case network::mojom::RequestDestination::kSharedWorker: + case network::mojom::RequestDestination::kStyle: + case network::mojom::RequestDestination::kTrack: + case network::mojom::RequestDestination::kVideo: +- case network::mojom::RequestDestination::kWebBundle: +- case network::mojom::RequestDestination::kWorker: +- case network::mojom::RequestDestination::kXslt: +- case network::mojom::RequestDestination::kDictionary: + return net::DefineNetworkTrafficAnnotation("blink_resource_loader", R"( + semantics { + sender: "Blink Resource Loader" +@@ -140,10 +265,32 @@ net::NetworkTrafficAnnotationTag FetchUtils::GetTrafficAnnotationTag( + "to load any webpage." + })"); + ++ case network::mojom::RequestDestination::kDictionary: ++ return net::DefineNetworkTrafficAnnotation("blink_resource_loader_dictionary", R"( + semantics { + sender: "Blink Resource Loader" + description: @@ -1848,26 +1900,35 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/url_loa + "to load any webpage." + })"); + - case network::mojom::RequestDestination::kEmpty: - case network::mojom::RequestDestination::kAudio: -- case network::mojom::RequestDestination::kAudioWorklet: - case network::mojom::RequestDestination::kFont: - case network::mojom::RequestDestination::kImage: -- case network::mojom::RequestDestination::kManifest: -- case network::mojom::RequestDestination::kPaintWorklet: -- case network::mojom::RequestDestination::kReport: - case network::mojom::RequestDestination::kScript: -- case network::mojom::RequestDestination::kServiceWorker: -- case network::mojom::RequestDestination::kSharedWorker: - case network::mojom::RequestDestination::kStyle: - case network::mojom::RequestDestination::kTrack: - case network::mojom::RequestDestination::kVideo: -- case network::mojom::RequestDestination::kWebBundle: -- case network::mojom::RequestDestination::kWorker: -- case network::mojom::RequestDestination::kXslt: - case network::mojom::RequestDestination::kDictionary: - return net::DefineNetworkTrafficAnnotation("blink_resource_loader", R"( - semantics { + case network::mojom::RequestDestination::kEmbed: + case network::mojom::RequestDestination::kObject: + return net::DefineNetworkTrafficAnnotation( +- "blink_extension_resource_loader", R"( ++ "blink_extension_resource_loader_embed", R"( + semantics { + sender: "Blink Resource Loader" + description: +diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader.cc +--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader.cc ++++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader.cc +@@ -287,7 +287,7 @@ void URLLoader::Context::Start( + download_to_blob_registry.InitWithNewPipeAndPassReceiver()); + } + net::NetworkTrafficAnnotationTag tag = +- FetchUtils::GetTrafficAnnotationTag(*request); ++ FetchUtils::GetTrafficAnnotationTag(*request); // check for deprecation + resource_request_sender_->SendSync( + std::move(request), tag, loader_options, sync_load_response, + url_loader_factory_, std::move(throttles), timeout_interval, +@@ -300,7 +300,7 @@ void URLLoader::Context::Start( + TRACE_EVENT_WITH_FLOW0("loading", "URLLoader::Context::Start", this, + TRACE_EVENT_FLAG_FLOW_OUT); + net::NetworkTrafficAnnotationTag tag = +- FetchUtils::GetTrafficAnnotationTag(*request); ++ FetchUtils::GetTrafficAnnotationTag(*request); // check for deprecation + request_id_ = resource_request_sender_->SendAsync( + std::move(request), GetMaybeUnfreezableTaskRunner(), tag, loader_options, + cors_exempt_header_list_, base::WrapRefCounted(this), url_loader_factory_, diff --git a/tools/traffic_annotation/scripts/auditor/auditor.py b/tools/traffic_annotation/scripts/auditor/auditor.py --- a/tools/traffic_annotation/scripts/auditor/auditor.py +++ b/tools/traffic_annotation/scripts/auditor/auditor.py diff --git a/build/patches/00Remove-auth-header-upon-cross-origin-redirect.patch b/build/patches/00Remove-auth-header-upon-cross-origin-redirect.patch index 3ab905c3..9369c097 100644 --- a/build/patches/00Remove-auth-header-upon-cross-origin-redirect.patch +++ b/build/patches/00Remove-auth-header-upon-cross-origin-redirect.patch @@ -11,7 +11,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc --- a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc -@@ -826,6 +826,9 @@ bool ResourceLoader::WillFollowRedirect( +@@ -822,6 +822,9 @@ bool ResourceLoader::WillFollowRedirect( new_url)) { fetcher_->GetUseCounter().CountUse( mojom::WebFeature::kAuthorizationCrossOrigin); @@ -20,11 +20,11 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc + } } - if (removed_headers) { + // TODO(https://crbug.com/471397, https://crbug.com/1406737): Reconsider diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc --- a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc +++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc -@@ -172,6 +172,9 @@ bool SyncLoadContext::OnReceivedRedirect( +@@ -179,6 +179,9 @@ void SyncLoadContext::OnReceivedRedirect( if (has_authorization_header_ && !url::IsSameOriginWith(response_->url, redirect_info.new_url)) { response_->has_authorization_header_between_cross_origin_redirect_ = true; @@ -33,6 +33,6 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_lo + } } - if (removed_headers) { + response_->url = redirect_info.new_url; -- 2.25.1 diff --git a/build/patches/00Temp-Disable-kAutomaticLazyFrameLoadingToEmbeds.patch b/build/patches/00Temp-Disable-kAutomaticLazyFrameLoadingToEmbeds.patch index 25332191..ff94183b 100644 --- a/build/patches/00Temp-Disable-kAutomaticLazyFrameLoadingToEmbeds.patch +++ b/build/patches/00Temp-Disable-kAutomaticLazyFrameLoadingToEmbeds.patch @@ -10,7 +10,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -174,7 +174,7 @@ const base::FeatureParam kSkipFrameCountForLazyAds( +@@ -180,7 +180,7 @@ const base::FeatureParam kSkipFrameCountForLazyAds( // Vitals. BASE_FEATURE(kAutomaticLazyFrameLoadingToEmbeds, "AutomaticLazyFrameLoadingToEmbeds", // must be enabled diff --git a/build/patches/00Temp-disable-predictive-back-gesture.patch b/build/patches/00Temp-disable-predictive-back-gesture.patch index cab4237c..c3f39e5e 100644 --- a/build/patches/00Temp-disable-predictive-back-gesture.patch +++ b/build/patches/00Temp-disable-predictive-back-gesture.patch @@ -10,7 +10,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -187,7 +187,7 @@ by a child template that "extends" this file. +@@ -188,7 +188,7 @@ by a child template that "extends" this file. android:networkSecurityConfig="@xml/network_security_config" android:allowAudioPlaybackCapture="false" android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory" diff --git a/build/patches/00Temp-remove-support-for-shared-workers.patch b/build/patches/00Temp-remove-support-for-shared-workers.patch index d7832a64..b718b94f 100644 --- a/build/patches/00Temp-remove-support-for-shared-workers.patch +++ b/build/patches/00Temp-remove-support-for-shared-workers.patch @@ -17,7 +17,7 @@ Test with https://worker-playground.glitch.me/ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -3150,6 +3150,7 @@ bool ChromeContentBrowserClient::AllowSharedWorker( +@@ -3164,6 +3164,7 @@ bool ChromeContentBrowserClient::AllowSharedWorker( content::BrowserContext* context, int render_process_id, int render_frame_id) { diff --git a/build/patches/Add-DuckDuckGo-Lite-search-engine.patch b/build/patches/Add-DuckDuckGo-Lite-search-engine.patch index 02f9896b..9b49fc93 100644 --- a/build/patches/Add-DuckDuckGo-Lite-search-engine.patch +++ b/build/patches/Add-DuckDuckGo-Lite-search-engine.patch @@ -4,15 +4,15 @@ Subject: Add DuckDuckGo Lite search engine License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../search_engines/prepopulated_engines.json | 10 + - .../search_engines/search_engine_type.h | 1 + - .../template_url_prepopulate_data.cc | 184 +++++++++--------- - 3 files changed, 103 insertions(+), 92 deletions(-) + components/search_engines/prepopulated_engines.json | 10 ++++++++++ + components/search_engines/search_engine_type.h | 1 + + .../search_engines/template_url_prepopulate_data.cc | 1 + + 3 files changed, 12 insertions(+) diff --git a/components/search_engines/prepopulated_engines.json b/components/search_engines/prepopulated_engines.json --- a/components/search_engines/prepopulated_engines.json +++ b/components/search_engines/prepopulated_engines.json -@@ -102,6 +102,16 @@ +@@ -113,6 +113,16 @@ "id": 92 }, @@ -32,828 +32,22 @@ diff --git a/components/search_engines/prepopulated_engines.json b/components/se diff --git a/components/search_engines/search_engine_type.h b/components/search_engines/search_engine_type.h --- a/components/search_engines/search_engine_type.h +++ b/components/search_engines/search_engine_type.h -@@ -79,6 +79,7 @@ enum SearchEngineType { - SEARCH_ENGINE_STARTER_PACK_HISTORY = 62, - SEARCH_ENGINE_STARTER_PACK_TABS = 63, - SEARCH_ENGINE_GOOGLE_EN = 64, -+ SEARCH_ENGINE_DUCKDUCKGOLIGHT = 65, +@@ -89,6 +89,7 @@ enum SearchEngineType { + SEARCH_ENGINE_BRAVE = 70, + SEARCH_ENGINE_KARMA = 71, + SEARCH_ENGINE_GOOGLE_EN = 72, ++ SEARCH_ENGINE_DUCKDUCKGOLIGHT = 73, SEARCH_ENGINE_MAX // Bounding value needed for UMA histogram macro. }; diff --git a/components/search_engines/template_url_prepopulate_data.cc b/components/search_engines/template_url_prepopulate_data.cc --- a/components/search_engines/template_url_prepopulate_data.cc +++ b/components/search_engines/template_url_prepopulate_data.cc -@@ -43,7 +43,7 @@ const PrepopulatedEngine* const engines_AE[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_ru, - }; - -@@ -61,7 +61,7 @@ const PrepopulatedEngine* const engines_AR[] = { - &googleen, &google, - &bing, - &yahoo_ar, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -69,7 +69,7 @@ const PrepopulatedEngine* const engines_AR[] = { - const PrepopulatedEngine* const engines_AT[] = { - &googleen, &google, - &bing, -- &yahoo_at, -+ &yahoo_at, &duckduckgo_light, - &duckduckgo, - &ecosia, - }; -@@ -79,7 +79,7 @@ const PrepopulatedEngine* const engines_AU[] = { - &googleen, &google, - &bing, - &yahoo_au, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -88,7 +88,7 @@ const PrepopulatedEngine* const engines_BA[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_com, - }; - -@@ -98,7 +98,7 @@ const PrepopulatedEngine* const engines_BE[] = { - &bing, - &yahoo, - &ecosia, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Bulgaria -@@ -106,7 +106,7 @@ const PrepopulatedEngine* const engines_BG[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_ru, - }; - -@@ -115,7 +115,7 @@ const PrepopulatedEngine* const engines_BH[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -124,7 +124,7 @@ const PrepopulatedEngine* const engines_BI[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_ru, - }; - -@@ -133,7 +133,7 @@ const PrepopulatedEngine* const engines_BN[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -142,7 +142,7 @@ const PrepopulatedEngine* const engines_BO[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -151,7 +151,7 @@ const PrepopulatedEngine* const engines_BR[] = { - &googleen, &google, - &bing, - &yahoo_br, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_com, - }; - -@@ -161,7 +161,7 @@ const PrepopulatedEngine* const engines_BY[] = { - &yandex_by, - &mail_ru, - &bing, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Belize -@@ -178,7 +178,7 @@ const PrepopulatedEngine* const engines_CA[] = { - &googleen, &google, - &bing, - &yahoo_ca, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -186,7 +186,7 @@ const PrepopulatedEngine* const engines_CA[] = { - const PrepopulatedEngine* const engines_CH[] = { - &googleen, &google, - &bing, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yahoo_ch, - &ecosia, - }; -@@ -196,7 +196,7 @@ const PrepopulatedEngine* const engines_CL[] = { - &googleen, &google, - &bing, - &yahoo_cl, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -215,7 +215,7 @@ const PrepopulatedEngine* const engines_CO[] = { - &bing, - &yahoo_co, - &duckduckgo, -- &ecosia, -+ &ecosia, &duckduckgo_light, - }; - - // Costa Rica -@@ -223,7 +223,7 @@ const PrepopulatedEngine* const engines_CR[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -233,7 +233,7 @@ const PrepopulatedEngine* const engines_CZ[] = { - &seznam_cz, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Germany -@@ -241,7 +241,7 @@ const PrepopulatedEngine* const engines_DE[] = { - &googleen, &google, - &bing, - &yahoo_de, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -250,7 +250,7 @@ const PrepopulatedEngine* const engines_DK[] = { - &googleen, &google, - &bing, - &yahoo_dk, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -259,7 +259,7 @@ const PrepopulatedEngine* const engines_DO[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -269,7 +269,7 @@ const PrepopulatedEngine* const engines_DZ[] = { - &bing, - &yahoo_fr, - &yandex_com, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Ecuador -@@ -296,7 +296,7 @@ const PrepopulatedEngine* const engines_EG[] = { - &bing, - &yahoo, - &yandex_com, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Spain -@@ -304,7 +304,7 @@ const PrepopulatedEngine* const engines_ES[] = { - &googleen, &google, - &bing, - &yahoo_es, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -313,7 +313,7 @@ const PrepopulatedEngine* const engines_FI[] = { - &googleen, &google, - &bing, - &yahoo_fi, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_ru, - }; - -@@ -340,7 +340,7 @@ const PrepopulatedEngine* const engines_GB[] = { - &googleen, &google, - &bing, - &yahoo_uk, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -349,7 +349,7 @@ const PrepopulatedEngine* const engines_GR[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_ru, - }; - -@@ -358,7 +358,7 @@ const PrepopulatedEngine* const engines_GT[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -368,7 +368,7 @@ const PrepopulatedEngine* const engines_HK[] = { - &bing, - &yahoo_hk, - &baidu, -- &so_360, -+ &so_360, &duckduckgo_light, - }; - - // Honduras -@@ -376,7 +376,7 @@ const PrepopulatedEngine* const engines_HN[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -394,7 +394,7 @@ const PrepopulatedEngine* const engines_HU[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_com, - }; - -@@ -403,7 +403,7 @@ const PrepopulatedEngine* const engines_ID[] = { - &googleen, &google, - &bing, - &yahoo_id, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_com, - }; - -@@ -412,7 +412,7 @@ const PrepopulatedEngine* const engines_IE[] = { - &googleen, &google, - &bing, - &yahoo_uk, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -422,7 +422,7 @@ const PrepopulatedEngine* const engines_IL[] = { - &bing, - &yandex_ru, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // India -@@ -430,7 +430,7 @@ const PrepopulatedEngine* const engines_IN[] = { - &googleen, &google, - &bing, - &yahoo_in, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &info_com, - }; - -@@ -440,7 +440,7 @@ const PrepopulatedEngine* const engines_IQ[] = { - &bing, - &yahoo, - &yandex_tr, -- &petal_search, -+ &petal_search, &duckduckgo_light, - }; - - // Iran -@@ -449,14 +449,14 @@ const PrepopulatedEngine* const engines_IR[] = { - &bing, - &yahoo, - &duckduckgo, -- &ask, -+ &ask, &duckduckgo_light, - }; - - // Iceland - const PrepopulatedEngine* const engines_IS[] = { - &googleen, &google, - &bing, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yahoo, - &ecosia, - }; -@@ -466,7 +466,7 @@ const PrepopulatedEngine* const engines_IT[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -475,7 +475,7 @@ const PrepopulatedEngine* const engines_JM[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -493,7 +493,7 @@ const PrepopulatedEngine* const engines_JP[] = { - &googleen, &google, - &bing, - &yahoo_jp, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &baidu, - }; - -@@ -502,7 +502,7 @@ const PrepopulatedEngine* const engines_KE[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_com, - }; - -@@ -530,7 +530,7 @@ const PrepopulatedEngine* const engines_KZ[] = { - &yandex_kz, - &mail_ru, - &bing, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Lebanon -@@ -538,7 +538,7 @@ const PrepopulatedEngine* const engines_LB[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -546,7 +546,7 @@ const PrepopulatedEngine* const engines_LB[] = { - const PrepopulatedEngine* const engines_LI[] = { - &googleen, &google, - &bing, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yahoo, - &ecosia, - }; -@@ -556,7 +556,7 @@ const PrepopulatedEngine* const engines_LT[] = { - &googleen, &google, - &bing, - &yandex_ru, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yahoo, - }; - -@@ -564,7 +564,7 @@ const PrepopulatedEngine* const engines_LT[] = { - const PrepopulatedEngine* const engines_LU[] = { - &googleen, &google, - &bing, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yahoo, - &ecosia, - }; -@@ -575,7 +575,7 @@ const PrepopulatedEngine* const engines_LV[] = { - &bing, - &yandex_ru, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Libya -@@ -584,7 +584,7 @@ const PrepopulatedEngine* const engines_LY[] = { - &bing, - &yahoo, - &yandex_tr, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Morocco -@@ -593,14 +593,14 @@ const PrepopulatedEngine* const engines_MA[] = { - &bing, - &yahoo_fr, - &yandex_com, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Monaco - const PrepopulatedEngine* const engines_MC[] = { - &googleen, &google, - &bing, -- &yahoo_fr, -+ &yahoo_fr, &duckduckgo_light, - &duckduckgo, - &qwant, - }; -@@ -620,7 +620,7 @@ const PrepopulatedEngine* const engines_ME[] = { - &bing, - &yandex_ru, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Macedonia -@@ -628,7 +628,7 @@ const PrepopulatedEngine* const engines_MK[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_com, - }; - -@@ -637,7 +637,7 @@ const PrepopulatedEngine* const engines_MX[] = { - &googleen, &google, - &bing, - &yahoo_mx, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -646,7 +646,7 @@ const PrepopulatedEngine* const engines_MY[] = { - &googleen, &google, - &bing, - &yahoo_my, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -655,7 +655,7 @@ const PrepopulatedEngine* const engines_NI[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -664,7 +664,7 @@ const PrepopulatedEngine* const engines_NL[] = { - &googleen, &google, - &bing, - &yahoo_nl, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_ru, - }; - -@@ -673,7 +673,7 @@ const PrepopulatedEngine* const engines_NO[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -682,7 +682,7 @@ const PrepopulatedEngine* const engines_NZ[] = { - &googleen, &google, - &bing, - &yahoo_nz, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -700,7 +700,7 @@ const PrepopulatedEngine* const engines_PA[] = { - &googleen, &google, - &bing, - &yahoo_es, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -710,7 +710,7 @@ const PrepopulatedEngine* const engines_PE[] = { - &bing, - &yahoo_pe, - &ecosia, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Philippines -@@ -719,7 +719,7 @@ const PrepopulatedEngine* const engines_PH[] = { - &bing, - &yahoo_ph, - &ecosia, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Pakistan -@@ -727,7 +727,7 @@ const PrepopulatedEngine* const engines_PK[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_com, - }; - -@@ -736,7 +736,7 @@ const PrepopulatedEngine* const engines_PL[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_ru, - }; - -@@ -745,7 +745,7 @@ const PrepopulatedEngine* const engines_PR[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -754,7 +754,7 @@ const PrepopulatedEngine* const engines_PT[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -763,7 +763,7 @@ const PrepopulatedEngine* const engines_PY[] = { - &googleen, &google, - &bing, - &yahoo_es, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -772,7 +772,7 @@ const PrepopulatedEngine* const engines_QA[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_tr, - }; - -@@ -781,7 +781,7 @@ const PrepopulatedEngine* const engines_RO[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_tr, - }; - -@@ -790,7 +790,7 @@ const PrepopulatedEngine* const engines_RS[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_ru, - }; - -@@ -800,7 +800,7 @@ const PrepopulatedEngine* const engines_RU[] = { - &google, - &duckduckgo, - &bing, -- &mail_ru, -+ &mail_ru, &duckduckgo_light, - }; - - // Rwanda -@@ -808,7 +808,7 @@ const PrepopulatedEngine* const engines_RW[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -818,7 +818,7 @@ const PrepopulatedEngine* const engines_SA[] = { - &bing, - &yahoo, - &yandex_com, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Sweden -@@ -826,7 +826,7 @@ const PrepopulatedEngine* const engines_SE[] = { - &googleen, &google, - &bing, - &yahoo_se, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_ru, - }; - -@@ -835,7 +835,7 @@ const PrepopulatedEngine* const engines_SG[] = { - &googleen, &google, - &bing, - &yahoo_sg, -- &baidu, -+ &baidu, &duckduckgo_light, - &duckduckgo, - }; - -@@ -843,7 +843,7 @@ const PrepopulatedEngine* const engines_SG[] = { - const PrepopulatedEngine* const engines_SI[] = { - &googleen, &google, - &bing, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yahoo, - &yandex_com, - }; -@@ -852,7 +852,7 @@ const PrepopulatedEngine* const engines_SI[] = { - const PrepopulatedEngine* const engines_SK[] = { - &googleen, &google, - &bing, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yahoo, - &yandex_ru, - }; -@@ -862,7 +862,7 @@ const PrepopulatedEngine* const engines_SV[] = { - &googleen, &google, - &bing, - &yahoo_es, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -872,7 +872,7 @@ const PrepopulatedEngine* const engines_SY[] = { - &bing, - &yandex_ru, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Thailand -@@ -889,7 +889,7 @@ const PrepopulatedEngine* const engines_TN[] = { - &googleen, &google, - &bing, - &yahoo_fr, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_com, - }; - -@@ -899,7 +899,7 @@ const PrepopulatedEngine* const engines_TR[] = { - &yandex_tr, - &yahoo_tr, - &bing, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - }; - - // Trinidad and Tobago -@@ -907,7 +907,7 @@ const PrepopulatedEngine* const engines_TT[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &yandex_com, - }; - -@@ -916,8 +916,8 @@ const PrepopulatedEngine* const engines_TW[] = { - &googleen, &google, - &yahoo_tw, - &bing, -- &baidu, -- &duckduckgo, -+ &baidu, &duckduckgo_light, -+ &duckduckgo, &duckduckgo_light, - }; - - // Tanzania -@@ -925,7 +925,7 @@ const PrepopulatedEngine* const engines_TZ[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -943,7 +943,7 @@ const PrepopulatedEngine* const engines_US[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -952,7 +952,7 @@ const PrepopulatedEngine* const engines_UY[] = { - &googleen, &google, - &bing, - &yahoo_es, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -979,8 +979,8 @@ const PrepopulatedEngine* const engines_YE[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -- &yandex_com, -+ &duckduckgo, &duckduckgo_light, -+ &yandex_com, &duckduckgo_light, - }; - - // South Africa -@@ -988,7 +988,7 @@ const PrepopulatedEngine* const engines_ZA[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; - -@@ -997,7 +997,7 @@ const PrepopulatedEngine* const engines_ZW[] = { - &googleen, &google, - &bing, - &yahoo, -- &duckduckgo, -+ &duckduckgo, &duckduckgo_light, - &ecosia, - }; +@@ -1837,4 +1837,5 @@ std::unique_ptr GetPrepopulatedDefaultSearch( + : nullptr; + } ++readd duckduckgo_light + } // namespace TemplateURLPrepopulateData -- 2.25.1 diff --git a/build/patches/Add-English-only-search-engine.patch b/build/patches/Add-English-only-search-engine.patch index 43aa2243..69f9850c 100644 --- a/build/patches/Add-English-only-search-engine.patch +++ b/build/patches/Add-English-only-search-engine.patch @@ -9,14 +9,14 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../search_engines/prepopulated_engines.json | 21 ++ .../search_engines/search_engine_type.h | 1 + - .../template_url_prepopulate_data.cc | 216 +++++++++--------- - 3 files changed, 130 insertions(+), 108 deletions(-) + .../template_url_prepopulate_data.cc | 215 +++++++++--------- + 3 files changed, 130 insertions(+), 107 deletions(-) diff --git a/components/search_engines/prepopulated_engines.json b/components/search_engines/prepopulated_engines.json --- a/components/search_engines/prepopulated_engines.json +++ b/components/search_engines/prepopulated_engines.json -@@ -141,6 +141,27 @@ - "id": 1 +@@ -171,6 +171,27 @@ + "id": 111 }, + "googleen": { @@ -46,987 +46,986 @@ diff --git a/components/search_engines/prepopulated_engines.json b/components/se diff --git a/components/search_engines/search_engine_type.h b/components/search_engines/search_engine_type.h --- a/components/search_engines/search_engine_type.h +++ b/components/search_engines/search_engine_type.h -@@ -78,6 +78,7 @@ enum SearchEngineType { - SEARCH_ENGINE_STARTER_PACK_BOOKMARKS = 61, - SEARCH_ENGINE_STARTER_PACK_HISTORY = 62, - SEARCH_ENGINE_STARTER_PACK_TABS = 63, -+ SEARCH_ENGINE_GOOGLE_EN = 64, +@@ -88,6 +88,7 @@ enum SearchEngineType { + SEARCH_ENGINE_QUENDU = 69, + SEARCH_ENGINE_BRAVE = 70, + SEARCH_ENGINE_KARMA = 71, ++ SEARCH_ENGINE_GOOGLE_EN = 72, SEARCH_ENGINE_MAX // Bounding value needed for UMA histogram macro. }; diff --git a/components/search_engines/template_url_prepopulate_data.cc b/components/search_engines/template_url_prepopulate_data.cc --- a/components/search_engines/template_url_prepopulate_data.cc +++ b/components/search_engines/template_url_prepopulate_data.cc -@@ -30,7 +30,7 @@ namespace { +@@ -56,6 +56,7 @@ struct EngineAndTier { // Default (for countries with no better engine set) - const PrepopulatedEngine* const engines_default[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - }; -@@ -40,7 +40,7 @@ const PrepopulatedEngine* const engines_default[] = { + constexpr EngineAndTier engines_default[] = { ++ {SearchEngineTier::kTopEngines, &googleen}, + {SearchEngineTier::kTopEngines, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -66,7 +67,7 @@ constexpr EngineAndTier engines_default[] = { // clang-format off // United Arab Emirates - const PrepopulatedEngine* const engines_AE[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -49,7 +49,7 @@ const PrepopulatedEngine* const engines_AE[] = { + constexpr EngineAndTier engines_AE[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &yandex_ru}, +@@ -75,7 +76,7 @@ constexpr EngineAndTier engines_AE[] = { // Albania - const PrepopulatedEngine* const engines_AL[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -58,7 +58,7 @@ const PrepopulatedEngine* const engines_AL[] = { + constexpr EngineAndTier engines_AL[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &yandex_tr}, +@@ -84,7 +85,7 @@ constexpr EngineAndTier engines_AL[] = { // Argentina - const PrepopulatedEngine* const engines_AR[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_ar, - &duckduckgo, -@@ -67,7 +67,7 @@ const PrepopulatedEngine* const engines_AR[] = { + constexpr EngineAndTier engines_AR[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_ar}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -93,7 +94,7 @@ constexpr EngineAndTier engines_AR[] = { // Austria - const PrepopulatedEngine* const engines_AT[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_at, - &duckduckgo, -@@ -76,7 +76,7 @@ const PrepopulatedEngine* const engines_AT[] = { + constexpr EngineAndTier engines_AT[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &yahoo_at}, +@@ -114,7 +115,7 @@ constexpr EngineAndTier engines_AT[] = { // Australia - const PrepopulatedEngine* const engines_AU[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_au, - &duckduckgo, -@@ -85,7 +85,7 @@ const PrepopulatedEngine* const engines_AU[] = { + constexpr EngineAndTier engines_AU[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_au}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -123,7 +124,7 @@ constexpr EngineAndTier engines_AU[] = { // Bosnia and Herzegovina - const PrepopulatedEngine* const engines_BA[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -94,7 +94,7 @@ const PrepopulatedEngine* const engines_BA[] = { + constexpr EngineAndTier engines_BA[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -132,7 +133,7 @@ constexpr EngineAndTier engines_BA[] = { // Belgium - const PrepopulatedEngine* const engines_BE[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &ecosia, -@@ -103,7 +103,7 @@ const PrepopulatedEngine* const engines_BE[] = { + constexpr EngineAndTier engines_BE[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &ecosia}, +@@ -148,7 +149,7 @@ constexpr EngineAndTier engines_BE[] = { // Bulgaria - const PrepopulatedEngine* const engines_BG[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -112,7 +112,7 @@ const PrepopulatedEngine* const engines_BG[] = { + constexpr EngineAndTier engines_BG[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -164,7 +165,7 @@ constexpr EngineAndTier engines_BG[] = { // Bahrain - const PrepopulatedEngine* const engines_BH[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -121,7 +121,7 @@ const PrepopulatedEngine* const engines_BH[] = { + constexpr EngineAndTier engines_BH[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -173,7 +174,7 @@ constexpr EngineAndTier engines_BH[] = { // Burundi - const PrepopulatedEngine* const engines_BI[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -130,7 +130,7 @@ const PrepopulatedEngine* const engines_BI[] = { + constexpr EngineAndTier engines_BI[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &yandex_ru}, +@@ -182,7 +183,7 @@ constexpr EngineAndTier engines_BI[] = { // Brunei - const PrepopulatedEngine* const engines_BN[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -139,7 +139,7 @@ const PrepopulatedEngine* const engines_BN[] = { + constexpr EngineAndTier engines_BN[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -191,7 +192,7 @@ constexpr EngineAndTier engines_BN[] = { // Bolivia - const PrepopulatedEngine* const engines_BO[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -148,7 +148,7 @@ const PrepopulatedEngine* const engines_BO[] = { + constexpr EngineAndTier engines_BO[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -200,7 +201,7 @@ constexpr EngineAndTier engines_BO[] = { // Brazil - const PrepopulatedEngine* const engines_BR[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_br, - &duckduckgo, -@@ -157,7 +157,7 @@ const PrepopulatedEngine* const engines_BR[] = { + constexpr EngineAndTier engines_BR[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_br}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -209,7 +210,7 @@ constexpr EngineAndTier engines_BR[] = { // Belarus - const PrepopulatedEngine* const engines_BY[] = { -- &google, -+ &googleen, &google, - &yandex_by, - &mail_ru, - &bing, -@@ -166,7 +166,7 @@ const PrepopulatedEngine* const engines_BY[] = { + constexpr EngineAndTier engines_BY[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &yandex_by}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -218,7 +219,7 @@ constexpr EngineAndTier engines_BY[] = { // Belize - const PrepopulatedEngine* const engines_BZ[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -175,7 +175,7 @@ const PrepopulatedEngine* const engines_BZ[] = { + constexpr EngineAndTier engines_BZ[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -227,7 +228,7 @@ constexpr EngineAndTier engines_BZ[] = { // Canada - const PrepopulatedEngine* const engines_CA[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_ca, - &duckduckgo, -@@ -184,7 +184,7 @@ const PrepopulatedEngine* const engines_CA[] = { + constexpr EngineAndTier engines_CA[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_ca}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -236,7 +237,7 @@ constexpr EngineAndTier engines_CA[] = { // Switzerland - const PrepopulatedEngine* const engines_CH[] = { -- &google, -+ &googleen, &google, - &bing, - &duckduckgo, - &yahoo_ch, -@@ -193,7 +193,7 @@ const PrepopulatedEngine* const engines_CH[] = { + constexpr EngineAndTier engines_CH[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &yahoo_ch}, +@@ -245,7 +246,7 @@ constexpr EngineAndTier engines_CH[] = { // Chile - const PrepopulatedEngine* const engines_CL[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_cl, - &duckduckgo, -@@ -204,14 +204,14 @@ const PrepopulatedEngine* const engines_CL[] = { - const PrepopulatedEngine* const engines_CN[] = { - &baidu, - &bing, -- &sogou, -+ &googleen, &sogou, - &so_360, - &google, + constexpr EngineAndTier engines_CL[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_cl}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -256,14 +257,14 @@ constexpr EngineAndTier engines_CL[] = { + constexpr EngineAndTier engines_CN[] = { + {SearchEngineTier::kTopEngines, &baidu}, + {SearchEngineTier::kTopEngines, &bing}, +- {SearchEngineTier::kTopEngines, &sogou}, ++ {SearchEngineTier::kTopEngines, &googleen, &sogou}, + {SearchEngineTier::kTopEngines, &so_360}, + {SearchEngineTier::kTopEngines, &google}, }; // Colombia - const PrepopulatedEngine* const engines_CO[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_co, - &duckduckgo, -@@ -220,7 +220,7 @@ const PrepopulatedEngine* const engines_CO[] = { + constexpr EngineAndTier engines_CO[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_co}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -272,7 +273,7 @@ constexpr EngineAndTier engines_CO[] = { // Costa Rica - const PrepopulatedEngine* const engines_CR[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -229,7 +229,7 @@ const PrepopulatedEngine* const engines_CR[] = { + constexpr EngineAndTier engines_CR[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -296,7 +297,7 @@ constexpr EngineAndTier engines_CY[] = { // Czech Republic - const PrepopulatedEngine* const engines_CZ[] = { -- &google, -+ &googleen, &google, - &seznam_cz, - &bing, - &yahoo, -@@ -238,7 +238,7 @@ const PrepopulatedEngine* const engines_CZ[] = { + constexpr EngineAndTier engines_CZ[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &seznam_cz}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -313,7 +314,7 @@ constexpr EngineAndTier engines_CZ[] = { // Germany - const PrepopulatedEngine* const engines_DE[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_de, - &duckduckgo, -@@ -247,7 +247,7 @@ const PrepopulatedEngine* const engines_DE[] = { + constexpr EngineAndTier engines_DE[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_de}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -335,7 +336,7 @@ constexpr EngineAndTier engines_DE[] = { // Denmark - const PrepopulatedEngine* const engines_DK[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_dk, - &duckduckgo, -@@ -256,7 +256,7 @@ const PrepopulatedEngine* const engines_DK[] = { + constexpr EngineAndTier engines_DK[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_dk}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -352,7 +353,7 @@ constexpr EngineAndTier engines_DK[] = { // Dominican Republic - const PrepopulatedEngine* const engines_DO[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -265,7 +265,7 @@ const PrepopulatedEngine* const engines_DO[] = { + constexpr EngineAndTier engines_DO[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -361,7 +362,7 @@ constexpr EngineAndTier engines_DO[] = { // Algeria - const PrepopulatedEngine* const engines_DZ[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_fr, - &yandex_com, -@@ -274,7 +274,7 @@ const PrepopulatedEngine* const engines_DZ[] = { + constexpr EngineAndTier engines_DZ[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_fr}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -370,7 +371,7 @@ constexpr EngineAndTier engines_DZ[] = { // Ecuador - const PrepopulatedEngine* const engines_EC[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_es, - &ecosia, -@@ -283,7 +283,7 @@ const PrepopulatedEngine* const engines_EC[] = { + constexpr EngineAndTier engines_EC[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_es}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -379,7 +380,7 @@ constexpr EngineAndTier engines_EC[] = { // Estonia - const PrepopulatedEngine* const engines_EE[] = { -- &google, -+ &googleen, &google, - &bing, - &yandex_ru, - &duckduckgo, -@@ -292,7 +292,7 @@ const PrepopulatedEngine* const engines_EE[] = { + constexpr EngineAndTier engines_EE[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_com}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -394,7 +395,7 @@ constexpr EngineAndTier engines_EE[] = { // Egypt - const PrepopulatedEngine* const engines_EG[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &yandex_com, -@@ -301,7 +301,7 @@ const PrepopulatedEngine* const engines_EG[] = { + constexpr EngineAndTier engines_EG[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -403,7 +404,7 @@ constexpr EngineAndTier engines_EG[] = { // Spain - const PrepopulatedEngine* const engines_ES[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_es, - &duckduckgo, -@@ -310,7 +310,7 @@ const PrepopulatedEngine* const engines_ES[] = { + constexpr EngineAndTier engines_ES[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_es}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -422,7 +423,7 @@ constexpr EngineAndTier engines_ES[] = { // Finland - const PrepopulatedEngine* const engines_FI[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_fi, - &duckduckgo, -@@ -319,7 +319,7 @@ const PrepopulatedEngine* const engines_FI[] = { + constexpr EngineAndTier engines_FI[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_com}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -439,7 +440,7 @@ constexpr EngineAndTier engines_FI[] = { // Faroe Islands - const PrepopulatedEngine* const engines_FO[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_uk, - &duckduckgo, -@@ -328,7 +328,7 @@ const PrepopulatedEngine* const engines_FO[] = { + constexpr EngineAndTier engines_FO[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_uk}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -448,7 +449,7 @@ constexpr EngineAndTier engines_FO[] = { // France - const PrepopulatedEngine* const engines_FR[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_fr, - &qwant, -@@ -337,7 +337,7 @@ const PrepopulatedEngine* const engines_FR[] = { + constexpr EngineAndTier engines_FR[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_fr}, + {SearchEngineTier::kTopEngines, &ecosia}, +@@ -468,7 +469,7 @@ constexpr EngineAndTier engines_FR[] = { // United Kingdom - const PrepopulatedEngine* const engines_GB[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_uk, - &duckduckgo, -@@ -346,7 +346,7 @@ const PrepopulatedEngine* const engines_GB[] = { + constexpr EngineAndTier engines_GB[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_uk}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -477,7 +478,7 @@ constexpr EngineAndTier engines_GB[] = { // Greece - const PrepopulatedEngine* const engines_GR[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -355,7 +355,7 @@ const PrepopulatedEngine* const engines_GR[] = { + constexpr EngineAndTier engines_GR[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -493,7 +494,7 @@ constexpr EngineAndTier engines_GR[] = { // Guatemala - const PrepopulatedEngine* const engines_GT[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -364,7 +364,7 @@ const PrepopulatedEngine* const engines_GT[] = { + constexpr EngineAndTier engines_GT[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -502,7 +503,7 @@ constexpr EngineAndTier engines_GT[] = { // Hong Kong - const PrepopulatedEngine* const engines_HK[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_hk, - &baidu, -@@ -373,7 +373,7 @@ const PrepopulatedEngine* const engines_HK[] = { + constexpr EngineAndTier engines_HK[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_hk}, + {SearchEngineTier::kTopEngines, &baidu}, +@@ -511,7 +512,7 @@ constexpr EngineAndTier engines_HK[] = { // Honduras - const PrepopulatedEngine* const engines_HN[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -382,7 +382,7 @@ const PrepopulatedEngine* const engines_HN[] = { + constexpr EngineAndTier engines_HN[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -520,7 +521,7 @@ constexpr EngineAndTier engines_HN[] = { // Croatia - const PrepopulatedEngine* const engines_HR[] = { -- &google, -+ &googleen, &google, - &bing, - &duckduckgo, - &yahoo, -@@ -391,7 +391,7 @@ const PrepopulatedEngine* const engines_HR[] = { + constexpr EngineAndTier engines_HR[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -535,7 +536,7 @@ constexpr EngineAndTier engines_HR[] = { // Hungary - const PrepopulatedEngine* const engines_HU[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -400,7 +400,7 @@ const PrepopulatedEngine* const engines_HU[] = { + constexpr EngineAndTier engines_HU[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -551,7 +552,7 @@ constexpr EngineAndTier engines_HU[] = { // Indonesia - const PrepopulatedEngine* const engines_ID[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_id, - &duckduckgo, -@@ -409,7 +409,7 @@ const PrepopulatedEngine* const engines_ID[] = { + constexpr EngineAndTier engines_ID[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &yandex_com}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_id}, +@@ -560,7 +561,7 @@ constexpr EngineAndTier engines_ID[] = { // Ireland - const PrepopulatedEngine* const engines_IE[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_uk, - &duckduckgo, -@@ -418,7 +418,7 @@ const PrepopulatedEngine* const engines_IE[] = { + constexpr EngineAndTier engines_IE[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_uk}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -579,7 +580,7 @@ constexpr EngineAndTier engines_IE[] = { // Israel - const PrepopulatedEngine* const engines_IL[] = { -- &google, -+ &googleen, &google, - &bing, - &yandex_ru, - &yahoo, -@@ -427,7 +427,7 @@ const PrepopulatedEngine* const engines_IL[] = { + constexpr EngineAndTier engines_IL[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_ru}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -588,7 +589,7 @@ constexpr EngineAndTier engines_IL[] = { // India - const PrepopulatedEngine* const engines_IN[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_in, - &duckduckgo, -@@ -436,7 +436,7 @@ const PrepopulatedEngine* const engines_IN[] = { + constexpr EngineAndTier engines_IN[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_in}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -597,7 +598,7 @@ constexpr EngineAndTier engines_IN[] = { // Iraq - const PrepopulatedEngine* const engines_IQ[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &yandex_tr, -@@ -445,7 +445,7 @@ const PrepopulatedEngine* const engines_IQ[] = { + constexpr EngineAndTier engines_IQ[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_tr}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -606,7 +607,7 @@ constexpr EngineAndTier engines_IQ[] = { // Iran - const PrepopulatedEngine* const engines_IR[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -454,7 +454,7 @@ const PrepopulatedEngine* const engines_IR[] = { + constexpr EngineAndTier engines_IR[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -615,7 +616,7 @@ constexpr EngineAndTier engines_IR[] = { // Iceland - const PrepopulatedEngine* const engines_IS[] = { -- &google, -+ &googleen, &google, - &bing, - &duckduckgo, - &yahoo, -@@ -463,7 +463,7 @@ const PrepopulatedEngine* const engines_IS[] = { + constexpr EngineAndTier engines_IS[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -630,7 +631,7 @@ constexpr EngineAndTier engines_IS[] = { // Italy - const PrepopulatedEngine* const engines_IT[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -472,7 +472,7 @@ const PrepopulatedEngine* const engines_IT[] = { + constexpr EngineAndTier engines_IT[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -648,7 +649,7 @@ constexpr EngineAndTier engines_IT[] = { // Jamaica - const PrepopulatedEngine* const engines_JM[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -481,7 +481,7 @@ const PrepopulatedEngine* const engines_JM[] = { + constexpr EngineAndTier engines_JM[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -657,7 +658,7 @@ constexpr EngineAndTier engines_JM[] = { // Jordan - const PrepopulatedEngine* const engines_JO[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &petal_search, -@@ -490,7 +490,7 @@ const PrepopulatedEngine* const engines_JO[] = { + constexpr EngineAndTier engines_JO[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -666,7 +667,7 @@ constexpr EngineAndTier engines_JO[] = { // Japan - const PrepopulatedEngine* const engines_JP[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_jp, - &duckduckgo, -@@ -499,7 +499,7 @@ const PrepopulatedEngine* const engines_JP[] = { + constexpr EngineAndTier engines_JP[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &yahoo_jp}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -675,7 +676,7 @@ constexpr EngineAndTier engines_JP[] = { // Kenya - const PrepopulatedEngine* const engines_KE[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -508,7 +508,7 @@ const PrepopulatedEngine* const engines_KE[] = { + constexpr EngineAndTier engines_KE[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -684,7 +685,7 @@ constexpr EngineAndTier engines_KE[] = { // South Korea - const PrepopulatedEngine* const engines_KR[] = { -- &google, -+ &googleen, &google, - &naver, - &bing, - &daum, -@@ -517,7 +517,7 @@ const PrepopulatedEngine* const engines_KR[] = { + constexpr EngineAndTier engines_KR[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &naver}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &daum}, +@@ -693,7 +694,7 @@ constexpr EngineAndTier engines_KR[] = { // Kuwait - const PrepopulatedEngine* const engines_KW[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -526,7 +526,7 @@ const PrepopulatedEngine* const engines_KW[] = { + constexpr EngineAndTier engines_KW[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_tr}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -702,7 +703,7 @@ constexpr EngineAndTier engines_KW[] = { // Kazakhstan - const PrepopulatedEngine* const engines_KZ[] = { -- &google, -+ &googleen, &google, - &yandex_kz, - &mail_ru, - &bing, -@@ -535,7 +535,7 @@ const PrepopulatedEngine* const engines_KZ[] = { + constexpr EngineAndTier engines_KZ[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &yandex_kz}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &mail_ru}, +@@ -711,7 +712,7 @@ constexpr EngineAndTier engines_KZ[] = { // Lebanon - const PrepopulatedEngine* const engines_LB[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -544,7 +544,7 @@ const PrepopulatedEngine* const engines_LB[] = { + constexpr EngineAndTier engines_LB[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -720,7 +721,7 @@ constexpr EngineAndTier engines_LB[] = { // Liechtenstein - const PrepopulatedEngine* const engines_LI[] = { -- &google, -+ &googleen, &google, - &bing, - &duckduckgo, - &yahoo, -@@ -553,7 +553,7 @@ const PrepopulatedEngine* const engines_LI[] = { + constexpr EngineAndTier engines_LI[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -736,7 +737,7 @@ constexpr EngineAndTier engines_LI[] = { // Lithuania - const PrepopulatedEngine* const engines_LT[] = { -- &google, -+ &googleen, &google, - &bing, - &yandex_ru, - &duckduckgo, -@@ -562,7 +562,7 @@ const PrepopulatedEngine* const engines_LT[] = { + constexpr EngineAndTier engines_LT[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_com}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -751,7 +752,7 @@ constexpr EngineAndTier engines_LT[] = { // Luxembourg - const PrepopulatedEngine* const engines_LU[] = { -- &google, -+ &googleen, &google, - &bing, - &duckduckgo, - &yahoo, -@@ -571,7 +571,7 @@ const PrepopulatedEngine* const engines_LU[] = { + constexpr EngineAndTier engines_LU[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -767,7 +768,7 @@ constexpr EngineAndTier engines_LU[] = { // Latvia - const PrepopulatedEngine* const engines_LV[] = { -- &google, -+ &googleen, &google, - &bing, - &yandex_ru, - &yahoo, -@@ -580,7 +580,7 @@ const PrepopulatedEngine* const engines_LV[] = { + constexpr EngineAndTier engines_LV[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_com}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -783,7 +784,7 @@ constexpr EngineAndTier engines_LV[] = { // Libya - const PrepopulatedEngine* const engines_LY[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &yandex_tr, -@@ -589,7 +589,7 @@ const PrepopulatedEngine* const engines_LY[] = { + constexpr EngineAndTier engines_LY[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_tr}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -792,7 +793,7 @@ constexpr EngineAndTier engines_LY[] = { // Morocco - const PrepopulatedEngine* const engines_MA[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_fr, - &yandex_com, -@@ -598,7 +598,7 @@ const PrepopulatedEngine* const engines_MA[] = { + constexpr EngineAndTier engines_MA[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_fr}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -801,7 +802,7 @@ constexpr EngineAndTier engines_MA[] = { // Monaco - const PrepopulatedEngine* const engines_MC[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_fr, - &duckduckgo, -@@ -607,7 +607,7 @@ const PrepopulatedEngine* const engines_MC[] = { + constexpr EngineAndTier engines_MC[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_fr}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -810,7 +811,7 @@ constexpr EngineAndTier engines_MC[] = { // Moldova - const PrepopulatedEngine* const engines_MD[] = { -- &google, -+ &googleen, &google, - &yandex_ru, - &bing, - &mail_ru, -@@ -616,7 +616,7 @@ const PrepopulatedEngine* const engines_MD[] = { + constexpr EngineAndTier engines_MD[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &yandex_ru}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -819,7 +820,7 @@ constexpr EngineAndTier engines_MD[] = { // Montenegro - const PrepopulatedEngine* const engines_ME[] = { -- &google, -+ &googleen, &google, - &bing, - &yandex_ru, - &yahoo, -@@ -625,7 +625,7 @@ const PrepopulatedEngine* const engines_ME[] = { + constexpr EngineAndTier engines_ME[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_ru}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -828,7 +829,7 @@ constexpr EngineAndTier engines_ME[] = { // Macedonia - const PrepopulatedEngine* const engines_MK[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -634,7 +634,7 @@ const PrepopulatedEngine* const engines_MK[] = { + constexpr EngineAndTier engines_MK[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -854,7 +855,7 @@ constexpr EngineAndTier engines_MT[] = { // Mexico - const PrepopulatedEngine* const engines_MX[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_mx, - &duckduckgo, -@@ -643,7 +643,7 @@ const PrepopulatedEngine* const engines_MX[] = { + constexpr EngineAndTier engines_MX[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_mx}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -863,7 +864,7 @@ constexpr EngineAndTier engines_MX[] = { // Malaysia - const PrepopulatedEngine* const engines_MY[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_my, - &duckduckgo, -@@ -652,7 +652,7 @@ const PrepopulatedEngine* const engines_MY[] = { + constexpr EngineAndTier engines_MY[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_my}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -872,7 +873,7 @@ constexpr EngineAndTier engines_MY[] = { // Nicaragua - const PrepopulatedEngine* const engines_NI[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -661,7 +661,7 @@ const PrepopulatedEngine* const engines_NI[] = { + constexpr EngineAndTier engines_NI[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -881,7 +882,7 @@ constexpr EngineAndTier engines_NI[] = { // Netherlands - const PrepopulatedEngine* const engines_NL[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_nl, - &duckduckgo, -@@ -670,7 +670,7 @@ const PrepopulatedEngine* const engines_NL[] = { + constexpr EngineAndTier engines_NL[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &yahoo_nl}, +@@ -898,7 +899,7 @@ constexpr EngineAndTier engines_NL[] = { // Norway - const PrepopulatedEngine* const engines_NO[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -679,7 +679,7 @@ const PrepopulatedEngine* const engines_NO[] = { + constexpr EngineAndTier engines_NO[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -915,7 +916,7 @@ constexpr EngineAndTier engines_NO[] = { // New Zealand - const PrepopulatedEngine* const engines_NZ[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_nz, - &duckduckgo, -@@ -688,7 +688,7 @@ const PrepopulatedEngine* const engines_NZ[] = { + constexpr EngineAndTier engines_NZ[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_nz}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -924,7 +925,7 @@ constexpr EngineAndTier engines_NZ[] = { // Oman - const PrepopulatedEngine* const engines_OM[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &petal_search, -@@ -697,7 +697,7 @@ const PrepopulatedEngine* const engines_OM[] = { + constexpr EngineAndTier engines_OM[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -933,7 +934,7 @@ constexpr EngineAndTier engines_OM[] = { // Panama - const PrepopulatedEngine* const engines_PA[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_es, - &duckduckgo, -@@ -706,7 +706,7 @@ const PrepopulatedEngine* const engines_PA[] = { + constexpr EngineAndTier engines_PA[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_es}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -942,7 +943,7 @@ constexpr EngineAndTier engines_PA[] = { // Peru - const PrepopulatedEngine* const engines_PE[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_pe, - &ecosia, -@@ -715,7 +715,7 @@ const PrepopulatedEngine* const engines_PE[] = { + constexpr EngineAndTier engines_PE[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_pe}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -951,7 +952,7 @@ constexpr EngineAndTier engines_PE[] = { // Philippines - const PrepopulatedEngine* const engines_PH[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_ph, - &ecosia, -@@ -724,7 +724,7 @@ const PrepopulatedEngine* const engines_PH[] = { + constexpr EngineAndTier engines_PH[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_ph}, + {SearchEngineTier::kTopEngines, &ecosia}, +@@ -960,7 +961,7 @@ constexpr EngineAndTier engines_PH[] = { // Pakistan - const PrepopulatedEngine* const engines_PK[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -733,7 +733,7 @@ const PrepopulatedEngine* const engines_PK[] = { + constexpr EngineAndTier engines_PK[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -969,7 +970,7 @@ constexpr EngineAndTier engines_PK[] = { // Poland - const PrepopulatedEngine* const engines_PL[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -742,7 +742,7 @@ const PrepopulatedEngine* const engines_PL[] = { + constexpr EngineAndTier engines_PL[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -985,7 +986,7 @@ constexpr EngineAndTier engines_PL[] = { // Puerto Rico - const PrepopulatedEngine* const engines_PR[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -751,7 +751,7 @@ const PrepopulatedEngine* const engines_PR[] = { + constexpr EngineAndTier engines_PR[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -994,7 +995,7 @@ constexpr EngineAndTier engines_PR[] = { // Portugal - const PrepopulatedEngine* const engines_PT[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -760,7 +760,7 @@ const PrepopulatedEngine* const engines_PT[] = { + constexpr EngineAndTier engines_PT[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1011,7 +1012,7 @@ constexpr EngineAndTier engines_PT[] = { // Paraguay - const PrepopulatedEngine* const engines_PY[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_es, - &duckduckgo, -@@ -769,7 +769,7 @@ const PrepopulatedEngine* const engines_PY[] = { + constexpr EngineAndTier engines_PY[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_es}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1020,7 +1021,7 @@ constexpr EngineAndTier engines_PY[] = { // Qatar - const PrepopulatedEngine* const engines_QA[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -778,7 +778,7 @@ const PrepopulatedEngine* const engines_QA[] = { + constexpr EngineAndTier engines_QA[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1029,7 +1030,7 @@ constexpr EngineAndTier engines_QA[] = { // Romania - const PrepopulatedEngine* const engines_RO[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -787,7 +787,7 @@ const PrepopulatedEngine* const engines_RO[] = { + constexpr EngineAndTier engines_RO[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1044,7 +1045,7 @@ constexpr EngineAndTier engines_RO[] = { // Serbia - const PrepopulatedEngine* const engines_RS[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -796,7 +796,7 @@ const PrepopulatedEngine* const engines_RS[] = { + constexpr EngineAndTier engines_RS[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &yandex_ru}, +@@ -1053,7 +1054,7 @@ constexpr EngineAndTier engines_RS[] = { // Russia - const PrepopulatedEngine* const engines_RU[] = { -- &yandex_ru, -+ &googleen, &yandex_ru, - &google, - &duckduckgo, - &bing, -@@ -805,7 +805,7 @@ const PrepopulatedEngine* const engines_RU[] = { + constexpr EngineAndTier engines_RU[] = { +- {SearchEngineTier::kTopEngines, &yandex_ru}, ++ {SearchEngineTier::kTopEngines, &googleen, &yandex_ru}, + {SearchEngineTier::kTopEngines, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1062,7 +1063,7 @@ constexpr EngineAndTier engines_RU[] = { // Rwanda - const PrepopulatedEngine* const engines_RW[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -814,7 +814,7 @@ const PrepopulatedEngine* const engines_RW[] = { + constexpr EngineAndTier engines_RW[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1071,7 +1072,7 @@ constexpr EngineAndTier engines_RW[] = { // Saudi Arabia - const PrepopulatedEngine* const engines_SA[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &yandex_com, -@@ -823,7 +823,7 @@ const PrepopulatedEngine* const engines_SA[] = { + constexpr EngineAndTier engines_SA[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_com}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -1080,7 +1081,7 @@ constexpr EngineAndTier engines_SA[] = { // Sweden - const PrepopulatedEngine* const engines_SE[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_se, - &duckduckgo, -@@ -832,7 +832,7 @@ const PrepopulatedEngine* const engines_SE[] = { + constexpr EngineAndTier engines_SE[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_se}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1096,7 +1097,7 @@ constexpr EngineAndTier engines_SE[] = { // Singapore - const PrepopulatedEngine* const engines_SG[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_sg, - &baidu, -@@ -841,7 +841,7 @@ const PrepopulatedEngine* const engines_SG[] = { + constexpr EngineAndTier engines_SG[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_sg}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1105,7 +1106,7 @@ constexpr EngineAndTier engines_SG[] = { // Slovenia - const PrepopulatedEngine* const engines_SI[] = { -- &google, -+ &googleen, &google, - &bing, - &duckduckgo, - &yahoo, -@@ -850,7 +850,7 @@ const PrepopulatedEngine* const engines_SI[] = { + constexpr EngineAndTier engines_SI[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -1120,7 +1121,7 @@ constexpr EngineAndTier engines_SI[] = { // Slovakia - const PrepopulatedEngine* const engines_SK[] = { -- &google, -+ &googleen, &google, - &bing, - &duckduckgo, - &yahoo, -@@ -859,7 +859,7 @@ const PrepopulatedEngine* const engines_SK[] = { + constexpr EngineAndTier engines_SK[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &yandex_ru}, +@@ -1136,7 +1137,7 @@ constexpr EngineAndTier engines_SK[] = { // El Salvador - const PrepopulatedEngine* const engines_SV[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_es, - &duckduckgo, -@@ -868,7 +868,7 @@ const PrepopulatedEngine* const engines_SV[] = { + constexpr EngineAndTier engines_SV[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_es}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1145,7 +1146,7 @@ constexpr EngineAndTier engines_SV[] = { // Syria - const PrepopulatedEngine* const engines_SY[] = { -- &google, -+ &googleen, &google, - &bing, - &yandex_ru, - &yahoo, -@@ -877,7 +877,7 @@ const PrepopulatedEngine* const engines_SY[] = { + constexpr EngineAndTier engines_SY[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yandex_ru}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -1154,7 +1155,7 @@ constexpr EngineAndTier engines_SY[] = { // Thailand - const PrepopulatedEngine* const engines_TH[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_th, - &naver, -@@ -886,7 +886,7 @@ const PrepopulatedEngine* const engines_TH[] = { + constexpr EngineAndTier engines_TH[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_th}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -1163,7 +1164,7 @@ constexpr EngineAndTier engines_TH[] = { // Tunisia - const PrepopulatedEngine* const engines_TN[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_fr, - &duckduckgo, -@@ -895,7 +895,7 @@ const PrepopulatedEngine* const engines_TN[] = { + constexpr EngineAndTier engines_TN[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_fr}, + {SearchEngineTier::kTopEngines, &yandex_com}, +@@ -1172,7 +1173,7 @@ constexpr EngineAndTier engines_TN[] = { // Turkey - const PrepopulatedEngine* const engines_TR[] = { -- &google, -+ &googleen, &google, - &yandex_tr, - &yahoo_tr, - &bing, -@@ -904,7 +904,7 @@ const PrepopulatedEngine* const engines_TR[] = { + constexpr EngineAndTier engines_TR[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &yandex_tr}, + {SearchEngineTier::kTopEngines, &yahoo_tr}, + {SearchEngineTier::kTopEngines, &bing}, +@@ -1181,7 +1182,7 @@ constexpr EngineAndTier engines_TR[] = { // Trinidad and Tobago - const PrepopulatedEngine* const engines_TT[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -913,7 +913,7 @@ const PrepopulatedEngine* const engines_TT[] = { + constexpr EngineAndTier engines_TT[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1190,7 +1191,7 @@ constexpr EngineAndTier engines_TT[] = { // Taiwan - const PrepopulatedEngine* const engines_TW[] = { -- &google, -+ &googleen, &google, - &yahoo_tw, - &bing, - &baidu, -@@ -922,7 +922,7 @@ const PrepopulatedEngine* const engines_TW[] = { + constexpr EngineAndTier engines_TW[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &yahoo_tw}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &coccoc}, +@@ -1199,7 +1200,7 @@ constexpr EngineAndTier engines_TW[] = { // Tanzania - const PrepopulatedEngine* const engines_TZ[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -931,7 +931,7 @@ const PrepopulatedEngine* const engines_TZ[] = { + constexpr EngineAndTier engines_TZ[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &duckduckgo}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, +@@ -1208,7 +1209,7 @@ constexpr EngineAndTier engines_TZ[] = { // Ukraine - const PrepopulatedEngine* const engines_UA[] = { -- &google, -+ &googleen, &google, - &yandex_ru, - &bing, - &duckduckgo, -@@ -940,7 +940,7 @@ const PrepopulatedEngine* const engines_UA[] = { + constexpr EngineAndTier engines_UA[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &yandex_ru}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1217,7 +1218,7 @@ constexpr EngineAndTier engines_UA[] = { // United States - const PrepopulatedEngine* const engines_US[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -949,7 +949,7 @@ const PrepopulatedEngine* const engines_US[] = { + constexpr EngineAndTier engines_US[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1226,7 +1227,7 @@ constexpr EngineAndTier engines_US[] = { // Uruguay - const PrepopulatedEngine* const engines_UY[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_es, - &duckduckgo, -@@ -958,7 +958,7 @@ const PrepopulatedEngine* const engines_UY[] = { + constexpr EngineAndTier engines_UY[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_es}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1235,7 +1236,7 @@ constexpr EngineAndTier engines_UY[] = { // Venezuela - const PrepopulatedEngine* const engines_VE[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo_es, - &duckduckgo, -@@ -967,7 +967,7 @@ const PrepopulatedEngine* const engines_VE[] = { + constexpr EngineAndTier engines_VE[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo_es}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1244,7 +1245,7 @@ constexpr EngineAndTier engines_VE[] = { // Vietnam - const PrepopulatedEngine* const engines_VN[] = { -- &google, -+ &googleen, &google, - &coccoc, - &bing, - &yahoo, -@@ -976,7 +976,7 @@ const PrepopulatedEngine* const engines_VN[] = { + constexpr EngineAndTier engines_VN[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &coccoc}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &bing}, +@@ -1253,7 +1254,7 @@ constexpr EngineAndTier engines_VN[] = { // Yemen - const PrepopulatedEngine* const engines_YE[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -985,7 +985,7 @@ const PrepopulatedEngine* const engines_YE[] = { + constexpr EngineAndTier engines_YE[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1262,7 +1263,7 @@ constexpr EngineAndTier engines_YE[] = { // South Africa - const PrepopulatedEngine* const engines_ZA[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, -@@ -994,7 +994,7 @@ const PrepopulatedEngine* const engines_ZA[] = { + constexpr EngineAndTier engines_ZA[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, +@@ -1271,7 +1272,7 @@ constexpr EngineAndTier engines_ZA[] = { // Zimbabwe - const PrepopulatedEngine* const engines_ZW[] = { -- &google, -+ &googleen, &google, - &bing, - &yahoo, - &duckduckgo, + constexpr EngineAndTier engines_ZW[] = { +- {SearchEngineTier::kTopEngines, &google}, ++ {SearchEngineTier::kTopEngines, &googleen, &google}, + {SearchEngineTier::kTopEngines, &bing}, + {SearchEngineTier::kTopEngines, &yahoo}, + {SearchEngineTier::kTopEngines, &duckduckgo}, -- 2.25.1 diff --git a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch index d6736f99..5e5071c1 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -8,7 +8,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../chrome/browser/ChromeTabbedActivity.java | 24 ++++++++ .../browser/bookmarks/BookmarkBridge.java | 61 +++++++++++++++++++ .../browser/bookmarks/BookmarkUtils.java | 4 ++ - .../bookmarks/android/bookmark_bridge.cc | 19 +++++- + .../bookmarks/android/bookmark_bridge.cc | 16 +++++ .../bookmarks/android/bookmark_bridge.h | 4 ++ .../browser/bookmarks/bookmark_html_writer.cc | 8 ++- .../bookmarks/chrome_bookmark_client.cc | 2 + @@ -27,7 +27,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/bookmarks/browser/bookmark_uuids.h | 1 + components/bookmarks/browser/model_loader.cc | 3 +- .../bookmark_specifics_conversions.cc | 1 + - 23 files changed, 200 insertions(+), 11 deletions(-) + 23 files changed, 198 insertions(+), 10 deletions(-) diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml --- a/chrome/android/java/res/menu/main_menu.xml @@ -56,7 +56,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -81,6 +81,7 @@ import org.chromium.chrome.browser.back_press.MinimizeAppAndCloseTabBackPressHan +@@ -84,6 +84,7 @@ import org.chromium.chrome.browser.back_press.MinimizeAppAndCloseTabBackPressHan import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.browserservices.intents.WebappConstants; import org.chromium.chrome.browser.compositor.CompositorViewHolder; @@ -64,7 +64,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.compositor.layouts.Layout; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone; -@@ -2226,6 +2227,8 @@ public class ChromeTabbedActivity extends ChromeActivity getTabModelSelector().closeAllTabs()); RecordUserAction.record("MobileMenuCloseAllTabs"); @@ -73,7 +73,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct } else if (id == R.id.close_all_incognito_tabs_menu_id) { // Close only incognito tabs CloseAllTabsDialog.show(this, getModalDialogManagerSupplier(), -@@ -2291,6 +2294,27 @@ public class ChromeTabbedActivity extends ChromeActivity mObservers = new ObserverList<>(); + + private static final String TAG = "BookmarkBridge"; + private long mNativeBookmarkBridge; private boolean mIsDestroyed; private boolean mIsDoingExtensiveChanges; -@@ -377,6 +384,16 @@ class BookmarkBridge { - mNativeBookmarkBridge, BookmarkBridge.this); +@@ -375,6 +382,16 @@ class BookmarkBridge { + return mMobileFolderId; } + /** @@ -149,8 +149,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * @return Id representing the special "other" folder from bookmark model. */ -@@ -1012,6 +1029,49 @@ class BookmarkBridge { - mNativeBookmarkBridge, BookmarkBridge.this, title, url); +@@ -1008,6 +1025,49 @@ class BookmarkBridge { + return BookmarkBridgeJni.get().addToReadingList(mNativeBookmarkBridge, title, url); } + // Used to bookmark all tabs in a specific folder, created if not existing @@ -199,58 +199,50 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * @param url The URL of the reading list item. * @return The reading list item with the URL, or null if no such reading list item. -@@ -1232,6 +1292,7 @@ class BookmarkBridge { - void getAllFoldersWithDepths(long nativeBookmarkBridge, BookmarkBridge caller, - List folderList, List depthList); - BookmarkId getRootFolderId(long nativeBookmarkBridge, BookmarkBridge caller); +@@ -1227,6 +1287,7 @@ class BookmarkBridge { + void getAllFoldersWithDepths( + long nativeBookmarkBridge, List folderList, List depthList); + BookmarkId getRootFolderId(long nativeBookmarkBridge); + BookmarkId getTabsCollectionFolderId(long nativeBookmarkBridge, BookmarkBridge caller); - BookmarkId getMobileFolderId(long nativeBookmarkBridge, BookmarkBridge caller); - BookmarkId getOtherFolderId(long nativeBookmarkBridge, BookmarkBridge caller); - BookmarkId getDesktopFolderId(long nativeBookmarkBridge, BookmarkBridge caller); + BookmarkId getMobileFolderId(long nativeBookmarkBridge); + BookmarkId getOtherFolderId(long nativeBookmarkBridge); + BookmarkId getDesktopFolderId(long nativeBookmarkBridge); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java -@@ -615,6 +615,7 @@ public class BookmarkUtils { - List topLevelFolders = new ArrayList<>(); +@@ -782,6 +782,7 @@ public class BookmarkUtils { + BookmarkId rootNodeId = bookmarkModel.getRootFolderId(); BookmarkId desktopNodeId = bookmarkModel.getDesktopFolderId(); BookmarkId mobileNodeId = bookmarkModel.getMobileFolderId(); + BookmarkId tabsCollectionNodeId = bookmarkModel.getTabsCollectionFolderId(); BookmarkId othersNodeId = bookmarkModel.getOtherFolderId(); - List specialFoldersIds = -@@ -640,6 +641,9 @@ public class BookmarkUtils { - if (bookmarkModel.isFolderVisible(mobileNodeId)) { - topLevelFolders.add(mobileNodeId); - } + List specialFoldersIds = bookmarkModel.getTopLevelFolderIds(); +@@ -798,6 +799,9 @@ public class BookmarkUtils { + /** Return the background color for the given {@link BookmarkType}. */ + public static @ColorInt int getIconBackground( + Context context, BookmarkModel bookmarkModel, BookmarkItem item) { + if (bookmarkModel.isFolderVisible(tabsCollectionNodeId)) { + topLevelFolders.add(tabsCollectionNodeId); + } - if (bookmarkModel.isFolderVisible(desktopNodeId)) { - topLevelFolders.add(desktopNodeId); - } + if (isSpecialFolder(bookmarkModel, item)) { + return SemanticColorUtils.getColorPrimaryContainer(context); + } else { diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc --- a/chrome/browser/bookmarks/android/bookmark_bridge.cc +++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc -@@ -470,12 +470,17 @@ void BookmarkBridge::GetTopLevelFolderIds( - std::size_t special_count = top_level_folders.size(); - - if (get_normal) { -- DCHECK_EQ(4u, bookmark_model_->root_node()->children().size()); -+ DCHECK_EQ(5u, bookmark_model_->root_node()->children().size()); - for (const auto& node : bookmark_model_->mobile_node()->children()) { - if (node->is_folder()) - top_level_folders.push_back(node.get()); +@@ -436,6 +436,10 @@ void BookmarkBridge::GetTopLevelFolderIds( } + top_level_folders.push_back(root_child.get()); + } ++ for (const auto& node : bookmark_model_->tabs_collection_node()->children()) { ++ if (node->is_folder()) ++ top_level_folders.push_back(node.get()); ++ } -+ for (const auto& node : bookmark_model_->tabs_collection_node()->children()) { -+ if (node->is_folder()) -+ top_level_folders.push_back(node.get()); -+ } -+ - for (const auto& node : bookmark_model_->bookmark_bar_node()->children()) { - if (node->is_folder()) - top_level_folders.push_back(node.get()); -@@ -523,6 +528,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( + if (managed_bookmark_service_->managed_node() && + !managed_bookmark_service_->managed_node()->children().empty()) { +@@ -479,6 +483,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( // Vector to temporarily contain all child bookmarks at same level for sorting std::vector bookmarks = { bookmark_model_->mobile_node(), @@ -258,8 +250,8 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse bookmark_model_->bookmark_bar_node(), bookmark_model_->other_node(), }; -@@ -575,6 +581,17 @@ ScopedJavaLocalRef BookmarkBridge::GetMobileFolderId( - return folder_id_obj; +@@ -1051,6 +1056,17 @@ void BookmarkBridge::GetBookmarksOfType( + } } +ScopedJavaLocalRef BookmarkBridge::GetTabsCollectionFolderId( @@ -273,23 +265,23 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + return folder_id_obj; +} + - ScopedJavaLocalRef BookmarkBridge::GetOtherFolderId( + ScopedJavaLocalRef BookmarkBridge::AddFolder( JNIEnv* env, - const JavaParamRef& obj) { + const JavaParamRef& j_parent_id_obj, diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser/bookmarks/android/bookmark_bridge.h --- a/chrome/browser/bookmarks/android/bookmark_bridge.h +++ b/chrome/browser/bookmarks/android/bookmark_bridge.h -@@ -133,6 +133,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, - JNIEnv* env, - const base::android::JavaParamRef& obj); +@@ -205,6 +205,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + const base::android::JavaParamRef& j_list, + jint type); + base::android::ScopedJavaLocalRef GetTabsCollectionFolderId( + JNIEnv* env, + const base::android::JavaParamRef& obj); + - base::android::ScopedJavaLocalRef GetOtherFolderId( + base::android::ScopedJavaLocalRef AddFolder( JNIEnv* env, - const base::android::JavaParamRef& obj); + const base::android::JavaParamRef& j_parent_id_obj, diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc --- a/chrome/browser/bookmarks/bookmark_html_writer.cc +++ b/chrome/browser/bookmarks/bookmark_html_writer.cc @@ -359,7 +351,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -3948,6 +3948,9 @@ To change this setting, <resetlink>reset sync

    <resetlink>reset sync

    Select tabs @@ -571,30 +563,30 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.h b/components/b BookmarkPermanentNode* other_folder_node() { return other_folder_node_; } + BookmarkPermanentNode* tabs_collection_folder_node() { return tabs_collection_folder_node_; } - TitledUrlIndex* index() { return index_.get(); } - std::unique_ptr owned_index() { return std::move(index_); } -@@ -112,6 +113,8 @@ class BookmarkLoadDetails { + std::unique_ptr owned_titled_url_index() { + return std::move(titled_url_index_); +@@ -119,6 +120,8 @@ class BookmarkLoadDetails { nullptr; raw_ptr mobile_folder_node_ = nullptr; + raw_ptr tabs_collection_folder_node_ = + nullptr; LoadManagedNodeCallback load_managed_node_callback_; - std::unique_ptr index_; - BookmarkNode::MetaInfoMap model_meta_info_map_; + std::unique_ptr titled_url_index_; + UuidIndex uuid_index_; diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmarks/browser/bookmark_model.cc --- a/components/bookmarks/browser/bookmark_model.cc +++ b/components/bookmarks/browser/bookmark_model.cc -@@ -826,7 +826,7 @@ bool BookmarkModel::HasBookmarks() { - bool BookmarkModel::HasNoUserCreatedBookmarksOrFolders() { +@@ -845,7 +845,7 @@ bool BookmarkModel::HasBookmarks() const { + bool BookmarkModel::HasNoUserCreatedBookmarksOrFolders() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return bookmark_bar_node_->children().empty() && - other_node_->children().empty() && mobile_node_->children().empty(); + other_node_->children().empty() && mobile_node_->children().empty() && tabs_collection_node_->children().empty(); } - bool BookmarkModel::IsBookmarked(const GURL& url) { -@@ -1132,6 +1132,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { + bool BookmarkModel::IsBookmarked(const GURL& url) const { +@@ -1155,6 +1155,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { bookmark_bar_node_ = details->bb_node(); other_node_ = details->other_folder_node(); mobile_node_ = details->mobile_folder_node(); @@ -605,7 +597,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmar diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmarks/browser/bookmark_model.h --- a/components/bookmarks/browser/bookmark_model.h +++ b/components/bookmarks/browser/bookmark_model.h -@@ -131,6 +131,12 @@ class BookmarkModel final : public BookmarkUndoProvider, +@@ -132,6 +132,12 @@ class BookmarkModel final : public BookmarkUndoProvider, return mobile_node_; } @@ -618,7 +610,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmark bool is_root_node(const BookmarkNode* node) const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return node == root_; -@@ -489,6 +495,7 @@ class BookmarkModel final : public BookmarkUndoProvider, +@@ -495,6 +501,7 @@ class BookmarkModel final : public BookmarkUndoProvider, nullptr; raw_ptr mobile_node_ = nullptr; @@ -695,7 +687,7 @@ diff --git a/components/bookmarks/browser/bookmark_uuids.h b/components/bookmark diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks/browser/model_loader.cc --- a/components/bookmarks/browser/model_loader.cc +++ b/components/bookmarks/browser/model_loader.cc -@@ -60,7 +60,8 @@ void LoadBookmarks(const base::FilePath& path, +@@ -45,7 +45,8 @@ void LoadBookmarks(const base::FilePath& path, std::string sync_metadata_str; BookmarkCodec codec; codec.Decode(*root_dict, details->bb_node(), details->other_folder_node(), diff --git a/build/patches/Add-option-to-use-home-page-as-NTP.patch b/build/patches/Add-option-to-use-home-page-as-NTP.patch index 7dda8c50..8ab673f1 100644 --- a/build/patches/Add-option-to-use-home-page-as-NTP.patch +++ b/build/patches/Add-option-to-use-home-page-as-NTP.patch @@ -31,7 +31,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabCreationState; import org.chromium.chrome.browser.tab.TabLaunchType; -@@ -565,9 +566,13 @@ public class TabGridDialogMediator +@@ -564,9 +565,13 @@ public class TabGridDialogMediator assert relatedTabs.size() > 0; @@ -89,7 +89,7 @@ diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/andro diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java -@@ -228,6 +228,22 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat +@@ -238,6 +238,22 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat notifyHomepageUpdated(); } @@ -110,29 +110,29 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/Homepa + } + /** - * @return User specified homepage custom URI string. + * @return User specified homepage custom GURL. */ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/settings/HomepageSettings.java -@@ -22,6 +22,7 @@ import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; - import org.chromium.components.browser_ui.settings.SettingsUtils; +@@ -22,6 +22,7 @@ import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.components.embedder_support.util.UrlUtilities; import org.chromium.components.url_formatter.UrlFormatter; + import org.chromium.url.GURL; +import org.chromium.components.embedder_support.util.UrlConstants; /** * Fragment that allows the user to configure homepage related preferences. -@@ -32,6 +33,8 @@ public class HomepageSettings extends PreferenceFragmentCompat { +@@ -32,6 +33,8 @@ public class HomepageSettings extends ChromeBaseSettingsFragment { @VisibleForTesting public static final String PREF_HOMEPAGE_RADIO_GROUP = "homepage_radio_group"; + private static final String PREF_NTP_HOMEPAGE_SWITCH = "ntp_is_homepage_switch"; + - /** - * Delegate used to mark that the homepage is being managed. - * Created for {@link org.chromium.chrome.browser.settings.HomepagePreferences} -@@ -72,6 +75,15 @@ public class HomepageSettings extends PreferenceFragmentCompat { + private HomepageManager mHomepageManager; + private RadioButtonGroupHomepagePreference mRadioButtons; + +@@ -65,6 +68,15 @@ public class HomepageSettings extends ChromeBaseSettingsFragment { }); mRadioButtons.setupPreferenceValues(createPreferenceValuesForRadioGroup()); @@ -152,25 +152,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchM --- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java @@ -103,7 +103,6 @@ public class LaunchMetrics { - boolean showHomeButton, boolean homepageIsNtp, String homepageUrl) { - if (homepageUrl == null) { - homepageUrl = ""; -- assert !showHomeButton : "Homepage should be disabled for a null URL"; + public static void recordHomePageLaunchMetrics( + boolean showHomeButton, boolean homepageIsNtp, GURL homepageGurl) { + if (homepageGurl.isEmpty()) { +- assert !showHomeButton : "Homepage should be disabled for an empty GURL"; } LaunchMetricsJni.get().recordHomePageLaunchMetrics( - showHomeButton, homepageIsNtp, homepageUrl); + showHomeButton, homepageIsNtp, homepageGurl); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java -@@ -26,6 +26,7 @@ import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingTask; - import org.chromium.chrome.browser.compositor.CompositorViewHolder; +@@ -27,6 +27,7 @@ import org.chromium.chrome.browser.compositor.CompositorViewHolder; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.incognito.IncognitoUtils; + import org.chromium.chrome.browser.new_tab_url.DseNewTabUrlManager; +import org.chromium.chrome.browser.homepage.HomepageManager; import org.chromium.chrome.browser.ntp.NewTabPageLaunchOrigin; import org.chromium.chrome.browser.ntp.NewTabPageUtils; import org.chromium.chrome.browser.prefetch.settings.PreloadPagesSettingsBridge; -@@ -495,6 +496,12 @@ public class ChromeTabCreator extends TabCreator { +@@ -502,6 +503,12 @@ public class ChromeTabCreator extends TabCreator { * @return the created tab. */ public Tab launchUrl(String url, @TabLaunchType int type, Intent intent, long intentTimestamp) { @@ -186,9 +186,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -366,6 +366,7 @@ public final class ChromePreferenceKeys { - public static final String HOMEPAGE_PARTNER_CUSTOMIZED_DEFAULT_GURL = - "Chrome.Homepage.PartnerCustomizedDefaultGurl"; +@@ -367,6 +367,7 @@ public final class ChromePreferenceKeys { + public static final String HOMEPAGE_USE_CHROME_NTP = "Chrome.Homepage.UseNTP"; + public static final String HOMEPAGE_USE_DEFAULT_URI = "homepage_partner_enabled"; + public static final String HOMEPAGE_NTP_IS_HOMEPAGE = "newtabpage_is_homepage"; /** @@ -197,8 +197,8 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java -@@ -67,6 +67,7 @@ public class LegacyChromePreferenceKeys { - ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, +@@ -68,6 +68,7 @@ public class LegacyChromePreferenceKeys { + ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO, ChromePreferenceKeys.HOMEPAGE_ENABLED, ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, + ChromePreferenceKeys.HOMEPAGE_NTP_IS_HOMEPAGE, @@ -208,7 +208,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1514,6 +1514,9 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1540,6 +1540,9 @@ Your Google account may have other forms of browsing history like searches and a Last hour @@ -233,7 +233,7 @@ diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_u diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -1297,6 +1297,10 @@ inline constexpr char kUsedPolicyCertificates[] = +@@ -1283,6 +1283,10 @@ inline constexpr char kUsedPolicyCertificates[] = // visible on the toolbar. inline constexpr char kShowHomeButton[] = "browser.show_home_button"; diff --git a/build/patches/Add-site-engagement-flag.patch b/build/patches/Add-site-engagement-flag.patch index 3e85b65c..1a53c729 100644 --- a/build/patches/Add-site-engagement-flag.patch +++ b/build/patches/Add-site-engagement-flag.patch @@ -21,7 +21,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -147,6 +147,7 @@ +@@ -148,6 +148,7 @@ #include "components/segmentation_platform/public/features.h" #include "components/send_tab_to_self/features.h" #include "components/services/heap_profiling/public/cpp/switches.h" @@ -29,7 +29,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc #include "components/shared_highlighting/core/common/shared_highlighting_features.h" #include "components/signin/core/browser/dice_account_reconcilor_delegate.h" #include "components/signin/public/base/signin_buildflags.h" -@@ -9619,6 +9620,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9910,6 +9911,11 @@ const FeatureEntry kFeatureEntries[] = { kLargeFaviconFromGoogleVariations, "LargeFaviconFromGoogle")}, @@ -44,7 +44,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -3774,6 +3774,11 @@ const char kSkipServiceWorkerFetchHandlerDescription[] = +@@ -3815,6 +3815,11 @@ const char kSkipServiceWorkerFetchHandlerDescription[] = "Skips starting the service worker and run the fetch handler if the fetch " "handler is recognized as skippable."; @@ -55,11 +55,11 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti + const char kWebSQLAccessName[] = "Allows access to WebSQL APIs"; const char kWebSQLAccessDescription[] = - "The WebSQL API is enabled by default, but can be disabled here."; + "The WebSQL API is disabled by default, but can be enabled here."; diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2206,6 +2206,9 @@ extern const char kReduceAcceptLanguageDescription[]; +@@ -2231,6 +2231,9 @@ extern const char kReduceAcceptLanguageDescription[]; extern const char kSkipServiceWorkerFetchHandlerName[]; extern const char kSkipServiceWorkerFetchHandlerDescription[]; diff --git a/build/patches/Always-use-new-tab-page-for-default-home-page.patch b/build/patches/Always-use-new-tab-page-for-default-home-page.patch index 5148a649..f76b374b 100644 --- a/build/patches/Always-use-new-tab-page-for-default-home-page.patch +++ b/build/patches/Always-use-new-tab-page-for-default-home-page.patch @@ -12,16 +12,16 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java -@@ -152,10 +152,6 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat - * if the homepage button is force enabled via flag. +@@ -168,10 +168,6 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat + * tab page if the homepage button is force enabled via flag. */ - public static String getDefaultHomepageUri() { + public static GURL getDefaultHomepageGurl() { - if (PartnerBrowserCustomizations.getInstance().isHomepageProviderAvailableAndEnabled()) { -- return PartnerBrowserCustomizations.getInstance().getHomePageUrl().getSpec(); +- return PartnerBrowserCustomizations.getInstance().getHomePageUrl(); - } - - String homepagePartnerDefaultUri; String homepagePartnerDefaultGurlSerialized = SharedPreferencesManager.getInstance().readString( + ChromePreferenceKeys.HOMEPAGE_PARTNER_CUSTOMIZED_DEFAULT_GURL, ""); -- 2.25.1 diff --git a/build/patches/Bromite-auto-updater.patch b/build/patches/Bromite-auto-updater.patch index 7ace04a1..0144f7be 100644 --- a/build/patches/Bromite-auto-updater.patch +++ b/build/patches/Bromite-auto-updater.patch @@ -40,7 +40,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/build/android/java/templates/BuildConfig.template b/build/android/java/templates/BuildConfig.template --- a/build/android/java/templates/BuildConfig.template +++ b/build/android/java/templates/BuildConfig.template -@@ -93,6 +93,8 @@ public class BuildConfig { +@@ -87,6 +87,8 @@ public class BuildConfig { public static MAYBE_FINAL boolean IS_FOR_TEST MAYBE_FALSE; #endif @@ -52,7 +52,7 @@ diff --git a/build/android/java/templates/BuildConfig.template b/build/android/j diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni -@@ -1966,6 +1966,9 @@ if (enable_java_templates && is_android) { +@@ -1894,6 +1894,9 @@ if (enable_java_templates && is_android) { sources = [ "//build/android/java/templates/BuildConfig.template" ] defines = [] @@ -65,7 +65,7 @@ diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -860,6 +860,9 @@ chrome_java_sources = [ +@@ -872,6 +872,9 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/omaha/UpdateConfigs.java", "java/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelper.java", "java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java", @@ -1101,7 +1101,7 @@ new file mode 100644 diff --git a/chrome/browser/endpoint_fetcher/BUILD.gn b/chrome/browser/endpoint_fetcher/BUILD.gn --- a/chrome/browser/endpoint_fetcher/BUILD.gn +++ b/chrome/browser/endpoint_fetcher/BUILD.gn -@@ -18,6 +18,7 @@ android_library("java") { +@@ -19,6 +19,7 @@ android_library("java") { sources = [ "java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java", "java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointResponse.java", @@ -1109,7 +1109,7 @@ diff --git a/chrome/browser/endpoint_fetcher/BUILD.gn b/chrome/browser/endpoint_ ] } -@@ -25,5 +26,6 @@ generate_jni("jni_headers") { +@@ -26,5 +27,6 @@ generate_jni("jni_headers") { sources = [ "java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java", "java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointResponse.java", @@ -1283,7 +1283,7 @@ new file mode 100644 diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -262,6 +262,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -271,6 +271,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kNotificationPermissionBottomSheet, &kPageAnnotationsService, &kPreconnectOnTabCreation, @@ -1291,7 +1291,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse &kBookmarksImprovedSaveFlow, &kBookmarksRefresh, &kOmahaMinSdkVersionAndroid, -@@ -710,6 +711,10 @@ BASE_FEATURE(kContextMenuTranslateWithGoogleLens, +@@ -722,6 +723,10 @@ BASE_FEATURE(kContextMenuTranslateWithGoogleLens, "ContextMenuTranslateWithGoogleLens", base::FEATURE_DISABLED_BY_DEFAULT); @@ -1305,8 +1305,8 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -110,6 +110,7 @@ BASE_DECLARE_FEATURE(kFoldableJankFix); - BASE_DECLARE_FEATURE(kGridTabSwitcherLandscapeAspectRatioPhones); +@@ -118,6 +118,7 @@ BASE_DECLARE_FEATURE(kGridTabSwitcherLandscapeAspectRatioPhones); + BASE_DECLARE_FEATURE(kHideTabOnTabSwitcher); BASE_DECLARE_FEATURE(kImprovedIncognitoScreenshot); BASE_DECLARE_FEATURE(kIncognitoReauthenticationForAndroid); +BASE_DECLARE_FEATURE(kInlineUpdateFlow); @@ -1316,7 +1316,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -302,6 +302,7 @@ public abstract class ChromeFeatureList { +@@ -305,6 +305,7 @@ public abstract class ChromeFeatureList { "IncognitoReauthenticationForAndroid"; public static final String INCOGNITO_SCREENSHOT = "IncognitoScreenshot"; public static final String INFOBAR_SCROLL_OPTIMIZATION = "InfobarScrollOptimization"; @@ -1327,7 +1327,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -2175,6 +2175,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -2216,6 +2216,12 @@ Your Google account may have other forms of browsing history like searches and a Chrome updates are no longer supported for this version of Android @@ -1340,7 +1340,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro -@@ -3799,7 +3805,10 @@ To change this setting, <resetlink>reset sync

    <resetlink>reset sync

    @@ -1352,7 +1352,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Newer version is available -@@ -3810,6 +3819,18 @@ To change this setting, <resetlink>reset sync

    <resetlink>reset sync

    Android version is unsupported @@ -1516,7 +1516,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi } void EndpointFetcher::OnResponseFetched( -@@ -336,3 +392,38 @@ void EndpointFetcher::OnSanitizationResult( +@@ -338,3 +394,38 @@ void EndpointFetcher::OnSanitizationResult( std::string EndpointFetcher::GetUrlForTesting() { return url_.spec(); } diff --git a/build/patches/Bromite-package-name.patch b/build/patches/Bromite-package-name.patch index 99c64f75..0c339f28 100644 --- a/build/patches/Bromite-package-name.patch +++ b/build/patches/Bromite-package-name.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni -@@ -27,7 +27,7 @@ declare_args() { +@@ -26,7 +26,7 @@ declare_args() { # WebView providers which declare one of a handful of package names. See # https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/build-instructions.md#Changing-package-name # for details. diff --git a/build/patches/Client-hints-overrides.patch b/build/patches/Client-hints-overrides.patch index fe6531a8..bebbcf1f 100644 --- a/build/patches/Client-hints-overrides.patch +++ b/build/patches/Client-hints-overrides.patch @@ -10,7 +10,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/embedder_support/user_agent_utils.cc | 4 +--- content/browser/client_hints/client_hints.cc | 3 ++- content/browser/loader/navigation_url_loader_impl.cc | 5 +++++ - content/public/common/content_features.cc | 4 ++-- + content/common/features.cc | 4 ++-- net/http/http_network_transaction.cc | 1 + services/network/public/cpp/client_hints.cc | 1 + services/network/public/cpp/features.cc | 2 +- @@ -49,7 +49,7 @@ diff --git a/content/browser/client_hints/client_hints.cc b/content/browser/clie diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc --- a/content/browser/loader/navigation_url_loader_impl.cc +++ b/content/browser/loader/navigation_url_loader_impl.cc -@@ -1088,6 +1088,11 @@ void NavigationURLLoaderImpl::OnAcceptCHFrameReceived( +@@ -1067,6 +1067,11 @@ void NavigationURLLoaderImpl::OnAcceptCHFrameReceived( return; } @@ -61,17 +61,17 @@ diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/brow LogAcceptCHFrameStatus(AcceptCHFrameRestart::kFramePresent); // Given that this is happening in the middle of navigation, there should -diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc ---- a/content/public/common/content_features.cc -+++ b/content/public/common/content_features.cc -@@ -273,8 +273,8 @@ BASE_FEATURE(kCrashReporting, +diff --git a/content/common/features.cc b/content/common/features.cc +--- a/content/common/features.cc ++++ b/content/common/features.cc +@@ -114,8 +114,8 @@ BASE_FEATURE(kConsolidatedMovementXY, // Enables support for the `Critical-CH` response header. // https://github.com/WICG/client-hints-infrastructure/blob/master/reliability.md#critical-ch BASE_FEATURE(kCriticalClientHint, - "CriticalClientHint", - base::FEATURE_ENABLED_BY_DEFAULT); -+ "CriticalClientHint", // disabled by default -+ base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite ++ "CriticalClientHint", // disabled ++ base::FEATURE_DISABLED_BY_DEFAULT); // by default // Enable changing source dynamically for desktop capture. BASE_FEATURE(kDesktopCaptureChangeSource, @@ -100,7 +100,7 @@ diff --git a/services/network/public/cpp/client_hints.cc b/services/network/publ diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc --- a/services/network/public/cpp/features.cc +++ b/services/network/public/cpp/features.cc -@@ -214,7 +214,7 @@ BASE_FEATURE(kWebSocketReassembleShortMessages, +@@ -207,7 +207,7 @@ BASE_FEATURE(kWebSocketReassembleShortMessages, // Enable support for ACCEPT_CH H2/3 frame as part of Client Hint Reliability. // See: // https://tools.ietf.org/html/draft-davidben-http-client-hint-reliability-02#section-4.3 @@ -151,7 +151,7 @@ diff --git a/third_party/blink/common/client_hints/enabled_client_hints.cc b/thi diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -3844,8 +3844,8 @@ +@@ -3906,8 +3906,8 @@ public: true, }, { diff --git a/build/patches/Content-settings-infrastructure.patch b/build/patches/Content-settings-infrastructure.patch index b26c7aad..8aeac2eb 100644 --- a/build/patches/Content-settings-infrastructure.patch +++ b/build/patches/Content-settings-infrastructure.patch @@ -59,7 +59,7 @@ Require: bromite-build-utils.patch .../common/content_settings_mojom_traits.cc | 12 +- .../common/content_settings_mojom_traits.h | 24 ++ .../common/content_settings_param_traits.h | 2 +- - .../core/common/content_settings_types.h | 4 +- + .../core/common/content_settings_types.h | 8 + .../renderer/content_settings_agent_impl.cc | 33 ++ .../renderer/content_settings_agent_impl.h | 5 + .../PageInfoPermissionsController.java | 9 + @@ -71,8 +71,7 @@ Require: bromite-build-utils.patch .../platform/web_content_settings_client.h | 5 + .../execution_context/execution_context.cc | 16 + .../execution_context/execution_context.h | 5 + - .../WebLayerSiteSettingsDelegate.java | 3 + - 61 files changed, 1188 insertions(+), 42 deletions(-) + 60 files changed, 1190 insertions(+), 41 deletions(-) create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomTriStateSiteSettingsPreferenceImpl.java @@ -129,7 +128,7 @@ diff --git a/chrome/browser/installable/installed_webapp_bridge.cc b/chrome/brow diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html --- a/chrome/browser/resources/settings/privacy_page/privacy_page.html +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html -@@ -1177,4 +1177,5 @@ +@@ -1358,4 +1358,5 @@ @@ -138,7 +137,7 @@ diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/ diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/chrome/browser/resources/settings/privacy_page/privacy_page.ts --- a/chrome/browser/resources/settings/privacy_page/privacy_page.ts +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.ts -@@ -68,7 +68,49 @@ export class SettingsPrivacyPageElement extends SettingsPrivacyPageElementBase { +@@ -71,7 +71,49 @@ export class SettingsPrivacyPageElement extends SettingsPrivacyPageElementBase { } static get template() { @@ -200,7 +199,7 @@ diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resourc /** * Add all of the child routes that originate from the privacy route, -@@ -136,6 +137,7 @@ function addPrivacyChildRoutes(r: Partial) { +@@ -137,6 +138,7 @@ function addPrivacyChildRoutes(r: Partial) { r.SITE_SETTINGS_STORAGE_ACCESS = r.SITE_SETTINGS.createChild('storageAccess'); } @@ -211,7 +210,7 @@ diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resourc diff --git a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts --- a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts +++ b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts -@@ -160,6 +160,13 @@ export class SettingsCategoryDefaultRadioGroupElement extends +@@ -161,6 +161,13 @@ export class SettingsCategoryDefaultRadioGroupElement extends // "Ask" vs "Blocked". return ContentSetting.ASK; default: @@ -263,19 +262,19 @@ diff --git a/chrome/browser/resources/settings/site_settings/site_details.ts b/c diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts --- a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts +++ b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts -@@ -42,7 +42,7 @@ function getCategoryItemMap(): Map { +@@ -43,7 +43,7 @@ function getCategoryItemMap(): Map { } // The following list is ordered alphabetically by |id|. The order in which // these appear in the UI is determined elsewhere in this file. -- const categoryList = [ -+ let categoryList = [ +- const categoryList: CategoryListItem[] = [ ++ let categoryList: CategoryListItem[] = [ { route: routes.SITE_SETTINGS_ADS, id: Id.ADS, -@@ -357,10 +357,34 @@ function getCategoryItemMap(): Map { - }, - ]; - +@@ -367,10 +367,34 @@ function getCategoryItemMap(): Map { + disabledLabel: 'trackingProtectionLinkRowSubLabel', + }); + } + for (let index=0; index < loadTimeData.getInteger("br_cs_count"); index++) { + let obj = JSON.parse(loadTimeData.getString("br_cs_" + index)); + let name = obj["name"]; @@ -307,7 +306,7 @@ diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_ function buildItemListFromIds(orderedIdList: ContentSettingsTypes[]): CategoryListItem[] { const map = getCategoryItemMap(); -@@ -450,7 +474,7 @@ export class SettingsSiteSettingsPageElement extends +@@ -460,7 +484,7 @@ export class SettingsSiteSettingsPageElement extends Id.IMAGES, Id.POPUPS, ]), @@ -374,7 +373,7 @@ diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_ /** * Determine localization string for i18n for a given content settings type. * Sorted alphabetically by |ContentSettingsType|. -@@ -88,6 +136,13 @@ export function getLocalizationStringForContentType( +@@ -89,6 +137,13 @@ export function getLocalizationStringForContentType( case ContentSettingsTypes.SITE_DATA: return null; default: @@ -391,9 +390,9 @@ diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -1930,6 +1930,7 @@ static_library("ui") { - "//components/commerce/core/mojom:mojo_bindings", +@@ -1975,6 +1975,7 @@ static_library("ui") { "//components/commerce/core/webui", + "//components/compose/core/browser:features", "//components/endpoint_fetcher:endpoint_fetcher", + "//components/content_settings/core/browser:browser", "//components/enterprise/common:files_scan_data", @@ -411,7 +410,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom #include "components/page_info/core/features.h" #include "components/page_info/core/proto/about_this_site_metadata.pb.h" #include "components/page_info/page_info.h" -@@ -502,6 +504,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( +@@ -508,6 +510,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( icon = &vector_icons::kSelectWindowIcon; break; default: @@ -449,7 +448,7 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide #include "components/password_manager/core/browser/leak_detection_dialog_utils.h" #include "components/password_manager/core/browser/manage_passwords_referrer.h" #include "components/password_manager/core/common/password_manager_features.h" -@@ -3534,6 +3537,42 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, +@@ -3631,6 +3634,42 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, policy_indicator::AddLocalizedStrings(html_source); AddSecurityKeysStrings(html_source); @@ -504,7 +503,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_pattern.h" #include "components/content_settings/core/common/content_settings_utils.h" -@@ -202,7 +204,7 @@ const ContentSettingsTypeNameEntry kContentSettingsTypeGroupNames[] = { +@@ -206,7 +208,7 @@ const ContentSettingsTypeNameEntry kContentSettingsTypeGroupNames[] = { static_assert(std::size(kContentSettingsTypeGroupNames) == // ContentSettingsType starts at -1, so add 1 here. @@ -513,7 +512,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b "kContentSettingsTypeGroupNames should have " "CONTENT_SETTINGS_NUM_TYPES elements"); -@@ -457,6 +459,13 @@ bool HasRegisteredGroupName(ContentSettingsType type) { +@@ -461,6 +463,13 @@ bool HasRegisteredGroupName(ContentSettingsType type) { return true; } } @@ -527,7 +526,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b return false; } -@@ -470,11 +479,24 @@ ContentSettingsType ContentSettingsTypeFromGroupName(base::StringPiece name) { +@@ -474,11 +483,24 @@ ContentSettingsType ContentSettingsTypeFromGroupName(base::StringPiece name) { return entry.type; } } @@ -553,7 +552,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b for (const auto& entry : kContentSettingsTypeGroupNames) { if (type == entry.type) { // Content setting types that aren't represented in the settings UI -@@ -489,7 +511,6 @@ base::StringPiece ContentSettingsTypeToGroupName(ContentSettingsType type) { +@@ -493,7 +515,6 @@ base::StringPiece ContentSettingsTypeToGroupName(ContentSettingsType type) { return entry.name ? entry.name : base::StringPiece(); } } @@ -561,8 +560,8 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b NOTREACHED() << static_cast(type) << " is not a recognized content settings type."; return base::StringPiece(); -@@ -563,6 +584,13 @@ const std::vector& GetVisiblePermissionCategories() { - base_types->push_back(ContentSettingsType::AUTO_PICTURE_IN_PICTURE); +@@ -573,6 +594,13 @@ const std::vector& GetVisiblePermissionCategories() { + base_types->push_back(ContentSettingsType::MIDI_SYSEX); } + content_settings::WebsiteSettingsRegistry* website_settings = @@ -578,7 +577,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn --- a/components/browser_ui/site_settings/android/BUILD.gn +++ b/components/browser_ui/site_settings/android/BUILD.gn -@@ -147,6 +147,21 @@ android_library("java") { +@@ -149,6 +149,21 @@ android_library("java") { ":site_settings_jni_headers", "//components/content_settings/android:java_pref_names_srcjar", ] @@ -600,7 +599,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b } android_library("javatests") { -@@ -192,6 +207,7 @@ robolectric_library("junit") { +@@ -194,6 +209,7 @@ robolectric_library("junit") { } android_resources("java_resources") { @@ -1114,7 +1113,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c @ContentSettingValues @Nullable Integer defaultEnabledValue, @ContentSettingValues @Nullable Integer defaultDisabledValue, int enabledSummary, int disabledSummary) { -@@ -304,6 +304,8 @@ public class ContentSettingsResources { +@@ -309,6 +309,8 @@ public class ContentSettingsResources { ContentSettingValues.BLOCK, R.string.website_settings_category_vr_ask, R.string.website_settings_category_vr_blocked); } @@ -1123,7 +1122,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c assert false; // NOTREACHED return null; } -@@ -469,6 +471,12 @@ public class ContentSettingsResources { +@@ -474,6 +476,12 @@ public class ContentSettingsResources { } } @@ -1136,7 +1135,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c /** * Returns the string resource id for a content type to show with a permission category. * @param enabled Whether the content type is enabled. -@@ -604,6 +612,8 @@ public class ContentSettingsResources { +@@ -609,6 +617,8 @@ public class ContentSettingsResources { * Blocked states, in that order. */ public static int[] getTriStateSettingDescriptionIDs(int contentType) { @@ -1148,7 +1147,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java -@@ -310,6 +310,10 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -310,6 +310,10 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment @ContentSettingValues Integer contentSetting = website.site().getContentSetting( browserContextHandle, mCategory.getContentSettingsType()); @@ -1159,7 +1158,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (contentSetting != null) { return ContentSettingValues.BLOCK == contentSetting; } -@@ -469,6 +473,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -469,6 +473,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment ? new HashSet<>(getArguments().getStringArrayList(EXTRA_SELECTED_DOMAINS)) : null; @@ -1167,7 +1166,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c configureGlobalToggles(); if (mCategory.getType() == SiteSettingsCategory.Type.REQUEST_DESKTOP_SITE) { RecordUserAction.record("DesktopSiteContentSetting.SettingsPage.Entered"); -@@ -493,7 +498,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -493,7 +498,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment if (queryHasChanged) getInfoForOrigins(); }); @@ -1176,7 +1175,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c MenuItem help = menu.add( Menu.NONE, R.id.menu_id_site_settings_help, Menu.NONE, R.string.menu_help); help.setIcon(TraceEventVectorDrawableCompat.create( -@@ -504,6 +509,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -504,6 +509,12 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.menu_id_site_settings_help) { @@ -1189,7 +1188,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (mCategory.getType() == SiteSettingsCategory.Type.PROTECTED_MEDIA) { getSiteSettingsDelegate().launchProtectedContentHelpAndFeedbackActivity( getActivity()); -@@ -577,6 +588,11 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -577,6 +588,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment BrowserContextHandle browserContextHandle = getSiteSettingsDelegate().getBrowserContextHandle(); PrefService prefService = UserPrefs.get(browserContextHandle); @@ -1201,7 +1200,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (BINARY_TOGGLE_KEY.equals(preference.getKey())) { assert !mCategory.isManaged(); boolean toggleValue = (boolean) newValue; -@@ -796,6 +812,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -796,6 +812,8 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment : R.string.website_settings_allowed_group_heading_request_desktop_site; break; } @@ -1210,7 +1209,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c assert resource > 0; return getString(resource); } -@@ -914,6 +932,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -914,6 +932,8 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment default: break; } @@ -1219,7 +1218,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (allowSpecifyingExceptions) { getPreferenceScreen().addPreference(new AddExceptionPreference(getStyledContext(), ADD_EXCEPTION_KEY, getAddExceptionDialogMessage(), mCategory, this)); -@@ -1085,8 +1105,16 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -1085,8 +1105,16 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment private boolean isBlocked() { switch (mGlobalToggleLayout) { case GlobalToggleLayout.TRI_STATE_TOGGLE: @@ -1236,7 +1235,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c return (triStateToggle.getCheckedSetting() == ContentSettingValues.BLOCK); case GlobalToggleLayout.FOUR_STATE_COOKIE_TOGGLE: FourStateCookieSettingsPreference fourStateCookieToggle = -@@ -1165,7 +1193,11 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -1165,7 +1193,11 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment } else if (mCategory.getType() == SiteSettingsCategory.Type.THIRD_PARTY_COOKIES) { infoText.setSummary(R.string.website_settings_third_party_cookies_page_description); } else { @@ -1249,7 +1248,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } // Hide the anti-abuse text preferences, as needed. -@@ -1189,6 +1221,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -1189,6 +1221,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment screen.removePreference(antiAbuseThingsToConsiderHeader); screen.removePreference(antiAbuseThingsToConsiderSectionOne); } @@ -1257,7 +1256,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c if (permissionBlockedByOs) { maybeShowOsWarning(screen); -@@ -1352,7 +1385,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -1352,7 +1385,7 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment getSiteSettingsDelegate().getBrowserContextHandle(), contentType); int[] descriptionIds = ContentSettingsResources.getTriStateSettingDescriptionIDs(contentType); @@ -1266,7 +1265,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } private void configureBinaryToggle(ChromeSwitchPreference binaryToggle, int contentType) { -@@ -1478,6 +1511,14 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -1478,6 +1511,14 @@ public class SingleCategorySettings extends BaseSiteSettingsFragment @ContentSettingValues Integer value = site.getContentSetting(browserContextHandle, contentSettingsType); @@ -1284,15 +1283,15 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java -@@ -45,6 +45,7 @@ import org.chromium.content_public.browser.BrowserContextHandle; - import java.util.Collection; +@@ -46,6 +46,7 @@ import java.util.Collection; import java.util.HashMap; + import java.util.List; import java.util.Map; +import java.util.List; /** * Shows the permissions and other settings for a particular website. -@@ -170,7 +171,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -171,7 +172,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment case ContentSettingsType.CLIPBOARD_READ_WRITE: return "clipboard_permission_list"; default: @@ -1301,7 +1300,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } } -@@ -520,7 +521,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -536,7 +537,8 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment private void setupContentSettingsPreferences() { mMaxPermissionOrder = findPreference(PREF_PERMISSIONS_HEADER).getOrder(); @@ -1311,7 +1310,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c Preference preference = new ChromeSwitchPreference(getStyledContext()); preference.setKey(getPreferenceKey(type)); -@@ -963,14 +965,22 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1016,14 +1018,22 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment private void setupContentSettingsPreference(Preference preference, @ContentSettingValues @Nullable Integer value, boolean isEmbargoed) { @@ -1337,7 +1336,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c switchPreference.setOnPreferenceChangeListener(this); @ContentSettingsType int contentType = getContentSettingsTypeFromPreferenceKey(preference.getKey()); -@@ -1123,7 +1133,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1176,7 +1186,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment public @ContentSettingsType int getContentSettingsTypeFromPreferenceKey(String preferenceKey) { if (mPreferenceMap == null) { mPreferenceMap = new HashMap<>(); @@ -1346,7 +1345,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c String key = getPreferenceKey(type); if (key != null) { mPreferenceMap.put(key, type); -@@ -1165,7 +1175,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1218,7 +1228,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment } mSite.setContentSetting(browserContextHandle, type, permission); @@ -1355,7 +1354,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c preference.setIcon(getContentSettingsIcon(type, permission)); if (mWebsiteSettingsObserver != null) { -@@ -1195,7 +1205,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1248,7 +1258,7 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment // TODO(mvanouwerkerk): Refactor this class so that it does not depend on the screen state // for its logic. This class should maintain its own data model, and only update the screen // after a change is made. @@ -1367,7 +1366,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java -@@ -37,6 +37,7 @@ public class SiteSettings extends SiteSettingsPreferenceFragment +@@ -37,6 +37,7 @@ public class SiteSettings extends BaseSiteSettingsFragment : R.xml.site_settings_preferences); getActivity().setTitle(getContext().getString(R.string.prefs_site_settings)); @@ -1375,7 +1374,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c configurePreferences(); updatePreferenceStates(); } -@@ -52,7 +53,7 @@ public class SiteSettings extends SiteSettingsPreferenceFragment +@@ -52,7 +53,7 @@ public class SiteSettings extends BaseSiteSettingsFragment private void configurePreferences() { // Remove unsupported settings categories. @@ -1384,7 +1383,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c type++) { if (!getSiteSettingsDelegate().isCategoryVisible(type)) { getPreferenceScreen().removePreference(findPreference(type)); -@@ -68,7 +69,7 @@ public class SiteSettings extends SiteSettingsPreferenceFragment +@@ -68,7 +69,7 @@ public class SiteSettings extends BaseSiteSettingsFragment @CookieControlsMode int cookieControlsMode = UserPrefs.get(browserContextHandle).getInteger(COOKIE_CONTROLS_MODE); @@ -1393,7 +1392,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c Preference p = findPreference(prefCategory); int contentType = SiteSettingsCategory.contentSettingsType(prefCategory); // p can be null if the Preference was removed in configurePreferences. -@@ -133,10 +134,13 @@ public class SiteSettings extends SiteSettingsPreferenceFragment +@@ -133,10 +134,13 @@ public class SiteSettings extends BaseSiteSettingsFragment } else if (Type.ZOOM == prefCategory) { // Don't want to set a summary for Zoom because we don't want any message to display // under the Zoom row on site settings. @@ -1541,7 +1540,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java -@@ -246,6 +246,12 @@ public final class Website implements WebsiteEntry { +@@ -263,6 +263,12 @@ public final class Website implements WebsiteEntry { RecordUserAction.record("SoundContentSetting.UnmuteBy.SiteSettings"); } } @@ -1557,7 +1556,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java -@@ -98,7 +98,7 @@ public class WebsitePermissionsFetcher { +@@ -106,7 +106,7 @@ public class WebsitePermissionsFetcher { case ContentSettingsType.USB_GUARD: return WebsitePermissionsType.CHOSEN_OBJECT_INFO; default: @@ -1566,7 +1565,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c } } -@@ -214,7 +214,7 @@ public class WebsitePermissionsFetcher { +@@ -220,7 +220,7 @@ public class WebsitePermissionsFetcher { if (SiteSettingsFeatureMap.isEnabled(SiteSettingsFeatureList.SITE_DATA_IMPROVEMENTS)) { queue.add(new CookiesInfoFetcher()); } @@ -1663,7 +1662,7 @@ new file mode 100644 diff --git a/components/content_settings/android/BUILD.gn b/components/content_settings/android/BUILD.gn --- a/components/content_settings/android/BUILD.gn +++ b/components/content_settings/android/BUILD.gn -@@ -52,6 +52,7 @@ android_library("content_settings_enums_java") { +@@ -53,6 +53,7 @@ android_library("content_settings_enums_java") { } java_cpp_enum("content_settings_enums_javagen") { @@ -1674,7 +1673,7 @@ diff --git a/components/content_settings/android/BUILD.gn b/components/content_s diff --git a/components/content_settings/core/browser/BUILD.gn b/components/content_settings/core/browser/BUILD.gn --- a/components/content_settings/core/browser/BUILD.gn +++ b/components/content_settings/core/browser/BUILD.gn -@@ -85,6 +85,13 @@ static_library("browser") { +@@ -87,6 +87,13 @@ static_library("browser") { } configs += [ "//build/config/compiler:wexit_time_destructors" ] @@ -1705,7 +1704,7 @@ diff --git a/components/content_settings/core/browser/content_settings_registry. namespace content_settings { -@@ -629,6 +630,7 @@ void ContentSettingsRegistry::Init() { +@@ -630,6 +631,7 @@ void ContentSettingsRegistry::Init() { WebsiteSettingsRegistry::DESKTOP, ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE, ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); @@ -1716,7 +1715,7 @@ diff --git a/components/content_settings/core/browser/content_settings_registry. diff --git a/components/content_settings/core/browser/content_settings_uma_util.cc b/components/content_settings/core/browser/content_settings_uma_util.cc --- a/components/content_settings/core/browser/content_settings_uma_util.cc +++ b/components/content_settings/core/browser/content_settings_uma_util.cc -@@ -175,8 +175,9 @@ void RecordContentSettingsHistogram(const std::string& name, +@@ -176,8 +176,9 @@ void RecordContentSettingsHistogram(const std::string& name, } int ContentSettingTypeToHistogramValue(ContentSettingsType content_setting) { @@ -1838,10 +1837,10 @@ diff --git a/components/content_settings/core/browser/website_settings_registry. diff --git a/components/content_settings/core/common/BUILD.gn b/components/content_settings/core/common/BUILD.gn --- a/components/content_settings/core/common/BUILD.gn +++ b/components/content_settings/core/common/BUILD.gn -@@ -52,6 +52,13 @@ static_library("common") { - if (use_blink) { - deps += [ "//components/privacy_sandbox:features" ] - } +@@ -49,6 +49,13 @@ static_library("common") { + "//net", + "//url", + ] + deps += [ ":bromite_content_settings" ] +} + @@ -2031,17 +2030,21 @@ diff --git a/components/content_settings/core/common/content_settings_param_trai diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h --- a/components/content_settings/core/common/content_settings_types.h +++ b/components/content_settings/core/common/content_settings_types.h -@@ -356,7 +356,9 @@ enum class ContentSettingsType : int32_t { - // `net::features::kTpcdMetadataGrants` is enabled. - TPCD_METADATA_GRANTS, +@@ -365,6 +365,14 @@ enum class ContentSettingsType : int32_t { + // request. + FILE_SYSTEM_ACCESS_EXTENDED_PERMISSION, -- NUM_TYPES, + NUM_TYPES_CHROMIUM, +#include "components/content_settings/core/common/bromite_content_settings.inc" + NUM_TYPES_BROMITE, ++}; ++ ++struct ContentSettingsTypeHash { ++ FILE_SYSTEM_ACCESS_EXTENDED_PERMISSION, ++ + NUM_TYPES, }; - struct ContentSettingsTypeHash { diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc b/components/content_settings/renderer/content_settings_agent_impl.cc --- a/components/content_settings/renderer/content_settings_agent_impl.cc +++ b/components/content_settings/renderer/content_settings_agent_impl.cc @@ -2133,16 +2136,16 @@ diff --git a/components/page_info/android/java/src/org/chromium/components/page_ diff --git a/components/page_info/android/page_info_controller_android.cc b/components/page_info/android/page_info_controller_android.cc --- a/components/page_info/android/page_info_controller_android.cc +++ b/components/page_info/android/page_info_controller_android.cc -@@ -11,6 +11,7 @@ - #include "base/command_line.h" +@@ -12,6 +12,7 @@ #include "base/containers/contains.h" + #include "base/feature_list.h" #include "components/content_settings/core/browser/host_content_settings_map.h" +#include "components/content_settings/core/browser/website_settings_registry.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/page_info/android/jni_headers/PageInfoController_jni.h" -@@ -146,6 +147,15 @@ void PageInfoControllerAndroid::SetPermissionInfo( - ContentSettingsType::FEDERATED_IDENTITY_API); +@@ -152,6 +153,15 @@ void PageInfoControllerAndroid::SetPermissionInfo( + permissions_to_display.push_back(ContentSettingsType::STORAGE_ACCESS); } + content_settings::WebsiteSettingsRegistry* website_settings = @@ -2157,7 +2160,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp std::map user_specified_settings_to_display; std::map -@@ -205,6 +215,14 @@ absl::optional PageInfoControllerAndroid::GetSettingToDisplay( +@@ -211,6 +221,14 @@ absl::optional PageInfoControllerAndroid::GetSettingToDisplay( return permission.setting; } @@ -2183,7 +2186,7 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info. #include "components/content_settings/browser/ui/cookie_controls_controller.h" #include "components/content_settings/core/browser/content_settings_registry.h" #include "components/content_settings/core/browser/content_settings_uma_util.h" -@@ -1239,6 +1240,14 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, +@@ -1246,6 +1247,14 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, // applies to permissions listed in |kPermissionType|. bool PageInfo::ShouldShowPermission( const PageInfo::PermissionInfo& info) const { @@ -2198,7 +2201,7 @@ diff --git a/components/page_info/page_info.cc b/components/page_info/page_info. // Note |ContentSettingsType::ADS| will show up regardless of its default // value when it has been activated on the current origin. if (info.type == ContentSettingsType::ADS) { -@@ -1339,7 +1348,19 @@ void PageInfo::PresentSitePermissions() { +@@ -1346,7 +1355,19 @@ void PageInfo::PresentSitePermissions() { HostContentSettingsMap* content_settings = GetContentSettings(); DCHECK(web_contents_); @@ -2230,7 +2233,7 @@ diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_in #include "components/page_info/core/features.h" #include "components/page_info/page_info.h" #include "components/page_info/page_info_ui_delegate.h" -@@ -597,6 +598,12 @@ PageInfoUI::~PageInfoUI() = default; +@@ -607,6 +608,12 @@ PageInfoUI::~PageInfoUI() = default; // static std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { @@ -2243,7 +2246,7 @@ diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_in for (const PermissionUIInfo& info : GetContentSettingsUIInfo()) { if (info.type == type) return l10n_util::GetStringUTF16(info.string_id); -@@ -608,6 +615,12 @@ std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { +@@ -618,6 +625,12 @@ std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { // static std::u16string PageInfoUI::PermissionTypeToUIStringMidSentence( ContentSettingsType type) { @@ -2256,7 +2259,7 @@ diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_in for (const PermissionUIInfo& info : GetContentSettingsUIInfo()) { if (info.type == type) return l10n_util::GetStringUTF16(info.string_id_mid_sentence); -@@ -1034,6 +1047,11 @@ bool PageInfoUI::ContentSettingsTypeInPageInfo(ContentSettingsType type) { +@@ -1052,6 +1065,11 @@ bool PageInfoUI::ContentSettingsTypeInPageInfo(ContentSettingsType type) { if (info.type == type) return true; } @@ -2348,18 +2351,5 @@ diff --git a/third_party/blink/renderer/core/execution_context/execution_context enum ReasonForCallingCanExecuteScripts { kAboutToExecuteScript, -diff --git a/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java b/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java ---- a/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java -+++ b/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java -@@ -160,6 +160,9 @@ public class WebLayerSiteSettingsDelegate - @Override - public void dismissPrivacySandboxSnackbar() {} - -+ @Override -+ public void launchHelpAndFeedbackActivity(Activity currentActivity, String url) {} -+ - @Override - public boolean isFirstPartySetsDataAccessEnabled() { - return false; -- 2.25.1 diff --git a/build/patches/Keep-empty-tabs-between-sessions.patch b/build/patches/Keep-empty-tabs-between-sessions.patch index 4c8d43c2..f3415463 100644 --- a/build/patches/Keep-empty-tabs-between-sessions.patch +++ b/build/patches/Keep-empty-tabs-between-sessions.patch @@ -5,16 +5,27 @@ Subject: Keep empty tabs between sessions Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- + .../org/chromium/chrome/browser/ChromeTabbedActivity.java | 1 + .../chrome/browser/tabmodel/TabPersistentStore.java | 8 -------- - .../browser/tab/state/CriticalPersistedTabData.java | 3 --- - 2 files changed, 11 deletions(-) + 2 files changed, 1 insertion(+), 8 deletions(-) +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +@@ -3255,6 +3255,7 @@ public class ChromeTabbedActivity extends ChromeActivity +@@ -788,6 +791,16 @@ public abstract class ChromeActivity int toolbarLayoutId = getToolbarLayoutId(); if (toolbarLayoutId != ActivityUtils.NO_RESOURCE_ID && controlContainer != null) { controlContainer.initWithToolbar(toolbarLayoutId); @@ -770,7 +771,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/Comp diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java -@@ -41,6 +41,8 @@ import org.chromium.components.browser_ui.widget.gesture.SwipeGestureListener.Sw +@@ -45,6 +45,8 @@ import org.chromium.components.browser_ui.widget.gesture.SwipeGestureListener.Sw import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; @@ -778,8 +779,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo +import org.chromium.chrome.browser.flags.CachedFeatureFlags; import java.util.List; - -@@ -256,7 +258,10 @@ public class LayoutManagerChrome + import java.util.concurrent.Callable; +@@ -347,7 +349,10 @@ public class LayoutManagerChrome @Override public SwipeHandler createToolbarSwipeHandler(boolean supportSwipeDown) { @@ -791,7 +792,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo } @Override -@@ -459,9 +464,11 @@ public class LayoutManagerChrome +@@ -614,9 +619,11 @@ public class LayoutManagerChrome private static final float SWIPE_RANGE_DEG = 25; private final boolean mSupportSwipeDown; @@ -804,7 +805,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo } @Override -@@ -493,6 +500,9 @@ public class LayoutManagerChrome +@@ -648,6 +655,9 @@ public class LayoutManagerChrome && mScrollDirection == ScrollDirection.DOWN) { RecordUserAction.record("MobileToolbarSwipeOpenStackView"); showLayout(LayoutType.TAB_SWITCHER, true); @@ -814,7 +815,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo } else if (mScrollDirection == ScrollDirection.LEFT || mScrollDirection == ScrollDirection.RIGHT) { startShowing(mToolbarSwipeLayout, true); -@@ -539,6 +549,8 @@ public class LayoutManagerChrome +@@ -694,6 +704,8 @@ public class LayoutManagerChrome direction = ScrollDirection.RIGHT; } else if (swipeAngle < 270 + SWIPE_RANGE_DEG && swipeAngle > 270 - SWIPE_RANGE_DEG) { direction = ScrollDirection.DOWN; @@ -823,7 +824,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo } return direction; -@@ -552,7 +564,7 @@ public class LayoutManagerChrome +@@ -707,7 +719,7 @@ public class LayoutManagerChrome return false; } @@ -835,7 +836,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java -@@ -29,6 +29,7 @@ import org.chromium.chrome.browser.toolbar.ControlContainer; +@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.toolbar.ControlContainer; import org.chromium.chrome.features.start_surface.StartSurface; import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; @@ -843,16 +844,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo import java.util.concurrent.Callable; -@@ -100,7 +101,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { +@@ -91,7 +92,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { () -> mLayerTitleCache, tabModelStartupInfoSupplier, lifecycleDispatcher, multiInstanceManager, -- toolbarContainerView); -+ toolbarContainerView, +- toolbarContainerView, tabHoverCardViewStub, tabContentManagerSupplier); ++ toolbarContainerView, tabHoverCardViewStub, tabContentManagerSupplier, + /*browserControlsManagerSupplier*/ () -> getBrowserControlsManager()); - mScrimCoordinator = scrimCoordinator; - mCreateStartSurfaceCallable = delayedStartSurfaceCallable; addSceneOverlay(mTabStripLayoutHelperManager); + addObserver(mTabStripLayoutHelperManager.getTabSwitcherObserver()); + diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java @@ -895,7 +896,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java -@@ -520,7 +520,7 @@ public class StripLayoutHelper implements StripLayoutTab.StripLayoutTabDelegate +@@ -531,7 +531,7 @@ public class StripLayoutHelper implements StripLayoutTab.StripLayoutTabDelegate // position 0 is on the left. Account for that in the offset calculation. boolean isRtl = LocalizationUtils.isLayoutRtl(); boolean useUnadjustedScrollOffset = isRtl != isLeft; @@ -907,7 +908,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java -@@ -62,6 +62,9 @@ import org.chromium.ui.base.LocalizationUtils; +@@ -67,6 +67,9 @@ import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.base.PageTransition; import org.chromium.ui.resources.ResourceManager; import org.chromium.url.GURL; @@ -917,7 +918,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import java.util.List; -@@ -166,9 +169,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa +@@ -175,9 +178,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa private final String mDefaultTitle; private final Supplier mLayerTitleCacheSupplier; @@ -928,10 +929,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over @Override public void onDown(float x, float y, boolean fromMouse, int buttons) { + y -= mStripFilterArea.top; - if (mModelSelectorButton.onDown(x, y)) return; - getActiveStripLayoutHelper().onDown(time(), x, y, fromMouse, buttons); - } -@@ -186,12 +193,14 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa + // Clear any persisting tab strip hover state on a down event on the strip. Clearance is + // posted at a delay, as a best effort for the clearance to take effect after any + // animations triggered by the down event have ended. +@@ -201,12 +208,14 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa @Override public void drag(float x, float y, float dx, float dy, float tx, float ty) { @@ -946,7 +947,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over long time = time(); if (mModelSelectorButton.click(x, y)) { mModelSelectorButton.handleClick(time); -@@ -202,11 +211,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa +@@ -217,11 +226,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa @Override public void fling(float x, float y, float velocityX, float velocityY) { @@ -960,26 +961,26 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().onLongPress(time(), x, y); } -@@ -283,7 +294,8 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa - Supplier layerTitleCacheSupplier, - ObservableSupplier tabModelStartupInfoSupplier, +@@ -309,7 +320,8 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa ActivityLifecycleDispatcher lifecycleDispatcher, -- MultiInstanceManager multiInstanceManager, View toolbarContainerView) { -+ MultiInstanceManager multiInstanceManager, View toolbarContainerView, + MultiInstanceManager multiInstanceManager, View toolbarContainerView, + @NonNull ViewStub tabHoverCardViewStub, +- ObservableSupplier tabContentManagerSupplier) { ++ ObservableSupplier tabContentManagerSupplier, + Supplier browserControlsManagerSupplier) { mUpdateHost = updateHost; mLayerTitleCacheSupplier = layerTitleCacheSupplier; mTabStripTreeProvider = new TabStripSceneLayer(context); -@@ -382,6 +394,8 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa +@@ -409,6 +421,8 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa mModelSelectorButton, multiInstanceManager, toolbarContainerView); mIncognitoHelper = new StripLayoutHelper(context, managerHost, updateHost, renderHost, true, mModelSelectorButton, multiInstanceManager, toolbarContainerView); + mBrowserControlsManagerSupplier = browserControlsManagerSupplier; + mDpToPx = context.getResources().getDisplayMetrics().density; - if (tabModelStartupInfoSupplier != null) { - if (tabModelStartupInfoSupplier.hasValue()) { -@@ -475,9 +489,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa + tabHoverCardViewStub.setOnInflateListener((viewStub, view) -> { + var hoverCardView = (StripTabHoverCardView) view; +@@ -512,9 +526,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa int hoveredTabId = getActiveStripLayoutHelper().getLastHoveredTab() == null ? TabModel.INVALID_TAB_INDEX : getActiveStripLayoutHelper().getLastHoveredTab().getId(); @@ -994,7 +995,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over return mTabStripTreeProvider; } -@@ -522,7 +540,17 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa +@@ -559,7 +577,17 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa mIncognitoHelper.onSizeChanged( mWidth, mHeight, orientationChanged, LayoutManagerImpl.time()); @@ -1237,7 +1238,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/Chr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java -@@ -108,6 +108,8 @@ import org.chromium.content_public.browser.NavigationController; +@@ -110,6 +110,8 @@ import org.chromium.content_public.browser.NavigationController; import org.chromium.content_public.browser.NavigationEntry; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; @@ -1246,7 +1247,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. import java.util.List; -@@ -587,10 +589,15 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -605,10 +607,15 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide // + topControlsDistanceToRest| will give the margin for the current animation frame. final int topControlsDistanceToRest = mBrowserControlsStateProvider.getContentOffset() - mBrowserControlsStateProvider.getTopControlsHeight(); @@ -1264,7 +1265,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. if (topMargin != layoutParams.topMargin || bottomMargin != layoutParams.bottomMargin) { layoutParams.topMargin = topMargin; -@@ -610,7 +617,7 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -628,7 +635,7 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide * strip. */ private int getToolbarExtraYOffset() { @@ -1369,7 +1370,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se updateAnchorViewLayout(); // Create status bar color controller and assign to search activity. -@@ -237,7 +248,7 @@ public class SearchActivity extends AsyncInitializationActivity +@@ -238,7 +249,7 @@ public class SearchActivity extends AsyncInitializationActivity getOnBackPressedDispatcher().addCallback(this, backPressManager.getCallback()); } // clang-format off @@ -1381,7 +1382,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java -@@ -324,6 +324,11 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity +@@ -330,6 +330,11 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity if (fragment instanceof INeedSnackbarManager) { ((INeedSnackbarManager)fragment).setSnackbarManager(mSnackbarManager); } @@ -1457,8 +1458,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar /** * Contains logic for managing the toolbar visual component. This class manages the interactions * with the rest of the application to ensure the toolbar is always visually up to date. -@@ -702,7 +705,7 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve - mIncognitoStateProvider.isIncognitoSelected())); +@@ -708,7 +711,7 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve + : null; // clang-format off LocationBarCoordinator locationBarCoordinator = new LocationBarCoordinator( - mActivity.findViewById(R.id.location_bar), toolbarLayout, profileSupplier, @@ -1466,7 +1467,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar PrivacyPreferencesManagerImpl.getInstance(), mLocationBarModel, mActionModeController.getActionModeCallback(), new WindowDelegate(mActivity.getWindow()), windowAndroid, mActivityTabProvider, -@@ -970,11 +973,13 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -976,11 +979,13 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve // the height won't be measured by the background image. if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1480,7 +1481,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mControlContainer.removeOnLayoutChangeListener(mLayoutChangeListener); mLayoutChangeListener = null; } -@@ -1397,13 +1402,25 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -1403,13 +1408,25 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve return ((LocationBarCoordinator) mLocationBar).getUrlBarTextWithoutAutocomplete(); } @@ -1508,7 +1509,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mIncognitoStateProvider, mScrimCoordinator, mOmniboxFocusStateSupplier, mBottomSheetController, mActivityLifecycleDispatcher, mIsWarmOnResumeSupplier, mTabModelSelector, mTabContentManager, mCompositorViewHolder, -@@ -1411,8 +1428,9 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -1417,8 +1434,9 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve mLayoutStateProviderSupplier, mSnackbarManager); var bottomControlsCoordinator = new BottomControlsCoordinator(mActivity, mWindowAndroid, mLayoutManager, mCompositorViewHolder.getResourceManager(), mBrowserControlsSizer, @@ -1520,7 +1521,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBottomControlsCoordinatorSupplier.set(bottomControlsCoordinator); bottomControlsCoordinator.getHandleBackPressChangedSupplier().addObserver( (x) -> { onBackPressStateChanged(); }); -@@ -2252,6 +2270,15 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -2261,6 +2279,15 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve private void setControlContainerTopMargin(int margin) { final ViewGroup.MarginLayoutParams layoutParams = ((ViewGroup.MarginLayoutParams) mControlContainer.getLayoutParams()); @@ -1594,7 +1595,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/Statu import org.chromium.base.CallbackController; import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.OneshotSupplier; -@@ -497,6 +501,12 @@ public class StatusBarColorController +@@ -500,6 +504,12 @@ public class StatusBarColorController boolean needsDarkStatusBarIcons = !ColorUtils.shouldUseLightForegroundOnBackground(color); UiUtils.setStatusBarIconColor(root, needsDarkStatusBarIcons); UiUtils.setStatusBarColor(window, color); @@ -1610,7 +1611,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/Statu diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -8131,6 +8131,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -8391,6 +8391,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kWindowsScrollingPersonalityDescription, kOsAll, FEATURE_VALUE_TYPE(features::kWindowsScrollingPersonality)}, @@ -1709,7 +1710,7 @@ diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrom diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -2006,6 +2006,10 @@ const char kImprovedKeyboardShortcutsDescription[] = +@@ -2038,6 +2038,10 @@ const char kImprovedKeyboardShortcutsDescription[] = "Ensure keyboard shortcuts work consistently with international keyboard " "layouts and deprecate legacy shortcuts."; @@ -1723,7 +1724,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1134,6 +1134,9 @@ extern const char kImprovedIncognitoScreenshotDescription[]; +@@ -1153,6 +1153,9 @@ extern const char kImprovedIncognitoScreenshotDescription[]; extern const char kImprovedKeyboardShortcutsName[]; extern const char kImprovedKeyboardShortcutsDescription[]; @@ -1736,15 +1737,15 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -10,6 +10,7 @@ - - #include "base/android/feature_map.h" +@@ -12,6 +12,7 @@ #include "base/feature_list.h" -+#include "cc/base/features.h" + #include "base/features.h" #include "base/no_destructor.h" ++#include "cc/base/features.h" #include "chrome/browser/browser_features.h" #include "chrome/browser/feature_guide/notifications/feature_notification_guide_service.h" -@@ -262,6 +263,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { + #include "chrome/browser/flags/android/chrome_session_state.h" +@@ -271,6 +272,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kLensCameraAssistedSearch, &kLensOnQuickActionSearchWidget, &kNewTabSearchEngineUrlAndroid, @@ -1755,7 +1756,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java -@@ -117,6 +117,12 @@ public class CachedFlag extends Flag { +@@ -131,6 +131,12 @@ public class CachedFlag extends Flag { } } @@ -1771,7 +1772,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -327,6 +327,8 @@ public abstract class ChromeFeatureList { +@@ -328,6 +328,8 @@ public abstract class ChromeFeatureList { public static final String SEARCH_READY_OMNIBOX = "SearchReadyOmnibox"; public static final String METRICS_SETTINGS_ANDROID = "MetricsSettingsAndroid"; public static final String NEW_TAB_SEARCH_ENGINE_URL_ANDROID = "NewTabSearchEngineUrlAndroid"; @@ -1780,16 +1781,16 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant"; public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = "NotificationPermissionBottomSheet"; -@@ -590,6 +592,8 @@ public abstract class ChromeFeatureList { +@@ -596,6 +598,8 @@ public abstract class ChromeFeatureList { new CachedFlag(PRIVACY_GUIDE_POST_MVP, false); public static final CachedFlag sOmniboxMatchToolbarAndStatusBarColor = new CachedFlag(OMNIBOX_MATCH_TOOLBAR_AND_STATUS_BAR_COLOR, false); + public static final CachedFlag sMoveTopToolbarToBottom = + new CachedFlag(MOVE_TOP_TOOLBAR_TO_BOTTOM, false); public static final CachedFlag sOmniboxModernizeVisualUpdate = - new CachedFlag(OMNIBOX_MODERNIZE_VISUAL_UPDATE, false); + new CachedFlag(OMNIBOX_MODERNIZE_VISUAL_UPDATE, true); public static final CachedFlag sOptimizationGuidePushNotifications = -@@ -678,6 +682,7 @@ public abstract class ChromeFeatureList { +@@ -695,6 +699,7 @@ public abstract class ChromeFeatureList { sPrivacyGuideAndroid3, sPrivacyGuidePreloadAndroid, sPrivacyGuidePostMVP, @@ -1800,7 +1801,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -1936,7 +1936,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2024,7 +2024,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #if BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kVirtualKeyboardResizesLayoutByDefault, @@ -1915,7 +1916,7 @@ diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/ch diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java -@@ -91,6 +91,7 @@ public class LocationBarCoordinator +@@ -92,6 +92,7 @@ public class LocationBarCoordinator private WindowDelegate mWindowDelegate; private WindowAndroid mWindowAndroid; private View mAutocompleteAnchorView; @@ -1923,7 +1924,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow private LocationBarMediator mLocationBarMediator; private View mUrlBar; private View mDeleteButton; -@@ -146,7 +147,7 @@ public class LocationBarCoordinator +@@ -147,7 +148,7 @@ public class LocationBarCoordinator * @param backPressManager The {@link BackPressManager} for intercepting back press. * @param tabModelSelectorSupplier Supplier of the {@link TabModelSelector}. */ @@ -1932,7 +1933,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow ObservableSupplier profileObservableSupplier, PrivacyPreferencesManager privacyPreferencesManager, LocationBarDataProvider locationBarDataProvider, ActionMode.Callback actionModeCallback, -@@ -179,11 +180,12 @@ public class LocationBarCoordinator +@@ -180,11 +181,12 @@ public class LocationBarCoordinator mActivityLifecycleDispatcher = activityLifecycleDispatcher; mActivityLifecycleDispatcher.register(this); mAutocompleteAnchorView = autocompleteAnchorView; @@ -1990,7 +1991,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java -@@ -25,6 +25,10 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; +@@ -26,6 +26,10 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -2001,7 +2002,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow /** * Coordinates the interactions with the UrlBar text component. */ -@@ -234,6 +238,11 @@ public class UrlBarCoordinator implements UrlBarEditingTextStateProvider, UrlFoc +@@ -239,6 +243,11 @@ public class UrlBarCoordinator implements UrlBarEditingTextStateProvider, UrlFoc // to show or hide keyboard anyway. This may happen when we schedule keyboard hide, and // receive a second request to hide the keyboard instantly. if (showKeyboard) { @@ -2152,7 +2153,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow /** A widget for showing a list of omnibox suggestions. */ public class OmniboxSuggestionsDropdown extends RecyclerView { /** -@@ -188,7 +192,8 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { +@@ -205,7 +209,8 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { * Constructs a new list designed for containing omnibox suggestions. * @param context Context used for contained views. */ @@ -2162,7 +2163,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow super(context, null, android.R.attr.dropDownListViewStyle); setFocusable(true); setFocusableInTouchMode(true); -@@ -199,13 +204,25 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { +@@ -216,13 +221,25 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { setItemAnimator(null); mLayoutScrollListener = new SuggestionLayoutScrollListener(context); @@ -2189,9 +2190,9 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow ViewCompat.setPaddingRelative(this, 0, 0, 0, paddingBottom); mStandardBgColor = shouldShowModernizeVisualUpdate -@@ -340,8 +357,16 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { - try (TraceEvent tracing = TraceEvent.scoped("OmniboxSuggestionsList.Measure"); - TimingMetric metric = OmniboxMetrics.recordSuggestionListMeasureTime()) { +@@ -358,8 +375,16 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { + TimingMetric metric = OmniboxMetrics.recordSuggestionListMeasureTime(); + TimingMetric metric2 = OmniboxMetrics.recordSuggestionListMeasureWallTime()) { OmniboxAlignment omniboxAlignment = mEmbedder.getCurrentAlignment(); - maybeUpdateLayoutParams(omniboxAlignment.top); - int availableViewportHeight = omniboxAlignment.height; @@ -2208,7 +2209,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow int desiredWidth = omniboxAlignment.width; adjustHorizontalPosition(); notifyObserversIfViewportHeightChanged(availableViewportHeight); -@@ -353,6 +378,12 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { +@@ -371,6 +396,12 @@ public class OmniboxSuggestionsDropdown extends RecyclerView { } } @@ -2250,7 +2251,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1771,6 +1771,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1806,6 +1806,12 @@ Your Google account may have other forms of browsing history like searches and a Force Tablet Mode @@ -2266,7 +2267,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/android/toolbar/BUILD.gn b/chrome/browser/ui/android/toolbar/BUILD.gn --- a/chrome/browser/ui/android/toolbar/BUILD.gn +++ b/chrome/browser/ui/android/toolbar/BUILD.gn -@@ -174,6 +174,7 @@ android_library("java") { +@@ -175,6 +175,7 @@ android_library("java") { "//components/user_prefs/android:java", "//content/public/android:content_java", "//third_party/android_deps:material_design_java", @@ -2602,7 +2603,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml --- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml +++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml -@@ -45,4 +45,8 @@ found in the LICENSE file. +@@ -49,4 +49,8 @@ found in the LICENSE file. android:key="captions" android:title="@string/accessibility_captions_title"/> @@ -2641,7 +2642,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); -@@ -132,6 +138,12 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -128,6 +134,12 @@ public class AccessibilitySettings extends PreferenceFragmentCompat forceTabletUiPref.setChecked(mForceTabletUIDelegate.isEnabled()); forceTabletUiPref.setOnPreferenceChangeListener(this); @@ -2654,7 +2655,7 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(Settings.ACTION_CAPTIONING_SETTINGS); -@@ -191,7 +203,11 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -198,7 +210,11 @@ public class AccessibilitySettings extends PreferenceFragmentCompat mDelegate.getBrowserContextHandle(), (Integer) newValue); } else if (PREF_PAGE_ZOOM_ALWAYS_SHOW.equals(preference.getKey())) { PageZoomUtils.setShouldAlwaysShowZoomMenuItem((Boolean) newValue); @@ -2669,17 +2670,17 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java -@@ -4,6 +4,8 @@ +@@ -6,6 +6,8 @@ package org.chromium.components.browser_ui.accessibility; - package org.chromium.components.browser_ui.accessibility; + import android.content.Context; +import android.app.Activity; + import androidx.annotation.NonNull; import androidx.preference.PreferenceFragmentCompat; -@@ -27,6 +29,10 @@ public interface AccessibilitySettingsDelegate { - void setEnabled(boolean value); +@@ -43,6 +45,10 @@ public interface AccessibilitySettingsDelegate { + void setValue(int value); } + void requestRestart(Activity activity); @@ -2700,7 +2701,7 @@ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/ #include "cc/base/math_util.h" #include "cc/slim/layer.h" #include "components/viz/common/features.h" -@@ -852,6 +853,8 @@ void RenderWidgetHostViewAndroid::OnRenderFrameMetadataChangedBeforeActivation( +@@ -857,6 +858,8 @@ void RenderWidgetHostViewAndroid::OnRenderFrameMetadataChangedBeforeActivation( // factor. Thus, |top_content_offset| in CSS pixels is also in DIPs. float top_content_offset = metadata.top_controls_height * metadata.top_controls_shown_ratio; diff --git a/build/patches/Override-Navigator-Language.patch b/build/patches/Override-Navigator-Language.patch index 0b2b9c00..3f238c8d 100644 --- a/build/patches/Override-Navigator-Language.patch +++ b/build/patches/Override-Navigator-Language.patch @@ -60,7 +60,7 @@ diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content #include "components/metrics/single_sample_metrics.h" #include "components/services/storage/privileged/mojom/indexed_db_control.mojom.h" #include "components/services/storage/public/cpp/buckets/bucket_id.h" -@@ -3220,8 +3221,11 @@ void RenderProcessHostImpl::AppendRendererCommandLine( +@@ -3217,8 +3218,11 @@ void RenderProcessHostImpl::AppendRendererCommandLine( PropagateBrowserCommandLineToRenderer(browser_command_line, command_line); // Pass on the browser locale. diff --git a/build/patches/Remove-help-menu-item.patch b/build/patches/Remove-help-menu-item.patch index 82d4a9a7..577edb17 100644 --- a/build/patches/Remove-help-menu-item.patch +++ b/build/patches/Remove-help-menu-item.patch @@ -40,7 +40,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcu diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -2416,16 +2416,6 @@ public abstract class ChromeActivity +@@ -2398,16 +2398,6 @@ public abstract class ChromeActivity final Tab currentTab = getActivityTab(); @@ -60,7 +60,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java -@@ -569,7 +569,7 @@ public abstract class BaseCustomTabActivity extends ChromeActivity& cors_exempt_header_list, network::mojom::AttributionSupport attribution_support, blink::mojom::OriginTrialsSettingsPtr origin_trials_settings) { diff --git a/build/patches/Welcome-screen.patch b/build/patches/Welcome-screen.patch index 7ef4caba..8a8bd03d 100644 --- a/build/patches/Welcome-screen.patch +++ b/build/patches/Welcome-screen.patch @@ -27,7 +27,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -515,6 +515,7 @@ chrome_java_resources = [ +@@ -523,6 +523,7 @@ chrome_java_resources = [ "java/res/layout/find_in_page.xml", "java/res/layout/find_toolbar.xml", "java/res/layout/fre_tos_privacy_disclaimer.xml", @@ -38,7 +38,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -639,6 +639,8 @@ chrome_java_sources = [ +@@ -650,6 +650,8 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/firstrun/SyncConsentFirstRunFragment.java", "java/src/org/chromium/chrome/browser/firstrun/TabbedModeFirstRunActivity.java", "java/src/org/chromium/chrome/browser/firstrun/TosDialogBehaviorSharedPrefInvalidator.java", @@ -1234,7 +1234,7 @@ new file mode 100644 diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -3263,7 +3263,29 @@ To change this setting, <resetlink>reset sync

    <resetlink>reset sync

    %1$sGoogle Maps will open in Chrome. By continuing, you agree to the <LINK1>Google Terms of Service</LINK1>, and the <LINK2>Google Chrome and ChromeOS Additional Terms of Service</LINK2>. The <LINK3>Privacy Policy</LINK3> also applies. diff --git a/build/patches/autofill-miscellaneous.patch b/build/patches/autofill-miscellaneous.patch index f14bf221..5fc50c89 100644 --- a/build/patches/autofill-miscellaneous.patch +++ b/build/patches/autofill-miscellaneous.patch @@ -16,14 +16,14 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../core/browser/autofill_download_manager.h | 2 - .../core/browser/browser_autofill_manager.h | 4 +- .../autofill/core/common/autofill_features.cc | 4 +- - .../autofill/core/common/autofill_prefs.cc | 8 ++-- + .../autofill/core/common/autofill_prefs.cc | 10 ++--- .../password_generation_frame_helper.cc | 4 -- - 8 files changed, 19 insertions(+), 59 deletions(-) + 8 files changed, 20 insertions(+), 60 deletions(-) diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -1078,11 +1078,11 @@ void RegisterProfilePrefsForMigration( +@@ -1133,11 +1133,11 @@ void RegisterProfilePrefsForMigration( PrefRegistry::LOSSY_PREF); // Deprecated 11/2022. @@ -41,7 +41,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc --- a/chrome/browser/ui/autofill/chrome_autofill_client.cc +++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc -@@ -200,12 +200,7 @@ ChromeAutofillClient::GetURLLoaderFactory() { +@@ -215,12 +215,7 @@ ChromeAutofillClient::GetURLLoaderFactory() { } AutofillDownloadManager* ChromeAutofillClient::GetDownloadManager() { @@ -148,7 +148,7 @@ diff --git a/components/autofill/core/browser/autofill_download_manager.h b/comp diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/components/autofill/core/browser/browser_autofill_manager.h --- a/components/autofill/core/browser/browser_autofill_manager.h +++ b/components/autofill/core/browser/browser_autofill_manager.h -@@ -740,9 +740,9 @@ class BrowserAutofillManager : public AutofillManager, +@@ -766,9 +766,9 @@ class BrowserAutofillManager : public AutofillManager, autocomplete_unrecognized_fallback_logger_; // Have we logged whether Autofill is enabled for this page load? @@ -163,7 +163,7 @@ diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/compo diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc -@@ -837,8 +837,8 @@ BASE_FEATURE(kAutofillLogToTerminal, +@@ -797,8 +797,8 @@ BASE_FEATURE(kAutofillLogToTerminal, // "upload" resources. // i.e., https://other.autofill.server:port/tbproxy/af/ BASE_FEATURE(kAutofillServerCommunication, @@ -177,7 +177,7 @@ diff --git a/components/autofill/core/common/autofill_features.cc b/components/a diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc --- a/components/autofill/core/common/autofill_prefs.cc +++ b/components/autofill/core/common/autofill_prefs.cc -@@ -140,7 +140,7 @@ const char kAutofillUsingVirtualViewStructure[] = +@@ -144,7 +144,7 @@ const char kAutofillUsingVirtualViewStructure[] = void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { // Synced prefs. Used for cross-device choices, e.g., credit card Autofill. registry->RegisterBooleanPref( @@ -186,7 +186,7 @@ diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/auto user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterIntegerPref( prefs::kAutofillLastVersionDeduped, 0, -@@ -152,10 +152,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -156,10 +156,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { prefs::kAutofillLastVersionDisusedAddressesDeleted, 0, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( @@ -194,24 +194,27 @@ diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/auto + prefs::kAutofillCreditCardEnabled, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( -- prefs::kAutofillIbanEnabled, true, -+ prefs::kAutofillIbanEnabled, false, +- prefs::kAutofillPaymentCvcStorage, true, ++ prefs::kAutofillPaymentCvcStorage, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); - registry->RegisterBooleanPref( - prefs::kAutofillPaymentCvcStorage, true, -@@ -189,7 +189,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { + + // Non-synced prefs. Used for per-device choices, e.g., signin promo. +@@ -201,9 +201,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { + #endif // Deprecated prefs registered for migration. - registry->RegisterBooleanPref( -- prefs::kAutofillEnabledDeprecated, true, -+ prefs::kAutofillEnabledDeprecated, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); +- registry->RegisterBooleanPref(prefs::kAutofillEnabledDeprecated, true); ++ registry->RegisterBooleanPref(prefs::kAutofillEnabledDeprecated, false); registry->RegisterBooleanPref(prefs::kAutofillOrphanRowsRemoved, false); +- registry->RegisterBooleanPref(prefs::kAutofillIbanEnabled, true); ++ registry->RegisterBooleanPref(prefs::kAutofillIbanEnabled, false); + #if BUILDFLAG(IS_ANDROID) + registry->RegisterBooleanPref(prefs::kAutofillUsingVirtualViewStructure, diff --git a/components/password_manager/core/browser/password_generation_frame_helper.cc b/components/password_manager/core/browser/password_generation_frame_helper.cc --- a/components/password_manager/core/browser/password_generation_frame_helper.cc +++ b/components/password_manager/core/browser/password_generation_frame_helper.cc -@@ -101,7 +101,6 @@ void PasswordGenerationFrameHelper::ProcessPasswordRequirements( +@@ -95,7 +95,6 @@ void PasswordGenerationFrameHelper::ProcessPasswordRequirements( // In order for password generation to be enabled, we need to make sure: // (1) Password sync is enabled, and // (2) Password saving is enabled @@ -219,7 +222,7 @@ diff --git a/components/password_manager/core/browser/password_generation_frame_ bool PasswordGenerationFrameHelper::IsGenerationEnabled( bool log_debug_data) const { std::unique_ptr logger; -@@ -111,9 +110,6 @@ bool PasswordGenerationFrameHelper::IsGenerationEnabled( +@@ -105,9 +104,6 @@ bool PasswordGenerationFrameHelper::IsGenerationEnabled( } GURL url = driver_->GetLastCommittedURL(); From 5a80836ca4a2d8b4f58c5369a4fb346b77250ef6 Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Fri, 27 Oct 2023 16:16:57 +0200 Subject: [PATCH 03/23] update eyeo adblock patches --- build/bromite_patches_list.txt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/build/bromite_patches_list.txt b/build/bromite_patches_list.txt index 2cb2a4b4..fed6f41f 100644 --- a/build/bromite_patches_list.txt +++ b/build/bromite_patches_list.txt @@ -1,9 +1,8 @@ -eyeo-117.0.5938.0-base.patch -eyeo-117.0.5938.0-chrome_integration.patch -eyeo-117.0.5938.0-android_api.patch -eyeo-117.0.5938.0-android_settings.patch -eyeo-117.0.5938.0-extension_api.patch -00Fix-eyeo-Browser-Ad-filtering-patches.patch +eyeo-beta-118.0.5993.48-base.patch +eyeo-beta-118.0.5993.48-chrome_integration.patch +eyeo-beta-118.0.5993.48-android_api.patch +eyeo-beta-118.0.5993.48-android_settings.patch +eyeo-beta-118.0.5993.48-extension_api.patch 00Eyeo-Adblock-Remove-Privacy-Issues.patch 00AdblockPlus-add-blocking-in-service-workers.patch From 6828b4659ea01ccecc35bafd9ba0e5051fc05edc Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Fri, 27 Oct 2023 16:17:36 +0200 Subject: [PATCH 04/23] bump to 119.0.6045.53 --- build/RELEASE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/RELEASE b/build/RELEASE index 2a3fb5e4..43dc76af 100644 --- a/build/RELEASE +++ b/build/RELEASE @@ -1 +1 @@ -118.0.5993.118 +119.0.6045.53 From c5b954b78e7695b613a140dfaeb715980cd36fe3 Mon Sep 17 00:00:00 2001 From: uazo <29201891+uazo@users.noreply.github.com> Date: Fri, 27 Oct 2023 08:29:17 -0600 Subject: [PATCH 05/23] Update check-git-apply.yaml --- .github/workflows/check-git-apply.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/check-git-apply.yaml b/.github/workflows/check-git-apply.yaml index 94c9cc93..47ad700d 100644 --- a/.github/workflows/check-git-apply.yaml +++ b/.github/workflows/check-git-apply.yaml @@ -96,8 +96,7 @@ jobs: git commit -m $VERSION git tag -a $VERSION -m $VERSION - git add -f v8 - git commit -m ":NOEXPORT: v8" + git add -f v8 && git commit -m ":NOEXPORT: v8" || true - name: Apply patches ${{ github.event.inputs.rtag }} run: | From d30d8a8de02bab9434bd634272cf07e4e6e40792 Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Sun, 29 Oct 2023 17:52:09 +0100 Subject: [PATCH 06/23] v119 final patches --- .../00Add-setting-to-clear-data-on-exit.patch | 14 +- build/patches/00Add-support-to-jxl.patch | 105 +- ...00Eyeo-Adblock-Remove-Privacy-Issues.patch | 4267 ++++++++++++++++- build/patches/00Fix-chromium-build-bugs.patch | 206 +- build/patches/00Internal-firewall.patch | 213 +- ...ning-all-cookies-by-top-frame-domain.patch | 30 +- ...th-header-upon-cross-origin-redirect.patch | 38 +- build/patches/00WIN-Fix-log-to-file.patch | 13 +- build/patches/00add-browser-policy.patch | 2 +- .../Add-an-always-incognito-mode.patch | 36 +- ...dd-custom-tab-intents-privacy-option.patch | 4 +- ...Add-lifetime-options-for-permissions.patch | 19 +- .../Add-option-to-use-home-page-as-NTP.patch | 31 +- .../Bromite-subresource-adblocker.patch | 4 +- .../Content-settings-infrastructure.patch | 75 +- build/patches/Disable-PrivacyGuide.patch | 17 +- .../patches/Disable-all-predictors-code.patch | 22 +- .../Experimental-user-scripts-support.patch | 9 +- ...story-number-of-days-privacy-setting.patch | 10 +- .../Keep-empty-tabs-between-sessions.patch | 14 +- .../Move-navigation-bar-to-bottom.patch | 369 +- ...nt-settings-back-to-privacy-settings.patch | 11 +- build/patches/Remove-help-menu-item.patch | 195 +- build/patches/User-agent-customization.patch | 14 +- build/patches/bromite-build-utils.patch | 7 +- 25 files changed, 4986 insertions(+), 739 deletions(-) diff --git a/build/patches/00Add-setting-to-clear-data-on-exit.patch b/build/patches/00Add-setting-to-clear-data-on-exit.patch index 1f553ff7..4da4be82 100644 --- a/build/patches/00Add-setting-to-clear-data-on-exit.patch +++ b/build/patches/00Add-setting-to-clear-data-on-exit.patch @@ -22,13 +22,13 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../clear_browsing_data_dialog.ts | 1 + .../strings/android_chrome_strings.grd | 3 + .../settings_localized_strings_provider.cc | 1 + - .../core/browsing_data_policies_utils.cc | 16 ++-- + .../core/browsing_data_policies_utils.cc | 20 ++--- .../core/browsing_data_policies_utils.h | 11 +++ .../browsing_data/core/browsing_data_utils.cc | 34 +++++++++ .../core/clear_browsing_data_tab.h | 2 +- components/browsing_data/core/pref_names.cc | 27 +++++++ components/browsing_data/core/pref_names.h | 9 +++ - 24 files changed, 316 insertions(+), 14 deletions(-) + 24 files changed, 318 insertions(+), 16 deletions(-) create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/browsing_data/ClearBrowsingDataFragmentAtStart.java diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni @@ -508,8 +508,12 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide diff --git a/components/browsing_data/core/browsing_data_policies_utils.cc b/components/browsing_data/core/browsing_data_policies_utils.cc --- a/components/browsing_data/core/browsing_data_policies_utils.cc +++ b/components/browsing_data/core/browsing_data_policies_utils.cc -@@ -21,15 +21,15 @@ namespace { +@@ -17,21 +17,21 @@ + namespace browsing_data { + +-namespace { +- namespace policy_data_types { // Data retention policy types that require sync to be disabled. -constexpr char kBrowsingHistoryName[] = "browsing_history"; @@ -531,7 +535,11 @@ diff --git a/components/browsing_data/core/browsing_data_policies_utils.cc b/com +extern constexpr char kCachedImagesAndFilesName[] = "cached_images_and_files"; } // namespace policy_data_types ++namespace { ++ // The format of the log message shown in chrome://policy/logs when sync types + // are automatically disabled. + constexpr char kDisabledSyncTypesLogFormat[] = diff --git a/components/browsing_data/core/browsing_data_policies_utils.h b/components/browsing_data/core/browsing_data_policies_utils.h --- a/components/browsing_data/core/browsing_data_policies_utils.h +++ b/components/browsing_data/core/browsing_data_policies_utils.h diff --git a/build/patches/00Add-support-to-jxl.patch b/build/patches/00Add-support-to-jxl.patch index 7ec3e05b..45e97ac7 100644 --- a/build/patches/00Add-support-to-jxl.patch +++ b/build/patches/00Add-support-to-jxl.patch @@ -8,7 +8,7 @@ Enabled by default DEPS | 7 + build/linux/unbundle/libjxl.gn | 34 + build/linux/unbundle/replace_gn_files.py | 1 + - cc/base/devtools_instrumentation.cc | 6 + + cc/base/devtools_instrumentation.cc | 3 + cc/base/devtools_instrumentation.h | 2 +- cc/paint/paint_image.h | 2 +- cc/tiles/image_decode_cache.h | 2 + @@ -19,6 +19,8 @@ Enabled by default content/common/content_constants_internal.cc | 11 +- content/common/content_constants_internal.h | 3 +- content/public/browser/frame_accept_header.cc | 13 +- + media/BUILD.gn | 1 + + media/media_options.gni | 3 + net/base/mime_util.cc | 2 + net/base/mime_util_unittest.cc | 3 + third_party/.gitignore | 1 + @@ -26,17 +28,16 @@ Enabled by default .../blink/common/loader/network_utils.cc | 16 +- .../blink/common/mime_util/mime_util.cc | 7 + .../common/mime_util/mime_util_unittest.cc | 6 + - third_party/blink/public/common/BUILD.gn | 1 + third_party/blink/public/common/features.h | 2 + .../devtools_protocol/browser_protocol.pdl | 1 + - third_party/blink/public/public_features.gni | 5 + .../inspector/inspector_emulation_agent.cc | 7 +- .../inspector_emulation_agent_test.cc | 37 + .../generate_image_corpus.py | 1 + .../modules/webcodecs/image_decoder_fuzzer.cc | 5 + - third_party/blink/renderer/platform/BUILD.gn | 14 + + third_party/blink/renderer/platform/BUILD.gn | 5 + .../platform/graphics/bitmap_image_metrics.cc | 9 +- .../platform/graphics/bitmap_image_metrics.h | 4 +- + .../renderer/platform/image-decoders/BUILD.gn | 9 + .../platform/image-decoders/image_decoder.cc | 23 + .../image-decoders/jxl/jxl_image_decoder.cc | 683 ++++++++++++++++++ .../image-decoders/jxl/jxl_image_decoder.h | 123 ++++ @@ -59,7 +60,7 @@ Enabled by default third_party/libjxl/README.chromium | 15 + .../libjxl/gen_headers/jxl/jxl_export.h | 11 + tools/metrics/histograms/enums.xml | 3 +- - 54 files changed, 2010 insertions(+), 17 deletions(-) + 55 files changed, 2005 insertions(+), 17 deletions(-) create mode 100644 build/linux/unbundle/libjxl.gn create mode 100644 third_party/blink/renderer/platform/image-decoders/jxl/jxl_image_decoder.cc create mode 100644 third_party/blink/renderer/platform/image-decoders/jxl/jxl_image_decoder.h @@ -156,15 +157,12 @@ diff --git a/build/linux/unbundle/replace_gn_files.py b/build/linux/unbundle/rep diff --git a/cc/base/devtools_instrumentation.cc b/cc/base/devtools_instrumentation.cc --- a/cc/base/devtools_instrumentation.cc +++ b/cc/base/devtools_instrumentation.cc -@@ -90,6 +90,12 @@ ScopedImageDecodeTask::~ScopedImageDecodeTask() { +@@ -90,6 +90,9 @@ ScopedImageDecodeTask::~ScopedImageDecodeTask() { auto duration = base::TimeTicks::Now() - start_time_; const char* histogram_name = nullptr; switch (image_type_) { + case ImageType::kJxl: + histogram_name = "Renderer4.ImageUploadTaskDurationUs.Jxl"; -+ break; -+ case ImageType::kJxl: -+ histogram_name = "Renderer4.ImageUploadTaskDurationUs.Jxl"; + break; case ImageType::kAvif: histogram_name = "Renderer4.ImageDecodeTaskDurationUs.Avif"; @@ -333,6 +331,30 @@ diff --git a/content/public/browser/frame_accept_header.cc b/content/public/brow if (allow_sxg_responses && content::signed_exchange_utils::IsSignedExchangeHandlingEnabled( browser_context)) { +diff --git a/media/BUILD.gn b/media/BUILD.gn +--- a/media/BUILD.gn ++++ b/media/BUILD.gn +@@ -37,6 +37,7 @@ buildflag_header("media_buildflags") { + "ENABLE_CAST_AUDIO_RENDERER=$enable_cast_audio_renderer", + "ENABLE_DAV1D_DECODER=$enable_dav1d_decoder", + "ENABLE_AV1_DECODER=$enable_av1_decoder", ++ "ENABLE_JXL_DECODER=$enable_jxl_decoder", + "ENABLE_PLATFORM_DOLBY_VISION=$enable_platform_dolby_vision", + "ENABLE_PLATFORM_ENCRYPTED_DOLBY_VISION=$enable_platform_encrypted_dolby_vision", + "ENABLE_FFMPEG=$media_use_ffmpeg", +diff --git a/media/media_options.gni b/media/media_options.gni +--- a/media/media_options.gni ++++ b/media/media_options.gni +@@ -125,6 +125,9 @@ declare_args() { + # `enable_libaom` should likely also be overriddent to false. + enable_av1_decoder = enable_dav1d_decoder + ++ # If true, adds support for JPEG XL image decoding. ++ enable_jxl_decoder = is_android || is_win ++ + # Enable HEVC/H265 demuxing. Actual decoding must be provided by the + # platform. Always enable this for Lacros, it determines support at runtime. + # TODO(crbug.com/1336055): Revisit the default value for this setting as it diff --git a/net/base/mime_util.cc b/net/base/mime_util.cc --- a/net/base/mime_util.cc +++ b/net/base/mime_util.cc @@ -484,17 +506,6 @@ diff --git a/third_party/blink/common/mime_util/mime_util_unittest.cc b/third_pa EXPECT_EQ(IsSupportedImageMimeType("image/avif"), BUILDFLAG(ENABLE_AV1_DECODER)); EXPECT_FALSE(IsSupportedImageMimeType("image/lolcat")); -diff --git a/third_party/blink/public/common/BUILD.gn b/third_party/blink/public/common/BUILD.gn ---- a/third_party/blink/public/common/BUILD.gn -+++ b/third_party/blink/public/common/BUILD.gn -@@ -103,6 +103,7 @@ component("common") { - buildflag_header("buildflags") { - header = "buildflags.h" - flags = [ -+ "ENABLE_JXL_DECODER=$enable_jxl_decoder", - "RTC_USE_H264=$rtc_use_h264", - "ENABLE_RUST_CRASH=$enable_rust_crash", - "USE_FONTATIONS_BACKEND=$use_typeface_fontations", diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h @@ -518,21 +529,6 @@ diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/t webp experimental command setDisabledImageTypes -diff --git a/third_party/blink/public/public_features.gni b/third_party/blink/public/public_features.gni ---- a/third_party/blink/public/public_features.gni -+++ b/third_party/blink/public/public_features.gni -@@ -4,6 +4,11 @@ - - import("//build/config/ui.gni") - -+declare_args() { -+ # If true, adds support for JPEG XL image decoding. -+ enable_jxl_decoder = is_android || is_win -+} -+ - # Unhandled Tap enable means Contextual Search aka Touch to Search. - # TODO(donnd): remove all unhandled-tap handling after the Long-press experiment - # is fully launched. diff --git a/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc b/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc --- a/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_emulation_agent.cc @@ -666,23 +662,7 @@ diff --git a/third_party/blink/renderer/modules/webcodecs/image_decoder_fuzzer.c diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn --- a/third_party/blink/renderer/platform/BUILD.gn +++ b/third_party/blink/renderer/platform/BUILD.gn -@@ -1816,6 +1816,15 @@ component("platform") { - sources += [ "text/hyphenation/hyphenation_null.cc" ] - } - -+ if (enable_jxl_decoder) { -+ sources += [ -+ "image-decoders/jxl/jxl_image_decoder.cc", -+ "image-decoders/jxl/jxl_image_decoder.h", -+ ] -+ -+ deps += [ "//third_party/libjxl:libjxl" ] -+ } -+ - if (current_cpu == "x86" || current_cpu == "x64") { - deps += [ ":blink_x86_avx" ] - sources += [ "audio/cpu/x86/delay_sse2.cc" ] -@@ -2232,6 +2241,10 @@ source_set("blink_platform_unittests_sources") { +@@ -2232,6 +2232,10 @@ source_set("blink_platform_unittests_sources") { sources += [ "text/locale_icu_test.cc" ] } @@ -693,7 +673,7 @@ diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/re sources += [ "testing/run_all_tests.cc" ] configs += [ -@@ -2275,6 +2288,7 @@ source_set("blink_platform_unittests_sources") { +@@ -2275,6 +2279,7 @@ source_set("blink_platform_unittests_sources") { "//third_party/blink/renderer/platform/scheduler:unit_tests", "//third_party/blink/renderer/platform/wtf", "//third_party/libavif:libavif", @@ -748,6 +728,25 @@ diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image_metrics.h }; // Categories for the JPEG color space histogram. Synced with 'JpegColorSpace' +diff --git a/third_party/blink/renderer/platform/image-decoders/BUILD.gn b/third_party/blink/renderer/platform/image-decoders/BUILD.gn +--- a/third_party/blink/renderer/platform/image-decoders/BUILD.gn ++++ b/third_party/blink/renderer/platform/image-decoders/BUILD.gn +@@ -70,6 +70,15 @@ component("image_decoders") { + "//third_party/libyuv", + ] + ++ if (enable_jxl_decoder) { ++ sources += [ ++ "jxl/jxl_image_decoder.cc", ++ "jxl/jxl_image_decoder.h", ++ ] ++ ++ deps += [ "//third_party/libjxl:libjxl" ] ++ } ++ + if (enable_av1_decoder) { + sources += [ + "avif/avif_image_decoder.cc", diff --git a/third_party/blink/renderer/platform/image-decoders/image_decoder.cc b/third_party/blink/renderer/platform/image-decoders/image_decoder.cc --- a/third_party/blink/renderer/platform/image-decoders/image_decoder.cc +++ b/third_party/blink/renderer/platform/image-decoders/image_decoder.cc diff --git a/build/patches/00Eyeo-Adblock-Remove-Privacy-Issues.patch b/build/patches/00Eyeo-Adblock-Remove-Privacy-Issues.patch index dc850b87..50e9c29d 100644 --- a/build/patches/00Eyeo-Adblock-Remove-Privacy-Issues.patch +++ b/build/patches/00Eyeo-Adblock-Remove-Privacy-Issues.patch @@ -8,9 +8,9 @@ suit Bromite logic .../android/java/res/xml/main_preferences.xml | 19 +- chrome/browser/BUILD.gn | 2 - .../adblock/adblock_content_browser_client.cc | 26 +- - .../adblock_private/adblock_private_api.cc | 66 +- + .../adblock_private/adblock_private_api.cc | 74 +- .../api/adblock_private/adblock_private_api.h | 49 + - .../eyeo_filtering_private_api.cc | 20 +- + .../eyeo_filtering_private_api.cc | 25 +- ...hrome_browser_main_extra_parts_profiles.cc | 2 - chrome/browser/resources/settings/BUILD.gn | 2 + .../settings/adblock_page/adblock_page.html | 207 + @@ -23,11 +23,12 @@ suit Bromite logic chrome/browser/resources/settings/settings.ts | 1 + .../settings/settings_menu/settings_menu.html | 5 + chrome/browser/ui/tab_helpers.cc | 6 +- + .../adblock_internals_page_handler_impl.cc | 20 +- .../extensions/api/_permission_features.json | 8 - .../common/extensions/api/adblock_private.idl | 8 + chrome/test/BUILD.gn | 5 - components/adblock/android/BUILD.gn | 3 +- - components/adblock/android/adblock_jni.cc | 50 +- + components/adblock/android/adblock_jni.cc | 53 +- .../adblock/android/adblock_strings.grd | 54 +- .../java/res/layout/adblock_custom_item.xml | 14 +- .../layout/adblock_filter_lists_list_item.xml | 15 + @@ -38,7 +39,7 @@ suit Bromite logic .../AdblockCustomFiltersFragment.java | 7 +- .../settings/AdblockCustomItemFragment.java | 20 +- .../settings/AdblockFilterListsAdapter.java | 6 + - .../settings/AdblockSettingsFragment.java | 44 +- + .../settings/AdblockSettingsFragment.java | 45 +- components/adblock/content/browser/BUILD.gn | 18 +- .../adblock_controller_factory_base.cc | 5 +- .../browser/adblock_webcontents_observer.cc | 25 +- @@ -50,9 +51,7 @@ suit Bromite logic components/adblock/core/BUILD.gn | 39 - .../activeping_telemetry_topic_provider.cc | 285 -- .../activeping_telemetry_topic_provider.h | 87 - - components/adblock/core/adblock_controller.h | 8 + - .../adblock/core/adblock_controller_impl.cc | 58 +- - .../adblock/core/adblock_controller_impl.h | 7 + + .../adblock/core/adblock_controller_impl.cc | 10 +- components/adblock/core/adblock_switches.cc | 1 - components/adblock/core/adblock_switches.h | 1 - .../adblock/core/adblock_telemetry_service.cc | 258 -- @@ -89,9 +88,9 @@ suit Bromite logic .../subscription_persistent_metadata_impl.cc | 7 + .../subscription_persistent_metadata_impl.h | 1 + .../subscription_persistent_storage_impl.cc | 11 +- - .../core/subscription/subscription_service.h | 3 + - .../subscription/subscription_service_impl.cc | 23 +- - .../subscription/subscription_service_impl.h | 3 + + .../core/subscription/subscription_service.h | 9 + + .../subscription/subscription_service_impl.cc | 78 +- + .../subscription/subscription_service_impl.h | 9 + .../subscription/subscription_updater_impl.cc | 8 +- .../subscription_validator_impl.cc | 4 +- .../browser/bromite_content_settings/ads.inc | 3 + @@ -101,14 +100,15 @@ suit Bromite logic components/resources/adblocking/BUILD.gn | 30 +- .../adblocking/elemhide_for_selector.jst | 2 +- .../resources/adblocking/elemhideemu.jst | 2 + + .../snippets/dist/isolated-first-xpath3.jst | 62 + + .../dist/isolated-first-xpath3.source.jst | 3696 +++++++++++++++++ .../snippets/dist/isolated-first.jst | 65 + - .../snippets/dist/isolated-first.source.jst | 3624 +++++++++++++++++ + .../snippets/dist/isolated-first.source.jst | 3624 ++++++++++++++++ .../blink/renderer/core/css/style_engine.cc | 8 + .../blink/renderer/core/css/style_engine.h | 1 + - .../renderer/core/exported/web_document.cc | 13 +- - tools/gritsettings/resource_ids.spec | 1 - + .../renderer/core/exported/web_document.cc | 15 +- .../definitions/adblock_private.d.ts | 14 + - 103 files changed, 5070 insertions(+), 1153 deletions(-) + 103 files changed, 8857 insertions(+), 1166 deletions(-) create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.html create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.ts rename components/adblock/android/java/res/xml/{adblock_preferences.xml => eyeo_adblock_preferences.xml} (56%) @@ -118,6 +118,8 @@ suit Bromite logic delete mode 100644 components/adblock/core/adblock_telemetry_service.h create mode 100644 components/adblock/core/converter/parser/test/test_rules.txt create mode 100644 components/content_settings/core/browser/bromite_content_settings/ads.inc + create mode 100644 components/resources/adblocking/snippets/dist/isolated-first-xpath3.jst + create mode 100644 components/resources/adblocking/snippets/dist/isolated-first-xpath3.source.jst create mode 100755 components/resources/adblocking/snippets/dist/isolated-first.jst create mode 100755 components/resources/adblocking/snippets/dist/isolated-first.source.jst @@ -227,7 +229,17 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc b/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc --- a/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc +++ b/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc -@@ -77,26 +77,12 @@ std::vector CopySessionsStats( +@@ -18,7 +18,8 @@ + #include "base/containers/flat_map.h" + #include "base/logging.h" + #include "base/no_destructor.h" +-#include "base/time/time_to_iso8601.h" ++#include "base/i18n/time_formatting.h" ++#include "base/strings/utf_string_conversions.h" + #include "base/values.h" + #include "chrome/browser/adblock/resource_classification_runner_factory.h" + #include "chrome/browser/adblock/session_stats_factory.h" +@@ -77,26 +78,12 @@ std::vector CopySessionsStats( return result; } @@ -249,22 +261,23 @@ diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.c -} - std::vector CopySubscriptions( -+ raw_ptr controller, ++ raw_ptr subscription_service, const std::vector> current_subscriptions) { + raw_ptr metadata = -+ controller->GetMetadata(); ++ subscription_service->GetMetadata(); std::vector result; for (auto& sub : current_subscriptions) { api::adblock_private::Subscription js_sub; -@@ -104,9 +90,13 @@ std::vector CopySubscriptions( +@@ -104,9 +91,13 @@ std::vector CopySubscriptions( js_sub.title = sub->GetTitle(); js_sub.current_version = sub->GetCurrentVersion(); js_sub.installation_state = - SubscriptionInstallationStateToString(sub->GetInstallationState()); + adblock::Subscription::SubscriptionInstallationStateToString(sub->GetInstallationState()); js_sub.last_installation_time = - base::TimeToISO8601(sub->GetInstallationTime()); +- base::TimeToISO8601(sub->GetInstallationTime()); ++ base::UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime(sub->GetInstallationTime())); + if (metadata) { + js_sub.download_success_count = metadata->GetDownloadSuccessCount(sub->GetSourceUrl()); + js_sub.download_error_count = metadata->GetDownloadErrorCount(sub->GetSourceUrl()); @@ -272,7 +285,7 @@ diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.c result.emplace_back(std::move(js_sub)); } return result; -@@ -347,6 +337,44 @@ void AdblockPrivateAPI::OnListenerAdded( +@@ -347,6 +338,47 @@ void AdblockPrivateAPI::OnListenerAdded( namespace api { @@ -281,9 +294,10 @@ diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.c +AdblockPrivateStartUpdateFunction::~AdblockPrivateStartUpdateFunction() {} + +ExtensionFunction::ResponseAction AdblockPrivateStartUpdateFunction::Run() { -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); -+ controller->StartUpdate(); ++ auto* subscription_service = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()); ++ subscription_service->StartUpdate(); + return RespondNow(NoArguments()); +} + @@ -296,9 +310,10 @@ diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.c + api::adblock_private::SetEnabled::Params::Create(args()); + EXTENSION_FUNCTION_VALIDATE(params); + -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); -+ controller->SetPrivilegedFiltersEnabled(params->enabled); ++ auto* subscription_service = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()); ++ subscription_service->SetPrivilegedFiltersEnabled(params->enabled); + return RespondNow(NoArguments()); +} + @@ -307,22 +322,23 @@ diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.c +AdblockPrivateIsPrivilegedFiltersEnabledFunction::~AdblockPrivateIsPrivilegedFiltersEnabledFunction() {} + +ExtensionFunction::ResponseAction AdblockPrivateIsPrivilegedFiltersEnabledFunction::Run() { -+ auto* controller = adblock::AdblockControllerFactory::GetForBrowserContext( -+ browser_context()); ++ auto* subscription_service = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context()); + return RespondNow( + ArgumentList(api::adblock_private::IsEnabled::Results::Create( -+ controller->IsPrivilegedFiltersEnabled()))); ++ subscription_service->IsPrivilegedFiltersEnabled()))); +} + AdblockPrivateSetEnabledFunction::AdblockPrivateSetEnabledFunction() {} AdblockPrivateSetEnabledFunction::~AdblockPrivateSetEnabledFunction() {} -@@ -514,7 +542,7 @@ AdblockPrivateGetInstalledSubscriptionsFunction::Run() { +@@ -514,7 +546,7 @@ AdblockPrivateGetInstalledSubscriptionsFunction::Run() { << "adblock_private expects \"adblock\" configuration"; return RespondNow(ArgumentList( api::adblock_private::GetInstalledSubscriptions::Results::Create( - CopySubscriptions(subscription_service->GetCurrentSubscriptions( -+ CopySubscriptions(controller, subscription_service->GetCurrentSubscriptions( ++ CopySubscriptions(subscription_service, subscription_service->GetCurrentSubscriptions( subscription_service->GetAdblockFilteringConfiguration()))))); } @@ -388,7 +404,17 @@ diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.h diff --git a/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering_private_api.cc b/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering_private_api.cc --- a/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering_private_api.cc +++ b/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering_private_api.cc -@@ -29,6 +29,7 @@ +@@ -18,7 +18,8 @@ + #include "base/containers/flat_map.h" + #include "base/logging.h" + #include "base/no_destructor.h" +-#include "base/time/time_to_iso8601.h" ++#include "base/i18n/time_formatting.h" ++#include "base/strings/utf_string_conversions.h" + #include "base/values.h" + #include "chrome/browser/adblock/resource_classification_runner_factory.h" + #include "chrome/browser/adblock/session_stats_factory.h" +@@ -29,6 +30,7 @@ #include "components/adblock/content/browser/resource_classification_runner.h" #include "components/adblock/core/common/adblock_utils.h" #include "components/adblock/core/common/content_type.h" @@ -396,7 +422,7 @@ diff --git a/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering #include "components/adblock/core/configuration/filtering_configuration.h" #include "components/adblock/core/configuration/persistent_filtering_configuration.h" #include "components/adblock/core/session_stats.h" -@@ -94,23 +95,6 @@ std::vector CopySessionsStats( +@@ -94,23 +96,6 @@ std::vector CopySessionsStats( return result; } @@ -420,15 +446,18 @@ diff --git a/chrome/browser/extensions/api/eyeo_filtering_private/eyeo_filtering std::vector CopySubscriptions( const std::vector> current_subscriptions) { -@@ -121,7 +105,7 @@ std::vector CopySubscriptions( +@@ -121,9 +106,9 @@ std::vector CopySubscriptions( js_sub.title = sub->GetTitle(); js_sub.current_version = sub->GetCurrentVersion(); js_sub.installation_state = - SubscriptionInstallationStateToString(sub->GetInstallationState()); + adblock::Subscription::SubscriptionInstallationStateToString(sub->GetInstallationState()); js_sub.last_installation_time = - base::TimeToISO8601(sub->GetInstallationTime()); +- base::TimeToISO8601(sub->GetInstallationTime()); ++ base::UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime(sub->GetInstallationTime())); result.emplace_back(std::move(js_sub)); + } + return result; diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc @@ -1090,6 +1119,57 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc autofill::ChromeAutofillClient::CreateForWebContents(web_contents); if (breadcrumbs::IsEnabled()) BreadcrumbManagerTabHelper::CreateForWebContents(web_contents); +diff --git a/chrome/browser/ui/webui/adblock_internals/adblock_internals_page_handler_impl.cc b/chrome/browser/ui/webui/adblock_internals/adblock_internals_page_handler_impl.cc +--- a/chrome/browser/ui/webui/adblock_internals/adblock_internals_page_handler_impl.cc ++++ b/chrome/browser/ui/webui/adblock_internals/adblock_internals_page_handler_impl.cc +@@ -17,11 +17,10 @@ + + #include "chrome/browser/ui/webui/adblock_internals/adblock_internals_page_handler_impl.h" + +-#include "base/time/time_to_iso8601.h" +-#include "chrome/browser/adblock/adblock_telemetry_service_factory.h" ++#include "base/i18n/time_formatting.h" ++#include "base/strings/utf_string_conversions.h" + #include "chrome/browser/adblock/session_stats_factory.h" + #include "chrome/browser/adblock/subscription_service_factory.h" +-#include "components/adblock/core/adblock_telemetry_service.h" + #include "components/adblock/core/session_stats.h" + #include "components/adblock/core/subscription/subscription_config.h" + #include "components/adblock/core/subscription/subscription_service.h" +@@ -53,6 +52,13 @@ std::string DebugLine(std::string name, int value, int level) { + return DebugLine(name, std::to_string(value), level); + } + ++std::string FormatInstallationTime(base::Time time) { ++ if (time.is_null()) { ++ return "Never"; ++ } ++ return base::UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime(time)); ++} ++ + } // namespace + + AdblockInternalsPageHandlerImpl::AdblockInternalsPageHandlerImpl( +@@ -90,17 +96,13 @@ void AdblockInternalsPageHandlerImpl::GetDebugInfo( + content += DebugLine("Title", it->GetTitle(), 2); + content += DebugLine("Version", it->GetCurrentVersion(), 2); + content += DebugLine("Last update", +- base::TimeToISO8601(it->GetInstallationTime()), 2); ++ FormatInstallationTime(it->GetInstallationTime()), 2); + content += DebugLine("Total allowed", allowed[url], 2); + content += DebugLine("Total blocked", blocked[url], 2); + } + } + +- auto* telemetry_service = +- adblock::AdblockTelemetryServiceFactory::GetForProfile(profile_); +- telemetry_service->GetTopicProvidersDebugInfo(base::BindOnce( +- &AdblockInternalsPageHandlerImpl::OnTelemetryServiceInfoArrived, +- std::move(callback), std::move(content))); ++ std::move(callback).Run(std::move(content)); + } + + void AdblockInternalsPageHandlerImpl::OnTelemetryServiceInfoArrived( diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json --- a/chrome/common/extensions/api/_permission_features.json +++ b/chrome/common/extensions/api/_permission_features.json @@ -1165,14 +1245,14 @@ diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn diff --git a/components/adblock/android/BUILD.gn b/components/adblock/android/BUILD.gn --- a/components/adblock/android/BUILD.gn +++ b/components/adblock/android/BUILD.gn -@@ -95,6 +95,7 @@ android_library("adblock_ui_java") { - "//third_party/androidx:androidx_preference_preference_java", - ] - -+ srcjar_deps = [ ":jni_headers" ] - resources_package = "org.chromium.components.adblock" - } +@@ -14,6 +14,7 @@ + import("//build/config/android/rules.gni") + import("//build/config/locales.gni") + import("//tools/grit/grit_rule.gni") ++import("//third_party/jni_zero/jni_zero.gni") + source_set("java_bindings") { + sources = [ @@ -120,7 +121,7 @@ android_resources("java_ui_resources") { "java/res/layout/adblock_custom_item_settings.xml", "java/res/layout/adblock_filter_lists_list_item.xml", @@ -1185,15 +1265,16 @@ diff --git a/components/adblock/android/BUILD.gn b/components/adblock/android/BU diff --git a/components/adblock/android/adblock_jni.cc b/components/adblock/android/adblock_jni.cc --- a/components/adblock/android/adblock_jni.cc +++ b/components/adblock/android/adblock_jni.cc -@@ -25,6 +25,7 @@ +@@ -25,6 +25,8 @@ #include "base/android/jni_array.h" #include "base/android/jni_string.h" #include "base/android/jni_weak_ref.h" -+#include "base/time/time_to_iso8601.h" ++#include "base/i18n/time_formatting.h" ++#include "base/strings/utf_string_conversions.h" #include "base/logging.h" #include "components/adblock/android/java_bindings_getters.h" #include "components/adblock/android/jni_headers/AdblockController_jni.h" -@@ -54,6 +55,10 @@ ScopedJavaLocalRef ToJava(JNIEnv* env, +@@ -54,6 +56,10 @@ ScopedJavaLocalRef ToJava(JNIEnv* env, const std::string& url, const std::string& title, const std::string& version, @@ -1204,7 +1285,7 @@ diff --git a/components/adblock/android/adblock_jni.cc b/components/adblock/andr const std::vector& languages) { ScopedJavaLocalRef url_param( env, env->NewObject(url_class.obj(), url_constructor, -@@ -62,12 +67,19 @@ ScopedJavaLocalRef ToJava(JNIEnv* env, +@@ -62,12 +68,19 @@ ScopedJavaLocalRef ToJava(JNIEnv* env, return Java_Subscription_Constructor(env, url_param, ConvertUTF8ToJavaString(env, title), ConvertUTF8ToJavaString(env, version), @@ -1218,26 +1299,26 @@ diff --git a/components/adblock/android/adblock_jni.cc b/components/adblock/andr std::vector> CSubscriptionsToJObjects( JNIEnv* env, const std::vector>& subscriptions) { -+ auto* controller = adblock::GetController(); ++ auto* subscription_service = adblock::GetSubscriptionService(); + raw_ptr metadata = -+ controller->GetMetadata(); ++ subscription_service->GetMetadata(); ScopedJavaLocalRef url_class = GetClass(env, "java/net/URL"); jmethodID url_constructor = MethodID::Get( env, url_class.obj(), "", "(Ljava/lang/String;)V"); -@@ -76,7 +88,11 @@ std::vector> CSubscriptionsToJObjects( +@@ -76,7 +89,11 @@ std::vector> CSubscriptionsToJObjects( for (auto& sub : subscriptions) { jobjects.push_back(ToJava( env, url_class, url_constructor, sub->GetSourceUrl().spec(), - sub->GetTitle(), sub->GetCurrentVersion(), std::vector{})); + sub->GetTitle(), sub->GetCurrentVersion(), -+ sub->GetInstallationState(), base::TimeToISO8601(sub->GetInstallationTime()), ++ sub->GetInstallationState(), base::UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime(sub->GetInstallationTime())), + metadata ? metadata->GetDownloadSuccessCount(sub->GetSourceUrl()) : 0, + metadata ? metadata->GetDownloadErrorCount(sub->GetSourceUrl()) : 0, + std::vector{})); } return jobjects; } -@@ -96,6 +112,9 @@ std::vector> CSubscriptionsToJObjects( +@@ -96,6 +113,9 @@ std::vector> CSubscriptionsToJObjects( if (sub.url.is_valid()) { jobjects.push_back(ToJava(env, url_class, url_constructor, sub.url.spec(), sub.title, "", @@ -1247,42 +1328,44 @@ diff --git a/components/adblock/android/adblock_jni.cc b/components/adblock/andr sub.languages)); } } -@@ -125,6 +144,35 @@ void AdblockJNI::Bind(JavaObjectWeakGlobalRef weak_java_controller) { - weak_java_controller_ = weak_java_controller; - } +@@ -139,6 +159,37 @@ void AdblockJNI::OnSubscriptionInstalled(const GURL& url) { + + } // namespace adblock +static void +JNI_AdblockController_StartUpdate(JNIEnv* env) { -+ adblock::GetController()->StartUpdate(); ++ adblock::GetSubscriptionService()->StartUpdate(); +} + +static base::android::ScopedJavaLocalRef +JNI_AdblockController_GetCustomSubscriptions(JNIEnv* env) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); -+ if (!adblock::GetController()) { ++ auto* subscription_service = adblock::GetSubscriptionService(); ++ if (!subscription_service) { + return ToJavaArrayOfObjects(env, + std::vector>{}); + } + + return ToJavaArrayOfObjects( + env, adblock::CSubscriptionsToJObjects( -+ env, adblock::GetController()->GetCustomSubscriptions())); ++ env, subscription_service->GetCustomSubscriptions( ++ subscription_service->GetAdblockFilteringConfiguration()))); +} + +static jboolean JNI_AdblockController_IsPrivilegedFiltersEnabled( + JNIEnv* env) { -+ return adblock::GetController()->IsPrivilegedFiltersEnabled() ? JNI_TRUE : JNI_FALSE; ++ return adblock::GetSubscriptionService()->IsPrivilegedFiltersEnabled() ? JNI_TRUE : JNI_FALSE; +} + +static void JNI_AdblockController_SetPrivilegedFiltersEnabled( + JNIEnv* env, + jboolean j_enabled) { -+ adblock::GetController()->SetPrivilegedFiltersEnabled(j_enabled == JNI_TRUE); ++ adblock::GetSubscriptionService()->SetPrivilegedFiltersEnabled(j_enabled == JNI_TRUE); +} + - void AdblockJNI::OnSubscriptionInstalled(const GURL& url) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - JNIEnv* env = AttachCurrentThread(); + static void JNI_AdblockController_Bind( + JNIEnv* env, + const base::android::JavaParamRef& caller) { diff --git a/components/adblock/android/adblock_strings.grd b/components/adblock/android/adblock_strings.grd --- a/components/adblock/android/adblock_strings.grd +++ b/components/adblock/android/adblock_strings.grd @@ -1799,7 +1882,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock private static final String SETTINGS_ENABLED_KEY = "fragment_adblock_settings_enabled_key"; private static final String SETTINGS_FILTER_LISTS_KEY = "fragment_adblock_settings_filter_lists_key"; -@@ -49,6 +62,16 @@ public class AdblockSettingsFragment +@@ -49,9 +62,20 @@ public class AdblockSettingsFragment private long mOnOffTogleTimestamp; private void bindPreferences() { @@ -1816,7 +1899,11 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock mAdblockEnabled = (ChromeSwitchPreference) findPreference(SETTINGS_ENABLED_KEY); mFilterLists = findPreference(SETTINGS_FILTER_LISTS_KEY); mAcceptableAdsEnabled = (ChromeSwitchPreference) findPreference(SETTINGS_AA_ENABLED_KEY); -@@ -62,14 +85,25 @@ public class AdblockSettingsFragment ++ mAcceptableAdsEnabled.setVisible(false); + mAllowedDomains = findPreference(SETTINGS_ALLOWED_DOMAINS_KEY); + mMoreOptions = findPreference(SETTINGS_MORE_OPTIONS_KEY); + } +@@ -62,14 +86,25 @@ public class AdblockSettingsFragment } private void applyAdblockEnabled(boolean enabledValue) { @@ -1844,7 +1931,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock boolean enabled = AdblockController.getInstance().isEnabled(); mAdblockEnabled.setChecked(enabled); mAdblockEnabled.setOnPreferenceChangeListener(this); -@@ -107,7 +141,7 @@ public class AdblockSettingsFragment +@@ -107,7 +142,7 @@ public class AdblockSettingsFragment @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { @@ -1853,7 +1940,7 @@ diff --git a/components/adblock/android/java/src/org/chromium/components/adblock bindPreferences(); synchronizePreferences(); } -@@ -126,6 +160,8 @@ public class AdblockSettingsFragment +@@ -126,6 +161,8 @@ public class AdblockSettingsFragment maybeEnableMoreOptions(); applyAdblockEnabled((Boolean) newValue); @@ -2567,55 +2654,10 @@ deleted file mode 100644 -} // namespace adblock - -#endif // COMPONENTS_ADBLOCK_CORE_ACTIVEPING_TELEMETRY_TOPIC_PROVIDER_H_ -diff --git a/components/adblock/core/adblock_controller.h b/components/adblock/core/adblock_controller.h ---- a/components/adblock/core/adblock_controller.h -+++ b/components/adblock/core/adblock_controller.h -@@ -24,6 +24,7 @@ - #include "base/observer_list.h" - #include "components/adblock/core/subscription/installed_subscription.h" - #include "components/adblock/core/subscription/subscription_config.h" -+#include "components/adblock/core/subscription/subscription_persistent_metadata.h" - #include "components/keyed_service/core/keyed_service.h" - - class GURL; -@@ -43,10 +44,17 @@ class AdblockController : public KeyedService { - virtual void SetAcceptableAdsEnabled(bool enabled) = 0; - virtual bool IsAcceptableAdsEnabled() const = 0; - -+ virtual void StartUpdate() = 0; -+ virtual raw_ptr GetMetadata() = 0; -+ virtual void SetPrivilegedFiltersEnabled(bool enabled) = 0; -+ virtual bool IsPrivilegedFiltersEnabled() = 0; -+ - virtual void InstallSubscription(const GURL& url) = 0; - virtual void UninstallSubscription(const GURL& url) = 0; - virtual std::vector> GetInstalledSubscriptions() - const = 0; -+ virtual std::vector> GetCustomSubscriptions() -+ const = 0; - - virtual void AddAllowedDomain(const std::string& domain) = 0; - virtual void RemoveAllowedDomain(const std::string& domain) = 0; diff --git a/components/adblock/core/adblock_controller_impl.cc b/components/adblock/core/adblock_controller_impl.cc --- a/components/adblock/core/adblock_controller_impl.cc +++ b/components/adblock/core/adblock_controller_impl.cc -@@ -73,6 +73,15 @@ absl::optional MigrateBoolFromPrefs(PrefService* pref_service, - return absl::nullopt; - } - -+bool IsKnownSubscription( -+ const std::vector& known_subscriptions, -+ const GURL& url) { -+ return base::ranges::any_of(known_subscriptions, -+ [&](const auto& known_subscription) { -+ return known_subscription.url == url; -+ }); -+} -+ - } // namespace - - AdblockControllerImpl::AdblockControllerImpl( -@@ -103,6 +112,7 @@ bool AdblockControllerImpl::IsAdblockEnabled() const { +@@ -103,6 +103,7 @@ bool AdblockControllerImpl::IsAdblockEnabled() const { } void AdblockControllerImpl::SetAcceptableAdsEnabled(bool enabled) { @@ -2623,62 +2665,15 @@ diff --git a/components/adblock/core/adblock_controller_impl.cc b/components/adb if (enabled) { InstallSubscription(AcceptableAdsUrl()); } else { -@@ -116,7 +126,33 @@ bool AdblockControllerImpl::IsAcceptableAdsEnabled() const { - [&](const auto& url) { return url == AcceptableAdsUrl(); }); +@@ -117,6 +118,7 @@ bool AdblockControllerImpl::IsAcceptableAdsEnabled() const { } -+void AdblockControllerImpl::StartUpdate() { -+ subscription_service_->StartUpdate(); -+} -+ -+raw_ptr AdblockControllerImpl::GetMetadata() { -+ return subscription_service_->GetMetadataFor(adblock_filtering_configuration_); -+} -+ -+bool AdblockControllerImpl::IsPrivilegedFiltersEnabled() { -+ return adblock_filtering_configuration_->IsPrivilegedFiltersEnabled(); -+} -+ -+void AdblockControllerImpl::SetPrivilegedFiltersEnabled(bool enabled) { -+ adblock_filtering_configuration_->SetPrivilegedFiltersEnabled(enabled); -+ for (const auto& cur : known_subscriptions_) { -+ if (config::AllowPrivilegedFilters(cur.url)) { -+ if (enabled) -+ InstallSubscription(cur.url); -+ else -+ UninstallSubscription(cur.url); -+ } -+ } -+ StartUpdate(); -+} -+ void AdblockControllerImpl::InstallSubscription(const GURL& url) { + if (url == AcceptableAdsUrl()) return; adblock_filtering_configuration_->AddFilterList(url); } -@@ -129,6 +165,20 @@ AdblockControllerImpl::GetInstalledSubscriptions() const { - return GetSubscriptionsThatMatchConfiguration(); - } - -+std::vector> -+AdblockControllerImpl::GetCustomSubscriptions() const { -+ auto selected = GetInstalledSubscriptions(); -+ std::vector known = GetKnownSubscriptions(); -+ selected.erase(base::ranges::remove_if(selected, -+ [&](const auto& subscription) { -+ return IsKnownSubscription( -+ known, -+ subscription->GetSourceUrl()); -+ }), -+ selected.end()); -+ return selected; -+} -+ - void AdblockControllerImpl::AddAllowedDomain(const std::string& domain) { - adblock_filtering_configuration_->AddAllowedDomain(domain); - } -@@ -165,10 +215,8 @@ void AdblockControllerImpl::RunFirstRunLogic(PrefService* pref_service) { +@@ -165,10 +167,8 @@ void AdblockControllerImpl::RunFirstRunLogic(PrefService* pref_service) { common::prefs::kInstallFirstStartSubscriptions)) { // On first run, install additional subscriptions. for (const auto& cur : known_subscriptions_) { @@ -2691,7 +2686,7 @@ diff --git a/components/adblock/core/adblock_controller_impl.cc b/components/adb // Do not install Acceptable Ads on first run because a command line // switch forbids it. Mostly used for testing. continue; -@@ -236,7 +284,7 @@ void AdblockControllerImpl::InstallLanguageBasedRecommendedSubscriptions() { +@@ -236,7 +236,7 @@ void AdblockControllerImpl::InstallLanguageBasedRecommendedSubscriptions() { SubscriptionFirstRunBehavior::SubscribeIfLocaleMatch && std::find(subscription.languages.begin(), subscription.languages.end(), language_) != subscription.languages.end()) { @@ -2700,27 +2695,6 @@ diff --git a/components/adblock/core/adblock_controller_impl.cc b/components/adb << language_ << "\": " << subscription.title; language_specific_subscription_installed = true; InstallSubscription(subscription.url); -diff --git a/components/adblock/core/adblock_controller_impl.h b/components/adblock/core/adblock_controller_impl.h ---- a/components/adblock/core/adblock_controller_impl.h -+++ b/components/adblock/core/adblock_controller_impl.h -@@ -58,10 +58,17 @@ class AdblockControllerImpl : public AdblockController { - void SetAcceptableAdsEnabled(bool enabled) override; - bool IsAcceptableAdsEnabled() const override; - -+ void StartUpdate() override; -+ raw_ptr GetMetadata() override; -+ void SetPrivilegedFiltersEnabled(bool enabled) override; -+ bool IsPrivilegedFiltersEnabled() override; -+ - void InstallSubscription(const GURL& url) override; - void UninstallSubscription(const GURL& url) override; - std::vector> GetInstalledSubscriptions() - const override; -+ std::vector> GetCustomSubscriptions() -+ const override; - - void AddAllowedDomain(const std::string& domain) override; - void RemoveAllowedDomain(const std::string& domain) override; diff --git a/components/adblock/core/adblock_switches.cc b/components/adblock/core/adblock_switches.cc --- a/components/adblock/core/adblock_switches.cc +++ b/components/adblock/core/adblock_switches.cc @@ -4229,23 +4203,103 @@ diff --git a/components/adblock/core/subscription/subscription_persistent_storag diff --git a/components/adblock/core/subscription/subscription_service.h b/components/adblock/core/subscription/subscription_service.h --- a/components/adblock/core/subscription/subscription_service.h +++ b/components/adblock/core/subscription/subscription_service.h -@@ -77,6 +77,9 @@ class SubscriptionService : public KeyedService { - // concurrently, and future changes to the installed subscriptions will not - // impact it. - virtual Snapshot GetCurrentSnapshot() const = 0; +@@ -38,6 +38,15 @@ namespace adblock { + // FilteringConfigurations. + class SubscriptionService : public KeyedService { + public: + virtual void StartUpdate() = 0; ++ virtual raw_ptr GetMetadata() = 0; + virtual raw_ptr GetMetadataFor( + raw_ptr configuration) = 0; - - virtual void AddObserver(SubscriptionObserver*) = 0; - virtual void RemoveObserver(SubscriptionObserver*) = 0; ++ virtual void SetPrivilegedFiltersEnabled(bool enabled) = 0; ++ virtual bool IsPrivilegedFiltersEnabled() = 0; ++ virtual std::vector> GetCustomSubscriptions( ++ FilteringConfiguration* configuration) const = 0; ++ + using Snapshot = std::vector>; + class SubscriptionObserver : public base::CheckedObserver { + public: diff --git a/components/adblock/core/subscription/subscription_service_impl.cc b/components/adblock/core/subscription/subscription_service_impl.cc --- a/components/adblock/core/subscription/subscription_service_impl.cc +++ b/components/adblock/core/subscription/subscription_service_impl.cc -@@ -133,6 +133,18 @@ void SubscriptionServiceImpl::UninstallFilteringConfiguration( +@@ -36,9 +36,23 @@ + #include "components/adblock/core/subscription/filtering_configuration_maintainer.h" + #include "components/adblock/core/subscription/subscription_collection.h" + #include "components/adblock/core/subscription/subscription_service.h" ++#include "components/adblock/core/subscription/subscription_config.h" + + namespace adblock { + ++namespace { ++ ++bool IsKnownSubscription( ++ const std::vector& known_subscriptions, ++ const GURL& url) { ++ return base::ranges::any_of(known_subscriptions, ++ [&](const auto& known_subscription) { ++ return known_subscription.url == url; ++ }); ++} ++ ++} ++ + class EmptySubscription : public Subscription { + public: + EmptySubscription(const GURL& url) : url_(url) {} +@@ -133,6 +147,68 @@ void SubscriptionServiceImpl::UninstallFilteringConfiguration( maintainers_.erase(it); } ++void SubscriptionServiceImpl::StartUpdate() { ++ for (auto& entry : maintainers_) { ++ if (!entry.second) { ++ continue; // Configuration is disabled ++ } ++ entry.second->StartUpdate(); ++ } ++} ++ ++bool SubscriptionServiceImpl::IsPrivilegedFiltersEnabled() { ++ auto* adblock_filtering_configuration = GetAdblockFilteringConfiguration(); ++ return adblock_filtering_configuration->IsPrivilegedFiltersEnabled(); ++} ++ ++void SubscriptionServiceImpl::SetPrivilegedFiltersEnabled(bool enabled) { ++ auto* adblock_filtering_configuration = GetAdblockFilteringConfiguration(); ++ adblock_filtering_configuration->SetPrivilegedFiltersEnabled(enabled); ++ auto known_subscriptions = adblock::config::GetKnownSubscriptions(); ++ for (const auto& cur : known_subscriptions) { ++ if (config::AllowPrivilegedFilters(cur.url)) { ++ if (enabled) ++ adblock_filtering_configuration->AddFilterList(cur.url); ++ else ++ adblock_filtering_configuration->RemoveFilterList(cur.url); ++ } ++ } ++ StartUpdate(); ++} ++ ++std::vector> ++SubscriptionServiceImpl::GetCustomSubscriptions( ++ FilteringConfiguration* configuration) const { ++ std::vector> selected = ++ GetCurrentSubscriptions(configuration); ++ ++ auto known_subscriptions = adblock::config::GetKnownSubscriptions(); ++ selected.erase(base::ranges::remove_if(selected, ++ [&](const auto& subscription) { ++ return IsKnownSubscription( ++ known_subscriptions, ++ subscription->GetSourceUrl()); ++ }), ++ selected.end()); ++ return selected; ++} ++ ++raw_ptr SubscriptionServiceImpl::GetMetadata() { ++ return GetMetadataFor(GetAdblockFilteringConfiguration()); ++} ++ +raw_ptr SubscriptionServiceImpl::GetMetadataFor( + raw_ptr configuration) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -4261,23 +4315,7 @@ diff --git a/components/adblock/core/subscription/subscription_service_impl.cc b std::vector SubscriptionServiceImpl::GetInstalledFilteringConfigurations() { std::vector result; -@@ -163,6 +175,15 @@ SubscriptionService::Snapshot SubscriptionServiceImpl::GetCurrentSnapshot() - return snapshot; - } - -+void SubscriptionServiceImpl::StartUpdate() { -+ for (auto& entry : maintainers_) { -+ if (!entry.second) { -+ continue; // Configuration is disabled -+ } -+ entry.second->StartUpdate(); -+ } -+} -+ - void SubscriptionServiceImpl::AddObserver(SubscriptionObserver* o) { - observers_.AddObserver(o); - } -@@ -178,7 +199,7 @@ void SubscriptionServiceImpl::OnEnabledStateChanged( +@@ -178,7 +254,7 @@ void SubscriptionServiceImpl::OnEnabledStateChanged( }); DCHECK(it != maintainers_.end()) << "Received OnEnabledStateChanged from " "unregistered FilteringConfiguration"; @@ -4289,16 +4327,22 @@ diff --git a/components/adblock/core/subscription/subscription_service_impl.cc b diff --git a/components/adblock/core/subscription/subscription_service_impl.h b/components/adblock/core/subscription/subscription_service_impl.h --- a/components/adblock/core/subscription/subscription_service_impl.h +++ b/components/adblock/core/subscription/subscription_service_impl.h -@@ -70,6 +70,9 @@ class SubscriptionServiceImpl final : public SubscriptionService, - final; - FilteringConfiguration* GetAdblockFilteringConfiguration() const final; - Snapshot GetCurrentSnapshot() const final; -+ void StartUpdate() final; +@@ -43,6 +43,15 @@ namespace adblock { + class SubscriptionServiceImpl final : public SubscriptionService, + public FilteringConfiguration::Observer { + public: ++ void StartUpdate() override; ++ raw_ptr GetMetadata() override; + raw_ptr GetMetadataFor( + raw_ptr configuration) final; - void AddObserver(SubscriptionObserver*) final; - void RemoveObserver(SubscriptionObserver*) final; - ++ void SetPrivilegedFiltersEnabled(bool enabled) override; ++ bool IsPrivilegedFiltersEnabled() override; ++ std::vector> GetCustomSubscriptions( ++ FilteringConfiguration* configuration) const override; ++ + // Used to notify this about updates to installed subscriptions. + using SubscriptionUpdatedCallback = + base::RepeatingCallback; diff --git a/components/adblock/core/subscription/subscription_updater_impl.cc b/components/adblock/core/subscription/subscription_updater_impl.cc --- a/components/adblock/core/subscription/subscription_updater_impl.cc +++ b/components/adblock/core/subscription/subscription_updater_impl.cc @@ -4454,6 +4498,3775 @@ diff --git a/components/resources/adblocking/elemhideemu.jst b/components/resour elemHideEmulation.apply(elemHidingEmulatedPatterns); +})() +diff --git a/components/resources/adblocking/snippets/dist/isolated-first-xpath3.jst b/components/resources/adblocking/snippets/dist/isolated-first-xpath3.jst +new file mode 100644 +--- /dev/null ++++ b/components/resources/adblocking/snippets/dist/isolated-first-xpath3.jst +@@ -0,0 +1,62 @@ ++(e, ...t) => { ++/*! ++ * This file is part of eyeo's Anti-Circumvention Snippets module (@eyeo/snippets), ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * @eyeo/snippets is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * @eyeo/snippets is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with @eyeo/snippets. If not, see . ++ */ ++ ((environment, ...filters) => { ++const e=Proxy,{apply:t,bind:n,call:o}=Function,r=o.bind(t),i=o.bind(n),s=o.bind(o),a={get:(e,t)=>i(o,e[t])},c=t=>new e(t,a),l={get:(e,t)=>i(e[t],e)},u=t=>new e(t,l),{assign:d,defineProperties:h,freeze:f,getOwnPropertyDescriptor:p,getOwnPropertyDescriptors:w,getPrototypeOf:m}=u(Object),{hasOwnProperty:g}=c({}),{species:b}=Symbol,y={get(e,t){const n=e[t];class o extends n{}const r=w(n.prototype);delete r.constructor,f(h(o.prototype,r));const i=w(n);return delete i.length,delete i.prototype,i[b]={value:o},f(h(o,i))}},v=t=>new e(t,y),S="undefined"!=typeof environment?environment:{};"undefined"==typeof globalThis&&(window.globalThis=window);const{apply:k,ownKeys:E}=u(Reflect),x="world"in S,M=x&&"ISOLATED"===S.world,C=x&&"MAIN"===S.world,T="object"==typeof chrome&&!!chrome.runtime,W="object"==typeof browser&&!!browser.runtime,L=!C&&(M||T||W),O=e=>L?e:P(e,R(e)),{create:P,defineProperties:D,defineProperty:N,freeze:A,getOwnPropertyDescriptor:I,getOwnPropertyDescriptors:R}=u(Object),V=u(globalThis),$=L?globalThis:v(globalThis),{Map:H,RegExp:_,Set:j,WeakMap:X,WeakSet:F}=$,q=(e,t,n=null)=>{const o=E(t);for(const r of E(e)){if(o.includes(r))continue;const i=I(e,r);if(n&&"value"in i){const{value:e}=i;"function"==typeof e&&(i.value=n(e))}N(t,r,i)}},B=e=>{const t=$[e];class n extends t{}const{toString:o,valueOf:r}=t.prototype;D(n.prototype,{toString:{value:o},valueOf:{value:r}});const i=e.toLowerCase(),s=e=>function(){const t=k(e,this,arguments);return typeof t===i?new n(t):t};return q(t,n,s),q(t.prototype,n.prototype,s),n},z=A({frozen:new X,hidden:new F,iframePropertiesToAbort:{read:new j,write:new j},abortedIframes:new X}),U=new _("^[A-Z]");var G=new Proxy(new H([["chrome",L&&(T&&chrome||W&&browser)||void 0],["isExtensionContext",L],["variables",z],["console",O(console)],["document",globalThis.document],["performance",O(performance)],["JSON",O(JSON)],["Map",H],["Math",O(Math)],["Number",L?Number:B("Number")],["RegExp",_],["Set",j],["String",L?String:B("String")],["WeakMap",X],["WeakSet",F],["MouseEvent",MouseEvent]]),{get(e,t){if(e.has(t))return e.get(t);let n=globalThis[t];return"function"==typeof n&&(n=(U.test(t)?$:V)[t]),e.set(t,n),n},has:(e,t)=>e.has(t)});const J={WeakSet:WeakSet,WeakMap:WeakMap,WeakValue:class{has(){return!1}set(){}}},{apply:Q}=Reflect;const{Map:Y,WeakMap:K,WeakSet:Z,setTimeout:ee}=G;let te=!0,ne=e=>{e.clear(),te=!te};var oe=function(e){const{WeakSet:t,WeakMap:n,WeakValue:o}=this||J,r=new t,i=new n,s=new o;return function(t){if(r.has(t))return t;if(i.has(t))return i.get(t);if(s.has(t))return s.get(t);const n=Q(e,this,arguments);return r.add(n),n!==t&&("object"==typeof t&&t?i:s).set(t,n),n}}.bind({WeakMap:K,WeakSet:Z,WeakValue:class extends Y{set(e,t){return te&&(te=!te,ee(ne,0,this)),super.set(e,t)}}});const{concat:re,includes:ie,join:se,reduce:ae,unshift:ce}=c([]),le=v(globalThis),{Map:ue,WeakMap:de}=le,he=new ue,fe=t=>{const n=(e=>{const t=[];let n=e;for(;n;){if(he.has(n))ce(t,he.get(n));else{const e=w(n);he.set(n,e),ce(t,e)}n=m(n)}return ce(t,{}),r(d,null,t)})("function"==typeof t?t.prototype:t),o={get(e,t){if(t in n){const{value:o,get:r}=n[t];if(r)return s(r,e);if("function"==typeof o)return i(o,e)}return e[t]},set(e,t,o){if(t in n){const{set:r}=n[t];if(r)return s(r,e,o),!0}return e[t]=o,!0}};return t=>new e(t,o)},{isExtensionContext:pe,Array:we,Number:me,String:ge,Object:be}=G,{isArray:ye}=we,{getOwnPropertyDescriptor:ve,setPrototypeOf:Se}=be,{toString:ke}=be.prototype,{slice:Ee}=ge.prototype,{get:xe}=ve(Node.prototype,"nodeType"),Me=pe?{}:{Attr:fe(Attr),CanvasRenderingContext2D:fe(CanvasRenderingContext2D),CSSStyleDeclaration:fe(CSSStyleDeclaration),Document:fe(Document),Element:fe(Element),HTMLCanvasElement:fe(HTMLCanvasElement),HTMLElement:fe(HTMLElement),HTMLImageElement:fe(HTMLImageElement),HTMLScriptElement:fe(HTMLScriptElement),MutationRecord:fe(MutationRecord),Node:fe(Node),ShadowRoot:fe(ShadowRoot),get CSS2Properties(){return Me.CSSStyleDeclaration}},Ce=(e,t)=>{if("Element"!==t&&t in Me)return Me[t](e);if(ye(e))return Se(e,we.prototype);const n=(e=>s(Ee,s(ke,e),8,-1))(e);if(n in Me)return Me[n](e);if(n in G)return Se(e,G[n].prototype);if("nodeType"in e)switch(s(xe,e)){case 1:if(!(t in Me))throw new Error("unknown hint "+t);return Me[t](e);case 2:return Me.Attr(e);case 3:return Me.Node(e);case 9:return Me.Document(e)}throw new Error("unknown brand "+n)};var Te=pe?e=>e===window||e===globalThis?G:e:oe(((e,t="Element")=>{if(e===window||e===globalThis)return G;switch(typeof e){case"object":return e&&Ce(e,t);case"string":return new ge(e);case"number":return new me(e);default:throw new Error("unsupported value")}}));let{document:We,getComputedStyle:Le,isExtensionContext:Oe,variables:Pe,Array:De,MutationObserver:Ne,Object:Ae,XPathEvaluator:Ie,XPathExpression:Re,XPathResult:Ve}=Te(window),{querySelectorAll:$e}=We,He=$e&&i($e,We);const{assign:_e,setPrototypeOf:je}=Ae;class Xe extends Re{evaluate(...e){return je(r(super.evaluate,this,e),Ve.prototype)}}class Fe extends Ie{createExpression(...e){return je(r(super.createExpression,this,e),Xe.prototype)}}function qe(e){if(Pe.hidden.has(e))return;!function(e){Oe&&"function"==typeof checkElement&&checkElement(e)}(e),Pe.hidden.add(e);let{style:t}=Te(e),n=Te(t,"CSSStyleDeclaration"),o=Te([]),{debugCSSProperties:r}=S;for(let[e,t]of r||[["display","none"]])n.setProperty(e,t,"important"),o.push([e,n.getPropertyValue(e)]);new Ne((()=>{for(let[e,t]of o){let o=n.getPropertyValue(e),r=n.getPropertyPriority(e);o==t&&"important"==r||n.setProperty(e,t,"important")}})).observe(e,{attributes:!0,attributeFilter:["style"]})}function Be(e){let t=e;if(t.startsWith("xpath(")&&t.endsWith(")")){let e=t.slice(6,-1),n=(new Fe).createExpression(e,null),o=Ve.ORDERED_NODE_SNAPSHOT_TYPE;return e=>{if(!e)return;let t=n.evaluate(We,o,null),{snapshotLength:r}=t;for(let n=0;nHe(e).forEach(t)}function ze(e,t,n,o){let r;null==n&&(n=t);const i=()=>{for(const i of He(n)){const n=Te(i).closest(t);n&&e(i,n)&&(r(),qe(n),"function"==typeof o&&o(n))}};return _e(new Ne(i),{race(e){r=e,this.observe(We,{childList:!0,characterData:!0,subtree:!0}),i()}})}function Ue(e,t,n){let o=Te(t,"CSSStyleDeclaration");if("none"==o.getPropertyValue("display"))return!1;let r=o.getPropertyValue("visibility");if("hidden"==r||"collapse"==r)return!1;if(!n||e==n)return!0;let i=Te(e).parentElement;return!i||Ue(i,Le(i),n)}function Ge(e){let t=Le(e),{cssText:n}=t;if(n)return n;for(let e of t)n+=`${e}: ${t[e]}; `;return Te(n).trim()}let{Math:Je,RegExp:Qe}=Te(window);function Ye(e){let{length:t}=e;if(t>1&&"/"===e[0]){let n="/"===e[t-1];if(n||t>2&&Te(e).endsWith("/i")){let t=[Te(e).slice(1,n?-1:-2)];return n||t.push("i"),new Qe(...t)}}return new Qe(Te(e).replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))}let Ke=!1;function Ze(){return Ke}const{console:et}=Te(window),tt=()=>{};function nt(...e){Ze()&&Te(e).unshift("%c DEBUG","font-weight: bold"),et.log(...e)}function ot(e){return i(Ze()?nt:tt,null,e)}let{Array:rt,Error:it,Map:st,parseInt:at}=Te(window),ct=null,lt=null;function ut(e,t){if(null===ct)return tt;let n=ct,{participants:o}=n;return o.set(r,t),r;function r(){if(n.winners<1)return;if(ot("race")(`${e} won the race`),n===ct)lt.push(r);else if(o.delete(r),--n.winners<1){for(let e of o.values())e();o.clear()}}}const dt={get(e,t){const n=e;for(;!g(e,t);)e=m(e);const{get:o,set:i}=p(e,t);return function(){return arguments.length?r(i,n,arguments):s(o,n)}}};var ht;function ft(e,t,n){var o,r;n?"load"===n?(e("Waiting until window.load"),window.onload=()=>{e("Window.load fired."),t()}):"loading"===n||"interactive"===n||"complete"===n?(e("Waiting document state until :",n),document.onreadystatechange=()=>{e("Document state changed:",document.readyState),document.readyState===n&&t()}):(e("Waiting until ",n," event is triggered on document"),(o=document,r=n,new Promise((e=>{const t=()=>{o.removeEventListener(r,t),e()};o.addEventListener(r,t)}))).then((()=>{e(n," is triggered on document, starting the snippet"),t()})).catch((t=>{e("There was an error while waiting for the event.",t)}))):t()}Te(window),ht=window,new e(ht,dt),Te(/^\d+$/);let{MutationObserver:pt,WeakSet:wt,getComputedStyle:mt}=Te(window);let{clearTimeout:gt,fetch:bt,getComputedStyle:yt,setTimeout:vt,Map:St,MutationObserver:kt,Uint8Array:Et}=Te(window);let xt=new St;function Mt(e,{as:t="arrayBuffer",cleanup:n=6e4}={}){let o=t+":"+e,r=xt.get(o)||{remove:()=>xt.delete(o),result:null,timer:0};return gt(r.timer),r.timer=vt(r.remove,n),r.result||(r.result=bt(e).then((e=>e[t]())).catch(r.remove),xt.set(o,r)),r.result}function Ct(e){return e.reduce(((e,t)=>e+function(e,t=2){let n=Te(e).toString(16);return n.length{const n=e.length+1,o=t.length+1,r=[[0]];let i=0,s=0;for(;++i"{mark(){},end(){}}"};function zt(e,t=10){return Bt}let{MutationObserver:Ut,WeakSet:Gt}=Te(window);const{ELEMENT_NODE:Jt}=Node;let{MutationObserver:Qt,WeakSet:Yt}=Te(window);const{ELEMENT_NODE:Kt}=Node;let{parseInt:Zt,setTimeout:en,Error:tn,MouseEvent:nn,MutationObserver:on,WeakSet:rn}=Te(window);let{parseInt:sn,setTimeout:an,Error:cn,MouseEvent:ln,MutationObserver:un,WeakSet:dn}=Te(window);const hn=["auxclick","click","dblclick","gotpointercapture","lostpointercapture","mouseenter","mousedown","mouseleave","mousemove","mouseout","mouseover","mouseup","pointerdown","pointerenter","pointermove","pointerover","pointerout","pointerup","pointercancel","pointerleave"];const fn={log:nt,race:function(e,t="1"){switch(e){case"start":ct={winners:at(t,10)||1,participants:new st},lt=new rt;break;case"end":case"finish":case"stop":ct=null;for(let e of lt)e();lt=null;break;default:throw new it(`Invalid action: ${e}`)}},debug:function(){Ke=!0},"hide-if-matches-xpath":function(e,t){const{mark:n,end:o}=zt(),r=ot("hide-if-matches-xpath"),i=t=>{const i=Be(`xpath(${e})`),s=new Gt,a=()=>{n(),i((t=>{if(s.has(t))return!1;s.add(t),l(),Te(t).nodeType===Jt?qe(t):Te(t).textContent="",r("Matched: ",t," for selector: ",e)})),o()},c=new Ut(a),l=ut("hide-if-matches-xpath",(()=>c.disconnect()));c.observe(t,{characterData:!0,childList:!0,subtree:!0}),a()};if(t){let e,n=0;const o=Be(`xpath(${t})`),r=()=>{o((e=>{i(e),n++})),n>0&&e.disconnect()};e=new Ut(r),e.observe(document,{characterData:!0,childList:!0,subtree:!0}),r()}else i(document)},"hide-if-matches-computed-xpath":function(e,t,n,o){const{mark:r,end:i}=zt(),s=ot("hide-if-matches-computed-xpath");if(!t||!e)return void s("No query or searchQuery provided.");const a=t=>{const n=(t=>e.replace("{{}}",t))(t);s("Starting hiding elements that match query: ",n);const o=Be(`xpath(${n})`),a=new Yt,c=()=>{r(),o((t=>{if(a.has(t))return!1;a.add(t),u(),Te(t).nodeType===Kt?qe(t):Te(t).textContent="",s("Matched: ",t," for selector: ",e)})),i()},l=new Qt(c),u=ut("hide-if-matches-computed-xpath",(()=>l.disconnect()));l.observe(document,{characterData:!0,childList:!0,subtree:!0}),c()},c=Ye(n);ft(s,(()=>{if(t){s("Started searching for: ",t);const e=new Yt;let n;const o=Be(`xpath(${t})`),r=()=>{o((t=>{if(e.has(t))return!1;if(e.add(t),s("Found node: ",t),t.innerHTML){s("Searching in: ",t.innerHTML);const e=t.innerHTML.match(c);if(e&&e.length){let t="";t=e[1]?e[1]:e[0],s("Matched search query: ",t),a(t)}}}))};n=new Qt(r),n.observe(document,{characterData:!0,childList:!0,subtree:!0}),r()}}),o)},"hide-if-contains":function(e,t="*",n=null){const o=ot("hide-if-contains");let r=Ye(e);const i=ze((e=>r.test(Te(e).textContent)),t,n,(e=>{o("Matched: ",e," for selector: ",t,n)}));i.race(ut("hide-if-contains",(()=>{i.disconnect()})))},"hide-if-contains-similar-text":function(e,t,n=null,o=0,r=0){const i=new Ot,s=ot("hide-if-contains-similar-text"),a=Te(e),{length:c}=a,l=c+Tt(o)||0,u=Te([...a]).sort(),d=Tt(r)||1/0;null==n&&(n=t),s("Looking for similar text: "+a);const h=()=>{for(const e of He(n)){if(i.has(e))continue;i.add(e);const{innerText:n}=Te(e),r=Pt(d,n.length-l+1);for(let i=0;if.disconnect()));f.observe(document,{childList:!0,characterData:!0,subtree:!0}),h()},"hide-if-contains-visible-text":function(e,t,n=null,...o){let r=Te([]);const i=new At([["-snippet-box-margin","2"],["-disable-bg-color-check","false"],["-check-is-contained","false"]]);for(let e of o){e=Te(e);let t=e.indexOf(":");if(t<0)continue;let n=e.slice(0,t).trim().toString(),o=e.slice(t+1).trim().toString();n&&o&&(i.has(n)?i.set(n,o):r.push([n,o]))}let s=Te([["opacity","0"],["font-size","0px"],["color","rgba(0, 0, 0, 0)"]]),a=new At(s.concat(r));function c(e,t,{bgColorCheck:n=!0}={}){t||(t=Nt(e)),t=Te(t);for(const[e,n]of a){if(Ye(n).test(t.getPropertyValue(e)))return!1}let o=t.getPropertyValue("color");return!n||t.getPropertyValue("background-color")!=o}function l(e,t,{bgColorCheck:n=!0}={}){let o=Nt(e,t);if(!Ue(e,o)||!c(e,o,{bgColorCheck:n}))return"";let{content:r}=Te(o);if(r&&"none"!==r){let t=Te([]);return r=Te(r).trim().replace(/(["'])(?:(?=(\\?))\2.)*?\1/g,(e=>""+(t.push(Te(e).slice(1,-1))-1))),r=r.replace(/\s*attr\(\s*([^\s,)]+)[^)]*?\)\s*/g,((t,n)=>Te(e).getAttribute(n)||"")),r.replace(/\x01(\d+)/g,((e,n)=>t[n]))}return""}function u(e,t,{boxMargin:n=2}={}){const o=Te(e).getBoundingClientRect(),r=Te(t).getBoundingClientRect(),i=r.left-n,s=r.right+n,a=r.top-n,c=r.bottom+n;return i<=o.left&&o.left<=s&&a<=o.top&&o.top<=c&&a<=o.bottom&&o.bottom<=c&&i<=o.right&&o.right<=s}function d(e,t,n,o,r,{boxMargin:i=2,bgColorCheck:s,checkIsContained:a}={}){let h=!n;if(h&&(n=Nt(e)),!Ue(e,n,h&&t))return"";o||"hidden"!==Te(n).getPropertyValue("overflow-x")&&"hidden"!==Te(n).getPropertyValue("overflow-y")||(o=e);let f=l(e,":before",{bgColorCheck:s});for(let t of Te(e).childNodes)switch(Te(t).nodeType){case Vt:f+=d(t,e,Nt(t),o,r,{boxMargin:i,bgColorCheck:s,checkIsContained:a});break;case $t:if(o)u(e,o,{boxMargin:i})&&c(e,n,{bgColorCheck:s})&&(f+=Te(t).nodeValue);else if(c(e,n,{bgColorCheck:s})){if(a&&!u(e,r,{boxMargin:i}))continue;f+=Te(t).nodeValue}}return f+l(e,":after",{bgColorCheck:s})}const h=i.get("-snippet-box-margin"),f=Rt(h)||0,p=!("true"===i.get("-disable-bg-color-check")),w="true"===i.get("-check-is-contained");let m=Ye(e),g=new It;const b=ze(((e,t)=>{if(g.has(e))return!1;g.add(e);let n=d(e,t,null,null,e,{boxMargin:f,bgColorCheck:p,checkIsContained:w}),o=m.test(n);return Ze()&&n.length&&nt(o,m,n),o}),t,n);b.race(ut("hide-if-contains-visible-text",(()=>{b.disconnect()})))},"hide-if-contains-and-matches-style":function(e,t="*",n=null,o=null,r=null,i,s=null,a=null){const c=ot("hide-if-contains-and-matches-style"),l=new wt;null==n&&(n=t);const u=Ye(e),d=o?Ye(o):null,h=r?Ye(r):null,f=()=>{const e=()=>{if(!(s&&window.innerWidtha))for(const e of He(n))if(!l.has(e)&&u.test(Te(e).textContent))if(!h||h.test(Ge(e))){const n=Te(e).closest(t);if(!n)continue;!d||d.test(Ge(n))?(r(),qe(n),l.add(e),c("Matched: ",n,"which contains: ",e," for params: ",...arguments)):c("In this element the searchStyle matched but style didn't:\n",n,mt(n),...arguments)}else c("In this element the searchStyle didn't match:\n",e,mt(e),...arguments)},o=new pt(e),r=ut("hide-if-contains-and-matches-style",(()=>o.disconnect()));o.observe(document,{childList:!0,characterData:!0,subtree:!0}),e()};ft(c,f,i)},"hide-if-has-and-matches-style":function(e,t="*",n=null,o=null,r=null,i=null,s=null,a=null){const c=ot("hide-if-has-and-matches-style"),l=new _t;null==n&&(n=t);const u=o?Ye(o):null,d=r?Ye(r):null,h=()=>{const o=()=>{if(!(s&&window.innerWidtha))for(const o of He(n))if(!l.has(o))if(!Te(o).querySelector(e)||d&&!d.test(Ge(o)))c("In this element the searchStyle didn't match:\n",o,jt(o),...arguments);else{const e=Te(o).closest(t);!e||u&&!u.test(Ge(e))?c("In this element the searchStyle matched but style didn't:\n",e,jt(e),...arguments):(i(),qe(e),l.add(o),c("Matched: ",e,"which contains: ",o," for params: ",...arguments))}},r=new Ht(o),i=ut("hide-if-has-and-matches-style",(()=>r.disconnect()));r.observe(document,{childList:!0,subtree:!0}),o()};ft(c,h,i)},"hide-if-labelled-by":function(e,t,n=null){let o=null==n,r=Ye(e),i=new qt,s=()=>{for(let e of He(t)){let t=o?e:Te(e).closest(n);if(!t||!Ue(e,Xt(e),t))continue;let s=Te(e).getAttribute("aria-labelledby"),a=()=>{i.has(t)||r.test(Te(e).getAttribute("aria-label")||"")&&(c(),i.add(t),qe(t))};if(s)for(let e of Te(s).split(/\s+/)){let n=Te(document).getElementById(e);n?!i.has(n)&&r.test(n.innerText)&&(c(),i.add(n),qe(t)):a()}else a()}},a=new Ft(s),c=ut("hide-if-labelled-by",(()=>a.disconnect()));a.observe(document,{characterData:!0,childList:!0,subtree:!0}),s()},"hide-if-contains-image":function(e,t,n){null==n&&(n=t);let o=Ye(e);const r=ot("hide-if-contains-image");let i=()=>{for(let e of He(n)){let n=yt(e),i=Te(n["background-image"]).match(/^url\("(.*)"\)$/);i&&Mt(i[1]).then((n=>{if(o.test(Ct(new Et(n)))){let n=Te(e).closest(t);n&&(a(),qe(n),r("Matched: ",n," for:",...arguments))}}))}},s=new kt(i),a=ut("hide-if-contains-image",(()=>s.disconnect()));s.observe(document,{childList:!0,subtree:!0}),i()},"simulate-event-poc":function(e,t,n="0"){if(!e)throw new tn("[simulate-event snippet]: No event type provided.");if(!t)throw new tn("[simulate-event snippet]: No selector provided.");let o=Be(t),r=Zt(n,10),i=new rn;function s(){o((t=>{i.has(t)||(i.add(t),en((()=>{Te(t).dispatchEvent(new nn(e,{bubbles:!0,cancelable:!0}))}),r))}))}new on(s).observe(document,{childList:!0,subtree:!0}),s()},"simulate-mouse-event":function(...e){const t=ot("simulate-mouse-event");if(e.length<1)throw new cn("[simulate-mouse-event snippet]: No selector provided.");e.length>7&&(e=e.slice(0,7));const n=Te([]);function o(){return n.forEach((e=>{if(!e.found){(function(e){let t=e;if(t.startsWith("xpath(")&&t.endsWith(")")){let t=Be(e);return()=>{let e=Te([]);return t((t=>e.push(t))),e}}return()=>De.from(He(e))})(e.selector)().length>0&&(e.found=!0)}})),n.every((e=>e.found))}function r(e,n,o){e&&n&&("click"===n&&e.click?(e.click(),t("Clicked on this node:\n",e,"\nwith a delay of",o,"ms")):(e.dispatchEvent(new ln(n,{bubbles:!0,cancelable:!0})),t("A",n,"event was dispatched with a delay of",o,"ms on this node:\n",e)))}Te(e).forEach((e=>{const o=function(e){if(!e)return null;const n={selector:"",continue:!1,trigger:!1,event:"click",delay:"500",clicked:!1,found:!1},o=e.split("$");let r=[];o.length>=2&&(r=o[1].toLowerCase().split(",")),[n.selector]=o;for(const e of r)if("trigger"===e)n.trigger=!0;else if("continue"===e)n.continue=!0;else if(e.startsWith("event")){const t=e.toLowerCase().split("=");t[1]?n.event=t[1]:n.event="click"}else if(e.startsWith("delay")){const t=e.toLowerCase().split("=");t[1]?n.delay=t[1]:n.delay="500"}return hn.includes(n.event)||t(n.event," might be misspelled, check for typos.\n","These are the supported events:",hn),n}(e);n.push(o)}));let i=!1;const[s]=n.slice(-1);s.trigger=!0;let a=new dn;function c(){if(i||(i=o()),i)for(const e of n){const t=Be(e.selector),n=sn(e.delay,10);e.trigger&&t((t=>{a.has(t)||(a.add(t),e.continue?setInterval((()=>{r(t,e.event,e.delay)}),n):an((()=>{r(t,e.event,e.delay)}),n))}))}}new un(c).observe(document,{childList:!0,subtree:!0}),c()}};let{MutationObserver:pn}=Te(window);const{ELEMENT_NODE:wn}=Node;fn["hide-if-matches-xpath3"]=function(e,t){let{mark:n,end:o}=zt();function r(){return fontoxpath.evaluateXPathToNodes(e,document,null,null,{language:fontoxpath.evaluateXPath.XQUERY_3_1_LANGUAGE})}let i=ot("hide-if-matches-xpath3");const s=t=>{const s=new WeakSet,a=()=>{n();const t=r();for(const n of Te(t)){if(s.has(n))return!1;s.add(n),l(),Te(n).nodeType===wn?qe(n):Te(n).textContent="",i("Matched: ",n," for selector: ",e)}o()},c=new pn(a),l=ut("hide-if-matches-xpath3",(()=>c.disconnect()));c.observe(t,{characterData:!0,childList:!0,subtree:!0}),a()};if(t){let e,t=0;const n=r(),o=()=>{for(const e of Te(n))s(e),t++;t>0&&e.disconnect()};e=new pn(o),e.observe(document,{characterData:!0,childList:!0,subtree:!0}),o()}else s(document)}; ++const snippets=fn; ++let context; ++for (const [name, ...args] of filters) { ++if (snippets.hasOwnProperty(name)) { ++try { context = snippets[name].apply(context, args); } ++catch (error) { console.error(error); } ++} ++} ++context = void 0; ++})(e, ...t); ++ ++const callback = (environment, ...filters) => { ++const e=Proxy,{apply:t,bind:r,call:n}=Function,o=n.bind(t),i=n.bind(r),s=n.bind(n),a={get:(e,t)=>i(n,e[t])},l=t=>new e(t,a),c=(t,r)=>new e(t,{apply:(e,t,n)=>o(r,t,n)}),u={get:(e,t)=>i(e[t],e)},f=t=>new e(t,u),{assign:p,defineProperties:d,freeze:h,getOwnPropertyDescriptor:w,getOwnPropertyDescriptors:g,getPrototypeOf:y}=f(Object),{hasOwnProperty:m}=l({}),{species:b}=Symbol,v={get(e,t){const r=e[t];class n extends r{}const o=g(r.prototype);delete o.constructor,h(d(n.prototype,o));const i=g(r);return delete i.length,delete i.prototype,i[b]={value:n},h(d(n,i))}},E=t=>new e(t,v),S="undefined"!=typeof environment?environment:{};"undefined"==typeof globalThis&&(window.globalThis=window);const{apply:M,ownKeys:T}=f(Reflect),x="world"in S,O=x&&"ISOLATED"===S.world,P=x&&"MAIN"===S.world,j="object"==typeof chrome&&!!chrome.runtime,N="object"==typeof browser&&!!browser.runtime,L=!P&&(O||j||N),k=e=>L?e:C(e,H(e)),{create:C,defineProperties:A,defineProperty:W,freeze:$,getOwnPropertyDescriptor:D,getOwnPropertyDescriptors:H}=f(Object),z=f(globalThis),R=L?globalThis:E(globalThis),{Map:F,RegExp:I,Set:J,WeakMap:V,WeakSet:B}=R,U=(e,t,r=null)=>{const n=T(t);for(const o of T(e)){if(n.includes(o))continue;const i=D(e,o);if(r&&"value"in i){const{value:e}=i;"function"==typeof e&&(i.value=r(e))}W(t,o,i)}},_=e=>{const t=R[e];class r extends t{}const{toString:n,valueOf:o}=t.prototype;A(r.prototype,{toString:{value:n},valueOf:{value:o}});const i=e.toLowerCase(),s=e=>function(){const t=M(e,this,arguments);return typeof t===i?new r(t):t};return U(t,r,s),U(t.prototype,r.prototype,s),r},X=$({frozen:new V,hidden:new B,iframePropertiesToAbort:{read:new J,write:new J},abortedIframes:new V}),q=new I("^[A-Z]");var G=new Proxy(new F([["chrome",L&&(j&&chrome||N&&browser)||void 0],["isExtensionContext",L],["variables",X],["console",k(console)],["document",globalThis.document],["performance",k(performance)],["JSON",k(JSON)],["Map",F],["Math",k(Math)],["Number",L?Number:_("Number")],["RegExp",I],["Set",J],["String",L?String:_("String")],["WeakMap",V],["WeakSet",B],["MouseEvent",MouseEvent]]),{get(e,t){if(e.has(t))return e.get(t);let r=globalThis[t];return"function"==typeof r&&(r=(q.test(t)?R:z)[t]),e.set(t,r),r},has:(e,t)=>e.has(t)});const K={WeakSet:WeakSet,WeakMap:WeakMap,WeakValue:class{has(){return!1}set(){}}},{apply:Y}=Reflect;const{Map:Z,WeakMap:Q,WeakSet:ee,setTimeout:te}=G;let re=!0,ne=e=>{e.clear(),re=!re};var oe=function(e){const{WeakSet:t,WeakMap:r,WeakValue:n}=this||K,o=new t,i=new r,s=new n;return function(t){if(o.has(t))return t;if(i.has(t))return i.get(t);if(s.has(t))return s.get(t);const r=Y(e,this,arguments);return o.add(r),r!==t&&("object"==typeof t&&t?i:s).set(t,r),r}}.bind({WeakMap:Q,WeakSet:ee,WeakValue:class extends Z{set(e,t){return re&&(re=!re,te(ne,0,this)),super.set(e,t)}}});const{concat:ie,includes:se,join:ae,reduce:le,unshift:ce}=l([]),ue=E(globalThis),{Map:fe,WeakMap:pe}=ue,de=new fe,he=t=>{const r=(e=>{const t=[];let r=e;for(;r;){if(de.has(r))ce(t,de.get(r));else{const e=g(r);de.set(r,e),ce(t,e)}r=y(r)}return ce(t,{}),o(p,null,t)})("function"==typeof t?t.prototype:t),n={get(e,t){if(t in r){const{value:n,get:o}=r[t];if(o)return s(o,e);if("function"==typeof n)return i(n,e)}return e[t]},set(e,t,n){if(t in r){const{set:o}=r[t];if(o)return s(o,e,n),!0}return e[t]=n,!0}};return t=>new e(t,n)},{isExtensionContext:we,Array:ge,Number:ye,String:me,Object:be}=G,{isArray:ve}=ge,{getOwnPropertyDescriptor:Ee,setPrototypeOf:Se}=be,{toString:Me}=be.prototype,{slice:Te}=me.prototype,{get:xe}=Ee(Node.prototype,"nodeType"),Oe=we?{}:{Attr:he(Attr),CanvasRenderingContext2D:he(CanvasRenderingContext2D),CSSStyleDeclaration:he(CSSStyleDeclaration),Document:he(Document),Element:he(Element),HTMLCanvasElement:he(HTMLCanvasElement),HTMLElement:he(HTMLElement),HTMLImageElement:he(HTMLImageElement),HTMLScriptElement:he(HTMLScriptElement),MutationRecord:he(MutationRecord),Node:he(Node),ShadowRoot:he(ShadowRoot),get CSS2Properties(){return Oe.CSSStyleDeclaration}},Pe=(e,t)=>{if("Element"!==t&&t in Oe)return Oe[t](e);if(ve(e))return Se(e,ge.prototype);const r=(e=>s(Te,s(Me,e),8,-1))(e);if(r in Oe)return Oe[r](e);if(r in G)return Se(e,G[r].prototype);if("nodeType"in e)switch(s(xe,e)){case 1:if(!(t in Oe))throw new Error("unknown hint "+t);return Oe[t](e);case 2:return Oe.Attr(e);case 3:return Oe.Node(e);case 9:return Oe.Document(e)}throw new Error("unknown brand "+r)};var je=we?e=>e===window||e===globalThis?G:e:oe(((e,t="Element")=>{if(e===window||e===globalThis)return G;switch(typeof e){case"object":return e&&Pe(e,t);case"string":return new me(e);case"number":return new ye(e);default:throw new Error("unsupported value")}}));const Ne={get(e,t){const r=e;for(;!m(e,t);)e=y(e);const{get:n,set:i}=w(e,t);return function(){return arguments.length?o(i,r,arguments):s(n,r)}}},Le=t=>new e(t,Ne);let ke=!1;function Ce(){return ke}const{console:Ae}=je(window),We=()=>{};function $e(...e){Ce()&&je(e).unshift("%c DEBUG","font-weight: bold"),Ae.log(...e)}function De(e){return i(Ce()?$e:We,null,e)}let{Math:He,RegExp:ze}=je(window);function Re(e){let{length:t}=e;if(t>1&&"/"===e[0]){let r="/"===e[t-1];if(r||t>2&&je(e).endsWith("/i")){let t=[je(e).slice(1,r?-1:-2)];return r||t.push("i"),new ze(...t)}}return new ze(je(e).replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))}function Fe(){return je(He.floor(2116316160*He.random()+60466176)).toString(36)}let{parseFloat:Ie,variables:Je,Array:Ve,Error:Be,Map:Ue,Object:_e,ReferenceError:Xe,Set:qe,WeakMap:Ge}=je(window),{onerror:Ke}=Le(window),Ye=Node.prototype,Ze=Element.prototype,Qe=null;function et(e,t,r,n=!0){let o=je(t),i=o.indexOf(".");if(-1==i){let o=_e.getOwnPropertyDescriptor(e,t);if(o&&!o.configurable)return;let i=_e.assign({},r,{configurable:n});if(!o&&!i.get&&i.set){let r=e[t];i.get=()=>r}return void _e.defineProperty(e,t,i)}let s=o.slice(0,i).toString();t=o.slice(i+1).toString();let a=e[s];!a||"object"!=typeof a&&"function"!=typeof a||et(a,t,r);let l=_e.getOwnPropertyDescriptor(e,s);if(l&&!l.configurable)return;Qe||(Qe=new Ge),Qe.has(e)||Qe.set(e,new Ue);let c=Qe.get(e);if(c.has(s))return void c.get(s).set(t,r);let u=new Ue([[t,r]]);c.set(s,u),_e.defineProperty(e,s,{get:()=>a,set(e){if(a=e,a&&("object"==typeof a||"function"==typeof a))for(let[e,t]of u)et(a,e,t)},configurable:n})}function tt(e){let t=Ke();Ke(((...r)=>{let n=r.length&&r[0];return!("string"!=typeof n||!je(n).includes(e))||("function"==typeof t?o(t,this,r):void 0)}))}function rt(e,t,r,n=!0){let o=De(e);if(!r)return void o("no property to abort on read");let i=Fe();o(`aborting on ${r} access`),et(t,r,{get:function(){throw o(`${r} access aborted`),new Xe(i)},set(){}},n),tt(i)}function nt(e,t,r,n=!0){let o=De(e);if(!r)return void o("no property to abort on write");let i=Fe();o(`aborting when setting ${r}`),et(t,r,{set:function(){throw o(`setting ${r} aborted`),new Xe(i)}},n),tt(i)}function ot(e,t=!1,r=!1){let n=Je.abortedIframes,i=Je.iframePropertiesToAbort;for(let o of Ve.from(window.frames))if(n.has(o))for(let i of e)t&&n.get(o).read.add(i),r&&n.get(o).write.add(i);for(let n of e)t&&i.read.add(n),r&&i.write.add(n);function a(){for(let e of Ve.from(window.frames)){n.has(e)||n.set(e,{read:new qe(i.read),write:new qe(i.write)});let t=n.get(e).read;if(t.size>0){let r=Ve.from(t);t.clear();for(let t of r)rt("abort-on-iframe-property-read",e,t)}let r=n.get(e).write;if(r.size>0){let t=Ve.from(r);r.clear();for(let r of t)nt("abort-on-iframe-property-write",e,r)}}}a(),n.has(document)||(n.set(document,!0),function(e){let t;function r(e,t){for(let r of t){et(e,r,n(e,r))}}function n(t,r){let n=t[r];return{get:()=>function(...t){let r;return r=o(n,this,t),e&&e(),r}}}function i(t,r){let n=_e.getOwnPropertyDescriptor(t,r),{set:o}=n||{};return{set(t){let r;return r=s(o,this,t),e&&e(),r}}}r(Ye,["appendChild","insertBefore","replaceChild"]),r(Ze,["append","prepend","replaceWith","after","before","insertAdjacentElement","insertAdjacentHTML"]),t=i(Ze,"innerHTML"),et(Ze,"innerHTML",t),t=i(Ze,"outerHTML"),et(Ze,"outerHTML",t)}(a))}let{Object:it}=window;function st(e,t){if(!(e instanceof it))return;let r=e,n=je(t).split(".");if(0===n.length)return;for(let e=0;e{};case"trueFunc":return()=>!0;case"falseFunc":return()=>!1;case"emptyArray":return[];case"emptyObj":return{};case"undefined":return;case"":return e;default:if(at.test(e))return Ie(e);throw new Be(`[override-property-read snippet]: Value "${e}" is not valid.`)}}let{HTMLScriptElement:ct,Object:ut,ReferenceError:ft}=je(window),pt=ut.getPrototypeOf(ct);let{Error:dt}=je(window),{cookie:ht}=Le(document);let{document:wt,getComputedStyle:gt,isExtensionContext:yt,variables:mt,Array:bt,MutationObserver:vt,Object:Et,XPathEvaluator:St,XPathExpression:Mt,XPathResult:Tt}=je(window),{querySelectorAll:xt}=wt,Ot=xt&&i(xt,wt);const{assign:Pt,setPrototypeOf:jt}=Et;class Nt extends Mt{evaluate(...e){return jt(o(super.evaluate,this,e),Tt.prototype)}}class Lt extends St{createExpression(...e){return jt(o(super.createExpression,this,e),Nt.prototype)}}function kt(e){if(mt.hidden.has(e))return;!function(e){yt&&"function"==typeof checkElement&&checkElement(e)}(e),mt.hidden.add(e);let{style:t}=je(e),r=je(t,"CSSStyleDeclaration"),n=je([]),{debugCSSProperties:o}=S;for(let[e,t]of o||[["display","none"]])r.setProperty(e,t,"important"),n.push([e,r.getPropertyValue(e)]);new vt((()=>{for(let[e,t]of n){let n=r.getPropertyValue(e),o=r.getPropertyPriority(e);n==t&&"important"==o||r.setProperty(e,t,"important")}})).observe(e,{attributes:!0,attributeFilter:["style"]})}function Ct(e){let t=e;if(t.startsWith("xpath(")&&t.endsWith(")")){let t=function(e){let t=e;if(t.startsWith("xpath(")&&t.endsWith(")")){let e=t.slice(6,-1),r=(new Lt).createExpression(e,null),n=Tt.ORDERED_NODE_SNAPSHOT_TYPE;return e=>{if(!e)return;let t=r.evaluate(wt,n,null),{snapshotLength:o}=t;for(let r=0;rOt(e).forEach(t)}(e);return()=>{let e=je([]);return t((t=>e.push(t))),e}}return()=>bt.from(Ot(e))}let{ELEMENT_NODE:At,TEXT_NODE:Wt,prototype:$t}=Node,{prototype:Dt}=Element,{prototype:Ht}=HTMLElement,{console:zt,variables:Rt,DOMParser:Ft,Error:It,MutationObserver:Jt,Object:Vt,ReferenceError:Bt}=je(window),{getOwnPropertyDescriptor:Ut}=Vt;function _t(e,t){return We}je(window);const{Map:Xt,MutationObserver:qt,Object:Gt,Set:Kt,WeakSet:Yt}=je(window);let Zt=Element.prototype,{attachShadow:Qt}=Zt,er=new Yt,tr=new Xt,rr=null;const{Error:nr,JSON:or,Map:ir,Object:sr}=je(window);let ar=null;let{Error:lr,JSON:cr,Map:ur,Object:fr}=je(window),pr=null;let{Error:dr}=je(window);let{Error:hr,Map:wr,Object:gr,console:yr}=je(window),{toString:mr}=Function.prototype,br=EventTarget.prototype,{addEventListener:vr}=br,Er=null;let Sr,{URL:Mr,fetch:Tr}=je(window),{delete:xr,has:Or}=l(URLSearchParams.prototype);const Pr={"abort-current-inline-script":function(e,t=null){const r=De("abort-current-inline-script"),n=t?Re(t):null,o=Fe(),i=je(document).currentScript;let a=window;const l=je(e).split("."),c=je(l).pop();for(let e of je(l))if(a=a[e],!a||"object"!=typeof a&&"function"!=typeof a)return void r(l," is not found");const{get:u,set:f}=ut.getOwnPropertyDescriptor(a,c)||{};let p=a[c];void 0===p&&r("The property",c,"doesn't exist yet. Check typos.");const d=()=>{const e=je(document).currentScript;if(e instanceof pt&&""==je(e,"HTMLScriptElement").src&&e!=i&&(!n||n.test(je(e).textContent)))throw r(l," is aborted \n",e),new ft(o)};et(a,c,{get(){return d(),u?s(u,this):p},set(e){d(),f?s(f,this,e):p=e}}),tt(o)},"abort-on-iframe-property-read":function(...e){ot(e,!0,!1)},"abort-on-iframe-property-write":function(...e){ot(e,!1,!0)},"abort-on-property-read":function(e,t){rt("abort-on-property-read",window,e,!("false"===t))},"abort-on-property-write":function(e,t){nt("abort-on-property-write",window,e,!("false"===t))},"cookie-remover":function(e){if(!e)throw new dt("[cookie-remover snippet]: No cookie to remove.");let t=De("cookie-remover"),r=Re(e);if(je(/^http|^about/).test(location.protocol)){t("Parsing cookies for matches");for(const e of je(je(ht()).split(";").filter((e=>r.test(je(e).split("=")[0]))))){let r=je(location.hostname),n=je(e).split("=")[0],o="expires=Thu, 01 Jan 1970 00:00:00 GMT",i="path=/",s="domain="+r.slice(r.indexOf(".")+1);ht(`${je(n).trim()}=;${o};${i};${s}`),t(`Set expiration date on ${n}`)}}else t("Snippet only works for http or https and about.")},debug:function(){ke=!0},"freeze-element":function(e,t="",...r){let n,i,a=!1,l=!1,c=je(r).filter((e=>!h(e))),u=je(r).filter((e=>h(e))).map(Re),f=Fe(),p=Ct(e);!function(){let r=je(t).split("+");1===r.length&&""===r[0]&&(r=[]);for(let t of r)switch(t){case"subtree":a=!0;break;case"abort":l=!0;break;default:throw new It("[freeze] Unknown option passed to the snippet. [selector]: "+e+" [option]: "+t)}}();let d={selector:e,shouldAbort:l,rid:f,exceptionSelectors:c,regexExceptions:u,changeId:0};function h(e){return e.length>=2&&"/"==e[0]&&"/"==e[e.length-1]}function w(){i=p(),g(i,!1)}function g(e,t=!0){for(let r of e)Rt.frozen.has(r)||(Rt.frozen.set(r,d),!t&&a&&new Jt((e=>{for(let t of je(e))g(je(t,"MutationRecord").addedNodes)})).observe(r,{childList:!0,subtree:!0}),a&&je(r).nodeType===At&&g(je(r).childNodes))}function y(e,...t){$e(`[freeze][${e}] `,...t)}function m(e,t,r,n){let o=n.selector,i=n.changeId,s="string"==typeof e,a=n.shouldAbort?"aborting":"watching";switch(zt.groupCollapsed(`[freeze][${i}] ${a}: ${o}`),r){case"appendChild":case"append":case"prepend":case"insertBefore":case"replaceChild":case"insertAdjacentElement":case"insertAdjacentHTML":case"insertAdjacentText":case"innerHTML":case"outerHTML":y(i,s?"text: ":"node: ",e),y(i,"added to node: ",t);break;case"replaceWith":case"after":case"before":y(i,s?"text: ":"node: ",e),y(i,"added to node: ",je(t).parentNode);break;case"textContent":case"innerText":case"nodeValue":y(i,"content of node: ",t),y(i,"changed to: ",e)}y(i,`using the function "${r}"`),zt.groupEnd(),n.changeId++}function b(e,t){if(t)for(let r of t)if(r.test(e))return!0;return!1}function v(e){throw new Bt(e)}function E(e,t,r,n){let o=new Ft,{body:i}=je(o.parseFromString(e,"text/html")),s=S(je(i).childNodes,t,r,n);return je(s).map((e=>{switch(je(e).nodeType){case At:return je(e).outerHTML;case Wt:return je(e).textContent;default:return""}})).join("")}function S(e,t,r,n){let o=je([]);for(let i of e)M(i,t,r,n)&&o.push(i);return o}function M(e,t,r,n){let o=n.shouldAbort,i=n.regexExceptions,s=n.exceptionSelectors,a=n.rid;if("string"==typeof e){let s=e;return!!b(s,i)||(Ce()&&m(s,t,r,n),o&&v(a),Ce())}let l=e;switch(je(l).nodeType){case At:return!!function(e,t){if(t){let r=je(e);for(let e of t)if(r.matches(e))return!0}return!1}(l,s)||(o&&(Ce()&&m(l,t,r,n),v(a)),!!Ce()&&(kt(l),m(l,t,r,n),!0));case Wt:return!!b(je(l).textContent,i)||(Ce()&&m(l,t,r,n),o&&v(a),!1);default:return!0}}function T(e,t,r,n){let i=Ut(e,t)||{},a=i.get&&s(i.get,e)||i.value;if(a)return{get:()=>function(...e){if(r(this)){let r=n(this);if(r){let n=e[0];if(!M(n,this,t,r))return n}}return o(a,this,e)}}}function x(e,t,r,n){let i=Ut(e,t)||{},a=i.get&&s(i.get,e)||i.value;if(a)return{get:()=>function(...e){if(!r(this))return o(a,this,e);let i=n(this);if(!i)return o(a,this,e);let s=S(e,this,t,i);return s.length>0?o(a,this,s):void 0}}}function O(e,t,r,n){let i=Ut(e,t)||{},a=i.get&&s(i.get,e)||i.value;if(a)return{get:()=>function(...e){let[i,l]=e,c="afterbegin"===i||"beforeend"===i;if(r(this,c)){let e=n(this,c);if(e){let r,n=c?this:je(this).parentNode;switch(t){case"insertAdjacentElement":if(!M(l,n,t,e))return l;break;case"insertAdjacentHTML":return r=E(l,n,t,e),r?s(a,this,i,r):void 0;case"insertAdjacentText":if(!M(l,n,t,e))return}}}return o(a,this,e)}}}function P(e,t,r,n){let o=Ut(e,t)||{},{set:i}=o;if(i)return{set(e){if(!r(this))return s(i,this,e);let o=n(this);if(!o)return s(i,this,e);let a=E(e,this,t,o);return a?s(i,this,a):void 0}}}function j(e,t,r,n){let o=Ut(e,t)||{},{set:i}=o;if(i)return{set(e){if(!r(this))return s(i,this,e);let o=n(this);return o?M(e,this,t,o)?s(i,this,e):void 0:s(i,this,e)}}}Rt.frozen.has(document)||(Rt.frozen.set(document,!0),function(){let e;function t(e){return e&&Rt.frozen.has(e)}function r(e){try{return e&&(Rt.frozen.has(e)||Rt.frozen.has(je(e).parentNode))}catch(e){return!1}}function n(e,t){try{return e&&(Rt.frozen.has(e)&&t||Rt.frozen.has(je(e).parentNode)&&!t)}catch(e){return!1}}function o(e){return Rt.frozen.get(e)}function i(e){try{if(Rt.frozen.has(e))return Rt.frozen.get(e);let t=je(e).parentNode;return Rt.frozen.get(t)}catch(e){}}function s(e,t){try{if(Rt.frozen.has(e)&&t)return Rt.frozen.get(e);let r=je(e).parentNode;return Rt.frozen.get(r)}catch(e){}}e=T($t,"appendChild",t,o),et($t,"appendChild",e),e=T($t,"insertBefore",t,o),et($t,"insertBefore",e),e=T($t,"replaceChild",t,o),et($t,"replaceChild",e),e=x(Dt,"append",t,o),et(Dt,"append",e),e=x(Dt,"prepend",t,o),et(Dt,"prepend",e),e=x(Dt,"replaceWith",r,i),et(Dt,"replaceWith",e),e=x(Dt,"after",r,i),et(Dt,"after",e),e=x(Dt,"before",r,i),et(Dt,"before",e),e=O(Dt,"insertAdjacentElement",n,s),et(Dt,"insertAdjacentElement",e),e=O(Dt,"insertAdjacentHTML",n,s),et(Dt,"insertAdjacentHTML",e),e=O(Dt,"insertAdjacentText",n,s),et(Dt,"insertAdjacentText",e),e=P(Dt,"innerHTML",t,o),et(Dt,"innerHTML",e),e=P(Dt,"outerHTML",r,i),et(Dt,"outerHTML",e),e=j($t,"textContent",t,o),et($t,"textContent",e),e=j(Ht,"innerText",t,o),et(Ht,"innerText",e),e=j($t,"nodeValue",t,o),et($t,"nodeValue",e)}()),n=new Jt(w),n.observe(document,{childList:!0,subtree:!0}),w()},"hide-if-shadow-contains":function(e,t="*"){let r=`${e}\\${t}`;tr.has(r)||tr.set(r,[Re(e),t,_t()]);const n=De("hide-if-shadow-contain");rr||(rr=new qt((e=>{let t=new Kt;for(let{target:r}of je(e)){let e=je(r).parentNode;for(;e;)[r,e]=[e,je(r).parentNode];if(!er.has(r)&&!t.has(r)){t.add(r);for(let[e,t,o]of tr.values())if(e.test(je(r).textContent)){let e=je(r.host).closest(t);e&&(o(),je(r).appendChild(document.createElement("style")).textContent=":host {display: none !important}",kt(e),er.add(r),n("Hiding: ",e," for params: ",...arguments))}}}})),Gt.defineProperty(Zt,"attachShadow",{value:c(Qt,(function(){let e=o(Qt,this,arguments);return n("attachShadow is called for: ",e),rr.observe(e,{childList:!0,characterData:!0,subtree:!0}),e}))}))},"json-override":function(e,t,r="",n=""){if(!e)throw new nr("[json-override snippet]: Missing paths to override.");if(void 0===t)throw new nr("[json-override snippet]: No value to override with.");if(!ar){let e=De("json-override"),{parse:t}=or;ar=new ir,sr.defineProperty(window.JSON,"parse",{value:c(t,(function(r){let n=o(t,this,arguments);for(let{prune:t,needle:o,filter:i,value:s}of ar.values())if(!i||i.test(r)){if(je(o).some((e=>!st(n,e))))return n;for(let r of t){let t=st(n,r);void 0!==t&&(e(`Found ${r} replaced it with ${s}`),t[0][t[1]]=lt(s))}}return n}))}),e("Wrapped JSON.parse for override")}ar.set(e,{prune:je(e).split(/ +/),needle:r.length?je(r).split(/ +/):[],filter:n?Re(n):null,value:t})},"json-prune":function(e,t=""){if(!e)throw new lr("Missing paths to prune");if(!pr){let e=De("json-prune"),{parse:t}=cr;pr=new ur,fr.defineProperty(window.JSON,"parse",{value:c(t,(function(){let r=o(t,this,arguments);for(let{prune:t,needle:n}of pr.values()){if(je(n).some((e=>!st(r,e))))return r;for(let n of t){let t=st(r,n);void 0!==t&&(e(`Found ${n} and deleted`),delete t[0][t[1]])}}return r}))}),e("Wrapped JSON.parse for prune")}pr.set(e,{prune:je(e).split(/ +/),needle:t.length?je(t).split(/ +/):[]})},"override-property-read":function(e,t){if(!e)throw new dr("[override-property-read snippet]: No property to override.");if(void 0===t)throw new dr("[override-property-read snippet]: No value to override with.");let r=De("override-property-read"),n=lt(t);r(`Overriding ${e}.`),et(window,e,{get:()=>(r(`${e} override done.`),n),set(){}})},"prevent-listener":function(e,t,r){if(!e)throw new hr("[prevent-listener snippet]: No event type.");if(!Er){Er=new wr;let e=De("[prevent]");gr.defineProperty(br,"addEventListener",{value:c(vr,(function(t,r){for(let{evt:n,handlers:o,selectors:i}of Er.values()){if(!n.test(t))continue;let a=this instanceof Element;for(let l=0;lc.test(s(mr,"function"==typeof r?r:r.handleEvent));if((!c||f())&&(!u||a&&je(this).matches(u)))return void(Ce()&&(yr.groupCollapsed("DEBUG [prevent] was successful"),e(`type: ${t} matching ${n}`),e("handler:",r),c&&e(`matching ${c}`),u&&e("on element: ",this,` matching ${u}`),e("was prevented from being added"),yr.groupEnd()))}}return o(vr,this,arguments)}))}),e("Wrapped addEventListener")}Er.has(e)||Er.set(e,{evt:Re(e),handlers:[],selectors:[]});let{handlers:n,selectors:i}=Er.get(e);n.push(t?Re(t):null),i.push(r)},"strip-fetch-query-parameter":function(e,t=null){const r=De("strip-fetch-query-parameter");Sr||(Sr=new Map,window.fetch=c(Tr,((...e)=>{let[t]=e;if("string"==typeof t){let n=new Mr(t);for(let[o,i]of Sr)i&&!i.test(t)||Or(n.searchParams,o)&&(r(`${o} has been stripped from url ${t}`),xr(n.searchParams,o),e[0]=n.href)}return o(Tr,self,e)}))),Sr.set(e,t&&Re(t))},trace:function(...e){o($e,null,e)}}; ++const snippets=Pr; ++let context; ++for (const [name, ...args] of filters) { ++if (snippets.hasOwnProperty(name)) { ++try { context = snippets[name].apply(context, args); } ++catch (error) { console.error(error); } ++} ++} ++context = void 0; ++}; ++const graph = new Map([["abort-current-inline-script",null],["abort-on-iframe-property-read",null],["abort-on-iframe-property-write",null],["abort-on-property-read",null],["abort-on-property-write",null],["cookie-remover",null],["debug",null],["freeze-element",null],["hide-if-shadow-contains",null],["json-override",null],["json-prune",null],["override-property-read",null],["prevent-listener",null],["strip-fetch-query-parameter",null],["trace",null]]); ++callback.get = snippet => graph.get(snippet); ++callback.has = snippet => graph.has(snippet); ++ ++ if (t.every(([name]) => !callback.has(name))) return; ++ const append = () => { ++ URL.revokeObjectURL( ++ Object.assign( ++ document.documentElement.appendChild(document.createElement("script")), ++ {async: false, src: URL.createObjectURL(new Blob([ ++ "(" + callback + ")(..." + JSON.stringify([e, ...t]) + ")" ++ ]))} ++ ).src ++ ); ++ }; ++ try { append(); } ++ catch (_) { ++ document.addEventListener("readystatechange", append, {once:true}); ++ } ++} +\ No newline at end of file +diff --git a/components/resources/adblocking/snippets/dist/isolated-first-xpath3.source.jst b/components/resources/adblocking/snippets/dist/isolated-first-xpath3.source.jst +new file mode 100644 +--- /dev/null ++++ b/components/resources/adblocking/snippets/dist/isolated-first-xpath3.source.jst +@@ -0,0 +1,3696 @@ ++(e, ...t) => { ++/*! ++ * snippets v0.8.1 (https://gitlab.com/eyeo/anti-cv/snippets/-/tree/5f54b58f039a604088d65991f2829a9a081832f6/dist) ++ * This file is part of eyeo's Anti-Circumvention Snippets module (@eyeo/snippets), ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * @eyeo/snippets is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * @eyeo/snippets is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with @eyeo/snippets. If not, see . ++ */ ++ ((environment, ...filters) => { ++ /*! ++ * This file is part of eyeo's Anti-Circumvention Snippets module (@eyeo/snippets), ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * @eyeo/snippets is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * @eyeo/snippets is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with @eyeo/snippets. If not, see . ++ */ ++ const $$1 = Proxy; ++ ++ const {apply: a, bind: b, call: c} = Function; ++ const apply$2 = c.bind(a); ++ const bind = c.bind(b); ++ const call = c.bind(c); ++ ++ const callerHandler = { ++ get(target, name) { ++ return bind(c, target[name]); ++ } ++ }; ++ ++ const caller = target => new $$1(target, callerHandler); ++ ++ const handler$2 = { ++ get(target, name) { ++ return bind(target[name], target); ++ } ++ }; ++ ++ const bound = target => new $$1(target, handler$2); ++ ++ const { ++ assign: assign$1, ++ defineProperties: defineProperties$1, ++ freeze: freeze$1, ++ getOwnPropertyDescriptor: getOwnPropertyDescriptor$2, ++ getOwnPropertyDescriptors: getOwnPropertyDescriptors$1, ++ getPrototypeOf ++ } = bound(Object); ++ ++ const {hasOwnProperty} = caller({}); ++ ++ const {species} = Symbol; ++ ++ const handler$1 = { ++ get(target, name) { ++ const Native = target[name]; ++ class Secure extends Native {} ++ ++ const proto = getOwnPropertyDescriptors$1(Native.prototype); ++ delete proto.constructor; ++ freeze$1(defineProperties$1(Secure.prototype, proto)); ++ ++ const statics = getOwnPropertyDescriptors$1(Native); ++ delete statics.length; ++ delete statics.prototype; ++ statics[species] = {value: Secure}; ++ return freeze$1(defineProperties$1(Secure, statics)); ++ } ++ }; ++ ++ const secure = target => new $$1(target, handler$1); ++ ++ const libEnvironment = typeof environment !== "undefined" ? environment : ++ {}; ++ ++ if (typeof globalThis === "undefined") ++ window.globalThis = window; ++ ++ const {apply: apply$1, ownKeys} = bound(Reflect); ++ ++ const worldEnvDefined = "world" in libEnvironment; ++ const isIsolatedWorld = worldEnvDefined && libEnvironment.world === "ISOLATED"; ++ const isMainWorld = worldEnvDefined && libEnvironment.world === "MAIN"; ++ const isChrome = typeof chrome === "object" && !!chrome.runtime; ++ const isOtherThanChrome = typeof browser === "object" && !!browser.runtime; ++ const isExtensionContext$2 = !isMainWorld && ++ (isIsolatedWorld || isChrome || isOtherThanChrome); ++ const copyIfExtension = value => isExtensionContext$2 ? ++ value : ++ create(value, getOwnPropertyDescriptors(value)); ++ ++ const { ++ create, ++ defineProperties, ++ defineProperty, ++ freeze, ++ getOwnPropertyDescriptor: getOwnPropertyDescriptor$1, ++ getOwnPropertyDescriptors ++ } = bound(Object); ++ ++ const invokes = bound(globalThis); ++ const classes = isExtensionContext$2 ? globalThis : secure(globalThis); ++ const {Map: Map$5, RegExp: RegExp$1, Set, WeakMap: WeakMap$3, WeakSet: WeakSet$b} = classes; ++ ++ const augment = (source, target, method = null) => { ++ const known = ownKeys(target); ++ for (const key of ownKeys(source)) { ++ if (known.includes(key)) ++ continue; ++ ++ const descriptor = getOwnPropertyDescriptor$1(source, key); ++ if (method && "value" in descriptor) { ++ const {value} = descriptor; ++ if (typeof value === "function") ++ descriptor.value = method(value); ++ } ++ defineProperty(target, key, descriptor); ++ } ++ }; ++ ++ const primitive = name => { ++ const Super = classes[name]; ++ class Class extends Super {} ++ const {toString, valueOf} = Super.prototype; ++ defineProperties(Class.prototype, { ++ toString: {value: toString}, ++ valueOf: {value: valueOf} ++ }); ++ const type = name.toLowerCase(); ++ const method = callback => function() { ++ const result = apply$1(callback, this, arguments); ++ return typeof result === type ? new Class(result) : result; ++ }; ++ augment(Super, Class, method); ++ augment(Super.prototype, Class.prototype, method); ++ return Class; ++ }; ++ ++ const variables$1 = freeze({ ++ frozen: new WeakMap$3(), ++ hidden: new WeakSet$b(), ++ iframePropertiesToAbort: { ++ read: new Set(), ++ write: new Set() ++ }, ++ abortedIframes: new WeakMap$3() ++ }); ++ ++ const startsCapitalized = new RegExp$1("^[A-Z]"); ++ ++ var env = new Proxy(new Map$5([ ++ ++ ["chrome", ( ++ isExtensionContext$2 && ( ++ (isChrome && chrome) || ++ (isOtherThanChrome && browser) ++ ) ++ ) || void 0], ++ ["isExtensionContext", isExtensionContext$2], ++ ["variables", variables$1], ++ ++ ["console", copyIfExtension(console)], ++ ["document", globalThis.document], ++ ["performance", copyIfExtension(performance)], ++ ["JSON", copyIfExtension(JSON)], ++ ["Map", Map$5], ++ ["Math", copyIfExtension(Math)], ++ ["Number", isExtensionContext$2 ? Number : primitive("Number")], ++ ["RegExp", RegExp$1], ++ ["Set", Set], ++ ["String", isExtensionContext$2 ? String : primitive("String")], ++ ["WeakMap", WeakMap$3], ++ ["WeakSet", WeakSet$b], ++ ++ ["MouseEvent", MouseEvent] ++ ]), { ++ get(map, key) { ++ if (map.has(key)) ++ return map.get(key); ++ ++ let value = globalThis[key]; ++ if (typeof value === "function") ++ value = (startsCapitalized.test(key) ? classes : invokes)[key]; ++ ++ map.set(key, value); ++ return value; ++ }, ++ has(map, key) { ++ return map.has(key); ++ } ++ }); ++ ++ class WeakValue { ++ has() { return false; } ++ set() {} ++ } ++ ++ const helpers = {WeakSet, WeakMap, WeakValue}; ++ const {apply} = Reflect; ++ ++ function transformOnce (callback) { const {WeakSet, WeakMap, WeakValue} = (this || helpers); ++ const ws = new WeakSet; ++ const wm = new WeakMap; ++ const wv = new WeakValue; ++ return function (any) { ++ if (ws.has(any)) ++ return any; ++ ++ if (wm.has(any)) ++ return wm.get(any); ++ ++ if (wv.has(any)) ++ return wv.get(any); ++ ++ const value = apply(callback, this, arguments); ++ ws.add(value); ++ if (value !== any) ++ (typeof any === 'object' && any ? wm : wv).set(any, value); ++ return value; ++ }; ++ } ++ ++ const {Map: Map$4, WeakMap: WeakMap$2, WeakSet: WeakSet$a, setTimeout: setTimeout$3} = env; ++ ++ let cleanup = true; ++ let cleanUpCallback = map => { ++ map.clear(); ++ cleanup = !cleanup; ++ }; ++ ++ var transformer = transformOnce.bind({ ++ WeakMap: WeakMap$2, ++ WeakSet: WeakSet$a, ++ ++ WeakValue: class extends Map$4 { ++ set(key, value) { ++ if (cleanup) { ++ cleanup = !cleanup; ++ setTimeout$3(cleanUpCallback, 0, this); ++ } ++ return super.set(key, value); ++ } ++ } ++ }); ++ ++ const {concat, includes, join, reduce, unshift} = caller([]); ++ ++ const globals = secure(globalThis); ++ ++ const { ++ Map: Map$3, ++ WeakMap: WeakMap$1 ++ } = globals; ++ ++ const map = new Map$3; ++ const descriptors = target => { ++ const chain = []; ++ let current = target; ++ while (current) { ++ if (map.has(current)) ++ unshift(chain, map.get(current)); ++ else { ++ const descriptors = getOwnPropertyDescriptors$1(current); ++ map.set(current, descriptors); ++ unshift(chain, descriptors); ++ } ++ current = getPrototypeOf(current); ++ } ++ unshift(chain, {}); ++ return apply$2(assign$1, null, chain); ++ }; ++ ++ const chain = source => { ++ const target = typeof source === 'function' ? source.prototype : source; ++ const chained = descriptors(target); ++ const handler = { ++ get(target, key) { ++ if (key in chained) { ++ const {value, get} = chained[key]; ++ if (get) ++ return call(get, target); ++ if (typeof value === 'function') ++ return bind(value, target); ++ } ++ return target[key]; ++ }, ++ set(target, key, value) { ++ if (key in chained) { ++ const {set} = chained[key]; ++ if (set) { ++ call(set, target, value); ++ return true; ++ } ++ } ++ target[key] = value; ++ return true; ++ } ++ }; ++ return target => new $$1(target, handler); ++ }; ++ ++ const { ++ isExtensionContext: isExtensionContext$1, ++ Array: Array$2, ++ Number: Number$1, ++ String: String$1, ++ Object: Object$2 ++ } = env; ++ ++ const {isArray} = Array$2; ++ const {getOwnPropertyDescriptor, setPrototypeOf: setPrototypeOf$1} = Object$2; ++ ++ const {toString} = Object$2.prototype; ++ const {slice} = String$1.prototype; ++ const getBrand = value => call(slice, call(toString, value), 8, -1); ++ ++ const {get: nodeType} = getOwnPropertyDescriptor(Node.prototype, "nodeType"); ++ ++ const chained = isExtensionContext$1 ? {} : { ++ Attr: chain(Attr), ++ CanvasRenderingContext2D: chain(CanvasRenderingContext2D), ++ CSSStyleDeclaration: chain(CSSStyleDeclaration), ++ Document: chain(Document), ++ Element: chain(Element), ++ HTMLCanvasElement: chain(HTMLCanvasElement), ++ HTMLElement: chain(HTMLElement), ++ HTMLImageElement: chain(HTMLImageElement), ++ HTMLScriptElement: chain(HTMLScriptElement), ++ MutationRecord: chain(MutationRecord), ++ Node: chain(Node), ++ ShadowRoot: chain(ShadowRoot), ++ ++ get CSS2Properties() { ++ return chained.CSSStyleDeclaration; ++ } ++ }; ++ ++ const upgrade = (value, hint) => { ++ if (hint !== "Element" && hint in chained) ++ return chained[hint](value); ++ ++ if (isArray(value)) ++ return setPrototypeOf$1(value, Array$2.prototype); ++ ++ const brand = getBrand(value); ++ if (brand in chained) ++ return chained[brand](value); ++ ++ if (brand in env) ++ return setPrototypeOf$1(value, env[brand].prototype); ++ ++ if ("nodeType" in value) { ++ switch (call(nodeType, value)) { ++ case 1: ++ if (!(hint in chained)) ++ throw new Error("unknown hint " + hint); ++ return chained[hint](value); ++ case 2: ++ return chained.Attr(value); ++ case 3: ++ return chained.Node(value); ++ case 9: ++ return chained.Document(value); ++ } ++ } ++ ++ throw new Error("unknown brand " + brand); ++ }; ++ ++ var $ = isExtensionContext$1 ? ++ value => (value === window || value === globalThis ? env : value) : ++ transformer((value, hint = "Element") => { ++ if (value === window || value === globalThis) ++ return env; ++ ++ switch (typeof value) { ++ case "object": ++ return value && upgrade(value, hint); ++ ++ case "string": ++ return new String$1(value); ++ ++ case "number": ++ return new Number$1(value); ++ ++ default: ++ throw new Error("unsupported value"); ++ } ++ }); ++ ++ let { ++ document: document$1, ++ getComputedStyle: getComputedStyle$5, ++ isExtensionContext, ++ variables, ++ Array: Array$1, ++ MutationObserver: MutationObserver$a, ++ Object: Object$1, ++ XPathEvaluator, ++ XPathExpression, ++ XPathResult ++ } = $(window); ++ ++ let {querySelectorAll} = document$1; ++ let $$ = querySelectorAll && bind(querySelectorAll, document$1); ++ ++ const {assign, setPrototypeOf} = Object$1; ++ ++ class $XPathExpression extends XPathExpression { ++ evaluate(...args) { ++ return setPrototypeOf( ++ apply$2(super.evaluate, this, args), ++ XPathResult.prototype ++ ); ++ } ++ } ++ ++ class $XPathEvaluator extends XPathEvaluator { ++ createExpression(...args) { ++ return setPrototypeOf( ++ apply$2(super.createExpression, this, args), ++ $XPathExpression.prototype ++ ); ++ } ++ } ++ ++ function hideElement(element) { ++ if (variables.hidden.has(element)) ++ return; ++ ++ notifyElementHidden(element); ++ ++ variables.hidden.add(element); ++ ++ let {style} = $(element); ++ let $style = $(style, "CSSStyleDeclaration"); ++ let properties = $([]); ++ let {debugCSSProperties} = libEnvironment; ++ ++ for (let [key, value] of (debugCSSProperties || [["display", "none"]])) { ++ $style.setProperty(key, value, "important"); ++ properties.push([key, $style.getPropertyValue(key)]); ++ } ++ ++ new MutationObserver$a(() => { ++ for (let [key, value] of properties) { ++ let propertyValue = $style.getPropertyValue(key); ++ let propertyPriority = $style.getPropertyPriority(key); ++ if (propertyValue != value || propertyPriority != "important") ++ $style.setProperty(key, value, "important"); ++ } ++ }).observe(element, {attributes: true, ++ attributeFilter: ["style"]}); ++ } ++ ++ function notifyElementHidden(element) { ++ if (isExtensionContext && typeof checkElement === "function") ++ checkElement(element); ++ } ++ ++ function initQueryAndApply(selector) { ++ let $selector = selector; ++ if ($selector.startsWith("xpath(") && ++ $selector.endsWith(")")) { ++ let xpathQuery = $selector.slice(6, -1); ++ let evaluator = new $XPathEvaluator(); ++ let expression = evaluator.createExpression(xpathQuery, null); ++ ++ let flag = XPathResult.ORDERED_NODE_SNAPSHOT_TYPE; ++ ++ return cb => { ++ if (!cb) ++ return; ++ let result = expression.evaluate(document$1, flag, null); ++ let {snapshotLength} = result; ++ for (let i = 0; i < snapshotLength; i++) ++ cb(result.snapshotItem(i)); ++ }; ++ } ++ return cb => $$(selector).forEach(cb); ++ } ++ ++ function initQueryAll(selector) { ++ let $selector = selector; ++ if ($selector.startsWith("xpath(") && ++ $selector.endsWith(")")) { ++ let queryAndApply = initQueryAndApply(selector); ++ return () => { ++ let elements = $([]); ++ queryAndApply(e => elements.push(e)); ++ return elements; ++ }; ++ } ++ return () => Array$1.from($$(selector)); ++ } ++ ++ function hideIfMatches(match, selector, searchSelector, onHideCallback) { ++ if (searchSelector == null) ++ searchSelector = selector; ++ ++ let won; ++ const callback = () => { ++ for (const element of $$(searchSelector)) { ++ const closest = $(element).closest(selector); ++ if (closest && match(element, closest)) { ++ won(); ++ hideElement(closest); ++ if (typeof onHideCallback === "function") ++ onHideCallback(closest); ++ } ++ } ++ }; ++ return assign( ++ new MutationObserver$a(callback), ++ { ++ race(win) { ++ won = win; ++ this.observe(document$1, {childList: true, ++ characterData: true, ++ subtree: true}); ++ callback(); ++ } ++ } ++ ); ++ } ++ ++ function isVisible(element, style, closest) { ++ let $style = $(style, "CSSStyleDeclaration"); ++ if ($style.getPropertyValue("display") == "none") ++ return false; ++ ++ let visibility = $style.getPropertyValue("visibility"); ++ if (visibility == "hidden" || visibility == "collapse") ++ return false; ++ ++ if (!closest || element == closest) ++ return true; ++ ++ let parent = $(element).parentElement; ++ if (!parent) ++ return true; ++ ++ return isVisible(parent, getComputedStyle$5(parent), closest); ++ } ++ ++ function getComputedCSSText(element) { ++ let style = getComputedStyle$5(element); ++ let {cssText} = style; ++ ++ if (cssText) ++ return cssText; ++ ++ for (let property of style) ++ cssText += `${property}: ${style[property]}; `; ++ ++ return $(cssText).trim(); ++ } ++ ++ let {Math: Math$2, RegExp} = $(window); ++ ++ function regexEscape(string) { ++ return $(string).replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); ++ } ++ ++ function toRegExp(pattern) { ++ let {length} = pattern; ++ ++ if (length > 1 && pattern[0] === "/") { ++ let isCaseSensitive = pattern[length - 1] === "/"; ++ ++ if (isCaseSensitive || (length > 2 && $(pattern).endsWith("/i"))) { ++ let args = [$(pattern).slice(1, isCaseSensitive ? -1 : -2)]; ++ if (!isCaseSensitive) ++ args.push("i"); ++ ++ return new RegExp(...args); ++ } ++ } ++ ++ return new RegExp(regexEscape(pattern)); ++ } ++ ++ let debugging = false; ++ ++ function debug() { ++ return debugging; ++ } ++ ++ function setDebug() { ++ debugging = true; ++ } ++ ++ const {console: console$1} = $(window); ++ ++ const noop = () => {}; ++ ++ function log(...args) { ++ if (debug()) ++ $(args).unshift("%c DEBUG", "font-weight: bold"); ++ ++ console$1.log(...args); ++ } ++ ++ function getDebugger(name) { ++ return bind(debug() ? log : noop, null, name); ++ } ++ ++ let {Array, Error: Error$3, Map: Map$2, parseInt: parseInt$2} = $(window); ++ ++ let stack = null; ++ let won = null; ++ ++ function race(action, winners = "1") { ++ switch (action) { ++ case "start": ++ stack = { ++ winners: parseInt$2(winners, 10) || 1, ++ participants: new Map$2() ++ }; ++ won = new Array(); ++ break; ++ case "end": ++ case "finish": ++ case "stop": ++ stack = null; ++ for (let win of won) ++ win(); ++ won = null; ++ break; ++ default: ++ throw new Error$3(`Invalid action: ${action}`); ++ } ++ } ++ ++ function raceWinner(name, lose) { ++ ++ if (stack === null) ++ return noop; ++ ++ let current = stack; ++ let {participants} = current; ++ participants.set(win, lose); ++ ++ return win; ++ ++ function win() { ++ ++ if (current.winners < 1) ++ return; ++ ++ let debugLog = getDebugger("race"); ++ debugLog(`${name} won the race`); ++ ++ if (current === stack) { ++ won.push(win); ++ } ++ else { ++ participants.delete(win); ++ if (--current.winners < 1) { ++ for (let looser of participants.values()) ++ looser(); ++ ++ participants.clear(); ++ } ++ } ++ } ++ } ++ ++ function hideIfContains(search, selector = "*", searchSelector = null) { ++ const debugLog = getDebugger("hide-if-contains"); ++ const onHideCallback = node => { ++ debugLog("Matched: ", node, " for selector: ", selector, searchSelector); ++ }; ++ let re = toRegExp(search); ++ ++ const mo = hideIfMatches(element => re.test($(element).textContent), ++ selector, ++ searchSelector, ++ onHideCallback); ++ mo.race(raceWinner( ++ "hide-if-contains", ++ () => { ++ mo.disconnect(); ++ } ++ )); ++ } ++ ++ const handler = { ++ get(target, name) { ++ const context = target; ++ while (!hasOwnProperty(target, name)) ++ target = getPrototypeOf(target); ++ const {get, set} = getOwnPropertyDescriptor$2(target, name); ++ return function () { ++ return arguments.length ? ++ apply$2(set, context, arguments) : ++ call(get, context); ++ }; ++ } ++ }; ++ ++ const accessor = target => new $$1(target, handler); ++ ++ $(window); ++ ++ accessor(window); ++ ++ $(/^\d+$/); ++ ++ function getPromiseFromEvent(item, event) { ++ return new Promise( ++ resolve => { ++ const listener = () => { ++ item.removeEventListener(event, listener); ++ resolve(); ++ }; ++ item.addEventListener(event, listener); ++ } ++ ); ++ } ++ ++ function waitUntilEvent( ++ debugLog, ++ mainLogic, ++ waitUntil) { ++ if (waitUntil) { ++ ++ if (waitUntil === "load") { ++ debugLog("Waiting until window.load"); ++ ++ window.onload = () => { ++ debugLog("Window.load fired."); ++ mainLogic(); ++ }; ++ } ++ ++ else if (waitUntil === "loading" || ++ waitUntil === "interactive" || ++ waitUntil === "complete") { ++ debugLog("Waiting document state until :", waitUntil); ++ ++ document.onreadystatechange = () => { ++ debugLog("Document state changed:", document.readyState); ++ if (document.readyState === waitUntil) ++ mainLogic(); ++ }; ++ } ++ ++ else { ++ debugLog("Waiting until ", waitUntil, " event is triggered on document"); ++ getPromiseFromEvent(document, waitUntil).then(() => { ++ debugLog(waitUntil, " is triggered on document, starting the snippet"); ++ mainLogic(); ++ }).catch(err => { ++ debugLog("There was an error while waiting for the event.", err); ++ }); ++ } ++ } ++ else { ++ ++ mainLogic(); ++ } ++ } ++ ++ let {MutationObserver: MutationObserver$9, WeakSet: WeakSet$9, getComputedStyle: getComputedStyle$4} = $(window); ++ ++ function hideIfContainsAndMatchesStyle(search, ++ selector = "*", ++ searchSelector = null, ++ style = null, ++ searchStyle = null, ++ waitUntil, ++ windowWidthMin = null, ++ windowWidthMax = null ++ ) { ++ const debugLog = getDebugger("hide-if-contains-and-matches-style"); ++ const hiddenMap = new WeakSet$9(); ++ if (searchSelector == null) ++ searchSelector = selector; ++ ++ const searchRegExp = toRegExp(search); ++ ++ const styleRegExp = style ? toRegExp(style) : null; ++ const searchStyleRegExp = searchStyle ? toRegExp(searchStyle) : null; ++ const mainLogic = () => { ++ const callback = () => { ++ if ((windowWidthMin && window.innerWidth < windowWidthMin) || ++ (windowWidthMax && window.innerWidth > windowWidthMax) ++ ) ++ return; ++ for (const element of $$(searchSelector)) { ++ if (hiddenMap.has(element)) ++ continue; ++ if (searchRegExp.test($(element).textContent)) { ++ if (!searchStyleRegExp || ++ searchStyleRegExp.test(getComputedCSSText(element))) { ++ const closest = $(element).closest(selector); ++ if (!closest) ++ continue; ++ if (!styleRegExp || styleRegExp.test(getComputedCSSText(closest))) { ++ win(); ++ hideElement(closest); ++ hiddenMap.add(element); ++ debugLog("Matched: ", ++ closest, ++ "which contains: ", ++ element, ++ " for params: ", ++ ...arguments); ++ } ++ else { ++ debugLog( ++ "In this element the searchStyle matched but style didn't:\n", ++ closest, ++ getComputedStyle$4(closest), ++ ...arguments); ++ } ++ } ++ else { ++ debugLog( ++ "In this element the searchStyle didn't match:\n", ++ element, ++ getComputedStyle$4(element), ++ ...arguments); ++ } ++ } ++ } ++ }; ++ ++ const mo = new MutationObserver$9(callback); ++ const win = raceWinner( ++ "hide-if-contains-and-matches-style", ++ () => mo.disconnect() ++ ); ++ mo.observe(document, {childList: true, characterData: true, subtree: true}); ++ callback(); ++ }; ++ waitUntilEvent(debugLog, mainLogic, waitUntil); ++ } ++ ++ let { ++ clearTimeout, ++ fetch, ++ getComputedStyle: getComputedStyle$3, ++ setTimeout: setTimeout$2, ++ Map: Map$1, ++ MutationObserver: MutationObserver$8, ++ Uint8Array ++ } = $(window); ++ ++ function hideIfContainsImage(search, selector, searchSelector) { ++ if (searchSelector == null) ++ searchSelector = selector; ++ ++ let searchRegExp = toRegExp(search); ++ ++ const debugLog = getDebugger("hide-if-contains-image"); ++ ++ let callback = () => { ++ for (let element of $$(searchSelector)) { ++ let style = getComputedStyle$3(element); ++ let match = $(style["background-image"]).match(/^url\("(.*)"\)$/); ++ if (match) { ++ fetchContent(match[1]).then(content => { ++ if (searchRegExp.test(uint8ArrayToHex(new Uint8Array(content)))) { ++ let closest = $(element).closest(selector); ++ if (closest) { ++ win(); ++ hideElement(closest); ++ debugLog("Matched: ", closest, " for:", ...arguments); ++ } ++ } ++ }); ++ } ++ } ++ }; ++ ++ let mo = new MutationObserver$8(callback); ++ let win = raceWinner( ++ "hide-if-contains-image", ++ () => mo.disconnect() ++ ); ++ mo.observe(document, {childList: true, subtree: true}); ++ callback(); ++ } ++ ++ let fetchContentMap = new Map$1(); ++ ++ function fetchContent(url, {as = "arrayBuffer", cleanup = 60000} = {}) { ++ ++ let uid = as + ":" + url; ++ let details = fetchContentMap.get(uid) || { ++ remove: () => fetchContentMap.delete(uid), ++ result: null, ++ timer: 0 ++ }; ++ clearTimeout(details.timer); ++ details.timer = setTimeout$2(details.remove, cleanup); ++ if (!details.result) { ++ details.result = fetch(url).then(res => res[as]()).catch(details.remove); ++ fetchContentMap.set(uid, details); ++ } ++ return details.result; ++ } ++ ++ function toHex(number, length = 2) { ++ let hex = $(number).toString(16); ++ ++ if (hex.length < length) ++ hex = $("0").repeat(length - hex.length) + hex; ++ ++ return hex; ++ } ++ ++ function uint8ArrayToHex(uint8Array) { ++ return uint8Array.reduce((hex, byte) => hex + toHex(byte), ""); ++ } ++ ++ const {parseFloat: parseFloat$1, Math: Math$1, MutationObserver: MutationObserver$7, WeakSet: WeakSet$8} = $(window); ++ const {min} = Math$1; ++ ++ const ld = (a, b) => { ++ const len1 = a.length + 1; ++ const len2 = b.length + 1; ++ const d = [[0]]; ++ let i = 0; ++ let I = 0; ++ ++ while (++i < len2) ++ d[0][i] = i; ++ ++ i = 0; ++ while (++i < len1) { ++ const c = a[I]; ++ let j = 0; ++ let J = 0; ++ d[i] = [i]; ++ while (++j < len2) { ++ d[i][j] = min(d[I][j] + 1, d[i][J] + 1, d[I][J] + (c != b[J])); ++ ++J; ++ } ++ ++I; ++ } ++ return d[len1 - 1][len2 - 1]; ++ }; ++ ++ function hideIfContainsSimilarText( ++ search, selector, ++ searchSelector = null, ++ ignoreChars = 0, ++ maxSearches = 0 ++ ) { ++ const visitedNodes = new WeakSet$8(); ++ const debugLog = getDebugger("hide-if-contains-similar-text"); ++ const $search = $(search); ++ const {length} = $search; ++ const chars = length + parseFloat$1(ignoreChars) || 0; ++ const find = $([...$search]).sort(); ++ const guard = parseFloat$1(maxSearches) || Infinity; ++ ++ if (searchSelector == null) ++ searchSelector = selector; ++ ++ debugLog("Looking for similar text: " + $search); ++ ++ const callback = () => { ++ for (const element of $$(searchSelector)) { ++ if (visitedNodes.has(element)) ++ continue; ++ ++ visitedNodes.add(element); ++ const {innerText} = $(element); ++ const loop = min(guard, innerText.length - chars + 1); ++ for (let i = 0; i < loop; i++) { ++ const str = $(innerText).substr(i, chars); ++ const distance = ld(find, $([...str]).sort()) - ignoreChars; ++ if (distance <= 0) { ++ const closest = $(element).closest(selector); ++ debugLog("Found similar text: " + $search, closest); ++ if (closest) { ++ win(); ++ hideElement(closest); ++ break; ++ } ++ } ++ } ++ } ++ }; ++ ++ let mo = new MutationObserver$7(callback); ++ let win = raceWinner( ++ "hide-if-contains-similar-text", ++ () => mo.disconnect() ++ ); ++ mo.observe(document, {childList: true, characterData: true, subtree: true}); ++ callback(); ++ } ++ ++ let {getComputedStyle: getComputedStyle$2, Map, WeakSet: WeakSet$7, parseFloat} = $(window); ++ ++ const {ELEMENT_NODE: ELEMENT_NODE$3, TEXT_NODE} = Node; ++ ++ function hideIfContainsVisibleText(search, selector, ++ searchSelector = null, ++ ...attributes) { ++ let entries = $([]); ++ const optionalParameters = new Map([ ++ ["-snippet-box-margin", "2"], ++ ["-disable-bg-color-check", "false"], ++ ["-check-is-contained", "false"] ++ ]); ++ ++ for (let attr of attributes) { ++ attr = $(attr); ++ let markerIndex = attr.indexOf(":"); ++ if (markerIndex < 0) ++ continue; ++ ++ let key = attr.slice(0, markerIndex).trim().toString(); ++ let value = attr.slice(markerIndex + 1).trim().toString(); ++ ++ if (key && value) { ++ if (optionalParameters.has(key)) ++ optionalParameters.set(key, value); ++ else ++ entries.push([key, value]); ++ } ++ } ++ ++ let defaultEntries = $([ ++ ["opacity", "0"], ++ ["font-size", "0px"], ++ ++ ["color", "rgba(0, 0, 0, 0)"] ++ ]); ++ ++ let attributesMap = new Map(defaultEntries.concat(entries)); ++ ++ function isTextVisible(element, style, {bgColorCheck = true} = {}) { ++ if (!style) ++ style = getComputedStyle$2(element); ++ ++ style = $(style); ++ ++ for (const [key, value] of attributesMap) { ++ let valueAsRegex = toRegExp(value); ++ if (valueAsRegex.test(style.getPropertyValue(key))) ++ return false; ++ } ++ ++ let color = style.getPropertyValue("color"); ++ if (bgColorCheck && style.getPropertyValue("background-color") == color) ++ return false; ++ ++ return true; ++ } ++ ++ function getPseudoContent(element, pseudo, {bgColorCheck = true} = {}) { ++ let style = getComputedStyle$2(element, pseudo); ++ if (!isVisible(element, style) || ++ !isTextVisible(element, style, {bgColorCheck})) ++ return ""; ++ ++ let {content} = $(style); ++ if (content && content !== "none") { ++ let strings = $([]); ++ ++ content = $(content).trim().replace( ++ /(["'])(?:(?=(\\?))\2.)*?\1/g, ++ value => `\x01${strings.push($(value).slice(1, -1)) - 1}` ++ ); ++ ++ content = content.replace( ++ /\s*attr\(\s*([^\s,)]+)[^)]*?\)\s*/g, ++ (_, name) => $(element).getAttribute(name) || "" ++ ); ++ ++ return content.replace( ++ /\x01(\d+)/g, ++ (_, index) => strings[index]); ++ } ++ return ""; ++ } ++ ++ function isContained(childNode, parentNode, {boxMargin = 2} = {}) { ++ const child = $(childNode).getBoundingClientRect(); ++ const parent = $(parentNode).getBoundingClientRect(); ++ const stretchedParent = { ++ left: parent.left - boxMargin, ++ right: parent.right + boxMargin, ++ top: parent.top - boxMargin, ++ bottom: parent.bottom + boxMargin ++ }; ++ return ( ++ (stretchedParent.left <= child.left && ++ child.left <= stretchedParent.right && ++ stretchedParent.top <= child.top && ++ child.top <= stretchedParent.bottom) && ++ (stretchedParent.top <= child.bottom && ++ child.bottom <= stretchedParent.bottom && ++ stretchedParent.left <= child.right && ++ child.right <= stretchedParent.right) ++ ); ++ } ++ ++ function getVisibleContent(element, ++ closest, ++ style, ++ parentOverflowNode, ++ originalElement, ++ { ++ boxMargin = 2, ++ bgColorCheck, ++ checkIsContained ++ } = {}) { ++ let checkClosest = !style; ++ if (checkClosest) ++ style = getComputedStyle$2(element); ++ ++ if (!isVisible(element, style, checkClosest && closest)) ++ return ""; ++ ++ if (!parentOverflowNode && ++ ( ++ $(style).getPropertyValue("overflow-x") === "hidden" || ++ $(style).getPropertyValue("overflow-y") === "hidden" ++ ) ++ ) ++ parentOverflowNode = element; ++ ++ let text = getPseudoContent(element, ":before", {bgColorCheck}); ++ for (let node of $(element).childNodes) { ++ switch ($(node).nodeType) { ++ case ELEMENT_NODE$3: ++ text += getVisibleContent(node, ++ element, ++ getComputedStyle$2(node), ++ parentOverflowNode, ++ originalElement, ++ { ++ boxMargin, ++ bgColorCheck, ++ checkIsContained ++ } ++ ); ++ break; ++ case TEXT_NODE: ++ ++ if (parentOverflowNode) { ++ if (isContained(element, parentOverflowNode, {boxMargin}) && ++ isTextVisible(element, style, {bgColorCheck})) ++ text += $(node).nodeValue; ++ } ++ else if (isTextVisible(element, style, {bgColorCheck})) { ++ if (checkIsContained && ++ !isContained(element, originalElement, {boxMargin})) ++ continue; ++ text += $(node).nodeValue; ++ } ++ break; ++ } ++ } ++ return text + getPseudoContent(element, ":after", {bgColorCheck}); ++ } ++ const boxMarginStr = optionalParameters.get("-snippet-box-margin"); ++ const boxMargin = parseFloat(boxMarginStr) || 0; ++ ++ const bgColorCheckStr = optionalParameters.get("-disable-bg-color-check"); ++ const bgColorCheck = !(bgColorCheckStr === "true"); ++ ++ const checkIsContainedStr = optionalParameters.get("-check-is-contained"); ++ const checkIsContained = (checkIsContainedStr === "true"); ++ ++ let re = toRegExp(search); ++ let seen = new WeakSet$7(); ++ ++ const mo = hideIfMatches( ++ (element, closest) => { ++ if (seen.has(element)) ++ return false; ++ ++ seen.add(element); ++ let text = getVisibleContent(element, closest, null, null, element, { ++ boxMargin, ++ bgColorCheck, ++ checkIsContained ++ } ++ ); ++ let result = re.test(text); ++ if (debug() && text.length) ++ log(result, re, text); ++ return result; ++ }, ++ selector, ++ searchSelector ++ ); ++ mo.race(raceWinner( ++ "hide-if-contains-visible-text", ++ () => { ++ mo.disconnect(); ++ } ++ )); ++ } ++ ++ let {MutationObserver: MutationObserver$6, WeakSet: WeakSet$6, getComputedStyle: getComputedStyle$1} = $(window); ++ ++ function hideIfHasAndMatchesStyle(search, ++ selector = "*", ++ searchSelector = null, ++ style = null, ++ searchStyle = null, ++ waitUntil = null, ++ windowWidthMin = null, ++ windowWidthMax = null ++ ) { ++ const debugLog = getDebugger("hide-if-has-and-matches-style"); ++ const hiddenMap = new WeakSet$6(); ++ if (searchSelector == null) ++ searchSelector = selector; ++ ++ const styleRegExp = style ? toRegExp(style) : null; ++ const searchStyleRegExp = searchStyle ? toRegExp(searchStyle) : null; ++ const mainLogic = () => { ++ const callback = () => { ++ if ((windowWidthMin && window.innerWidth < windowWidthMin) || ++ (windowWidthMax && window.innerWidth > windowWidthMax) ++ ) ++ return; ++ for (const element of $$(searchSelector)) { ++ if (hiddenMap.has(element)) ++ continue; ++ if ($(element).querySelector(search) && ++ (!searchStyleRegExp || ++ searchStyleRegExp.test(getComputedCSSText(element)))) { ++ const closest = $(element).closest(selector); ++ if (closest && (!styleRegExp || ++ styleRegExp.test(getComputedCSSText(closest)))) { ++ win(); ++ hideElement(closest); ++ hiddenMap.add(element); ++ debugLog("Matched: ", ++ closest, ++ "which contains: ", ++ element, ++ " for params: ", ++ ...arguments); ++ } ++ else { ++ debugLog( ++ "In this element the searchStyle matched but style didn't:\n", ++ closest, ++ getComputedStyle$1(closest), ++ ...arguments); ++ } ++ } ++ else { ++ debugLog( ++ "In this element the searchStyle didn't match:\n", ++ element, ++ getComputedStyle$1(element), ++ ...arguments); ++ } ++ } ++ }; ++ ++ const mo = new MutationObserver$6(callback); ++ const win = raceWinner( ++ "hide-if-has-and-matches-style", ++ () => mo.disconnect() ++ ); ++ mo.observe(document, {childList: true, subtree: true}); ++ callback(); ++ }; ++ waitUntilEvent(debugLog, mainLogic, waitUntil); ++ } ++ ++ let {getComputedStyle, MutationObserver: MutationObserver$5, WeakSet: WeakSet$5} = $(window); ++ ++ function hideIfLabelledBy(search, selector, searchSelector = null) { ++ let sameSelector = searchSelector == null; ++ ++ let searchRegExp = toRegExp(search); ++ ++ let matched = new WeakSet$5(); ++ ++ let callback = () => { ++ for (let node of $$(selector)) { ++ let closest = sameSelector ? ++ node : ++ $(node).closest(searchSelector); ++ if (!closest || !isVisible(node, getComputedStyle(node), closest)) ++ continue; ++ ++ let attr = $(node).getAttribute("aria-labelledby"); ++ let fallback = () => { ++ if (matched.has(closest)) ++ return; ++ ++ if (searchRegExp.test( ++ $(node).getAttribute("aria-label") || "" ++ )) { ++ win(); ++ matched.add(closest); ++ hideElement(closest); ++ } ++ }; ++ ++ if (attr) { ++ for (let label of $(attr).split(/\s+/)) { ++ let target = $(document).getElementById(label); ++ if (target) { ++ if (!matched.has(target) && searchRegExp.test(target.innerText)) { ++ win(); ++ matched.add(target); ++ hideElement(closest); ++ } ++ } ++ else { ++ fallback(); ++ } ++ } ++ } ++ else { ++ fallback(); ++ } ++ } ++ }; ++ ++ let mo = new MutationObserver$5(callback); ++ let win = raceWinner( ++ "hide-if-labelled-by", ++ () => mo.disconnect() ++ ); ++ mo.observe(document, {characterData: true, childList: true, subtree: true}); ++ callback(); ++ } ++ ++ $(window); ++ ++ const noopProfile = { ++ mark() {}, ++ end() {}, ++ toString() { ++ return "{mark(){},end(){}}"; ++ } ++ }; ++ ++ function profile(id, rate = 10) { ++ return noopProfile; ++ } ++ ++ let {MutationObserver: MutationObserver$4, WeakSet: WeakSet$4} = $(window); ++ ++ const {ELEMENT_NODE: ELEMENT_NODE$2} = Node; ++ ++ function hideIfMatchesXPath(query, scopeQuery) { ++ const {mark, end} = profile(); ++ const debugLog = getDebugger("hide-if-matches-xpath"); ++ ++ const startHidingMutationObserver = scopeNode => { ++ const queryAndApply = initQueryAndApply(`xpath(${query})`); ++ const seenMap = new WeakSet$4(); ++ const callback = () => { ++ mark(); ++ queryAndApply(node => { ++ if (seenMap.has(node)) ++ return false; ++ seenMap.add(node); ++ win(); ++ if ($(node).nodeType === ELEMENT_NODE$2) ++ hideElement(node); ++ else ++ $(node).textContent = ""; ++ debugLog("Matched: ", node, " for selector: ", query); ++ }); ++ end(); ++ }; ++ const mo = new MutationObserver$4(callback); ++ const win = raceWinner( ++ "hide-if-matches-xpath", ++ () => mo.disconnect() ++ ); ++ mo.observe( ++ scopeNode, {characterData: true, childList: true, subtree: true}); ++ callback(); ++ }; ++ ++ if (scopeQuery) { ++ ++ let count = 0; ++ let scopeMutationObserver; ++ const scopeQueryAndApply = initQueryAndApply(`xpath(${scopeQuery})`); ++ const findMutationScopeNodes = () => { ++ scopeQueryAndApply(scopeNode => { ++ ++ startHidingMutationObserver(scopeNode); ++ count++; ++ }); ++ if (count > 0) ++ scopeMutationObserver.disconnect(); ++ }; ++ scopeMutationObserver = new MutationObserver$4(findMutationScopeNodes); ++ scopeMutationObserver.observe( ++ document, {characterData: true, childList: true, subtree: true} ++ ); ++ findMutationScopeNodes(); ++ } ++ else { ++ ++ startHidingMutationObserver(document); ++ } ++ } ++ ++ let {MutationObserver: MutationObserver$3, WeakSet: WeakSet$3} = $(window); ++ ++ const {ELEMENT_NODE: ELEMENT_NODE$1} = Node; ++ ++ function hideIfMatchesComputedXPath(query, searchQuery, searchRegex, ++ waitUntil) { ++ const {mark, end} = profile(); ++ const debugLog = getDebugger("hide-if-matches-computed-xpath"); ++ ++ if (!searchQuery || !query) { ++ debugLog("No query or searchQuery provided."); ++ return; ++ } ++ ++ const computeQuery = foundText => query.replace("{{}}", foundText); ++ ++ const startHidingMutationObserver = foundText => { ++ const computedQuery = computeQuery(foundText); ++ debugLog("Starting hiding elements that match query: ", computedQuery); ++ const queryAndApply = initQueryAndApply(`xpath(${computedQuery})`); ++ const seenMap = new WeakSet$3(); ++ const callback = () => { ++ mark(); ++ queryAndApply(node => { ++ if (seenMap.has(node)) ++ return false; ++ seenMap.add(node); ++ win(); ++ if ($(node).nodeType === ELEMENT_NODE$1) ++ hideElement(node); ++ else ++ $(node).textContent = ""; ++ debugLog("Matched: ", node, " for selector: ", query); ++ }); ++ end(); ++ }; ++ const mo = new MutationObserver$3(callback); ++ const win = raceWinner( ++ "hide-if-matches-computed-xpath", ++ () => mo.disconnect() ++ ); ++ mo.observe( ++ document, {characterData: true, childList: true, subtree: true}); ++ callback(); ++ }; ++ ++ const re = toRegExp(searchRegex); ++ ++ const mainLogic = () => { ++ if (searchQuery) { ++ debugLog("Started searching for: ", searchQuery); ++ const seenMap = new WeakSet$3(); ++ let searchMO; ++ const searchQueryAndApply = initQueryAndApply(`xpath(${searchQuery})`); ++ const findMutationSearchNodes = () => { ++ searchQueryAndApply(searchNode => { ++ if (seenMap.has(searchNode)) ++ return false; ++ seenMap.add(searchNode); ++ debugLog("Found node: ", searchNode); ++ if (searchNode.innerHTML) { ++ debugLog("Searching in: ", searchNode.innerHTML); ++ const foundTextArr = searchNode.innerHTML.match(re); ++ if (foundTextArr && foundTextArr.length) { ++ let foundText = ""; ++ ++ foundTextArr[1] ? foundText = foundTextArr[1] : ++ foundText = foundTextArr[0]; ++ debugLog("Matched search query: ", foundText); ++ startHidingMutationObserver(foundText); ++ } ++ } ++ }); ++ }; ++ ++ searchMO = new MutationObserver$3(findMutationSearchNodes); ++ searchMO.observe( ++ document, {characterData: true, childList: true, subtree: true} ++ ); ++ findMutationSearchNodes(); ++ } ++ }; ++ ++ waitUntilEvent(debugLog, mainLogic, waitUntil); ++ } ++ ++ let { ++ parseInt: parseInt$1, ++ setTimeout: setTimeout$1, ++ Error: Error$2, ++ MouseEvent: MouseEvent$2, ++ MutationObserver: MutationObserver$2, ++ WeakSet: WeakSet$2 ++ } = $(window); ++ ++ function simulateEvent(event, selector, delay = "0") { ++ if (!event) ++ throw new Error$2("[simulate-event snippet]: No event type provided."); ++ if (!selector) ++ throw new Error$2("[simulate-event snippet]: No selector provided."); ++ ++ let queryAndApply = initQueryAndApply(selector); ++ let delayInMiliseconds = parseInt$1(delay, 10); ++ let dispatchedNodes = new WeakSet$2(); ++ ++ let observer = new MutationObserver$2(findNodesAndDispatchEvents); ++ observer.observe(document, {childList: true, subtree: true}); ++ findNodesAndDispatchEvents(); ++ ++ function findNodesAndDispatchEvents() { ++ queryAndApply(node => { ++ if (!dispatchedNodes.has(node)) { ++ dispatchedNodes.add(node); ++ setTimeout$1(() => { ++ $(node).dispatchEvent( ++ new MouseEvent$2(event, {bubbles: true, cancelable: true}) ++ ); ++ }, delayInMiliseconds); ++ } ++ }); ++ } ++ } ++ ++ let { ++ parseInt, ++ setTimeout, ++ Error: Error$1, ++ MouseEvent: MouseEvent$1, ++ MutationObserver: MutationObserver$1, ++ WeakSet: WeakSet$1 ++ } = $(window); ++ ++ const VALID_TYPES = ["auxclick", "click", "dblclick", "gotpointercapture", ++ "lostpointercapture", "mouseenter", "mousedown", ++ "mouseleave", "mousemove", "mouseout", "mouseover", ++ "mouseup", "pointerdown", "pointerenter", ++ "pointermove", "pointerover", "pointerout", ++ "pointerup", "pointercancel", "pointerleave"]; ++ ++ function simulateMouseEvent(...selectors) { ++ const debugLog = getDebugger("simulate-mouse-event"); ++ const MAX_ARGS = 7; ++ if (selectors.length < 1) ++ throw new Error$1("[simulate-mouse-event snippet]: No selector provided."); ++ if (selectors.length > MAX_ARGS) { ++ ++ selectors = selectors.slice(0, MAX_ARGS); ++ } ++ function parseArg(theRule) { ++ if (!theRule) ++ return null; ++ ++ const result = { ++ selector: "", ++ continue: false, ++ trigger: false, ++ event: "click", ++ delay: "500", ++ clicked: false, ++ found: false ++ }; ++ const textArr = theRule.split("$"); ++ let options = []; ++ if (textArr.length >= 2) ++ options = textArr[1].toLowerCase().split(","); ++ ++ [result.selector] = textArr; ++ ++ for (const option of options) { ++ if (option === "trigger") { ++ result.trigger = true; ++ } ++ else if (option === "continue") { ++ result.continue = true; ++ } ++ else if (option.startsWith("event")) { ++ const event = option.toLowerCase().split("="); ++ event[1] ? result.event = event[1] : result.event = "click"; ++ } ++ else if (option.startsWith("delay")) { ++ const delay = option.toLowerCase().split("="); ++ delay[1] ? result.delay = delay[1] : result.delay = "500"; ++ } ++ } ++ if (!VALID_TYPES.includes(result.event)) { ++ debugLog(result.event, ++ " might be misspelled, check for typos.\n", ++ "These are the supported events:", ++ VALID_TYPES); ++ } ++ return result; ++ } ++ ++ const parsedArgs = $([]); ++ ++ $(selectors).forEach(rule => { ++ const parsedRule = parseArg(rule); ++ parsedArgs.push(parsedRule); ++ }); ++ ++ function checkIfAllSelectorsFound() { ++ parsedArgs.forEach(arg => { ++ if (!arg.found) { ++ const queryAll = initQueryAll(arg.selector); ++ const elems = queryAll(); ++ if (elems.length > 0) ++ arg.found = true; ++ } ++ }); ++ return parsedArgs.every(arg => arg.found); ++ } ++ ++ function triggerEvent(node, event, delay) { ++ ++ if (!node || !event) ++ return; ++ ++ if (event === "click" && node.click) { ++ node.click(); ++ debugLog( ++ "Clicked on this node:\n", node, "\nwith a delay of", delay, "ms" ++ ); ++ } ++ else { ++ node.dispatchEvent( ++ new MouseEvent$1(event, {bubbles: true, cancelable: true}) ++ ); ++ debugLog( ++ "A", ++ event, ++ "event was dispatched with a delay of", ++ delay, ++ "ms on this node:\n", ++ node ++ ); ++ } ++ } ++ let allFound = false; ++ ++ const [last] = parsedArgs.slice(-1); ++ last.trigger = true; ++ ++ let dispatchedNodes = new WeakSet$1(); ++ ++ let observer = new MutationObserver$1(findNodesAndDispatchEvents); ++ observer.observe(document, {childList: true, subtree: true}); ++ findNodesAndDispatchEvents(); ++ ++ function findNodesAndDispatchEvents() { ++ ++ if (!allFound) ++ allFound = checkIfAllSelectorsFound(); ++ if (allFound) { ++ for (const parsedRule of parsedArgs) { ++ const queryAndApply = initQueryAndApply(parsedRule.selector); ++ const delayInMiliseconds = parseInt(parsedRule.delay, 10); ++ if (parsedRule.trigger) { ++ queryAndApply(node => { ++ if (!dispatchedNodes.has(node)) { ++ dispatchedNodes.add(node); ++ if (parsedRule.continue) { ++ setInterval(() => { ++ triggerEvent(node, parsedRule.event, parsedRule.delay); ++ }, delayInMiliseconds); ++ } ++ else { ++ setTimeout(() => { ++ triggerEvent(node, parsedRule.event, parsedRule.delay); ++ }, delayInMiliseconds); ++ } ++ } ++ }); ++ } ++ } ++ } ++ } ++ } ++ ++ const snippets = { ++ log, ++ race, ++ "debug": setDebug, ++ "hide-if-matches-xpath": hideIfMatchesXPath, ++ "hide-if-matches-computed-xpath": hideIfMatchesComputedXPath, ++ "hide-if-contains": hideIfContains, ++ "hide-if-contains-similar-text": hideIfContainsSimilarText, ++ "hide-if-contains-visible-text": hideIfContainsVisibleText, ++ "hide-if-contains-and-matches-style": hideIfContainsAndMatchesStyle, ++ "hide-if-has-and-matches-style": hideIfHasAndMatchesStyle, ++ "hide-if-labelled-by": hideIfLabelledBy, ++ "hide-if-contains-image": hideIfContainsImage, ++ "simulate-event-poc": simulateEvent, ++ "simulate-mouse-event": simulateMouseEvent ++ }; ++ ++ let {MutationObserver} = $(window); ++ ++ const {ELEMENT_NODE} = Node; ++ ++ function hideIfMatchesXPath3(query, scopeQuery) { ++ let {mark, end} = profile(); ++ ++ function queryNodes() { ++ return fontoxpath.evaluateXPathToNodes(query, document, null, null, { ++ language: fontoxpath.evaluateXPath.XQUERY_3_1_LANGUAGE ++ }); ++ } ++ ++ let debugLog = getDebugger("hide-if-matches-xpath3"); ++ ++ const startHidingMutationObserver = scopeNode => { ++ const seenMap = new WeakSet(); ++ const callback = () => { ++ mark(); ++ ++ const nodes = queryNodes(); ++ for (const node of $(nodes)) { ++ if (seenMap.has(node)) ++ return false; ++ seenMap.add(node); ++ win(); ++ if ($(node).nodeType === ELEMENT_NODE) ++ hideElement(node); ++ else ++ $(node).textContent = ""; ++ debugLog("Matched: ", node, " for selector: ", query); ++ } ++ end(); ++ }; ++ ++ const mo = new MutationObserver(callback); ++ const win = raceWinner( ++ "hide-if-matches-xpath3", ++ () => mo.disconnect() ++ ); ++ mo.observe( ++ scopeNode, {characterData: true, childList: true, subtree: true}); ++ callback(); ++ }; ++ ++ if (scopeQuery) { ++ ++ let count = 0; ++ let scopeMutationObserver; ++ const scopeNodes = queryNodes(); ++ const findMutationScopeNodes = () => { ++ for (const scopeNode of $(scopeNodes)) { ++ ++ startHidingMutationObserver(scopeNode); ++ count++; ++ } ++ if (count > 0) ++ scopeMutationObserver.disconnect(); ++ }; ++ ++ scopeMutationObserver = new MutationObserver(findMutationScopeNodes); ++ scopeMutationObserver.observe( ++ document, {characterData: true, childList: true, subtree: true} ++ ); ++ findMutationScopeNodes(); ++ } ++ else { ++ ++ startHidingMutationObserver(document); ++ } ++ } ++ ++ snippets["hide-if-matches-xpath3"] = hideIfMatchesXPath3; ++ let context; ++ for (const [name, ...args] of filters) { ++ if (snippets.hasOwnProperty(name)) { ++ try { context = snippets[name].apply(context, args); } ++ catch (error) { console.error(error); } ++ } ++ } ++ context = void 0; ++})(e, ...t); ++ ++const callback = (environment, ...filters) => { ++ /*! ++ * This file is part of eyeo's Anti-Circumvention Snippets module (@eyeo/snippets), ++ * Copyright (C) 2006-present eyeo GmbH ++ * ++ * @eyeo/snippets is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 3 as ++ * published by the Free Software Foundation. ++ * ++ * @eyeo/snippets is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with @eyeo/snippets. If not, see . ++ */ ++ const $$1 = Proxy; ++ ++ const {apply: a, bind: b, call: c} = Function; ++ const apply$2 = c.bind(a); ++ const bind = c.bind(b); ++ const call = c.bind(c); ++ ++ const callerHandler = { ++ get(target, name) { ++ return bind(c, target[name]); ++ } ++ }; ++ ++ const caller = target => new $$1(target, callerHandler); ++ ++ const proxy = (source, target) => new $$1(source, { ++ apply: (_, self, args) => apply$2(target, self, args) ++ }); ++ ++ const handler$2 = { ++ get(target, name) { ++ return bind(target[name], target); ++ } ++ }; ++ ++ const bound = target => new $$1(target, handler$2); ++ ++ const { ++ assign: assign$1, ++ defineProperties: defineProperties$1, ++ freeze: freeze$1, ++ getOwnPropertyDescriptor: getOwnPropertyDescriptor$3, ++ getOwnPropertyDescriptors: getOwnPropertyDescriptors$1, ++ getPrototypeOf ++ } = bound(Object); ++ ++ const {hasOwnProperty} = caller({}); ++ ++ const {species} = Symbol; ++ ++ const handler$1 = { ++ get(target, name) { ++ const Native = target[name]; ++ class Secure extends Native {} ++ ++ const proto = getOwnPropertyDescriptors$1(Native.prototype); ++ delete proto.constructor; ++ freeze$1(defineProperties$1(Secure.prototype, proto)); ++ ++ const statics = getOwnPropertyDescriptors$1(Native); ++ delete statics.length; ++ delete statics.prototype; ++ statics[species] = {value: Secure}; ++ return freeze$1(defineProperties$1(Secure, statics)); ++ } ++ }; ++ ++ const secure = target => new $$1(target, handler$1); ++ ++ const libEnvironment = typeof environment !== "undefined" ? environment : ++ {}; ++ ++ if (typeof globalThis === "undefined") ++ window.globalThis = window; ++ ++ const {apply: apply$1, ownKeys} = bound(Reflect); ++ ++ const worldEnvDefined = "world" in libEnvironment; ++ const isIsolatedWorld = worldEnvDefined && libEnvironment.world === "ISOLATED"; ++ const isMainWorld = worldEnvDefined && libEnvironment.world === "MAIN"; ++ const isChrome = typeof chrome === "object" && !!chrome.runtime; ++ const isOtherThanChrome = typeof browser === "object" && !!browser.runtime; ++ const isExtensionContext$2 = !isMainWorld && ++ (isIsolatedWorld || isChrome || isOtherThanChrome); ++ const copyIfExtension = value => isExtensionContext$2 ? ++ value : ++ create(value, getOwnPropertyDescriptors(value)); ++ ++ const { ++ create, ++ defineProperties, ++ defineProperty, ++ freeze, ++ getOwnPropertyDescriptor: getOwnPropertyDescriptor$2, ++ getOwnPropertyDescriptors ++ } = bound(Object); ++ ++ const invokes = bound(globalThis); ++ const classes = isExtensionContext$2 ? globalThis : secure(globalThis); ++ const {Map: Map$8, RegExp: RegExp$1, Set: Set$2, WeakMap: WeakMap$4, WeakSet: WeakSet$3} = classes; ++ ++ const augment = (source, target, method = null) => { ++ const known = ownKeys(target); ++ for (const key of ownKeys(source)) { ++ if (known.includes(key)) ++ continue; ++ ++ const descriptor = getOwnPropertyDescriptor$2(source, key); ++ if (method && "value" in descriptor) { ++ const {value} = descriptor; ++ if (typeof value === "function") ++ descriptor.value = method(value); ++ } ++ defineProperty(target, key, descriptor); ++ } ++ }; ++ ++ const primitive = name => { ++ const Super = classes[name]; ++ class Class extends Super {} ++ const {toString, valueOf} = Super.prototype; ++ defineProperties(Class.prototype, { ++ toString: {value: toString}, ++ valueOf: {value: valueOf} ++ }); ++ const type = name.toLowerCase(); ++ const method = callback => function() { ++ const result = apply$1(callback, this, arguments); ++ return typeof result === type ? new Class(result) : result; ++ }; ++ augment(Super, Class, method); ++ augment(Super.prototype, Class.prototype, method); ++ return Class; ++ }; ++ ++ const variables$3 = freeze({ ++ frozen: new WeakMap$4(), ++ hidden: new WeakSet$3(), ++ iframePropertiesToAbort: { ++ read: new Set$2(), ++ write: new Set$2() ++ }, ++ abortedIframes: new WeakMap$4() ++ }); ++ ++ const startsCapitalized = new RegExp$1("^[A-Z]"); ++ ++ var env = new Proxy(new Map$8([ ++ ++ ["chrome", ( ++ isExtensionContext$2 && ( ++ (isChrome && chrome) || ++ (isOtherThanChrome && browser) ++ ) ++ ) || void 0], ++ ["isExtensionContext", isExtensionContext$2], ++ ["variables", variables$3], ++ ++ ["console", copyIfExtension(console)], ++ ["document", globalThis.document], ++ ["performance", copyIfExtension(performance)], ++ ["JSON", copyIfExtension(JSON)], ++ ["Map", Map$8], ++ ["Math", copyIfExtension(Math)], ++ ["Number", isExtensionContext$2 ? Number : primitive("Number")], ++ ["RegExp", RegExp$1], ++ ["Set", Set$2], ++ ["String", isExtensionContext$2 ? String : primitive("String")], ++ ["WeakMap", WeakMap$4], ++ ["WeakSet", WeakSet$3], ++ ++ ["MouseEvent", MouseEvent] ++ ]), { ++ get(map, key) { ++ if (map.has(key)) ++ return map.get(key); ++ ++ let value = globalThis[key]; ++ if (typeof value === "function") ++ value = (startsCapitalized.test(key) ? classes : invokes)[key]; ++ ++ map.set(key, value); ++ return value; ++ }, ++ has(map, key) { ++ return map.has(key); ++ } ++ }); ++ ++ class WeakValue { ++ has() { return false; } ++ set() {} ++ } ++ ++ const helpers = {WeakSet, WeakMap, WeakValue}; ++ const {apply} = Reflect; ++ ++ function transformOnce (callback) { const {WeakSet, WeakMap, WeakValue} = (this || helpers); ++ const ws = new WeakSet; ++ const wm = new WeakMap; ++ const wv = new WeakValue; ++ return function (any) { ++ if (ws.has(any)) ++ return any; ++ ++ if (wm.has(any)) ++ return wm.get(any); ++ ++ if (wv.has(any)) ++ return wv.get(any); ++ ++ const value = apply(callback, this, arguments); ++ ws.add(value); ++ if (value !== any) ++ (typeof any === 'object' && any ? wm : wv).set(any, value); ++ return value; ++ }; ++ } ++ ++ const {Map: Map$7, WeakMap: WeakMap$3, WeakSet: WeakSet$2, setTimeout} = env; ++ ++ let cleanup = true; ++ let cleanUpCallback = map => { ++ map.clear(); ++ cleanup = !cleanup; ++ }; ++ ++ var transformer = transformOnce.bind({ ++ WeakMap: WeakMap$3, ++ WeakSet: WeakSet$2, ++ ++ WeakValue: class extends Map$7 { ++ set(key, value) { ++ if (cleanup) { ++ cleanup = !cleanup; ++ setTimeout(cleanUpCallback, 0, this); ++ } ++ return super.set(key, value); ++ } ++ } ++ }); ++ ++ const {concat, includes, join, reduce, unshift} = caller([]); ++ ++ const globals = secure(globalThis); ++ ++ const { ++ Map: Map$6, ++ WeakMap: WeakMap$2 ++ } = globals; ++ ++ const map = new Map$6; ++ const descriptors = target => { ++ const chain = []; ++ let current = target; ++ while (current) { ++ if (map.has(current)) ++ unshift(chain, map.get(current)); ++ else { ++ const descriptors = getOwnPropertyDescriptors$1(current); ++ map.set(current, descriptors); ++ unshift(chain, descriptors); ++ } ++ current = getPrototypeOf(current); ++ } ++ unshift(chain, {}); ++ return apply$2(assign$1, null, chain); ++ }; ++ ++ const chain = source => { ++ const target = typeof source === 'function' ? source.prototype : source; ++ const chained = descriptors(target); ++ const handler = { ++ get(target, key) { ++ if (key in chained) { ++ const {value, get} = chained[key]; ++ if (get) ++ return call(get, target); ++ if (typeof value === 'function') ++ return bind(value, target); ++ } ++ return target[key]; ++ }, ++ set(target, key, value) { ++ if (key in chained) { ++ const {set} = chained[key]; ++ if (set) { ++ call(set, target, value); ++ return true; ++ } ++ } ++ target[key] = value; ++ return true; ++ } ++ }; ++ return target => new $$1(target, handler); ++ }; ++ ++ const { ++ isExtensionContext: isExtensionContext$1, ++ Array: Array$2, ++ Number: Number$1, ++ String: String$1, ++ Object: Object$9 ++ } = env; ++ ++ const {isArray} = Array$2; ++ const {getOwnPropertyDescriptor: getOwnPropertyDescriptor$1, setPrototypeOf: setPrototypeOf$1} = Object$9; ++ ++ const {toString: toString$1} = Object$9.prototype; ++ const {slice} = String$1.prototype; ++ const getBrand = value => call(slice, call(toString$1, value), 8, -1); ++ ++ const {get: nodeType} = getOwnPropertyDescriptor$1(Node.prototype, "nodeType"); ++ ++ const chained = isExtensionContext$1 ? {} : { ++ Attr: chain(Attr), ++ CanvasRenderingContext2D: chain(CanvasRenderingContext2D), ++ CSSStyleDeclaration: chain(CSSStyleDeclaration), ++ Document: chain(Document), ++ Element: chain(Element), ++ HTMLCanvasElement: chain(HTMLCanvasElement), ++ HTMLElement: chain(HTMLElement), ++ HTMLImageElement: chain(HTMLImageElement), ++ HTMLScriptElement: chain(HTMLScriptElement), ++ MutationRecord: chain(MutationRecord), ++ Node: chain(Node), ++ ShadowRoot: chain(ShadowRoot), ++ ++ get CSS2Properties() { ++ return chained.CSSStyleDeclaration; ++ } ++ }; ++ ++ const upgrade = (value, hint) => { ++ if (hint !== "Element" && hint in chained) ++ return chained[hint](value); ++ ++ if (isArray(value)) ++ return setPrototypeOf$1(value, Array$2.prototype); ++ ++ const brand = getBrand(value); ++ if (brand in chained) ++ return chained[brand](value); ++ ++ if (brand in env) ++ return setPrototypeOf$1(value, env[brand].prototype); ++ ++ if ("nodeType" in value) { ++ switch (call(nodeType, value)) { ++ case 1: ++ if (!(hint in chained)) ++ throw new Error("unknown hint " + hint); ++ return chained[hint](value); ++ case 2: ++ return chained.Attr(value); ++ case 3: ++ return chained.Node(value); ++ case 9: ++ return chained.Document(value); ++ } ++ } ++ ++ throw new Error("unknown brand " + brand); ++ }; ++ ++ var $ = isExtensionContext$1 ? ++ value => (value === window || value === globalThis ? env : value) : ++ transformer((value, hint = "Element") => { ++ if (value === window || value === globalThis) ++ return env; ++ ++ switch (typeof value) { ++ case "object": ++ return value && upgrade(value, hint); ++ ++ case "string": ++ return new String$1(value); ++ ++ case "number": ++ return new Number$1(value); ++ ++ default: ++ throw new Error("unsupported value"); ++ } ++ }); ++ ++ const handler = { ++ get(target, name) { ++ const context = target; ++ while (!hasOwnProperty(target, name)) ++ target = getPrototypeOf(target); ++ const {get, set} = getOwnPropertyDescriptor$3(target, name); ++ return function () { ++ return arguments.length ? ++ apply$2(set, context, arguments) : ++ call(get, context); ++ }; ++ } ++ }; ++ ++ const accessor = target => new $$1(target, handler); ++ ++ let debugging = false; ++ ++ function debug() { ++ return debugging; ++ } ++ ++ function setDebug() { ++ debugging = true; ++ } ++ ++ const {console: console$3} = $(window); ++ ++ const noop = () => {}; ++ ++ function log(...args) { ++ if (debug()) ++ $(args).unshift("%c DEBUG", "font-weight: bold"); ++ ++ console$3.log(...args); ++ } ++ ++ function getDebugger(name) { ++ return bind(debug() ? log : noop, null, name); ++ } ++ ++ let {Math: Math$1, RegExp} = $(window); ++ ++ function regexEscape(string) { ++ return $(string).replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); ++ } ++ ++ function toRegExp(pattern) { ++ let {length} = pattern; ++ ++ if (length > 1 && pattern[0] === "/") { ++ let isCaseSensitive = pattern[length - 1] === "/"; ++ ++ if (isCaseSensitive || (length > 2 && $(pattern).endsWith("/i"))) { ++ let args = [$(pattern).slice(1, isCaseSensitive ? -1 : -2)]; ++ if (!isCaseSensitive) ++ args.push("i"); ++ ++ return new RegExp(...args); ++ } ++ } ++ ++ return new RegExp(regexEscape(pattern)); ++ } ++ ++ function randomId() { ++ ++ return $(Math$1.floor(Math$1.random() * 2116316160 + 60466176)).toString(36); ++ } ++ ++ let { ++ parseFloat, ++ variables: variables$2, ++ Array: Array$1, ++ Error: Error$7, ++ Map: Map$5, ++ Object: Object$8, ++ ReferenceError: ReferenceError$2, ++ Set: Set$1, ++ WeakMap: WeakMap$1 ++ } = $(window); ++ ++ let {onerror} = accessor(window); ++ ++ let NodeProto$1 = Node.prototype; ++ let ElementProto$2 = Element.prototype; ++ ++ let propertyAccessors = null; ++ ++ function wrapPropertyAccess(object, property, descriptor, ++ setConfigurable = true) { ++ let $property = $(property); ++ let dotIndex = $property.indexOf("."); ++ if (dotIndex == -1) { ++ ++ let currentDescriptor = Object$8.getOwnPropertyDescriptor(object, property); ++ if (currentDescriptor && !currentDescriptor.configurable) ++ return; ++ ++ let newDescriptor = Object$8.assign({}, descriptor, { ++ configurable: setConfigurable ++ }); ++ ++ if (!currentDescriptor && !newDescriptor.get && newDescriptor.set) { ++ let propertyValue = object[property]; ++ newDescriptor.get = () => propertyValue; ++ } ++ ++ Object$8.defineProperty(object, property, newDescriptor); ++ return; ++ } ++ ++ let name = $property.slice(0, dotIndex).toString(); ++ property = $property.slice(dotIndex + 1).toString(); ++ let value = object[name]; ++ if (value && (typeof value == "object" || typeof value == "function")) ++ wrapPropertyAccess(value, property, descriptor); ++ ++ let currentDescriptor = Object$8.getOwnPropertyDescriptor(object, name); ++ if (currentDescriptor && !currentDescriptor.configurable) ++ return; ++ ++ if (!propertyAccessors) ++ propertyAccessors = new WeakMap$1(); ++ ++ if (!propertyAccessors.has(object)) ++ propertyAccessors.set(object, new Map$5()); ++ ++ let properties = propertyAccessors.get(object); ++ if (properties.has(name)) { ++ properties.get(name).set(property, descriptor); ++ return; ++ } ++ ++ let toBeWrapped = new Map$5([[property, descriptor]]); ++ properties.set(name, toBeWrapped); ++ Object$8.defineProperty(object, name, { ++ get: () => value, ++ set(newValue) { ++ value = newValue; ++ if (value && (typeof value == "object" || typeof value == "function")) { ++ ++ for (let [prop, desc] of toBeWrapped) ++ wrapPropertyAccess(value, prop, desc); ++ } ++ }, ++ configurable: setConfigurable ++ }); ++ } ++ ++ function overrideOnError(magic) { ++ let prev = onerror(); ++ onerror((...args) => { ++ let message = args.length && args[0]; ++ if (typeof message == "string" && $(message).includes(magic)) ++ return true; ++ if (typeof prev == "function") ++ return apply$2(prev, this, args); ++ }); ++ } ++ ++ function abortOnRead(loggingPrefix, context, property, ++ setConfigurable = true) { ++ let debugLog = getDebugger(loggingPrefix); ++ ++ if (!property) { ++ debugLog("no property to abort on read"); ++ return; ++ } ++ ++ let rid = randomId(); ++ ++ function abort() { ++ debugLog(`${property} access aborted`); ++ throw new ReferenceError$2(rid); ++ } ++ ++ debugLog(`aborting on ${property} access`); ++ ++ wrapPropertyAccess(context, ++ property, ++ {get: abort, set() {}}, ++ setConfigurable); ++ overrideOnError(rid); ++ } ++ ++ function abortOnWrite(loggingPrefix, context, property, ++ setConfigurable = true) { ++ let debugLog = getDebugger(loggingPrefix); ++ ++ if (!property) { ++ debugLog("no property to abort on write"); ++ return; ++ } ++ ++ let rid = randomId(); ++ ++ function abort() { ++ debugLog(`setting ${property} aborted`); ++ throw new ReferenceError$2(rid); ++ } ++ ++ debugLog(`aborting when setting ${property}`); ++ ++ wrapPropertyAccess(context, property, {set: abort}, setConfigurable); ++ overrideOnError(rid); ++ } ++ ++ function abortOnIframe( ++ properties, ++ abortRead = false, ++ abortWrite = false ++ ) { ++ let abortedIframes = variables$2.abortedIframes; ++ let iframePropertiesToAbort = variables$2.iframePropertiesToAbort; ++ ++ for (let frame of Array$1.from(window.frames)) { ++ if (abortedIframes.has(frame)) { ++ for (let property of properties) { ++ if (abortRead) ++ abortedIframes.get(frame).read.add(property); ++ if (abortWrite) ++ abortedIframes.get(frame).write.add(property); ++ } ++ } ++ } ++ ++ for (let property of properties) { ++ if (abortRead) ++ iframePropertiesToAbort.read.add(property); ++ if (abortWrite) ++ iframePropertiesToAbort.write.add(property); ++ } ++ ++ queryAndProxyIframe(); ++ if (!abortedIframes.has(document)) { ++ abortedIframes.set(document, true); ++ addHooksOnDomAdditions(queryAndProxyIframe); ++ } ++ ++ function queryAndProxyIframe() { ++ for (let frame of Array$1.from(window.frames)) { ++ ++ if (!abortedIframes.has(frame)) { ++ abortedIframes.set(frame, { ++ read: new Set$1(iframePropertiesToAbort.read), ++ write: new Set$1(iframePropertiesToAbort.write) ++ }); ++ } ++ ++ let readProps = abortedIframes.get(frame).read; ++ if (readProps.size > 0) { ++ let props = Array$1.from(readProps); ++ readProps.clear(); ++ for (let property of props) ++ abortOnRead("abort-on-iframe-property-read", frame, property); ++ } ++ ++ let writeProps = abortedIframes.get(frame).write; ++ if (writeProps.size > 0) { ++ let props = Array$1.from(writeProps); ++ writeProps.clear(); ++ for (let property of props) ++ abortOnWrite("abort-on-iframe-property-write", frame, property); ++ } ++ } ++ } ++ } ++ ++ function addHooksOnDomAdditions(endCallback) { ++ let descriptor; ++ ++ wrapAccess(NodeProto$1, ["appendChild", "insertBefore", "replaceChild"]); ++ wrapAccess(ElementProto$2, ["append", "prepend", "replaceWith", "after", ++ "before", "insertAdjacentElement", ++ "insertAdjacentHTML"]); ++ ++ descriptor = getInnerHTMLDescriptor(ElementProto$2, "innerHTML"); ++ wrapPropertyAccess(ElementProto$2, "innerHTML", descriptor); ++ ++ descriptor = getInnerHTMLDescriptor(ElementProto$2, "outerHTML"); ++ wrapPropertyAccess(ElementProto$2, "outerHTML", descriptor); ++ ++ function wrapAccess(prototype, names) { ++ for (let name of names) { ++ let desc = getAppendChildDescriptor(prototype, name); ++ wrapPropertyAccess(prototype, name, desc); ++ } ++ } ++ ++ function getAppendChildDescriptor(target, property) { ++ let currentValue = target[property]; ++ return { ++ get() { ++ return function(...args) { ++ let result; ++ result = apply$2(currentValue, this, args); ++ endCallback && endCallback(); ++ return result; ++ }; ++ } ++ }; ++ } ++ ++ function getInnerHTMLDescriptor(target, property) { ++ let desc = Object$8.getOwnPropertyDescriptor(target, property); ++ let {set: prevSetter} = desc || {}; ++ return { ++ set(val) { ++ let result; ++ result = call(prevSetter, this, val); ++ endCallback && endCallback(); ++ return result; ++ } ++ }; ++ } ++ } ++ ++ let {Object: NativeObject} = window; ++ function findOwner(root, path) { ++ if (!(root instanceof NativeObject)) ++ return; ++ ++ let object = root; ++ let chain = $(path).split("."); ++ ++ if (chain.length === 0) ++ return; ++ ++ for (let i = 0; i < chain.length - 1; i++) { ++ let prop = chain[i]; ++ ++ if (!hasOwnProperty(object, prop)) ++ return; ++ ++ object = object[prop]; ++ ++ if (!(object instanceof NativeObject)) ++ return; ++ } ++ ++ let prop = chain[chain.length - 1]; ++ ++ if (hasOwnProperty(object, prop)) ++ return [object, prop]; ++ } ++ ++ const decimals = $(/^\d+$/); ++ ++ function overrideValue(value) { ++ switch (value) { ++ case "false": ++ return false; ++ case "true": ++ return true; ++ case "null": ++ return null; ++ case "noopFunc": ++ return () => {}; ++ case "trueFunc": ++ return () => true; ++ case "falseFunc": ++ return () => false; ++ case "emptyArray": ++ return []; ++ case "emptyObj": ++ return {}; ++ case "undefined": ++ return void 0; ++ case "": ++ return value; ++ default: ++ if (decimals.test(value)) ++ return parseFloat(value); ++ ++ throw new Error$7("[override-property-read snippet]: " + ++ `Value "${value}" is not valid.`); ++ } ++ } ++ ++ let {HTMLScriptElement: HTMLScriptElement$1, Object: Object$7, ReferenceError: ReferenceError$1} = $(window); ++ let Script = Object$7.getPrototypeOf(HTMLScriptElement$1); ++ ++ function abortCurrentInlineScript(api, search = null) { ++ const debugLog = getDebugger("abort-current-inline-script"); ++ const re = search ? toRegExp(search) : null; ++ ++ const rid = randomId(); ++ const us = $(document).currentScript; ++ ++ let object = window; ++ const path = $(api).split("."); ++ const name = $(path).pop(); ++ ++ for (let node of $(path)) { ++ object = object[node]; ++ if ( ++ !object || !(typeof object == "object" || typeof object == "function")) { ++ debugLog(path, " is not found"); ++ return; ++ } ++ } ++ ++ const {get: prevGetter, set: prevSetter} = ++ Object$7.getOwnPropertyDescriptor(object, name) || {}; ++ ++ let currentValue = object[name]; ++ if (typeof currentValue === "undefined") ++ debugLog("The property", name, "doesn't exist yet. Check typos."); ++ ++ const abort = () => { ++ const element = $(document).currentScript; ++ if (element instanceof Script && ++ $(element, "HTMLScriptElement").src == "" && ++ element != us && ++ (!re || re.test($(element).textContent))) { ++ debugLog(path, " is aborted \n", element); ++ throw new ReferenceError$1(rid); ++ } ++ }; ++ ++ const descriptor = { ++ get() { ++ abort(); ++ ++ if (prevGetter) ++ return call(prevGetter, this); ++ ++ return currentValue; ++ }, ++ set(value) { ++ abort(); ++ ++ if (prevSetter) ++ call(prevSetter, this, value); ++ else ++ currentValue = value; ++ } ++ }; ++ ++ wrapPropertyAccess(object, name, descriptor); ++ ++ overrideOnError(rid); ++ } ++ ++ function abortOnIframePropertyRead(...properties) { ++ abortOnIframe(properties, true, false); ++ } ++ ++ function abortOnIframePropertyWrite(...properties) { ++ abortOnIframe(properties, false, true); ++ } ++ ++ function abortOnPropertyRead(property, setConfigurable) { ++ const configurableFlag = !(setConfigurable === "false"); ++ abortOnRead("abort-on-property-read", window, property, configurableFlag); ++ } ++ ++ function abortOnPropertyWrite(property, setConfigurable) { ++ const configurableFlag = !(setConfigurable === "false"); ++ abortOnWrite("abort-on-property-write", window, property, configurableFlag); ++ } ++ ++ let {Error: Error$6} = $(window); ++ let {cookie: documentCookies} = accessor(document); ++ ++ function cookieRemover(cookie) { ++ if (!cookie) ++ throw new Error$6("[cookie-remover snippet]: No cookie to remove."); ++ ++ let debugLog = getDebugger("cookie-remover"); ++ let re = toRegExp(cookie); ++ ++ if (!$(/^http|^about/).test(location.protocol)) { ++ debugLog("Snippet only works for http or https and about."); ++ return; ++ } ++ ++ debugLog("Parsing cookies for matches"); ++ ++ for (const pair of $(getCookieMatches())) { ++ let $hostname = $(location.hostname); ++ let name = $(pair).split("=")[0]; ++ let expires = "expires=Thu, 01 Jan 1970 00:00:00 GMT"; ++ let path = "path=/"; ++ let domain = "domain=" + $hostname.slice($hostname.indexOf(".") + 1); ++ ++ documentCookies(`${$(name).trim()}=;${expires};${path};${domain}`); ++ ++ debugLog(`Set expiration date on ${name}`); ++ } ++ ++ function getCookieMatches() { ++ const arr = $(documentCookies()).split(";"); ++ return arr.filter(str => re.test($(str).split("=")[0])); ++ } ++ } ++ ++ let { ++ document: document$1, ++ getComputedStyle, ++ isExtensionContext, ++ variables: variables$1, ++ Array, ++ MutationObserver: MutationObserver$2, ++ Object: Object$6, ++ XPathEvaluator, ++ XPathExpression, ++ XPathResult ++ } = $(window); ++ ++ let {querySelectorAll} = document$1; ++ let $$ = querySelectorAll && bind(querySelectorAll, document$1); ++ ++ const {assign, setPrototypeOf} = Object$6; ++ ++ class $XPathExpression extends XPathExpression { ++ evaluate(...args) { ++ return setPrototypeOf( ++ apply$2(super.evaluate, this, args), ++ XPathResult.prototype ++ ); ++ } ++ } ++ ++ class $XPathEvaluator extends XPathEvaluator { ++ createExpression(...args) { ++ return setPrototypeOf( ++ apply$2(super.createExpression, this, args), ++ $XPathExpression.prototype ++ ); ++ } ++ } ++ ++ function hideElement(element) { ++ if (variables$1.hidden.has(element)) ++ return; ++ ++ notifyElementHidden(element); ++ ++ variables$1.hidden.add(element); ++ ++ let {style} = $(element); ++ let $style = $(style, "CSSStyleDeclaration"); ++ let properties = $([]); ++ let {debugCSSProperties} = libEnvironment; ++ ++ for (let [key, value] of (debugCSSProperties || [["display", "none"]])) { ++ $style.setProperty(key, value, "important"); ++ properties.push([key, $style.getPropertyValue(key)]); ++ } ++ ++ new MutationObserver$2(() => { ++ for (let [key, value] of properties) { ++ let propertyValue = $style.getPropertyValue(key); ++ let propertyPriority = $style.getPropertyPriority(key); ++ if (propertyValue != value || propertyPriority != "important") ++ $style.setProperty(key, value, "important"); ++ } ++ }).observe(element, {attributes: true, ++ attributeFilter: ["style"]}); ++ } ++ ++ function notifyElementHidden(element) { ++ if (isExtensionContext && typeof checkElement === "function") ++ checkElement(element); ++ } ++ ++ function initQueryAndApply(selector) { ++ let $selector = selector; ++ if ($selector.startsWith("xpath(") && ++ $selector.endsWith(")")) { ++ let xpathQuery = $selector.slice(6, -1); ++ let evaluator = new $XPathEvaluator(); ++ let expression = evaluator.createExpression(xpathQuery, null); ++ ++ let flag = XPathResult.ORDERED_NODE_SNAPSHOT_TYPE; ++ ++ return cb => { ++ if (!cb) ++ return; ++ let result = expression.evaluate(document$1, flag, null); ++ let {snapshotLength} = result; ++ for (let i = 0; i < snapshotLength; i++) ++ cb(result.snapshotItem(i)); ++ }; ++ } ++ return cb => $$(selector).forEach(cb); ++ } ++ ++ function initQueryAll(selector) { ++ let $selector = selector; ++ if ($selector.startsWith("xpath(") && ++ $selector.endsWith(")")) { ++ let queryAndApply = initQueryAndApply(selector); ++ return () => { ++ let elements = $([]); ++ queryAndApply(e => elements.push(e)); ++ return elements; ++ }; ++ } ++ return () => Array.from($$(selector)); ++ } ++ ++ let {ELEMENT_NODE, TEXT_NODE, prototype: NodeProto} = Node; ++ let {prototype: ElementProto$1} = Element; ++ let {prototype: HTMLElementProto} = HTMLElement; ++ ++ let { ++ console: console$2, ++ variables, ++ DOMParser, ++ Error: Error$5, ++ MutationObserver: MutationObserver$1, ++ Object: Object$5, ++ ReferenceError ++ } = $(window); ++ ++ let {getOwnPropertyDescriptor} = Object$5; ++ ++ function freezeElement(selector, options = "", ...exceptions) { ++ let observer; ++ let subtree = false; ++ let shouldAbort = false; ++ let exceptionSelectors = $(exceptions).filter(e => !isRegex(e)); ++ let regexExceptions = $(exceptions).filter(e => isRegex(e)).map(toRegExp); ++ let rid = randomId(); ++ let targetNodes; ++ let queryAll = initQueryAll(selector); ++ ++ checkOptions(); ++ let data = { ++ selector, ++ shouldAbort, ++ rid, ++ exceptionSelectors, ++ regexExceptions, ++ changeId: 0 ++ }; ++ if (!variables.frozen.has(document)) { ++ variables.frozen.set(document, true); ++ proxyNativeProperties(); ++ } ++ observer = new MutationObserver$1(searchAndAttach); ++ observer.observe(document, {childList: true, subtree: true}); ++ searchAndAttach(); ++ ++ function isRegex(s) { ++ return s.length >= 2 && s[0] == "/" && s[s.length - 1] == "/"; ++ } ++ ++ function checkOptions() { ++ let optionsChunks = $(options).split("+"); ++ if (optionsChunks.length === 1 && optionsChunks[0] === "") ++ optionsChunks = []; ++ for (let chunk of optionsChunks) { ++ switch (chunk) { ++ case "subtree": ++ subtree = true; ++ break; ++ case "abort": ++ shouldAbort = true; ++ break; ++ default: ++ throw new Error$5("[freeze] Unknown option passed to the snippet." + ++ " [selector]: " + selector + ++ " [option]: " + chunk); ++ } ++ } ++ } ++ ++ function proxyNativeProperties() { ++ let descriptor; ++ ++ descriptor = getAppendChildDescriptor( ++ NodeProto, "appendChild", isFrozen, getSnippetData ++ ); ++ wrapPropertyAccess(NodeProto, "appendChild", descriptor); ++ ++ descriptor = getAppendChildDescriptor( ++ NodeProto, "insertBefore", isFrozen, getSnippetData ++ ); ++ wrapPropertyAccess(NodeProto, "insertBefore", descriptor); ++ ++ descriptor = getAppendChildDescriptor( ++ NodeProto, "replaceChild", isFrozen, getSnippetData ++ ); ++ wrapPropertyAccess(NodeProto, "replaceChild", descriptor); ++ ++ descriptor = getAppendDescriptor( ++ ElementProto$1, "append", isFrozen, getSnippetData ++ ); ++ wrapPropertyAccess(ElementProto$1, "append", descriptor); ++ ++ descriptor = getAppendDescriptor( ++ ElementProto$1, "prepend", isFrozen, getSnippetData ++ ); ++ wrapPropertyAccess(ElementProto$1, "prepend", descriptor); ++ ++ descriptor = getAppendDescriptor( ++ ElementProto$1, ++ "replaceWith", ++ isFrozenOrHasFrozenParent, ++ getSnippetDataFromNodeOrParent ++ ); ++ wrapPropertyAccess(ElementProto$1, "replaceWith", descriptor); ++ ++ descriptor = getAppendDescriptor( ++ ElementProto$1, ++ "after", ++ isFrozenOrHasFrozenParent, ++ getSnippetDataFromNodeOrParent ++ ); ++ wrapPropertyAccess(ElementProto$1, "after", descriptor); ++ ++ descriptor = getAppendDescriptor( ++ ElementProto$1, ++ "before", ++ isFrozenOrHasFrozenParent, ++ getSnippetDataFromNodeOrParent ++ ); ++ wrapPropertyAccess(ElementProto$1, "before", descriptor); ++ ++ descriptor = getInsertAdjacentDescriptor( ++ ElementProto$1, ++ "insertAdjacentElement", ++ isFrozenAndInsideTarget, ++ getSnippetDataBasedOnTarget ++ ); ++ wrapPropertyAccess(ElementProto$1, "insertAdjacentElement", descriptor); ++ ++ descriptor = getInsertAdjacentDescriptor( ++ ElementProto$1, ++ "insertAdjacentHTML", ++ isFrozenAndInsideTarget, ++ getSnippetDataBasedOnTarget ++ ); ++ wrapPropertyAccess(ElementProto$1, "insertAdjacentHTML", descriptor); ++ ++ descriptor = getInsertAdjacentDescriptor( ++ ElementProto$1, ++ "insertAdjacentText", ++ isFrozenAndInsideTarget, ++ getSnippetDataBasedOnTarget ++ ); ++ wrapPropertyAccess(ElementProto$1, "insertAdjacentText", descriptor); ++ ++ descriptor = getInnerHTMLDescriptor( ++ ElementProto$1, "innerHTML", isFrozen, getSnippetData ++ ); ++ wrapPropertyAccess(ElementProto$1, "innerHTML", descriptor); ++ ++ descriptor = getInnerHTMLDescriptor( ++ ElementProto$1, ++ "outerHTML", ++ isFrozenOrHasFrozenParent, ++ getSnippetDataFromNodeOrParent ++ ); ++ wrapPropertyAccess(ElementProto$1, "outerHTML", descriptor); ++ ++ descriptor = getTextContentDescriptor( ++ NodeProto, "textContent", isFrozen, getSnippetData ++ ); ++ wrapPropertyAccess(NodeProto, "textContent", descriptor); ++ ++ descriptor = getTextContentDescriptor( ++ HTMLElementProto, "innerText", isFrozen, getSnippetData ++ ); ++ wrapPropertyAccess(HTMLElementProto, "innerText", descriptor); ++ ++ descriptor = getTextContentDescriptor( ++ NodeProto, "nodeValue", isFrozen, getSnippetData ++ ); ++ wrapPropertyAccess(NodeProto, "nodeValue", descriptor); ++ ++ function isFrozen(node) { ++ return node && variables.frozen.has(node); ++ } ++ ++ function isFrozenOrHasFrozenParent(node) { ++ try { ++ return node && ++ (variables.frozen.has(node) || ++ variables.frozen.has($(node).parentNode)); ++ } ++ catch (error) { ++ return false; ++ } ++ } ++ ++ function isFrozenAndInsideTarget(node, isInsideTarget) { ++ try { ++ return node && ++ (variables.frozen.has(node) && isInsideTarget || ++ variables.frozen.has($(node).parentNode) && ++ !isInsideTarget); ++ } ++ catch (error) { ++ return false; ++ } ++ } ++ ++ function getSnippetData(node) { ++ return variables.frozen.get(node); ++ } ++ ++ function getSnippetDataFromNodeOrParent(node) { ++ try { ++ if (variables.frozen.has(node)) ++ return variables.frozen.get(node); ++ let parent = $(node).parentNode; ++ return variables.frozen.get(parent); ++ } ++ catch (error) {} ++ } ++ ++ function getSnippetDataBasedOnTarget(node, isInsideTarget) { ++ try { ++ if (variables.frozen.has(node) && isInsideTarget) ++ return variables.frozen.get(node); ++ let parent = $(node).parentNode; ++ return variables.frozen.get(parent); ++ } ++ catch (error) {} ++ } ++ } ++ ++ function searchAndAttach() { ++ targetNodes = queryAll(); ++ markNodes(targetNodes, false); ++ } ++ ++ function markNodes(nodes, isChild = true) { ++ for (let node of nodes) { ++ if (!variables.frozen.has(node)) { ++ variables.frozen.set(node, data); ++ if (!isChild && subtree) { ++ new MutationObserver$1(mutationsList => { ++ for (let mutation of $(mutationsList)) ++ markNodes($(mutation, "MutationRecord").addedNodes); ++ }).observe(node, {childList: true, subtree: true}); ++ } ++ if (subtree && $(node).nodeType === ELEMENT_NODE) ++ markNodes($(node).childNodes); ++ } ++ } ++ } ++ ++ function logPrefixed(id, ...args) { ++ log(`[freeze][${id}] `, ...args); ++ } ++ ++ function logChange(nodeOrDOMString, target, property, snippetData) { ++ let targetSelector = snippetData.selector; ++ let chgId = snippetData.changeId; ++ let isDOMString = typeof nodeOrDOMString == "string"; ++ let action = snippetData.shouldAbort ? "aborting" : "watching"; ++ console$2.groupCollapsed(`[freeze][${chgId}] ${action}: ${targetSelector}`); ++ switch (property) { ++ case "appendChild": ++ case "append": ++ case "prepend": ++ case "insertBefore": ++ case "replaceChild": ++ case "insertAdjacentElement": ++ case "insertAdjacentHTML": ++ case "insertAdjacentText": ++ case "innerHTML": ++ case "outerHTML": ++ logPrefixed(chgId, ++ isDOMString ? "text: " : "node: ", ++ nodeOrDOMString); ++ logPrefixed(chgId, "added to node: ", target); ++ break; ++ case "replaceWith": ++ case "after": ++ case "before": ++ logPrefixed(chgId, ++ isDOMString ? "text: " : "node: ", ++ nodeOrDOMString); ++ logPrefixed(chgId, "added to node: ", $(target).parentNode); ++ break; ++ case "textContent": ++ case "innerText": ++ case "nodeValue": ++ logPrefixed(chgId, "content of node: ", target); ++ logPrefixed(chgId, "changed to: ", nodeOrDOMString); ++ break; ++ } ++ logPrefixed(chgId, `using the function "${property}"`); ++ console$2.groupEnd(); ++ snippetData.changeId++; ++ } ++ ++ function isExceptionNode(element, expSelectors) { ++ if (expSelectors) { ++ let $element = $(element); ++ for (let exception of expSelectors) { ++ if ($element.matches(exception)) ++ return true; ++ } ++ } ++ return false; ++ } ++ ++ function isExceptionText(string, regExceptions) { ++ if (regExceptions) { ++ for (let exception of regExceptions) { ++ if (exception.test(string)) ++ return true; ++ } ++ } ++ return false; ++ } ++ ++ function abort(id) { ++ throw new ReferenceError(id); ++ } ++ ++ function checkHTML(htmlText, parent, property, snippetData) { ++ let domparser = new DOMParser(); ++ let {body} = $(domparser.parseFromString(htmlText, "text/html")); ++ let nodes = $(body).childNodes; ++ let accepted = checkMultiple(nodes, parent, property, snippetData); ++ let content = $(accepted).map(node => { ++ switch ($(node).nodeType) { ++ case ELEMENT_NODE: ++ return $(node).outerHTML; ++ case TEXT_NODE: ++ return $(node).textContent; ++ default: ++ return ""; ++ } ++ }); ++ return content.join(""); ++ } ++ ++ function checkMultiple(nodesOrDOMStrings, parent, property, snippetData) { ++ let accepted = $([]); ++ for (let nodeOrDOMString of nodesOrDOMStrings) { ++ if (checkShouldInsert(nodeOrDOMString, parent, property, snippetData)) ++ accepted.push(nodeOrDOMString); ++ } ++ return accepted; ++ } ++ ++ function checkShouldInsert(nodeOrDOMString, parent, property, snippetData) { ++ let aborting = snippetData.shouldAbort; ++ let regExceptions = snippetData.regexExceptions; ++ let expSelectors = snippetData.exceptionSelectors; ++ let id = snippetData.rid; ++ if (typeof nodeOrDOMString == "string") { ++ let domString = nodeOrDOMString; ++ if (isExceptionText(domString, regExceptions)) ++ return true; ++ if (debug()) ++ logChange(domString, parent, property, snippetData); ++ if (aborting) ++ abort(id); ++ return debug(); ++ } ++ ++ let node = nodeOrDOMString; ++ switch ($(node).nodeType) { ++ case ELEMENT_NODE: ++ if (isExceptionNode(node, expSelectors)) ++ return true; ++ if (aborting) { ++ if (debug()) ++ logChange(node, parent, property, snippetData); ++ abort(id); ++ } ++ if (debug()) { ++ hideElement(node); ++ logChange(node, parent, property, snippetData); ++ return true; ++ } ++ return false; ++ case TEXT_NODE: ++ if (isExceptionText($(node).textContent, regExceptions)) ++ return true; ++ if (debug()) ++ logChange(node, parent, property, snippetData); ++ if (aborting) ++ abort(id); ++ return false; ++ default: ++ return true; ++ } ++ } ++ ++ function getAppendChildDescriptor(target, property, shouldValidate, ++ getSnippetData) { ++ let desc = getOwnPropertyDescriptor(target, property) || {}; ++ let origin = desc.get && call(desc.get, target) || desc.value; ++ if (!origin) ++ return; ++ ++ return { ++ get() { ++ return function(...args) { ++ if (shouldValidate(this)) { ++ let snippetData = getSnippetData(this); ++ if (snippetData) { ++ let incomingNode = args[0]; ++ if (!checkShouldInsert(incomingNode, this, property, snippetData)) ++ return incomingNode; ++ } ++ } ++ return apply$2(origin, this, args); ++ }; ++ } ++ }; ++ } ++ ++ function getAppendDescriptor( ++ target, property, shouldValidate, getSnippetData ++ ) { ++ let desc = getOwnPropertyDescriptor(target, property) || {}; ++ let origin = desc.get && call(desc.get, target) || desc.value; ++ if (!origin) ++ return; ++ return { ++ get() { ++ return function(...nodesOrDOMStrings) { ++ if (!shouldValidate(this)) ++ return apply$2(origin, this, nodesOrDOMStrings); ++ ++ let snippetData = getSnippetData(this); ++ if (!snippetData) ++ return apply$2(origin, this, nodesOrDOMStrings); ++ ++ let accepted = checkMultiple( ++ nodesOrDOMStrings, this, property, snippetData ++ ); ++ if (accepted.length > 0) ++ return apply$2(origin, this, accepted); ++ }; ++ } ++ }; ++ } ++ ++ function getInsertAdjacentDescriptor( ++ target, property, shouldValidate, getSnippetData ++ ) { ++ let desc = getOwnPropertyDescriptor(target, property) || {}; ++ let origin = desc.get && call(desc.get, target) || desc.value; ++ if (!origin) ++ return; ++ ++ return { ++ get() { ++ return function(...args) { ++ let [position, value] = args; ++ let isInsideTarget = ++ position === "afterbegin" || position === "beforeend"; ++ if (shouldValidate(this, isInsideTarget)) { ++ let snippetData = getSnippetData(this, isInsideTarget); ++ if (snippetData) { ++ let parent = isInsideTarget ? ++ this : ++ $(this).parentNode; ++ let finalValue; ++ switch (property) { ++ case "insertAdjacentElement": ++ if (!checkShouldInsert(value, parent, property, snippetData)) ++ return value; ++ break; ++ ++ case "insertAdjacentHTML": ++ finalValue = checkHTML(value, parent, property, snippetData); ++ if (finalValue) ++ return call(origin, this, position, finalValue); ++ ++ return; ++ ++ case "insertAdjacentText": ++ if (!checkShouldInsert(value, parent, property, snippetData)) ++ return; ++ break; ++ } ++ } ++ } ++ return apply$2(origin, this, args); ++ }; ++ } ++ }; ++ } ++ ++ function getInnerHTMLDescriptor( ++ target, property, shouldValidate, getSnippetData ++ ) { ++ let desc = getOwnPropertyDescriptor(target, property) || {}; ++ let {set: prevSetter} = desc; ++ if (!prevSetter) ++ return; ++ ++ return { ++ set(htmlText) { ++ if (!shouldValidate(this)) ++ return call(prevSetter, this, htmlText); ++ ++ let snippetData = getSnippetData(this); ++ if (!snippetData) ++ return call(prevSetter, this, htmlText); ++ let finalValue = checkHTML(htmlText, this, property, snippetData); ++ if (finalValue) ++ return call(prevSetter, this, finalValue); ++ } ++ }; ++ } ++ ++ function getTextContentDescriptor( ++ target, property, shouldValidate, getSnippetData ++ ) { ++ let desc = getOwnPropertyDescriptor(target, property) || {}; ++ let {set: prevSetter} = desc; ++ if (!prevSetter) ++ return; ++ ++ return { ++ set(domString) { ++ if (!shouldValidate(this)) ++ return call(prevSetter, this, domString); ++ ++ let snippetData = getSnippetData(this); ++ if (!snippetData) ++ return call(prevSetter, this, domString); ++ if (checkShouldInsert(domString, this, property, snippetData)) ++ return call(prevSetter, this, domString); ++ } ++ }; ++ } ++ } ++ ++ $(window); ++ ++ function raceWinner(name, lose) { ++ ++ return noop; ++ } ++ ++ const {Map: Map$4, MutationObserver, Object: Object$4, Set, WeakSet: WeakSet$1} = $(window); ++ ++ let ElementProto = Element.prototype; ++ let {attachShadow} = ElementProto; ++ ++ let hiddenShadowRoots = new WeakSet$1(); ++ let searches = new Map$4(); ++ let observer = null; ++ ++ function hideIfShadowContains(search, selector = "*") { ++ ++ let key = `${search}\\${selector}`; ++ if (!searches.has(key)) { ++ searches.set(key, [toRegExp(search), selector, raceWinner() ++ ]); ++ } ++ ++ const debugLog = getDebugger("hide-if-shadow-contain"); ++ ++ if (!observer) { ++ observer = new MutationObserver(records => { ++ let visited = new Set(); ++ for (let {target} of $(records)) { ++ ++ let parent = $(target).parentNode; ++ while (parent) ++ [target, parent] = [parent, $(target).parentNode]; ++ ++ if (hiddenShadowRoots.has(target)) ++ continue; ++ ++ if (visited.has(target)) ++ continue; ++ ++ visited.add(target); ++ for (let [re, selfOrParent, win] of searches.values()) { ++ if (re.test($(target).textContent)) { ++ let closest = $(target.host).closest(selfOrParent); ++ if (closest) { ++ win(); ++ ++ $(target).appendChild( ++ document.createElement("style") ++ ).textContent = ":host {display: none !important}"; ++ ++ hideElement(closest); ++ ++ hiddenShadowRoots.add(target); ++ debugLog("Hiding: ", closest, " for params: ", ...arguments); ++ } ++ } ++ } ++ } ++ }); ++ ++ Object$4.defineProperty(ElementProto, "attachShadow", { ++ ++ value: proxy(attachShadow, function() { ++ ++ let root = apply$2(attachShadow, this, arguments); ++ debugLog("attachShadow is called for: ", root); ++ ++ observer.observe(root, { ++ childList: true, ++ characterData: true, ++ subtree: true ++ }); ++ ++ return root; ++ }) ++ }); ++ } ++ } ++ ++ const {Error: Error$4, JSON: JSON$2, Map: Map$3, Object: Object$3} = $(window); ++ ++ let paths$1 = null; ++ ++ function jsonOverride(rawOverridePaths, value, ++ rawNeedlePaths = "", filter = "") { ++ if (!rawOverridePaths) ++ throw new Error$4("[json-override snippet]: Missing paths to override."); ++ ++ if (typeof value == "undefined") ++ throw new Error$4("[json-override snippet]: No value to override with."); ++ ++ if (!paths$1) { ++ let debugLog = getDebugger("json-override"); ++ ++ let {parse} = JSON$2; ++ paths$1 = new Map$3(); ++ ++ Object$3.defineProperty(window.JSON, "parse", { ++ value: proxy(parse, function(str) { ++ let result = apply$2(parse, this, arguments); ++ ++ for (let {prune, needle, filter: flt, value: val} of paths$1.values()) { ++ if (flt && !flt.test(str)) ++ continue; ++ ++ if ($(needle).some(path => !findOwner(result, path))) ++ return result; ++ ++ for (let path of prune) { ++ let details = findOwner(result, path); ++ if (typeof details != "undefined") { ++ debugLog(`Found ${path} replaced it with ${val}`); ++ details[0][details[1]] = overrideValue(val); ++ } ++ } ++ } ++ ++ return result; ++ }) ++ }); ++ debugLog("Wrapped JSON.parse for override"); ++ } ++ ++ paths$1.set(rawOverridePaths, { ++ prune: $(rawOverridePaths).split(/ +/), ++ needle: rawNeedlePaths.length ? $(rawNeedlePaths).split(/ +/) : [], ++ filter: filter ? toRegExp(filter) : null, ++ value ++ }); ++ } ++ ++ let {Error: Error$3, JSON: JSON$1, Map: Map$2, Object: Object$2} = $(window); ++ ++ let paths = null; ++ ++ function jsonPrune(rawPrunePaths, rawNeedlePaths = "") { ++ if (!rawPrunePaths) ++ throw new Error$3("Missing paths to prune"); ++ ++ if (!paths) { ++ let debugLog = getDebugger("json-prune"); ++ ++ let {parse} = JSON$1; ++ paths = new Map$2(); ++ ++ Object$2.defineProperty(window.JSON, "parse", { ++ value: proxy(parse, function() { ++ let result = apply$2(parse, this, arguments); ++ ++ for (let {prune, needle} of paths.values()) { ++ if ($(needle).some(path => !findOwner(result, path))) ++ return result; ++ ++ for (let path of prune) { ++ let details = findOwner(result, path); ++ if (typeof details != "undefined") { ++ debugLog(`Found ${path} and deleted`); ++ delete details[0][details[1]]; ++ } ++ } ++ } ++ ++ return result; ++ }) ++ }); ++ debugLog("Wrapped JSON.parse for prune"); ++ } ++ ++ paths.set(rawPrunePaths, { ++ prune: $(rawPrunePaths).split(/ +/), ++ needle: rawNeedlePaths.length ? $(rawNeedlePaths).split(/ +/) : [] ++ }); ++ } ++ ++ let {Error: Error$2} = $(window); ++ ++ function overridePropertyRead(property, value) { ++ if (!property) { ++ throw new Error$2("[override-property-read snippet]: " + ++ "No property to override."); ++ } ++ if (typeof value === "undefined") { ++ throw new Error$2("[override-property-read snippet]: " + ++ "No value to override with."); ++ } ++ ++ let debugLog = getDebugger("override-property-read"); ++ ++ let cValue = overrideValue(value); ++ ++ let newGetter = () => { ++ debugLog(`${property} override done.`); ++ return cValue; ++ }; ++ ++ debugLog(`Overriding ${property}.`); ++ ++ wrapPropertyAccess(window, property, {get: newGetter, set() {}}); ++ } ++ ++ let {Error: Error$1, Map: Map$1, Object: Object$1, console: console$1} = $(window); ++ ++ let {toString} = Function.prototype; ++ let EventTargetProto = EventTarget.prototype; ++ let {addEventListener} = EventTargetProto; ++ ++ let events = null; ++ ++ function preventListener(event, eventHandler, selector) { ++ if (!event) ++ throw new Error$1("[prevent-listener snippet]: No event type."); ++ ++ if (!events) { ++ events = new Map$1(); ++ ++ let debugLog = getDebugger("[prevent]"); ++ ++ Object$1.defineProperty(EventTargetProto, "addEventListener", { ++ value: proxy(addEventListener, function(type, listener) { ++ for (let {evt, handlers, selectors} of events.values()) { ++ ++ if (!evt.test(type)) ++ continue; ++ ++ let isElement = this instanceof Element; ++ ++ for (let i = 0; i < handlers.length; i++) { ++ let handler = handlers[i]; ++ let sel = selectors[i]; ++ ++ let handlerMatch = () => handler.test( ++ call( ++ toString, ++ typeof listener === "function" ? ++ listener : listener.handleEvent ++ ) ++ ); ++ ++ if ( ++ (handler && !handlerMatch()) || ++ (sel && !(isElement && $(this).matches(sel))) ++ ) ++ continue; ++ ++ if (debug()) { ++ console$1.groupCollapsed("DEBUG [prevent] was successful"); ++ debugLog(`type: ${type} matching ${evt}`); ++ debugLog("handler:", listener); ++ if (handler) ++ debugLog(`matching ${handler}`); ++ if (sel) ++ debugLog("on element: ", this, ` matching ${sel}`); ++ debugLog("was prevented from being added"); ++ console$1.groupEnd(); ++ } ++ return; ++ } ++ } ++ return apply$2(addEventListener, this, arguments); ++ }) ++ }); ++ ++ debugLog("Wrapped addEventListener"); ++ } ++ ++ if (!events.has(event)) ++ events.set(event, {evt: toRegExp(event), handlers: [], selectors: []}); ++ ++ let {handlers, selectors} = events.get(event); ++ ++ handlers.push(eventHandler ? toRegExp(eventHandler) : null); ++ selectors.push(selector); ++ } ++ ++ let {URL, fetch} = $(window); ++ ++ let {delete: deleteParam, has: hasParam} = caller(URLSearchParams.prototype); ++ ++ let parameters; ++ ++ function stripFetchQueryParameter(name, urlPattern = null) { ++ const debugLog = getDebugger("strip-fetch-query-parameter"); ++ ++ if (!parameters) { ++ parameters = new Map(); ++ window.fetch = proxy(fetch, (...args) => { ++ let [source] = args; ++ if (typeof source === "string") { ++ let url = new URL(source); ++ for (let [key, reg] of parameters) { ++ if (!reg || reg.test(source)) { ++ if (hasParam(url.searchParams, key)) { ++ debugLog(`${key} has been stripped from url ${source}`); ++ deleteParam(url.searchParams, key); ++ args[0] = url.href; ++ } ++ } ++ } ++ } ++ return apply$2(fetch, self, args); ++ }); ++ } ++ parameters.set(name, urlPattern && toRegExp(urlPattern)); ++ } ++ ++ function trace(...args) { ++ ++ apply$2(log, null, args); ++ } ++ ++ const snippets = { ++ "abort-current-inline-script": abortCurrentInlineScript, ++ "abort-on-iframe-property-read": abortOnIframePropertyRead, ++ "abort-on-iframe-property-write": abortOnIframePropertyWrite, ++ "abort-on-property-read": abortOnPropertyRead, ++ "abort-on-property-write": abortOnPropertyWrite, ++ "cookie-remover": cookieRemover, ++ "debug": setDebug, ++ "freeze-element": freezeElement, ++ "hide-if-shadow-contains": hideIfShadowContains, ++ "json-override": jsonOverride, ++ "json-prune": jsonPrune, ++ "override-property-read": overridePropertyRead, ++ "prevent-listener": preventListener, ++ "strip-fetch-query-parameter": stripFetchQueryParameter, ++ "trace": trace ++ }; ++ let context; ++ for (const [name, ...args] of filters) { ++ if (snippets.hasOwnProperty(name)) { ++ try { context = snippets[name].apply(context, args); } ++ catch (error) { console.error(error); } ++ } ++ } ++ context = void 0; ++}; ++const graph = new Map([["abort-current-inline-script",null],["abort-on-iframe-property-read",null],["abort-on-iframe-property-write",null],["abort-on-property-read",null],["abort-on-property-write",null],["cookie-remover",null],["debug",null],["freeze-element",null],["hide-if-shadow-contains",null],["json-override",null],["json-prune",null],["override-property-read",null],["prevent-listener",null],["strip-fetch-query-parameter",null],["trace",null]]); ++callback.get = snippet => graph.get(snippet); ++callback.has = snippet => graph.has(snippet); ++ ++ if (t.every(([name]) => !callback.has(name))) return; ++ const append = () => { ++ URL.revokeObjectURL( ++ Object.assign( ++ document.documentElement.appendChild(document.createElement("script")), ++ {async: false, src: URL.createObjectURL(new Blob([ ++ "(" + callback + ")(..." + JSON.stringify([e, ...t]) + ")" ++ ]))} ++ ).src ++ ); ++ }; ++ try { append(); } ++ catch (_) { ++ document.addEventListener("readystatechange", append, {once:true}); ++ } ++} diff --git a/components/resources/adblocking/snippets/dist/isolated-first.jst b/components/resources/adblocking/snippets/dist/isolated-first.jst new file mode 100755 --- /dev/null @@ -4531,7 +8344,7 @@ new file mode 100755 @@ -0,0 +1,3624 @@ +(e, ...t) => { +/*! -+ * snippets v0.7.0 ++ * snippets v0.7.0 (https://gitlab.com/eyeo/anti-cv/snippets/-/tree/5f54b58f039a604088d65991f2829a9a081832f6/dist) + * https://gitlab.com/eyeo/snippets/-/commit/d7c80795567d9f9c44a6ebaa789baceab85f31f9 + * + * This file is part of eyeo's Anti-Circumvention Snippets module (@eyeo/snippets), @@ -8202,6 +12015,15 @@ diff --git a/third_party/blink/renderer/core/exported/web_document.cc b/third_pa auto* parsed_sheet = MakeGarbageCollected( MakeGarbageCollected(*document)); parsed_sheet->ParseString(source_code); +@@ -283,7 +293,7 @@ WebStyleSheetKey WebDocument::InsertAbpElemhideStylesheet( + if (IsValidAbpRule(parsed_sheet->RuleAt(n))) + ++n; + else { +- parsed_sheet->SetMutable(); ++ parsed_sheet->StartMutation(); + parsed_sheet->WrapperDeleteRule(n); + LOG(WARNING) << "[eyeo] Broken rule"; + } @@ -295,9 +305,6 @@ WebStyleSheetKey WebDocument::InsertAbpElemhideStylesheet( {SchedulingPolicy::DisableBackForwardCache()}); } @@ -8212,17 +12034,6 @@ diff --git a/third_party/blink/renderer/core/exported/web_document.cc b/third_pa document->GetStyleEngine().InjectSheet(injection_key, parsed_sheet, origin); return injection_key; } -diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec ---- a/tools/gritsettings/resource_ids.spec -+++ b/tools/gritsettings/resource_ids.spec -@@ -678,7 +678,6 @@ - "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/hats/resources.grd": { - "META": {"sizes": {"includes": [10]}}, - "includes": [4980], -- }, - # END chrome/ WebUI resources section - - # START chrome/ miscellaneous section. diff --git a/tools/typescript/definitions/adblock_private.d.ts b/tools/typescript/definitions/adblock_private.d.ts --- a/tools/typescript/definitions/adblock_private.d.ts +++ b/tools/typescript/definitions/adblock_private.d.ts diff --git a/build/patches/00Fix-chromium-build-bugs.patch b/build/patches/00Fix-chromium-build-bugs.patch index 7fecc35e..7337ce36 100644 --- a/build/patches/00Fix-chromium-build-bugs.patch +++ b/build/patches/00Fix-chromium-build-bugs.patch @@ -2,31 +2,39 @@ From: Your Name Date: Wed, 6 Sep 2023 17:55:01 +0000 Subject: Fix chromium build bugs +because of +https://bugs.chromium.org/p/chromium/issues/detail?id=1491776#c10 --- - BUILD.gn | 1 - - .../AutofillSaveCardBottomSheetBridge.java | 2 +- - .../org/chromium/chrome/browser/tab/TabImpl.java | 2 +- - ...me_browser_main_extra_parts_nacl_deprecation.cc | 2 ++ - .../api/autofill_private/autofill_util.cc | 2 ++ - .../api/reading_list/reading_list_event_router.h | 2 +- - .../navigation_predictor_metrics_document_data.h | 2 ++ - chrome/browser/safe_browsing/BUILD.gn | 1 + - ..._auction_consented_debugging_infobar_delegate.h | 2 +- - .../read_anything/read_anything_container_view.cc | 12 ++++++------ - chrome/browser/ui/views/tabs/tab.cc | 2 +- - chrome/browser/ui/views/tabs/tab_group_header.cc | 2 +- - .../app_management/app_management_page_handler.cc | 2 ++ - chrome/browser/usb/chrome_usb_delegate.cc | 2 ++ - .../autofill/core/browser/data_model/address.cc | 4 ++-- - components/autofill/core/browser/form_structure.cc | 2 ++ - .../core/browser/webdata/autofill_table.cc | 12 ++++++------ - components/omnibox/browser/omnibox_field_trial.cc | 4 ++-- - .../phishing_classifier/phishing_image_embedder.cc | 14 +++----------- - content/browser/browser_interface_binders.cc | 1 + - crypto/BUILD.gn | 3 +++ - net/BUILD.gn | 1 + - third_party/libevent/BUILD.gn | 2 ++ - 23 files changed, 45 insertions(+), 34 deletions(-) + BUILD.gn | 1 - + .../AutofillSaveCardBottomSheetBridge.java | 2 +- + .../chromium/chrome/browser/tab/TabImpl.java | 2 +- + .../intent_helper/intent_picker_helpers.cc | 2 ++ + ...owser_main_extra_parts_nacl_deprecation.cc | 2 ++ + .../download/download_ui_safe_browsing_util.h | 2 +- + .../api/autofill_private/autofill_util.cc | 2 ++ + .../reading_list/reading_list_event_router.h | 2 +- + ...vigation_predictor_metrics_document_data.h | 2 ++ + chrome/browser/safe_browsing/BUILD.gn | 1 + + .../tpcd/support/tpcd_support_manager.cc | 2 +- + ...ion_consented_debugging_infobar_delegate.h | 2 +- + .../read_anything_container_view.cc | 12 +++---- + chrome/browser/ui/views/tabs/tab.cc | 2 +- + .../browser/ui/views/tabs/tab_group_header.cc | 2 +- + .../app_management_page_handler.cc | 2 ++ + chrome/browser/usb/chrome_usb_delegate.cc | 2 ++ + .../core/browser/data_model/address.cc | 2 +- + .../autofill/core/browser/form_structure.cc | 2 ++ + .../core/browser/webdata/autofill_table.cc | 36 +++++++++---------- + .../omnibox/browser/autocomplete_controller.h | 2 +- + .../omnibox/browser/omnibox_field_trial.cc | 4 +-- + components/omnibox/browser/omnibox_view.cc | 2 ++ + .../browser/tailored_word_break_iterator.cc | 2 +- + .../phishing_image_embedder.cc | 14 ++------ + content/browser/browser_interface_binders.cc | 1 + + crypto/BUILD.gn | 3 ++ + net/BUILD.gn | 1 + + third_party/libevent/BUILD.gn | 2 ++ + 29 files changed, 64 insertions(+), 49 deletions(-) diff --git a/BUILD.gn b/BUILD.gn --- a/BUILD.gn @@ -63,6 +71,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav public int getId() { return mId; } +diff --git a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc +--- a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc ++++ b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc +@@ -32,6 +32,7 @@ + namespace apps { + namespace { + ++#if BUILDFLAG(IS_MAC) + std::vector CombinePossibleMacAppWithOtherApps( + std::vector apps, + absl::optional mac_app) { +@@ -40,6 +41,7 @@ std::vector CombinePossibleMacAppWithOtherApps( + } + return apps; + } ++#endif + + PickerEntryType GetPickerEntryType(AppType app_type) { + PickerEntryType picker_entry_type = PickerEntryType::kUnknown; diff --git a/chrome/browser/chrome_browser_main_extra_parts_nacl_deprecation.cc b/chrome/browser/chrome_browser_main_extra_parts_nacl_deprecation.cc --- a/chrome/browser/chrome_browser_main_extra_parts_nacl_deprecation.cc +++ b/chrome/browser/chrome_browser_main_extra_parts_nacl_deprecation.cc @@ -82,6 +109,18 @@ diff --git a/chrome/browser/chrome_browser_main_extra_parts_nacl_deprecation.cc } // namespace +diff --git a/chrome/browser/download/download_ui_safe_browsing_util.h b/chrome/browser/download/download_ui_safe_browsing_util.h +--- a/chrome/browser/download/download_ui_safe_browsing_util.h ++++ b/chrome/browser/download/download_ui_safe_browsing_util.h +@@ -9,7 +9,7 @@ class Profile; + + namespace download { + class DownloadItem; +-}; ++} + + // Utilities for determining how to display a download in the desktop UI based + // on Safe Browsing state and verdict. diff --git a/chrome/browser/extensions/api/autofill_private/autofill_util.cc b/chrome/browser/extensions/api/autofill_private/autofill_util.cc --- a/chrome/browser/extensions/api/autofill_private/autofill_util.cc +++ b/chrome/browser/extensions/api/autofill_private/autofill_util.cc @@ -136,6 +175,18 @@ diff --git a/chrome/browser/safe_browsing/BUILD.gn b/chrome/browser/safe_browsin ] if (safe_browsing_mode == 1) { # "Safe Browsing Full" files in addition to the "basic" ones to use for +diff --git a/chrome/browser/tpcd/support/tpcd_support_manager.cc b/chrome/browser/tpcd/support/tpcd_support_manager.cc +--- a/chrome/browser/tpcd/support/tpcd_support_manager.cc ++++ b/chrome/browser/tpcd/support/tpcd_support_manager.cc +@@ -38,7 +38,7 @@ TpcdSupportManager::TpcdSupportManager( + std::unique_ptr delegate) + : content::WebContentsObserver(web_contents), + content::WebContentsUserData(*web_contents), +- delegate_(std::move(delegate)){}; ++ delegate_(std::move(delegate)){} + + TpcdSupportManager::~TpcdSupportManager() = default; + diff --git a/chrome/browser/ui/startup/bidding_and_auction_consented_debugging_infobar_delegate.h b/chrome/browser/ui/startup/bidding_and_auction_consented_debugging_infobar_delegate.h --- a/chrome/browser/ui/startup/bidding_and_auction_consented_debugging_infobar_delegate.h +++ b/chrome/browser/ui/startup/bidding_and_auction_consented_debugging_infobar_delegate.h @@ -235,15 +286,6 @@ diff --git a/chrome/browser/usb/chrome_usb_delegate.cc b/chrome/browser/usb/chro diff --git a/components/autofill/core/browser/data_model/address.cc b/components/autofill/core/browser/data_model/address.cc --- a/components/autofill/core/browser/data_model/address.cc +++ b/components/autofill/core/browser/data_model/address.cc -@@ -40,7 +40,7 @@ Address::Address(AddressCountryCode country_code) - !i18n_model_definition::IsCustomHierarchyAvailableForCountry( - country_code)) {} - --Address::~Address() = default; -+Address::~Address() = default - - Address& Address::operator=(const Address& address) { - if (this == &address) { @@ -59,7 +59,7 @@ Address& Address::operator=(const Address& address) { structured_address_->CopyFrom(address.GetStructuredAddress()); @@ -275,25 +317,61 @@ diff --git a/components/autofill/core/browser/form_structure.cc b/components/aut diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/components/autofill/core/browser/webdata/autofill_table.cc --- a/components/autofill/core/browser/webdata/autofill_table.cc +++ b/components/autofill/core/browser/webdata/autofill_table.cc -@@ -426,12 +426,12 @@ void InsertBuilder(sql::Database* db, - } - - // Renames the table `from` into `to` and returns true if successful. --bool RenameTable(sql::Database* db, -- std::string_view from, -- std::string_view to) { -- return db->Execute( -- base::StrCat({"ALTER TABLE ", from, " RENAME TO ", to}).c_str()); +@@ -961,24 +961,24 @@ time_t GetEndTime(const base::Time& end) { + // Returns |s| with |escaper| in front of each of occurrence of a character + // from |special_chars|. Any occurrence of |escaper| in |s| is doubled. For + // example, Substitute("hello_world!", "_%", '!'') returns "hello!_world!!". +-std::u16string Substitute(const std::u16string& s, +- const std::u16string& special_chars, +- const char16_t& escaper) { +- // Prepend |escaper| to the list of |special_chars|. +- std::u16string escape_wildcards(special_chars); +- escape_wildcards.insert(escape_wildcards.begin(), escaper); +- +- // Prepend the |escaper| just before |special_chars| in |s|. +- std::u16string result(s); +- for (char16_t c : escape_wildcards) { +- for (size_t pos = 0; (pos = result.find(c, pos)) != std::u16string::npos; +- pos += 2) { +- result.insert(result.begin() + pos, escaper); +- } +- } +- +- return result; -} -+// bool RenameTable(sql::Database* db, -+// std::string_view from, -+// std::string_view to) { -+// return db->Execute( -+// base::StrCat({"ALTER TABLE ", from, " RENAME TO ", to}).c_str()); ++// std::u16string Substitute(const std::u16string& s, ++// const std::u16string& special_chars, ++// const char16_t& escaper) { ++// // Prepend |escaper| to the list of |special_chars|. ++// std::u16string escape_wildcards(special_chars); ++// escape_wildcards.insert(escape_wildcards.begin(), escaper); ++ ++// // Prepend the |escaper| just before |special_chars| in |s|. ++// std::u16string result(s); ++// for (char16_t c : escape_wildcards) { ++// for (size_t pos = 0; (pos = result.find(c, pos)) != std::u16string::npos; ++// pos += 2) { ++// result.insert(result.begin() + pos, escaper); ++// } ++// } ++ ++// return result; +// } - // Wrapper around `sql::Database::DoesColumnExist()`, because that function - // only accepts const char* parameters. + // This helper function binds the `profile`s properties to the placeholders in + // `s`, in the order the columns are defined in the header file. +diff --git a/components/omnibox/browser/autocomplete_controller.h b/components/omnibox/browser/autocomplete_controller.h +--- a/components/omnibox/browser/autocomplete_controller.h ++++ b/components/omnibox/browser/autocomplete_controller.h +@@ -208,7 +208,7 @@ class AutocompleteController : public AutocompleteProviderListener, + OpenTabProvider* open_tab_provider() const { return open_tab_provider_; } + + const AutocompleteInput& input() const { return input_; } +- const AutocompleteResult& result() const { return published_result_; }; ++ const AutocompleteResult& result() const { return published_result_; } + // Groups `published_result_` by search vs URL. + // See also `AutocompleteResult::GroupSuggestionsBySearchVsURL()`. + void GroupSuggestionsBySearchVsURL(size_t begin, size_t end); diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omnibox/browser/omnibox_field_trial.cc --- a/components/omnibox/browser/omnibox_field_trial.cc +++ b/components/omnibox/browser/omnibox_field_trial.cc @@ -311,6 +389,36 @@ diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omni } MLConfig& ScopedMLConfigForTesting::GetMLConfig() { +diff --git a/components/omnibox/browser/omnibox_view.cc b/components/omnibox/browser/omnibox_view.cc +--- a/components/omnibox/browser/omnibox_view.cc ++++ b/components/omnibox/browser/omnibox_view.cc +@@ -56,12 +56,14 @@ bool RichAutocompletionEitherNonPrefixEnabled() { + kRichAutocompletionAutocompleteNonPrefixShortcutProvider.Get(); + } + ++#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) + // Return true if the given match uses a vector icon with a background. + bool HasVectorIconBackground(const AutocompleteMatch& match) { + return OmniboxFieldTrial::IsActionsUISimplificationEnabled() && + (match.type == AutocompleteMatchType::HISTORY_CLUSTER || + match.type == AutocompleteMatchType::PEDAL); + } ++#endif + + } // namespace + +diff --git a/components/omnibox/browser/tailored_word_break_iterator.cc b/components/omnibox/browser/tailored_word_break_iterator.cc +--- a/components/omnibox/browser/tailored_word_break_iterator.cc ++++ b/components/omnibox/browser/tailored_word_break_iterator.cc +@@ -18,7 +18,7 @@ TailoredWordBreakIterator::TailoredWordBreakIterator( + pos_(0), + word_breaks_{u"0123456789"}, + non_word_breaks_{u"_"}, +- all_breaks_{word_breaks_ + non_word_breaks_} {}; ++ all_breaks_{word_breaks_ + non_word_breaks_} {} + + TailoredWordBreakIterator::~TailoredWordBreakIterator() {} + diff --git a/components/safe_browsing/content/renderer/phishing_classifier/phishing_image_embedder.cc b/components/safe_browsing/content/renderer/phishing_classifier/phishing_image_embedder.cc --- a/components/safe_browsing/content/renderer/phishing_classifier/phishing_image_embedder.cc +++ b/components/safe_browsing/content/renderer/phishing_classifier/phishing_image_embedder.cc diff --git a/build/patches/00Internal-firewall.patch b/build/patches/00Internal-firewall.patch index 969d48d1..3e33d1ca 100644 --- a/build/patches/00Internal-firewall.patch +++ b/build/patches/00Internal-firewall.patch @@ -24,9 +24,9 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html services/firewall/public/firewall_service.cc | 46 ++ services/firewall/public/firewall_service.h | 57 +++ services/firewall/tools/annotation_model.py | 49 ++ - services/firewall/tools/annotations.xml | 448 ++++++++++++++++++ + services/firewall/tools/annotations.xml | 466 ++++++++++++++++++ services/firewall/tools/builders_template.py | 72 +++ - services/firewall/tools/codegen.py | 82 ++++ + services/firewall/tools/codegen.py | 82 +++ services/firewall/tools/decode_template.py | 85 ++++ services/firewall/tools/gen_builders.py | 65 +++ services/firewall/tools/rules.xml | 83 ++++ @@ -34,11 +34,11 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html services/network/network_context.cc | 73 +++ .../network/public/cpp/simple_url_loader.cc | 18 + .../network/public/cpp/simple_url_loader.h | 3 + - .../platform/loader/fetch/fetch_utils.cc | 171 ++++++- + .../platform/loader/fetch/fetch_utils.cc | 191 ++++++- .../loader/fetch/url_loader/url_loader.cc | 4 +- .../scripts/auditor/auditor.py | 1 + .../scripts/auditor/util.py | 1 + - 29 files changed, 1527 insertions(+), 21 deletions(-) + 29 files changed, 1566 insertions(+), 20 deletions(-) create mode 100644 services/firewall/public/BUILD.gn create mode 100644 services/firewall/public/firewall_features.cc create mode 100644 services/firewall/public/firewall_features.h @@ -625,7 +625,7 @@ diff --git a/services/firewall/tools/annotations.xml b/services/firewall/tools/a new file mode 100644 --- /dev/null +++ b/services/firewall/tools/annotations.xml -@@ -0,0 +1,448 @@ +@@ -0,0 +1,466 @@ + +

gwPc~}r1EkwlYXQ}rJMSNzBBL}k?z2D`rVV-wuuaI7M-d?84q^ukvn5=x6M9$Z+ -z1W|2#XHFHds5u?!-Jyr~sLH9F>E&ibiTL+A#VW!s=3Knh(0Vtr$=*sZ)BR!)u0vF< -z5r7ZCc=GZwTkmf)%@8`{h033g%(DsOKpNI;# -z1$J!jn@bt~V<9{hZF!2!nr3bCj@iG+?F`_5k=sv5(KC7&|B%~e|01^$K}F)L`QVFE -z9Cr+v|4nXRg(0@3?4XKSH8uRQAm9l%3QYIFNunhEA-5&}gWT5qhuqfvhuk(pkc;^t -zw{8AKZs)CdQDgst4l}RC(e>X~)m1)-M(WGs3Q>$^^`JxZ!z-VUNxZYgh`>GImrYF* -zAt8m-S4-C@cMn7gdJ@P6!B#D1Iyr4UeO-)uAqrA?l8evhBlRCWZ0X|7-`)Ho)T9|> -z$t$BCB}z=aKlMD+!dwbx69!uEhVxNvQ-t>6Du=*|ndp#DpRHyPF_7Bgd9Lg$S!t?e -z39w?^>vudvV)nNRemSj9@P({5d;K9gf{%6g?<0|5$hLUIg4~l_vB&o3ziiZ}v{A9Q -zRcVLx;eZBI@kejWZ-S3sg(j6o3?uiGWd>WoAy|PFO(d0|W%HdhzO!@PkEXG`=TCCT -zNmkl52$y@QB8xrAYKuAL&|CR{|8gY$IKSlq(z>@a7LFSxgc~t7w314HE_Em?jgoj! -z(A7+lmYWGt8pchbxN}*V5?j96!~#VQZb7O(?E{u^eC19nlHuTJjG=^q3wsHU*wlWr -zgRn$kSjSe4k|m9#nRP~xVti5>C(9D`xNgT51{?Yb0bw>=*t=$`wK`(kL6?cGkq4ye -z%K5CWyz{wa+XV_~WKuzkmoh(TF_8Dv?@qpCWdbfdMkl8UU$m;1+)zYPk)_NeH>h?+ -zVVDI1W$ywbbel5-xII}&{*6hauXeR<(=KaGL$TU^U?I|O9H9(rZJ5-{VFDq(Zcaz? -zuhvx~Y&J4qE-Y&(e$OSn>%u|^)$dGT|2y|5i!~2Tk;_i?$zET6jILY37838-Kn|s3VERQoINIr-`0SQ-*Z7jtlf>U -zzjg3p@C~Bbt|O+Qq-;Q61l$lbP(3z4qks+;{gpfoOj*hsXvgDE0msa5Q=zyzCG63U -z>k8T^9a_2mQ$RnyvGPQG0g%qG2Ys$xf -z^Wi0c*wV^}6$xky*IiLUX>En*-dG**z-V{RR(AbzAWL>HrIb!Z -z^HfWj=WaX|;M{={Gzg9kYJUsH-)rr$OGHY>NR5-bcRLfZx&5p>MbDlH_=7;olgecr -z;-n*W*>|0pT=5b&_cp!$W_7r<1Ze{5VVsN;GpC+*fXnr?NKuu6D1d76_O(Y{I@IY_ -zEqo94dbn_AEBf@n*k%SA@jum9_vD8*4!^E2ub#->zp@Dj4`>Y&t4cDF -zu-BuQG#EHA4wWi<9F)D#0V}$sgFniF+%{ -zBCsQ&REz~79tFb1o&QGYFTP=V# -zc|GYxG&5oZ!Z(KC#4Yqzw4Js*(D@#7g00b--a<=>q?ERL(z<~c2ZFI^aZl1ju~UpH -zMZn2SxI7D%1Elkg_kzPluWwgi3s@i*5SoK&@5hyYel~+nMC1TrSWxS@6HK;NPt0)D -z_?mFa@3DltjWLkb9cTiOjrFVs@}`xir_;NYFIWK_?lB`3({S9pc?j?!?AO@PyD=>? -zP^`c=2-jL#{_gys2m9>TA@tpI_PuS40Mnc+xxpDGg1!aJ -z0?PJ0E2a6q&>UsCC^4JV3JNSP_ArqiCdftyJ}S{r0(7M41k^|Vih^X`#QZt5oUe4v -zK@U@jI$M4f1C63HahFA;9xwmrkCJ8%k=>NwE6+M+B`LJO;zY0`b^xGJ?JuWOq~+O5 -zjtK<+zn@tL_aV(Ot6&oH8XAa6uCw$uCxjm54AdKafNC -zPNY(&$>ZRGERRHFt&HY!xFky$YT7F#b@uq_L)_15E;2vkk;+}MrX+VR9|2y=Y%XF* -z-pA&gGp%^mDD#KcKc2(jcb%`j`x>p0aslbgUcp>oIpz;IPwVEd4)}vnP~y|hDofHG -zGb%fndYrO#t=a?s{EazB0CgW_0#foCx(2)of8QF#nQG -zCaa6UwD{8DKf+}wte$}#bV_=*obJ)&)SY*MjX;eLgq%F0G0J7H*+&MOwy-nwegjif -zV4H6o`|#KDaoHQ4ZJP5kLl$1QHj7a-^1mO-G=tKBjh{p4j-nT2iM_O&E}cgHaF -zAE8bOU~CO*U|a|MiEX%VxF*&VmMg?Ch1&%@f~zgcM_8{wk36QhrQvV!JtkHkWc*gP -zQribh$S~gOwB?=h1IGb*u-gNV6rIynb!wlft4Mtg -zcS$9WbxbrIzRCve-~4NEg%Zu02Yx35?Px1zGFho6+_8fSAy;7!NEe(AyV^cjfdeFU6 -zUQ*DyR^T2ZJe7-d+XhG>_H5Qb`Rv?qFzRACs7rsG7|;i{1~z}}cU8{%paYVra{-Eo -z5s5nkP8s=khFdizWBhHd)qb`#(-3KtWs1l!NF!b4e2rhi2!a4MRh$V#9A9E$hgpubI>-rB -z<8qg3?>Slp51ID*MIqF@XA1N*=`Ul-d?d>fe$)%%$}vvnRiSELQe%$ndJyXQR6WLM -z^b51wTMSNImDqGgDjArC}T^tEVJISy3KNrDkFd0jc-YCxK~3U+?sq^}Q@ -zIv(mTJhN$envPPsBV40!C0>m>8?SxUzZW+)O}K(mk0*bnYv$8dn3E3x$Ri5fre7tK -z1D!$cAkrAS3ppMnJg%8snkrYX3)+`x_5l|HB4${%v_&SbISWW4H|(d})VL`v32M4K -zcAo}2^mj_xf-Kb49u|l@fVR4f*<%t2?)-K_ZZN)WEtH}}`&(c0n*b&&c9+mS+Hp6_ -z%CE3~waG%Tqz%Oo_gbJFLp -zRqGu--mb9tLq%k!edVM+fgqyEFF0QuGf7%-W>~5tuRa8PyyT)BO2#)xS(b^mP}C5T5p0r -z?Zq&Pr^VbPz34&<5`(&oiIqmTrV-7F+Qkgvc$ghqT@DcpNbbMfrk}iMcN4TmOL~+_ -z6FuobMUZzh0P|R{w*>v6hRT@A0~lRyd%Qba0ZRZ*N{|Gw2y45#OIm8L(n<(XDdO!- -ztDE9V -zWT_GtoR&5YB8PvdfPy(Y5W4aEtco?NHuEnS+`1NUFA!>63Gu5jrWeneq*k%xg}K8& -zMVE7vx-vELMXYiA*R60dMP1ZJhs@0pwcLS=6R#P@XGcS#eTq=1-b`381c()7G&beR -zGYOU_VbgLZB@S9HCGC7P`Zo+RfnXdMM1Ci+}Xjyjc%;dj?N?F=;L?>P+V -zAE7Igei15!93L@h?a@D9<;+L%WH(zF8*z^Y$mRL2D~&it!fpmIcQ<1WYvwvRJ?$R_ -zd!7j^V%a^g$cRcZ%zhaXsiHx2zEkX&uRp%Op5NnlPSMqve^oJmusE>bwTt&ThohpG -zu3xi#`gKBG3ED@&!D(R|;nG9c?(ozaYE!GEQz6Nh!CI)*!t=Xs29ffk1qT -zY94+?8ea1t{wJNy$78CN7uf%AI=kzCPiIs7f1@lSO -zH#)mvOm0aS=>K;*+wtOu&W8J+bT;R|>1?$BMrT+4o6cVTZ*=z2k`NR?_WzmAX8Lb* -zHn?NL51l=!^?#$YbMl6M0qQ<|ORx6Ya>f!%0`F8^e8C@$jgDvL`r_P>DH1`V2}%j_ -zes*MZ1}T{MG@6%oG7~uy3ij0=nS~Y_@^L9K^;yy$LMxh{#q#9p7rp&qQ%vAnM)FQZ -zWpA&69lqCi-!FJ+`L!63HY#h5yexR9FY|T;w1NpY9x|TMY&8|2l!6uWi%4UElw+gu -zuu_4~6Yx|#5?C`}nG5)F>)9}x3qX}yN#*GljwE%hpJh{*2V{@pA8>n75guJelanTG -zgg5~@SN7Gw_tPhw)WqQ+JD|r0U#{p9rA(KAT&<~TxzL#SIA6V?>5|YD-n%4yX7K4D -zF;whaMN;Ai+=luAw-*?f_|7U2-%VL3m~HlZ&Z_QndtmqsXRe?zF0C(zrEIEyIsfm$ -zZFS(3-TmPtC{=BVaFN{Hsf -zu@m)Iedp7!4iuyB*q%@mP#xia3MgeOPEWJolDnBI`DpQZ)#PYdQ*CB=G6%8^~X_H8DiS{&Br|>gHYDvGp -zvo&iz%Pi8+9qPf3J@tyGR3FeIbqGE??v0wU?jBHA)xm=AjW=}vtT-&od#M|H)h{1% -zN$nAT)^s~>PZyakT>z2wxdG8?tgr(!-A5Duk00$?SwP6-p`^)zd8Y}mmQJAm)gdR~ -z01!yX8&>la(oN~jArE>3j6KH04ka;56$)rRm~oVsQw%RA#B0{~==3@av`z;;c@}`sB-$rnuqfXmvRx3L -zp((VDm4x&$3#Y!dU&W^WF>XjCWp`T9T)<$@9>Ys9l5C|RYw%<$YF>C@=;0=$%*|@H -zeE1Edo->+{Y=m;%E@32p*wvAfYLVC<4}mAhA2EU0!Gv3Hgu30wxx-IkaAg<=@&uOp -z&GX&PBIQa`MEY$Vsu?&E9DIsCwf_n2v!Ah#qrIYAxS-q=+M1>>1rKq -zKii`$Hd<+fw;ZUu_|j{^H)Cc12vt=${b7&S!S>zDqU{;(MC&1uVuhQis~08fFKrDl -z(ilI2$$~v1sxhHE&Qqo%rxS>k!`mmf*cj*OGqY2Cq|@?M6y398-{iv`QOZ+aCrN%T -zphA_u)>VYoRSOdWgCiI-L-UV{@dR@!JD7zwMxsO6C%B}-2UuUvR=hKh)bH2TUIaL>n-4zRD?ZAl_m -z&jl(-7u|Jc&*BJBefFEtjJ58`q$md=`VNmqrawgZt0kkdv1x$P2(nY|i^RpU)~6Dq -zR=4x@w`vV_Bz{$e+n{a?!sp> -zOwi<3@(vTj?`51e@A~K%@y&(Bfi<_yk(`ez(A!Z`lo#UBs6hdyL$4G^5hhH8_|**%L_zsY3z|D(4ZjuWQ&|Ma%O{_SnA+Z#0)`t$zvyK3D{X|DU1w+;Va -z-ge1fLHb6S;k2`&F=z?S+ObWCJ~2YwWIuCWt)UINh6>-@KWpE -zlw{h$_hc;@H2`Pc+u#uWv=|v?&TuetaLQ3*=Z{=QvIe7kXphS)M^uB!Mi6(KOlih4 -z^5ycB+Kyv|r|%;h;C5W;nLK{}%Sj-=P-UO?H;9{_Efb#^V!j%E4RGd9o;EQq*Vt@T -zIhqjupnCF7e&lM}LM#NjKh@OJj6?Sm>lG%77Bq@7o~cZ?8CRmSK9QdX&ECYPJQaVP -zcNN-l;6j$OM{yqXw-;&DF3JOruJz%OPqX_#K$LW$ABN6Frq$Ou&2R}`W^1M-@KNvH -zsEQQ590_nz{uf*K)SOw{uxmTEJGO1xHafO#b&@M~(qYGT(s9SOZQC|GSCTLH{k+dx -zbI$r!#t#@(qsF;#oZHT8e1D)x<${EbQA*II2(nQ3DN1Bvp(9_VA{Qe7Q-A;Ce!Xl> -zSNO14U7Ux{tiJUSJN~i%yqHXtIxB1zhoje!hYz{}%kM -zDeWR2UWk^z81m=EEOn?@RR8?gium_PA?yb(g1w}BKM`{-?BoYkyG%^N%(D~-Hpz*RtPR}zfE9ND+7w}w#Tu=?d~U+M+# -z{(6Fg`}XB+doH;w*w(FuYrl<{StfQwDb`sfo3{m0FcK$Kqils<9UR(x>Y^z4HsgEG -znPt0Pp(2KU%8K%WyQHwu%TKTehk_8)#{n -z+K6iR!2iB@G1LD<8zOBzZX@^^Yn6@DQAoHR5u7T%`c=&h{th=VF_Z_6jk1;&mMXK- -zlFW7_?)=B=2{|u#wGlO?82ehq(_}*&V_fw&{;p-B+!du~=2)c~H)ItB#BsHlUfvFl -zRYn^s-s>IcQp%Wak=YzSE+*+fZg9Dw(wKPnzK -zxEDwNLiV3R;jx8N$H%4X20!RZ|Cn&gkA_F+OWmG-jCV64Y08V}>269UInh>B`-b4D -zi>W4)Yw}QO4^!y7=@ed)d}TBGpC`xqpXa6IMW0ro%KK5 -zcA+I=xuFn^`u;{q@-~c=7C@AC>aKyhUMAhc7 -zJ`e_iZfFa}S4vBZRB_KPHBYIlKX`K6X3+jYOFk`r*(8Z1NFPkv{IL*SE@EOOFlJPk -z3KFE{!h=SJ>NEZD=VRXev&F(`?y?^!4-B(I4)_}X^WDDj*ONHl2VZ2=BFYv7@b&l= -zHUw?n#)FJS1S1nz8m&(iqoa7SWQa|UdS&2csVE^Aq@w(!X9U9`VlEpGQvCV2v(MLN -zJs^@f6(KQ%<+!KT1Cmn8ez8fe#FaT@kKIXdxn6Hz>N(x@mA=S0w3IkF63XiDwGzy7QIJgZ-T{366Ow{=$}r)76%1kfNW5$b2V?9fRBiD=w+M_l;R3 -z&xQ2Lxy%=FN&WJ+Q7^_XA>c0m^|s;c@@dY@zP#;HZam4|58W?sdtPs>#n9uAbvZrr -zXGO1Ut(Kt83AgfyTvJ)9CPrGde2jOD`TUXa!F;*ToU#z+!k@j1NbbUE^=dhsTbnj -zBvlg&J{)-0rp!2$cBo{ZZhhTP3=!;k-F?Z^3>GPJrCN9iuI@p*f4uFg|9IO$-@`j^ -zrn(1nqb^^>B^oih8+D-ir+OV_q+aGH@~0g;g<;)s;}dd|<`+EASkHq5>hSg_TpXGS -zhA4w62Fs35%Vw>0lDA<@$`gT@cg`f6M8AoVJl&v8Z -zeNvSmY^>5@jkK8>=Y`U&xRrYM#?!tvY3}ZiDy0M?_d{Y9#ls(=HMUf*;+BUn{ez;I -zda&MuTsgbnBxwSDS7+ZX3ww8S{M^&LGWZMO*c3!+X(S`TV7s(QMS{3Lkxs#`P6ZEm -zDKI1g49m(!O>WM*3F=99g{Up-@M&JbSWwiiMC&+z$oFgu^SMc1(;>9ww8trZbFzuVm;p&XN;%lzDdws}&a~Y-^BOr|Xv7bujy%O91hcPr -z6on)u(?m3dC&gH`o!$S%lde6DhtKTA4$;Q$A?2K>u&47x*)5VK6fW6AlmU11%O*e2 -zY>-9F`>*;ON$oeISR)B1fU0y}Ux6F5MNJqSuag6`N?`w%=p}om;~fK(Dk*=G8e*Te -z(%I(=X%HJN;MGI2Zd-(OpWwypHTjs>s%wc_&PWHOF^c10(K&eTk|?+P^KSf4TzazN -z?Ia#3H8w3|`uFsm=`M{6$FefpKdN2$4g83)HK|dQdBHW{c5W)H_!RsJ!r>VGwW11> -z3GQ_5MN5Bv?+fQ}ukKy}&IqvEmNQj8j)>f?Oth+d#1rPuB+0`ep(WY#4y5{M|4|`4Wi2pH -z=BPm2yO=U=c@0>~^<5^qhr~xvdFpL3ojv(WAviuT8Uq$niMVOJAoSqXAGz2%0Wz*L -z8+eIls%6pn^;*4f7}pKnSdvNw$O`OZ6>&K2BV}Xrf)W?EDEzLGnkuzLzvF{Ds($5k -zo}v$PX(Nq08G}UH5y@;y9lPX!>OId|6sa(sRlbyWi(o_$?W0==EA&|7+BsRc#iVcD(L5Fsa-Nlrx3k+;j&13ox@9B_>(!#0(}yZ#_D$4a@Wafvi{HVB{J23zJNM~33=jJ>j*ZPhe|`D)STU5_T4cLaFkWyP5jJVpaUbnjRl!FJyH0B*Van{N3izIkRSByY$!;g0Mzl#B6j -zRa?InpI2ABrq_?TB6Z08k -zQ!011pQp1!?OA@1i?&l*pck_lkMc9yw -zPRJxc|F>cFRO!xX=rgco!Zs4VQQpOv$b<2-Kr6-}d4b=x&U0*4Jmt&V7H5G}%laR0 -z+v&^O&MS-U{ExS-gj-NYIW#gsSiPD8LrvO3vH_DYvFRQoJ>Fev8l@(qZST5b#Yb5H -zjv$_j*KdxDxLRw+$K1ap9-@ACpc@ZAqn2H$W~Rb;lc_1gHY0xH0kwmSxG;uaG_R4k -zRCLDhqalcA-7lVD5_O&$m4p2NLkzAmfGB3>A{smUTf>ZpN&8vh+ql6_fCQ|+(3LTt -zluUx%bU=-2q4LvZRy3ZY;AWr6D0bzCc6IcY+}cd*K>rOT&gu*(+^vc!Lmk)RIyn8z -zT5_zrMNy7}ifja7sJD4XVPB+5P(>!_pQJ9po@x&Ej`l=g-p);u@SOBR{!g%KwQ$5p -zG2zm6XM4aI6$@jIv!;s}Mu||eWSAAnK><^b^<=ZI=_*efIj1nlyoI1r1<>nBWCrk? -ziuu_zn!cKVJmhYuM0QACD&R>x6C>3gP=7~02?tdN2pg7#E(bqpnPNFSiQ}}riZz(? -ztLiD2dzkzEBQL}0*G9|%ceI?Rd@JVwO)yQJI-r846o_e)`S@%4Nv2vaMJ8r-q#2-L%4A%YmYE#f!{-Mr5YU8v_B-p=(jVJ6ocCfQi_%9ebM{x5G^_eHB<<08uI|M9kS -zgEL2s-Cpee^|nn1#H&!tf`L$aey;y`+osU6--!Ez&G=n&s$rh-pA@7B*mH68K*zG8 -z&c;WV)JApDr8(T8%QS&(x;u7^rUUjC#n$g6cz^f5T#P_ef`7ejdHH|6?T(S0CO`a? -z0BA=(sSi#bN)ULtkLv=XDt?t#`;l78LH*;IpN)yldd&llXq2E^?~15Kb`GOR(1|imh-{DXuxv2gc+&(!ZgY~Ya?Fe$<$MKakLjs#b__5w*m -zi_R_TNKNOggn68E)|*O^eiSGMeV>)%1%~v&@+e>&M?CISosi}uavA9AdnUa5z9*za -zly~UHJ(VVgPE96pDVwX>jLuz-zOBL2qY!LGUf>dagn&`-DcK@+NeP=EOPvojrw&rc -zXa+YD5tGP>Ad--45NwxStEppaDw7paBKrog>3tz)I20=0$;v+I6m}1iB}ZGG-_nMP -z3rcD|Ivpvx=b$W^IduN@D}QXyq)wVB|M{y(xtd$)99gG=9O8>Mf6Sqd?*nR*n;2LA -z87Xf0BBUq1u=cUT_Pw>gaU22)g+jm-te+p6?%)CY5GD)Vnbx8%mrUMOa`x)>-v5C~ -zty0B`)sp$T6YGdtTC_8-(U(qsC-PWlVGi|QZyV|V$J?&%gsQ21l1{nV@T1>^t|g8) -z^*P9iuHva}n?QQFt-Ad^mRe;?BesvW?v59Ht3P&!j4zK&OBw@!rjP8u*Z^G;QFs$b -zlN=`IQTFG>ut2`i7%;FXb%%~-ANM(7!yC<_GE~m2K}D79ltzcgNW4|&C+;rj!n;HmSZ^el-{&TmNO0%g(HJ5Yg*aK -zigws>d2NA~a=w2Qz9%{yrd94N(3baSVqYCTMFATg -z`KnATk}85{(DY;`!>Q+gz3q%IZ+n91%iAtK`l2{hWtU0*s8r1C24!<)#vT2gHE#RY -z+a_~r3TbQaFaf0&-(Ttrr9-=^cCRv!XV6n(AkYiaGC(PbD=Id!$Z?lwYZpIX(kIeU -zzD5)(5!*#U8x|M-(v5ItLDR2Jt)qr!xsW0_h=tYsmOb(pm=WEVu?<> -zt-mu*^kO*iPV8Z#J0`}B1s{*Qy3wz&;N4}&k99wSC8<@02YMyge+f-lG$Us&v!R06axEj;xY+p4me#xJh-r2Iv7()G|*h$ -zuhQGD;Vy=VSPye3>Q8ZLE1~GIKuVX7f`iCXQPcfyL{HA$_43p%+8t>6fL*ouO*s#D -zbR?`*hhj$-YR)$Saaju#91hl1ii2|MF9~}t$g*&3)YdG`nLdQRIei$E8Ct#QH_#RZ -z0X-C=_$}eM40m -zCfY=kau==rYE&cTeP}q^8C$whokc)N%F~xEBE#WxQ=c7yAF=dbRr?W-npy8BqwGmn -zjA-%1JGUMCbYXpXTCjs!`ZKWF*V~Lg%Z~aKo(F8u{cAPQqIaZ82NQC9W+42hSul7+ -z`h4T$m|azfGH4-&&n3`@eHI|5M14xlr_|M`sk?HpM}^vr)18@#H%mfhCe6b%Pf~nT&M2X14$pW -zDG<5#=xZL_`bQ5-w%>FCihnEbzA>jAnpiOrC?Ef5+n4|uqL#NdPH3MkS>kePqtiNv -zw(EmlpJcPc-C??Fx|!&Za928`7T)s9NS$+Lgh>b)D+*#+pCV -z(k>=HAU=cDi76a7QBoVWEe+o-VGkgb;@Q|^so*LPaBL_PO4{?|g>x-Ih7WoE4b})x -z`*EaB!B9~*1(xb;xDpw!l!*VcEB{$?n=?SAWf5nIh+hi({QU3$rE=$BK^+w)x>rJG{Vtren-1|}F;yUL{zI||4o16FkWKB2R}hdtvDo#h?EG{y1c -zja3qqd&OnsU+ea3fDy~+nGg9Wre$N)qhW=y9QCzpPVaARYof@=vpnPzvzB=OH5;0c2!#Ou@S3Xlx2P -ztSA2N{IPCZJggAb>mTohmMuYbO<@g_N-~AxoLfR`#~|pg3Pyl2$AmIZSTq2k09oQ) -zbC)D4ygp`@_wL;L5gDV#clcCja#cmUchVK;MJ5`Yhtrz{Ib2BuO96I0KeG8js=*}~ -zZib?^UaK%sQ=`=*#VP_T=A87s=}5h_YHo47`9nzPQKT|%>q0Yww4F_Mo^07KkIOM} -zcpkRSUw~0Cq7h*D>d;ZJpczlT#+gv0ZS;oS@RJ$JwLHw% -zM!E8s(1(0183C$TB$)reGzPy6sr({rg6l93{Ye0k@pF`#6-Om9Y-d5n?M9;uxgAdN -zW|yqP1Zd>0MW0nf&gkAzvmZ^R5=cm4kl%Yj5YpV(8mbgCE5-A!g*4^u+oqufo|fkx -z44`Mf5G1x^KBn13bqo0=s>;3c_9E9u%1>>R-Sk#9PP_P4Y-?V~erGt;2HAs7KUb40 -zsZ5U*PC~`BcDW9zG=eD>q_Z3kO*W-N;=ZUKKxgqP?sK2a4XQ3k^b?kQ`-s#}2#cLr -zq9k~6smuEll4_m$j*A)j3!t8e`fxFK(0cbQQ^$RN{}nIo_eN0Pe9Z*^_I90e`+mH; -zE}>|6Ewr8ToI4om|GB35l3JtRy{Yp)%n%>n2vlza_>4ZwWp{t&C!~NMgCW -z-;utEf#&6W!N;fjW{NgH-MM_df2nCC%`yq5rm?&%}%J`Mh@adTiKlzhqksh -zi#jAI?H)6>HIZ^(4CNQME%*O&+b?&#q^`i~xqrBAQj>qU?bk&_#+6R0|8U#K|K+wZ -zzqswZ-~V#kpR0vzgr3uIB-xm_C%*;BOCdFJdjkqx(nh91mJzcp<042w$c0@0wm)|^_-Re<+e}$hubdsu_`id^9wKs -zCosYukGghQm^9m_3}j%+DH6FIx5OEdjXK23rmLSw7n%e7U)(kyW&d#6H!IDCF$n?X -zyRPc~memB~d5D`NQv~YHzv|Vuk+D7`1E6Qv5hH)QLSNv}+waY*gH_eN+qF>hsg|Z* -zBvik+ZKHz!a@(f<|8U!hL`C6bI-=Y^`6c(xOy(OlHUCd;I}Lz=W^JR>teeO^f;suk -zNK6P7vN!r3m74#SordE;5CkvnlKEp05q>;(x-k?Nrbv}iw -zs#Vi-b5~XMfCz{ayCkIxw)$8Dci*onx(V{I-$6m%ON33x!WpD=bbj>D??L2MWzGgb -ztbpkqh-~UR#E_rZ4z7AXH|p)d*uRkol1@#a*~&ry?6tqHR`fQK0k6sN|I2L)(Gj?Z -zcTZP)HmyFz{x7$EdWbXVr#t+jaF@8*-0L-SitZtsPb*B@Q(u -zK=V*2ERLYVc*r{Q4@Vk|T^1$8#{F@bavPtoX=$BJD;CWAA5d>~!SYBw!-}Q>2Bd)8 -zhAQ>u4<+wrepaWu;^2s&&lmr}XO11Rbe{+=F?tfeUg7()N`zkD-33V=h0S{iCsE#bWA{FjzfDnt4B%y3%xGPl6=Mdt11ZzwMT6BJmy* -zal=(VFrc?GI{G!+KLOr+zaDzBsXvDVxSl%W(TBcm7&`Lsc0J-tY>NXxAyZA80hmq9 -zL#7b~NqM)O)lVUsQ>udBD@m=&|E>v*G2l;{i-WYC3;GRpj~vpUwFA$Cb4b-2KrL7N -zsV*d87q8G&exQr0GFr#m-L5i*vHQW^pfneAxJ|u-3|!xg2at|%pXQ{a0|YH|h|{mi -zTIrw)nUpIgPYiFE(+1=74D50@_WGh`$hcL=*Yfm4f|#St#QKgH20p2yIm4cM6a8cG -z0uOOiJtsrzGXrO@4UMNNj7xxC>6ia_+u5mG2HV3mpNn6C!aK&UyXMc!)cx+9-kE4m -zcG@p*+e3h$q8oVqnL*%H_S;7=##!}hINthst=cj3QUlA@eDuwK8_#FahG!*#>83RU -zr>*Am#PZ!Sa_P(4mizLyhrhgSgfDL!{U}v1o7eZO;uUAju3o8)ipuK-bZOmvqUIfF -z?f)~E*Mxa_((!swB*D4=VakRj3sa?;B>2e2)C<75HLD=!ht_>r-|SScUf*)A?dV}& -zD1vZo`NNdlV9Q^;y@+p227`ZM`a=DH@N!FX7@@cE;Bc0!0EediNo|Dd+i7h7nCxOl$TV16Ym$do&1NT -z|3BRJ{uj61wf=L{(gD~SaoBoSxlUH?BSc39u}f@`E0+&%V>!9wgr1=V{RtstkIaI~ -z`Q68;D|+YrVEwB3A8y+}1ISISg|&8Mwjv5GN^iEI`PB-(|(EnBFBU5SUnoS*d??Xaw*Gv6!G1Oa%Z%Iih;wFCP)dNs# -zl9UgfbIgwfypoT3l7QSG7>DTWBqdiJb0R{uJ92Dy;AV<8RM7Aj`kv+wSW5-55X3JQI#-ro}@;K -z)7dgnqJuv{q!V@?T+^@i*do?M!p8@C6xq3_^%jaQu?{ckfb#`uKMqEnio_GW74Lqu -z({#Q^c1OoYu^dx97rTS|u&m+~$Nri7CPDHYxC;(yB0;x`oiE6Rj6->yO -zxY02Iz@NCD@oo}3VnxT}$MD7F8=NqocmappQBTC;A)JHJp8W(qVlby>J{cMoja~?--irYKcTk_fm_>wU6sDrI`Tb3&;deQv#@pu -z#MZ|L5MSH-s%|xxB7oN&%}y)YJc~`TR@VfSoLzPj9`EN)wo)-Hg^Wb@cjY`A8h;e@ -zEAwvfE#bqXYOeUoU+EvS*n`73u}9EP2h3HQ$n3IXx&2QcuCDJrEde(5GMxC!p!?Qm -z_P1El!pD*&IxWSO7ukUITTA=VsfW7$`uv(bt_>7-f0PqRZakYnyiw{GQvh!oSYv^) -zFKJ?A6!Fqn&x+OoZ$o;or`7}9uUd#Ihz4;rzV_DcWaM&Mn -zdS{~>y3`M^_rK_D{UT_9KS1s0L{4;xRN602ZP*PY2r%UV&T0fKie^D5&=r{pilE=C -zKoX(UC^toH_SDCn<+b-TvOp{aqRO89=Y%>Z&m(VfWbEoZsHzSS?)oi75O=T{AnDGY -zxpKz_?|{5+$U>PEa#(qgE!n6ShCKfI^htf3f8RD~gt*3|ShyWZ_e*GQj;A{=BL+M6 -zG={tHk3UPx=;UnP9(IoAf1Mdwd$le3z3ygL9Cb~maQ`s#?Y^j&?0O!oO_;uPNX6!y -z4tigF9Iq?8yp1zlxdv?S9r$H$yX$hCcKQ3RwkH&y3VqV5!804#-!2imnMLx4JlQR189~>O?kr;jSD0I_vJa9DD-Kh4tn`DjV1czpdO|6N -z>`}%sI~wzv-@a+$P$LOlhfl}fNO@_Na*hl2`}%N+vK(L5r%H#hGiP^fQW<>O-2R&WB1!;Zqdtq@PYOa-|P3F4gC-ql -z`Po0U4W{!N>My+zfK_GOeR7ULG@-zyb0i|n=(m#v_sg?_s9@14Tn|GCZe$tr6Bk-$ -z%i(^;I9{|yUX=*&BPMsiWpn?1JvG}HOmui0^275!ucE`j|Km&z*o -zdR%Ds?9l~$_DCx8TyWd=7#)0>_^kK1v66SNCbvVMIcdg6h(3UMi+&WB>27UJrX6#l -z8^O>czKq9Do8kV9Q1FNqI?Wo(1T4o5f4avawhA}L^2#l&Qxa>q!(6|Mus8nxi3RrgsTWdG4a?Rya{^aFgjZXX -z)EM)6%;F-?4_E|(HcWbJ#Hc5pmj~00o!Z~Ybb-m!=pm^^4A5OJk{p{0B0OTKo^)?4_Owd=jciJCn7_XG!<0U^lx|E>$ -zpxM>QXS0}M7s8NCY&zi5Io}q79LykYP24CN3N9Tr4-g!yEl30F48pi8%Ug$TV$E!3 -zK*7+`r3}1&PYSrt*D7szZZ)8EQ}vp2isE;4@ECITg5zt#_>O3yj9XSTpNTfd$8N|6 -z{5Y&Jsq*zh>Ihc^r+WQmnPU6*2g+zE9p*t6WL4ZDEmvBoS=_viDusbkXjVw1Fko-0 -zH`^?ZJnA`Y^>*Xz0FJyW%e=ULW4yed`79i$jm~?Lr(Lw=s9t#x50=AYtBM$QbJ%9k -zWXT*r{OWBnlsFGmBGgTa8+K~HP=0tzi!2L~(k54qZ>2Qd4{wR~W79xnnS-h>cxb(9 -zS=pV*Kr*Z1Cjis~*FUIp3N`YFhBLS -z$P>icuF;es&S~A%7U^Iv=0;VgkhP~OK12bCXxK1EF?`vi -z@G$V928-7rw~6f_vSD=oqUTVFiw@`56n=xn)lY9n6a{jSKYRzsA^}oG^J93WF -z>yKNCjKpMceIz2*`5A|bR}K%{4Y~ay$Lc#ySx$@!asYn{P`z223G#({>7L|A!$DQS -z-_mEZfWY>@`qr5up))+m^3i3`E=dXj#(P)tVJ9u&rTh(8!!S5|tj!nn{E$=a;H9bE -zS-8 -zcc8L8dFL%Jh&>7-GN{>KxGB$QS8E!5yeKdT^TK4uX^fo2wXw -zan$xL`~J&muzu-2( -z9|9-wEc*}f|AN~V!$v^hAY~(oOxyU$_^IO_y>V|mW)cy+P{01IZX(kizN&87d&TXO@aZyk -z!(q`L1Lc_U=B9wUI}Xeg+xq+ZD#xmJ(ohCYuc1gk6Ev3_4j9pKEwwl -zY6gD?>a`Z1et^4A1O6DKHKhZ%cJL#n`7q{?@*WNBrMyQlpYrd#wqE5wXB!#?iH8$e -z@I#L&&;GiU2V>t$(4T9BiekQNnR>u5@en(0>zY`GY`HfeNRU3W`1vAkKi2}>k8t?e -zELI3PX3Ewgk|h{^pL_e|ZH(Nn4;sIm17%2eNXc=pe%O2yIS4ahHQ+YbK%B1wb+*`2 -zU$JUX!>U!d9i|Hbr`TD_z27C0%xyd0;S#pL_4Q#O<2B-(#;3|#Czdlgu!(E -zwk1CPcUnL`k+g`L)eGTwNqw)M!#DK3=hS43yTa@?+74#medFN}?hNCCLd)@?MU323 -zkja(T;x$mls6EPJS9)v(Va1a-&%ZF%{n?(j^4Sqb3Z#~ufz2nd9)`W{4CJ@*{ae30 -z9 -zMx7r(dl<+$xBE>vzE(7J4CHy2{o9fU$+3}>B*SsqFdYqxFA^AJ;!S`JslWDynn2|` -zhCB8<`-NY!qe)n-(KApbaSA;pO^!Y_zLksSB{Eb%Q?_@5u??De(MhAZ0rQ1=F>39{ -zXsEV440N5L?{>Da&l_sm1F=s}(F~qom0b4kPHx^P?15X^j8GFI64&{vUh91oLTbx$ -z2BpIRTd|-6{pzKpoS_xq$x(RMykIE0WnEx)RbdOipv9#43&mx;-P$Tz){%lZ?#Z-w -zH{dgY#`S{*=Y_efLyW(umNU7y*JUsA7s?6w(7kOjvQK2atAqy!Ly8xhTQ*_ -zYoy2`V-RHU?kbg6w*Q`8Hn3fGu#g{)60Y*SyPKF%3fz1CzUqb9`R}VN0g-N32?5d# -zAJ&5~rWLq0l1SuUW5`!073-YbYk3AZZXTp{JKb*KT=v4jc*GjS^F3eiczB1&gMa%< -z+^<RuX^IL?lxuH&KS&|kc`b_&{FgKtI$RvU6q8$z$@MGIwNuioP -zQ4g4ZD-sWNKu_I#EEGrqn`Bo0Y<~W;1Nor=d1_?M(?cM~gRa~9%Dg7JJ3{tJ<6~?4 -zgK}%e{+;MrVH}2VAt?sL|Ly7W^CR&A%Jz@Ox0~)4)2m|NG7pZWP_g~jJMUsi(8KQr -z#Vc)%sq&7U`2HIV4f$@7)7vy8Q$$RmlsNt2j_^2$WKAim(Mf_QLEAsOBowJwfJeQ` -ztPOFzu%?&BuR-WUqkjDruB}cfq3`b#Q*);p56__``aTobQ2>`GoQqpKY>PF@E`E>iwlu)iy>Jg0YIP1EruZkI!U -ziQBGtaohKXgb-(;x!e}i0%M^&5iJVQg -zqTH8DVN<37XiNu&7cofH27(%g4q>(}2&1LOtQCv=0sDonhTAqoRHJSPcEu -z;m{8E!>(N44wvexJI;;pWqv+tx@=6janduFk4pe%(zXInpuS`mzppvi;|*2cjG7Kj -z7;%1RK?LN^YS8rO45V#;irUu-1Ih@dht_MM$m))MVK3ZeO-aOHkm&#-F}H>p}T+q2meRNUG{IsUX>T&$~3$z1mR2<7W5#jsMA*Y;j -z`DvM=H4VJ=U77$@rOIF}G&D4>jWWj%xE2w7mqp^xhLEyw5!R0zcwd8dhY7DEu#3%5 -z31LLkb?_h)Z#jD9af@v|wrGBt#FN#KXmTy(3aBfpTvi?d#jzS5bz+s8*NRtbSkB-F -zL}rjoh2NUy0Z<=)B))N6aEvHl&Spn^3~$~K^F>1^$)@mo1!=1)F^BZIqqWB`a9jF+ -z!0ljULq_7@4Uw@gaC?I3Kj8Mjzu%&}G-&*2s*q=w#o -zL>qFvlRllHugzmR%s`04IO{l>ldu|3s|!t}F!K|fRT8rlY;s2&GcAJt18fqcg~=wU -z7;tVpWd*l+DK7CqUFe|ewixBmX;QFeUroP)cCU)so?gxmA@6|XWMF~BEz`{!+NwW= -z@k$*AH$g!AD}u$ToFX_%drN`#?4`2}tlbJXUgey_Ik;iA8^}j;9qdNY&>3__Y2(4ZgeXnW5C1*Gb_{XV5|1UYKo-ihF_bq`o+9hRq_ -zAXbE%O+$_-mKb^Iu)_pbcUH6d+_G5=BSr~+xDG_(q~S>-;sry<&-Zz~D^@uFonkkr -zK7i_+!2UbtPpm)?xbEq{D?mj0{iV9vs_DzM796Dd!&w+-Ng*;$EXZ5^k-ux|S5z^Y -zbD5L{dtS)LNlNk^k|VE%;}mkx9)3EgSR~=31Xa_Z{1WO<9We^FJVeH0ucXH{l89h; -z2#2VuG+=JRuN!D`X3wcsa3$Hbv(8bv#dz$c@Fcn#(L3gwI_u|YO{t5ru(FI>mbe%F -zP8;Z!c!P$pv1xNovwfTP@XAr7WFdLyhk?}%w{+L_?yMUQCrsMvnx<1R8WwVZDc^?$ -z>nrczrTxy@Xmo!WO{%S-DY@mU+EE~=KEc^o6&=EoO)XwLgU;LSooL!v%7}YWD_BaZ -zp@}Df5&W{YnGO@^ccEVuAP!QFtcIC|MeIX}gi}P#OGjlPl2JhqIyQzGo2MPz)y$&Y -zu=zP!fAjhNxih^I@fnAO-z%XIovV#+Af^C5?T$9@!2=-|N%r{vRBfN(u|5hBOkdSm1osbf2eq}D{dC@#CTjnMn -z>-}BHM0n7j7GwROmEQh3PO)$()(By3%-G%;VUIBNg}ddK{fD9qEts=&tg#PFZQa%FL=uS9IW*uaY$ -zFhl;f{<_BQT5qv~)d366Y;l7(iU?Lj8a_re&abB>!{*>{YYmlpNp=lj2i4{2h)VEb -zod!=Mc;-oM=RUn2_($4Srf6Fr##9IiY73xJS~XTj&{@|0mQt~QeVG5yuNj;CC2h~e -zf=9tMKb85lh%H+s(}wfF2n`Kd`Eo$9zfK!e)(M(l$&XB`l4{K`tbTtO?>EgV(DUu-D6y8;XigX-DUHrB{=vgl?GZD)Xu&wtn2eWy^hoF^XAeu -zg>%RVt$PFNj-t18n;AJ92$MWxU@Tl_M>}bM%&H%gGxz$IiBMt)X?HCG1<@?708UaW -z@p?r5I!J*bIHD~mZK$*Dsn1+`E3v2S?Sdf~h%;UU3w-rzGTr%1gQfzWS!^frF5$UA -zZp!fNOq2)$_VBkyynqnS$0Jeq*If$~?g`*MlRJ0hLjsI7*Qo0y`obTFr^(g600sV0 -zk)ShGU)p8gTIZcJ2r6y!N -zP7+SL8%!@ct -z`e31jcM(*@3sbAq$cDOYU7vVb!-REIX}^*n(oF=)Q1gD*6I*^*ql2x=|*vW;fxXCM_ITDv%{tyXxvB7#^mSCC6qmIGRy4s5f#EHh4bIewmG_BZ(H@+a* -zO04|+lD3nr%lT{LID@{VZD6;i1Pt{5NZY4h()Kt`kCioFPiuNUK -zyEzAm_cW7FLQzoV%6>`P=WDDMUB?T@aIjOP*5Awjk+w0+pB2;#h9<4V6}-efh4y6! -z36D%-(TsdQfb{IOD$ZF0NrAE356pP4j&5_&N7Q4t#EJzF7-4XF`@PaTnAOR)-}`G& -zaNUD+bwL1nb7IM9$2-e;{Q{lIVpvvYh$C*6_Yn)pd3Cwj9NKpAo~l>ULZB2Yl)8D` -zlOXaq17;^)?2g)wR#J=Uh*S4qul8?sIdkic*kOO<7UG;Nw>_0jII^GW;OMy8#oC1F -zndRL_6~Lc3B5bqfYn(+hyMYD=WV9vA!KXEM=L@@yy -z#6$&4K>rU)D^Uk<^a|ZASHrz}cDRzd))Zv^+WMFDju&tFC_BTsJV0%_V(~`CFFDOi -z_tkYvevt0aK8j!o0i1)eOi_p0@|8`^7CEoCw8?e4;t*#SOZQMI6dr^YvnAiAJ -z0#=5&F_clLeKE>2etwD)GRUbFILsA}8)E$>WEB@4w*KACOs(sBT*A|6|Ath007l`- -z7c1;h6h6*bRDlYUYfzg&(1qXQ1M+Evmy}8l8>v~>TStYtiFUtsWGZslD9Tg9;To&F -zmJ2p(Q5w#UIu`kL(7@SYX%StqKQc=3a%M?HYnHas3~js`&{{Gj76?GfC5Ql$Wm8$B -zBF%8Let?4UrUYFck-RQtM!&U_^^(tnu{G#tcFBm!Bq5m=`l?5hFr!|@PXMK9@NCAQ -z?oG8CA4x>o;Jgo2NgGc_qR!1Px<8&d-MA`tgXukGw9T~bG0c?)DZH61h`#NCN#fBCe4nvb$IVRhie#=>ze$qUR4p -z_zeqq!3_R=bPrBAIyFPvyc&q=#QI=0`POySNJE`Do6z~!+j>xsNnRAK6f2qC;86uz -z_RPX)nD|)Z5!73m$XB%LYZd(~VtPA6v#T$p0FMd-oNK?qZVP-3iyt4I^1}OyMaIJB -zj3vUQ-1lifstH%cL;gcvAmQ)0_HU)-@xm@zOWE-qMS4lm_s*XTw^gX0C!7~LEu>X@ -zI`Nc*Z?(Y=3CU+6hb42UOyF628BFR0t(l*9bX4to4UmRHIyiG@6lFALuA33TV+(0tQcd?%$K)$&Y&EE -z-8fSc)|ThcR_HU-Vj2PIOC-DDQQ}wXlU=*zR@ur+mn9*T69R5kn;@825IN5@x?xHi_OWe7 -zfyFwUK%uKYx<=xH5cNsc2ERCEPAe>UE{g{?)Tj%cYWQPyB+=iTQR>sU{lUs<3HDf$ -zB`Q429YZ}H=!^|E%@J3lIO)VB3vRVY%T;5f!4Q@71Xk7oQPox%gW-BHu{k*Y;@EIR -z51w92e(k)Z{%KCWwSL}pK9}5QkC$ZoVSm2`sEbhqMS^2N4$r0sY8d@ -zU2`%0l%(~$auV)5!#|(OQ1C<*2MdWZ?wTXr5c_3<{pWoEs-I!VKBhuxDLZfPk{737 -z-Od}H6AdpjbHt3To;VI~R8v;Vl|thWI?R0&;sOJ)BT|ckxLF$`YwIPmL2V&fG~m -zVjyyINLD+);Uf&s^flN1Z~)$aWlVcw8tbHv=*D%zpCexAI%OM6&l&T><${2;*X0B= -z40+?wJ;>F@il(`R^nbt%+v90Zf#enXV;cXut>lC@JeEy}%IRP;g0UNY9-E)dtT&?A -zm*q2dm?i*tkgf$wgLOgvi85! -zwp*)n$nOR?rs(K@_)0@`5quW16}Mm^mQ -zzuM$!9S(VC;F`u2{W79gQ9bU6v;U>G1vyVXM}H)*f2r-@|4`eEx<4ZmN?uH3l%<(x -zCnOI|Mk|{PzDJM%az(ohO*{Z6!g5^^qp1b5_2hZL1E(>#oF5h%3N$uNaE^uZ1vDwc -zsM&7$qThDt4K9EZTU14Z2__PWkqIsq28_o^>Fu3HWqJvID0-57^nLn7AMg#Wf}{%L -zHUw8ARw+@f`o7nM3mLXroHUr6Dgx9n7VsPkgtMA7EeIxkp{lSVa9LUn$b}s{S8?SE -zfQ&^Vh^t_1<8l+Ly(`y&3zIue(bfU8<4Ts7d%d>;pc=;cFah(>nHPXXPm45}7`QZ$ -z1m6D2&dX&lNgdzk-J7Z`i6x0&_N<3%QJ4lC?LfD~-d%-n2*cp!)f -zxFSVji<|g!aWR1{35E49XinS`Kc(4u8(eLaX(yOpI%9k2AK_FQc8{7@a1szP -z<_%96`e=3v3?)cZ7|Z8ZN{WDKUP*rNSQw4nPW*wJ#X(J3nAS1;T$k4+Xi4O*Q2Ke5 -z_PYTL+lfnhE;2vXw)S4uKi0OX!qNYBgf$p -zV~;_~vy@enE~(#x3;gCZ1M*o@)$f*Vh_p`omRS8xbj3DT@o`(YO8z9U3UXc;Yx_hv -zbn+6UEOZFGNuD#yu*hkp(9NyuAVdYO9Az>)QWjfiA@=&Y4h7;Z`c>*vu2Y1wA -z5rU0CYl}gML4ocXzDfsBccUxnRLx2Um7ElMWZc4y#()f#={mN=3<4J_Hgr0DSZ%l^ -zI6z}w?!N=OYMN#n0l84nRGrhV%(;H7ZLoi=?FhuAA8UIm^}ns{FzZ;iiYaVV+wHNFnZ=1;T&R)p)DTxPL;bL?T2`D}&-|~o9f>ax@MCRnpqdOZFR+ed -z5AF^jPrd~PG&n1XvL4sBF^{DRz@d&H;dHhf2DyXw<8Ppxsg(+jGO7Wha_`TS%y9}y -z1DrLN)K?3`ZMhLhF;&9r7LG3`LjWmK_iKFB1TI$d^{p!Nd_~lx^FyK0O -z@4OihcZD0ZpyK%|sTC-Zo#bZuI=~g)jyp`Va_b>4=w`(LP -z&N2)g^owiob!+qS@CKUksrYdbw6Kt7r%Im1LI#Db{=CV;E3*#`x4wu*Gj`}P+4X#u -zPrYMX;W-u(H38^;+N8z+kDaC&B}~@rR^P(|>>mi5LbLi;z{a<;frNaEg69dcp_Wwu -z?1BM+;|SJC?;0$E0zyx8y+CuE_3b|nY%qYg3{L=YYE;6ew(v!!4Zv9g|5)28m46Tv -z|I6C8|JT|!drl7iKh`#8wbMV=_F%fv>N{WdQ8zdokRit=jH1K8)^<2Flzm?C-RM8o -zwvhOLtZn-LZEfSg^dfATU!gqwSldtkZEc%L{>R$h5E3=`v9|Y+>Yp%+Tid}gaJI#K -z>@k4gDF*hh53cqlR`FZB_5U(Th^bv(sa|f64?K)NAAk8unNl+<2r^vu_k%Be!0?il} -zXjq^GwcGc1R2~M){G|tvt!vzjckrqD3o_is+y+3_Rp)XAFZMS@0rVj;5^-vM+xA6eZnu@o`tm@TlvZo3+zUdvQ-*m1kR4^e_o}-n@zp1C(D-`1l;@izJ86$~I*57H6F+v}XO)&X -zCe!MiDY{DOQn|K0T{c?^5LJTen-U@apNuSlAliX7C8p4ROzHUeCYVTr4t@5hxZ#h} -zQl>$iw1j!>&F9%b8yC3>0+otm^vGz6_7T$x$G*QKhGOPmW|d5*n2UnT2YrJo8uq=7 -z%c_ox+FTd|77BY4a`^@B$osAFPgo$X`mAo)A;?Ecn#ko1Is-v-00@H&NF!jz1z=8j -zS*g}-va#hIixsp@6c_hxfT1B^-7mr7`reDz_07n$QUr&{XP5A`Bzk;_)YnjY;BR-( -z(sH%e8sMu+byfVuA@{)bZFBmrU6Z*IoS}vJfaXIMhi+g5bhNI;x*B` -zke>9pXXkf76{ua5xIP7Cz-W4&bwU`Z5 -zbD+L~A~v-mOi9%)`@gMixs(kPZVn?^YfZ3`Ah63*Op4SqcUXnGyF2h(fl^(DOjDFJ -z?43KwpkuJV?Z)vB%}+Ysv78A@)n`6JDp89;k)r29b>hgqRS}o%(gGV6!4 -zuu?E!u&gi;{lN^Kve6A7%xmg|vjZgvmaCGvv;CC7e9RJJO -zzQ|bTY+^nti2kl^gH@CltIru -z5o!}=H$pKxR@`mUn!!9*>IK+TdAYE~C#-sZc~5PYB&D;?73=N@TxLV~?c@D;dM|)( -z2iwB1rnKy;=NT2j=Q}4TXBV0ynFb@i@@Vuc#3x#8CDAJ9#&d5!*ed}?-iRT#_ZQ>xQF?HS@#1xzn@8~U>6RODRx@r2=hS{TwC -zbwlQ{$YGgVr5O$LB+Z9ixSS6-X&Y(R9V;HFh6@niQUPqKcbCNb-_}}#O;{lPl8`o -zw+ez2?(4kPr&UN-d_KQtjprdwE&B7xV*~tYCk9sp3uL&3*s;e_!|Dwo#PD=Z?Pn+V -zKX57H9*g&!B4$m7YU6}`tnn<*Fyj6!M6>7aDB){!i$4!GxPdw5#`(cJBOGDCTIE9n -z04X=1onbfm_FH`K_l3)gMgQ;IM){(F|f5sUKaKH?BS7VN=ZdA!zThAfB2pBAX? -zu+N7zxfH6PyVaO1hTxkid_q31DUiCUz%n5&eg@7lT;xqyCbOAf_GqQNy+TGcH>?>L -zSGPyj+?el)0s3GdGG$5A+4=zIVJxeOci<|Z1LfXh -zB}aE|#ymR_k`g_%=NL-cldE`5oR`(GyTa6?*k(h`$7O3iwRiY()d#RMyRuXLZ;VPz -zl?hDSr^PI)xyl5K#NNDNBg`5-)Q&BY6y$oL3>T5q5QN;;%!A6HF=oFyDS0*DGTe(kl+$Bds)BlRS{ -z1pW(p5dqoo;T4g>_p{fGIBI4B8wcfAn>}B^vZYOB-~M#(UntiZ_PrpHrLCzk>e6V7 -zlRX#XZwy~nlA^FQ#&q&TnSAS{*fV=bAkOsDkO*i56bs9xHYxt>A@t;(@h1NL>R|Gi -zg!)Ak0IV2V8<|!YlHw!VAL6b{rs_L$pBy(bY%q>s%ooB={B;sh5wj}N7>wc9KKG>Y -z5Jj4yw~H!}H}$jes=y3k3x>)zD893?81Ket$s_#5n;gLWeqSHj50n{7DDy2BH3$Ib -zFN0EK88r#`jL#@U>TMQ{+$I}B?B;n$6qb9UC+rp0=_;_2mRVZQUXSFoz}6kiM4Z*j -zh6|VsEz{IhwlZ~$v=hDz`E_ge934GW)aid49q(V`X=lBr%9Tf -zx4Xd_&}x2FVuJR9-SNCJ6i8EyB0IIND80-veRqWwnp~ma<+jpN%Ia1y_=E(9p;8p%6dS2gYp41V^q!>#)C1Pk#o<4K4 -zC@pBS88!@EDv<3m^AOF<9^fHn9lWF*ePLdib;`~~LWjvKqs!p)WJDGQY}7^tgqr0!&n~BNRE9O -z?3wheZvaJybJsknoLz(}hbX<`l1TYi+Urtj(EW04(yh``N6{LgT4VH=B*K8-It(|e -z%Ua^)>^wREHqK){JZ&C6kAA7<)k&L>Hu|01Ps9m}J>mhc!1|c8{A$ -zGnf;kWsLitjuqdA4>O#cLBU^u%gk_-#tGuyQzZ5FS6>y`B3Wh``zheA5w9HBTv#J- -ze82OUxT`+*#)AAntV`&9rX-B6(Ka-5JLygscOkP?M%z~Ti1{KKMP{ao+zXV(r)`(Z0sj&n&dMPFZO$slXF5V4v{I*xubE-D6^JH2{%ut3 -zUAC_9ux?V|Fg8v`b{MEDE}+%QaG{jV*-lDnP(awl+cr|0_*(J -zK16Pm#k^5^+@eDdH4^zZEbztYms2-vHBIy)-lH#LEkIOIZ70>J_8QeC+*@xKAiZ!7 -z3+|fhLsEbdpx@`jI{>$xISa%12-;2TfVOKNBoAA8cl^axep)z7e3@w|v@#LNW6Kfe -zu$kJnu&JV~b)>=5$Q%5iKbxg#0cj+6GZQ#zmSxm}JQA|M6obioC5#Q`&(4}*9Z=qR -z1Ubz|o3(Mqs2~dm=ZH97!TxhJUjizy&WM#;YB_*U4r!0oymllfZ>?CR_abjt-S>Ce -zdXLNS-u>~kJa?l&-mbP@6(2}PHM_>{eZ2fRx@uoEe_YjUY__mjvXb=f^v=a7+{}Yj -zR14Tg6ytcb6T -z6?TUxR4>asz>np95g~GWzyPCVA>Lc=1mqOgL=8v?K36NHIq{H*t}*w892yAmBHN!b -z^+k_t;Lt&fh-zel#*3brsPud^Bddd7M(|%3JUbt36;EitJRDFRrr=O*Y`H>>KW{uw -z<58qa44eaHXEb8Pfx0&*kdJ{eoxCT4(4G|1ak=F`1%_zFxDV#y&J-*liQieM_Tz7F -z8kpITRfrHmEwC!6lE@{S#i!FJ8L#fKO9H$?1|3bUjeNPxlqWPK6NRzSpAlafHS5Th -z74cMWb|la?HB{DYVe{?U)mNIgnA@|mX0JHO@GbVx<|lZJm#FMJ3VtJDE&CI%@;Y&U -z6Qt>PyCZPr_1G4rFdgvKhLOB74~G-ztb%;}@yrvL>ZAqSm;S?}HK3q|M%CP(AJmzn -zjRAUv61lZgN4zB5xjacBm3c}4A+vYGhR)t!uJyEBPQbrx|3cCgxFa$-c$GbXgPKY6 -zW$?tuw3$v)|0k0s!zA5aKLYxth#JH_pF6#E?Hf&5X`41IhehK!%Q=Ok3~$2>ex%7W -z7JIena1e;Y@c@kzN-chi>yyHTh?4}&v3SQ(7S@z<#-%1v>N#ZhFYW6dR?zd`P&tUy -zV9ThB@szmr-qIKvR!r8<_U3?9N^f@KFVS9N5Ju=MPB|L@QA=>746GPb}A -zB)s(y6~K%F{kaIjuDqJRv0408=UkSt$@%OS;*eF%=eU)zV^LS&6)*mBzId?E1t4`2 -z*R8hT`^1`Nq1UA&Y6A$wQP5ilvd!4mVSkxPdfta&<+&kg0y -zeW)S9YL044$CPL)=N5qYrh$doNN -z9H(!b+pVdno3+J2iSv*dOlBhK*v65_<4S^;Q2#EMDeRi7-CJPWpb*jKrDJM-YIZjY*%F{fhq=wAE_X3{JF4@ -zG}C@ULspYm+BYt0bjHk%)tKspxmm6DklsYgn -zT_ylT|Aoh_bFvQ5tJMOE-=zLsg|1iOLKV_dVW+2`{_$$-MsaOxz^+( -z7e-Ws#id)7rw&&Oj6h@1GOkT&TiSg38KKcj8@gcp)z(s@NG@P=BAG-LB~+c_`u=Vy -z@FdVEzx1f(8Xha_RZwy9$hZv? -zZU@(27MT4HDPg_XN9QMt9k9jhB;KDYmRC0G?S4kF>8l1~>nr@R`_1ay^y7Y!03x6P -zaTvjG5W1!v&6#%{_l9Z@l%4SVzqSE6u#j -z<2Ou}u@%7H9k~O3amQ9x$=4uhnMX=#n8Q0$O{FNde5Z&UzObY+U8U++XF$PDd|TEa -z(WJm*b0H;p&0UdNfZCMDT@A2Ou%(9=`*TZ(U!}<~GhhlUS;Svqw+-IgWp@{(A{d8` -z<=}k7ETO|wXf--zn63JMU+8d2YhqwFv>^shnVrNogV8JUz5-ExFNxAFSn3A3-$%s2 -zfcN`5xXtwmq7^0FELG4Li7E^|EVU{2naUuIB3}s2PTMi!(m*CGTWxMf#cU8zEE>>v -zFx%gj7;^I|D%lL$Ri^aTxZP;YA%3wqUEFK2D+pzSIUkUpvK;2LO|JGkUm+RAE#0?LS$_Mx4j9|4%YFZsiI -z0A_G=fU=rQ62Va8SuHA=vo+2$^TYT)eKphhOjIG4XvcSZgQtFSN&v}EuMHx9!j*s1X4zC -zq2U7imYoXmBPS~TD}hp?Pnr)e#&V`h_h8@(c(eg@F`J4w=1LtYouhUL$J4cl4B^E< -zUxjn#c^VE2@j1SzE)W->X~gP?IJqQ9r8N|U(W~Y8fizj`g33EJ%?iAeN14%40fi9o -zCMrR(OTQfjy2ABip!B-36E55oCfvjLG<**^A=au{$B@#{1u6|;JzO^OoZp9!ue(1S -zFN{n{mA&u9{Gmdn49HZ9U+Sw--?6Evv?`RD!5QU)_Rov{K)&pp17PbU!H7f3lgtPHmH<{cE;%Ilmu;u&nXmZ}hu%#or|y{V|J8#>;!>fF&%E6S)ddvtMw<5w3NW4(Jf-TJ&4{a1p#%q -zXI&WyxA4>OwItF|y*bK$#nIyQ4*8ZAjEpS -zDevFfBjhENft^W}pp0WFmfuA$Qyutk0twupH)&ITrC^XM>KS< -zE6+TS{l-)Y6)|zE+=X}NdV?x@E7ax_G!N00E2XpXOld-5p7Pcpo&u!{oLeB}z -zp&tJs0f;ub86*)rm7}mcF^p60$ePZCj{}KAg$}b6LU}}4v=>V;cn^YF9~E5N{J;eh -zMokU218nDPb>T)|KWX0d0_*x3fiQcZv}PsT!0cBAsp;ud+l7a50{3x8bGNC5>jxC% -zH{`Wm27|ZgIgBG1nt99-S+s>IYhWoZLnQ%a)&zyJwgRJJ4Q+F|eOfS>i60cc;LnY_ -z--SPb1jVMx>W1H>%HZfv-1zN;Q3_zdVY_whTx@gj38`fMx@r+t*GKh64Lxq%J(^UJ -z`L6&2P5)mZR(I>3G;qkw|ESSn!i~Dj_(>=lOONW=KJ~XoB5w4=5P1PpLl%?`*LL?Vom+Sy!V?_`mB_IDO)a2^>eL~xWCCOIXK2eR11BumV*z!J|^wAL|q(eJ+t -z38}0MqbDwQGi)LNhy!u^Vh~O@bXLO$KD@Y!Ig$$(*&f;{W(z# -z*BIia%EBOPX~RU2J{>2gJB&cg8N`8rf|G|Ni4ntJqtNGeS&8QWac;w19V+qtwZDhy -zM#`;h@TO#89F8VL_Xd==421EL2j{o -zhHA6zMdb%>Xjlvu`?NRUO&X=9RfrQVwDk6y)FPkCi;Akd@PwV4^+BT5a>p4;r*3Je -ze@@!QQHLPqEPL8e{@ep6mXpf|SAs-G8x|OXjRmY<7AE`-SRh1Gh*11fGLdltX*-%5 -zgc>RsmK{%jgw=k$ighyIbOz2Peeni}J{OU(#<|QV%?GcJl@nuii-rIS%AD8Kwfk(t -zp;WzJ*`>0jdn!3(rs8sm2bDP1aub{_(=zH%aWtNnw71#4EhLU~Y_cjX%>f{g#DxN* -zJGHGwnAGAyvL&5HEKL4+C&`M0S!`kfD}?LBuIGqd?V2^3)s=u1kc~%Ti23+6(tg@t -z+j&9oKE0PUZ{lxhUzRnmN{?uOvXWbm=OBMQ=+qHY=!U6k#*+N%4E{3jCOph(xY~pS -z@xGyuL@>Yth}cuZ<9-bYkNZ03UGpd-pt?GfKRT$DN#vM~a42g6%M7OVd>Eht_Ca$F -zd0pdQsSVERHY82o!o(!HQB}h>RdY^*#Lt5Ox15-Ijl6<<@8-G+n7G9Az1(=rcq3_2 -z?q9en)sd@?MeN4x_x$xf>%Jhv-R>J;mUr0YxvnF5c4gf2<-e2g6;0La7kQ_&5~M)N_;bxuj_Gh -z2yQ=&)5(NK3nF~MXEkAwDW5OnBel}cu!8%o-bZ?%+uJn;_bIGOBHn-MHuNzP7Je@H -zk`bf}C!FC0kIN$0cnhtmY;GUCrJ%Z(Lo>zu7(_44vtWUEJ0FN(pe9K2TJKQIiFy0Y&9X1KfX^!E}T3#Xq?U$c>VqIRnM=nk7QDS -z2k}l)JZ)7b@dPx)M~bidjT|*~!Zq|o61PjQ}VY8KuEo%Mgt})oopfK3V2;gY@16P6KMdt=S -z0Y{_53_t1?_f&?L1)BSKd&c$jVcF$6Ym7im5#8^dtTrn!T-5<_aO%jooh(92B#pAO -zrsbWQb+qgJD67{DIO3uj8u7m;6JV0Ai3LF@{nX$IcWuLO`4m5x<3Hd%Wq}Emt## -zo@ZUa#UndVj8pc-{YPxsR~=Cgd>apRm${1(nSE8eWSFW!b>x4&m|WtB^gHOk&f<2J -zFUpX2kS^3t$q<5|m4T2mW-76S2f03)%I83zOdf7UM(|r(aycv6K1Gy=GKV~5@Ol)& -z7TCU}rg$b9aO^wO?@BDHuS3$qyI -z<;TIl?M~pN?0!V^`#jpS*Y2jR(*s*mUL`ORX3RgRq!>LPp(=>WXFTlRiT14P9h7** -zDIJzP*V@VpIn504Sf#qGvJ(9aaTm=;M;{Jwq -zOs~%+6-RMCCx(hoPXZEpA<3zZ24S$C-!l<4x3i1&GRC{>Yw=`=%J9l4b(TwB)7b%= -zf8n#fA^g5mVVO{vRa=lTSU?~FL4Em*TK|4_X{HPQ-r$zY-DPzd$={@gkx3U6bjXM| -zfnEf#5bZMk^T5iAD$x@Di`W3tPS~-84Vt3&IepV7e!_7$Qo6R{6aYT&7S!%9?(B43 -zDaItn7+?+`k{et`O!f2N2u_5jDJ|PEjXW}iaIVXoJ@M4NlstQuwe4GH_uz41u8J=Z -zSiLsPWfAcijzVfCW)EfvB`u93``X4En5rA7l}{g;cg-eGe=*?Ko-OqBgx7&9nlT}1 -z)`w*~5hKs9B_X(?{EQ_IshD2|pDs5q40{pa -z1IO4dTAW5_0;o4J-luZn`zgglIvrgh87(f;V|#s*TtIlO+!^LFGF?;b!)va!BKVP!T0ATmn(fQW1QPiPyxWh9MB|)Wii5kNGszKBIZ(a%lB{w$Rid_#_$PBN`K! -zIErBu@4`w_S86U_EpS2vC|Z~?;_^;_NPr5LhVy7XiS22FvqON91rQ%he0(M&>aV5yc-=5mu2=eIKOWcJCZ9SuV)Ffhc -zD5EKXeU2(MLlKTx8>DTSV4H(=K?sT!ZQODmePW4yUKRpG_Dfzv!$Is~_%G({o>p2a -z`Fv@#3X%3Uf~KerH?LUKw)V6Fh3PnU`A0~yQk}4i>hYDm3~0TBR2C}tvV4kFVC`Y( -zJy;HSq4;NVo9?2u)dZ3aHbj#3J+mGSey#D -z%ImP{c4LB+7hYJ}07;6*Ol3&0y?>KVb}GH`T~V`k`o-M`UwY4K)Hx(2wJ+TDhSBB! -z0P#w72nDTjOW0XCLFZx>#5umz;$%I)Iak(zF$kW60cw=4_z0}&Pbsw#LqL*;6x!E3 -z-=+qOx+^Gi+dONfx|BUjFOP{?9CSy!LHkpx7wYjx|52xd6PD9$SZ{{TiKh((X{;iG -zm&_uV^6R3#=8uB@{%Wkg!S8bY -zbhUcKZx)bRx>Gy7yCmJFclmmHv%}}~esBFY3gOuMxkKj0c3U^>ZDDxAGY47~bEzC>aEPPYH`?T7z#=1r!zfJ_mN=hucSK -zw}Zr+f{|l-^)k1KyPh0JSbN?3H^}7W8)o7kHvk7^?(Lr4KyNBZ3P`cmgEdFux0JyeoV! -zrQr*Xk?&k-9vuQN;g4agCT1GGrqUT42&Ex*1*eow)7#uh-1JKPKyA|FbL!f7Ak%1= -zW6-btvj|*9s|))b2JC@&%SYd!L#H_s-@SQoy7%qp6F85x1gJFS0H-QrFLzgT -zi<%xML+!cw&iCE(u@y?0(94f21Ag)TI`I5Z+`1nBy3hjEmytxw#jfz(IoPdJ&l6Yc -zNHw2=D(P?4bR&)9LLU)&@Z_3jOwCoq$mKm`BXs5xp+uv%*nAn0z2Ee3`Sc^{2G$@H -zLU>}~*=3~SE>y6Ml2^_I$pB;KZ}LfDR!R?U-|b0ap>%tv1auUtcg?Ocjc2_QPlAV9 -zlMsSwUIhC7_PFjcV)BmW3~-e#*IodoyguiO&cwxJlLe6H9P*zl*E__@J!wJzg_9Q> -z5M6PtHBv25&#iaFMWIpD9EFPLX?Pi}N21dD3zSZ3p;rhnk3@*?iJUdDo9tE4lj9F* -zaQ}!ANfjNN?7GjPfrIWqeNBXQ$BApys2X8Haj{D~X+)6qEDs>tLxDk~HTW^MJ|zsZ -zrqxM@6Z~u-LoN`8nTKiU^Nc~i!tRDF&a<*?Ea^?w{aVR#)Z5@Zl -z0DAqTx!!sO(;ANGEW}MB_Jgh6kp1v15}qOe*%F!8<@9WnJCgu;Vtp#9SoS@t_~z3yj=M1ktv@X!tJM -z@ZbpVI+*}7;vMnc1Wj$RM9*?cQ8Wp*Hh15*+?Zlb980Dj*wU+6QNh*C^XlUi+xnIR -zTpu=zC3V2m*@h3`<^eMGL56_yNAW4G7LF`?!PYV_Yq^LwnUyt=NysJ9ED7*n@O9b8 -z@J($H`-Hj;a}yYHK+Jrwzt0yAs+1eK{e`kR?K4om0GmMVm^f>~xz%Dy%OK#*@21AH -zrSE_pT6oy3tkb+dJN#cI5Zz$@B=zvOuHj?@^ca>Mil1x6JyUGl?AMjS*lvZM{^Sh#>4)bm7tz0;hnjH1&H%Fp&Trdp{sneWY0 -zWPZKyT>1|>s03n@P`pk*KYlcm;Mv*zrpV3#G*UiaFHv28{M2H|JN@>Zz%OVL3AHtD -zbbWD+8-G2c@_s+qU4N_|9AtC)dd8@D5{bmb7d0T=N27=OweSvhbvPS?Z;(>aY`&Xw -z4g~{KtfM`1{Sl>2p_R*9+JyT8bGzLI(u`dC@Q-G1M_k(2^<EyijOeuv4SqEIJU~NV3dZXlC7OjeghC3{D8xqMup|7EPH$jrf-nBC+JK;) -z&TF$G%ie^E_5Fr&(uHL{njW|QZfk}=?|gWAa%X$+@{Vfz4iURwNkD+-WTf~Fugc2 -zyZ}vpx80TtNP!PJKd3Se$JsXooJoYi0W_;MYa?1&^ -zJ7uuwq}7<@4POpT59d9)?vkD4wg+pKyVb1+b8;us+e8!0%?YK+x)}ZS&(;vwvw1+-Z9(T_P@b<|ZQt+aoki7tMe+)|>isM9NkK`32@S -zg{47Ym-900ioUqq{S0sK3g0PySzjEKN@yD=N9%m>e1g~JOv_Bi>HU4*R}*YOrDs&c -zlO(&0ShLbYw?ST>WiDcC(v+F*j!wy^ad}YK|0!-GrT;5#%fOTM|A^aeKjJppe~H`O -z|F5{6{g1e<@sGG|{2y_9@LzE|;z!(mcMY!jlavpcL(cn;xE=c>D!PF?2{QSQxV>hN -zkM!T-w&_3Ow*NokwmBar!aw5n(~r1Kb@U%`J66x7So+>8??>DQNp}%)t&?PagfrKs -z(WP9;m;VvB(|*KlIR&B~DF0STK`wiSvKR -zbi3G+bYr1cx=23IS$7&lJWOO~WHdKJ5lu7FakAZc2u~@EBMBf6`;_VI+W_0Rw!jxb -zK=2V@E*9ug7cb{4T1N#g4I6{vcddl&9Bw19Ba}4XzxAJ4y}1cV@&upRz+Jj8v)_^{qn@s=98(L{1aPJ{A6l(C -z)1xcGOzAqI?HLgL`Gd3ecH -zK;_0N>jl}%!LLTP%AiQR0&by3L5(;#gNN2B+XA#0KwgUj~2 -z*(yN_N&LwKQc)>1CJ8`5z0_?3I^-ofEn}N6jmmwSM<49Nh~EQyIc6D~>kB-tl3>T4`vbB*HoZU_=Q&X;(Qf=&dXgKud?{!$HuGHFU7gXm#kLJ^=ZA11 -z&Vya-iE&2xVC2J<3$UDJAa<$B2l;>-Vy^q{ -zyh^2hNu%K|kxU74iG;xg;a-J}y!FjCI618Sd#)sD2p}vr&p&AH1KXCi7E|k+KxFat -zQcxM(?Wgq&zNhhZgH^0~@p2N&hwF3`E7cmIhLxbE7y*i| -zx1lT@&77V$(0gWDp#-2oombeqAn7)f;lAmJqm}BXJ_A9eu -zQ<8===<7x!9+*Q)dN=azb5h>K$io-6Ei893aS(b2WMc~AsXD8h4o%7c`}6ZEDL2z( -z5CgY)-eDf)XgllK+E;S-gPs`z{Z@aFnq<761sNbrmix;eQHNB4xoab@m&TaR@BYV9 -zFSW!y;-TiXf*JI#rm(}qO7B5r6Dp8xrJNfkjW)gRalwG1ulYD%wB`xChf%J~bxxo7|(6<7(sdy>o3K -zoX9T*y*<7(-R3C$SiM!n)nrsvOzJqkTkyF=yK#3_ayBV`q3=(&!Io3&X7mX-7CT%X -z?eZNTm*hJ_LSD%8)$bm}S537j{riq(-#`o1z(9_dpEsQUm$(i8zr=0r|0Qk{{wr=v -z{D|9y|BBnI_F=|9;`Yk_5Vw>5KgDe?Jx8r<+{)Zze)$!&?Nq-%i|2=6e`Mp?mVLUG -zr>MZ11Q&v)tu$O>_4qy7^=a~-W7PpnIy4elbq^XF=Ur*j{4u*O2o&8u>NJlQdA(;$ -z;27rVhCoD4IdTFfakN-@rZ>*nV$y?S4pm$sg{S@=ZS(u({6EayQ;;aomL}-5ZQHh; -zdD6CR+qP}nwr$&a(zbCDbE>MlU>gt$@j(Oj&dqwQ{*Z*xN*j7lJVPU*)+oGyr -zHifh$FtmXJ^TOb_cd|BCmVr<#85Rhm#l%-sPC~x@;&1gu-QJGQv*6||bbu2G{AR!b -z6V?=qYX{kI+pBkr1iVz>heHf;_91n-Ij3UpnEPCc>-0x`as8l9YnrVV3ep~CdHt*T -zXMG84d6xNsa{NQEFqs~0$ZGFOf^HHU&bt)m%5y#|8e1%pwVdOFy$&PlAiMpSS -zt`1I!ciLQ7aZsN?So!uxMD0QmDrmDA^=d7W-wu&VaAFB_geSjkO#)s{d;a+M)*L0} -z@LLiLPtPJ3se8jd@DiZSRVMKF;4gd4c3&z~}nA -zhAx+@QG0&)_dusr>Z2{ -z_+iJ?lvzjms@S1&{0B1y^MWArgv>sbhD2c~_mgS~R*a#vOV5qm0f@k(%M5HO*++g4 -zdj&qc!|O)jggK$Fy%aRJI7zkuW9B@QZ -zd~sm__)G1+MEJg3grSAqQviYq*?Ng{CPy;1^*)m6(f -zDs>F?Qsh#c{KlMhAJF%#dxjdqd+k{bZ00ipzPViEc5$=RY&Xu4Gz2s#UMhXaqf$3O -z6u7mYkTuxjs&=WnBiP~yF6@%??6>X-bYGmoGS`b8Go=@RfL@tqvU!Jzfia{OSEz(` -zkL?&)hG|J_KKlS8H|?Yy*1tM -zf-l<)IW?Z~))7-_(1K!9-uZ7e)sGoLO#J2kV{|hePM(ki9XWfw3fOt1Z1=#^haVA- -z9|J&gpkwtW4{jP_)E(@sG-A)5ts5VXQfN%>=Q9jz2UAGcQ~QRZmn01Hi$6T#E|(-3-dQOyKFWT_6zzs^<`tQ -zkn{do+-Cgm;wvcGk@@JE-?ztH9`1)AgMDgGgoV|3io{!mNc1EHBXLEm*xpp;<9owQRRqFF -zn~xRb3rz}50Pq0x10KDLLC@8~mpMVZ$%Yz;;I-gz;ST1md?tQZvP{1^v|qCGb1^7B -zJnPtqwZ`t~B#b<=21mVk51k1aHYNjG=0Dp)k?F+C>^}1E_pyt}LG)Z( -zU_y!59(#Lc_1+zNSjn)sn@%_IS{5j>BvwUhDXzVI4{#)&vqKNNuX`kq@Q;c&Z$GS% -z2~NO{oJikycVM5M0vpcoP%|i6kk#pDAHlDShfDU?@|z9w!|=JO4cY~mzx(r|DeByB -zUC1fh-zJtwthepf9O@O>pIrV-I%2{UeAV{lDD -zRC_SMe7SLZ94t5u9`Zsn)yKD%P)b6_UKWZ;V>dzu_YI|nJCRs*R`x-*WW6RLMX8dZ -z(`{_)3x`Uo1>j&41x|Ru#-&iO$&iRSE*SbwGb2A3v&cdq8JvP;?@N{U4smwiKqKjm -zJsUY%OIrRnC+86@OUkFyYX$Ty3)oyUU5s$pAidODq##$)KM3;7r1#e8l`_;dR+a&)YZrA;z -zxc&QI#ck1l7PtHVP27h1AL4fKUvc~V-xs%~{z2TX{3~uh{S~)S!V>h -zI*8!EirW(Zv$!2L1=4bm=QeX7e{ZEdZ35y}F61*CH=uXr-n$d=X&VqP-IsFc{c`UJ -zFB+o%f*3H_+f1iO*#IS;?{*39@TrNZABlI=2nP>v-}{qWsjWfQ@g{s&L;!oHA#Xe9 -z2PB6iKB0U+wTkJ14`GR)o!D}F<;ioc>btZ(rHk%|m~vC|+0*wW(_66h!T&oe6;ZmJ -z5*zUQ<$CMqQECypdPGyE|K}jCBkiT&VnrQ2Hs*BdG6e^;Sji*B@N!j`spr}8)1gg1 -zY>|}DuPm9vuN$S(7zV$W)|e%FT{Dta@iQOVm-z#YGiUfN3tV_&p6{YKx+UxwTG5;2 -z4{Y5m=#a+WKTEVB-kNfb?MycSM7k30?~!&7e -z$DvsOa(yMClpeJu3t**5I+vucNx-x}TAl*;EB6@nY!#rWsTXosiwlI}*4piO -zznpYRpu5q~cA^PpTr3b=dZcB}?o7_d`+#NpLMD%kc3Ei`Ryt}$7w_={Zldm)e8z$b -zjqYLwgGKd3!Ob+j)+hEh;DxPCq|h-D*%`%A?&SB%xM*dQw1$}_vosz{j@@`aOn&`F -z5=04xPJ}7bs4*vS%AnaZj=T7#BLp@Ef~vW7!xn+y!EPJGWubH9bN4R6Hi9bCmJNWQ*1(3LDuVRvlUs-#ElvF)$B>A%moat87W3Xws|E -z)zpGK2JH7cT9Ak!GsR|+3Ln8!CPJSlo;e2+(UY%cB;!(~EDbDAL` -z02%h}!BJ`D&iH|@EljL1elH1(Z&8X)8X){K9u`(Yg>nU!sE1z@Ik>stpPi#!W;?7| -zLT~QyHv9#X&_*)ACk7jNToi&hRi04@lX^C5&XA;Z8-P%N?nE(}M6x*{T3?E?FO(yd -zPa#=?4oK_GSUZYx`coenw4!bwk#|Ypf~~qqj1HtAc~)X@>SyNw9*1ucFd*rJ7V~UE -z77-i@a`(1hA+MpN(xJyi>T&MgS^nSC(%Q%t3T@@IkhM`Wbcr0Y{CcD&dBV1b`0W)G -ze52KV?oU~1TQq_drA1sLB{anoK`+@2qNqc7I5_6zf~$L!dw&y2l^_%(65SMFthYZQAbh_m+6Aciq8^1fF8ohYRQv|8Ht=RS2n$-^ -zI!qL^tk#->E}1;kQ6>(D`(gRKJN)4s!D+kPrkRJ-RZu+dOX3g5t-^#9gfOp^kAxl@ -zVjnU4v9Sk)an{VcgjVNCzonHvGpi7CgUm#&TuqLnaogOD+eP|Vy+logtF3XpSp=Ek -zATTwup;&^HH1vrY-=LL&_j=2rQXgu`@yG8i6=jv$T!61b; -z>-Z`!vjSJIx2*OD=_byUA}(48jGhH$wAxe_Q5PF(idY+)aq#;|A|QEfEE4S%F$u4p -zxA$8*uPzoOHe1^}^*+=9lG4&PYWbU%<(OUvrvt5l_lB=TphnkiReHT(!4e8)+&`{u -zUvnmYJ^#_0ysrq@x%E>RTqjCXaOiSvCGQ98#3g2-Z*X1k7+`ps0Gm4@DZPw-7m~i| -z&mxwc?%!sxT*n~M&qR~Ga?^}iax1-eB;`Ic8J$=A29CIZ*zWxUefy43FzDtY)Aa0% -z`bx -zqeB*bE<#8hQab;>l7v&m>$0F9_RNXe(D|F95@UGnX7(4vlhLgwC<%~!NP6R5H^9cD -z{WyWi-|7n^^rE&2q`YdYJ;)5!Q%_7#;q^DXH1yBh4=sH>!`06(Rqb=?NwTqv{s;NE%Ofk9?8cveC#`bqO7ATLGbS&eGKgWvL27Kh;x%(8M2BY?$ -zANSZ4ckrY5RAszJjD7-43YF_95*57|7M$)Ux~9%!zT7pzkzz;XVyL8G%AaM5O)|Mt -zi!Zhtv$i6HZiBOKO`+2VXbxS2z6rTAI!>d~{Yf%lBi}MVZO=Tzs#I+R-WSBHh&|))`)Lc<#?rc+^5F(fE93&=iV4#I?95ATm -z&GrN@LkbU%@U|T>pG;otTkj$d^YK9%SV+HvtLSc&VBjO~Hwy&|?Cu|d!N?dNFB3ul -ze7|LE@MD}QR= -z@~S@yUsr3QU~9llbcq8qteqX}pmd#gI3cC&@h#&eM&)wtSo`9FGq~}$6;Mdl#`02y -z2@FCJ=z?uUo^Fo6V9{HRxMphq_D_JFb-}-8uap<FOog%oqGK53};Cy>9 -z#=?cE)e6MJ-4@P2+1kGdXem*tUOY**;3$GD`rJ(I`lgO7HI5aXl)WxhQD0Z6`I+X3 -zx3L)btzsnQX4CCEmqs7aLrKW}#!q8}*|0@&DxJ>qQ~yHt3X3#Tc!XwL?iK(-_J)nW -z*OxzVObn1GGy+ogGV)hXLyn$IK}iV+20dGl7JO>-G`(9( -zhA6m7$s^d~mt4CE1if3JJ=04u%;b~DVR+mehWn#OV9wiS%TF3qY{wa1;_W0>{hn<~ -zHd$2g*2S;|wWSEYcdLkkfhRQwtb$9GpDl07k74$j*-{cb+IPW~=#hvUMmqr_e6<-m -zIRr`ev=U8&5|iXeuh7R`Y%rO3oi3b0Aj}e2s8m+TvZf;&|CDkm9GZ$0mhu*MtSVuUeDD<{~W?Y+$(v6Q?vK~=SN4Ra4r -z*H6Dl%mVwgieKXxS#y3%{!#})Hm847Yje*zEdqGet|j0GkSWTU27OQ#!DO8+521N$ -z7ZebwdH4I0nGfCu6IX5PKJ6Vgvp|uyaiYa{*EhRo&bWV0N7?8t7JS!d&XMe3B~Pop -zxNK~ja|iH+4v_+j@?;uMWe?fbSLxU?8F!6K5tR_6{ehU_FQdWDU)gJz^7oVl^f{!0 -zhc+^gMRha);`WQilzV32jwnC!q$OiHBl0ZhCOvkU>^8n@XlxUdYd<~A2a*A4p45F+ -zf3J^mu*@fr|DbYa#rz53(M&BBIW87U>!W+(4G#B@T~hQjkZ(Pim2s-vdcl>Q0M)#4 -z#R<3)hex*+S1Ur`>(M9X_U80|1^6Cdqo9{SLaH+kGLfU{Bt2=F84H}W3UQUTI>9Mu -z<_9gDk%hNlN=9Bl>16IVvJYwAnjWBeJTN37wN03>g|ga-Xs8|&@C3l+<3@NF -z!pXOC1O)+crUBiW5q_#+M}Kt_i+F*f`y|Nd=V`DfOf~%||v28qLGF -z9)i`k{S;KCl{1-+6ygX+EWqI6A6io4dRg+l{T~3_2o)0lF~Du{KLgz47%42esEYpp -za0mXE0q&1~0=W4Tpr$pd{;L2tRmgt_xXFTRfK~ni+?M|aa0map0C)Dk0Ng151K^hX -zXMj8B{{Y~2_}>BCc>gu^bh-IA1;xeI_?t0gC -zrCX)p-e*M!?Sz0!J0%Dv8cfbTmwuSWg?)C1MNFv;*I)b^fWDEWB1ChZv%@b|k;e%e -zj?dzO4JGkXyBgtA5A~NKZ;~1k!B~`5UV<%-M70Xfa{oxLI~q%eO>_M9C|()~<&tYH -z%5&ocNhEX?6S0+LcvQ7x#$c>jOms0WU)g^Sa8o1x7XWVY{}AAw|6c)anSTbj$^I9B -z`|B^jE%849?%{t2;7$NT1|skgE$oo1 -zGZlM}Mzn?Zj>VKB>g{2)VI>hJQ4e@|Y~cJ4gJ -zIqzU(gl9O$qTCoeMz};CQ=j>%zK}l9#N2wtyyQftHLo7~(~54E7Fyr1ze~GwP(m{- -zVwP8|1-ku~BqlQ-99q~z`K(7`yhiJ`I&oTav=+~SfDX9bTROjpac`G{a;Ge{{Q=J$ -zeCxQJUuN_wlIJ~PR%#C_$@J|`l-zR-+zFCR5#-P|lz2zgPpai$jD -zosc|qX^m_W_#Qz#h&7#VRFOceNXs<^jMjFr_LJ8EPpszPN?s^v2$0w`fkh_HCy?Y! -z!&aNsivhclPuOsBOkpJhCfKhC3`}q_FyPz{N!0a`oX~9tGN;O6Gfy)x=fX=L#ISOkx -z0A#FT!5jsXn-|*{o!vQ(oame}inewb-Ph8>oNIkme>Jeqhw*5~PCS6jx|+nv1VClM -zL~stb2Hx0is}v}IeU3Uhw-Xj2qW)-W_r|FOkZl>|vgBT|msi-WJw^=gSP-Tqf9wKuM&a`T5x}u^>oc -z5DkjNc2|+tk`e+t5=!et5MpZJ-^C0FNOfpd$M|tln@Ugo(N$pIV)<9%U5{d{ykcjn -zRolX8)k~{GP#o_U-G~-O(m?p8knGr{zKW~!Ryew-Q%w#P;W$EcPZs$u@e@6{0NJUj#GCA>2 -z4qp(-v*~aOiZUi^hQPdT25F7+3d2dtewJIszn-xKQciv5o -z!gpqyiRB3Q-WL>6#ow-qJ3vza>J0In5WvAzV0J|pG_3FP+{w&l!z(S)$armzDP5pK -zIa0eU&23;R`;un6V~@b+_ow|h>C5rjh- -zL&oZEKL~aQ?!((cJyS2|AEj6MN9H(CD4*jLkODk!Ep4bmS`3T9nnl@O#f#*362#(g -z0E60tN*`$g#S}%w+4s<;a#HF?(@=J4R2p)hdvxCPi@nDFx}fU$ET$DCnd_ZN7s)S{ -zpOuO*DnF7%_(^0}qsimofh>>oV7-Xrin=CC7|ym|K -zl~?35%P&hDo>e+I9v4Vh*!;BOiBBT3*Me5HN*dRz=4 -zB&_*OHP2!xlT22B&UEpa!Iz55P*}YUJLHt~YBAfZ!Kt(80vmxEALuZBLSvZAUekmE -zHfwHY;Q0Zj5X`pNwDIY$>Em)RKHt3HWr}RHZS5bUVCerioN3CZ4jaFK&=W;3$P#;P -zx4?lN>hF%>Z!eu?!Vi**ZLtg0p==j|QwV>#% -zrm|xjeO-CVYnW>aS&Va{-p~y$R3E~Q#SQ8MYXay`RxnH2Wo(V?)74Pb -zWt$Ou^2|&^@+CM<5ijh@+j_9pc_Y2pA;ol&#~fO(c`=;7zJ8k}5l<#;n#sL{^cH** -zCK$@Cy!$H1F0B5C9kW58g7%Y9G7W{)Rbp^;UTQi$KSy!#A -zHT;-F@XVc*d}K07TXSvu@zb+9S&T~z -zclXS`+ts?oxJxgB-7Joim4*?6WtD*l0CxCiiRvz{EF1l#zE+K -zlnN-Avs0u8zu!viShYiN!{EmKl)Icr^IC{col%=&+ajf&ogmB=AuOtzcg&NuK_FtC -zE3jpaiz)J=IzD1w_FumTEyTCFL-c1ix{s;3A -z)}Z%}1ho@$5V?p8H|{2LLw}wx)8j2Z -ze{425?I|XBb;7)`9GxcQkTFHd+9STzLd>pM6N^nw*~bHf}G*{gbIoG$AM0{&;uFn%zr=U0?viZNsgm6$7Y -z>UGfP+Cf2J`hBa{`l1f$w$BGy(Zt`>YbjJ%4hI-eD?O?qNVLE;*p@As9^PyOA)2Ri -zalbHY?44U4?^0&u6sc$`+6X`FW1VMtnGx?-1*RR}Kp9`VYwS&w#VyPcAN~*LykNQ! -zOLYhx0EGO4X1URLz@5zZbfihhB$4NSq#S8tLP@380f*w#A>kNkCc?>1bFS5&Tp13J -zPkkuIk(fW`ELzw?9v*9|Sb}dha0PiZR)9LL!V3)exE1(&IB5?d@)25~mja4MrA?5R1n=}@K28CbFyO~R$J3iFCju3cF`}%9 -zC>KcC*Bg#16!<;G+vXS6!#J+FAk>4D+5nZ1HOxwgI- -zmawU^cBV3(y_Ee@%U5AsB8ZTST46HpBWd?*!OB}l7Mv=t3YgsOXJ4~Jg?OF;`2JKl -z|M^lT(Ml)fY<|Nn3v2{90YrJJ+vi^->p+;Jnhh@@nia)KGujDQ%XvJMkAG!ui~{>e%LI=#n^f;S(#Fpq|7v#Jb>CH9GfUWhD53o8=PD43PkGNHlg?;)mcoI4`f``5A^o8?W9ZQd+0vpeBX|G=VQ7r -z=#d5zKZ3wT-EjXbxQOaV!TZ@OMr;)`f$f9JtF8V|0GYDZil0E5k6)ylOuIhNujTD2 -z(Q4AD3se0U6CaG9mf}J%G^RB21ev_+L|AhNNTANNQxFJf1e6P_Wj3k)tiiM--EpRV -z1Dc?+XoPx26o0H}+M5~Hmtx{0yKho%D`pz|b6*^HGHfu;Ak3G74t$N`k>RsS(rAp~ -z*WPy|@nA*Tp|^`lkhcwU@hZS{VN1qJHmE*xv1lKrD9I!ICEM%(e!tJRjx!~eGKx}% -z4Ff`e)%&OvX%+)we#09|k$UGPOSj4P5ZieHQu*cKsChf}4W=rr#AS}Qo7W3DO|W%$ -zGZ9DKx{-2befvB$?VWUEBhB -z3&wXU2PHkedhdsPLVF_yXK4E6sIu;$^x63V6yi@vWn6DC&oa7O<3S1KTeLB#AmaCA -zmyFu|2G?7xLCxk*EoP`d*dvc81JN}3MDi2IhO)a7lW!k*F+qo}&=7MeUzMlV!e{xc -z1W5h1Os+CN;KP=E^4^UDt!}G*sX}GqW*BTOV#4&MCJM+c7J?EKKjEWAIS5BAC=gxvE0o>=4 -zWysEacbmt*G6OTiKr~{5!p}NBa}_h;2=I1qjR4)*SQ4mINi-3k-Q)5J6N)v7r_1jh -zuvI&eL$`y}SV@tMN=pAl;{WzKVI+D1v(qN4g~eh(v!7V0Hc8ys56em}m?ru2fQ#y(Pgur^6rLTA$|k80Fv&9>J{tV12I~-p3s9YY$L(#Zhbx^`JA}E%A(CsU7edn2QP3g~_>k2zlN% -z(NE6XWz0~yB -z#{7c7>T3o_j>p9>x?e3TEX5;|fc{MdUMNf;PJCFvOgV1UCwGQ$z#%ou!$}N1u$C3{ -z^J3zFhc1K0v!prr?N -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 -zU`j;1$qF#k8uAf;Z^Qvi)Lw6H;*Hz^Ov~1 -zzMqGwhPaFr+4~u6Kne^h&oMs-_*t)bxvizVrU~6XuCLB_p -z1c5Nrp?V?BnFJT=uHw~(ibH{1j*a~r?+aXv&Q&%6{N)FNj9IOG%&di}bsK6cMV%)^ -zT!q8{+Bv)$STKl;isD-g(g{{cObY>ia+|>4d%{YNO>j)N1_3utD!dx7x*9D -z`@=h(j;(taSu0l -zU$+{!7l%CK)Y|2o#a@w2?rq9YGllZ^*TFo6V{$c;W$|k=64{h1UCA5X{&;#-eeZ2G -zTGv@qH?p9@_YgAgMtXUhzcQk;WZZ-Y=pGvuN#F^=yrNbcB&=*J6lm9r>nUD%u~icM -zO)Y1tjEID~)8fkCe||=tyqV4wFlT+;hJC9t{pyd4vpKow6+*NjOF#G2)O;V1dC6Fy -zY~B;;9k)d+kE}aIF2E?X=I@UTe#BSdZF?b9JP)Mk+pC<|p)4~Sc$5<)f|RVYkCK9{ -z?ayWcI3*L;dXk^}>t%y9_cJF=N-1B;5kDATD1EQ79yUI1iAurim8`*L0F1Fr6JDHv -zrsc+a_S^Y4)|6A~vr0n}7oTvG9jDHxs-*^4YW9xFc35k!|_b~`&J@qiG%Ig#M6jgX~-F)83r&g -zRuI8ir+@^4hjIpfAcjHlEyduA=tB~53h{leMktRki^g6RChu^-@QaE|dkB^KfZEnH3SPii_A-Tylp3j+izK8U|$3s_@9b!>FRyEYq!6V}HqA?0UgfO2|%Q|cq^ew4u*}g7CcJ*hC0X-cq+e5}wk(pqi -zfjXEns9)1o%3ded!hX}Um=loje=k%miV~_4eM0Mq9|-{~?!1#-Q8a>}VneJcnMuOY -zgNl|w9UOs8KaVim6A~p|KRX`5ZB;o*T36ohl5`1hMf=nRI9J!UDT`ScbA)gGM>w87sy4q4=t$9`|lLiDBoki#ly -zAR8H*!mn9NfuJC6BiIIupWJkc79Z~}F^*IeSGRInH{&8N0D=`x#q2kRg<7k(;-(u| -z5e-s#JkXAVo>j~)P&QJazs*z?W117Wa|7RnfmxcsEm}}ZSSdcE@n{ZY+whyGpM+Z^ -zhhqgkL=u9k_Q#2uzx;}xh14|XZqRvN_%fll?=KAQ!+)*MDJm9kHS1TaP@wqZIy(}> -zo@Z;&U<{-BL$mhlmel4<`@q0GDcbrBAmpvQ0c|7e;u;Xm{91C1i&;^wjpA7(PH2+p -zx5EA~#lXspzq+Izp97^F%pJ{%fV{oCB!LCVhrB4@TE$T4Fk$}Ebvqm1a}oynTsw6~ -z0n}2SB(ZQag5v`EUh~OTO~VzA4iYwjzXfw%naVfM9|H5cq1Ecl -z|NK_E=blGmX0>ldKRu?_=-wnc7JzA7&7+ZkR@qQexF;Ry-KZ!Kn^XZNS2{~WOVwYavCc< -zf>l~+HS*q-3nf&O`O4KShxzYEa(eN*Vo}$XHeY$Tml)tFUXY3DW?|f1^1`4 -z2rhFDrWU|N_Sf^V@nyv~EmU!4C-5@$cLuFJTN>j5Thn5*?_}tA`^~wpzKB@2p(qw6 -zGO`d6NIn^TV_6M;80p@?)@(wbOe|#oVB${~g*vsIvMn}Kbp%PktbP_BjQ=J<-!o4_ -zjm*matj9`9{{wMKva>`h(o&1i1f3{ -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 -z1Wg|K7X!3@Jde+tncKhNvaw_E}4LrC3y?IWj -zh-3LVdvKqMmATy?V%JWC8I@hN+oUgM?_xCLkH%f2cdmn)H$FxUyqg=7Z4r18%3DRu -zuWH|!Lq`K(OI$v+e=Lm4J>$~{ed@ioJ7RmM?5lPZ`D0!M<8SY`n#4ip+5GP_6Zs#M -z$fY5?<@8l-uEWF&A)UAWe)}`m9_m9*B26iS{GTfC)@~n98sFmvi?grZrP5a&ekdBA -zxoUpyMLV-?Pc!HwykxF@1b`ZBv(umot^|U5f~p1fs=#iOtitw;Fi~loYtrDA+oto) -z!iUg%c$`|R5PQg+KWpyxn{~(iqyI`h9vZAE -zqC~&kmT6X_>eIJi&VIL@aIELVX{;>2E)oeSfI9SWT>a+Vgob;tLVMk`&R0(6V*O*K -zjy~V@nD&#_aqY=$uQ}`OkOv7_pYq7xs>jnQq(dxCi8Wa1qgQVMx5I^@d=0{e!n;7Z -zTS$&+K)xXRY`8n8>)!J!z8GQ3naW0Hu|z41f5Hz+EOXWJ{ln7OR`TVnm9eRMUSbDx&g)0RN -zJJa#K>xXsQ_CpR8lm#tUlp|9HC@5Smd0>9$^!6Q0>w^FGT5ImZ!-1@8F1*8mnZm4% -z5Ii=Q-R-LmRTC!SsNs-f!tg~;Hbpeq2go@bx!6I6Jk)q?6K3jXPHOi?X?l-E@T4c@ -zUBKSQ#>E%nquG_AB{L`<0OZS4oU(yAurx0P9SEP>_9gc_Y4Pm0(trzjdC3w@BQO&& -zeceyl{`4`zgFlTTl??N^I2cS!?k%LykBV44#QS1<3nDc(>YQATesXgATO*iQF~< -z&j+u4S+FiuawoRe)enpO2A#^m`GF9;mJDtd_G}pciQHLg4#sc+ec*Oz#E-QJmHBPQ -zwygSE1X!}ZhrhUub0;8(k*@89xgix>!6b2Ivs}TeqBQ8c?WNG#4xW8_+^t6<>a-ca1_^Oc7(-}_|6$E%) -zR&-Yf(V!D*7-!fmk9@Ka@Vs;w-J^}3=+*`FcIacY>vw@8edQNelrP7xwJ%yJ*HhyW -zet25hUk_`%tsvm5-2QJX{-48R>so|GgZ*Zx -zQ86&7{`jZ!lhr&Rpia!s8Izjd82F11?sLztS6g3yN?}{ET=@1+#T!FP>Bl`AASBs%HIHPYw&9En{|N0v68mj=;oo0JXDQj?{T72)ZGa(14Sl7a0A7 -zUUp2Wj`#kWAVxh}$zHZc&1EU>a+v{E0=A?|Ek9+`Du`_`b_4%JZu5|8QFf)2r7_IGLd)RL*AG30>e}Eq -z)@(zR@KW-dDQ98)eWI_-boy`Sg;U>uBKN>C3}MUNfE9a~)s^G(|1WYc9%4)U6S<$; -zO$vPp$ESp~##5n1zHmp(^mb~*sL!$jz(gYIAZ4^eYW$G+Kb>^<8>-T1gVN?OLc2@p -zdHkIP+5S+*jmm}m?Q)Y&^V(sSHh -zGyX$%7muFn%o=TrWO9Cqg=N{VcQ7~Kmgf8Oy#$JX`jQtldSi}g7hM0Y68G&;Ca62y -zH~kw!tMB)IlRq!_E;RT)W;RW-B~lz|Yf(sts(zTRI*+wD$6}DDlPh^k&6R`25rRXV -zIZ04cemG}MF?Yf~&TrKsa0s%W?LGI(IX=;T-A}q6J1r>vl!InJh4FiQJ^E~ep*ibN -z`iQDw~zu=un2s*Ps?j`{nz0Yr4w}jk?|0B6)r{*+B-X7y2H!OrMOsXak&55-R -zThdjd*7S&ZiYQSEI$RtnH%M_teTFYR?cE$9lhtRN7KQ4}R*kTqM84>L61dLODc`hD -zT$^@7@Vcy)(jfecH~+DlF$591fBJ`dbie7~>ZA^vbm*y5z57jzst%DdqESugrZiq# -zIQ^(t(frTk?ucGI={gvTl(XSZEW3BTow|4MQQ?)S>Pkyw?ujF%rUP{ocHFY%C;NXU -zH-WU@zAYzc+#I;V<}FcS8aR#kSJdRFm5$8C;9I8{xXv9Z%6+7&#RFr;)n{D=3=(;i -zdC3v<{>=yq^f3LEo6tHbJrMHYwD$R~Ak!!7w?D5)aH4u~Xpe|^{H5(**n{Qv -zXNr_6ZegB$Gb|Q!PSS(n$*j+~#P%+Bu`NCilzQflbjrlUw*i^`FUYKOv6=8Xk3+gs|Y$&f#V05s&(F#LOOt -zo)>bKCwOT}Kt4{)@|g^2xz6qge5z<=s9?7%%p$Fg4g|D4J=on!1yLtzQgH->c#YrD -zMCc@7H~jg;{Qa_DMn4uU+ku6#FO6;OS)!T{L+9ZBSag2jCxFVI*2=fMaGHZ=pi#xG -zCN~8lQCHq^w=xbHE$0>Lue;x{|7R9tK3KewoM0n4Q>Ep20p2JJ5icr0Y7ts@kNUUZ -zB!B%@RY|sw*^=`}-FT~?0|sYjl0N=N+A3yc;lzS?GmyZT7%h#qGUXOS6C{=8c#Q#X -z3c03s=I{dxaq0HK??Pdp_o6-9?nDk+jQ$r$C?93Mat4Q#FC2f^>IgjL;8D&>kHQ6v -z|IBP?LKanJ-Ltt&n~EcqBT}Yv$IG|-+9#;N`ythnpRsHJkiu& -z%Uv5)0x#bvN#=sM4k4C)Nn2=qRErz|(zfs_1YI*{6R2@R-}n2B-8YvFm~?5;DJZ<+ -zD)$Ily@yB@$VS``D)A1}X}<<6kQoL@wesUT+GX4IRGauwf}Q_RZo{xc)0clJx2RfY -z^Z%jTje*LJtvx&cQ0}zq!~GDxu@Bwxh@9Gv_`+4VUT;cRa#svmgKaT!eowm!5m21S -z`H7@L*$LsQ|4?qIqpyD`_bhU^3*wL2FeAbLq1?g$q1-?kj_HiL-cv>c(pRdtH_gp- -z`f*Ps-8)C5qJ?~iQ(bXcd$Sl^%MC&_@H5Z7zlrt!UqG>+DyJ=#;M3Q|@_1-^B;jjR -zT=S-cUG3j?NX(UJ;VA&+p(Km>c~Ww?x;?{-fwl04dp0|2fr -zaMKIqc|#<|5VlI7aMkb{n<~jiJr6*Sh3y$BBlhbL8KVN56Dxc7s-7VJL%BWoJ)Lhd -z(-9+CmVONhm*iOwu#XDNq5Ow(f6M3eU-_Oh3^@dD9=LhQ5pWx_&+$GBwu@wk$XHj8 -zqp~afX@Tf!G7x`R?d$JQ92hY7Mm0dy39o4rn3+3BCFd5l<{~)EV2?c6Y3qkI;^6{ -z0tVga$?g(o{7J6? -z!p&(}VAC-l3e7C_oR`9Z*wZK?@X4H_RcG6C_bzLW6OdEM9RnNqn#(B=PwhLz4n;Ia -z1vzuNj>XKL<#C+}_;8iVgqEaN{Gbr9w5pW|jsPSUBfB5YNKh8b&hcKp$!JUCM2bYP -z$dwd}32|G>Z4ch!1mX$dEA{ts)AOj8gaOivouO8;Nw -zKC104Se`R0(dUg)VOp{<&`k!tb+ZlppRlstiEM_-r3PCd!yMVb;5 -z+pboQn;j|8lUdeNDqMHkNkm>L&1_{A_BA^Pjw=qEN|H_#@ar4gO-qL+tFoa2%Iz_7 -zJUYQDd{L6%pIY`a7X`9eO9e4O$RU##u^aR^C#6DU86eovoXu=;MC&#*Iu15_zvh?8 -zzXjdIXICP^a`xZoGgV}hPYN{z?4dE9JiRDr?igvf+&G0IhpB!Q2r$X}Kzc77R&!=@ -ze!7;&C(H<_wDY{?v3L`~w*=8e6pB7;4ZWMz#<(T-RM+}DW)rCczkX@qPwJ2TW+liJ -z!8~`thq_sR_U%IRvI~x#wwj4}yS#Nq6c7C$%FVvQp!5&rrYhw4hjPDazZoTlc#OL?&$LxF{q>GGnK%>C_a~zr64bg12Mu|(+o$6(z@dE1~4r@n)GsCWq>oh40U{J -zO;NiEfT}9cp{m&d=f;Pw6hiBihs_YT^ftX6g&tP-<`XR3t<|Ye+@SHqM9)5ldz+$% -z{b4V>qiBfzL;-VOY(T#IkxEwrr4@pVRpC{^mhF|A%s?Nc~a& -zl7*{>+LC`7SV8mC@BX~Ft%eTrK7fwLfs1C~VB$oq$Y| -z7Z9vU$Q1PIfa=f?4c*cR6Hpyfv{8I`9f{cHA;_3P#L{#|@%u5&isOT}MmCg9f9Bu+ -z5h|e+w5H;S;nC1#u9R3DMeX=qDsuRc$$8vv@!`C}mtEkzVIx(_Abw6Y9|6{pH(()>>{*UFBsZ&~UzyGw> -z!7qe7_COC%sIgj)xVX0U~q6WtCIJGLlo#{nnfVa|bWok(mxq<~?$_1$@x?SAUg??uy?`-t%kR5L+BO -zyHitqUM*+;ijTn^9nXA1URydpW|vWn_Gd)0qK3Cx%;cl2Q5tQ4hK9zKR%G*p>k!6w -zUL^`^39XC}`sx3I-kWD~shrOR>a*4WQ%P*xE21dN7zJsqby;m=o -z@}RdZyFReaY#Je4a^&sWt;b>t4pzPOYv9K}7k?(vYpV)wPn89)3Hw9%wBnB@=UrRk&eap~XW~KJXMoZ|trOX>!qa -zp6@3vB8g(|`}K2#UaaZgU{QxqfV=MZnFlt8)#)0&)!O?9oE?QDc7A(wGj0|xyhwrF -zQ@w&I4|@8Cu`~1zzLPQ7-*EZiF(ObE0VjO{Yc~1*PS=^N?ZTPBqWVWDtN&c?S7=5n -z^nWh5yIAv^GuHoexmjSfweJ=VFQE|ykk^iFn=J6iErxvKKBUP)e-%PKwtDjwIq414 -zn^-B5by?S)^nk -z_2Q2in+tC3$>3P)qz55Orj4j-&9>D{+zyuNNSYr%O0U>ZP=RM>6kts@b2C5Uql?y9 -zu87_!?{ZIKDo4+%#K;yNS9ocvZ6l9|;-O2ZiriQcR~jYib9bQ-E(9plsSA>TtVH~V -zpG8mP(}+M&#>h)UZzfvNvIm`<#ELJ}3h8TSR$RVA_QLx5BLI9d_^SW@{C-vVeqY+H -zho1u7xr{;k{LT^3RQyYb{__=c)(`l2^Zj{RW^BH^1rm5+(#(lPKzyC834gZt6ZAg-+56N -z+r7tz$CFGwCg#4Y(>-is=p2^RpLc@akL#cM(W*YCKJKSnbpqZff$emgEiU=aE8{Mm -zr+3?Rp1kd}gp5}~75xVBEBpaor=D#LMDbT)DS9H!M<;H%umb*Ik66z%0XGF-JbpsK -z&C%ZI-hcvz;~&Pf83wu=V2e0na1`_8ueG^nW_O -zzCVUB_u3&l@-|ps&yeF^?hhF&$|LYH6hn`v){K)ASxBbBoqXQYxn!CkzcT{9#`{;B -zs=k%Bj}*o^2`^`rKN0=r`>XO^b8yxw=6V*6=p(ck(w_+v1isb2-p|bJ={WeDTjxkk -zp2=dh&nr%LP8J5sT|iTM@%OD7Vs^4jtr_jlx)pwRpAP$eLwT(`?FGCbe;2(LSS?zC -z4A^R+r@LhbFbAj?_K|zie3giN4hnsp#`FU<0#K(n4uMmw<4v{4 -zGW|e~JdZE(leWL(3=R(kU#4e^jNi<40R+PBA*&ZRx!aGch%?$O=&dOSgDHOkjL+4l -zO4TnB>7$2eSM1XR-U{ZgKTk|~3$RN8TyC$VhbMoX9NM=E+(09L%b1Y%mx>%4$jeW+ -z3KK7y70lVsB&=5f=6E*}0E&SXc=|&3O2HRkl9DO@d$0nZle;{@+sG14z`Z8_eH#ZW -z;!>Wkq1R6p|36HKO+4`tl?y^kW8Xb#jEpvgZ2M0k`=43ie5Cs0Nf%41xx|X0Bzyf& -zIu5T`^e@QQAwBh8pw=jBl5cdTkc=Y-#N3ijRUrR#M>DKR9|<;)n4Zd;Z2D; -z|G@o6QN6j$WT#z&i<_M!f>z+n@L@&TEM8?%rC5M~CxGMC;hwY4M*@KZ!YAMrYRnq^ -zNGssA4st}mTc-ZN;j^We-|{r#G{oPVAZ5fC14g7TU@K!LqyORk#^4K>!m>?UFTiJh -z&n~&*f9qdF`%ZbXZ;{Ju_nq7`2%q=G!uQ2O&aVJnp^uSg2Dhs;CE&FA-A;gqjO%z= -z@a2PFL$KEo;Jq>WI$&^u`I!{ZXgkzNOokV*fs9ivP!e60u2%lGt-yFg(76vF6pk6a -zopjS>$VLZ7d;C1b34a-d5Y*q&T+0h&g_-2ld({)F6@7onY9Xs-YO&dm+! -z;in(fzejZiFQM|pQ2si^UA*`V^ZPgW_IH9maQAcgTRHp_@P$4{GAR(Ffpu&kIoy0b -z9_RT9f#eL>l1^{}>^_l@=zo~OGNOLJJfEQjfDa5-qY+fn_5%G*--2gF9h{`u!7Z!(p35LP-L80l^_x} -zEfE9LFvofdNKRE?t5!-D5;C*ku8t_9%P67On|?By__A)(T85TEtQoP1eIt?zU~8;= -zPF%k}wCkO`VF=HX$*xT(1%wGmzbO}w`Q-{^h#C|Iybmmo5?4PtCP79HBYKx*_VaZp -z0SG#Xru>+^V#YhBBSiN|XDHTH4-R`%1Yyo2YxxGfypSDad=+7lLkCcSc9mEk(&_N&bH>nm^g9Y;!EO+pC=w(5(zF^4j84b8T9vk+F82)H -z;Lq+etWZ=yJTx3TrOi-rWXg5jbmwp4ZtzS&xHe(vsDYEAeN2_t2KWg!M^4|vae9Kt -zfGSFLUqjjl&wcY2dS_{ybo)}X>Go|QA- -zgrqE?6$H{@zzZdC#JjbDKAMitI+h7i%JoqE072l%nJGeSL^NcQBWE3TCu*{I+}p%Q^;FHtbz4wWoR;)G1l8*_9z<;FZSXeA$j&fT;ZTrEs_AnV+!btH(;?)+2M@DfYDSgu@Eqxdd!6BskMm+p$ePj9+QcH;C{& -z4`S_j#|%EhlryFPe;+R96LD58-y|3WTzp8+0Y0s2>UMUti-vU|5e!Wan2`w-Zd#A0 -zEyBjgVu=9Y(sq419r_?4V^|K38E_p?K;cSL!k~IUQK@)J-cwJ|Im)WqDk@le= -zEWwOycjA-4NJ4m_So6i7 -z&L5O8z9_?-(__$q6Nf|vkC?Q8#N7*SVR6gR0U!p9B)o-u%-x_*JSPV3&E|@D1eaeL -zH#owhrPoV0r)9Q3n%0+BAVI}T2!b9E7NuA9izs_IekBl`io9Ziz?%?Em>XgzKu6#m -zGYpu7if|;#$cK5upD_9&Tpcg|LSsP~;!WR}xBw@ctwe88eB87R3(l>IfH`o%dpA;5 -z{7hD_U2otIzqSmXs@4Hdx?kx8Bb0{fo9tTZ9}TQTa&OO8jJB#i|5}^4d8nA{KySNg -zJufHC2siQqQCW$h4%sub69<%n6Z=&qe~T+S7Y+gj0KwGR*;|H6OiD81(fA+IA>GKN -zLj|4@w9Wc#6xq7Nk42Br|7;TW06HYF5 -zznUamgm(i1A`E|RJ_vk{F{5_UMNZaOA^JxmFLhu`v_1J3ViQ6Y-LB6W+j?euRAOG% -zLiNb#n8`Q%-1+9`)C3MU-0Z2|5e{sML0l1#sd*bbBoHp`0M -z**Q<&gs4`VJh{O`;22UZdfOy2v6oVGr3kz@gh7b#8-K(#4Q3EJHZ<85^){4^8YGnn -zw?#BJ3ycJ-QXQ>_Z`fgy)viUrsk@A1nECXge+uiJ+Q>rxGJTWd8Ixo3FUlZnM9sFb -zt!cxSr<7zi5mwxf&%)8JhSxxh(0shOcSw=q#s`!vE0QzvKI|r^tnX+^9|OH*vBR|L -z;=~X$KkzXVZw*V5;W(hAd;+I@!(Fe9#MQO0Xt?aedOt*r_J4M6aO!Sp38kQ2{=(=8 -zNhF-Y$$kOnvU!AraDnK`VzKcsg(Ce!hehq#zVvu%vLR$zJ32b$nHv=w8wV3)WnPKI4yo5lc;iL7KwOFw^vF^=+~IT>r9 -zhgw~a$Q$)3>r4J_*Eh-eSn0PzWTY-?@C-#@3pTd}BN7gpExvvgn`S}MhTi{D(zY#}KXzB$DkC&MX8m(6k{ -z*f0XI>~t!w5Vbr$TUF4;lq@R<^obDdo~E@ix2C3^Dfxy)Oh6_nxn621-{%xG8LW9( -zB*UU+e*NrwK -zX=Pt`B6X;Sp@(yLPKj0nYv8NCQ&iB>MhZM{<)W49X%F-)Z!~ZOezc2-n -zb#r8>;GyJI{=y&`B$`BPIlxBpP^R?{ -z%o)QKp?4s#=cxXULNAV`{RJESx5Y22<&Hw0J8gnD66c(kOgIoyFi0zhKatDznLKdF -zkWuRyF1b}l##cuUB_$y5xV^dy#LaviY|po(%L1ZxAS?NYSbzp=45uDHQhvJUP}#NtHfH1Ah- -z4?4{a5%kDIUv5t-UdbCH975lS&L6+Q*Rg8yAbkC(x@;MJiQkjK=dUQUjh~Lt-1Z1H -zW%f7koPdCj3{9un<5r1?OuyjA3U7SHWx0s8kFfWR`(+-Lft2n0Q-}2CzIRKc{56AN -zGosjT#t^18VY>hP^}0SoQs(lN4giO7qA4+l+uF6{a8z(r(JV_!y8#W&A?`;!r=NDI -zvJ{*_#9jGgCe~EJiD57ku(8={snIdTwR$WR~@dzbkt$1x-;i>Ifi+NPO3P9d7WZ57NlgZZ;6d&H-6?5EfH#?q^CPa-^ -z-&T%cQ0gOtTuQ5x51uyjnq;&yf)-}iX*&#C!$f&$ccd^h$JEDmE>Z_SeE%Sw%P`nTn$?I#cipV?U^ED!V^Ap6xV~? -z1NQGYP3^!;IxbGtCX!Zk*k80KBk#hkJimwiTX)!YL5|wHn?tY;0g#_tUVSncQjwd^ -zh-LN4+sn43sS`vNa3zomNk?sj-SbU&h}p*oWRL=QuxvCzA&fR4Bb6DpNo3lX@b6zu -zStIg!V|7UZ2d?%_H{3`flk%V?d&!fWrD%;uL1*N=J~*QUQ5<{0UfoE@@k5G4JrHQy -z{!MwpdLOP?rpiCmNS_epo#`#<(J<@n1B6!}$kpsfOP)Uo8ks~&8k*tY@Xux)}(emQF#fQ2O30nqS%k8*m39f!&iF%a$)x~WwYa+s?C9oq;g}*+H -zG8v8jMDfTjIlH{YG!KqOs<*vbV)AlrH-S1_SsndJjH`;w9xM0w;kN@ClTzuwsG<8XH(I}k2j@S1L#u6yIJi(TdquEJJy%F1ukVu`} -zaZheUCaBmPr6H}u$EWfk{Ky~VQYY$kWT44Y25@BSXh&tTs_c$u7@Bm6c7FOlgl!9e -z<%pG5+JN;Sq(1A>B8WW6U-k?dZGZha{e}oX9V4cf -z!$miPB3!GaA*Ym=UAHD-t;~BgZ%zn&4FnEyxyu7rX{(7(Pq$f^Z%SgVgZal_1}xf< -ziwp;KkJwRIS^H#~7jlR;5<4GiBuf#;#79oTs3NboRe~uH5r#`pEBwHL&I8@)w@L)z -z@XlJeT5ZSaI1RNk5q+^JyH;M=pM4_HE -z>s0nL*ln5?(p2komg&Lzc==Q9d2miB5OVuuo?2qLN}({~yD~JnpAyKZ=CW0hz)*?> -z6D8Jd^*YWkm>?srZyn8g{Q^^zlyZi+xLt1{n#;oh<%f5*@}kSc!Dq}TZvpp7me!RO -z9B0qDbWFdTte5l$fj2wJH-4>Z4~v+OUf{}yDA#6t){Xj!Vxy{!O?0h5&FbzLQ*=8F -zCs6~g%7qNA@*6y$Irs49w4WbaN(6|SgCOz5KbVCtr8Oi4HMwQHf!maW)HX%~BWKf@ -zwoZ{4On98Oyk%rs6!Ud@bYW}&P9u5J;6}*&OwVLJfc?na7~RlT=_Pt7)*5|1JyEr= -zCQ_K(jLk3EMA_K*vTg+OVYk6u0`J)~g~TyLTdPlq+WH0a)RD&V`=H=8DAKC|m$!}Z -zIz{aV$gWba*5_xfZ&y-YF3CVJNUPyPLbZm~8cQkW9-fjPnhH9+pVPt@;C{2F5Oh-! -zp;XJcE^Wq`7gKih(WDtd<$!jpB&`w_5)K~P2_cVdC~k832*rUuOqWGi({_%5BtZyM -z%ou}Fr_Ak|-VB+=S;}d+s)r -zu4vI7qF#YllMzdS1B>mKcLlbeCMzm=paWY8DW{}wR4937>tmZOTfAzHH`L*#Q8#8H8V7GBz$vFxL)K5^F;AHj&_`kBfNd%e3nM}E3LV$pN=}3vT8|t -zY+i`0`-jR9X>}JdPO*Fi(?O+!_qjLE4)IpE!q!;}zJ3S|%yU^Vdh6+L@02!n5h0la -zSuM|{?9dC&qA}dGwVm%I>kz1 -zu)pa1TZj>bkF3m^ml1=t9a3)whNMv_QOG1I3fOhf2xFJ56hgs<8V&AYg2$EZrc7&? -zw;2tBBlThpjaWO;MPZs-?zP%Vk}cw(ie<6EZ0rK5 -zx|xj!hnuUeM?z!r*J@DWMV> -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 -zUuXL#40mv}N*4U?cX~c~x@$oS6Z20K8g#=y!L -zT^cJxg8qZ&saN76*d{McFz0Y(j=0;#$cYV9TXjO`V$2-$rJ -zBE_7Io-1P`U`jWh0D1^sHJ*?MB1y8Il@>jJ)5K;O!<6?=-oqWG?LO^?V^WQUGV_nk -zShEpUP|(ZrF0>iUD;nf(O|$+4cYA!%ESLRcdf|`v@uF2NiI8o@0rMe?L_TsNyAPIB -zZHlFx!1zei+aQT?UvL9HXEp)_SF;43wU}tWn!9;dCJ( -zbb|PC{#b%H0|b=Nd>(3XpFa8Fxd`wJj{DGG)Y(;Ne0%q}4(On^nA4W4I0Msr0;qi` -z|u51%rR?kjsL8rPZHh9dKZHDe-5KJvcx1#2niI9#;kq(N}e@{dyqecG(K -zFqXIgY}CaA;DlMgoB}{ZV2@V~ZZ&_nOI=&_(Q_?vAn5E5Sd&voK;^QqRco!;FKnf1 -zAaVlga*m*d&^xs09!tY(wwsgYG%=vdFs^CHcf1WG*f4oSAg?c8ca)9UnAu;^fC>o_ -zs^O_GF$qP}NDW~jM?VN470x%=RAAkz*drjNwmVJgUV~}iWB}|L_R64APy9vzy}RAZ -zJ30&!I$2z5-<$bC>Gb6dcI3gpa)B7GGoUc+I|hibo$g~9s(T^NXX;oShG&#OvCvT( -z-G_w#wP37*KvYakiI2|9QIzrnw1v`#=7nhrmvYxqx;xTmNWR{mMIuDxUWP2SPrg)% -z*Z~;3`yN&jOePnCT|MvRen??FE?;INLKqag=s+Eu(ow=?(@M4(i`U`n>gDd%$i0IUfhEUW&_*zJ3~&|BC_0bny%Zb&Di@(p=7b*i?g|(KuaXErgWCBPZk1uZA>l{jPhO~bEzzeBXtk{zT -za=}G{U?@53gCkDw1FESI#29S~3;LJyxMol@=oHB_*DHUPM)`gpYSENwdGJYFs86gT -zr!38>fPusXK_6!9WbxSw7vFducQ^1e7IjM_s7s2o*n5F8LXmK&@w}u9IBhC7dR#*t -zFl|m-dhP+HWh;k{NC$pT?fq_CR^17LWNE%yg|xL0l3dW!(3=Jm7Jqr!^+XPcy-+7< -z`7hEYi7K@;Xg*QGm(Y!l{6?IyFCg3-xS@UeV;HYPdofl&$v>2hcfyo`yFJt;%z96A -z>gQq7Dq2ZcZ5~vKsWx#Kn6~d*s~n|qR#*pqg5xcEYp*9xi+1DY8(bcBhin^-S`$9a -zce9ONJ)t3(ig~%6t5wtUkQlJgH9j9$>r1?Kiw{&mEf0N?z-U|i)BF|}AflsRGzc_M -zR<}~kONH?SU`n?362_36f)=_<@OYPC%W8Y=uCu%;*-(+7KIAPz&=8Wnz}DM6PTT$N -zpok6O9%{Pg{QmO98-;pK5avqwV;)ncnPZ|(AWgf5E|HqN7&cwvCP$VsN>pT#_wuLW -zM((%BM9U_5PnDcKdI=l?0}oVKk1LUt3Kc7D-o_6MT&+tQzr&J|+v+G`)X5-*et7Yb -zNqB1g|M}Bm#9z7^BMLXM=Dpo-YSVEdHlh0)nMta!* -z6%1B`QX-tp6TFX5`y?j8oV)ptrwOPOy4d86te3+H(jB1q+9u7wY}?5xD)?oNI*~tM -znv#;i9so9-!U<3c?-PU5e2UJ=B -zbOyLeH>1%z6|4m=Ip@J?>pHN5$Yr7$V#{ArF!>R=8>|dTln-gmxO@@wW0mV`4&^%L -z7|0J|M$P6gmdUa7Ed(}EOIoHh{?3VfV*Cy&qt3JfoJoijS+LS65-+OYX5%S324^(L -z707!(ZpdHF%WccF95Ekjsb&rkYLHoFL}KR=5{!@S4luER2xk78z>Cgd*>NBVDy*xQy$~qiXa> -z!hA6I$t|iID;hy~?@E5}hjuI5pmOD7PwQPf!_`yZ{0tH-II+4EvI`57r?u;rIH4o% -z?zV9M$jyz3%l2E0HVj!AI9C;aF`I$`0-%7-oLte<#MhBEe -zjSn;c!Xy;`4gcXiaoLQ02Y5bTSQ}Sv;4?f|KY+|8TsZ~OT -z9mL2dpoTqFa5I>hwyKHkJK#D^yloMJ^2kkOE8oB?aR%U%SAcldf_A9Ocd}>@g#(lzemS7DWw_nTSIH@M4G%DFQ1o&_&`n;ioL$7-t({V1 -zjosF4Vlh>vad?1q2EkxzRVcJr4gI3!vbEgf0Z{mnom*h&d@>|7-?q3Mb)}QUE5klh -z3De`t9!(=q`qz5lm<;p*@c}@NwkkBFx3DMFJjJ8wrlA?AU`{@4n72<4CEtexe7CZ_ -zXK4C+E6%-V`^1XvuG+i02ubH8rm!{CnU0C+KyP)(`u8;^cEcRKnCr1c!YyVCun+GH -zwVtMHQG>0;5zWq-F6#hd-4SaqE7_2s8ly-cUPnvft0XLL@#Gs|J3lzBfq)b%n`W21 -z{E-pErIg;YNxh!7tCY$H9ev611`Qc>({mK{sXf`ZAKLeKU}JSgRJ&l0r`#HsvZ8Mv -zC64zd2loPa+rXa0*Tf?Bgmk>MojitNlGQvO<^d&79Vt%r`mkK`sm8M`S?I!aRuKb6 -zNsCeK!okI)y{?moJH`#3rdr8vI-b}dTJ@0|(um)GYAoQz9!(TOElnfgaoAf6OsJR@ -zhOr#Q@TCcA?85>fhN%0Q14ldQL8Esfwgl# -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 -z;7>IWdr+67B!tvXR=BrD^(O%$jP=|(PXK}5U -zpic7wVsGMn&_g!M5si9AU2U>^ -zM$~_yl_#MUE^oPoCKXd@kd;6lgC6=Y$u`s#>LZKPXjh8fSlbjWL(b(WaG}=(3wY3J -zVpcspKT;`~7Nb_SB4mV(0Fb(&Ksef#TnQ$v9HZZd2=gZK!^-))3IA#@YSrJSv)Gvu -zRC4R&O?ai}UpnB`mYC>&C^sKDWbUyVq{$Z#0A23Qz|A@%FS$pGB*amC^t-W2Saz$- -za`sF>LYvb;i&;VOe5Dw6e2HhOvpn;!wb$ata3KoaJY~c%CNcssyGFwt99Q`1vo;zG -zAs80+Q5E`ov~dUxZmcsNoBNm{|Im@Opa4k!^P#76Mou1USN~-?Z>P>JDWRQ2vx_Yk -zT&$RB(5!c4g$NMsjk-+ybG~4d(6adrWGeC-V5ICG -znS4!u08Z!o9-;mFXP@r?a!zUdzny2Cmf^pbusu*`!|+$h5E}rgWXBqg>gWdJv7TCB1Ob57dwmzFaqh>04j)YB{f(H~2$U*fV$+Am&+V9Qi -z3X1?DWo=eKX~{Qj&v^ -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 -z*{f4VxBgN_s4gTBbv@P)+|GDU=kc_tBZw&!} -zaxa#42|8{w+}BY0qFad|N!y~Q0O1nB3fL@H3~YCeX~hE3seSCXtHKbDy=$4!HGp}_ -znSnA85Vn;&Lt-LuZpawni~$ZGXQc2q#-I`=+{ghFTRD_a2t -z9NhyO3d0sRAs2m3oV!j-xcXN+p-_-!aU^N#TdT>TZAcoB|9i(o#pEA=uBxikW#5l63lUn^B7Mjaz&_|FX^RWTW~3)xzEF4+?7qw^U)XLWRqZ+C4;tUuC1!<%xR@ -zY!nAy)`-^sAI9EvM{=Y|5`3Qp7*m;*)!p-J-(&zIX>>B2SMhKUI`ZLHMO4+yJgVly -zq8s=s<8smtJw-*5Z|>~%rhz$-)-v@gp{1h}kF?*RJ=@-mulfDZaq?hPN=LbVt+cLW&r9D -z<=^X>^uguujVIEAVVWEUtno+G{{G$;+(al_|0)KG2iY$1Zx20n)4E*nEL9@;VoP%6;0iJ)_+`&B?F)&5(obuC|xI&x7$=T -zAra4-M4Vjzomq(YgdabRkC6g>;Fj3`b_tr5va<3heJiWP4#$#mNUBm;fF{|+4LQ)?z+Yz9E~ZfwH2y=onFqM>SSsvbwt{OJPR~D`MoFtrZJygQq)e@+?bhoRmJ) -zllm!)9&|Z#N1e(@oa{DWq(+KIKnbW1=a_;xIHYEb2}5JCzj@$KxpRXHAi*q6=YEbZ -zOO3fIc|1Z?Y2R!=ND=BWsKpfV3jyaGi!x&lbA$CcwDF~xybvfLe`rRav-q8lTU2virukppLd -zmL2j9`Kt41qeu=`9|O!KT4rWR$;}deCErL(5=8QxrdN7b;)yQJz*(nx$3si#lKNQa;gE^1khxR$4!x{FQ%QMi -zZ65H=#7#|+6caePjyyE5`!I^J_2&eK-aciK7qRSJ$;1dc(n&5(GJ-_C*AZs_;J;Ojf((0pX -zId15)K=N2@HQ+U#`|p*kz6ml(rgQl{&Djqtr%Sr7A+Z8dHmG6cB4&Q+#&{fc#XiII -z^aG+;e57a2xTscNoj5WyZS)pe9Z6z|QDWFkZua$-Ko!C@V5+s<-SxXlFx7lEaXeARD>9M>C)=}VSIe74VWpcg&R)~v?o -zaJ!AydUoBO&A*Ql${_`w6ETE3Y*TTd2DPl3j}+#Qt0c*yK)spEbA?S^5?Q0{_>m>F -z@1wYx11hznxl<)$Ub;^SX>OPr2x?nOSzF2F5un}=MdaR>eOfxNi)rl-Wg)j461~NGNFlBmJgV32&P~6BJ4hgO###qxx9My{ -z^&Qs07W&fpE70y|N!=rPPzVMC40vFK*}8LKT>+tJ*4?ajpauK -z!gWb3P1dIHcIEvC2its;PcUG&1fMWmloZWFa?7G@ZdpS;`j4ojNRs`I<7)v7C -z1P9$f5xFdQ>GZ>fxKuJHiHZx6LHo{%@t~+W)ZsCJYbwPU+9AxVs^K95?xFy(-|MAD -zbIyVj58S6)p7Ump_ZaReYavZjf?2XqA$YHEf!l}q&Mra0StgIzNWTqP+PQ+mGSv%G?LelL?7XtAs2^ -z-Y}~x`4G*LgO=yYYM5CdxexU0rErow{{XI;A&?F@$v5AYo~I?*1295q2f-HTO%{;3 -zW{amtW4zFIK!gw-_Puf#5U&k$UJhB6({53m9fSXKFE2fcE2U(K4*0@drzWIMeq-t| -z5LMyW*4-KG#ikD?TUjnVr%v^(Thl_kDQnd@hz-i4ZCFsH+>#u8&f(L -z^q5%upTq)9XU0*w6E5UQ8%9qDiE6N1R -z{xN;Y4f&MwYS?VxK0Uk#0m)SpGLwV=CJ9}@f2QBxkQlX;@0*V-tY~K-sVwNOpq(i( -zdWNR#;qkasw86svaQy2*)ZYJk&R*ox)8x#hNLz+u^?-zd98SdC?xO;vbXlk}SBtt)K -zWtBfA1+iFpl1Gb>g|bIjBt3YBVMtL2>WPN#SGT0KW2+_G`%1hyd(5d}iNT<$tT^hd -zG0+SN~#l#YcjR^tN7Qs9a_1KOt&{$yS0=l=O` -zteE0g(Il3$;#{q1gNb|CfBf~wAH{~Q66P(LuD6a5IwQ9L|9#5-pP6p<3pf?8b!4lV -znF4W+Z-tV~POm3EZneq|iZ$idHDD!DfjXi`u -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 -zJ1cepAL6%cgha*mZ7h!MEMzof#*^F!2t&Or9 -zkO#0*K>e9vqkMci59wNs_=svSlv-y-qfOI(m^bXO*JUE!QoyhnT!GOuff4NGru@&kcv7XJkTt2uutxZOb)J -zU9!)_@FB79W1K`5VuF(6A>TKGUGs6Ek_j0-hAi7!nvn3km$Vml(UBmMaS3#`&K^?F -zXZE|4VoM?`%noP#!U-NU4r~&L>}q=3&4IFfp08!aDjGRITdhkwkd>s$-PY3=Js9T@{PftYqYpMBF!1`ZSif+BPAfO5C~}FI -z9ddX*5-MPLu9>#S?_^>DRxeFWm8kv|*9Lu(b@+DW!4-)e@p*nf<+EwP!?i&G{G>T$ -zYUSR|qliw_%GNG$SFNSoIJ}^rb-oQkD?qv!0>*FFK`0@DF-6M|YvX<8tui79{#5SO -zcY>ap>3M9bU%IC==_`0UC)PL61(&kR;-^{b%PpX5JLbt_`dP3#ONF6c`{s -zr;*}2hePO~p8>;;tF5sY7zpqq+5uX2R0xQI7`ex3NC1?k5hUKhArJ0&YZ~^ZtQ0&l -z6*Y?gmySC2-O)vIPb$LmE*KfUUh7M)pkeNI)%U)h(Fh-@uh)%AxUi*<7-7UJW-9ck -z*-3Sg?^;KgKiG+!m)ITo@Bg-IpdL5(p#nM*rxMJA5uRnujO)p_e}P9nI3KIOj8tgq -zX-N3SjWIiD{pM7$1+5W~29qTrBAtadHGr0YKU~H6)S=9$9J-52bg1hmQGbDa3Bi9> -zB*PAK8gMRymng=!^4CzJd~KyzCiFfhU^{X%i^q&VgQ1M{Y{};Ri?OP_M6NnR%P4R` -z+n}ZlyTot*Nf17MH=r}&wkus@j>v;~?8U0u4!e2FiGj6AjOj4u)l}lTsGO5fYhq-O -z1+=TvD-UIy=C^>6DHiC!KSTT25io4lV -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 -z!ND9(V<8UtgMNr26l3^8ZRhK5QWG0CwTpU73` -z{NycjAJL~Ik_^oW=W@TeH*pd0txp3krdgb9flo9SU)sx79m-aNRIVsd-*I8%VEdep -zg;+E)b$q(iEyR!lUT#h}N4ueaqbWVOlKPPOU9}&sHS#zh%)2Fzc&~OS`XSm2F#BMf -zq#=BoB^ZDriM>p -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 -zQc|3lS%wx4D -zYnRdk-BI>zb=ZY5pk+H;Cqg`z+D4+v){6J%B1GoVsg=Ev{hCC5xFzf2&z*>(`#s5b -zfNiPzn=2+*kI9?TI9)m|VXi@;~;VJI*7dFJQ7E>fCYtecHJ -z^}^ZAVmVl77%-Su5RSCc3bYrxw%I|L*X&Lc1oaol^U~Cb>KO?AHi*`$Oe-M}PRenNh%l5~inGNzVO9{U9;d4F%N&BG -zy;=Yr*pRddlD$F|z-GYV6PkEGZ`IfG3&LI9{XtX`z1V$J_`k@bTCYy1~k#mZ{p -z)%<>VO@3yjjXprLB33yYmZzix*+*Li|C*MrBICDent+R7CnSP}?sng7P?yvt(JgWO -zW_yU##J)Xm_BkuVv6PPB3Fa~rVy3`!$+AlghFlbBLMZRMw?*L`Zg#?l|7~Gyu8H~^ -z58dr$@@|ujuxwi2Hq+fa&L4Kc+>T#*6#_3}VO@MS?R$VhkaaY0-UIb7-Q~;Y`~BU{ -zbJ}*@@!Lv}iQeA+k0*$9sJgvD#h2~k&!W;Dj3^2uZWHSW=MKVFpSvMvmtb%?kWtXO -zy$NxG&P;Nj7<faR8?r8BR7ioKc2iB9=dQF -zMgy9OxgdY0}rlZN0Cr|e6s`}rj?_Y{&c -zo@mhhrMzt?itHo_v0x6lwZ8C92qzf(DtKfd8wu5*@|o=t{$9+~DX3JDXTj9G$>O3Z -z6}+x7#I!y*mo51i`0o}OuIvLf%sAfQH!vPqs63T4qMynaDDAcH;5?ML?CVH&-tshG6?SqJ>z?j5UjKlt@hWOcOHfI9G)ncEa8+IvD7_SF+W`zT3|Mk=}m(!z^AyA-cV2axmBi087%2oek$jSV6 -zDk;GbMB?IxM;Q3vK%{oAtH^&>z~fIw)A3gwmJTH0EkdO??GALhC(L1-Ls7oQ3*Wy~DRi)Kx -z8>IDWyDoBZq6An~A?L*`>Uxf>(eV`jiIhcppP77{-ILVtnI{e82A8b3C6Z~t-uCCn -z_yQJ%_@!PR!+E9Mf7YbQY2VNwQ!XGC<_RJb!iZDN@dZJ!O>M6T47uR?&>og3(@YNf -z7qUm6unA@p{=s&d85!!ILZf^i%y~U|!lYJ3u5ogHN#=$*|I+2a<;KEjkWAH1P6?Nk^a{Pzb1JGbGFtyq+u_!4yC^ -zBV2BiAX{%jpa*vvv&BC;s`>xyI5a{H{C9&dP~5=UB~B4Z`I@n8LXguiY=l5f;pF{D -zVv@7nmYp&5>Nf!SuwgA&035}`XK0X1xYZ#q32GSWIv*DTnQfPKm`f>25Tn}A`#B{7 -zQJfYYVn-7^pe7+uu&P)mx{aNQy3=rYmWCqd;Hi$w(*4$XrptzJmvg;w^$)W%M-f=0 -zhrAv3*ALG}bl^&Y*Wt;ORXy=SQ{CEy7?rG!OFjTaTxT_&Sq487MA}IhSkp^g;$o55 -zo{xbi)6aqZu>D>HYV=~O5kQl)#79vQ9s#r{)<9gaYV&zGhSPvw3Q-U85Iyc8FN#T -zPB>ZlFWj!>pJTh#zEr`IKHRN-WYmQ3`-GJGLL&*7n&bQ9 -zH^vd%oHnar(+F?^p&cyw(8*G>MR-tLj5D`X%|7yN>i3uCv{K*C+Ls6CQ8C -zy8YA3HawsBt-cR#d=3EYEf_D)gj -zvm2z9X+i@e?5C!a!ab}8-gCJYW#`HZx*Qt?xm&;TEuu8^r**k*Hj6vj@cRK$+sOp5 -zlYT-L3B~BiMow|6J@=9PbeaeC9Hwy^Fe$CL>sSC5ilZ3hQf`gaHgOwX7chb9HB4KqO~7iC&t0 -zwPIun4-I8a92bGpm$9a~B7f|WRCgo@voEVAqy)h`us8vMBeIg5KC5z}$BHBQszXn^ -zh*0z{RjNqPcJx|KSaDcfN6Q?T3dqH9mxe%yatswc%?!Jp05q}5ADa@dicR^a&Eq`# -ziAgfDV}D(>JnO%#N2>DW5S>Fhf~@Y#YJ}b_Q&8N}L5{o7f=}A&EGwJ)P}vFN?XB%e -zUb{NsG^c=IYl~l}Zya5+uHx4!xvc^FD=})M=~7zPrGY+wZTlwU$Yf-&rENG|zGnFr -zIQqu1v0$f=8bG^&mS5G)8(WMI(CgvBrBOF2f(s%~{1Zd0>m7^d(v -ze)2KqM5nE@bovftN^s$2FUZ3oZ6m>r>vkPhU0t%Wm~Zfv_r3gmcoGO81I5*l_|>Nl_wX#mo=nwN?d2L+;%-hILGtd3PxnzXTB_ -zK!DQhBi}LG&nn(FTLBJ$-~ILLWXhIebU~GhX4ZJ!t(0@D`o`Rp^Di5r`G1%kVeKJ` -z)37>4cPOJddZVklK~;4PMVcI6B7=uvraJbY7ZfN_~!XoN)2 -zlJ$fQa~M2;D8>_p8Z?cXB8dPmi-V(%)iYC{0pbZGx=-h>;; -z+FE+Wbi%We&WjRNHF|9Z`AF)QQR-TJgmtoPf5G=7d<+Jz0GhZ^wJUXwd(~1NHFK5 -zQE%QwT)ug@_x=GLPXC5FYGXm)r02Hb7N7N?rXeariF=Yx(3{slqiq!Cs-vr1%c&Mj -zLpMA*wfu1vV1M3rIFm_qmMu36F9C9An4r8ll7A9umwdqDEp+#n8`$&dChCAo(^o~C(r-)ym2lBNdy -z`+^+Io~UvzT3PatpE#nGU($;~I?u@zCZ^MZDE0@kaoZ=tk|1m7Y9ucZ -zW0I=W%PpNbU5mp=9z`wF6abJnEnD0}Cz1i*nS4Y+x%|X}V`A1g6-V}lHQAu_FO;Sd -z#Ee1cKYjt`xXj%&(OKg?oK2Jt-7uUSM(2o!cuZfsm# -z0F=b^V<9guzQGZzvl;u7uX~uXIsSmV;fal!;OEnqltV5ld=u=rjC-VAWBAlT;f3D_K!E0OvqmdlzB$IgqtsJS2&V4ORGU7mT2*&5gK -zNQs7BR>@13rJr`9z1A~kW{1cKf;DiJAKKazp1U~L;r`#)dP3T=0}&w$+xH>-y{Z;3 -zyNc;gz`j#p^tuqr#OP4H02UnyuW85JG$`8sY- -zifvbtif!Ar?WAJcwylb@^RBge@9rKwM*oHRWzKQW`?yZca3)HUyINyo%8UsstAIVb -zi2`b=rWz<}6np5lbyD|IM#x0bASQO!m$07ZQ}6r8=S7ww`3AeB@PAgRG<7A9U^8+% -zh{kz=??_1>yeF;ojCC=;e9&aQ*N$dXm{|>t9@*pJXyy>(o;-$&{~5c}ZruiBo01{^ -z*_m^zhg12mqw}QzMo~h=w;NNSN%~E};bK5<4Q+!TTPks4)O7sJ{^D(FEuBJ%ql!8e -zQAd`h8qo)IPs;(IqBd?PE6K06&u*+ZeQ-E-`7VuUxL1vxG#jtsJr`dhVrtSemHG$( -zLmEt)NX81^{Bzyg+H2gzHH=&14~srvKY9m5S$6Uf-fKP`;qCy}v4L=XdE>{|=TkTs -zuy7X#G!7NSfN!n%YpP12h!?Mnk4xV?%P7#?HYME`WdVqomuX+AQf -zZN<@l$YS~rStJ)dRQtb^MT`GU785Lg$l~!2StQ=uTvbpzZ0HRq=C}w>mq3w0BHB3ZG2{!JvMm)i=RCJt6 -z^Q+)7=&gKUmTU-SrtmxAtgg#q3>fZOp|00Kw-6DdzD^#hyvb7jK3QY+lzNgdV{Q#J -z5?hwza1%&l%8oZWvmi3!`-RK9FipluxUWaoofh1hUG<%e9LT$(Ws-%Lk6ld$U-LPZv4 -z3{QB8rS-~__>kl7nW7fSLov=Q$QVeB8DvSiqKl2}^MZ+lqG0Xu(Q0#yP-v6h>s@RN -z@jL3+ai(K^FElReI%d&-b}7?>Yps*KNVK{7Z|hN7aFlK`F(}2U{r$Q8K@0}|8s>hv -zqxB>ZgW!oQp$HT)Ui9L167LC=nRDk} -z6WbF(7>}z+K10Mpzo1i!3Nv=;8qPj%dM71}768V(wo8fe-{cGl)?Fv#J8K!U)~BT{ -zUg&yS$fSNtpG7|o9A~z95-@vM(+v?xo4tiZ3cg!)=F^yR#UFOlL8%>9(GlcMcBVhM -z^Z}O7zgJvidp47sTR=*Dpp>SDY=Fkhdw@6Hi;NW^x^#t+2vG` -z%Ihy^Vl=CTpp<^LgH-Y#SQCb4OSiwLhfpTvP131O9hF~V_eTDUkKXganThfA8z|{W -zBPTEqTBnfKzZ`hHHKd8#PI3SBeWX_4)A4d -zJ`K<&04$tAu^O{@a&_98%2j0A%{5ChI}~9TRsSU-W=a0!QI~R>f*9(is#~hG)~|Mo -z=Vf<}Nk%;!!7fM`{VNpWB%Au;#6ZJ7PVq~ewW@);)GW4>CvIIM4lU>ZJKya5ZTuJa85MmD;6yn97 -zX4;=plhq3Tgvq(qogwu*DL67JucxTO2hq19p=N~6N|AFuKnDDX5BB0-+qTq_UioU3Mu3vS3R_>l#W@X0hXdSeOEF6A{EP*8#7^-lQYrWO9D{2m -z7II56cL`Lxt01fSnnF{c# -zYF#1WiZPq){F)2;sM5j9m6A8^yp-wIN2qz&`Syal;h@gBsv;c8#LAYyOaeR9W4aaO -zrb73bpocBUn+_S{;q-#J4FOjrB7d9}XGl&iTTBRMHma!SA1%%snI~w5QY8J?q -z{%p?G%DGa&vxo65dG;afD__i)UMif_)bqAi%?wICd4(MFDtEk8FE$|1a&=C$A=)a< -zkuN&yC^8Mlvwwa1CjHXvzd1sl*zZCp?**^1UFE~tMdRtH6@%1|HdO!IIx!r&%tJ3u -zyiWPL)xbB``W!HxW`uxXg%F!{#U4Z@j-`GOK>|cQ;)|_rOZqrn9a(glrw~t}$YH!# -zi6h1n)qAVq^NWxv8F3kCwH)EPWNV5v*Z9h)rB~WC)(M6>fQ+_QA^-jIq6`p=khXd= -z73^~DZsG|An*fG~0fM*H7YWleJi0&!{Ez&!4w~N!HU=!j4 -zz?e$47_pvmTu56t{c|z2NYk=DzoX$kyW0Z -zZYZ;cDPP?@jJ -z#)rcgQls9uvdbg$BpWKgBuXB9acO=nJk -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 -z;#L)0@)HhbZ<~3?~oB=Spa0 -zAlGm$rSi(9F(5AE{9Ygh{zO@rnJG1f<=)gf{xjT$p@RPXg+`HmCP5dLzQGI-_5+`W -zZe&MQWX1}X9X~1*9m#EYY`{F&*`0D_{3~#}sluhe#LOM2`PfB;ojrC>HgJr=)qkP` -z{t?}p{)-ddg9SJZf_qwchze*DDhW@MRy6=a^503;kkW|s*KZCu^1q^tkz`-F5MsF0 -zUq7z|3u;9-b0qWsB8RxZ=+@^jYx_dB-{X&|c+{6lm%xj2vUoChF8cOanDBjnKk)Az -zhKvW>-S^Fx841%Fvqx3HFR0U -z@0?&mNpyQjBRK$Pbbg}mDRGa}%y$xgnS=P*9!w=?V>ES)5x(CZSi$y!%UY}p-5l*W -z`YUC>MUG*YVBeIWR)DbLs)BnwB&{sK*^pBQ5bqf2i`1{KVdy5k*1Es -zf;oitr^qt?Hlo2j3W?|i7RBdtQHHj+v02%TCRJ#ySy?AAo~c_$OFwqhOStNV^uf)| -zz;Wm1WV61qnMw^nU|OfOYulb%&J@lRKHlKX*YZthY+nFqpTmRhov{zmn|3H$;+F@J -z%$p64+v{nXoutQ7n`;TkXoHAzMxeU!1K+%W -zDh>r(_Bnu3ds#SCS-``@19%y4CT||ihqK60+`9a=kW2xnGW+r=7a4bP3mn}TQ4`{P -zfAxTZM#XnNv~*W>Vm|*^#v}r;q@qYg(!jyLwSP&kdrGHTXB#p>W&>f3SY?7s^4c7b -zbk;iL(2O=oEfC&6{T(msInXyxgyVwddtHs9o>hm1+%f4q3_PJ{^hS1o@~tXA4w$~l -zo9r4X2M65Xxch*!pTwLm;*7t6jT$RMnchp1HsZ#cf@Q*IaL7W -z84#%)QO(RLMFs1nt;CqOQBH{`?8L$5v$X~|Kt@C{H+(X34#{hle}2pAbEenlnXL!v -zw)O8ka6AY|sDLAwsNkTu>|iH_@z(3BTDmRQf+}-T0yAvIvtwAeGyF~rAC5_^*q+F& -zR%g=)la?~i|Lti^Nz?gqTcIxVR72|<%|ifBBiKJkQ<7hE_{z#5C;`9Hk}_-AVO80$ -z%!j~+{D)Stc3dS9Rg)f!+rM;Q`Y`$$NaI3$ki|~sl6&5Y(M}xtBUfj(%J|8?q`cK)po!R1zk27#>12~*=3b`qr)EsYJ` -zBbD|5#`?IRv8<%{8|}M!Cx3Ed`;H9_h~5{oz%|QZh*W9|WfKK%n#O6_aty-ER6A}- -zMv2-{W-_{-EW%C)TDCIqYF>qV#2R5uW8F`yar7P_iB4YZSCV|xo-KcijIM8!te3;3 -z8o*%$Q?ZDIvP1DY0;evLd(9Y2*!-9#Sn%Mf`%6d&EH_#OfrcpcG2@GtBkxL -zd^^C>*5=NU^Ah}%Y~=qrNJ|isON#tf%NXQkM@xKGw7=2*h$V&}j)H0KP#ZY`9jO<~{nZjN(j4 -zWB=3q=>`%pA3T^i7%&3qIEXd|`kCt0I#pfdTg{bccEsxc_SSXzTM&4LFF0NfAlDir -z5lT=#u>+)BBIAZTT!U{SHG=beA5sV#lWKIUyB9XqAbsk=cnmr-tW*FD-EO6%{2Sfk -z9;HZ9@vE$eSR+{+vUXO4j|;Dy3|vui3L3;bpVs0w4SCmGjhh5N%~l4-$dWreMFklD -z#B9>_D2dx7mXtPWppGv@KiVZJAHC4|5{w*y^_e$}8Od4|aXRN+5yvhMPwT}nn6zav -zV-lex9{#&7i}XwZdjXuc8q0^QAHr^-j1882-_1P`ba?>QZMcCAWxIb_6Fi^LQzDfi -zO?3Pyd2z$gBtMk@_x)2HAuxK84(CWvIyfzx4OrW}=&Onr!Q3CE>UiQ4eX&$g95_(U?02pX`RCHjTSMuS{HU@gktk-8yQOf)SK&e4PC=ycO`=PtPU2Qw -zt)Rz;nKxTv36DWe28tt)d?+9Hhv#I6%>6j@o+275suM#r>njGr(QfXsAvkA@_aXu$SK9SKwG8^IU@Xk}U!vwZ -z)aewm5emz`D$3gSKUqe2(uN}s8A(eNND89jIhcbw8K<~Ike}wF3+@-yKS9*bfrzX7 -zqD%W-x!is5>0bv1(@3a^v4azq7}c$iE+NlqHr`($>G&DCl6(Yle2us%8YN8pQd=b4 -zK(X+Gok~ML!N-Ze=5}U -zUSyB)UIV#^&Uhkb@V-GY*g7;@hR`E>!KFM&GX2Gz%^>_|<*Bu6H0PD2K#de*1&z%z -z+ZqjoJ>u+MH+V;XOH(s>&QiEr0xgzU1c=Cf$Yq2uPnCl8_@7BY*Y2O|B>*VkC^JJ(-4t04Da!<1tc+CB -zUf4S&rvgOtU=Kzw=PwyapSL%>=E0GNpWA}tVfHmOd%J7I9Qyoolb#h+ud9;@q|rap -zkrahw7z3qx7<{8XSyg*;hLN((odFMj?Ucd554VV$DZ_UFb0V-8M&b+Y_hcON$|WG -z-NCuH_VQKDW$nfmS1jJ+sZ{WWpW!7LO)l#dM2;LNdw|)iKSI}kRv(@0jYK?ptqGLW -z?nvL2Y;v4d)SEN?ss-K@9`_GaUuekP|Fk=es1iva2Byb3(D|TPwQic`v*AVbar$~% -z)MazzrE*CVe1)1aoHkHXp@yoSTuXAWrF_K(mU%h^HKG2zr_z}9JKjoLL~ -zZkTTSx|wpBIUx%VOiGr?rYPSHQhze4Ll1S0MY@?Hc<_JIr?9pTT$QZ*h6}WdDxYbV -z`G&B@5A`GW^rfdt5&AU`0qYJgj$flYkCg*~1yN##j~6G7`H2v&bV9NMA{{{%(J8Jh -zAPsj2=rjWArQSV*pL;SOM)KuFFL~A}a>(e?P9)=m=Sk+tBpVmmh|E)8OU@;MX4izQ -zmj{P)d`+zTCc^3dfv3;b4f`D*OE -zT3@$7wj)&mKlAyp1I20Tc(m5<49A~MEPqWfgw(PgQce1}G)feQpsO!EWCI(I@*dm! -z^-{PxqSjwd)(8Q5K;)>GG9Pm7WYmH*6Hd^aMN(SgdRn%zA*(FeD&SBU?hx0Q`|8~5 -zCwTV;6F~vsgh%k+JTo5BsJWBuq{Fm*m4^J6MfUU4XmRAjsU~wH?ib7DtfZtTjHlAS -zV@o!(X#0y@+l7^1nd^(g4SyQ)&#~wjrV=}Fo|3vv?>hfvx*IE5IuE9{fct*EDd&5H -z{bOx^D5Z@+6!WtwZku*7tgQuUUY;mki}azfo6mVLRH^chj`*`?^`cM(_1${Yco^w% -z55ratgNOQNIO?i-VVLrDO{Tvn@cl|m77!L3)E2>c9tY{*Eatu>t -zAAfRPLpfoS{)sc{W^*LM9Y*I?SI;QU0hExcf?pc*@#JolR -z37~zB!eE{5*^TQ=tfrU$-o7~?H`FUIJ|9JIalsN-$f~)AL*GClr1bY6h2!Y?Swmqk -z-Wm?22R?VgJyx}FvgCc#+b6$|3VP$loA4$qZ0=An0M#lHZXb)`bJu!K3$8J#hGB>x -z^q#4Wd9esW*CW@`_pA)A{Gxgtsexr2o#11B#rEA -zK`K5cb*RZD#pdSGcG`MYX|6IbjY6$N>LQo(W~Ke``uxMo?tPtQ*f0s6CdW=Kn10+6 -zGq|AO;p}Wj#+BW&ZSpQiWha60>t<|39bQa^wkRTb7~M71U8qCys+N~UrVt$_MQ~9W -z)1nX3j3u03Gc(W5XcbVKDr40datb73Sr|%6OIN(?Nrx=2wO*;TZPZvcio->2a_Ka} -zzsbjN#8niQKC>ER>t}YUi?;Y-iueeEL5lQbP`Qqa8zk<3+w^U1;O9CIViRmj!H#|XD3G(Jw=dT3eJ4fjnD68(h-{s?a>G`TbFoZoDAIpGS2^iD=maaP99?nwoBKQ1@B-f>a~(dC4RF-t -zgBF+`@q-2gS&-6b5kl%Ps*wsI@w}iAHzT}Wmk1cjswv~o2%*@5420fa|6z>}BC!+> -z&CZ^69H2FMwU-iKHZo?~s)NrCWWA&kv4wNwj>5YCcyz7$x|7v*a6@0vsKa;A%=$nB -zxi}USmkEFgu8CKgM?O;-~&E^PseZ} -z&-g>H`&OsEfSsRkFDX)aQ_5Ah%Vy4+p&Sb2wTbANS)sE4;vr6dLzpa_B^9X))P+-c -z^2Z^cW7xPG1&s7gVDY~9fj?mkDiL;>=O4F#LM%VpMW?3L#_Z!PJ|iz6Hk%GT2d=Rg -zMi*?_-JoM*>SW*X$*kb+W2Y}(fB2%aPDd4$|0VA~Nd&=hp^5wZpj~MCdYnl#7IIh< -z4s7FrXOKBm*zUM*I*A)b1BWxNQT&Eb28t$56Vn?|A~9e`$wo|KPQ7Nc`lOWe -zJugyf0#h}Ws+RQvW>)#xi{qt`sE%zOb-{6gRXU1EPogxUH4gnH6ROOM#b$b0>(^52 -zQa%%ZAf+YGgWZu78^-vgz_ZMRxF(tSFwd(EOPU7j=vKVhC-n96OTo^K#t8~r?!>Q3 -zZ4}~-@IpoH$b3y!E`Q-<&aIJ}L)QC3D&rqk&n5#X>l6uDSK2RyRYc21dGK@)+`iDg68&;k9i>o1-i1=!y?;$( -z7iFyk%YVsb!4KrCR2>uNgmFnEX_^F9cyU(hVw_=zF6~jXhDRtVqFHw_tb8n`s=8^LPE(42UkrW-O(%cLXhI -z1ugTgIphM|@B03MCgeBO+0>BF%Yj^(H+Bqi4J?`QLX#C8ljxZ)H=+Z7186(V6Sd(a -zHFjU`ucfTtv*`h0E*+V(m;pP(Nb4^n46BMigsS0$nmHjuF-yxO5FNsPE}X7DAy@V$F*0;Rj}aDgAM -z-D)pS86~kKR=TcRcgVF7c#Pg47s7q4h&^*4!yK~pWbiXI$le=cq=U*??~`NZPx$~J -z_CUtyF0Mva(q7SeF(CFS5q3hd!(DaMa!aWx^IP#fBKNM|eabPL6LH1Qi8~dd)N}$p -zHG*4vm%t4Q3c0 -zvN;&6DS`E#=)i4KE%x%ZLwrDt;WUoDq5xrX#(>kvaP?9j!42>Yf@eO{ -zpc<#PR>Yqe$#@8&-;=%W_XW-*LuYd(SFrk$!A9UYfFM{sluO|;74rbjUyw=4H%QDa -z$W@sMh!~tKNYeyJ*Tb0|pL -zc~W={mh$c=y`<%#5BO7kHi3d8hLlRoyLTsWhb#VpC)I^zE2ERb%bAW;+jQa-eHDM-?BsN&arZt=BZ~iI0C| -ztF+uijhs~qM8wunegkrp6B5BN9d%n%rImZC_1*|lRod|xrLS)BIDYgl`B7$LZ(e9S -z$r4G4TA%hkaF+<+>Yv@Jp*yoOfs9OH#E0fG_3)X?F<%xKRprfY-n(LoZr!8?l`K5z -zrOS0cy{J_vx)e^ANbG1t1*8LtQY4i?9D*A%1uVe-do0)nNDJm&%r4qi%F+xv3?!N9 -zoIHH)Fw<~>6rsuZv{4*>yk64tRp}0Jr(=?0YTWgUR3TOzgrZLn1U=@1+)0@XRk0X_ -z8hRXiW8o4%CW^LFBuEJmC~5DuSJXS@{r&xA%(2YC2Y(-q2@BVh5+$G}JJ>8L%{T3t -z4ve?lL`LqMx&H2CumOIUar>m#vfZNOj9tnj2#n(9bWFu=p@fzbXyAvlM0#O|=mgkm+#i!oxa -zIwWeSIZ;CO5H{$N55@ca5A2b3Q}c?yqck*In+plX^FfJNAepJxdCH~t^^AU5_hFx-`6 -zAy$(0`#rU4x?R+uh6WgLc5-R^pd)CT109`!(C(alyzLHd3 -zMkDm7l;Uf>wl{brTyC}^P1tjz*{Qit(USl-#{%cqE>ou_KgY=-sLtbMh@!1EtgPq` -z8%QV&RH}$fAk6A#mc}Tst^hcaHUXxh1VL-`aw<+DNS8~xvOlayfnNEkG^$2JNUbv4 -z=F%!{=nP3J*AgLYk9$;%MSUhQ1}}HIdRDgfz2XyVI_kQ9V;Y);qlyPy=kVOb(%Q+2 -zw)l=%B*sM(JL@FMqEZl_AR^`Aj;KG@JJRWXVGR{n#laak_4+_20mnd@qGlo8(cxJs -z-c8XO6}jM3es_H!EpMRQjGgcUR#~i!mrd>@szt0K5}<;PM$ip;%&9Tqz2)FbV-r8l -zXr;}~Wq5N~Mz1)U1WE2IOpazf@bR{6#ZH@ni0kj@b3Ez;w>FOuurL)fSf&+$U|J@D -zMb_6-2x65#kliCmS)CqHVbw>SIWzln7A~1KiUCVO7Q!HeYi<25@^(ci0rhgy$L(G^ -z29r$+at8Xt=Z|+D;$!EUsY#U|VC94G779JU`&zK;#Ht9d&;vQ`$U>h4n6v%#7V3s@ -z><`D*Lo_C$0WU{>9Vz~9H@$$;HdfxgG9k7x(C$NKe8hw39TQA=e22liONIKhBt7io -z9fK?(#cSk`nbAC*6 -ziP(JBwK(!Dig-WzQPSQ}!J-y0UUM@w3&+ctt$>r#y&$YO(mckJ^u-qDoV&_XFWo8U -z<>xdU(IWK@1(JaLco2Rpn97Yd^^S4SVHl}5_Owdkj}ZyV8LSYZZC}_NNUdO-iCQ9( -z&_&EO;6roHW>PwghoZSM7yCj69jVg=y1(i;9klEx5RohwD5Lj9skyi9LgYMVgoS%l -zFT|to)TJc?(fvr>bRS}c-P3e-Q#O1YQsy>-uh7n>2QCeUf|3=^8T%W!$Tm-Ye`SzF -ze$d$quFz(nYur+=!K3V#DGlbufDeNN&d)K^B*}v&^MMtR6SIEhQzYw;;yIw{>h1pYbH=8zmnTtr^6s4iTicl>u -zJ9zU(g?0UvZtxI{QdjRFbPbjOy2q5(R<@5oE;n9{ecT&W4E&cG%9uMBufLAGj+w#$ -z#>S6xeBl{(llOOS92lC|vk^>=0u?iCT6t%&V5X5|6HR)cr(-IeWt%feO%fsd@&M#5 -zWr!>?0p=~uY<>`}$2K8IxR>^P$sI->TSZFmPyX@;KyFd&FuycsONQNU=vY%ND$Xx( -zL=92j$bM|@0pYMr;0jMp0{J7%E*I(_IiXVDA!%~{>+LE0{hvHzFkc*PC%AJYo{~mi -zQlK2y2FMv;*lc?WxfoZBe@Ku7WZjd1XpthZep+^tJIL`Gg(#{z!VW_$erk$Znqi#V -z7#Cc+;`XR*$I~z6h>oc@&FATN-(0M|@0;;U2uERb5(pFE@1PoD9ga{?1PWt9|6v>mPQIhf$I#J6=oFWKg8KM92Q -z5;Jk7!bS&M8m!52z3&Ja@GO8v`AM9^q>6@OHG$y|YCU!#%i96_lp!NvfS^LHMtL5P -zKty>*$`OHKHQSaX;9yh@Wh89r{77}^`>aNczC}6UioG5doZ-m+4$!AqE(pa?@oG~^ -zok~Z(WLxRHZe)um4TCu3FY&j3G>O{PBJFHI~V4F9$m{_mWT@>^dmgXyN-OpCkuQXKy*JYdndHBm2!Z6wDZ&rL?c=?izAJ*d! -zbp-Oe0@5vHC;FX`lm%Ir8ptjb&VVf0;||ZXIN(g2ibum}0A~41%dAds-!yv0b0ec`ywn -z8Ib?!N3!2gJ^)hXHwVw`YY`HrmZ^X=S^!hQHKQeTPe47@;02PFMwxA*fbv-s%|_B& -zcWt1JnhX0-A*iTft)IAyU&-7=lR7J*f%FJF8O=N}B8$zdQdkMPFL)xJKN#Iv)Im`+{KWj}tHrSksdeBBrzE%w-OXfuDQIdMF- -znh~XpUDfpkE?Lxc$n}ADo(E>pdvQ=?jR3+?ZFDR`7L{GD(6QLJ0BK6iO=OnAbJu9QSzm -z=$zWFkKn5_xO$f%Qry6@hz>}aLqfXZQi+%2M2G98!|+gC*_MXjnE}??o_;JA4wC!2f(jX*^Zx^BxVnU~I>F{cpZ#uN7FNF<3c;m%tN<~J0 -zFk5LP%c#al0A5M#S^SiHs5`L3nioJu4WY7{GM`xOXRSiO?VpoB7$F?U! -zI_a+8VrUq+Sd)4RFVq~t+EMt7waz+NIQZs5CG2AtOg6=)710SsIgf22^_(ihXzS8^ -z7dKTWsfc>6_M|N=dJKJH;dy07n5GAncsi0JTwS)2=pl;qBr&F(Z;Dn#2*CwM{Yo0# -zZjIQlrihZg`a-}`i2Yh+iaCigo$9;Y?z7?te22(}U?-!=Y*KDaNd){-YndrcW1U?s -zZtXfameMGDb{|*}Vx9CqJl|$dp!y_d3;L -zty2k$qlwW2w@5SVCCdNQ-a;$yoo=(os>ArVtozS@M=}-9HR&p -z`O>>DqC_4td}qin^@+u-f$T?h(!{`p)EUV#DHo{*^8ne3WUA#!TClcn7HR-*zzwS+ -zZ8%JFVqxY2$JDNxU`-N|D@y*5VE;6zgJ7Camw74$KjpJlv+lO4{W{|E{gA`lX`8qM -zyySkH&JFR2_T4bZ8$|myY{v30KT}3{*h8)`O%$=ncL~@n-?nClT)XHni#QF+)tgs5 -z>w_fZz-m`pfLL>;<*Yszlp+j9dEJx?c)3bjqDQ63ZPw97EPX?ZTLPA~opVm~6yfG~ -z&sCMNF{2<$Bg|&SeY?-(;=L3Ifr_|{)`5`QB2?>WR$KaFj3^83QlzF4{k<>+dm)+pOwaHbBAhAn#UgnOO>l# -zX5St+eqn~04MAq69<9mo@5BFs$FeX%8UBGT(60LBqko9rQ(L!a54DS=mc&-EeS -z!COT^5ZojBb#H@+D@brvG&D^?Ty;);5x9~U^0=(8JWUO*W~Y>v3ya^dc=hE@b_Zs4 -z+R~Cb)SRu~@C8$Y%6@yHGlOv{`@`KqdGGfS=8S?eO6G228dw5D_t=jrz>DsQ$a-_I -zM}&Tt;Qlkyh(H -z)+H0BmXlhhjKIO`Gp|qZXkY1jw`iizJEet*CfUTB?OcP<!>v41{D -z9wJ;OtGQr@Wazi)`W9^#t*1X5P%vr&-MA`ITIf+@u_D?)!eyVbIt*VGp63XmDxLpo -zM_>>H-H0w(;gq#$MGj{&useERE$lmxTT+9v=LkH;4pJn?%zI3lO|hW~f=35RI-f#P -zDsF>hj!-3yEkp-=3MuZ4^jQoR9P>?aE00EOCS_CDM!?%od&=^9k9@Lo38s&FDy;5B -zg^+?>4AjZMAt}=1WpYK{O?1f*v8W#p!MsoQPtFhsorOOOeX`!a5x}tA4^SoY-d~UU -zuYRRxuM{vFeLZl*RlY#`iH=w2y0KS@R}zPtH9He+RZefzh`M4N3np5cfpNNR&yKWS -z?#%#A+?w+qM1ktS)C -z!q3UXg-e`}w!$28Cd|5zm9!Ihberk*s(0yxeD<`V-#iG2Q&iMs$+auex*O6p%e~GE -z^(dI2A+go6ws^#lF=Je@E_GAV5u%R1;k@4?h3o4{IH*&-vDcsRx1>%7&sW%6QC%a*Pc=zU0!ZW#ZS$KkW<9muO -zr`unoS61G#8v=`2@i|P7n(!U_osa>w_hvh0_zCG7q+%$0R6S*rROED>YTDfEs7!Nd -zx^n<^MLvP@5d7X@)@iwiH;uFAHu8-~VNL~X=E%qx!KqqDCdg6rk82TJ_%I|m-q&)N -z_i0-^;b8Bxn9+}Bv@rn}6M8D3h2LqzE_P$%#%Bw?vPT#5p5)|B$rf&{KZDZIS>faE -z6H}0Yqq>#8S@Jg#P2zqjJLAkeKG?4@|Nc~1LB8C+$t+>9`UXvb{tP##6xR!Tkwp!v -zfs4m*>YPYW1fiCYY%yuctQ*{>&80Y2 -z4KIItDY&+;w*DDqL_YsjlkqV&*PK{0$2rn09?D3pZ8Bvi -zB%Yh$V+eK%H>{k=8GtuEt3OVgx_Jmgy<*syG;z%1#82C*^3b{sMSnHy$`l>TllbBT -zr`1cPX=upk&%Vms*E===G8`)CAa4PwMdBTzESz)@ddJ`_P{;%38?VcNR4bwdL1m-3 -z6up72m<`@0_lA;Iy#DOzUmKE4UbRl@*^@>5E>sl4%!6_W-`$R4A>+P6l}}t%3-lAZ -zOb+Uwo_T@6mw?sr&S4~9eU=!#fhzV#aN=m(gX?QHfntb&<~o)bnP>8<<&gM8Pnh&s -z^0!`}I`khvUKgaK?e}BG;I*Q`SyU&b5hxc-{dVjdD(HoB=(uwzI-6UANQs!;-3oH$ -zZZW@Mf4%$Ej0pN|I4yRaNa{y@@#l(Q_VEnmrOAvJ35J&iABw4jRqWlIV{+@e>wrXf -zU?W3y=sbo^4$rgOT4`MlLXJ{HkX5Gh8&7f3W>9ju0-vTa -zS>4$!G^4!UiXM%NO?-}p^k{MWaHSy&)}ntl6W)_)1aQ3@Lf6?YxO>#>Yc>8=8Lh)& -z5p3$Rk@vw(^ryAI|E*|7gnvM#NMNxSC;j>1Ih?`JiPp(Pn5@rN|GV_3;LrMEKP*g+ -zZtS3>c^CICJ!7yyWEoIpAYt3FgR-XkFTgrBp(H_!Z*;L-IH9B;naP_~_v%c~H5@Kv -zK(yA@ljgaZFJBP_{Z()@`AbqYUAjBuQ2h8v5EvTne!687HKqa${b8xQ&t) -z6TE{j(aTj^7Qkgyb&?(QMA6%{S4{;Ev)_D;3EmaWd=O?dq_hGbuXR`T67nmGab9P5 -z-9~{Rw$;Ci3V4{i)sy9JbP0E-#L2sU<+c~3Gb#-5R9QnV>BN9+hVfpQ?F|g!nR=W$ -zg8RaTS)#V{r6O0i6{Ch1?bN>3Erts=f!YH)_DblLF)uX)B+{HXKvP02>^yEmaDzJ9 -ztVG+TlPT(Yu1BQ9$z#|kJvX3e%uslWC&b2K4mQE7P=*hDFh(_6*IXwtT^=(*CRaUY0z^_IhB)UA&rDe*BHwj*RW2jc) -z2M@*KWM!k4n%g;D;99f;ii3>oH`3*qU!@G{$?n17%|5(WTi+Ps=St;Bi=`uU{s&OP;QmxEos4PQYCeD4;rMYTjat=if`D&~s2zgn>0hsuLN -ze6WP_E=Fu5FXQOyxeqA#T^0jwhZo2xtJ2xyxA8hv4X-(kg&sae -zN<<#`$LUh2vcY -zZP_9bPLs^$RXC&F4c$mO8Af4xO5g`rgLgKEfnT((JNoQI!`X@VDAcwrv5 -zd?3)?p^Wirkt55AAyx75?JVcXi(uF0prb -zR6QH%RLH+gwp9m=?cMc!PELv9Ul=q?-;*SZsz@xaEB1TFl5X1kyv&ojm^UJhlB4`l -zKCfnlltNC}3ZK!{nSh{y@Asl+mKBvvF`gpsY%|7GtmkH%2*6rI#Q%d`4rhJ?o*3sTh|#u#`tS>pSLG4d2v+Da9?8}(CZ`3^Vx -zysGsnU!o#NWpxUHMJQh!|D+m&<-ik)j!h%om_1)&igz}!D<1yaG0uv((~5-DT&K|< -zuDG&we`XeQbzC=pOHjyxqFF-B1;b}|6vd!j<4BJ1Xi@XZo=v?t;joNPykMH}3j8q^~4>yJ9 -z{Zk#s^vAr&3s1~4Yy!h3Y&gSDX!4k410j6Uq|Tl#JVXU?2d&UwYm%O9MOGUDvxDzn -z&KZcn{DL&e^vYigQ%JSI_c8B708x&@3u482U++{)YD@N!aUtG76g@u?;~Z6>nMIb{ -zf$l8v(TrKmjL6xqq~lXlTIK -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 -z2n$>*<{5c*g8~Nx7DfJ=^?G?J@9o-Lp>x> -zd;mz894fy}#Ui6=!-HP69o+eiU2mb0m>pt$w!f9eL3vJQXhrA9wqMvo$LE|9fWMQ& -zGJRP$=jMLnzI*qmF<-t|wUz`*_Nz#Wi2^)SNUe*TE279K)2y1oLr)k?VsJ-Prw;Qr -zP_^E0Gj4tz;^v1y1i`urIDA*6szsEZXou8B--T}uokf3GR%Vxa+;5+ft*Y-RdT5$ -z6rUZa+DZdppDvJz4vSs#)-bnPYL^yvz0NpzutcmbDG(em9w17PvC~p!0Gia+o<7=S -zbr(&y9LZ>pjys+N#B=E-%ajPFi6LB2-*2>NjS5K=?=_lH*X3uY;k6Tkj9|&Ix{GP* -zvX?S^r((jHnBnC(Ws8j*4_2Q+8Qn -z*huxCLAJ|)8Hz$k(C+tDM$XHE;)KyFS9Cadu1}w6KOuVt!$NJ#zY;V~3s2OB4ZsY)9gkV?!|HRFze3d$3xu+V~{{vrShb+Y{d;(nX}>ti;j0B -z13|n@Dq@$`Jmt_sYg&FdA??Dg>F*gG~ -z79`?<`%V#a*06ujr1;s!;K=O`<&lBHv>NJYvT!(bNL<400h&5{Y0%t6j$FlJSW-4} -zovOkY!PEuDd?#>ti>+9xJ)v|wIYsFCN3c&x>c)Se@MHI80c;^>SCiibAR0c%)cRWP -zK+AjJC7R23FIR*@;ND+&XSRCAP1e4y8vbqZdyplXq=RoQaLx=uyGe}^U(G0ofiEBt -zCEF}S4{Sc`1of2(PkWK7!(x!%s@ga)rJA+&w>RtNt*6u;5tOOs0NqyhT%|r-%U<0j -z@?Q6<@fQn_<2f5!BwXl+d?O}&SG7v(^bhzY9t2>yyARn8H)K~ST)G{0EY~h4sbCKr -zL#&J}R|i2Hz2@~L7$KT*bVX%4r49C^7bO7E;Dwk`e3M&wNuDj$BzhrTo|mqL-@_k#BmU@#5T?FIuc{K -ziAF^DZ9Q}0iI7CffZx~4g#Ku+ZPHxLCYJ_=cw{q^!Ygxp@}lT_-1Eh0D*M$92>7nv -z+0alY50G|j$OujktdN(ONL2a;Lf0X9#r=ixyuQ^>6YOT%3hfq?8a!=Bbe_Q&WnT`{ -zlQ%ZP&a;fd#f2AC=At_|6{?g>eRLr0vwJSr7R%^THEoYzWPDc8~ -zhr4aq-zcL(ey=}j-3&)~hGwaPmqEQV?ekRMGs*b7W2h)HkgZPZ-r*VJdk=|AKE4^F -z@b(L&DEy$pQ`1Hc;S#06wSMh*lD+^Y|K;fDHIps%c0Hottz6EFF_pI;m3E%2utH41 -z-qfQkOVCd*9g228-wpjzqj -z1NYTwB;DgQSUpetw7cB?_#?cCPzxB8f8)L{Fm6<~`_`V26Z#g#S4BeoTj^lT>#4g& -zULind50sqgDt&hZ^9cUgw0iw%j$BaBZZHQ%jv+RDOJ+kfFHzAT+_?Rhag+KZv<=au -zDi!ByJ!JC)K_g3Qwc4)Ob@10@4g~*Bw5W@<2qwQgg(h?ZSdTPaf#JgsrVDGwJ!d@( -zUWy?}B>uEEJzqshBZqzD6^tTPUobnz-MboqgiP(aU*!W@bquoJL7nQX<<6wY}X;&3@7MrED8Qt_gQ@RAKK8$O^PSM3F^n=r5x9 -z?cYRE6*SmoHUM$T48^yOLuhlTPD-CKebEhm9yn}498p43Te{|6nKrGA^l~NKJE?S#yJRQhFQQm?`Y)o${z$!2`7i=Oe31Li=hvUWqLL9fDI)*m{g=S^ -zo8Wm@BVCu5O1JXLO2lQ$H1!#!QDEB`0aA^kIK{ZV!e#WMry_PKi=B~1O8MdZ)x`!OT3 -z#7YC#7Sz)~_}oaJX|063KA8FzhsPf$j_ZucGV74C3D -z_HBi$ZGV@*N$*UwM@Pl5Xas4rUS?_uA3bDbngMxf?lZKw)({sJcMX^%e%|uf9D-R9 -z2p6`9owj!QPBa^+ebgC%BA#Ki=p=Mbn23VP;X>3w-v0Hy0_zApxp-A*fiS?U%Q4~7 -z`4}N)^PG@LqgTk@Y25ha7ab>!ix)izSXnYgL^PZn2xVj;na+t^pmnOj@;LDIgA5UKkcQ$-x%@5wWTq;0lCe;UgTB{nT -z#BVB((t|>R=yclx)Hndh*z&DzDAwpE^?9liZ6NkOSdqS-=zQ@?H^+V&DBRE6FyWoH -z$?N(8nGfi^&1k9uv_XWMa=>jb-tKL8&>}*Bjxq}y?AMyU93fx#zuJ#SxECKG&!2T9 -zDU7!h+HTjpOYH;}kO0WZI1+B`im^(J(OvSq%LKyaFozjS*cD)5b_n&d*Et<*lsiH# -zdd`Y)8T}?rK?ZILXHj#*G?vN1`a>@8pW;B9V_HBvw -zewYscb%gYBjLKB|3`%l|Li%fVt!&U@)kr~dSkzyR>6XA^$ripou -znx8F3l5#9?v3d^6oRI&?6N%FQ$rHzu>Hgx0vH#|Y@&7wdOn@}~zwty8lD~Q4Q+(|w -zPsErGEggZ~DeBm;8KE$e!Q_^6ZqIVa0-C@5bcg<_I3&Q4a~q_HpOydR6HD`VXHN;{0!)Sm`9h{^=7>CI8bW -z^8MQJ=Ai4}YQ@QKpgRr%S-#8XjvE(P*Mmxm}<##-G?II?0$=GMAObR~ndJU!G+ -z8om$UnKcAR4qRk7k+;qs+*x==OGau~_~cKwh&pwi0n`c;)McP$*OaqL3&N<*0v1hy87{z^Dv`Ufe>!ZS2p8#KZgok2QaGE}f0 -zO0)G9=SWU_JbX>^DP*4dgA`-DlR(RZO)t%BRBRMcduD6k=R!LZozOgzbJ56U0f!cye2dIwedp21GQ|tV0-&R--lhqR8=-*0Vx5=PFm&_i(~NbVVplNk}xZ!IYq0Ws>as^6%qSmYz$zM -zme{6Ye)i?>xI{Bt6#uL{Zp-oOE%XRA$p+g^*!+wzvaIj_z{Lv6%+Od*4kImGq7GWS -zY=vv?89i!yXaVp1lEHxlyZ4P12iYDB+s9u -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 -zv*m=@8xhoh&seLt)l=%u -zY*5Yl{%fac=yxP@PJRg+%OEK|G?AWHVwJ}5UHd|Ki#6o4Du02#n`(S#e3>7wTyGx?|Mc|py5B4?|CSn -zw^d({D~h|^GMX496D-_0%ysxVxt)I}kPvG-z_%Nq2`Yp={qS*(KoXQg#Y@1|ZtBf0 -zHB*`D`YmlpQqZ#N9zW+QwPm-vU%HA(X*Rhw^xlz85>yPHi-3^MRwdLg7V&$srCWnd -zRL?KlO@n&FYHJXPy_f3pIxy46=D=0j?W=y-JaOU!aGPg4Y -z=p{{n0VWK{IhiT^Z4545A2Et;&MP+ks(Akx-jxeEhi4ucEvHE)SFozu8k`F*l>|pl -z>Jm0H4&YA0-nAA-MZp5T9r$^4TVB!l`isv+0hH7rJw+a9WU@F?olJpS -z2W`SzG+EUJr2Ex2(lH#K+u*3kE8D99Kid9js1k|y>1S@SK|#k#)qg7Paq=fe$r?2T -z9T(uNZCFi95}%VTKNs_dqRxOBW!)$abc8fB{ax?26;X@Qqb`cD6(!|{PVq}35c0@_ -zSy%(4r0r-S_lV&}N}r>k)J0+z*_RqNp)xm44|cSlsuYcKa0g?@4l!TUlV%Ze5S9bX -z#oa*DdW{~g{cFC<m`?YgVF$2kOQf&WSS0c7w-yyls -zkhU{%56)0W@)9+dZQeID(QC{U2{YDWk@fU2WxcWB1Ga(>y5`F3mG!P7Lpr$n?Kv2-X-4TKGE~fjYc}N)BC8EfNlzimU6QwoXs)n3eD0d3zR||%#3q1T3VR`+c&9k!4 -zpT8|xJIb`7hT7$^05DLo12goDjS%8!-+qR3;J^`MxjiVMzhtj-g+M$mVaLB)Qz!Tz -zk7+9cmHeikJlRM{9$gyt&zxB=zLl1?pqxLq8wF>iHN&AhBb6csVe>B5|L$cWl+NiR -zyKL_?KRK>5TXrp?B2(+!X`D3I@QkWUbAwG(g6EHU%B})Y#-ynafr0G``59fD!da8a -z=4WSMV!hGx#2f#vekVKrc*Mdl3SUV^IiL0&&<5ey>`;KDjhl148Q3&l)j}*^LAtW7 -z!~B|_j27NQm?phvLWnQc!F&quVTm6`E+Q4Of0$z@PX+1)R-Y8T1UYXY%}G$=6|?+& -z^0;ncvhUjYC6MFCHS -z0Y=MU6HqytWa^_bExPn}i>aTT$Y#pfCW2RKA6?R(<8Y&%MCNJ|GY@Yid&$I=ojd%X -zZT7+DP%{Ii2PlL~OcloZl{&hvt^{w?UieWdtV-Rwus|3-dC;&~oP~;j0etROpm1X8 -zCn>6k0`};aR4&@5#Kz75uDu7r4;eRMe0;wFO#4HyB(Qt{kGdAz`&dyn1Q3>uS9URji-@OyteCp1ZUO;cQ -zOPECb0Hiz~%Z{gZ31O_$35+EKRNz`;0LbCj$|mxL`EE32@}>9jGq`vT{-?jVb&Q>e -z+kgRUQl6HICtou8*0*hrN -zH;`61h{U~}_R91sc25Lq(?TkI=8OFAW5#R9*La#>Of;@`oajV(Pv;RGeF%RPIbc;# -z0f+hBlDf;S;TF~}316^YF(k4P1rpvQ$DV$8HRk&M#O6Q%!ffpNtSwHzc!vW(G5kV^AWV)0ho|Bg6S_ATZ;f)VBI;-3@?<#$sD{#GrTy$hFm`?Guq{jkszgZVi!3U(5N7ZK`i(3VQiqiy^)1a1YG5<<0Kw -z8_c5(Ive9GN@5b>{ICDdN1Xo^0{S21ZIruwR{<-kb9j!it$l5o3bn(Y;mWjI@S{Kf -z`1Rj-R00bW*qAvZ0=NL8_GBEPLvl1^uj<>|IEryP+;wOso=1~y&=px+*@(kP^mUMz#dSegUTdr&*bnm;@O>R4-Sy^;_C$h^Dnz#*HKH&*O0^P* -z+8G+wH+OI0){21CkW7ud1*+$1=2vV=eL;`;-6`WA%f9Vz^Y|p>2Y85I_#9UNy7y=U -z9?sI^r@#hZR*f}4G -z5Xy*(#gsWyGNqg~!qO4{2h|kQlpJh+%)+6vTi)ShIdH%X_PB>fBI)PI&xxv`J>Miw -zu>mW4y!i+w2NQpxkk4y9$3$C2-_Bv_D~UK+&BQL6S2VhVAbCQBdT;2Z%}wHjtQ!8Q -zK{SO>*grWSH10u7-JFMqH7L1Yd`!Rh=U>yLu`T8RF`ujFFp227?#O{MAf`cWSR|Ic -zz)5wL_}EmcBxwGyz_J<9pjstxOMDGPv5M^|@FBkSXxD!KGMS>5^>eY-DbOkR35O(& -z-yj>fT8?l(v)95D&V9L!77bWeEtkU)N21_6`cTW>i1Cjt0{}>JW$f^}|ARkM -z4g%U?(|M0(Z@=S;G!f`QOT?&9fmizER~k!(TN{D=^tmCmGdi`-`v>yI&1uI@zxht>|yc0xB^vpHP3Q9o0DZ0(j -zS#X%RmrbD?sC=n5zoJL{Yx~lu*_KWc{|KE+6|xTF^#VN08G0Yqk=Z}`KB1EFa1x<= -z%&`Ab@*oU(j!s-5nS6&L+D<{0??Vq&6B1A0gVdyiYCBY(bm6jA--VM<;6u$u(g!Fl -zs#zKC_hEN+Ay5~@A|LB9%s3(UqP@<;da72Jxp^Q<0+~=pDdQlD?Eg -zLuMma=b>eI$#?Z;l~7?F{M78jOM3>z|MAC<0#vAysppKeN0)Ds=$g>|vbi$117vjA -zFHn6XZ@>|gWTJpR3L}0c=^Fa^dgMBZg5Q*4TWud;5H3Boq6q<{KYW6II&yk~M(wW2 -zVgp*l%CY{1uwfkDPueogLqFPb0w;j0`I&0BC$PmF=*kbsPlLEg!ZKo@U6MlP?(Xa% -zI$Js9)`A+{(}K?5IFhy`GKfTNm~#tDD>WRoPooyDg*IO{&A>g!JUm{_!lq?K9{@2& -z(|Cpt+UDyM1sS#G|MeHCF61>#!7fEyjYYw%F={Wy13QbKweF+pT_gp!d)B0jtux__ -zgc-G9yYf;^A^R$?w)^y=I`7Glt^rm=igE@ -z2NP}Ach&8cF*HIBU6?TMCCO5boM?A91Axd)mt18|-Au^l$hl0CP4KaDwvhs6Sz0Z1 -zql+A~df{~0!N}Do1WI28=s@W)8h2{@w6jqCi0R`(*P$9*kI_cv$^uVw=b_2KB%=ca -z7S^sK$Z+>Z=65i9!t4bbIpHhWc7YeP1IkB|gv2pN7#i7KxqGj_oCI$iHP1 -z+l9oLsJ~;~esn6GtPc428#-w-T8K`lDMnJ_776XDu+>qFWjzL^meZ;}BL9WX6NhuZ -zz{XyCXfFXBY0Dj6B+)=;F7B_0vZSU3W@ux(e=DR*ln!GPP(-!MN^u;Y-AG$XAV;Kb -z5#)~KlqoxQr7f0(I%G2t^~0wNS^W9mpF{k#fq0OAC -z6n^1a`Ttln`p!1Pfyst6%9m}%m& -z|7pF7VQVDvD0FI3M-X@Zh5=nkMuSQW-u+B%;)Lqcx|%15HD-Z&XiEqdJWHZS|xfVI?RgZq;1n?nM;ktXOZ#L@AJ=J5c&L -zcUgPb&U}JC0~lwv(P2aPFr6NVwGN-YcXFWiaC-JSqC^bGt8fvW;VY35Vyxj)nl*{K -zic=gV<=tiV;_xTvUcIM}ND90T=JqbQ`AiCpR?TiRt4L+g)9=&ssej^I(YfrCB0+sh -z0FgOI{dl}_wP#_5ZQy=7P=|`knM?mV&sSu0h-lMD4#xpX8YT;UoPSEE6(@0vv6lbc -z3>?XOuWb;0remWCECKv1SAseyJvKld8tIo^7?vOCLQ-l^E<}`IfEM%^4Fz?@Op({I -z`=j8RRApA>S*FAhua?+myocpi|0 -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 -zWfwV&bxJrDS)$J|KVo$lnpcrI*5 -zBT*B+9Nb3XhGiN{RB7XkjnV)R#jt1t!T>v(XKXp*waaytUo~rsBMSSx?to#T!4Kh# -z!1(HNOx{jJE8*B12}-9&|Cp6H-(veAe4Uy6z=<*;5o(o?dCwbWbtRvonRC$cTv!b= -z3nce}p1o8~lIQP1Hq!_40Vnz9>wM#BN%jDgP})JT1$vVOWUkraDbgG-#2pYJM2CGZ -zoCd^e!R^_-`6lcfa|Jce)kK#(HS)voZaM!5`siWT*I}AisIJR|j3VX5Xy~$RV -z3(v7rJ?qxA5O0dxpYaMdnl}2>l2?2SE7-tp8NyAUN9o3t&jmdu7XL>vfxWVU+24Nt -z{H`TDp06IL}kg?O9mS&Onk`&|N`0Q)2WCP1(ZZajI&Ah5upy -z$AhT7|K*sx$fu{tsY{Wz^!wrg2?IHth^gBK1xV?#P-dx%*i^=pFb40Pcn`QK4cE=rHvlP^`*pOn(Xz_#l7d*QJj$a*=t9{e -z%#t2FL*J*U1NB5h_p4jd+OgG=?R_QQoIK{#u*6`{lvW&cSaMEdbweM}V80%73V}(A -zfMQ~a#KwdGYKx$rnyex~n4=4J`vts33X{nTwl3`|2LB%AwsqQte6V7OXUd}8C6Gfq -zh+t9Kl=Z>M(!3+slx&Z@ySYLpKHC7fD|so9O1{G=1LuT$Nm?KNcP#8s^}@TnK!U1C -zJ{-Slp#BraTXu5`&ms5}M2S%y&qur^X$G`UCH%>{($DSlpJ*|~ucApTXT`}{(*_gw -zu>JVsx8I5lT_nt#Ghc5Lp>#%a0e*eR{vVld_6s-_uXSXrnW+MCj<1E3%to&#K5ntf -z4vID;0Syknd)>8HOyMS7sAG~eMvGh@)9Wt-*HP!woEm!ww$GP8O9yT70tFlU7~%0U_}; -z9cXyHW{~|Dyl%(QD-H&@a?C9xfk48+YqlglP><41Weosyf4357Y;I`ehn&+{@d=e8 -zbJUW+vNt0KZ97yE3IBRH-(ml!tB9DrMT=^^Km^z6vo0k3nlBiCUp!P0Gv39AE!|DR -z-An`pn?fU`w+)w`I0gc?5^3rJ>Xa>JAV`)d?h|z$-okPv=>E>|_w$caEFp^{c?SCP -z`*0dSAt76Pu~Iv$8mb=U0aR(x6=+q=G)Uq@_5g$SOM?4* -zSCYjxlv8Mc%HKB$j4pc(S#2|bKYpwA|NT%T8}z7x#qYQk0DSr2v%>y0{72d(4-zv? -zv&#v77ia-qcS_r#An$MJDJ-jO(bhT)h;RImYuzNqTxva$kU#op6RLabX-dbgyfK_N -zu?U4DpxFjJcN_D#Fw9@ByXhV63%NAb2~fxB&MjkX=NlC+i%t^y&hzp2;ELHHM@gX4 -zfs*RGj*{%gWyc)N_5mY=uL+u7Fz9LT3x3g2OTI;drD8tR6v%QR;>ac1hakX;nHxKZ -z*p3~rg*AgU1pU4^G#~vQ!YS)wHcvk49((p5XhOAB -z{Ws{cpHC1-35dZ>vPp&vBFQ8NKCdzw*; -z->W~{(!<6(zm6eln27u2!t;iw8#XzZ7G^(~P+9GH=wIUHcF9bwm7DGdRNg&j)z=Ku -zOBUsn#Mrc(x?Vm?+|-v3EN7+<1a8W~8(ydvXTB+>GjuS;2tVnwvfynJ0GH%ywgduV -z$1pe$C>YH|JyxZ0Nzf)OTK=IKg=%wknCwKCP?9I+a`T1kFP8aVE^rhJs^l#T(U$zG -zvcy&Ep*ACv1VxP~4e7h$C%)O@&-t!}FNso(hB@qPkx{@;UwIBo*_>gs!Ca)3%;o-b -z$|d6h0!5*9jGv%wEAs%GjoR%XrnTb-)neMbo1drSSnBgin}qT{R3(wvc0Vt!ID;-L -z!emK?`BotY -z>>_yY9^1?SWX$Mh`nHE;cyGd7y}ZofBz*vWJljASwui^9aEwKgAvt^J_!$f}ls&vl -z|5cA?(dp77A*)J-&s_4-zXTBfF?!5+;7s24s4a~w=zt4ucTUmcVAo&35eZm|?FlM2 -z|DJ0!w#-? -za1%Y|wS7-t0Bm?8oa(@@)b<#vmN&Ys5Dw^2mx_s7$*8}&-Uz%D9qaG}w43C=>O4RT -z-Qx@5tvI>xYq;DcteZl@B(~^jO?$yLWPQ?~Y^my2HJ5mFMLqojOywHEyr9p1=)FmU -zZ$4u{m$=Sz8kh%F)F??cF3;j1setDh`gU}6>gPl(Pl-RH9UoNK! -zkf?i0`eg~fYMnsQ%c8R3unRi3N2Y}~4csuk%#%Pk>tBPFkQ9Q~gA58%H8J%BUUL)L -zS1pHP8QyzSJiH)rR&gwdw|Ld5M{4MpQ}bj{OBfHdlO04z(WmCr(tP_Cv^ZM+Pc!9X -z(}kknE(eWMUN$i)5A-?%<%F{#w}MJd*rl=kuV-@>5>)-9z{5fm{=FcSWY$@4hbweS -zCgg{mQ56%sE8PcSwNp`6% -z$FBeWTRI0gd3~#aSwgmecVtdwC)~huxBAPQ5EUW~q^gPG0+k3!J#J~v@fn-Dm)vjj -z#-O4`P!l>Kig+mhB;PN|`3c4IyI -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 -zi#?7dVN_xIx6;TEEreY31&povc55sv{>H -zys@b|GUFK_Na1!N&2-kDq*=j0md`+1+llG`IxB?5QFixQdw?INFOt^tCKrW07(oFj?zQmZXKc?5U_ClLF%G*3cuRs(~{s#LZe8 -z4@)n#$tAJk>Jyz`#hKRo*q_tvjCSCabiFmqB-k7o3^y?#N*N%Z5F`|GAfO}}{RG9@ -z0~!_u!iEPA$m9l4W}CIsIcG2t#YA*?g_lo=7+5-$Lrgvo*_vF8WN#L52L-eq6X9Q- -zPaG=NFjWv=2Ygxg6wTVWra_rP552Ki9+eC^QxbfOr(3u!v%KtzAsPoDNK%J_@q4KY -zCsdL~AC8+yY;^j-4{o_eGQ%9V#HtQP91#3X^?MCtog;Wo02dFE@l0vtBHUBhH=a$< -ze5Q9E|V2Jc~oi}GOSVY?gX~EgdR{EKYgw!iIRym=6QyNLp@b)WVe&mmc>p}RMf?m!? -zntKlsvZvbk1yd?yIl{$IR^py4&drj-*JU#y1cwf$;XU&NoCaj-n_-V&&~O5hIrW0N -z6ZblcL*e(ue`X(`<#agCIfW>YOPaMSo%L_2dQ>aEt#*K$2GK}F0slZ}!t3_+2f-hv#RaMW6BV@aHdrds=aYQeaXmhxwPIHxRnFHmJr -zi9{mDc0|kIQIIm%Jf4Y(zQGt3x;$=j5>#1SOj7P69{+EjpZk*y9#IbJiLg&%`n0AB -zZZDAS8p>rP3S|80I-xA?Jemj==E|=VvA*I>I!k -z8I6zM{$2lNoEsFH%o$9_#S3#(DWQna+PxJfu;Zx~wM4?9Y;7O6K9yo^mG8OUgxpc? -zf%jVV^8rAN-7R>9^@3yx`}VQKzkmgSM%yFxTx`vO)n#^|+qce7mBZ{@U>U-fIIjB; -zj097bzvr}iP-SW4JD^VNCnprJ4(fK?g9&%^k^^0`Q(^W1Z$<27a$0v#OS8O(KC>~; -zX_Dj11gHy%equkR11cUDL8#}<$lYZhi~@p`LPM<%u}r*>ia){8L)0Xa -zde!IAfYxqbyoWBX(y4K&t -zP_lLwTz?MixFyeY6E-$#6*^o{_9pYu-u{Xhc|^7%hT2%2EuoIr*IWP!(YUp6;f4e} -zb}rzHsfAk>*uf)+!m;mfI7 -zj<)r4bUQ$sB0ma#%i*s8-Q76aaus}kjpSapI|dXJepWtAGOq<)PqO+YIUPj9bI4LkKKXRZe0y$Jrnb+SQvpc`l$g*Lx=>{2_92?n$a$bw{{St~EstyIs1hXf -zFy2Tgj-^)*$q=t->d6&1&{u98)7XKjE-?&TdSDiTSk|q1i9L6C>Ikh>SR!Lk(|6nE -zi=_O{j*a$J#}UgP?_fQmNFRV)%o%I?71GJ(1k`~=8hS=0q! -z^RL&0v;G-tc_W`W=-117A|x+DNzS}KU -zXIWH?W*ij)vya4^gL&iYeK8VkqTX4H%{j}{1}f7h=`_5EQ@_&F^_k#JKlhjTob5-Q -zcEDhki=n-AYMnFd@-jVWq%ft0MUI1wvhN^zSFqLxY{Fk`H&3u>fWNrg!k&4L-0p%b -zq=b`ST`ch<@Nl#02gS#1*XZLxN*T$4=F|HCP-#zt#d5zlDzjj-Jd}El=XK5`TT@43 -z(R*(q1xlMh>ZHW135P5B+C}3$g(vN3%sDOVT}-QEWtFFpgQyv_Iu8<~KTR^P8y|+7 -z(g1oG*EB*W%W=+F% -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 -zVO9=?1TBs)+ZGb54!H -zDqSQ0a+g6j^ht7m&4bonE9Wr87%RL=Xp-vL3349-R+jCZqBf~LYkA|;N96Oh7MMRT -z)<9h#|E91CjJNOb(8dGpd@d#@*E-BCOJPk*WnS1ia{DV_$F{4|Foo=rQKs|k5Ya$n -z(}+4}w;wFIX!wtUb$z{6$Z0(5$2jQxL%}MTgXnA_W>ivCxB-&9su@>*BpD;IhIgaQ -z8;i6~NXWB#tFvBp9fvP-g}_tI5hZv*(<}@u40Ctlj)Wjq+bcJ>d#)EW}l9X9y@~MMZUM&j*q1Iau=AY1=$bh{%8n^y?3Va -zIIyIh054M5cm$dU_;sgNV@YS1iYz5$>og^=@?vkGLJQBd)48V075AZ+T5}J3K~VkH -zI}<0jAk=zY@`N=fM%9ptBrG$W55q$Juxt#H784}9Hz*yYa}KZ9YBSt@&?PnvmWmCF -zqae6p>fyc)c<0xp4Sp(sn1Vm=?kB00dvF -zp**mZKYQce0jhf`APvpr$BCvohGV?W7)#FgzxH~Xc}P7wc)G(tdQY!~3uBY2+)2x{ -z1GNM5JjAA`x#jlE%}ll8m%b}XI+7d>kD@HKRDl&Q_1SeRiH!X9A{}9KeJCdO?Ww(k -zB((rwq#?d6^qNvpnmIzsPKtXVH(T)Flhh|uz}zed;nTBX)|Yl#M2LwHMm#r|Bo`s7 -zx5>JdSbAVilU2(@iM9BsD*2yX%eDgC)ZJc&`+`FrsIVt4;LM%Yt6pSlG&P0Uvqye~ -zW{KGR87S^GMY1Q0 -z^`w)4Hf=Ddcm=STp~vI+xIU&K*#F?j-GAXoEF)UHEGN1s6Lb0h0ojetFAXQbsc|Zh -zhX;?=(7%$!&>U39d!3`B(%wVUXioNjlF?!AT_5z -zn=kYjnA2*LtkT)Us3KK&9jX~+F@_{h(3G_dj0z+ATpgSnZi7-ww%EhrGZ`6u$B)@j -z%cS(9o*=2#Q?Wjs4pbFaBuEt;3ew>@Z*ZSm{f^D*zh8$J1Z}4N%W*)KM7|=8D}Nc0 -zsU7OLJn0<02Z>4kA4amg{U1h>5HPgF3ScBhNro-?OL3qq|7=z?zRAXZ^C@urQmtG5 -zVfUXSNtyGnBl-A`Bgt&5^SU9u7%Ys9gi9)GE_?8gBiXFA)kg9D|2UE$mh9;NIFeT- -zkl&O^x%8`1nt$eIvh&u9s&otF=Jh%_^5(P2-w38ESaJkjQ{da6MU`N}Zd3wY9ySv_ -z$T2EcVB_@(?R}>Q$1`Pn2-2|jdr=5*b4iZEE-ri>V~)1caGqAqWT*_mqL|keHMgeD -zppc1_T~fbJl&+_qFs;QAH<`FQYRw2K?1L5^Q{o@3Nyl|}p8FeAvcD@|1(3gXpsycF -zt#0>b@eje`W)1f}8%K^v?3toPrTi}>`HQi^CkwXh4fNIAb>McqahR-3TNHAq4w#bT -ztaSws@|*3?^7&R&zLgG*mofu-gZ|R0qo1B8w$u;~hHMW;YRRpwj+Cu68K2+tvtNr_ -z;!79RJ~wNM;df?c9YkZQpUVekC4={6mQj8$IPxIjNaN -zMCiLx>7kltdf?t>y%+-Vxyj8V>6b1Q^1b&Y -z4;6any{IX&O1v5~&3IB6KoqU82!aqpz&DzJZY~LGO;|||ewU8WLs@`Y!p^^C+@tSDYF@+FzZX*mlZ<*v#OrBqaf*YNj-7yh -zNakFdcPk|&s!Iud6sd_3D9F7y2@ep*r{hguEJ+*G6h$-RudB>~_t}KfV8baioLoCz -z)+D#yyv8Gt%q$NZPR)ODs34j4BWYNZ#IFjOXVsf4+p!TOk0FK(jOvTUvm@g1pxjLe -zqgUg(()%2EMDLd|6Pxb+G7TUTPn6ugCH6X+30I5J*ciINt#k?!?v+;6&8blE(G3lh -zlflW9EqD3O%OB)b6t~uy%;S=97Zk3%}Rbi)nPdF~-o5YQ?ZL>qc=^1mnZqHy^unJ3!)v@CMhg%n6)m7M9Sf -zl-SP-aTQfTYBPEi;p4LT5SBTB^t-wjaRKHB-=fu+Sk;A0LALn08@+cAh_O3_oQ;6(PL#cMnG>T_6`=QUMbNL0?pJ9Eey{69!p*te4-u5Dn;Lc`&g1` -z?`a8QDc8e*&&`xSV3^)+tI(Q~?Z}rej-rje--#YJVumaIBeg51YoFHkz^eURX*hK>r0H^+CuKZ|Fyc9j(vy=RWkr -zvlb~_AO}Wyolc2WR~A>Oom -zpMp+LVQ#R4_j`Yzp*P5bQoOsYS{f8C;}sc$&$BsJYczL;*#$F(EAOGcPF;h$kJ@!{QNhYiMsVcA -zLVKNsWx7KCtD1DAZ>DitatRCb+|G-aw#1YwE!$275%%#7zlQZ*83+|Ry94*2$7F*< -z2smCfZc?JqQ)<^8=Zv{Z-hlq0woyoTJW#9#ii6%#zx1aD3;DCd&wLEC;egFbiS3!} -zejxt5c6osIV^cF)C?dv$!)eYbT(*;#UAX<2VBZFOX&X&xiSokbKUs3~mHAED79dL+ -zvgb^nnK=e@-V{6}VI3PjlBzeF{PONcU@FUdz=rt-kR|c|%96PR4SIxv)?lhA`5=*S -zc1Qm4J(mud8|@;^px=wr(K~<;aWtt#o8w(}5~4M3W+AKiVivvTHfBE%#RTdhAliG* -z13(?(GCcR+F|sHObCj8+DEs5D1BLE~uB&-PrkV#Kr44SKdF;F$w&L}Ni=z;AK^70y -zCd+0I=G{-a24xShp{Lq-Qs4MRtz8IuA?js99Fy?8?CWiqB6L*i)j}|b5b=knH6Hxh -z5uz^F{26^S5dgX*%V^r-L*Bzko4_Qz_RnXXqt#ewCKS;)E>N4pAYquG0RrH@4_?Hq -zxZYJzJ~9#Wzrv)e!Uzmsn1#27hk+v1S%Kj$pw!&2yK&lwOERVJwW(JGZf9+AAe~Cr>kANEM#Ioxd7NlgKLKB) -z5k&uOHRbf#5L8tY4#}tH$GO_=1#$LgMpGy$&|FToP+&+y_V$xC>b5H!2x6P+7O0vP -zJFS4ba=?M3aGkH_r5TBo@((J}L3FP^5au>I4_2DOQ?+&8QQv~V7vIFxv -z?tAc5ZBRt^=mTqh%j0;@`K>EU6SDdZkA7)?YrOnNm54V?$e^1`1`IA^x)aNX$tCj6 -zUuP1hk1E -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 -z5Wlk`2Q9w6?}eW+un1tMor?CzV5_ -zKsz_;@4AHep+aU&FT{O(W_+};w3evBsb5egvdg3Cg;Gx2W$E%q+uUDTSM8IFk<)f0 -zd3;~IGCdHO?g_N|j&bHLL<5nOoC5?~8r)!dq7n>|pH)+82eu8kX&XyB|Lu}j`sj+L -zT1xgH{XywS2wYZ1Rh6qm4FFMw9{mJBlptn}e<8|gcm%;q(0?IHz%0F|0junDqi_Fh -z03lbN&wmi5oBt{Rq6BU#l9d?mM~dnD7ow~JK$LC&K$N^re<8|Xu4<)QDCsBX*#Chj -z&t0Y~Gq;q-;BitF{567ifb+;P=%(eZin9Wdt9hvjp`5wzQ9YeIQf|%3?8F?C+hsG1 -ztsMSHH3~FeZ9&egPSn>H>p!33!)!z8bKaTOH~?zS`$5Z_FST~bq4*+mE>6Y1;Hgak -zyTozOhs(MW9qO>7Rvy7=t8Af?mb#O+gSeKqCtbyPvy@Nr9+l;3=rbL2v{I(rd-@GK -z(0>(5()Wt{1W>?`j0LD*d)nnY6fLdsHxcv`wltHyjd8`Bb#+vVRh|wB;B{QA9i5ByU+@JK$Zy*yULu2$*;6R~3Gtm3)WTYklWBU&Ch+RnZQ -zQ1?_e^54FQra&5xuiDN{8b8_G{Si2>Zpp#@wQvF@t8puGwWuNyTHu4j^@LNYxG9{w -z@|rF1&A2w6??RPiOt!zn((@3@#5*P^3k&N(j>Vful4EMJK_L3YS{xiJ-M?oGx3JNpCa?J*UZ<)>B2}ezpeI~Ck4?fJKzP>FK8V_4G#P4H?*W=x6{v& -z#DO*O^0~~7a5zS9(6$&@u%d&2J@B=K13kF$aEUU8cr}DhKNpC+@<5(7*s8c5#gO`> -z-0WUy*2_)Gdzv-OPIyIHS*PLc2aZPC8Q;{4B^6Oo>gf$pxQV6_;#5)+=*-_siF-B= -z+9zpsQ7GqXPqoLpv$aysc11E(RGl6_*if*EbkFTgz6qs~dV#bjgG4xXbqf2xMXHfC -zQ;-XQMmUZ#V8dpPSr6dmfDcob$rp5s4oS(NZ14g>s$oZasaeiDCH_*Kc(DCw{;=1T -zmjS0kumBtL7mdv#BS@?k)2HqI5&zZ&zPkFmb16IR-N3RyIE~WZVg##9oPPbUc!n;Bgd@K?E?_CQ<{bO)3nsYB0%;-;^(gyTFe?(ivP|1S`LZR3(1<3zel#Kw3a`=Ve -zHrwCHXh@j4u20j}g=-wz4j;!Fy`jSRSYA=*6K)T6PvZ352rs+!W+^#h6W^W3j -zeqtNzBmvL64+$~U(<cD%F3fVuHPEN0@} -zK}u{a3t^mg1rvnLiQ7|s%ryR0v^J6=JUIalx(xn=d^vqaS}{Uxe)R)}R1}t;=qUimi_$-pFXY7io~K4+i}$HGX@5&7t8hLb}G;OrljE6PUoYb0b4~%PXa3 -zH+p6dQC8lBeZsB~Yr|<(#bQJ}s1dhyrUM_EJ^RfO^tPoZJ9l``Co!Ku@%gQi@?MD( -zSvu5O<{kot0)9s~P4LoQo$v*-O|=8@YDWNg2Ak6cA}Z{_^0CL0QgRNqKy-d_Ff+~@gL~kEzpmj0r -z$B9TvJY2h5->!)%?k4g{Yh%}iI2f0FXzLxYm&NaX1&tTMhIK{DJT_5ID|(z4U@+M)FjcS!D93>>i0?T)G^ -z_0j_D-b6<}PY^jN5u55&2_bYl1uBT?!D8PaH~jr7ff(8WO@H4~2PJir`q$4(=u-3V -zC>BgKlsVVQy|LSS8IR;%pA~mn8@N}Zd08dVSbd`6gk~$FX+iries6g(5F${aF+M6G -zpGWKnd41~V(Ie;9^#4brtT_3rQBJe{|20ape>KX3Gtf3dkU~#@Mp=B_n+UK<%*9|l -zxjZK3ntd(4jk(yl!69j}`}qrt@q_Xvi>QV#M`Ne=8+cr4nk?d39FZeiSuoh%F1Geg -zj`oc2OXf7^noDO2s2>wqDWq^lG~=2Nu!UEIfQEEyUB6!;6w2x~!8*v`^__R2Hu!OK -zIJD}$wWV^dQivzm!Fht}X@wb%DWDLwafM}}mit`^RUTA62;Ha6$3Ujx@4NWEez2!Q -z;YrB=*Ih9B)wL>=dEbunr7)`cK?dLYd_%XUq`DXPEX&~j3N+H=vlvkSiqslwBFwsD -z&iY+vg1tS+oWS<=9($nF~(N$h@vAHA4Vi -zr-DVeM1xYqqzGx)>+q&|8BHktM`=&_r^ozWXSjc)a+Ex3JIQ`Z}# -zw4St%YU>O6e9n~O!b}6Q2n(LaF_5t(P^II4EFy?W-kyvCTfS&zu -zve6s{_ud&94CO5~s(ZE!lL`EA_fX$(zZnTVDJ1UYa$+W9aHr9?s1K=om -z030QbOwK_0gZN$#|AC8i7^e;!*a|0Z0{+FZdMd?{0v;c6F+i&7r -zuX)MOKhtZH3IQBtT`hp4To7e@#Jv7}$ye&dla2DRlf62asB>_HUSH(wOwBpv0cr#d -zdpePI8$-C+#96BRJIVJG{$jzf-JIAQDX$Hs3gl_*^dPXwVlz*{&nd%rP}5(g@4H1X -zVz=K-r3s287%Xr!cR9U@+X2L|oF=RBLjHP)VsytN-h9dc&12RDSfMDw{^%*NZLK&S -z`X(8rPaB&kJ)kgPaV_i4$T&U>q6@vR9^hl#Pvz)n_`wMOW!0UrBW;(|GV-}3|26YP -z^!19&?J37Nm1VQuQ*`8ZG_GQHCwo{`y1836+OC81-J+EC5zd_aFtFp}WxeKW5C_>W -z_jzQJ61f)*smWzu5MQZ;Xlw~7H!A3N?IvF|`GrT|>XBi>Mal=a%&rS2>@p^4KHM$(`%ciW~yw3X-90brbzw)30u*=IL)0W%0@H75Mb?QEQ4F9~MX>r-m14 -zEl7RBjo?C+dB3zg$W%5Ke%AiZI|_DY>B(tv@yc4J&=p`5e;+=s1$ycd%L0Wyf5hfz -z-=~Qu_;mo$#81yj`GePw>90+Bu7E9u5^`3_Au(8pAhOVNPvH12ZwU3q3N|$-v5Nv& -z;oatzjE_;y2j!>|q$$qO*ZhhyX<1GS&6}O5F6FyJYFeUcLSdPvlTrLm4U+P_9HL~f -zu<<(BWjl@DsV?;l^nvI>q`R&y`zA3h;f2qI2f!(BTmPvqW3(%R3&#lY#$+PTLQ1Va -zijQM)@sv`_o}ME#xnxo_d7-_5ByBslT8$wloMyuYEA%m-68BLuP7JF^)iOYT6OrSC -zeRu^27QyZy%Ptau2-;)xpbfn}vh?XUA>R)cNGq9BMZDcW!j`%Mgz5>Xg?nW8yo6i{3O|1B=1u$72C -z?ADB*{EuHc#P`q?4N=X)Bt5DZ4bCPjrZEeL*d6Zyv1KW+W8#KWN+RBp2wcKiv=ps& -zctJU%Lk$FL9R~CjN(pE}wGkBz9CVLtbE(J6&#Jic#Ps0PYmD(kI1QbN7Jcy2L;k(^ -z!ZN(UILdnj{>i{fqaozRQLC+ik5N1L1>UC@b`6!e$kRBy0xHDdQ -zs!m1ctn!tV%Za(S@&NyJYwJ+pZm>&S=xC -z!-#_;gO=PZlW?Rb>n;uJu>!qm^|1bKc4;3E2&E>sCNpf!HE33387lJ{zHD)XHhgv( -zEx))il+C%^hZ(wH{K){+@63Sv98Hl-D(DBM8ZSBi=IX-A7cppx-u<0Ar7yDB36#I+ -zjnB542h24{qsXT8TRsvg7qkivAjyPq6de~Y&@+2iSqBL6$T$%9po~5Y0u%A<0gDzn -zDTgYv^vBcWO|iNaPl@E`rWMG;7%w01`{p4$i$qFOCd}9L;D2k(L|KG9%1VFsRS{Dc@II&uBVPjp?f!7vniCy;+;oOb1F>mZo{qh_OIaT?Vw24O6xh -z=oXzz3Tp7wIq6VYI=S=nPvC|(R=`ScLZRHNwtDp-YNV)^61yK^K&40OVw8(t8p1xn -zycGG7Gkwyya{gYu-^Exg5pERgoo-5`wlc9`4MQ!!fDMVOT?k+`n_-dm63!FEat8w? -zKUof?Q?dhKC)MM(sn2$;Qgvb*BFr3D6hKZfqyQ@4{7B0_EOX96!)EK_eFx`B-LVYG<20(XMm|g6bbA1rDQu#W8ESJ& -zzAP)aa;jR02pQED1cOwt*?>bo2i{QlU5NF)l8ZI+?Vl7b*JbvUCy#pTaX!oO+%6bh -z2NB1nqs{H|;e%U_M9}PqxT8nLYSw0IX+@%U_C3ClgOnBf=<d{o(~~MJvU}j&8H53k4y>O-e(7#DCW@_h)WCP`f$4jstDc?Lt@RT&391^tXzhYM -z=|UV%%3%h#6(G8thJh0P8(n&?4vfFRG+3E`bxgB%U!sc>YM7TF-?)n>!m3}C9ec~# -zgMtKG0v|^nJAVm6H_x|d=F{F4kqITB$tcf -zbM({ezh13#U^Q(x;g2Ax)}1mz1PaPA54G$()5z|9a&Z9gT|d0^S^>{+|qmW2=Xke2T2$&a_@*_UnFZ7yof%8G{9pP{Ok&0FPa@e8JB{j$VgVtP@T8*Lmyq2>;+Tt0$6xX -z2KPIzvwjgaky#gLc)EayTvh9j42;?lRu(~QxgB^j-o4AM;42kDwbR@(QJF&uOk4(K -zcY7^LkQ05~Jx?QM3odm=_b8w2R)AN!Uh~MMn?MX$?#jh@wHtrEEzHqPtSGV>^Pq*z|EIL12c-YbmiVZE -ziOv(wF2(gS?`u4J7-~}RkLZs2j-L#BGI!9t7p01~qyvR7`w96310FZZpY%?*c{kT_ -zJh>fM$vk%F6P_W4Uct-qr*eeSa|9v~5kcF5uj_y{e!DzV4s;nP%t4jJ&kb^c<-Pts -zQ`2*HB{YYq9okMi#ONeM^@SRr=|L?@pB=I2xzq_xsOx+(L>Y$N)%9mkBvsoXsaaOKFFI$(4!)M1a^PJwX1z^J~-BFanDU$YokX|P->oB -zW8P{Hc01mzf9gtdM52G{%Jz}l5kasPz2(~R#K&}Ey@y*!`x-kY%o%$_kZ~pBStjer -zeFtgZN^$*FBuQ~th$Vffv8W*`G0|D?W9kN6LvTW@C2D@H<_~PL>T*@-Px$)j2{!V5 -zv4&SC&!&;A#g0eI?*EA^W$K_`(+)zuK$lED9vgG*6*4QK=?6#m<5^tTS`lZ#+K%qZ -z;8^+}3g@D_Q__oVoghRv*@^P*agR)d3}TP7`0J_Z_zH-S^CpmHtJl?06%HTD*itBr -zs$*N3E^9E1Xsm=Ft(*6FaFsXm*Mb6I?MM-5>g%DD7m$oW8b~u;kz2Bf)_$eZW7_i5 -zQ-L8rTQ{iPM>lVHaQ}tvkaR){?Hfs@7O)nuf+v^)7nFvR4YV^VinypcG!srdi`060nVdhxDH*XBQLS*H!EiIa -z+FP`Z(-*&>+~sbC5@O&f@5Q(EQX^z^ivj|c_Rnqj{fR%$#0g+25heG5z^3uuWm;3l -zbMxh+18pZ{#=Cw(k#yB>fIQ;M7Y= -z!hGm8NPBCT+;>36*$@esLA-0uL=He3sx|p&<%#ATsdM)=ViK#RU3nxyB{V2UGCkmW -zuqcp3{;eoc{->gBViY`Xg@+jXr=lz|F>zqb{->hUG#MYI{994d#IVo)91h|_KYHNr -z>Vsat56rH!iK%R>Wm6MsCI98}%Up&oc8<;7x-w83gI)!-3h4*j~ehq%TFfZvb~Cv07u98 -zIxKt=+^&`93T4=i(bIAY-G`5q*X=61>PujijKh7D?^B&e5W6j@~pX;0M-QB`=I~!?m -zlNGW)Zmb}hh$)&Y6Bi_zvF;%X36!bfhr?qC8(!Y5M0UyP&t~gk5?Su!FQ^xIc$6+? -zoqG^STd-gUwkyxOHqJ$&L(5nP@~plQw!}B!P-Er-1{ulFvE-AWj6JONYYH-{IL?V_ -zNCj1hYFWfInm;-27}lC-G|~lQemztA7%TaJa*kG<`5eoqn1`3Df9sD`0 -z4fTeH7aTKo*OG)z0YZY*FngLsEbtOLWW0be2*P8FgPnWa&HD`MSe|+3o@hXx)iDTZ -z%!XBMv3R2#YH)jfrUfI7l#UJ;>eg!1%LP_e*0=bGz>A~Zcdhe)#I~4>mhp*{&5zXU -z@rvHUd;yH@QS;x`CvgIc|3)lFtR;Yw{mT>omK{ya$9>u?ZH-)W^;zWQ1ydrC4+{1p;JcSgBWL5|HC(J1$C^vah+t`F=d-}(>_ -zjNK!CBj5{8-^ODwOc2Gy*iI_4bv@pVsK>P_+I`H2AM+rI99RKyyjp~ZV0KBTnl3Jo -zPMUC`fWYb$dT1kOW|Ja?ffu=0VofEpRrr{i;;`E|V75T1-L(lCVUGYcTV@K3257~%88`xH|+O5ZZ+)D#r0aAGOB@d%wm+m;uv~mE2SE$yqsjG`~xRx0_`HEk!;vzHi>qAhSiQI -z@uutsM2{L^{DvXNt#K{`oD9g%_T^?ak;PGjBaoaD7Jy7+)tXI%7ld+Up){0at|Qm0 -z$ny&}JLL#`hrynEV>Std(sg1LBKx|_TrBCd{=Hs*Ic!n-i-hw+ugB?d1VXssd7IF_ -zn%m?<1oy*vRwEhjj~J1&nZ{KXQ^1x^xc$;%P#LO(gKsUEm_@iw;|e40igDJg^>IE* -zmYIt_*nH;MmtP5PbXF?5%`WlS7aF8w7cm#VcVwP?^pZHoC9zWLEk4YeD=~s=IIF!w -zJnV1N5u-r3oi?$D#e&|=CCK|~x!vD=e1lsMsPZHI_!_D8zUnSOz=Vdg<# -zLX?`};U?vfEs3C;NEMKs9^PM -znPoF$ajSG;w@wLf#TYnjr1}}c@!Au-b_^2M?kVzAd-OTt{1TVf>>*Tw{PUI;3o`r$ -zdP!R7giTYI*ddBbQt$Qp8>0gj8OzKX8ttXWWSoAB7g*jb5`}xb -z5tO&>P%E;Lo9t7? -zDJmy9t?;$c)fIS&L@XUn55)**dYvLeQB~+S-T;U{ -zm?U@dLo4FXzN2!rspzm=&Iw9*A$Tc19b2*$#@b)(*)Fc?W^JIhG-52rAhUR?3dBx2$b0W;gU6`&ZA$vebvfas&q1I&f5;i -zZOI7Om$BB$+m~y?e#aT?|9<#M`(h;6BP3f1{4K-}(+O|IE4`$TCz^>eIqA}j$_t?( -zR()7Z;_1zpxotqeMfp=p%IYD9aDJu6Ir;S;E$Qa;Eejg#b~IjlrESxEIyWUM^)gxh -z^K#7A+>4?_^FOs@KL16x>JS_y^Jx*N@CW@qYlmw%B~+>m6O9`%K6|5zwNDGpFQ?H~ -zkJDiGT(R>W3;WZL@JfPpAkds2UVDPa#-%&!T~Apdo*8dv!gBR5LC`OMt>n;OD`_Aw -z6k9iob33*6cvB!9(76@Gg_fyR?w^8<8EFttL#uF)9LD3uOf -zmqxQ{GWq}qvCK!tzbhf?e@IDMvr%|rM~;;N39MY;$cCUprV_*#At -z5}hTIUn8%;&S;IaE=}61E9?|V#4-8m`Y{W;p=^R_PGwML-({R$fAujxr1s3pI$?45o#v1Cx;{B3>S}|O0`ra?$a;N0 -zM*1|yX>Q+TZWYy*=uKW}nv>H(VA~i067@nD#iapXY03oDsLyVy=p5hWP(!O5_XvBG -zdQCot%7ado9DEnr99kpz$`&ZAx7jPYhmP_2wQyKtntz$V+Z%)UMePI{>VE;r5t(jT -z?50r-MLK>-P)``Rop{e@k9AE6#TJ@P9$Yh^9-sS{6N1=}lQMkyJ*zU6r37lw+Wfi$ -z@sCUE9c`82RtK{_67l$=`BCq$I!`=0)cb#YWR8dr_5P5(67yc-Kz5cS1x|1p@0Lid -zbykJ9_M~z%=D`|AAX -zhzUj6w;Hc3cd@UzdeK1dXXW4r)FR3Kl13&HU#c;K*~7u!i6#kAL%&D`8~oHLV);dK -z?8+_l#(+Op2h?f>NlzlbOU9^lxQZ5arTqp;s^x$9502cxJp`{wZ&{+>pGQu$>?;zB -z722Jj5EOWNIkmehkx(P#Vc<)`OK@Ur?dB!&2%@M4uNeuM09ltEU90aAydRe0Ir5*H -z--O51@kVfpx7nYfVs+D8_m;V|o695YgyG3vIKXYf{CXt<3WJmo{|v2xVw2^(pMas= -z1G*hatd<^m@N+Lh+r{}lEeN26f6nB+4nciLNgmMIGp!ooxRnj0|I*I<4~$g(3nN7= -z|2K@RGdSam1es*AN&0UX$q#HNIWSM$)e7VcakazRZPWxj%dz$jy(o?Um_qx!sP5I{ -z(P=F-2?T^s%M*2U)I?07jk_StyG_4q1;3xPs8$aeVg*+%!**b0DlzAeTC-ivNAEdr -z1Ke?xK8>6Mn)!uOQ&+`)+oz*nnwC<{nqk1)hM>x6#v}sOncb^4DmH*>+lPoLRy`Ku -zC{QA)+Pp;cTOVt~`f>fzd-AtyVaqNgZ-68l`sB2L-brq3y;w|)`|Y|JW1U4p7vHzn -zFI!hPBd%R}7^@{O**~?Glc3h+aF^%2;6@53Dl*%1;&mr1kHnRS=YkO$ShHs)Qd1nn -zxb(IMnv{aXC(N^Msi -zZ-cON_Dj{_1iQh~5tW*#-a_rvSXnv-O!HbMz`Td+;FAMX2Wre$y+<2P#y?7;#J#GF -zae394h@iGK`<#*-mU4RNT%kM9CYC0WXdm}wLMiJN5}KDfE`^mz$|renwGldhgBJq= -za@QOuzJzVcZFu?W&SD*9uTmxbmW_fRDloPwMMWIW29=_16q4o2mZgf;!3uBLuLcXN -zR8&BmFiT3?HSJa3K`;hdVxSyfhQFHyWa%(u; -zJ>I*X%N5#r;})I6z>5K>MLw1{{44%jQ`+^u^2)mJcPJ1qBzitGaSeBiR~he-uPMGq -z7nnFJN`yj%WEAj0S;Kug8`8Y5l^u+29>6*(7*%xX;L}u;@0xir!!gH*RjkE!E>uv= -zO8}k_^~G8F!1~$=)uTye5jKm84JoeUbJ^S8rlnD`A4!2u -z!qe6o|By~n3w-5`EsB(6wPOxnlrWhPbC@=MfsWl&uBe!w1^1S^{hJ)qY?piW6eAbl -z8X{n4RBR~|)CmBt$dB)H(|2s$HDx3@e7No)`>I9Wid~ivWU>*<_L?{9+u^p|lKCZ@ -z;&94rdq54&fnG=2d=2gQx1lV{X^)MuOuGV>6xB6v&v)-gVdPg5eOdvJYbR%z5vo5L -zQh$8J5IoC7*?W5r}q5O3R< -zZc91o>VIF<#zSpFvs|sIEitQOXvY9scvv`g_d^s;DkCH_>3T` -zbLaN^B$m>OLg1n$y`EsIJAzFMCq$eG9ibM*7NfITi1uiN7d=SV3lNDLU$WfNzA_+o>aXb1vc8Wpb>21-0P-ENp -z^rV+2$c^&aRMxm8;8cG^mXes#+-B;|jgz^t8Ua?!5KgOi#5Nhe?f&(1 -z24W_?_nvi}BA1qWPK)_i#T6L?qoRas(-TBPLm7}hV{3Od6?kQiWHs35UE!q*IisI_ -z00ur#2wZv1=3*5OLKHTNHR(k@>4a5%I-zQ`AgNVynUW%+n4OP^4t}2QXW*wP=S4vj -zP(0&Sbs{?J=anIofkPAJPIx@bDXL{lzsx#cS-||#YgPP-ASr_;qU0uhls$vwDaply -zkfyUf5hRXhB`O}570F2n=fG@nxFXO`Hks-_2(nOjrJUsX%P57oLZr$1u+R-?xo4rXVD7 -zUF2;z-fy%{SczB-n56oT6N0&gXTZqwig@fcbuesIbXRgrBq+w_!QKnlpeJfP;ln;D -zE#?44d7T3W@Ry3Zq9viD;UK_lf%_sj2af$dBUtJ{si5EMi{PM@-jB7^8Zb}V+)OTo -zsNb?iz$Q-kL<7%jS3nOi60zMFgtOz<2nMe4G-&xcks0a*RH(+JUECxR;@#EXLh_n& -z%C!+ge?swT2om=?#S{}Fy!Eg4GEdT$u&2bxL%(1U164-k+8CBGQ2G%Sf$QkX3a)uP -zVKHV(f7_WuJ0Cn@T4vG0kn~r?+{u(JoF_AI7Gtx}C7-G({Xs|hKSnq8BJR<`Kz -zE^GFJ&E8cEgcnz7^S2Tqk;8;){?|b!uYTYa$qKlIjb6!$%VvjU3-tTh;i}G$jkY+j -z8KXvIl4A9r`n@AOgWw`dku524x+Vy@GDj~YD!Jqz{ZWv$&fVsJ7367*X7~t0OD*Nt -zhYE~rudZT?a)JH)-0G2Itz(M5F6-f?P2`yKO8Zq?qcnui|s9&*;z -z!RPzT+P3bGfScb(>jw)TWl~e9jOjHsr-pTC6oCzEA{62REc&6$-c8g?T;Fh-M5Tyj -zq3BHd6Jsg=D##-AU$k<1QmtsUGTw_|cW6HUDoE?ZPX$Ss)DFD=M?vB=X`R7Mzzk(| -zAPddlW6TZGLunh{FH^Jysdfkp5k=@Dl$&BHJbh?8MJW$~#$d1(@y?uqB~eMAQ??S0K=Y+SSV;!s5`UY7d>_~IWhg-nWu!=RV-S%znH9U= -zF2{`gY5_F6G9@q$EXI*EArTUOaAfr4PlL|lolMqu(`h&;H6aw|8%rWM3lIWlpv?Z# -za1tKdzWy=irwWOFc@u`wy_b~2hJfTw3XF7OyRSTnWaSv{>&aeSqz6)WhDE$SK=DT7 -z2>Xt}eIW0Wl&NX&L>`pZJQrX)a3NxgcV(y7X}{8MeQ)W4^*1B@pai;eQbpj&xP6CI -zX>VtTr>_t)nVPzZhiR)3PhYFm@5^bqq^K{DG-#i8dkggc^eX{;3AA01+R?c4>l{)> -zh?L7}r{qlRi)L|@yOd6p5J`x0D|bKz{28&XhWaZ5(ZhauQ#%pa;# -zA=Ui$7aNA?2^nLLc+p@;$<-3hY*9qUT3r1Jmz`loED+{5W44*X%=d%nnWD8x;r38L -z%oI*#Pz4AxQZL|;D^dMqDeRDWydUNaXp?g}jasV(u^Q#j=69K*m%~~*1-qyOKbB0L -z$-%t0U+AB0Vh^F5KK-NTIF2tSiL2Ur-m04pon^ITAT_`GI|q!3hP4c+)6I#3iHLnF -zX%&sas1M?fb-* -z;)njUxtb_xBuzfsOPd7(bP>Ng8<=gxQ9X>rDlQ@~#qMKj{ra@&xm3KZu9F;=&va2T9c-16j#9NCTZ7Uv3h&FsP@4Wa -zWg(AwV4I_j8!&2KW$eVVC_^O6PB)a> -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 -zGEDeIt5@e)1cLc(lK8AOfY8sneXKon -zVe^ZIxA*^WkE&6h?y-{XuY06fp2|}C$33e5b&tcJ?hymQ+#$aM>eD?+o*ZfY>mEb@ -z+dWo(x<^vv@huo&6K-nSKkl*d(>;b&liJeqMi!}#Oe0$Ge0hIWQP2iHs1O^%HD>4i>AyCs|W90{r*MJ -z5vhAh56JdW4yB&7_mFC!UtK}@5*5rhr0LPJ$L{}r^Go2yWEhz;t|37f4DOe>?EoiX -z_-CeGZ5i<7h@{=zRW>)=B}2TaLzC3n`7_M2^TSB!arkWVQ>6Hg=qNFN=L56faeLj6 -z96Deotgdlgf$uIoi_SkIPR@iCUY9>7A`&Ub%h>#ePE!+3O=n-bBU}SMP+pME{mC6? -z@4D;Ok{?4}nSXy?8Xnml(^Wq!K;(xfKkb<9bEeJ=VAl~u1 -z?jP=0v7$d3x+-0D%F}coyNuUT$UKWDBPGrbta|pz9Rn7&UXHpyx#NETD6 -zNAR+ye2R!l&o&yxI-o(^erWT)CS+*7zJeKPr&fTou-2)(cqlsOi)3 -z@6K<)&uU^3-d|QZt@5)}?{q9o#LQ82KB -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 -z@)YyWfSWQhvNZy^Jw3<#lDZoIFpa2_ -zFi0d%!ShxaCzsv+>=FO&_ZyJY^9WVNQEH?h*&Kc?kzc*Q!Of^dOfxBcY9Kcqt -zG#BJ}NMfiCv$P?ax5{p~(wf#JyEn*h%oC9V -zh<`2wX-?Z*k#&0T$}J0An~kuMwDz^U@xEy!GnIV8q0Ce -z++emW^s>^-9F#^S1p%Q<$84SxIJ|`)R^wbSJy&KvN})a00%^yk(^{R?&{+v|F_)!2 -zuZz*w@FB*B&3p$Mp6^~?bA%scvr+KfM+@%F)-N&|=WJ_-IL<8xIABQI`PD(1nndU| -ztuYZU8e~t{oFyY=SvKf{EN1Q_eI>fk*(&L^I>lpMX_Jy%M<4v{OTGCSBymj&;G{K7 -zyjirCqX*P*SNMdxIXtH!O@Z)oY~hVa20mCwl@-)`I{kWk2eiUb=f3vgYi`pQ(pv_D -zcS8gtXwG`#%7emzDmNh@NEBVTZfX%pkd1u)n`VpZ5>*nAfHPUsmxMS}2j%S{>cpo7 -zJ4nNz`l(%fl+mqq!rXwxqspDdHYu_hy=T0hA~1;az9VGg3@ozMUEr;Lt4TQJGbXRq -zosSak?wJ}BJoF59UXuSkvzi{6Gd7#_-_GMgn%O1H-_B!W`H=IkH;xY(O&!nHYuq4t -z^N8dwai)--R>MuGd6rwaBT)Am6{92Ih?F(IkB2dWWqx`TxtUO4OiakgyC^XBr8pMd -zP!GBL@;~gbT10$%2OV3u^L;p$d{AiC&v5V^1Z3pmb7VBZl9lt`u_zu*zhhYV2Nj0x -z$0X!aI;s8K;L_N=Q)QMmbuE^g1tBRPWKX>{E`fXq)SG>)A!EtZkI?I-jPZYs^nn -z{|QN$^PR@$?V7fmug!v+1IYRt=x-0dq*b>HmKFiCc?*pEsKAXYw;YF&J^VCF8>;j( -zY7g3u$*oCzNl%PCk|#4EA0CHebQeok -zEN1djqSB8O6qiWJ*joCLC1?tFSn&*5)|zwinhXkwt{)YK5U5zJbHGIYX%2t-j$8lT -zcdTsb+yMA;8O!qC3*pFUvm@Za=VN>eu^}! -zJptPgPN`6GtT#XoOrl5g1FBWOi{8YBD|3|g=^~A|*$QF`$U<&J)nVC4*A^N%`=`IO -zaNcxGH{pFTB8|YGf~(`FEN0|vgsx^$tmFsb=rVcTs4pU0wdGL>gi#wkt)1*IbXpQ0 -z8k9fj8#6vU8O0)>(g|2MDFRV3x4V$Qdr#ruI8kF+u)L6MMU?rT4o+ns8gD^K&$vsJvXCd9s*q2DoCiGVjna*<10b+HwBJQ^R+rf)}kxo5>U`QFoc|% -z>SWymfGVTEYN51m(7dlD>jE>5+H7#yN8q+MN*9xz)5_{M-w*=tqvLC=cnwLnU -zC`)+`)Jyg`IyEvz6-{h`^SG~}&68t*4r2WSxRaN~7nZk{ -z$euS|3S3cGK1PpXG*RG=XjYlY?Ia#xYfQ+ -zHi-S|OrxQ_qBzf#Ys*Eti!+<00sPCl@@QqPTZ{vq7_Z#5cZ$+51WT+2b@&6Bipfv} -z@_^a=shRJym}}tF%qj5-ij?4vu;5$zZ_x1^QbJD7llDF1MJz|IPBdWDWeLO)P$0QS -z%EU|xp%x>QB@z^e^c^lr37U+*-o1K0;~n{qJBRQZF$#5mJaEV?vU?rEB^h;Haf-wrbwV@tTa5;paX(L+WM;XL~S1HJ|0Odo!l?a?${tqkY}2 -zd=6z~Y68Ikk|<}Qigp^xtB$WTK52TL2Hr;$`WExrM6P&jT{rbxHe&p^;3irr#_2NFee_5N{>i;tW|5I -zPH%B9`~@GG*lhJ=*6!Pn^A_(^4}J_7J7?Bt!88u$;KCd35SG6i6Hz4<>E*t)U``evhXWh~@y$bHnQ)J)9Jf-=0wh$ldAVoT9-X|%6w>%~Pjwa6ZSpepX@ -zj)8c->$(kBkbCTAvt1FV9pv2;bipk|nsK303>Aqc^i?2f=SN_ME9kbgNse#rEE|}= -z%J+~;%`hVo6enhYpOn1i6yrD;U5#&q_j>!o; -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 -z9!3>U_CZB;jK;8i)fja=oCoCJ=B%q0PwX@ -zobfLQ-ts;Jhm?Gg@u1g6BrlHE9qxBukbqL78S`5lk&Qm^6VvhVDlf2wnpkzr8)(OK -zc?gAaXTQ{qL-^2|JRt1B9(v+cY)+F{tR9&_`iz6Q^dsV#SF1psl5;t|m!HX(@iKG! -zSA#bi-BnHmxEG5uHw-u5;wnqN(lA -zB#gaewI;rCGBE(WM$~nY{6t@%*O>FuYn&!$@5EX~cYEeq?uP*I8V4c)USrr#uhFa( -z=rsy9KYERZl9G~2NqLW6V?5AnyfJ+88tIYvHuaS%U@h6fw&xk-}Y5zWh6d7|R%Y2^KauikvbpQCVr -zAa~(<6N^=f97U*deZ_^vAaz<88-OT5)lMz2;{}2ig1JlSKO$8Jqe6gz0>Q;|2Mfz% -zMSiFDK{*OPci(O&Q3Kx{^*Exm$*E1^x{9u3U*$a)|2W<{JY~z#%d)vLuoMoQAFsu+ -z8nCO#;(b{`CFhsFZ&DOe$sUCB?8=kB=vx8RRz5`FstyxoB=@9&%5SAHtrqu;AuKZA -z^|LEug`38f09z@G#@LUrIl8AGSJYSYa~sHD8uyy>X4A=bTj`GAYiG%0rt{W*Cq^+^ -zN`TVlQEMCBQtkF47g9e!d2TdI`%|ZA#@%?$I_nG6IHkFfOVLxna47vj?d`X&hmkBP1X-3D^{3V!jLrB -z`T5Y~P*E(ip|H5($mAuaj8k@*O}rYmt3N+POirY3O+Z3$?2aSaCW-O$Yeotqt_>IJ -zsT>G+PNqc4S@4k?*NZNS$_b`CaGgY3*YiVL6aG{VC7kAW3-o!qp1J84DOfR|1u1!l -zQK@WW9nHc&ZBmt%Ai5xY;=qoGzCi!3UsXo#P=FsHc_RGLz&+nx&T%E+hwZGKa$*N= -zrTRLosudAlm!g(oeD<9^Kx`Bt+yyNy0*H;7UEWs!v9XNgF8X1l3Z02t4KN@qVKpND -z$v?9|r3_v+fie*skI7^Q_2kuZKbGB9uj}g}xUWOPov(-6S$aXV8ddk)_+R@j9`bpS -zje+3gIoQM*fOK&xSbJ$ZP-DO|Y@24IQb!2_y~f%8@o$nGK(A53iI(Hp4_7p)>z7NB -zjG}sJ4RZsu$BQu^_Of);?aAnz3V~ds7LaRPX9RGKCqKEy86emA1>F2M*Vup40^k}y -zHY`FF{^A;O!f2OsfLvqal#n(;d(azG23bh}*C^$kR-_K#8dH&5GI(_X2YN!Q9ygzs_#Gj3khsxc -z*_fgY@tw1Be^Ci3PooIg4zv}47kDN@8c*?yeNO7JqV2mfm!U<=9 -zBhkoWb6Jd-YwZ2swY}=!f2Gy1RAu@Ur8fdkeoaX4{B?b{)4`D*H;XzAYasq}pE90G -z5DZ!2AuDWAn5f&ez_MqlOa>RrCJvFvy2wT$(ujH5l;K`f?Uk5bNg<;x1B<7 -zK%Ny#MP43LdK>q-Xf1ZAYrQ6TySTrtzW6!^%WIi6_Dq(H5`U{eGZt$55fYP{E;6dO -z9?emyx1(zEy}oqu#aJER?4{$E+?5i#M*}8Fx<}MWktN=QG4QpblhF)@NvfHouK0YP -zgI*u!gx*9Sa{UASBcg1Qk(^G -zuCC_iT)|iuT`JQdpCwf5Uq-v`F_b~O*v!;{g`@r*hKp3Zznh1EsBSm)=M1fBr -zhi3`KmTAfL=g=VAj -zuk$CAMuy$bjLA@Zk(EA=5@C%FNYU|@650`IwGe>f3MdV=l8j?W&y40E3f^PginnuC -zkxTMz5S?CGAmi~Zo)&eFP!Ja%aUOerO7r^)xD^`a(#*xa3@D~x7`Feod6y}vtZr=zN{-r{SXZ~Jh+%?%2*PLOc*^c@>Ukm3665tX7pQx11UY#7)W?who8JdDP- -zbyh@)pdrjkVpNyvYBc!+2JI^lk^2G+Ua2`G8rn9#7#u=bVfx%z=-e18+ISyUR$&8739;p*YZ|yO~KmN8IE7 -zobcN8UC2Si!ujESeXb^V&kM+1)8}>dRNDoc0ePDn!Y`-eD;98$DuuwZ>?GkUPwQ}l -zET>yy{UR3!V86~5yeH%Ht87ckYzE8uv_5_$$V4K(#zB;P-7keoD21CT)`ZiHdtp=b -zVZoTo&cL2Sgb+T-2<=VB%eAD)6|YG~Dc-|!2iJjWhMqN6elI){lB#}=)$ZC=U#<~u -z(dG}A{KyOSi!bKn^edEv45;P@t+qJ8=P_Asg^We*-|8X|*x_^wlj2^5Hga!W4;MTL -zV95y3Hm_bI%xOyI@+((4BRK3CMXQ;ZOuu1km?*PvuB`i@7LcMrZId|%0k2xX%AAn) -zHKIl=uc;ue6lOq&^jo$F6-u}xxs#6=ci&zFac8sGeZ{+3tB&+Zt*Qbiqx?96%g1Gv~%=^k6TtVbhY=5XG^uEA*dKquKl4RO3Y$wC^vf@e6*T1b}K} -z22hQ!ep8K5FD|H&gKE)HU9%gfB~#n@nac@k)~z3&XGYWVecCl-`=CF-(kf;^V*cX_ -zuY5%GBQD-DvGn*?rAbX04i{RnXs*ewJt&7fOYD@!Q9U<$R!`h|Wn(|-O4)$^LE_M_ -zgPWF?R31#9Wj&Q<3R5&p_akDq>=sVsMqr^sKpdAQ^1r-zZ7@p->r?(dnu@!TR$tgOdHKz}I^5=#qnJ=naC64*RZhNw! -zetH4P_<2{Oc*yuN7_u|#3s)do2oCPd&~E8eZR?w+Cn&XAGfRwe5N;_TQ< -zu44b78p8loV>a=n?%z~n$iJyZ>A$H)IWU8)QFv9O%b!$Z7?5h5bXAk_n;}0V#X;{_ -z@;x-(-;zjY8GbHFNOPcHoA(u}L5$N~gD#qo2!SrEeY0?h!rEh5iK93pdOi7}hC0{` -z46Ym&EohCHis8eJPA%O>ywA212$_YK(BCHj-xHcL6ttJhrT%LHy)f!VTdH?U_!`fw -zLE&$hD~XYPROxtAA`RIovA;EclG(q}3>Lr&L-p$M(7rAu9KTsy{ru{Zbc0c6M|Q1X -zRSLd|le-JcmQA^_O40e`OTrIK&x-FBaL)YRF(Go8`=ad7joXH2v=iujFVDcSo=d|W -zo@iNcZ+_71n6KlQXSxaBdLz(VzM6b|geOyB3sRrB9Tu@*HQPsOHVO8cLnDiEV9?#w -ziSItqf{x>LB|lQp!(hDDL8cTG{Ds{ -zr+?hmS_@?piu;Xm-crC*pYamFH^E= -zB$*u%6?`)n1vIFxxx^tw_JM~S&pyGY*~edg2EY! -zLkYU56UKE=FClwpXC9<^ml9!o^v%5C0%Pu_HZeI_sKEWjB3(9V*cF_UhdHN{^JUi)&6u%65fQmN>@2bW;(2Q;oYH8mcd2s98MgP?ghz?F)9M$6sY-kysw2<$3&`bM{2Vs(+;4< -z;qwNw6bKap#nm_olVF0=MP`h`%I(`9_}9B%k1?VerVjRbLYz5||!FL58n!drJUJSpiFz@dhb`sz*9i^9s}ovY9x>7ZAj0xH(K -z3&A{kv&1>A=gW?LC$>YEGKd9*UY**5NdD*YHXUb)SP_i?2nXWcGN0G<&Q -zR5##VfAqn*Zp%ji&)9GX;2GB%?HTdg06e3rwkKpysA%h*ql4@#wRQl{ct{*~8}y53 -zWWa@p_E9y|ruvbYMp_6-h6UgmV{L_YgtN6pt`rl?^40-7BMNwi3xH=FC-;^%A#mBY -z83XW)P-Wp-A!pIY2ZqJooliU?B;mB0tduB=DZ`9h1guyDB1q<^V#T?8a@g7ro8{c} -z3h6`{T|3@1q?VlW!yEpq8Kg!7=wKtR14!{%AH0b)4K4WL!8kl`Aii@LeDMoi1dT%k -zsR(k=uMWUk?H|)j#SjcWcYf`5$&q`gBjEy~Hf#$R(!GDNmuNtyFV$;}@Fx7WGpFeu -zKE^cyo``3O19Pr3WAKVSH@lL=QbNJh#Bii~zlI;`hm`cjt{8%k81wT8tm-{8?Qsk~ -z$w`N_Q{T$ldm$H*<6F<~!W-}|^l0Tn-fG6S%*7(Et8rIL!(47J3BIX?j`)e_h3re> -zo>>(Zrx00aQznTEV`s8%AtbKke=rscC3DdE{L!2|O_pyWy6P6(S6?b2N4w-((+jxt -zIw}I!OM8*PPujaq&rbZAc?8hkZFSMXS2oV4YAc+bxooqq&69kiy{Ojm3J%wdC|M)J -z6uL;K#!5LtkHw9}?45WQEM%S_xdvW|+|@et(9hGP($ -zyb6|ABe#qcD1(xPU(Y%9n>Pt9XM+#%Dcziii;T%8;9)1%Oo>cTVr&T~MpN((Rr$rN -zI-!=r-^&uCQk9#Aq?f2DEEHI>vwkdn5v^hsXIe4Y%&K^~Jnoe|?oxtYG9Z28v4WP= -zA;}&h*r+hx`-bTgn%{Bh`*Rhc7J1eXYYmZlksS1ALbGj3E9E9&qMGF1CTO#4!KT)M -z87WTfKk(W?N7N`c!IP1=T(K^zqcPi?A<-=z!XEBV$IxF}YHRb8ZxC7r>`-ge8D=E& -z7N_K1SrnP(d2#3fX6@doMW^3;T>6}SD7c@+Yr>Zjwm@IsyInaYZi2b_3n-uHM<0f`_(qtoAQ+}SfxgB -zNd|cRUnM1_Zx3@7sqT<2r(Ejo1yJ}>U*V4lvNO!~k$k@~o$I5cZnSG~8#rAtmgH59 -zL++678W4YN73*(&P#`8;V@nMJO267rwr_|`yGuJvdEqu1W_=*oa^{UWUJGZE~FO- -z)?y^?IxmkZ18mz$E7u;NM70=$#n~^LSKJm#c~a7N-$O&Fx=O@i2A1+}()Ihn?E*P~Ww3CDMDVcej6Q?{@&{6n~p` -zp4+22-1fRh3=2*cUN5f|=>v+6_m7T}5twFpC_F6^Wz9n>wQB}$!oW6ug2N1N&x(p& -zyRy -zz)XJUq_CZ?jCyF}j7If;p4fxCD&w0KhVCh+!}kKCAo)cQ>mrAwZAz#{aIS-}%z4JO -zr&38wj+{^>G@l@=EuHPSM_igu;uVsr&JU!*%8gb-$2J1Nfp%q%Z)`9pFv)HTg$h?H -z+je=OOoqvt^vwuU9j2Ku8E-{*QV*XG!i99t9z0)$^XvZhEmM8>R-T><$H5|6-g>fw -zs-h3X;=RP;`l^x*tfA0GFSI!ed^vn<*U7w=RaD}aef`i-EWR*@cN1^@UAm#-&^E%9 -z&oaBKUTAYP4s7t*&5M(Bx~KBpv@;{Q^~d3>6QnGcbaZ!0U56=G*)3Te=CKWj#F2T} -z6uhzp*%%(@fO_wcW<@^#vTzE?pP^j%R9CazT@yp$D5_VjlU96-+U9+rd|jsToB~~& -z);pyh8bjGnRnxON_>!l}6N{uaX)shj`fCWVDq^g^>NjEwdEvizjx``1ICOs?ekODxvSB`TT%Jv+z3;q+DNUbDb&e(> -z2tYuEZiBS0`UJLF#=;kH2p;z;eyWTF2z)ab6)vgd;4Y;Qf{Y -znesNGpzcMctyxA^wKS@JauU?g)2*>XPkZasNY9D3u~G{tux -zOhmA+e7>}$@jFO8hD-7p`Z6dn2coHZ|lmYmr_Qc`Tfq|(S|Rpm!T -z9U``0gL}`rs&&ywEb3!B&kParWj6L`zUuOarIHBa&(CF6?$iBR`BBGEkO-#ZUV@`9C}_KQ^ovu78w#%XE&Fj^WG!zM -zj_qy0x>NFf6(sC_4-K9t%&383ayR_-hkpzXZEr4pzkl&Pk7uLagAVuWIQPDaiQ`G%f!Zs0#zB-h<@`yS9Eq4?T8K?$AhIiot?G8rpO5lP -z*7-y8#B*8Gl_2MChwudWTgF%hkd~7A`}YCE8YE&|<$C&ELSg1ni_#g9<+zjLk(Juv -zm1Xe6pT^!_+9{fP=sqVP)ouzxRTeY(RoSC|Dl0-Mu^{%*4xyf -zBE38|=lrAKd0c?xzL8p5p&ku|h;sa{qa=eywyJ*dmy6*{)MnJg@vVT!8{UD}6p@H` -z27xa31tSlo<<7wd9{e3BL{VOnXL1(B7`kRfvsN0OhBLvo6p`yVEU4}rXYi)@&m}qN -zzG+rSCDwx*sb*IMi!0a7k?;4UHgTAPbfVRsTqZe;u_Jk}2NaDTDAS$vF8AQf6SRe< -z%XK=)!ugOpDmuJcyrv`6Il%-4Gq`UTul&vvt8XKD-boPI3ks9MeUoHE8^;eBg&ngP -z4;$si`K(tr|c0*$MpUX1Mmk(NvUL;k1Vt)thk)^Wp^x*rh~STSueE*6|S7Iu50#Vu+i%tq22X9RuKgwvN%iT1Nvw>*)U9TSpianpWDVU#%nK|7snJ -z4gPK&{g9K`{%Rf3IUifcfq%4)E}(TxgZ*Evqr9LW -zpmp5U{V%QK_qa!%G3ICMxHboD9aCDrO#Epb!Jb-2bfK#L$JTMsUO8NenBl{kwHUsf+&EIwtbMWORV%d=)&e=cNa< -zj*)=YaT@L4t>YkJ^v~AO`LT6;XVM$S8ENvfbqpf4X8^X2*-x!wmUHsdQ|lP}|EF~{ -zFZ$Iw4%5rIlokj*wT@0TlK*NQO;w2^fvqDmuyxe=-8vp{#r)Me_Wqx(qgN*}^3T?> -z?w_rr&Qt5C^VmAd{cIh#;{mPXB>PkAnEj`9#QB&$%Kp?kYW!&(mjSKgx$r+*NBux9 -zTR`h*j6y8qD-CQN$&7hL9$Uw@|Jpik16#+vvwydavOinLFTYwxtv{`!EIH1bf47bc -z|Fdts~XHT1UQLt>dgjk-y^9pVm>~v32}TuJ~8$ -zc(Dg;9Yz0Y9eIAYj+cPek?611QTP8#>nQcqI=%w5j&i?RM>;_381&RS5&&Dr-O7Uw -zj)I@9BmPtCNc&go$ntmVsPw0G94-52>nI3l9it7Bo$x%+|Fn+Est?~b6u5rzj2S?l -zv2)@N&qzjkqyHDr7@hc&XQc7`Z#-jkCG`^GFP`yb5Crmn@Qm)5Z4jCNrFAR`k38F^ -z`qet#PRmO@wT^2Ne_F@Uf3=S3|99)ief(fTkEI@ -zY#kx~-8$-mq^A689jByK8vfBbF8^*FM^#5%aR0Q9v`?*L*Z*i8Be0$UTE`7w>j?H& -z>zDy(9eMxRI!^v>9pV0J9d({s$I#!cNmzWviWn*C}W5j+Ptf3=SL|7abr -zmWUr)$Ev5+@!-F;j?TYY#|^O?&+pt4t%Ala|{wgEG=)Ige$lW?MoP`rQ7Q(!3yf<`aaDB9*lsw=M~u|!69X}l6mY+ -zt}q;|g(1d=&;RZ@nyh0%O?-_J=6?_Iz4HBiiBRlQ*tYkF;SDT -zmCEI>#OlT0K-eM;X=0O)=6&B9h6tyL&lX)|-E?#%;Z1!m3)E|3BMME=1Gns%L#QIh -zlB;ZZ9eS^xa-+Gk5Dv?XDimSpqe6%-kBvV7F`GoCMChHYMdx8TKM{TS={XG_B(1)M -zilL4i^+C4odj93-&C2t4n+P$64DA+Ga-eyvbq)sM?+25U-xb5|*IZF7L1$fzQ2UP) -zeC4MRo5dRBt?&8DO@Rk|{4Ly2||vWIi7NTJILa?9Jo`{h>< -zjkKgzNP;=QZurPdvaQc*2(KUdCK}D{h#^w(#!awXqPlgMFO6fuN|@~wLS!cS8bN)( -z>J#v4J7UT!)(l=F1>*2A5_-c`1T^M^D*gB#|h6Vj> -z9TA%8mHuiS7yr-JkwwYO+(J7$87d5En(MPtEK?^!wlbXFLr`pDMJBjyQnlM+TClA) -z6Q?>p*>}*JK5poJ-YLVr`H^eTcUR!}l=-jXe~h|kOXkm!wCi!1dDjn)li5UL5{i6~Q2GBY9-L#A{ -zFliaz%sQl*b*uOsW0=`27*TjCqd{(8+kJ5ahnh?CMJLg?v7-ppQobfYYr^|N8C2GZ -zlwZT4L_z$^Ai6KEABgQ2@ -zI{Y38riz3HIOg!=%X!*TWhmBuSfQ52;4J7$HxDX$XzboyME`c(m`#2D1b5h~l^CiF -z{4NR?#md{a;b*tn{0C@j@zaR(2d3~$#*u4MU9@a?Ywo@)=}awKx-tVkuRU_-Lh_q1 -za}Yq*I;yforPXQVi+hM$x~GmWvS(2kI4vQ$`3id52fGQ&lmj5Xzljju95PnjJ}iZ|?TdtGz~b@4c?1F_a7tWj4;I*<|hau -z8*o)t|8g&ZmTZY6vGV#BfidlGhz8 -z1aCF#zPZ@CB#qscDbat3Jnoj8F6on{`21MJ)`^9*RWQLW+eLta0q- -z%=1^YqbQlgihSxsqKuw>N4v<`ppdJ# -zLmy-6U3=;kEhX%mm4zkw1R~EgNdvk8Jwj=YATW3bVTsfsh8MZ-i<-MCw{?!+w)4R5 -zeR!VmO1J*lAboCbJB5GLC3XMiGx`h@K3A`i_&MJ&XGS*(-gIo<pukoUJO}s5oT- -zE~IcJ8+@uCU~hBl8_PDoA+63VYJ(uc-G~mRhWRmM9vX>CCMq=su=`Ft^0<+*K`D3V -zul3N>3JFa4^wze3O)Oxt-=_QDiEec~T%+>34{|k?<9CoEujcd}!5kt@e*~;O!iMi>?ZRyS~2k6KlSna|NBMUxi?I}K0iB|*l{U$#u#03vTRP2c= -zr>S6BMz>H|WE(7xrq#`_u`~*CgEYMwHAzi~?fsEj^j(}stXL;6K-Y}*`07koFC$Oy -zQ$#DGpsYdaoXWWed+aCqbJK@{WD#Y)2Z>RAd}9U!PyL<9OOfNVfr58g7p!REiu9D~ -ztj^-qNPabI!8BgmGrm)+uLt2szJ9tkr8kFnT@XXMZzQpFUyaK=7oS&w3bIMneuvkn -zLi(*5VbHzM?=&oYa*v1Xp3%D!?tqh-oxBx_@r^gTL~aAobA4^qo}5JmiTxAN&&0Ql -zycvXVP7M3yzYSO`kzfQ8Y8z*0+u9P>&m1nK)#lBV&jg`R^e}MAQeHZ}gT1LN(N;&y -zBMz!&FQdYoT*r9+8U3!Brwk(-Fe_}sVSxK#leGn3DxAr@jwUo5_5L=Hem+)bu-ZNN -zgSYAZz`JQtf*JOu2{!~~gW@&gs4p$ddTSiH(t?CCozDV22N_#aDcJVeFFGMz#=?$S -zhso8JGH^drWX5*m&Mjn9DWa0;*Ka=?-2QZ=M!OZ5*X425dn&o!?AF(a5W@;)4YFrx -zAympqq~d_Qz1hM3@TT!oQ%M}et2BhU=~6?TVp}L`nDiCZtOrwsc=I`}V&)DPmRa-o -z=N27aJDsKWX_~eVubPs2LIXWY7BIQM)%;r$>e>>B(4$^Y_FRNOpRxtYraZIMYn -z#8WO2gQ{I4=ckHIeYfs6t`C=A=$$h)dvJ -z<%p=aWGt=p5e;-xbb?%Y6UqUKXJP~1`f?x2qlZ{J#@wVO#?@%qwAu0&lA(X0Pj#a8 -z3Uq2)P4_yl6pxGG`B_WO+)#aSKuF3E&zJ&h1W)Z*l-B4{WHJ;orZq;XpmvE!YSwm> -zXbf5Kw0y=bAFK)(l=?8ohYntLlq0F;cHZMmf#BW^%3G)bNAf*fgfgArGowC}~x0Z9Iwi;+fhm_`07jCmKgo^9tAdqwDCqa`A}_|!Ur>Q1-0g`qySjyhN{E9H_?Ti-|%g{p4WGtNL`Tl+%s0j(p) -zCt}a1)^QiuI;x!|l?)f27HF2TXHv#oWAW{M$ -zrU+;qsr2p#qk*lXRa}Gr4Ef?fPqz!8bv$whvwUUt2Ia^G2~%?Dnw18$j&i`(5tZ|2>*xZRBC-kxXdP{!Z2+w! -zmvmV^uyqVzw$n;|mO`pMW86A6Ast&9DB$FWNr&$vc75bA6v%{fYz}^4P!s0FKmIBJc0u7F -zv30CM$p6(k=KX0M>4B}I*RR&`9N0Pz09(h8vQ)si6;&NT1T=BWIq`YD^cF^pFCqmBamm51@MgZ6;=t#0^AHV+T%|=V^eqVA=?&! -zfh?XfQX>1wGgbq6#=9#X3Lwwu4B#1isekc|d8RQ3e5J+jas)}6NeKZwqxcK5oZh`> -zL9-J+KY2!yIa?b1Sw0}oSPkSEgVt8b2p)Mx`MC^V#-BVRhLQ_7fM-0uo>2yGKKh0Sz%vs6gJ&Gljk|LP@QmoBv6IAXT&j==iDdKup3yg$3dl1axau{p -zSq8^h0C+}3AkP>neE+>pq*J=#@R4Wqd*T@*2?0Fg-fx}}6v#8WerDg6R*8XSlYitH -zb0mleA9=>$J)Qa|p0OLiGj=?Ccdko3Yz#*54kW2PEf5^QGx7m=#!S(SpFE>aB?y3L -zO!z=zA%qw8#51}8c*emC-Izz7QS^~#1ji8D3kUFwj#RWS4nbBCyZ}67-QPST43K9` -z2JnpAoF2YFp3!gkI6UczXUsu10q~49K%TMa07aGdYg=ok)*qfx?HA9uH=?}un`e}# -zg0lO=GZMd@ZTQJE@>l=j8M6R9V+DX`3fAfs!k33^A1i~ZF7(h&_&dC>fbl?Zz87ZH5#-L?F0f1*z>I{>A;u&Rs@{D^D -zR(?#)AFcsBBkUv3sQWk1nDWRoCO-0v;z@~VMO9Bcqa~1My!ne~eDlOJt^s()cEgWR -zk31tT=caoPct#ExsFbJI6p&|x%$EuT@{CPSJY(j+ct%CeGMNh)@qhA+?!S0OFD1We -zQ2s}r(JVRH@h_h7Zdn|_GgkhKXFT=#!!zaqf==lto)MDER^Tt55%nj}sQVYsI1J<& -ztsZ$sbi`jgV;g{Hgni-}KSB&@k<(4SUEh1+8BM-M3qSFUd;p#?iqP8!z%x4k;u*>Q -z;u%GNJfr`AVDG0>>$upjRSp3a1MpkDrbo4&*j6+X6BPh6i36N*Zc;XqUAeF@A -zGyyzg>=%|iNm~HV7%=z5Gmhc$GEV_`M%AMrdH~PJ2ILtD1YLjfj6p>r7qUNj#vdr! -z$Xz0T@r*Zj0G`q1k!NJ3@chX$ay;^kwg8^d4hO(9GLUc6-1XUON!$T>#g -zyrV|MpFATckY_ww=KGsx4CNaYeB>D=0(~EOMqvQY$UY?Beq=yx=}h17k`@OmfJCQ( -zfloV42ic-MD@mgM(uUNye+KXHJ00yZBNprf6Z8-^cJ$$G_tF!4Mg0*p(wDfMi@Q&wU_`)fhTl~Ntyn_VgPg*gksR-z9s -zJ8voLYKCMeNJ4$~C!%VWw}C#R%cIZO^>3eX5qbEJ?CGhUnF{q`9RUY1q-^cm4y -znNc2n#utx1@EHaE(`U5)%V#ug2*dtQpE2X7&xrFcpRr;hEL?bJ -z9q2QziBtc}XGEb5Jc~Y0PXYt_jG4t%v0wIBq7sSg0X}0aOZ|WNjET_d_=7O6|KT(4 -z{PY?306ru8ADFn8PI1W`rkfd3gM&An0gHG -z8TZpl7JmDT`hWS1F#osD=<^>wN&4gcF` -zENcAkJ|o31pV8*YX9PPaee@X_|HEg*uN!_Jo&v{k^MyIZAv^;PRF6v(DO&`|fR$)9 -z`QulbKx_fp7&Cdq`I2w6Gikn4ornZ2ZQ<`QPlSDrEPRc42G+M5mgjt=iVZJ6wyf$m -zr6(pldy^8yhrp}o#qF!fLCaowQ}e#x+aA;n!URT%{#!7g3WpYV3>(75+bwR;-Trtc -z&=0=NbJaW+AcbwksO-spB~`mM(08t=tLYje4EZGrxx#8r4EAO6UEgdB!BnU%!{5nV -zaqB}tHMG?WxO_`n?QySM{nF-piSj@hZ1X<)qBrM_HY#7^7eMI|@c&SD&;NZTdcXH$ -z+qP{xX>6yl**I0v-dUoI`?^;e_^fP*805O&ts=N#4n2o -z?mygx+Rus!zTwJVa7gV<86DX?UZfk0mnG548=!;!I&TvouQ0peZaNtS|JEUmjJ?T_ -z(xVyIy>!^xV*r6LSb6FeansrS;85Ux}lW2)?RJ(oVs_~85-1S)VLd}nL$DEaB~I9@&5uN_&NPZ5tTHWYqa -z7Q%-zJFqY=(bSr@eC`?70iUR>>(Rkknj@+v_4 -z)|Mz67_^PUTJ6^-1&XyuuE@KFF8TIJef}+g_t7rK2?8Mvc!&7w=a)(X7{F~0RV>5( -z^`Osk(KvmHpxI#M?QWvuIT|W@`VW`2o!q*-DBRSjaLjo{?H)7pszDU!kP&8ju+B{@ -zq6Vd($|xdMl$2}QdC##x$OCU?K{qflD?y^Qh}}a}e!ITTE2NxKo_v;p4CiK7R+4=` -z7|gP$hhwL=vApO^(&X?U7k$k|zJh-4WP57sTsS75Y(Wc{1Ov7W2^k{UcST)vM?7J> -zB)XxPfaEvXwVu_Hi0oF6jm{K|cmRmX`r0YVFUmw72CP3mh-juPSWo_MSB&A>*X8MdQsLDzRZR62v4$vzwR -z4MAnfl!sjP1`?Bi$g60c93ifigf(c2bG$skAgEi4>)r{sR`Be>lA2#jWgQzR -zi89KMv--=jT{~1>c)Y{SThh*+E;p=tq0z!76{ -zJSd?*Yp-wxLg<&X5>!?;i@fEKS_=cmyfx-#If=>>cxe1G<*|#Npry{q5UWkY$80N0 -zwwx+KH1UH%I*xRgTb&CaWb}$SLjuPd8<0I -z8v_?IX=b8^N3?*RubI)npBKnw;%FpeKWVt(4bNiS$x2-vw(yC;mq1WXC+^xbK{(Xg -zXDh19Oq^W^t(>X-LK<8{Zrku+{#8_q5`4-&9@#f6KpW<4JcWBT!viN11b`YI=Uz)! -z{ON>fL~dS=nA;g|$ESIRRe3vm+1R~zD5(zKQjIw(xSwsh1YZ=EBh=nx1=En%|sh -zf1?f{bIA{xhCh+rWa9G5=zsWZ_QqykJ^__slmi!=Ac}RFFu1y+_-4?N^HwsV!reGC -zLs&GtU$dT25F3d8C*hAN6`f%Ke+iCKyRpX3gKg#jg<@%r3^yRuojJ`%ZZY-swfk-LFp3xwjz*hrLstXk8Pi+I#lzUsm4OV-VG -zGun3s98;k1Uu|dFg4x&g?VWB1l6{y4hyU3+ivMmMn=bC6|Fdliet^+XZ=uhxGpkJi!hKU>F) -zkJeFnJHsRzNwlT)`FWUTQ*u>A0Jp^Flmn= -zLeDj(@AL9z$A^jx7G^+ag9NPdrj*8r&`*4hJ)`QfB{d=!P09fEy0W#C+mo4n8umj@%5&%=?${fD&row((;)^r{yT`Kw0r2#+^?R -z-YR(iq4pD5;UG1=o&1J>8MtBbcG8E*I5&2iU#SUr2s~ry%xrY=NUNiq7f=*=891y0 -zYHt6Owg+|kfGxnWixWebwTIv=aK%Y=$m_$**Hh_fr?@JH6Zl-x$k|7QAeyH4j7aWZ -zR2<-i)3b5ZYm<@=UunlrB-ueN<%cV=1%EqNQTG1nM&*=lx8&4CZ7pN@aeyZ3vkdkj -z!azQ0r0p9I)iLFo?B+q;`sR6Shws)OSCTwQ_|+Y2Co^^E+*a>(HhxTn2Z#jiemW_d_hB&EBcRJz7++w#{>Wws= -zi4CISI^WA@mM@W-VT+95PJa1zMo`1|KBt)qLS>V8hJ?jfk1-bMw*Khfw-6Nc_F|34 -z-Z$>(R>4%0_ZG~on1&MSf@-e{PJS`(%P~i?tz~9Pq^?Hy={v}Fufo)_B -z3XF->k}p3!cicwzrMruXjJEjJ-S;qJS@Kr4!h#g_Pm_X18{`4k5>%gSR*-{WrS)*{ -z<2f97~$vv9Ih|Hcqnq1S*zY7@ITDd?>}B#aL_uS4c^pp18) -z9CNvJhB(qP;ykVoph`n}YZ+#_hkoWh!!2f-NhIwr(>-eE?n#g(nkq{=Gx(8&_167q -z0K=IO=sH+oDq569p{^KTaT&-UOp}Gf+I2hfW$e2abAEEf&sxrCl@^4Ccu1lC^gWvB -zVTFJQDG25TofmQYJ$pvD=Fv{3te;IlBejve_VjQiIzB3?*t9GSYzcbmiF|4DX@*;y -zdq~~{Jw#Dx0oSg~;S~qq@W6d!x`#gmpwcE4RL$lx-xu}w+F}-2&Rag1Ck)J5gZx8X -zsm}4TTDjfotp24jQ?iESiG1M8#Fi20o&y&^zN!u~kHCcQvRA5WVxOe4`F(k%`VMqI -z3O#k2AQIPttkg+=OQ%fqm0S2u4yS^-v)-wT_u`fw)-0(QvxLA{&Brq6`Y}5=d={n` -zXcRq4XRg31c*xPv{Sb(}kuceNieve(yfC$(r5xV*fu=Kjql2;6Gx9Cr$=)M9Svz=` -zg1&C^tFKf2Vuy|*m2I%ath38`QS0p-+L-buaZS9e87Jpu*vc2XVX5?q?AIDYj;bSD -zL{TW?AQPv3+lN*~5|0)xP>Ln>_=_;?Wy|{3v${y#9u9I;nv+hsXfocsmzl^1IvAy1 -z`1VFFY#;@Al -zuVK%feQGEn9EM-=k{`Z8NxMNVbsFMMCAlyNART9?d}9`*wFDm17HU^te4KoLlf9l5 -z-$z# -zdE_LdS4H0Ou13yhT0|XNqCv}ZvTrZGQ*XpS_mW94!(S#C)Ngv&>6*`Z*NC33COYe@ -z*BBs|I0-lDWy5P=DggZv>5L7p38RUFtmJKvf6TwiC_$<_9x^_AY^<6Uzg{V_A1 -zb8I!?jB7lSZX)GyKRb0=jQuLe_1UV7eb4C#+AkRb(KVo?I!-tYZmCQe1Z6H4g^>RD -zuq&ph|)f1VWoW?)_V?tF2XOL^6AG85$}!n@?acs -zA)^O7F!3rnaa1cpem{<*I<*MQ9zw^sTC39jUDS?%{EF8M-x-O$&0` -z#`6YStKK$EsSZeqVN?*J2{?XZA&tXhb$?wIo^!>co6mOy1K@pwYRvrvmg(eexgwcH -z2j8GvaP7bH_us6tYbcc|LzrU9e1WIvzOzOD!EbZ`?Y$E%d+Gqp{q$9^FgyoTax+*$ -ziX*aZ;%8oQ<8Zqz-Rhz-?@z_`iXp}6CV%G!h!_=U>PugswN6QY1!T9VW2`1UBKK#m6#$1fvBb(&X0&H)u4v>!+dA5UJytEn_ -zZK9{1sn?;&saFh#h#ao8r@ppc9*@%3ofU#SZ}}(pOlPg`4Sv?)S}L|#7l*;IMJ@|i -zJoodv+O}G$olLQSCI@N@VP0{>hTPVz+w(gn=kvhz0Wv8mzmFcg3rOye;(MJ6Di0y- -zfG&65!V~^7!}v&~=g`%MdeshrEW7HJUK!k-IV)M2W-KQgZ6Ra|=^Qc0uFx21UOO}l -zy|}c;Y!pepAEEkF^NkfLpgf7atR|oTz*nRF1^DcT_Eqa(HP!}cOhC9* -z)<#fzH_?b(<}(~!rjQGWf#9C-**7Nb&wDj$zJ-&{m-<{O)g;<0{yI$~o41^!NdeHH -zkSrtxvT8eLa$tE&j3qd{r;EVUcpt>93~>r@)B5PTNm=!-7&}aLfnjw?bB~4<0!;fX -zt*F*=zl51$p-7Sfj@3CAPD8}rck{7b&E;E5Ti+-gW>6HKNb^(Kohd(2ITNQ?IPP>y -z(%4EJC}$AFPl-dg>wbWR$PfvgL)Ye*XOR?;snM{}OY@<4azOqq4F`wBToc-lb1;}E -z8shRbtkZq0(-tJ7UuT?*5(x{CU$XVQJ+PQPsRn6 -zo11MwNmhsa^(6fXr;-~@-!ePiHgP|N24K`yX_=wrY@tFg -z<6ewGCbJP;k_V$#UN)b@awQiq&tQRJpohQ+`x`zZ7n)g~H{5Grlw+A2VPz5rbOnQU -z#tck51oqZUf-eLb@^*b^hbh%Gaq-ZN)mv+}u7&XBRXP>O(t7aReZjOXJ}I;9-?1Ij -zP4_&%9xcWu*MUqUf-;goAI$qQc>;W3i%cZcj~Ixyx+%&HF^I-^25gDv+tnP91>LBO -zt@;uYTl^&jwmAvau#P=3?TAYZcPX(vS7M(HI|+UyA^62d+5=wF=y_+pVHLP;q@NjH -z{pyj3E!o}EU=!eTE<<~)Z;g;&!c_B7&FDSw`uYwg_6{)s3e!TTaVjKr-ym{X^lP+n -z7`y=F_@9?XaibVC%}SJ9`iZ{YlH?ptBqK&(ctk>y0hLNft@mdQL&lH_Kji^}(&Y#q -zd3(`E1`M-cQ=x#YA`qG$9mey6BY*@;R}h{)-lY25h?7`dI?NH5I%z^FU>%{R0~upv -z+K8Z+vBD#IDr}njD@ZL6j>m-^RWFRh8TC(1JXuQIH$!d-j1U$c -zXxGooFVcbVe1*(f^51#e73_SwINA-&>9k2N>1`s_kSd0Y<`1!*BnsL99=s8BcT-97 -z9Rv^j+5XP3gNj^0#5=7hbJD2$3Z`y>DuDc`3p!0xw0lEnRlcG6T7huPjP`h8P%eU1 -z<|fI9qO~iwgIh(3xo6^m`xxxqz9vs%qs%gh=u(MDr&?Uc(FAiz!FP*I496IWh*?iX -zB_xyugg(?;GKt8JX^R)5yv?<`_u#e$8Vf}d?HX8_3D{0n73NoF@`E{WKoO!aG-Z#QMdeqYA?)UGf`pMtQSICNs4FJK~F}$}{Ka -zmu5Ht8%UGU+k>W*?>3#-(!Xq^ -zxsqquzz#{T9bv>z&w(>?ywJ6?It|TKG+=)G0-e#fd~9IJh?P9Sm6TiM%;mo%#076iuhl!P-}T&$m! -zR_EmmL0(N(@A_prCVQveCN^NmU8}AA$euRq*7GTz>oBZ400@FF+f5KH>@)!2c;To1 -z$yJnl+t}~5UR7>}znSiq0Ot|d_!n_j7#?3=A}W^#f9&T2K7X^iWKixx&6_F$x26DA -z5s8{*TLzXEkFP04h(AIbxk2B&kO*5vo4#EE872C(xk@1zn%JmBl`Pk1F?Kk%MLOO_ -z3$ShaVWDV%Hcdc9Fc*P^b?HXga2ewwyo0)T&_B-yq=tkOMof-6tE6Kv&TP3W)~y -z7B5mz5Jgu+F&nzQYEHg%fs^9h=+yKwo*ea2he!Why8NlXylfp^Ro*?D{6%AHH -z6OIDNH7Kp&1`k6YknAWXVnVDA+ks0IUd}D&1$BSShCjIGHwHC*XM6NiWoE{dd -z61zo5m``}L7IINfjMPoxXF4kJ*vyD|+5w+KaqmMEvHcB_GTTwM%C*gi-2p1wevUoX -zQz_KUL5{hEk+)WHPkryiel%aS1E1P*p8QKVTxFjm%CWYd$>a<6bP00!>2rM51U(Ee -zExVmtMNf3)s3Pn4>YU|+&y9V%tWBzbX_euOmZ2vJ$x0~uPr^HU<%*tKKeq#b$#yp* -z#GAUpKYh^vpQA44cmxNNA(J1aoKp&jy_aLi2my`#A$iq)ib&GSi&^|ZNgFM!o4l#O9< -z?^Q8oBCiqrt*q2WmCxIz_~uiZ6NIx0<5Q1S@&E=(`2hB6MSr@Q2qJ|0>MhS^Q$Umm -zLC>NVGusy3j7ldpD?RK`e%-wREJbC!kbN8ocL*y|!yxTGw?R|9J6dUGXn;Lfo0qf2 -zQ_siFH8Tx!eUlX0;K0=Tl9kU(6dMWA2wIJN{ -zqws##t@Ve8ssToS!NgMKTc@EPH&lhJ)IKTY?P8eGgFi+fH_DpK`W_k+vw{g>XKvko -zVRd>_A*P|MXO|9S_PchVKm`n)cd5^|;qScK9)-~ji$1|OSwxs!%h)elWbl^rA$mK$ -z-Or`dJMeKkV+kKYf$Pf~vKuo%(T^?1OViJ4rPwH)38`h<~2sscY%a^|VEW7+f@u9Nn8#0`2*flcKsFA#B{oC%7u96PI( -zoF1Oymbpj*%iW#Ex}1}o05~+eteK8n_tPP-*}9mR*iW~7*;*7E%hCN+0kqlqnt4sy -zWcLAmLP4(yCQRP!U9-5kr`;k%Z?4l<9iPH7hD%*45Ywtv3Tn0T`0CoBC=%sTNZY0_ -z@%uP1nfk_YTfULUf!BMo$ -z9H=lb98`HDALZt2ob)lCi0@A@hn*yTbPnQb_COO|vc_$QjNv8i6%w#tlqM7>@RbZb -zKm7QXtaQFhvOTBMa$EKn%CNxq#m?Hj -zaO7JE_8$A%E}xmNI2*;*-^oE-amD%Z -zGq*kG7h#FF2`HR%%c&nIesqfa;pT=N%7N)~A*@#W0j${?W@qaS9Q-N@A(fwBCmd%7 -zkKGWX@#?SZO=qb1*+-VVi0MBu|3{-_sWZhZ@)0jO4?Nb_(Mf3aGFX8aG6 -zavH`kLca7m=GSv&ss?M&o<~cbDRs~BEiK1aw6tHnb(Q_0lct&H$w;KacbW%Z?}drK -zcgIQ?WP~c;BR4JA&nyPv(>L3$=B%hxv4}gXL0}|g2;g9N^StvD;0kh1Fliltj8WjC -z6LC9fOUxVYsP -zp{Wm};A&MtfXBN@C24wI|k!S=4HIq|3a5}Ql=WZ=7->BB4^wr4@X -zdsh$*-hy0nRcw23FLc2hbA8suT#|X8AbNmbs4{|E!9zg{ -zq%u)tlcu`xYd4OZIEzkRJO*>=bQS6ZSt`MAis17~>Y|Pm)R3&PyC#gWcnu$gS*zP~ -zw{(iYoYPxSZVi->&@6n7!eNK_E?#u|vUZr)I-W$r<9F6}C;3%qq`Ud%CU6V7uo9yW -z4V41cgcIAi_W@)YmG(aRom9e()4=|mdx)UsJ0oTHlBww>b9Jk*kN*+PnZ0y)ZJ!ZR -zJtDj$pAg{=rGZq{mkBdbGwXW-oNqPg26U6;GTbofW@C4`5EA*@k!9zUV1Vtd8NPJ}K`Z!ez^r-|XrL8bne5MPD^tlSAGG?lG6Dv-X&d0?z2q_EjQ$i< -zE-gY;yLHdzE*Uy1b!*0Ma~s0antqcIG$#)Cim*su>UB@z`Us6k%soFzK$&^Lr^!yX -z>g9u~x!1VKD-p|9MW+NQc8rlRLA}Gw$SU!Oh;KK`W=xe9F|GWQ&!}tX*ZnT7S(qA$ -zPwAJR=K)a5@_6@S?r{CN!#_$IGNN^dE%zi;f~Eoxs@c-VhZE!N#kuv?yK9yGC5Fw@ -zuFG&ZalFV}0Gjl6>JXNc`s(TN^8*M>MdVLf)G-CqV^r|jm+f(bVR -zWQKCJ&^&~jXt2|C449`sn*j6eE`!6gQ17U-oOkT4I2vCRgh}|97~}D&GgCvZX>~dR -z?B_Dt>0O{l4u|jh0dx=BIsqRC*vfTt&1WJi`$Z$Xc-ja(Z{T%tzL`r7!>B>4@;h!` -zx)a!Y>5EcP?{c#6y*b77dedHNtY->2lQJI@rPW+ht__B}$5D*0lptT=wM` -z9&-;eO>5+IsUks-4sTd{fbiFssk|CASU12vNf%>VwbJrg$y#6Vw`h+mW*2Cul^YCB -z19wKCdWA^7U@?LhJI3waqO#gwBgkks*|P3qQB@aHcPS5Hp;W(y7MVH93WUVOWaM$c -zI79VyR%G~|OPZM)U4eB}lhWvu!N;hn{Is$nf+7wOOWE>motYsWr6U1EyRr<#pb4u3 -z^5ykrKGg{&ena5JqwM||A{s|iyote!XB?#Tgh1XD5YA}_{D@Bzlc8X^mRAt=9zR?1 -zbYu^4RS%jYpysdUqLTx2-SUH~VrCFQB){LvaiAZer2EFNoU^%^!WZhUc=GTDNVi|( -z0^ePHt-Ls5lEi{Y3hk^Alr6>k+DC>w0Qx$Y6X<2?3$=L6-k9UTUL!b~ou4#vzi~tr -zxgpx~j)GN6l#c48vSWSah~`?WngCnEeDGaOqJ+Ob{vzrQA5eJ;df>397erT|^`cI$ -ztoyj_0wIl#iRrK1o_Ve{s`dIg63S5dEEm*;#f3A;mvHo?VBP@7pUY!6%!n9YZ~9s; -zM{srbbL{d7FmSMFVJw%x?CA6!RPEQ&o+GO6ET1KRIp{(@+M;BH9=Dye)XvH0)mFQ6^fym5nlSV_!k|ZVZUerGh%5KPUJ6|8ERexw7?$>IjLK}voQ3)lY8gHC2WX_$QpyK%ROmm7GeFb!kr``U0k)7w1ez7Q -zk9nx(&ziuToVeGU -zIW>(}>-`k9n>kpV(vkW3awzlQOM{#-1Z-_s3-P5&UdPmoj)?>cpB4C&PL>!ouoInG -zT%UXvuIoL;hBo1i;;|U%WgJ_;T?>jee2_8|yesPr!BC+g4p8gi>JB<@hgXuQg? -z)dxS+uz=sdiZq=q2{94ABiwHP#2QhTERh03a2t0iVJw%^Z1*Ebc5qYUw`NCC&LAzg -z_oj_G@$f`Qo0JUTO{EK=%Jm__EzPSyv9gTSnj$gh%1s9^{v&*_JHwl -zL*@Q~a$8CT-T%H9@x^TfK|(xnzPpPmSU8}O%erPM5#inEy&AhSDHGzUFRlRWvy6CZ -z3CvC|QGLD{uYxa>wLeO2^LV5uchxH#j-0CtqhjT0wpKW5S~i?!9WQ!a(A$}kZ|@X^ -zDDz~WDnmd5PqVZvyHsI(27rY!?DWvG>ay=zrpBhxU2pHKC}}vnxjOd< -zfWJHj&PuoLVN5=cU8NcB8F(eGKLc;j2S|vB?_J`V -zLS!|oX1KR(Tei%0>7jy{Sh&!JXaxx+RmMm0S8EccqR3TPA*IJVrRaQL#!1Pr2wU-q -zbbu3LzXA1OV~+saoH-OY#?eyU(y)Ekj6l;c2b&MUyiGZ9%0-<&$*IE2xrHI>(};>i -zYw^>6T+tXvEa(anxu*7e>*?@8AB-bCy94hhG^z6~EwzMPJr{WTn^PO$XDpj -za!Mk_IMS_ME5+8b*CwV5og3XUwK{@ezJOsx-P-2%++qA`L!J33JtL~X1a!dAEyFEt -zya+`9<+*39_9k>c`w9a -zq#*IO!NJE}HBwzt6IM8jPRXZ!C5B8(7_SZeLe&rZ7quZw`L|0kbvwUXUW}@3gOdjZ -zIrBbf&~2B=$e$7zoMs~{oyK)3gA+_m?Z;W6aWS`$Rg;mRG|x*-7!@KBHHvX$pjhjb -zo4}uaNk#kuaiEH#7>hehm8g`B5YXK9yrEWIqJEw^5u%)7hccH|KISdJ?pI|=Cl5!{ -zCVr*Kr^k6tEgNT#x+w}@NXwwVcAY?PT%S4%87i$w5RGQ%j#?cVmjUNA3fJYkwSjDH -z9mQu_$l_DdNqtk*NC6qBt_S8nt5+tALH9V?J2LMmRiv<02j@DZHs%nQ%7XR_gk!Dg -z4!p)%mozOi%KFqVlhYs)XDN}2)ZstUJaC9iUTO@kTycYXhs?Rf^8^uMZmf=-LCkJQ -z#mY%iJhuz-c?n#Y2CnV7O}%PGooWg6dK4I)F5qy(M@HVk%GEc=-z*-|eb{t`P#mmt -zgaHS^AiCFqzt2dSfm}|oi$1`B=^GiEa9NP|Y{}9_W`g5$=W_G7T9tU^vb#;}cIZ4X -zUN5C+c_Z;k{)ocq$=s15_@!iT)q2SYoLe!o1DLmqGl92E&klxNaG6Uwj0?MOl#%Ie -z2p~z2=B<%aX;8UFQnV<7-C|89iqmo^J4w$}b>oWmSZ4KCl>V7*h!yABb-MPhS~d?6 -zad#~BjVq?mBm{uWTY+vza&JHa#{{?Vll-mDnCK~pW&s^xg9m>b)EDQWa0K;75Hu-k -zdCOf-5-X#JWTB?aWExjoJ@U|FPeVeBMS4ylWS{qPpDL9t_q!K5dR8U-CT(0#2!bnQf)Z+Ex^#?d$_Efe(tpqts -z5#7zd9MTG7;A*SBo5hyyZR7f9j|Hw#GZc%4E5CL5)syHz7mRlwM!qi#f6sL)(phk^ -zAjPoi`LL$0xvMcWju`rbd0m#%p}Y0Ib-=P~w{rO_3tbo!oQwbLFHTphIIPFlkioI0 -z$qwsRdylNaT0olh)p_BLpPP!^_j`z%aTS509JSjZ7b;bB%wJn(W>g<#(~@S%_=zo(Mup@nUUGbcv9zwevGQ2A -zZ{jb%Nw?&~Cy_G91psa=tQ|``RJ%qlIALm;N!|A~-vPS_`svrN1ng=*(HHZHRma?^ -zZ?j=23bRYdR7%Cl9Yi@N!l?_NSXNMjT(u7|AhWMSX_mkm;8`fNl=&5t&4fOuR(TqT -zO=9>@ibjnB -z`225pGe}3m7lMbPX@9wAz(yASRF&=xB1aQK%dr=-3H=m)8)tPup%q9Q4Fd&|LGT(F -z_|V|^QU+Ec88zd~?KDP@AQ1X6xUi19N$#PAv2aH#n325`dG%dX?*V7gTEkE-9rB&9 -zAYA9;2ye7Iiu?+$4aYslSSTLY-DY=P=`Z -zy;CmNA~v{{ESaCBhFjR32A9JdhDAv=omD%T0+vPBsSs|+bo<4ogs(pKELMb2WiuJ- -zq55RdX2%NG@WwKK>Wn|MXsNY1KcluGnWC4)$`v+F=t#-wfm{AJwBpO+(BK;$G6%Jx -z;SyO?4!JxBa`)W5F|BW(HC+QvA!o`$q^mXwPJpUxFTNdFRdZRp0%e%3?aR^h)p3Bu -z>Tq)j_bZ_x*y2K+x51ICaLFIVb=O%Cm~pQ?-a^QXoo&cK-tdS>$2i7{iHPV)^v9@4 -z2qkn!iy-U~j><^TY>@SoN3Hi-UMfzVTqvfI$^|^msXjiTQi}N1Mw}cOrF-+$-%9z9O -z50nx32GsE1DC5*0C}Z7Dw#<(5)Mj7puY5svS?hWTOn$(#W -zHvdK$vrFg*_*L;KT*bPjvT5#P{t8vYOB9d#+u(KBlHK#2=)(@k>zicky@w&{V$XefAw#aQSlr& -z=Qqj-I=Xcbnxgs#%INrkGD7WPXzqNVjEW$j(nq_Df1r%eE?s_qql{tn|2xX)_b-$& -z?oX7_5Y&G7gyhg)%0reV~j{L;peJC}Y_lC}Z3R_41!6 -zBYx3eC?m*kl<{r?%CGzQf1-?cz3-ve=~?;C%*U}wU@;8sL*u1}&ud4btMvi0B?O9$ -zyd{I{5Gu`bDBN|)?6@7gl$xxk`(db>{axO?l?tJyDV_)n502d#mC9lRjWT8o3nokt -zPZdnbe!bVH?gV)+zfr~?NgpVql5Q;i2g*26@(0RD%>6HvG3ZZ}k=QwvlAVb5H_9ma -zFO*Tp{7;mT;)S|9GQO5BPl=0vnC?nP1DC1-6 -zA1I^6UnnEqzfnfOqZp;c2gCF-eOGYFn -z03Kx!;5Xx-LK-ft_O($xG8eI=&<<$&yOw*%iR(0e>F3Z*X4VVl%(PUQmve1Vn>#5N -z6drG_KR>VGU5MqR6-6XBi-{ANEiNSn?83Z1{)mJSg$j!FQvLpx$bpd4t#KMLcxqh{ -z<8w6hSrI7zy?p3kEhcVoDrYO=8~Z%TyiUbnPM;tIp;P$UMvwB7`!SFhP1;)0Y}9@vx61??Q;TF-2I^ -z!!oXD0NqUdO^ra}rVgB6<>t8=4^b(Ard_ITp9{A_Sce{u3Tz&L+QJ*d;W01J$NUYf -z@~7U|+p$UCw!54YsY6Y42+2Cu9Yk9lLN6ePOvKR%fs-=+*IIz)u-0k75#v5C;tk)x -z>C4@(FHG~?HHjcb%f@d;4yMXadkG#ih9z$ZSbHj&@YX+w?*<%yr0~4^8|m>|^lH3^ -z$_)1tuHLewwN#s6Z_Y8tvcEq^E}D_axxrr`1t0#Rv8