From 28019b8f30f56dd6a35b11e8eccf3ca70e2647e6 Mon Sep 17 00:00:00 2001 From: wswebcreation Date: Tue, 26 Dec 2023 10:14:08 +0100 Subject: [PATCH 1/9] feat: upgrade to RN 0.73 --- .buckconfig | 6 - .bundle/config | 2 + .editorconfig | 9 - .eslintrc.js | 2 +- .gitattributes | 3 - .gitignore | 26 +- .prettierrc.js | 4 +- .vscode/settings.json | 3 + .watchmanconfig | 2 +- Gemfile | 7 + Gemfile.lock | 101 + __tests__/App.test.tsx | 17 + android/app/_BUCK | 55 - android/app/build.gradle | 260 +- android/app/build_defs.bzl | 19 - android/app/src/debug/AndroidManifest.xml | 6 +- .../wdionativedemoapp/ReactNativeFlipper.java | 72 - android/app/src/main/AndroidManifest.xml | 43 +- .../java/com/wdiodemoapp/MainActivity.java | 39 - .../main/java/com/wdiodemoapp/MainActivity.kt | 37 + .../java/com/wdiodemoapp/MainApplication.java | 87 - .../java/com/wdiodemoapp/MainApplication.kt | 45 + .../java/com/wdiodemoapp/SplashActivity.java | 16 - .../res/drawable-hdpi/bootsplash_logo.png | Bin 0 -> 7417 bytes .../res/drawable-mdpi/bootsplash_logo.png | Bin 0 -> 4995 bytes .../res/drawable-xhdpi/bootsplash_logo.png | Bin 0 -> 10262 bytes .../res/drawable-xxhdpi/bootsplash_logo.png | Bin 0 -> 16138 bytes .../res/drawable-xxxhdpi/bootsplash_logo.png | Bin 0 -> 23552 bytes .../main/res/drawable/background_splash.xml | 12 - .../res/drawable/rn_edit_text_material.xml | 36 + .../app/src/main/res/layout/launch_screen.xml | 13 - .../src/main/res/mipmap-hdpi/webdriverio.png | Bin 23813 -> 0 bytes .../src/main/res/mipmap-xhdpi/webdriverio.png | Bin 32938 -> 0 bytes .../main/res/mipmap-xxhdpi/webdriverio.png | Bin 54755 -> 0 bytes .../main/res/mipmap-xxxhdpi/webdriverio.png | Bin 41928 -> 0 bytes android/app/src/main/res/values/colors.xml | 4 +- android/app/src/main/res/values/strings.xml | 2 +- android/app/src/main/res/values/styles.xml | 26 +- android/app/webdriverio.keystore | Bin 2270 -> 0 bytes android/build.gradle | 37 +- android/debug.keystore | Bin 2257 -> 0 bytes android/gradle.properties | 24 +- android/gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- android/gradlew | 282 +- android/gradlew.bat | 15 +- android/settings.gradle | 6 +- babel.config.js | 2 +- index.js | 4 + ios/.xcode.env | 11 + ios/Fonts/MaterialCommunityIcons.ttf | Bin 899432 -> 0 bytes ios/Podfile | 56 +- ios/Podfile.lock | 1606 +- .../xcshareddata/WorkspaceSettings.xcsettings | 8 - ios/wdioNativeDemoApp/AppDelegate.h | 8 - ios/wdioNativeDemoApp/AppDelegate.m | 72 - .../AppIcon.appiconset/Contents.json | 1 - .../webdriverio.imageset/webdriverio.png | Bin 14752 -> 0 bytes .../project.pbxproj | 312 +- .../xcschemes/wdiodemoapp.xcscheme} | 24 +- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 0 ios/wdiodemoapp/AppDelegate.h | 6 + ios/wdiodemoapp/AppDelegate.mm | 44 + ios/wdiodemoapp/BootSplash.storyboard | 36 + .../AppIcon.appiconset/1024.png | Bin .../AppIcon.appiconset/114.png | Bin .../AppIcon.appiconset/120.png | Bin .../AppIcon.appiconset/180.png | Bin .../Images.xcassets/AppIcon.appiconset/29.png | Bin .../Images.xcassets/AppIcon.appiconset/40.png | Bin .../Images.xcassets/AppIcon.appiconset/57.png | Bin .../Images.xcassets/AppIcon.appiconset/58.png | Bin .../Images.xcassets/AppIcon.appiconset/60.png | Bin .../Images.xcassets/AppIcon.appiconset/80.png | Bin .../Images.xcassets/AppIcon.appiconset/87.png | Bin .../AppIcon.appiconset/Contents.json | 80 + .../AppIcon1.appiconset/Contents.json | 53 + .../BootSplashLogo.imageset/Contents.json | 23 + .../bootsplash_logo.png | Bin 0 -> 4744 bytes .../bootsplash_logo@2x.png | Bin 0 -> 9211 bytes .../bootsplash_logo@3x.png | Bin 0 -> 14307 bytes .../Images.xcassets/Contents.json | 0 .../webdriverio.imageset/Contents.json | 0 .../webdriverio.imageset}/webdriverio.png | Bin .../webdriverio.imageset/webdriverio@2x.png | Bin .../webdriverio.imageset/webdriverio@3x.png | Bin .../Info.plist | 30 +- .../LaunchScreen.storyboard | 18 +- ios/{wdioNativeDemoApp => wdiodemoapp}/main.m | 3 +- .../Info.plist | 0 .../wdiodemoappTests.m} | 31 +- jest.config.js | 3 + metro.config.js | 20 +- package-lock.json | 14737 ++++++++++++++++ package.json | 100 +- react-native.config.js | 9 + src/App.tsx | 46 +- src/AppOld.tsx | 119 - src/app.json | 4 +- src/components/FormComponents-new.tsx | 273 + src/components/FormComponents.tsx | 22 +- src/components/LoginForm-new.tsx | 428 + src/components/LoginForm.tsx | 19 +- src/components/StatusBar.tsx | 7 +- src/config/Constants.ts | 20 +- src/screens/WebView.tsx | 1 + tsconfig.json | 62 +- yarn.lock | 8740 --------- 109 files changed, 17876 insertions(+), 10486 deletions(-) delete mode 100644 .buckconfig create mode 100644 .bundle/config delete mode 100644 .editorconfig delete mode 100644 .gitattributes create mode 100644 .vscode/settings.json create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 __tests__/App.test.tsx delete mode 100644 android/app/_BUCK delete mode 100644 android/app/build_defs.bzl delete mode 100644 android/app/src/debug/java/com/wdionativedemoapp/ReactNativeFlipper.java delete mode 100644 android/app/src/main/java/com/wdiodemoapp/MainActivity.java create mode 100644 android/app/src/main/java/com/wdiodemoapp/MainActivity.kt delete mode 100644 android/app/src/main/java/com/wdiodemoapp/MainApplication.java create mode 100644 android/app/src/main/java/com/wdiodemoapp/MainApplication.kt delete mode 100644 android/app/src/main/java/com/wdiodemoapp/SplashActivity.java create mode 100644 android/app/src/main/res/drawable-hdpi/bootsplash_logo.png create mode 100644 android/app/src/main/res/drawable-mdpi/bootsplash_logo.png create mode 100644 android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png create mode 100644 android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png create mode 100644 android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png delete mode 100644 android/app/src/main/res/drawable/background_splash.xml create mode 100644 android/app/src/main/res/drawable/rn_edit_text_material.xml delete mode 100644 android/app/src/main/res/layout/launch_screen.xml delete mode 100644 android/app/src/main/res/mipmap-hdpi/webdriverio.png delete mode 100644 android/app/src/main/res/mipmap-xhdpi/webdriverio.png delete mode 100644 android/app/src/main/res/mipmap-xxhdpi/webdriverio.png delete mode 100644 android/app/src/main/res/mipmap-xxxhdpi/webdriverio.png delete mode 100644 android/app/webdriverio.keystore delete mode 100644 android/debug.keystore create mode 100644 ios/.xcode.env delete mode 100644 ios/Fonts/MaterialCommunityIcons.ttf delete mode 100644 ios/wdioNativeDemoApp.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 ios/wdioNativeDemoApp/AppDelegate.h delete mode 100644 ios/wdioNativeDemoApp/AppDelegate.m delete mode 100644 ios/wdioNativeDemoApp/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 ios/wdioNativeDemoApp/Images.xcassets/webdriverio.imageset/webdriverio.png rename ios/{wdioNativeDemoApp.xcodeproj => wdiodemoapp.xcodeproj}/project.pbxproj (58%) rename ios/{wdioNativeDemoApp.xcodeproj/xcshareddata/xcschemes/wdioNativeDemoApp.xcscheme => wdiodemoapp.xcodeproj/xcshareddata/xcschemes/wdiodemoapp.xcscheme} (78%) rename ios/{wdioNativeDemoApp.xcworkspace => wdiodemoapp.xcworkspace}/contents.xcworkspacedata (77%) rename ios/{wdioNativeDemoApp.xcworkspace => wdiodemoapp.xcworkspace}/xcshareddata/IDEWorkspaceChecks.plist (100%) create mode 100644 ios/wdiodemoapp/AppDelegate.h create mode 100644 ios/wdiodemoapp/AppDelegate.mm create mode 100644 ios/wdiodemoapp/BootSplash.storyboard rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/AppIcon.appiconset/1024.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/AppIcon.appiconset/114.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/AppIcon.appiconset/120.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/AppIcon.appiconset/180.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/AppIcon.appiconset/29.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/AppIcon.appiconset/40.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/AppIcon.appiconset/57.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/AppIcon.appiconset/58.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/AppIcon.appiconset/60.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/AppIcon.appiconset/80.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/AppIcon.appiconset/87.png (100%) create mode 100644 ios/wdiodemoapp/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/wdiodemoapp/Images.xcassets/AppIcon1.appiconset/Contents.json create mode 100644 ios/wdiodemoapp/Images.xcassets/BootSplashLogo.imageset/Contents.json create mode 100644 ios/wdiodemoapp/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo.png create mode 100644 ios/wdiodemoapp/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@2x.png create mode 100644 ios/wdiodemoapp/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@3x.png rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/Contents.json (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/webdriverio.imageset/Contents.json (100%) rename {android/app/src/main/res/mipmap-mdpi => ios/wdiodemoapp/Images.xcassets/webdriverio.imageset}/webdriverio.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/webdriverio.imageset/webdriverio@2x.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Images.xcassets/webdriverio.imageset/webdriverio@3x.png (100%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/Info.plist (76%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/LaunchScreen.storyboard (78%) rename ios/{wdioNativeDemoApp => wdiodemoapp}/main.m (82%) rename ios/{wdioNativeDemoAppTests => wdiodemoappTests}/Info.plist (100%) rename ios/{wdioNativeDemoAppTests/wdioNativeDemoAppTests.m => wdiodemoappTests/wdiodemoappTests.m} (61%) create mode 100644 jest.config.js create mode 100644 package-lock.json create mode 100644 react-native.config.js delete mode 100644 src/AppOld.tsx create mode 100644 src/components/FormComponents-new.tsx create mode 100644 src/components/LoginForm-new.tsx delete mode 100644 yarn.lock diff --git a/.buckconfig b/.buckconfig deleted file mode 100644 index 934256c..0000000 --- a/.buckconfig +++ /dev/null @@ -1,6 +0,0 @@ - -[android] - target = Google Inc.:Google APIs:23 - -[maven_repositories] - central = https://repo1.maven.org/maven2 diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 0000000..848943b --- /dev/null +++ b/.bundle/config @@ -0,0 +1,2 @@ +BUNDLE_PATH: "vendor/bundle" +BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 921a6d0..0000000 --- a/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -indent_style = space -indent_size = 2 - -# Windows files -[*.bat] -end_of_line = crlf diff --git a/.eslintrc.js b/.eslintrc.js index 40c6dcd..187894b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,4 +1,4 @@ module.exports = { root: true, - extends: '@react-native-community', + extends: '@react-native', }; diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 45a3dcb..0000000 --- a/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -# Windows files should use crlf line endings -# https://help.github.com/articles/dealing-with-line-endings/ -*.bat text eol=crlf diff --git a/.gitignore b/.gitignore index 3220b44..0cab2ac 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ DerivedData *.hmap *.ipa *.xcuserstate +ios/.xcode.env.local # Android/IntelliJ # @@ -28,6 +29,10 @@ build/ .gradle local.properties *.iml +*.hprof +.cxx/ +*.keystore +!debug.keystore # node.js # @@ -35,10 +40,6 @@ node_modules/ npm-debug.log yarn-error.log -# BUCK -buck-out/ -\.buckd/ - # fastlane # # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the @@ -46,15 +47,20 @@ buck-out/ # For more information about the recommended setup visit: # https://docs.fastlane.tools/best-practices/source-control/ -*/fastlane/report.xml -*/fastlane/Preview.html -*/fastlane/screenshots +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output # Bundle artifact *.jsbundle -# CocoaPods +# Ruby / CocoaPods /ios/Pods/ +/vendor/bundle/ + +# Temporary files created by Metro to check the health of the file watcher +.metro-health-check* -# Extra -package-lock.json +# testing +/coverage diff --git a/.prettierrc.js b/.prettierrc.js index 84196d9..2b54074 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,7 +1,7 @@ module.exports = { + arrowParens: 'avoid', + bracketSameLine: true, bracketSpacing: false, - jsxBracketSameLine: true, singleQuote: true, trailingComma: 'all', - arrowParens: 'avoid', }; diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c5f3f6b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "interactive" +} \ No newline at end of file diff --git a/.watchmanconfig b/.watchmanconfig index 9e26dfe..0967ef4 100644 --- a/.watchmanconfig +++ b/.watchmanconfig @@ -1 +1 @@ -{} \ No newline at end of file +{} diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..6a7d5c7 --- /dev/null +++ b/Gemfile @@ -0,0 +1,7 @@ +source 'https://rubygems.org' + +# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version +ruby ">= 2.6.10" + +gem 'cocoapods', '~> 1.13' +gem 'activesupport', '>= 6.1.7.3', '< 7.1.0' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..42f028a --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,101 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.6) + rexml + activesupport (6.1.7.6) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + atomos (0.1.3) + claide (1.1.0) + cocoapods (1.14.3) + addressable (~> 2.8) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.14.3) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 2.1, < 3.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.8.0) + nap (~> 1.0) + ruby-macho (>= 2.3.0, < 3.0) + xcodeproj (>= 1.23.0, < 2.0) + cocoapods-core (1.14.3) + activesupport (>= 5.0, < 8) + addressable (~> 2.8) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix (~> 4.0) + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (2.1) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored2 (3.1.2) + concurrent-ruby (1.2.2) + escape (0.0.4) + ethon (0.16.0) + ffi (>= 1.15.0) + ffi (1.16.3) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + httpclient (2.8.3) + i18n (1.14.1) + concurrent-ruby (~> 1.0) + json (2.7.1) + minitest (5.20.0) + molinillo (0.8.0) + nanaimo (0.3.0) + nap (1.1.0) + netrc (0.11.0) + public_suffix (4.0.7) + rexml (3.2.6) + ruby-macho (2.5.1) + typhoeus (1.4.1) + ethon (>= 0.9.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + xcodeproj (1.23.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + rexml (~> 3.2.4) + zeitwerk (2.6.12) + +PLATFORMS + ruby + +DEPENDENCIES + activesupport (>= 6.1.7.3, < 7.1.0) + cocoapods (~> 1.13) + +RUBY VERSION + ruby 2.6.10p210 + +BUNDLED WITH + 1.17.2 diff --git a/__tests__/App.test.tsx b/__tests__/App.test.tsx new file mode 100644 index 0000000..fe831ed --- /dev/null +++ b/__tests__/App.test.tsx @@ -0,0 +1,17 @@ +/** + * @format + */ + +import 'react-native'; +import React from 'react'; +import App from '../src/App'; + +// Note: import explicitly to use the types shipped with jest. +import {it} from '@jest/globals'; + +// Note: test renderer must be required after react-native. +import renderer from 'react-test-renderer'; + +it('renders correctly', () => { + renderer.create(); +}); diff --git a/android/app/_BUCK b/android/app/_BUCK deleted file mode 100644 index c9d1670..0000000 --- a/android/app/_BUCK +++ /dev/null @@ -1,55 +0,0 @@ -# To learn about Buck see [Docs](https://buckbuild.com/). -# To run your application with Buck: -# - install Buck -# - `npm start` - to start the packager -# - `cd android` -# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` -# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck -# - `buck install -r android/app` - compile, install and run application -# - -load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") - -lib_deps = [] - -create_aar_targets(glob(["libs/*.aar"])) - -create_jar_targets(glob(["libs/*.jar"])) - -android_library( - name = "all-libs", - exported_deps = lib_deps, -) - -android_library( - name = "app-code", - srcs = glob([ - "src/main/java/**/*.java", - ]), - deps = [ - ":all-libs", - ":build_config", - ":res", - ], -) - -android_build_config( - name = "build_config", - package = "com.wdiodemoapp", -) - -android_resource( - name = "res", - package = "com.wdiodemoapp", - res = "src/main/res", -) - -android_binary( - name = "app", - keystore = "//android/keystores:debug", - manifest = "src/main/AndroidManifest.xml", - package_type = "debug", - deps = [ - ":app-code", - ], -) diff --git a/android/app/build.gradle b/android/app/build.gradle index 8cd932a..b3abed3 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,170 +1,88 @@ apply plugin: "com.android.application" - -import com.android.build.OutputFile - -/** - * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets - * and bundleReleaseJsAndAssets). - * These basically call `react-native bundle` with the correct arguments during the Android build - * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the - * bundle directly from the development server. Below you can see all the possible configurations - * and their defaults. If you decide to add a configuration block, make sure to add it before the - * `apply from: "../../node_modules/react-native/react.gradle"` line. - * - * project.ext.react = [ - * // the name of the generated asset file containing your JS bundle - * bundleAssetName: "index.android.bundle", - * - * // the entry file for bundle generation. If none specified and - * // "index.android.js" exists, it will be used. Otherwise "index.js" is - * // default. Can be overridden with ENTRY_FILE environment variable. - * entryFile: "index.android.js", - * - * // https://reactnative.dev/docs/performance#enable-the-ram-format - * bundleCommand: "ram-bundle", - * - * // whether to bundle JS and assets in debug mode - * bundleInDebug: false, - * - * // whether to bundle JS and assets in release mode - * bundleInRelease: true, - * - * // whether to bundle JS and assets in another build variant (if configured). - * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants - * // The configuration property can be in the following formats - * // 'bundleIn${productFlavor}${buildType}' - * // 'bundleIn${buildType}' - * // bundleInFreeDebug: true, - * // bundleInPaidRelease: true, - * // bundleInBeta: true, - * - * // whether to disable dev mode in custom build variants (by default only disabled in release) - * // for example: to disable dev mode in the staging build type (if configured) - * devDisabledInStaging: true, - * // The configuration property can be in the following formats - * // 'devDisabledIn${productFlavor}${buildType}' - * // 'devDisabledIn${buildType}' - * - * // the root of your project, i.e. where "package.json" lives - * root: "../../", - * - * // where to put the JS bundle asset in debug mode - * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", - * - * // where to put the JS bundle asset in release mode - * jsBundleDirRelease: "$buildDir/intermediates/assets/release", - * - * // where to put drawable resources / React Native assets, e.g. the ones you use via - * // require('./image.png')), in debug mode - * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", - * - * // where to put drawable resources / React Native assets, e.g. the ones you use via - * // require('./image.png')), in release mode - * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", - * - * // by default the gradle tasks are skipped if none of the JS files or assets change; this means - * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to - * // date; if you have any other folders that you want to ignore for performance reasons (gradle - * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ - * // for example, you might want to remove it from here. - * inputExcludes: ["android/**", "ios/**"], - * - * // override which node gets called and with what additional arguments - * nodeExecutableAndArgs: ["node"], - * - * // supply additional arguments to the packager - * extraPackagerArgs: [] - * ] - */ - -project.ext.react = [ - enableHermes: false, // clean and rebuild if changing -] - -apply from: "../../node_modules/react-native/react.gradle" - -// Add icons -// https://github.com/oblador/react-native-vector-icons#android -project.ext.vectoricons = [ - iconFontNames: [ 'MaterialCommunityIcons.ttf' ] // Name of the font files you want to copy -] - -apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" +apply plugin: "org.jetbrains.kotlin.android" +apply plugin: "com.facebook.react" /** - * Set this to true to create two separate APKs instead of one: - * - An APK that only works on ARM devices - * - An APK that only works on x86 devices - * The advantage is the size of the APK is reduced by about 4MB. - * Upload all the APKs to the Play Store and people will download - * the correct one based on the CPU architecture of their device. + * This is the configuration block to customize your React Native Android app. + * By default you don't need to apply any configuration, just uncomment the lines you need. */ -def enableSeparateBuildPerCPUArchitecture = false +react { + /* Folders */ + // The root of your project, i.e. where "package.json" lives. Default is '..' + // root = file("../") + // The folder where the react-native NPM package is. Default is ../node_modules/react-native + // reactNativeDir = file("../node_modules/react-native") + // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen + // codegenDir = file("../node_modules/@react-native/codegen") + // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js + // cliFile = file("../node_modules/react-native/cli.js") + + /* Variants */ + // The list of variants to that are debuggable. For those we're going to + // skip the bundling of the JS bundle and the assets. By default is just 'debug'. + // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. + // debuggableVariants = ["liteDebug", "prodDebug"] + + /* Bundling */ + // A list containing the node command and its flags. Default is just 'node'. + // nodeExecutableAndArgs = ["node"] + // + // The command to run when bundling. By default is 'bundle' + // bundleCommand = "ram-bundle" + // + // The path to the CLI configuration file. Default is empty. + // bundleConfig = file(../rn-cli.config.js) + // + // The name of the generated asset file containing your JS bundle + // bundleAssetName = "MyApplication.android.bundle" + // + // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' + // entryFile = file("../js/MyApplication.android.js") + // + // A list of extra flags to pass to the 'bundle' commands. + // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle + // extraPackagerArgs = [] + + /* Hermes Commands */ + // The hermes compiler command to run. By default it is 'hermesc' + // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // + // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" + // hermesFlags = ["-O", "-output-source-map"] +} /** - * Run Proguard to shrink the Java bytecode in release builds. + * Set this to true to Run Proguard on Release builds to minify the Java bytecode. */ def enableProguardInReleaseBuilds = false /** - * The preferred build flavor of JavaScriptCore. + * The preferred build flavor of JavaScriptCore (JSC) * * For example, to use the international variant, you can use: * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` * * The international variant includes ICU i18n library and necessary data * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that - * give correct results when using with locales other than en-US. Note that + * give correct results when using with locales other than en-US. Note that * this variant is about 6MiB larger per architecture than default. */ def jscFlavor = 'org.webkit:android-jsc:+' -/** - * Whether to enable the Hermes VM. - * - * This should be set on project.ext.react and mirrored here. If it is not set - * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode - * and the benefits of using Hermes will therefore be sharply reduced. - */ -def enableHermes = project.ext.react.get("enableHermes", false); - -/** - * Name of an debug/release build - */ -def appName = "Android-NativeDemoApp" - android { ndkVersion rootProject.ext.ndkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + compileSdk rootProject.ext.compileSdkVersion - compileSdkVersion rootProject.ext.compileSdkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - + namespace "com.wdiodemoapp" defaultConfig { applicationId "com.wdiodemoapp" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 40 - versionName "0.4.0" - } - splits { - abi { - reset() - enable enableSeparateBuildPerCPUArchitecture - universalApk false // If true, also generate a universal APK - include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" - } + versionCode 1 + versionName "1.0" } signingConfigs { - release { - storeFile file(MYAPP_RELEASE_STORE_FILE) - storePassword MYAPP_RELEASE_STORE_PASSWORD - keyAlias MYAPP_RELEASE_KEY_ALIAS - keyPassword MYAPP_RELEASE_KEY_PASSWORD - } debug { storeFile file('debug.keystore') storePassword 'android' @@ -182,70 +100,26 @@ android { signingConfig signingConfigs.debug minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - signingConfig signingConfigs.release - } - } - // Added to change the output name - applicationVariants.all { variant -> - variant.outputs.each { output -> - output.outputFileName = "${appName}-${variant.versionName}.apk" } } -// -// // applicationVariants are e.g. debug, release -// applicationVariants.all { variant -> -// variant.outputs.each { output -> -// // For each separate APK per architecture, set a unique version code as described here: -// // https://developer.android.com/studio/build/configure-apk-splits.html -// // Example: versionCode 40 will generate 1001 for armeabi-v7a, 1002 for x86, etc. -// def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] -// def abi = output.getFilter(OutputFile.ABI) -// if (abi != null) { // null for the universal-debug, universal-release variants -// output.versionCodeOverride = -// defaultConfig.versionCode * 1000 + versionCodes.get(abi) -// } -// -// } -// } } dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - //noinspection GradleDynamicVersion - implementation "com.facebook.react:react-native:+" // From node_modules - - implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" - - debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { - exclude group:'com.facebook.fbjni' - } - - debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { - exclude group:'com.facebook.flipper' - exclude group:'com.squareup.okhttp3', module:'okhttp' - } - - debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { - exclude group:'com.facebook.flipper' - } - - // For the splashscreen - implementation project(':react-native-splash-screen') + // The version of react-native is set by the React Native Gradle Plugin + implementation("com.facebook.react:react-android") + implementation("com.facebook.react:flipper-integration") - if (enableHermes) { - def hermesPath = "../../node_modules/hermes-engine/android/"; - debugImplementation files(hermesPath + "hermes-debug.aar") - releaseImplementation files(hermesPath + "hermes-release.aar") + if (hermesEnabled.toBoolean()) { + implementation("com.facebook.react:hermes-android") } else { implementation jscFlavor } } -// Run this once to be able to run the application with BUCK -// puts all compile dependencies into folder libs for BUCK to use -task copyDownloadableDepsToLibs(type: Copy) { - from configurations.compile - into 'libs' -} - apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) + +// For react-native-vector-icons +project.ext.vectoricons = [ + iconFontNames: [ 'MaterialIcons.ttf', 'MaterialCommunityIcons.ttf' ] +] +apply from: file("../../node_modules/react-native-vector-icons/fonts.gradle") \ No newline at end of file diff --git a/android/app/build_defs.bzl b/android/app/build_defs.bzl deleted file mode 100644 index fff270f..0000000 --- a/android/app/build_defs.bzl +++ /dev/null @@ -1,19 +0,0 @@ -"""Helper definitions to glob .aar and .jar targets""" - -def create_aar_targets(aarfiles): - for aarfile in aarfiles: - name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] - lib_deps.append(":" + name) - android_prebuilt_aar( - name = name, - aar = aarfile, - ) - -def create_jar_targets(jarfiles): - for jarfile in jarfiles: - name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] - lib_deps.append(":" + name) - prebuilt_jar( - name = name, - binary_jar = jarfile, - ) diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index b2f3ad9..eb98c01 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -2,12 +2,8 @@ - - - - + tools:ignore="GoogleAppIndexingWarning"/> diff --git a/android/app/src/debug/java/com/wdionativedemoapp/ReactNativeFlipper.java b/android/app/src/debug/java/com/wdionativedemoapp/ReactNativeFlipper.java deleted file mode 100644 index f3554a5..0000000 --- a/android/app/src/debug/java/com/wdionativedemoapp/ReactNativeFlipper.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - *

This source code is licensed under the MIT license found in the LICENSE file in the root - * directory of this source tree. - */ -package com.wdiodemoapp; - -import android.content.Context; -import com.facebook.flipper.android.AndroidFlipperClient; -import com.facebook.flipper.android.utils.FlipperUtils; -import com.facebook.flipper.core.FlipperClient; -import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; -import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin; -import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; -import com.facebook.flipper.plugins.inspector.DescriptorMapping; -import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; -import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; -import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; -import com.facebook.flipper.plugins.react.ReactFlipperPlugin; -import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.bridge.ReactContext; -import com.facebook.react.modules.network.NetworkingModule; -import okhttp3.OkHttpClient; - -public class ReactNativeFlipper { - public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { - if (FlipperUtils.shouldEnableFlipper(context)) { - final FlipperClient client = AndroidFlipperClient.getInstance(context); - - client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); - client.addPlugin(new ReactFlipperPlugin()); - client.addPlugin(new DatabasesFlipperPlugin(context)); - client.addPlugin(new SharedPreferencesFlipperPlugin(context)); - client.addPlugin(CrashReporterPlugin.getInstance()); - - NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); - NetworkingModule.setCustomClientBuilder( - new NetworkingModule.CustomClientBuilder() { - @Override - public void apply(OkHttpClient.Builder builder) { - builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); - } - }); - client.addPlugin(networkFlipperPlugin); - client.start(); - - // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized - // Hence we run if after all native modules have been initialized - ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); - if (reactContext == null) { - reactInstanceManager.addReactInstanceEventListener( - new ReactInstanceManager.ReactInstanceEventListener() { - @Override - public void onReactContextInitialized(ReactContext reactContext) { - reactInstanceManager.removeReactInstanceEventListener(this); - reactContext.runOnNativeModulesQueueThread( - new Runnable() { - @Override - public void run() { - client.addPlugin(new FrescoFlipperPlugin()); - } - }); - } - }); - } else { - client.addPlugin(new FrescoFlipperPlugin()); - } - } - } -} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a3759c3..885f326 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,19 +1,26 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/android/app/src/main/java/com/wdiodemoapp/MainActivity.java b/android/app/src/main/java/com/wdiodemoapp/MainActivity.java deleted file mode 100644 index 8f21bb8..0000000 --- a/android/app/src/main/java/com/wdiodemoapp/MainActivity.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.wdiodemoapp; - -// Needed for the splashscreen -import org.devio.rn.splashscreen.SplashScreen; -import android.os.Bundle; -import com.facebook.react.ReactActivity; - -// For dark theme -import android.content.res.Configuration; - -public class MainActivity extends ReactActivity { - - /** - * Needed for the splash screen - */ - @Override - protected void onCreate(Bundle savedInstanceState) { - SplashScreen.show(this, R.style.SplashStatusBarTheme); - super.onCreate(savedInstanceState); - } - - /** - * Needed for dark theme - */ - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - getReactInstanceManager().onConfigurationChanged(this, newConfig); - } - - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - @Override - protected String getMainComponentName() { - return "wdioDemoApp"; - } -} diff --git a/android/app/src/main/java/com/wdiodemoapp/MainActivity.kt b/android/app/src/main/java/com/wdiodemoapp/MainActivity.kt new file mode 100644 index 0000000..b0f5ed6 --- /dev/null +++ b/android/app/src/main/java/com/wdiodemoapp/MainActivity.kt @@ -0,0 +1,37 @@ +package com.wdiodemoapp + +import com.facebook.react.ReactActivity +import com.facebook.react.ReactActivityDelegate +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled +import com.facebook.react.defaults.DefaultReactActivityDelegate + +// for react-navigation +import android.os.Bundle; + +// for react-native-bootsplash +import com.zoontek.rnbootsplash.RNBootSplash; + +class MainActivity : ReactActivity() { + + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + override fun getMainComponentName(): String = "wdiodemoapp" + + /** + * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] + * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] + */ + override fun createReactActivityDelegate(): ReactActivityDelegate = + DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) + + /** + * https://reactnavigation.org/docs/getting-started/#installing-dependencies-into-a-bare-react-native-project + * https://github.com/zoontek/react-native-bootsplash?tab=readme-ov-file#android-1 + */ + override fun onCreate(savedInstanceState: Bundle?) { + RNBootSplash.init(this, R.style.BootTheme) // ⬅️ initialize the splash screen + super.onCreate(null) // super.onCreate(null) with react-native-screens + } +} diff --git a/android/app/src/main/java/com/wdiodemoapp/MainApplication.java b/android/app/src/main/java/com/wdiodemoapp/MainApplication.java deleted file mode 100644 index bd3717a..0000000 --- a/android/app/src/main/java/com/wdiodemoapp/MainApplication.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.wdiodemoapp; - -import android.app.Application; -import android.content.Context; -import com.facebook.react.PackageList; -import com.facebook.react.ReactApplication; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.soloader.SoLoader; -import java.lang.reflect.InvocationTargetException; -import java.util.List; -// Added for debugging webviews -// https://github.com/react-native-webview/react-native-webview/blob/master/docs/Debugging.md -import android.webkit.WebView; - -public class MainApplication extends Application implements ReactApplication { - - private final ReactNativeHost mReactNativeHost = - new ReactNativeHost(this) { - @Override - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - @Override - protected List getPackages() { - @SuppressWarnings("UnnecessaryLocalVariable") - List packages = new PackageList(this).getPackages(); - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); - return packages; - } - - @Override - protected String getJSMainModuleName() { - return "index"; - } - }; - - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } - - @Override - public void onCreate() { - super.onCreate(); - SoLoader.init(this, /* native exopackage */ false); - initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); - - // Added for debugging webviews - // https://github.com/react-native-webview/react-native-webview/blob/master/docs/Debugging.md - WebView.setWebContentsDebuggingEnabled(true); - } - - /** - * Loads Flipper in React Native templates. Call this in the onCreate method with something like - * initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); - * - * @param context - * @param reactInstanceManager - */ - private static void initializeFlipper( - Context context, ReactInstanceManager reactInstanceManager) { - if (BuildConfig.DEBUG) { - try { - /* - We use reflection here to pick up the class that initializes Flipper, - since Flipper library is not available in release mode - */ - Class aClass = Class.forName("com.wdiodemoapp.ReactNativeFlipper"); - aClass - .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class) - .invoke(null, context, reactInstanceManager); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } - } - } -} diff --git a/android/app/src/main/java/com/wdiodemoapp/MainApplication.kt b/android/app/src/main/java/com/wdiodemoapp/MainApplication.kt new file mode 100644 index 0000000..aaa6483 --- /dev/null +++ b/android/app/src/main/java/com/wdiodemoapp/MainApplication.kt @@ -0,0 +1,45 @@ +package com.wdiodemoapp + +import android.app.Application +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactHost +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost +import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.react.flipper.ReactNativeFlipper +import com.facebook.soloader.SoLoader + +class MainApplication : Application(), ReactApplication { + + override val reactNativeHost: ReactNativeHost = + object : DefaultReactNativeHost(this) { + override fun getPackages(): List { + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + return PackageList(this).packages + } + + override fun getJSMainModuleName(): String = "index" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + } + + override val reactHost: ReactHost + get() = getDefaultReactHost(this.applicationContext, reactNativeHost) + + override fun onCreate() { + super.onCreate() + SoLoader.init(this, false) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + load() + } + ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager) + } +} diff --git a/android/app/src/main/java/com/wdiodemoapp/SplashActivity.java b/android/app/src/main/java/com/wdiodemoapp/SplashActivity.java deleted file mode 100644 index 4e2b0b3..0000000 --- a/android/app/src/main/java/com/wdiodemoapp/SplashActivity.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.wdiodemoapp; - -import android.content.Intent; -import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; - -public class SplashActivity extends AppCompatActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - Intent intent = new Intent(this, MainActivity.class); - startActivity(intent); - finish(); - } -} diff --git a/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png b/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..34548fb6cb489f001864605d354fbb4614de91cc GIT binary patch literal 7417 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 DcK$iv literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png b/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9626aa2e47a21f39586dbe5660c7dd7ac971b737 GIT binary patch literal 4995 zcmbtX`9G9z)Skf%LfJ{ml8`;JWe=h3`;4tf)*&&3ETM!fC1l@|U1Q&~$JmlRTb9W( z_T8BAKGXMo|AKcu_uQXzU-xyLbDi_d{P0BR>uS(kV!H$afoQZe)eJ!(FemX#K?(wa zZdzHRKp;|(zP7Qtwv)$&5@^jFx(55-)v64-FaceFKo|a?bs`AKHU|Ow#RX^s23a!) z7IXtfwhkj-Gbi0JhxFS3w@?6Ig^>cZb#v%CafblfRe)>;#lk@A<`e+Xw8E3zbe2H2mrz|@d}^;b%6!J{woI@frKk&aNx&nFfRI3ZsLhV#!YFbx0!Bv?3Pn;1a%EPy2cW=Kp6 z0lX3I!JvDVfDo7!@d`lxjgdGgKnRQu@CM*paL5MH8!%5|uwy|)b}WdTT}$YJ6_EU2 z9vF1r5_)1yEVm7CEXdDnhyh@A*8;Lr2WbBkU_K!SdIW3( z5x|$O^h|1<0WnPoa2VcL3z%7f$3C z2=W7K=q6w4F7VVBybN`XKxFuH0*;InOoDqs@*Z3o7WK!5MGSIU!5Z?s)BZeu0D3)Y z$J3a)@)}uA{a2X-3i|T1@x9SI0e*zlfl2?DjQXlShTGiIw7HlaPAD&{Jd_x`DR*SJ z=xPDR_i_+ur+wbEK0r$=CFA0uB9cvo;?9{d?SztQgP{4^M7zAkIh}12A*>f>ng6*$ zoLTaAetUQ4OkE;@aDdvx;j=<{&L6jyOfDDxTG+5!JC0hry%RoywEuhDJB&YH{+1PN z)|PqptYYxIhV5iC-1d1x;GuW9FKItv;k>e{a}77Td*`Jv&@1J0O_(R}|6e73!PWkT zE+Ehq1uZodMEUCAtB;* zoGEpS^ma4RxCL*fBvyv_x=x{#fK+U9e|oa^vn^Ad29@k=3pO<^anB)(0nCH`8ND^X zK#rTw(vOZHyL~B0|Y+taDNMcl)+V7f;^H!;SGbfm)t_D91jE z`7SR#YVdi|8yBXfj}VMsz;}_YHr`X~>`3w|($V}bC)&a3rOx*!`j}HWod-Kj@Z>9R z%kjy6Ef8@}es2D19KYk;2HlQ?44R!jK5zu#b8)v6@1>kk=C}p+uhSU$oY6ZFeUgzi zr2aL7`#V+R!8~~itPP$R%s7Vk;X6?(K>>YwLz1GM*LRtUxViDKD;e&*h44IiGN*j8 z5^>G$`$G-2=>@JEXn$(lUDg~28Rjms=tnZSsHwPjSHWX6s-J>+cv{DVk!`D83`cHH zBzbJtGI>8SifB#CMoFqM#{~pMhc|TlQ4Y=gDDr{wEG#FXuZeEEH+`y_h`qHpcTFqY zh2V^c`MobNoXhne(|#-Pvawq@2)YsDZ?DJ$o|m84#H9Y3Z@Rian6zW95Phh^ zTk4w_xd-OKy7mfi01fn@n0A{AH5HXL*_w zcUBpp3hnrIt^s?S$FVHpAzX!p^V9yVb-E(tw2d> ze$mhy?T=;HuMi)S`pRnfv+4*D?KSN6zw`xZrvB9xDgE~v;~8>1s? zqP*VpZ99httQjF^FxWdiElzQ)61woqBuywaQvBDXsgh+1XItZP$DUApKYFhnXAv~m z^%h<#0EgBG>5k}RHESsDwZ zC!CJ6iWAhDu~#mis9Z6ir$r!_gu4;=v(sbr@is$qlip}Q`Igf&H@ z(w`7gW;eO&1vt1$I5E`h4j=8Oj4iCJrVJ5?dRxRdQ|~tT1P{7tP2WI#BY+IsK*o}% z+Mn9Y+0G!5T3-3;>C|SR)6`F$%NwUMnzR-8qFSmlG*AC@ewwvcRAXwc7GZ_GY6Blih;=AVkc@4#W?=YWyJy>aJUdZYgYu;f)uouF7Z+_ul_#$|}Ic$hVjecW2_tgN_No$Ke}qMRrRV@7QDR-_jA zcdF4Sx@L-aVj_HG_hTY*0vDrSW9RhDF0WR$j47mncaQ3#4}WdMmTSJJ60{sf>_vHJ zNbo7gx%DKnxe6aqi0%4ILY5~LM+~GlR@(?Bk~mT68xh6sBPk4=wnd|-_so0X+DPzJ z=Je{<<~mUabx$4^)~S>AkA0fVah^jJNY4Z-tdqrn5{Z0KO>o&3{@(FR(ray1G<>+* z;5AxQ;9&i82mOqX=EEH~17AoK3j&l56?G4sXn?Z+@((O}O$TH=+9T8OdUw2EWV8x!Kv- z`jn*9qLS)O0YQrkDZygjLkN!`?t1Ow%r>{asgrUm2y!4XN*mWp1*Kj!Rw+4jl-1pE z)wrIyHQPDqZ2fs72Yd<}{7xPiP^@qLC`MfgQ?M9UjV`Gqfb(;9COXHdD)f-F$ zYBbxlOtYe+gKvG^AKPyJ*b4Oz-(+3#I~LVs%|p~oxtfudhs%i$+tr3$P2tH*F` z)9ZqpVqAiL@aM0rlq;5V_f;l`qf4c(=KisC-r4_xNs+ZayxweT%cwx7xl>(dqu-%=|ZH6Cr*WWuGX}Tj%T=3rJ5?s zZ}8G_JLycP;;hK`euL?FvcZ9a5xEjUi>pIG!=DsZp6Q^ z5dqtp7UXh^hM4H9xhmuZ z^2lh!XA|KEwFX0SZ?*fwg8#U5ME1xx#36;bzjO^WOMt= zQYh6s0gq~4UT%K(2h($xf@+glYM0s5j0ZjBIbI%~<}ftbJDTsV4-X^21HymJl1eYz zN7f*In>J~lvYxH^Rwn+vIgn(Sk!~vfM{QoVyi6qqJ$u2;<;lv6jWoaGZ*S83m4@F% z-qk~<4wJIS3o9!wD`|c)(7&J9$1L>%RysCOR&8ukSbeAZNI85dqM?Cc-tbs&wk!4s zvO+o6aeqsEg&@gLA;iMb+)Aj@JKMWe4ARlA`RRCGddG0eQIhQ@?y@9Xba(dV8Qab9 zGXZHmd;3%1>>eL{RiY!tZg6X$!0&XWt6@?be!nXcJhHBe`_$4AZ^dwqt;|9l=Jv@> z;rogR3=U*8t3r+s+P;1YZcv7~9O^}0%1CUVQ(7pzJ61c6S$bI(wL+@NZ@s~UpV*}M z>E!j@I5ECVqq9Ol*V_dq<#2!qh$P#7V*cDjuyMlmv%(u;rOD!?yKE}$Ii~r^TPP(r z+47@Hw%}O0G<^}fTq;xkq6ly>CNMR?ny0>-^Pv+W- z4)8w8>Q@QHyw7B?iIW*+VqrPX>-lM^`nyQAv&2!}=O9t|K3&~iaD6_axiW0GynfN> z?QxdIaFibJ(6Q-L*CW4MX$U&+xu?u@AEYVuT3)zi?{jXSe%pRkk`e4BlaUnEHox}z z{HL4*{cOyPsfxteWi-cVrBKl!f6zsj|JZ(+A&p3k9NjRc6JFcV*s1)&b*tuJkzHo6NWz^{6#~LD3hxv^5@MS0WsgmX{KI@LAe^ zEOgVbwqOQN-*pyacjJ{9G66lya6q++^hs;XGjL}Q_S(2W@e+b!xc`5zpujsUnaI)w aC}vX2a54Mv4e)ji(o)w|E4%+VI>6pS4%q>)vP1oLRGDwKY|U2qd7|tGal=c-s&U7^47NK*0pMYY9RdLw8JYfJ?LqWEXH{4A}yj2?S+~ z1N49p=r>HjfN)Y12n5+Q0t2A|A<*tFO`v;5pj%@Q${4g}4%#rr0RXI;gSL&ZP$pP_ z4$2rZc!w4T4MYU60fCJF19^w=F7918<2$u2V<^f9vTgugH^Kot1L@z*nm~q(KwCz4 zwi|%l80bO&XJUlCWrTzJPYCn?RA6?;6bj7V0RuqZC55wL_+MyaoL$qqh=34d3IPHE zK2avX_>PKwv;VB_VBi4c++}SHSuubfn%~KR_8;>9W9cq&BY>Pc!~baltMI>EfF5wZ z2Lu8D{}=0j=Ko~}nbif~1^N#s0A~BYh1dob1qf#Z-7~%O4~zk2fU8~8JE*{5>kblR z&kVX}b~m+a3al3dSTev5puBAg{htXi`yT^$P7cffwg0hk*8?H$^o;>cfCQXf6Ue&Z zT~dG{pauX2`a69S=#D8s;GN{e5(-GpETI74{r|kJ1EKHef?QYuP@zZWkW&lDvDqEf z02K%3&?5`zsU;LJIkteFTLByb-k<Rm)<_V^Mf&iUR(b+WdlW<-eI`0hMrG1zX0xuMQ>eAJrE8KHu(Am3;XKo z63j6XIStw4x_a>K{<+TTIq9{;$vVlvF{jJ(%0s4os2ba4t*ZYS83NkeLbpq|7JFf%Td;T%}sYGvkWKZm&DQD*SyKz`s99+%gv7Mi}UP|vwwP%Ev73? zn2Pjs@A%8OChn!HlbWsQ7wdD7f^LaW ze!uG-D*0L9;{VdLL)Zy^n)>>pd8aEe+YYVrhe5ZZC_h%#^PBMQdyP8A9|Mx`o%0mm zUj1%y=*!n=wrbuj$9R6oMV*{}w9KveU~;8+|8o^j`QQ4N zbwACFvDss6iNNITdT85Wz3mjrizT&1kdkxHC-HrVo<+Xl`rmShV+oWri-=xI2%EG_ zD@i#HW~*;#IHy>YT~-RAA1GoV3jafa5);*^AZM2EUg1MXua*h)z1O!X&fQazH{Ls4=&mQ)UPl;b3#fX$BQcnWvgA8XVK@$3!wq#Bq; z#!5yvw@#VK;f~2}DI5(%9DdDEdI*bs|G^Iv)7K08juRz;@6_>Zh;#TgU~m0B@?L<0 z`!ozTo=N6r*Oep&@2P*5ZAQ;&SArC@+Vu#{T(kPlVhBZjNSS!HtuptClY(+e1l9gf zs~Yjg^dT(y&w6kWnX=|=YZE5JZm;KoSzDgiBXWjC&r`PqQS7E%roFP%z`~U_y&NQd zax%R;vI5#+lkU>_NI>33U9sBh9BMMPaZH4t6q$J2=HT3YJ#|}~IaKv-ux8vl_+=gu z`ChS?NU^N*ZC3x0_+^=gG3ILe73Oa}$|dZmuEN!0Szhx^lpuJa_{ouHBM6`NAp1P; zcZqa&UShn!$Ex>8)e-lr2@3KT>4@v`FWDRsEMil6;*z0pp^MkG;|fI_oDP3w5y>_{!~|C4#9s(Kk3pq^wG9+E77soLYozCfez{sbld9+l)*;<%2{K-p>+=B$ryaZ|9m42CMMcKfx1 z$@gE*Fg(3A*&a^hxxbAb?Ww~b`}3lS5g$Kkh~v>)Ra&DOSQR5Pn9g<9@y6+tQ*kP* zPovVGAbHU}Xi@?sN8_Kr;q)o4lfpN(N*PPGyyUD{4arCRSBA&DRAB6W$|xw7)?^R= zV%?>=N<4$V? z9xg}n=0}5^lI#P?<|=D%Ky>EuDo$pBLBiZTk6(&&oakyJ2Q(RYf=R!Ru{?gvEdp!J zcUqv$6L@HoQdA6zb?3(Lm`o)FaBh#nr)@;*ZfyqwewI+3^|B^35nOcLZWZ6N!W*QA+sb&d z^ml-hW4k}T`&Gr`0h#;s%pENhugSlsA-^qAZ93y6MLO__eCxU0tt1RvR<$$KKlwn{ z$qqlOI3fz(jk`2FcYgVC4ddT&q@hSaJ1$mc;>ZL?j0tzcZB)C@27-(mlTph{ZA^U$ zD-xy=-|~hBnW7nsRzzNKZa} zH)Kz_H7$ILV~~B1VhruyFFo|}C9f~lMlMq%csCapH=KEe;WRPgRepTsmp_ZP7UOTZ zMg}DKC4>#^qUv zVv&(EH2fl);+}hd^#)bGm}6s6Smw*YB)=~nES9#1MTz6P?AH7mlS%+tMe{hNjUH`} zD12t?GdFHsQ*=&K;gaw9wqX(VUql7lvo8%YP{Gu`RUoowJ1e z6-!ZN5{>5ytGI#25SeSa$M|S${#{6d+bAnY8AT$3N_kv}OeNY*p1VdacCD(UpU!k{ zG`+2%jQ!zG16fnKeKVXKf=$ot+S$S`hH8aQJ6AaqsW{*EzW4?GI*~rqyXmCig3+I9 zdwsB>zuQthFM8rvG(s13pG>9Q%sut$U%IGfyN-K3(nGJ}250kM2ir^{u~fcVkHTw= zX2Cm$4ubeXGIzX2=u=tmGm1i9R18k~6%pqExghwB@HLg`(K>caXIOd0Yc}UZ1g3pz zziJ%I>B%Doj?}2|GL6BU*)@dWIDKx{H$4=0d*~PfG30i5)$}1E?cv*Pf=NX3xV8x9 zVBR(0MSWMdR-~(CWg<7>!@P4H1Vy3O`{7;{4sV*LYO{JB?D#RJehodT4$jx}9gEGz zoP+WYjok^!+O92*=9PH|hd9s`hb}$z85?>XEbyPSh+gL*DX)LKm(g;V9YwU~Y+}n8 z$t?N0Svz<s+EGPY8Hp z)NeXLUn1cA0&^wNTjxqAoz%RT@@gZp-6WxagfNry>Zl5p_M7e zVAN9Zc8fuDR!lJ0w?ZqLIhNM62$G`DjXzM$ij$_ccD)l%kTiQJT;zB9Wd$ucgCxr%o5eOWllw#7Pc>@RX$BNAA`3DY|dsw&?Iz#eNC#wpSncw`_s8MBP`^ z;UO2p_ajRJt``}iNY;m+b=?@NisIlso&5T=xZ`Bz<7|naqWVHg*69oJ+a7;MWc1&7 z-P5JyGtYocH0`=~_Oo8Ak43o_w<4|jddO74SMxG1)vjzC8)!N(o!)@D%1VURJU-E= z6d&3M9ysWTdHsRr@Ki*_s^0aMh=de}3c8NrJ&(aJvr@d0s{UKX2*~`DV0f>2d+ummkcBcwe>*4P+V1ur4EKJhb)-5|t@OgFV+wwA3PP6ME;Z z6B~Y>3?FCB$`dkPCf7WYyLHH6GjzvuJodRcl9vakjC##qy#MOK~J8{?9yEe1!m1SpWQcbVp;xeLH@hyMC*^VibT*PJ#BC#w+K4>^( z25XXpTiQ*mYJcGy`;bV`LBYL6xj-)`8M%Jz^WM`G9ClvOE+5Xm@GS@#zwyoQsmos$ zbmRxp9cXti98H;y7VlmmEn}i|*-qLw{=@lNb`<(dcz;HJrktmoTD3(^%UtRl7r%4C z9$a*A#PB%P`R_My;OuQ1MEMPQS`0)&Sw+4|*1yLTeYQ%oQ#DDWbzZfLpM=cu zldwI0;atdLQQz z{X?a=g>kE&;urT>B3wb_g)Z;3eN@YZylHJ}0xo3;wT&S^wc90Yqa5^gT&^D=_-jI` zqCEP1-Q^BO;BT{6_*3$5;H`^F$E>>!$Zl~M1*YO<*wIOZNpJhKKvV3nfvr%R`s--+ z(3}koQtaQ%7JA4FpF zpiSOe#*6gTPLFk1=yQvcBbMxE4WGc|>}jS&Wu6Us4;vkZ-;*-6^S{kTLCNzV51UW@ z5aB*y7w^@&W}Bo1i{Uhsd0!>=Wy%dPR7%$Bv-QKGw#R+`vQbe%$c6-x{dg}>jxa>a zWEihRt36%Z^#}NLiXukV5c!dV%EkF)}M>UwsDnb7Z#+EO2_DsikTk z?|0%!11unx|j zjcZTW0Tym7-8LrZaJy_nWU*ew+hJB{D$9Lb_{cy5IPVzFb1TqOFQUBtZg+s+Yt>K@AE zx)`H$*CNb$fI#*#4JM{oQHW4a2qoqoM0 zOWzT$anfB{R1qWY{_?#z&q1ieKBtaRE)wVXKx@|9;-V*8{`ijirb3@6j|ufQey%`! zRhN9_2RW^d%}$!yp$)}doN;AkgGQ?caQKI0Jg%F#XQnf_1aqMN)^}?%dmWQZR3S~n z^EYD~oS4Rp;QP`gCBr18e}W+7y;jdTTfgDJ6L|0M-?+-F?z^E|DC;U!rl>T`Lj8sf zt11rm%VmP4Ff&-9NKn7leOCiNGQ%a~M}wY=jY6;8c>eM73}LgoVB5Vm^6W6n`X;OW z9v8Jf20Yg3u@xJ;K{}NJF#X4bq>}{y|4T_&x@L^w`p*I~gF{&UN$sR4E4*k`W&g zHtY1Xrg_>_6^Lvo=V(4MK3@E%lEF7@er&n+y7Sktg`~LGWLbJw@4u6bGF&*?-{!^I zJ-Q~gzHXteA8ip6No6Q;5sn0VbuMXpbq_j2NFO3tKu zek9+0#Oi|^vpj8Jcb7=tWx_fpiIpwFEbsj{6qn=Z&Yuy5zN)CiT^~zhDXRN8@<~a8 zHmb`X)9-QS@-(=*-fJZNcOa)rs{fvWoEd+$IEsX@g?y;%B9EDN>+lr9i*)Qe@og zQ4zAouFA`f#pbus$j&KOb2FUX;YCIV!`jjWTmHMC&jrwD+u1To)(TjW4PFL^Y=hA$ zxgmY;br`5(*Ug-tyw}cXdkEQQ0qff21gQz>=QHC0KS}&gjrNoMzn>eF9Y|1RGB)u& zF}aGrB}(kc+Rg5zAM!Y^W`SYmoQ?M#U->L2+xTQfBF-426_zCD+TaBEq|mOHI~7OH zL1k&&&*A2%8$4I>LA|uF`}i6pStlPl-JJAHX%gWdB^yqv5R*v|kyirotXG)=)2aA-qb&)BrwS9*8kg!zqFF{?ct@X` zcT&W2gC%2{DqSS=49sdoa`4M0*elxAk+N0vc|MwJ>%5gYW0s>8y7)31Eb z+u05O0Cs4a484Ef>r;$y4KzfP3z4sOPh`E1-i*1=bp5j%g~!tRGtr~4y3e^~@YnN?JLweQ0a7(fe4cKTVq+$cRQ(IuFU&skGm+Rlbwpb7yIDlho=~Lu;b3iq?xXr#8Lo3|$tS++U;q zCZoiL!^8fh?~*I zg}_HPi3{5-RrR^;1F_g$VXNb(f}=YU{N|v@oUgB>jn6c-KP#!1=oih0=dtsU&sEAl z++7izJe#T&7Lzzh(JY_b9JqO5Ci>~G#NyX2Sy7I3S)|81Wu7nkhDp`AZZcBTc846z z1hU>nAEr~IL)Ui0+1-&Td)pnwyYOt=Tig{0ybR7v->j7zIxy`RgUV?cM7t4A7C-GceymbNDM}`Ibb539)aX-pZ+C2rvgfqZ8_Ca~ z<7G|_#2sb*5cqzdxbeWm=$5>_=xAK|+>1*+|DDF1c3x6jQc1XMBdtCrf+c zFsvKBU`Zp7tYd_VfvZ~dDiNa6T8lHV*Gl6ta&kBRP2cg7$ft%k2XUrd)A1VG*`Ir_ zy2Ic-#?t|Kq#mQ!0j%Q;W|}N4HF@gp0i^i;B`fAMLopMxT|IHiBT;lQlrukU6nU+W$@%rYm9e5FIGJVX=_~j`n2e1s==9@*se)6*&%t&ZKhku5d5X#Hat$^kB;hjQu>CjKg;V9) zPPG}3cm=+G(}lnfPmQ!(>qwKbVbh}z8uQ5p*+hDfl8=6=xhKXfsPlC-im71d!!Q?W z2faQ}x7%=hLusvqk?_sFY8bm&l*Yu=BX53vFo(>XH@*3Qu|y9ATpjR2Zd&}ZKZZ!j zKDLM!bnj}X#b012aISQ2_p5$Q606Lz)7?DU z9H9}ElcPIrbFkg&ACRYWmwPmAD=5X9s_wKJH)QyW_EZ0Jq5Ev9yERiu?qU`ct5xeG8;mp-1zc=ZNa5IVHExSVz{ z7ESZYWjb5u>)FAVzn^SE6f4A}%+6h#`1~V)Qjh1!#B>uAk0H~O5|#cnetr`0u7}%q z)`=;Zb-#DMZF1e}r&%$*!f9UD`WdBrI?FG6R^!L{9J8`M#8mL^hHp&W{0)9Up5mLK zLfaroV*mDucbWVKT}!9ruiVxlzb&GK)y+T1QnPu#Z8z8IKX^lrU%n-_urmeQRc=(* zJc``H!H<8|#tcR;xCl&rF-%Q5){h*V^2~QYw#?y7EDcCUNVLp&Rv{key*?=2o-c3H zKUaC$d6;5;-uU3%W3MO&`JaC(Ir(Xq^xVuJ-%Dii@bo1R=&gAyzytGnH+#r0i~mk- zgY8OPGQ%{V(toXv~Kx$czk<<>56|d;ec-IwV3=~CsyUM_p-9; zz&7rE+qyw|bzq5!e2flM)`7c;VUKLu~=L@hMc zPYwHWm?nUNymH}&%A|2xtBPRW?sIC2CZ)+k_D!*n#X_@1n&1lwDIhqQk$M03r>rzu2 zkjvCR$5Ia2s%e@b<5ifPYe~sQ0bd3gBh7}eo}`7T@0~xSzv1Xm{_vMxypLLz+lIM! zK>REA1bf~XQOA3njD3A74-PEErce9|T`L#$e#PGI!LrV*Sm;)M_QA`>Cl}Ui|0XpcN_zR~nu*xl3u)`00Z!3H&C)jstLrUhXU7}r2tkAI`7LCaodcV@3Jy0mvy z200eMf*os7RSPL=5=-KB)tflRiKQ$i?mH!Nqh&lkJ zdSqe!h?hm#6dIx-$^tQ(cvo@D?98O3VOX7;BRu5&ihmVve2_A4pva185Sy4g;Gj-m_il11ZVYL16?L-X zNOMz^R(x5B3jJZH0cro;sR4~#Mp@kis1ap2XH8v&ZpZ~ldOb-I=wIY04$;_kwb>%9 zJ#Q;$%j~t-zhTRp9LwKed`6K>rl-GJG}|oad>vhZ*$^uqq;24^tMTxsXiVu?hv(bLl!C-B z(V!h}VcO^A*Xs8IyyIztc5;I11D<%%k|#AZ{Kb7X?78;w4_>xs{na z0>7|M8)+sbfSr@T<4#0%ljK2@VLcpGU2CYc8*=R5HF$7m z-IG__YqZZ_yJAjaxr{nAw}y@dslBRh>Wtz>mG`)K2=U<;O9v0925W}{cVV-lm2fJ7 z!e7Z^O(}yG{ra}HoRWZszw7dO8{g{HstG-_ZpiWBUmR75W+D6I-NuZTKj&>DUP2Wt z^ktn>KGJH@CE!-w>kX?9__Y_h3C!X6?A%_P880A zF{&TM76+#N1g3!^!9w95Xrpw%gqfkiG;lUG(RMW-X;D>$J8ICpm;(x{+F4L5+6l8`Uh1| zw5ZGflzeQV8jt)@07}*)=A+a8zl8t68tAA__@l2LIqajf1^tJtiG8Ajvx5@!NQix? zjY57b2PnrrwvU3A<4s7X^yv8uJsgxP_8zVKUsR8nAZ(QM|7qPLlmE0r z>43udpZzG?Pjs-h|5N@y&RD4aLoKW;eH;{k5`>yFD0~!r^k@_oYUoH4>s0sABDf~j z2@2;?1kR&Stw$Zsba75~ap2mIHlptDr9RHN9?p#c4r|3vKwQ?rFVGQ>v?jjBcci~w8_AQc@y&wT8`J5gAm{_{FzitwL zN`U^dk_0a?Co}RJ663pWHSrCr^xx33d;wfE>q@J^| zS*z;-nHFNK^mC7`$DH39!SS7i)pEO79?~Fu==QzIw&MDa=a)db+l#xayM=+|8#_a# zQ>=X8eP7Wz^$cP#nkr&cX)kUX@^@AFsJk+&`hN8E=V4>V zoX^|4)s*9mpZAiLt->f{pE-Qhaz-rxyN?yU)?3vY4ec$OjN~VEkJN)@PapN^`-hX! zr3QC9JK4|vPYik@(&pq*DFzs8 zEMI+%+Dc81UNXKm=l&9^NEe*nryQv@=~FjaEGV{^-gNF)G;jA_nTEpYnydqW-SI2R z#a>T>TJQy2T&sxq-rw+5GPkP5kzI#RkuB0QnLzKd*CwZ|WCRk8Db@B)i{cka|dhJefd& zv;njFc1p1w&vT&)O3cASmF(h*?IpNeuWi@|Ot|322+j}mN9PUw->WMr$1(?=ge%gK zYw>Gf$>!uDAT zwz*>Y-_LD4h6h{OBJRD*gMRW1{5+q1@vd(MFg-Q=RF4M+FwFY0Zv*--_oMXBhNh}V zZ|}1CNfY~_pd4nIL`J=~XNOfZfAr&Chwt3{>SD1h&bdNJMf-hSwX)E~?nDb9TF zk(@TYm(Bv%L6}6uri&D3p zA#1B2ELQO-l(pIe!h5%=sg~;0D}vI}KOU$s9K5b>+c@!Rku^o<-a317^vlNUGkw!= zZjhSYU$X~~=-Sa+eenbf^L)Ul$lv=u-;9W#mfW!U54aWc;!3%QvzZHM%-@p1Cqw%e zUU7gdxvDvESdSzm3O80)-<|}0a(iNRE2K#&fux=lLB%tiE#kZZIWy5`XMuGXXjpW) zP@Hc8Rx|1c$anT=7ey=-mpDEH9vafl*Rtn+bYr8q{yjr}?HmiWsA6Sbwrpi4Ok^fb z*1^vB8F%R|(dN_;Pv2d3PRM3JZ!C6v{g9xS)y;{ty3U|sr@9QjX_|tsCWDf2o+Q9YwV7IL+kebnJgiuEat=Yb@2V&U^b*`Aj|O zINSGbMez*>kn!hP%4~lh;eoFyNQg|@k6)ed#wj=|)Y4HMhS&-9O>4f3+y=N`h&_l4 z_tmc7DbPuh0RaM=OYEzuacp52qz(4eIvnEy7FDggS7mxK?W$X0p${pZrxBf}VJBY8 z-=Pcs%SP5;#NA=S&qGU4|I~i##g-hSDwZvnwHaKtTheu~~evKB~eqA|$ zQCA@C;W2YxR^|js5M#6T(y}`X3Q6!bnb=NmxJ;Y(TKuYu3BA~=7@BcQVe=M_@VZ4_ zu8Ct1(jU@#Ek6lSW+saK6yEGUrl-*EqP1T~IygfuNJ1OCuT5{DIg{XoKABrDT>0fv zM19@LzPzBG6;C^d9vEK=986f@GM3-)Zz!$b+k1Gi_9Qoah~WJ+*3fTKYUj*50o`|; z`jF`_ZkjWtPUv#cq=Fsaxzs<*p0UP?8z4zom)MDk>33W1d7Wo@jExX=$`Au0qs7{yCqNW9BSJxT9BE^=d1=ZZ&rE=1A{ zyR?9>V^Z?^>I+gl^tWAWfvvVWEYCDMWC?zJq{|Gy{H~=(rV=l@_zQ2evCX^t6Tw41 z#Pq12(CJN|qLxi#PT-sQD9I&h77D3zue-@z+HB6Tt@-9X96@zUL|=4nt8)50Bp{bZlM^fq~IOMTFfzCI(KWT(HREC zui9O|3N!0YWiL6{m2{qF5zM9u{EON1G{r*n5OTH^qa2i{TGUg-8qb9z zvKK{tP$1jJ&hB#rqw;0Jo%50@i+vFHr-@@0XM3nrpZ~U6>gacN#C0mxyNTj+sRd^7m1X8y65pPIz;UY3hswAN^ksTr%jRQq)oV@)bLB2 zr(AJhQ%xuA<4!gCOKQ_!mk9~DLA9$TZ zqbpETYLnu4`K$gu$JhC#8`MSXApm?HI7+}qiK{-ka`N$H_jn=^{r(5Ka|(^V{1c+c zPyih%nf_6+kl~0wvgTt|ZS{5VJvUh7JSoDf#g-|>V7S6$|IfR?BV0xu;Z^b~Ff=nu z2e5aM+8{bUeS+?s7qW1Q7ThBR;RMZ#Nu8*ZaEzPWO$*z$nLaG0!4&Ik+or*5qVaXS zAGnak!ZvNTG_K~2?pk%Lr-aP~;S=+U?J;_X$c_)2AISW_^eE>IA4r)gI_2O0BCgE+ z7a|@i;4GMy4Z+-}c> z*Wy-vWDzNR6cqGOZ7N?(e+XM-kO&5Z%8L-0MLN@rc@$||v2-=;kJkF~tMg7d zSedtIIMy=SCqt965k#VN@gwh&vGjTlW&N(8PVwAUvc;+O?cTZgUBMQr6DE3ZcUr6I z^UR{;XVmiS_rLA4^WHFiY{?nuTP3}PD3Q=LZnXsO7R&pML+*5+kWy!djpy#;USp5q z&ua%BWer?$L%+CDd!~A_^9Ux_Tn(HivdrFjDOM+Qnoq>7&j40&DK`n@v6Imxg3C^{ z{7P`H@5G!@TUUWGdRUAQ__EHJm%P%rf?fYY?KFr{7R2D{l#(a0a;FkG=P-C@bdbuR z{gF72f>-R1uNC*q$DD7w+L7Pp-z5j57x6A@ritXZT+@zyjk6IN-+!``L%%SK!K2*x zwLUTfc^3)2=+xn7qj+^M|Is+}H5VL)8T4+km%X)lVxU+YwLFwQxxZY>?tfo=B{+#HM4RWDXvSVrFr|_aw;`2U0Y)noZd= zV%^wk5H`Y}<;QP!1)aQw(>uq0!>Y{f{CpNUTjU;C(ui5Ct2962shAGslF^cAPb|$Y zPD)EknDwc%AY0u?MEGUZTSy@dCCOQ`vr)hP)f-W_sbP{>6rO81RV2M~2kkWbRtwY; zS;sHP_V}s4fw)3Mr5P(TG4W%QzlCaW8urgv$&>{GWy`kCQm^W!beW5?#k#8`d3dbC zs|kvZ7R;*e|3n#zM%b0+*d;N75`?iu7ZOR2(k5M-RW2>R2xC5uiz729h7}p?bRm7G|A)V=u^)`>rVJbvk@ZzsGD=6EJwdi*l40GkUS%zeh*h z*&Jwihb<`^fzG59%7g+3?N`=NoG#gXRb3C0)kFPm&QZgL^c7dWi`>C2knrSnKjXpM{bo4u=?lem{3eZ@l?Y>mDz-XD$OTF*o|9K!fGTey_`df`I2 ziOejGy{saNT=tGPC6G3*N@=6kMbSowtI}sfA~~(9YFqp4K5b4-?%4IqJX5e(%OVm? zH%}@Yc-57E+B=F7?i{?^)6}&tJNJid{*m%)?Z|dSR(?NA%4eCwt@eF>d}1K)#FQkP zrYNpvF?UgB3722j(dWhG@CMt2-BgnAH`0&-eW9201(LsfW>&PU$nU#wh&ar#49Jpv zrp0|^y~v!Gw^JE|y`*CY3$|Ly>9H9P*&7Tf)!StWENDakfAt!~&NnnUm1$2+&p!8tf$kBmTx}GC%1`!4 z6c&`YNw)hIt5cannRrr3S#KVOLG62(K)s+_<*ho9*|P>`}M2$uw!duDaLz*68PrmfkbehCgkCK+5UEB z?5)HFIm_3LM#(RIb7We99@Xg0qYc`P5YKRW8NF6=F z+|CmN?}H}sa1&pTtJ*PKV<|o`V!?X#UVE$bNniyP($AF@Y@;!CdHdP8~esLpEW0o2hyVCvDfI{d^Vp_t!SQoVuYl&(HY26R~)S z~SP%qhO8Y>iQMS{1sOl6|0}qJSBbGZ0(w0!P@S zdQ#QfC1X3>y-98nA36c%Q=Ag|C$^vfkW42VBG@JjckY^(_o;y>@aCX)12oB`TYVBI z|NMh!L;{CKlu*8GPej6^_{sKOYH|NPT)A80T6#8pni-ZZ$7VDwR_jYFu zbZu$UOhm47u@`mOi6t*R!1idwU+We6|P_snCjD$!R%k|B}ox#h?ekGt~x{b2wyK zaoMa9IYWfY35;4cRbtq@hn3CK?Cq`>{Z`ICN zhJ8xNw-sNNFLw^X?{eg~cQ4GH@1F1ddUuN{tJr(>Sta=H+@K?b3KO zK^POMFV)j9W~a4Cq(9;{jM-Qc{JaH!1~M)EhOE5RuHZWCTt!4$m#CUZuLrCdq@ECD zDi+2}&p?vuh1`DXlNjsurNM2Lg?xpDS@>j=MbwrA&9}SHiBv#%NsVv$5z~Kpy@OMU z8dny_;Dfg^HgW1n^;`xYUJvPV@5vUIKJZN<>gNpZgYlLr)G`~te|;VmJ{WTnJl$`i zAiDPx5PM3Rn9=?4>mkC^$EPbtU4Xnn-!bjV1F(7q>AuS!+s^BhKaE3DTyK%ywG4Y|Y98<41r! zZ85{f^GitiO5zH`Dcti^atOwJ5mBA&Hx@5^pLZ__akaf>9Qyr7)ah);&6u3XRU#h# z>sqFjU>nn{@7G5eOz5fj+ET?IO29suxwvNV(p`$f=q{K!>-$EkuZ}Fl&iTxlOn&tA9V&L9Zjt^f6VQ>BJL)o5Z`^ay%A}&`oftzU2YZmDqABgAV9W^1z zOBLw}lhc5uCF<>4?Id=P@4xKqP`mzX;M9DmYF@9a3_-mnJl3~$3W-BYp0 zVDvh(2t%9w!#1vi2*IBlznhE~Fl-!J+J-l~T`%Z6d{a*M&uYb%k1w?xX@;2e&{bOtoIgV-Df66#r-7Hc$z4plPf^Sog|?o;z;z! zBU1PGCf3lMrzyH{oPkMqjX^6RpZIINgLPHfd@Xf#b(7?oa;zra<&d4!l}+V<#?U-; z=LD*J)Ze!Xb0Tz!d;G+AU0lvFX~OPC4CrTD6-%P!y0=^X^L!dBT(Qjnh%G^esL3V^ z0trtDdN?zD-(Vi(Pt`2Nbv~I1)SjRHE#qlt{vt1PDe)Z}`JPU@OGAyROgo^I-te$9 zsET)CApY_;Jil+4$lhrbd8s!$!a`xByp8ODG~3Y_1bK@Xny0RWdT!UkcpJ*;4Wpfm zgR$`N*$rV?-xXQhMTBK$h)?yusthSq^Ym-ioaeLSwAPn)lSdZ~W6FeBu^W=bW0l@z zil9qi;%Tl&I?aTkPBa#^4`7K$1gz<-_sPp*H-=+8m``rm+urLe-1jYz#B!icX}3e3 zYOawsy#HIVTSmg=V&4aWYs9?jPP;1^<3|YX=z9%-F5enjXe){vrr*V%0j~ZXc{`^2 zAXC%yHKfNkRXgt?q0JO}B%j;Ic+&jZ_$E?Z}N$-h=>q0OsiW8-}{HG^K-HVKMzj3U2b`EdvfAY*^jhFzR_ zR+$Q7a{03CBCJ;7Sz{=Z^N%WRH_2)-e@_mcJpT__@3?wT>t_~PH2pYoeimHiRBsIs zgGKoai_?>fDYZ-Do=bao@5VZ9^cGbGgqiUq`FlE%x~Li8r3jm74*tmVkAL!2u4v(C1$;dK3M{uR{swjawe7RXUD3rJvd2GpYPQX z*QDZ@lsbO&Z4#0G1h9wqu}1U>qM^5yL&Y*9-KmT zf<*IOh6_F78W=}?NR(rm`(bwVG4PA`*cI^^pqz-%o;Mr}SBcfQgT7Y_13H!NTX5pA z_s=vlUQq}gE&{>}OdhHSw@>~q37UCa4*mU6)W~{*05zx6gV)ys&8p7$bvds$DDWcr z4XGdUi4@VJ6hn6Uvj1(@E{8y5?71%~oRi$!CP6h$ zO5e&%YIzs7FW}D!+Sb9dY<_P&q=N$W$+te{;3vLpRyEU_Y?0lSONn{^@ca#jsN9d$$0lhmucDt~Tup{Vxl&_L^HPu3WoP z-N}z#BZljxG1Bz(D;C`m6T4_Rn;$5qO(DID+^0({+4~g9g zC4cSQ9=En?s`$QzUPg*L_bB7wuVS|OELB^aH|_wh&0*KDzR>Qa;wX5{%#!3*=7v0Y zNn}YL;pOedxk~PO2E1?j+ng>;8`b+twX_*Pt0&1*?7t07eW(>N&^Dco1&?qf-B23H zQzp1b8wURj)ACq9Ia*HGEbRd6rWYS;;VA(0i5Ct}y>#mia1T#C^qSzk-$1J+td~-g zPZOE0YHS>fJESjo9vVN-*ga?7wsMm6F%P|a=LX;W4Tf-w-{w_z zs@PI@(u3U71l6&Oa7u-L6LTp0cVP1F@xf)$W(^dIU(C*aHM~NnB#PXXc!G;*cI@zA zN%^I3`-sFgY8X@#-is;0BFe2bZ8BQj_8hshJMJ^tY;88w_-l7`-XV-pWxih8A}5t{ z@?H%Cv0N-uk`;AtvQ7qKZ$dalr}SbImu9GbPAL&W>wMvR9MmOTD>7z%|0A4A1|yhJ zCB-k-d?TC_A@wak*Xv6u{|rrq0$3~MLwD=*0&$O)NjlqJ^@&fcM!U2u$kF-v;_4ZG zYIKPl!bImr+5NGGDrUcVRda}~BD~gUhI>@E$#b9vj3q*n02MNh=+NTI+M`qFl3n5N z5{RD!lIKg)JxfF=w`#c{XRCzW6oU9KeK<0>2{fYz8%u!k_?pv+Pb4-86K5y;SKTgh z!#BzF?VWZunRFS$A+!5c6_n!e^rH%$5Lv~)x!4jp&k|?73$GmXuhpm&^$(Yv6$fSA zcydlq(JGjF)z`f#l2k_2^)oE^?OAI6+~fLoQ%Znw*+pwuIQo=aIq-k4O3F=>XlSqN zA9Dfz&$0jCYf5zQ;?h$2@Vmbq_MmMu0rmM}$ zv?pwOema454+~0|?_ovWHZaMyf?|J9XW<0)lIn?VSD{E3A{8bV%T-umZ;C-H>fjHS zc55Tk#wmt+|DWA<1Nr3dz2KfYOzM}^TFX6db81?gH#Cia>{-fN)8|g2>0cxMg*2e? zvMJyQD(OBO7@$v5g50fCkXQbikNFm7kvCYWGxJ7SgnGMuV}C&|1F!6yDcC5t=4FzQ zrMvV_fwT88j1d*VOUMCMz!^#k;Z1Nunf8rVdAJ&date>uepp$cMvtiyk?+S1e?9$~ z0L#;hX(b$Aq72(x+SauI+>kKGW=Azw*m3vbc!u_RD0}5;+DVwbi><$QT9ujxbD2U$ z{$OujudT)v<9bFnO~JFN=L(IALlquwo?&+g4S}?O1DN@Hr&qGhknJPKTR86~!K*iv zwqgxi9-ZpIwrzCpn&s_}i230~GwMIjKc}P1% z!&b-&jT%L&C;3~dD7gjgFHK`Kq}uV4OjZxT4g)t3ZoJy*P!$9C&m|%+X%=CFyk+2O zE4ANlC*PUs&LRmRtuQ5vnLqejS?;z@$~0QVbl2`StJytUT)q2BNlp-sCp`dmvAo^JWGDW3f_THRk#hO%>nnh*BD2;5Qppl$VJ6 zkBlORz0=#EBw1c<(uX>GOFLq0`Ph56_y~pkTk$=&*XE6AtAUJi5e(^47eCOY*SgS&(ytKQes5JGFrJ^~?fA4MiRZXXGNA7@wefGCKbqvLK?-I3^ z_aYM>=6Nbk{Z0F@!R0snL9=>S#6n?(z~bG_Z->)Zy1g25P5;p4Vju8d)gO|1FYd)m zi`cBJx$Gb}&Ju7C!78WYGpTy%FUo zg(oORUkf+MBNW+@JHYe}1@>NkBfVKY$8Iv9H)~1wr(bSPDk{_XiL)st726;1YGq=j zsO@>t)dDhPHq0y4waj$X6o*2J^0LOaJ_`%TZ21a1*lD$w^#h{fJi^6Y#ib%XIC@PnONbGImaA3atCV3G9XznL>O*E7J8*4M5=HngDxq=?XVO}ZGP&$% zhlPHJ(HLY_bx+RnSt}?c-d@h-y1xVa(8}cIkR@qJk-So)SeM8NbgvK~hk8vNr~dSp|c9#+FGKNQSuI%A?_qO-0d)eMvFRw*HHX~D=f*UYy zb)zmg>%zd`_rlpz7fS5%Lgm(lf{(u~Vp}%+0kwX9(35vxX^a5|Iie4Gx>gaF>L=)N z$$(YNg;C^WXXIJGGk7AK?&Zj$Jo(dPUTfd^`u&0B9$q<)Rk|1xVSjay3l)mABM8Y3}Xt&5LJEFUt}eQ-L| zxv)ZUE=$KS>zdVSgCEYdGH!hhn?9C8|Q%0)IROJSiE zhMX&?FZLqh+pvOvzKIs? zs3;YcqZn{tnB`2mUgY&NomLDbq@ejoQZdXa-c(egUHKN3kP@&)GBIG8&o|dST5eyr zbpmP>)pyuZvy6YIQ@T_U9H###V)xV+kPPVZgIKqj7bd%j7$yUb5*KO6_iaF0Q{u2W zE_1AV0R^hcu@SJlB)p}3upz{NO`JBv-Fn+-%w%_8T9gDMU-mNO8v4c(@@~*6BEi=7 z+~?K4>hmjb*BEtX9uidhYlO?+(3gA;@l;sBJbwlJLpMlYF`*K|@4lF?+?%-wTJ z0NCirIqf$^qM9eU%eAo$;UAl>ZQk#9guP#bdCs<%E#hpR931eGDUGGQyNh7mr^N_f zfY3UB{_ZR%3vjJJ74G}-N@0>=|H~x5G-F@3MEcj1=W=67k~jyms}2U z?Ix3Umx0?MT&(yV3pM^yi-C5(u-Vq=y`+9orN%O`K64}A#}WLc^&_sz?pK3(iS{)f zmlp;t$b)Hy>QTk8G4@tpR2+Q3Kq%$@7C!GJ1=(mC9uDiAEWJ4B6>Yl;8>q_68@NIC zhkO$c8`Nc{ICUOuR8ch@kNr+qAFjbg137IT6@LG^62xl#7Inwewu`e;ZGi>q^w_>_c+l#UNu6HSZx$V``a0q@C3Ggy3 zDo!A%ru1FF_dK54Z4aD0+~d8iTNm?oIWFn#E);m0!6-i5+AM#GHBL=EC$kS4eYAfW&otmRzBtlvQ$oTdkbW@sB~!lEAe1sm)T8zu%E9L^%2F}5$V0ZiRvYyDZIj*RcJ>`7XH~U7zg^d_`0?PH$}F+UbyWEG4Rd`-UvB1ox=A0+=}Id| zH4oUvTJSz6b-#M#Mc4ID(bB3G?#C=WYfq1kt=;3Bioi?yq_^|zYzCgUat0BsC)e7c zHKX_sY;uQS&ipq%ma9X|e#ZSn(G)#n&Ia)H8p8^=wkmfP+ioSLzlK38cE{7B=8Z8i zLhjA`$!AkPPsQ25MxJ4SUH)%-rK5)&dL%QSJx@pbNqr;P%_I8ecEVd<@p_;AjVHEW z*uz_!8&A&y&?PK()uS>_>x#Itd!rjzBoF9{+=HU(UQnFf9^FXa>@4$Z-24)5{*8_diz8&hejha8{ z9N)WakPf#oz^qf0E<%TPLkux{+cFi)=sS1Qdh4s$L#R&4aF<>}=lKw?9Y~RtOssY9eY?4`)05H-2n4oOGbG zLD<~IO>U(V-b{w4zhBDpdUE+tK*PjBZhyRhUc#=wNqBPFxQU`+bFD3#MAmd`^)qnF zuYwX#e{JVN84e)Z7S*+hI-G0R-hWcz0v#m9p|h2&0(~JEavt$-m^VgjTz+O#lS;Go zY7`oLZjf%_$E{>iIe3T)%P|h8<1OTGa~ot#DW*DuUFOfe7=gRDPv{{hUO5kinOo-L z;Iu|3_TOu+gDu6q^M4X%@8P>+QZy>&KBhOUlLWeL^UAlm1KwF{W!VZAwx;^bUdi(M zFOZCG5GLhKb<2w{Do|}E!_9(gs3PfnhV>VBi9M$iHtTendT66}D%&svIL5W-_;b@+ zruv`tTNxyANXtXSX4#EtlmSG|W;+c$oLF^1(dZ+(Q+7DYPW@68tunrunAL{SYv%M= z!d$Q`lpXO@$%GcKRw33r@Y1g!!s2c^9G>{rx$}FJTnXCO{%F^{>+tlqg2+D^qrwH>JX-Q#;QKZHu^InrjN|n>IVLp<{HfJ!Y2Y|VE8`ND zL)Z)6%XF>pCBc!R-iASHfle6|e0BHV7MpI;|4=DT&sCQX)>n}8T$J`c--y|-DsMI4 ztDK)9?vmAag;#QZfotsU25jsW{3@pzA!OHYVLTmMHyt-+uD`+%X4ZL!G4)EX@fRQ+ z3V*AyJ&PVbd|kcdMD94$C&h0n_Vv`YX_NvdUbRfc5LlWjJ(g+zmKP7X*G30H}NKOP>W1f z(`w^aRn?jrH#rcaIdimqRmmG%Ww|KJzTZ+o_OijvWHgmq;EV%SJ3|4*ZF@#-*o$OKoel%XgyL{}D(;(<8v*1}N zYr;aOqu9x|o~l;WYrt4=+Tu@> zuCGcx#i8iOT!)S&KNZ8CE5tqaF-)8}ugBsg`99Hs;VXZZuQXB|5v-%UC6l#6J7{{o~qVv%r)4L&cnD0u<{{h7#U=XQ5|9zPhjy-NRiSQxX!Pxol|yGO8oL6f*~!r6hTd zQ0(xY1%21f9r%&)qyjPeg0t8zK}-PJ#-_vAH&uT|mg*X=kjNO}M&eT=&G@z6-YH<8 zzHASMVH+5)btQ&M*v;&hdWYzm4cFNIq?0@(4n=(hkQ>g};&WMBaP=y`zbX?}D(Ny% z=Q;w@a}}#aM`exLjchnL^LRA6c(fajMr%y#n%^NqTeMWu%>U#i*!O-QboMbK)7{7V z5{t0i54U>#5g6+{yyV{Nyz>0D5HP*AtR7Ecvg9<*g(^+lCw7gPFG*2+>zf>f@J)moy zDY*2>9l-AD68-X3wx++igMc>zIm*1tB~V~E8Cpy|$tYC=k#>Sy10-gagnaoN=i4{ z(l?Ei)f5U{Y-wH8N&D8`<1&OeY{~O=X*S*uNZpF{7(Bk{aK)p~{xrG05sy406Z4gs z1~gl_{c6!UkNZ>)_q{j#XBs73Td%Sm;QU-^7o+HOowa{HyDUW zFE;TdUUB18Ab-szahW3M-g+Ku<#RI;_wDF=yxUvB{_PX5HuLso{V2J4k}5)%p_3(t z!-DA+m=YtYcO#c_RPfMmort)NPG#5DT0&1}zQ{Q(Rsi!B9~fEOh58XDifl#}q}1hfj%) zY4rjfbI+*#GTn;o#IG^bBA^x2uA2nSQ1WEkSlT$hq6JQGQs61D8J5$}MvH4* znsnwwE6>Hdgj3KNTBxF*y)XY7J$<<;MNx34sHIoo^N(35JC}wA&SYqDuE=1R?gH`~ zOZK=}<6J!(?y1q_AIF0>Eis82D&YnP5C6WOk&t0Bcj*(_=`_CyXHNDTV6c~TF%OZu zypz+=&e9u@X*Jz3sEWbFPhyM$Ba%J2;A^p%pkZe&EsZW@oZz<2OsXztt~zyw2o1HDPcg|c0RVWas35Ba0FaQ!FFFbU0N=fOYykiT z&`{BlQ?Yy72?KTwpu2|92i^a30|1YY!9cJVuxAL}HbC7oKz)z~3sJ$xb2DJi0Qy@B zn9>39URe0Qk|K4jYnY1a_#Ko@C44|!J~1fy<&H-=~+ za$6I1-w?WQh`OVV0yY7eg4+FuCgjKnx&dPJK}L`4cJxrT^`SfZkjIZ6>W&dAsNEwY zL(~H!=wCe$2GV&HW=kJ=A0(xZx@myCr;oC$hYact(gEp%Z8x=%c8rm>^&bnt$H%MT ze^`UU=%Z|d7^DB_Xn=aCi}cU<8O@X<<-@;nlJluFF{{?`U zf5!i5^1lTDSwE5m6$EA2F@S)|f|S7<5WlSl0R{dq*-bsr8jl1)Jct1af>+Q!$3~#d zQHS^eP%5zYvD^@HZ1e~NtIl45Fi=#;0a$AY1#7{=Q{zYBAMF74)FTndlq>)?`3Gub z1UWQB{qF~10zEK*d^ZBl^-vD6-VL^SN zm!?pJDfIR=bl(X2U=F=9gWkP{o|%B%3I&Z1`oM`X^uiQ+Z3ewCf!>-yuS}umub>aF zLBXIPy9Z0?f>ZE5=rqe7T58$=3 z!ivAis{7l8`oaC`6z7xIeF%lTk)VVScIOqfID+=>`o*7iq!r(L%8d1QWN*qo)`oJGgj6{$|tcPdG`=Mf>Tj_LvRSN`o-&7oXj7|BI&SO_%i0PKrg-V4NA^ z*A0Um+}^EPM1Ef$vrj3wpKldrJu95dxvi-@`uWmU>ascYqI**@ukDq5wybm0c)8=z z4(hMY3)Md(r#CmtKd(!!E_N5U#v0K#x+U5Nr|#;YB(ff#?>#_GF2+jFB+ya6eM3zqCS$L2 zd@+YAkBM1xTnaO^!m}bGl*Q9l$!L7jf}BQ^HvmxXr``}uXeq(LZv5p@#dSPK&hHU(zn8HG%l zXwA~Sb9taBI=~f4JD$Yg6St?ZJ1JC4R~NJ4ZmM_9d93;kh%h|*3 zXd3#q;&(uy_j8Eu% z8wqHPgHe5Gx+xMFib{LxJpGy`;5>S`RiePNMl94IIutN^Lg2)D)ax@pY*n9W?r0D` z#x6a6rp9V%_D@BYi9D|xcZYgTw1@vSIobOU#t})33SlsYPR-9*s!9D*8ZIb+Ge>BC zW4iC=@cWq8i+FO!0b2@eQY&M}U`-OMeML0hmA}FYy40y=o#ad6+N16;*%0ENvf3T2 zhwg#C45SaX1iXCIyk}b#g((F;+OF8}+P#(9BNq13uFM81^zex zW*YVBLmrFCZ$H0?*j*?^X6?GR^@rfX&OQRjA<*#u+ogvF7WP}ddk?PZcaipuG_gxw zPA(>roJh}MQ0^NFvaP7h6I!7LE!TJ5GZmI!361Rv(yMj<>B|5}b%0_Rg7qRES%D8< z?(k6h%~tavLGE(WbH=GJz8`7vFv4jJ>#w@r5AVm-n+HmB7XpclS;RPF2e#=N#TS4Q zA08Ra?uDOMZtla%bongh;mlEH`nPOr(h24FNwD_Ttd*JRfWy7%a%mfE5fK+Y)CIe} zH;{LP$hK0^^Y8iuJU4z9P0FC>xkf~nAMG3M4MhB-o~L9fXEK~q)=T>RA=M+vjLJLj zHz&<(&SG!g-_FIO!-D5BMf4#Mqv@jUx^q{jC<(QGz?S-tEBV81>T#SqUL{67T0A3q zT$V>^?1octP0Fi5o_CLZp+!@jPI8Y%qRfzoF7`(LrGql7H{PZ&}PVC%o&|)iR^rM&WNU@ zZE?@V>a!!oG&i(ek*J$VNgZSM&xN`#DtMyJBi$D6_f|~?)4av%d^97t-V6Wf@KvRG zO|HijqQg7-g^;GHjq}U+!3_IZ5+}2`&rL@`$7$zI zvCgEc+=RXJ(wU{INnsr`AC$MM*K@y3ra4m{a7kd1O*V8^l)4Sjo~7g5v1rr-iPi}; zmhDY9=6vSl(6Ks20qcGy4gxj@dmP$S8xXlIXwF&iuWvs;Xd*ua!l~RP*WQ2)BBFR ziEmYo=+-&)v9@I?njMBa{wASEW=*euhM{`fXz2U^5=GC(eky?CD&%$Mc*mr?z@`no z-!9(|T-=Vh4l>oThG-K*kDO)WWcxM1eEVfd;xBE1|qi6<57dmA*z z0ez?UXTPbnd`I;KOEi(+x9>Y=-iT<9<_GEW|K3(cK=LCRbZ-1R=u}C$#MgXJx=FBF zCU0qxezUo7I|{r}K!H&maFp^Pm3u-wDwC^MUe+BwTw>rJtCls(-UVAty_s-$5^CW0 z_xmKD1CBLk!;Laex_g^wIMk)Kmx${O+pf!2w|MBRtw4DUFP;+dpo;D~`xGFrEsNru z*2+tzKR=epFA^MAtL>zVPNn-u^MyKzP}JQj=6OVp%~r$kijv3IKcf(pB)35Eacuns zhwMRlSoyq>tfo#X6o+=XP0tvL0jNgG5(Fpi6T&zaM6(i-*d&cBgk0H6T4&yOdHpS! zr^);CRh{V5GV6E;^-MqYYJa|44NA66Q`l^~gMS?`K*4XLqQ-^9=)NbG`~@k4Jk`tZ zw-_WIR?Cq6p7(4wN9E%KUi=VY+^6E%O6%0cO%6u=Ah#~()~qXx`cdq2tGNl5^!v-_ zUl>|HHZ;5}M=FbS`yuws_NhYZ)dUtP5|V%*exS?79wDrxr!QxzqEz_{DeVi9(fgn0 zb#mJst$yJzLKA2IibxqKw0lmM1PY6E*AliXZ+>o{=TNSD-J4FA{b3PKTk%8+neVu5 zIF}Mw#0&Nw!~@|FzpJ%$1XtxQjPJ z#v1asEnW7;sfA`x5BdFf-0_?IoLyEK6aij*$*WMUG`7#O{K5E#%ID|umE0NtICD(Y zdDR5^!JYQ-hebFubIH_?KZT+waJW|07jIRS8v{f=IvgTMFv~ZED=q_N#(*j)M|nZ1 zWl+i?MM^Dg)xM+O<#$_g(T;g^h5U|p)k%ABFLPVRUFEhIMoX4dt0yH>1qA8#iN{Da3D!g#|Q%)r|yQ^w1%4WNlCa^f4lAF=#LL)YSv9YNhRb8(INH5CJS*Sm#mP}JVD zxu^Ys;(6kozE}#IznUKj@ds+y0Ap4h(%5fwGE zKt*}7KOg56dAmOYn|_Y_xs!4FB~;6 z@ed-x>ZffSa*FDwLYl(NFJk~(d&Ufn0!jjbkgna&1D_wp()66qTFF$Bu|5(!<*=DD z6|7axkFIaf*_X{ndlhuNzOS@wFNYJBDct;eE)bzdQzjGXk%#ZDU+YmRwde#2bgmlnC z_R0pSyCY>q=pp{tM>mvDDCcmc^I>i~Opr0jI=oxI4(!oxk@jn+??(2psd>*=zV1kx z+xvI+0)i?h0najRo7u%aT#s;kQ_A;TA>2Fo6+sT)Y5AXbA`}pCMjo!?^TeQyfOeKp^GHdrOsz$W*BBwkz}r@GccwV7v+JW)V6S(% zQ#c$O(`?Urm8RvR`Esp~RFXS}396R8H>_37O|`}Vd^ul6BYI>3Nn|FRXT7sU=u~nG zLHJy?MaFll zspgfFFA`MK5HiEgR#M0&-%kR5ezH}{X!s-6$CfH-NNsX^$nq`W15re@7a!d;U5M=9 zo072vqC7Ty+s%FH*);>|L$dORRmB7|Th&B6IKjtYz6G7y=DZ(kSsm;dr3ec_rio=P zjgLB^7KqJWxb{m%T&5>9uQeULY7Ogsv%H@S(N0JkCl}QQ>C~n>i~;LT+40hVDuFUq z4_k`<=9Hg6t?Y4tkga3BZ@&&bo#ol0)98~xyB`V8lkymf6XU%)Id5}k(X#Lq&-c4$ zbi!LM)bMTZ!v{%@{Tz21b30m8_Cx+4^0+vr`Og)D-{Ome_}uv0!SBm}ABS|~l-WfS zL?$4AmmPoVSa1yh!Lps9hYkd~UmSz!`0QprR_IXBb~LBjSIhxz+Y_`K25V zb=Iml-+@f@Qha{w!j88H!LyL{s1C!AvFCuQo`?x6iphvDlU-DnonR9-C)b)CU(N7HvE%4k$^8tG_aQ+%}M zb^$D#>UXi_sF^cIK8HDWld;aGZ{4yiri-Y*-#N>NxWzsI*H;anC76{VD#SZMfqIfJ7W&Th%X1f@_sUcEx~-vaJ7>^qaKWI% zIbteV*19(Uzfe=Y%>27~B1{{{4}as8@is#U817)Gxar{+s(!uD$M*DEs>dZraagI| z8LN#40%Xvn3I$otcKc6B<4D}}c62%e{edL0i~rgKqPkh4)RGQq^Q&G;UXq_e~Dx}$JpN|1SznRxdnq?Ke*^V zXBe#4Nu4a}ksfZ#OKvlg7 zMqpZf(fXDnp^=8^Rfx5WaW(Y?{7IY*SE5z^b17pvuo4GLc&lT3HfDRI_a3CZ8 zJI~bXD~8h+o#N_6ijB_bs3&5EQzkBik8KnnetsI?Is8-tH2bG>-T%t3MfQ457s)~* zXf^MvP-Fg5+5x3030~z$$H5W#o7SUzp2Q-BIp0&_6mXB(Chl$4Ak@o*~RK z`Ex72$f&rvr8d~0+y}|uBxJ}VQk=VK_U6z)5WuU`bmKTY#ll}!8d&`rF|dsc|GpA!03iII-}o6yZ}39 zwkSZ(AMun0pYP&Z{YenFWwwLpmDp1uEo2NAl1mPhh=HT_-DT)?jOQhEtm{h5yIX1{ z@Mzvk|Mn?^&l!I$#Z@Yl;Bf6uy{k!FZQ0ZL`Des&1TM0z6{MoB)@|cdG3s7NYxSQu z#vtC_Gkdw13|No;-3Ya{VRdS>Ga}9zM{!=K;%zT042yu8Y3!DT<%uh{7L_IGvI|xB z>eXwvg3gq}5`U|QOl{u}ctkg}&Jz=JR03Cl`@<*q~`}Cx`5AWKMFT@SEi&|l!f;t2eK%$ zz%>%?_{Vemh)z+1FI>Irlm$h&Jlkdxr}Km^lMaCGzj^hpwlr>HcQMVabcuR}87Jdv zvkFlx_sEx-KfFE|>>cq=QT`xOGppWLF0oG~QzQ1oI~q^2X`r_>u z?ad-B>yBf2*eJOeCZm+^JgdbW@A5%}2)daIu#9Ligvg$m5VrcAefe^CiWakJosck` zCxgIC~8_p8D$?jFg-)4!QqgAeOTGj{?Stkz9Rs zi`KkF==7D1qsUwRSD88RR36v%Vx-Dx9?m*ob2E=s-mc9@*B=aYFReiCD-8Bl1YrP1 zq9(1Ed74=YdyU?cYp2~Cs)ukTTv)hnuxabBjP5}6Ah zbZccY2KTnPF<$Zo9VF*QMuzq?^+vDGPx|+sRwx4me z$x{si0~28E8#;1*ht-z#9Bo>Vlti|HcFM8fJ}^;ifnTJ$V?P^t%y#7BXV1ZlwCZKf z=Jj5bLyq|Bd2F*&U#ZiCqau=Qm}y>r+99@Ss%JQTs(l0mX#6N^$KYs~#d$i@JCmg0 zd#UXYV342Qy!>)aL*WD@G(bK{Hue#-4V*;SzmzOC2O1+}oz#r#CCv;Q!ujo&KVnnE z?vvz8FWrlzg|+~Cxh{UFV6H(ZF++0tmRo77w5*b|S5 zO1L_eLE#`w~!5^w3%u!_hRvqn>X~@z2+HsNz{K-@hk@xew zOiu54zpckD`(HD!Fp%%a+{+=!%DOad)K@B~e%a@QO)`!zf0ogVt)sH|_1+8@wrjmR z`PnniJLoxpku0>7L*JW;80{pYkpOH9!ugBZIN9gg!&AkOQO8bFR99bE*=?+KwZw&- z3pgc&Cy9=}lMlM!fN2xS-)UQ`rBbR<|oM&6q65UaXmJic0-tw2GsqBUr>jE^Pbex=lHoX2nhf@)-EL}0tH-bXdEcCvhW3#Xi-bj= zE3OlzpWUu0azc@th#KZa4Y&6w|H`WyhVBC|&LY+I zG+~fT>~q)24Vp%0^!bOE$-WDik*5zpMZ}+R={T>q0mDf#nJ5Xu$pK!rW^=2KW2^VMs^l<8qO!rpty{C?Nzzc&l-Gt;(GG@f41AoiIHKC8E^leT!6dT zALjyELZ9;8@bA7L?WO0a@vCVHxIFzXryTz$;!p=|GGOB+10N5u6%A9r%kR&&10>xE zHSg!5=x||om<8Ea(Fc@)aSu_-c{kp#Jbt^oxxabl!?^?(9)Xq9r!s#Q)f|}%;S+$h zCzc*FrjWRQXh7UJF)Tf_)SI;};(v16jlBxOI(dw!_5L7Ic?lp*aY)7tQ82inQr!j3 z%4#py7YiKE>7!QW-V7;qqCAi2`0frJZR!U@!`F=CZ4PC8W&txRTsEQk4|fGK1mEA| z-WaCcm_)OU!=g9`PA_2Im`JN6xVHDt9T>MsXJ^#`41CYJE90w0#|Zs{?c1kr5F^|K z7JjA|ti+u*0Gv4sio^By^ZJWmI6wTE*64Tym-YQ7gV?h4mUnOWLt8Qf-x1CHh7>96 zF2OciQbw&^XmmyN-4sH+$a*T5Lv~)h_=f9zNLN&?AG^(n64+D8n{+mf=FHykE=N$z z5bFS^c%2@N7ZiL;PFbw{I6^8f974A2!(%omKbA~qd842Eo0!&@CpiQW@Kw(<>vFRc zs}B1ah)DWmr+G3FXugM*s=MpP3Rj&>Iz<(Q+izlvW!Y*v#&WowxfP9l73m&mCO`Je z+bUrk|4XT+(*B|269882Lyic=}md?h%Mqbi!ht+KqfrY`lpA}_rnV#Kh`JkfUK z>#Mz*Xywuq-uIL4E@C3g!4X1ykPtuolxzk*rtLC$ZI~n%Pt3O_b~5z^{@^DiD_8rU z{=Bo}GJGi+{O?_f8}jB<8&Q>DiSU`q3Hl-wrS#D&IF4{wgOfq!{KnyJmsbPB8h^pfzv(N|JfmZvyc^(f@1`I}5)+}lOe zwu6`&W{{SoQ35%2#2yl8__ou`$^19QHI1wj(I}s~Y}Zx>IL6z=%3R>=@vzaYJ(1p~ zWpvPi>Bp$KLfl$(%*d0g1M;MF)TAmg>y~OI|;Mh+zjp-NH0$hr%-*i^V|8I$IOd&`*?4wgYQ5 zzqH9_O?vDb7w}*}BX7tS4|^-AXYAvuEOT2`Z&cKB3r9l(UzSPwMzEEoPHzRrEGi2T`an@bGfKn zYH6Ad`jpnMYfE_u{S2WEvU^GdL#}7TqD^SzDHja+-K1kO%)@>|lbvJ7)|p0=&YoFu z6p*&C$6E*$w@mRy6`|YN`aTt`X+8!h<#X$qp%|%=#YY3kwoQN^Ukzu7>~`Ng@=oN& z-n4@t_hFk{t(~P!j*H6A!J=6;3HW%cG0u_ct=5dLI7!na*|A?nv`qV?_Jff;40)LI zqMb{6`$qv3;!1(CL$@sKk8gc%dzJASKw@M+XuYjjFjqYXsI0f2klAosnt(+^~#2lr3Uk!=s=jF3Oo;-DA& z6jPq&FpiZ_s>KnPGu$%M5SILB<*`X4eUEsdH5~DZ0XuIG3;WSF_%Nctcofw5jBI(V z&tH*#H+lDJksOApv0eLo($gf9_MQH*nVst4e|X$pppf^ziiY&CaYGVh_rA0Q@M8|m z`9==QcNBd&j^ZXO+I?}w?lgPX+^F8r*c@r^W~V!bRmh91}`xDqco=#C@(RDaxrKCI$VN zcv}w@*F{>X{GqHTMU8g;rdhQ6AvJ1~ajeyPp$ZoUaE)+b(wdrNJ^y7A=s3x5JJ6}@ z;5_;7&Q@7HU;Lqbez*KlCc;M65RX|N4I>`^cM?gq?sj>H9cm+phiWqY#arza+g3?|LE!qygA3&E2byfxBTGDV^t3o&yVFIr(2&IjR zc5RN4@J^=^*j6Q@kmO`RqniJvEPp z;6vp&P#i~@Qn+!8Fm2Vc%vRrgBWCIsn>b7SuO39dxAUK5N==c8rR$d!*tk+pjgh$i zx2Gqo#d;U=oq{^A3@v`AuOs(^Spq}U8~fe}sM8v`c`LY!mjV}*?`j%IwI>J$I>}`) zF~GCj!`qBX?CE}m z!S;hkck0&CwGUBMEnNFwP!kiL-p?koHozOxl!nw|Nj7sOxE*GLrC&KH>qUbpE&)J< z+m=;JV@1+N6v>#GcWZcD$TyNt4axOLX9Tb?*@G8@Z~8@1g>-eDgxtRb1U%FRtFvHY z;XjulmGsckBp}NnkkkBosnDT8BtB}W<1Pn)I#zS8Ow%-GE{|L4g|B@wMxaB6>e zi4hujc7(<*gN1*X?*Bte8EswvrYw@E`%9Z@^uurBMwWL5P#G1M7N{d^XwB3`;~Kl3k=Z> z!T0)%b2%RneNwD9=MXc}8V0(}4AO7HhiADB4?_<1d8l=#@cH7`6%jeEFR!s^pXa}K zaEd*>jyJIT>G94v-e0@-N#gC$FBL+`SuuHv`%i5@wO`k#Q?YeuhYTc@DrJ0uLdF7+ z6$q(JZ106C{@|x~CfGVFhGds+n%Cy+On;37r`FJ-f?7-;Gln=`OKo3XdO=+hL#eDa zv@-9k`)6hH$m#E{+@pfasha5c_Ch}^E?m4pyydV&sX&DRNCE}G`cRx|k#<2ngWu)) zu`%zk(pmmJ9X+c>X2b>iM>Hlx!UdP={Ni#AQx9DrVH|r4^++jv2n{tN4u`l_$yPdZf6<}`)U@fnmYq2K!Whd>bgE1n6_^lB7m@y_oJt)c~U(7*Oui+T*@N0sp{>Rm7# z3CV7xwLO~!LHVyx<8ALvIQ+WyT4%T(ru7|EXc$AZl(}&|J5$;9aq=_;Si06!@p~q{ zUI;Lamug;XE)Sa^TdVwmvrOwxN6=JIA3U$#JQj;&W`!P7oJh;nF<;2@kr~?88o<3V z$-vdoFiQx%W3I;W-9^pM4+Y}mHMEB!>%+O~#dQpuI8}r&0jH#@djhkT2j8y(eRzeg z_^e-UG#Z6%t$4ex59Rs%j(b@Y>&~_Ez5k`8`Bd&L4k>K-r(Bbv(1Ak^oW4FcGELfW zY-DP^-7^X`3N+GFya;dfVw~S88^?P)9n+$5J9^ykW#IXGAVs1qzt>;Z4keAqyF2dX z*L-+SDG#|QBB0hXaL-6iCYrK)C2(5WB80Uh7A3oS&plBg=DOR$jnN4#ceP(n{!GS5 zRWpm8r*8XB*FT*j;phd%^m2My1CgUuLq#qkoeeD+uit38bQ)7RUpSaPvLU|Xn!ekB zJl*c6-jfg;3Ru=Q4%Y7RKn%?M+soqk`{*0x2PDF(HhB;B>g%+tTYr{o8|8$C!Hq$) zR`MBze&fUCwgl0UKKpyIQYfvBrUpzpVYe zE4|Jwc$!YNEzp}>^Yjynm%P5zEWW6TG=js}0@di^?X=g}rnJTlO-~Dx&%Mu!qPtUq zhH9e5IS;hR4|Rx@QWS8K&qC?j{iIkD5l~-2f`^KL(?(=B&Fl?q_*RI^LylRm{1D-c zW4lussu_bP(rW5hi>D>)ffHX9D>+vrRQ}SN9OIk^jpKl;ba(7Lj&6!i*wdF%E_Z|C zjAOyfInoE*+}{_R9%`@;>+CVd?~J((Z@JVi+P`hq`Xes_<=66t13RgPVtt9*bt0JD z)PAyjs5>MvpnAnf$&V|dwkA{$N6leT-N@^KNCEInbg#Cek#la`_wp>To<#hnY;WOU zbC%Ro5gv1d^quiATbM0&yZN&k#dea^zYSM*D9rr{?M=ut@}?vrxscSvyKT?D37j7b07<^giOu zV}LyaPkX1Tlrs_=!Qsx6wUkLM*K-w4V$`?DPJ71;X=}RpV{i~M1eT1&%dNCpfTK%KuPRpoeE`C)cW^w z^|egM78$IDbXI6&JY&Adg`JWK^dUaFCW4HZsl-j4ZYOF&NIKVl+oNO zB!lT{Zx`mxu4+{`5aNO~h;n1+L+yY*q`$XSFB|p5jqg_*F+Z|_u|#y*IqeNjFI{ZW z5YD%?{6QwVZgGFj)Q1(6X>xONPIAou&20M23|JrD^6$z(t&=HlkpB(>PJ;sdI-y+4kkWHA+0^V`z_ z*;{YZiwHzvuQtMJnJo;3WmHBM%^wi+Bu(IK~d2J;oguD2aX zQ*o{tLk3}J@%)w2fd+%3>WueL27S&xmRXd;Ae zN4yd%N#i4c&uU(oj&*O|_u=s83JvfsvZxL(GJwek*+h}E4a{78PY&Z;5?#8s$VC@? zDbaSZ`lS_tNQjE`=*6OR=XZW0*d`q*kIgl*mt?TI+LJBO1dn>tvsETqrm`EsRnbSf z^AyW7`(6h#Y985^@a}Dk(ZbNngA6*D zPs)-x)mMF?jMAWz$%Dc8eV5^w++NC6V*KuIInoLbB9^u}4(E{K4P5QQmJcn|Y-d?+ z@8{wJj|DbRhTR~Mem-3UbjHO6!2N3*Qb8@D~NA2W&Xta|s%+XYQy5f z=b?Iw%JNRYUxYoRr@|&a(C-g6XtXmykhyLbk6dD`V_44Jhbu0>0ROPk zZA-+Z-YKi4Zt|FH*GE;(02aH;a_>*nMiZ$S$=Yj$4(Dx9js7UBs<7SlPStP-M+=z^ zMUCzXyGm4R&2?w}CbtW>h~Fff^?mTP4IP=U_2Kpi=)4^k-U_Ub4#B@Se|qw3btw+q ztU4#=Fq`7PAbs%Ry%+{JN3!jR@)iQ+DB=wUs5lrV?T%%Pz@7@FubrPW84Sj(2@8_2LA%PlEd}X+sE$uky0fC@xy4R0PLsnBVj^lw zGLFOe5sx9zp0Z#=)%kd<*3AA^f$9L?gyZG|Ou<2MjP>7r>y6@$Thc$c{$j81fw) z&AYGQxnZn^uq}fqaQPmh)H(X<)m%3@cShZY$@WrF;`)$4(XwjZa8r&AJj!ac5|oxW@{e=+O17wEjKu(x&(_ zl>I8HuBcD=p3IU)=8i=4@;BDq z-k0`zQG-Ql@ik=?h>Etqw;D)zWUB`6E*? zBF4H4dE6Z*uBu4`)$jKzCndQmzv!|TB3TKGXmDTJLV6()C!(kbd%U*3(%?&Orf#6EGMV~mYV?)%8shzN?B|}2u6{Zlmo(B4kqFE}6&rwQI4q5x#TC(M@f~1tOItI;Ui(dy9Rb<}i zjJsuUw=#5V7xDztR8-vcB+mv1pb+0RimDY`Y#4}!rl!cwn3Li5!UqrWC&XyMj2XQ% z|4`RGkMqAklc?Wb{<{vMUlpoF_858mvwT&~+%$9V#^-pfHMfT1Qd|Ird?v4OOOduCcGU##M_3yit0F^78F<=1+~)Tsz=}ZrI2w+s;nqF1Rv-fQ*L z#4YEGx*yNvYow{joQhYku)$v?xd81tyvTe<7k#IE^BK8cxjC@d37Djl3J4f3Pp{*c zg^Hi4BVNS-eB(JNIZa|B_xYZ4F+|}%y?;@ZJ#dK9Iepwdq$#olAg+_q=VRu|U@V9d z%#RWr##l_wVU27d+OUil3Ps*{43Uo>Uc$Df(ALqGI%LNZx2&O0j->R)-% zv$)MTbxgSZz#FS-*Z;?+H#}3Xt~6pckzCb z&+sDayz$G6y!ZUZADu6cIiBj)AxIcQqU-!Z()l4~v9`F@OZ93VJ|PhXJCSaHEXx=YDuD#-w{Cpe1)! z|J%End)I>d7t8}bD$_){@C6^kJ&pEf0$*Pkz%*05qkATx#=}J`!pI8hh(74xnxi{X z!5PK#Ebj5?i{V_4W*2bzycY`FkmeJ&krZ*ij$*>jIrBs*4|pr4#I2S)SCBR!r*b|M zjRJ`;^_ZI9P!Oor@Z#Kit{8-(pzeMx`jkz5g4OTWFSbbzy;F>}lpg8%$}4(#L+#yV z!<5D>-h#;GYh0`@WaVw;+crcb-q^(A&|>4(=z`1eXt}7yx-S!=mf@xUe4HhV1gssG z)v}`Z&Ax}ME7&nCIu1;2gnBF4Q~kmC7bx;jfmnd8Hz?iZ$b z*;;QRRB9xQTRWL5a-Ge?K(^=SpSW`-zPl88G2g*r$>+|$qGBuG1V-77G<&8J z?6+$t+aoc4Kldq9Q-e#zFW2zC=S{kEdV{<3D{y8bXY|bt25l%`@%H`TH$59}-_6~4 zzq6fP4_*c+MxHjc>D8)Y#Sc!E*tdOdg^p}GghgX?Q6o~F>8_4n6Qm0L7vu>$WA!Kj zI4qwm)5`tA#{$mGH}SXEjk7jqY3%LQcZ`LX7p7lMrJYJr!V-!D%nvu_ODeRmabbKL z+{VLc7dZY|ryo6ykae;1T)Be%m*NED;c+W07c+uNlTIzdrG<~ROTtBM7dLA-dWJbK@a4w6 zJ`VZHLosMa5`9%DK72nPiOB7lzpsfcEM#Y(Wl$c}qRL`vtwPMF?7VvZH?62su~Z7m zN4_ibWoY3cpdckcSKOXDd&r;peGPZ7g5=$iHxCvqgQsxR$TvGi#_Fjh0z-*LN34&s zfxVk-yn$>(jPWy~<7?@EZK3jPmU31+_W z=V7lU^4$jRcS5wE8LF|}(>>4RuNF`jEc_#FroMJffmE1nN7{OBsr+tpV6r131$MBw z-j}@2LmW?=Orit%$*R#+OLDfJa%}G`3n$wl=g=$QxIe~KV<#%@)#&UsP0o$vy-|IC z;#?hXyIw?s*}z1=p^#|xq@b?b=FOapN`%c54NhLHY9i{@t#sQ$W&N@8Tkf$RMLA%&q9l1h6$#hBHbYQB3LBK1y^w)dphx@XFJO~bYpWh?XSsXz3;a+ zzf~LN%no3Q;};=nPQ`ATxaWO8YE7{QCL>fSjlbE%=$iVDJ>W8AT?AQD9F|&~=S~#~ zzHyr-`!!dA8l-Lnd;$QH!pHv$(CBxSF`-;H`E@YDuHcSJExW0(t*%kR5)!$jKNQ8^ zUiAh3v?j_V7d)k3lnAvU=HJS;mNWR0r2IxyU(=sVPLk(D?%|-K;(o!x8ne@|bP40e zB#+xhRGCes^;dU}rr8wJ*N?5k2E}L4u`y|>0R69``#vK@SVYYh`DMY}hiQJWY=MBD zfR(gAWe@&+uVY0jxyi|PkkfX4Dw^<@lM8>l=w#(kP)4q!#*=(gm->yt8pYCImE-xL zsN-8lzd{QYrtuFBflA{3;fAyuOU@?Cee(o3fW7d~fo+eA3f{tZFAv>pHsy^u>o0z% z9o^G7{n{aqtMn1=uJPy_H6m9HST5=nkM|0;-P|xMw|ttqUgga@9~d~u(R$Dz!QCzC z5V-k@SF39z3X_53=$EnZ(5uda^9i+;d7bp_%1%VUYO9gFQj@n8QOW$&eWO*`or(Rs z2h@>ya^_T{z|B2vKSTeAb~GPT5zVWSd)D~?E`IM^7oNzR3ti`8C?ISZkzMPEfNF?5 z9r5~msV9*ckY?5d%XW&cryw&VKT^|0AZGmTlOeXB=sGk6@*DN~FbcG9mcp%y&0-Pz z`dOk9#}XR1t*E*#-zem_d9cU=FHBXnKQeyXJ^jL+5hjC zONV#mnAL~z)MR?@^1d(FPObJ-Jq(cLyA&kpfrfchz#QGg<8c$SGzc}1tVk@t-lZ+N z@OtK%y~Cnsl8(fLGj1d0cgoHLJbF6*GM+c}#mKcEx_7ZhzYq8wao1S{6A9${(-yIx zEn5tP1hVW$-rWdAal90<39$;K#1RUE~zN2T65 zdS1A#U0;6vUb?NJtyaQ5b}agBg+Rm3qeco5f!_8P3FgBxfxeq5{CBH?$`UVAI5