From 7efeecfd3b16234bb0e448906b75c200dae83a7d Mon Sep 17 00:00:00 2001 From: Kenzie Davisson <43759233+kenzieschmoll@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:13:58 -0700 Subject: [PATCH] Add wasm opt-in setting (#8270) --- .../lib/src/framework/app_error_handling.dart | 4 + .../lib/src/framework/framework_core.dart | 7 +- .../lib/src/framework/settings_dialog.dart | 26 ++++- .../lib/src/shared/analytics/constants.dart | 5 + .../lib/src/shared/common_widgets.dart | 2 +- .../lib/src/shared/feature_flags.dart | 12 ++- .../src/shared/preferences/preferences.dart | 91 ++++++++++++++++++ .../lib/src/shared/query_parameters.dart | 9 ++ .../release_notes/NEXT_RELEASE_NOTES.md | 5 + .../release_notes/images/wasm_setting.png | Bin 0 -> 43352 bytes .../shared/primitives/feature_flags_test.dart | 6 ++ .../devtools_app/web/flutter_bootstrap.js | 64 +++++++++++- 12 files changed, 222 insertions(+), 9 deletions(-) create mode 100644 packages/devtools_app/release_notes/images/wasm_setting.png diff --git a/packages/devtools_app/lib/src/framework/app_error_handling.dart b/packages/devtools_app/lib/src/framework/app_error_handling.dart index 5cff96016b8..86292c53cf8 100644 --- a/packages/devtools_app/lib/src/framework/app_error_handling.dart +++ b/packages/devtools_app/lib/src/framework/app_error_handling.dart @@ -53,6 +53,10 @@ void setupErrorHandling(Future Function() appStartCallback) { return appStartCallback(); }, (Object error, StackTrace stack) { + // TODO(https://github.com/flutter/devtools/issues/7856): can we detect + // severe errors here that are related to dart2wasm? Otherwise we may + // crash DevTools for the user without any way for them to force reload + // with JS. reportError(error, stack: stack, errorType: 'zoneGuarded'); throw error; }, diff --git a/packages/devtools_app/lib/src/framework/framework_core.dart b/packages/devtools_app/lib/src/framework/framework_core.dart index 1d7a4208463..788745c6a85 100644 --- a/packages/devtools_app/lib/src/framework/framework_core.dart +++ b/packages/devtools_app/lib/src/framework/framework_core.dart @@ -9,6 +9,7 @@ import 'package:devtools_app_shared/ui.dart'; import 'package:devtools_app_shared/utils.dart'; import 'package:devtools_shared/devtools_shared.dart'; import 'package:devtools_shared/service.dart'; +import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart'; import 'package:vm_service/vm_service.dart'; @@ -46,8 +47,10 @@ abstract class FrameworkCore { await initializePlatform(); - // Print the version number at startup. - _log.info('DevTools version $devToolsVersion.'); + // Print DevTools info at startup. + _log.info( + 'Version: $devToolsVersion, Renderer: ${kIsWasm ? 'skwasm' : 'canvaskit'}', + ); await _initDTDConnection(); diff --git a/packages/devtools_app/lib/src/framework/settings_dialog.dart b/packages/devtools_app/lib/src/framework/settings_dialog.dart index f0c874b9808..fed19127e03 100644 --- a/packages/devtools_app/lib/src/framework/settings_dialog.dart +++ b/packages/devtools_app/lib/src/framework/settings_dialog.dart @@ -12,6 +12,7 @@ import '../shared/analytics/analytics_controller.dart'; import '../shared/analytics/constants.dart' as gac; import '../shared/common_widgets.dart'; import '../shared/config_specific/copy_to_clipboard/copy_to_clipboard.dart'; +import '../shared/feature_flags.dart'; import '../shared/globals.dart'; import '../shared/log_storage.dart'; import '../shared/server/server.dart'; @@ -37,6 +38,7 @@ class SettingsDialog extends StatelessWidget { @override Widget build(BuildContext context) { + final theme = Theme.of(context); final analyticsController = Provider.of(context); return DevToolsDialog( title: const DialogTitleText('Settings'), @@ -50,6 +52,7 @@ class SettingsDialog extends StatelessWidget { title: 'Use a dark theme', notifier: preferences.darkModeEnabled, onChanged: preferences.toggleDarkModeTheme, + gaScreen: gac.settingsDialog, gaItem: gac.darkTheme, ), ), @@ -61,6 +64,7 @@ class SettingsDialog extends StatelessWidget { onChanged: (enable) => unawaited( analyticsController.toggleAnalyticsEnabled(enable), ), + gaScreen: gac.settingsDialog, gaItem: gac.analytics, ), ), @@ -69,10 +73,29 @@ class SettingsDialog extends StatelessWidget { title: 'Enable VM developer mode', notifier: preferences.vmDeveloperModeEnabled, onChanged: preferences.toggleVmDeveloperMode, + gaScreen: gac.settingsDialog, gaItem: gac.vmDeveloperMode, ), ), - const PaddedDivider(), + if (FeatureFlags.wasmOptInSetting) ...[ + const SizedBox(height: largeSpacing), + ...dialogSubHeader(theme, 'Experimental features'), + Flexible( + child: CheckboxSetting( + title: 'Enable WebAssembly', + description: + 'This will trigger a reload of the page to load DevTools ' + 'compiled with WebAssembly. This may yield better ' + 'performance.', + notifier: preferences.wasmEnabled, + onChanged: preferences.toggleWasmEnabled, + gaScreen: gac.settingsDialog, + gaItem: gac.wasm, + ), + ), + ], + const SizedBox(height: largeSpacing), + ...dialogSubHeader(theme, 'Troubleshooting'), const _VerboseLoggingSetting(), ], ), @@ -99,6 +122,7 @@ class _VerboseLoggingSetting extends StatelessWidget { title: 'Enable verbose logging', notifier: preferences.verboseLoggingEnabled, onChanged: (enable) => preferences.toggleVerboseLogging(enable), + gaScreen: gac.settingsDialog, gaItem: gac.verboseLogging, ), ), diff --git a/packages/devtools_app/lib/src/shared/analytics/constants.dart b/packages/devtools_app/lib/src/shared/analytics/constants.dart index b33dc8fcdd5..3b8e8bcc07b 100644 --- a/packages/devtools_app/lib/src/shared/analytics/constants.dart +++ b/packages/devtools_app/lib/src/shared/analytics/constants.dart @@ -47,6 +47,10 @@ const devToolsMain = 'main'; const appDisconnected = 'appDisconnected'; const init = 'init'; +/// Event that signals we fell back to JS when trying to load DevTools with +/// Wasm. +const jsFallback = 'jsFallback'; + // DevTools UI action selected (clicked). // Main bar UX actions: @@ -114,6 +118,7 @@ const settingsDialog = 'settings'; const darkTheme = 'darkTheme'; const analytics = 'analytics'; const vmDeveloperMode = 'vmDeveloperMode'; +const wasm = 'wasm'; const verboseLogging = 'verboseLogging'; const inspectorHoverEvalMode = 'inspectorHoverEvalMode'; const clearLogs = 'clearLogs'; diff --git a/packages/devtools_app/lib/src/shared/common_widgets.dart b/packages/devtools_app/lib/src/shared/common_widgets.dart index f46ff5761f3..ac33add94e3 100644 --- a/packages/devtools_app/lib/src/shared/common_widgets.dart +++ b/packages/devtools_app/lib/src/shared/common_widgets.dart @@ -1557,7 +1557,7 @@ class CheckboxSetting extends StatelessWidget { final gaScreen = this.gaScreen; final gaItem = this.gaItem; if (gaScreen != null && gaItem != null) { - ga.select(gaScreen, gaItem); + ga.select(gaScreen, '$gaItem-$value'); } final onChanged = this.onChanged; if (onChanged != null) { diff --git a/packages/devtools_app/lib/src/shared/feature_flags.dart b/packages/devtools_app/lib/src/shared/feature_flags.dart index 1f2785e5908..319d641c01e 100644 --- a/packages/devtools_app/lib/src/shared/feature_flags.dart +++ b/packages/devtools_app/lib/src/shared/feature_flags.dart @@ -99,17 +99,23 @@ abstract class FeatureFlags { /// https://github.com/flutter/devtools/issues/7854 static bool inspectorV2 = enableExperiments; + /// Flag to enable the DevTools setting to opt-in to WASM. + /// + /// https://github.com/flutter/devtools/issues/7856 + static bool wasmOptInSetting = true; + /// Stores a map of all the feature flags for debugging purposes. /// /// When adding a new flag, you are responsible for adding it to this map as /// well. static final _allFlags = { 'widgetRebuildStats': widgetRebuildStats, - 'memoryOffline': memoryDisconnectExperience, - 'dapDebugging': dapDebugging, - 'loggingV2': loggingV2, + 'memorySaveLoad': memorySaveLoad, 'deepLinkIosCheck': deepLinkIosCheck, + 'loggingV2': loggingV2, + 'dapDebugging': dapDebugging, 'inspectorV2': inspectorV2, + 'wasmOptInSetting': wasmOptInSetting, }; /// A helper to print the status of all the feature flags. diff --git a/packages/devtools_app/lib/src/shared/preferences/preferences.dart b/packages/devtools_app/lib/src/shared/preferences/preferences.dart index 96410a6cbc3..165e4e03e87 100644 --- a/packages/devtools_app/lib/src/shared/preferences/preferences.dart +++ b/packages/devtools_app/lib/src/shared/preferences/preferences.dart @@ -16,7 +16,9 @@ import '../analytics/constants.dart' as gac; import '../config_specific/logger/logger_helpers.dart'; import '../constants.dart'; import '../diagnostics/inspector_service.dart'; +import '../feature_flags.dart'; import '../globals.dart'; +import '../query_parameters.dart'; import '../utils.dart'; part '_extension_preferences.dart'; @@ -25,8 +27,19 @@ part '_memory_preferences.dart'; part '_logging_preferences.dart'; part '_performance_preferences.dart'; +final _log = Logger('PreferencesController'); + const _thirdPartyPathSegment = 'third_party'; +/// DevTools preferences for experimental features. +enum _ExperimentPreferences { + wasm; + + String get storageKey => '$storagePrefix.$name'; + + static const storagePrefix = 'experiment'; +} + /// DevTools preferences for UI-related settings. enum _UiPreferences { darkMode, @@ -59,6 +72,10 @@ class PreferencesController extends DisposableController final vmDeveloperModeEnabled = ValueNotifier(false); + /// Whether DevTools should loaded with the dart2wasm + skwasm instead of + /// dart2js + canvaskit + final wasmEnabled = ValueNotifier(false); + final verboseLoggingEnabled = ValueNotifier(Logger.root.level == verboseLoggingLevel); @@ -83,6 +100,9 @@ class PreferencesController extends DisposableController // Get the current values and listen for and write back changes. await _initDarkMode(); await _initVmDeveloperMode(); + if (FeatureFlags.wasmOptInSetting) { + await _initWasmEnabled(); + } await _initVerboseLogging(); await inspector.init(); @@ -123,6 +143,70 @@ class PreferencesController extends DisposableController }); } + Future _initWasmEnabled() async { + wasmEnabled.value = kIsWasm; + addAutoDisposeListener(wasmEnabled, () async { + final enabled = wasmEnabled.value; + _log.fine('preference update (wasmEnabled = $enabled)'); + + await storage.setValue( + _ExperimentPreferences.wasm.storageKey, + '$enabled', + ); + + // Update the wasm mode query parameter if it does not match the value of + // the setting. + final wasmEnabledFromQueryParams = DevToolsQueryParams.load().useWasm; + if (wasmEnabledFromQueryParams != enabled) { + _log.fine( + 'Reloading DevTools for Wasm preference update (enabled = $enabled)', + ); + updateQueryParameter( + DevToolsQueryParams.wasmKey, + enabled ? 'true' : null, + reload: true, + ); + } + }); + + final enabledFromStorage = await boolValueFromStorage( + _ExperimentPreferences.wasm.storageKey, + defaultsTo: false, + ); + final queryParams = DevToolsQueryParams.load(); + final enabledFromQueryParams = queryParams.useWasm; + + if (enabledFromQueryParams && !kIsWasm) { + // If we hit this case, we tried to load DevTools with WASM but we fell + // back to JS. We know this because the flutter_bootstrap.js logic always + // sets the 'wasm' query parameter to 'true' when attempting to load + // DevTools with wasm. Remove the wasm query parameter and return early. + updateQueryParameter(DevToolsQueryParams.wasmKey, null); + ga.impression(gac.devToolsMain, gac.jsFallback); + + // Do not show the JS fallback notification when embedded in VS Code + // because we do not expect the WASM build to load successfully by + // default. This is because cross-origin-isolation is disabled by VS + // Code. See https://github.com/microsoft/vscode/issues/186614. + final embeddedInVsCode = + queryParams.embedMode.embedded && queryParams.ide == 'VSCode'; + if (!embeddedInVsCode) { + notificationService.push( + 'Something went wrong when trying to load DevTools with WebAssembly. ' + 'Falling back to Javascript.', + ); + } + return; + } + + final shouldEnableWasm = enabledFromStorage || enabledFromQueryParams; + assert(kIsWasm == shouldEnableWasm); + // This should be a no-op if the flutter_bootstrap.js logic set the + // renderer properly, but we call this to be safe in case something went + // wrong. + toggleWasmEnabled(shouldEnableWasm); + } + Future _initVerboseLogging() async { final verboseLoggingEnabledValue = await boolValueFromStorage( _GeneralPreferences.verboseLogging.name, @@ -162,6 +246,13 @@ class PreferencesController extends DisposableController } } + /// Change the value of the wasm mode setting. + void toggleWasmEnabled(bool? enable) { + if (enable != null) { + wasmEnabled.value = enable; + } + } + void toggleVerboseLogging(bool? enableVerboseLogging) { if (enableVerboseLogging != null) { verboseLoggingEnabled.value = enableVerboseLogging; diff --git a/packages/devtools_app/lib/src/shared/query_parameters.dart b/packages/devtools_app/lib/src/shared/query_parameters.dart index 24f2237aced..8fa6d34b956 100644 --- a/packages/devtools_app/lib/src/shared/query_parameters.dart +++ b/packages/devtools_app/lib/src/shared/query_parameters.dart @@ -62,6 +62,10 @@ extension type DevToolsQueryParams(Map params) { /// The current [EmbedMode] of DevTools based on the query parameters. EmbedMode get embedMode => ideThemeParams.embedMode; + /// Whether DevTools should be loaded using dart2wasm + skwasm instead of + /// dart2js + canvaskit. + bool get useWasm => params[wasmKey] == 'true'; + static const vmServiceUriKey = 'uri'; static const hideScreensKey = 'hide'; static const hideExtensionsValue = 'extensions'; @@ -71,6 +75,11 @@ extension type DevToolsQueryParams(Map params) { static const ideKey = 'ide'; static const ideFeatureKey = 'ideFeature'; + // This query parameter must match the String value in the Flutter bootstrap + // logic that is used to select a web renderer. See + // devtools/packages/devtools_app/web/flutter_bootstrap.js. + static const wasmKey = 'wasm'; + // TODO(kenz): remove legacy value in May of 2025 when all IDEs are not using // these and 12 months have passed to allow users ample upgrade time. String? get legacyPage => params[legacyPageKey]; diff --git a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md index 1c8e1e370d3..fa99239b317 100644 --- a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md +++ b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md @@ -13,6 +13,11 @@ To learn more about DevTools, check out the * Fixed a bug that was causing the DevTools release notes to always show. - [#8277](https://github.com/flutter/devtools/pull/8277) +* Add a setting that allows users to opt-in to loading DevTools +with WebAssembly. - [#8270](https://github.com/flutter/devtools/pull/8270) + + ![Wasm opt-in setting](images/wasm_setting.png "DevTools setting to opt into wasm.") + ## Inspector updates TODO: Remove this section if there are not any general updates. diff --git a/packages/devtools_app/release_notes/images/wasm_setting.png b/packages/devtools_app/release_notes/images/wasm_setting.png new file mode 100644 index 0000000000000000000000000000000000000000..73bbc659781efe5c90de99a96c73dae88199d363 GIT binary patch literal 43352 zcmd42by!tx^eswBr-*b(cXxM4cZZa8!6GqnP(m8%M!G>tx}@tYK85eQzjN<% z|2xmot!&=4-u3pJV~#mih=QC15D3-%97$0vF7;7tL1DK=xrZ%;)SJh)2V~|K5fK2_Xpi#sEwNnM0%#9{vO}cyQP| z5oHl9Ir%V2=IZ+5;z4!&!!05`m;!3YaTB5qPDer1aWc(IGYFqz@!xYa%wozONQTK+ zQmCsfRC1}SV^k3trmSvr4L$GCy1#( ze*E|VOJeT}{*FW#)Gxqt&m$1xeTvO+*0)M3{lS!B+|L!$I9Q3RY-M179yGay#&Hmm%oGyVb*fdzpEEZ@RqQ@RNusa!1B%SJ9SVgmIP zQi+0R%jsAQjCBJd^S7N`K@AF+G%{FtnNA3&r8tMG9GJfc9HkF*oGI}PRtd2CA1Y(0}nCuE-J#4vO$_o82 zh)6*JEC_~n%1bbEBG?Wg<6w9y5u7M`V?<3snO?XPpW94SN}N#tm&C-RzEgrJSssO` z)c)rpY@-#U=D*%J;qUkm2ttm+{(gOpm}Br##(&a)4@5i|pjpX)2hHG%zPe$@o(gFj z^mc{%l5zo7Kfty_*G}N}C4mTd9Aaq157DH|&y*Z0MAXpnJ}+~ovQ8Ab3aM4_i(gCz zehb=>XcqPqHX2i5g|zl_5p>V_KBn{A;Wzhhb|>s>#&2kz*q$hSJ_KUk-=mm{v5dm_ z0>eW(NZ+X$I52g6_Wuk$h#`Y%3VRCvsq078wT5;n2Rlwmm~QxD;NqvU9=$df1DGl! zPCPkmvoOcb7e6`cWpwDvU%9?=C72Gu?eOdzSYbPQ4U+dj)C*n?VCW`n&-m{8Gh>Yc z)&WY_kB>O2jimI=E7W2*x&WR4;tnXq^g?+j(m=G>5Zn;5PVS!=?+B06!otE5!qQ|a z!vszJWkLq+lPsAbnKLBeNl9XGsS-$utts%|=o0Y}HIu~lxfx?RAacbvrRj*Yh2JwLrTq5lwFwnjijoYMRD;L|GKr}1SjX74-m+MlL>{_n z5)N|tc#cGrIQiIRa&OW5Z?}~YazgU$BEAJtId+1pF&#u0Vw3sb6dNXnCMzM^i{KrLNyy?lm7a--$)*WWi#&_O3B986N!^Lq$xjm_MUn3n*iu=c zaKv!7*z_1*Vbh9J=LFa%F%=gTZR~o9EwwE1G`r7OSkX5I^6ePy)=X_xGxTvx)D2z~WkhGpRCE!ZUmP!Q zEMsQk5+S~ahw|NP)Afz?|LvaubN4z72^pRq#q0Guf@<FNA_$j#a z&7$6Y{bbXL#k8`zZZ6m+*k-eRoH9Db3(@rqse*DCX0++}`e*|E&T9v&E$a$X2^Ln4Ey54f?a<`X+iOu30^_bmq*n z{20YRT)KRoCT>B!8gVo``Zlc|7bl8U6_*CkaaE)_T(NCN}#wLmk~~IjxFr(e83qdd|xdwBOcw z4XkY}_Hqm`3_nzdH|}@KZwkcUvNrG;y1Vf6N^^mFA$k5g@iLw@aVPG8@=hs1WlHrxOHV&btLp1J4+dM?E&fDL z=Xi_wtN0A>*S8Ce%a-0o@p`Jq;CsHMkR!z;#q(Z<_ezcm8wU676+r<(*C;`FEjmWp z%8sIEl0tMkG)4GaIPSj>m@bTloXMSUcDK*2dfM&#jxk%i@8&!^E<|^wHv7IQe=DHI zDMb1ZuCP|zJ(i!Ff4})_Gh&>-KwBG63&)G)ZhsVeh-JeJW8`%zN%{a6#|QqK+nE<* zAJs9@8IWt~Ej^v6c7EIqv?tD2T6`>(sS+T|=LWkISZ{gx8hY zvMtoMERNcYFM)c_}{So=v)EMM%!aogOood2-rbJJEL-z-Gbv~eYJU0X3K2tpwx-x zn6C}~ig_gf3T%l0!Uqot?2I0)vx|lA?291F1Nb=9J^IM+#qoELZN3Cx9cqv(uDCuw zm~->QZk6AG!)6n?!GLLNN%vSi@GO?dhj5=%RDK4lJlJx_g=Y8h?v){Y&|P{+ZI4r@ zIU2drA5??m_JlI?0&wg*6AdX-Sy?b@;5#fB1o%rZNZ=bd@E0t|91QB8?_gl$z)vtR z$e2Jd7~tni;GaS!#M4y>woJ&U@8AuOHwr0>NJ#-dm5m%sOl%zA+d8?6M%V-Rna^BB z!%0I{hTF*2n%>aZ_MHhm$lC6)3K%bl8~AE%;$%n!vbM5u3}=v96#7N8G`6+97+B>+Hn$=FMY6&wu{((*$JxZ%a0ge}@GOkm2zP0~0+X!~a_~Cv(&Pk7|!s{#5&CTz{J5 zeS8?Vf;q^kL_8kkj}Yy7ONOuYXz^S@pBx1)b*sydoDh}c>K6`lD1U6#L<|9kO& zR{W<)jenbDV`uwslmEH$pPG+D;FfnV2U;_HoI`$~oBvzc-}`wP9w+!e6aHs4|0xBQ zlOLX!;dyKD!&fb!34(zMf=P)Aser)u(qKTZCa1gQf06n8UUEl&1r-+o5vuY+B{ciT z3sJP&lFUr6Y!x9|N^1O9qN3cAm{8!`%@<4Vcf;;OoqeXRHM3SRi$m_|6tjy-Jgx_K zLwifE!(6W9q^zv_o>|dga8Z9gf#NcP%{fxLj)m6|9ntiK~Y-x z{ba00|63pk@rsQX=I_luP=0=3VzLT&;x2wq5Aewj-1@fx1>kXTq2GJu{)Z8CtYD?_!=FD;m`1 z=}F#xcXKhgyx4fLzSP|4aB-m9;JD@DRD7&C%Zb4z6-$nOD>NDqa9N5{8vN8ZA_7Fkk7*Z+P zBISayZpG2dk?oFzzw__ojqYRP|OGerT z$cBj`;lwbT6b>tH$(p^K;p#p3y8u2Tu!0hT@`CD}ox;_|eFtYv#oo5r5<=*)kZsn_ zJL#Uxr)Y_(0k>*82G*X@?L7$RdHpU!!JNcoP8?&2b~(S9@*NO;o3G-1+LK^#^&~#1 z6XCcI{O{Uzxy*L6_ltZ(JHpT2KkqHT9k6a?K*j`3YX%;As6>P1c%o;Mf_>e1R?B&h`xRE&nBmjfWHuWDn_-2 zs3NyuTa zCr#&NaK!zQ5@^3Ic8_zTBA@cW1>P*hN7IQ93;-{@c1da)K}On{^R9OBl(`qSK`#hm*;b$lOSLB%4xuhMCMQ{j|BoPSq6^)vVTTvyYVs=2TT$xY|)T)pp*M;^1`El4Vzx1p%SxG$!g=X5K>TY95Eeu(+@ zX8qw_e#)HFa(X!J#HrcM^vagSRPtklsy({k zmDybn7Jf7+Q}iV=WGpl|O0e55(TaU~9q+XLqc2w~c0JL2oK(Bk>WAD5%`Cqc;gpS~ zch?dZR~zd3N!*u_z=W>?mRO3jCz+27T*P3yTvtiU(c(veJOd>Ejm+k73dN__bTJjJ zSL6^`Kf6A?tt;0JSMa$M{7h{&oZ6k^c(fwK<#k(cJd(Z$n_@X#-q-aBb0f^{-Eb-w zNfNUOv$GIX+T=(%qVV>tSvu2CXjjCcRIZw)(QL8$Lf<1Qg-oAWyj|jIJS1Y4xCXDg zZ)m!xTx^z8aimhQ{gsB_@jjihz(on7q8rG`q7v%3ghQpG`2<1swV_g>LLLQ#;jl^T z?Jms1Vp*na4yB}w6v(B;94t1z#l+yGkV|EJvpH*)5nsp30F(Wq*89P0d#)@c43}e= z6j$3B5tm=5?Rf|clPPaG)R;2u9l6XHI~ zE$(=shd0A{hUe^l=d9V{(V+9qNy?!JEC)Euq_hyfCrC@zhL&P{h>xTm?oTFS<)zEC zzRL7&gClLVHTtfvx-PqqfOJu>eLn^S^jcOln=Vm|H(_bKJ}bQJPk2wc3v|0$O62WV z%W3u-|Ib37;ci--cN31^WDQQ}dqo4=gx_Pj7vWp(D)X0CskLq;!8(!p-A`yF9Ro*5 zz!Y^53(CuOa82z|!HE(vnjPqD&z2;jF_oy5F%uIF%DA1ytIIURacjc`MxjDM-!uQ( zBh!$UWj+7e?r4nNp=3Uu&qjzg=LfPkS?i8qYv6ppg`S+^Z#SW???r_YPq%AtKY1BZa6K zbAW_Kc2dk4?zUV3zKso!CluIBqwBl47h)bRC3`B@p(jWkB$ye6%Du@x^j}N@ZL_M8>70fTfsx+p35uM`8dl04BYo zS$^0Wm0xgTvj4|2CP9bi8U(m5?Tmewi4UZJx}rg)lKk?~aK|N*W0`dcXV7nFw59n& zr1RPCbRv^ccklLi0a*t5&YRUs3fZ4`>#_32Hxc;VC4Sshx{KV-#{QTD=%C;gF=~~< zC^(vSbbs#sKuv8_Zfw>ntaNf2xSl-1|?`jETZ{Z>)4X(8Hn|YHg|vX zxtx{ z|HpjQe>fG7OEbBok`|@?7oRRe@xlo(DRQ<%zPyls@~JE60IcM1@0EUrNIz2moa#Xc zevt9xS=%T83-93<9slgsJ2}8ZlP~!p76hKWrH?$U!o(#M3C*)-4YmcIeC!ET@BIW= z!7~8EdJHG7Cj8Vo>N3>rPbRpe>f0NY#mm6JR9r&{E%kpIKG70@#5-?@4IrQA$V12{yBqVBCd||D1)I<_3qvkM z+Mu83=n}yD;S7}3$WN{Nf+z$P(GP=ske)&P(F^cU9DN02{O8t><$SWqmr%fQpVti- z*ekY{%wF#2)_dGzO)k1He;?fl$&Cl9bfAOR?=r$`{mhXI!KSd6Sn zQ=%(*C|9w>m6X*Qy28bA;|JH3wTHK6GbmJj-jU?Fw{1i#7wO5LVR7&vf{7=DNS+WA ztPO-0gGJNX=nP5CpEZM{7~qM6X&wvN;xgs3de@wsW!+*%ndIc(2^d7#gw&?&?zwTqO zCP!IY+O|@fbncH(&v8@c^7{Aoc#1RNI}^3*Z2Aa4z3!W-GI~Lf@1k`G1RbPC-C-w6 zDeSBBg6l*c&Z=Fyhy0!$iQaRqt(gQ^QzOZI^G)7|i>`U1Auk=)x{Jnr3Ki zm&?;s%Csh%mUGi9d?8`_*CGYz8ES2;uMx;+Om`-VOg{jCW8?Pfl-Xfj^2+QxGM!$vcBzh78Wez3!ubDr?j#EaL3TZyCj$^IOD-?AQ-Umpln}jva5DFy}MsG#0`rQ zT*k5Fp&UWLM}3y=)=yhea8smKmK=6_uB|K&hY>nb=;IGyaq08@Wd=UgN<0BC9X+>g zGR+2y_@?7-T!)Q*4D-=UU#g4bb3V(d(vyf-5LR9{O}BHC68-NgB^iiry>r*l2Fe{_qi(FpnDFSdAU$B?}>Z9+OSXk&3W zS(joFGy)^UOnBeuw5?=5Q>YkFyZRl#qsDjFXWaw->L5|P{dO2a)(*31H$ww$RnYoy z+I&+6i)(o*pSv2pehY1@ObYo>GF$9Bu}{g)M>~S=XUo)vl4Ce*^{#%cMGmo_I}a~? z_dn?hMl+pc$B<;RoM1epQ7a^xR}CxEIJU(?v8L87jw`)9m0y#+KJFouZ5Yz7#TtVd zgP3nNi+n|=)Y-&P?wKZFn~vs)>g2pT6)!>PsRGQu+0^OtW(gH+3r?O>E$QXP=arEA zOer;KshFcA_I;&ud;EtsA8R7LJ{$_ymC~pI1uEV4gd;?S4DOkv;O9qhNdQ^_M^~z* zz$W2ce}9z!dv{u0sX*GAm!6oII6{ond1u05Wu;wmplT&K^lNQJ3pF;23G?n)E9x11 zLp3m&IAitz=vNohp>Hi%Wh*&QKq>+P1sdKEoc%yX`!9{I2f?2D7tXCmTJ1_D5(Ob{ zSw}G6PrjJ{_)`2q>nj13pm?gk^1@fOR73GKtWXsFJnUAqN&{X$ zSLEiLd~dBZjA9@vvS#zJ)#PZU9W68mB^?K9mi3HYvwq49 zs@$G!NozAY>iWg>qj_1vLFl8{$7+*xYYg5cxA(Qy^Wb?1WeSqEmyO30cw+Nj=5Qi~2i)ywn zdF3SqUCeeLt|a>3Yao7L>!lL5k#{QaJDh9Q-mze2yZ+dE!Df!#Aj0}&|Ji(fjwdwm z86H+zxmX}uuGDNSXL7QKU+;{yl-1*|msu}1zhTJhLST@5kmqNDfZ`(5_dJWAg@VWm zA|FE@Pm)DtO>urbI;dGQ$h|(mYBi&~T5D zC><~FSkHd7R0oZzCXara)$nw?U|-5P!a%mow@j(Fw%N%EJVNJPM@pmF9*#1 zj|+d4u+Jh&r>~JnemohG>3_gu2i(fkk32_ju|tuaj_lUPz4dQ{-5J;S6nL#>h_xPPz-A3ZvmpUKOH|3_y@v>x$Iv%+j4{- zyG)j-CmyeLbCqp%O_iB+2BXPMcXf4mdEWHT+qU9kHvZ)Q+h-y~zs92bhmv^ITORIjBnSLGg~sz`Wif#m+(NJQdWR;7&%Jgq zm5XJjarpkv0H7FsGXZ{-)l=X>r(Ca*9wDI&puRME4s#*}62fsgvqKBQy5{feIuQ89_9bmZfwrfVD{h^U$?tYav}Es4AUE5qP~$8L$=;bpGIc?v$H%@!tz78PJ{7r4B3g^;SxY# zGm|hX2mu@p82~@Tu?9agiKMG#MKKwPE4ubwl=o* z4sdZN4k_&Uy*1RK3G~|J`*U@P2$=M}2(|2UyDRQbGe8FcPGSKaaVvL?j8BfBc8eX- zHHJ>H?w^%05N|mxQ@@=yoYwS`)l=n*Od507t>?{t-Rh06I@A^E&G~+8jzolHAmYOk z3k(+r$yYpH{71Bbs@LVT64ZWr@;y?ZpXsdB<7UxSeD4*t3T2aA6O~?e0Ilw~iQo*) z0jAC>^v!Rz1_zVz?u>XeUQu)k*_b=(fYNJ#Hh*J2p?rE(X?T(o zi$|s$^#sR=5@4ZZE{j|ysjF=UUSo3^W|OKON`^~gAjP2L?EEStNPe4G5fGFLgevv@ zMZOwUd+9CmFE_!z<-aN3FR763mPs14*yA8oG)@b)L+ntVtud)7W~wM+%N@^^LO%_9 z5#lrtUqt? zb4MmwI1YZU-PQO!F0l6os5V0>Y_UTA&`Eb9N25<>gdR?mz<15zaBK!sSo&diVhm&; z9)?Zx_Fjt)mGuw_&k9Pm;YXeaj>Ac=c}3H0^|6lA?v(7D<;;s!JTqt%=nl1>$sA*j z;5X}Y0CV{9%3bawLKCw~$z3P9lCFp}i8Gfl55PTst#G+s8n-qbNiym%3uo1bA+9dL z`Q~T_OGBL4U5z(elcJM6n8X77U&kr{Ye)r3)f;X3PbZ|Oh(|^r z-0{aCBnN0`Sz&+RkvZxlYf{-U_eG&daWmj{-Z6%P;3Z=Ospx&!z^Ew)j;(_@df3I@ ztkIO_gUkLBoip3^YeTBr=H-G&AOh&tvet_ZL-fZiI5CP$%6-@5YL;%}k2>4#50fVu z{ifP^zV?XPwnUvOjhsOHOoJwYPTxk@cI3TY_@u!4QLapq(wrq>G-Vhn)=6^HS%T)x zPny4;Lo`vaEg+*bBHp|5OVT9kN{a19t(!P?0v!$CTpgPsW=U9GMQ>5nJV4*>6OuG% zuvsR+;m0$m%ej;Y`r1iVT(S3Z2&K#Nr?Ig)^`f470ahWpR$>XciPux$vJLhtkO>=j zjZ`(eubyTPl{H?X&afsWbW#;RZp2{bO_*lQzIzY$#+4a2u&ra*XqS>}Tv~^nQLS6q{a@5H(VZ@vd&ePCnsHjLWC(y}zEj%E? z@9vMo185{nhV;m4XYj3}DmN$;r2F?v=z_fnex~D_Lrdx%bbr$%ZSt`7^20~5;?>wy zA}bHSk^Adxm)S4cLelsu)t-zD4}{lYQG>&FYUgjN`9lBKNnobhV^6zU1NO4H;Qw|^ zv8-4xKGc(EQoU?!4d^3zyQ?R zA1p&u4+jjh`(%`Nx-?o{;%5O>>xcb~V~e1Lf3v50k2688SJ-J+@Qf`s{>2v4!mj(_ zQYqr$IAnm2kC4Lfs@c!MU<7Eb^H14lq*nHedU5=Z> z@rSJs{69|Wbr@G_M%GUN=P)Kg`0%kzyUoIT?UxU>9PizCCd%=%h~@dt;sj>~liA*K z2Yo;x@V-5U&CXZI5{>~<q0VM8MgYj6R2lUo<2(ZofOTH$iA>y}Q4^if z1{j%K^^tU?CXjuD{aWB)ihw@3d^%p%ATW0NvkWgSi>Xp7faGD{B~Tg}Z1KEV2hQ^5 z>G4{REdDuoOFDc;EQP!@kfkD-F!Ow0zJwbGxc88~<m{pe zgvc?VBkQMz-v=E)zQ_dJr1~DmA313VvxM)CfTYt8NfAYJVUZ1h$6(;|bS@z=$JO(rMSS4(vZf<@oyErnxS&LE8FXpXCYq zLY%*GxH>T*F#za!)Rv~q1kDo2N)uGABQ;j5(Kap8Jn6&)*%bDV-nFfdi8fY6-zrHl zC4CG%Afxaz2LL+EC-b%&EJ)_@3hifuEF-;}blPEpBAUVAumM13Fr?(I&0iCQJ8W;1U}LO%Jn(h9i4i4YSU2%LOwDqT>zQD zMCCF7J=T4lwmUBT_lJu=Z|C;d0)eu)=*Nn6+bFNj1?(MV)jLhLb{I=EcNU8oIR zF$nm`@On?Z_s^J9< zIC@p-O$+_8L%+F*IUM9hyH!89$p&iMWkaO1(l%{2@n)7^Yn7|t$yE5*RjJk4yH+-? zb+0I+4 z&p(f%gl6{VzP??-_AAI=_>Pj|%&GQP^@|Ya>P*|)7c|8^m;{Z7&dc4qIX#3uulFBw zH-NS2WB?D$u)5XVm=G-0aFJgY5p4so0lBrlrz*2)zcD|_2$|@Mpd8`_KVP24K$^V- zEk1bQR4{pKAXmkxH4{YyE+m;vYD3r#k!%bM07*fT_2|#HIQSre>mw0g%zWv1>T2tG zcB$+u@?pdqA5=$ERNNyO*<{YKQgN((AGg#|7?6g=R3R~!GhYDMpz4Pj<~@C!X7wmf zZ&VNUc>E?63bs9Cjy+%}@N}cEOD&#Tr!}{hI0H;DgU6(&C(1Bmz(Yh(2!==CMP2~B zEY=hky3CP6J2VP`m0p>5Lp&U>!yhWc_Y&AW=#b~IiYxFf8KH296A7qxr7y3rVYTtq zDG0J z6`RRnuQ+Q;)GPXvTOT4=-{;Wsa^y`|LXLDM>U)~7yQ(i0KQx7Y%oYpPAPhI~$@DMy zJ{GkQ#!L9SOLeig==h_M1~Ef-b=Xcw2a~Vv^g{Y?LjrtDK0W&;;+Q#$CA7J}9KsPH zMD!y3{WyE8Et~_#%J=rR8Gzqm!J?@B0R9Kfr6K#6u^ztY_-=zr?VRE9BOnj;0Msf^ z2%OchX35JNz|Fm#tu`SOO{CSSXY^>e1DHz7btVk{BhFIi&r8+}K{{9gF*{R5B$D*y zDn&|{J7+l6)Tb-{$C+)r#*>HTO{&{(WHY;EUuj!HFr3)y zx$m{-|MAL015*O71Ayr0nPB~&wZeKT>s zhXqG+rpZ}1+8gICx@GRg`vR3i%JUyExFAZM6m7}>hr?lgF zv~EZE&xo>+L-*Tn`l-(Qcf6ZmuVZ^iJB{6I9PdA|K}`MLQ`_l!Qoi}n0N7DnPScKd z;3$>^&Ffim1uF?;rNBST%)I}L42i%cAiOe^{qYb;le7#edyqjV*v_N3v0w+|{sPaK zHtrEpk%tjl$4E5qQ$iu_Wd6(JaDcbUze2XT-NXM2&-@+~ye}mmo0^1!?vQ2k##1EoXg;xhNs3V1zA(61@OE?x zKhtgZK&G&JITCgLiP>)5i?x z?Hz2D=kt>Z(12R7=m^i1E`eksj<0~^L@1XgM})Rj;;DjyR#kD2G>J9 zojvLw{BGxaR2VcWQGh&091uZ8O77+~W&%o%N22Enh~JGzmYT;Fd4)f~<|gX7NhL7o z(|->{iL8tud;<3^aF_9g05>0ssKOxSq4}5^1f&)xLdz}3lTaB491`byG2G4;vki^~ z$Lp7092lr;F5RlAIR3JtzLbyk?I-8xaiEKVP>fciUg1#+Qqgo0I^n)UCG_3`NPzyh zJDWBEoO%qgkvO_3m-~5X7y*m;RH>#>aVe0uVpWb5OQ6+UpZjV_E@Sl3usaf$B5^{* zY3tm&FPW``_u}@HS*e*6%SYd0TpUpQXg;E08ujwHmt@kC$*ktPPB&vz zcbiJzS$*?L=dw(g)jwEh$W!i#h!ODi0yI+*fKEbQ+~X=QmEThfb*?{wE~QkvP7WZP zC?3;z053;|g>Rz=GBy*Gp&|0p#c6NhyB%J1J7>ePc2HwV+{T8BOx?l^p9!1FIwElFku z(E%b5r~N5ea@kbMN6FH3qbtX*+wWh*k!r=pys`j5K@?z5VljISYWucb<>1OoK&`E& zRcAvts~VN%ZEyi3y#mu_!5{waSsw%luXxH-Kp9J=-{Ntp52!R`Ya~1$nz21-1kOKW z|1K$!^i|&qBJ_eiR0G&JfOZN$NeoSu;l6DB{qvJ4KJ@bW{#+9HEdz!SDlaM()(qW1 zHlz)JoK1pK6x0D7SC}352Y{Rr0aD!Sp`lsf-$q!ek#RW8->FhGvj#v3)fj$(-6W6dT|)nmBS zZ+->D5n7X6o{MESX?$i8nlNbWp4U!~$}(1)31E?Jtj-Y#LRcfWKVs@dDdkBwEMnFR zi*~r|&yk&O4zV2aT?HBWjQ+I2NLR#M`3DA# zT3io-=LATXTrQaum$ib_K8EziL#+JzY7jw8$c~ARVVmdMkFa{W*wFS9(G2?hYu3J; zZWqlLGRN|h14@+!LcSajXMj+vz|F-gnRm9-`*esSPowJHs_Js9w?6+EJ07Q98z?G$ z+zaE!{wg1Jo-nd=mcS9Rp?A#$Z-5{T$xHi+8IoG<*nI)kkMDjja1e7EJ@ zyW#wd9R9aj#9#cObQ{xJ?b`3haxP$Hzgo@y05N!7Z&PsP5M*;KgTCijr(yUd!V(k# zR#r^IQ|a`bM{@-%kKN_U4(PXf1*WMcG4P_P2ne;{e(3B>i0Dn)lxNMo*9yiXUDTFTzYL(r?e0{|(~F;rsH%vF9NR0FcN318T^o;+|p>56(f z&R}=@9(LpYlm{Yd;nai3=(q|<$AJ4pl?OpX1yTTD|(%ofI>!=ov=`x z^#%hqd6zV2DESxA@(Xn)g0wP(8D%UX>42srR^-&1(A$ca=7?QzG?Pye`$XTs`Af4o ztEkI*FWUGfpp=nx8{(i+Y^qOU`lzYAgmq%Y*a#akoWeHYkN0{o!VfFNLjUsy6ivCc zAi;1Q&YO-f`e4ZgD8`WL9&Xpb02B3|HFw!tdO%IuhbioZ(fP8Ivg6%T!ZkS5$CboL z<*Qo*!FXPDu*CySkssIk$MyW=(s52GyXUN3#rtL^M?8x5e2@U%Sk^m){ z_)N8l&-JJP6jh*6AN5o~H2RnkokKHne-^5z0;HUM=tqR-0*G)x>-GQpn9D9mIu?_@ z*Y6i*^qzVEj_b=(AUDI`HKOfi@iU0$Li!o<89{ih79GPlZyA-BMm+Z>0&Y|py{E0= zpIG5BQR+KG41}{hI+{;sAxaSM5o;T*EIdPW!M#VUjbC0G|DWdoaycfugMXjw0*td0 zS$*oc2dF)dvO6qJ*JtdC$^(?V3!eZ;k&nTj*$wDIIuPNX!D0nRC&W0;~i{-jokMhXmF ztM)xHKm&$-nSPXqGXQo|%Z82;IO}m#+G^yo$;Nb{$CggJgE3^E)<+WM)haaCoR*z; zC!%+O9Bj48Kx+Ax@CckriI!@u)gm?E2t&UpcEMv9KlnmA034&_E`*8DShkp~G9ZNC zc9o@9$_)lEL+_VefZ%Yr{%sCOi$n1E9Xd;DTPAaYNTpw0aeD!{n0aW(b*UunYE~R> zo5MG|dqj?(ox%oI<})Xghs0$SE{jX))mW#n4%atk#CMnsx(;9GN;byISd{Z+l!{fT z60=Pguh0C1+Lq}^NksuU+2Qn1=j7%6-A&p_CsV!0hP2=(98k8wJ*CBHIUp7rm|pfE zc?=1D^xpu|Fboe@V!Lche`pl;l=Yz$b)1O`29lOr=5MM{R#$>ovPUlr{zxT-q%!69 z=ah8#SU4tjk8cK(9QJ0IsB{XW;#B2_X6)AW%Bk9QxdoP%+j8dT z#j-btdLjz{Wv0q#$&F%;coH*^q7|yOU8Z+ETtcc~>FAc@S1DGJqE;=X1YV1Z2j*)) zUEh-ow&W3$ofKV|E?gc%pmYEN=Z#3QPo$2UgAlGjZf4s!19|vS#S4(Ksu6?&^hc$IdRK7`@-WNFtYoa_&&F)c3mDz&xGBFjF4wYn34QAWHp< za4y8rDxJXf%eZdiCkz_$$M+a=zad4)sz9Sq^Tq-K^|+omjG4C7G#**i%Txug6)4N4 z(j+{^!(nNPC3a=OhtCL=-f%67sYuxW6 zg2~0f;?D!T4%@)96a!n-VKxtm(L(_L_La`oe1AdWh1>tj_VsW(i`noD$La1xw5Pq- z)Ium*N*~2?MdGS5GUzPGS`kPMWs4Arg}&OP##0ZGh$M*bkK}u8ewuupC*Zy6=fQ9F zxm34KF5PXXNYbRz8lYSUPaxb>Z+(z`P#Y;yb>D!;3sN9ZNBcS0W{?gaiA{Z;J%?EWT8o-HVTdl=M zd{@_fubn=Mp@s|K?Ig~Usf}t#H$BY{isi#;X@E2Y+!_<{4Ut3yUbJZL8ZwUg=UqRq zLQz+Zu`JY`T|U77yoILJH2mCMTieS5lBq!=-Z0b zOH7BO72SqqClB%IQ>Ei5(OS6ZA?zYVe(`4YJe0e=TQ&EqFUz0T+T6jbp5kc{9$onf zwm%CfCnv_25wKbgd(%1^9!^IDf@VGPne->t?b}-z(F#XJ3Z(%PU$#jxgp*@sw%>-bAtD$w$Bq*;Zf6ZK?n+_ zLABTf)B~ye2)m{w7f>CLwQpfw2Vo}SEolRb*8Px8 zaQiD8h0;;0f|4n-ez&n%_F$(r@pQep#1UH9a%g9A6RRx;5+xqvylUEAT7>$@&KCh| zOW7VyJ4a^q%ufPE$3BduP@R^%XS79sx0!=hdZ)q95hoih-6wBHjIwwM`tyKG$x2&Q zhfmmAV2hiD`Xq@3oSpjCu$;BL_}S~9cs})jjnvS==Cz)knE$50S9TP$;t@nqlN$=} zy1RD(=&(Min z!Y;4MYEhh@CZ@|@S_|u%pI!7Yt8YbpUAhlFL_L9DjTd%5a!-`vGknZBwJO3&{me$p zhUwu{7(Dzg&xFQ0C3GZ)ucqrE3xZk^Mjk`;%W2<7Q1{$bD;q@NEAhn~e3$D!Z(zL+pXH?(uO{g7MM9>26cynG4}RR7Zo41i#)d zJyhcZIjeK<3NIz!rTW4^=`~TDQR4@?WG^2e-hJGHfhLBjkPyePWUN%J&);w14P2^} z%!4HAtT2H!6m)8p!zVBR_B}f}$(Ju7 z{8$NVGIfmkjO)H0mTz;lCDrgL$rjd-xkt+5cgBf~TE}4q*PbdXDsPplxh3nqLoW}d zdth-~M*2ZY!=e|;Pg{pIW5vB7Tr?oCfjU*rh2&Z!NSNLdMTrgh+L62G^J|&Q5z^}oA!b~)4 z@cl-H){FyeN*0VuM+vK;i5Nm4w%6O^_C{?;_2HPS@q_p~e(hVOwaESuD9bi1mgV%B zcM}`)+@4<-?)&ILTvCpkpqFtzPxjgy;=s3ydcfqu#q7^aX)F+&I%D7pjpkPQYMezs z-#d4AP+T&hhJAm@!maUWw%{3zES0xX4&PhXa(mizIT1`8 z!~rQ_BOsG**;+i?Nz96jKjjWum*Ny{d%{gMOGgv562X%B(law^MCigi&)sA$980D@ zjmnFwd+{rr7eAn;xnhaiWs7z-p1R^Npb1Z9;@ogu67_REVxQ+ z!TQCx4dP7{s+zLnt3lg-L^&?tVEeBNfJgH}B050N$38)EtJJEmmfNefgwY+5px1u0 ze)8sBv2D5!%gZ@ouTvxpuoNe1Q*6TKvRhT{W9`2iQ3i9JzZU~t`mXmFF`4R=M^UNQ$qA69yf#>1YAHiJQc) zez#$!>bR>piRpuR_U4SmoKZ(5))#H>YQCC(aE^Vm3r?C~I`?7pa>Q&%9gvH^jdkD~ z3tkjDgJ%%&T@M?4vk;W0TZ_P84#9FY*x*Z9-a66J^v=+h?R1#Vrvt8UAekn>Ae8vS zktFXSpD4ZW15>`U>Dns!j+iF?1;(XjG-62QIi@NR{xSYZNr6D|U01c;(D_!F2WU95 zLl9o&C5XBeCx4Dy^)QOej=%P>MayR9Xjsbd1hx#A&fOrnPe^wC#pPj5PVe;|%=p;L4XirL&wbV@!|%Rz zf`z+FsBJI;kITdEdr+32ntVEL>}(AA(oW6X@Gbg@2sP5KdD=<}NC9Guf%oFhv)8#7 za6JXE8}n?CLGDqEDp_F9!OP6c6|}+4a`~O%U#?_Zl#Y_BT(?)j$3%E-Jw7B7NqKnN z^6yQfUJZR)#7#ICh7Ju32+Hjd^^s~y-HKI9JUVRqY{7`oI|)DRb~z1Tzm#Vv@64Ag zjaZ4-0l>9u#;(rzUQ^khI0OiDhOsF4k0Whf-^B#t_2F1#28l?o>h$sbP|WrXS3v$wuL3_7T;OC)r}3~_t3ER( z&0EoXJI3r<81G9{4= z5f7miwkH~I_s3jDQTCHQL8YtN%oK*({Hc0bR7t|}f=C2{-Jfqyt&?`nT7SXqEcU)- zi9L4Pyy4biXYCla1}}hUJX2MUjqKuF$B?hVMFbI~`Z9(fBTOsoo$RMR7sOv8boE1S z?#R&a@xbz0a&9iy%~>(4%8Bf@d0-nuu-kI6`FuR#r0>IXhsZG4qx=9m8dOBlH(sqs zclULE!n5nsZ>13UhcjG=b(6tMr7g&(_2zw;U%GAdYw{P4ksw`%5*SA89^2-w z_}|;yxBMcdd`c2(Su!Z4M$iiY2U$7PyVzm{o8{b?by8i0LhY9FgP1gJJ;v+G4!WcY z+Zo)|0}+ftx;MzN(4>R(T}lL{tV;#s9Wy%!Zq``1rxg%&Rw;=(>}r3gVY_CKb8+?E zE=(X{aOXY>YcRP`t^eLH5Jpx}_|S3{+mP%k0;{g6$2#twstR-aq}!r~edz0s2bb^E zHQjr>P$?Bzj=!^`cuT$9<0Rq&&4u0HB#|FfFrMV;-+|)X*JE1?B}2zYMQXaSKwXwa zqscW15eybd6Q#FK@S&E~>W#!TTkk(JtkLdqww(E5u2MkYJF0N4>%nwo-;jOE7m(uS zXi0pU^+(csopgtvk0Y#Tu6N_vElR=Ig!Psn30!mgBtE~hboNRwCS~- zn%Yyyy}?6<;}%^2X*2@(E$#BFKoGMKJrQJ~qY=Dw9vc?swE@p^60&!F1Kz1PS@Nyn zyIf+jy#w0_*tbc4tgJmF$;~kgimJ9z0B6-Nx_NEJq_r{?b`XuQWoH_)GYjG>e)+fD zbp8-L5S|O3nXiaXACpZamIj_P6olCHbg8=N?13PsUFRozoI$+!7a1_#EYg_O!>k5} z`%seY?UGDzJChA6`ryR=O7{mMW(QpToNtc0HF7l$?AJJY_yLMGI!H|&bbjyN&qj3H z>=?D}`6ywh6OnV1NyBtNX8EF`mo}3k7B_{tsS^vEqDn9Y{3Z#f3|KLMcI>eC-)165 z6OQhX`e-^%5|`-n_@TXZG9^lnmZZ~Uy<89)`Z5L;!q3Fw%e(;ywbozPo^_db5I#(o zFqbm>brdl@5K-^;xV&ub7hFz#B2?uS>0+@On({l4yp3Ex5h&!V3I}JGr^UH=m^Z{M z(o^;lI#Jg?I>PGZYPv{=7`g5zr2kOR3jEIx`0tpFi@A_{;IX4`VUXGVay1XWTsrk3 zYrC2@^W~SB?n7^8XN=1Fne^iI6CU~JL8^2~99OM5An1b)wAQoL@Q4VLohpBSq*Pr6 z1^foq&-HX&KWoker{Xnb@tJ-=yyry4u;!7z6{7}y4@IT1F0c`zhTW*eN%z*C-9H&* zwt#W2W+kQ33OdJ#U0**Dilq@2cd~bMR&#%+a<&mDv_^m=u+IsDsymvl<-fpu&e#*w zWAuaa6hmmF3zf`H2^^ zTe!p7ZH(r4(H*?eQ2!FG3qjsEaJR<1hag6_(>kZe-JT;y{=?pmaTz-5)ZXZn%o%24 zqPy$2!W39pYMlO_9td7N0;}$L@OIS#Y~E0wT_Yn*OOQbevLFF97Vz?6El&yIZcIZL z4;v{fy6(VoWMLVZ>%OsvE1BQ|La2J|@YZdr7Z_^E;K<3yfp)tLWOk-LTb zfNM;s1|yb46KL|J3Ugt)Lc5}ly`r*hO$v@XCFnmAor7YXStY=0-Je!7k;?EW8qidE z(Sq!1pxmnNQP*>!*(ZwHIryRra^4$Xt2}e)gz&O3C0~~y(dA`R?iv!fvmPDxv2Mj$ zrpnHCqjRga#%H7~wp(ppv^Ov3vm!njH7+oL$a*gw+zZ(QfIb$jNXC~WV=#4G#N37< zt^#5iQd_2L=IE9jE%0ZL9k62gq(CX5EYamCk6Of9Gr>$)mv&6goK?Hs zBwtz7|LCqi3vDu=2AFY>i*D`up6@;tyV6Urdun4?O_Y7t)1!FGC%IymHF4K-V~&lU zAd-d?O+q5V1o0drOocLYiuN&K0c)XatXUMxR?CAew#ASfZe1@V-5%d0w8fT4Q%MNU z>2bDUNHh8|MD}5CRebLP^WYGfbamZ0a({K&=wKanIHpe@6eB{B@H(OTDpOCYH3(|L z1SOb2=o4gVyKpf02Y1FZOcIdFzx{ktu>cf|=EoejCpHMWASw9R0@6p$ak5HoOMeZHz_@mmlPx(A~@XI$r87Invp4t?A#Y9;XmG`SZaR|(REqG zDdZLR^RUcS(d8}$Yqn|;!nR(z%LNqGG35^qLBz!Cfkyh-rScq1B=I%ze=2KUfZFrBrD9A?nD-yUeJTG)>l z>ceF$QyAj6Zc7%Ia*}pZRc1wGf0A^z~ z0~`4KLQPVg>%(f;^uXwuw$N7%kKjf)sZRE|M>Sj|H%hv-j4x1?R8IWcSvk0-D`zq0 zWvH%+M-i59K{zJoPwT><4Rbn_(S-)f+raV$1de9JhXJ^Y7&B@~~wqC5*8eg&dq zTX&H3t{`D)x>E#uliMZFVYhvf4dWIBbQ^I(AE>UPy(NI8o#{fqRF>SAYb)G78k-M7 zh~xKC#bd9?)TvSwRK!;86TuzSxq-4mUPBj;FLB;J9xoUdn-CsMB6}(Ag+HJh>2Moj zaxpOHLM%&gM)U{23@!(L!%&EK`2_nS2Z<|X@-}mr3ZNGLQ3Zff#$Wv&xR!x0AfPaxUgVFT$;Bd<9uzJFFJ~L1Dx&=k#^b#DR6p#c%SM{edN3HZ+Hncy z+^^qp81~P0!78T-pJ(XD$XoK3SFA{U7zc|WO5m_yBomG~F7qI`dZ6;nDsHUQjJ-fP ziMOIEp|-g^!SO1(6o>Q-%rr#Vqifsnw%}C}Tzqx)c#W=t*29>=sAk?mUz2m0&`T%K zahCHECqy+$S_ln8DEGmdYNFk8@nKnnKdW#|v@%H@5qrX+gMy&Vqf`c!Px_GiXt=)@ zF!Fahw%Nhd>YCx{218W2IQLM!$GMvjR;8ou@`>21C8-Vwutg+_4C)|M9K6^aBNsog0Lq zk~P1tPj>LgW=bbRjDa2lKV=N{+*P#xVT9`uqY>zfqKzCNIpKT-M?|}f02g$N>odMe zfj8Lw!q8zb1C8eI`z|Pzx_U+9&o-yvr;UNx`o>Uf*8dbzj5@1=L%xgP3RkI{!u#NH%y=K~vn=CY-LoM19S3p;@}qu5fx5D6P8`c+Or%oMv1YY*(y zSW}+Q^!!24lE+=RY6e-Q>~t~s58?NLQQ>M-(t0_pW4UV^L0yskdY)Tb#*HLh4RJ^V zkGfPottHwpdt4kOW$NL$t*{#&_sb@wJxMHOQ=De)J8hBfO()EA?M;IAmvPEe1m+FP zlc=(Z_v^P@Y$}XtaY_6}_>SX#VPL2DhATY%Dd`)qumaNc*@M{vrS*rs41=~aQNDPP zNM6y)?_#?dSQMXUQZ`NRd;{trwc!wH`#n2Kw*MR`@gCNp*D~+BKNwm*nW~e4Ln5Ab zB6dCdo=YHYAFOw{pi<4lF8?{FT%SFvpX>qKJO18@Yij#P;>h!E#r zC6&*aT_ZuD8hhh?Od>&qJwvJ2m#?yOw&6ufmdqN8ESPuLhP}bPvsqqmsETa!TsR`}Vp6?TR*isiDnPAUp4+&d2y{~1A-1Q~4*^!5ZAp)N9k#8pylNrnILfw$qX zwMCqLh)_RZIG=iP?`qm7^T`w}BUt+V`VQ20x#|(Lgb(>1 zouP!dw*}A7r--}2O(7wG4{m7%Bbe|uObAS%85GyS<43IP&IwJLALsTP)B&dFuL-3& z!9E9jDrDF(U(jvNI_VE&n z6t)`t^V#_{NgWI+uZu==#WEgyanAjFiDX!*Z5@(VNEp5EKYdYoI7dejwS_}8&&%yB zj(3>mNssLXThyGo*3Ey`$teV(*5_VtsdlAo9>b03?u=^IjA>2Q8hE0Db8?VWYNkD6 zEB1XW8Pkob-MkYf?-&noMd7yMZhwQ`)yLRo{5YH@>TVR-FyNO5`gSumWH+p(N&C5;p^SPBJ~#e zfC9gy0MQ5EA|C09I&_K^K3m+!PE7YFpZBX##L}7@BF&j6NrZ;a9guoEFnm|zB9v&; zh(xr0r}_1rnaIrBZ1=bm9$WK8I6pX!nXQz1XKu!RhwuHdSypNEoSLVdtO+#o?L2NjS`Zw;Sc z0rFE4; zsOa-BQzfEb=Sp0Ktz*Q`uc*ohSGG8~Noc$6?oAym{%W|Wuu`lU&{KK6!%u?9 zsEGH7k-+o>pIGtF#q_tV_DNTmDsbs`a$Gg@iTX%eZ?PMRQSopwP@g0k^j zd17DtcN=_T$Bl+>{huq1bLWR#ABeJ8LYRj&JKNnPM38PgXqkdc5IvoZIZ?)80!Y(- z7Uj7u@v%*~hJNgZv>E`L2;rrsV_ulSNVbh673k)ki(!EZ0>&$?nlUw<;~|oSXm^MY zKcAaz98X0;M2$+*GYMy$PG_5dr()5`c1JcWMCEcZ{nttDd3S_EnS$NB4T)E1#a zzJQhTEn%cNd%ohlHUQ`Yv`TM{dwj#_bhgHR;kZK!Pc>{dUv zsAO?H0^zYS5r~w;jo4Rv-7jMhgMb zb)0PDTsEGXgYd}#6sOC0?POR63-jax(Xlub}^&aFS_;77Q27FI>*Yb6scQcp@ODN-ylkWM z8Dk&8XAbBGTO`m9uXtS=Y^q|476*&GJjT9RxXmig8)@$v*L%=yKEpYBQv?* zICQA@#vMy1F_C&`s2r8>XOldrOWa09PuX10AFsA(th(N6y<@e>G#pBh0T!>RfUIL2 zAfy^dV9?mc&@e50OKRpyzXK@z^mYs7jTmvm;Gi=8{UwfOB#-}s#=s*%mLwBBklC~g zqe7!c1~6Lu1~T|~LKT4ZW@oxU@k@oi=)vWp#e}}Le3w=Vhc&zK!GvUd4xozQULk@M zfEs~83Oo7IA)oyT?!BEnu72Lvf!Im~=#Ee)5Y-3X z*JibqVl%}zz-C!l0S3)M4q9zXECO(-ax0X+T3nl}0p~Y&8AziU0u1<#R#028Nl|?* zPWBl<-d~<~p-8PXI*vTxXw)UZW6}0wVJT|VTE%bnguc_mZe?Br9#n5Xf+jXK^yR?a#g@^7b=yy)HIL_-cbO%Z>CK%iRrY(b?_(c;!UNeMhS1(id#b{s3;{9Ro!6JM*X>kv1?&h-E?hTFg}=_P8Y)L z5^Ox0Ou<#17U={?GVTEz<2K;7fIz!mwjYDDOC<3nQYb^@)p!7;=AqCP!bRx zZom>?CZPa`vR(VHM>3=+FGAz(rGUZ2{0z$T?%zFH8XNp zt+IwG=1Cf9qa{=X_$d*U%|6?rN=gDTZOulPiPpvD;9KaR0NrH^81E$q;=F34`aYSA z)s~2md+9UJDWN|W>)!_A=@Kz#w%79!wSR^mmQ-|#)jN+uqVVcAQ_Zs%UMCRP&erAM zL|o(4v;o!@9CG2VRM)~`_?N#pqyQBvWTM#9&GFp9)QDv|aHD_L8xa}E-Jl*0e{erh zf6vOKSa^dWC-H40Sm+J}*O7F;Wy;6O0mBkld|kwLKRdzXepo=2!OF#&WaqVetj1yh z?+3F(>Lhu9NK3x0-Rdx~J*3&@wK6cHs(0Qzi?Iq=5e>$_zFDb@BV-s7oc$ z20bo%-dm)a<(I3!z`1!&`tMtZ+-WZvLl~*Qxi2U(-~L}7K35Qmg|>;>!$F1l11(9l z;R_-nS5}SX0xx%6AY>PF$wWp5SY)E`=qrS>OB#K+?9WP$CF_>13s8 zZaJ_%cC@n5;XW216DNLjO=+!FS3T>wXV-EBn#m$YYGoPV-LhkWhAusy?P34^leP|A8vU412C(2+L7p1Pq|x19_a)m8h#O8$j!|Nni>)8?-G z&q_o43EuzN9u$O$Y+A^z@ucGa|rYc+iJFg>o z0j4wE#O|j*|IUiqgMlOA0g6-lzxXgQfDhjpjPd;|BE5?S@NX2oO4@&q)_+32-p36l ze?I{y2Bv=hkE3+cH{oK=^S>K=@)z8tSId#lB8z2FAsR?xjstAk#=XnFeDj6e{wkyfvYiT88~?bzK7h6d)5K}Nx_pJ59Imw3a{`uW zeNwqRB}=tiXaW53Pj+wn8aaUMeksiNsqZiGfX88^tvg#zXqzieSZQ*)s|H}cZMG*C z!+vU>_}2{)*q!RjHYbLSOITe3e;@=SMalP}BVQs$-%VCKhRs5G;KkG3(+!cg-c=k5Tire2kAcS5<_nr1`X)u$@`RX`N2qn^?V>%&%Pg{f;+a=2Xk~|5Kt-*IYO8n4DpTzJa({P5|`c=E*F+E%R1+f#JX zfcCb@yJW#%y)wXDXy~%9)3vpfTWDG(YxCEaYE#>vyk^bIt%ROJlXpLj?G83Y)vo%U zpgQQ-xz&D~BaH|QQV7Tp5#!JBluThLY~8Av0;E|c1akoJrVe;t*HNH=EJmAmlpiGw ztii~kQnI^){NZ#7&WU=VQW=G_)mm=mclL%5{9@JCPZ$kjpTAu%-o@QNA5&TLu{!m) z=67imuf1KsJ{(Y$Mq{KX39b@iuS}B%yU?M0WLOsL@!j83Usy zmLAI|qwK(;{VQPeks1PG>Wn9gweiX&8sdwuVU5MYJ)x6;T}9$Z-@v!2w!8PGm|GlB zo&YrMbkdQ71)9!hk`4@)9AS!kiy8PdHTw}j>A`)I_@iLTEWJ}H?JSgYP{ z#}1e)=ep3Ew|mE5wrvOzNyKwA{O%TEqfo4EhB^C*0c$kWC}6nL`56w&ImgRj@s^ek zCaDEShb5Z;AL~c9@mf~br1iYb!Q!qcjZR~=LB@MeU>5ivsmkOfm;K%#0EZKsap81- z@LfG?p_)^wMke}5?uFmk5+}$C%8|PD0bHbV#-n#LJIbi6MTye!Yg8VTW|KzKZNo8x zyZwsNvczj;4dfi}OTx~ewXXG%aK6Z-u!Y6t>XP(Wrh42X^!q+PE}ycrP}c7D#|)9< zHqn7jOBxYl$bQoeO+0JtoVPM?*SwS(j;Ki_*F8%RdE`Wf<6q=zwh&xj>6<))6Wibk z=m{5VUiDlv&zEX{B=A2z47>_{oQF!w_su+byx+6CUUXC|w+s}|?&ZGVf4DPPsAqP` zy#|o+=|gq-mQkJZ_F;8Up=Dxs3=vn*A;M+thT|4I)FCblUc_}Y*wVH`m!QjFfj^0xAs8obP z<>kxeRKN4~hhR9$va37ELFGcK5~VATsaK;!C8G&^8YkBiHX7CP%m&|0;F)DKne+J) zFjq6y!EIwTU9AeOODSw^{c-^$y<1tnnKX*c^;d`U{Jrizha-T|rU6YMl7MUb>L<%b zn{~moJn#Q?%2?+@y;PXSgcI`29%D?c@*mI1S>q|GGHNxF|CP#^%KeqfXfDA!@Bizv zL%cg?;c_}odc(BU_$6*V&&NscH^V;Ucs4m5x|NtGST8m&R1d*(0C5k=Gs$EHue%HJ zDJPY02jf}(ZvuzUshkyWIocqLmOQx(?CKLhB|O2CiX991%?5RfRE83Dyv%NPEZflV zPR=&~vu%#TRxe-_o}T9W$0tK`{q$#SD9-UH`Pq7{RcmX7f=%}2^&|~8>8mJuAHsmR zs;C_{`Ccko3^kYd07+&Z6c$G3L7J}MSMn58Q8`pVb1n~siHf1%2ayedu2mUOfzd9eG@|s#pBs@cF5Ku z9vWZ5a3)7ck?I26!I2foj zSF%+5Stg>x7kK*<%^Tl|TUd-)DLhdA3=EI;z zf3m<}e~y7Po;uzv#)4j%WQku*rynJeN{_zQ)_tsxfI?3OQ!ZY~_b01^NbK`%S!L*( z>t0y&2bZidpBc8_HhX3eVQT;Rv}p0APL}Z3w8Qbd0^s?e{5f;&C4IyyUILPL;@)S; z0dnD$CSyc2n)T)C&0}z0OKaY@Y0{~j3avA9dk&dODjE1)L>}@9`+rWqeJFK5B1$Xu ze|BMHmsdfY4d=31_xVAu_JwF}?Ent%1_Y}!ElDrJTx8?D@w?26OqZKqa&S3F=g-KnaE~-A*f}`4 zV?Qb|bYkS@O6u5qT3?**%EN!&RVtXGieMBAvpft?8Krw=opS(%t@%s6c%fiKsb1?~ ztv+aioX$Wg`n(YKFdM zbp1u!^;&757#p8g^JstVAjuQxaKWaGeRO5F7}<0s-mK2>q5N?DB^4@kn{))F3J_-g zYTp@&>oZx9-Lc_;BPR#nM&~Y*I-{y?zeFga#DtbQUusf;rHspyW==DtQZkoK=OjhI zW@LqAaVW%PRr50e{lMDRIV`?lrusVJg8;2;CSg<)P8JC1l_BdlI)A_&PpkZ6xA1ER zZ8$PPT0RBtGA6yMJpaS~dxOA0iUvS5HG7J$t@pY254=BzPV5EoyPajVGw{V(*9Cj5 zA6-O@e5$6$@JNw?OJndPwWBrK%+Uc)fHz{6lBFH$_4h;gB_<;7Yt|rzrax}I9vEVe zQ8{u#QT`+9p6)nM>Q&mPh6<&n-*=Ja{$9r3?nrCSlbMe1$do3Yk&*zl2qQrgqhKE& z=>IAFcdl(qW2Gq1*}>UJOtm?onf#x|>&@~P>h!M&BRUf%`dYHM1yJv0nc19(@064@ zC%b>3oM0!wZd3WLH?E>*ZUh7QsXzIm9gIJ(q{d6Nc>V;R;8qyc@Try~?Y-m@-lQQp zWWBG!JyEv6f(iwvmpJP)-M4W*Q5lLBsF;I>`?Ee<0Tl{Ogy_;foX)3_U1`iFP|nZY z>7%blL+-1|5tab{dkmdg757;$z}KDcNY}GN3x?7pFDt*LR~U=2B&1%SG0rlMRkc>MVdH1=iB;Gkmhk1?r#{z-{QfD z2^Wfa0~S@KeI-BW)jy@X==mv_7XF~4`vtRx|1mKR!D&|r>^GP)qQh*0--aurU$5@< zod^TftORVIAdR0HjxwGOgp{;eO(!l!Wn?vpgj3z;wrLDX=@5HbeRGfREsXN)x>nUt z3FOo;@*d{-LkRDwpG?=Yg^y)09M3ql=4iYAVEyVqKWwdps^FI2)zyc=;AL%r!z8Bu z)B#VlE^7p*1tC!5$Uab(HUr=DResz4YX`yB?dq|FnVaU8++;f(Fs z4#J#x^=u%^issIVN$3J&^ID#~{$i6MFUC-TQd{yZy{vT+3{w2jXUfYe^P5k1V*frN z@};-%hCIH2qmTZd^Gsi{u8gZ2`gb>FCfh$=Kt(FWB)`6H2>qhUZJz|E1NT}7Yz)lC z%hSv{+zzYH(>YSBKQ&sVbwcL9P{W*cKv4M~=@bz-Y4HDRd+vH%Ji!FN&K&&R^pRl3b<^Q0StM zvI&y%E_@ory_1-%*YYY@_pZg;)U~vA@-^saX$Oz}-H|Ss654xUREX%mCUq!K_SP7m z+}<7*S$gl;3BZv<`C?E-rYJO&Rem^%eN|z_cl3Z_G@^F}&cXSN&a>mL(bJV96Z&{chrhC-I z#}KZSRIvBB_Sh5peMU)W_Y5izs{OX8nlemRtcA);rN`ApOc_|L1YPM|rrnzz;cJ0| zbXiM3u?v;>>QMs@lmGK;!xd#mHF)dV1__!$L4~dogU;x%xtrG_qKv4wn)yD8?sg`4 zBZSG*HB0yOJah$RD^vx64Y5+mmmX@!yNO-ix=VfKh5jIAH7X=D=XEJ>Lun zHtsrf!;{J%W2F(H1j78HfPxlo)|xv$zeK5Ev@s$Lc~_O7>(|riL5)!%i7=D5*6eC; zR;Wy3(H)|1T?%bcw|sq&x}AA z!85akEcxo5?~_BrV^8j_k>;&bEZHJPK7Y>h;Tc%msmige5&P00OLy<|tdD_dDNy@B zNSITTyRy*Y*ix)h{Org@u7V0+` zFWh4O$Kxuoi*7+e$VN(T5zNq>N2>K}x;t}7L~7;(Xcm{KqDlCjSvxhDIhZ!}y7-*3 zf{!Mnhewb4v^ZFfQn5;xGYyX|+U{GoYeS7A8iuN`t)-aBu-sTT>c||F4B*s;2@SPr zvX553QKr1`@}Mft+#RN=w`B32rxi=-ECtr8Eaw8x1<^rh;PkC?RVo5MFBdXrY1Do&X_rc#YZD-J_;1=eqjzd)6O2O4*uZ}jS0_UO--oiv=MOgY*h>tC;r z`c(!-63)4QO^oqrmqe7pFc#1&=dgNmVL|=K!}sENwjj=4taId?h6ntAHSQmNa^D+8 zp>KK(yGhAvd06{l(kV(IA0AhA1>cw!8=4OQFZo#1>asVMOC(iPNQwJXqX}@+gy8M+ zt0cHdUgvAC$qOavVP|?@pkNX}(>>2*#b8oSU*|X}5!J0{QNa->bz}PI>J2JX5gXC& zPH3!_z}8}bW*gJP&7#y$^g`w7Nb+M4ys*C2LTxYpMhlaoaILZtDFF#+Mbj?qIc;NK z&7aUDpPoZpJFeu5Hz4WIFmb|-d&3DWH1(NgWWP!&$kxv}d51BPy{3}EOM zMm3$uZ5hpcQfghPTrj!Ng5jf^IjoDHqKb0kJDp91-Y!Wz#n|?P|E(&Cq)AfF=>l)8 ztT#fZ`V-9_hghhbc~gu;{)g_!ei5U4z3B4bH_=dYu#>dQ(c(F+w8>m8ajx=LoV4uL zp0kVVlNf43C>pF%$$W4D{GTZh-G6H=9 z9F7K;KPkj&tvDoQx*IYed`AqrQox9`HD<2D(U8PIOmPNUc%a#CA;HZ%+pTaoJjKQp zT2{_Am4$gZQr{esa@VQ3$yO1ZxFXOm11h!47X+Z}=4vb1`#4jGB3wGoIn%Sa`c;c0 z0-x<;Y2h6$YsicU;)WO!SdcqHm`P_3QHZd=+sy3FJ;%4kQ@pCfgCne`rRoFSI}L38 zyseGUP8~a}YLhqFlcJUgq8`Tm#6>!Ibt+wam!v3$ zwwN+MEu(0@gmiTlUX{Tn9hED@?H;1@pt29pPsrp(X)Lu zU!L5yeX9mX`#{<4hi5KXe<bo0+as{_{2D&JbVCW8D${y!^!`0#P%+#0ldi*L{Zg z@7D~ZfyF0puXZ;7ZR;RG3N@J%{kZ+@P5C02jb3lPFJGY5R14U_1c?BJ?xz;^4`L8B z@n8&WG&MVlsR>k_j_CpSr^8E)Ad#Nvv}@9G6|r3{RGqvFAsA*CuiNty%lxB zarre_pm3N7H-PmHwt`jupI3_(la-;d=Pcz~^U(#ae8;qG?xLrA@C zf8X?AKFhz_d`8mk_5fp#8)$g&=5QgsRx{&SzNN}{mev7C>W zX%aSgLd<_$rD+gYphQ=@(i=f+{R6g0``c1Av$Q&0)v!SjO{ti3q#J?fUTNiGbA#?T3B-CQJr(*4k8_(|VBybNAzg zD)G0~YaB++=(i+dHBP{3J@H7!2iY|?P2yNO6~?!UoUsTaQQ4U+VEnc+ z9eUGvaLJ(F1KI$nrJW|H4^ZJa#86mKsR2zFD+svt#Bi8 zxxN?|qN@UBMR5P8!mAB#z$f#Y_k7)7%(e0q+{lHl&QD$UuxRsQu&8VhXjhVA=Uxb5 zn#jNC_14!`5)o6O$#SJuX8b}V^J!;_yLjfN`SG+VVhD6{ol5IezjiY?mnc~A47A=d ztZ#JknzEd9=CEd5^Y{~?;5FgJch=BH&Dz>(K~4OwA!~b7IS>Oq<1DhSmNl^V3E`?q zPayH^Gs)XS4(=9PGWXhIIp-&^kl7ht&Et4eib;M|0{F;eoQ~&70T>BQ6$F&j=qZ#G zd@yOgbURe@%y3r#UEd6ZDh?r~M1Y$v!U+7AC$;D*l#%t!1V8sXYJoMc+q8<1%w|Ap z53h;2?~*5*V*Dcnu-M~SpmDQmLMFUdwIm5dz)2u>{P8W3yAZcM?Q&xouxsoAEv%l< zf8G6q~zD3fcXnCjp5Coe6+xXds13?wJ1wshCF|v~IVM z8wy6R3MfKrocdg^RaOB%A_FkYVoW2zLt*~T@Ot=+S11f^WLc}uD*u9`<3U2#6eXtspqwn?kRVrMYn zT8+M#Mc3hKU%_Bt5HOg|ZFzdm*+7(DpVY1OHWqIFS-DULU+R_j;IQnuV1Nt20&mRd zEadtkYouOhX3b5xY}?@%=TN4jSr3cUawD*NgXU+75C0x@y>~M-pxc z28JK?`IFGs;h%2}pj|I|aAZtij5;$ko18|dX=iQkQq{G%_Yu)-mVicHpNmf6hoA$u z#wThOh9n$MEEPUx)0@vZHEU3@6fslI!Fa#)!TPNU1OF`4RwFYIa8h6 zuBRc<*tw4NG@TP4;|@|^DZ5&+2I_)ne|zG9^o0Zv*v^*Dt5EaqKM}dz>1|#5{?19E zCGU^~$hd9fGzu225;hx?4o5w>W$ln5!9FCZNq|o)(b~nrhNlG_dV=zmUYqBcLEt)y5ka*>$H0Bix zjMbBlS#%mX?~jul7NnK(wZ?&h{6It2jdP7upJD zq3W#F=nmapuUse@Q@7%`4({=zOGv)WCStwdo7sQ-Cn)dW!N5A(Y1d>poHPLyM<#y2TNDCY!}9b z0-5KP=u@q(nE2xL*-^;1Q+SO6;`6_R^6nCCNpQ5 z@#YcckT7vU^prN9?QVX-&EJhG8f1rsz@HvfO;EDz#cUYqq4Oazv7}I^Lwz>KSZ(GM zZH_fdq!4OG+X-QgdZa$I7$T=+b(8|_C*rrV#U&Z@h5!zp$Aj(&ADsW6DWi~m2} zUG-lSZPzE3mhO^}4rvz=WI>Qn8kUlfr33_}1nCq(nnl8;q<5)BQa}&{>05!NVPy#= zMM_&%(!^knbgzUAAh|;%kD&alxV4yMgflFM^V> zape)|{hnl~&3lKUc;LlVcS@O$VhIg_%)iLD{ep=(F=R9_P8~t0HxoG zZ?sCpSee1ks!Q_*q4c}qhV-95mS~~WqhwF9tl``5G!-!}b_ zq=4r7D=~^ytoZmD+)d1A@}<8j@tDlK|It&_`0?7}=@kq=>h6s{$>u6pl zv1#%;RcpPdWB<^SddID3?5U3srQmIuUXRiT8DZ0QI25ca}*m>9AM9Z#ks=g4fl!Vvjt@~}Gcr1x-J_d9-Ipil&pIJE4bZqX%sojif zmh9#luQ>yn6_z9QE<0T1b;F*~NKi`VT_Eid%tcpuVI0iFRZqy?Vs!LfTV&vY&#&T< zrLEGWg`}>>3g7EpZXEe@HKjs~>Fsap8K)W$PFC5S>WiASKEoj#4#)cT)&`3E<=U*= zzkUTOPL>4&71xrSn&%@Fu1LplZM?LXPl`^=BLWkAWZ}(cWSI}TxyQ)&LGYt6FAR)H zRwH@`sdszbziy+)`o3GY^}R@9gHemzLPwsk? zrsC0f!##cm9s_D$n-3sJIeMp!%E1!=a`3 zVWbZS257+S9X>IB?HtF~Q68U9(63(RSv;Xwq(xChzZ0+H0LOqBelsYAX6A}6J_&(C zsWDzi%k+OB|T zWypCzDfuQS*)~l$`RLgQOIo#C%#WS97~3j&j7-4&50!~Y`(x8!lKqPaG3bh>3tCrF zo=wy`KBAr1;_BB2H`ktygMe5tbL0pfS<^u&hHQL;TCm9BxwT+0c5Gl#$QJ(|JoAvZ zgaCADS#W(s4YR%IdvM3%8CEw6{)xJQ2Frz-O7JBnp<=LW9@ ziSP2$ukLYR*KfAj@T|c549H zOzn@>NST4~5;DYPD5Td#pd*@}Sd%ewWJ1r`!|uSRRT$}sLB46MPwEb_FR^jtT`a6| z8pzn4zKIFMxbs@Jh0H%U%QJ!cZa!LClM=^^HMA8XHWQ4kCigP+xY<`zgP9gJEv7r; z)QKqc!nez!g8>44w0@ALZhRhbyHd^0(EQLSUq^&s@gwUd+YrkRkEd2VG@v_|BegyyWtRn}NvJ(ZI#zo! z9&gX8Je7OpzT3s#09tWvlVSFlBRX+8S#JqGS{esB)Cg5zB(}QNWg^zw(di)e9XWy& z{n+cHV@_rP%;5QDgif2Q->PHC83oTCz1cu($^4cuejq~S*-C&+8h=XsjA6)GpOui zCRo=xPzPD!&a3yKaid4gmm{m`1wt$so%yTDF=$OIQYCDV{7v#9(tFC(60S&vEar$d zeeX}lfiP}JZnq%I?O&TtkbBWfYsf8BE3c0tkykx(f;!>@7K=`XWB;&6_dMKf%G9*d* zmB?xg(O9L&Hj=_|qS@C&ep0ir;dcX6O_JYvRNTw4**L`dUh@(WRNSH;EmFj=*&^efjm8SwzCHZQFdX z-)H8>Nu@-pAU8&?*#JxWqGD2{sJ>ac{(b)I3->|dy^07m5{lB$L)p1T?rM?}k7#GU zJ`Z^jXYv=ZiVdmL_wY|77Micf_I8($uXGQvd0iW7^YgKbt5d4cy@)PK#t`_7_YcHx zTjm|GTTXwv@>T+}%oXJ)JB8X5VcbesWbe?bP0~aI>sSHshWTz+_8bx{npuZu#j-wL}E72 zb38+w1h5nEBik*k&*n!+28?iZJ~)R(Kpg1{j2SJr-p!m>KUW0Y=Qx7c-1A5CCjjpA z_ij>{%yWc81Oc3bOnUD2*`w(!0YYd%gX$X3=lB1UG}^dY#J`kDi-Sy8CN6J}bPJky z6nSsWC|uoLudu1IySl0*kyr$s>UKcW&_8tTftjkAHs{KWe`uZ2RIfrFxg1^@n>-xR? zg~Qi8AIN2l?agGo>{UJ4p$$V+w@EcN`fqkLBE)?^n> z;OBlmdgF=IFYoohQ&2^y7THzK5cR{I6R78~B}8oUo}i`Y2w!@yzrxz27slGkH|TTg z+j>8QHF`gdiz#=!w+3v8VqzGa+mJxt=TO0{NTFG^S`s$-j-FDbsUlq zzn&wIA1vJ^T``Gz?z?{aO5S)dUbRHXt1Hd8MBm*^H>qFz<+c6~s-da-?6UngaI6Dc zCGOgZq})!pwY_48Di-fCy$YuVPS|p;AJwqm&%_s%7{sc#%OD~8bNkv*qmPSz|Ay3@ z`@$3a8_xT>pKM{6vshA^OhlySK>v^Wuy?N znEKSA|IoWX8#43iiy*8N<-Peeg41*FUEj=H?eJ{uW(#G`uolf$Vtvq?Ry40s)3SWc zVsHzDa^6QX+3}U)n9!(ZTJijjH6k2f8If zsGKPHAH!O^ALQAgkW4Z3%Npkz3HSXXmt*oN6g^nijUU$PS%=vFieQ+ioq&i!OG|&a z&v}+xx!D?$xTIbsJ*7*Qa~(g8N;TSMB(Ch;rY!@Ty1lJXuweb~rVzoThpjOQ%bC_U zyb=k&#VVC$Qm^5ZY@%^E7c;!}M#^R}nHI@9Dj!B|wVyuFV69W=z+AG?j$0m8Jsj)` zQO&`fDg~Ne3E52zOb%P~6EbV2gy%fC&yGp>?`FaKjvlf}Rchxl;5|rv6ndI<)q8vB z9zs`TIX2{wI_reGAAahOcNR5$)%GKJy@!5prenv%`|{5WiTtC=;FJE`)ta5Seq$Zt zIQr)>QHAn!W_hl%PU+)L$R}wJCg{^Y4_RUOzSXJ!Lu)m+sch4 zG01R;6Xg^YzVs2!p`FCGabd}!a@-w;f>?uVdY5`o(YmmD6y+4?&dYU zo(aWZ;6)p|*H!<0(Rl&R1W>x$)LFxe-pf%>os+C zQJ_~6+zTv`>UJ>OUmG@>uIj6%((`VvlCa0Zi*&4oPqEZ?ENHpQWi{vEfpM8mnMntd ziYVgE>0?WeY{OcBy&3TAUUauFOqw-Q0AzHh$Na(X^J+474iz1hDoYHTR*0ISBI|Ov zRDU8-R?>Q9_iB>5OI<70A6~~PiYV0ktzfCvMzv!&hKFY4186m!4w2ms$@%!7uDJC| zXLw`2Y#!t-4|6_7c40cZKr z!-XSK#1zb{o5xa=#k>9m=?T!;5qTcanP=tz;Gv$T>&p3Ok}Dh($&ZE7J}eo()1qD? zR1U@JoUdh9=|Cm)t)sm?xj}EY4R9p%kDiU!YGh_W9kPE?`%kvS+~hT;K!N(LdmV zM<9MeQ3VmjtOSrT-^FwFAO%eUa@U}+s8IW7B!+6u zHF`;~<`{?c>mj6j zYe=HG^R6=~vgEwtgeQ@f7NgXKra*>&`|4_^eR4#D5CEZEl`;bo%UQbj&Y7D(g@B1o zptQ$M#71wyP@vfu_Qn;EE1)pIDra5?`^yF!{GCDnlkjz!UKsJHo_cfk3vIzTeE%1R z!`vu`bf9-&;%l9%8gNA#?AKMq@YXpqebOKp7zE-{!;5fn^9cqYO&4`L8A?6laXBM6 z2cDXLl{Ad$-|w89gizmrl0@_WEP5GG?F0fDYtN_vIrprRp0iIH;5SZR*6XDF`^^Im z>PSFoG&FQPqcns_M<3WK(!hk`XJ3>69p!IJRV~%&{9giB0ZmwE0fhQ@_YeUTUyA>k a&