From a38d4750ebbfc00a9e74ee3a70e0a16273e299b2 Mon Sep 17 00:00:00 2001 From: Khaleel Al-Adhami Date: Mon, 23 Mar 2026 18:29:54 -0700 Subject: [PATCH 01/22] add docs --- docs/DEBUGGING.md => DEBUGGING.md | 0 docs/__init__.py | 0 docs/advanced_onboarding/code_structure.md | 365 ++++ docs/advanced_onboarding/configuration.md | 60 + docs/advanced_onboarding/how-reflex-works.md | 243 +++ docs/api-reference/browser_javascript.md | 224 ++ docs/api-reference/browser_storage.md | 333 +++ docs/api-reference/cli.md | 128 ++ docs/api-reference/event_triggers.md | 390 ++++ docs/api-reference/plugins.md | 242 +++ docs/api-reference/special_events.md | 123 ++ docs/api-reference/utils.md | 170 ++ docs/api-reference/var_system.md | 82 + docs/api-routes/overview.md | 152 ++ docs/assets/overview.md | 95 + docs/assets/upload_and_download_files.md | 154 ++ .../authentication/authentication_overview.md | 28 + docs/client_storage/overview.md | 45 + docs/components/conditional_rendering.md | 131 ++ docs/components/html_to_reflex.md | 16 + docs/components/props.md | 97 + docs/components/rendering_iterables.md | 299 +++ docs/custom-components/command-reference.md | 157 ++ docs/custom-components/overview.md | 75 + .../prerequisites-for-publishing.md | 40 + docs/database/overview.md | 87 + docs/database/queries.md | 344 +++ docs/database/relationships.md | 164 ++ docs/database/tables.md | 70 + docs/de/README.md | 250 --- docs/enterprise/ag_chart.md | 30 + docs/enterprise/ag_grid/aligned-grids.md | 65 + docs/enterprise/ag_grid/cell-selection.md | 288 +++ docs/enterprise/ag_grid/column-defs.md | 35 + docs/enterprise/ag_grid/index.md | 681 ++++++ docs/enterprise/ag_grid/model-wrapper.md | 64 + docs/enterprise/ag_grid/pivot-mode.md | 130 ++ docs/enterprise/ag_grid/theme.md | 63 + docs/enterprise/ag_grid/value-transformers.md | 76 + docs/enterprise/built-with-reflex.md | 17 + docs/enterprise/components.md | 119 ++ docs/enterprise/drag-and-drop.md | 582 ++++++ docs/enterprise/mantine/autocomplete.md | 22 + docs/enterprise/mantine/collapse.md | 36 + docs/enterprise/mantine/combobox.md | 36 + docs/enterprise/mantine/index.md | 26 + docs/enterprise/mantine/json-input.md | 35 + docs/enterprise/mantine/loading-overlay.md | 32 + docs/enterprise/mantine/multi-select.md | 31 + docs/enterprise/mantine/number-formatter.md | 27 + docs/enterprise/mantine/pill.md | 94 + docs/enterprise/mantine/ring-progress.md | 31 + .../mantine/semi-circle-progress.md | 28 + docs/enterprise/mantine/spoiler.md | 22 + docs/enterprise/mantine/tags-input.md | 55 + docs/enterprise/mantine/timeline.md | 34 + docs/enterprise/mantine/tree.md | 31 + docs/enterprise/map/index.md | 565 +++++ docs/enterprise/overview.md | 295 +++ docs/enterprise/react_flow/basic_flow.md | 96 + docs/enterprise/react_flow/components.md | 92 + docs/enterprise/react_flow/edges.md | 217 ++ docs/enterprise/react_flow/examples.md | 235 +++ docs/enterprise/react_flow/hooks.md | 33 + docs/enterprise/react_flow/interactivity.md | 71 + docs/enterprise/react_flow/nodes.md | 277 +++ docs/enterprise/react_flow/overview.md | 23 + docs/enterprise/react_flow/theming.md | 74 + docs/enterprise/react_flow/utils.md | 29 + docs/enterprise/single-port-proxy.md | 15 + docs/es/README.md | 247 --- docs/events/background_events.md | 159 ++ docs/events/chaining_events.md | 94 + docs/events/decentralized_event_handlers.md | 149 ++ docs/events/event_actions.md | 252 +++ docs/events/event_arguments.md | 123 ++ docs/events/events_overview.md | 52 + docs/events/page_load_events.md | 40 + docs/events/setters.md | 57 + docs/events/special_events.md | 28 + docs/events/yield_events.md | 107 + docs/getting_started/basics.md | 406 ++++ docs/getting_started/chat_tutorial_style.py | 27 + docs/getting_started/chat_tutorial_utils.py | 86 + docs/getting_started/chatapp_tutorial.md | 807 ++++++++ docs/getting_started/dashboard_tutorial.md | 1840 +++++++++++++++++ docs/getting_started/installation.md | 172 ++ docs/getting_started/introduction.md | 353 ++++ docs/getting_started/open_source_templates.md | 67 + docs/getting_started/project-structure.md | 71 + docs/hosting/adding-members.md | 39 + docs/hosting/app-management.md | 58 + docs/hosting/billing.md | 32 + docs/hosting/compute.md | 230 +++ docs/hosting/config_file.md | 181 ++ docs/hosting/custom-domains.md | 75 + docs/hosting/databricks.md | 209 ++ docs/hosting/deploy-quick-start.md | 90 + docs/hosting/deploy-with-github-actions.md | 118 ++ docs/hosting/logs.md | 46 + docs/hosting/machine-types.md | 35 + docs/hosting/regions.md | 151 ++ docs/hosting/secrets-environment-vars.md | 55 + docs/hosting/self-hosting.md | 121 ++ docs/hosting/tokens.md | 22 + docs/images/dalle.gif | Bin 918253 -> 0 bytes docs/images/dalle_colored_code_example.png | Bin 378844 -> 0 bytes docs/images/reflex.png | Bin 768668 -> 0 bytes docs/images/reflex.svg | 1 - docs/images/reflex_dark.svg | 8 - docs/images/reflex_light.svg | 8 - docs/in/README.md | 249 --- docs/it/README.md | 250 --- docs/ja/README.md | 250 --- docs/kr/README.md | 251 --- docs/library/data-display/avatar.md | 146 ++ docs/library/data-display/badge.md | 128 ++ docs/library/data-display/callout-ll.md | 140 ++ docs/library/data-display/callout.md | 97 + docs/library/data-display/code_block.md | 25 + docs/library/data-display/data_list.md | 91 + docs/library/data-display/icon.md | 197 ++ docs/library/data-display/list.md | 70 + docs/library/data-display/moment.md | 170 ++ docs/library/data-display/progress.md | 54 + docs/library/data-display/scroll_area.md | 239 +++ docs/library/data-display/spinner.md | 56 + docs/library/disclosure/accordion.md | 359 ++++ docs/library/disclosure/segmented_control.md | 56 + docs/library/disclosure/tabs.md | 330 +++ docs/library/dynamic-rendering/auto_scroll.md | 70 + docs/library/dynamic-rendering/cond.md | 161 ++ docs/library/dynamic-rendering/foreach.md | 199 ++ docs/library/dynamic-rendering/match.md | 295 +++ docs/library/forms/button.md | 63 + docs/library/forms/checkbox.md | 73 + docs/library/forms/form-ll.md | 464 +++++ docs/library/forms/form.md | 239 +++ docs/library/forms/input-ll.md | 128 ++ docs/library/forms/input.md | 164 ++ docs/library/forms/radio_group.md | 101 + docs/library/forms/select-ll.md | 305 +++ docs/library/forms/select.md | 203 ++ docs/library/forms/slider.md | 133 ++ docs/library/forms/switch.md | 108 + docs/library/forms/text_area.md | 88 + docs/library/forms/upload.md | 523 +++++ docs/library/graphing/charts/areachart.md | 444 ++++ docs/library/graphing/charts/barchart.md | 388 ++++ docs/library/graphing/charts/composedchart.md | 90 + docs/library/graphing/charts/errorbar.md | 101 + docs/library/graphing/charts/funnelchart.md | 210 ++ docs/library/graphing/charts/linechart.md | 309 +++ docs/library/graphing/charts/piechart.md | 216 ++ docs/library/graphing/charts/radarchart.md | 285 +++ .../library/graphing/charts/radialbarchart.md | 109 + docs/library/graphing/charts/scatterchart.md | 296 +++ docs/library/graphing/general/axis.md | 296 +++ docs/library/graphing/general/brush.md | 153 ++ .../library/graphing/general/cartesiangrid.md | 203 ++ docs/library/graphing/general/label.md | 182 ++ docs/library/graphing/general/legend.md | 171 ++ docs/library/graphing/general/reference.md | 258 +++ docs/library/graphing/general/tooltip.md | 172 ++ docs/library/graphing/other-charts/plotly.md | 144 ++ docs/library/graphing/other-charts/pyplot.md | 155 ++ docs/library/layout/aspect_ratio.md | 85 + docs/library/layout/box.md | 47 + docs/library/layout/card.md | 59 + docs/library/layout/center.md | 21 + docs/library/layout/container.md | 40 + docs/library/layout/flex.md | 208 ++ docs/library/layout/fragment.md | 27 + docs/library/layout/grid.md | 40 + docs/library/layout/inset.md | 91 + docs/library/layout/section.md | 36 + docs/library/layout/separator.md | 59 + docs/library/layout/spacer.md | 25 + docs/library/layout/stack.md | 172 ++ docs/library/media/audio.md | 28 + docs/library/media/image.md | 63 + docs/library/media/video.md | 29 + docs/library/other/clipboard.md | 79 + docs/library/other/html.md | 119 ++ docs/library/other/html_embed.md | 38 + docs/library/other/memo.md | 165 ++ docs/library/other/script.md | 38 + docs/library/other/skeleton.md | 27 + docs/library/other/theme.md | 31 + docs/library/overlay/alert_dialog.md | 367 ++++ docs/library/overlay/context_menu.md | 343 +++ docs/library/overlay/dialog.md | 283 +++ docs/library/overlay/drawer.md | 119 ++ docs/library/overlay/dropdown_menu.md | 315 +++ docs/library/overlay/hover_card.md | 126 ++ docs/library/overlay/popover.md | 224 ++ docs/library/overlay/toast.md | 105 + docs/library/overlay/tooltip.md | 60 + .../tables-and-data-grids/data_editor.md | 356 ++++ .../tables-and-data-grids/data_table.md | 73 + docs/library/tables-and-data-grids/table.md | 1206 +++++++++++ docs/library/typography/blockquote.md | 77 + docs/library/typography/code.md | 110 + docs/library/typography/em.md | 16 + docs/library/typography/heading.md | 152 ++ docs/library/typography/kbd.md | 36 + docs/library/typography/link.md | 147 ++ docs/library/typography/markdown.md | 195 ++ docs/library/typography/quote.md | 19 + docs/library/typography/strong.md | 16 + docs/library/typography/text.md | 204 ++ docs/pages/dynamic_routing.md | 110 + docs/pages/overview.md | 241 +++ docs/pe/README.md | 251 --- docs/pt/pt_br/README.md | 251 --- docs/recipes/auth/login_form.md | 243 +++ docs/recipes/auth/signup_form.md | 260 +++ docs/recipes/content/forms.md | 173 ++ docs/recipes/content/grid.md | 52 + docs/recipes/content/multi_column_row.md | 64 + docs/recipes/content/stats.md | 107 + docs/recipes/content/top_banner.md | 271 +++ docs/recipes/layout/footer.md | 281 +++ docs/recipes/layout/navbar.md | 367 ++++ docs/recipes/layout/sidebar.md | 421 ++++ docs/recipes/others/checkboxes.md | 68 + docs/recipes/others/chips.md | 247 +++ docs/recipes/others/dark_mode_toggle.md | 33 + docs/recipes/others/pricing_cards.md | 199 ++ docs/recipes/others/speed_dial.md | 454 ++++ docs/state/overview.md | 189 ++ docs/state_structure/component_state.md | 233 +++ docs/state_structure/mixins.md | 329 +++ docs/state_structure/overview.md | 234 +++ docs/state_structure/shared_state.md | 216 ++ docs/styling/common-props.md | 227 ++ docs/styling/custom-stylesheets.md | 191 ++ docs/styling/layout.md | 155 ++ docs/styling/overview.md | 185 ++ docs/styling/responsive.md | 172 ++ docs/styling/tailwind.md | 256 +++ docs/styling/theming.md | 206 ++ docs/tr/README.md | 248 --- docs/ui/overview.md | 79 + docs/utility_methods/exception_handlers.md | 43 + docs/utility_methods/lifespan_tasks.md | 84 + docs/utility_methods/other_methods.md | 14 + docs/utility_methods/router_attributes.md | 116 ++ docs/vars/base_vars.md | 228 ++ docs/vars/computed_vars.md | 190 ++ docs/vars/custom_vars.md | 82 + docs/vars/var-operations.md | 555 +++++ docs/vi/README.md | 255 --- docs/wrapping-react/custom-code-and-hooks.md | 108 + docs/wrapping-react/example.md | 408 ++++ docs/wrapping-react/imports-and-styles.md | 51 + docs/wrapping-react/library-and-tags.md | 166 ++ docs/wrapping-react/local-packages.md | 171 ++ docs/wrapping-react/more-wrapping-examples.md | 449 ++++ docs/wrapping-react/overview.md | 154 ++ docs/wrapping-react/props.md | 202 ++ docs/wrapping-react/serializers.md | 44 + docs/wrapping-react/step-by-step.md | 0 docs/zh/zh_cn/README.md | 251 --- docs/zh/zh_tw/README.md | 251 --- 265 files changed, 40439 insertions(+), 3021 deletions(-) rename docs/DEBUGGING.md => DEBUGGING.md (100%) create mode 100644 docs/__init__.py create mode 100644 docs/advanced_onboarding/code_structure.md create mode 100644 docs/advanced_onboarding/configuration.md create mode 100644 docs/advanced_onboarding/how-reflex-works.md create mode 100644 docs/api-reference/browser_javascript.md create mode 100644 docs/api-reference/browser_storage.md create mode 100644 docs/api-reference/cli.md create mode 100644 docs/api-reference/event_triggers.md create mode 100644 docs/api-reference/plugins.md create mode 100644 docs/api-reference/special_events.md create mode 100644 docs/api-reference/utils.md create mode 100644 docs/api-reference/var_system.md create mode 100644 docs/api-routes/overview.md create mode 100644 docs/assets/overview.md create mode 100644 docs/assets/upload_and_download_files.md create mode 100644 docs/authentication/authentication_overview.md create mode 100644 docs/client_storage/overview.md create mode 100644 docs/components/conditional_rendering.md create mode 100644 docs/components/html_to_reflex.md create mode 100644 docs/components/props.md create mode 100644 docs/components/rendering_iterables.md create mode 100644 docs/custom-components/command-reference.md create mode 100644 docs/custom-components/overview.md create mode 100644 docs/custom-components/prerequisites-for-publishing.md create mode 100644 docs/database/overview.md create mode 100644 docs/database/queries.md create mode 100644 docs/database/relationships.md create mode 100644 docs/database/tables.md delete mode 100644 docs/de/README.md create mode 100644 docs/enterprise/ag_chart.md create mode 100644 docs/enterprise/ag_grid/aligned-grids.md create mode 100644 docs/enterprise/ag_grid/cell-selection.md create mode 100644 docs/enterprise/ag_grid/column-defs.md create mode 100644 docs/enterprise/ag_grid/index.md create mode 100644 docs/enterprise/ag_grid/model-wrapper.md create mode 100644 docs/enterprise/ag_grid/pivot-mode.md create mode 100644 docs/enterprise/ag_grid/theme.md create mode 100644 docs/enterprise/ag_grid/value-transformers.md create mode 100644 docs/enterprise/built-with-reflex.md create mode 100644 docs/enterprise/components.md create mode 100644 docs/enterprise/drag-and-drop.md create mode 100644 docs/enterprise/mantine/autocomplete.md create mode 100644 docs/enterprise/mantine/collapse.md create mode 100644 docs/enterprise/mantine/combobox.md create mode 100644 docs/enterprise/mantine/index.md create mode 100644 docs/enterprise/mantine/json-input.md create mode 100644 docs/enterprise/mantine/loading-overlay.md create mode 100644 docs/enterprise/mantine/multi-select.md create mode 100644 docs/enterprise/mantine/number-formatter.md create mode 100644 docs/enterprise/mantine/pill.md create mode 100644 docs/enterprise/mantine/ring-progress.md create mode 100644 docs/enterprise/mantine/semi-circle-progress.md create mode 100644 docs/enterprise/mantine/spoiler.md create mode 100644 docs/enterprise/mantine/tags-input.md create mode 100644 docs/enterprise/mantine/timeline.md create mode 100644 docs/enterprise/mantine/tree.md create mode 100644 docs/enterprise/map/index.md create mode 100644 docs/enterprise/overview.md create mode 100644 docs/enterprise/react_flow/basic_flow.md create mode 100644 docs/enterprise/react_flow/components.md create mode 100644 docs/enterprise/react_flow/edges.md create mode 100644 docs/enterprise/react_flow/examples.md create mode 100644 docs/enterprise/react_flow/hooks.md create mode 100644 docs/enterprise/react_flow/interactivity.md create mode 100644 docs/enterprise/react_flow/nodes.md create mode 100644 docs/enterprise/react_flow/overview.md create mode 100644 docs/enterprise/react_flow/theming.md create mode 100644 docs/enterprise/react_flow/utils.md create mode 100644 docs/enterprise/single-port-proxy.md delete mode 100644 docs/es/README.md create mode 100644 docs/events/background_events.md create mode 100644 docs/events/chaining_events.md create mode 100644 docs/events/decentralized_event_handlers.md create mode 100644 docs/events/event_actions.md create mode 100644 docs/events/event_arguments.md create mode 100644 docs/events/events_overview.md create mode 100644 docs/events/page_load_events.md create mode 100644 docs/events/setters.md create mode 100644 docs/events/special_events.md create mode 100644 docs/events/yield_events.md create mode 100644 docs/getting_started/basics.md create mode 100644 docs/getting_started/chat_tutorial_style.py create mode 100644 docs/getting_started/chat_tutorial_utils.py create mode 100644 docs/getting_started/chatapp_tutorial.md create mode 100644 docs/getting_started/dashboard_tutorial.md create mode 100644 docs/getting_started/installation.md create mode 100644 docs/getting_started/introduction.md create mode 100644 docs/getting_started/open_source_templates.md create mode 100644 docs/getting_started/project-structure.md create mode 100644 docs/hosting/adding-members.md create mode 100644 docs/hosting/app-management.md create mode 100644 docs/hosting/billing.md create mode 100644 docs/hosting/compute.md create mode 100644 docs/hosting/config_file.md create mode 100644 docs/hosting/custom-domains.md create mode 100644 docs/hosting/databricks.md create mode 100644 docs/hosting/deploy-quick-start.md create mode 100644 docs/hosting/deploy-with-github-actions.md create mode 100644 docs/hosting/logs.md create mode 100644 docs/hosting/machine-types.md create mode 100644 docs/hosting/regions.md create mode 100644 docs/hosting/secrets-environment-vars.md create mode 100644 docs/hosting/self-hosting.md create mode 100644 docs/hosting/tokens.md delete mode 100644 docs/images/dalle.gif delete mode 100644 docs/images/dalle_colored_code_example.png delete mode 100644 docs/images/reflex.png delete mode 100644 docs/images/reflex.svg delete mode 100644 docs/images/reflex_dark.svg delete mode 100644 docs/images/reflex_light.svg delete mode 100644 docs/in/README.md delete mode 100644 docs/it/README.md delete mode 100644 docs/ja/README.md delete mode 100644 docs/kr/README.md create mode 100644 docs/library/data-display/avatar.md create mode 100644 docs/library/data-display/badge.md create mode 100644 docs/library/data-display/callout-ll.md create mode 100644 docs/library/data-display/callout.md create mode 100644 docs/library/data-display/code_block.md create mode 100644 docs/library/data-display/data_list.md create mode 100644 docs/library/data-display/icon.md create mode 100644 docs/library/data-display/list.md create mode 100644 docs/library/data-display/moment.md create mode 100644 docs/library/data-display/progress.md create mode 100644 docs/library/data-display/scroll_area.md create mode 100644 docs/library/data-display/spinner.md create mode 100644 docs/library/disclosure/accordion.md create mode 100644 docs/library/disclosure/segmented_control.md create mode 100644 docs/library/disclosure/tabs.md create mode 100644 docs/library/dynamic-rendering/auto_scroll.md create mode 100644 docs/library/dynamic-rendering/cond.md create mode 100644 docs/library/dynamic-rendering/foreach.md create mode 100644 docs/library/dynamic-rendering/match.md create mode 100644 docs/library/forms/button.md create mode 100644 docs/library/forms/checkbox.md create mode 100644 docs/library/forms/form-ll.md create mode 100644 docs/library/forms/form.md create mode 100644 docs/library/forms/input-ll.md create mode 100644 docs/library/forms/input.md create mode 100644 docs/library/forms/radio_group.md create mode 100644 docs/library/forms/select-ll.md create mode 100644 docs/library/forms/select.md create mode 100644 docs/library/forms/slider.md create mode 100644 docs/library/forms/switch.md create mode 100644 docs/library/forms/text_area.md create mode 100644 docs/library/forms/upload.md create mode 100644 docs/library/graphing/charts/areachart.md create mode 100644 docs/library/graphing/charts/barchart.md create mode 100644 docs/library/graphing/charts/composedchart.md create mode 100644 docs/library/graphing/charts/errorbar.md create mode 100644 docs/library/graphing/charts/funnelchart.md create mode 100644 docs/library/graphing/charts/linechart.md create mode 100644 docs/library/graphing/charts/piechart.md create mode 100644 docs/library/graphing/charts/radarchart.md create mode 100644 docs/library/graphing/charts/radialbarchart.md create mode 100644 docs/library/graphing/charts/scatterchart.md create mode 100644 docs/library/graphing/general/axis.md create mode 100644 docs/library/graphing/general/brush.md create mode 100644 docs/library/graphing/general/cartesiangrid.md create mode 100644 docs/library/graphing/general/label.md create mode 100644 docs/library/graphing/general/legend.md create mode 100644 docs/library/graphing/general/reference.md create mode 100644 docs/library/graphing/general/tooltip.md create mode 100644 docs/library/graphing/other-charts/plotly.md create mode 100644 docs/library/graphing/other-charts/pyplot.md create mode 100644 docs/library/layout/aspect_ratio.md create mode 100644 docs/library/layout/box.md create mode 100644 docs/library/layout/card.md create mode 100644 docs/library/layout/center.md create mode 100644 docs/library/layout/container.md create mode 100644 docs/library/layout/flex.md create mode 100644 docs/library/layout/fragment.md create mode 100644 docs/library/layout/grid.md create mode 100644 docs/library/layout/inset.md create mode 100644 docs/library/layout/section.md create mode 100644 docs/library/layout/separator.md create mode 100644 docs/library/layout/spacer.md create mode 100644 docs/library/layout/stack.md create mode 100644 docs/library/media/audio.md create mode 100644 docs/library/media/image.md create mode 100644 docs/library/media/video.md create mode 100644 docs/library/other/clipboard.md create mode 100644 docs/library/other/html.md create mode 100644 docs/library/other/html_embed.md create mode 100644 docs/library/other/memo.md create mode 100644 docs/library/other/script.md create mode 100644 docs/library/other/skeleton.md create mode 100644 docs/library/other/theme.md create mode 100644 docs/library/overlay/alert_dialog.md create mode 100644 docs/library/overlay/context_menu.md create mode 100644 docs/library/overlay/dialog.md create mode 100644 docs/library/overlay/drawer.md create mode 100644 docs/library/overlay/dropdown_menu.md create mode 100644 docs/library/overlay/hover_card.md create mode 100644 docs/library/overlay/popover.md create mode 100644 docs/library/overlay/toast.md create mode 100644 docs/library/overlay/tooltip.md create mode 100644 docs/library/tables-and-data-grids/data_editor.md create mode 100644 docs/library/tables-and-data-grids/data_table.md create mode 100644 docs/library/tables-and-data-grids/table.md create mode 100644 docs/library/typography/blockquote.md create mode 100644 docs/library/typography/code.md create mode 100644 docs/library/typography/em.md create mode 100644 docs/library/typography/heading.md create mode 100644 docs/library/typography/kbd.md create mode 100644 docs/library/typography/link.md create mode 100644 docs/library/typography/markdown.md create mode 100644 docs/library/typography/quote.md create mode 100644 docs/library/typography/strong.md create mode 100644 docs/library/typography/text.md create mode 100644 docs/pages/dynamic_routing.md create mode 100644 docs/pages/overview.md delete mode 100644 docs/pe/README.md delete mode 100644 docs/pt/pt_br/README.md create mode 100644 docs/recipes/auth/login_form.md create mode 100644 docs/recipes/auth/signup_form.md create mode 100644 docs/recipes/content/forms.md create mode 100644 docs/recipes/content/grid.md create mode 100644 docs/recipes/content/multi_column_row.md create mode 100644 docs/recipes/content/stats.md create mode 100644 docs/recipes/content/top_banner.md create mode 100644 docs/recipes/layout/footer.md create mode 100644 docs/recipes/layout/navbar.md create mode 100644 docs/recipes/layout/sidebar.md create mode 100644 docs/recipes/others/checkboxes.md create mode 100644 docs/recipes/others/chips.md create mode 100644 docs/recipes/others/dark_mode_toggle.md create mode 100644 docs/recipes/others/pricing_cards.md create mode 100644 docs/recipes/others/speed_dial.md create mode 100644 docs/state/overview.md create mode 100644 docs/state_structure/component_state.md create mode 100644 docs/state_structure/mixins.md create mode 100644 docs/state_structure/overview.md create mode 100644 docs/state_structure/shared_state.md create mode 100644 docs/styling/common-props.md create mode 100644 docs/styling/custom-stylesheets.md create mode 100644 docs/styling/layout.md create mode 100644 docs/styling/overview.md create mode 100644 docs/styling/responsive.md create mode 100644 docs/styling/tailwind.md create mode 100644 docs/styling/theming.md delete mode 100644 docs/tr/README.md create mode 100644 docs/ui/overview.md create mode 100644 docs/utility_methods/exception_handlers.md create mode 100644 docs/utility_methods/lifespan_tasks.md create mode 100644 docs/utility_methods/other_methods.md create mode 100644 docs/utility_methods/router_attributes.md create mode 100644 docs/vars/base_vars.md create mode 100644 docs/vars/computed_vars.md create mode 100644 docs/vars/custom_vars.md create mode 100644 docs/vars/var-operations.md delete mode 100644 docs/vi/README.md create mode 100644 docs/wrapping-react/custom-code-and-hooks.md create mode 100644 docs/wrapping-react/example.md create mode 100644 docs/wrapping-react/imports-and-styles.md create mode 100644 docs/wrapping-react/library-and-tags.md create mode 100644 docs/wrapping-react/local-packages.md create mode 100644 docs/wrapping-react/more-wrapping-examples.md create mode 100644 docs/wrapping-react/overview.md create mode 100644 docs/wrapping-react/props.md create mode 100644 docs/wrapping-react/serializers.md create mode 100644 docs/wrapping-react/step-by-step.md delete mode 100644 docs/zh/zh_cn/README.md delete mode 100644 docs/zh/zh_tw/README.md diff --git a/docs/DEBUGGING.md b/DEBUGGING.md similarity index 100% rename from docs/DEBUGGING.md rename to DEBUGGING.md diff --git a/docs/__init__.py b/docs/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/advanced_onboarding/code_structure.md b/docs/advanced_onboarding/code_structure.md new file mode 100644 index 00000000000..70c53648aa2 --- /dev/null +++ b/docs/advanced_onboarding/code_structure.md @@ -0,0 +1,365 @@ +```python exec +from pcweb.pages.docs import custom_components +``` + +# Project Structure (Advanced) + +## App Module + +Reflex imports the main app module based on the `app_name` from the config, which **must define a module-level global named `app` as an instance of `rx.App`**. + +The main app module is responsible for importing all other modules that make up the app and defining `app = rx.App()`. + +**All other modules containing pages, state, and models MUST be imported by the main app module or package** for Reflex to include them in the compiled output. + +# Breaking the App into Smaller Pieces + +As applications scale, effective organization is crucial. This is achieved by breaking the application down into smaller, manageable modules and organizing them into logical packages that avoid circular dependencies. + +In the following documentation there will be an app with an `app_name` of `example_big_app`. The main module would be `example_big_app/example_big_app.py`. + +In the [Putting it all together](#putting-it-all-together) section there is a visual of the project folder structure to help follow along with the examples below. + +### Pages Package: `example_big_app/pages` + +All complex apps will have multiple pages, so it is recommended to create `example_big_app/pages` as a package. + +1. This package should contain one module per page in the app. +2. If a particular page depends on the state, the substate should be defined in the same module as the page. +3. The page-returning function should be decorated with `rx.page()` to have it added as a route in the app. + +```python +import reflex as rx + +from ..state import AuthState + + +class LoginState(AuthState): + @rx.event + def handle_submit(self, form_data): + self.logged_in = authenticate(form_data["username"], form_data["password"]) + + +def login_field(name: str, **input_props): + return rx.hstack( + rx.text(name.capitalize()), + rx.input(name=name, **input_props), + width="100%", + justify="between", + ) + + +@rx.page(route="/login") +def login(): + return rx.card( + rx.form( + rx.vstack( + login_field("username"), + login_field("password", type="password"), + rx.button("Login"), + width="100%", + justify="center", + ), + on_submit=LoginState.handle_submit, + ), + ) +``` + +### Templating: `example_big_app/template.py` + +Most applications maintain a consistent layout and structure across pages. Defining this common structure in a separate module facilitates easy sharing and reuse when constructing individual pages. + +**Best Practices** + +1. Factor out common frontend UI elements into a function that returns a component. +2. If a function accepts a function that returns a component, it can be used as a decorator as seen below. + +```python +from typing import Callable + +import reflex as rx + +from .components.menu import menu +from .components.navbar import navbar + + +def template(page: Callable[[], rx.Component]) -> rx.Component: + return rx.vstack( + navbar(), + rx.hstack( + menu(), + rx.container(page()), + ), + width="100%", + ) +``` + +The `@template` decorator should appear below the `@rx.page` decorator and above the page-returning function. See the [Posts Page](#a-post-page-example_big_apppagespostspy) code for an example. + +## State Management + +Most pages will use State in some capacity. You should avoid adding vars to a +shared state that will only be used in a single page. Instead, define a new +subclass of `rx.State` and keep it in the same module as the page. + +### Accessing other States + +As of Reflex 0.4.3, any event handler can get access to an instance of any other +substate via the `get_state` API. From a practical perspective, this means that +state can be split up into smaller pieces without requiring a complex +inheritance hierarchy to share access to other states. + +In previous releases, if an app wanted to store settings in `SettingsState` with +a page or component for modifying them, any other state with an event handler +that needed to access those settings would have to inherit from `SettingsState`, +even if the other state was mostly orthogonal. The other state would also now +always have to load the settings, even for event handlers that didn't need to +access them. + +A better strategy is to load the desired state on demand from only the event +handler which needs access to the substate. + +### A Settings Component: `example_big_app/components/settings.py` + +```python +import reflex as rx + + +class SettingsState(rx.State): + refresh_interval: int = 15 + auto_update: bool = True + prefer_plain_text: bool = True + posts_per_page: int = 20 + + +def settings_dialog(): + return rx.dialog(...) +``` + +### A Post Page: `example_big_app/pages/posts.py` + +This page loads the `SettingsState` to determine how many posts to display per page +and how often to refresh. + +```python +import reflex as rx + +from ..models import Post +from ..template import template +from ..components.settings import SettingsState + + +class PostsState(rx.State): + refresh_tick: int + page: int + posts: list[Post] + + @rx.event + async def on_load(self): + settings = await self.get_state(SettingsState) + if settings.auto_update: + self.refresh_tick = settings.refresh_interval * 1000 + else: + self.refresh_tick = 0 + + @rx.event + async def tick(self, _): + settings = await self.get_state(SettingsState) + with rx.session() as session: + q = Post.select().offset(self.page * settings.posts_per_page).limit(settings.posts_per_page) + self.posts = q.all() + + @rx.event + def go_to_previous(self): + if self.page > 0: + self.page = self.page - 1 + + @rx.event + def go_to_next(self): + if self.posts: + self.page = self.page + 1 + + +@rx.page(route="/posts", on_load=PostsState.on_load) +@template +def posts(): + return rx.vstack( + rx.foreach(PostsState.posts, post_view), + rx.hstack( + rx.button("< Prev", on_click=PostsState.go_to_previous), + rx.button("Next >", on_click=PostsState.go_to_next), + justify="between", + ), + rx.moment(interval=PostsState.refresh_tick, on_change=PostsState.tick, display="none"), + width="100%", + ) +``` + +### Common State: `example_big_app/state.py` + +_Common_ states and substates that are shared by multiple pages or components +should be implemented in a separate module to avoid circular imports. This +module should not import other modules in the app. + +## Component Reusability + +The primary mechanism for reusing components in Reflex is to define a function that returns +the component, then simply call it where that functionality is needed. + +Component functions typically should not take any State classes as arguments, but prefer +to import the needed state and access the vars on the class directly. + +### Memoize Functions for Improved Performance + +In a large app, if a component has many subcomponents or is used in a large number of places, it can improve compile and runtime performance to memoize the function with the `@lru_cache` decorator. + +To memoize the `foo` component to avoid re-creating it many times simply add `@lru_cache` to the function definition, and the component will only be created once per unique set of arguments. + +```python +from functools import lru_cache + +import reflex as rx + +class State(rx.State): + v: str = "foo" + + +@lru_cache +def foo(): + return rx.text(State.v) + + +def index(): + return rx.flex( + rx.button("Change", on_click=State.set_v(rx.cond(State.v != "bar", "bar", "foo"))), + *[ + foo() + for _ in range(100) + ], + direction="row", + wrap="wrap", + ) +``` + +### example_big_app/components + +This package contains reusable parts of the app, for example headers, footers, +and menus. If a particular component requires state, the substate may be defined +in the same module for locality. Any substate defined in a component module +should only contain fields and event handlers pertaining to that individual +component. + +### External Components + +Reflex 0.4.3 introduced support for the [`reflex component` CLI commands]({custom_components.overview.path}), which makes it easy +to bundle up common functionality to publish on PyPI as a standalone Python package +that can be installed and used in any Reflex app. + +When wrapping npm components or other self-contained bits of functionality, it can be helpful +to move this complexity outside the app itself for easier maintenance and reuse in other apps. + +## Database Models: `example_big_app/models.py` + +It is recommended to implement all database models in a single file to make it easier to define relationships and understand the entire schema. + +However, if the schema is very large, it might make sense to have a `models` package with individual models defined in their own modules. + +At any rate, defining the models separately allows any page or component to import and use them without circular imports. + +## Top-level Package: `example_big_app/__init__.py` + +This is a great place to import all state, models, and pages that should be part of the app. +Typically, components and helpers do not need to imported, because they will be imported by +pages that use them (or they would be unused). + +```python +from . import state, models +from .pages import index, login, post, product, profile, schedule + +__all__ = [ + "state", + "models", + "index", + "login", + "post", + "product", + "profile", + "schedule", +] +``` + +If any pages are not imported here, they will not be compiled as part of the app. + +## example_big_app/example_big_app.py + +This is the main app module. Since everything else is defined in other modules, this file becomes very simple. + +```python +import reflex as rx + +app = rx.App() +``` + +## File Management + +There are two categories of non-code assets (media, fonts, stylesheets, +documents) typically used in a Reflex app. + +### assets + +The `assets` directory is used for **static** files that should be accessible +relative to the root of the frontend (default port 3000). When an app is deployed in +production mode, changes to the assets directory will NOT be available at runtime! + +When referencing an asset, always use a leading forward slash, so the +asset can be resolved regardless of the page route where it may appear. + +### uploaded_files + +If an app needs to make files available dynamically at runtime, it is +recommended to set the target directory via `REFLEX_UPLOADED_FILES_DIR` +environment variable (default `./uploaded_files`), write files relative to the +path returned by `rx.get_upload_dir()`, and create working links via +`rx.get_upload_url(relative_path)`. + +Uploaded files are served from the backend (default port 8000) via +`/_upload/` + +## Putting it all together + +Based on the previous discussion, the recommended project layout look like this. + +```text +example-big-app/ +├─ assets/ +├─ example_big_app/ +│ ├─ components/ +│ │ ├─ __init__.py +│ │ ├─ auth.py +│ │ ├─ footer.py +│ │ ├─ menu.py +│ │ ├─ navbar.py +│ ├─ pages/ +│ │ ├─ __init__.py +│ │ ├─ index.py +│ │ ├─ login.py +│ │ ├─ posts.py +│ │ ├─ product.py +│ │ ├─ profile.py +│ │ ├─ schedule.py +│ ├─ __init__.py +│ ├─ example_big_app.py +│ ├─ models.py +│ ├─ state.py +│ ├─ template.py +├─ uploaded_files/ +├─ requirements.txt +├─ rxconfig.py +``` + +## Key Takeaways + +- Like any other Python project, **split up the app into modules and packages** to keep the codebase organized and manageable. +- Using smaller modules and packages makes it easier to **reuse components and state** across the app + without introducing circular dependencies. +- Create **individual functions** to encapsulate units of functionality and **reuse them** where needed. diff --git a/docs/advanced_onboarding/configuration.md b/docs/advanced_onboarding/configuration.md new file mode 100644 index 00000000000..bce5179c727 --- /dev/null +++ b/docs/advanced_onboarding/configuration.md @@ -0,0 +1,60 @@ +```python exec +from pcweb.pages.docs import api_reference +``` + +# Configuration + +Reflex apps can be configured using a configuration file, environment variables, and command line arguments. + +## Configuration File + +Running `reflex init` will create an `rxconfig.py` file in your root directory. +You can pass keyword arguments to the `Config` class to configure your app. + +For example: + +```python +# rxconfig.py +import reflex as rx + +config = rx.Config( + app_name="my_app_name", + # Connect to your own database. + db_url="postgresql://user:password@localhost:5432/my_db", + # Change the frontend port. + frontend_port=3001, +) +``` + +See the [config reference]({api_reference.config.path}) for all the parameters available. + +## Environment Variables + +You can override the configuration file by setting environment variables. +For example, to override the `frontend_port` setting, you can set the `FRONTEND_PORT` environment variable. + +```bash +FRONTEND_PORT=3001 reflex run +``` + +## Command Line Arguments + +Finally, you can override the configuration file and environment variables by passing command line arguments to `reflex run`. + +```bash +reflex run --frontend-port 3001 +``` + +See the [CLI reference]({api_reference.cli.path}) for all the arguments available. + +## Customizable App Data Directory + +The `REFLEX_DIR` environment variable can be set, which allows users to set the location where Reflex writes helper tools like Bun and NodeJS. + +By default we use Platform specific directories: + +On windows, `C:/Users//AppData/Local/reflex` is used. + +On macOS, `~/Library/Application Support/reflex` is used. + +On linux, `~/.local/share/reflex` is used. diff --git a/docs/advanced_onboarding/how-reflex-works.md b/docs/advanced_onboarding/how-reflex-works.md new file mode 100644 index 00000000000..47b42afab50 --- /dev/null +++ b/docs/advanced_onboarding/how-reflex-works.md @@ -0,0 +1,243 @@ +```python exec +from pcweb import constants +from pcweb.constants import REFLEX_ASSETS_CDN +from pcweb.pages.docs import wrapping_react, custom_components, styling, events +from pcweb.pages.docs.custom_components import custom_components as cc +``` + +# How Reflex Works + +We'll use the following basic app that displays Github profile images as an example to explain the different parts of the architecture. + +```python demo exec +import requests +import reflex as rx + +class GithubState(rx.State): + url: str = "https://github.com/reflex-dev" + profile_image: str = "https://avatars.githubusercontent.com/u/104714959" + + @rx.event + def set_profile(self, username: str): + if username == "": + return + try: + github_data = requests.get(f"https://api.github.com/users/{username}").json() + except: + return + self.url = github_data["url"] + self.profile_image = github_data["avatar_url"] + +def index(): + return rx.hstack( + rx.link( + rx.avatar(src=GithubState.profile_image), + href=GithubState.url, + ), + rx.input( + placeholder="Your Github username", + on_blur=GithubState.set_profile, + ), + ) +``` + +## The Reflex Architecture + +Full-stack web apps are made up of a frontend and a backend. The frontend is the user interface, and is served as a web page that runs on the user's browser. The backend handles the logic and state management (such as databases and APIs), and is run on a server. + +In traditional web development, these are usually two separate apps, and are often written in different frameworks or languages. For example, you may combine a Flask backend with a React frontend. With this approach, you have to maintain two separate apps and end up writing a lot of boilerplate code to connect the frontend and backend. + +We wanted to simplify this process in Reflex by defining both the frontend and backend in a single codebase, while using Python for everything. Developers should only worry about their app's logic and not about the low-level implementation details. + +### TLDR + +Under the hood, Reflex apps compile down to a [React](https://react.dev) frontend app and a [FastAPI](https://github.com/tiangolo/fastapi) backend app. Only the UI is compiled to Javascript; all the app logic and state management stays in Python and is run on the server. Reflex uses [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) to send events from the frontend to the backend, and to send state updates from the backend to the frontend. + +The diagram below provides a detailed overview of how a Reflex app works. We'll go through each part in more detail in the following sections. + +```python exec +from reflex_image_zoom import image_zoom +``` + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/architecture.webp")) +``` + +```python eval +rx.box(height="1em") +``` + +## Frontend + +We wanted Reflex apps to look and feel like a traditional web app to the end user, while still being easy to build and maintain for the developer. To do this, we built on top of mature and popular web technologies. + +When you `reflex run` your app, Reflex compiles the frontend down to a single-page [Next.js](https://nextjs.org) app and serves it on a port (by default `3000`) that you can access in your browser. + +The frontend's job is to reflect the app's state, and send events to the backend when the user interacts with the UI. No actual logic is run on the frontend. + +### Components + +Reflex frontends are built using components that can be composed together to create complex UIs. Instead of using a templating language that mixes HTML and Python, we just use Python functions to define the UI. + +```python +def index(): + return rx.hstack( + rx.link( + rx.avatar(src=GithubState.profile_image), + href=GithubState.url, + ), + rx.input( + placeholder="Your Github username", + on_blur=GithubState.set_profile, + ), + ) +``` + +In our example app, we have components such as `rx.hstack`, `rx.avatar`, and `rx.input`. These components can have different **props** that affect their appearance and functionality - for example the `rx.input` component has a `placeholder` prop to display the default text. + +We can make our components respond to user interactions with events such as `on_blur`, which we will discuss more below. + +Under the hood, these components compile down to React components. For example, the above code compiles down to the following React code: + +```jsx + + + + + + +``` + +Many of our core components are based on [Radix](https://radix-ui.com/), a popular React component library. We also have many other components for graphing, datatables, and more. + +We chose React because it is a popular library with a huge ecosystem. Our goal isn't to recreate the web ecosystem, but to make it accessible to Python developers. + +This also lets our users bring their own components if we don't have a component they need. Users can [wrap their own React components]({wrapping_react.overview.path}) and then [publish them]({custom_components.overview.path}) for others to use. Over time we will build out our [third party component ecosystem]({cc.path}) so that users can easily find and use components that others have built. + +### Styling + +We wanted to make sure Reflex apps look good out of the box, while still giving developers full control over the appearance of their app. + +We have a core [theming system]({styling.theming.path}) that lets you set high level styling options such as dark mode and accent color throughout your app to give it a unified look and feel. + +Beyond this, Reflex components can be styled using the full power of CSS. We leverage the [Emotion](https://emotion.sh/docs/introduction) library to allow "CSS-in-Python" styling, so you can pass any CSS prop as a keyword argument to a component. This includes [responsive props]({styling.responsive.path}) by passing a list of values. + +## Backend + +Now let's look at how we added interactivity to our apps. + +In Reflex only the frontend compiles to Javascript and runs on the user's browser, while all the state and logic stays in Python and is run on the server. When you `reflex run`, we start a FastAPI server (by default on port `8000`) that the frontend connects to through a websocket. + +All the state and logic are defined within a `State` class. + +```python +class GithubState(rx.State): + url: str = "https://github.com/reflex-dev" + profile_image: str = "https://avatars.githubusercontent.com/u/104714959" + + def set_profile(self, username: str): + if username == "": + return + github_data = requests.get(f"https://api.github.com/users/\{username}").json() + self.url = github_data["url"] + self.profile_image = github_data["avatar_url"] +``` + +The state is made up of **vars** and **event handlers**. + +Vars are any values in your app that can change over time. They are defined as class attributes on your `State` class, and may be any Python type that can be serialized to JSON. In our example, `url` and `profile_image` are vars. + +Event handlers are methods in your `State` class that are called when the user interacts with the UI. They are the only way that we can modify the vars in Reflex, and can be called in response to user actions, such as clicking a button or typing in a text box. In our example, `set_profile` is an event handler that updates the `url` and `profile_image` vars. + +Since event handlers are run on the backend, you can use any Python library within them. In our example, we use the `requests` library to make an API call to Github to get the user's profile image. + +## Event Processing + +Now we get into the interesting part - how we handle events and state updates. + +Normally when writing web apps, you have to write a lot of boilerplate code to connect the frontend and backend. With Reflex, you don't have to worry about that - we handle the communication between the frontend and backend for you. Developers just have to write their event handler logic, and when the vars are updated the UI is automatically updated. + +You can refer to the diagram above for a visual representation of the process. Let's walk through it with our Github profile image example. + +### Event Triggers + +The user can interact with the UI in many ways, such as clicking a button, typing in a text box, or hovering over an element. In Reflex, we call these **event triggers**. + +```python +rx.input( + placeholder="Your Github username", + on_blur=GithubState.set_profile, +) +``` + +In our example we bind the `on_blur` event trigger to the `set_profile` event handler. This means that when the user types in the input field and then clicks away, the `set_profile` event handler is called. + +### Event Queue + +On the frontend, we maintain an event queue of all pending events. An event consists of three major pieces of data: + +- **client token**: Each client (browser tab) has a unique token to identify it. This let's the backend know which state to update. +- **event handler**: The event handler to run on the state. +- **arguments**: The arguments to pass to the event handler. + +Let's assume I type my username "picklelo" into the input. In this example, our event would look something like this: + +```json +{ + "client_token": "abc123", + "event_handler": "GithubState.set_profile", + "arguments": ["picklelo"] +} +``` + +On the frontend, we maintain an event queue of all pending events. + +When an event is triggered, it is added to the queue. We have a `processing` flag to make sure only one event is processed at a time. This ensures that the state is always consistent and there aren't any race conditions with two event handlers modifying the state at the same time. + +```md alert info +# There are exceptions to this, such as [background events]({events.background_events.path}) which allow you to run events in the background without blocking the UI. +``` + +Once the event is ready to be processed, it is sent to the backend through a WebSocket connection. + +### State Manager + +Once the event is received, it is processed on the backend. + +Reflex uses a **state manager** which maintains a mapping between client tokens and their state. By default, the state manager is just an in-memory dictionary, but it can be extended to use a database or cache. In production we use Redis as our state manager. + +### Event Handling + +Once we have the user's state, the next step is to run the event handler with the arguments. + +```python + def set_profile(self, username: str): + if username == "": + return + github_data = requests.get(f"https://api.github.com/users/\{username}").json() + self.url = github_data["url"] + self.profile_image = github_data["avatar_url"] +``` + +In our example, the `set_profile` event handler is run on the user's state. This makes an API call to Github to get the user's profile image, and then updates the state's `url` and `profile_image` vars. + +### State Updates + +Every time an event handler returns (or [yields]({events.yield_events.path})), we save the state in the state manager and send the **state updates** to the frontend to update the UI. + +To maintain performance as your state grows, internally Reflex keeps track of vars that were updated during the event handler (**dirty vars**). When the event handler is done processing, we find all the dirty vars and create a state update to send to the frontend. + +In our case, the state update may look something like this: + +```json +{ + "url": "https://github.com/picklelo", + "profile_image": "https://avatars.githubusercontent.com/u/104714959" +} +``` + +We store the new state in our state manager, and then send the state update to the frontend. The frontend then updates the UI to reflect the new state. In our example, the new Github profile image is displayed. diff --git a/docs/api-reference/browser_javascript.md b/docs/api-reference/browser_javascript.md new file mode 100644 index 00000000000..7321653d108 --- /dev/null +++ b/docs/api-reference/browser_javascript.md @@ -0,0 +1,224 @@ +```python exec +import asyncio +from typing import Any +import reflex as rx +from pcweb.pages.docs import wrapping_react +from pcweb.pages.docs import library +``` + +# Browser Javascript + +Reflex compiles your frontend code, defined as python functions, into a Javascript web application +that runs in the user's browser. There are instances where you may need to supply custom javascript +code to interop with Web APIs, use certain third-party libraries, or wrap low-level functionality +that is not exposed via Reflex's Python API. + +```md alert +# Avoid Custom Javascript + +Custom Javascript code in your Reflex app presents a maintenance challenge, as it will be harder to debug and may be unstable across Reflex versions. + +Prefer to use the Python API whenever possible and file an issue if you need additional functionality that is not currently provided. +``` + +## Executing Script + +There are four ways to execute custom Javascript code into your Reflex app: + +- `rx.script` - Injects the script via `next/script` for efficient loading of inline and external Javascript code. Described further in the [component library]({library.other.script.path}). + - These components can be directly included in the body of a page, or they may + be passed to `rx.App(head_components=[rx.script(...)])` to be included in + the `` tag of all pages. +- `rx.call_script` - An event handler that evaluates arbitrary Javascript code, + and optionally returns the result to another event handler. + +These previous two methods can work in tandem to load external scripts and then +call functions defined within them in response to user events. + +The following two methods are geared towards wrapping components and are +described with examples in the [Wrapping React]({wrapping_react.overview.path}) +section. + +- `_get_hooks` and `_get_custom_code` in an `rx.Component` subclass +- `Var.create` with `_var_is_local=False` + +## Inline Scripts + +The `rx.script` component is the recommended way to load inline Javascript for greater control over +frontend behavior. + +The functions and variables in the script can be accessed from backend event +handlers or frontend event triggers via the `rx.call_script` interface. + +```python demo exec +class SoundEffectState(rx.State): + @rx.event(background=True) + async def delayed_play(self): + await asyncio.sleep(1) + return rx.call_script("playFromStart(button_sfx)") + + +def sound_effect_demo(): + return rx.hstack( + rx.script(""" + var button_sfx = new Audio("/vintage-button-sound-effect.mp3") + function playFromStart (sfx) {sfx.load(); sfx.play()}"""), + rx.button("Play Immediately", on_click=rx.call_script("playFromStart(button_sfx)")), + rx.button("Play Later", on_click=SoundEffectState.delayed_play), + ) +``` + +## External Scripts + +External scripts can be loaded either from the `assets` directory, or from CDN URL, and then controlled +via `rx.call_script`. + +```python demo +rx.vstack( + rx.script( + src="https://cdn.jsdelivr.net/gh/scottschiller/snowstorm@snowstorm_20131208/snowstorm-min.js", + ), + rx.script(""" + window.addEventListener('load', function() { + if (typeof snowStorm !== 'undefined') { + snowStorm.autoStart = false; + snowStorm.snowColor = '#111'; + } + }); + """), + rx.button("Start Duststorm", on_click=rx.call_script("snowStorm.start()")), + rx.button("Toggle Duststorm", on_click=rx.call_script("snowStorm.toggleSnow()")), +) +``` + +## Accessing Client Side Values + +The `rx.call_script` function accepts a `callback` parameter that expects an +Event Handler with one argument which will receive the result of evaluating the +Javascript code. This can be used to access client-side values such as the +`window.location` or current scroll location, or any previously defined value. + +```python demo exec +class WindowState(rx.State): + location: dict[str, str] = {} + scroll_position: dict[str, int] = {} + + def update_location(self, location): + self.location = location + + def update_scroll_position(self, scroll_position): + self.scroll_position = { + "x": scroll_position[0], + "y": scroll_position[1], + } + + @rx.event + def get_client_values(self): + return [ + rx.call_script( + "window.location", + callback=WindowState.update_location + ), + rx.call_script( + "[window.scrollX, window.scrollY]", + callback=WindowState.update_scroll_position, + ), + ] + + +def window_state_demo(): + return rx.vstack( + rx.button("Update Values", on_click=WindowState.get_client_values), + rx.text(f"Scroll Position: {WindowState.scroll_position.to_string()}"), + rx.text("window.location:"), + rx.text_area(value=WindowState.location.to_string(), is_read_only=True), + on_mount=WindowState.get_client_values, + ) +``` + +```md alert +# Allowed Callback Values + +The `callback` parameter may be an `EventHandler` with one argument, or a lambda with one argument that returns an `EventHandler`. +If the callback is None, then no event is triggered. +``` + +## Using React Hooks + +To use React Hooks directly in a Reflex app, you must subclass `rx.Component`, +typically `rx.Fragment` is used when the hook functionality has no visual +element. The hook code is returned by the `add_hooks` method, which is expected +to return a `list[str]` containing Javascript code which will be inserted into the +page component (i.e the render function itself). + +For supporting code that must be defined outside of the component render +function, use `_get_custom_code`. + +The following example uses `useEffect` to register global hotkeys on the +`document` object, and then triggers an event when a specific key is pressed. + +```python demo exec +import dataclasses + +from reflex.utils import imports + +@dataclasses.dataclass +class KeyEvent: + """Interface of Javascript KeyboardEvent""" + key: str = "" + +def key_event_spec(ev: rx.Var[KeyEvent]) -> tuple[rx.Var[str]]: + # Takes the event object and returns the key pressed to send to the state + return (ev.key,) + +class GlobalHotkeyState(rx.State): + key: str = "" + + @rx.event + def update_key(self, key): + self.key = key + + +class GlobalHotkeyWatcher(rx.Fragment): + """A component that listens for key events globally.""" + + # The event handler that will be called + on_key_down: rx.EventHandler[key_event_spec] + + def add_imports(self) -> imports.ImportDict: + """Add the imports for the component.""" + return { + "react": [imports.ImportVar(tag="useEffect")], + } + + def add_hooks(self) -> list[str | rx.Var]: + """Add the hooks for the component.""" + return [ + """ + useEffect(() => { + const handle_key = %s; + document.addEventListener("keydown", handle_key, false); + return () => { + document.removeEventListener("keydown", handle_key, false); + } + }) + """ + % str(rx.Var.create(self.event_triggers["on_key_down"])) + ] + +def global_key_demo(): + return rx.vstack( + GlobalHotkeyWatcher.create( + keys=["a", "s", "d", "w"], + on_key_down=lambda key: rx.cond( + rx.Var.create(["a", "s", "d", "w"]).contains(key), + GlobalHotkeyState.update_key(key), + rx.console_log(key) + ) + ), + rx.text("Press a, s, d or w to trigger an event"), + rx.heading(f"Last watched key pressed: {GlobalHotkeyState.key}"), + ) +``` + +This snippet can also be imported through pip: [reflex-global-hotkey](https://pypi.org/project/reflex-global-hotkey/). diff --git a/docs/api-reference/browser_storage.md b/docs/api-reference/browser_storage.md new file mode 100644 index 00000000000..525a502ef9c --- /dev/null +++ b/docs/api-reference/browser_storage.md @@ -0,0 +1,333 @@ +# Browser Storage + +## rx.Cookie + +Represents a state Var that is stored as a cookie in the browser. Currently only supports string values. + +Parameters + +- `name` : The name of the cookie on the client side. +- `path`: The cookie path. Use `/` to make the cookie accessible on all pages. +- `max_age` : Relative max age of the cookie in seconds from when the client receives it. +- `domain`: Domain for the cookie (e.g., `sub.domain.com` or `.allsubdomains.com`). +- `secure`: If the cookie is only accessible through HTTPS. +- `same_site`: Whether the cookie is sent with third-party requests. Can be one of (`True`, `False`, `None`, `lax`, `strict`). + +```python +class CookieState(rx.State): + c1: str = rx.Cookie() + c2: str = rx.Cookie('c2 default') + + # cookies with custom settings + c3: str = rx.Cookie(max_age=2) # expires after 2 second + c4: str = rx.Cookie(same_site='strict') + c5: str = rx.Cookie(path='/foo/') # only accessible on `/foo/` + c6: str = rx.Cookie(name='c6-custom-name') +``` + +```md alert warning +# **The default value of a Cookie is never set in the browser!** + +The Cookie value is only set when the Var is assigned. If you need to set a +default value, you can assign a value to the cookie in an `on_load` event +handler. +``` + +## Accessing Cookies + +Cookies are accessed like any other Var in the state. If another state needs access +to the value of a cookie, the state should be a substate of the state that defines +the cookie. Alternatively the `get_state` API can be used to access the other state. + +For rendering cookies in the frontend, import the state that defines the cookie and +reference it directly. + +```md alert warning +# **Two separate states should _avoid_ defining `rx.Cookie` with the same name.** + +Although it is technically possible, the cookie options may differ, leading to +unexpected results. + +Additionally, updating the cookie value in one state will not automatically +update the value in the other state without a page refresh or navigation event. +``` + +## rx.remove_cookies + +Remove a cookie from the client's browser. + +Parameters: + +- `key`: The name of cookie to remove. + +```python +rx.button( + 'Remove cookie', on_click=rx.remove_cookie('key') +) +``` + +This event can also be returned from an event handler: + +```python +class CookieState(rx.State): + ... + def logout(self): + return rx.remove_cookie('auth_token') +``` + +## rx.LocalStorage + +Represents a state Var that is stored in localStorage in the browser. Currently only supports string values. + +Parameters + +- `name`: The name of the storage key on the client side. +- `sync`: Boolean indicates if the state should be kept in sync across tabs of the same browser. + +```python +class LocalStorageState(rx.State): + # local storage with default settings + l1: str = rx.LocalStorage() + + # local storage with custom settings + l2: str = rx.LocalStorage("l2 default") + l3: str = rx.LocalStorage(name="l3") + + # local storage that automatically updates in other states across tabs + l4: str = rx.LocalStorage(sync=True) +``` + +### Syncing Vars + +Because LocalStorage applies to the entire browser, all LocalStorage Vars are +automatically shared across tabs. + +The `sync` parameter controls whether an update in one tab should be actively +propagated to other tabs without requiring a navigation or page refresh event. + +## rx.remove_local_storage + +Remove a local storage item from the client's browser. + +Parameters + +- `key`: The key to remove from local storage. + +```python +rx.button( + 'Remove Local Storage', + on_click=rx.remove_local_storage('key'), +) +``` + +This event can also be returned from an event handler: + +```python +class LocalStorageState(rx.State): + ... + def logout(self): + return rx.remove_local_storage('local_storage_state.l1') +``` + +## rx.clear_local_storage() + +Clear all local storage items from the client's browser. This may affect other +apps running in the same domain or libraries within your app that use local +storage. + +```python +rx.button( + 'Clear all Local Storage', + on_click=rx.clear_local_storage(), +) +``` + +## rx.SessionStorage + +Represents a state Var that is stored in sessionStorage in the browser. Similar to localStorage, but the data is cleared when the page session ends (when the browser/tab is closed). Currently only supports string values. + +Parameters + +- `name`: The name of the storage key on the client side. + +```python +class SessionStorageState(rx.State): + # session storage with default settings + s1: str = rx.SessionStorage() + + # session storage with custom settings + s2: str = rx.SessionStorage("s2 default") + s3: str = rx.SessionStorage(name="s3") +``` + +### Session Persistence + +SessionStorage data is cleared when the page session ends. A page session lasts as long as the browser is open and survives page refreshes and restores, but is cleared when the tab or browser is closed. + +Unlike LocalStorage, SessionStorage is isolated to the tab/window in which it was created, so it's not shared with other tabs/windows of the same origin. + +## rx.remove_session_storage + +Remove a session storage item from the client's browser. + +Parameters + +- `key`: The key to remove from session storage. + +```python +rx.button( + 'Remove Session Storage', + on_click=rx.remove_session_storage('key'), +) +``` + +This event can also be returned from an event handler: + +```python +class SessionStorageState(rx.State): + ... + def logout(self): + return rx.remove_session_storage('session_storage_state.s1') +``` + +## rx.clear_session_storage() + +Clear all session storage items from the client's browser. This may affect other +apps running in the same domain or libraries within your app that use session +storage. + +```python +rx.button( + 'Clear all Session Storage', + on_click=rx.clear_session_storage(), +) +``` + +# Serialization Strategies + +If a non-trivial data structure should be stored in a `Cookie`, `LocalStorage`, or `SessionStorage` var it needs to be serialized before and after storing it. It is recommended to use a pydantic class for the data which provides simple serialization helpers and works recursively in complex object structures. + +```python demo exec +import reflex as rx +import pydantic + + +class AppSettings(pydantic.BaseModel): + theme: str = 'light' + sidebar_visible: bool = True + update_frequency: int = 60 + error_messages: list[str] = pydantic.Field(default_factory=list) + + +class ComplexLocalStorageState(rx.State): + data_raw: str = rx.LocalStorage("{}") + data: AppSettings = AppSettings() + settings_open: bool = False + + @rx.event + def save_settings(self): + self.data_raw = self.data.model_dump_json() + self.settings_open = False + + @rx.event + def open_settings(self): + self.data = AppSettings.model_validate_json(self.data_raw) + self.settings_open = True + + @rx.event + def set_field(self, field, value): + setattr(self.data, field, value) + + +def app_settings(): + return rx.form.root( + rx.foreach( + ComplexLocalStorageState.data.error_messages, + rx.text, + ), + rx.form.field( + rx.flex( + rx.form.label( + "Theme", + rx.input( + value=ComplexLocalStorageState.data.theme, + on_change=lambda v: ComplexLocalStorageState.set_field( + "theme", v + ), + ), + ), + rx.form.label( + "Sidebar Visible", + rx.switch( + checked=ComplexLocalStorageState.data.sidebar_visible, + on_change=lambda v: ComplexLocalStorageState.set_field( + "sidebar_visible", + v, + ), + ), + ), + rx.form.label( + "Update Frequency (seconds)", + rx.input( + value=ComplexLocalStorageState.data.update_frequency, + on_change=lambda v: ComplexLocalStorageState.set_field( + "update_frequency", + v, + ), + ), + ), + rx.dialog.close(rx.button("Save", type="submit")), + gap=2, + direction="column", + ) + ), + on_submit=lambda _: ComplexLocalStorageState.save_settings(), + ) + +def app_settings_example(): + return rx.dialog.root( + rx.dialog.trigger( + rx.button("App Settings", on_click=ComplexLocalStorageState.open_settings), + ), + rx.dialog.content( + rx.dialog.title("App Settings"), + app_settings(), + ), + ) +``` + +# Comparison of Storage Types + +Here's a comparison of the different client-side storage options in Reflex: + +| Feature | rx.Cookie | rx.LocalStorage | rx.SessionStorage | +|---------|-----------|----------------|------------------| +| Persistence | Until cookie expires | Until explicitly deleted | Until browser/tab is closed | +| Storage Limit | ~4KB | ~5MB | ~5MB | +| Sent with Requests | Yes | No | No | +| Accessibility | Server & Client | Client Only | Client Only | +| Expiration | Configurable | Never | End of session | +| Scope | Configurable (domain, path) | Origin (domain) | Tab/Window | +| Syncing Across Tabs | No | Yes (with sync=True) | No | +| Use Case | Authentication, Server-side state | User preferences, App state | Temporary session data | + +# When to Use Each Storage Type + +## Use rx.Cookie When: +- You need the data to be accessible on the server side (cookies are sent with HTTP requests) +- You're handling user authentication +- You need fine-grained control over expiration and scope +- You need to limit the data to specific paths in your app + +## Use rx.LocalStorage When: +- You need to store larger amounts of data (up to ~5MB) +- You want the data to persist indefinitely (until explicitly deleted) +- You need to share data between different tabs/windows of your app +- You want to store user preferences that should be remembered across browser sessions + +## Use rx.SessionStorage When: +- You need temporary data that should be cleared when the browser/tab is closed +- You want to isolate data to a specific tab/window +- You're storing sensitive information that shouldn't persist after the session ends +- You're implementing per-session features like form data, shopping carts, or multi-step processes +- You want to persist data for a state after Redis expiration (for server-side state that needs to survive longer than Redis TTL) diff --git a/docs/api-reference/cli.md b/docs/api-reference/cli.md new file mode 100644 index 00000000000..76da441c036 --- /dev/null +++ b/docs/api-reference/cli.md @@ -0,0 +1,128 @@ +# CLI + +The `reflex` command line interface (CLI) is a tool for creating and managing Reflex apps. + +To see a list of all available commands, run `reflex --help`. + +```bash +$ reflex --help + +Usage: reflex [OPTIONS] COMMAND [ARGS]... + + Reflex CLI to create, run, and deploy apps. + +Options: + --version Show the version and exit. + --help Show this message and exit. + +Commands: + cloud The Hosting CLI. + component CLI for creating custom components. + db Subcommands for managing the database schema. + deploy Deploy the app to the Reflex hosting service. + export Export the app to a zip file. + init Initialize a new Reflex app in the current directory. + login Authenticate with experimental Reflex hosting service. + logout Log out of access to Reflex hosting service. + rename Rename the app in the current directory. + run Run the app in the current directory. + script Subcommands for running helper scripts. +``` + +## Init + +The `reflex init` command creates a new Reflex app in the current directory. +If an `rxconfig.py` file already exists already, it will re-initialize the app with the latest template. + +```bash +$ reflex init --help +Usage: reflex init [OPTIONS] + + Initialize a new Reflex app in the current directory. + +Options: + --name APP_NAME The name of the app to initialize. + --template [demo|sidebar|blank] + The template to initialize the app with. + --loglevel [debug|info|warning|error|critical] + The log level to use. [default: + LogLevel.INFO] + --help Show this message and exit. +``` + +## Run + +The `reflex run` command runs the app in the current directory. + +By default it runs your app in development mode. +This means that the app will automatically reload when you make changes to the code. +You can also run in production mode which will create an optimized build of your app. + +You can configure the mode, as well as other options through flags. + +```bash +$ reflex run --help +Usage: reflex run [OPTIONS] + + Run the app in the current directory. + +Options: + --env [dev|prod] The environment to run the app in. + [default: Env.DEV] + --frontend-only Execute only frontend. + --backend-only Execute only backend. + --frontend-port TEXT Specify a different frontend port. + [default: 3000] + --backend-port TEXT Specify a different backend port. [default: + 8000] + --backend-host TEXT Specify the backend host. [default: + 0.0.0.0] + --loglevel [debug|info|warning|error|critical] + The log level to use. [default: + LogLevel.INFO] + --help Show this message and exit. +``` + +## Export + +You can export your app's frontend and backend to zip files using the `reflex export` command. + +The frontend is a compiled NextJS app, which can be deployed to a static hosting service like Github Pages or Vercel. +However this is just a static build, so you will need to deploy the backend separately. +See the self-hosting guide for more information. + +## Rename + +The `reflex rename` command allows you to rename your Reflex app. This updates the app name in the configuration files. + +```bash +$ reflex rename --help +Usage: reflex rename [OPTIONS] NEW_NAME + + Rename the app in the current directory. + +Options: + --loglevel [debug|default|info|warning|error|critical] + The log level to use. + --help Show this message and exit. +``` + +## Cloud + +The `reflex cloud` command provides access to the Reflex Cloud hosting service. It includes subcommands for managing apps, projects, secrets, and more. + +For detailed documentation on Reflex Cloud and deployment, see the [Cloud Quick Start Guide](https://reflex.dev/docs/hosting/deploy-quick-start/). + +## Script + +The `reflex script` command provides access to helper scripts for Reflex development. + +```bash +$ reflex script --help +Usage: reflex script [OPTIONS] COMMAND [ARGS]... + + Subcommands for running helper scripts. + +Options: + --help Show this message and exit. +``` diff --git a/docs/api-reference/event_triggers.md b/docs/api-reference/event_triggers.md new file mode 100644 index 00000000000..4a9620d99f5 --- /dev/null +++ b/docs/api-reference/event_triggers.md @@ -0,0 +1,390 @@ +```python exec +from datetime import datetime + +import reflex as rx + +from pcweb.templates.docpage import docdemo, h1_comp, text_comp, docpage +from pcweb.pages.docs import events + +SYNTHETIC_EVENTS = [ + { + "name": "on_focus", + "description": "The on_focus event handler is called when the element (or some element inside of it) receives focus. For example, it’s called when the user clicks on a text input.", + "state": """class FocusState(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self, text): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.input(value=FocusState.text, on_focus=FocusState.change_text)""", + }, + { + "name": "on_blur", + "description": "The on_blur event handler is called when focus has left the element (or left some element inside of it). For example, it’s called when the user clicks outside of a focused text input.", + "state": """class BlurState(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self, text): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.input(value=BlurState.text, on_blur=BlurState.change_text)""", + }, + { + "name": "on_change", + "description": "The on_change event handler is called when the value of an element has changed. For example, it’s called when the user types into a text input each keystroke triggers the on change.", + "state": """class ChangeState(rx.State): + checked: bool = False + + @rx.event + def set_checked(self): + self.checked = not self.checked + +""", + "example": """rx.switch(on_change=ChangeState.set_checked)""", + }, + { + "name": "on_click", + "description": "The on_click event handler is called when the user clicks on an element. For example, it’s called when the user clicks on a button.", + "state": """class ClickState(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.button(ClickState.text, on_click=ClickState.change_text)""", + }, + { + "name": "on_context_menu", + "description": "The on_context_menu event handler is called when the user right-clicks on an element. For example, it’s called when the user right-clicks on a button.", + "state": """class ContextState(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.button(ContextState.text, on_context_menu=ContextState.change_text)""", + }, + { + "name": "on_double_click", + "description": "The on_double_click event handler is called when the user double-clicks on an element. For example, it’s called when the user double-clicks on a button.", + "state": """class DoubleClickState(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.button(DoubleClickState.text, on_double_click=DoubleClickState.change_text)""", + }, + { + "name": "on_mount", + "description": "The on_mount event handler is called after the component is rendered on the page. It is similar to a page on_load event, although it does not necessarily fire when navigating between pages. This event is particularly useful for initializing data, making API calls, or setting up component-specific state when a component first appears.", + "state": """class MountState(rx.State): + events: list[str] = [] + data: list[dict] = [] + loading: bool = False + + @rx.event + def on_mount(self): + self.events = self.events[-4:] + ["on_mount @ " + str(datetime.now())] + + @rx.event + async def load_data(self): + # Common pattern: Set loading state, yield to update UI, then fetch data + self.loading = True + yield + # Simulate API call + import asyncio + await asyncio.sleep(1) + self.data = [dict(id=1, name="Item 1"), dict(id=2, name="Item 2")] + self.loading = False +""", + "example": """rx.vstack( + rx.heading("Component Lifecycle Demo"), + rx.foreach(MountState.events, rx.text), + rx.cond( + MountState.loading, + rx.spinner(), + rx.foreach( + MountState.data, + lambda item: rx.text(f"ID: {item['id']} - {item['name']}") + ) + ), + on_mount=MountState.on_mount, +)""", + }, + { + "name": "on_unmount", + "description": "The on_unmount event handler is called after removing the component from the page. However, on_unmount will only be called for internal navigation, not when following external links or refreshing the page. This event is useful for cleaning up resources, saving state, or performing cleanup operations before a component is removed from the DOM.", + "state": """class UnmountState(rx.State): + events: list[str] = [] + resource_id: str = "resource-12345" + status: str = "Resource active" + + @rx.event + def on_unmount(self): + self.events = self.events[-4:] + ["on_unmount @ " + str(datetime.now())] + # Common pattern: Clean up resources when component is removed + self.status = f"Resource {self.resource_id} cleaned up" + + @rx.event + def initialize_resource(self): + self.status = f"Resource {self.resource_id} initialized" +""", + "example": """rx.vstack( + rx.heading("Unmount Demo"), + rx.foreach(UnmountState.events, rx.text), + rx.text(UnmountState.status), + rx.link( + rx.button("Navigate Away (Triggers Unmount)"), + href="/docs", + ), + on_mount=UnmountState.initialize_resource, + on_unmount=UnmountState.on_unmount, +)""", + }, + { + "name": "on_mouse_up", + "description": "The on_mouse_up event handler is called when the user releases a mouse button on an element. For example, it’s called when the user releases the left mouse button on a button.", + "state": """class MouseUpState(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.button(MouseUpState.text, on_mouse_up=MouseUpState.change_text)""", + }, + { + "name": "on_mouse_down", + "description": "The on_mouse_down event handler is called when the user presses a mouse button on an element. For example, it’s called when the user presses the left mouse button on a button.", + "state": """class MouseDown(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.button(MouseDown.text, on_mouse_down=MouseDown.change_text)""", + }, + { + "name": "on_mouse_enter", + "description": "The on_mouse_enter event handler is called when the user’s mouse enters an element. For example, it’s called when the user’s mouse enters a button.", + "state": """class MouseEnter(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.button(MouseEnter.text, on_mouse_enter=MouseEnter.change_text)""", + }, + { + "name": "on_mouse_leave", + "description": "The on_mouse_leave event handler is called when the user’s mouse leaves an element. For example, it’s called when the user’s mouse leaves a button.", + "state": """class MouseLeave(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.button(MouseLeave.text, on_mouse_leave=MouseLeave.change_text)""", + }, + { + "name": "on_mouse_move", + "description": "The on_mouse_move event handler is called when the user moves the mouse over an element. For example, it’s called when the user moves the mouse over a button.", + "state": """class MouseMove(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.button(MouseMove.text, on_mouse_move=MouseMove.change_text)""", + }, + { + "name": "on_mouse_out", + "description": "The on_mouse_out event handler is called when the user’s mouse leaves an element. For example, it’s called when the user’s mouse leaves a button.", + "state": """class MouseOut(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.button(MouseOut.text, on_mouse_out=MouseOut.change_text)""", + }, + { + "name": "on_mouse_over", + "description": "The on_mouse_over event handler is called when the user’s mouse enters an element. For example, it’s called when the user’s mouse enters a button.", + "state": """class MouseOver(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.button(MouseOver.text, on_mouse_over=MouseOver.change_text)""", + }, + { + "name": "on_scroll", + "description": "The on_scroll event handler is called when the user scrolls the page. For example, it’s called when the user scrolls the page down.", + "state": """class ScrollState(rx.State): + text = "Change Me!" + + @rx.event + def change_text(self): + if self.text == "Change Me!": + self.text = "Changed!" + else: + self.text = "Change Me!" +""", + "example": """rx.vstack( + rx.text("Scroll to make the text below change."), + rx.text(ScrollState.text), + rx.text("Scroll to make the text above change."), + on_scroll=ScrollState.change_text, + overflow = "auto", + height = "3em", + width = "100%", + )""", + }, +] +for i in SYNTHETIC_EVENTS: + exec(i["state"]) + +def component_grid(): + events = [] + for event in SYNTHETIC_EVENTS: + events.append( + rx.vstack( + h1_comp(text=event["name"]), + text_comp(text=event["description"]), + docdemo( + event["example"], state=event["state"], comp=eval(event["example"]) + ), + align_items="left", + ) + ) + + return rx.box(*events) +``` + +# Event Triggers + +Components can modify the state based on user events such as clicking a button or entering text in a field. +These events are triggered by event triggers. + +Event triggers are component specific and are listed in the documentation for each component. + +## Component Lifecycle Events + +Reflex components have lifecycle events like `on_mount` and `on_unmount` that allow you to execute code at specific points in a component's existence. These events are crucial for initializing data, cleaning up resources, and creating dynamic user interfaces. + +### When Lifecycle Events Are Activated + +- **on_mount**: This event is triggered immediately after a component is rendered and attached to the DOM. It fires: + - When a page containing the component is first loaded + - When a component is conditionally rendered (appears after being hidden) + - When navigating to a page containing the component using internal navigation + - It does NOT fire when the page is refreshed or when following external links + +- **on_unmount**: This event is triggered just before a component is removed from the DOM. It fires: + - When navigating away from a page containing the component using internal navigation + - When a component is conditionally removed from the DOM (e.g., via a condition that hides it) + - It does NOT fire when refreshing the page, closing the browser tab, or following external links + +## Page Load Events + +In addition to component lifecycle events, Reflex also provides page-level events like `on_load` that are triggered when a page loads. The `on_load` event is useful for: + +- Fetching data when a page first loads +- Checking authentication status +- Initializing page-specific state +- Setting default values for cookies or browser storage + +You can specify an event handler to run when the page loads using the `on_load` parameter in the `@rx.page` decorator or `app.add_page()` method: + +```python +class State(rx.State): + data: dict = dict() + + @rx.event + def get_data(self): + # Fetch data when the page loads + self.data = fetch_data() + +@rx.page(on_load=State.get_data) +def index(): + return rx.text('Data loaded on page load') +``` + +This is particularly useful for authentication checks: + +```python +class State(rx.State): + authenticated: bool = False + + @rx.event + def check_auth(self): + # Check if user is authenticated + self.authenticated = check_auth() + if not self.authenticated: + return rx.redirect('/login') + +@rx.page(on_load=State.check_auth) +def protected_page(): + return rx.text('Protected content') +``` + +For more details on page load events, see the [page load events documentation]({events.page_load_events.path}). + +# Event Reference + +```python eval +rx.box( + rx.divider(), + component_grid(), +) +``` diff --git a/docs/api-reference/plugins.md b/docs/api-reference/plugins.md new file mode 100644 index 00000000000..7170cd114b9 --- /dev/null +++ b/docs/api-reference/plugins.md @@ -0,0 +1,242 @@ +```python exec +import reflex as rx +from pcweb.pages.docs import advanced_onboarding +``` + +# Plugins + +Reflex supports a plugin system that allows you to extend the framework's functionality during the compilation process. Plugins can add frontend dependencies, modify build configurations, generate static assets, and perform custom tasks before compilation. + +## Configuring Plugins + +Plugins are configured in your `rxconfig.py` file using the `plugins` parameter: + +```python +import reflex as rx + +config = rx.Config( + app_name="my_app", + plugins=[ + rx.plugins.SitemapPlugin(), + rx.plugins.TailwindV4Plugin(), + ], +) +``` + +## Built-in Plugins + +Reflex comes with several built-in plugins that provide common functionality. + +### SitemapPlugin + +The `SitemapPlugin` automatically generates a sitemap.xml file for your application, which helps search engines discover and index your pages. + +```python +import reflex as rx + +config = rx.Config( + app_name="my_app", + plugins=[ + rx.plugins.SitemapPlugin(), + ], +) +``` + +The sitemap plugin automatically includes all your app's routes. For dynamic routes or custom configuration, you can add sitemap metadata to individual pages: + +```python +@rx.page(route="/blog/[slug]", context={"sitemap": {"changefreq": "weekly", "priority": 0.8}}) +def blog_post(): + return rx.text("Blog post content") + +@rx.page(route="/about", context={"sitemap": {"changefreq": "monthly", "priority": 0.5}}) +def about(): + return rx.text("About page") +``` + +The sitemap configuration supports the following options: +- `loc`: Custom URL for the page (required for dynamic routes) +- `lastmod`: Last modification date (datetime object) +- `changefreq`: How frequently the page changes (`"always"`, `"hourly"`, `"daily"`, `"weekly"`, `"monthly"`, `"yearly"`, `"never"`) +- `priority`: Priority of this URL relative to other URLs (0.0 to 1.0) + +### TailwindV4Plugin + +The `TailwindV4Plugin` provides support for Tailwind CSS v4, which is the recommended version for new projects and includes performance improvements and new features. + +```python +import reflex as rx + +# Basic configuration +config = rx.Config( + app_name="my_app", + plugins=[ + rx.plugins.TailwindV4Plugin(), + ], +) +``` + +You can customize the Tailwind configuration by passing a config dictionary: + +```python +import reflex as rx + +tailwind_config = { + "theme": { + "extend": { + "colors": { + "brand": { + "50": "#eff6ff", + "500": "#3b82f6", + "900": "#1e3a8a", + } + } + } + }, + "plugins": ["@tailwindcss/typography"], +} + +config = rx.Config( + app_name="my_app", + plugins=[ + rx.plugins.TailwindV4Plugin(tailwind_config), + ], +) +``` + +### TailwindV3Plugin + +The `TailwindV3Plugin` integrates Tailwind CSS v3 into your Reflex application. While still supported, TailwindV4Plugin is recommended for new projects. + +```python +import reflex as rx + +# Basic configuration +config = rx.Config( + app_name="my_app", + plugins=[ + rx.plugins.TailwindV3Plugin(), + ], +) +``` + +You can customize the Tailwind configuration by passing a config dictionary: + +```python +import reflex as rx + +tailwind_config = { + "theme": { + "extend": { + "colors": { + "primary": "#3b82f6", + "secondary": "#64748b", + } + } + }, + "plugins": ["@tailwindcss/typography", "@tailwindcss/forms"], +} + +config = rx.Config( + app_name="my_app", + plugins=[ + rx.plugins.TailwindV3Plugin(tailwind_config), + ], +) +``` + +## Plugin Management + +### Default Plugins + +Some plugins are enabled by default. Currently, the `SitemapPlugin` is enabled automatically. If you want to disable a default plugin, use the `disable_plugins` parameter: + +```python +import reflex as rx + +config = rx.Config( + app_name="my_app", + disable_plugins=["reflex.plugins.sitemap.SitemapPlugin"], +) +``` + +### Plugin Order + +Plugins are executed in the order they appear in the `plugins` list. This can be important if plugins have dependencies on each other or modify the same files. + +```python +import reflex as rx + +config = rx.Config( + app_name="my_app", + plugins=[ + rx.plugins.TailwindV4Plugin(), # Runs first + rx.plugins.SitemapPlugin(), # Runs second + ], +) +``` + + +## Plugin Architecture + +All plugins inherit from the base `Plugin` class and can implement several lifecycle methods: + +```python +class Plugin: + def get_frontend_development_dependencies(self, **context) -> list[str]: + """Get NPM packages required by the plugin for development.""" + return [] + + def get_frontend_dependencies(self, **context) -> list[str]: + """Get NPM packages required by the plugin.""" + return [] + + def get_static_assets(self, **context) -> Sequence[tuple[Path, str | bytes]]: + """Get static assets required by the plugin.""" + return [] + + def get_stylesheet_paths(self, **context) -> Sequence[str]: + """Get paths to stylesheets required by the plugin.""" + return [] + + def pre_compile(self, **context) -> None: + """Called before compilation to perform custom tasks.""" + pass +``` + +### Creating Custom Plugins + +You can create custom plugins by inheriting from the base `Plugin` class: + +```python +from reflex.plugins.base import Plugin +from pathlib import Path + +class CustomPlugin(Plugin): + def get_frontend_dependencies(self, **context): + return ["my-custom-package@1.0.0"] + + def pre_compile(self, **context): + # Custom logic before compilation + print("Running custom plugin logic...") + + # Add a custom task + context["add_save_task"](self.create_custom_file) + + def create_custom_file(self): + return "public/custom.txt", "Custom content" +``` + +Then use it in your configuration: + +```python +import reflex as rx +from my_plugins import CustomPlugin + +config = rx.Config( + app_name="my_app", + plugins=[ + CustomPlugin(), + ], +) +``` diff --git a/docs/api-reference/special_events.md b/docs/api-reference/special_events.md new file mode 100644 index 00000000000..675f465ca70 --- /dev/null +++ b/docs/api-reference/special_events.md @@ -0,0 +1,123 @@ +```python exec +import reflex as rx +``` + +# Special Events + +Reflex includes a set of built-in special events that can be utilized as event triggers +or returned from event handlers in your applications. These events enhance interactivity and user experience. +Below are the special events available in Reflex, along with explanations of their functionality: + +## rx.console_log + +Perform a console.log in the browser's console. + +```python demo +rx.button('Log', on_click=rx.console_log('Hello World!')) +``` + +When triggered, this event logs a specified message to the browser's developer console. +It's useful for debugging and monitoring the behavior of your application. + +## rx.scroll_to + +scroll to an element in the page + +```python demo +rx.button( + "Scroll to download button", + on_click=rx.scroll_to("download button") + +) +``` + +When this is triggered, it scrolls to an element passed by id as parameter. Click on button to scroll to download button (rx.download section) at the bottom of the page + +## rx.redirect + +Redirect the user to a new path within the application. + +### Parameters + +- `path`: The destination path or URL to which the user should be redirected. +- `external`: If set to True, the redirection will open in a new tab. Defaults to `False`. + +```python demo +rx.vstack( + rx.button("open in tab", on_click=rx.redirect("/docs/api-reference/special-events")), + rx.button("open in new tab", on_click=rx.redirect('https://github.com/reflex-dev/reflex/', is_external=True)) +) +``` + +When this event is triggered, it navigates the user to a different page or location within your Reflex application. +By default, the redirection occurs in the same tab. However, if you set the external parameter to True, the redirection +will open in a new tab or window, providing a seamless user experience. + +This event can also be run from an event handler in State. It is necessary to `return` the `rx.redirect()`. + +```python demo exec +class RedirectExampleState(rx.State): + """The app state.""" + + @rx.event + def change_page(self): + return rx.redirect('https://github.com/reflex-dev/reflex/', is_external=True) + +def redirect_example(): + return rx.vstack( + rx.button("Change page in State", on_click=RedirectExampleState.change_page), + ) +``` + +## rx.set_clipboard + +Set the specified text content to the clipboard. + +```python demo +rx.button('Copy "Hello World" to clipboard',on_click=rx.set_clipboard('Hello World'),) +``` + +This event allows you to copy a given text or content to the user's clipboard. +It's handy when you want to provide a "Copy to Clipboard" feature in your application, +allowing users to easily copy information to paste elsewhere. + +## rx.set_value + +Set the value of a specified reference element. + +```python demo +rx.hstack( + rx.input(id='input1'), + rx.button( + 'Erase', on_click=rx.set_value('input1', '') + ), +) +``` + +With this event, you can modify the value of a particular HTML element, typically an input field or another form element. + +## rx.window_alert + +Create a window alert in the browser. + +```python demo +rx.button('Alert', on_click=rx.window_alert('Hello World!')) +``` + +## rx.download + +Download a file at a given path. + +Parameters: + +- `url`: The URL of the file to be downloaded. +- `data`: The data to be downloaded. Should be `str` or `bytes`, `data:` URI, `PIL.Image`, or any state Var (to be converted to JSON). +- `filename`: The desired filename of the downloaded file. + +```md alert +# `url` and `data` args are mutually exclusive, and at least one of them must be provided. +``` + +```python demo +rx.button("Download", on_click=rx.download(url="/reflex_banner.webp", filename="different_name_logo.webp"), id="download button") +``` diff --git a/docs/api-reference/utils.md b/docs/api-reference/utils.md new file mode 100644 index 00000000000..48beb020dc2 --- /dev/null +++ b/docs/api-reference/utils.md @@ -0,0 +1,170 @@ +```python exec +import reflex as rx +from pcweb import constants, styles +``` + +# Utility Functions + +Reflex provides utility functions to help with common tasks in your applications. + +## run_in_thread + +The `run_in_thread` function allows you to run a **non-async** function in a separate thread, which is useful for preventing long-running operations from blocking the UI event queue. + +```python +async def run_in_thread(func: Callable) -> Any +``` + +### Parameters + +- `func`: The non-async function to run in a separate thread. + +### Returns + +- The return value of the function. + +### Raises + +- `ValueError`: If the function is an async function. + +### Usage + +```python demo exec id=run_in_thread_demo +import asyncio +import dataclasses +import time +import reflex as rx + + +def quick_blocking_function(): + time.sleep(0.5) + return "Quick task completed successfully!" + + +def slow_blocking_function(): + time.sleep(3.0) + return "This should never be returned due to timeout!" + + +@dataclasses.dataclass +class TaskInfo: + result: str = "No result yet" + status: str = "Idle" + + +class RunInThreadState(rx.State): + tasks: list[TaskInfo] = [] + + @rx.event(background=True) + async def run_quick_task(self): + """Run a quick task that completes within the timeout.""" + async with self: + task_ix = len(self.tasks) + self.tasks.append(TaskInfo(status="Running quick task...")) + task_info = self.tasks[task_ix] + + try: + result = await rx.run_in_thread(quick_blocking_function) + async with self: + task_info.result = result + task_info.status = "Complete" + except Exception as e: + async with self: + task_info.result = f"Error: {str(e)}" + task_info.status = "Failed" + + @rx.event(background=True) + async def run_slow_task(self): + """Run a slow task that exceeds the timeout.""" + async with self: + task_ix = len(self.tasks) + self.tasks.append(TaskInfo(status="Running slow task...")) + task_info = self.tasks[task_ix] + + try: + # Run with a timeout of 1 second (not enough time) + result = await asyncio.wait_for( + rx.run_in_thread(slow_blocking_function), + timeout=1.0, + ) + async with self: + task_info.result = result + task_info.status = "Complete" + except asyncio.TimeoutError: + async with self: + # Warning: even though we stopped waiting for the task, + # it may still be running in thread + task_info.result = "Task timed out after 1 second!" + task_info.status = "Timeout" + except Exception as e: + async with self: + task_info.result = f"Error: {str(e)}" + task_info.status = "Failed" + + +def run_in_thread_example(): + return rx.vstack( + rx.heading("run_in_thread Example", size="3"), + rx.hstack( + rx.button( + "Run Quick Task", + on_click=RunInThreadState.run_quick_task, + color_scheme="green", + ), + rx.button( + "Run Slow Task (exceeds timeout)", + on_click=RunInThreadState.run_slow_task, + color_scheme="red", + ), + ), + rx.vstack( + rx.foreach( + RunInThreadState.tasks.reverse()[:10], + lambda task: rx.hstack( + rx.text(task.status), + rx.spacer(), + rx.text(task.result), + ), + ), + align="start", + width="100%", + ), + width="100%", + align_items="start", + spacing="4", + ) +``` + +### When to Use run_in_thread + +Use `run_in_thread` when you need to: + +1. Execute CPU-bound operations that would otherwise block the event loop +2. Call synchronous libraries that don't have async equivalents +3. Prevent long-running operations from blocking UI responsiveness + +### Example: Processing a Large File + +```python +import reflex as rx +import time + +class FileProcessingState(rx.State): + progress: str = "Ready" + + @rx.event(background=True) + async def process_large_file(self): + async with self: + self.progress = "Processing file..." + + def process_file(): + # Simulate processing a large file + time.sleep(5) + return "File processed successfully!" + + # Save the result to a local variable to avoid blocking the event loop. + result = await rx.run_in_thread(process_file) + async with self: + # Then assign the local result to the state while holding the lock. + self.progress = result +``` diff --git a/docs/api-reference/var_system.md b/docs/api-reference/var_system.md new file mode 100644 index 00000000000..39482420e03 --- /dev/null +++ b/docs/api-reference/var_system.md @@ -0,0 +1,82 @@ +# Reflex's Var System + +## Motivation + +Reflex supports some basic operations in state variables on the frontend. +Reflex automatically converts variable operations from Python into a JavaScript equivalent. + +Here's an example of a Reflex conditional in Python that returns "Pass" if the threshold is equal to or greater than 50 and "Fail" otherwise: + +```py +rx.cond( + State.threshold >= 50, + "Pass", + "Fail", +) +``` + + The conditional to roughly the following in Javascript: + +```js +state.threshold >= 50 ? "Pass" : "Fail"; +``` + +## Overview + +Simply put, a `Var` in Reflex represents a Javascript expression. +If the type is known, it can be any of the following: + +- `NumberVar` represents an expression that evaluates to a Javascript `number`. `NumberVar` can support both integers and floating point values +- `BooleanVar` represents a boolean expression. For example: `false`, `3 > 2`. +- `StringVar` represents an expression that evaluates to a string. For example: `'hello'`, `(2).toString()`. +- `ArrayVar` represents an expression that evaluates to an array object. For example: `[1, 2, 3]`, `'words'.split()`. +- `ObjectVar` represents an expression that evaluates to an object. For example: `\{a: 2, b: 3}`, `\{deeply: \{nested: \{value: false}}}`. +- `NoneVar` represent null values. These can be either `undefined` or `null`. + +## Creating Vars + +State fields are converted to `Var` by default. Additionally, you can create a `Var` from Python values using `rx.Var.create()`: + +```py +rx.Var.create(4) # NumberVar +rx.Var.create("hello") # StringVar +rx.Var.create([1, 2, 3]) # ArrayVar +``` + +If you want to explicitly create a `Var` from a raw Javascript string, you can instantiate `rx.Var` directly: + +```py +rx.Var("2", _var_type=int).guess_type() # NumberVar +``` + +In the example above, `.guess_type()` will attempt to downcast from a generic `Var` type into `NumberVar`. +For this example, calling the function `.to(int)` can also be used in place of `.guess_type()`. + +## Operations + +The `Var` system also supports some other basic operations. +For example, `NumberVar` supports basic arithmetic operations like `+` and `-`, as in Python. +It also supports comparisons that return a `BooleanVar`. + +Custom `Var` operations can also be defined: + +```py +from reflex.vars import var_operation, var_operation_return, ArrayVar, NumberVar + +@var_operation +def multiply_array_values(a: ArrayVar): + return var_operation_return( + js_expression=f"\{a}.reduce((p, c) => p * c, 1)", + var_type=int, + ) + +def factorial(value: NumberVar): + return rx.cond( + value <= 1, + 1, + multiply_array_values(rx.Var.range(1, value+1)) + ) +``` + +Use `js_expression` to pass explicit JavaScript expressions; in the `multiply_array_values` example, we pass in a JavaScript expression that calculates the product of all elements in an array called `a` by using the reduce method to multiply each element with the accumulated result, starting from an initial value of 1. +Later, we leverage `rx.cond` in the' factorial' function, we instantiate an array using the `range` function, and pass this array to `multiply_array_values`. diff --git a/docs/api-routes/overview.md b/docs/api-routes/overview.md new file mode 100644 index 00000000000..30e5ef31f7a --- /dev/null +++ b/docs/api-routes/overview.md @@ -0,0 +1,152 @@ +```python exec +import reflex as rx +``` + +# API Transformer + +In addition to your frontend app, Reflex uses a FastAPI backend to serve your app. The API transformer feature allows you to transform or extend the ASGI app that serves your Reflex application. + +## Overview + +The API transformer provides a way to: + +1. Integrate existing FastAPI or Starlette applications with your Reflex app +2. Apply middleware or transformations to the ASGI app +3. Extend your Reflex app with additional API endpoints + +This is useful for creating a backend API that can be used for purposes beyond your Reflex app, or for integrating Reflex with existing backend services. + +## Using API Transformer + +You can set the `api_transformer` parameter when initializing your Reflex app: + +```python +import reflex as rx +from fastapi import FastAPI, Depends +from fastapi.security import OAuth2PasswordBearer + +# Create a FastAPI app +fastapi_app = FastAPI(title="My API") + +# Add routes to the FastAPI app +@fastapi_app.get("/api/items") +async def get_items(): + return dict(items=["Item1", "Item2", "Item3"]) + +# Create a Reflex app with the FastAPI app as the API transformer +app = rx.App(api_transformer=fastapi_app) +``` + +## Types of API Transformers + +The `api_transformer` parameter can accept: + +1. A Starlette or FastAPI instance +2. A callable that takes an ASGIApp and returns an ASGIApp +3. A sequence of the above + +### Using a FastAPI or Starlette Instance + +When you provide a FastAPI or Starlette instance as the API transformer, Reflex will mount its internal API to your app, allowing you to define additional routes: + +```python +import reflex as rx +from fastapi import FastAPI, Depends +from fastapi.security import OAuth2PasswordBearer + +# Create a FastAPI app with authentication +fastapi_app = FastAPI(title="Secure API") +oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") + +# Add a protected route +@fastapi_app.get("/api/protected") +async def protected_route(token: str = Depends(oauth2_scheme)): + return dict(message="This is a protected endpoint") + +# Create a token endpoint +@fastapi_app.post("/token") +async def login(username: str, password: str): + # In a real app, you would validate credentials + if username == "user" and password == "password": + return dict(access_token="example_token", token_type="bearer") + return dict(error="Invalid credentials") + +# Create a Reflex app with the FastAPI app as the API transformer +app = rx.App(api_transformer=fastapi_app) +``` + +### Using a Callable Transformer + +You can also provide a callable that transforms the ASGI app: + +```python +import reflex as rx +from starlette.middleware.cors import CORSMiddleware + +# Create a transformer function that returns a transformed ASGI app +def add_cors_middleware(app): + # Wrap the app with CORS middleware and return the wrapped app + return CORSMiddleware( + app=app, + allow_origins=["https://example.com"], + allow_methods=["*"], + allow_headers=["*"], + ) + +# Create a Reflex app with the transformer +app = rx.App(api_transformer=add_cors_middleware) +``` + +### Using Multiple Transformers + +You can apply multiple transformers by providing a sequence: + +```python +import reflex as rx +from fastapi import FastAPI +from starlette.middleware import Middleware +from starlette.middleware.cors import CORSMiddleware + +# Create a FastAPI app +fastapi_app = FastAPI(title="My API") + +# Add routes to the FastAPI app +@fastapi_app.get("/api/items") +async def get_items(): + return dict(items=["Item1", "Item2", "Item3"]) + +# Create a transformer function +def add_logging_middleware(app): + # This is a simple example middleware that logs requests + async def middleware(scope, receive, send): + # Log the request path + path = scope["path"] + print("Request:", path) + await app(scope, receive, send) + return middleware + +# Create a Reflex app with multiple transformers +app = rx.App(api_transformer=[fastapi_app, add_logging_middleware]) +``` + +## Reserved Routes + +Some routes on the backend are reserved for the runtime of Reflex, and should not be overridden unless you know what you are doing. + +### Ping + +`localhost:8000/ping/`: You can use this route to check the health of the backend. + +The expected return is `"pong"`. + +### Event + +`localhost:8000/_event`: the frontend will use this route to notify the backend that an event occurred. + +```md alert error +# Overriding this route will break the event communication +``` + +### Upload + +`localhost:8000/_upload`: This route is used for the upload of file when using `rx.upload()`. diff --git a/docs/assets/overview.md b/docs/assets/overview.md new file mode 100644 index 00000000000..51ba7e1599d --- /dev/null +++ b/docs/assets/overview.md @@ -0,0 +1,95 @@ +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +``` + +# Assets + +Static files such as images and stylesheets can be placed in `assets/` folder of the project. These files can be referenced within your app. + +```md alert +# Assets are copied during the build process. + +Any files placed within the `assets/` folder at runtime will not be available to the app +when running in production mode. The `assets/` folder should only be used for static files. +``` + +## Referencing Assets + +There are two ways to reference assets in your Reflex app: + +### 1. Direct Path Reference + +To reference an image in the `assets/` folder, pass the relative path as a prop. + +For example, you can store your logo in your assets folder: + +```bash +assets +└── Reflex.svg +``` + +Then you can display it using a `rx.image` component: + +```python demo +rx.image(src=f"{REFLEX_ASSETS_CDN}other/Reflex.svg", width="5em") +``` + +```md alert +# Always prefix the asset path with a forward slash `/` to reference the asset from the root of the project, or it may not display correctly on non-root pages. +``` + +### 2. Using rx.asset Function + +The `rx.asset` function provides a more flexible way to reference assets in your app. It supports both local assets (in the app's `assets/` directory) and shared assets (placed next to your Python files). + +#### Local Assets + +Local assets are stored in the app's `assets/` directory and are referenced using `rx.asset`: + +```python demo +rx.image(src=rx.asset("Reflex.svg"), width="5em") +``` + +#### Shared Assets + +Shared assets are placed next to your Python file and are linked to the app's external assets directory. This is useful for creating reusable components with their own assets: + +```python box +# my_component.py +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN + +# my_script.js is located in the same directory as this Python file +def my_component(): + return rx.box( + rx.script(src=rx.asset("my_script.js", shared=True)), + "Component with custom script" + ) +``` + +You can also specify a subfolder for shared assets: + +```python box +# my_component.py +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN + +# image.png is located in a subfolder next to this Python file +def my_component_with_image(): + return rx.image( + src=rx.asset("image.png", shared=True, subfolder="images") + ) +``` + +```md alert +# Shared assets are linked to your app via symlinks. + +When using `shared=True`, the asset is symlinked from its original location to your app's external assets directory. This allows you to keep assets alongside their related code. +``` + +## Favicon + +The favicon is the small icon that appears in the browser tab. + +You can add a `favicon.ico` file to the `assets/` folder to change the favicon. diff --git a/docs/assets/upload_and_download_files.md b/docs/assets/upload_and_download_files.md new file mode 100644 index 00000000000..75911965434 --- /dev/null +++ b/docs/assets/upload_and_download_files.md @@ -0,0 +1,154 @@ +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +from pcweb.pages.docs import library +from pcweb.pages.docs import api_reference +from pcweb.styles.styles import get_code_style +from pcweb.styles.colors import c_color +``` + +# Files + +In addition to any assets you ship with your app, many web app will often need to receive or send files, whether you want to share media, allow user to import their data, or export some backend data. + +In this section, we will cover all you need to know for manipulating files in Reflex. + +## Assets vs Upload Directory + +Before diving into file uploads and downloads, it's important to understand the difference between assets and the upload directory in Reflex: + +```python eval +# Simple table comparing assets vs upload directory +rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Feature"), + rx.table.column_header_cell("Assets"), + rx.table.column_header_cell("Upload Directory"), + ), + ), + rx.table.body( + rx.table.row( + rx.table.cell(rx.text("Purpose", font_weight="bold")), + rx.table.cell(rx.text("Static files included with your app (images, stylesheets, scripts)")), + rx.table.cell(rx.text("Dynamic files uploaded by users during runtime")), + ), + rx.table.row( + rx.table.cell(rx.text("Location", font_weight="bold")), + rx.table.cell(rx.hstack( + rx.code("assets/", style=get_code_style("violet")), + rx.text(" folder or next to Python files (shared assets)"), + spacing="2", + )), + rx.table.cell(rx.hstack( + rx.code("uploaded_files/", style=get_code_style("violet")), + rx.text(" directory (configurable)"), + spacing="2", + )), + ), + rx.table.row( + rx.table.cell(rx.text("Access Method", font_weight="bold")), + rx.table.cell(rx.hstack( + rx.code("rx.asset()", style=get_code_style("violet")), + rx.text(" or direct path reference"), + spacing="2", + )), + rx.table.cell(rx.code("rx.get_upload_url()", style=get_code_style("violet"))), + ), + rx.table.row( + rx.table.cell(rx.text("When to Use", font_weight="bold")), + rx.table.cell(rx.text("For files that are part of your application's codebase")), + rx.table.cell(rx.text("For files that users upload or generate through your application")), + ), + rx.table.row( + rx.table.cell(rx.text("Availability", font_weight="bold")), + rx.table.cell(rx.text("Available at compile time")), + rx.table.cell(rx.text("Available at runtime")), + ), + ), + width="100%", +) +``` + + + +For more information about assets, see the [Assets Overview](/docs/assets/overview/). + +## Download + +If you want to let the users of your app download files from your server to their computer, Reflex offer you two way. + +### With a regular link + +For some basic usage, simply providing the path to your resource in a `rx.link` will work, and clicking the link will download or display the resource. + +```python demo +rx.link("Download", href="/reflex_banner.webp") +``` + +### With `rx.download` event + +Using the `rx.download` event will always prompt the browser to download the file, even if it could be displayed in the browser. + +The `rx.download` event also allows the download to be triggered from another backend event handler. + +```python demo +rx.button( + "Download", + on_click=rx.download(url="/reflex_banner.webp"), +) +``` + +`rx.download` lets you specify a name for the file that will be downloaded, if you want it to be different from the name on the server side. + +```python demo +rx.button( + "Download and Rename", + on_click=rx.download( + url="/reflex_banner.webp", + filename="different_name_logo.png" + ), +) +``` + +If the data to download is not already available at a known URL, pass the `data` directly to the `rx.download` event from the backend. + +```python demo exec +import random + +class DownloadState(rx.State): + @rx.event + def download_random_data(self): + return rx.download( + data=",".join([str(random.randint(0, 100)) for _ in range(10)]), + filename="random_numbers.csv" + ) + +def download_random_data_button(): + return rx.button( + "Download random numbers", + on_click=DownloadState.download_random_data + ) +``` + +The `data` arg accepts `str` or `bytes` data, a `data:` URI, `PIL.Image`, or any state Var. If the Var is not already a string, it will be converted to a string using `JSON.stringify`. This allows complex state structures to be offered as JSON downloads. + +Reference page for `rx.download` [here]({api_reference.special_events.path}#rx.download). + +## Upload + +Uploading files to your server let your users interact with your app in a different way than just filling forms to provide data. + +The component `rx.upload` let your users upload files on the server. + +Here is a basic example of how it is used: + +```python +def index(): + return rx.fragment( + rx.upload(rx.text("Upload files"), rx.icon(tag="upload")), + rx.button(on_submit=State.) + ) +``` + +For detailed information, see the reference page of the component [here]({library.forms.upload.path}). diff --git a/docs/authentication/authentication_overview.md b/docs/authentication/authentication_overview.md new file mode 100644 index 00000000000..72dc4de4ecd --- /dev/null +++ b/docs/authentication/authentication_overview.md @@ -0,0 +1,28 @@ +```python exec +from pcweb.pages.docs import vars +``` + +# Authentication Overview + +Many apps require authentication to manage users. There are a few different ways to accomplish this in Reflex: + +We have solutions that currently exist outside of the core framework: + +1. Local Auth: Uses your own database: https://github.com/masenf/reflex-local-auth +2. Google Auth: Uses sign in with Google: https://github.com/masenf/reflex-google-auth +3. Captcha: Generates tests that humans can pass but automated systems cannot: https://github.com/masenf/reflex-google-recaptcha-v2 +4. Magic Link Auth: A passwordless login method that sends a unique, one-time-use URL to a user's email: https://github.com/masenf/reflex-magic-link-auth +5. Clerk Auth: A community member wrapped this component and hooked it up in this app: https://github.com/TimChild/reflex-clerk-api +6. Descope Auth: Enables authentication with Descope, supporting passwordless, social login, SSO, and MFA: https://github.com/descope-sample-apps/reflex-descope-auth + +If you're using the AI Builder, you can also use the built-in [Authentication Integrations](/docs/ai-builder/integrations/overview) which include Azure Auth, Google Auth, Okta Auth, and Descope. + +## Guidance for Implementing Authentication + +- Store sensitive user tokens and information in [backend-only vars]({vars.base_vars.path}#backend-only-vars). +- Validate user session and permissions for each event handler that performs an authenticated action and all computed vars or loader events that access private data. +- All content that is statically rendered in the frontend (for example, data hardcoded or loaded at compile time in the UI) will be publicly available, even if the page redirects to a login or uses `rx.cond` to hide content. +- Only data that originates from state can be truly private and protected. +- When using cookies or local storage, a signed JWT can detect and invalidate any local tampering. + +More auth documentation on the way. Check back soon! diff --git a/docs/client_storage/overview.md b/docs/client_storage/overview.md new file mode 100644 index 00000000000..7016080a1d9 --- /dev/null +++ b/docs/client_storage/overview.md @@ -0,0 +1,45 @@ +```python exec +import reflex as rx +``` + +# Client-storage + +You can use the browser's local storage to persist state between sessions. +This allows user preferences, authentication cookies, other bits of information +to be stored on the client and accessed from different browser tabs. + +A client-side storage var looks and acts like a normal `str` var, except the +default value is either `rx.Cookie` or `rx.LocalStorage` depending on where the +value should be stored. The key name will be based on the var name, but this +can be overridden by passing `name="my_custom_name"` as a keyword argument. + +For more information see [Browser Storage](/docs/api-reference/browser-storage/). + +Try entering some values in the text boxes below and then load the page in a separate +tab or check the storage section of browser devtools to see the values saved in the browser. + +```python demo exec +class ClientStorageState(rx.State): + my_cookie: str = rx.Cookie("") + my_local_storage: str = rx.LocalStorage("") + custom_cookie: str = rx.Cookie(name="CustomNamedCookie", max_age=3600) + + @rx.event + def set_my_cookie(self, value: str): + self.my_cookie = value + + @rx.event + def set_my_local_storage(self, value: str): + self.my_local_storage = value + + @rx.event + def set_custom_cookie(self, value: str): + self.custom_cookie = value + +def client_storage_example(): + return rx.vstack( + rx.hstack(rx.text("my_cookie"), rx.input(value=ClientStorageState.my_cookie, on_change=ClientStorageState.set_my_cookie)), + rx.hstack(rx.text("my_local_storage"), rx.input(value=ClientStorageState.my_local_storage, on_change=ClientStorageState.set_my_local_storage)), + rx.hstack(rx.text("custom_cookie"), rx.input(value=ClientStorageState.custom_cookie, on_change=ClientStorageState.set_custom_cookie)), + ) +``` diff --git a/docs/components/conditional_rendering.md b/docs/components/conditional_rendering.md new file mode 100644 index 00000000000..5df4111a40c --- /dev/null +++ b/docs/components/conditional_rendering.md @@ -0,0 +1,131 @@ +```python exec +import reflex as rx + +from pcweb.pages.docs import library +from pcweb.pages import docs +``` + +# Conditional Rendering + +Recall from the [basics]({docs.getting_started.basics.path}) that we cannot use Python `if/else` statements when referencing state vars in Reflex. Instead, use the `rx.cond` component to conditionally render components or set props based on the value of a state var. + +```md video https://youtube.com/embed/ITOZkzjtjUA?start=6040&end=6463 +# Video: Conditional Rendering +``` + +```md alert +# Check out the API reference for [cond docs]({library.dynamic_rendering.cond.path}). +``` + +```python eval +rx.box(height="2em") +``` + +Below is a simple example showing how to toggle between two text components by checking the value of the state var `show`. + +```python demo exec +class CondSimpleState(rx.State): + show: bool = True + + @rx.event + def change(self): + self.show = not (self.show) + + +def cond_simple_example(): + return rx.vstack( + rx.button("Toggle", on_click=CondSimpleState.change), + rx.cond( + CondSimpleState.show, + rx.text("Text 1", color="blue"), + rx.text("Text 2", color="red"), + ), + ) +``` + +If `show` is `True` then the first component is rendered (in this case the blue text). Otherwise the second component is rendered (in this case the red text). + +## Conditional Props + +You can also set props conditionally using `rx.cond`. In this example, we set the `color` prop of a text component based on the value of the state var `show`. + +```python demo exec +class PropCondState(rx.State): + + value: int + + @rx.event + def set_end(self, value: list[int | float]): + self.value = value[0] + + +def cond_prop(): + return rx.slider( + default_value=[50], + on_value_commit=PropCondState.set_end, + color_scheme=rx.cond(PropCondState.value > 50, "green", "pink"), + width="100%", + ) +``` + + +## Var Operations + +You can use [var operations]({docs.vars.var_operations.path}) with the `cond` component for more complex conditions. See the full [cond reference]({library.dynamic_rendering.cond.path}) for more details. + + +## Multiple Conditional Statements + +The [`rx.match`]({library.dynamic_rendering.match.path}) component in Reflex provides a powerful alternative to`rx.cond` for handling multiple conditional statements and structural pattern matching. This component allows you to handle multiple conditions and their associated components in a cleaner and more readable way compared to nested `rx.cond` structures. + +```python demo exec +from typing import List + +import reflex as rx + + +class MatchState(rx.State): + cat_breed: str = "" + animal_options: List[str] = [ + "persian", + "siamese", + "maine coon", + "ragdoll", + "pug", + "corgi", + ] + + @rx.event + def set_cat_breed(self, breed: str): + self.cat_breed = breed + + +def match_demo(): + return rx.flex( + rx.match( + MatchState.cat_breed, + ("persian", rx.text("Persian cat selected.")), + ("siamese", rx.text("Siamese cat selected.")), + ( + "maine coon", + rx.text("Maine Coon cat selected."), + ), + ("ragdoll", rx.text("Ragdoll cat selected.")), + rx.text("Unknown cat breed selected."), + ), + rx.select( + [ + "persian", + "siamese", + "maine coon", + "ragdoll", + "pug", + "corgi", + ], + value=MatchState.cat_breed, + on_change=MatchState.set_cat_breed, + ), + direction="column", + gap="2", + ) +``` diff --git a/docs/components/html_to_reflex.md b/docs/components/html_to_reflex.md new file mode 100644 index 00000000000..42dcd0f5f60 --- /dev/null +++ b/docs/components/html_to_reflex.md @@ -0,0 +1,16 @@ +# Convert HTML to Reflex + +To convert HTML, CSS, or any design into Reflex code, use our AI-powered build tool at [Reflex Build](https://build.reflex.dev). + +Simply paste your HTML, CSS, or describe what you want to build, and our AI will generate the corresponding Reflex code for you. + +## How to use Reflex Build + +1. Go to [Reflex Build](https://build.reflex.dev) +2. Paste your HTML/CSS code or describe your design +3. The AI will automatically generate Reflex code +4. Copy the generated code into your Reflex application + +## Convert Figma file to Reflex + +Check out this [Notion doc](https://www.notion.so/reflex-dev/Convert-HTML-to-Reflex-fe22d0641dcd4d5c91c8404ca41c7e77) for a walk through on how to convert a Figma file into Reflex code. diff --git a/docs/components/props.md b/docs/components/props.md new file mode 100644 index 00000000000..1c3d4217546 --- /dev/null +++ b/docs/components/props.md @@ -0,0 +1,97 @@ +```python exec +import reflex as rx +from pcweb.pages.docs.library import library +from pcweb.pages import docs +``` + +# Props + +Props modify the behavior and appearance of a component. They are passed in as keyword arguments to a component. + +## Component Props + +There are props that are shared between all components, but each component can also define its own props. + +For example, the `rx.image` component has a `src` prop that specifies the URL of the image to display and an `alt` prop that specifies the alternate text for the image. + +```python demo +rx.image( + src="https://web.reflex-assets.dev/other/logo.jpg", + alt="Reflex Logo", +) +``` + +Check the docs for the component you are using to see what props are available and how they affect the component (see the `rx.image` [reference]({docs.library.media.image.path}#api-reference) page for example). + + +## Common Props + +Components support many standard HTML properties as props. For example: the HTML [id]({"https://www.w3schools.com/html/html_id.asp"}) property is exposed directly as the prop `id`. The HTML [className]({"https://www.w3schools.com/jsref/prop_html_classname.asp"}) property is exposed as the prop `class_name` (note the Pythonic snake_casing!). + +```python demo +rx.box( + "Hello World", + id="box-id", + class_name=["class-name-1", "class-name-2",], +) +``` + +In the example above, the `class_name` prop of the `rx.box` component is assigned a list of class names. This means the `rx.box` component will be styled with the CSS classes `class-name-1` and `class-name-2`. + +## Style Props + +In addition to component-specific props, most built-in components support a full range of style props. You can use any [CSS property](https://www.w3schools.com/cssref/index.php) to style a component. + +```python demo +rx.button( + "Fancy Button", + border_radius="1em", + box_shadow="rgba(151, 65, 252, 0.8) 0 15px 30px -10px", + background_image="linear-gradient(144deg,#AF40FF,#5B42F3 50%,#00DDEB)", + box_sizing="border-box", + color="white", + opacity= 1, +) +``` + +See the [styling docs]({docs.styling.overview.path}) to learn more about customizing the appearance of your app. + + +## Binding Props to State + +```md alert warning +# Optional: Learn all about [State]({docs.state.overview.path}) first. +``` + +Reflex apps define [State]({docs.state.overview.path}) classes that hold variables that can change over time. + +State may be modified in response to things like user input like clicking a button, or in response to events like loading a page. + +State vars can be bound to component props, so that the UI always reflects the current state of the app. + +Try clicking the badge below to change its color. + +```python demo exec +class PropExampleState(rx.State): + text: str = "Hello World" + color: str = "red" + + @rx.event + def flip_color(self): + if self.color == "red": + self.color = "blue" + else: + self.color = "red" + + +def index(): + return rx.button( + PropExampleState.text, + color_scheme=PropExampleState.color, + on_click=PropExampleState.flip_color, + ) +``` + +In this example, the `color_scheme` prop is bound to the `color` state var. + +When the `flip_color` event handler is called, the `color` var is updated, and the `color_scheme` prop is updated to match. diff --git a/docs/components/rendering_iterables.md b/docs/components/rendering_iterables.md new file mode 100644 index 00000000000..89564d6b341 --- /dev/null +++ b/docs/components/rendering_iterables.md @@ -0,0 +1,299 @@ +```python exec +import reflex as rx + +from pcweb.pages import docs +``` + +# Rendering Iterables + +Recall again from the [basics]({docs.getting_started.basics.path}) that we cannot use Python `for` loops when referencing state vars in Reflex. Instead, use the `rx.foreach` component to render components from a collection of data. + +For dynamic content that should automatically scroll to show the newest items, consider using the [auto scroll]({docs.library.dynamic_rendering.auto_scroll.path}) component together with `rx.foreach`. + +```python demo exec +class IterState(rx.State): + color: list[str] = [ + "red", + "green", + "blue", + ] + + +def colored_box(color: str): + return rx.button(color, background_color=color) + + +def dynamic_buttons(): + return rx.vstack( + rx.foreach(IterState.color, colored_box), + ) + +``` + +Here's the same example using a lambda function. + +```python +def dynamic_buttons(): + return rx.vstack( + rx.foreach(IterState.color, lambda color: colored_box(color)), + ) +``` + +You can also use lambda functions directly with components without defining a separate function. + +```python +def dynamic_buttons(): + return rx.vstack( + rx.foreach(IterState.color, lambda color: rx.button(color, background_color=color)), + ) +``` + +In this first simple example we iterate through a `list` of colors and render a dynamic number of buttons. + +The first argument of the `rx.foreach` function is the state var that you want to iterate through. The second argument is a function that takes in an item from the data and returns a component. In this case, the `colored_box` function takes in a color and returns a button with that color. + +## For vs Foreach + +```md definition +# Regular For Loop +* Use when iterating over constants. + +# Foreach +* Use when iterating over state vars. +``` + +The above example could have been written using a regular Python `for` loop, since the data is constant. + +```python demo exec +colors = ["red", "green", "blue"] +def dynamic_buttons_for(): + return rx.vstack( + [colored_box(color) for color in colors], + ) +``` + +However, as soon as you need the data to be dynamic, you must use `rx.foreach`. + +```python demo exec +class DynamicIterState(rx.State): + color: list[str] = [ + "red", + "green", + "blue", + ] + + def add_color(self, form_data): + self.color.append(form_data["color"]) + +def dynamic_buttons_foreach(): + return rx.vstack( + rx.foreach(DynamicIterState.color, colored_box), + rx.form( + rx.input(name="color", placeholder="Add a color"), + rx.button("Add"), + on_submit=DynamicIterState.add_color, + ) + ) +``` + +## Render Function + +The function to render each item can be defined either as a separate function or as a lambda function. In the example below, we define the function `colored_box` separately and pass it to the `rx.foreach` function. + +```python demo exec +class IterState2(rx.State): + color: list[str] = [ + "red", + "green", + "blue", + ] + +def colored_box(color: rx.Var[str]): + return rx.button(color, background_color=color) + +def dynamic_buttons2(): + return rx.vstack( + rx.foreach(IterState2.color, colored_box), + ) + +``` + +Notice that the type annotation for the `color` parameter in the `colored_box` function is `rx.Var[str]` (rather than just `str`). This is because the `rx.foreach` function passes the item as a `Var` object, which is a wrapper around the actual value. This is what allows us to compile the frontend without knowing the actual value of the state var (which is only known at runtime). + +## Enumerating Iterables + +The function can also take an index as a second argument, meaning that we can enumerate through data as shown in the example below. + +```python demo exec +class IterIndexState(rx.State): + color: list[str] = [ + "red", + "green", + "blue", + ] + + +def create_button(color: rx.Var[str], index: int): + return rx.box( + rx.button(f"{index + 1}. {color}"), + padding_y="0.5em", + ) + +def enumerate_foreach(): + return rx.vstack( + rx.foreach( + IterIndexState.color, + create_button + ), + ) +``` + +Here's the same example using a lambda function. + +```python +def enumerate_foreach(): + return rx.vstack( + rx.foreach( + IterIndexState.color, + lambda color, index: create_button(color, index) + ), + ) +``` + +## Iterating Dictionaries + +We can iterate through a `dict` using a `foreach`. When the dict is passed through to the function that renders each item, it is presented as a list of key-value pairs `[("sky", "blue"), ("balloon", "red"), ("grass", "green")]`. + +```python demo exec +class SimpleDictIterState(rx.State): + color_chart: dict[str, str] = { + "sky": "blue", + "balloon": "red", + "grass": "green", + } + + +def display_color(color: list): + # color is presented as a list key-value pairs [("sky", "blue"), ("balloon", "red"), ("grass", "green")] + return rx.box(rx.text(color[0]), bg=color[1], padding_x="1.5em") + + +def dict_foreach(): + return rx.grid( + rx.foreach( + SimpleDictIterState.color_chart, + display_color, + ), + columns="3", + ) + +``` + +```md alert warning +# Dict Type Annotation. +It is essential to provide the correct full type annotation for the dictionary in the state definition (e.g., `dict[str, str]` instead of `dict`) to ensure `rx.foreach` works as expected. Proper typing allows Reflex to infer and validate the structure of the data during rendering. +``` + +## Nested examples + +`rx.foreach` can be used with nested state vars. Here we use nested `foreach` components to render the nested state vars. The `rx.foreach(project["technologies"], get_badge)` inside of the `project_item` function, renders the `dict` values which are of type `list`. The `rx.box(rx.foreach(NestedStateFE.projects, project_item))` inside of the `projects_example` function renders each `dict` inside of the overall state var `projects`. + +```python demo exec +class NestedStateFE(rx.State): + projects: list[dict[str, list]] = [ + { + "technologies": ["Next.js", "Prisma", "Tailwind", "Google Cloud", "Docker", "MySQL"] + }, + { + "technologies": ["Python", "Flask", "Google Cloud", "Docker"] + } + ] + +def get_badge(technology: rx.Var[str]) -> rx.Component: + return rx.badge(technology, variant="soft", color_scheme="green") + +def project_item(project: rx.Var[dict[str, list]]) -> rx.Component: + return rx.box( + rx.hstack( + rx.foreach(project["technologies"], get_badge) + ), + ) + +def projects_example() -> rx.Component: + return rx.box(rx.foreach(NestedStateFE.projects, project_item)) +``` + +If you want an example where not all of the values in the dict are the same type then check out the example on [var operations using foreach]({docs.vars.var_operations.path}). + +Here is a further example of how to use `foreach` with a nested data structure. + +```python demo exec +class NestedDictIterState(rx.State): + color_chart: dict[str, list[str]] = { + "purple": ["red", "blue"], + "orange": ["yellow", "red"], + "green": ["blue", "yellow"], + } + + +def display_colors(color: rx.Var[tuple[str, list[str]]]): + return rx.vstack( + rx.text(color[0], color=color[0]), + rx.hstack( + rx.foreach( + color[1], + lambda x: rx.box( + rx.text(x, color="black"), bg=x + ), + ) + ), + ) + + +def nested_dict_foreach(): + return rx.grid( + rx.foreach( + NestedDictIterState.color_chart, + display_colors, + ), + columns="3", + ) + +``` + +## Foreach with Cond + +We can also use `foreach` with the `cond` component. + +In this example we define the function `render_item`. This function takes in an `item`, uses the `cond` to check if the item `is_packed`. If it is packed it returns the `item_name` with a `✔` next to it, and if not then it just returns the `item_name`. We use the `foreach` to iterate over all of the items in the `to_do_list` using the `render_item` function. + +```python demo exec +import dataclasses + +@dataclasses.dataclass +class ToDoListItem: + item_name: str + is_packed: bool + +class ForeachCondState(rx.State): + to_do_list: list[ToDoListItem] = [ + ToDoListItem(item_name="Space suit", is_packed=True), + ToDoListItem(item_name="Helmet", is_packed=True), + ToDoListItem(item_name="Back Pack", is_packed=False), + ] + + +def render_item(item: rx.Var[ToDoListItem]): + return rx.cond( + item.is_packed, + rx.list.item(item.item_name + ' ✔'), + rx.list.item(item.item_name), + ) + +def packing_list(): + return rx.vstack( + rx.text("Sammy's Packing List"), + rx.list(rx.foreach(ForeachCondState.to_do_list, render_item)), + ) + +``` diff --git a/docs/custom-components/command-reference.md b/docs/custom-components/command-reference.md new file mode 100644 index 00000000000..56b95b74676 --- /dev/null +++ b/docs/custom-components/command-reference.md @@ -0,0 +1,157 @@ +```python exec +from pcweb.pages import docs +``` + +# Command Reference + +The custom component commands are under `reflex component` subcommand. To see the list of available commands, run `reflex component --help`. To see the manual on a specific command, run `reflex component --help`, for example, `reflex component init --help`. + +```bash +reflex component --help +``` + +```text +Usage: reflex component [OPTIONS] COMMAND [ARGS]... + + Subcommands for creating and publishing Custom Components. + +Options: + --help Show this message and exit. + +Commands: + init Initialize a custom component. + build Build a custom component. + share Collect more details on the published package for gallery. +``` + +## reflex component init + +Below is an example of running the `init` command. + +```bash +reflex component init +``` + +```text +reflex component init +─────────────────────────────────────── Initializing reflex-google-auth project ─────────────────────────────────────── +Info: Populating pyproject.toml with package name: reflex-google-auth +Info: Initializing the component directory: custom_components/reflex_google_auth +Info: Creating app for testing: google_auth_demo +──────────────────────────────────────────── Initializing google_auth_demo ──────────────────────────────────────────── +[07:58:16] Initializing the app directory. console.py:85 + Initializing the web directory. console.py:85 +Success: Initialized google_auth_demo +─────────────────────────────────── Installing reflex-google-auth in editable mode. ─────────────────────────────────── +Info: Package reflex-google-auth installed! +Custom component initialized successfully! +─────────────────────────────────────────────────── Project Summary ─────────────────────────────────────────────────── +[ README.md ]: Package description. Please add usage examples. +[ pyproject.toml ]: Project configuration file. Please fill in details such as your name, email, homepage URL. +[ custom_components/ ]: Custom component code template. Start by editing it with your component implementation. +[ google_auth_demo/ ]: Demo App. Add more code to this app and test. +``` + +The `init` command uses the current enclosing folder name to construct a python package name, typically in the kebab case. For example, if running init in folder `google_auth`, the package name will be `reflex-google-auth`. The added prefix reduces the chance of name collision on PyPI (the Python Package Index), and it indicates that the package is a Reflex custom component. The user can override the package name by providing the `--package-name` option. + +The `init` command creates a set of files and folders prefilled with the package name and other details. During the init, the `custom_component` folder is installed locally in editable mode, so a developer can incrementally develop and test with ease. The changes in component implementation is automatically reflected where it is used. Below is the folder structure after the `init` command. + +```text +google_auth/ +├── pyproject.toml +├── README.md +├── custom_components/ +│ └── reflex_google_auth/ +│ ├── google_auth.py +│ └── __init__.py +└── google_auth_demo/ + └── assets/ + google_auth_demo/ + requirements.txt + rxconfig.py +``` + +### pyproject.toml + +The `pyproject.toml` is required for the package to build and be published. It is prefilled with information such as the package name, version (`0.0.1`), author name and email, homepage URL. By default the **Apache-2.0** license is used, the same as Reflex. If any of this information requires update, the user can edit the file by hand. + +### README + +The `README.md` file is created with installation instructions, e.g. `pip install reflex-google-auth`, and a brief description of the package. Typically the `README.md` contains usage examples. On PyPI, the `README.md` is rendered as part of the package page. + +### Custom Components Folder + +The `custom_components` folder is where the actual implementation is. Do not worry about this folder name: there is no need to change it. It is where `pyproject.toml` specifies the source of the python package is. The published package contains the contents inside it, excluding this folder. + +`reflex_google_auth` is the top folder for importable code. The `reflex_google_auth/__init__.py` imports everything from the `reflex_google_auth/google_auth.py`. For the user of the package, the import looks like `from reflex_google_auth import ABC, XYZ`. + +`reflex_google_auth/google_auth.py` is prefilled with code example and instructions from the [wrapping react guide]({docs.wrapping_react.overview.path}). + +### Demo App Folder + +A demo app is generated inside `google_auth_demo` folder with import statements and example usage of the component. This is a regular Reflex app. Go into this directory and start using any reflex commands for testing. + +### Help Manual + +The help manual is shown when adding the `--help` option to the command. + +```bash +reflex component init --help +``` + +```text +Usage: reflex component init [OPTIONS] + + Initialize a custom component. + + Args: library_name: The name of the library. install: Whether to + install package from this local custom component in editable mode. + loglevel: The log level to use. + + Raises: Exit: If the pyproject.toml already exists. + +Options: + --library-name TEXT The name of your library. On PyPI, package + will be published as `reflex-{library- + name}`. + --install / --no-install Whether to install package from this local + custom component in editable mode. + [default: install] + --loglevel [debug|info|warning|error|critical] + The log level to use. [default: + LogLevel.INFO] + --help Show this message and exit. +``` + +## reflex component publish + +To publish to a package index, a user is required to already have an account with them. As of **0.7.5**, Reflex does not handle the publishing process for you. You can do so manually by first running `reflex component build` followed by `twine upload` or `uv publish` or your choice of a publishing utility. + +You can then share your build on our website with `reflex component share`. + +## reflex component build + +It is not required to run the `build` command separately before publishing. The `publish` command will build the package if it is not already built. The `build` command is provided for the user's convenience. + +The `build` command generates the `.tar.gz` and `.whl` distribution files to be uploaded to the desired package index, for example, PyPI. This command must be run at the top level of the project where the `pyproject.toml` file is. As a result of a successful build, there is a new `dist` folder with the distribution files. + +```bash +reflex component build --help +``` + +```text +Usage: reflex component build [OPTIONS] + + Build a custom component. Must be run from the project root directory where + the pyproject.toml is. + + Args: loglevel: The log level to use. + + Raises: Exit: If the build fails. + +Options: + --loglevel [debug|info|warning|error|critical] + The log level to use. [default: + LogLevel.INFO] + --help Show this message and exit. +``` diff --git a/docs/custom-components/overview.md b/docs/custom-components/overview.md new file mode 100644 index 00000000000..3970c73d97f --- /dev/null +++ b/docs/custom-components/overview.md @@ -0,0 +1,75 @@ +# Custom Components Overview + +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +from pcweb.pages.docs import custom_components +from pcweb.pages.docs.custom_components import custom_components as custom_components_gallery +``` + +Reflex users create many components of their own: ready to use high level components, or nicely wrapped React components. With **Custom Components**, the community can easily share these components now. + +Release **0.4.3** introduces a series of `reflex component` commands that help developers wrap react components, test, and publish them as python packages. As shown in the image below, there are already a few custom components published on PyPI, such as `reflex-spline`, `reflex-webcam`. + +Check out the custom components gallery [here]({custom_components_gallery.path}). + +```python eval +rx.center( + rx.image(src=f"{REFLEX_ASSETS_CDN}custom_components/pypi_reflex_custom_components.webp", width="400px", border_radius="15px", border="1px solid"), +) +``` + +## Prerequisites for Publishing + +In order to publish a Python package, an account is required with a python package index, for example, PyPI. The documentation to create accounts and generate API tokens can be found on their websites. For a quick reference, check out our [Prerequisites for Publishing]({custom_components.prerequisites_for_publishing.path}) page. + +## Steps to Publishing + +Follow these steps to publish the custom component as a python package: + +1. `reflex component init`: creates a new custom component project from templates. +2. dev and test: developer implements and tests the custom component. +3. `reflex component build`: builds the package. +4. `twine upload` or `uv publish`: uploads the package to a python package index. + +### Initialization + +```bash +reflex component init +``` + +First create a new folder for your custom component project, for example `color_picker`. The package name will be `reflex-color-picker`. The prefix `reflex-` is intentionally added for all custom components for easy search on PyPI. If you prefer a particular name for the package, you can either change it manually in the `pyproject.toml` file or add the `--library-name` option in the `reflex component init` command initially. + +Run `reflex component init`, and a set of files and folders will be created in the `color_picker` folder. The `pyproject.toml` file is the configuration file for the project. The `custom_components` folder is where the custom component implementation is. The `color_picker_demo` folder is a demo Reflex app that uses the custom component. If this is the first time of creating python packages, it is encouraged to browse through all the files (there are not that many) to understand the structure of the project. + +```bash +color_picker/ +├── pyproject.toml <- Configuration file +├── README.md +├── .gitignore <- Exclude dist/ and metadata folders +├── custom_components/ +│ └── reflex_color_picker/ <- Custom component source directory +│ ├── color_picker.py +│ └── __init__.py +└── color_picker_demo/ <- Demo Reflex app directory + └── assets/ + color_picker_demo/ + requirements.txt + rxconfig.py +``` + +### Develop and Test + +After finishing the custom component implementation, the user is encouraged to fully test it before publishing. The generated Reflex demo app `color_picker_demo` is a good place to start. It is a regular Reflex app prefilled with imports and usage of this component. During the init, the `custom_component` folder is installed locally in editable mode, so a developer can incrementally develop and test with ease. The changes in component implementation are automatically reflected in the demo app. + +### Publish + +```bash +reflex component build +``` + +Once you're ready to publish your package, run `reflex component build` to build the package. The command builds the distribution files if they are not already built. The end result is a `dist` folder containing the distribution files. The user does not need to do anything manually with these distribution files. + +In order to publish these files as a Python package, you need to use a publishing utility. Any would work, but we recommend either [Twine](https://twine.readthedocs.io/en/stable/) or (uv)[https://docs.astral.sh/uv/guides/package/#publishing-your-package]. Make sure to keep your package version in pyproject.toml updated. + +You can also share your components with the rest of the community at our website using the command `reflex component share`. See you there! diff --git a/docs/custom-components/prerequisites-for-publishing.md b/docs/custom-components/prerequisites-for-publishing.md new file mode 100644 index 00000000000..f836e4dad12 --- /dev/null +++ b/docs/custom-components/prerequisites-for-publishing.md @@ -0,0 +1,40 @@ +# Python Package Index + +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +from pcweb.styles.colors import c_color +image_style = { + "width": "400px", + "border_radius": "12px", + "border": f"1px solid {c_color('slate', 5)}", +} +``` + +In order to publish a Python package, you need to use a publishing utility. Any would work, but we recommend either [Twine](https://twine.readthedocs.io/en/stable/) or [uv](https://docs.astral.sh/uv/guides/package/#publishing-your-package). + +## PyPI + +It is straightforward to create accounts and API tokens with PyPI. There is official help on the [PyPI website](https://pypi.org/help/). For a quick reference here, go to the top right corner of the PyPI website and look for the button to register and fill out personal information. + +```python eval +rx.center( + rx.image(src=f"{REFLEX_ASSETS_CDN}custom_components/pypi_register.webp", style=image_style, margin_bottom="16px", loading="lazy"), +) +``` + +A user can use username and password to authenticate with PyPI when publishing. + +```python eval +rx.center( + rx.image(src=f"{REFLEX_ASSETS_CDN}custom_components/pypi_account_settings.webp", style=image_style, margin_bottom="16px", loading="lazy"), +) +``` + +Scroll down to the API tokens section and click on the "Add API token" button. Fill out the form and click "Generate API token". + +```python eval +rx.center( + rx.image(src=f"{REFLEX_ASSETS_CDN}custom_components/pypi_api_tokens.webp", style=image_style, width="700px", loading="lazy"), +) +``` diff --git a/docs/database/overview.md b/docs/database/overview.md new file mode 100644 index 00000000000..49a4ef4b328 --- /dev/null +++ b/docs/database/overview.md @@ -0,0 +1,87 @@ +# Database + +Reflex uses [sqlmodel](https://sqlmodel.tiangolo.com) to provide a built-in ORM wrapping SQLAlchemy. + +The examples on this page refer specifically to how Reflex uses various tools to +expose an integrated database interface. Only basic use cases will be covered +below, but you can refer to the +[sqlmodel tutorial](https://sqlmodel.tiangolo.com/tutorial/select/) +for more examples and information, just replace `SQLModel` with `rx.Model` and +`Session(engine)` with `rx.session()` + +For advanced use cases, please see the +[SQLAlchemy docs](https://docs.sqlalchemy.org/en/14/orm/quickstart.html) (v1.4). + +```md alert info +# Using NoSQL Databases + +If you are using a NoSQL database (e.g. MongoDB), you can work with it in Reflex by installing the appropriate Python client library. In this case, Reflex will not provide any ORM features. +``` + +## Connecting + +Reflex provides a built-in SQLite database for storing and retrieving data. + +You can connect to your own SQL compatible database by modifying the +`rxconfig.py` file with your database url. + +```python +config = rx.Config( + app_name="my_app", + db_url="sqlite:///reflex.db", +) +``` + +For more examples of database URLs that can be used, see the [SQLAlchemy +docs](https://docs.sqlalchemy.org/en/14/core/engines.html#backend-specific-urls). +Be sure to install the appropriate DBAPI driver for the database you intend to +use. + +## Tables + +To create a table make a class that inherits from `rx.Model` with and specify +that it is a table. + +```python +class User(rx.Model, table=True): + username: str + email: str + password: str +``` + +## Migrations + +Reflex leverages [alembic](https://alembic.sqlalchemy.org/en/latest/) +to manage database schema changes. + +Before the database feature can be used in a new app you must call `reflex db init` +to initialize alembic and create a migration script with the current schema. + +After making changes to the schema, use +`reflex db makemigrations --message 'something changed'` +to generate a script in the `alembic/versions` directory that will update the +database schema. It is recommended that generated scripts be inspected before applying them. + +Bear in mind that your newest models will not be detected by the `reflex db makemigrations` +command unless imported and used somewhere within the application. + +The `reflex db migrate` command is used to apply migration scripts to bring the +database up to date. During app startup, if Reflex detects that the current +database schema is not up to date, a warning will be displayed on the console. + +## Queries + +To query the database you can create a `rx.session()` +which handles opening and closing the database connection. + +You can use normal SQLAlchemy queries to query the database. + +```python +with rx.session() as session: + session.add(User(username="test", email="admin@reflex.dev", password="admin")) + session.commit() +``` + +```md video https://youtube.com/embed/ITOZkzjtjUA?start=6835&end=8225 +# Video: Tutorial of Database Model with Forms, Model Field Changes and Migrations, and adding a DateTime Field +``` diff --git a/docs/database/queries.md b/docs/database/queries.md new file mode 100644 index 00000000000..0a69c99f200 --- /dev/null +++ b/docs/database/queries.md @@ -0,0 +1,344 @@ +# Queries + +Queries are used to retrieve data from a database. + +A query is a request for information from a database table or combination of +tables. A query can be used to retrieve data from a single table or multiple +tables. A query can also be used to insert, update, or delete data from a table. + +## Session + +To execute a query you must first create a `rx.session`. You can use the session +to query the database using SQLModel or SQLAlchemy syntax. + +The `rx.session` statement will automatically close the session when the code +block is finished. **If `session.commit()` is not called, the changes will be +rolled back and not persisted to the database.** The code can also explicitly +rollback without closing the session via `session.rollback()`. + +The following example shows how to create a session and query the database. +First we create a table called `User`. + +```python +class User(rx.Model, table=True): + username: str + email: str +``` + +### Select + +Then we create a session and query the User table. + +```python +class QueryUser(rx.State): + name: str + users: list[User] + + @rx.event + def get_users(self): + with rx.session() as session: + self.users = session.exec( + User.select().where( + User.username.contains(self.name))).all() +``` + +The `get_users` method will query the database for all users that contain the +value of the state var `name`. + +### Insert + +Similarly, the `session.add()` method to add a new record to the +database or persist an existing object. + +```python +class AddUser(rx.State): + username: str + email: str + + @rx.event + def add_user(self): + with rx.session() as session: + session.add(User(username=self.username, email=self.email)) + session.commit() +``` + +### Update + +To update the user, first query the database for the object, make the desired +modifications, `.add` the object to the session and finally call `.commit()`. + +```python +class ChangeEmail(rx.State): + username: str + email: str + + @rx.event + def modify_user(self): + with rx.session() as session: + user = session.exec(User.select().where( + (User.username == self.username))).first() + user.email = self.email + session.add(user) + session.commit() +``` + +### Delete + +To delete a user, first query the database for the object, then call +`.delete()` on the session and finally call `.commit()`. + +```python +class RemoveUser(rx.State): + username: str + + @rx.event + def delete_user(self): + with rx.session() as session: + user = session.exec(User.select().where( + User.username == self.username)).first() + session.delete(user) + session.commit() +``` + +## ORM Object Lifecycle + +The objects returned by queries are bound to the session that created them, and cannot generally +be used outside that session. After adding or updating an object, not all fields are automatically +updated, so accessing certain attributes may trigger additional queries to refresh the object. + +To avoid this, the `session.refresh()` method can be used to update the object explicitly and +ensure all fields are up to date before exiting the session. + +```python +class AddUserForm(rx.State): + user: User | None = None + + @rx.event + def add_user(self, form_data: dict[str, Any]): + with rx.session() as session: + self.user = User(**form_data) + session.add(self.user) + session.commit() + session.refresh(self.user) +``` + +Now the `self.user` object will have a correct reference to the autogenerated +primary key, `id`, even though this was not provided when the object was created +from the form data. + +If `self.user` needs to be modified or used in another query in a new session, +it must be added to the session. Adding an object to a session does not +necessarily create the object, but rather associates it with a session where it +may either be created or updated accordingly. + +```python +class AddUserForm(rx.State): + ... + + @rx.event + def update_user(self, form_data: dict[str, Any]): + if self.user is None: + return + with rx.session() as session: + self.user.set(**form_data) + session.add(self.user) + session.commit() + session.refresh(self.user) +``` + +If an ORM object will be referenced and accessed outside of a session, you +should call `.refresh()` on it to avoid stale object exceptions. + +## Using SQL Directly + +Avoiding SQL is one of the main benefits of using an ORM, but sometimes it is +necessary for particularly complex queries, or when using database-specific +features. + +SQLModel exposes the `session.execute()` method that can be used to execute raw +SQL strings. If parameter binding is needed, the query may be wrapped in +[`sqlalchemy.text`](https://docs.sqlalchemy.org/en/14/core/sqlelement.html#sqlalchemy.sql.expression.text), +which allows colon-prefix names to be used as placeholders. + +```md alert info +# Never use string formatting to construct SQL queries, as this may lead to SQL injection vulnerabilities in the app. +``` + +```python +import sqlalchemy + +import reflex as rx + + +class State(rx.State): + + @rx.event + def insert_user_raw(self, username, email): + with rx.session() as session: + session.execute( + sqlalchemy.text( + "INSERT INTO user (username, email) " + "VALUES (:username, :email)" + ), + \{"username": username, "email": email}, + ) + session.commit() + + @rx.var + def raw_user_tuples(self) -> list[list]: + with rx.session() as session: + return [list(row) for row in session.execute("SELECT * FROM user").all()] +``` + +## Async Database Operations + +Reflex provides an async version of the session function called `rx.asession` for asynchronous database operations. This is useful when you need to perform database operations in an async context, such as within async event handlers. + +The `rx.asession` function returns an async SQLAlchemy session that must be used with an async context manager. Most operations against the `asession` must be awaited. + +```python +import sqlalchemy.ext.asyncio +import sqlalchemy + +import reflex as rx + + +class AsyncUserState(rx.State): + users: list[User] = [] + + @rx.event(background=True) + async def get_users_async(self): + async with rx.asession() as asession: + result = await asession.execute(User.select()) + async with self: + self.users = result.all() +``` + +### Async Select + +The following example shows how to query the database asynchronously: + +```python +class AsyncQueryUser(rx.State): + name: str + users: list[User] = [] + + @rx.event(background=True) + async def get_users(self): + async with rx.asession() as asession: + stmt = User.select().where(User.username.contains(self.name)) + result = await asession.execute(stmt) + async with self: + self.users = result.all() +``` + +### Async Insert + +To add a new record to the database asynchronously: + +```python +class AsyncAddUser(rx.State): + username: str + email: str + + @rx.event(background=True) + async def add_user(self): + async with rx.asession() as asession: + asession.add(User(username=self.username, email=self.email)) + await asession.commit() +``` + +### Async Update + +To update a user asynchronously: + +```python +class AsyncChangeEmail(rx.State): + username: str + email: str + + @rx.event(background=True) + async def modify_user(self): + async with rx.asession() as asession: + stmt = User.select().where(User.username == self.username) + result = await asession.execute(stmt) + user = result.first() + if user: + user.email = self.email + asession.add(user) + await asession.commit() +``` + +### Async Delete + +To delete a user asynchronously: + +```python +class AsyncRemoveUser(rx.State): + username: str + + @rx.event(background=True) + async def delete_user(self): + async with rx.asession() as asession: + stmt = User.select().where(User.username == self.username) + result = await asession.execute(stmt) + user = result.first() + if user: + await asession.delete(user) + await asession.commit() +``` + +### Async Refresh + +Similar to the regular session, you can refresh an object to ensure all fields are up to date: + +```python +class AsyncAddUserForm(rx.State): + user: User | None = None + + @rx.event(background=True) + async def add_user(self, form_data: dict[str, str]): + async with rx.asession() as asession: + async with self: + self.user = User(**form_data) + asession.add(self.user) + await asession.commit() + await asession.refresh(self.user) +``` + +### Async SQL Execution + +You can also execute raw SQL asynchronously: + +```python +class AsyncRawSQL(rx.State): + users: list[list] = [] + + @rx.event(background=True) + async def insert_user_raw(self, username, email): + async with rx.asession() as asession: + await asession.execute( + sqlalchemy.text( + "INSERT INTO user (username, email) " + "VALUES (:username, :email)" + ), + dict(username=username, email=email), + ) + await asession.commit() + + @rx.event(background=True) + async def get_raw_users(self): + async with rx.asession() as asession: + result = await asession.execute("SELECT * FROM user") + async with self: + self.users = [list(row) for row in result.all()] +``` + +```md alert info +# Important Notes for Async Database Operations +- Always use the `@rx.event(background=True)` decorator for async event handlers +- Most operations against the `asession` must be awaited, including `commit()`, `execute()`, `refresh()`, and `delete()` +- The `add()` method does not need to be awaited +- Result objects from queries have methods like `all()` and `first()` that are synchronous and return data directly +- Use `async with self:` when updating state variables in background tasks +``` diff --git a/docs/database/relationships.md b/docs/database/relationships.md new file mode 100644 index 00000000000..9b06daeeb44 --- /dev/null +++ b/docs/database/relationships.md @@ -0,0 +1,164 @@ +# Relationships + +Foreign key relationships are used to link two tables together. For example, +the `Post` model may have a field, `user_id`, with a foreign key of `user.id`, +referencing a `User` model. This would allow us to automatically query the `Post` objects +associated with a user, or find the `User` object associated with a `Post`. + +To establish bidirectional relationships a model must correctly set the +`back_populates` keyword argument on the `Relationship` to the relationship +attribute in the _other_ model. + +## Foreign Key Relationships + +To create a relationship, first add a field to the model that references the +primary key of the related table, then add a `sqlmodel.Relationship` attribute +which can be used to access the related objects. + +Defining relationships like this requires the use of `sqlmodel` objects as +seen in the example. + +```python +from typing import List, Optional + +import sqlmodel + +import reflex as rx + + +class Post(rx.Model, table=True): + title: str + body: str + user_id: int = sqlmodel.Field(foreign_key="user.id") + + user: Optional["User"] = sqlmodel.Relationship(back_populates="posts") + flags: Optional[List["Flag"]] = sqlmodel.Relationship(back_populates="post") + + +class User(rx.Model, table=True): + username: str + email: str + + posts: List[Post] = sqlmodel.Relationship(back_populates="user") + flags: List["Flag"] = sqlmodel.Relationship(back_populates="user") + + +class Flag(rx.Model, table=True): + post_id: int = sqlmodel.Field(foreign_key="post.id") + user_id: int = sqlmodel.Field(foreign_key="user.id") + message: str + + post: Optional[Post] = sqlmodel.Relationship(back_populates="flags") + user: Optional[User] = sqlmodel.Relationship(back_populates="flags") +``` + +See the [SQLModel Relationship Docs](https://sqlmodel.tiangolo.com/tutorial/relationship-attributes/define-relationships-attributes/) for more details. + +## Querying Relationships + +### Inserting Linked Objects + +The following example assumes that the flagging user is stored in the state as a +`User` instance and that the post `id` is provided in the data submitted in the +form. + +```python +class FlagPostForm(rx.State): + user: User + + @rx.event + def flag_post(self, form_data: dict[str, Any]): + with rx.session() as session: + post = session.get(Post, int(form_data.pop("post_id"))) + flag = Flag(message=form_data.pop("message"), post=post, user=self.user) + session.add(flag) + session.commit() +``` + +### How are Relationships Dereferenced? + +By default, the relationship attributes are in **lazy loading** or `"select"` +mode, which generates a query _on access_ to the relationship attribute. Lazy +loading is generally fine for single object lookups and manipulation, but can be +inefficient when accessing many linked objects for serialization purposes. + +There are several alternative loading mechanisms available that can be set on +the relationship object or when performing the query. + +* "joined" or `joinload` - generates a single query to load all related objects + at once. +* "subquery" or `subqueryload` - generates a single query to load all related + objects at once, but uses a subquery to do the join, instead of a join in the + main query. +* "selectin" or `selectinload` - emits a second (or more) SELECT statement which + assembles the primary key identifiers of the parent objects into an IN clause, + so that all members of related collections / scalar references are loaded at + once by primary key + +There are also non-loading mechanisms, "raise" and "noload" which are used to +specifically avoid loading a relationship. + +Each loading method comes with tradeoffs and some are better suited for different +data access patterns. +See [SQLAlchemy: Relationship Loading Techniques](https://docs.sqlalchemy.org/en/14/orm/loading_relationships.html) +for more detail. + +### Querying Linked Objects + +To query the `Post` table and include all `User` and `Flag` objects up front, +the `.options` interface will be used to specify `selectinload` for the required +relationships. Using this method, the linked objects will be available for +rendering in frontend code without additional steps. + +```python +import sqlalchemy + + +class PostState(rx.State): + posts: List[Post] + + @rx.event + def load_posts(self): + with rx.session() as session: + self.posts = session.exec( + Post.select + .options( + sqlalchemy.orm.selectinload(Post.user), + sqlalchemy.orm.selectinload(Post.flags).options( + sqlalchemy.orm.selectinload(Flag.user), + ), + ) + .limit(15) + ).all() +``` + +The loading methods create new query objects and thus may be linked if the +relationship itself has other relationships that need to be loaded. In this +example, since `Flag` references `User`, the `Flag.user` relationship must be +chain loaded from the `Post.flags` relationship. + +### Specifying the Loading Mechanism on the Relationship + +Alternatively, the loading mechanism can be specified on the relationship by +passing `sa_relationship_kwargs=\{"lazy": method}` to `sqlmodel.Relationship`, +which will use the given loading mechanism in all queries by default. + +```python +from typing import List, Optional + +import sqlmodel + +import reflex as rx + + +class Post(rx.Model, table=True): + ... + user: Optional["User"] = sqlmodel.Relationship( + back_populates="posts", + sa_relationship_kwargs=\{"lazy": "selectin"}, + ) + flags: Optional[List["Flag"]] = sqlmodel.Relationship( + back_populates="post", + sa_relationship_kwargs=\{"lazy": "selectin"}, + ) +``` diff --git a/docs/database/tables.md b/docs/database/tables.md new file mode 100644 index 00000000000..4be4b164540 --- /dev/null +++ b/docs/database/tables.md @@ -0,0 +1,70 @@ +# Tables + +Tables are database objects that contain all the data in a database. + +In tables, data is logically organized in a row-and-column format similar to a +spreadsheet. Each row represents a unique record, and each column represents a +field in the record. + +## Creating a Table + +To create a table, make a class that inherits from `rx.Model`. + +The following example shows how to create a table called `User`. + +```python +class User(rx.Model, table=True): + username: str + email: str +``` + +The `table=True` argument tells Reflex to create a table in the database for +this class. + +### Primary Key + +By default, Reflex will create a primary key column called `id` for each table. + +However, if an `rx.Model` defines a different field with `primary_key=True`, then the +default `id` field will not be created. A table may also redefine `id` as needed. + +It is not currently possible to create a table without a primary key. + +## Advanced Column Types + +SQLModel automatically maps basic python types to SQLAlchemy column types, but +for more advanced use cases, it is possible to define the column type using +`sqlalchemy` directly. For example, we can add a last updated timestamp to the +post example as a proper `DateTime` field with timezone. + +```python +import datetime + +import sqlmodel +import sqlalchemy + +class Post(rx.Model, table=True): + ... + update_ts: datetime.datetime = sqlmodel.Field( + default=None, + sa_column=sqlalchemy.Column( + "update_ts", + sqlalchemy.DateTime(timezone=True), + server_default=sqlalchemy.func.now(), + ), + ) +``` + +To make the `Post` model more usable on the frontend, a `dict` method may be provided +that converts any fields to a JSON serializable value. In this case, the dict method is +overriding the default `datetime` serializer to strip off the microsecond part. + +```python +class Post(rx.Model, table=True): + ... + + def dict(self, *args, **kwargs) -> dict: + d = super().dict(*args, **kwargs) + d["update_ts"] = self.update_ts.replace(microsecond=0).isoformat() + return d +``` diff --git a/docs/de/README.md b/docs/de/README.md deleted file mode 100644 index 3ce5c6c02f8..00000000000 --- a/docs/de/README.md +++ /dev/null @@ -1,250 +0,0 @@ -
-Reflex Logo -
- -### **✨ Performante, anpassbare Web-Apps in purem Python. Bereitstellung in Sekunden. ✨** - -[![PyPI version](https://badge.fury.io/py/reflex.svg)](https://badge.fury.io/py/reflex) -![versions](https://img.shields.io/pypi/pyversions/reflex.svg) -[![Documentation](https://img.shields.io/badge/Documentation%20-Introduction%20-%20%23007ec6)](https://reflex.dev/docs/getting-started/introduction) -[![PyPI Downloads](https://static.pepy.tech/badge/reflex)](https://pepy.tech/projects/reflex) -[![Discord](https://img.shields.io/discord/1029853095527727165?color=%237289da&label=Discord)](https://discord.gg/T5WSbC2YtQ) - -
- ---- - -[English](https://github.com/reflex-dev/reflex/blob/main/README.md) | [简体中文](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_cn/README.md) | [繁體中文](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_tw/README.md) | [Türkçe](https://github.com/reflex-dev/reflex/blob/main/docs/tr/README.md) | [हिंदी](https://github.com/reflex-dev/reflex/blob/main/docs/in/README.md) | [Português (Brasil)](https://github.com/reflex-dev/reflex/blob/main/docs/pt/pt_br/README.md) | [Italiano](https://github.com/reflex-dev/reflex/blob/main/docs/it/README.md) | [Español](https://github.com/reflex-dev/reflex/blob/main/docs/es/README.md) | [한국어](https://github.com/reflex-dev/reflex/blob/main/docs/kr/README.md) | [日本語](https://github.com/reflex-dev/reflex/blob/main/docs/ja/README.md) | [Deutsch](https://github.com/reflex-dev/reflex/blob/main/docs/de/README.md) | [Persian (پارسی)](https://github.com/reflex-dev/reflex/blob/main/docs/pe/README.md) | [Tiếng Việt](https://github.com/reflex-dev/reflex/blob/main/docs/vi/README.md) - ---- - -# Reflex - -Reflex ist eine Bibliothek, mit der man Full-Stack-Web-Applikationen in purem Python erstellen kann. - -Wesentliche Merkmale: - -- **Pures Python** - Schreibe dein Front- und Backend in Python, es gibt also keinen Grund, JavaScript zu lernen. -- **Volle Flexibilität** - Reflex ist einfach zu handhaben, kann aber auch für komplexe Anwendungen skaliert werden. -- **Sofortige Bereitstellung** - Nach dem Erstellen kannst du deine App mit einem [einzigen Befehl](https://reflex.dev/docs/hosting/deploy-quick-start/) bereitstellen oder auf deinem eigenen Server hosten. - -Auf unserer [Architektur-Seite](https://reflex.dev/blog/2024-03-21-reflex-architecture/#the-reflex-architecture) erfahren Sie, wie Reflex unter der Haube funktioniert. - -## ⚙️ Installation - -Öffne ein Terminal und führe den folgenden Befehl aus (benötigt Python 3.10+): - -```bash -pip install reflex -``` - -## 🥳 Erstelle deine erste App - -Die Installation von `reflex` installiert auch das `reflex`-Kommandozeilen-Tool. - -Teste, ob die Installation erfolgreich war, indem du ein neues Projekt erstellst. (Ersetze `my_app_name` durch deinen Projektnamen): - -```bash -mkdir my_app_name -cd my_app_name -reflex init -``` - -Dieser Befehl initialisiert eine Vorlage in deinem neuen Verzeichnis. - -Du kannst diese App im Entwicklungsmodus ausführen: - -```bash -reflex run -``` - -Du solltest deine App unter http://localhost:3000 laufen sehen. - -Nun kannst du den Quellcode in `my_app_name/my_app_name.py` ändern. Reflex hat schnelle Aktualisierungen, sodass du deine Änderungen sofort siehst, wenn du deinen Code speicherst. - -## 🫧 Beispiel-App - -Lass uns ein Beispiel durchgehen: die Erstellung einer Benutzeroberfläche für die Bildgenerierung mit [DALL·E](https://platform.openai.com/docs/guides/images/image-generation?context=node). Zur Vereinfachung rufen wir einfach die [OpenAI-API](https://platform.openai.com/docs/api-reference/authentication) auf, aber du könntest dies auch durch ein lokal ausgeführtes ML-Modell ersetzen. - -  - -
-Eine Benutzeroberfläche für DALL·E, die im Prozess der Bildgenerierung gezeigt wird. -
- -  - -Hier ist der komplette Code, um dies zu erstellen. Das alles wird in einer Python-Datei gemacht! - -```python -import reflex as rx -import openai - -openai_client = openai.OpenAI() - - -class State(rx.State): - """Der Zustand der App.""" - - prompt = "" - image_url = "" - processing = False - complete = False - - def get_image(self): - """Hole das Bild aus dem Prompt.""" - if self.prompt == "": - return rx.window_alert("Prompt Empty") - - self.processing, self.complete = True, False - yield - response = openai_client.images.generate( - prompt=self.prompt, n=1, size="1024x1024" - ) - self.image_url = response.data[0].url - self.processing, self.complete = False, True - - -def index(): - return rx.center( - rx.vstack( - rx.heading("DALL-E", font_size="1.5em"), - rx.input( - placeholder="Enter a prompt..", - on_blur=State.set_prompt, - width="25em", - ), - rx.button( - "Generate Image", - on_click=State.get_image, - width="25em", - loading=State.processing - ), - rx.cond( - State.complete, - rx.image(src=State.image_url, width="20em"), - ), - align="center", - ), - width="100%", - height="100vh", - ) - -# Füge Zustand und Seite zur App hinzu. -app = rx.App() -app.add_page(index, title="Reflex:DALL-E") -``` - -## Schauen wir uns das mal genauer an. - -
-Erläuterung der Unterschiede zwischen Backend- und Frontend-Teilen der DALL-E-App. -
- -### **Reflex-UI** - -Fangen wir mit der Benutzeroberfläche an. - -```python -def index(): - return rx.center( - ... - ) -``` - -Diese `index`-Funktion definiert das Frontend der App. - -Wir verwenden verschiedene Komponenten wie `center`, `vstack`, `input` und `button`, um das Frontend zu erstellen. Komponenten können ineinander verschachtelt werden, um komplexe Layouts zu erstellen. Und du kannst Schlüsselwortargumente verwenden, um sie mit der vollen Kraft von CSS zu stylen. - -Reflex wird mit [über 60 eingebauten Komponenten](https://reflex.dev/docs/library) geliefert, die dir den Einstieg erleichtern. Wir fügen aktiv weitere Komponenten hinzu, und es ist einfach, [eigene Komponenten zu erstellen](https://reflex.dev/docs/wrapping-react/overview/). - -### **State** - -Reflex stellt deine Benutzeroberfläche als Funktion deines Zustands dar. - -```python -class State(rx.State): - """Der Zustand der App.""" - prompt = "" - image_url = "" - processing = False - complete = False - -``` - -Der Zustand definiert alle Variablen (genannt Vars) in einer App, die sich ändern können, und die Funktionen, die sie ändern. - -Hier besteht der Zustand aus einem `prompt` und einer `image_url`. Es gibt auch die Booleans `processing` und `complete`, um anzuzeigen, wann der Button deaktiviert werden soll (während der Bildgenerierung) und wann das resultierende Bild angezeigt werden soll. - -### **Event-Handler** - -```python -def get_image(self): - """Hole das Bild aus dem Prompt.""" - if self.prompt == "": - return rx.window_alert("Prompt Empty") - - self.processing, self.complete = True, False - yield - response = openai_client.images.generate( - prompt=self.prompt, n=1, size="1024x1024" - ) - self.image_url = response.data[0].url - self.processing, self.complete = False, True -``` - -Innerhalb des Zustands definieren wir Funktionen, die als Event-Handler bezeichnet werden und die Zustand-Variablen ändern. Event-Handler sind die Art und Weise, wie wir den Zustand in Reflex ändern können. Sie können als Reaktion auf Benutzeraktionen aufgerufen werden, z.B. beim Klicken auf eine Schaltfläche oder bei der Eingabe in ein Textfeld. Diese Aktionen werden als Ereignisse bezeichnet. - -Unsere DALL-E.-App hat einen Event-Handler, `get_image`, der dieses Bild von der OpenAI-API abruft. Die Verwendung von `yield` in der Mitte eines Event-Handlers führt zu einer Aktualisierung der Benutzeroberfläche. Andernfalls wird die Benutzeroberfläche am Ende des Ereignishandlers aktualisiert. - -### **Routing** - -Schließlich definieren wir unsere App. - -```python -app = rx.App() -``` - -Wir fügen der Indexkomponente eine Seite aus dem Stammverzeichnis der Anwendung hinzu. Wir fügen auch einen Titel hinzu, der in der Seitenvorschau/Browser-Registerkarte angezeigt wird. - -```python -app.add_page(index, title="DALL-E") -``` - -Du kannst eine mehrseitige App erstellen, indem du weitere Seiten hinzufügst. - -## 📑 Ressourcen - -
- -📑 [Docs](https://reflex.dev/docs/getting-started/introduction)   |   🗞️ [Blog](https://reflex.dev/blog)   |   📱 [Komponentenbibliothek](https://reflex.dev/docs/library)   |   🖼️ [Templates](https://reflex.dev/templates/)   |   🛸 [Bereitstellung](https://reflex.dev/docs/hosting/deploy-quick-start)   - -
- -## ✅ Status - -Reflex wurde im Dezember 2022 unter dem Namen Pynecone gestartet. - -Ab 2025 wurde [Reflex Cloud](https://cloud.reflex.dev) gestartet, um die beste Hosting-Erfahrung für Reflex-Apps zu bieten. Wir werden es weiterhin entwickeln und mehr Funktionen implementieren. - -Reflex hat wöchentliche Veröffentlichungen und neue Features! Stelle sicher, dass du dieses Repository mit einem :star: Stern markierst und :eyes: beobachtest, um auf dem Laufenden zu bleiben. - -## Beitragende - -Wir begrüßen Beiträge jeder Größe! Hier sind einige gute Möglichkeiten, um in der Reflex-Community zu starten. - -- **Tritt unserem Discord bei**: Unser [Discord](https://discord.gg/T5WSbC2YtQ) ist der beste Ort, um Hilfe für dein Reflex-Projekt zu bekommen und zu besprechen, wie du beitragen kannst. -- **GitHub-Diskussionen**: Eine großartige Möglichkeit, über Funktionen zu sprechen, die du hinzugefügt haben möchtest oder Dinge, die verwirrend sind/geklärt werden müssen. -- **GitHub-Issues**: [Issues](https://github.com/reflex-dev/reflex/issues) sind eine ausgezeichnete Möglichkeit, Bugs zu melden. Außerdem kannst du versuchen, ein bestehendes Problem zu lösen und eine PR einzureichen. - -Wir suchen aktiv nach Mitwirkenden, unabhängig von deinem Erfahrungslevel oder deiner Erfahrung. Um beizutragen, sieh dir [CONTRIBUTING.md](https://github.com/reflex-dev/reflex/blob/main/CONTRIBUTING.md) an. - -## Vielen Dank an unsere Mitwirkenden: - - - - - -## Lizenz - -Reflex ist Open-Source und lizenziert unter der [Apache License 2.0](/LICENSE). diff --git a/docs/enterprise/ag_chart.md b/docs/enterprise/ag_chart.md new file mode 100644 index 00000000000..30fdc4b53ee --- /dev/null +++ b/docs/enterprise/ag_chart.md @@ -0,0 +1,30 @@ +# AG Chart + +AG Chart is a powerful charting library that provides interactive charts and data visualization components for enterprise applications. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def basic_chart(): + return rxe.ag_chart( + options={ + "data": [ + {"month": "Jan", "value": 10}, + {"month": "Feb", "value": 20}, + {"month": "Mar", "value": 15}, + ], + "series": [ + { + "type": "line", + "xKey": "month", + "yKey": "value", + } + ], + }, + width="100%", + height="400px", + ) +``` + +For more detailed documentation, see the [AG Chart Documentation](https://charts.ag-grid.com/). diff --git a/docs/enterprise/ag_grid/aligned-grids.md b/docs/enterprise/ag_grid/aligned-grids.md new file mode 100644 index 00000000000..da63bef7f63 --- /dev/null +++ b/docs/enterprise/ag_grid/aligned-grids.md @@ -0,0 +1,65 @@ +--- +title: Aligned Grids +--- + +AgGrid provides a way to align multiple grids together. This is useful when you want to display related data in a synchronized manner. + +You can do so through the `aligned_grids` prop. This prop takes a list of grid IDs that you want to align. + +```python demo exec +import pandas as pd +import reflex as rx +import reflex_enterprise as rxe + +# Olympic winners data (originally from https://www.ag-grid.com/example-assets/olympic-winners.json) +df = pd.read_json("data/olympic-winners.json") + +row_data = df.to_dict("records") + +column_defs = [ + {"field": "athlete"}, + {"field": "age"}, + {"field": "country"}, + {"field": "year"}, + {"field": "sport"}, + { + "header_name": "Medals", + "children": [ + { + "field": "total", + "column_group_show": "closed", + "col_id": "total", + "value_getter": "params.data.gold + params.data.silver + params.data.bronze", + "width": 100, + }, + {"field": "gold", "column_group_show": "open", "width": 100}, + {"field": "silver", "column_group_show": "open", "width": 100}, + {"field": "bronze", "column_group_show": "open", "width": 100}, + ], + }, +] + +def aligned_grids_page(): + """Aligned grids demo.""" + return rx.el.div( + rxe.ag_grid( + id="grid1", + column_defs=column_defs, + row_data=row_data, + aligned_grids=["grid2"], + width="100%", + ), rxe.ag_grid( + id="grid2", + column_defs=column_defs, + row_data=row_data, + aligned_grids=["grid1"], + width="100%", + ), + class_name="flex flex-col gap-y-6 w-full" + ) + +``` + +```md alert warning +# The pivot functionality does not work with aligned grids. This is because pivoting data changes the columns, which would make the aligned grids incompatible, as they are no longer sharing the same set of columns. +``` diff --git a/docs/enterprise/ag_grid/cell-selection.md b/docs/enterprise/ag_grid/cell-selection.md new file mode 100644 index 00000000000..c428d46fd03 --- /dev/null +++ b/docs/enterprise/ag_grid/cell-selection.md @@ -0,0 +1,288 @@ +--- +title: "Cell Selection" +order: 8 +--- + +```python exec +from pcweb.pages.docs import enterprise +``` + +# Cell Selection + +AG Grid provides powerful cell selection capabilities that allow users to select individual cells or ranges of cells. This feature is essential for data manipulation, copying, and advanced interactions like fill handle operations. + +## Range Selection + +To enable cell selection in your AG Grid, set the `cell_selection` prop to `True`. This automatically enables both single cell selection and range selection capabilities. + +### Basic Selection Example + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +class CellSelectionState(rx.State): + data: list[dict] = [] + + @rx.event + def load_data(self): + df = pd.read_json("https://www.ag-grid.com/example-assets/olympic-winners.json") + self.data = df.head(10).to_dict("records") + + @rx.event + def echo_selection(self, ranges: list[dict], started: bool, finished: bool): + if finished: + yield rx.toast(f"Selected ranges: {ranges}") + +column_defs = [ + {"field": "athlete", "width": 150}, + {"field": "age", "width": 90}, + {"field": "country", "width": 120}, + {"field": "year", "width": 90}, + {"field": "sport", "width": 120}, + {"field": "gold", "width": 100}, + {"field": "silver", "width": 100}, + {"field": "bronze", "width": 100}, +] + +def basic_cell_selection(): + return rx.vstack( + rx.text("Click and drag to select cells. Selection info will appear in a toast.", size="2"), + rxe.ag_grid( + id="basic_cell_selection_grid", + column_defs=column_defs, + row_data=CellSelectionState.data, + cell_selection=True, + on_cell_selection_changed=CellSelectionState.echo_selection, + width="100%", + height="400px", + ), + on_mount=CellSelectionState.load_data, + width="100%", + ) +``` + +### Advanced Selection Event Handling + +For more sophisticated selection handling, you can process the selection ranges to calculate detailed information: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +class AdvancedSelectionState(rx.State): + data: list[dict] = [] + + @rx.event + def load_data(self): + df = pd.DataFrame({ + "name": ["Alice", "Bob", "Charlie", "Diana", "Eve"], + "score": [85, 92, 78, 96, 88], + "grade": ["B", "A", "C", "A", "B"], + "attempts": [3, 2, 4, 1, 3] + }) + self.data = df.to_dict("records") + + @rx.event + def handle_selection(self, ranges: list[dict], started: bool, finished: bool): + if finished and ranges: + total_cells = sum( + (r.get("endRow", 0) - r.get("startRow", 0) + 1) * + len(r.get("columns", [])) + for r in ranges + ) + yield rx.toast(f"Selected {total_cells} cells across {len(ranges)} ranges") + +editable_column_defs = [ + {"field": "name", "width": 120}, + {"field": "score", "width": 100, "editable": True}, + {"field": "grade", "width": 100, "editable": True}, + {"field": "attempts", "width": 120, "editable": True}, +] + +def advanced_selection_example(): + return rx.vstack( + rx.text("Select ranges of cells. Try selecting multiple ranges by holding Ctrl/Cmd.", size="2"), + rxe.ag_grid( + id="advanced_selection_grid", + column_defs=editable_column_defs, + row_data=AdvancedSelectionState.data, + cell_selection=True, + on_cell_selection_changed=AdvancedSelectionState.handle_selection, + width="100%", + height="300px", + ), + on_mount=AdvancedSelectionState.load_data, + width="100%", + ) +``` + +## Fill Handle + +The fill handle is a powerful feature that allows users to quickly fill cells by dragging from a selected cell or range. When enabled, a small square appears at the bottom-right corner of the selection that users can drag to fill adjacent cells. + +### Enabling Fill Handle + +To enable the fill handle, configure the `cell_selection` prop with a dictionary containing the handle configuration: + +```python +cell_selection={ + "handle": { + "mode": "fill", # Enable fill handle + } +} +``` + +### Fill Handle Events + +When using the fill handle, it will trigger `on_cell_value_changed` for each cell receiving a fill value. This allows your backend to handle the data changes appropriately. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +class FillHandleState(rx.State): + data: list[dict] = [] + change_log: list[str] = [] + + @rx.event + def load_data(self): + df = pd.DataFrame({ + "item": ["Apple", "Banana", "Cherry", "Date", "Elderberry"], + "quantity": [10, 15, 8, 12, 20], + "price": [1.50, 0.75, 2.00, 3.00, 4.50], + "total": [15.00, 11.25, 16.00, 36.00, 90.00] + }) + self.data = df.to_dict("records") + + @rx.event + def handle_cell_change(self, data: dict): + row_index = data.get("rowIndex", 0) + field = data.get("colId", "") + new_value = data.get("newValue", "") + old_value = data.get("oldValue", "") + + change_msg = f"Row {row_index + 1}, {field}: '{old_value}' → '{new_value}'" + self.change_log = [change_msg] + self.change_log[:9] # Keep last 10 changes + + # Update the data + if 0 <= row_index < len(self.data): + self.data[row_index][field] = new_value + +fill_column_defs = [ + {"field": "item", "width": 120}, + {"field": "quantity", "width": 100, "editable": True, "type": "numericColumn"}, + {"field": "price", "width": 100, "editable": True, "type": "numericColumn"}, + {"field": "total", "width": 100, "editable": True, "type": "numericColumn"}, +] + +def fill_handle_example(): + return rx.vstack( + rx.text("Select a cell and drag the fill handle (small square at bottom-right) to fill adjacent cells.", size="2"), + rxe.ag_grid( + id="fill_handle_grid", + column_defs=fill_column_defs, + row_data=FillHandleState.data, + cell_selection={ + "handle": { + "mode": "fill", # Enable fill handle + } + }, + on_cell_value_changed=FillHandleState.handle_cell_change, + width="100%", + height="300px", + ), + rx.divider(), + rx.text("Recent Changes:", weight="bold", size="3"), + rx.cond( + FillHandleState.change_log, + rx.vstack( + rx.foreach( + FillHandleState.change_log, + lambda change: rx.text(change, size="1", color="gray") + ), + spacing="1", + ), + rx.text("No changes yet", size="2", color="gray") + ), + on_mount=FillHandleState.load_data, + width="100%", + spacing="4", + ) +``` + +## Advanced Configuration Options + +You can further customize cell selection behavior using additional configuration options: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +class ConfigurationState(rx.State): + data: list[dict] = [] + + @rx.event + def load_data(self): + df = pd.DataFrame({ + "id": range(1, 8), + "name": ["Product A", "Product B", "Product C", "Product D", "Product E", "Product F", "Product G"], + "category": ["Electronics", "Clothing", "Electronics", "Books", "Clothing", "Electronics", "Books"], + "price": [299.99, 49.99, 199.99, 24.99, 79.99, 399.99, 19.99], + "stock": [15, 32, 8, 45, 23, 12, 67] + }) + self.data = df.to_dict("records") + +configuration_column_defs = [ + {"field": "id", "width": 80}, + {"field": "name", "width": 150, "editable": True}, + {"field": "category", "width": 120}, + {"field": "price", "width": 100, "editable": True, "type": "numericColumn"}, + {"field": "stock", "width": 100, "editable": True, "type": "numericColumn"}, +] + +def configuration_example(): + return rx.vstack( + rx.text("Cell selection with additional configuration options", size="2"), + rxe.ag_grid( + id="configuration_grid", + column_defs=configuration_column_defs, + row_data=ConfigurationState.data, + cell_selection={ + "handle": { + "mode": "fill", + } + }, + enable_cell_text_selection=True, # Allow text selection within cells + suppress_cell_focus=False, # Allow cell focus + width="100%", + height="350px", + ), + on_mount=ConfigurationState.load_data, + width="100%", + ) +``` + +## Key Features + +- **Cell Selection**: Enable with `cell_selection=True` for both single cell and range selection capabilities +- **Fill Handle**: Configure with `cell_selection={"handle": {"mode": "fill"}}` for drag-to-fill functionality +- **Event Handling**: Use `on_cell_selection_changed` to respond to selection changes +- **Value Changes**: Use `on_cell_value_changed` to handle individual cell edits and fill operations +- **Text Selection**: Enable `enable_cell_text_selection=True` to allow text selection within cells + +## Best Practices + +1. **Use cell_selection configuration**: Both single cell and range selection are automatically enabled with `cell_selection=True`, providing all necessary selection capabilities for fill operations. + +2. **Handle cell value changes**: When using fill handle, implement `on_cell_value_changed` to process the data updates in your backend. + +3. **Provide user feedback**: Use toasts or other UI elements to confirm selection actions and data changes. + +4. **Consider performance**: For large datasets, be mindful of the performance impact of frequent cell value change events. + +5. **Validate fill operations**: Implement validation logic in your `on_cell_value_changed` handler to ensure data integrity. diff --git a/docs/enterprise/ag_grid/column-defs.md b/docs/enterprise/ag_grid/column-defs.md new file mode 100644 index 00000000000..a1dea018114 --- /dev/null +++ b/docs/enterprise/ag_grid/column-defs.md @@ -0,0 +1,35 @@ +--- +order: 1 +--- + +```python exec +from pcweb.pages.docs import enterprise +``` + +# Column Definitions + +## Basic Columns + +AgGrid allows you to define the columns of your grid, passed to the prop `column_defs`. Each dictionary represents a column. + +```md alert warning +# If you are converting from other AG Grid implementation, we also support camelCase for the name of the properties. +``` + +Here we define a grid with 3 columns: +```python +column_defs = [ + {"field": "direction"}, + {"field": "strength"}, + {"field": "frequency"}, +] +``` + +To set default properties for all your columns, you can define `default_col_def` in your grid: +```python +default_col_def = { + "sortable": True, + "filter": True, + "resizable": True, +} +``` \ No newline at end of file diff --git a/docs/enterprise/ag_grid/index.md b/docs/enterprise/ag_grid/index.md new file mode 100644 index 00000000000..a6ed8c25b48 --- /dev/null +++ b/docs/enterprise/ag_grid/index.md @@ -0,0 +1,681 @@ +--- +title: "AgGrid Overview" +order: 3 +--- + +```python exec +from pcweb.pages.docs import enterprise +``` + +# AG Grid + +AG Grid is a powerful, feature-rich data grid component that brings enterprise-grade table functionality to your Reflex applications. With support for sorting, filtering, pagination, row selection, and much more, AG Grid transforms how you display and interact with tabular data. + +[Explore the full AG Grid showcase and examples](https://aggrid.reflex.run/) + +## Your First Reflex AG Grid + +A basic Reflex AG Grid contains column definitions `column_defs`, which define the columns to be displayed in the grid, and `row_data`, which contains the data to be displayed in the grid. + +Each grid also requires a unique `id`, which is needed to uniquely identify the Ag-Grid instance on the page. If you have multiple grids on the same page, each grid must have a unique `id` so that it can be correctly rendered and managed. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + + +df = pd.read_csv("data/wind_dataset.csv") + +column_defs = [ + {"field": "direction"}, + {"field": "strength"}, + {"field": "frequency"}, +] + +def ag_grid_simple(): + return rxe.ag_grid( + id="ag_grid_basic_1", + row_data=df.to_dict("records"), + column_defs=column_defs, + width="100%", + ) +``` + +📊 **Dataset source:** [wind_dataset.csv](https://raw.githubusercontent.com/plotly/datasets/master/wind_dataset.csv) + +The format of the data passed to the `row_data` prop is a list of dictionaries. Each dictionary represents a row in the grid as seen below. + +```python +[ + \{"direction": "N", "strength": "0-1", "frequency": 0.5\}, + \{"direction": "NNE", "strength": "0-1", "frequency": 0.6\}, + \{"direction": "NE", "strength": "0-1", "frequency": 0.5\}, +] +``` + +The previous example showed the `column_defs` written out in full. You can also extract the required information from the dataframe's column names: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +df = pd.read_csv("data/wind_dataset.csv") + + +def ag_grid_simple_2(): + return rxe.ag_grid( + id="ag_grid_basic_2", + row_data=df.to_dict("records"), + column_defs=[{"field": i} for i in df.columns], + width="100%", + height="40vh", + ) +``` + +📊 **Dataset source:** [wind_dataset.csv](https://raw.githubusercontent.com/plotly/datasets/master/wind_dataset.csv) + +## Headers + +In the above example, the first letter of the field names provided are capitalized when displaying the header name. You can customize the header names by providing a `header_name` key in the column definition. In this example, the `header_name` is customized for the second and third columns. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + + +df = pd.read_csv("data/gapminder2007.csv") + +column_defs = [ + {"field": "country"}, + {"field": "pop", "headerName": "Population"}, + {"field": "lifeExp", "headerName": "Life Expectancy"}, +] + +def ag_grid_simple_headers(): + return rxe.ag_grid( + id="ag_grid_basic_headers", + row_data=df.to_dict("records"), + column_defs=column_defs, + width="100%", + height="40vh", + ) +``` + +📊 **Dataset source:** [gapminder2007.csv](https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv) + +## Column Filtering + +Allow a user to filter a column by setting the `filter` key to `True` in the column definition. In this example we enable filtering for the first and last columns. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + + +df = pd.read_csv("data/gapminder2007.csv") + +column_defs = [ + {"field": "country", "headerName": "Country", "filter": True}, + {"field": "pop", "headerName": "Population"}, + {"field": "lifeExp", "headerName": "Life Expectancy", "filter": True}, +] + +def ag_grid_simple_column_filtering(): + return rxe.ag_grid( + id="ag_grid_basic_column_filtering", + row_data=df.to_dict("records"), + column_defs=column_defs, + width="100%", + height="40vh", + ) +``` + +### Filter Types + +You can set `filter=True` to enable the default filter for a column. + +You can also set the filter type using the `filter` key. The following filter types are available: `ag_grid.filters.date`, `ag_grid.filters.number` and `ag_grid.filters.text`. These ensure that the input you enter to the filter is of the correct type. + +(`ag_grid.filters.set` and `ag_grid.filters.multi` are available with AG Grid Enterprise) + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + + +df = pd.read_csv("data/GanttChart-updated.csv") + +column_defs = [ + {"field": "Task", "filter": True}, + {"field": "Start", "filter": rxe.ag_grid.filters.date}, + {"field": "Duration", "filter": rxe.ag_grid.filters.number}, + {"field": "Resource", "filter": rxe.ag_grid.filters.text}, +] + +def ag_grid_simple_column_filtering(): + return rxe.ag_grid( + id="ag_grid_basic_column_filtering", + row_data=df.to_dict("records"), + column_defs=column_defs, + width="100%", + height="40vh", + ) +``` + +📊 **Dataset source:** [GanttChart-updated.csv](https://raw.githubusercontent.com/plotly/datasets/master/GanttChart-updated.csv) + +## Row Sorting + +By default, the rows can be sorted by any column by clicking on the column header. You can disable sorting of the rows for a column by setting the `sortable` key to `False` in the column definition. + +In this example, we disable sorting for the first column. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + + +df = pd.read_csv("data/gapminder2007.csv") + +column_defs = [ + {"field": "country", "sortable": False}, + {"field": "pop", "headerName": "Population"}, + {"field": "lifeExp", "headerName": "Life Expectancy"}, +] + +def ag_grid_simple_row_sorting(): + return rxe.ag_grid( + id="ag_grid_basic_row_sorting", + row_data=df.to_dict("records"), + column_defs=column_defs, + width="100%", + height="40vh", + ) +``` + +📊 **Dataset source:** [gapminder2007.csv](https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv) + +## Row Selection + +Row Selection is enabled using the `row_selection` attribute. Setting it to `multiple` allows users to select multiple rows at a time. You can use the `checkbox_selection` column definition attribute to render checkboxes for selection. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + + +df = pd.read_csv("data/gapminder2007.csv") + +column_defs = [ + {"field": "country", "checkboxSelection": True}, + {"field": "pop", "headerName": "Population"}, + {"field": "continent"}, +] + +def ag_grid_simple_row_selection(): + return rxe.ag_grid( + id="ag_grid_basic_row_selection", + row_data=df.to_dict("records"), + column_defs=column_defs, + row_selection={"mode":"multiple"}, + width="100%", + height="40vh", + ) +``` + +📊 **Dataset source:** [gapminder2007.csv](https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv) + +## Editing + +Enable Editing by setting the `editable` attribute to `True`. The cell editor is inferred from the cell data type. Set the cell editor type using the `cell_editor` attribute. + +There are 7 provided cell editors in AG Grid: + +1. `ag_grid.editors.text` +2. `ag_grid.editors.large_text` +3. `ag_grid.editors.select` +4. `ag_grid.editors.rich_select` +5. `ag_grid.editors.number` +6. `ag_grid.editors.date` +7. `ag_grid.editors.checkbox` + +In this example, we enable editing for the second and third columns. The second column uses the `number` cell editor, and the third column uses the `select` cell editor. + +The `on_cell_value_changed` event trigger is linked to the `cell_value_changed` event handler in the state. This event handler is called whenever a cell value is changed and changes the value of the backend var `_data_df` and the state var `data`. + +```python +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +class AGGridEditingState(rx.State): + data: list[dict] = [] + _data_df: pd.DataFrame + + @rx.event + def load_data(self): + self._data_df = pd.read_csv("data/gapminder2007.csv") + self.data = self._data_df.to_dict("records") + + @rx.event + def cell_value_changed(self, row, col_field, new_value): + self._data_df.at[row, col_field] = new_value + self.data = self._data_df.to_dict("records") + yield rx.toast(f"Cell value changed, Row: {row}, Column: {col_field}, New Value: {new_value}") + + +column_defs = [ + \{"field": "country"\}, + \{"field": "pop", "headerName": "Population", "editable": True, "cellEditor": rxe.ag_grid.editors.number\}, + \{"field": "continent", "editable": True, "cellEditor": rxe.ag_grid.editors.select, "cellEditorParams": \{"values": ['Asia', 'Europe', 'Africa', 'Americas', 'Oceania']\}\}, +] + +def ag_grid_simple_editing(): + return rxe.ag_grid( + id="ag_grid_basic_editing", + row_data=AGGridEditingState.data, + column_defs=column_defs, + on_cell_value_changed=AGGridEditingState.cell_value_changed, + on_mount=AGGridEditingState.load_data, + width="100%", + height="40vh", + ) +``` + +## Pagination + +By default, the grid uses a vertical scroll. You can reduce the amount of scrolling required by adding pagination. To add pagination, set `pagination=True`. You can set the `pagination_page_size` to the number of rows per page and `pagination_page_size_selector` to a list of options for the user to select from. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +df = pd.read_csv("data/gapminder2007.csv") + +column_defs = [ + {"field": "country"}, + {"field": "pop", "headerName": "Population"}, + {"field": "lifeExp", "headerName": "Life Expectancy"}, +] + +def ag_grid_simple_pagination(): + return rxe.ag_grid( + id="ag_grid_basic_pagination", + row_data=df.to_dict("records"), + column_defs=column_defs, + pagination=True, + pagination_page_size=10, + pagination_page_size_selector=[10, 40, 100], + width="100%", + height="40vh", + ) +``` + +📊 **Dataset source:** [gapminder2007.csv](https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv) + +## AG Grid with State + +### Putting Data in State + +Assuming you want to make any edit to your data, you can put the data in State. This allows you to update the grid based on user input. Whenever the `data` var is updated, the grid will be re-rendered with the new data. + +```python +from typing import Any +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +class AGGridState2(rx.State): + data: list[dict] = [] + + @rx.event + def load_data(self): + _df = pd.read_csv("data/gapminder2007.csv") + self.data = _df.to_dict("records") + +column_defs = [ + \{"field": "country"\}, + \{"field": "pop", "headerName": "Population"\}, + \{"field": "continent"\}, +] + +def ag_grid_state_2(): + return rxe.ag_grid( + id="ag_grid_state_2", + row_data=AGGridState2.data, + column_defs=column_defs, + on_mount=AGGridState2.load_data, + width="100%", + height="40vh", + ) +``` + +### Updating the Grid with State + +You can use State to update the grid based on a users input. In this example, we update the `column_defs` of the grid when a user clicks a button. + +```python +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +class AgGridState(rx.State): + """The app state.""" + all_columns: list = [] + + two_columns: list = [] + column_defs: list = all_columns + n_clicks = 0 + + @rx.event + def init_columns(self): + self.all_columns = [ + \{"field": "country"\}, + \{"field": "pop"\}, + \{"field": "continent"\}, + \{"field": "lifeExp"\}, + \{"field": "gdpPercap"\}, + ] + self.two_columns = [ + \{"field": "country"\}, + \{"field": "pop"\}, + ] + self.column_defs = self.all_columns + + @rx.event + def update_columns(self): + self.n_clicks += 1 + if self.n_clicks % 2 != 0: + self.column_defs = self.two_columns + else: + self.column_defs = self.all_columns + + +df = pd.read_csv("data/gapminder2007.csv") + + +def ag_grid_simple_with_state(): + return rx.box( + rx.button("Toggle Columns", on_click=AgGridState.update_columns), + rxe.ag_grid( + id="ag_grid_basic_with_state", + row_data=df.to_dict("records"), + column_defs=AgGridState.column_defs, + on_mount=AgGridState.init_columns, + width="100%", + height="40vh", + ), + width="100%", + ) +``` + +📊 **Dataset source:** [gapminder2007.csv](https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv) + +## AG Grid with Data from a Database + +In this example, we will use a database to store the data. The data is loaded from a csv file and inserted into the database when the page is loaded using the `insert_dataframe_to_db` event handler. + +The data is then fetched from the database and displayed in the grid using the `data` computed var. + +When a cell value is changed, the data is updated in the database using the `cell_value_changed` event handler. + +```python +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd +from sqlmodel import select + +class Country(rx.Model, table=True): + country: str + population: int + continent: str + + +class AGGridDatabaseState(rx.State): + + countries: list[Country] + + # Insert data from a csv loaded dataframe to the database (Do this on the page load) + @rx.event + def insert_dataframe_to_db(self): + data = pd.read_csv("data/gapminder2007.csv") + with rx.session() as session: + for _, row in data.iterrows(): + db_record = Country( + country=row['country'], + population=row['pop'], + continent=row['continent'], + ) + session.add(db_record) + session.commit() + + # Fetch data from the database using a computed variable + @rx.var + def data(self) -> list[dict]: + with rx.session() as session: + results = session.exec(select(Country)).all() + self.countries = [result.dict() for result in results] + return self.countries + + # Update the database when a cell value is changed + @rx.event + def cell_value_changed(self, row, col_field, new_value): + self.countries[row][col_field] = new_value + with rx.session() as session: + country = Country(**self.countries[row]) + session.merge(country) + session.commit() + yield rx.toast(f"Cell value changed, Row: \{row}, Column: \{col_field}, New Value: \{new_value}") + + +column_defs = [ + \{"field": "country"\}, + \{"field": "population", "headerName": "Population", "editable": True, "cellEditor": rxe.ag_grid.editors.number\}, + \{"field": "continent", "editable": True, "cellEditor": rxe.ag_grid.editors.select, "cellEditorParams": \{"values": ['Asia', 'Europe', 'Africa', 'Americas', 'Oceania']\}\}, +] + +def index(): + return rxe.ag_grid( + id="ag_grid_basic_editing", + row_data=AGGridDatabaseState.data, + column_defs=column_defs, + on_cell_value_changed=AGGridDatabaseState.cell_value_changed, + width="100%", + height="40vh", + ) + +# Add state and page to the app. +app = rx.App() +app.add_page(index, on_load=AGGridDatabaseState.insert_dataframe_to_db) +``` + +## Using AG Grid Enterprise + +AG Grid offers both community and enterprise versions. See the [AG Grid docs](https://www.ag-grid.com/archive/31.2.0/react-data-grid/licensing/) for details on purchasing a license key. + +To use an AG Grid Enterprise license key with Reflex AG Grid set the environment variable `AG_GRID_LICENSE_KEY`: + +```bash +export AG_GRID_LICENSE_KEY="your_license_key" +``` + +## column_def props + +The following props are available for `column_defs` as well as many others that can be found here: [AG Grid Column Def Docs](https://www.ag-grid.com/react-data-grid/column-properties/). (it is necessary to use snake_case for the keys in Reflex, unlike in the AG Grid docs where camelCase is used) + +- `field`: `str`: The field of the row object to get the cell's data from. +- `col_id`: `str | None`: The unique ID to give the column. This is optional. If missing, the ID will default to the field. +- `type`: `str | None`: The type of the column. +- `cell_data_type`: `bool | str | None`: The data type of the cell values for this column. Can either infer the data type from the row data (true - the default behaviour), define a specific data type (string), or have no data type (false). +- `hide`: `bool`: Set to true for this column to be hidden. +- `editable`: `bool | None`: Set to true if this column is editable, otherwise false. +- `filter`: `AGFilters | str | None`: Filter component to use for this column. Set to true to use the default filter. Set to the name of a provided filter to use that filter. (Check out the Filter Types section of this page for more information) +- `floating_filter`: `bool`: Whether to display a floating filter for this column. +- `header_name`: `str | None`: The name to render in the column header. If not specified and field is specified, the field name will be used as the header name. +- `header_tooltip`: `str | None`: Tooltip for the column header. +- `checkbox_selection`: `bool | None`: Set to true to render a checkbox for row selection. +- `cell_editor`: `AGEditors | str | None`: Provide your own cell editor component for this column's cells. (Check out the Editing section of this page for more information) +- `cell_editor_params`: `dict[str, list[Any]] | None`: Params to be passed to the cellEditor component. + + + +## Functionality you need is not available/working in Reflex + +All AGGrid options found in this [documentation](https://www.ag-grid.com/react-data-grid/reference/) are mapped in rxe.ag_grid, but some features might not have been fully tested, due to the sheer number of existing features in the underlying AG Grid library. + +If one of the ag_grid props does not import the expected module, you can pass it manually via the props `community_modules` or `enterprise_modules`, which expect a `set[str]` of the module names. You will get a warning in the browser console if a module is missing, so you can check there if a feature is not working as expected. + +You can also report the missing module on our discord or GitHub issues page of the main Reflex repository. + +Best practice is to create a single instance of `ag_grid.api()` with the same `id` as the `id` of the `ag_grid` component that is to be referenced, `"ag_grid_basic_row_selection"` in this first example. + +The example below uses the `select_all()` and `deselect_all()` methods of the AG Grid API to select and deselect all rows in the grid. This method is not available in Reflex directly. Check out this [documentation](https://www.ag-grid.com/react-data-grid/grid-api/#reference-selection-selectAll) to see what the methods look like in the AG Grid docs. + +```md alert info +# Ensure that the docs are set to React tab in AG Grid +``` + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +df = pd.read_csv( + "data/gapminder2007.csv" +) + +column_defs = [ + {"field": "country", "checkboxSelection": True}, + {"field": "pop"}, + {"field": "continent"}, +] + +def ag_grid_api_simple(): + my_api = rxe.ag_grid.api(id="ag_grid_basic_row_selection") + return rx.vstack( + rxe.ag_grid( + id="ag_grid_basic_row_selection", + row_data=df.to_dict("records"), + column_defs=column_defs, + row_selection="single", + width="100%", + height="40vh", + ), + rx.button("Select All", on_click=my_api.select_all()), + rx.button("Deselect All", on_click=my_api.deselect_all()), + spacing="4", + width="100%", + ) +``` + +📊 **Dataset source:** [gapminder2007.csv](https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv) + +The react code for the `select_all()` event handler is `selectAll = (source?: SelectionEventSourceType) => void;`. + +To use this in Reflex as you can see, it should be called in snake case rather than camel case. The `void` means it doesn't return anything. The `source?` indicates that it takes an optional `source` argument. + + +```md alert info +# Another way to use the AG Grid API +It is also possible to use the AG Grid API directly with the event trigger (`on_click`) of the component. This removes the need to create a variable `my_api`. This is shown in the example below. It is necessary to use the `id` of the `ag_grid` component that is to be referenced. + +```python +rx.button("Select all", on_click=rxe.ag_grid.api(id="ag_grid_basic_row_selection").select_all()), +``` + +### More examples + +The following example lets a user [export the data as a csv](https://www.ag-grid.com/javascript-data-grid/grid-api/#reference-export-exportDataAsCsv) and [adjust the size of columns to fit the available horizontal space](https://www.ag-grid.com/javascript-data-grid/grid-api/#reference-columnSizing-sizeColumnsToFit). (Try resizing the screen and then clicking the resize columns button) + + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +df = pd.read_csv( + "data/gapminder2007.csv" +) + +column_defs = [ + {"field": "country", "checkboxSelection": True}, + {"field": "pop"}, + {"field": "continent"}, +] + +def ag_grid_api_simple2(): + my_api = rxe.ag_grid.api(id="ag_grid_export_and_resize") + return rx.vstack( + rxe.ag_grid( + id="ag_grid_export_and_resize", + row_data=df.to_dict("records"), + column_defs=column_defs, + width="100%", + height="40vh", + ), + rx.button("Export", on_click=my_api.export_data_as_csv()), + rx.button("Resize Columns", on_click=my_api.size_columns_to_fit()), + spacing="4", + width="100%", + ) +``` + +📊 **Dataset source:** [gapminder2007.csv](https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv) + +The react code for both of these is shown below. The key point to see is that both of these functions return `void` and therefore does not return anything. + +`exportDataAsCsv = (params?: CsvExportParams) => void;` + +`sizeColumnsToFit = (paramsOrGridWidth?: ISizeColumnsToFitParams | number) => void;` + + +### Example with a Return Value + +This example shows how to get the data from `ag_grid` as a [csv on the backend](https://www.ag-grid.com/javascript-data-grid/grid-api/#reference-export-getDataAsCsv). The data that was passed to the backend is then displayed as a toast with the data. + +```python +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +class AGGridStateAPI(rx.State): + def handle_get_data(self, data: str): + yield rx.toast(f"Got CSV data: {data}") + +df = pd.read_csv( + "data/gapminder2007.csv" +) + +column_defs = [ + \{"field": "country", "checkboxSelection": True\}, + \{"field": "pop"\}, + \{"field": "continent"\}, +] + +def ag_grid_api_argument(): + my_api = rxe.ag_grid.api(id="ag_grid_get_data_as_csv") + return rx.vstack( + rxe.ag_grid( + id="ag_grid_get_data_as_csv", + row_data=df.to_dict("records"), + column_defs=column_defs, + width="100%", + height="40vh", + ), + rx.button("Get CSV data on backend", on_click=my_api.get_data_as_csv(callback=AGGridStateAPI.handle_get_data)), + spacing="4", + width="100%", + ) +``` + +The react code for the `get_data_as_csv` method of the AG Grid API is `getDataAsCsv = (params?: CsvExportParams) => string | undefined;`. Here the function returns a `string` (or undefined). + +In Reflex to handle this returned value it is necessary to pass a `callback` as an argument to the `get_data_as_csv` method that will get the returned value. In this example the `handle_get_data` event handler is passed as the callback. This event handler will be called with the returned value from the `get_data_as_csv` method. diff --git a/docs/enterprise/ag_grid/model-wrapper.md b/docs/enterprise/ag_grid/model-wrapper.md new file mode 100644 index 00000000000..4615ee87296 --- /dev/null +++ b/docs/enterprise/ag_grid/model-wrapper.md @@ -0,0 +1,64 @@ +--- +order: 6 +--- + +# Model Wrapper + +A model wrapper is an utility used to wrap a database model and provide a consistent interface over it. It allows automatically adding new rows to the database, updating existing rows, and deleting rows. + +## Default Model Wrapper + +You can use the basic functionality of the model wrapper by using the `rxe.model_wrapper` function. This function takes a database model and returns a wrapper object that can be used to interact with the model. + +```python +import reflex_enterprise as rxe + +def index_page(): + return rxe.model_wrapper(class_model=MyModel) +``` + +By default the model_wrapper use the infinite rows model from AgGrid. + +## Custom Model Wrapper + +If the default model wrapper does not fit your needs, you can create a custom model wrapper by subclassing the `rxe.ModelWrapper` class. This allows you to customize the behavior of the model wrapper to fit your specific use case. + +```python +import reflex_enterprise as rxe + +class MyCustomWrapper(rxe.ModelWrapper[MyModel]): + pass +``` + +In the custom model wrapper, you can override the following methods: +- `_get_columns_defs` +- `_get_data` +- `_row_count` +- `on_value_setter` + +to modify how the model wrapper will behave. + + +## SSRM Model Wrapper + +The SSRM model wrapper, used with `rxe.model_wrapper_ssrm`, is a version of the model wrapper that allows you to use the ServerSideRowModel of AgGrid. + +```python +import reflex_enterprise as rxe + +def index_page(): + return rxe.model_wrapper_ssrm(class_model=MyModel) +``` + +## SSRM Custom Model Wrapper + +In the same way you can extend the default model wrapper, you can extend the SSRM custom model wrapper by subclassing the `rxe.ModelWrapperSSRM` class. This allows you to customize the behavior of the model wrapper to fit your specific use case. + +```python +import reflex_enterprise as rxe + +class MyCustomSSRMWrapper(rxe.ModelWrapperSSRM[MyModel]): + pass +``` + +The overridable methods are the same as the standard model wrapper. \ No newline at end of file diff --git a/docs/enterprise/ag_grid/pivot-mode.md b/docs/enterprise/ag_grid/pivot-mode.md new file mode 100644 index 00000000000..f2f9b863526 --- /dev/null +++ b/docs/enterprise/ag_grid/pivot-mode.md @@ -0,0 +1,130 @@ +```python exec +import reflex as rx +import reflex_enterprise as rxe +from pcweb.pages.docs import enterprise +``` + +# Pivot Mode + +Pivot mode allows you to visualize your data in a different way than how they are originally structured in the data source. When pivoting on a column, the values in that column will be used as column headers. This allows you to see the data in a more compact way, and can be useful when you have a lot of data to display. + +To enable pivot mode, set the `pivot_mode` property to `True` in the grid props. Once pivot mode is enabled, you can define which column to pivot on by setting the `pivot` property in a column definition. In addition to the pivot column, at least one column definition must have `row_group` property set to `True` to define the row grouping. + +You can also define how rows are aggregated by passing the `agg_func` property in the column definition. The `agg_func` property should be set to a string that represents the aggregation function to use. The built-in aggregation functions are `sum`, `min`, `max`, `count`, `avg`, `first`, and `last`. + +You can find a live example here: [Pivot Mode Example](https://aggrid.reflex.run/pivot). + +```python demo exec +import pandas as pd +import reflex as rx + +import reflex_enterprise as rxe + +# Olympic winners data (originally from https://www.ag-grid.com/example-assets/olympic-winners.json) +df = pd.read_json("data/olympic-winners.json") + +def pivot_page(): + return rxe.ag_grid( + id="sandbox_grid", + column_defs=[ + {"field": "country", "row_group": True}, + {"field": "sport", "pivot": True}, + {"field": "year", "pivot": True}, + {"field": "gold", "aggFunc": "sum"}, + ], + loading=False, + row_data=df.to_dict("records"), + default_col_def={ + "flex": 1, + "min_width": 130, + "enable_value": True, + "enable_row_group": True, + "enable_pivot": True, + }, + auto_group_column_def={ + "minWidth": 200, + "pinned": "left", + }, + pivot_mode=True, + side_bar="columns", + pivot_panel_show="always", + width="100%", + height="500px", + ), +``` + +# Pivot using State + +```python demo exec +import pandas as pd +import reflex as rx + +import reflex_enterprise as rxe + +df = pd.read_csv("data/wind_dataset.csv") + + +class PivotState(rx.State): + """State for the sandbox page.""" + + pivot = False + row_grouping = False + + @rx.event + def toggle_pivot(self): + """Toggle the pivot.""" + self.pivot = not self.pivot + + @rx.event + def toggle_row_grouping(self): + """Toggle the row grouping.""" + self.row_grouping = not self.row_grouping + + +def sandbox_page(): + """Sandbox page.""" + return rx.vstack( + rx.hstack( + rx.text("Toggle Pivot"), + rx.switch( + on_click=PivotState.toggle_pivot, + name="pivot", + checked=PivotState.pivot, + ), + rx.text("Toggle Row Grouping"), + rx.switch( + on_click=PivotState.toggle_row_grouping, + name="row_grouping", + checked=PivotState.row_grouping, + ) + ), + rxe.ag_grid( + id="sandbox_grid", + column_defs=[ + rxe.ag_grid.column_def( + field="direction", + pivot=True, + ), + rxe.ag_grid.column_def( + field="strength", + ), + rxe.ag_grid.column_def( + field="frequency", + agg_func="count", + row_group=PivotState.row_grouping, + ), + ], + row_data=df.to_dict("records"), + pivot_mode=PivotState.pivot, + pivot_panel_show="onlyWhenPivoting", + width="100%", + height="500px", + ), + width="100%", + ) + +``` + +📊 **Dataset source:** [wind_dataset.csv](https://raw.githubusercontent.com/plotly/datasets/master/wind_dataset.csv) + + diff --git a/docs/enterprise/ag_grid/theme.md b/docs/enterprise/ag_grid/theme.md new file mode 100644 index 00000000000..f88fa392453 --- /dev/null +++ b/docs/enterprise/ag_grid/theme.md @@ -0,0 +1,63 @@ +--- +order: 3 +--- + +```python exec +import reflex as rx +import reflex_enterprise as rxe +from pcweb.pages.docs import enterprise +``` + +# Themes + +```md alert warning +# Only the old theme API of AG Grid is currently supported. The new theme API is not supported yet. +``` + +You can style your grid with a theme. AG Grid includes the following themes: + +1. `quartz` +2. `alpine` +3. `balham` +4. `material` + +The grid uses `quartz` by default. To use any other theme, set it using the `theme` prop, i.e. `theme="alpine"`. + +```python +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +class AGGridThemeState(rx.State): + """The app state.""" + + theme: str = "quartz" + themes: list[str] = ["quartz", "balham", "alpine", "material"] + +df = pd.read_csv("data/gapminder2007.csv") + +column_defs = [ + {"field": "country"}, + {"field": "pop", "headerName": "Population"}, + {"field": "lifeExp", "headerName": "Life Expectancy"}, +] + +def ag_grid_simple_themes(): + return rx.vstack( + rx.hstack( + rx.text("Theme:"), + rx.select(AGGridThemeState.themes, value=AGGridThemeState.theme, on_change=AGGridThemeState.set_theme), + ), + rxe.ag_grid( + id="ag_grid_basic_themes", + row_data=df.to_dict("records"), + column_defs=column_defs, + theme=AGGridThemeState.theme, + width="100%", + height="40vh", + ), + width="100%", + ) +``` + +📊 **Dataset source:** [gapminder2007.csv](https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv) \ No newline at end of file diff --git a/docs/enterprise/ag_grid/value-transformers.md b/docs/enterprise/ag_grid/value-transformers.md new file mode 100644 index 00000000000..c9de70ebbc2 --- /dev/null +++ b/docs/enterprise/ag_grid/value-transformers.md @@ -0,0 +1,76 @@ +--- +order: 2 +--- + +```python exec +import reflex as rx +import reflex_enterprise as rxe +from pcweb.pages.docs import enterprise +``` + +# Value Transformers + +AgGrid allow you to apply transformers based on the column of your grid. This allow you to perform operations on the data before displaying it on the grid, without having to pre-process the data on the backend, reducing the load on your application. + +TOC: +- [Value Getter](#value-getter) +- [Value Formatter](#value-formatter) + +## Value Getter + +`value_getter` is a property of the column definition that allows you to define a function that will be called to get the value of the cell. This function will receive the row data as a parameter and should return the value to be displayed on the cell. + +If you have two columns `col_a` and `col_b` and you want to display the sum of these two columns in a third column `sum`, you can define the `value_getter` of `sum` as follows: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + + +df = pd.DataFrame({"col_a": [1, 2, 3, 4, 5], "col_b": [10, 20, 30, 40, 50]}) + +column_defs = [ + {"field": "col_a", "header_name": "Column A"}, + {"field": "col_b", "header_name": "Column B"}, + {"field": "sum", "header_name": "Sum", "value_getter": "params.data.col_a + params.data.col_b"}, + rxe.ag_grid.column_def(field="diff", header_name="Difference", value_getter="params.data.col_b - params.data.col_a"), +] + +def ag_grid_value_getter(): + return rxe.ag_grid( + id="ag_grid_value_getter", + row_data=df.to_dict("records"), + column_defs=column_defs, + width="100%", + ) +``` + +## Value Formatter + +`value_formatter` is a property of the column definition that allows you to define a function that will be called to format the value of the cell. This function will receive the value of the cell as a parameter and should return the formatted value to be displayed on the cell. + +If you have a column `price` and you want to display the price with a currency symbol, you can define the `value_formatter` of `price` as follows: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import pandas as pd + +df = pd.DataFrame({"product_name":["Product A", "Product B", "Product C", "Product D", "Product E"], "price": [100, 200, 300, 400, 500]}) +column_defs = [ + {"field": "product_name", "header_name": "Product Name"}, + {"field": "price", "header_name": "Price ($)", "value_formatter": "'$' + params.value"}, + rxe.ag_grid.column_def(col_id="price_eur", header_name="Price (€)", value_formatter="params.data.price + ' €'"), +] + +def ag_grid_value_formatter(): + return rxe.ag_grid( + id="ag_grid_value_formatter", + row_data=df.to_dict("records"), + column_defs=column_defs, + width="100%", + ) +``` + + diff --git a/docs/enterprise/built-with-reflex.md b/docs/enterprise/built-with-reflex.md new file mode 100644 index 00000000000..8fb0f60b950 --- /dev/null +++ b/docs/enterprise/built-with-reflex.md @@ -0,0 +1,17 @@ +# Built with Reflex Badge + +The "Built with Reflex" badge appears in the bottom right corner of apps using reflex-enterprise components. + +## Removing the Badge + +To remove the badge, you need to be on the Enterprise tier. + +## Configuration + +```python +import reflex_enterprise as rxe + +config = rxe.Config( + show_built_with_reflex=False, # Requires paid tier +) +``` \ No newline at end of file diff --git a/docs/enterprise/components.md b/docs/enterprise/components.md new file mode 100644 index 00000000000..3e82efae420 --- /dev/null +++ b/docs/enterprise/components.md @@ -0,0 +1,119 @@ +--- +title: Enterprise Components +--- + +```python exec +import reflex as rx +from pcweb.pages.docs import enterprise +from pcweb.templates.docpage import h1_comp, text_comp_2 +from pcweb.components.icons import get_icon + +def enterprise_component_grid(): + sections = [ + { + "title": "AG Grid", + "description": "Advanced data grid with sorting, filtering, editing, and pagination", + "link": enterprise.ag_grid.index.path, + "components": [ + ("Overview", enterprise.ag_grid.index.path), + ("Column Definitions", enterprise.ag_grid.column_defs.path), + ("Aligned Grids", enterprise.ag_grid.aligned_grids.path), + ("Model Wrapper", enterprise.ag_grid.model_wrapper.path), + ("Pivot Mode", enterprise.ag_grid.pivot_mode.path), + ("Theme", enterprise.ag_grid.theme.path), + ("Value Transformers", enterprise.ag_grid.value_transformers.path), + ] + }, + { + "title": "AG Chart", + "description": "Interactive charts and data visualization", + "link": enterprise.ag_chart.path, + "components": [ + ("Overview", enterprise.ag_chart.path), + ] + }, + { + "title": "Interactive Components", + "description": "Drag-and-drop and mapping functionality", + "link": enterprise.drag_and_drop.path, + "components": [ + ("Drag and Drop", enterprise.drag_and_drop.path), + ("Mapping", enterprise.map.index.path), + ] + }, + { + "title": "Mantine", + "description": "Rich UI components from Mantine library", + "link": enterprise.mantine.index.path, + "components": [ + ("Overview", enterprise.mantine.index.path), + ("Autocomplete", enterprise.mantine.autocomplete.path), + ("Collapse", enterprise.mantine.collapse.path), + ("Combobox", enterprise.mantine.combobox.path), + ("JSON Input", enterprise.mantine.json_input.path), + ("Loading Overlay", enterprise.mantine.loading_overlay.path), + ("Multi Select", enterprise.mantine.multi_select.path), + ("Number Formatter", enterprise.mantine.number_formatter.path), + ("Pill", enterprise.mantine.pill.path), + ("Ring Progress", enterprise.mantine.ring_progress.path), + ("Semi Circle Progress", enterprise.mantine.semi_circle_progress.path), + ("Spoiler", enterprise.mantine.spoiler.path), + ("Tags Input", enterprise.mantine.tags_input.path), + ("Timeline", enterprise.mantine.timeline.path), + ("Tree", enterprise.mantine.tree.path), + ] + } + ] + + cards = [] + for section in sections: + cards.append( + rx.box( + rx.link( + rx.el.h1( + section["title"], + class_name="font-large text-slate-12", + ), + get_icon("new_tab", class_name="text-slate-11 [&>svg]:size-4"), + href=section["link"], + underline="none", + class_name="px-4 py-2 bg-slate-1 hover:bg-slate-3 transition-bg flex flex-row justify-between items-center !text-slate-12", + ), + rx.text( + section["description"], + class_name="px-4 py-2 font-small text-slate-9 border-t border-slate-5", + ), + rx.box( + *[ + rx.link( + comp[0], + href=comp[1], + class_name="font-small text-slate-11 hover:!text-violet-9 transition-color w-fit", + ) + for comp in section["components"] + ], + class_name="flex flex-col gap-2.5 px-4 py-2 border-t border-slate-5", + ), + class_name="flex flex-col border border-slate-5 rounded-xl bg-slate-2 shadow-large overflow-hidden", + ) + ) + + return rx.box( + *cards, + class_name="grid grid-cols-1 lg:grid-cols-2 gap-6", + ) + +component_grid = enterprise_component_grid() +``` + +```python eval +h1_comp(text="Enterprise Components") +``` + +```python eval +text_comp_2(text="Advanced UI components and features to enhance your Reflex applications. Available for free with the 'Built with Reflex' badge, or without the badge with an enterprise license.") +``` + +```python eval +component_grid +``` \ No newline at end of file diff --git a/docs/enterprise/drag-and-drop.md b/docs/enterprise/drag-and-drop.md new file mode 100644 index 00000000000..2bf8913d38b --- /dev/null +++ b/docs/enterprise/drag-and-drop.md @@ -0,0 +1,582 @@ +--- +title: Drag and Drop +--- + +```python exec +import reflex as rx +import reflex_enterprise as rxe +from pcweb.pages.docs import enterprise +``` + +# Drag and Drop + +Reflex Enterprise provides comprehensive drag and drop functionality for creating interactive UI elements using the `rxe.dnd` module. Built on top of react-dnd, it offers both high-level components for common use cases and low-level hooks for advanced scenarios. + +```md alert warning +# Important: Always decorate functions defining `rxe.dnd.draggable` components with `@rx.memo` to avoid compilation errors. +``` + +## Basic Usage + +### Simple Drag and Drop + +Here's a basic example showing how to create a draggable item and drop target: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class BasicDndState(rx.State): + drop_count: int = 0 + + def increment_drop_count(self): + self.drop_count += 1 + + +@rx.memo +def draggable_card(): + return rxe.dnd.draggable( + rx.card( + rx.text("Drag me!", weight="bold"), + rx.text("I can be moved around"), + bg="blue.500", + color="white", + p=4, + cursor="grab", + width="200px", + height="100px" + ), + type="BasicCard", + item={"message": "Hello from draggable!"}, + ) + +def basic_drag_drop(): + return rx.vstack( + rx.text(f"Items dropped: {BasicDndState.drop_count}"), + rx.hstack( + draggable_card(), + rxe.dnd.drop_target( + rx.box( + "Drop Zone", + bg="gray.100", + border="2px dashed gray", + min_height="150px", + min_width="200px", + display="flex", + align_items="center", + justify_content="center", + font_weight="bold" + ), + accept=["BasicCard"], + on_drop=BasicDndState.increment_drop_count, + ), + spacing="4", + align="start" + ), + spacing="4" + ) +``` + +### Multi-Position Drag and Drop + +Create a draggable item that can be moved between multiple drop targets: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class MultiPositionState(rx.State): + card_position: int = 0 + + def set_card_position(self, position: int): + self.card_position = position + + +@rx.memo +def movable_card(): + return rxe.dnd.draggable( + rx.card( + rx.text("Movable Card", weight="bold"), + rx.text("Position: " + MultiPositionState.card_position.to_string()), + bg="purple.500", + color="white", + p=4, + width="180px", + height="120px" + ), + type="MovableCard", + border="2px solid purple", + ) + +def drop_zone(position: int): + params = rxe.dnd.DropTarget.collected_params + return rxe.dnd.drop_target( + rx.cond( + MultiPositionState.card_position == position, + movable_card(), + rx.box( + f"Drop Zone {position}", + color="gray.600", + font_weight="bold" + ) + ), + width="200px", + height="200px", + border="2px solid red", + border_color=rx.cond(params.is_over, "green.500", "red.500"), + bg=rx.cond(params.is_over, "green.100", "blue.100"), + accept=["MovableCard"], + on_drop=lambda _: MultiPositionState.set_card_position(position), + display="flex", + align_items="center", + justify_content="center" + ) + +def multi_position_example(): + return rx.vstack( + rx.text("Drag the card between positions", weight="bold"), + rx.grid( + drop_zone(0), + drop_zone(1), + drop_zone(2), + drop_zone(3), + columns="2", + spacing="4" + ), + spacing="4" + ) +``` + +## Advanced Features + +### State Tracking with Collected Parameters + +Access drag and drop state information using collected parameters: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class StateTrackingState(rx.State): + drag_info: str = "No drag activity" + + def set_drag_info(self, value: str): + self.drag_info = value + +@rx.memo +def tracked_draggable(): + drag_params = rxe.dnd.Draggable.collected_params + return rxe.dnd.draggable( + rx.card( + rx.text("Tracked Draggable"), + rx.text(rx.cond(drag_params.is_dragging, "Dragging...", "Ready to drag")), + bg=rx.cond(drag_params.is_dragging, "orange.500", "blue.500"), + color="white", + p=4, + opacity=rx.cond(drag_params.is_dragging, 0.5, 1.0) + ), + type="TrackedItem", + on_end=StateTrackingState.set_drag_info("Drag ended") + ) + +def tracked_drop_target(): + drop_params = rxe.dnd.DropTarget.collected_params + return rxe.dnd.drop_target( + rx.box( + rx.text("Smart Drop Zone"), + rx.text(rx.cond(drop_params.is_over, "Ready to receive!", "Waiting...")), + bg=rx.cond(drop_params.is_over, "green.200", "gray.100"), + border=rx.cond(drop_params.is_over, "2px solid green", "2px dashed gray"), + p=4, + min_height="150px", + display="flex", + flex_direction="column", + align_items="center", + justify_content="center" + ), + accept=["TrackedItem"], + on_drop=StateTrackingState.set_drag_info("Item successfully dropped!"), + on_hover=StateTrackingState.set_drag_info("Item hovering over drop zone") + ) + +def state_tracking_example(): + return rx.vstack( + rx.text(f"Status: {StateTrackingState.drag_info}"), + rx.hstack( + tracked_draggable(), + tracked_drop_target(), + spacing="4" + ), + spacing="4" + ) +``` + +### Dynamic Lists with Drag and Drop + +Create dynamic draggable lists using `rx.foreach`: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class ListItem(rx.Base): + id: str + text: str + list_id: str + +class DynamicListState(rx.State): + list_a: list[ListItem] = [ + ListItem(id="1", text="Item 1", list_id="A"), + ListItem(id="2", text="Item 2", list_id="A"), + ListItem(id="3", text="Item 3", list_id="A"), + ] + list_b: list[ListItem] = [ + ListItem(id="4", text="Item 4", list_id="B"), + ListItem(id="5", text="Item 5", list_id="B"), + ] + + def move_item(self, item_data: dict, target_list: str): + item_id = item_data.get("id") + source_list = item_data.get("list_id") + + if not item_id or not source_list: + return + + # Find the item in the source list + source_items = getattr(self, f"list_{source_list.lower()}") + item_to_move = None + for item in source_items: + if item.id == item_id: + item_to_move = item + break + + if not item_to_move: + return + + # Remove from source list only + if source_list == "A": + self.list_a = [item for item in self.list_a if item.id != item_id] + else: + self.list_b = [item for item in self.list_b if item.id != item_id] + + # Create new item for target list + new_item = ListItem( + id=item_id, + text=item_to_move.text, + list_id=target_list + ) + + # Add to target list + if target_list == "A": + self.list_a.append(new_item) + else: + self.list_b.append(new_item) + +@rx.memo +def draggable_list_item(item: ListItem): + return rxe.dnd.draggable( + rx.card( + rx.text(item.text, weight="bold"), + rx.text(f"From List {item.list_id}", size="2", color="gray.600"), + p=3, + cursor="grab", + _hover={"bg": "gray.50"} + ), + type="ListItem", + item={"id": item.id, "text": item.text, "list_id": item.list_id}, + ) + +def droppable_list(title: str, items: list[ListItem], list_id: str): + return rxe.dnd.drop_target( + rx.vstack( + rx.text(title, weight="bold", size="5"), + rx.vstack( + rx.foreach(items, lambda item, index: draggable_list_item(item=item)), + spacing="2", + min_height="200px", + width="100%" + ), + bg="gray.50", + p=4, + border_radius="md", + border="2px dashed gray", + width="250px" + ), + accept=["ListItem"], + on_drop=lambda item: DynamicListState.move_item(item, list_id) + ) + +def dynamic_list_example(): + return rx.hstack( + droppable_list("List A", DynamicListState.list_a, "A"), + droppable_list("List B", DynamicListState.list_b, "B"), + spacing="6", + align="start" + ) +``` + +## Core Components + +### Draggable + +The `rxe.dnd.draggable` component makes any element draggable: + +**Key Properties:** +- `type`: String identifier for drag type matching +- `item`: Data object passed to drop handlers +- `on_end`: Called when drag operation ends + +### Drop Target + +The `rxe.dnd.drop_target` component creates areas that accept draggable items: + +**Key Properties:** +- `accept`: List of drag types this target accepts +- `on_drop`: Called when item is dropped +- `on_hover`: Called when item hovers over target + +### Collected Parameters + +Access real-time drag/drop state: + +**Draggable Parameters (`rxe.dnd.Draggable.collected_params`):** +- `is_dragging`: Boolean indicating if item is being dragged + +**Drop Target Parameters (`rxe.dnd.DropTarget.collected_params`):** +- `is_over`: Boolean indicating if draggable is hovering +- `can_drop`: Boolean indicating if drop is allowed + +# API Reference + +### rxe.dnd.draggable + +Creates a draggable component that can be moved around the interface. + +**Parameters:** + +- **`type`** (str, required): String identifier that must match the `accept` list of drop targets +- **`item`** (dict | Callable): Data object passed to drop handlers. Can be a static dictionary or a function that receives a `DragSourceMonitor` and returns data +- **`preview_options`** (dict): Configuration for the drag preview appearance +- **`options`** (dict): Additional drag source options like `dropEffect` +- **`on_end`** (EventHandler): Event handler called when drag operation completes +- **`can_drag`** (Callable): Function that determines if the item can be dragged +- **`is_dragging`** (Callable): Function to override the default dragging state detection +- **`collect`** (Callable): Function to collect custom properties from the drag monitor + +### rxe.dnd.drop_target + +Creates a drop target that can receive draggable items. + +**Parameters:** + +- **`accept`** (str | list[str], required): Drag type(s) this target accepts +- **`options`** (dict): Additional drop target configuration options +- **`on_drop`** (EventHandler): Event handler called when an item is dropped, receives the `item` data +- **`on_hover`** (EventHandler): Event handler called when an item hovers over the target +- **`can_drop`** (Callable): Function that determines if a specific item can be dropped +- **`collect`** (Callable): Function to collect custom properties from the drop monitor + +## Monitor Classes + +### DragSourceMonitor + +Provides information about the drag operation state: + +- **`is_dragging()`**: Returns `True` if this item is currently being dragged +- **`can_drag()`**: Returns `True` if the item can be dragged +- **`get_item()`**: Returns the item data being dragged +- **`get_item_type()`**: Returns the drag type string +- **`get_drop_result()`**: Returns the drop result (available in `on_end`) +- **`did_drop()`**: Returns `True` if the item was successfully dropped + +### DropTargetMonitor + +Provides information about the drop target state: + +- **`is_over()`**: Returns `True` if a draggable item is hovering over this target +- **`can_drop()`**: Returns `True` if the hovering item can be dropped +- **`get_item()`**: Returns the item data of the hovering draggable +- **`get_item_type()`**: Returns the drag type of the hovering item + +## Default Collected Parameters + +### Draggable.collected_params + +```python +{ + "is_dragging": bool, # True when this item is being dragged + "can_drag": bool # True when this item can be dragged +} +``` + +### DropTarget.collected_params + +```python +{ + "is_over": bool, # True when a draggable is hovering + "can_drop": bool, # True when the hovering item can be dropped + "item": dict | None # Data from the hovering draggable item +} +``` + +## Advanced Usage Examples + +### Data Passing with Item Parameter + +The `item` parameter allows you to pass data from draggable components to drop handlers: + +```python demo exec toggle +import reflex as rx +import reflex_enterprise as rxe + +class SimpleState(rx.State): + message: str = "No items dropped yet" + + def set_message_from_item(self, item: dict): + self.message = f"Dropped: {item['name']}" + +def simple_draggable(): + return rxe.dnd.draggable( + rx.box( + "Drag me!", + p=4, + bg="blue.100", + border="1px solid blue", + cursor="grab" + ), + type="simple", + item={"name": "test_item", "value": 42} + ) + +def simple_drop_target(): + return rxe.dnd.drop_target( + rx.box( + rx.text(SimpleState.message), + p=4, + bg="gray.100", + border="2px dashed gray", + min_height="100px" + ), + accept=["simple"], + on_drop=SimpleState.set_message_from_item + ) + +def item_data_example(): + return rx.vstack( + simple_draggable(), + simple_drop_target(), + spacing="4" + ) +``` + +### Custom Collect Functions + +The `collect` parameter allows you to access drag and drop state information in real-time: + +```python demo exec toggle +import reflex as rx +import reflex_enterprise as rxe + +class CollectState(rx.State): + drag_info: str = "No drag activity" + drop_info: str = "No drop activity" + + def handle_drop(self, item: dict): + self.drop_info = f"Dropped: {item.get('name', 'Unknown')}" + return rx.toast(f"Successfully dropped {item.get('name', 'item')}") + + + +def collect_draggable(): + params = rxe.dnd.Draggable.collected_params + return rxe.dnd.draggable( + rx.box( + rx.vstack( + rx.text("Drag me!", weight="bold"), + rx.text(f"Dragging: {params.is_dragging}", size="2"), + rx.text(f"Can drag: {params.can_drag}", size="2"), + spacing="1" + ), + p=4, + bg=rx.cond(params.is_dragging, "blue.200", "blue.100"), + border="1px solid blue", + cursor=rx.cond(params.is_dragging, "grabbing", "grab"), + opacity=rx.cond(params.is_dragging, 0.7, 1.0) + ), + type="collect_item", + item={"id": "collect_test", "name": "Test Item"} + ) + +def collect_drop_target(): + params = rxe.dnd.DropTarget.collected_params + return rxe.dnd.drop_target( + rx.box( + rx.vstack( + rx.text("Drop Zone", weight="bold"), + rx.text(f"Is over: {params.is_over}", size="2"), + rx.text(f"Can drop: {params.can_drop}", size="2"), + rx.cond( + params.item, + rx.text(f"Hovering item: {params.item.get('name', 'Unknown')}", size="2"), + rx.text("No item hovering", size="2") + ), + spacing="1" + ), + p=4, + bg=rx.cond( + params.is_over & params.can_drop, + "green.200", + rx.cond(params.is_over, "yellow.200", "gray.100") + ), + border=rx.cond( + params.is_over & params.can_drop, + "2px solid green", + rx.cond(params.is_over, "2px solid yellow", "2px dashed gray") + ), + min_height="120px" + ), + accept=["collect_item"], + on_drop=CollectState.handle_drop, + ) + +def custom_collect_example(): + return rx.vstack( + rx.text("Real-time Monitor State", weight="bold", size="4"), + rx.hstack( + collect_draggable(), + collect_drop_target(), + spacing="6", + align="start" + ), + rx.text(CollectState.drop_info, size="2", color="gray.600"), + spacing="4" + ) +``` + +## Provider + +Drag and drop functionality requires the `rxe.dnd.provider` component to wrap your app. The provider is automatically added when using `draggable` or `drop_target` components. + +For manual control: + +```python +def app(): + return rxe.dnd.provider( + # Your app content + your_app_content(), + backend="HTML5" # or "Touch" for mobile + ) +``` + +## Best Practices + +1. **Always use `@rx.memo`** on functions containing draggable components +2. **Use descriptive type names** for better debugging +3. **Handle edge cases** in drop handlers (invalid items, etc.) +4. **Provide visual feedback** using collected parameters +5. **Test on mobile devices** with touch backend +6. **Keep item data lightweight** for better performance + +--- + +[← Back to main documentation]({enterprise.overview.path}) diff --git a/docs/enterprise/mantine/autocomplete.md b/docs/enterprise/mantine/autocomplete.md new file mode 100644 index 00000000000..6a9f826c3d7 --- /dev/null +++ b/docs/enterprise/mantine/autocomplete.md @@ -0,0 +1,22 @@ +--- +title: Autocomplete +--- + +# Autocomplete component + +`rxe.mantine.autocomplete` is a component for providing suggestions as the user types. It is useful for enhancing user experience by offering relevant options based on input. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def autocomplete_example(): + return rx.vstack( + rxe.mantine.autocomplete( + data=["Apple", "Banana", "Cherry", "Date", "Elderberry"], + placeholder="Type a fruit", + label="Fruit Autocomplete", + description="Select a fruit from the list", + ), + ) +``` diff --git a/docs/enterprise/mantine/collapse.md b/docs/enterprise/mantine/collapse.md new file mode 100644 index 00000000000..7ed25026163 --- /dev/null +++ b/docs/enterprise/mantine/collapse.md @@ -0,0 +1,36 @@ +--- +title: Collapse +--- + +# Collapse component + +`rxe.mantine.collapse` is a component that allows you to create collapsible sections in your application. It is useful for hiding or showing content based on user interaction, such as clicking a button or a link. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class CollapseState(rx.State): + is_open: bool = False + + @rx.event + def toggle_collapse(self): + self.is_open = not self.is_open + +def collapse_example(): + return rx.vstack( + rxe.mantine.collapse( + rx.text( + "This is a collapsible section. Click the button to toggle the collapse.", + font_size="lg", + ), + in_=CollapseState.is_open, + label="Collapsible Section", + description="Click the button to toggle the collapse.", + ), + rx.button( + "Toggle Collapse", + on_click=lambda: CollapseState.toggle_collapse, + ), + ) +``` diff --git a/docs/enterprise/mantine/combobox.md b/docs/enterprise/mantine/combobox.md new file mode 100644 index 00000000000..d212a9f1c1e --- /dev/null +++ b/docs/enterprise/mantine/combobox.md @@ -0,0 +1,36 @@ +--- +title: Combobox +--- + +```python exec +import reflex as rx +import reflex_enterprise as rxe +from pcweb.pages.docs import enterprise +``` + +# Combobox + +`rxe.mantine.combobox` is a wrapping of the mantine component [Combobox](https://mantine.dev/core/combobox/). It is a simple component that can be used to display a list of options, and allows the user to select one or more options from the list. It can be used in various contexts, such as in a form or as a standalone component. + +```python +import reflex as rx +import reflex_enterprise as rxe + +def combobox_page(): + """Combobox demo.""" + return rxe.mantine.combobox( + rxe.mantine.combobox.target( + rx.input(type="button"), + ), + rxe.mantine.combobox.dropdown( + rxe.mantine.combobox.options( + rxe.mantine.combobox.option("Option 1"), + rxe.mantine.combobox.option("Option 2"), + rxe.mantine.combobox.option("Option 3"), + ), + ), + label="Combobox", + placeholder="Select a value", + ) +``` + diff --git a/docs/enterprise/mantine/index.md b/docs/enterprise/mantine/index.md new file mode 100644 index 00000000000..58d48822d84 --- /dev/null +++ b/docs/enterprise/mantine/index.md @@ -0,0 +1,26 @@ +--- +title: Mantine +order: 4 +--- + +# Mantine + +Mantine is a React component library that provides a set of high-quality components and hooks for building modern web applications. It is designed to be flexible, customizable, and easy to use, making it a popular choice among developers. + +Some of those components have been integrated into Reflex Enterprise, allowing you to use them in your Reflex applications. The following components are available: +- JsonInput +- Autocomplete +- ComboBox +- Multiselect +- Pill +- PillsInput +- TagsInput +- Tree +- RingProgress +- SemiCircleProgress +- LoadingOverlay +- NumberFormatter +- Spoiler +- Timeline +- Collapse + diff --git a/docs/enterprise/mantine/json-input.md b/docs/enterprise/mantine/json-input.md new file mode 100644 index 00000000000..5737732370a --- /dev/null +++ b/docs/enterprise/mantine/json-input.md @@ -0,0 +1,35 @@ +--- +title: JSON Input +--- + +# JSON Input + +`rxe.mantine.json_input` is a component that allows you to input JSON data in a user-friendly way. It provides validation and formatting features to ensure that the JSON data is correctly structured. + +## Example + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class JsonInputState(rx.State): + json_data: str = "" + + def set_json_data(self, value: str): + self.json_data = value + + +def json_input_example(): + return rxe.mantine.json_input( + id="json-input", + value=JsonInputState.json_data, + placeholder="Enter JSON data", + label="JSON Input", + description="Please enter valid JSON data.", + required=True, + size="md", + format_on_blur=True, + on_change=JsonInputState.set_json_data, + width="300px", + ) +``` diff --git a/docs/enterprise/mantine/loading-overlay.md b/docs/enterprise/mantine/loading-overlay.md new file mode 100644 index 00000000000..8aebe7cdd3f --- /dev/null +++ b/docs/enterprise/mantine/loading-overlay.md @@ -0,0 +1,32 @@ +--- +title: Loading Overlay +--- + +# Loading Overlay component +`rxe.mantine.loading_overlay` is a component that displays a loading overlay on top of its children. It is useful for indicating that a process is ongoing and prevents user interaction with the underlying content. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class LoadingOverlayState(rx.State): + loading: bool = False + + @rx.event + def toggle_loading(self): + self.loading = not self.loading + +def loading_overlay_example(): + return rx.container( + rxe.mantine.loading_overlay( + rx.text( + "Loading Overlay Example", + height="200px", + width="100px", + ), + overlay_props={"radius": "sm", "blur": 2}, + visible=LoadingOverlayState.loading, + z_index=1000, + ), + ),rx.button("Toggle Loading", on_click=LoadingOverlayState.toggle_loading), +``` diff --git a/docs/enterprise/mantine/multi-select.md b/docs/enterprise/mantine/multi-select.md new file mode 100644 index 00000000000..5137409be71 --- /dev/null +++ b/docs/enterprise/mantine/multi-select.md @@ -0,0 +1,31 @@ +--- +title: MultiSelect +--- + +# MultiSelect component + +`rxe.mantine.multi_select` is a component for selecting multiple options from a list. It allows users to choose one or more items, making it suitable for scenarios where multiple selections are required. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class MultiSelectState(rx.State): + selected_fruits: list = [] + + def set_selected_fruits(self, value: list): + self.selected_fruits = value + + +def multi_select_example(): + return rx.vstack( + rxe.mantine.multi_select( + label="Select fruits", + placeholder="Pick all that you like", + data=["Apple", "Banana", "Cherry", "Date", "Elderberry"], + value=MultiSelectState.selected_fruits, + on_change=MultiSelectState.set_selected_fruits, + ) + ) + +``` diff --git a/docs/enterprise/mantine/number-formatter.md b/docs/enterprise/mantine/number-formatter.md new file mode 100644 index 00000000000..d2833125d75 --- /dev/null +++ b/docs/enterprise/mantine/number-formatter.md @@ -0,0 +1,27 @@ +--- +title: Number Formatter +--- + +# Number Formatter component +`rxe.mantine.number_formatter` is a component for formatting numbers in a user-friendly way. It allows you to specify the format, precision, and other options for displaying numbers. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def number_formatter_example(): + return rx.vstack( + rxe.mantine.number_formatter( + value=100, + prefix="$", + ), + rxe.mantine.number_formatter( + value=100, + suffix="€", + ), + rxe.mantine.number_formatter( + value=1234567.89, + thousand_separator=True, + ), + ) +``` diff --git a/docs/enterprise/mantine/pill.md b/docs/enterprise/mantine/pill.md new file mode 100644 index 00000000000..e401685eb02 --- /dev/null +++ b/docs/enterprise/mantine/pill.md @@ -0,0 +1,94 @@ +--- +title: Pill +--- + +```python exec +import reflex as rx +import reflex_enterprise as rxe +from pcweb.pages.docs import enterprise +``` + +# Pill + +`rxe.mantine.pill` is a wrapping of the mantine component [Pill](https://mantine.dev/core/pill/). It is a simple component that can be used to display a small piece of information, such as a tag or a label. It can be used in various contexts, such as in a list of tags or labels, or as a standalone component. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def pill_page(): + """Pill demo.""" + return rxe.mantine.pill( + "Pill", + color="blue", + size="md", + variant="outline", + radius="xl", + with_remove_button=True, + on_remove=lambda: rx.toast("Pill on_remove triggered"), + ) +``` + +## Pill Group +`rxe.mantine.pill.group` allows grouping multiple `rxe.mantine.pill` components together, with a predefined layout. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def pill_group_page(): + """Pill demo.""" + return rxe.mantine.pill.group( + rxe.mantine.pill("Pill 1"), + rxe.mantine.pill("Pill 2"), + ) +``` + + +# PillsInput + +`rxe.mantine.pills_input` is a wrapping of the mantine component [PillsInput](https://mantine.dev/core/pills-input/). It is an utility component that can be used to display a list of tags or labels. It can be used in various contexts, such as in a form or as a standalone component. +By itself it does not include any logic, it only renders given children. + +```md alert info +# For a fully functional out-of-the-box component, consider using [`rxe.mantine.tags_input`](/docs/enterprise/mantine/tags-input/) instead. +``` + +## Example + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class PillInputState(rx.State): + """State for the PillsInput demo.""" + + tags: set[str] = {"Foo", "Bar"} + + @rx.event + def add_tag(self, tag: str): + """Add a tag to the list of tags.""" + self.tags.add(tag) + + @rx.event + def remove_tag(self, tag: str): + """Remove a tag from the list of tags.""" + self.tags.remove(tag) + +def pills_input_page(): + """PillsInput demo.""" + return rxe.mantine.pills_input( + rxe.mantine.pill.group( + rx.foreach( + PillInputState.tags, lambda tag: rxe.mantine.pill(tag, with_remove_button=True, on_remove=PillInputState.remove_tag(tag)) + ), + rxe.mantine.pills_input.field( + placeholder="Enter tags", + # on_blur=PillInputState.add_tag, + ), + ), + label="PillsInput", + id="pills-input", + value=["tag1", "tag2"], + ) +``` diff --git a/docs/enterprise/mantine/ring-progress.md b/docs/enterprise/mantine/ring-progress.md new file mode 100644 index 00000000000..9612531d25f --- /dev/null +++ b/docs/enterprise/mantine/ring-progress.md @@ -0,0 +1,31 @@ +--- +title: Ring Progress +--- + +# Ring Progress component + +`rxe.mantine.ring_progress` is a component for displaying progress in a circular format. It is useful for visualizing completion percentages or other metrics in a compact and visually appealing way. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import random + +class RingProgressState(rx.State): + value: int = 50 + + @rx.event + def random(self): + self.value = random.randint(0, 100) + +def ring_progress_example(): + return rx.vstack( + rxe.mantine.ring_progress( + size=100, + sections=[ + {"value": RingProgressState.value, "color": "blue"}, + ], + ), + rx.button("Randomize", on_click=RingProgressState.random), + ) +``` diff --git a/docs/enterprise/mantine/semi-circle-progress.md b/docs/enterprise/mantine/semi-circle-progress.md new file mode 100644 index 00000000000..3f7f1f5df03 --- /dev/null +++ b/docs/enterprise/mantine/semi-circle-progress.md @@ -0,0 +1,28 @@ +--- +title: Semi Circle Progress +--- + +# Semi Circle Progress component +`rxe.mantine.semi_circle_progress` is a component for displaying progress in a semi-circular format. It is useful for visualizing completion percentages or other metrics in a compact and visually appealing way. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +import random + +class SemiCircleProgressState(rx.State): + value: int = 50 + + @rx.event + def random(self): + self.value = random.randint(0, 100) + +def semi_circle_progress_example(): + return rx.vstack( + rxe.mantine.semi_circle_progress( + size=100, + value=SemiCircleProgressState.value, + ), + rx.button("Randomize", on_click=SemiCircleProgressState.random), + ) +``` diff --git a/docs/enterprise/mantine/spoiler.md b/docs/enterprise/mantine/spoiler.md new file mode 100644 index 00000000000..09a1b0dc1a8 --- /dev/null +++ b/docs/enterprise/mantine/spoiler.md @@ -0,0 +1,22 @@ +--- +title: Spoiler +--- + +# Spoiler component + +`rxe.mantine.spoiler` is a component that allows you to hide or reveal content. It is useful for displaying additional information or details that may not be immediately relevant to the user. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def spoiler_example(): + return rx.vstack( + rxe.mantine.spoiler( + "This is a spoiler zone where lorem ipsum text dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit...", + max_height=50, + show_label="Show more", + hide_label="Show less", + ), + ) +``` diff --git a/docs/enterprise/mantine/tags-input.md b/docs/enterprise/mantine/tags-input.md new file mode 100644 index 00000000000..5b24a1a63db --- /dev/null +++ b/docs/enterprise/mantine/tags-input.md @@ -0,0 +1,55 @@ +--- +title: TagsInput +--- + +# TagsInput + +`rxe.mantine.tags_input` is a wrapping of the mantine component [TagsInput](https://mantine.dev/core/tags-input/). It is an utility component that can be used to display a list of tags or labels. It can be used in various contexts, such as in a form or as a standalone component. + +```md alert info +# You can use the props mentioned in the Mantine documentation, but they need to be passed in snake_case. +``` + +## Basic Example + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def tags_input_simple_page(): + """TagsInput demo.""" + return rxe.mantine.tags_input( + placeholder="Enter tags", + label="Press Enter to ad a tag", + ) +``` + +## State Example + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class TagsInputState(rx.State): + """State for the TagsInput component.""" + + tags: list[str] = ["Tag1", "Tag2"] + + @rx.event + def update_tags(self, tags: list[str]): + """Add a tag to the list of tags.""" + self.tags = tags + +def tags_input_page(): + """TagsInput demo.""" + return rxe.mantine.tags_input( + value=TagsInputState.tags, + on_change=TagsInputState.update_tags, + placeholder="Enter tags", + label="TagsInput", + description="This is a TagsInput component", + error="", + size="md", + radius="xl", + ) +``` diff --git a/docs/enterprise/mantine/timeline.md b/docs/enterprise/mantine/timeline.md new file mode 100644 index 00000000000..32843a35b6e --- /dev/null +++ b/docs/enterprise/mantine/timeline.md @@ -0,0 +1,34 @@ +--- +title: Timeline +--- + +# Timeline component +`rxe.mantine.timeline` is a component for displaying a sequence of events or milestones in a linear format. It is useful for visualizing progress, history, or any sequential information. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def timeline_example(): + return rx.vstack( + rxe.mantine.timeline( + rxe.mantine.timeline.item( + title="Step 1", + bullet="•", + ), + rxe.mantine.timeline.item( + title="Step 2", + bullet="•", + ), + rxe.mantine.timeline.item( + title="Step 3", + bullet="•", + ), + active=1, + bullet_size=24, + line_width=2, + color="blue", + + ) + ) +``` diff --git a/docs/enterprise/mantine/tree.md b/docs/enterprise/mantine/tree.md new file mode 100644 index 00000000000..a3ce63eddb2 --- /dev/null +++ b/docs/enterprise/mantine/tree.md @@ -0,0 +1,31 @@ +--- +title: Tree +--- + +# Tree component + +`rxe.mantine.tree` is a component for displaying hierarchical data in a tree structure. It allows users to expand and collapse nodes, making it easy to navigate through large datasets. + +```md alert warning +# Due to some technical limitations(pydantic), the tree component only supports 5 levels of depths for the `data` props. +``` + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def tree_example(): + # return rx.text("Placeholder for tree example") + return rxe.mantine.tree( + data=[ + { + "value": "0", + "label": "Root", + "children": [ + {"value": "0-1", "label": "Child 1"}, + {"value": "0-2", "label": "Child 2"}, + ], + } + ], + ) +``` diff --git a/docs/enterprise/map/index.md b/docs/enterprise/map/index.md new file mode 100644 index 00000000000..20af518807e --- /dev/null +++ b/docs/enterprise/map/index.md @@ -0,0 +1,565 @@ +--- +title: Interactive Maps +--- + +# Interactive Maps + +```python exec +import reflex as rx +import reflex_enterprise as rxe +from pcweb.pages.docs import enterprise +``` + +The map components in Reflex Enterprise provide interactive mapping capabilities built on top of **Leaflet**, one of the most popular open-source JavaScript mapping libraries. These components enable you to create rich, interactive maps with markers, layers, controls, and event handling. + +```md alert info +# All map components are built using Leaflet and react-leaflet, providing a familiar and powerful mapping experience. +For advanced Leaflet features, refer to the [Leaflet documentation](https://leafletjs.com/reference.html). +``` + +🌍 **[View Live Demo](https://map.reflex.run)** - See the map components in action with interactive examples. + +## Installation & Setup + +Map components are included with `reflex-enterprise`. No additional installation is required. + +## Basic Usage + +Here's a simple example of creating a map with a marker: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class MapState(rx.State): + center: rxe.map.LatLng = rxe.map.latlng(lat=51.505, lng=-0.09) + zoom: float = 13.0 + +def basic_map(): + return rxe.map( + rxe.map.tile_layer( + url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + attribution='© OpenStreetMap contributors' + ), + rxe.map.marker( + rxe.map.popup("Hello from London!"), + position=MapState.center, + ), + id="basic-map", + center=MapState.center, + zoom=MapState.zoom, + height="400px", + width="100%", + ) +``` + +## Core Components + +### Map Container + +The `rxe.map()` component is the primary container that holds all other map elements: + +```python +rxe.map( + # Child components (markers, layers, controls) + id="my-map", + center=rxe.map.latlng(lat=51.505, lng=-0.09), + zoom=13, + height="400px", + width="100%" +) +``` + +**Key Properties:** +- `center`: Initial map center coordinates +- `zoom`: Initial zoom level (0-18+ depending on tile provider) +- `bounds`: Alternative to center/zoom, fits map to bounds +- `height`/`width`: Map container dimensions + +### Tile Layers + +Tile layers provide the base map imagery. The most common is OpenStreetMap: + +```python +rxe.map.tile_layer( + url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + attribution='© OpenStreetMap contributors' +) +``` + + +### Markers + +Add point markers to specific locations: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def markers_example(): + return rxe.map( + rxe.map.tile_layer( + url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + attribution='© OpenStreetMap contributors' + ), + rxe.map.marker( + rxe.map.popup( + rx.vstack( + rx.text("Big Ben", weight="bold"), + rx.text("Famous clock tower in London"), + spacing="2" + ) + ), + position=rxe.map.latlng(lat=51.4994, lng=-0.1245), + ), + rxe.map.marker( + rxe.map.popup("London Eye"), + position=rxe.map.latlng(lat=51.5033, lng=-0.1196), + ), + id="markers-map", + center=rxe.map.latlng(lat=51.501, lng=-0.122), + zoom=14, + height="400px", + width="100%", + ) +``` + +### Vector Layers + +Draw shapes and areas on the map: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def vectors_example(): + return rxe.map( + rxe.map.tile_layer( + url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + attribution='© OpenStreetMap contributors' + ), + # Circle (radius in meters) + rxe.map.circle( + center=rxe.map.latlng(lat=51.505, lng=-0.09), + radius=500, + path_options=rxe.map.path_options( + color="#ff0000", + fill_color="#ff3333", + fill_opacity=0.3, + weight=2 + ) + ), + # Polygon + rxe.map.polygon( + positions=[ + rxe.map.latlng(lat=51.515, lng=-0.08), + rxe.map.latlng(lat=51.515, lng=-0.07), + rxe.map.latlng(lat=51.520, lng=-0.07), + rxe.map.latlng(lat=51.520, lng=-0.08), + ], + path_options=rxe.map.path_options( + color="#0000ff", + fill_color="#3333ff", + fill_opacity=0.3 + ) + ), + # Polyline + rxe.map.polyline( + positions=[ + rxe.map.latlng(lat=51.500, lng=-0.095), + rxe.map.latlng(lat=51.510, lng=-0.085), + rxe.map.latlng(lat=51.515, lng=-0.095), + ], + path_options=rxe.map.path_options( + color="#00ff00", + weight=4 + ) + ), + id="vectors-map", + center=rxe.map.latlng(lat=51.510, lng=-0.08), + zoom=13, + height="400px", + width="100%", + ) +``` + +## Interactive Features + +### Event Handling + +Maps support comprehensive event handling for user interactions: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class InteractiveMapState(rx.State): + last_click: str = "No clicks yet" + current_zoom: float = 13.0 + + def handle_map_click(self, event): + lat = event.get("latlng", {}).get("lat", 0) + lng = event.get("latlng", {}).get("lng", 0) + self.last_click = f"Clicked at: {lat:.4f}, {lng:.4f}" + + def handle_zoom_change(self, event): + self.current_zoom = float(event.get("target", {}).get("_zoom", 13.0)) + +def interactive_example(): + return rx.vstack( + rx.text(f"Last click: {InteractiveMapState.last_click}"), + rx.text(f"Current zoom: {InteractiveMapState.current_zoom}"), + rxe.map( + rxe.map.tile_layer( + url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + attribution='© OpenStreetMap contributors' + ), + id="interactive-map", + center=rxe.map.latlng(lat=51.505, lng=-0.09), + zoom=InteractiveMapState.current_zoom, + height="350px", + width="100%", + on_click=InteractiveMapState.handle_map_click, + on_zoom=InteractiveMapState.handle_zoom_change, + ), + spacing="3" + ) +``` + +### Map Controls + +Add UI controls for enhanced user interaction: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +def controls_example(): + return rxe.map( + rxe.map.tile_layer( + url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + attribution='© OpenStreetMap contributors' + ), + rxe.map.zoom_control(position="topright"), + rxe.map.scale_control(position="bottomleft"), + rxe.map.attribution_control(position="bottomright"), + id="controls-map", + center=rxe.map.latlng(lat=51.505, lng=-0.09), + zoom=13, + height="400px", + width="100%", + ) +``` + +## Helper Functions + +### Coordinate Creation + +```python +# Create latitude/longitude coordinates +center = rxe.map.latlng(lat=51.505, lng=-0.09, nround=4) + +# Create bounds +bounds = rxe.map.latlng_bounds( + corner1_lat=51.49, corner1_lng=-0.11, + corner2_lat=51.52, corner2_lng=-0.07 +) +``` + +## Map API + +The Map API provides programmatic control over your maps, allowing you to manipulate the map programmatically from your Reflex state methods. + +### Getting the API Reference + +To access the Map API, you need to get a reference to your map using its ID: + +```python +map_api = rxe.map.api("my-map-id") +``` + +### Interactive Demo + +Here are some commonly used API methods demonstrated in action: + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +map_api = rxe.map.api("api-demo-map") + +class MapAPIState(rx.State): + current_location: str = "London" + + def fly_to_london(self): + yield map_api.fly_to([51.505, -0.09], 13) + self.current_location = "London" + + def fly_to_paris(self): + yield map_api.fly_to([48.8566, 2.3522], 13) + self.current_location = "Paris" + +def map_api_example(): + return rx.vstack( + rx.text(f"Current location: {MapAPIState.current_location}"), + rx.hstack( + rx.button("Fly to London", on_click=MapAPIState.fly_to_london), + rx.button("Fly to Paris", on_click=MapAPIState.fly_to_paris), + rx.button("Zoom Out", on_click=map_api.set_zoom(8)), + rx.button("Log Center", on_click=map_api.get_center(callback=rx.console_log)), + spacing="2" + ), + rxe.map( + rxe.map.tile_layer( + url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + attribution='© OpenStreetMap contributors' + ), + id="api-demo-map", + center=rxe.map.latlng(lat=51.505, lng=-0.09), + zoom=13.0, + height="350px", + width="100%", + ), + spacing="3" + ) +``` + +### Common API Methods + +**View Control:** +- `fly_to(latlng, zoom, options)` - Smooth animated movement to location +- `set_view(latlng, zoom, options)` - Instant movement to location +- `set_zoom(zoom)` - Change zoom level +- `zoom_in()` / `zoom_out()` - Zoom by one level +- `fit_bounds(bounds, options)` - Fit map to specific bounds + +**Location Services:** +- `locate(options)` - Get user's current location +- `stop_locate()` - Stop location tracking + +**Information Retrieval:** +- `get_center(callback)` - Get current map center +- `get_zoom(callback)` - Get current zoom level +- `get_bounds(callback)` - Get current map bounds +- `get_size(callback)` - Get map container size + +**Layer Management:** +- `add_layer(layer)` - Add a layer to the map +- `remove_layer(layer)` - Remove a layer from the map +- `has_layer(layer)` - Check if layer exists on map + +### Full Leaflet API Access + +```md alert info +# The Map API provides access to the complete Leaflet map API. Any method available on a Leaflet map instance can be called through the MapAPI instance. +Function names are automatically converted from snake_case (Python) to camelCase (JavaScript). +``` + +This means you can use any method from the [Leaflet Map documentation](https://leafletjs.com/reference.html#map). For example: + +**Python (snake_case) → JavaScript (camelCase):** +- `map_api.pan_to(latlng)` → `map.panTo(latlng)` +- `map_api.set_max_bounds(bounds)` → `map.setMaxBounds(bounds)` +- `map_api.get_pixel_bounds()` → `map.getPixelBounds()` +- `map_api.container_point_to_lat_lng(point)` → `map.containerPointToLatLng(point)` + +### Advanced Example + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe + +class AdvancedMapState(rx.State): + constraints_applied: bool = False + location_tracking: bool = False + location_status: str = "Location tracking disabled" + + def set_location_status(self, status: str): + self.location_status = status + + def setup_map_constraints(self): + map_api = rxe.map.api("advanced-demo-map") + + # Set maximum bounds (restrict panning to London area) + max_bounds = rxe.map.latlng_bounds( + corner1_lat=51.4, corner1_lng=-0.3, + corner2_lat=51.6, corner2_lng=0.1 + ) + yield map_api.set_max_bounds(max_bounds) + + # Set min/max zoom levels + yield map_api.set_min_zoom(10) + yield map_api.set_max_zoom(16) + + # Disable scroll wheel zoom + yield map_api.scroll_wheel_zoom(False) + + self.constraints_applied = True + + def remove_constraints(self): + map_api = rxe.map.api("advanced-demo-map") + + # Remove bounds restriction + yield map_api.set_max_bounds(None) + + # Reset zoom limits + yield map_api.set_min_zoom(1) + yield map_api.set_max_zoom(18) + + # Re-enable scroll wheel zoom + yield map_api.scroll_wheel_zoom(True) + + self.constraints_applied = False + + def toggle_location_tracking(self): + map_api = rxe.map.api("advanced-demo-map") + + if self.location_tracking == False: + # Start location tracking + locate_options = rxe.map.locate_options( + set_view=True, + max_zoom=16, + timeout=10000, + enable_high_accuracy=True, + watch=False # Single location request + ) + yield map_api.locate(locate_options) + self.location_tracking = True + self.location_status = "Requesting location..." + else: + # Stop location tracking + yield map_api.stop_locate() + self.location_tracking = False + self.location_status = "Location tracking disabled" + +def advanced_example(): + return rx.vstack( + rx.hstack( + rx.button( + rx.cond(AdvancedMapState.constraints_applied, "Remove Constraints", "Apply Constraints"), + on_click=rx.cond(AdvancedMapState.constraints_applied, AdvancedMapState.remove_constraints, AdvancedMapState.setup_map_constraints), + color_scheme="blue" + ), + rx.button( + rx.cond(AdvancedMapState.location_tracking, "Disable Location", "Enable Location"), + on_click=AdvancedMapState.toggle_location_tracking, + color_scheme="green" + ), + spacing="3" + ), + rx.text(f"Status: {AdvancedMapState.location_status}"), + rx.text( + rx.cond( + AdvancedMapState.constraints_applied, + "Constraints: Applied (restricted to London area, zoom 10-16, no scroll wheel)", + "Constraints: None" + ) + ), + rxe.map( + rxe.map.tile_layer( + url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + attribution='© OpenStreetMap contributors' + ), + rxe.map.marker( + rxe.map.popup("Try panning and zooming when constraints are applied!"), + position=rxe.map.latlng(lat=51.505, lng=-0.09), + ), + id="advanced-demo-map", + center=rxe.map.latlng(lat=51.505, lng=-0.09), + zoom=12.0, + height="400px", + width="100%", + on_locationfound=lambda e: AdvancedMapState.set_location_status("Location found!"), + on_locationerror=lambda e: AdvancedMapState.set_location_status("Location error - permission denied or unavailable"), + ), + spacing="3" + ) +``` + +### Callback Handling + +Many API methods that retrieve information require callbacks to handle the results: + +```python +class CallbackMapState(rx.State): + map_info: str = "" + + def handle_center_result(self, result): + lat = result.get("lat", 0) + lng = result.get("lng", 0) + self.map_info = f"Center: {lat:.4f}, {lng:.4f}" + + def handle_bounds_result(self, result): + # result will contain bounds information + self.map_info = f"Bounds: {result}" + + def get_map_info(self): + map_api = rxe.map.api("info-map") + yield map_api.get_center(self.handle_center_result) + # or + yield map_api.get_bounds(self.handle_bounds_result) +``` + +## Available Events + +The map components support a comprehensive set of events: + +**Map Events:** +- `on_click`, `on_dblclick` - Mouse click events +- `on_zoom`, `on_zoom_start`, `on_zoom_end` - Zoom events +- `on_move`, `on_move_start`, `on_move_end` - Pan events +- `on_resize` - Map container resize +- `on_load`, `on_unload` - Map lifecycle + +**Location Events:** +- `on_locationfound`, `on_locationerror` - Geolocation + +**Layer Events:** +- `on_layeradd`, `on_layerremove` - Layer management + +**Popup Events:** +- `on_popupopen`, `on_popupclose` - Popup lifecycle +- `on_tooltipopen`, `on_tooltipclose` - Tooltip lifecycle + +## Common Patterns + +### Dynamic Markers + +```python +class DynamicMapState(rx.State): + markers: list[dict] = [ + {"lat": 51.505, "lng": -0.09, "title": "London"}, + {"lat": 48.8566, "lng": 2.3522, "title": "Paris"}, + {"lat": 52.5200, "lng": 13.4050, "title": "Berlin"}, + ] + +def dynamic_markers(): + return rxe.map( + rxe.map.tile_layer(url="..."), + rx.foreach( + DynamicMapState.markers, + lambda marker: rxe.map.marker( + rxe.map.popup(marker["title"]), + position=rxe.map.latlng( + lat=marker["lat"], + lng=marker["lng"] + ) + ) + ), + # ... map configuration + ) +``` + + +## Best Practices + +1. **Always include attribution** for tile providers +2. **Set reasonable zoom levels** (typically 1-18) +3. **Use bounds for multiple markers** instead of arbitrary center/zoom +4. **Handle loading states** for dynamic map content +5. **Optimize marker rendering** for large datasets using clustering +6. **Test on mobile devices** for touch interactions + +--- + +[← Back to main documentation]({enterprise.overview.path}) diff --git a/docs/enterprise/overview.md b/docs/enterprise/overview.md new file mode 100644 index 00000000000..fb58a235ea5 --- /dev/null +++ b/docs/enterprise/overview.md @@ -0,0 +1,295 @@ +--- +title: Reflex Enterprise +--- + +# Reflex Enterprise + +```python exec +from pcweb.pages.docs import enterprise +import reflex as rx +try: + import reflex_enterprise as rxe + from reflex_enterprise.components.ag_grid.resource import RendererParams +except ImportError: + rxe = None + RendererParams = None +``` + +Reflex Enterprise is a package containing paid features built on top of Reflex. + +```md alert info +# Despite being an enterprise package, free users can use the components from this package. A badge "Built with Reflex" will be shown in the bottom right corner of the app. +For more information on the badge, visit [Built with Reflex]({enterprise.built_with_reflex.path}). +``` + +## Installation + +`reflex-enterprise` must be installed alongside `reflex` to access the enterprise features. + +You can install it from pypi with the following command: + +```bash +pip install reflex-enterprise +``` + +## Features + +```python exec +# Create master data organized by category +categories_data = [ + { + "category": "Configuration", + "description": "Core enterprise features for deployment and branding", + "count": 2, + "components": [ + { + "feature": "show_built_with_reflex", + "description": "Toggle the 'Built with Reflex' badge in your app", + "cloud_tier": "Enterprise", + "self_hosted_tier": "Enterprise", + "link": "/docs/enterprise/built-with-reflex", + }, + { + "feature": "use_single_port", + "description": "Enable single-port deployment by proxying backend to frontend", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/single-port-proxy", + }, + ] + }, + { + "category": "AGGrid and AGChart", + "description": "Advanced data visualization and grid components", + "count": 2, + "components": [ + { + "feature": "AgGrid", + "description": "Advanced data grid with enterprise features (sorting, filtering, grouping)", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/ag-grid", + }, + { + "feature": "AGCharts", + "description": "Interactive charts and data visualization components", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/ag-chart", + }, + ] + }, + { + "category": "Interactive Components", + "description": "Interactive UI features including drag-and-drop and mapping", + "count": 2, + "components": [ + { + "feature": "Drag and Drop", + "description": "Drag and drop functionality for interactive UI elements", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/drag-and-drop", + }, + { + "feature": "Mapping", + "description": "Interactive maps with markers, layers, and controls", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/map", + }, + ] + }, + { + "category": "Mantine", + "description": "Rich UI components from Mantine library", + "count": 15, + "components": [ + { + "feature": "Autocomplete", + "description": "Auto-completing text input with dropdown suggestions", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/autocomplete", + }, + { + "feature": "Combobox", + "description": "Searchable dropdown with custom options and filtering", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/combobox", + }, + { + "feature": "Multi Select", + "description": "Multi-selection dropdown with tags and search", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/multi-select", + }, + { + "feature": "Tags Input", + "description": "Input field for creating and managing tags", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/tags-input", + }, + { + "feature": "Json Input", + "description": "JSON editor with syntax highlighting and validation", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/json-input", + }, + { + "feature": "Pill", + "description": "Small rounded elements for tags, badges, and labels", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/pill", + }, + { + "feature": "Tree", + "description": "Hierarchical tree view with expandable nodes", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/tree", + }, + { + "feature": "Timeline", + "description": "Timeline component for displaying chronological events", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/timeline", + }, + { + "feature": "Number Formatter", + "description": "Format and display numbers with customizable formatting", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/number-formatter", + }, + { + "feature": "Ring Progress", + "description": "Circular progress indicator with customizable styling", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/ring-progress", + }, + { + "feature": "Semi Circle Progress", + "description": "Semi-circular progress indicator for dashboards", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/semi-circle-progress", + }, + { + "feature": "Loading Overlay", + "description": "Loading overlay with spinner for async operations", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/loading-overlay", + }, + { + "feature": "Spoiler", + "description": "Collapsible content container with show/hide toggle", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/spoiler", + }, + { + "feature": "Collapse", + "description": "Animated collapsible content with smooth transitions", + "cloud_tier": "Free", + "self_hosted_tier": "Free", + "link": "/docs/enterprise/mantine/collapse", + }, + ] + }, +] + +if rxe is not None: + @rxe.arrow_func + def custom_link_renderer(params: RendererParams): + """Custom cell renderer for links in AG Grid.""" + return rx.link( + params.value, + href=params.data.link, + ) + + grid = rxe.ag_grid( + column_defs=[ + { + "field": "category", + "header_name": "Category", + "cell_renderer": "agGroupCellRenderer", + "suppress_menu": True, + "width": 220, + }, + { + "field": "description", + "width": 500, + }, + { + "field": "count", + "header_name": "Components", + "width": 150, + }, + ], + row_data=categories_data, + master_detail=True, + detail_cell_renderer_params={ + "detail_grid_options": { + "column_defs": [ + { + "field": "feature", + "header_name": "Component/Feature", + "cell_renderer": custom_link_renderer, + "width": 250 + }, + {"field": "description", "header_name": "Description", "width": 350}, + {"field": "cloud_tier", "header_name": "Cloud Tier", "width": 120}, + {"field": "self_hosted_tier", "header_name": "Self-hosted Tier", "width": 140}, + ], + "suppress_context_menu": True, + "row_height": 35, + }, + "get_detail_row_data": lambda params: rx.vars.function.FunctionStringVar( + "params.successCallback" + ).call(params.data.components), + }, + id="features-grid", + width="100%", + detail_row_height=200, + detail_row_auto_height=True, + height="400px", + loading=False, +) + grid.api.set_grid_option("suppressContextMenu", True) +else: + grid = rx.text("Reflex Enterprise not available. Install with: pip install reflex-enterprise") +``` + +```python eval +grid +``` + +## Usage of reflex_enterprise. + +Using `rxe.App` as your `app` is required to use any of the components provided by the enterprise package, as well as config options provided by `rxe.Config`. + +### In the main file + +Instead of the usual `rx.App()` to create your app, use the following: +```python +import reflex_enterprise as rxe +app = rxe.App() +``` + +### In rxconfig.py +```python +import reflex_enterprise as rxe +config = rxe.Config( + app_name="MyApp", + ... # you can pass all rx.Config arguments as well as the one specific to rxe.Config +) +``` \ No newline at end of file diff --git a/docs/enterprise/react_flow/basic_flow.md b/docs/enterprise/react_flow/basic_flow.md new file mode 100644 index 00000000000..b057fdc918a --- /dev/null +++ b/docs/enterprise/react_flow/basic_flow.md @@ -0,0 +1,96 @@ +# Basic Flow Example + +This example demonstrates a simple flow diagram with three nodes and two edges, showing how nodes can be connected and how edges can be animated. + +### Nodes + +- Input Node – starting point +- Default Node – standard content node +- Output Node – endpoint of the flow + +### Edges + +- Input → Default (animated) +- Default → Output + +### Interactivity + +- Nodes can be moved +- Edges update dynamically +- Users can drag from handles to create new edges +- Zoom, pan, and mini-map controls are available + +### Visual Layout + +- Flow fits viewport automatically +- Background grid for orientation +- Light and dark color modes supported + +### Example Flow + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +from reflex_enterprise.components.flow.types import Node, Edge + +# Common style for all nodes +node_style = { + "backgroundColor": "#ffcc00", + "color": "#000000", + "padding": "10px", + "borderRadius": "5px" +} + +class FlowState(rx.State): + nodes: list[Node] = [ + { + "id": "1", + "type": "input", + "position": {"x": 100, "y": 100}, + "data": {"label": "Input Node"}, + "style": node_style + }, + { + "id": "2", + "type": "default", + "position": {"x": 300, "y": 200}, + "data": {"label": "Default Node"}, + "style": node_style + }, + { + "id": "3", + "type": "output", + "position": {"x": 500, "y": 100}, + "data": {"label": "Output Node"}, + "style": node_style + }, + ] + + edges: list[Edge] = [ + {"id": "e1-2", "source": "1", "target": "2", "animated": True}, + {"id": "e2-3", "source": "2", "target": "3"}, + ] + + +def flow_example(): + return rx.box( + rxe.flow( + # Core flow components + rxe.flow.controls(), + rxe.flow.background(), + rxe.flow.mini_map(), + + # Flow configuration + default_nodes=FlowState.nodes, + default_edges=FlowState.edges, + nodes=FlowState.nodes, + edges=FlowState.edges, + + # Visual settings + fit_view=True, + attribution_position="bottom-right", + ), + height="100vh", + width="100vw", + ) +``` diff --git a/docs/enterprise/react_flow/components.md b/docs/enterprise/react_flow/components.md new file mode 100644 index 00000000000..04ba0536166 --- /dev/null +++ b/docs/enterprise/react_flow/components.md @@ -0,0 +1,92 @@ +# Flow Components + +This page documents the main components provided by the `rxe.flow` library. + +## rxe.flow.provider + +The `FlowProvider` component is a context provider that makes it possible to access a flow’s internal state outside of the `` component. Many of the hooks we provide rely on this component to work. + +**Props:** + +- `initial_nodes`: `Sequence[Node]` - These nodes are used to initialize the flow. They are not dynamic. +- `default_edges`: `Sequence[Edge]` - These edges are used to initialize the flow. They are not dynamic. +- `initial_width`: `float` - The initial width is necessary to be able to use fitView on the server. +- `initial_height`: `float` - The initial height is necessary to be able to use fitView on the server. +- `fit_view`: `bool` - When true, the flow will be zoomed and panned to fit all the nodes initially provided. +- `initial_fit_view_options`: `FitViewOptions` - You can provide an object of options to customize the initial fitView behavior. +- `initial_min_zoom`: `float` - Initial minimum zoom level. +- `initial_max_zoom`: `float` - Initial maximum zoom level. +- `node_origin`: `NodeOrigin` - The origin of the node to use when placing it in the flow or looking up its x and y position. +- `node_extent`: `CoordinateExtent` - The boundary a node can be moved in. + +## rxe.flow + +The `Flow` component is the main component that renders the flow. It takes in nodes and edges, and provides event handlers for user interactions. + +**Props:** + +- `nodes`: `Sequence[Node]` - An array of nodes to render in a controlled flow. +- `edges`: `Sequence[Edge]` - An array of edges to render in a controlled flow. +- `default_nodes`: `Sequence[Node]` - The initial nodes to render in an uncontrolled flow. +- `default_edges`: `Sequence[Edge]` - The initial edges to render in an uncontrolled flow. +- `node_types`: `Mapping[str, Any]` - Custom node types. +- `edge_types`: `Mapping[str, Any]` - Custom edge types. +- `on_nodes_change`: Event handler for when nodes change. +- `on_edges_change`: Event handler for when edges change. +- `on_connect`: Event handler for when a connection is made. +- `fit_view`: `bool` - When true, the flow will be zoomed and panned to fit all the nodes initially provided. +- `fit_view_options`: `FitViewOptions` - Options for `fit_view`. +- `style`: The style of the component. + +## rxe.flow.background + +The `Background` component renders a background for the flow. It can be a pattern of lines, dots, or a cross. + +**Props:** + +- `color`: `str` - Color of the pattern. +- `bg_color`: `str` - Color of the background. +- `variant`: `Literal["lines", "dots", "cross"]` - The type of pattern to render. +- `gap`: `float | tuple[float, float]` - The gap between patterns. +- `size`: `float` - The size of the pattern elements. + +**Example:** + +```python +rxe.flow.background(variant="dots", gap=20, size=1) +``` + +## rxe.flow.controls + +The `Controls` component renders a panel with buttons to zoom in, zoom out, fit the view, and lock the viewport. + +**Props:** + +- `show_zoom`: `bool` - Whether to show the zoom buttons. +- `show_fit_view`: `bool` - Whether to show the fit view button. +- `show_interactive`: `bool` - Whether to show the lock button. +- `position`: `PanelPosition` - The position of the controls on the pane. + +**Example:** + +```python +rxe.flow.controls() +``` + +## rxe.flow.mini_map + +The `MiniMap` component renders a small overview of your flow. + +**Props:** + +- `node_color`: `str | Any` - Color of nodes on minimap. +- `node_stroke_color`: `str | Any` - Stroke color of nodes on minimap. +- `pannable`: `bool` - Determines whether you can pan the viewport by dragging inside the minimap. +- `zoomable`: `bool` - Determines whether you can zoom the viewport by scrolling inside the minimap. +- `position`: `PanelPosition` - Position of minimap on pane. + +**Example:** + +```python +rxe.flow.mini_map(pannable=True, zoomable=True) +``` diff --git a/docs/enterprise/react_flow/edges.md b/docs/enterprise/react_flow/edges.md new file mode 100644 index 00000000000..25142f70aca --- /dev/null +++ b/docs/enterprise/react_flow/edges.md @@ -0,0 +1,217 @@ +# Edges + +Edges connect nodes together in a flow. This page explains how to define, customize, and interact with edges in Reflex Flow. + +## The Edge Type + +An edge is represented as a Python dictionary with the following fields: + +- `id` (`str`) – Unique identifier for the edge. +- `source` (`str`) – ID of the source node. +- `target` (`str`) – ID of the target node. +- `type` (`str`) – Edge type defined in `edge_types`. +- `sourceHandle` (`str | None`) – Optional source handle ID. +- `targetHandle` (`str | None`) – Optional target handle ID. +- `animated` (`bool`) – Whether the edge should animate. +- `hidden` (`bool`) – Whether the edge is hidden. +- `deletable` (`bool`) – Whether the edge can be removed. +- `selectable` (`bool`) – Whether the edge can be selected. +- `data` (`dict`) – Arbitrary metadata. +- `label` (`Any`) – Label rendered along the edge. +- `style` (`dict`) – Custom styles. +- `className` (`str`) – CSS class for the edge. + +## Basic Edge Types + +Reflex Flow comes with several built-in edge types: + +### Default Edge Types + +```python +edges: list[Edge] = [ + {"id": "e1", "source": "1", "target": "2", "type": "default"}, + {"id": "e2", "source": "2", "target": "3", "type": "straight"}, + {"id": "e3", "source": "3", "target": "4", "type": "step"}, + {"id": "e4", "source": "4", "target": "5", "type": "smoothstep"}, + {"id": "e5", "source": "5", "target": "6", "type": "bezier"}, +] +``` + +- **default** – Standard curved edge +- **straight** – Direct line between nodes +- **step** – Right-angled path with steps +- **smoothstep** – Smooth right-angled path +- **bezier** – Curved bezier path + +## Edge Styling + +### Basic Styling + +Add visual styling to edges using the `style` property: + +```python +edges: list[Edge] = [ + { + "id": "styled-edge", + "source": "1", + "target": "2", + "style": { + "stroke": "#ff6b6b", + "strokeWidth": 3, + } + } +] +``` + +### Animated Edges + +Make edges animate with flowing dots: + +```python +edges: list[Edge] = [ + { + "id": "animated-edge", + "source": "1", + "target": "2", + "animated": True, + "style": {"stroke": "#4dabf7"} + } +] +``` + +### Edge Labels + +Add text labels to edges: + +```python +edges: list[Edge] = [ + { + "id": "labeled-edge", + "source": "1", + "target": "2", + "label": "Connection", + "style": {"stroke": "#51cf66"} + } +] +``` + +# Custom Edges + +React Flow in Reflex also allows you to define custom edge types. This is useful when you want edges to carry extra functionality (like buttons, labels, or dynamic styling) beyond the default straight or bezier connectors. + +```python demo exec +import reflex as rx +import reflex_enterprise as rxe +from reflex_enterprise.components.flow.types import ( + ConnectionInProgress, + Edge, + NoConnection, + Node, + Position, +) + +class SimpleEdgeDemoState(rx.State): + nodes: list[Node] = [ + {"id": "1", "position": {"x": 0, "y": 0}, "data": {"label": "Node A"}, "style": {"color": "#000000",}}, + {"id": "2", "position": {"x": 250, "y": 150}, "data": {"label": "Node B"}, "style": {"color": "#000000",}}, + ] + edges: list[Edge] = [ + {"id": "e1-2", "source": "1", "target": "2", "type": "button"} + ] + + @rx.event + def set_nodes(self, nodes: list[Node]): + self.nodes = nodes + + @rx.event + def set_edges(self, edges: list[Edge]): + self.edges = edges + + @rx.event + def handle_connect_end( + self, + connection_status: NoConnection | ConnectionInProgress, + ): + if not connection_status["isValid"]: + new_edge = { + "id": f"{connection_status['fromNode']['id']}-{connection_status['toNode']['id']}", + "source": connection_status["fromNode"]["id"], + "target": connection_status["toNode"]["id"], + "type": "button", + } + self.edges.append(new_edge) + + + +@rx.memo +def button_edge( + id: rx.Var[str], + sourceX: rx.Var[float], + sourceY: rx.Var[float], + targetX: rx.Var[float], + targetY: rx.Var[float], + sourcePosition: rx.Var[Position], + targetPosition: rx.Var[Position], + markerEnd: rx.Var[str], +): + bezier_path = rxe.components.flow.util.get_bezier_path( + source_x=sourceX, + source_y=sourceY, + target_x=targetX, + target_y=targetY, + source_position=sourcePosition, + target_position=targetPosition, + ) + + mid_x = bezier_path.label_x + mid_y = bezier_path.label_y + + return rx.fragment( + rxe.flow.base_edge(path=bezier_path.path, markerEnd=markerEnd), + rxe.flow.edge_label_renderer( + rx.el.div( + rx.el.button( + "×", + class_name=("w-[30px] h-[30px] border-2 border-gray-200 bg-gray-200 text-black rounded-full text-[12px] pt-0 cursor-pointer hover:bg-gray-400 hover:text-white"), + on_click=rx.run_script( + rxe.flow.api.set_edges( + rx.vars.FunctionStringVar.create( + "Array.prototype.filter.call" + ).call( + rxe.flow.api.get_edges(), + rx.Var(f"((edge) => edge.id !== {id})"), + ), + ) + ), + style={ + "position": "absolute", + "left": f"{mid_x}px", + "top": f"{mid_y}px", + "transform": "translate(-50%, -50%)", + "pointerEvents": "all", + }, + ), + ) + ), + ) + +def very_simple_custom_edge_example(): + return rx.box( + rxe.flow( + rxe.flow.background(), + default_nodes=SimpleEdgeDemoState.nodes, + default_edges=SimpleEdgeDemoState.edges, + nodes=SimpleEdgeDemoState.nodes, + edges=SimpleEdgeDemoState.edges, + on_connect=lambda connection: SimpleEdgeDemoState.set_edges( + rxe.flow.util.add_edge(connection, SimpleEdgeDemoState.edges) + ), + on_connect_end=lambda status, event: SimpleEdgeDemoState.handle_connect_end(status), + edge_types={"button": button_edge}, + fit_view=True, + ), + height="100vh", + width="100%", + ) + +``` diff --git a/docs/enterprise/react_flow/examples.md b/docs/enterprise/react_flow/examples.md new file mode 100644 index 00000000000..72d4a0e76aa --- /dev/null +++ b/docs/enterprise/react_flow/examples.md @@ -0,0 +1,235 @@ +# Example React Flow Components + +This section showcases examples of interactive flow components built with Reflex and Reflex Enterprise. Learn how to create dynamic nodes, edges, and custom behaviors for building flow diagrams in your React apps. + +## Add Node on Edge Drop + +In this example, we demonstrate how to dynamically add nodes to a flow when a connection is dropped onto the canvas. When the user drops a connection, a new node is created at the drop point, and an edge is added between the source node and the new node. + + +```python demo exec +import reflex as rx + +import reflex_enterprise as rxe +from reflex_enterprise.components.flow.types import ( + ConnectionInProgress, + Edge, + NoConnection, + Node, + XYPosition, +) + +node_style = { + "color": "#000000", +} + +initial_nodes: list[Node] = [ + { + "id": "0", + "type": "input", + "data": {"label": "Node"}, + "position": {"x": 0, "y": 50}, + "style": node_style + }, +] + + +class AddNodesOnEdgeDropState(rx.State): + nodes: rx.Field[list[Node]] = rx.field(default_factory=lambda: initial_nodes) + edges: rx.Field[list[Edge]] = rx.field(default_factory=list) + node_id: int = 1 + + @rx.event + def increment(self): + self.node_id += 1 + + @rx.event + def set_nodes(self, nodes: list[Node]): + self.nodes = nodes + + @rx.event + def set_edges(self, edges: list[Edge]): + self.edges = edges + + @rx.event + def handle_connect_end( + self, + connection_status: NoConnection | ConnectionInProgress, + event: rx.event.PointerEventInfo, + flow_position: XYPosition, + ): + if not connection_status["isValid"]: + node_id = str(self.node_id) + self.increment() + self.nodes.append( + { + "id": node_id, + "position": flow_position, + "data": {"label": f"Node {node_id}"}, + "origin": (0.5, 0.0), + "style": node_style + } + ) + self.edges.append( + { + "id": node_id, + "source": connection_status["fromNode"]["id"], + "target": node_id, + "style": node_style + } + ) + +def add_node_on_edge_drop(): + return rx.box( + rxe.flow.provider( + rxe.flow( + rxe.flow.controls(), + rxe.flow.mini_map(), + rxe.flow.background(), + on_connect=lambda connection: AddNodesOnEdgeDropState.set_edges( + rxe.flow.util.add_edge(connection, AddNodesOnEdgeDropState.edges) + ), + on_connect_end=( + lambda connection_status, event: ( + AddNodesOnEdgeDropState.handle_connect_end( + connection_status, + event, + rxe.flow.api.screen_to_flow_position( + x=event.client_x, + y=event.client_y, + ), + ) + ) + ), + nodes=AddNodesOnEdgeDropState.nodes, + edges=AddNodesOnEdgeDropState.edges, + default_nodes=AddNodesOnEdgeDropState.nodes, + default_edges=AddNodesOnEdgeDropState.edges, + on_nodes_change=lambda changes: AddNodesOnEdgeDropState.set_nodes( + rxe.flow.util.apply_node_changes( + AddNodesOnEdgeDropState.nodes, changes + ) + ), + on_edges_change=lambda changes: AddNodesOnEdgeDropState.set_edges( + rxe.flow.util.apply_edge_changes( + AddNodesOnEdgeDropState.edges, changes + ) + ), + fit_view=True, + fit_view_options={"padding": 2}, + node_origin=(0.5, 0.0), + ) + ), + height="100vh", + width="100vw", + ) + +``` + +## Connection Limit on Custom Node + +This example demonstrates how to create a custom node with a connection limit on its handle. The handle can be configured to allow a specific number of connections, or no connections at all, using the isConnectable property. This is useful when you want to restrict the number of connections a node can have. + +```python demo exec +import reflex as rx + +import reflex_enterprise as rxe +from reflex_enterprise.components.flow.types import Edge, HandleType, Node, Position + +node_style = { + "color": "#000000", +} + +class ConnectionLimitState(rx.State): + nodes: rx.Field[list[Node]] = rx.field( + default_factory=lambda: [ + { + "id": "1", + "type": "input", + "data": {"label": "Node 1"}, + "position": {"x": 0, "y": 25}, + "sourcePosition": "right", + "style": node_style + }, + { + "id": "2", + "type": "custom", + "data": {}, + "position": {"x": 250, "y": 50}, + "style": node_style + }, + { + "id": "3", + "type": "input", + "data": {"label": "Node 2"}, + "position": {"x": 0, "y": 100}, + "sourcePosition": "right", + "style": node_style + }, + ] + ) + edges: rx.Field[list[Edge]] = rx.field(default_factory=list) + + @rx.event + def set_nodes(self, nodes: list[Node]): + self.nodes = nodes + + @rx.event + def set_edges(self, edges: list[Edge]): + self.edges = edges + + +@rx.memo +def custom_handle( + type: rx.Var[HandleType], position: rx.Var[Position], connection_count: rx.Var[int] +): + connections = rxe.flow.api.get_node_connections() + return rxe.flow.handle( + type=type, + position=position, + connection_count=connection_count, + is_connectable=connections.length() < connection_count.guess_type(), + ) + + +@rx.memo +def custom_node(): + return rx.el.div( + custom_handle(type="target", position="left", connection_count=1), + rx.el.div("← Only one edge allowed"), + class_name="border border-1 p-2 rounded-sm", + border_color=rx.color_mode_cond("black", ""), + color="black", + bg="white", + ) + + +def connection_limit(): + return rx.box( + rxe.flow( + rxe.flow.background(), + nodes=ConnectionLimitState.nodes, + edges=ConnectionLimitState.edges, + default_nodes=ConnectionLimitState.nodes, + default_edges=ConnectionLimitState.edges, + on_nodes_change=lambda changes: ConnectionLimitState.set_nodes( + rxe.flow.util.apply_node_changes(ConnectionLimitState.nodes, changes) + ), + on_edges_change=lambda changes: ConnectionLimitState.set_edges( + rxe.flow.util.apply_edge_changes(ConnectionLimitState.edges, changes) + ), + on_connect=lambda connection: ConnectionLimitState.set_edges( + rxe.flow.util.add_edge(connection, ConnectionLimitState.edges) + ), + node_types={ + "custom": rx.vars.function.ArgsFunctionOperation.create( + (), custom_node() + ) + }, + color_mode="light", + fit_view=True, + ), + height="100vh", + width="100vw", + ) +``` diff --git a/docs/enterprise/react_flow/hooks.md b/docs/enterprise/react_flow/hooks.md new file mode 100644 index 00000000000..e9d12d95369 --- /dev/null +++ b/docs/enterprise/react_flow/hooks.md @@ -0,0 +1,33 @@ +# Hooks (API) + +The `rxe.flow.api` module provides hooks to interact with the Flow instance. These hooks are wrappers around the `useReactFlow` hook from React Flow. + +## Node Hooks + +- `get_nodes()`: Returns an array of all nodes in the flow. +- `set_nodes(nodes)`: Sets the nodes in the flow. +- `add_nodes(nodes)`: Adds nodes to the flow. +- `get_node(id)`: Returns a node by its ID. +- `update_node(id, node_update, replace=False)`: Updates a node in the flow. +- `update_node_data(id, data_update, replace=False)`: Updates a node's data in the flow. + +## Edge Hooks + +- `get_edges()`: Returns an array of all edges in the flow. +- `set_edges(edges)`: Sets the edges in the flow. +- `add_edges(edges)`: Adds edges to the flow. +- `get_edge(id)`: Returns an edge by its ID. +- `update_edge(id, edge_update, replace=False)`: Updates an edge in the flow. +- `update_edge_data(id, data_update, replace=False)`: Updates an edge's data in the flow. + +## Viewport Hooks + +- `screen_to_flow_position(x, y, snap_to_grid=False)`: Translates a screen pixel position to a flow position. +- `flow_to_screen_position(x, y)`: Translates a position inside the flow’s canvas to a screen pixel position. + +## Other Hooks + +- `to_object()`: Converts the React Flow state to a JSON object. +- `get_intersecting_nodes(node, partially=True, nodes=None)`: Find all the nodes currently intersecting with a given node or rectangle. +- `get_node_connections(id=None, handle_type=None, handle_id=None)`: This hook returns an array of connections on a specific node, handle type ("source", "target") or handle ID. +- `get_connection()`: Returns the current connection state when there is an active connection interaction. diff --git a/docs/enterprise/react_flow/interactivity.md b/docs/enterprise/react_flow/interactivity.md new file mode 100644 index 00000000000..52691360839 --- /dev/null +++ b/docs/enterprise/react_flow/interactivity.md @@ -0,0 +1,71 @@ +# Adding Interactivity to Your Flow + +This guide shows how to create an interactive flow in Reflex, allowing you to select, drag, and connect nodes and edges. + +## Define the State + +We start by defining the nodes and edges of the flow. The `FlowState` class holds the nodes and edges as state variables and includes event handlers to respond to changes. + +```python +import reflex as rx +import reflex_enterprise as rxe +from reflex_enterprise.components.flow.types import Node, Edge + +class FlowState(rx.State): + nodes: list[Node] = [ + {"id": "1", "type": "input", "position": {"x": 100, "y": 100}, "data": {"label": "Node 1"}}, + {"id": "2", "type": "default", "position": {"x": 300, "y": 200}, "data": {"label": "Node 2"}}, + ] + + edges: list[Edge] = [ + {"id": "e1-2", "source": "1", "target": "2", "label": "Connection", "type": "step"} + ] +``` + +# Add Event Handlers + +Event handlers allow the flow to respond to user interactions such as dragging nodes, updating edges, or creating new connections. + +```python +@rx.event +def set_nodes(self, nodes: list[Node]): + self.nodes = nodes + +@rx.event +def set_edges(self, edges: list[Edge]): + self.edges = edges + +``` + +- set_nodes updates nodes when they are moved or edited. + +- set_edges updates edges when they are modified or deleted. + + +## Render the Interactive Flow + +Finally, we render the flow using **rxe.flow**, passing in the state and event handlers. Additional UI features include zoom/pan controls, a background grid, and a mini-map for navigation. + +```python +def interactive_flow(): + return rx.box( + rxe.flow( + rxe.flow.controls(), + rxe.flow.background(), + rxe.flow.mini_map(), + nodes=FlowState.nodes, + edges=FlowState.edges, + on_nodes_change=lambda node_changes: FlowState.set_nodes( + rxe.flow.util.apply_node_changes(FlowState.nodes, node_changes) + ), + on_edges_change=lambda edge_changes: FlowState.set_edges( + rxe.flow.util.apply_edge_changes(FlowState.edges, edge_changes) + ), + fit_view=True, + + attribution_position="bottom-right", + ), + height="100vh", + width="100vw", + ) +``` diff --git a/docs/enterprise/react_flow/nodes.md b/docs/enterprise/react_flow/nodes.md new file mode 100644 index 00000000000..398afdfdd2e --- /dev/null +++ b/docs/enterprise/react_flow/nodes.md @@ -0,0 +1,277 @@ +# Nodes + +Nodes are the fundamental building blocks of a flow. This page explains how to define and customize nodes in Reflex Flow. + +## The Node Type + +A node is represented as a Python dictionary with the following fields: + +- `id` (`str`) – Unique identifier for the node. +- `position` (`dict`) – Position of the node with `x` and `y` coordinates. +- `data` (`dict`) – Arbitrary data passed to the node component. +- `type` (`str`) – Node type defined in `node_types`. +- `sourcePosition` (`str`) – Controls source handle position ("top", "right", "bottom", "left"). +- `targetPosition` (`str`) – Controls target handle position ("top", "right", "bottom", "left"). +- `hidden` (`bool`) – Whether the node is visible on the canvas. +- `selected` (`bool`) – Whether the node is currently selected. +- `draggable` (`bool`) – Whether the node can be dragged. +- `selectable` (`bool`) – Whether the node can be selected. +- `connectable` (`bool`) – Whether the node can be connected to other nodes. +- `deletable` (`bool`) – Whether the node can be deleted. +- `width` (`float`) – Width of the node. +- `height` (`float`) – Height of the node. +- `parentId` (`str`) – Parent node ID for creating sub-flows. +- `style` (`dict`) – Custom styles for the node. +- `className` (`str`) – CSS class name for the node. + +## Built-in Node Types + +Reflex Flow includes several built-in node types: + +```python +nodes: list[Node] = [ + {"id": "1", "type": "input", "position": {"x": 100, "y": 100}, "data": {"label": "Start"}}, + {"id": "2", "type": "default", "position": {"x": 300, "y": 100}, "data": {"label": "Process"}}, + {"id": "3", "type": "output", "position": {"x": 500, "y": 100}, "data": {"label": "End"}}, +] +``` + +- **input** – Entry point with only source handles +- **default** – Standard node with both source and target handles +- **output** – Exit point with only target handles + +## Basic Node Configuration + +### Node Positioning + +```python +node = { + "id": "positioned-node", + "type": "default", + "position": {"x": 250, "y": 150}, + "data": {"label": "Positioned Node"} +} +``` + +### Node Styling + +```python +styled_node = { + "id": "styled-node", + "type": "default", + "position": {"x": 100, "y": 200}, + "data": {"label": "Custom Style"}, + "style": { + "background": "#ff6b6b", + "color": "white", + "border": "2px solid #ff5252", + "borderRadius": "8px", + "padding": "10px" + } +} +``` + +### Handle Positioning + +```python +node_with_handles = { + "id": "handle-node", + "type": "default", + "position": {"x": 300, "y": 300}, + "data": {"label": "Custom Handles"}, + "sourcePosition": "right", + "targetPosition": "left" +} +``` + +# Custom Nodes + +Creating custom nodes is as easy as building a regular React component and passing it to the `node_types`. Since they’re standard React components, you can display any content and implement any functionality you need. Plus, you’ll have access to a range of props that allow you to extend and customize the default node behavior. + +Below is an example custom node using a `color picker` component. + +```python demo exec + +from typing import Any + +import reflex as rx + +import reflex_enterprise as rxe +from reflex_enterprise.components.flow.types import Connection, Edge, Node + + +class CustomNodeState(rx.State): + bg_color: rx.Field[str] = rx.field(default="#c9f1dd") + nodes: rx.Field[list[Node]] = rx.field( + default_factory=lambda: [ + { + "id": "1", + "type": "input", + "data": {"label": "An input node"}, + "position": {"x": 0, "y": 50}, + "sourcePosition": "right", + "style": {"color": "#000000",} + }, + { + "id": "2", + "type": "selectorNode", + "data": { + "color": "#c9f1dd", + }, + "position": {"x": 300, "y": 50}, + }, + { + "id": "3", + "type": "output", + "data": {"label": "Output A"}, + "position": {"x": 650, "y": 25}, + "targetPosition": "left", + "style": {"color": "#000000",} + }, + { + "id": "4", + "type": "output", + "data": {"label": "Output B"}, + "position": {"x": 650, "y": 100}, + "targetPosition": "left", + "style": {"color": "#000000",} + }, + ] + ) + edges: rx.Field[list[Edge]] = rx.field( + default_factory=lambda: [ + { + "id": "e1-2", + "source": "1", + "target": "2", + "animated": True, + }, + { + "id": "e2a-3", + "source": "2", + "target": "3", + "animated": True, + }, + { + "id": "e2b-4", + "source": "2", + "target": "4", + "animated": True, + }, + ] + ) + + @rx.event + def on_change_color(self, color: str): + self.nodes = [ + node + if node["id"] != "2" or "data" not in node + else {**node, "data": {**node["data"], "color": color}} + for node in self.nodes + ] + self.bg_color = color + + @rx.event + def set_nodes(self, nodes: list[Node]): + self.nodes = nodes + + @rx.event + def set_edges(self, edges: list[Edge]): + self.edges = edges + + +@rx.memo +def color_selector_node(data: rx.Var[dict], isConnectable: rx.Var[bool]): + data = data.to(dict) + return rx.el.div( + rxe.flow.handle( + type="target", + position="left", + is_connectable=isConnectable, + ), + rx.el.div( + "Custom Color Picker Node: ", + rx.el.strong(data["color"]), + ), + rx.el.input( + class_name="nodrag", + type="color", + on_change=CustomNodeState.on_change_color, + default_value=data["color"], + ), + rxe.flow.handle( + type="source", + position="right", + is_connectable=isConnectable, + ), + class_name="border border-1 p-2 rounded-sm", + border_color=rx.color_mode_cond("black", ""), + color="black", + bg="white", + ) + + +def node_stroke_color(node: rx.vars.ObjectVar[Node]): + return rx.match( + node["type"], + ("input", "#0041d0"), + ( + "selectorNode", + CustomNodeState.bg_color, + ), + ("output", "#ff0072"), + None, + ) + + +def node_color(node: rx.vars.ObjectVar[Node]): + return rx.match( + node["type"], + ( + "selectorNode", + CustomNodeState.bg_color, + ), + "#fff", + ) + +def custom_node(): + return rx.box( + rxe.flow( + rxe.flow.background(bg_color=CustomNodeState.bg_color), + rxe.flow.mini_map( + node_stroke_color=rx.vars.function.ArgsFunctionOperation.create( + ("node",), node_stroke_color(rx.Var("node").to(Node)) + ), + node_color=rx.vars.function.ArgsFunctionOperation.create( + ("node",), node_color(rx.Var("node").to(Node)) + ), + ), + rxe.flow.controls(), + default_nodes=CustomNodeState.nodes, + default_edges=CustomNodeState.edges, + nodes=CustomNodeState.nodes, + edges=CustomNodeState.edges, + on_nodes_change=lambda changes: CustomNodeState.set_nodes( + rxe.flow.util.apply_node_changes(CustomNodeState.nodes, changes) + ), + on_edges_change=lambda changes: CustomNodeState.set_edges( + rxe.flow.util.apply_edge_changes(CustomNodeState.edges, changes) + ), + on_connect=lambda connection: CustomNodeState.set_edges( + rxe.flow.util.add_edge( + connection.to(dict).merge({"animated": True}).to(Connection), + CustomNodeState.edges, + ) + ), + node_types={"selectorNode": color_selector_node}, + color_mode="light", + snap_grid=(20, 20), + default_viewport={"x": 0, "y": 0, "zoom": 1.5}, + snap_to_grid=True, + attribution_position="bottom-left", + fit_view=True, + ), + height="100vh", + width="100vw", + ) +``` diff --git a/docs/enterprise/react_flow/overview.md b/docs/enterprise/react_flow/overview.md new file mode 100644 index 00000000000..8c4e183642c --- /dev/null +++ b/docs/enterprise/react_flow/overview.md @@ -0,0 +1,23 @@ +# Overview + +At its core, a flow diagram is an interactive graph composed of nodes connected by edges. To help understand the key concepts, let’s go over the main components of a flow. + +### Nodes + +Nodes are the building blocks of a flow. While there are a few default node types available, the real power comes from customizing them. You can design nodes to include interactive elements, display dynamic data, or support multiple connection points. The framework provides the foundation—you provide the functionality and style. + +### Handles + +Handles are the points on a node where edges attach. They typically appear on the top, bottom, left, or right sides of a node, but can be positioned and styled freely. Nodes can have multiple handles, allowing for complex connection setups. + +### Edges + +Edges are the connections between nodes. Each edge requires a source node and a target node. Edges can be styled and customized, and nodes with multiple handles can support multiple edges. Custom edges can include interactive elements, specialized routing, or unique visual styles beyond simple lines. + +### Connection Line + +When creating a new edge, you can click and drag from one handle to another. While dragging, the placeholder edge is called a connection line. Connection lines behave like edges and can be customized in appearance and behavior. + +### Viewport + +The viewport is the visible area containing the flow. Each node has x- and y-coordinates representing its position. Moving the viewport changes these coordinates, and zooming in or out adjusts the zoom level. The viewport ensures the diagram remains navigable and interactive. diff --git a/docs/enterprise/react_flow/theming.md b/docs/enterprise/react_flow/theming.md new file mode 100644 index 00000000000..3aa8a1d2fa1 --- /dev/null +++ b/docs/enterprise/react_flow/theming.md @@ -0,0 +1,74 @@ +# Theming + +You can customize the appearance of the Flow component using CSS. The Flow component comes with a default theme, which you can override with your own styles. + +## CSS Variables + +The Flow component uses CSS variables for theming. You can override these variables to change the appearance of the flow. Here are some of the most common variables: + +```css +.react-flow { + --xy-background-color: #f7f9fb; + --xy-node-border-default: 1px solid #ededed; + --xy-node-boxshadow-default: 0px 3.54px 4.55px 0px #00000005, + 0px 3.54px 4.55px 0px #0000000d, 0px 0.51px 1.01px 0px #0000001a; + --xy-node-border-radius-default: 8px; + --xy-handle-background-color-default: #ffffff; + --xy-handle-border-color-default: #aaaaaa; + --xy-edge-label-color-default: #505050; +} +``` + +## Custom Stylesheets + +You can add custom stylesheets to your app to override the default styles. To do this, add the `stylesheets` prop to your `rxe.App` or `rx.App` instance: + +```python +app = rxe.App( + stylesheets=[ + "/css/my-custom-styles.css", + ], +) +``` + +Then, create a file `assets/css/my-custom-styles.css` in your project and add your custom styles there. + +## Customizing Node and Edge Styles + +You can also apply custom styles to individual nodes and edges using the `style` and `className` props. + +### Using the style prop + +You can pass a style dictionary to the `style` prop of a node or edge: + +```python +node = { + "id": "1", + "position": {"x": 100, "y": 100}, + "data": {"label": "Node 1"}, + "style": {"backgroundColor": "#ffcc00"}, +} +``` + +### Using the className prop + +You can also pass a class name to the `className` prop and define the styles in your CSS file: + +```python +# In your python code +node = { + "id": "1", + "position": {"x": 100, "y": 100}, + "data": {"label": "Node 1"}, + "className": "my-custom-node", +} +``` + +```css +/* In your CSS file */ +.my-custom-node { + background-color: #ffcc00; + border: 2px solid #ff9900; + border-radius: 10px; +} +``` diff --git a/docs/enterprise/react_flow/utils.md b/docs/enterprise/react_flow/utils.md new file mode 100644 index 00000000000..1f013857428 --- /dev/null +++ b/docs/enterprise/react_flow/utils.md @@ -0,0 +1,29 @@ +# Utility Functions + +The `rxe.flow.util` module provides utility functions for working with Flow components. + +## Path Utilities + +These functions are used to calculate the path for an edge. + +- `get_simple_bezier_path(source_x, source_y, target_x, target_y, source_position="bottom", target_position="top")`: Returns everything you need to render a simple bezier edge between two nodes. +- `get_bezier_path(source_x, source_y, target_x, target_y, source_position="bottom", target_position="top", curvature=0.5)`: Returns everything you need to render a bezier edge between two nodes. +- `get_straight_path(source_x, source_y, target_x, target_y)`: Calculates the straight line path between two points. +- `get_smooth_step_path(source_x, source_y, target_x, target_y, source_position="bottom", target_position="top", border_radius=5, center_x=None, center_y=None, offset=20, step_position=0.5)`: Returns everything you need to render a stepped path between two nodes. + +## Change Handlers + +These functions are used to apply changes to nodes and edges from the `on_nodes_change` and `on_edges_change` event handlers. + +- `apply_node_changes(nodes, changes)`: Applies changes to nodes in the flow. +- `apply_edge_changes(edges, changes)`: Applies changes to edges in the flow. + +## Edge and Connection Utilities + +- `add_edge(params, edges)`: Creates a new edge in the flow. + +## Graph Utilities + +- `get_incomers(node_id, nodes, edges)`: Returns all incoming nodes connected to the given node. +- `get_outgoers(node_id, nodes, edges)`: Returns all outgoing nodes connected to the given node. +- `get_connected_edges(nodes, edges)`: Returns all edges connected to the given nodes. diff --git a/docs/enterprise/single-port-proxy.md b/docs/enterprise/single-port-proxy.md new file mode 100644 index 00000000000..078b9a703ba --- /dev/null +++ b/docs/enterprise/single-port-proxy.md @@ -0,0 +1,15 @@ +# Single Port Proxy + +Enable single-port deployment by proxying the backend to the frontend port. + +## Configuration + +```python +import reflex_enterprise as rxe + +config = rxe.Config( + use_single_port=True, +) +``` + +This allows your application to run on a single port, which is useful for deployment scenarios where you can only expose one port. \ No newline at end of file diff --git a/docs/es/README.md b/docs/es/README.md deleted file mode 100644 index 9f9ab69d628..00000000000 --- a/docs/es/README.md +++ /dev/null @@ -1,247 +0,0 @@ -
-Reflex Logo -
- -### **✨ Aplicaciones web personalizables y eficaces en Python puro. Despliega tu aplicación en segundos. ✨** - -[![PyPI version](https://badge.fury.io/py/reflex.svg)](https://badge.fury.io/py/reflex) -![Versiones](https://img.shields.io/pypi/pyversions/reflex.svg) -[![Documentación](https://img.shields.io/badge/Documentation%20-Introduction%20-%20%23007ec6)](https://reflex.dev/docs/getting-started/introduction) -[![PyPI Downloads](https://static.pepy.tech/badge/reflex)](https://pepy.tech/projects/reflex) -[![Discord](https://img.shields.io/discord/1029853095527727165?color=%237289da&label=Discord)](https://discord.gg/T5WSbC2YtQ) - -
- ---- - -[English](https://github.com/reflex-dev/reflex/blob/main/README.md) | [简体中文](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_cn/README.md) | [繁體中文](https://github.com/reflex-dev/reflex/blob/main/docs/zh/zh_tw/README.md) | [Türkçe](https://github.com/reflex-dev/reflex/blob/main/docs/tr/README.md) | [हिंदी](https://github.com/reflex-dev/reflex/blob/main/docs/in/README.md) | [Português (Brasil)](https://github.com/reflex-dev/reflex/blob/main/docs/pt/pt_br/README.md) | [Italiano](https://github.com/reflex-dev/reflex/blob/main/docs/it/README.md) | [Español](https://github.com/reflex-dev/reflex/blob/main/docs/es/README.md) | [한국어](https://github.com/reflex-dev/reflex/blob/main/docs/kr/README.md) | [日本語](https://github.com/reflex-dev/reflex/blob/main/docs/ja/README.md) | [Deutsch](https://github.com/reflex-dev/reflex/blob/main/docs/de/README.md) | [Persian (پارسی)](https://github.com/reflex-dev/reflex/blob/main/docs/pe/README.md) | [Tiếng Việt](https://github.com/reflex-dev/reflex/blob/main/docs/vi/README.md) - ---- - -# Reflex - -Reflex es una biblioteca para construir aplicaciones web full-stack en Python puro. - -Características clave: - -- **Python puro** - Escribe el frontend y backend de tu aplicación en Python, sin necesidad de aprender JavaScript. -- **Flexibilidad total** - Reflex es fácil para empezar, pero también puede escalar a aplicaciones complejas. -- **Despliegue instantáneo** - Después de construir, despliega tu aplicación con un [solo comando](https://reflex.dev/docs/hosting/deploy-quick-start/) u hospédala en tu propio servidor. - -Consulta nuestra [página de arquitectura](https://reflex.dev/blog/2024-03-21-reflex-architecture/#the-reflex-architecture) para aprender cómo funciona Reflex en detalle. - -## ⚙️ Instalación - -Abra un terminal y ejecute (Requiere Python 3.10+): - -```bash -pip install reflex -``` - -## 🥳 Crea tu primera aplicación - -Al instalar `reflex` también se instala la herramienta de línea de comandos `reflex`. - -Compruebe que la instalación se ha realizado correctamente creando un nuevo proyecto. (Sustituye `my_app_name` por el nombre de tu proyecto): - -```bash -mkdir my_app_name -cd my_app_name -reflex init -``` - -Este comando inicializa una plantilla en tu nuevo directorio. - -Puedes iniciar esta aplicación en modo de desarrollo: - -```bash -reflex run -``` - -Debería ver su aplicación ejecutándose en http://localhost:3000. - -Ahora puede modificar el código fuente en `my_app_name/my_app_name.py`. Reflex se actualiza rápidamente para que pueda ver los cambios al instante cuando guarde el código. - -## 🫧 Ejemplo de una Aplicación - -Veamos un ejemplo: crearemos una UI de generación de imágenes en torno a [DALL·E](https://platform.openai.com/docs/guides/images/image-generation?context=node). Para simplificar, solo llamamos a la [API de OpenAI](https://platform.openai.com/docs/api-reference/authentication), pero podrías reemplazar esto con un modelo ML ejecutado localmente. - -  - -
-Un envoltorio frontend para DALL·E, mostrado en el proceso de generar una imagen. -
- -  - -Aquí está el código completo para crear esto. ¡Todo esto se hace en un archivo de Python! - -```python -import reflex as rx -import openai - -openai_client = openai.OpenAI() - -class State(rx.State): - """El estado de la aplicación""" - prompt = "" - image_url = "" - processing = False - complete = False - - def get_image(self): - """Obtiene la imagen desde la consulta.""" - if self.prompt == "": - return rx.window_alert("Prompt Empty") - - self.processing, self.complete = True, False - yield - response = openai_client.images.generate( - prompt=self.prompt, n=1, size="1024x1024" - ) - self.image_url = response.data[0].url - self.processing, self.complete = False, True - - -def index(): - return rx.center( - rx.vstack( - rx.heading("DALL-E", font_size="1.5em"), - rx.input( - placeholder="Enter a prompt..", - on_blur=State.set_prompt, - width="25em", - ), - rx.button( - "Generate Image", - on_click=State.get_image, - width="25em", - loading=State.processing - ), - rx.cond( - State.complete, - rx.image(src=State.image_url, width="20em"), - ), - align="center", - ), - width="100%", - height="100vh", - ) - -# Agrega el estado y la pagina a la aplicación -app = rx.App() -app.add_page(index, title="Reflex:DALL-E") -``` - -## Vamos a analizarlo. - -
-Explicando las diferencias entre las partes del backend y frontend de la aplicación DALL-E. -
- -### **Reflex UI** - -Empezemos por la interfaz de usuario (UI). - -```python -def index(): - return rx.center( - ... - ) -``` - -Esta función `index` define el frontend de la aplicación. - -Utilizamos diferentes componentes como `center`, `vstack`, `input`, y `button` para construir el frontend. Los componentes pueden anidarse unos dentro de otros para crear diseños complejos. Además, puedes usar argumentos de tipo keyword para darles estilo con toda la potencia de CSS. - -Reflex viene con [mas de 60 componentes incorporados](https://reflex.dev/docs/library) para ayudarle a empezar. Estamos añadiendo activamente más componentes y es fácil [crear sus propios componentes](https://reflex.dev/docs/wrapping-react/overview/). - -### **Estado** - -Reflex representa su UI como una función de su estado (State). - -```python -class State(rx.State): - """El estado de la aplicación""" - prompt = "" - image_url = "" - processing = False - complete = False -``` - -El estado (State) define todas las variables (llamadas vars) de una aplicación que pueden cambiar y las funciones que las modifican. - -Aquí el estado se compone de `prompt` e `image_url`. También están los booleanos `processing` y `complete` para indicar cuando se deshabilite el botón (durante la generación de la imagen) y cuando se muestre la imagen resultante. - -### **Manejadores de Evento** - -```python -def get_image(self): - """Obtiene la imagen desde la consulta.""" - if self.prompt == "": - return rx.window_alert("Prompt Empty") - - self.processing, self.complete = True, False - yield - response = openai_client.images.generate( - prompt=self.prompt, n=1, size="1024x1024" - ) - self.image_url = response.data[0].url - self.processing, self.complete = False, True -``` - -Dentro del estado, definimos funciones llamadas manejadores de eventos que cambian las variables de estado. Los Manejadores de Evento son la manera que podemos modificar el estado en Reflex. Pueden ser activados en respuesta a las acciones del usuario, como hacer clic en un botón o escribir en un cuadro de texto. Estas acciones se llaman eventos. - -Nuestra aplicación DALL·E tiene un manipulador de eventos, `get_image` que recibe esta imagen del OpenAI API. El uso de `yield` en medio de un manipulador de eventos hará que la UI se actualice. De lo contrario, la interfaz se actualizará al final del manejador de eventos. - -### **Enrutamiento** - -Por último, definimos nuestra app. - -```python -app = rx.App() -``` - -Añadimos una página desde la raíz (root) de la aplicación al componente de índice (index). También agregamos un título que se mostrará en la vista previa de la página/pestaña del navegador. - -```python -app.add_page(index, title="DALL-E") -``` - -Puedes crear una aplicación multipágina añadiendo más páginas. - -## 📑 Recursos - -
- -📑 [Docs](https://reflex.dev/docs/getting-started/introduction)   |   🗞️ [Blog](https://reflex.dev/blog)   |   📱 [Librería de componentes](https://reflex.dev/docs/library)   |   🖼️ [Templates](https://reflex.dev/templates/)   |   🛸 [Despliegue](https://reflex.dev/docs/hosting/deploy-quick-start)   - -
- -## ✅ Estado - -Reflex se lanzó en diciembre de 2022 con el nombre de Pynecone. - -A partir de 2025, [Reflex Cloud](https://cloud.reflex.dev) se ha lanzado para proporcionar la mejor experiencia de alojamiento para aplicaciones Reflex. Continuaremos desarrollándolo e implementando más características. - -¡Reflex tiene nuevas versiones y características cada semana! Asegúrate de :star: marcar como favorito y :eyes: seguir este repositorio para mantenerte actualizado. - -## Contribuciones - -¡Aceptamos contribuciones de cualquier tamaño! A continuación encontrará algunas buenas formas de iniciarse en la comunidad Reflex. - -- **Únete a nuestro Discord**: Nuestro [Discord](https://discord.gg/T5WSbC2YtQ) es el mejor lugar para obtener ayuda en su proyecto Reflex y discutir cómo puedes contribuir. -- **Discusiones de GitHub**: Una excelente manera de hablar sobre las características que deseas agregar o las cosas que te resultan confusas o necesitan aclaración. -- **GitHub Issues**: Las incidencias son una forma excelente de informar de errores. Además, puedes intentar resolver un problema existente y enviar un PR. - -Buscamos colaboradores, sin importar su nivel o experiencia. Para contribuir consulta [CONTRIBUTING.md](https://github.com/reflex-dev/reflex/blob/main/CONTRIBUTING.md) - -## Todo Gracias A Nuestros Contribuidores: - - - - - -## Licencia - -Reflex es de código abierto y está licenciado bajo la [Apache License 2.0](/LICENSE). diff --git a/docs/events/background_events.md b/docs/events/background_events.md new file mode 100644 index 00000000000..f8d0d38874c --- /dev/null +++ b/docs/events/background_events.md @@ -0,0 +1,159 @@ +```python exec +import reflex as rx +from pcweb import constants, styles +``` + +# Background Tasks + +A background task is a special type of `EventHandler` that may run +concurrently with other `EventHandler` functions. This enables long-running +tasks to execute without blocking UI interactivity. + +A background task is defined by decorating an async `State` method with +`@rx.event(background=True)`. + +```md alert warning +# `@rx.event(background=True)` used to be called `@rx.background`. +In Reflex version 0.6.5 and later, the `@rx.background` decorator has been renamed to `@rx.event(background=True)`. +``` + +Whenever a background task needs to interact with the state, **it must enter an +`async with self` context block** which refreshes the state and takes an +exclusive lock to prevent other tasks or event handlers from modifying it +concurrently. Because other `EventHandler` functions may modify state while the +task is running, **outside of the context block, Vars accessed by the background +task may be _stale_**. Attempting to modify the state from a background task +outside of the context block will raise an `ImmutableStateError` exception. + +In the following example, the `my_task` event handler is decorated with +`@rx.event(background=True)` and increments the `counter` variable every half second, as +long as certain conditions are met. While it is running, the UI remains +interactive and continues to process events normally. + +```md alert info +# Background events are similar to simple Task Queues like [Celery](https://www.fullstackpython.com/celery.html) allowing asynchronous events. +``` + +```python demo exec id=background_demo +import asyncio +import reflex as rx + + +class MyTaskState(rx.State): + counter: int = 0 + max_counter: int = 10 + running: bool = False + _n_tasks: int = 0 + + @rx.event + def set_max_counter(self, value: str): + self.max_counter = int(value) + + @rx.event(background=True) + async def my_task(self): + async with self: + # The latest state values are always available inside the context + if self._n_tasks > 0: + # only allow 1 concurrent task + return + + # State mutation is only allowed inside context block + self._n_tasks += 1 + + while True: + async with self: + # Check for stopping conditions inside context + if self.counter >= self.max_counter: + self.running = False + if not self.running: + self._n_tasks -= 1 + return + + self.counter += 1 + + # Await long operations outside the context to avoid blocking UI + await asyncio.sleep(0.5) + + @rx.event + def toggle_running(self): + self.running = not self.running + if self.running: + return MyTaskState.my_task + + @rx.event + def clear_counter(self): + self.counter = 0 + + +def background_task_example(): + return rx.hstack( + rx.heading(MyTaskState.counter, " /"), + rx.input( + value=MyTaskState.max_counter, + on_change=MyTaskState.set_max_counter, + width="8em", + ), + rx.button( + rx.cond(~MyTaskState.running, "Start", "Stop"), + on_click=MyTaskState.toggle_running, + ), + rx.button( + "Reset", + on_click=MyTaskState.clear_counter, + ), + ) +``` + +## Terminating Background Tasks on Page Close or Navigation + +Sometimes, background tasks may continue running even after the user navigates away from the page or closes the browser tab. To handle such cases, you can check if the websocket associated with the state is disconnected and terminate the background task when necessary. + +The solution involves checking if the client_token is still valid in the app.event_namespace.token_to_sid mapping. If the session is lost (e.g., the user navigates away or closes the page), the background task will stop. + +```python +import asyncio +import reflex as rx + +class State(rx.State): + @rx.event(background=True) + async def loop_function(self): + while True: + if self.router.session.client_token not in app.event_namespace.token_to_sid: + print("WebSocket connection closed or user navigated away. Stopping background task.") + break + + print("Running background task...") + await asyncio.sleep(2) + + +@rx.page(on_load=State.loop_function) +def index(): + return rx.text("Hello, this page will manage background tasks and stop them when the page is closed or navigated away.") + +``` + +## Task Lifecycle + +When a background task is triggered, it starts immediately, saving a reference to +the task in `app.background_tasks`. When the task completes, it is removed from +the set. + +Multiple instances of the same background task may run concurrently, and the +framework makes no attempt to avoid duplicate tasks from starting. + +It is up to the developer to ensure that duplicate tasks are not created under +the circumstances that are undesirable. In the example above, the `_n_tasks` +backend var is used to control whether `my_task` will enter the increment loop, +or exit early. + + + + +## Background Task Limitations + +Background tasks mostly work like normal `EventHandler` methods, with certain exceptions: + +- Background tasks must be `async` functions. +- Background tasks cannot modify the state outside of an `async with self` context block. +- Background tasks may read the state outside of an `async with self` context block, but the value may be stale. +- Background tasks may not be directly called from other event handlers or background tasks. Instead use `yield` or `return` to trigger the background task. diff --git a/docs/events/chaining_events.md b/docs/events/chaining_events.md new file mode 100644 index 00000000000..1d14ff16eee --- /dev/null +++ b/docs/events/chaining_events.md @@ -0,0 +1,94 @@ +```python exec +import reflex as rx +``` + +# Chaining events + +## Calling Event Handlers From Event Handlers + +You can call other event handlers from event handlers to keep your code modular. Just use the `self.call_handler` syntax to run another event handler. As always, you can yield within your function to send incremental updates to the frontend. + +```python demo exec id=call-handler +import asyncio + +class CallHandlerState(rx.State): + count: int = 0 + progress: int = 0 + + @rx.event + async def run(self): + # Reset the count. + self.set_progress(0) + yield + + # Count to 10 while showing progress. + for i in range(10): + # Wait and increment. + await asyncio.sleep(0.5) + self.count += 1 + + # Update the progress. + self.set_progress(i + 1) + + # Yield to send the update. + yield + + +def call_handler_example(): + return rx.vstack( + rx.badge(CallHandlerState.count, font_size="1.5em", color_scheme="green"), + rx.progress(value=CallHandlerState.progress, max=10, width="100%"), + rx.button("Run", on_click=CallHandlerState.run), + ) +``` + +## Returning Events From Event Handlers + +So far, we have only seen events that are triggered by components. However, an event handler can also return events. + +In Reflex, event handlers run synchronously, so only one event handler can run at a time, and the events in the queue will be blocked until the current event handler finishes.The difference between returning an event and calling an event handler is that returning an event will send the event to the frontend and unblock the queue. + +```md alert info +# Be sure to use the class name `State` (or any substate) rather than `self` when returning events. +``` + +Try entering an integer in the input below then clicking out. + +```python demo exec id=collatz +class CollatzState(rx.State): + count: int = 1 + + @rx.event + def start_collatz(self, count: str): + """Run the collatz conjecture on the given number.""" + self.count = abs(int(count if count else 1)) + return CollatzState.run_step + + @rx.event + async def run_step(self): + """Run a single step of the collatz conjecture.""" + + while self.count > 1: + + await asyncio.sleep(0.5) + + if self.count % 2 == 0: + # If the number is even, divide by 2. + self.count //= 2 + else: + # If the number is odd, multiply by 3 and add 1. + self.count = self.count * 3 + 1 + yield + + +def collatz_example(): + return rx.vstack( + rx.badge(CollatzState.count, font_size="1.5em", color_scheme="green"), + rx.input(on_blur=CollatzState.start_collatz), + ) + +``` + +In this example, we run the [Collatz Conjecture](https://en.wikipedia.org/wiki/Collatz_conjecture) on a number entered by the user. + +When the `on_blur` event is triggered, the event handler `start_collatz` is called. It sets the initial count, then calls `run_step` which runs until the count reaches `1`. diff --git a/docs/events/decentralized_event_handlers.md b/docs/events/decentralized_event_handlers.md new file mode 100644 index 00000000000..2ac8fcb747a --- /dev/null +++ b/docs/events/decentralized_event_handlers.md @@ -0,0 +1,149 @@ +```python exec +import reflex as rx +``` + +# Decentralized Event Handlers + +## Overview + +Decentralized event handlers allow you to define event handlers outside of state classes, providing more flexible code organization. This feature was introduced in Reflex v0.7.10 and enables a more modular approach to event handling. + +With decentralized event handlers, you can: +- Organize event handlers by feature rather than by state class +- Separate UI logic from state management +- Create more maintainable and scalable applications + +## Basic Usage + +To create a decentralized event handler, use the `@rx.event` decorator on a function that takes a state instance as its first parameter: + +```python demo exec +import reflex as rx + +class MyState(rx.State): + count: int = 0 + +@rx.event +def increment(state: MyState, amount: int): + state.count += amount + +def decentralized_event_example(): + return rx.vstack( + rx.heading(f"Count: {MyState.count}"), + rx.hstack( + rx.button("Increment by 1", on_click=increment(1)), + rx.button("Increment by 5", on_click=increment(5)), + rx.button("Increment by 10", on_click=increment(10)), + ), + spacing="4", + align="center", + ) +``` + +In this example: +1. We define a `MyState` class with a `count` variable +2. We create a decentralized event handler `increment` that takes a `MyState` instance as its first parameter +3. We use the event handler in buttons, passing different amounts to increment by + +## Compared to Traditional Event Handlers + +Here's a comparison between traditional event handlers defined within state classes and decentralized event handlers: + +```python box +# Traditional event handler within a state class +class TraditionalState(rx.State): + count: int = 0 + + @rx.event + def increment(self, amount: int = 1): + self.count += amount + +# Usage in components +rx.button("Increment", on_click=TraditionalState.increment(5)) + +# Decentralized event handler outside the state class +class DecentralizedState(rx.State): + count: int = 0 + +@rx.event +def increment(state: DecentralizedState, amount: int = 1): + state.count += amount + +# Usage in components +rx.button("Increment", on_click=increment(5)) +``` + +Key differences: +- Traditional event handlers use `self` to reference the state instance +- Decentralized event handlers explicitly take a state instance as the first parameter +- Both approaches use the same syntax for triggering events in components +- Both can be decorated with `@rx.event` respectively + +## Best Practices + +### When to Use Decentralized Event Handlers + +Decentralized event handlers are particularly useful in these scenarios: + +1. **Large applications** with many event handlers that benefit from better organization +2. **Feature-based organization** where you want to group related event handlers together +3. **Separation of concerns** when you want to keep state definitions clean and focused + +### Type Annotations + +Always use proper type annotations for your state parameter and any additional parameters: + +```python box +@rx.event +def update_user(state: UserState, name: str, age: int): + state.name = name + state.age = age +``` + +### Naming Conventions + +Follow these naming conventions for clarity: + +1. Use descriptive names that indicate the action being performed +2. Use the state class name as the type annotation for the first parameter +3. Name the state parameter consistently across your codebase (e.g., always use `state` or the first letter of the state class) + +### Organization + +Consider these approaches for organizing decentralized event handlers: + +1. Group related event handlers in the same file +2. Place event handlers near the state classes they modify +3. For larger applications, create a dedicated `events` directory with files organized by feature + +```python box +# Example organization in a larger application +# events/user_events.py +@rx.event +def update_user(state: UserState, name: str, age: int): + state.name = name + state.age = age + +@rx.event +def delete_user(state: UserState): + state.name = "" + state.age = 0 +``` + +### Combining with Other Event Features + +Decentralized event handlers work seamlessly with other Reflex event features: + +```python box +# Background event +@rx.event(background=True) +async def long_running_task(state: AppState): + # Long-running task implementation + pass + +# Event chaining +@rx.event +def process_form(state: FormState, data: dict): + # Process form data + return validate_data # Chain to another event +``` diff --git a/docs/events/event_actions.md b/docs/events/event_actions.md new file mode 100644 index 00000000000..1d431eddc8b --- /dev/null +++ b/docs/events/event_actions.md @@ -0,0 +1,252 @@ +```python exec +import reflex as rx +import datetime +``` + +# Event Actions + +In Reflex, an event action is a special behavior that occurs during or after +processing an event on the frontend. + +Event actions can modify how the browser handles DOM events or throttle and +debounce events before they are processed by the backend. + +An event action is specified by accessing attributes and methods present on all +EventHandlers and EventSpecs. + +## DOM Event Propagation + +_Added in v0.3.2_ + +### prevent_default + +The `.prevent_default` action prevents the default behavior of the browser for +the action. This action can be added to any existing event, or it can be used on its own by +specifying `rx.prevent_default` as an event handler. + +A common use case for this is to prevent navigation when clicking a link. + +```python demo +rx.link("This Link Does Nothing", href="https://reflex.dev/", on_click=rx.prevent_default) +``` + +```python demo exec +class LinkPreventDefaultState(rx.State): + status: bool = False + + @rx.event + def toggle_status(self): + self.status = not self.status + +def prevent_default_example(): + return rx.vstack( + rx.heading(f"The value is {LinkPreventDefaultState.status}"), + rx.link( + "Toggle Value", + href="https://reflex.dev/", + on_click=LinkPreventDefaultState.toggle_status.prevent_default, + ), + ) +``` + +### stop_propagation + +The `.stop_propagation` action stops the event from propagating to parent elements. + +This action is often used when a clickable element contains nested buttons that +should not trigger the parent element's click event. + +In the following example, the first button uses `.stop_propagation` to prevent +the click event from propagating to the outer vstack. The second button does not +use `.stop_propagation`, so the click event will also be handled by the on_click +attached to the outer vstack. + +```python demo exec +class StopPropagationState(rx.State): + where_clicked: list[str] = [] + + @rx.event + def handle_click(self, where: str): + self.where_clicked.append(where) + + @rx.event + def handle_reset(self): + self.where_clicked = [] + +def stop_propagation_example(): + return rx.vstack( + rx.button( + "btn1 - Stop Propagation", + on_click=StopPropagationState.handle_click("btn1").stop_propagation, + ), + rx.button( + "btn2 - Normal Propagation", + on_click=StopPropagationState.handle_click("btn2"), + ), + rx.foreach(StopPropagationState.where_clicked, rx.text), + rx.button( + "Reset", + on_click=StopPropagationState.handle_reset.stop_propagation, + ), + padding="2em", + border=f"1px dashed {rx.color('accent', 5)}", + on_click=StopPropagationState.handle_click("outer") + ) +``` + +## Throttling and Debounce + +_Added in v0.5.0_ + +For events that are fired frequently, it can be useful to throttle or debounce +them to avoid network latency and improve performance. These actions both take a +single argument which specifies the delay time in milliseconds. + +### throttle + +The `.throttle` action limits the number of times an event is processed within a +a given time period. It is useful for `on_scroll` and `on_mouse_move` events which are +fired very frequently, causing lag when handling them in the backend. + +```md alert warning +# Throttled events are discarded. + +There is no eventual delivery of any event that is triggered while the throttle +period is active. Throttle is not appropriate for events when the final payload +contains data that must be processed, like `on_change`. +``` + +In the following example, the `on_scroll` event is throttled to only fire every half second. + +```python demo exec +class ThrottleState(rx.State): + last_scroll: datetime.datetime | None + + @rx.event + def handle_scroll(self): + self.last_scroll = datetime.datetime.now(datetime.timezone.utc) + +def scroll_box(): + return rx.scroll_area( + rx.heading("Scroll Me"), + *[rx.text(f"Item {i}") for i in range(100)], + height="75px", + width="50%", + border=f"1px solid {rx.color('accent', 5)}", + on_scroll=ThrottleState.handle_scroll.throttle(500), + ) + +def throttle_example(): + return ( + scroll_box(), + rx.text( + f"Last Scroll Event: ", + rx.moment(ThrottleState.last_scroll, format="HH:mm:ss.SSS"), + ), + ) +``` + +```md alert info +# Event Actions are Chainable + +Event actions can be chained together to create more complex event handling +behavior. For example, you can throttle an event and prevent its default +behavior in the same event handler: `on_click=MyState.handle_click.throttle(500).prevent_default`. +``` + +### debounce + +The `.debounce` action delays the processing of an event until the specified +timeout occurs. If another event is triggered during the timeout, the timer is +reset and the original event is discarded. + +Debounce is useful for handling the final result of a series of events, such as +moving a slider. + +```md alert warning +# Debounced events are discarded. + +When a new event is triggered during the debounce period, the original event is +discarded. Debounce is not appropriate for events where each payload contains +unique data that must be processed, like `on_key_down`. +``` + +In the following example, the slider's `on_change` handler, `update_value`, is +only triggered on the backend when the slider value has not changed for half a +second. + +```python demo exec +class DebounceState(rx.State): + settled_value: int = 50 + + @rx.event + def update_value(self, value: list[int | float]): + self.settled_value = value[0] + + +def debounced_slider(): + return rx.slider( + key=rx.State.router.session.session_id, + default_value=[DebounceState.settled_value], + on_change=DebounceState.update_value.debounce(500), + width="100%", + ) + +def debounce_example(): + return rx.vstack( + debounced_slider(), + rx.text(f"Settled Value: {DebounceState.settled_value}"), + ) +``` + +```md alert info +# Why set key on the slider? + +Setting `key` to the `session_id` with a dynamic `default_value` ensures that +when the page is refreshed, the component will be re-rendered to reflect the +updated default_value from the state. + +Without the `key` set, the slider would always display the original +`settled_value` after a page reload, instead of its current value. +``` + +## Temporal Events + +_Added in [v0.6.6](https://github.com/reflex-dev/reflex/releases/tag/v0.6.6)_ + +### temporal + +The `.temporal` action prevents events from being queued when the backend is down. +This is useful for non-critical events where you do not want them to pile up if there is +a temporary connection issue. + +```md alert warning +# Temporal events are discarded when the backend is down. + +When the backend is unavailable, events with the `.temporal` action will be +discarded rather than queued for later processing. Only use this for events +where it is acceptable to lose some interactions during connection issues. +``` + +In the following example, the `rx.moment` component with `interval` and `on_change` uses `.temporal` to +prevent periodic updates from being queued when the backend is down: + +```python demo exec +class TemporalState(rx.State): + current_time: str = "" + + @rx.event + def update_time(self): + self.current_time = datetime.datetime.now().strftime("%H:%M:%S") + +def temporal_example(): + return rx.vstack( + rx.heading("Current Time:"), + rx.heading(TemporalState.current_time), + rx.moment( + interval=1000, + on_change=TemporalState.update_time.temporal, + ), + rx.text("Time updates will not be queued if the backend is down."), + ) +``` diff --git a/docs/events/event_arguments.md b/docs/events/event_arguments.md new file mode 100644 index 00000000000..42621f5856e --- /dev/null +++ b/docs/events/event_arguments.md @@ -0,0 +1,123 @@ +```python exec +import reflex as rx +``` + +# Event Arguments + +The event handler signature needs to match the event trigger definition argument count. If the event handler takes two arguments, the event trigger must be able to provide two arguments. + +Here is a simple example: + +```python demo exec + +class EventArgStateSlider(rx.State): + value: int = 50 + + @rx.event + def set_end(self, value: list[int | float]): + self.value = value[0] + + +def slider_max_min_step(): + return rx.vstack( + rx.heading(EventArgStateSlider.value), + rx.slider( + default_value=40, + on_value_commit=EventArgStateSlider.set_end, + ), + width="100%", + ) + +``` + +The event trigger here is `on_value_commit` and it is called when the value changes at the end of an interaction. This event trigger passes one argument, which is the value of the slider. The event handler which is triggered by the event trigger must therefore take one argument, which is `value` here. + +Here is a form example: + +```python demo exec + +class EventArgState(rx.State): + form_data: dict = {} + + @rx.event + def handle_submit(self, form_data: dict): + """Handle the form submit.""" + self.form_data = form_data + + +def event_arg_example(): + return rx.vstack( + rx.form( + rx.vstack( + rx.input( + placeholder="Name", + name="name", + ), + rx.checkbox("Checked", name="check"), + rx.button("Submit", type="submit"), + ), + on_submit=EventArgState.handle_submit, + reset_on_submit=True, + ), + rx.divider(), + rx.heading("Results"), + rx.text(EventArgState.form_data.to_string()), + ) +``` + +In this example the event trigger is the `on_submit` event of the form. The event handler is `handle_submit`. The `on_submit` event trigger passes one argument, the form data as a dictionary, to the `handle_submit` event handler. The `handle_submit` event handler must take one argument because the `on_submit` event trigger passes one argument. + +When the number of args accepted by an EventHandler differs from that provided by the event trigger, an `EventHandlerArgMismatch` error will be raised. + +## Pass Additional Arguments to Event Handlers + +In some use cases, you want to pass additional arguments to your event handlers. To do this you can bind an event trigger to a lambda, which can call your event handler with the arguments you want. + +Try typing a color in an input below and clicking away from it to change the color of the input. + +```python demo exec +class ArgState(rx.State): + colors: list[str] = ["rgba(245,168,152)", "MediumSeaGreen", "#DEADE3"] + + @rx.event + def change_color(self, color: str, index: int): + self.colors[index] = color + +def event_arguments_example(): + return rx.hstack( + rx.input(default_value=ArgState.colors[0], on_blur=lambda c: ArgState.change_color(c, 0), bg=ArgState.colors[0]), + rx.input(default_value=ArgState.colors[1], on_blur=lambda c: ArgState.change_color(c, 1), bg=ArgState.colors[1]), + rx.input(default_value=ArgState.colors[2], on_blur=lambda c: ArgState.change_color(c, 2), bg=ArgState.colors[2]), + ) + +``` + +In this case, in we want to pass two arguments to the event handler `change_color`, the color and the index of the color to change. + +The `on_blur` event trigger passes the text of the input as an argument to the lambda, and the lambda calls the `change_color` event handler with the text and the index of the input. + +When the number of args accepted by a lambda differs from that provided by the event trigger, an `EventFnArgMismatch` error will be raised. + +```md alert warning +# Event Handler Parameters should provide type annotations. + +Like state vars, be sure to provide the right type annotations for the parameters in an event handler. +``` + +## Events with Partial Arguments (Advanced) + +_Added in v0.5.0_ + +Event arguments in Reflex are passed positionally. Any additional arguments not +passed to an EventHandler will be filled in by the event trigger when it is +fired. + +The following two code samples are equivalent: + +```python +# Use a lambda to pass event trigger args to the EventHandler. +rx.text(on_blur=lambda v: MyState.handle_update("field1", v)) + +# Create a partial that passes event trigger args for any args not provided to the EventHandler. +rx.text(on_blur=MyState.handle_update("field1")) +``` diff --git a/docs/events/events_overview.md b/docs/events/events_overview.md new file mode 100644 index 00000000000..e67aa3bf5ef --- /dev/null +++ b/docs/events/events_overview.md @@ -0,0 +1,52 @@ +```python exec +import reflex as rx + +from pcweb.pages.docs.library import library +``` + +# Events Overview + +Events are composed of two parts: Event Triggers and Event Handlers. + +- **Events Handlers** are how the State of a Reflex application is updated. They are triggered by user interactions with the UI, such as clicking a button or hovering over an element. Events can also be triggered by the page loading or by other events. + +- **Event triggers** are component props that create an event to be sent to an event handler. +Each component supports a set of events triggers. They are described in each [component's documentation]({library.path}) in the event trigger section. + + +## Example +Lets take a look at an example below. Try mousing over the heading to change the word. + +```python demo exec +class WordCycleState(rx.State): + # The words to cycle through. + text: list[str] = ["Welcome", "to", "Reflex", "!"] + + # The index of the current word. + index: int = 0 + + @rx.event + def next_word(self): + self.index = (self.index + 1) % len(self.text) + + @rx.var + def get_text(self) -> str: + return self.text[self.index] + +def event_triggers_example(): + return rx.heading( + WordCycleState.get_text, + on_mouse_over=WordCycleState.next_word, + color="green", + ) + +``` + +In this example, the heading component has the **event trigger**, `on_mouse_over`. +Whenever the user hovers over the heading, the `next_word` **event handler** will be called to cycle the word. Once the handler returns, the UI will be updated to reflect the new state. + +Adding the `@rx.event` decorator above the event handler is strongly recommended. This decorator enables proper static type checking, which ensures event handlers receive the correct number and types of arguments. + +# What's in this section? + +In the event section of the documentation, you will explore the different types of events supported by Reflex, along with the different ways to call them. diff --git a/docs/events/page_load_events.md b/docs/events/page_load_events.md new file mode 100644 index 00000000000..3c4e9b68678 --- /dev/null +++ b/docs/events/page_load_events.md @@ -0,0 +1,40 @@ +```python exec +import reflex as rx +``` + +# Page Load Events + +You can also specify a function to run when the page loads. This can be useful for fetching data once vs on every render or state change. +In this example, we fetch data when the page loads: + +```python +class State(rx.State): + data: Dict[str, Any] + + @rx.event + def get_data(self): + # Fetch data + self.data = fetch_data() + +@rx.page(on_load=State.get_data) +def index(): + return rx.text('A Beautiful App') +``` + +Another example would be checking if the user is authenticated when the page loads. If the user is not authenticated, we redirect them to the login page. If they are authenticated, we don't do anything, letting them access the page. This `on_load` event would be placed on every page that requires authentication to access. + +```python +class State(rx.State): + authenticated: bool + + @rx.event + def check_auth(self): + # Check if user is authenticated + self.authenticated = check_auth() + if not self.authenticated: + return rx.redirect('/login') + +@rx.page(on_load=State.check_auth) +def index(): + return rx.text('A Beautiful App') +``` diff --git a/docs/events/setters.md b/docs/events/setters.md new file mode 100644 index 00000000000..243926b0e76 --- /dev/null +++ b/docs/events/setters.md @@ -0,0 +1,57 @@ +```python exec +import reflex as rx +``` + +# Setters + +Every base var has a built-in event handler to set it's value for convenience, called `set_VARNAME`. + +Say you wanted to change the value of the select component. You could write your own event handler to do this: + +```python demo exec + +options: list[str] = ["1", "2", "3", "4"] +class SetterState1(rx.State): + selected: str = "1" + + @rx.event + def change(self, value): + self.selected = value + + +def code_setter(): + return rx.vstack( + rx.badge(SetterState1.selected, color_scheme="green"), + rx.select( + options, + on_change= lambda value: SetterState1.change(value), + ) + ) + +``` + +Or you could could use a built-in setter for conciseness. + +```python demo exec + +options: list[str] = ["1", "2", "3", "4"] +class SetterState2(rx.State): + selected: str = "1" + + @rx.event + def set_selected(self, selected: str): + self.selected = selected + +def code_setter_2(): + return rx.vstack( + rx.badge(SetterState2.selected, color_scheme="green"), + rx.select( + options, + on_change= SetterState2.set_selected, + ) + ) +``` + +In this example, the setter for `selected` is `set_selected`. Both of these examples are equivalent. + +Setters are a great way to make your code more concise. But if you want to do something more complicated, you can always write your own function in the state. diff --git a/docs/events/special_events.md b/docs/events/special_events.md new file mode 100644 index 00000000000..0b6ae665e70 --- /dev/null +++ b/docs/events/special_events.md @@ -0,0 +1,28 @@ +```python exec +import reflex as rx + +from pcweb.pages.docs import api_reference +``` + +# Special Events + +Reflex also has built-in special events can be found in the [reference]({api_reference.special_events.path}). + +For example, an event handler can trigger an alert on the browser. + +```python demo exec +class SpecialEventsState(rx.State): + @rx.event + def alert(self): + return rx.window_alert("Hello World!") + +def special_events_example(): + return rx.button("Alert", on_click=SpecialEventsState.alert) +``` + +Special events can also be triggered directly in the UI by attaching them to an event trigger. + +```python +def special_events_example(): + return rx.button("Alert", on_click=rx.window_alert("Hello World!")) +``` diff --git a/docs/events/yield_events.md b/docs/events/yield_events.md new file mode 100644 index 00000000000..78bdb1c02c6 --- /dev/null +++ b/docs/events/yield_events.md @@ -0,0 +1,107 @@ +```python exec +import reflex as rx + +``` + +# Yielding Updates + +A regular event handler will send a `StateUpdate` when it has finished running. This works fine for basic event, but sometimes we need more complex logic. To update the UI multiple times in an event handler, we can `yield` when we want to send an update. + +To do so, we can use the Python keyword `yield`. For every yield inside the function, a `StateUpdate` will be sent to the frontend with the changes up to this point in the execution of the event handler. + +This example below shows how to yield 100 updates to the UI. + +```python demo exec + +class MultiUpdateState(rx.State): + count: int = 0 + + @rx.event + def timed_update(self): + for i in range(100): + self.count += 1 + yield + + +def multi_update(): + return rx.vstack( + rx.text(MultiUpdateState.count), + rx.button("Start", on_click=MultiUpdateState.timed_update) +) + +``` + +Here is another example of yielding multiple updates with a loading icon. + +```python demo exec + +import asyncio + +class ProgressExampleState(rx.State): + count: int = 0 + show_progress: bool = False + + @rx.event + async def increment(self): + self.show_progress = True + yield + # Think really hard. + await asyncio.sleep(0.5) + self.count += 1 + self.show_progress = False + +def progress_example(): + return rx.button( + ProgressExampleState.count, + on_click=ProgressExampleState.increment, + loading=ProgressExampleState.show_progress, + ) + +``` + +```md video https://youtube.com/embed/ITOZkzjtjUA?start=6463&end=6835 +# Video: Asyncio with Yield +``` + +## Yielding Other Events + +Events can also yield other events. This is useful when you want to chain events together. To do this, you can yield the event handler function itself. + +```md alert +# Reference other Event Handler via class + +When chaining another event handler with `yield`, access it via the state class, not `self`. +``` + +```python demo exec + +import asyncio + +class YieldEventsState(rx.State): + count: int = 0 + show_progress: bool = False + + @rx.event + async def add_five(self): + self.show_progress = True + yield + # Think really hard. + await asyncio.sleep(1) + self.count += 5 + self.show_progress = False + + @rx.event + async def increment(self): + yield YieldEventsState.add_five + yield YieldEventsState.add_five + yield YieldEventsState.add_five + + +def multiple_yield_example(): + return rx.button( + YieldEventsState.count, + on_click=YieldEventsState.increment, + loading=YieldEventsState.show_progress, + ) + +``` diff --git a/docs/getting_started/basics.md b/docs/getting_started/basics.md new file mode 100644 index 00000000000..baf4d69b420 --- /dev/null +++ b/docs/getting_started/basics.md @@ -0,0 +1,406 @@ +```python exec +from pcweb.pages.docs import components, getting_started +from pcweb.pages.docs.library import library +from pcweb.pages.docs.custom_components import custom_components +from pcweb.pages import docs +import reflex as rx +``` + +# Reflex Basics + +This page gives an introduction to the most common concepts that you will use to build Reflex apps. + +```md section +# You will learn how to: + +- Create and nest components +- Customize and style components +- Distinguish between compile-time and runtime +- Display data that changes over time +- Respond to events and update the screen +- Render conditions and lists +- Create pages and navigate between them +``` + +[Install]({docs.getting_started.installation.path}) `reflex` using pip. + +```bash +pip install reflex +``` + +Import the `reflex` library to get started. + +```python +import reflex as rx +``` + +## Creating and nesting components + +[Components]({docs.ui.overview.path}) are the building blocks for your app's user interface (UI). They are the visual elements that make up your app, like buttons, text, and images. Reflex has a wide selection of [built-in components]({library.path}) to get you started quickly. + +Components are created using functions that return a component object. + +```python demo exec +def my_button(): + return rx.button("Click Me") +``` + +Components can be nested inside each other to create complex UIs. + +To nest components as children, pass them as positional arguments to the parent component. In the example below, the `rx.text` and `my_button` components are children of the `rx.box` component. + +```python demo exec +def my_page(): + return rx.box( + rx.text("This is a page"), + # Reference components defined in other functions. + my_button() + ) +``` + +You can also use any base HTML element through the [`rx.el`]({docs.library.other.html.path}) namespace. This allows you to use standard HTML elements directly in your Reflex app when you need more control or when a specific component isn't available in the Reflex component library. + +```python demo exec +def my_div(): + return rx.el.div( + rx.el.p("Use base html!"), + ) +``` + +If you need a component not provided by Reflex, you can check the [3rd party ecosystem]({custom_components.path}) or [wrap your own React component]({docs.wrapping_react.library_and_tags.path}). + +## Customizing and styling components + +Components can be customized using [props]({docs.components.props.path}), which are passed in as keyword arguments to the component function. + +Each component has props that are specific to that component. Check the docs for the component you are using to see what props are available. + +```python demo exec +def half_filled_progress(): + return rx.progress(value=50) +``` + +In addition to component-specific props, components can also be styled using CSS properties passed as props. + +```python demo exec +def round_button(): + return rx.button("Click Me", border_radius="15px", font_size="18px") +``` + +```md alert +Use the `snake_case` version of the CSS property name as the prop name. +``` + +See the [styling guide]({docs.styling.overview.path}) for more information on how to style components + +In summary, components are made up of children and props. + +```md definition +# Children + +- Text or other Reflex components nested inside a component. +- Passed as **positional arguments**. + +# Props + +- Attributes that affect the behavior and appearance of a component. +- Passed as **keyword arguments**. +``` + +## Displaying data that changes over time + +Apps need to store and display data that changes over time. Reflex handles this through [State]({docs.state.overview.path}), which is a Python class that stores variables that can change when the app is running, as well as the functions that can change those variables. + +To define a state class, subclass `rx.State` and define fields that store the state of your app. The state variables ([vars]({docs.vars.base_vars.path})) should have a type annotation, and can be initialized with a default value. + +```python +class MyState(rx.State): + count: int = 0 +``` + +### Referencing state vars in components + +To reference a state var in a component, you can pass it as a child or prop. The component will automatically update when the state changes. + +Vars are referenced through class attributes on your state class. For example, to reference the `count` var in a component, use `MyState.count`. + +```python demo exec +class MyState(rx.State): + count: int = 0 + color: str = "red" + +def counter(): + return rx.hstack( + # The heading `color` prop is set to the `color` var in MyState. + rx.heading("Count: ", color=MyState.color), + # The `count` var in `MyState` is passed as a child to the heading component. + rx.heading(MyState.count), + ) +``` + +Vars can be referenced in multiple components, and will automatically update when the state changes. + +## Responding to events and updating the screen + +So far, we've defined state vars but we haven't shown how to change them. All state changes are handled through functions in the state class, called [event handlers]({docs.events.events_overview.path}). + +```md alert +Event handlers are the ONLY way to change state in Reflex. +``` + +Components have special props, such as `on_click`, called event triggers that can be used to make components interactive. Event triggers connect components to event handlers, which update the state. + +```python demo exec +class CounterState(rx.State): + count: int = 0 + + @rx.event + def increment(self): + self.count += 1 + +def counter_increment(): + return rx.hstack( + rx.heading(CounterState.count), + rx.button("Increment", on_click=CounterState.increment) + ) +``` + +When an event trigger is activated, the event handler is called, which updates the state. The UI is automatically re-rendered to reflect the new state. + + +```md alert info +# What is the `@rx.event` decorator? +Adding the `@rx.event` decorator above the event handler is strongly recommended. This decorator enables proper static type checking, which ensures event handlers receive the correct number and types of arguments. This was introduced in Reflex version 0.6.5. +``` + +### Event handlers with arguments + +Event handlers can also take in arguments. For example, the `increment` event handler can take an argument to increment the count by a specific amount. + +```python demo exec +class CounterState2(rx.State): + count: int = 0 + + @rx.event + def increment(self, amount: int): + self.count += amount + +def counter_variable(): + return rx.hstack( + rx.heading(CounterState2.count), + rx.button("Increment by 1", on_click=lambda: CounterState2.increment(1)), + rx.button("Increment by 5", on_click=lambda: CounterState2.increment(5)), + ) +``` + +The `on_click` event trigger doesn't pass any arguments here, but some event triggers do. For example, the `on_blur` event trigger passes the text of an input as an argument to the event handler. + +```python demo exec +class TextState(rx.State): + text: str = "" + + @rx.event + def update_text(self, new_text: str): + self.text = new_text + +def text_input(): + return rx.vstack( + rx.heading(TextState.text), + rx.input(default_value=TextState.text, on_blur=TextState.update_text), + ) +``` + +```md alert +Make sure that the event handler has the same number of arguments as the event trigger, or an error will be raised. +``` + +## Compile-time vs. runtime (IMPORTANT) + +Before we dive deeper into state, it's important to understand the difference between compile-time and runtime in Reflex. + +When you run your app, the frontend gets compiled to Javascript code that runs in the browser (compile-time). The backend stays in Python and runs on the server during the lifetime of the app (runtime). + +### When can you not use pure Python? + +We cannot compile arbitrary Python code, only the components that you define. What this means importantly is that you cannot use arbitrary Python operations and functions on state vars in components. + +However, since any event handlers in your state are on the backend, you **can use any Python code or library** within your state. + +### Examples that work + +Within an event handler, use any Python code or library. + +```python demo exec +def check_even(num: int): + return num % 2 == 0 + +class MyState3(rx.State): + count: int = 0 + text: str = "even" + + @rx.event + def increment(self): + # Use any Python code within state. + # Even reference functions defined outside the state. + if check_even(self.count): + self.text = "even" + else: + self.text = "odd" + self.count += 1 + +def count_and_check(): + return rx.box( + rx.heading(MyState3.text), + rx.button("Increment", on_click=MyState3.increment) + ) +``` + +Use any Python function within components, as long as it is defined at compile time (i.e. does not reference any state var) + +```python demo exec +def show_numbers(): + return rx.vstack( + *[ + rx.hstack(i, check_even(i)) + for i in range(10) + ] + ) +``` + +### Examples that don't work + +You cannot do an `if` statement on vars in components, since the value is not known at compile time. + +```python +class BadState(rx.State): + count: int = 0 + +def count_if_even(): + return rx.box( + rx.heading("Count: "), + # This will raise a compile error, as BadState.count is a var and not known at compile time. + rx.text(BadState.count if BadState.count % 2 == 0 else "Odd"), + # Using an if statement with a var as a prop will NOT work either. + rx.text("hello", color="red" if BadState.count % 2 == 0 else "blue"), + ) +``` + +You cannot do a `for` loop over a list of vars. + +```python +class BadState(rx.State): + items: list[str] = ["Apple", "Banana", "Cherry"] + +def loop_over_list(): + return rx.box( + # This will raise a compile error, as BadState.items is a list and not known at compile time. + *[rx.text(item) for item in BadState.items] + ) +``` + +You cannot do arbitrary Python operations on state vars in components. + +```python +class BadTextState(rx.State): + text: str = "Hello world" + +def format_text(): + return rx.box( + # Python operations such as `len` will not work on state vars. + rx.text(len(BadTextState.text)), + ) +``` + +In the next sections, we will show how to handle these cases. + +## Conditional rendering + +As mentioned above, you cannot use Python `if/else` statements with state vars in components. Instead, use the [`rx.cond`]({docs.components.conditional_rendering.path}) function to conditionally render components. + +```python demo exec +class LoginState(rx.State): + logged_in: bool = False + + @rx.event + def toggle_login(self): + self.logged_in = not self.logged_in + +def show_login(): + return rx.box( + rx.cond( + LoginState.logged_in, + rx.heading("Logged In"), + rx.heading("Not Logged In"), + ), + rx.button("Toggle Login", on_click=LoginState.toggle_login) + ) +``` + +## Rendering lists + +To iterate over a var that is a list, use the [`rx.foreach`]({docs.components.rendering_iterables.path}) function to render a list of components. + +Pass the list var and a function that returns a component as arguments to `rx.foreach`. + +```python demo exec +class ListState(rx.State): + items: list[str] = ["Apple", "Banana", "Cherry"] + +def render_item(item: rx.Var[str]): + """Render a single item.""" + # Note that item here is a Var, not a str! + return rx.list.item(item) + +def show_fruits(): + return rx.box( + rx.foreach(ListState.items, render_item), + ) +``` + +The function that renders each item takes in a `Var`, since this will get compiled up front. + +## Var Operations + +You can't use arbitrary Python operations on state vars in components, but Reflex has [var operations]({docs.vars.var_operations.path}) that you can use to manipulate state vars. + +For example, to check if a var is even, you can use the `%` and `==` var operations. + +```python demo exec +class CountEvenState(rx.State): + count: int = 0 + + @rx.event + def increment(self): + self.count += 1 + +def count_if_even(): + return rx.box( + rx.heading("Count: "), + rx.cond( + # Here we use the `%` and `==` var operations to check if the count is even. + CountEvenState.count % 2 == 0, + rx.text("Even"), + rx.text("Odd"), + ), + rx.button("Increment", on_click=CountEvenState.increment), + ) +``` + +## App and Pages + +Reflex apps are created by instantiating the `rx.App` class. Pages are linked to specific URL routes, and are created by defining a function that returns a component. + +```python +def index(): + return rx.text('Root Page') + +rx.app = rx.App() +app.add_page(index, route="/") +``` + +## Next Steps + +Now that you have a basic understanding of how Reflex works, the next step is to start coding your own apps. Try one of the following tutorials: + +- [Dashboard Tutorial]({getting_started.dashboard_tutorial.path}) +- [Chatapp Tutorial]({getting_started.chatapp_tutorial.path}) diff --git a/docs/getting_started/chat_tutorial_style.py b/docs/getting_started/chat_tutorial_style.py new file mode 100644 index 00000000000..fe8ff74d610 --- /dev/null +++ b/docs/getting_started/chat_tutorial_style.py @@ -0,0 +1,27 @@ +# Common styles for questions and answers. +import reflex as rx + +shadow = "rgba(0, 0, 0, 0.15) 0px 2px 8px" +chat_margin = "20%" +message_style = { + "padding": "1em", + "border_radius": "5px", + "margin_y": "0.5em", + "box_shadow": shadow, + "max_width": "30em", + "display": "inline-block", +} + +# Set specific styles for questions and answers. +question_style = message_style | { + "background_color": rx.color("gray", 4), + "margin_left": chat_margin, +} +answer_style = message_style | { + "background_color": rx.color("accent", 8), + "margin_right": chat_margin, +} + +# Styles for the action bar. +input_style = {"border_width": "1px", "box_shadow": shadow, "width": "350px"} +button_style = {"background_color": rx.color("accent", 10), "box_shadow": shadow} diff --git a/docs/getting_started/chat_tutorial_utils.py b/docs/getting_started/chat_tutorial_utils.py new file mode 100644 index 00000000000..9b3f27988c8 --- /dev/null +++ b/docs/getting_started/chat_tutorial_utils.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +import os + +import openai +import reflex as rx + +OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY") + + +class ChatappState(rx.State): + # The current question being asked. + question: str + + # Keep track of the chat history as a list of (question, answer) tuples. + chat_history: list[tuple[str, str]] + + def set_question(self, q: str): + self.question = q + + def set_question1(self, q: str): + self.question = q + + def set_question2(self, q: str): + self.question = q + + def set_question3(self, q: str): + self.question = q + + def answer(self) -> None: + # Our chatbot is not very smart right now... + answer = "I don't know!" + self.chat_history.append((self.question, answer)) + + def answer2(self) -> None: + # Our chatbot is not very smart right now... + answer = "I don't know!" + self.chat_history.append((self.question, answer)) + # Clear the question input. + self.question = "" + + async def answer3(self): + import asyncio + + # Our chatbot is not very smart right now... + answer = "I don't know!" + self.chat_history.append((self.question, "")) + + # Clear the question input. + self.question = "" + # Yield here to clear the frontend input before continuing. + yield + + for i in range(len(answer)): + await asyncio.sleep(0.1) + self.chat_history[-1] = (self.chat_history[-1][0], answer[: i + 1]) + yield + + async def answer4(self): + # Our chatbot has some brains now! + client = openai.AsyncOpenAI(api_key=OPENAI_API_KEY) + session = await client.chat.completions.create( + model="gpt-4o-mini", + messages=[{"role": "user", "content": self.question}], + stop=None, + temperature=0.7, + stream=True, + ) + + # Add to the answer as the chatbot responds. + answer = "" + self.chat_history.append((self.question, answer)) + + # Clear the question input. + self.question = "" + # Yield here to clear the frontend input before continuing. + yield + + async for item in session: + if hasattr(item.choices[0].delta, "content"): + if item.choices[0].delta.content is None: + # presence of 'None' indicates the end of the response + break + answer += item.choices[0].delta.content + self.chat_history[-1] = (self.chat_history[-1][0], answer) + yield diff --git a/docs/getting_started/chatapp_tutorial.md b/docs/getting_started/chatapp_tutorial.md new file mode 100644 index 00000000000..fc2c0e36fd2 --- /dev/null +++ b/docs/getting_started/chatapp_tutorial.md @@ -0,0 +1,807 @@ +```python exec +import os + +import reflex as rx +import openai + +from pcweb.constants import CHAT_APP_URL +from pcweb import constants +from pcweb.pages.docs import components +from pcweb.pages.docs import styling +from pcweb.pages.docs import library +from pcweb.pages.docs import events +from pcweb.pages.docs import state +from pcweb.pages.docs import hosting + +from docs.getting_started import chat_tutorial_style as style +from docs.getting_started.chat_tutorial_utils import ChatappState + +# If it's in environment, no need to hardcode (openai SDK will pick it up) +if "OPENAI_API_KEY" not in os.environ: + openai.api_key = "YOUR_OPENAI_KEY" + +``` + +# Interactive Tutorial: AI Chat App + +This tutorial will walk you through building an AI chat app with Reflex. This app is fairly complex, but don't worry - we'll break it down into small steps. + +You can find the full source code for this app [here]({CHAT_APP_URL}). + +### What You'll Learn + +In this tutorial you'll learn how to: + +1. Install `reflex` and set up your development environment. +2. Create components to define and style your UI. +3. Use state to add interactivity to your app. +4. Deploy your app to share with others. + + + + +## Setting up Your Project + +```md video https://youtube.com/embed/ITOZkzjtjUA?start=175&end=445 +# Video: Example of Setting up the Chat App +``` + +We will start by creating a new project and setting up our development environment. First, create a new directory for your project and navigate to it. + +```bash +~ $ mkdir chatapp +~ $ cd chatapp +``` + +Next, we will create a virtual environment for our project. This is optional, but recommended. In this example, we will use [venv]({constants.VENV_URL}) to create our virtual environment. + +```bash +chatapp $ python3 -m venv venv +$ source venv/bin/activate +``` + +Now, we will install Reflex and create a new project. This will create a new directory structure in our project directory. + +> **Note:** When prompted to select a template, choose option 0 for a blank project. + + +```bash +chatapp $ pip install reflex +chatapp $ reflex init +────────────────────────────────── Initializing chatapp ─────────────────────────────────── +Success: Initialized chatapp +chatapp $ ls +assets chatapp rxconfig.py venv +``` + +```python eval +rx.box(height="20px") +``` +You can run the template app to make sure everything is working. + +```bash +chatapp $ reflex run +─────────────────────────────────── Starting Reflex App ─────────────────────────────────── +Compiling: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 1/1 0:00:00 +─────────────────────────────────────── App Running ─────────────────────────────────────── +App running at: http://localhost:3000 +``` + +```python eval +rx.box(height="20px") +``` + +You should see your app running at [http://localhost:3000]({"http://localhost:3000"}). + +Reflex also starts the backend server which handles all the state management and communication with the frontend. You can test the backend server is running by navigating to [http://localhost:8000/ping]({"http://localhost:8000/ping"}). + +Now that we have our project set up, in the next section we will start building our app! + + + + +## Basic Frontend + +Let's start with defining the frontend for our chat app. In Reflex, the frontend can be broken down into independent, reusable components. See the [components docs]({components.props.path}) for more information. + +### Display A Question And Answer + +We will modify the `index` function in `chatapp/chatapp.py` file to return a component that displays a single question and answer. + +```python demo box +rx.container( + rx.box( + "What is Reflex?", + # The user's question is on the right. + text_align="right", + ), + rx.box( + "A way to build web apps in pure Python!", + # The answer is on the left. + text_align="left", + ), +) +``` + +```python +# chatapp.py + +import reflex as rx + +def index() -> rx.Component: + return rx.container( + rx.box( + "What is Reflex?", + # The user's question is on the right. + text_align="right", + ), + rx.box( + "A way to build web apps in pure Python!", + # The answer is on the left. + text_align="left", + ), + ) + + +# Add state and page to the app. +app = rx.App() +app.add_page(index) +``` + +Components can be nested inside each other to create complex layouts. Here we create a parent container that contains two boxes for the question and answer. + +We also add some basic styling to the components. Components take in keyword arguments, called [props]({components.props.path}), that modify the appearance and functionality of the component. We use the `text_align` prop to align the text to the left and right. + +### Reusing Components + +Now that we have a component that displays a single question and answer, we can reuse it to display multiple questions and answers. We will move the component to a separate function `question_answer` and call it from the `index` function. + +```python exec +def qa(question: str, answer: str) -> rx.Component: + return rx.box( + rx.box(question, text_align="right"), + rx.box(answer, text_align="left"), + margin_y="1em", + ) + + +qa_pairs = [ + ("What is Reflex?", "A way to build web apps in pure Python!"), + ( + "What can I make with it?", + "Anything from a simple website to a complex web app!", + ), +] + + +def chat() -> rx.Component: + qa_pairs = [ + ("What is Reflex?", "A way to build web apps in pure Python!"), + ( + "What can I make with it?", + "Anything from a simple website to a complex web app!", + ), + ] + return rx.box(*[qa(question, answer) for question, answer in qa_pairs]) +``` + +```python demo box +rx.container(chat()) +``` + +```python +def qa(question: str, answer: str) -> rx.Component: + return rx.box( + rx.box(question, text_align="right"), + rx.box(answer, text_align="left"), + margin_y="1em", + ) + + +def chat() -> rx.Component: + qa_pairs = [ + ("What is Reflex?", "A way to build web apps in pure Python!"), + ("What can I make with it?", "Anything from a simple website to a complex web app!"), + ] + return rx.box(*[qa(question, answer) for question, answer in qa_pairs]) + + +def index() -> rx.Component: + return rx.container(chat()) +``` + +### Chat Input + +Now we want a way for the user to input a question. For this, we will use the [input]({library.forms.input.path}) component to have the user add text and a [button]({library.forms.button.path}) component to submit the question. + +```python exec +def action_bar() -> rx.Component: + return rx.hstack( + rx.input(placeholder="Ask a question"), + rx.button("Ask"), + ) +``` + +```python demo box +rx.container( + chat(), + action_bar(), +) +``` + +```python +def action_bar() -> rx.Component: + return rx.hstack( + rx.input(placeholder="Ask a question"), + rx.button("Ask"), + ) + +def index() -> rx.Component: + return rx.container( + chat(), + action_bar(), + ) +``` + +### Styling + +Let's add some styling to the app. More information on styling can be found in the [styling docs]({styling.overview.path}). To keep our code clean, we will move the styling to a separate file `chatapp/style.py`. + +```python +# style.py +import reflex as rx + +# Common styles for questions and answers. +shadow = "rgba(0, 0, 0, 0.15) 0px 2px 8px" +chat_margin = "20%" +message_style = dict( + padding="1em", + border_radius="5px", + margin_y="0.5em", + box_shadow=shadow, + max_width="30em", + display="inline-block", +) + +# Set specific styles for questions and answers. +question_style = message_style | dict(margin_left=chat_margin, background_color=rx.color("gray", 4)) +answer_style = message_style | dict(margin_right=chat_margin, background_color=rx.color("accent", 8)) + +# Styles for the action bar. +input_style = dict( + border_width="1px", padding="0.5em", box_shadow=shadow,width="350px" +) +button_style = dict(background_color=rx.color("accent", 10), box_shadow=shadow) +``` + +We will import the styles in `chatapp.py` and use them in the components. At this point, the app should look like this: + +```python exec +def qa4(question: str, answer: str) -> rx.Component: + return rx.box( + rx.box(rx.text(question, style=style.question_style), text_align="right"), + rx.box(rx.text(answer, style=style.answer_style), text_align="left"), + margin_y="1em", + width="100%", + ) + + +def chat4() -> rx.Component: + qa_pairs = [ + ("What is Reflex?", "A way to build web apps in pure Python!"), + ( + "What can I make with it?", + "Anything from a simple website to a complex web app!", + ), + ] + return rx.box(*[qa4(question, answer) for question, answer in qa_pairs]) + + +def action_bar4() -> rx.Component: + return rx.hstack( + rx.input(placeholder="Ask a question", style=style.input_style), + rx.button("Ask", style=style.button_style), + ) +``` + +```python demo box +rx.center( + rx.vstack( + chat4(), + action_bar4(), + align="center", + ) +) +``` + +```python +# chatapp.py +import reflex as rx + +from chatapp import style + + +def qa(question: str, answer: str) -> rx.Component: + return rx.box( + rx.box(rx.text(question, style=style.question_style), text_align="right"), + rx.box(rx.text(answer, style=style.answer_style), text_align="left"), + margin_y="1em", + width="100%", + ) + +def chat() -> rx.Component: + qa_pairs = [ + ("What is Reflex?", "A way to build web apps in pure Python!"), + ("What can I make with it?", "Anything from a simple website to a complex web app!"), + ] + return rx.box(*[qa(question, answer) for question, answer in qa_pairs]) + + +def action_bar() -> rx.Component: + return rx.hstack( + rx.input(placeholder="Ask a question", style=style.input_style), + rx.button("Ask", style=style.button_style), + ) + + +def index() -> rx.Component: + return rx.center( + rx.vstack( + chat(), + action_bar(), + align="center", + ) + ) + + +app = rx.App() +app.add_page(index) +``` + +The app is looking good, but it's not very useful yet! In the next section, we will add some functionality to the app. + + + + + + +## State + +Now let’s make the chat app interactive by adding state. The state is where we define all the variables that can change in the app and all the functions that can modify them. You can learn more about state in the [state docs]({state.overview.path}). + +### Defining State + +We will create a new file called `state.py` in the `chatapp` directory. Our state will keep track of the current question being asked and the chat history. We will also define an event handler `answer` which will process the current question and add the answer to the chat history. + +```python +# state.py +import reflex as rx + + +class State(rx.State): + + # The current question being asked. + question: str + + # Keep track of the chat history as a list of (question, answer) tuples. + chat_history: list[tuple[str, str]] + + @rx.event + def answer(self): + # Our chatbot is not very smart right now... + answer = "I don't know!" + self.chat_history.append((self.question, answer)) + +``` + +### Binding State to Components + +Now we can import the state in `chatapp.py` and reference it in our frontend components. We will modify the `chat` component to use the state instead of the current fixed questions and answers. + +```python exec +def qa(question: str, answer: str) -> rx.Component: + return rx.box( + rx.box(rx.text(question, style=style.question_style), text_align="right"), + rx.box(rx.text(answer, style=style.answer_style), text_align="left"), + margin_y="1em", + width="100%", + ) + + +def chat1() -> rx.Component: + return rx.box( + rx.foreach( + ChatappState.chat_history, lambda messages: qa(messages[0], messages[1]) + ) + ) + + +def action_bar1() -> rx.Component: + return rx.hstack( + rx.input( + placeholder="Ask a question", + on_change=ChatappState.set_question, + style=style.input_style, + ), + rx.button("Ask", on_click=ChatappState.answer, style=style.button_style), + ) +``` + +```python demo box +rx.container( + chat1(), + action_bar1(), +) +``` + +```python +# chatapp.py +from chatapp.state import State + + +def chat() -> rx.Component: + return rx.box( + rx.foreach( + State.chat_history, + lambda messages: qa(messages[0], messages[1]) + ) + ) + + + +def action_bar() -> rx.Component: + return rx.hstack( + rx.input(placeholder="Ask a question", on_change=State.set_question1, style=style.input_style), + rx.button("Ask", on_click=State.answer, style=style.button_style), + ) +``` + +Normal Python `for` loops don't work for iterating over state vars because these values can change and aren't known at compile time. Instead, we use the [foreach]({library.dynamic_rendering.foreach.path}) component to iterate over the chat history. + +We also bind the input's `on_change` event to the `set_question` event handler, which will update the `question` state var while the user types in the input. We bind the button's `on_click` event to the `answer` event handler, which will process the question and add the answer to the chat history. The `set_question` event handler is a built-in implicitly defined event handler. Every base var has one. Learn more in the [events docs]({events.setters.path}) under the Setters section. + +### Clearing the Input + +Currently the input doesn't clear after the user clicks the button. We can fix this by binding the value of the input to `question`, with `value=State.question`, and clear it when we run the event handler for `answer`, with `self.question = ''`. + +```python exec +def action_bar2() -> rx.Component: + return rx.hstack( + rx.input( + value=ChatappState.question, + placeholder="Ask a question", + on_change=ChatappState.set_question, + style=style.input_style, + ), + rx.button("Ask", on_click=ChatappState.answer2, style=style.button_style), + ) +``` + +```python demo box +rx.container( + chat1(), + action_bar2(), +) +``` + +```python +# chatapp.py +def action_bar() -> rx.Component: + return rx.hstack( + rx.input( + value=State.question, + placeholder="Ask a question", + on_change=State.set_question2, + style=style.input_style), + rx.button("Ask", on_click=State.answer, style=style.button_style), + ) +``` + +```python +# state.py +@rx.event +def answer(self): + # Our chatbot is not very smart right now... + answer = "I don't know!" + self.chat_history.append((self.question, answer)) + self.question = "" +``` + +### Streaming Text + +Normally state updates are sent to the frontend when an event handler returns. However, we want to stream the text from the chatbot as it is generated. We can do this by yielding from the event handler. See the [yield events docs]({events.yield_events.path}) for more info. + +```python exec +def action_bar3() -> rx.Component: + return rx.hstack( + rx.input( + value=ChatappState.question, + placeholder="Ask a question", + on_change=ChatappState.set_question, + style=style.input_style, + ), + rx.button("Ask", on_click=ChatappState.answer3, style=style.button_style), + ) +``` + +```python demo box +rx.container( + chat1(), + action_bar3(), +) +``` + +```python +# state.py +import asyncio + +async def answer(self): + # Our chatbot is not very smart right now... + answer = "I don't know!" + self.chat_history.append((self.question, "")) + + # Clear the question input. + self.question = "" + # Yield here to clear the frontend input before continuing. + yield + + for i in range(len(answer)): + # Pause to show the streaming effect. + await asyncio.sleep(0.1) + # Add one letter at a time to the output. + self.chat_history[-1] = (self.chat_history[-1][0], answer[:i + 1]) + yield +``` + +In the next section, we will finish our chatbot by adding AI! + + + +## Final App + +We will use OpenAI's API to give our chatbot some intelligence. + +### Configure the OpenAI API Key + +First, ensure you have an active OpenAI subscription. +Next, install the latest openai package: +```bash +pip install --upgrade openai +``` + +Direct Configuration of API in Code + +Update the state.py file to include your API key directly: + +```python +# state.py +import os +from openai import AsyncOpenAI + +import reflex as rx + +# Initialize the OpenAI client +client = AsyncOpenAI(api_key="YOUR_OPENAI_API_KEY") # Replace with your actual API key + +``` + +### Using the API + +Making your chatbot intelligent requires connecting to a language model API. This section explains how to integrate with OpenAI's API to power your chatbot's responses. + +1. First, the user types a prompt that is updated via the `on_change` event handler. +2. Next, when a prompt is ready, the user can choose to submit it by clicking the `Ask` button which in turn triggers the `State.answer` method inside our `state.py` file. +3. Finally, if the method is triggered, the `prompt` is sent via a request to OpenAI client and returns an answer that we can trim and use to update the chat history! + + +```python +# chatapp.py +def action_bar() -> rx.Component: + return rx.hstack( + rx.input( + value=State.question, + placeholder="Ask a question", + # on_change event updates the input as the user types a prompt. + on_change=State.set_question3, + style=style.input_style), + + # on_click event triggers the API to send the prompt to OpenAI. + rx.button("Ask", on_click=State.answer, style=style.button_style), + ) +``` + +```python +# state.py +import os + +from openai import AsyncOpenAI + +@rx.event +async def answer(self): + # Our chatbot has some brains now! + client = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"]) + + session = await client.chat.completions.create( + model="gpt-4o-mini", + messages=[ + \{"role": "user", "content": self.question} + ], + stop=None, + temperature=0.7, + stream=True, + ) + + # Add to the answer as the chatbot responds. + answer = "" + self.chat_history.append((self.question, answer)) + + # Clear the question input. + self.question = "" + # Yield here to clear the frontend input before continuing. + yield + + async for item in session: + if hasattr(item.choices[0].delta, "content"): + if item.choices[0].delta.content is None: + # presence of 'None' indicates the end of the response + break + answer += item.choices[0].delta.content + self.chat_history[-1] = (self.chat_history[-1][0], answer) + yield +``` + +Finally, we have our chatbot! + +### Final Code + +This application is a simple, interactive chatbot built with Reflex that leverages OpenAI's API for intelligent responses. The chatbot features a clean interface with streaming responses for a natural conversation experience. + +Key Features + +1. Real-time streaming responses +2. Clean, visually distinct chat bubbles for questions and answers +3. Simple input interface with question field and submit button + +Project Structure + +Below is the full chatbot code with a commented title that corresponds to the filename. + +```text +chatapp/ +├── chatapp.py # UI components and app setup +├── state.py # State management and API integration +└── style.py # Styling definitions +``` + +The `chatapp.py` file: + +```python +import reflex as rx +from chatapp import style +from chatapp.state import State + +def qa(question: str, answer: str) -> rx.Component: + return rx.box( + rx.box(rx.text(question, style=style.question_style), text_align="right"), + rx.box(rx.text(answer, style=style.answer_style), text_align="left"), + margin_y="1em", + ) + +def chat() -> rx.Component: + return rx.box( + rx.foreach( + State.chat_history, + lambda messages: qa(messages[0], messages[1]), + ) + ) + +def action_bar() -> rx.Component: + return rx.hstack( + rx.input( + value=State.question, + placeholder="Ask a question", + on_change=State.set_question, + style=style.input_style, + ), + rx.button( + "Ask", + on_click=State.answer, + style=style.button_style, + ), + ) + +def index() -> rx.Component: + return rx.center( + rx.vstack( + chat(), + action_bar(), + align="center", + ) + ) + +app = rx.App() +app.add_page(index) +``` + + +The `state.py` file: + +```python +import os +from openai import AsyncOpenAI +import reflex as rx + +class State(rx.State): + question: str + chat_history: list[tuple[str, str]] = [] + + async def answer(self): + client = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"]) + + # Start streaming completion from OpenAI + session = await client.chat.completions.create( + model="gpt-4o-mini", + messages=[ + \{"role": "user", "content": self.question} + ], + temperature=0.7, + stream=True, + ) + + # Initialize response and update UI + answer = "" + self.chat_history.append((self.question, answer)) + self.question = "" + yield + + # Process streaming response + async for item in session: + if hasattr(item.choices[0].delta, "content"): + if item.choices[0].delta.content is None: + break + answer += item.choices[0].delta.content + self.chat_history[-1] = (self.chat_history[-1][0], answer) + yield +``` + + +The `style.py` file: + +```python +import reflex as rx + +# Common style base +shadow = "rgba(0, 0, 0, 0.15) 0px 2px 8px" +chat_margin = "20%" +message_style = dict( + padding="1em", + border_radius="5px", + margin_y="0.5em", + box_shadow=shadow, + max_width="30em", + display="inline-block", +) + +# Styles for questions and answers +question_style = message_style | dict( + margin_left=chat_margin, + background_color=rx.color("gray", 4), +) +answer_style = message_style | dict( + margin_right=chat_margin, + background_color=rx.color("accent", 8), +) + +# Styles for input elements +input_style = dict(border_width="1px", padding="0.5em", box_shadow=shadow, width="350px") +button_style = dict(background_color=rx.color("accent", 10), box_shadow=shadow) +``` + + +### Next Steps + +Congratulations! You have built your first chatbot. From here, you can read through the rest of the documentations to learn about Reflex in more detail. The best way to learn is to build something, so try to build your own app using this as a starting point! + +### One More Thing + +With our hosting service, you can deploy this app with a single command within minutes. Check out our [Hosting Quick Start]({hosting.deploy_quick_start.path}). diff --git a/docs/getting_started/dashboard_tutorial.md b/docs/getting_started/dashboard_tutorial.md new file mode 100644 index 00000000000..7866cd40912 --- /dev/null +++ b/docs/getting_started/dashboard_tutorial.md @@ -0,0 +1,1840 @@ +```python exec +import reflex as rx +from pcweb.pages import docs +``` + +# Tutorial: Data Dashboard + +During this tutorial you will build a small data dashboard, where you can input data and it will be rendered in table and a graph. This tutorial does not assume any existing Reflex knowledge, but we do recommend checking out the quick [Basics Guide]({docs.getting_started.basics.path}) first. + +The techniques you’ll learn in the tutorial are fundamental to building any Reflex app, and fully understanding it will give you a deep understanding of Reflex. + + +This tutorial is divided into several sections: + +- **Setup for the Tutorial**: A starting point to follow the tutorial +- **Overview**: The fundamentals of Reflex UI (components and props) +- **Showing Dynamic Data**: How to use State to render data that will change in your app. +- **Add Data to your App**: Using a Form to let a user add data to your app and introduce event handlers. +- **Plotting Data in a Graph**: How to use Reflex's graphing components. +- **Final Cleanup and Conclusion**: How to further customize your app and add some extra styling to it. + +### What are you building? + +In this tutorial, you are building an interactive data dashboard with Reflex. + +You can see what the finished app and code will look like here: + + +```python exec +from collections import Counter + +class User(rx.Base): + """The user model.""" + + name: str + email: str + gender: str + +class State5(rx.State): + users: list[User] = [ + User(name="Danilo Sousa", email="danilo@example.com", gender="Male"), + User(name="Zahra Ambessa", email="zahra@example.com", gender="Female"), + ] + users_for_graph: list[dict] = [] + + def add_user(self, form_data: dict): + self.users.append(User(**form_data)) + self.transform_data() + + return rx.toast.info( + f"User {form_data['name']} has been added.", + position="bottom-right", + ) + + def transform_data(self): + """Transform user gender group data into a format suitable for visualization in graphs.""" + # Count users of each gender group + gender_counts = Counter(user.gender for user in self.users) + + # Transform into list of dict so it can be used in the graph + self.users_for_graph = [ + { + "name": gender_group, + "value": count + } + for gender_group, count in gender_counts.items() + ] + + +def show_user5(user: User): + """Show a user in a table row.""" + return rx.table.row( + rx.table.cell(user.name), + rx.table.cell(user.email), + rx.table.cell(user.gender), + style={"_hover": {"bg": rx.color("gray", 3)}}, + align="center", + ) + +def add_customer_button5() -> rx.Component: + return rx.dialog.root( + rx.dialog.trigger( + rx.button( + rx.icon("plus", size=26), + rx.text("Add User", size="4"), + ), + ), + rx.dialog.content( + rx.dialog.title( + "Add New User", + ), + rx.dialog.description( + "Fill the form with the user's info", + ), + rx.form( + rx.flex( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="male", + name="gender", + ), + rx.flex( + rx.dialog.close( + rx.button( + "Cancel", + variant="soft", + color_scheme="gray", + ), + ), + rx.dialog.close( + rx.button( + "Submit", type="submit" + ), + ), + spacing="3", + justify="end", + ), + direction="column", + spacing="4", + ), + on_submit=State5.add_user, + reset_on_submit=False, + ), + max_width="450px", + ), + ) + +def graph5(): + return rx.recharts.bar_chart( + rx.recharts.bar( + data_key="value", + stroke=rx.color("accent", 9), + fill=rx.color("accent", 8), + ), + rx.recharts.x_axis(data_key="name"), + rx.recharts.y_axis(), + data=State5.users_for_graph, + width="100%", + height=250, + ) +``` + +```python eval +rx.vstack( + add_customer_button5(), + rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State5.users, show_user5 + ), + ), + variant="surface", + size="3", + width="100%", + ), + graph5(), + align="center", + width="100%", + on_mouse_enter=State5.transform_data, + border_width="2px", + border_radius="10px", + padding="1em", + ) +``` + +```python +import reflex as rx +from collections import Counter + +class User(rx.Base): + """The user model.""" + + name: str + email: str + gender: str + + +class State(rx.State): + users: list[User] = [ + User(name="Danilo Sousa", email="danilo@example.com", gender="Male"), + User(name="Zahra Ambessa", email="zahra@example.com", gender="Female"), + ] + users_for_graph: list[dict] = [] + + def add_user(self, form_data: dict): + self.users.append(User(**form_data)) + self.transform_data() + + def transform_data(self): + """Transform user gender group data into a format suitable for visualization in graphs.""" + # Count users of each gender group + gender_counts = Counter(user.gender for user in self.users) + + # Transform into list of dict so it can be used in the graph + self.users_for_graph = [ + { + "name": gender_group, + "value": count + } + for gender_group, count in gender_counts.items() + ] + + +def show_user(user: User): + """Show a user in a table row.""" + return rx.table.row( + rx.table.cell(user.name), + rx.table.cell(user.email), + rx.table.cell(user.gender), + style={ + "_hover": { + "bg": rx.color("gray", 3) + } + }, + align="center", + ) + +def add_customer_button() -> rx.Component: + return rx.dialog.root( + rx.dialog.trigger( + rx.button( + rx.icon("plus", size=26), + rx.text("Add User", size="4"), + ), + ), + rx.dialog.content( + rx.dialog.title( + "Add New User", + ), + rx.dialog.description( + "Fill the form with the user's info", + ), + rx.form( + rx.flex( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="male", + name="gender", + ), + rx.flex( + rx.dialog.close( + rx.button( + "Cancel", + variant="soft", + color_scheme="gray", + ), + ), + rx.dialog.close( + rx.button( + "Submit", type="submit" + ), + ), + spacing="3", + justify="end", + ), + direction="column", + spacing="4", + ), + on_submit=State.add_user, + reset_on_submit=False, + ), + max_width="450px", + ), + ) + +def graph(): + return rx.recharts.bar_chart( + rx.recharts.bar( + data_key="value", + stroke=rx.color("accent", 9), + fill=rx.color("accent", 8), + ), + rx.recharts.x_axis(data_key="name"), + rx.recharts.y_axis(), + data=State.users_for_graph, + width="100%", + height=250, + ) + +def index() -> rx.Component: + return rx.vstack( + add_customer_button(), + rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State.users, show_user + ), + ), + variant="surface", + size="3", + width="100%", + ), + graph(), + align="center", + width="100%", + ) + + +app = rx.App( + theme=rx.theme( + radius="full", accent_color="grass" + ), +) + +app.add_page( + index, + title="Customer Data App", + description="A simple app to manage customer data.", + on_load=State.transform_data, +) +``` + +Don't worry if you don't understand the code above, in this tutorial we are going to walk you through the whole thing step by step. + + +## Setup for the tutorial + +Check out the [installation docs]({docs.getting_started.installation.path}) to get Reflex set up on your machine. Follow these to create a folder called `dashboard_tutorial`, which you will `cd` into and `pip install reflex`. + +We will choose template `0` when we run `reflex init` to get the blank template. Finally run `reflex run` to start the app and confirm everything is set up correctly. + + +## Overview + +Now that you’re set up, let’s get an overview of Reflex! + +### Inspecting the starter code + +Within our `dashboard_tutorial` folder we just `cd`'d into, there is a `rxconfig.py` file that contains the configuration for our Reflex app. (Check out the [config docs]({docs.advanced_onboarding.configuration.path}) for more information) + +There is also an `assets` folder where static files such as images and stylesheets can be placed to be referenced within your app. ([asset docs]({docs.assets.overview.path}) for more information) + +Most importantly there is a folder also called `dashboard_tutorial` which contains all the code for your app. Inside of this folder there is a file named `dashboard_tutorial.py`. To begin this tutorial we will delete all the code in this file so that we can start from scratch and explain every step as we go. + +The first thing we need to do is import `reflex`. Once we have done this we can create a component, which is a reusable piece of user interface code. Components are used to render, manage, and update the UI elements in your application. + +Let's look at the example below. Here we have a function called `index` that returns a `text` component (an in-built Reflex UI component) that displays the text "Hello World!". + +Next we define our app using `app = rx.App()` and add the component we just defined (`index`) to a page using `app.add_page(index)`. The function name (in this example `index`) which defines the component, must be what we pass into the `add_page`. The definition of the app and adding a component to a page are required for every Reflex app. + +```python +import reflex as rx + + +def index() -> rx.Component: + return rx.text("Hello World!") + +app = rx.App() +app.add_page(index) +``` + +This code will render a page with the text "Hello World!" when you run your app like below: + +```python eval +rx.text("Hello World!", + border_width="2px", + border_radius="10px", + padding="1em" +) +``` + +```md alert info +For the rest of the tutorial the `app=rx.App()` and `app.add_page` will be implied and not shown in the code snippets. +``` + +### Creating a table + +Let's create a new component that will render a table. We will use the `table` component to do this. The `table` component has a `root`, which takes in a `header` and a `body`, which in turn take in `row` components. The `row` component takes in `cell` components which are the actual data that will be displayed in the table. + +```python eval +rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.table.row( + rx.table.cell("Danilo Sousa"), + rx.table.cell("danilo@example.com"), + rx.table.cell("Male"), + ), + rx.table.row( + rx.table.cell("Zahra Ambessa"), + rx.table.cell("zahra@example.com"), + rx.table.cell("Female"), + ), + ), + border_width="2px", + border_radius="10px", + padding="1em", + ) +``` + +```python +def index() -> rx.Component: + return rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.table.row( + rx.table.cell("Danilo Sousa"), + rx.table.cell("danilo@example.com"), + rx.table.cell("Male"), + ), + rx.table.row( + rx.table.cell("Zahra Ambessa"), + rx.table.cell("zahra@example.com"), + rx.table.cell("Female"), + ), + ), + ) +``` + +Components in Reflex have `props`, which can be used to customize the component and are passed in as keyword arguments to the component function. + +The `rx.table.root` component has for example the `variant` and `size` props, which customize the table as seen below. + +```python eval +rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.table.row( + rx.table.cell("Danilo Sousa"), + rx.table.cell("danilo@example.com"), + rx.table.cell("Male"), + ), + rx.table.row( + rx.table.cell("Zahra Ambessa"), + rx.table.cell("zahra@example.com"), + rx.table.cell("Female"), + ), + ), + variant="surface", + size="3", + border_width="2px", + border_radius="10px", + padding="1em", + ) +``` + +```python +def index() -> rx.Component: + return rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.table.row( + rx.table.cell("Danilo Sousa"), + rx.table.cell("danilo@example.com"), + rx.table.cell("Male"), + ), + rx.table.row( + rx.table.cell("Zahra Ambessa"), + rx.table.cell("zahra@example.com"), + rx.table.cell("Female"), + ), + ), + variant="surface", + size="3", + ) +``` + +## Showing dynamic data (State) + +Up until this point all the data we are showing in the app is static. This is not very useful for a data dashboard. We need to be able to show dynamic data that can be added to and updated. + +This is where `State` comes in. `State` is a Python class that stores variables that can change when the app is running, as well as the functions that can change those variables. + +To define a state class, subclass `rx.State` and define fields that store the state of your app. The state variables (vars) should have a type annotation, and can be initialized with a default value. Check out the [basics]({docs.getting_started.basics.path}) section for a simple example of how state works. + + +In the example below we define a `State` class called `State` that has a variable called `users` that is a list of lists of strings. Each list in the `users` list represents a user and contains their name, email and gender. + +```python +class State(rx.State): + users: list[list[str]] = [ + ["Danilo Sousa", "danilo@example.com", "Male"], + ["Zahra Ambessa", "zahra@example.com", "Female"], + ] +``` + +To iterate over a state var that is a list, we use the [`rx.foreach`]({docs.components.rendering_iterables.path}) function to render a list of components. The `rx.foreach` component takes an `iterable` (list, tuple or dict) and a `function` that renders each item in the `iterable`. + +```md alert info +# Why can we not just splat this in a `for` loop +You might be wondering why a `foreach` is even needed to render this state variable and why we cannot just splat a `for` loop. Check out this [documentation]({docs.getting_started.basics.path}#compile-time-vs.-runtime-(important)) to learn why. +``` + +Here the render function is `show_user` which takes in a single user and returns a `table.row` component that displays the users name, email and gender. + +```python exec +class State1(rx.State): + users: list[list[str]] = [ + ["Danilo Sousa", "danilo@example.com", "Male"], + ["Zahra Ambessa", "zahra@example.com", "Female"], + ] + +def show_user1(person: list): + """Show a person in a table row.""" + return rx.table.row( + rx.table.cell(person[0]), + rx.table.cell(person[1]), + rx.table.cell(person[2]), + ) +``` + +```python eval +rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State1.users, show_user1 + ), + ), + variant="surface", + size="3", + border_width="2px", + border_radius="10px", + padding="1em", +) +``` + + +```python +class State(rx.State): + users: list[list[str]] = [ + ["Danilo Sousa", "danilo@example.com", "Male"], + ["Zahra Ambessa", "zahra@example.com", "Female"], + ] + +def show_user(person: list): + """Show a person in a table row.""" + return rx.table.row( + rx.table.cell(person[0]), + rx.table.cell(person[1]), + rx.table.cell(person[2]), + ) + +def index() -> rx.Component: + return rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State.users, show_user + ), + ), + variant="surface", + size="3", +) +``` + +As you can see the output above looks the same as before, except now the data is no longer static and can change with user input to the app. + +### Using a proper class structure for our data + +So far our data has been defined in a list of lists, where the data is accessed by index i.e. `user[0]`, `user[1]`. This is not very maintainable as our app gets bigger. + +A better way to structure our data in Reflex is to use a class to represent a user. This way we can access the data using attributes i.e. `user.name`, `user.email`. + +In Reflex when we create these classes to showcase our data, the class must inherit from `rx.Base`. + +`rx.Base` is also necessary if we want to have a state var that is an iterable with different types. For example if we wanted to have `age` as an `int` we would have to use `rx.base` as we could not do this with a state var defined as `list[list[str]]`. + +The `show_user` render function is also updated to access the data by named attributes, instead of indexing. + +```python exec +class User(rx.Base): + """The user model.""" + + name: str + email: str + gender: str + + +class State2(rx.State): + users: list[User] = [ + User(name="Danilo Sousa", email="danilo@example.com", gender="Male"), + User(name="Zahra Ambessa", email="zahra@example.com", gender="Female"), + ] + +def show_user2(user: User): + """Show a person in a table row.""" + return rx.table.row( + rx.table.cell(user.name), + rx.table.cell(user.email), + rx.table.cell(user.gender), + ) +``` + +```python eval +rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State2.users, show_user2 + ), + ), + variant="surface", + size="3", + border_width="2px", + border_radius="10px", + padding="1em", +) +``` + + +```python +class User(rx.Base): + """The user model.""" + + name: str + email: str + gender: str + + +class State(rx.State): + users: list[User] = [ + User(name="Danilo Sousa", email="danilo@example.com", gender="Male"), + User(name="Zahra Ambessa", email="zahra@example.com", gender="Female"), + ] + +def show_user(user: User): + """Show a person in a table row.""" + return rx.table.row( + rx.table.cell(user.name), + rx.table.cell(user.email), + rx.table.cell(user.gender), + ) + +def index() -> rx.Component: + return rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State.users, show_user + ), + ), + variant="surface", + size="3", +) +``` + + +Next let's add a form to the app so we can add new users to the table. + + +## Using a Form to Add Data + +We build a form using `rx.form`, which takes several components such as `rx.input` and `rx.select`, which represent the form fields that allow you to add information to submit with the form. Check out the [form]({docs.library.forms.form.path}) docs for more information on form components. + +The `rx.input` component takes in several props. The `placeholder` prop is the text that is displayed in the input field when it is empty. The `name` prop is the name of the input field, which gets passed through in the dictionary when the form is submitted. The `required` prop is a boolean that determines if the input field is required. + +The `rx.select` component takes in a list of options that are displayed in the dropdown. The other props used here are identical to the `rx.input` component. + +```python demo +rx.form( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="Male", + name="gender", + ), +) +``` + +This form is all very compact as you can see from the example, so we need to add some styling to make it look better. We can do this by adding a `vstack` component around the form fields. The `vstack` component stacks the form fields vertically. Check out the [layout]({docs.styling.layout.path}) docs for more information on how to layout your app. + + +```python demo +rx.form( + rx.vstack( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="Male", + name="gender", + ), + ), +) +``` + +Now you have probably realised that we have all the form fields, but we have no way to submit the form. We can add a submit button to the form by adding a `rx.button` component to the `vstack` component. The `rx.button` component takes in the text that is displayed on the button and the `type` prop which is the type of button. The `type` prop is set to `submit` so that the form is submitted when the button is clicked. + +In addition to this we need a way to update the `users` state variable when the form is submitted. All state changes are handled through functions in the state class, called [event handlers]({docs.events.events_overview.path}). + +Components have special props called event triggers, such as `on_submit`, that can be used to make components interactive. Event triggers connect components to event handlers, which update the state. Different event triggers expect the event handler that you hook them up to, to take in different arguments (and some do not take in any arguments). + +The `on_submit` event trigger of `rx.form` is hooked up to the `add_user` event handler that is defined in the `State` class. This event trigger expects to pass a `dict`, containing the form data, to the event handler that it is hooked up to. The `add_user` event handler takes in the form data as a dictionary and appends it to the `users` state variable. + + +```python +class State(rx.State): + + ... + + def add_user(self, form_data: dict): + self.users.append(User(**form_data)) + + +def form(): + return rx.form( + rx.vstack( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="Male", + name="gender", + ), + rx.button("Submit", type="submit"), + ), + on_submit=State.add_user, + reset_on_submit=True, + ) +``` + +Finally we must add the new `form()` component we have defined to the `index()` function so that the form is rendered on the page. + +Below is the full code for the app so far. If you try this form out you will see that you can add new users to the table by filling out the form and clicking the submit button. The form data will also appear as a toast (a small window in the corner of the page) on the screen when submitted. + + +```python exec +class State3(rx.State): + users: list[User] = [ + User(name="Danilo Sousa", email="danilo@example.com", gender="Male"), + User(name="Zahra Ambessa", email="zahra@example.com", gender="Female"), + ] + + def add_user(self, form_data: dict): + self.users.append(User(**form_data)) + + + return rx.toast.info( + f"User has been added: {form_data}.", + position="bottom-right", + ) + +def show_user(user: User): + """Show a person in a table row.""" + return rx.table.row( + rx.table.cell(user.name), + rx.table.cell(user.email), + rx.table.cell(user.gender), + ) + +def form(): + return rx.form( + rx.vstack( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="Male", + name="gender", + ), + rx.button("Submit", type="submit"), + ), + on_submit=State3.add_user, + reset_on_submit=True, + ) +``` + +```python eval +rx.vstack( + form(), + rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State3.users, show_user + ), + ), + variant="surface", + size="3", + ), + border_width="2px", + border_radius="10px", + padding="1em", +) +``` + +```python +class State(rx.State): + users: list[User] = [ + User(name="Danilo Sousa", email="danilo@example.com", gender="Male"), + User(name="Zahra Ambessa", email="zahra@example.com", gender="Female"), + ] + + def add_user(self, form_data: dict): + self.users.append(User(**form_data)) + + +def show_user(user: User): + """Show a person in a table row.""" + return rx.table.row( + rx.table.cell(user.name), + rx.table.cell(user.email), + rx.table.cell(user.gender), + ) + +def form(): + return rx.form( + rx.vstack( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="Male", + name="gender", + ), + rx.button("Submit", type="submit"), + ), + on_submit=State.add_user, + reset_on_submit=True, + ) + +def index() -> rx.Component: + return rx.vstack( + form(), + rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State.users, show_user + ), + ), + variant="surface", + size="3", + ), + ) +``` + + +### Putting the Form in an Overlay + +In Reflex, we like to make the user interaction as intuitive as possible. Placing the form we just constructed in an overlay creates a focused interaction by dimming the background, and ensures a cleaner layout when you have multiple action points such as editing and deleting as well. + +We will place the form inside of a `rx.dialog` component (also called a modal). The `rx.dialog.root` contains all the parts of a dialog, and the `rx.dialog.trigger` wraps the control that will open the dialog. In our case the trigger will be an `rx.button` that says "Add User" as shown below. + +```python +rx.dialog.trigger( + rx.button( + rx.icon("plus", size=26), + rx.text("Add User", size="4"), + ), +) +``` + +After the trigger we have the `rx.dialog.content` which contains everything within our dialog, including a title, a description and our form. The first way to close the dialog is without submitting the form and the second way is to close the dialog by submitting the form as shown below. This requires two `rx.dialog.close` components within the dialog. + +```python +rx.dialog.close( + rx.button( + "Cancel", + variant="soft", + color_scheme="gray", + ), +), +rx.dialog.close( + rx.button( + "Submit", type="submit" + ), +) +``` + +The total code for the dialog with the form in it is below. + +```python demo +rx.dialog.root( + rx.dialog.trigger( + rx.button( + rx.icon("plus", size=26), + rx.text("Add User", size="4"), + ), + ), + rx.dialog.content( + rx.dialog.title( + "Add New User", + ), + rx.dialog.description( + "Fill the form with the user's info", + ), + rx.form( + # flex is similar to vstack and used to layout the form fields + rx.flex( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="Male", + name="gender", + ), + rx.flex( + rx.dialog.close( + rx.button( + "Cancel", + variant="soft", + color_scheme="gray", + ), + ), + rx.dialog.close( + rx.button( + "Submit", type="submit" + ), + ), + spacing="3", + justify="end", + ), + direction="column", + spacing="4", + ), + on_submit=State3.add_user, + reset_on_submit=False, + ), + # max_width is used to limit the width of the dialog + max_width="450px", + ), +) +``` + +At this point we have an app that allows you to add users to a table by filling out a form. The form is placed in a dialog that can be opened by clicking the "Add User" button. We change the name of the component from `form` to `add_customer_button` and update this in our `index` component. The full app so far and code are below. + + +```python exec +def add_customer_button() -> rx.Component: + return rx.dialog.root( + rx.dialog.trigger( + rx.button( + rx.icon("plus", size=26), + rx.text("Add User", size="4"), + ), + ), + rx.dialog.content( + rx.dialog.title( + "Add New User", + ), + rx.dialog.description( + "Fill the form with the user's info", + ), + rx.form( + rx.flex( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="Male", + name="gender", + ), + rx.flex( + rx.dialog.close( + rx.button( + "Cancel", + variant="soft", + color_scheme="gray", + ), + ), + rx.dialog.close( + rx.button( + "Submit", type="submit" + ), + ), + spacing="3", + justify="end", + ), + direction="column", + spacing="4", + ), + on_submit=State3.add_user, + reset_on_submit=False, + ), + max_width="450px", + ), + ) +``` + +```python eval +rx.vstack( + add_customer_button(), + rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State3.users, show_user + ), + ), + variant="surface", + size="3", + ), + border_width="2px", + border_radius="10px", + padding="1em", +) +``` + +```python +class User(rx.Base): + """The user model.""" + + name: str + email: str + gender: str + + +class State(rx.State): + users: list[User] = [ + User(name="Danilo Sousa", email="danilo@example.com", gender="Male"), + User(name="Zahra Ambessa", email="zahra@example.com", gender="Female"), + ] + + def add_user(self, form_data: dict): + self.users.append(User(**form_data)) + + + +def show_user(user: User): + """Show a person in a table row.""" + return rx.table.row( + rx.table.cell(user.name), + rx.table.cell(user.email), + rx.table.cell(user.gender), + ) + +def add_customer_button() -> rx.Component: + return rx.dialog.root( + rx.dialog.trigger( + rx.button( + rx.icon("plus", size=26), + rx.text("Add User", size="4"), + ), + ), + rx.dialog.content( + rx.dialog.title( + "Add New User", + ), + rx.dialog.description( + "Fill the form with the user's info", + ), + rx.form( + rx.flex( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="Male", + name="gender", + ), + rx.flex( + rx.dialog.close( + rx.button( + "Cancel", + variant="soft", + color_scheme="gray", + ), + ), + rx.dialog.close( + rx.button( + "Submit", type="submit" + ), + ), + spacing="3", + justify="end", + ), + direction="column", + spacing="4", + ), + on_submit=State.add_user, + reset_on_submit=False, + ), + max_width="450px", + ), + ) + +def index() -> rx.Component: + return rx.vstack( + add_customer_button(), + rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State.users, show_user + ), + ), + variant="surface", + size="3", + ), + ) +``` + + +## Plotting Data in a Graph + +The last part of this tutorial is to plot the user data in a graph. We will use Reflex's built-in graphing library recharts to plot the number of users of each gender. + +### Transforming the data for the graph + +The graphing components in Reflex expect to take in a list of dictionaries. Each dictionary represents a data point on the graph and contains the x and y values. We will create a new event handler in the state called `transform_data` to transform the user data into the format that the graphing components expect. We must also create a new state variable called `users_for_graph` to store the transformed data, which will be used to render the graph. + + +```python +from collections import Counter + +class State(rx.State): + users: list[User] = [] + users_for_graph: list[dict] = [] + + def add_user(self, form_data: dict): + self.users.append(User(**form_data)) + self.transform_data() + + def transform_data(self): + """Transform user gender group data into a format suitable for visualization in graphs.""" + # Count users of each gender group + gender_counts = Counter(user.gender for user in self.users) + + # Transform into list of dict so it can be used in the graph + self.users_for_graph = [ + { + "name": gender_group, + "value": count + } + for gender_group, count in gender_counts.items() + ] +``` + +As we can see above the `transform_data` event handler uses the `Counter` class from the `collections` module to count the number of users of each gender. We then create a list of dictionaries from this which we set to the state var `users_for_graph`. + +Finally we can see that whenever we add a new user through submitting the form and running the `add_user` event handler, we call the `transform_data` event handler to update the `users_for_graph` state variable. + +### Rendering the graph + +We use the `rx.recharts.bar_chart` component to render the graph. We pass through the state variable for our graphing data as `data=State.users_for_graph`. We also pass in a `rx.recharts.bar` component which represents the bars on the graph. The `rx.recharts.bar` component takes in the `data_key` prop which is the key in the data dictionary that represents the y value of the bar. The `stroke` and `fill` props are used to set the color of the bars. + +The `rx.recharts.bar_chart` component also takes in `rx.recharts.x_axis` and `rx.recharts.y_axis` components which represent the x and y axes of the graph. The `data_key` prop of the `rx.recharts.x_axis` component is set to the key in the data dictionary that represents the x value of the bar. Finally we add `width` and `height` props to set the size of the graph. + +```python +def graph(): + return rx.recharts.bar_chart( + rx.recharts.bar( + data_key="value", + stroke=rx.color("accent", 9), + fill=rx.color("accent", 8), + ), + rx.recharts.x_axis(data_key="name"), + rx.recharts.y_axis(), + data=State.users_for_graph, + width="100%", + height=250, + ) +``` + +Finally we add this `graph()` component to our `index()` component so that the graph is rendered on the page. The code for the full app with the graph included is below. If you try this out you will see that the graph updates whenever you add a new user to the table. + +```python exec +from collections import Counter + +class State4(rx.State): + users: list[User] = [ + User(name="Danilo Sousa", email="danilo@example.com", gender="Male"), + User(name="Zahra Ambessa", email="zahra@example.com", gender="Female"), + ] + users_for_graph: list[dict] = [] + + def add_user(self, form_data: dict): + self.users.append(User(**form_data)) + self.transform_data() + + return rx.toast.info( + f"User {form_data['name']} has been added.", + position="bottom-right", + ) + + def transform_data(self): + """Transform user gender group data into a format suitable for visualization in graphs.""" + # Count users of each gender group + gender_counts = Counter(user.gender for user in self.users) + + # Transform into list of dict so it can be used in the graph + self.users_for_graph = [ + { + "name": gender_group, + "value": count + } + for gender_group, count in gender_counts.items() + ] + +def add_customer_button() -> rx.Component: + return rx.dialog.root( + rx.dialog.trigger( + rx.button( + rx.icon("plus", size=26), + rx.text("Add User", size="4"), + ), + ), + rx.dialog.content( + rx.dialog.title( + "Add New User", + ), + rx.dialog.description( + "Fill the form with the user's info", + ), + rx.form( + rx.flex( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="Male", + name="gender", + ), + rx.flex( + rx.dialog.close( + rx.button( + "Cancel", + variant="soft", + color_scheme="gray", + ), + ), + rx.dialog.close( + rx.button( + "Submit", type="submit" + ), + ), + spacing="3", + justify="end", + ), + direction="column", + spacing="4", + ), + on_submit=State4.add_user, + reset_on_submit=False, + ), + max_width="450px", + ), + ) + +def graph(): + return rx.recharts.bar_chart( + rx.recharts.bar( + data_key="value", + stroke=rx.color("accent", 9), + fill=rx.color("accent", 8), + ), + rx.recharts.x_axis(data_key="name"), + rx.recharts.y_axis(), + data=State4.users_for_graph, + width="100%", + height=250, + ) +``` + +```python eval +rx.vstack( + add_customer_button(), + rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State4.users, show_user + ), + ), + variant="surface", + size="3", + ), + graph(), + border_width="2px", + border_radius="10px", + padding="1em", +) +``` + +```python +from collections import Counter + +class State(rx.State): + users: list[User] = [ + User(name="Danilo Sousa", email="danilo@example.com", gender="Male"), + User(name="Zahra Ambessa", email="zahra@example.com", gender="Female"), + ] + users_for_graph: list[dict] = [] + + def add_user(self, form_data: dict): + self.users.append(User(**form_data)) + self.transform_data() + + def transform_data(self): + """Transform user gender group data into a format suitable for visualization in graphs.""" + # Count users of each gender group + gender_counts = Counter(user.gender for user in self.users) + + # Transform into list of dict so it can be used in the graph + self.users_for_graph = [ + { + "name": gender_group, + "value": count + } + for gender_group, count in gender_counts.items() + ] + + +def show_user(user: User): + """Show a person in a table row.""" + return rx.table.row( + rx.table.cell(user.name), + rx.table.cell(user.email), + rx.table.cell(user.gender), + ) + +def add_customer_button() -> rx.Component: + return rx.dialog.root( + rx.dialog.trigger( + rx.button( + rx.icon("plus", size=26), + rx.text("Add User", size="4"), + ), + ), + rx.dialog.content( + rx.dialog.title( + "Add New User", + ), + rx.dialog.description( + "Fill the form with the user's info", + ), + rx.form( + rx.flex( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="male", + name="gender", + ), + rx.flex( + rx.dialog.close( + rx.button( + "Cancel", + variant="soft", + color_scheme="gray", + ), + ), + rx.dialog.close( + rx.button( + "Submit", type="submit" + ), + ), + spacing="3", + justify="end", + ), + direction="column", + spacing="4", + ), + on_submit=State.add_user, + reset_on_submit=False, + ), + max_width="450px", + ), + ) + +def graph(): + return rx.recharts.bar_chart( + rx.recharts.bar( + data_key="value", + stroke=rx.color("accent", 9), + fill=rx.color("accent", 8), + ), + rx.recharts.x_axis(data_key="name"), + rx.recharts.y_axis(), + data=State.users_for_graph, + width="100%", + height=250, + ) + +def index() -> rx.Component: + return rx.vstack( + add_customer_button(), + rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State.users, show_user + ), + ), + variant="surface", + size="3", + ), + graph(), + ) +``` + +One thing you may have noticed about your app is that the graph does not appear initially when you run the app, and that you must add a user to the table for it to first appear. This occurs because the `transform_data` event handler is only called when a user is added to the table. In the next section we will explore a solution to this. + + +## Final Cleanup + +### Revisiting app.add_page + +At the beginning of this tutorial we mentioned that the `app.add_page` function is required for every Reflex app. This function is used to add a component to a page. + +The `app.add_page` currently looks like this `app.add_page(index)`. We could change the route that the page renders on by setting the `route` prop such as `route="/custom-route"`, this would change the route to `http://localhost:3000/custom-route` for this page. + +We can also set a `title` to be shown in the browser tab and a `description` as shown in search results. + +To solve the problem we had above about our graph not loading when the page loads, we can use `on_load` inside of `app.add_page` to call the `transform_data` event handler when the page loads. This would look like `on_load=State.transform_data`. Below see what our `app.add_page` would look like with some of the changes above added. + +```python eval +rx.vstack( + add_customer_button(), + rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State4.users, show_user + ), + ), + variant="surface", + size="3", + ), + graph(), + on_mouse_enter=State4.transform_data, + border_width="2px", + border_radius="10px", + padding="1em", +) +``` + +```python +app.add_page( + index, + title="Customer Data App", + description="A simple app to manage customer data.", + on_load=State.transform_data, +) +``` + +### Revisiting app=rx.App() + +At the beginning of the tutorial we also mentioned that we defined our app using `app=rx.App()`. We can also pass in some props to the `rx.App` component to customize the app. + +The most important one is `theme` which allows you to customize the look and feel of the app. The `theme` prop takes in an `rx.theme` component which has several props that can be set. + +The `radius` prop sets the global radius value for the app that is inherited by all components that have a `radius` prop. It can be overwritten locally for a specific component by manually setting the `radius` prop. + +The `accent_color` prop sets the accent color of the app. Check out other options for the accent color [here]({docs.library.other.theme.path}). + +To see other props that can be set at the app level check out this [documentation]({docs.styling.theming.path}) + +```python +app = rx.App( + theme=rx.theme( + radius="full", accent_color="grass" + ), +) +``` + +Unfortunately in this tutorial here we cannot actually apply this to the live example on the page, but if you copy and paste the code below into a reflex app locally you can see it in action. + + + +## Conclusion + +Finally let's make some final styling updates to our app. We will add some hover styling to the table rows and center the table inside the `show_user` with `style=\{"_hover": \{"bg": rx.color("gray", 3)}}, align="center"`. + +In addition, we will add some `width="100%"` and `align="center"` to the `index()` component to center the items on the page and ensure they stretch the full width of the page. + +Check out the full code and interactive app below: + +```python eval +rx.vstack( + add_customer_button5(), + rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State5.users, show_user5 + ), + ), + variant="surface", + size="3", + width="100%", + ), + graph5(), + align="center", + width="100%", + on_mouse_enter=State5.transform_data, + border_width="2px", + border_radius="10px", + padding="1em", + ) +``` + + +```python +import reflex as rx +from collections import Counter + +class User(rx.Base): + """The user model.""" + + name: str + email: str + gender: str + + +class State(rx.State): + users: list[User] = [ + User(name="Danilo Sousa", email="danilo@example.com", gender="Male"), + User(name="Zahra Ambessa", email="zahra@example.com", gender="Female"), + ] + users_for_graph: list[dict] = [] + + def add_user(self, form_data: dict): + self.users.append(User(**form_data)) + self.transform_data() + + def transform_data(self): + """Transform user gender group data into a format suitable for visualization in graphs.""" + # Count users of each gender group + gender_counts = Counter(user.gender for user in self.users) + + # Transform into list of dict so it can be used in the graph + self.users_for_graph = [ + { + "name": gender_group, + "value": count + } + for gender_group, count in gender_counts.items() + ] + + +def show_user(user: User): + """Show a user in a table row.""" + return rx.table.row( + rx.table.cell(user.name), + rx.table.cell(user.email), + rx.table.cell(user.gender), + style={ + "_hover": { + "bg": rx.color("gray", 3) + } + }, + align="center", + ) + +def add_customer_button() -> rx.Component: + return rx.dialog.root( + rx.dialog.trigger( + rx.button( + rx.icon("plus", size=26), + rx.text("Add User", size="4"), + ), + ), + rx.dialog.content( + rx.dialog.title( + "Add New User", + ), + rx.dialog.description( + "Fill the form with the user's info", + ), + rx.form( + rx.flex( + rx.input( + placeholder="User Name", name="name", required=True + ), + rx.input( + placeholder="user@reflex.dev", + name="email", + ), + rx.select( + ["Male", "Female"], + placeholder="male", + name="gender", + ), + rx.flex( + rx.dialog.close( + rx.button( + "Cancel", + variant="soft", + color_scheme="gray", + ), + ), + rx.dialog.close( + rx.button( + "Submit", type="submit" + ), + ), + spacing="3", + justify="end", + ), + direction="column", + spacing="4", + ), + on_submit=State.add_user, + reset_on_submit=False, + ), + max_width="450px", + ), + ) + +def graph(): + return rx.recharts.bar_chart( + rx.recharts.bar( + data_key="value", + stroke=rx.color("accent", 9), + fill=rx.color("accent", 8), + ), + rx.recharts.x_axis(data_key="name"), + rx.recharts.y_axis(), + data=State.users_for_graph, + width="100%", + height=250, + ) + +def index() -> rx.Component: + return rx.vstack( + add_customer_button(), + rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Email"), + rx.table.column_header_cell("Gender"), + ), + ), + rx.table.body( + rx.foreach( + State.users, show_user + ), + ), + variant="surface", + size="3", + width="100%", + ), + graph(), + align="center", + width="100%", + ) + + +app = rx.App( + theme=rx.theme( + radius="full", accent_color="grass" + ), +) + +app.add_page( + index, + title="Customer Data App", + description="A simple app to manage customer data.", + on_load=State.transform_data, +) +``` + +And that is it for your first dashboard tutorial. In this tutorial we have created + +- a table to display user data +- a form to add new users to the table +- a dialog to showcase the form +- a graph to visualize the user data + +In addition to the above we have we have + +- explored state to allow you to show dynamic data that changes over time +- explored events to allow you to make your app interactive and respond to user actions +- added styling to the app to make it look better + + + +## Advanced Section (Hooking this up to a Database) + +Coming Soon! \ No newline at end of file diff --git a/docs/getting_started/installation.md b/docs/getting_started/installation.md new file mode 100644 index 00000000000..b412c738a61 --- /dev/null +++ b/docs/getting_started/installation.md @@ -0,0 +1,172 @@ +```python exec +from pcweb import constants +import reflex as rx +from pcweb.pages.gallery import gallery +app_name = "my_app_name" +default_url = "http://localhost:3000" +``` + +# Installation + +Reflex requires Python 3.10+. + + +```md video https://youtube.com/embed/ITOZkzjtjUA?start=758&end=1206 +# Video: Installation +``` + + +## Virtual Environment + +We **highly recommend** creating a virtual environment for your project. + +[uv]({constants.UV_URL}) is the recommended modern option. [venv]({constants.VENV_URL}), [conda]({constants.CONDA_URL}) and [poetry]({constants.POETRY_URL}) are some alternatives. + + +# Install Reflex on your system + +---md tabs + +--tab macOS/Linux +## Install on macOS/Linux + +We will go with [uv]({constants.UV_URL}) here. + + +### Prerequisites + +#### Install uv + +```bash +curl -LsSf https://astral.sh/uv/install.sh | sh +``` + +After installation, restart your terminal or run `source ~/.bashrc` (or `source ~/.zshrc` for zsh). + +Alternatively, install via [Homebrew, PyPI, or other methods](https://docs.astral.sh/uv/getting-started/installation/). + +**macOS (Apple Silicon) users:** Install [Rosetta 2](https://support.apple.com/en-us/HT211861). Run this command: + +`/usr/sbin/softwareupdate --install-rosetta --agree-to-license` + + +### Create the project directory + +Replace `{app_name}` with your project name. Switch to the new directory. + +```bash +mkdir {app_name} +cd {app_name} +``` + +### Initialize uv project + +```bash +uv init +``` + +### Add Reflex to the project + +```bash +uv add reflex +``` + +### Initialize the Reflex project + +```bash +uv run reflex init +``` + + +-- +--tab Windows +## Install on Windows + +For Windows users, we recommend using [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/about) for optimal performance. + +**WSL users:** Refer to the macOS/Linux instructions above. + +For the rest of this section we will work with native Windows (non-WSL). + +We will go with [uv]({constants.UV_URL}) here. + +### Prerequisites + +#### Install uv + +```powershell +powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" +``` + +After installation, restart your terminal (PowerShell or Command Prompt). + +Alternatively, install via [WinGet, Scoop, or other methods](https://docs.astral.sh/uv/getting-started/installation/). + +### Create the project directory + +Replace `{app_name}` with your project name. Switch to the new directory. + +```bash +mkdir {app_name} +cd {app_name} +``` + +### Initialize uv project + +```bash +uv init +``` + +### Add Reflex to the project + +```bash +uv add reflex +``` + +### Initialize the Reflex project + +```bash +uv run reflex init +``` + +```md alert warning +# Error `Install Failed - You are missing a DLL required to run bun.exe` Windows +Bun requires runtime components of Visual C++ libraries to run on Windows. This issue is fixed by installing [Microsoft Visual C++ 2015 Redistributable](https://www.microsoft.com/en-us/download/details.aspx?id=53840). +``` +-- + +--- + + +Running `uv run reflex init` will return the option to start with a blank Reflex app, premade templates built by the Reflex team, or to try our [AI builder]({constants.REFLEX_BUILD_URL}). + +```bash +Initializing the web directory. + +Get started with a template: +(0) A blank Reflex app. +(1) Premade templates built by the Reflex team. +(2) Try our AI builder. +Which template would you like to use? (0): +``` + +From here select an option. + + +## Run the App + +Run it in development mode: + +```bash +uv run reflex run +``` + +Your app runs at [http://localhost:3000](http://localhost:3000). + +Reflex prints logs to the terminal. To increase log verbosity to help with debugging, use the `--loglevel` flag: + +```bash +uv run reflex run --loglevel debug +``` + +Reflex will *hot reload* any code changes in real time when running in development mode. Your code edits will show up on [http://localhost:3000](http://localhost:3000) automatically. diff --git a/docs/getting_started/introduction.md b/docs/getting_started/introduction.md new file mode 100644 index 00000000000..f4e852cde4e --- /dev/null +++ b/docs/getting_started/introduction.md @@ -0,0 +1,353 @@ +```python exec +import reflex as rx +from pcweb import constants, styles +from pcweb.pages.docs import getting_started +from pcweb.pages.docs import wrapping_react +from pcweb.pages.docs.library import library +from pcweb.pages.docs import pages +from pcweb.pages.docs import vars +from pcweb.styles.colors import c_color +from pcweb.pages.docs import styling +from pcweb.styles.fonts import base +from pcweb.pages.docs import hosting +from pcweb.flexdown import markdown_with_shiki +from pcweb.pages.docs import advanced_onboarding +``` + + + +# Introduction + +**Reflex** is an open-source framework for quickly building beautiful, interactive web applications in **pure Python**. + +## Goals + +```md section +### Pure Python + +Use Python for everything. Don't worry about learning a new language. + +### Easy to Learn + +Build and share your first app in minutes. No web development experience required. + +### Full Flexibility + +Remain as flexible as traditional web frameworks. Reflex is easy to use, yet allows for advanced use cases. + +Build anything from small data science apps to large, multi-page websites. **This entire site was built and deployed with Reflex!** + +### Batteries Included + +No need to reach for a bunch of different tools. Reflex handles the user interface, server-side logic, and deployment of your app. +``` + +## An example: Make it count + +Here, we go over a simple counter app that lets the user count up or down. + +```python exec +class CounterExampleState(rx.State): + count: int = 0 + + @rx.event + def increment(self): + self.count += 1 + + @rx.event + def decrement(self): + self.count -= 1 + +class IntroTabsState(rx.State): + """The app state.""" + + value: str = "tab1" + tab_selected: str = "" + + @rx.event + def change_value(self, val: str): + self.tab_selected = f"{val} clicked!" + self.value = val + +def tabs(): + return rx.tabs.root( + rx.tabs.list( + rx.tabs.trigger( + "Frontend", value="tab1", + class_name="tab-style" + ), + rx.tabs.trigger( + "Backend", value="tab2", + class_name="tab-style" + ), + rx.tabs.trigger( + "Page", value="tab3", + class_name="tab-style" + ), + ), + rx.tabs.content( + markdown_with_shiki( + """The frontend is built declaratively using Reflex components. Components are compiled down to JS and served to the users browser, therefore: + +- Only use Reflex components, vars, and var operations when building your UI. Any other logic should be put in your `State` (backend). + +- Use `rx.cond` and `rx.foreach` (replaces if statements and for loops), for creating dynamic UIs. + """, + ), + value="tab1", + class_name="pt-4" + ), + rx.tabs.content( + markdown_with_shiki( + """Write your backend in the `State` class. Here you can define functions and variables that can be referenced in the frontend. This code runs directly on the server and is not compiled, so there are no special caveats. Here you can use any Python external library and call any method/function. + """, + ), + value="tab2", + class_name="pt-4" + ), + rx.tabs.content( + markdown_with_shiki( + f"""Each page is a Python function that returns a Reflex component. You can define multiple pages and navigate between them, see the [Routing]({pages.overview.path}) section for more information. + +- Start with a single page and scale to 100s of pages. + """, + ), + value="tab3", + class_name="pt-4" + ), + class_name="text-slate-12 font-normal", + default_value="tab1", + value=IntroTabsState.value, + on_change=lambda x: IntroTabsState.change_value( + x + ), + ) +``` + +```python demo box id=counter +rx.hstack( + rx.button( + "Decrement", + color_scheme="ruby", + on_click=CounterExampleState.decrement, + ), + rx.heading(CounterExampleState.count, font_size="2em"), + rx.button( + "Increment", + color_scheme="grass", + on_click=CounterExampleState.increment, + ), + spacing="4", +) +``` + +Here is the full code for this example: + +```python eval +tabs() +``` + +```python demo box +rx.box( + rx._x.code_block( + """import reflex as rx """, + class_name="code-block !bg-transparent !border-none", + ), + rx._x.code_block( + """class State(rx.State): + count: int = 0 + + @rx.event + def increment(self): + self.count += 1 + + @rx.event + def decrement(self): + self.count -= 1""", + background=rx.cond( + IntroTabsState.value == "tab2", + "var(--c-violet-3) !important", + "transparent", + ), + border=rx.cond( + IntroTabsState.value == "tab2", + "1px solid var(--c-violet-5)", + "none !important" + ), + class_name="code-block", + ), + rx._x.code_block( + """def index(): + return rx.hstack( + rx.button( + "Decrement", + color_scheme="ruby", + on_click=State.decrement, + ), + rx.heading(State.count, font_size="2em"), + rx.button( + "Increment", + color_scheme="grass", + on_click=State.increment, + ), + spacing="4", + )""", + border=rx.cond( + IntroTabsState.value == "tab1", + "1px solid var(--c-violet-5)", + "none !important", + ), + background=rx.cond( + IntroTabsState.value == "tab1", + "var(--c-violet-3) !important", + "transparent", + ), + class_name="code-block", + ), + rx._x.code_block( + """app = rx.App() +app.add_page(index)""", + background=rx.cond( + IntroTabsState.value == "tab3", + "var(--c-violet-3) !important", + "transparent", + ), + border=rx.cond( + IntroTabsState.value == "tab3", + "1px solid var(--c-violet-5)", + "none !important", + ), + class_name="code-block", + ), + class_name="w-full flex flex-col", +) +``` + +## The Structure of a Reflex App + +Let's break this example down. + +### Import + +```python +import reflex as rx +``` + +We begin by importing the `reflex` package (aliased to `rx`). We reference Reflex objects as `rx.*` by convention. + +### State + +```python +class State(rx.State): + count: int = 0 +``` + +The state defines all the variables (called **[vars]({vars.base_vars.path})**) in an app that can change, as well as the functions (called **[event_handlers](#event-handlers)**) that change them. + +Here our state has a single var, `count`, which holds the current value of the counter. We initialize it to `0`. + +### Event Handlers + +```python +@rx.event +def increment(self): + self.count += 1 + +@rx.event +def decrement(self): + self.count -= 1 +``` + +Within the state, we define functions, called **event handlers**, that change the state vars. + +Event handlers are the only way that we can modify the state in Reflex. +They can be called in response to user actions, such as clicking a button or typing in a text box. +These actions are called **events**. + +Our counter app has two event handlers, `increment` and `decrement`. + +### User Interface (UI) + +```python +def index(): + return rx.hstack( + rx.button( + "Decrement", + color_scheme="ruby", + on_click=State.decrement, + ), + rx.heading(State.count, font_size="2em"), + rx.button( + "Increment", + color_scheme="grass", + on_click=State.increment, + ), + spacing="4", + ) +``` + +This function defines the app's user interface. + +We use different components such as `rx.hstack`, `rx.button`, and `rx.heading` to build the frontend. Components can be nested to create complex layouts, and can be styled using the full power of CSS or [Tailwind CSS]({styling.tailwind.path}). + +Reflex comes with [50+ built-in components]({library.path}) to help you get started. +We are actively adding more components. Also, it's easy to [wrap your own React components]({wrapping_react.overview.path}). + +```python +rx.heading(State.count, font_size="2em"), +``` + +Components can reference the app's state vars. +The `rx.heading` component displays the current value of the counter by referencing `State.count`. +All components that reference state will reactively update whenever the state changes. + +```python +rx.button( + "Decrement", + color_scheme="ruby", + on_click=State.decrement, +), +``` + +Components interact with the state by binding events triggers to event handlers. +For example, `on_click` is an event that is triggered when a user clicks a component. + +The first button in our app binds its `on_click` event to the `State.decrement` event handler. Similarly the second button binds `on_click` to `State.increment`. + +In other words, the sequence goes like this: + +- User clicks "increment" on the UI. +- `on_click` event is triggered. +- Event handler `State.increment` is called. +- `State.count` is incremented. +- UI updates to reflect the new value of `State.count`. + +### Add pages + +Next we define our app and add the counter component to the base route. + +```python +app = rx.App() +app.add_page(index) +``` + +## Next Steps + +🎉 And that's it! + +We've created a simple, yet fully interactive web app in pure Python. + +By continuing with our documentation, you will learn how to build awesome apps with Reflex. Use the sidebar to navigate through the sections, or search (`Ctrl+K` or `Cmd+K`) to quickly find a page. + +For a glimpse of the possibilities, check out these resources: + +* For a more real-world example, check out either the [dashboard tutorial]({getting_started.dashboard_tutorial.path}) or the [chatapp tutorial]({getting_started.chatapp_tutorial.path}). +* Check out our open-source [templates]({getting_started.open_source_templates.path})! +* We have an AI Builder that can generate full Reflex apps or help with your existing app! Check it out at [Reflex Build]({constants.REFLEX_BUILD_URL})! +* Deploy your app with a single command using [Reflex Cloud]({hosting.deploy_quick_start.path})! + +If you want to learn more about how Reflex works, check out the [How Reflex Works]({advanced_onboarding.how_reflex_works.path}) section. + +## Join our Community + +If you have questions about anything related to Reflex, you're always welcome to ask our community on [GitHub Discussions]({constants.GITHUB_DISCUSSIONS_URL}), [Discord]({constants.DISCORD_URL}), [Forum]({constants.FORUM_URL}), and [X]({constants.TWITTER_URL}). diff --git a/docs/getting_started/open_source_templates.md b/docs/getting_started/open_source_templates.md new file mode 100644 index 00000000000..aa28a5e23e7 --- /dev/null +++ b/docs/getting_started/open_source_templates.md @@ -0,0 +1,67 @@ +# Open Source Templates + +Check out what the community is building with Reflex. See 2000+ more public projects on [Github](https://github.com/reflex-dev/reflex/network/dependents). Want to get your app featured? Submit it [here](https://github.com/reflex-dev/templates). Copy the template command and use it during `reflex init` + +```python exec + +import reflex as rx + +from pcweb.components.code_card import gallery_app_card +from pcweb.components.webpage.comps import h1_title +from pcweb.pages.gallery.sidebar import TemplatesState, pagination, sidebar +from pcweb.templates.webpage import webpage + + +@rx.memo +def skeleton_card() -> rx.Component: + return rx.skeleton( + class_name="box-border shadow-large border rounded-xl w-full h-[280px] overflow-hidden", + loading=True, + ) + + +def component_grid() -> rx.Component: + from pcweb.pages.gallery.apps import gallery_apps_data + + posts = [] + for path, document in list(gallery_apps_data.items()): + posts.append( + rx.cond( + TemplatesState.filtered_templates.contains(document.metadata["title"]), + gallery_app_card(app=document.metadata), + None, + ) + ) + return rx.box( + *posts, + rx.box( + rx.el.h4( + "No templates found", + class_name="text-base font-semibold text-slate-12 text-nowrap", + ), + class_name="flex-col gap-2 flex absolute left-1 top-0 z-[-1] w-full", + ), + class_name="gap-6 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 w-full relative", + ) + + +def gallery() -> rx.Component: + return rx.el.section( + rx.box( + sidebar(), + rx.box( + component_grid(), + pagination(), + class_name="flex flex-col", + ), + class_name="flex flex-col gap-6 lg:gap-10 w-full", + ), + id="gallery", + class_name="mx-auto", + ) + +``` + +```python eval +gallery() +``` diff --git a/docs/getting_started/project-structure.md b/docs/getting_started/project-structure.md new file mode 100644 index 00000000000..f2ec8da416c --- /dev/null +++ b/docs/getting_started/project-structure.md @@ -0,0 +1,71 @@ +# Project Structure + +```python exec +from pcweb.pages.docs import advanced_onboarding +from pcweb.constants import REFLEX_ASSETS_CDN +``` + +## Directory Structure + +```python exec +app_name = "hello" +``` + +Let's create a new app called `{app_name}` + +```bash +mkdir {app_name} +cd {app_name} +reflex init +``` + +This will create a directory structure like this: + +```bash +{app_name} +├── .web +├── assets +├── {app_name} +│ ├── __init__.py +│ └── {app_name}.py +└── rxconfig.py +``` + +Let's go over each of these directories and files. + +## .web + +This is where the compiled Javascript files will be stored. You will never need to touch this directory, but it can be useful for debugging. + +Each Reflex page will compile to a corresponding `.js` file in the `.web/pages` directory. + +## Assets + +The `assets` directory is where you can store any static assets you want to be publicly available. This includes images, fonts, and other files. + +For example, if you save an image to `assets/image.png` you can display it from your app like this: + +```python +rx.image(src=f"{REFLEX_ASSETS_CDN}other/image.png") +``` +j +## Main Project + +Initializing your project creates a directory with the same name as your app. This is where you will write your app's logic. + +Reflex generates a default app within the `{app_name}/{app_name}.py` file. You can modify this file to customize your app. + +## Configuration + +The `rxconfig.py` file can be used to configure your app. By default it looks something like this: + +```python +import reflex as rx + + +config = rx.Config( + app_name="{app_name}", +) +``` + +We will discuss project structure and configuration in more detail in the [advanced project structure]({advanced_onboarding.code_structure.path}) documentation. \ No newline at end of file diff --git a/docs/hosting/adding-members.md b/docs/hosting/adding-members.md new file mode 100644 index 00000000000..9e27e8dd5c4 --- /dev/null +++ b/docs/hosting/adding-members.md @@ -0,0 +1,39 @@ +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +from reflex_image_zoom import image_zoom +``` + +# Project + +A project is a collection of applications (apps / websites). + +Every project has its own billing page that are accessible to Admins. + + + +## Adding Team Members + +To see the team members of a project click on the `Members` tab in the Cloud UI on the project page. + +If you are a User you have the ability to create, deploy and delete apps, but you do not have the power to add or delete users from that project. You must be an Admin for that. + +As an Admin you will see the an `Add user` button in the top right of the screen, as shown in the image below. Clicking on this will allow you to add a user to the project. You will need to enter the email address of the user you wish to add. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/hosting_adding_team_members.webp", alt="Adding team members to Reflex Cloud")) +``` + +```python eval +rx.box(height="20px") +``` + +```md alert warning +# Currently a User must already have logged in once before they can be added to a project. +At this time a User must be logged in to be added to a project. In future there will be automatic email invites sent to add new users who have never logged in before. +``` + + +## Other project settings + +Clicking on the `Settings` tab in the Cloud UI on the project page allows a user to change the `project name`, check the `project id` and, if the project is not your default project, delete the project. \ No newline at end of file diff --git a/docs/hosting/app-management.md b/docs/hosting/app-management.md new file mode 100644 index 00000000000..c05fbbf33f8 --- /dev/null +++ b/docs/hosting/app-management.md @@ -0,0 +1,58 @@ +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +from reflex_image_zoom import image_zoom +from pcweb.pages.docs import hosting +from pcweb.pages import docs +from pcweb.styles.styles import get_code_style, cell_style +``` + +# App + +In Reflex Cloud an "app" (or "application" or "website") refers to a web application built using the Reflex framework, which can be deployed and managed within the Cloud platform. + +You can deploy an app using the `reflex deploy` command. + +There are many actions you can take in the Cloud UI to manage your app. Below are some of the most common actions you may want to take. + + +## Stopping an App + +To stop an app follow the arrow in the image below and press on the `Stop app` button. Pausing an app will stop it from running and will not be accessible to users until you resume it. In addition, this will stop you being billed for your app. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/stopping_app.webp", padding_bottom="20px")) +``` + +```md alert info +# CLI Command to stop an app +`reflex cloud apps stop [OPTIONS] [APP_ID]` +``` + +## Deleting an App + +To delete an app click on the `Settings` tab in the Cloud UI on the app page. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/environment_variables.webp")) +``` + +Then click on the `Danger` tab as shown below. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/deleting_app.webp")) +``` + +Here there is a `Delete app` button. Pressing this button will delete the app and all of its data. This action is irreversible. + +```md alert info +# CLI Command to delete an app +`reflex cloud apps delete [OPTIONS] [APP_ID]` +``` + + +## Other app settings + +Clicking on the `Settings` tab in the Cloud UI on the app page also allows a user to change the `app name`, change the `app description` and check the `app id`. + +The other app settings also allows users to edit and add secrets (environment variables) to the app. For more information on secrets, see the [Secrets (Environment Variables)]({hosting.secrets_environment_vars.path}) page. diff --git a/docs/hosting/billing.md b/docs/hosting/billing.md new file mode 100644 index 00000000000..2cbb6d9e77f --- /dev/null +++ b/docs/hosting/billing.md @@ -0,0 +1,32 @@ +```python exec +import reflex as rx +from reflex_image_zoom import image_zoom +from pcweb.pages.pricing.calculator import compute_table_base +from pcweb.pages.docs import hosting +``` + +## Overview + +Billing for Reflex Cloud is monthly per project. Project owners and admins are able to view and manage the billing page. + +The billing for a project is comprised of two parts - number of `seats` and `compute`. + +## Seats + +Projects on a paid plan can invite collaborators to join their project. + +Each additional collaborator is considered a `seat` and is charged on a flat monthly rate. Project owners and admins can manage permissions and roles for each seat in the settings tab on the project page. + +## Compute + +Reflex Cloud is billed on a per second basis so you only pay for when your app is being used by your end users. When your app is idle, you are not charged. + +For more information on compute pricing, please see the [compute]({hosting.compute.path}) page. + +## Manage Billing + +To manage your billing, you can go to the `Billing` tab in the Cloud UI on the project page. + +## Setting Billing Limits + +If you want to set a billing limit for your project, you can do so by going to the `Billing` tab in the Cloud UI on the project page. diff --git a/docs/hosting/compute.md b/docs/hosting/compute.md new file mode 100644 index 00000000000..cae2fee5399 --- /dev/null +++ b/docs/hosting/compute.md @@ -0,0 +1,230 @@ +```python exec +import reflex as rx +from reflex_image_zoom import image_zoom +from pcweb.pages.pricing.calculator import compute_table_base +``` + +## Compute Usage + +Reflex Cloud is billed on a per second basis so you only pay for when your app is being used by your end users. When your app is idle, you are not charged. + +This allows you to deploy your app on larger sizes and multiple regions without worrying about paying for idle compute. We bill on a per second basis so you only pay for the compute you use. + +By default your app stays alive for 5 minutes after the no users are connected. After this time your app will be considered idle and you will not be charged. Start up times usually take less than 1 second for you apps to come back online. + +#### Warm vs Cold Start +- Apps below `c2m2` are considered warm starts and are usually less than 1 second. +- If your app is larger than `c2m2` it will be a cold start which takes around 15 seconds. If you want to avoid this you can reserve a machine. + +## Compute Pricing Table + +```python eval +compute_table_base() +``` + +## Reserved Machines (Coming Soon) + +If you expect your apps to be continuously receiving users, you may want to reserve a machine instead of having us manage your compute. + +This will be a flat monthly rate for the machine. + +## Monitoring Usage + +To monitor your projects usage, you can go to the billing tab in the Reflex Cloud UI on the project page. + +Here you can see the current billing and usage for your project. + + +## Real Life Examples of compute charges on the paid tiers + + +```md alert +# Single Application - Single Region + +Anna, a hobbyist game developer, built a pixel art generator and hosted it on Reflex Cloud so fellow artists could use it anytime. She deployed her app in the San Francisco region, where she lives. If her users use the site for an hour a day, how much would Anna pay? + +**Facts:** + +- **Machine size:** `c1m1` (1 CPU, 1 GB Memory) - `$0.083` per hour +- **Regions:** `1` (SJC) +- **Avg usage per day per region:** `1 Hour` + +**Maths:** + +`1 region * 1 hour * 30 days = 30 compute hours` + +`30 * 0.083 = 2.49` + +(assuming a 30 day month) + +Anna's total cost for compute would be `$2.49` for the month. However, since paid users receive a `$10` credit, her compute cost is fully covered. + +**Charge for compute:** + +`$0.00 dollars` +``` + + + +```md alert +# Single Application - Multi Region + +Bob created a social media application and decided to host it on Reflex Cloud. Bob has users in Paris, London, San Jose and Sydney. Bob decided to deploy his application to all those region as well as additional one in Paris since that where Bob lives. If users use the site in each region for 30 minutes a day how much would Bob pay? + +**Facts:** + +- **Machine size:** `c1m1` (1 CPU, 1 GB Memory) - `$0.083` Cost per hour +- **Regions:** `5` (CDG x 2, LHR x 1, SJC x 1, SYD x 1) +- **Avg usage per day per region:** `0.5 Hours` + +**Maths:** + +`5 regions * 0.5 hours * 30 days = 75 compute hours` + +`75 * 0.083 = 6.23` + +(assuming a 30 day month) + +Bob would owe `$6.23` for this month. However since Bob is a paid user they receive a `$10` credit which brings Bob's bill down to `$0`. + +**Charge for compute:** + +`$0.00 dollars` +``` + + + + +```md alert +# Single Growing Application - Multi Region + +Charlie, a small startup founder, built a finance tracking app that allows users to create and share finance insights in real time. As his user base expanded across different regions, he needed a multi-region setup to reduce latency and improve performance. To ensure a smooth experience, he deployed his app on Reflex Cloud using a `c1m2` machine in four regions. + +If users access the app on average for **16 hours per week** in each region, how much would Charlie pay? + +**Facts:** +- **Machine size:** `c1m2` (1 CPU, 2 GB Memory) - `$0.157` per hour +- **Regions:** `4` +- **Avg usage per week per region:** `16 Hours` + +**Maths:** + +`4 regions * 16 hours * 4 weeks = 256 compute hours` + +`256 * 0.157 = 40.19` + +(assuming 4 weeks in a month) + +Charlie would owe `$40.19` for this month. However since Charlie is a paid user they receive a `$10` credit which brings Bob's bill down to `$30.19`. + +**Charge for compute:** + +`$30.19 dollars` + +``` + + + +```md alert +# Single Application High-Performance App - Single Region + +David, an **AI enthusiast**, developed a **real-time image enhancement tool** that allows photographers to upscale and enhance their images using machine learning. Since his app requires more processing power, he deployed it on a **`c2m2` machine**, which offers increased CPU and memory to handle the intensive AI workloads. + +With users accessing the app **2 hours per day** over a **30-day month**, how much would David pay? + +**Facts:** +- **Machine size:** `c2m2` (2 CPU, 2 GB Memory) - `$0.166` per hour +- **Regions:** `1` +- **Avg usage per day:** `2 Hours` + + +**Maths:** + +`1 region * 2 hours * 30 days = 60 compute hours` + +`60 * 0.166 = 9.96` + +(assuming a 30 day month) + +David would owe `$9.96` for this month. However since David is a paid user they receive a `$10` credit, he will not be charged for compute for this month. + +**Charge for compute:** + +`$0.00 dollars` + +``` + + +```md alert +# Single Fast Scaling App - Multiple Regions + +Emily, a **productivity app developer**, built a **real-time team collaboration tool** that helps remote teams manage tasks and communicate efficiently. With users spread across multiple locations, she needed **low-latency performance** to ensure a seamless experience. To achieve this, Emily deployed her app using a `c1m1` machine in **three regions**. + +With users actively using the app **6 hours per day in each region** over a **30-day month**, how much would Emily pay? + + +**Facts:** +- **Machine size:** `c1m1` (1 CPU, 1 GB Memory) - `$0.083` per hour +- **Regions:** `3` +- **Avg usage per day per region:** `6 Hours` + + +**Maths:** + +`3 regions * 6 hours * 30 days = 540 compute hours` + +`540 * 0.083 = 44.82` + +(assuming a 30 day month) + +Emily would owe `$44.82` for this month. However since Emily is a paid user they receive a `$10` credit which brings Emily's bill down to `$34.82`. + +**Charge for compute:** + +`$34.82 dollars` + +``` + + +```md alert +# Multiple Apps - Multiple Regions + +Fred, a **freelance developer**, built a **portfolio of web applications** that cater to different clients across the globe. He has built **5 apps** where **4 apps** have a small amount of traffic with an average of **0.5 hours a day** and **1 app** that has a high amount of traffic with an average of **6 hours** a day. He has deployed the 4 small traffic apps on a `c1m1` machine in **1 region** each and the high traffic app on a `c1m1` machine in **2 regions**. How much would Fred pay? + + +**Facts for 4 small traffic apps:** +- **Machine size:** `c1m1` (1 CPU, 1 GB Memory) - `$0.083` per hour +- **Regions:** `1` +- **Avg usage per day per region:** `0.5 Hours` + + +**Facts for 1 large traffic app:** +- **Machine size:** `c1m1` (1 CPU, 1 GB Memory) - `$0.083` per hour +- **Regions:** `2` +- **Avg usage per day per region:** `6 Hours` + + +**Maths:** + +4 small traffic apps: + +`4 apps * 1 region * 0.5 hours * 30 days = 60 compute hours` + +1 large traffic apps: + +`2 regions * 6 hours * 30 days = 360 compute hours` + +Total compute hours = `60 + 360 = 420 compute hours` + +`420 * 0.083 = 34.86` + +(assuming a 30 day month) + +Fred would owe `$34.86` for this month. However since Fred is a paid user they receive a `$10` credit which brings Fred's bill down to `$24.86`. + +**Charge for compute:** + +`$24.82 dollars` +``` + +One thing that is important to note is that in the hypothetical example where you have `50 people` using your app `continuously for 24 hours` or if you have `1 person` using your app `continuously for 24 hours`, you `will be charged the same amount` as the charge is based on the amount of time your app up and not the number of users using your app. In `both these examples` your `app is up for 24 hours` and therefore you will be `charged for 24 hours of compute`. \ No newline at end of file diff --git a/docs/hosting/config_file.md b/docs/hosting/config_file.md new file mode 100644 index 00000000000..b56c90da526 --- /dev/null +++ b/docs/hosting/config_file.md @@ -0,0 +1,181 @@ +```python exec +import reflex as rx +from reflex_image_zoom import image_zoom +from pcweb import constants +from pcweb.pages.docs import hosting +from pcweb.pages import docs +from pcweb.styles.styles import get_code_style, cell_style +``` + +## What is reflex cloud config? + +The following command: + +```bash +reflex cloud config +``` + +generates a `cloud.yml` configuration file used to deploy your Reflex app to the Reflex cloud platform. This file tells Reflex how and where to run your app in the cloud. + +## Configuration File Structure + +The `cloud.yml` file uses YAML format and supports the following structure. **All fields are optional** and will use sensible defaults if not specified: + +```yaml +# Basic deployment settings +name: my-app-prod # Optional: defaults to project folder name +description: 'Production deployment' # Optional: empty by default +projectname: my-client-project # Optional: defaults to personal project + +# Infrastructure settings +regions: # Optional: defaults to sjc: 1 + sjc: 1 # San Jose (# of machines) + lhr: 2 # London (# of machines) +vmtype: c2m2 # Optional: defaults to c1m1 + +# Custom domain and environment +hostname: myapp # Optional: myapp.reflex.dev +envfile: .env.production # Optional: defaults to .env + +# Additional dependencies +packages: # Optional: empty by default + - procps +``` + +## Configuration Options Reference + +```python demo-only +rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell(rx.text("Option", size="1", weight="bold", color=rx.color("slate", 11))), + rx.table.column_header_cell(rx.text("Type", size="1", weight="bold", color=rx.color("slate", 11))), + rx.table.column_header_cell(rx.text("Default", size="1", weight="bold", color=rx.color("slate", 11))), + rx.table.column_header_cell(rx.text("Description", size="1", weight="bold", color=rx.color("slate", 11))), + align="center" + ) + ), + rx.table.body(*[ + rx.table.row( + rx.table.cell(rx.text(option, class_name="text-sm")), + rx.table.cell(rx.text(type_, class_name="text-sm")), + rx.table.cell(rx.text(default, class_name="text-sm")), + rx.table.cell(rx.link(description, href=link, class_name="text-sm") if link else rx.text(description, size="1", weight="regular")), + align="center" + ) for option, type_, default, description, link in [ + ("name", "string", "folder name", "Deployment identifier in dashboard", None), + ("description", "string", "empty", "Description of deployment", None), + ("regions", "object", "sjc: 1", "Region deployment mapping", "/docs/hosting/regions"), + ("vmtype", "string", "c1m1", "Virtual machine specifications", "/docs/hosting/machine-types"), + ("hostname", "string", "null", "Custom subdomain", None), + ("envfile", "string", ".env", "Environment variables file path", "/docs/hosting/secrets-environment-vars"), + ("project", "uuid", "null", "Project uuid", None), + ("projectname", "string", "null", "Project name", None), + ("packages", "array", "empty", "Additional system packages", None), + ("include_db", "boolean", "false", "Include local sqlite", None), + ("strategy", "string", "auto", "Deployment strategy", None) + ] + ]), + variant="ghost", + size="2", + width="100%", + max_width="800px", +) +``` + +## Configuration Options + +For details of specific sections click the links in the table. + +### Projects + +Organize deployments using projects: + +```yaml +projectname: client-alpha # Groups related deployments +``` + +You can also specify a project uuid instead of name: +```yaml +project: 12345678-1234-1234-1234-1234567890ab +``` + +You can go to the homepage of the project in the reflex cloud dashboard to find your project uuid in the url `{constants.REFLEX_CLOUD_URL.rstrip("/")}/project/uuid` + +### Apt Packages + +Install additional system packages your application requires. Package names are based on the apt package manager: + +```yaml +packages: + - procps=2.0.32-1 # Version pinning is optional + - imagemagick + - ffmpeg +``` + +### Include SQLite + +Include local sqlite database: + +```yaml +include_db: true +``` + +This is not persistent and will be lost on restart. It is recommended to use a database service instead. + +### Strategy + +Deployment strategy: +Available strategies: +- `immediate`: [Default] Deploy immediately +- `rolling`: Deploy in a rolling manner +- `bluegreen`: Deploy in a blue-green manner +- `canary`: Deploy in a canary manner, boot as single machine verify its health and then restart the rest. + +```yaml +strategy: immediate +``` + +## Multi-Environment Setup + +**Development (`cloud-dev.yml`):** +```yaml +name: myapp-dev +description: 'Development environment' +vmtype: c1m1 +envfile: .env.development +``` + +**Staging (`cloud-staging.yml`):** +```yaml +name: myapp-staging +description: 'Staging environment' +regions: + sjc: 1 +vmtype: c2m2 +envfile: .env.staging +``` + +**Production (`cloud-prod.yml`):** +```yaml +name: myapp-production +description: 'Production environment' +regions: + sjc: 2 + lhr: 1 +vmtype: c4m4 +hostname: myapp +envfile: .env.production +``` + +Deploy with specific configuration files: + +```bash +# Use default cloud.yml +reflex deploy + +# Use specific configuration file +reflex deploy --config cloud-prod.yml +reflex deploy --config cloud-staging.yml +``` + diff --git a/docs/hosting/custom-domains.md b/docs/hosting/custom-domains.md new file mode 100644 index 00000000000..73c8961d62b --- /dev/null +++ b/docs/hosting/custom-domains.md @@ -0,0 +1,75 @@ +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +from reflex_image_zoom import image_zoom +``` + +# Custom Domains + + +With the Enterprise tier of Reflex Cloud you can use your own custom domain to host your app. + +## Prerequisites + +You must purchase a domain from a domain registrar such as GoDaddy, Cloudflare, Namecheap, or AWS. + +For this tutorial we will use GoDaddy and the example domain `tomgotsman.us`. + + +## Steps + +Once you have purchased your domain, you can add it to your Reflex Cloud app by following these steps: + +1 - Ensure you have deployed your app to Reflex Cloud. + +2 - Once your app is deployed click the `Custom Domain` tab and add your custom domain to the input field and press the Add domain button. You should now see a page like below: + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/custom-domains-DNS-inputs.webp")) +``` + +```python eval +rx.box(height="20px") +``` + +3 - On the domain registrar's website, navigate to the DNS settings for your domain. It should look something like the image below: + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/custom-domains-DNS-before.webp")) +``` + +```python eval +rx.box(height="20px") +``` + +4 - Add all four of the DNS records provided by Reflex Cloud to your domain registrar's DNS settings. If there is already an A name record, delete it and replace it with the one provided by Reflex Cloud. Your DNS settings should look like the image below: + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/custom-domains-DNS-after.webp")) +``` + +```md alert warning +# It may alert you that this record will resolve on ######.tomgotsman.us.tomgotsman.us. +If this happens ensure that you select to only have the record resolve on ######.tomgotsman.us. +``` + +```md alert warning +# Your domain provider may not support an Apex CNAME record, in this case just use an A record. +![Image showing failed CNAME record](/custom-domains-CNAME-fail.png) +``` + +```python eval +rx.box(height="20px") +``` + +5 - Once you have added the DNS records, refresh the page on the Reflex Cloud page (it may take a few minutes to a few hours to update successfully). If the records are correct, you should see a success message like the one below: + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/custom-domains-success.webp")) +``` + +```python eval +rx.box(height="20px") +``` + +6 - Now redeploy your app using the `reflex deploy` command and your app should now be live on your custom domain! \ No newline at end of file diff --git a/docs/hosting/databricks.md b/docs/hosting/databricks.md new file mode 100644 index 00000000000..67a4967d18a --- /dev/null +++ b/docs/hosting/databricks.md @@ -0,0 +1,209 @@ +```python exec +import reflex as rx +from pcweb import constants +from pcweb.styles.styles import get_code_style, cell_style + +``` + +# Deploy Reflex to Databricks + +This guide walks you through deploying a Reflex web application on Databricks using the Apps platform. + +## Prerequisites + +- Databricks workspace with Unity Catalog enabled +- GitHub repository containing your Reflex application +- Reflex Enterprise license (for single-port deployment) + +## Step 1: Connect Your Repository + +1. **Link GitHub Repository** + - Navigate to your Databricks workspace + - Go to your user directory + - Click **Create** → **Git folder** + - Paste the URL of your GitHub repository containing the Reflex application + +## Step 2: Configure Application Settings + +### Create Configuration File + +Create a new file called `app.yaml` directly in Databricks (not in GitHub): + +```yaml +command: [ + "reflex", + "run", + "--env", + "prod", + "--backend-port", + "$DATABRICKS_APP_PORT" +] + +env: + - name: "HOME" + value: "/tmp/reflex" + - name: "REFLEX_ACCESS_TOKEN" + value: "your-token-here" + - name: "DATABRICKS_WAREHOUSE_ID" + value: "your-sql-warehouse-id" + - name: "DATABRICKS_CATALOG" + value: "your-catalog-name" + - name: "DATABRICKS_SCHEMA" + value: "your-schema-name" + - name: "REFLEX_SHOW_BUILT_WITH_REFLEX" + value: 0 +``` + +### Obtain Required Tokens + +1. **Reflex Access Token** + - Visit [Reflex Cloud Tokens]({constants.REFLEX_CLOUD_URL.rstrip("/")}/tokens/) + - Navigate to Account Settings → Tokens + - Create a new token and copy the value + - Replace `your-token-here` in the configuration +2. **Databricks Resources** + - Update `DATABRICKS_WAREHOUSE_ID` with your SQL warehouse ID + - Update `DATABRICKS_CATALOG` with your target catalog name + - Update `DATABRICKS_SCHEMA` with your target schema name + +## Step 3: Enable Single-Port Deployment + +Update your Reflex application for Databricks compatibility: + +### Update rxconfig.py + +```python +import reflex as rx +import reflex_enterprise as rxe + +rxe.Config(app_name="app", use_single_port=True) +``` + +### Update Application Entry Point + +Modify your main application file where you define `rx.App`: + +```python +import reflex_enterprise as rxe + +app = rxe.App( + # your app configuration +) +``` + +```md alert info +# Also add `reflex-enterprise` and `asgiproxy` to your `requirements.txt` file. +``` + +## Step 4: Create Databricks App + +1. **Navigate to Apps** + - Go to **Compute** → **Apps** + - Click **Create App** +2. **Configure Application** + - Select **Custom App** + - Configure SQL warehouse for your application + +## Step 5: Set Permissions + +If you are using the `samples` Catalog then you can skip the permissions section. + +### Catalog Permissions + +1. Navigate to **Catalog** → Select your target catalog +2. Go to **Permissions** +3. Add the app's service principal user +4. Grant the following permissions: + - **USE CATALOG** + - **USE SCHEMA** + +### Schema Permissions + +1. Navigate to the specific schema +2. Go to **Permissions** +3. Grant the following permissions: + - **USE SCHEMA** + - **EXECUTE** + - **SELECT** + - **READ VOLUME** (if required) + +## Step 6: Deploy Application + +1. **Initiate Deployment** + - Click **Deploy** in the Apps interface + - When prompted for the code path, provide your Git folder path or select your repository folder +2. **Monitor Deployment** + - The deployment process will begin automatically + - Monitor logs for any configuration issues + +## Updating Your Application + +To deploy updates from your GitHub repository: + +1. **Pull Latest Changes** + - In the deployment interface, click **Deployment Source** + - Select **main** branch + - Click **Pull** to fetch the latest changes from GitHub +2. **Redeploy** + - Click **Deploy** again to apply the updates + +## Configuration Reference + +```python eval +rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Environment Variable"), + rx.table.column_header_cell("Description"), + rx.table.column_header_cell("Example"), + ), + ), + rx.table.body( + rx.table.row( + rx.table.cell(rx.code("HOME")), + rx.table.cell("Application home directory"), + rx.table.cell(rx.code("/tmp/reflex")), + ), + rx.table.row( + rx.table.cell(rx.code("REFLEX_ACCESS_TOKEN")), + rx.table.cell("Authentication for Reflex Cloud"), + rx.table.cell(rx.code("rx_token_...")), + ), + rx.table.row( + rx.table.cell(rx.code("DATABRICKS_WAREHOUSE_ID")), + rx.table.cell("SQL warehouse identifier"), + rx.table.cell("Auto-assigned"), + ), + rx.table.row( + rx.table.cell(rx.code("DATABRICKS_CATALOG")), + rx.table.cell("Target catalog name"), + rx.table.cell(rx.code("main")), + ), + rx.table.row( + rx.table.cell(rx.code("DATABRICKS_SCHEMA")), + rx.table.cell("Target schema name"), + rx.table.cell(rx.code("default")), + ), + rx.table.row( + rx.table.cell(rx.code("REFLEX_SHOW_BUILT_WITH_REFLEX")), + rx.table.cell("Show Reflex branding (Enterprise only)"), + rx.table.cell([rx.code("0"), " or ", rx.code("1")]), + ), + ), + variant="surface", + margin_y="1em", +) +``` + +## Troubleshooting + +- **Permission Errors**: Verify that all catalog and schema permissions are correctly set +- **Port Issues**: Ensure you're using `$DATABRICKS_APP_PORT` and single-port configuration +- **Token Issues**: Verify your Reflex access token is valid and properly configured +- **Deployment Failures**: Check the deployment logs for specific error messages + +## Notes + +- Single-port deployment requires Reflex Enterprise +- Configuration must be created directly in Databricks, not pushed from GitHub +- Updates require manual pulling from the deployment interface diff --git a/docs/hosting/deploy-quick-start.md b/docs/hosting/deploy-quick-start.md new file mode 100644 index 00000000000..ade0fc99a6f --- /dev/null +++ b/docs/hosting/deploy-quick-start.md @@ -0,0 +1,90 @@ +# Reflex Cloud - Quick Start + +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +from reflex_image_zoom import image_zoom +from pcweb.pages import docs +``` + +So far, we have been running our apps locally on our own machines. +But what if we want to share our apps with the world? This is where +the hosting service comes in. + +## Quick Start + +Reflex’s hosting service makes it easy to deploy your apps without worrying about configuring the infrastructure. + +### Prerequisites + +1. Hosting service requires `reflex>=0.6.6`. +2. This tutorial assumes you have successfully `reflex init` and `reflex run` your app. +3. Also make sure you have a `requirements.txt` file at the top level app directory that contains all your python dependencies! (To create a `requirements.txt` file, run `pip freeze > requirements.txt`.) + + +### Authentication + +First run the command below to login / signup to your Reflex Cloud account: (command line) + +```bash +reflex login +``` + +You will be redirected to your browser where you can authenticate through Github or Gmail. + +### Web UI + +Once you are at this URL and you have successfully authenticated, click on the one project you have in your workspace. You should get a screen like this: + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/cloud_project_page.webp", alt="Reflex Cloud Dashboard")) +``` + +This screen shows the login command and the deploy command. As we are already logged in, we can skip the login command. + +### Deployment + +Now you can start deploying your app. + +In your cloud UI copy the `reflex deploy` command similar to the one shown below. + +```bash +reflex deploy --project 2a432b8f-2605-4753-####-####0cd1#### +``` + +In your project directory (where you would normally run `reflex run`) paste this command. + +The command is by default interactive. It asks you a few questions for information required for the deployment. + + +1. The first question will compare your `requirements.txt` to your python environment and if they are different then it will ask you if you want to update your `requirements.txt` or to continue with the current one. If they are identical this question will not appear. To create a `requirements.txt` file, run `pip freeze > requirements.txt`. +2. The second question will search for a deployed app with the name of your current app, if it does not find one then it will ask if you wish to proceed in deploying your new app. +3. The third question is optional and will ask you for an app description. + + +That’s it! You should receive some feedback on the progress of your deployment and in a few minutes your app should be up. 🎉 + +For detailed information about the deploy command and its options, see the [Deploy API Reference]({docs.cloud.deploy.path}) and the [CLI Reference](https://reflex.dev/docs/api-reference/cli/). + + +```md alert info +# Once your code is uploaded, the hosting service will start the deployment. After a complete upload, exiting from the command **does not** affect the deployment process. The command prints a message when you can safely close it without affecting the deployment. +``` + +If you go back to the Cloud UI you should be able to see your deployed app and other useful app information. + + +```md alert info +# Setup a Cloud Config File +To create a `config.yml` file for your app to set your app configuration check out the [Cloud Config Docs]({docs.hosting.config_file.path}). +``` + +```md alert info +# Moving around the Cloud UI +To go back, i.e. from an app to a project or from a project to your list of projects you just click the `REFLEX logo` in the top left corner of the page. +``` + +```md alert info +# All flag values are saved between runs +All your flag values, i.e. environment variables or regions or tokens, are saved between runs. This means that if you run a command and you pass a flag value, the next time you run the same command the flag value will be the same as the last time you ran it. This means you should only set the flag values again if you want to change them. +``` diff --git a/docs/hosting/deploy-with-github-actions.md b/docs/hosting/deploy-with-github-actions.md new file mode 100644 index 00000000000..55ff68ad7a1 --- /dev/null +++ b/docs/hosting/deploy-with-github-actions.md @@ -0,0 +1,118 @@ +```python exec +from pcweb.pages import docs +import reflex as rx +from pcweb.styles.styles import get_code_style, cell_style + +github_actions_configs = [ + { + "name": "auth_token", + "description": "Reflex authentication token stored in GitHub Secrets.", + "required": True, + "default": "N/A" + }, + { + "name": "project_id", + "description": "The ID of the project you want to deploy to.", + "required": True, + "default": "N/A" + }, + { + "name": "app_directory", + "description": "The directory containing your Reflex app.", + "required": False, + "default": ". (root)" + }, + { + "name": "extra_args", + "description": "Additional arguments to pass to the `reflex deploy` command.", + "required": False, + "default": "N/A" + }, + { + "name": "python_version", + "description": "The Python version to use for the deployment environment.", + "required": False, + "default": "3.12" + } +] +``` + +# Deploy with Github Actions + +This GitHub Action simplifies the deployment of Reflex applications to Reflex Cloud. It handles setting up the environment, installing the Reflex CLI, and deploying your app with minimal configuration. + +```md alert info +# This action requires `reflex>=0.6.6` +``` + +**Features:** +- Deploy Reflex apps directly from your GitHub repository to Reflex Cloud. +- Supports subdirectory-based app structures. +- Securely uses authentication tokens via GitHub Secrets. + +## Usage +### Add the Action to Your Workflow +Create a `.github/workflows/deploy.yml` file in your repository and add the following: + +```yaml +name: Deploy Reflex App + +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Deploy to Reflex Cloud + uses: reflex-dev/reflex-deploy-action@v1 + with: + auth_token: ${\{ secrets.REFLEX_PROJECT_ID }} + project_id: ${\{ secrets.REFLEX_PROJECT_ID }} + app_directory: "my-app-folder" # Optional, defaults to root + extra_args: "--env THIRD_PARTY_APIKEY=***" # Optional + python_version: "3.12" # Optional +``` + +### Set Up Your Secrets +Store your Reflex authentication token securely in your repository's secrets: + + +1. Go to your GitHub repository. +2. Navigate to Settings > Secrets and variables > Actions > New repository secret. +3. Create new secrets for `REFLEX_AUTH_TOKEN` and `REFLEX_PROJECT_ID`. + +(Create a `REFLEX_AUTH_TOKEN` in the tokens tab of your UI, check out these [docs]({docs.hosting.tokens.path}#tokens). + +The `REFLEX_PROJECT_ID` can be found in the UI when you click on the How to deploy button on the top right when inside a project and copy the ID after the `--project` flag.) + + + +### Inputs + +```python eval +rx.table.root( + rx.table.header( + rx.table.row( + rx.table.column_header_cell("Name"), + rx.table.column_header_cell("Description"), + rx.table.column_header_cell("required"), + rx.table.column_header_cell("Default"), + ), + ), + rx.table.body( + *[ + rx.table.row( + rx.table.cell(rx.code(github_config["name"], style=get_code_style("violet"))), + rx.table.cell(github_config["description"], style=cell_style), + rx.table.cell(rx.code(github_config["required"], style=get_code_style("violet"))), + rx.table.cell(rx.code(github_config["default"], style=get_code_style("violet")), min_width="100px"), + ) + for github_config in github_actions_configs + ] + ), + variant="surface", +) +``` diff --git a/docs/hosting/logs.md b/docs/hosting/logs.md new file mode 100644 index 00000000000..1ab4144959e --- /dev/null +++ b/docs/hosting/logs.md @@ -0,0 +1,46 @@ +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +from reflex_image_zoom import image_zoom +from pcweb.pages.docs import hosting +from pcweb.pages import docs +from pcweb.styles.styles import get_code_style, cell_style +``` + +## View Logs + +To view the app logs follow the arrow in the image below and press on the `Logs` dropdown. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/view_logs.webp", padding_bottom="20px")) +``` + +```md alert info +# CLI Command to view logs +`reflex cloud apps logs [OPTIONS] [APP_ID]` +``` + +## View Deployment Logs and Deployment History + +To view the deployment history follow the arrow in the image below and press on the `Deployments`. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/view_deployment_logs.webp")) +``` + +This brings you to the page below where you can see the deployment history of your app. Click on deployment you wish to explore further. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/view_deployment_logs_2.webp", padding_bottom="20px")) +``` + +```md alert info +# CLI Command to view deployment history +`reflex cloud apps history [OPTIONS] [APP_ID]` +``` + +This brings you to the page below where you can view the deployment logs of your app by clicking the `Build logs` dropdown. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/view_deployment_logs_3.webp")) +``` \ No newline at end of file diff --git a/docs/hosting/machine-types.md b/docs/hosting/machine-types.md new file mode 100644 index 00000000000..e4056f5eb78 --- /dev/null +++ b/docs/hosting/machine-types.md @@ -0,0 +1,35 @@ +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +from reflex_image_zoom import image_zoom +from pcweb.pages.docs import hosting +from pcweb.pages import docs +from pcweb.styles.styles import get_code_style, cell_style +``` + +## Machine Types + + +To scale your app you can choose different VMTypes. VMTypes are different configurations of CPU and RAM. + +To scale your VM in the Cloud UI, click on the `Settings` tab in the Cloud UI on the app page, and then click on the `Scale` tab as shown below. Clicking on the `Change VM` button will allow you to scale your app. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/scaling_vms.webp", padding_bottom="20px")) +``` + +### VMTypes in the CLI + +To get all the possible VMTypes you can run the following command: + +```bash +reflex cloud vmtypes +``` + +To set which VMType to use when deploying your app you can pass the `--vmtype` flag with the id of the VMType. For example: + +```bash +reflex deploy --project f88b1574-f101-####-####-5f########## --vmtype c2m4 +``` + +This will deploy your app with the `c2m4` VMType, giving your app 2 CPU cores and 4 GB of RAM. \ No newline at end of file diff --git a/docs/hosting/regions.md b/docs/hosting/regions.md new file mode 100644 index 00000000000..e4283214147 --- /dev/null +++ b/docs/hosting/regions.md @@ -0,0 +1,151 @@ +```python exec +import reflex as rx +from reflex_image_zoom import image_zoom +from pcweb.constants import REFLEX_ASSETS_CDN, REFLEX_CLOUD_URL +from pcweb.pages.docs import hosting +from pcweb.pages import docs +from pcweb.styles.styles import get_code_style, cell_style + + +REGIONS_DICT = { + "ams": "Amsterdam, Netherlands", + "arn": "Stockholm, Sweden", + "bom": "Mumbai, India", + "cdg": "Paris, France", + "dfw": "Dallas, Texas (US)", + "ewr": "Secaucus, NJ (US)", + "fra": "Frankfurt, Germany", + "gru": "Sao Paulo, Brazil", + "iad": "Ashburn, Virginia (US)", + "jnb": "Johannesburg, South Africa", + "lax": "Los Angeles, California (US)", + "lhr": "London, United Kingdom", + "nrt": "Tokyo, Japan", + "ord": "Chicago, Illinois (US)", + "sjc": "San Jose, California (US)", + "sin": "Singapore, Singapore", + "syd": "Sydney, Australia", + "yyz": "Toronto, Canada", +} + +COUNTRIES_CODES = { + "ams": "NL", + "arn": "SE", + "bom": "IN", + "cdg": "FR", + "dfw": "US", + "ewr": "US", + "fra": "DE", + "gru": "BR", + "iad": "US", + "jnb": "ZA", + "lax": "US", + "lhr": "GB", + "nrt": "JP", + "ord": "US", + "sjc": "US", + "sin": "SG", + "syd": "AU", + "yyz": "CA", +} + + +``` + +## Regions + +To scale your app you can choose different regions. Regions are different locations around the world where your app can be deployed. + +To scale your app to multiple regions in the Cloud UI, click on the `Settings` tab in the Cloud UI on the app page, and then click on the `Regions` tab as shown below. Clicking on the `Add new region` button will allow you to scale your app to multiple regions. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/scaling_regions.webp", padding_bottom="20px")) +``` + +The table below show all the regions that can be deployed in. + +```python eval +rx.el.table( + rx.el.thead( + rx.el.tr( + rx.el.th( + rx.el.div( + "Region", + ), + class_name="px-6 py-3 text-left text-sm font-semibold text-secondary-12 text-nowrap", + ), + rx.el.th( + rx.el.div( + "Country", + ), + class_name="px-6 py-3 text-left text-sm font-semibold text-secondary-12 text-nowrap", + ), + ), + class_name="bg-slate-2", + ), + rx.el.tbody( + *[ + rx.el.tr( + rx.el.td( + rx.el.div( + region, + class_name="h-5 rounded-md border justify-start items-center inline-flex bg-slate-1 text-xs font-medium shrink-0 px-1.5 w-fit text-slate-12 border-slate-6" + ), + class_name="px-6 py-3", + ), + rx.el.td( + rx.el.div( + rx.image( + src=f"{REFLEX_CLOUD_URL.rstrip('/')}/flags/{COUNTRIES_CODES[region]}.svg", + class_name="rounded-[2px] mr-2 w-5 h-4", + ), + REGIONS_DICT[region], + class_name="flex flex-row items-center gap-2", + ), + class_name="px-6 py-3 text-sm font-medium text-slate-9" + ), + class_name="even:bg-slate-2 odd:bg-slate-1 hover:bg-secondary-3", + ) + for region in REGIONS_DICT.keys() + ], + class_name="divide-y divide-slate-4", + ), + class_name="w-full table-fixed rounded-xl overflow-hidden divide-y divide-slate-4", +) +``` + +### Selecting Regions to Deploy in the CLI + +Below is an example of how to deploy your app in several regions: + +```bash +reflex deploy --project f88b1574-f101-####-####-5f########## --region sjc --region iad +``` + +By default all apps are deloyed in `sjc` if no other regions are given. If you wish to deploy in another region or several regions you can pass the `--region` flag (`-r` also works) with the region code. Check out all the regions that we can deploy to below: + + +## Config File + +To create a `config.yml` file for your app run the command below: + +```bash +reflex cloud config +``` + +This will create a yaml file similar to the one below where you can edit the app configuration: + +```yaml +name: medo +description: '' +regions: + sjc: 1 + lhr: 2 +vmtype: c1m1 +hostname: null +envfile: .env +project: null +packages: +- procps +``` + diff --git a/docs/hosting/secrets-environment-vars.md b/docs/hosting/secrets-environment-vars.md new file mode 100644 index 00000000000..14b7af5b023 --- /dev/null +++ b/docs/hosting/secrets-environment-vars.md @@ -0,0 +1,55 @@ +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +from reflex_image_zoom import image_zoom +``` + +# Secrets (Environment Variables) + + +## Adding Secrets through the CLI + +Below is an example of how to use an environment variable file. You can pass the `--envfile` flag with the path to the env file. For example: + +```bash +reflex deploy --project f88b1574-f101-####-####-5f########## --envfile .env +``` + +In this example the path to the file is `.env`. + + +If you prefer to pass the environment variables manually below is deployment command example: + +```bash +reflex deploy --project f88b1574-f101-####-####-5f########## --env OPENAI_API_KEY=sk-proj-vD4i9t6U############################ +``` + +They are passed after the `--env` flag as key value pairs. + +To pass multiple environment variables, you can repeat the `--env` tag. i.e. `reflex deploy --project f88b1574-f101-####-####-5f########## --env KEY1=VALUE1 --env KEY2=VALUE`. The `--envfile` flag will override any envs set manually. + + +```md alert info +# More information on Environment Variables +Environment variables are encrypted and safely stored. We recommend that backend API keys or secrets are entered as `envs`. Make sure to enter the `envs` without any quotation marks. We do not show the values of them in any CLI commands, only their names (or keys). + +You access the values of `envs` by referencing `os.environ` with their names as keys in your app's backend. For example, if you set an env `ASYNC_DB_URL`, you are able to access it by `os.environ["ASYNC_DB_URL"]`. Some Python libraries automatically look for certain environment variables. For example, `OPENAI_API_KEY` for the `openai` python client. The `boto3` client credentials can be configured by setting `AWS_ACCESS_KEY_ID`,`AWS_SECRET_ACCESS_KEY`. This information is typically available in the documentation of the Python packages you use. +``` + +## Adding Secrets through the Cloud UI + +To find the secrets tab, click on the `Settings` tab in the Cloud UI on the app page. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/environment_variables.webp")) +``` + +Then click on the `Secrets` tab as shown below. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/environment_variables_2.webp")) +``` + +From here you can add or edit your environment variables. You will need to restart your app for these changes to take effect. + +This functionality in the UI can be disabled by an admin of the project. \ No newline at end of file diff --git a/docs/hosting/self-hosting.md b/docs/hosting/self-hosting.md new file mode 100644 index 00000000000..2e687a11970 --- /dev/null +++ b/docs/hosting/self-hosting.md @@ -0,0 +1,121 @@ +```python exec +import reflex as rx + +from pcweb.pages.docs import getting_started +from pcweb.pages.pricing.pricing import pricing_path +``` + +# Self Hosting + +We recommend using `reflex deploy`, but if this does not fit your use case then you can also host your apps yourself. + +Clone your code to a server and install the [requirements]({getting_started.installation.path}). + +## API URL + +Edit your `rxconfig.py` file and set `api_url` to the publicly accessible IP +address or hostname of your server, with the port `:8000` at the end. Setting +this correctly is essential for the frontend to interact with the backend state. + +For example if your server is at `app.example.com`, your config would look like this: + +```python +config = rx.Config( + app_name="your_app_name", + api_url="http://app.example.com:8000", +) +``` + +It is also possible to set the environment variable `API_URL` at run time or +export time to retain the default for local development. + +## Production Mode + +Then run your app in production mode: + +```bash +reflex run --env prod +``` + +Production mode creates an optimized build of your app. By default, the static +frontend of the app (HTML, Javascript, CSS) will be exposed on port `3000` and +the backend (event handlers) will be listening on port `8000`. + +```md alert warning +# Reverse Proxy and Websockets +Because the backend uses websockets, some reverse proxy servers, like [nginx](https://nginx.org/en/docs/http/websocket.html) or [apache](https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#protoupgrade), must be configured to pass the `Upgrade` header to allow backend connectivity. +``` + +## Exporting a Static Build + +Exporting a static build of the frontend allows the app to be served using a +static hosting provider, like Netlify or Github Pages. Be sure `api_url` is set +to an accessible backend URL when the frontend is exported. + +```bash +API_URL=http://app.example.com:8000 reflex export +``` + +This will create a `frontend.zip` file with your app's minified HTML, +Javascript, and CSS build that can be uploaded to your static hosting service. + +It also creates a `backend.zip` file with your app's backend python code to +upload to your server and run. + +You can export only the frontend or backend by passing in the `--frontend-only` +or `--backend-only` flags. + +It is also possible to export the components without zipping. To do +this, use the `--no-zip` parameter. This provides the frontend in the +`.web/build/client/` directory and the backend can be found in the root directory of +the project. + +## Reflex Container Service + +Another option is to run your Reflex service in a container. For this +purpose, a `Dockerfile` and additional documentation is available in the Reflex +project in the directory `docker-example`. + +For the build of the container image it is necessary to edit the `rxconfig.py` +and the add the `requirements.txt` +to your project folder. The following changes are necessary in `rxconfig.py`: + +```python +config = rx.Config( + app_name="app", + api_url="http://app.example.com:8000", +) +``` + +Notice that the `api_url` should be set to the externally accessible hostname or +IP, as the client browser must be able to connect to it directly to establish +interactivity. + +You can find the `requirements.txt` in the `docker-example` folder of the +project too. + +The project structure should looks like this: + +```bash +hello +├── .web +├── assets +├── hello +│ ├── __init__.py +│ └── hello.py +├── rxconfig.py +├── Dockerfile +└── requirements.txt +``` + +After all changes have been made, the container image can now be created as follows. + +```bash +docker build -t reflex-project:latest . +``` + +Finally, you can start your Reflex container service as follows. + +```bash +docker run -d -p 3000:3000 -p 8000:8000 --name app reflex-project:latest +``` diff --git a/docs/hosting/tokens.md b/docs/hosting/tokens.md new file mode 100644 index 00000000000..b7a6442f785 --- /dev/null +++ b/docs/hosting/tokens.md @@ -0,0 +1,22 @@ +```python exec +import reflex as rx +from pcweb.constants import REFLEX_ASSETS_CDN +from reflex_image_zoom import image_zoom +``` + +# Tokens + +A token gives someone else all the permissions you have as a User or Admin. They can run any Reflex Cloud command from the CLI as if they were you, using the `--token` flag. A common use case is for GitHub Actions (you store this token in your secrets). + +To access or create tokens, first click the avatar in the top-right corner to open the drop-down menu, then click `Account Settings`. + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/hosting_tokens_1.webp", alt="Adding tokens to Reflex Cloud", padding="1em 0em")) +``` + +Clicking `Account Settings` will redirect you to both the `Settings` and `Tokens` dashboards. Click the `Tokens` tab at the top to access your tokens or create new ones. + + +```python eval +image_zoom(rx.image(src=f"{REFLEX_ASSETS_CDN}other/hosting_tokens_2.webp", alt="Adding tokens to Reflex Cloud", padding="1em 0em")) +``` diff --git a/docs/images/dalle.gif b/docs/images/dalle.gif deleted file mode 100644 index 74d487849e92c951c9f2550c7d5e69a744ec6ac8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 918253 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 z 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 z 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

FY}>2l?AP2`(Z0^8*T&_Ed&h!~|{RvJ;$-W4b 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

F%}knqBvBD2}Y#zn3_gcmIrS$G$0 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 diff --git a/docs/images/dalle_colored_code_example.png b/docs/images/dalle_colored_code_example.png deleted file mode 100644 index 18c8307c545ca31dbbaee3a572754430f596da6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 378844 zcmd?RgIg(8LG?(VWUzwL9*dGz%A z{sHfD-PfH>GRb5zk@?K9A5@iPQIUv{ARr)6<>jQ*As}E2z)w2@960B^Tl58cKDAS4J{;iXFYrl&%IzW5QY*GS8*(y~;W4xM;r&a68Qo8hhOR-t5NZ z1)(a`kNM%Nng@hysLw{aNznamzJ*{3JVh`B!3i#!ARbgQKpHXx7OV>+TUrM6IVHpyW2M|@cnG!OjMwAX@*ECgiYVBj-ZeNyBQ7a8 zMZ@Q!A5{!ckT>ukk~R2ATm&IXkK>DW-KKKG?ErnT5?Nvh!9=8H*`Gg`2)}7_=!3(6N35mp z!S%QMMDZS#!+_Ezgd&aaIDY1}S@Vql6<;$0p!YdcVdQKEIi+fo*w2V!3yr z#ES=9cE!Y?1~S(M7GkDzwtxmMsi!u?pr0bm#8HI1%3+-lc??~GmWWFwEe+sj;cuFd zqkH=TOf9sBzT)^OmPx$GKLELI*KHXdhhi;~h2I{@Haz>}msXS>R!7#&0A^&f><^sV zb$dksgVs-~0c33vPe&hE2GGoQYo_L;j|gTU_U7cvG41I3Q-44nf>0$tQC;7nNej(CmCKxBChb`Sov%Nj;p4goip()T@wS;!pa7y|UUI8=f& z4V=7$dc3>Td%1YsA*g&D-7pOb{dgh^fGdnZjDeJ3ywDJJKE6+kzXXQ{?6d@`nxZ@R zu-Hc%0-^|IiK!p9Hk2(GhT*As(|b;JWFj#}GQgb7J!E$X=ycA)cOOk|2%ybP6LdIJ z!#~sr=pbr^YnprLVEd2FRx6jIKfK3wAyOVZUPnUf-gIFVMa_Q4*3Wd7=`FJI*0`5^ z{ppquD#b*sn%Wy{F7!Oqy~kaGBR9G_(>dK4uS0P;)Juv=Ey70HJ>t|1izA6YsVTWB zq$$lia!&k+3N2oaMkJB+TLzB&M*M|bfBtp;a(+^NS-#UGJgp_IIjwa8MS%rvu6ly{ z$4S-#Yz6INWE-9 z-DUO6f-$x1Jfo68si)NYV7S-4^3>|ovgRcNtT9nUBA;kpD~^i2&f1X}t@vck-D*QH z8a?pE#TMCS(ZA^Gqs`&8G+9%1Wz^3dyaJ5>gk+mldg#&_BmCHrj@g3)9i%U zglx6KA4GZBGVKH0=H%uf=R})H1LOM(?sOsW9=QW@2W)a`%ck ztuU>6El@?tOvlVrd09o(B8DRYuP!gK!-AulzV;%@qQWARXK`jmW|z}D!$F1~hB&nz zwdp*k`La2#_5=T)%pR3^?yRt!U?jGMgmv+3z<)>c#EEy{K zwqIXc!8O}Fd3R56keuiWh)zF8^;3cPt5^bfUH%|PHQD%D>^s6%Yx3l&bgQB7r#_`d)`A02s{iD zRjdiTVnPCP9n4$yA#MhdV%}oF9FMovSqX-OoX*g2yuO1ZZ<=B63AzV*Cg}oJAr>C7 z7Um8A60ZTt3O5=lzM#`}(*q_RX3zU@IgD?y2Bdcs!;E%%KY!SmxofyvUQH1crR#F+ zn%maAG4ty0h`Nl^C-Y)k5j4VD{hX7^&XG&E9$+T6QQ9|lo;Ns779=1KkdObFuB4zW zw~{5yPU+mUfVhlpNROw|Ch*Npy*ocD>6+eJMO0MU5y^VE8%ILHY`8L+?X#RRk2OU~ zre4azxTVXii}Bf`x4n0}Kk%9Hxt9C1PSaLoe`UXH%8$#RYnbyMhFLspP18zlr|>&S zH$hkED_kvhEog^fJAaD=(+;UNl;urKA)eAP#{7p!>C7qNqKeEJHZ*MDxU?(%Ht&vY zH~O8{hx#r2Z+ZUNkHe4XQ`m*%%o7Y4cy(jdnKc#zwLLjKt5zFa&0HDQAHRPB9R6_F zIbv~(7btQ2wEJn)kiXH-=&UXC^3`SS&Wq8OPF?BV@!LMw*T|^&WBPN~if3%~{iXdI z8~Ragc#e9}Y#P6sP+--RirW)HRmt>C|aU{SW$=jiSq`)yI#( z=vBLhLm=Dovqyxp?Cw~4CJWCA4^JzKCrg#IJ#Bq^EB%SnDt2{I%~*%ih*4&H!9$nm zw~pP1H#e)o7@j$I6q_c?lu?qJ5w;PE2MPCt*H5T~sF^YHF{H8*aol`9Jfxxr&hCR8 zN#-eo^>J(faeXNzg@7Mfb`@*(Y{clm4gQZ@FgmzvwTFg=e-qv+gZ@y!?Ji z&*p8+@A>0$BSA4*5jAa@b+)mkf$Vwt8r19PE zRy<6Lc)oZjs}J%I0x_MJbOlAt-zk=4`!XlBXk?dbfg9SC7>L2%O1(%qE8+tIK`=(!RcSwY*ZBgsN!xfLZ$Osl|mBeYDvM%%FfD8C5l8rK_TpFVI`<8CG#ga_?rlo zjk~+EARC*PmlvxS7c0=!nvFw1K!A;%lZ}&;1zdy0&Bw{z)SJc0jrxy9{%S|c(#_n} z*4f<_=tS|WT~jllhr0+B)vu2J`T2uSOK;nM_2lIC=di#7WcyXZ#=*+Y_IG6NwpPC( z`&IG>*+0hhM|Z-%8WYrXvvidNIyzc9xr_cw;==#v=|2kp#pfS{se~|uL(Z7-Y8ib&_r5n(}$|R`sFJT2~G|KEQ1&%l4>y2|0F}uFxWl1IJ^=5w)9V$V9GAlPi!#% zN0mKx$nZ&0nNeu9zv<(zo+WKN;C{ykxK2(l41t0d0S~&=Uj%={HA=x9(f>IdY!ilM z)1Sf^e?$A%;MtRR?EeooVFi_fbKN7S(t`yKQ_{R8UmY(SgYrg(C+7VPIjYXlP(OBcQ`z!v>zlkWrD5!>X#PE)@d{e>W{- zk|C^w3X5e&{MC;bH)AT2I<5?o`?Xg+%Z+TPz_vTI$s6+Ed57?{H2i@$;&-P@ZuG9M zZs$vGZ0i;>bVr^-jKfT4dE}ze3DgnU1-09zuYNcCV-yp#lD6c=++@(ac;Jsml8fK8y`y_6g&w9 zFa$i_A|B1RqEE4Ve@YCKO532FLF=5~lb!^sq@DDCE=^?^fHN1b8gjk&?4 zfEWMQlO_#xp)GI7_b1pN-fo5s1TJ6;wHVWEsGC8sQS6FkebMOr9fF} zX|>O#R(|&PU@akfdN0X?V4OUj2>U!izQ@OfO4+*C3;sv*wfKXvq-kyy68Rd&hXVHx z56!W9ucl{wQJ_GZ*W(E(=HXRaqUCp`fAJEzT&C z6*^B)iTS7jon6%gv=u7gY&8Re=;aL@OtM(f0N+-$1Y^};!`7RepqCDrf|f(bmESC1 zF?y^$*W9a8{FyJzjo+pD*AfHMomUBFXML&NfV^6rO=ux%Ay_yWsx*+-9sRjqjRpMQ z`K!5qMOXoR4n4_hA$&N#b>O=|+oq(Ul#=-7pH2(II{GRss0qOOve|!zUV%!>qhoX* zr#S>rr^qb;IN*9Besd%U*hN4|pT{?%ljl;289fC`=7y%$VClp)nIfbtd?W0{@Cq8~C{HakpNdj5F% z(iimdK!?X{5RFt~pscJck-gGxkn1il|LXa6x6^bmHWMMKtEF@p&OQYfv=jhuWyDXa zcUQjI_W}FX_nC^CeHz2>aOT*1yZ(hRu79w9eNxeiuu=a$Zj1+%G=BaJPu{B^i;F`N zdUQmhL;!$87r8am72_C6pBy}T$D-e0-ao8)+bJ6qjM*DO1PZ#jOY^?00G$o>qBjU8 z8{Hid`H*gn5Mu?(FjN4Yq;4X+`a3_ZV=5hHP^~_Ca(o4CcOC7TI~eO4d?-~Q9#|EE zdt%+2o*dz8c-fj_b6)Ebx0!f3;tCpM3wpx2QMfG!(&fuR0BqJEsFNEONpFv8*<3Vw z9@2~-8|}}B8n^Bnofcy|pSIB}1Vz2R{Qbr!CX3+x@@Nfs(Uc`Au88H(=~=?$Lldw1 zCQ`kd5rFU-MLMoVo@{ED?7QSbA~b>PwV0BRvv4G*qOi{y-SQ7UakR>33Q6@2jGN~i^>IKk&F zPI#yLE6Er;w6n4`8&XV9&I)tE_f`?3w2w1uu2hib$;S1?=e|21eGFq@WbENZWDdID z+LTjLV(%H(t+gUBtzwnBT{r}q++ApTAIZk8!LPoMRd(DXSy)PQ zvN1A-!*%WN(Q8&ee5cT$mG+>{bw*gA9O& zW*^wv9~oH_-R}F@0^izKwm{X?aNMr-He|kOQ z`5zAKfhJ3H98Krp_J_*LM^*KlfqgNO92!P^_f`?#Hev#hC!;3>M0sX-RPJw-9DMzd z;fymQqXGp$o8*$TW;f>p{*xvsL*g%K#%%{Ln@zl|9f-! z$0gyIM)l3}f^t&!sBHi(LG(Vcr3T4^9FKidohHHu={P=OM z$rQV?#TAWC<vZPk)FIK5rb8m~Wv*Fjc0<&?;)1%wOQ%_L9FuB3>9o zlk=rby#@L_fx2#LD)X{YW&mm!k2x0d%+1hn z##fN``lw+fBr7Eqs+Qu|C{OOv2(^VdY43YgoZ!8)I!-O-%O3R7eM+U?Ad<8mpQFpP z!{uq+t*2*Mr|zO5aPYe1>DxQAx7C|dhFChgUqH!OGUFE}%~cfx(fd;qA_DX2C&Nsv z?_O6LufjN^k&}}z`3zRbDK5qZJ#Omim8#XS7x+GBGAbbvSwPN`^lGg-NJWIK>Hgp z3x#ISZ>437k8W?9xJof*`kCsrZ_i)vzmE^&^59THEy+xoI2oMjXRGpiMsj$uz`s$9 zN~^DO>>A!JozQ12qnA_JpJ_OC1`LFrn;RMnKG?RN@Owx~9#Bfc5hDx75_4nJaC~*9 zga6IlTd)~Ia-S|Mr}QhM?TaZVp5o6@=4UJOZa~@6sVK>f-CV&JEq#9X{#?z*j!EMC zEWZ=4BTL7xndGerh2eHd|O&Y`oDu0?vHj zpKEsG6U};f)$uX`Ez_DX^ZBr4mQS(j3`Oa#8|ErCaQj|H(nk$8wo+tf&HY}Fz-LM| z57^8a*c>!Zd30yT_TBYm3x0s7NkxCPWP01!pF_nrP$dD6jOqMaQTAqweU&SV!u-tO zrvGnD0~=(p9TdZ$m8zEzR1N`&2{{nqWQABg91**CFEyJrGpPW+H0?j*gFKdJ z7l>~dZQrO(6*kqssq+Rn-eC|EM;YiUjn8l7^(TE^M_W!xs!Kwc)tAkD_;*0N&fO)RuaoN%*7YV$ot0Z3LA5Zz{%`lUrq*lh{QlMCF-!SW= z?>z~?I1f1nLv{7HMOn{DZ67Ak(M7Hd^XenQC*KuVd)plZ?_`NK=KbbijzD%V2}3I@ zD^t@_ja5IsG|({(ZCv1#?3_Vw)r4Bsij91Wln)#ilU6I>0G(8U2u1S!#2bwy&8hi$hjcVJ zc5_%ObzbeNhkW^-NC&cYU~TU#FGpFx%WGMnY#dRedHPhggoomOLQIYyg-IR0{tg{5 z0KS)kt*-YQ8(1Vlo(6b?O9*AmZC-S}%$joxc2puFhGV&N{Bb=!RB^AYzo*B7y*zC< zt9DjeaUVEy!)LbQ2u3{BR=vB0xZ7?z5jSyRy${jyEt$|J= zwAwoFW?GAj<4;l1eq(vNtB0^^zB1Hw>g_2?%awq#jaY^}hW7U!Rof!_&gD%X03^W* z@2ih&(YuESK6umL_-DdJjGAi5gFen6zhkSa5S&g$m8>ERy?8`ozCAWWr0BH}7iLm$ zQ{dQ0HGLmnwLF;ESs^u(<*-><5M&%SWVD{{y{e-Uj75` zTh;cRk*rVCrK0_(9WRtK6^k}7-KQN7lz6NLZx5?liSlT=JjktV({e%f1W&E2FPPuH zEwAk!GC`hlTpi6rKRsNBNx$8miA_(pQOe|$hnfOy`STLAf2xPSiVM80wjU0GhF^Pr zI2m|Z@rKuLbOLYg{0a&qTRsiMj?yji#`YD)EA+?@B49X~0N@l|Gm)#s0}ltc;i^02 z@^p{teZH-IJ{L#E@m6nkYqW`DqmWYPaTizTX+u!z`UCe0Mm3CHykILJRt`Dtd%J)f z0gine@6~9Sqnnr6E`BQ}34N6G@B_-7EHXwS#@iaNScichL@Qg(_(rK=$ml~E5Gmfu z_kOZ6GHatiB^|5UeezBCt{=P~_gegeaG|MJF--JAs<z^1i`AYUKsr(D3k|_O`jWvx6%6 ziUqFmp+yNEMWvv6Ek|-uf1HRo5^+^kiu5QU^@-eGhUC(dzCI~| z2!86E87)%5$O2z}A$okw^>qZ~vI>QnfNOsx*BJ0EwgTx#6lY{Yy>aQ!Z2<&D6mg3< z=iA$l32qd#-Yl>RO!%btg3R9-Lv9jhW)nMfF{#GOI-bWYFh|S>RlGF{{1gFhs8@## zTt9f3`Y#MR+R{%MG*7GQTe)-+RU?aGfsJ67XMXTyT4G5?hhvpP_ z-3X%W7X1C@3C?w1L9T0iylJDS{%sX7eo?0toO|_3z_FrR{Qm&Jj+we{NRJOk=KuaG z_7Bjd>veF-q!U4#{QupKYD++XfY5Ia>t78uA+jfX_O8AD&Gz$4KsLtU1MmNvo!mNN zIH3C9Yx=KTu?HmfWG7?eG3Eb*WhW>@-elHM7Rmb?6pa+^WsuMr|qkJ!s^MB^(a!!LS}G_JqplDPR$KAApQ*vZGSigJmON zU0Ei=M#II0{0te0fQV*0-s|l2TMlDj{1W$wn8ADa8z>?uL$FJDI>)&G;7%6QB=w!zL73+>tOR z>V^OPS(L!@$z+TCRhQAeIB6n6@1d4w!d)DsSw3YesyhQTFm}FBnH~D zSaQ8YCE$04Xlt`Wb>JnQDL0G*0d5fl1bh&XQM)~6jbb>=WhvQn8e9Vo8;)tI7pR!1lOkmTaxk^_v=)L4xQniGRFsS zl9#UTcivAyz}6d7bo5@-S;KeWO>j1#?YE2GT^aH;`{ii2^WbyQ%$e@CyotjNU$5fZ z4aqXJUcgUukpVg%htD-a$i%BlDDs>?fHJ@>(y_s3TKIMH{kW67Bxm<0mvm;jKGfop zugkn%^k|j*(QmP(-;-j*^yMNB96OSqh=CDis+I`iOQECbxyD-vycb)6p4Nz5u;qhr ziWzIpX}nYEuqpi6^y`UgqJCtwq3)1Cygkg1*3Oj(r(SGTFbvmy-Yu87D9CNW=i`?v zaW8*(Oop9^NrG*2HL6U2#rBk_KYQ;tdm`d}un*`pYcLszw%wbpLI)p^(FG$~a{M9~ zxw*Lm=N<`NUaJon8I2D8-R~mU?Y0n5QqO#+c35;8ouCVqKEj}W$lS~T;%%g88_B*r zKe1b0NP*3~%^+Y$%u<^$3Lz(fRqgzo`!DS5R0Ofo%`L$=J`QnnkcyQRZ}qz|jWNE- zV-v^NtAv!ycaDpmCKEXt(F7bQ>+9=SHbEaqg*=Ij;o)Y&m$k}p7aFKFdd@ZnRZLbp zo(KS@%wMRe4KL5(ezTStCInzx3|^uV)Dy}jp|{>Kp%XU}-w%?Qba&0ak|UyoygZjc z3@hWGv#rr9PkBu@ z_f-ZZKW{2#NS<~3CYV{|z($yTAx_$>lbugqXP+TuJZ>u4KqjaD@O1uO%vkV)>xu$i zs}#o6IToVbDA9hE+Mev`yojgf^uYr!ovKubNax@ z#+5*Pz}>ky*&A)e#dz|kGt*E-*xD@Z&vgU0$EVK}lsB#hKK&%-ix(G2ZP#Od>FlN? z9d6^KGCGcpi$C)GIJ1J*0Zq;Wums%f)8;E%`A#yl9%8|O$SB2XFCYk&F8mhOt;UrBwb zdvpeV_%RV^?Yf$fCtKrXOyqlWWC}AWm_}9wTwOs(8{Prqe0ll#Qm3A%j#HSFxWi+Y z3MW~ip?xqm{k3imOLc@{VbTP=4($Ha*fs@T8hi+g<--e>1 zcXrlnsWK6d;-uFiaaS7ZDsfVMOOYw=%NHt|;To_XKvh?Fv9dpaeC4;Uqn4~+yZ4FQ zMou~fP8NfdrqAnOy;o1UOp1({Sj0yzL@jGysx)}<6=2=X^IG+z5+G~uc^Y&xma{Wc zpeuM|qoOX;r_5>yGzaf|?id)DrBqep2RBcQZ}t3h9l5weJ!9MbK;2HY=HDi_C-uzJ zE}b@O`A(w~=HHF05%lxJ-WxJDjEagfqy&HZ9d3ui-w1a0@tynIN!LG2bc_qO z6^zO#Mo8bAcx_eBJ5G3#LO%204xbF(@XGf$!3@z=6;?@tW>d+u{8H?_S~UVP@)v}= z01(d}J00uc_6doTEnQEYRh_n1EzjK`axpO2o?rh#-dDP4{WK_Oz{BD9iqz5pMkQpj zBvH+yxFQRtBecZzqbsf&bW6X~Qwg#bSS3gWbZOa2TGrr-*M!7;pLuMhg?CEA#KbhM z>*e>qdXK3rr0;5T?e6OHTYG=r=w&=Y#!AtgAA8l7N?Sy;DQL{(IYonO<$=Jw^g_V9?TLCPE zGzuj=jw|$v5?-|ED_N;=grhsb*LuD`wa|CT#$;`sUfqutqXIL8b*Rxl6?|IIv*VFC zk>RzySq4K2806#;b#>4~-@m&aHwFwUYh|M8SJ z;i&U=u*M@+7_r>r=wm0j>9WLxxdCUJWle8*c+JEY68m-XR7wxeNSIZveBfwT-Ajgr zh7DhxiaF@+{(j>}1bNRU;F&PX@7Yo*(WJS&jl_5~13gIB{cOR$sErde&!W~g8B`9eqK2};Lo~{vm|K*Xlm&ExUUX$FEB%aW1e`*r#X8RV4JwFu(7d+ zG9c+m;)(rXU-$h1?)s9{J&B*`5N^pp+oI^ohiFp5_<`^5Pw>OOtrEkF#6HYXn$~C8 z%lRXCjxR>Zm3&nuN|>`@Ae~|(N+KhP@WA>S^su3~>CG`o*QaG_@4`^A%i+8RA^h}U zycw2e)IIWYSLHIgoY=B%4G4fbcd0okvRldu*q5%>tC)Bm`veC%nMOwU2MHk{o*T@a zPb#uXh>1b0cwdqVGlewD-vbVL8;w0`WhqE0*1aSog#DlF41bD9NbEKV4!%4~qOYC4 zJT}7Yv3<*Jk567g?Yz4luQ6FS%RdGnWQ^`071UZ_4u&D8HH`tl9{UVFAWsJwH+xEM zonkoOZ^S)u2h+yL#JE@-<+9t_w3GFt&6rK1`&{C?&pnknCLm+ls_uyWfhTL;UaWF@ zn#kWC)^$eHy#Vc+h>fOY%`=oQ=xB&nzQH zr23ja@VP@qXL+f)iS+-ttPrV?2<_fAJm}gYEPY<5Hgzx75NjMfL#-17EZEsF#kHh- ziy5s5aduk->M&d70X@v!>aPL~#W+}JYTxRQ53Y6=ZnPI%y7>Lp7`a5`URr9p%(QOJ zR$KNYI}Yqp_JnYB{Nl*Z{~L+^GK7mDmrKSJ zsmL&42FZ)*#6jrw8}Icm!#-r@ml0b*0{RV%`j0wz$lyBvzisEX&T}w!j;(4g zXDDJ?3pFB-I(FFnzrdEgdnhBL;A~igt4j%;ctkZyI`3NMl0!gE8`K}V)+InOu`gjO z%j3+v7^^8%7O$-lGtBq|apW3Q@9+Fyt>tv>!_p*$H}aXJqDRdmCv+R_C9TD*2Yf%{ z$qo#1`j_RkpxE^*Wa^DnJFiea<3dPSMmc}_da(4yMX@Ry&7e0m$0Q8Em~Atnq7iJ5{|z(}R9`EPnAGH5n*uTw2rk5u)zG2rZ@;71_bGfD|DSc2a|}~Q`=vp4 z$!{s#5&rl+8qa#X@H1RW+3i)aPxR~-6A9Qyf|7*I5FeW;+NSAtvT`=h!02WDhwzAOr z=dAzS3MU$%tZ9>1{Fcxvl233?QKM8AjWDeLb3Va)Mk-?T{;7H0>0GuGa6WeF(?4OE zI*GON&`DyDCgl*hTqLjfi$(PR+@{B}#Hu^-H>h9hG}j&+Wx~WM{Ry9S`A|=+=ejHB zLKEJhNrk4|# z9L9Qjiwe;G)%YLd2+=~^qq?HI==Z#!?FEmx|uhY8U;#W=@atm*|+r5?cScRR0&0>=K~rQoSefq4FX84~hNmN(r8zAvt=Yhp?b*5Q z{r34c>umG>i|M9|$PwrDuqjhcpXQylm`m9;up6D2imK;)ONH#+{L+>E&ZC;ZCDSs^ zY7#j3k(D)Fkg&$3CPtaxW7wkY=AM`#g)icy^YlcfaTEIQCIjqBVHZDO9uNH-5!cA~ z9ScTV@tbXMkXS^fuDCd5EUAza$*F}5oU5xVhvNYbVnK#zSn-gJn5&I3z}VZz!-3-1 zStIYu7bqjF(1(XRo`5g@b%wD10W4TD8QVP0I}tUD;yNyxw$X z57F-$=Rx1mC(yVo$d}$9^%7$e;IZurmaX`t;%~3@#llvn;?D}T#Py>G&@XG9KG0KB zV~>kIP|+z7L*8Oae({}b`=5;fypfF2IDeX} z;mSN{4r0}_^aUe}M3frd-Z~M6XVLp_3OIdBUD|fDf(WIhuX}65m92Kdrr6DHRYSwV z8ssVFCpd^&tE!6;z#cnDENpD&=1@-(Yn8Pk6;ZULw%mu*d9!p-QfrcM(0CCu{ITT8+$*@ z5fBkYnFe>o?O`P(CG9%--|0*1!n?RnY433yAYBppRbXD&#rwIB2p<_=^KPiqDXM0= z!pYh^7>*#Rd{Jd=^^5Byvt?S5k{_$_&8;(b#<^E+o9Fi)TOS<~YQX;1Yfa7R^WMdH zxs#LM{}#dXc;Q{^Neilr3&*ISEjc-G$$#ql_M1x3hf)28;S8P+q|Y*HwaUrFe;X`~ z366qv|Hxd~Xx7hIuG5Uvul}PfY1nr|*S7tq(!V%BLQIGm~ED;0eMpT9QDv`fLr*;8+5YfHEjAVU81 zaFfyiB`Tx&WsDeyz{WwywU0dx&}-b_kISnNWP_?wKQ3*d0aMv>;hK-O#};ICs!Msd zF;XS5>lOPWPsZdTA90LL|4A30+TiI}ua}9B5B>Q$kbuuK`YN~sg0i~;*}d~)Cx#F$ zw_9v-a$vg0I*Khw?eNt9yIlq6y=Kte^z1KuNnM@Kz;nMJ3>h$aUXzhjM;YQIaD2&T$#$k2_xXk3%#G4BZ!NClN~WG`hsal!$h`7hTvg|wX(^+ki~j@EN9$J(xCIEY`;^@v4}_>g>$)5l zCx3@UKG&&{;z`l3+lpJ{i;xlDGq^4ATH?~FUmVXKRjhQy=^Qv4!@v7{b)4zGmLu>E z8FVYit(`4-YE$A_rM_=IF&J}`Qxu|z`^fJ3-DcNt^uBy`vEA=F@ig-|UE~3)Ig)p; zXtJEzjry+>^WV>_3C=&g6?XHi)(zJoNuDI*E+$gs zs_UCL6q-68$T&6GpR|-qIV50&1nStN8!VFH3^(ujOp_k+IY<;}P#)HE<8U6{=zg3Z z;0=Lb)@bxDMS4r6S=yBa^Mw0Du8d8cMxxZ$xFB>6c0jdl9ZIhBqa^Y`f6xD zm|C$IpYT!lRMOAs(0<1q8Nlnlls6c=8HWF24s-FQP$_xV5S;|-dDaTsQI(Nx%YsVZSspkd7Ob*QpYxd zT8DWBk~9-zW4x+TN8{V0YA7i;ym?A0xqX$snpk~K-Shij6`%f+>vp;vA%2p)A zyh%3Tl`xYQ_?WrdMn$NAq9hB^S$UP*Jxh~q*y`<7f?RZ2~BF%rf^%egOLS^ zS%4^u8?-3{cCkYHZX`^+-@3ioyri_{+n{z7!h%zh)bznrKG6-y&&6+zJ+7(oSJQIF zBJ|TDnkB%{dI%4G@VsATFuu#0UV^3mmy(%C#i=3UF!naaYP$Fz{xIe&Tg$9nWJ_TKp+`&@J)>G7^nN`7x|W zz&$s0u?Jk}=3rdEdE5)m2(9qXyXC?9Sp!>tA9W}vRI5cZhos>p%Mq%9aCH1K)4bGPo5THL7ZN#%gGg|nGUQH61@;d6StlRp+(wP; zaTjG5ne3ORBSqAcs`Wc)^ra~N&YgO7=WL7R1ylwmroqiP5vmFTvzUmhdeGsjC^%#_ zHBT0FLMC3>XaK_1HV8Ko@gqvv`1aL#Is4@i-Nxho3AF5ZWXyoO3s(C?KGS<}G|_2- z!qX>dj(Vi06m4TZywaZ(s{&v!?uSb0Lsha5w55Ik>d|tVRp`(AolxUwW}R1(RhL4b zrSXWftKAOz#RjoFvugfzMq|S_`vztJG)KVTOxf8r??W#Z2BXNw zGK-oniQ5eO%GdbP(Z^hP?E{ANPvtDmbB@)icof=yXPC3jjny2$0J9E5fxdF zxP(eRO!o%^#NniHL+1WzIv8m>;($CiiyysBf!LW-^|!S*?z6ikJd&&VCGorZOv~e1 z_L(!E`9Qh-F>v7099>mMY-okWXBW*m7R8JTGJ1Lt%6 z@Eganbuuhl`#1|kh)l^|$J)>`G{lFc2(28u>e7@sqSAXg0;@#V)h`=6EHrzf+V)OC zuQZnv5)vxowRa~{2~WCx>~|c;L@(S;cgGBi>-1vyFu2oa*)@94x}o9CMjH=Z&elwA zTd9t*l~F4^XL1(q{7Z~go#T(J(^%}X@OK-I&+prQ9m`gjV^c$ z5R=~fx}sf^)4;)_lXB`w4%Ke>%Q4PN(vm2%zg4M7oNnO0*M^{1u_CCVcKne8%pnnV zhXLGnL!W^zxePp@9BVKcDlD#E?QK0LZqjqfGDJH zr6lFY4|T-Mnp6E`d`rUII@YZ802^xmM<~o}&i=VZy~=q$3KG-vSNzpC&>G2G-E74T zuT@mty{Jt*SxbutXQWX)0HA~*vqt}M?Qa|5(9v(uqUDkm4y0_kIJG5C5nZ!)J(^Az ze>y$^GoL+V>^;32*uTmLkN?X$9m9uw;&HePnR*BQ;tTp zt)D#sCah8>28?~Qw~wOVb1ozmkmdo5*hfz=jS*8q)(3r@#~WPx!{s&M8o~dCa-bRRZ((%wjb! z=psMaF;q;C-V?3V*_O4by_uqt*{v)t7Hih9w6D6JK?%5&(w{k64T7L8C>U@n0uD8S zVw^_XMwbUI68T)pC$$Y%e-tMT5rGsHPH3x&3T5P!*z)w|jWnkY^*~c(lY*d*6rk^s zUUKv5ZA)p}9Q7YVLaThjc%FPq&G2;xm2tJp8Ag62&fOMLT`L|eMC+(5y24UW{HH^v z-b>9lz*=9gxq|i>w4k8ztc7ddEz*Bl!fPa0L#*y=m8;*z6N(7$Yc*A?@!_t|2d>sd zo1B{n)hG=CpWQoe`n<7MUZmqgD_Nf8FSxx8Z`biV6Y&xi?cYA+P_PMmWRtTJ=sn=K z8s1KNAN*>(rA{mjvEVwWM9*gr#cO%`S~Oru%hIj0wR@3>vlZR?I#0J$zP;enYyb+m z;7A(p~uz4 zu0mPfbzWr|>zUW~b{b`g{_FJFAGQ+p$)0H!y{Tf){W2$G$suS&gGI!pEHQYPObkRdtc$y*0*-uQYcW0 z7bxy-#ogVDJ1Oq&UTAT5io3geptwuX;2PXL$d})>@7`DbgLmdkCNL+Noqe`E&wAEc z8_Wrs>D?@emo*1$d-r$({ZOLL%zaXybqwGD+G)(bRn550cK7>SRb~6KrET*~WS&yZ zjl7BTvR)^~YiVk{eAI&;?n&R{R3=i!CSX$GTdgupFeBd#A${l zVV`;~o^(Db^Az~|a}1cEoiY`*to)3ejQv5UN1JReeL}Epq|7(Zc4mu|?(sS|_jY@( zt6Zn2Tx^-nLN07$z%F?;cdUL=^ne0_GKR_UvDRFUXYC+E0+rc`?tE*$LfmLtI zbKx2kP0r6ShGo`9RN^cKSXinPHmuGP&;#cr{ds(f#$^L(CDu$ZRX(x`2|<-8;Y`?G z<8zuVdsF=a%ZD800;>^)u2D?UpFe%lIs^4$sus)*P+2CB&O!ajwh43&D(1!v!`^*M z<|I%+wq4%b#-~{h`kZdLVRL~hA)$=&7zv!VxR{=O8TYLq@r_ZABV;-eW0!YFd7aWS zDXiqs38s){wz4Ol;#*mWPSVeBZ5CQuS|yG^yYdKxf&Ky6 z^{q6yg(d>pnFS93$gf~n>ecUAPpHEJ5*_M*Sfg}PeVh8k4zNf^H*c(Q{!_tViA6@5 ze;YYxrP*0@OMo+x8tuO3Nvzvsmyk@&7U?(R)xmG+ymfT6{OxN6lN%yjqt1ob`I8>*>(i=W-Z4 z(6|E0Y>$ma1GAVy#Z%Jjodnc(6~fITY63)yVW%NT?!e(_qXvk4rNYQJTU>>I}mcnhNOq? z)0eF>YRWgLw~Jm^=KkWP3=LYOZ(DDF*&Xb!S2K4da*Zc5=rbWDPT1U@w&m=du6plA z)%+Up_fG31=lUle{T&9JDlFcD^K$d!O$;{n4xm5GeRxm!7?SO#0IaSi( zKfM6f4X=~kaHcf~p@}Xq>J1+|g*Z0*lLj^uf0%9o)(`J{w?V?@EimvN*}(e*87lq6 zhJvBoF8eiO?Ql@216fi|X(Kth)>sN3iN=re1kG$bEg&*do_wFPi9W%g2PEWiw#M#reNjAMI5^5f+2{SuQ#@xUoKza3W#UttGn3n)=!}@Kl@gU3H zpUEg|d={V2ZSG2}M1Ph+N)Np;f<4pQgHguVpFVvX2i-`AM)V5Ytr*%Yr1^{PJRGkH zEO{sjy&4gb6;|J)mtxGFyFtZYmA~rrZ-4Q+vbr6wM44xMBPLKO#FETKW0h;*Pu@TY zDunDgtN5Ix`FTxooTE8}Y9QpEKvApCRdSirWo14{EaMS*j zCs{oF0#bo%bKfjd&F+;@u5@%RGTeE2`+pTf0-S|~tu&_u zBysAU>64O=4xzQwth%AqAO6f@ej*C!(M?y2UQ^MfKhlY1kLtbz6{66tyfONn1_Y=! zOz<=k(JcaP_iPS57=0@W^6*SAr!^Li{GPU085iU8D7Aeq!*4y z7b4ymcir9Tcnt2@}xA`D%PT=@_Lve)PGbB46E)kAW2F=F&62!R4ta~W*=(( zrEFNb=_Z`{0Z_R(_jPtqZ?qJvZb6nW7MlNxmg~QxU}&?L5Bkh*L1N(bppH0bEoS-5 z_6$v9@!wVx$?FPQ1l<`SQn*@Bx?4jx>UqD7_Vph4y6@W{SNupcW!>=WgFkYj6SM;> zuCJ}ar;`&CEEC=bGgy+#F)SFDl2UU`l1m-hIE%~H$8`Rm%o#9R<(oK0Z>XuLTA*Kd z>#J23v+fCg$MfP<>Hx6+Y#9+MS6CPVnbIIeZmgd=+)B$@%M!}5;P(0xwLq$hjr1fc zYDq|iD1OuWna8N5oNoE~v-!50z2&MCIJ0?cyES{OvU!c;_u$3`iO*e^cfq=cY^UlB zSetMy(Y8@b|HqaTv8Qwy#8_|HD(OBFS2fBHOzg+6iM^j;{WBI6xEDUk%s1EDX69Tu zuy9MBtU5P4Arn}j)Yf&HDFA8&Jtphgv11oM{ROp-U-R2{K1d!5Idpr7?SibUoPuU_ zL^^#Q=*aaJqVg$d08G`cgkIx#Wuv+JV%`LIDNy{VZE!eUkcFjjVS8nWL4C9oXD#N3 zwV?Q8RiUJ7eM*M`W}#IZc)vWdYih#wre1?*@ESKHgIxD(lWCTZzZbb*_oo8+_T_wq zkf!s`{zrfs>x)s=GmMPbAOr^^BzH_=1(J6glrBsXHa6YdPuM>r{2Qg0}R6*kn9D<bJgd)Y)@(H znn10$Y4o)cU6X6xujDJJi3`ks~(qoy9 zjF8f%KuB?Q<@a~BbU6&ffXBA2{5?2YNOKS?=GRp9i%kpLID-L+WzD;kIX+MRoP*2x zw`6odz}*6V#r=_YQq7W8G&<&HkkBfanbh~>tmd@cn$olAb7%WlIAyvGcd~))F+I>J z*Io&;D${5HN?;I&;D=hpQ{3{I zdByh^vsu&^{3}jy8GU(KttAk7(%&E~6GB*%#Y!O12Y&}J>)H2Xv@WI=(iy$d3!>Du z-AA|nEkVv`PLSN*e);#9Z1w|G0G07r?RMgO;${6JNk4yFyO|YXjs0Rh-a~NdKL@47 z<{zqvZ3RD4`ah48m6p69_&;C$kqoU!nlsGJt!hGuBGi1RZEKp7)G~qnAG~ zmoqnc3N9s$Z#tVoYt9c24#o4c?k>-LJfNek?-QXnnX6!&P!+pnElr*~*M6srtg&ph zv$uykseN8*Flx(TuREC#NBbPTTg;6dHrI68a&>x^SFBbnbaDTRTWyb=D5kVst$wTH zTeVqd0Bow|`J=oYrV7?()9q@InTETcaDn=JjB;eYc$b&u!D^H;a6;b8DedQYh0KNT zD`fKrAdIAr>i9A{N@MygXMP~L_58K7Jz0|Cn z=sfgSJhA@Ws|hh&d2?m?YCc3vGrU+ZgcOCQ(9_6YIb3@;UIfshIHNwL2`{%r7> z#2u@Wv#kBR^GDxtJOPZJZ3y|d!eH%kY}$WUi+z1k1nBXC7V=~JctZTL+S@RgeeL?g zT%_`&2r;+hJuWo>@^~dkHSK5m-h2QUFmb0^xT~(U=z(GB8U{9Gil98d)-12@@cI40AQ%}+zJfr zIG^?PYx!oOfFyo*a&sG~puzu;r!~C7yC=`KJ)FMdzQ|Uw#Ywd-^tTDSLF%xFm^|o0 zcopShegO=7)cjJ;Fix+iZ~sZl?Gn) zp_=y0ol7eFUG~MGQP}%fVhR4crrl)IjigyihiB2sUnfy0xF1^M;=j=dLa#U^kBc+7 ze-`jNw=NI}KFv?sww%!s3wg2nm9ZZrv`+l}?Jx&W_AIU+)1Nu_OhcPrdHdkG?j&zq zW5p*RyH;t{|FY0@kj)wDkdVp7JA!lvs7e~e-uc9HJ}pZxsHGM(Gh;>W@N5x=ya44U zv)7smoe_@39{ILIodrcbkdy6O`vT#a$}QzI?^dplqA-kJ#XvsX^fA7LqW3dlg7<3# zLVZE$v2pf;NC1s3XGG&107t5Snu^_x4~%mmL__DKYkj<)E&60NzX zT`Q(jSpiyQR`W7ehwCn+9wB(x*C#=fiZo zr!0HfkeGi~(;Wmq?Ch#!|G_SIFcJYSYa>qpCC zP~!cNseyYgE~;$H%Hq^K)zuF71kog((d#`YK##Aq>Bda2h0D*Uv#I`#!D~kmZvNwll+Z!$bBfB2?9d4TFZcv!9<`8umtXU= z##4>mdNc;uI{u5MQbsAdA?1!|!T= z6t;&_IpBAhKsgPs;r6R($)Ed3RvWu|#Uv ze#QSxLEz2X1=2iK)8jJshty7%#nY5u9HHmwd(abM<~xheUXu1QyaL>-{^! zFvk~mVhJjzZQ-Ve11WtEaDgm2nf-I?g>rMQq=b+71Akb9zO(=u6+W0XD%EQcRWBJ0 zCJSJBJZZpJW$iEQi~8yiR+3iusmTOYF;$s6tBu-PVv=p%y}0nL#m-|+92yB^-AdTm z*sN(nzJ1HV3BJ3qbWrYFQ{j1j+#c68?tj)w!pM46z(!x8-K;~2%1KD*IA1{xM4J*P zsa#GTYRnuft5iEpvJef^O469ks<#6ZII>U?BqihXqDUh}e<+o-ufPg-&UQfbG{!q< z79i2?eE@xJ8~Sz0=Pr1oJxR;fe4Fto-RLQ5(!1$+_t`#@U_Z*9YeA!U;aAmKN?VCx zY&IAl4$7eUJNWD{@E5f$H5T(#D$n)9d_N*SzDTi`Cf6Qa#<*MZ0vWmaGo$7&E!}w;v zIgbN;wuc*0tPDy8s6`ns-9lMRP5Jke9Um${Y6%q9=cSBXTgDw-phfbCMY@{&(G=0}m4oGfaz3fmYD`RdZmQ=L*F>3AXf<(o=C0**s%+br`nV>m ztO6xbaFBNO&|cGBNNDL4vY-RzSmPg8u#& zko)W^Ft=K&X!iXm@7;Ut*r|D8GcWehfb344XsK6yGoL5OpENgeprCj83Y=-V{J|2$gXl(E-c59Qdy>}ENh4_=R9qme8`83U?b67 zHs+Z@eOmnx1AcU&)?k{va0Vo9ZxQ1_BZ?I1#x}K{Y&+_IFcB*;N?tkb%ZoM@|Le?y zPD@7olNK5Wp^UYOZ6xFu+VoGSl;fB4w_Kk6&8hiDc zW$$Ga=fdwWbaaDMiq1@3UKjNKcBaeTH|RuTzpW2v5bzdzcAr z2cBHjhsMgnj9wq?D4U4ujLTqGNZ+bBG6v1JM=xHik?~Bcij~)zN3-(*ZSE#PI8S-X zWju;+w zTHcQEWI8b3{|d{KU$ZN1V1H6}wh&&s=5Che+ z67bGxkZA@UypA>gHj0x#EBw$}#(9`yr*J+{eR|#d&Y$T=Bb7A= z%vp?=x-8H_$fEm5P^BHRF|7M^o_d`>f71BDvxg2p*|q^6tilM^WD2OxDt2Ds7!3S1 z11caN{C05UyHIHM^n9XR+I zW?M4Jh_EY$ax1L(-dPGL>ARfA;rluc$^-6aOCRklP6tl$|4c?Mo9jlB=r@dfbY-S5c1y7wCUHV#S3|K!rkd_*{ek_ zWR?p6Z_%^cnJ)+PxpdJmw&04pc&%cq-1i?|?-HO##p-d+_nMP3g~F2RhQdB#+Son1*kyXOIwAjAZL@L# zs6FMTU=fT@R(L0xmE%e6CZ5Dvj|4B5E2HX{yQzJ9EpPTP8Y7IHt3 zTJ{Ub{_`HKK6@$o9(ZFKS|^*hRmdw|Kb;KgJjFA-gM$_o0scS)JqpFK2|mks3^K&L7#&9vqkDNdgBO|MnSIla zd=HDCoPB@FEFkiO!B>vs(wAB}6WC~lank6&S(~ioL;}SqGGWEE;_tn9lIo~v&$Ono z_du#}t~g*Fm$==|H}mAs1_bbmZd}X7xbBE@%m0_={PkxE3Jlse^tdQZbsP!>ahK|g zjFQ8F@*Dw#bC0<_7*fzAk}?04Bc8G@4uO{RcUb6EmePHYO<%V5vc!uR`{sYYgayci zmD`9EIGL0F`q=+=S*5*^I7rKSd#m)f9)))5|8(7iLhtfoU+Pf%AAZBX`nkjs=2M}y z*ZW1G|Gimn5NFAucO6ZeT&c+X@6D3VDMI|3SapE=?e%|b&_Dk9H3k8CmsG;I9OZv~ z*#FkhfHW#-R}`6le@^(n4*S0j`^QxHzY+GY<>UXR@?D zms?P5K3iy*jcJ_8a^=3%U>T9Y@2RMV!W{U&>@PXV=-kv2mZ6qB2d%{hxSlGp0Iks} zXYObO0^UR#Vjphx+mmHxxS$L!sf;pf|G-Os@cP+kmA>PrqH-kG<^R5@mpH*ttD}t! zkHq(b)-}+>; z+sCm98bykJx%rE}Jf8D&?CcGT%pby*Q{9TYybVWXlSCT1YQjFgm=dk92xw9}-y*Xej{d_1Y3fWpz;J*7KG*wM;CaeyM3 zBrYR^!Fg{iu0H}tPQxvk-F{y0v=vO$^EA6qXEu(v)MA+rb(>NEHCqD!Eaz?3v;od4 ziEcM8Nd{c597C$xs-`!Z_-fq(TpB}8tSY91fs+)L>%6o>qj3p%GRMb@bPp_PZTpBiDjgv6T{rs zNdp1`)aUKgITKS7Xmwv7zp9|x{ec|zz3z1@z#Y5^JMhW%T)M>p+9h+hw;ViOb6uHw zcd%x&G()(aNPAca`>M0|u7!PF>Y7zO}8(v(WSImqCqH!P2D9_YM$ax-BHdC;(H;mn8 z`&`OscbYXqE8?B3w`H}a^SeE1g$|Ab zn1D9bV#U4AGDK2QSE$g6N~?tb_N}9%W1Zu+q>Q3s>0xe7CmltN_aqTpHJUrAsP2bT z=CLbKqcukf*xPfzCu9eznlKOJO>Q%P%!>O(O6+?bhmLEXvB1mk+{6P>>IsWiHz@hj$ZEX@0U1jJ7Ti@(-zfx z(4Rn30zLzu)u5op3M-(OB;>jH*#%IX$*7Zl5hDrkeD77Zfk$#GSo~sGg7EcTq4=1O z>HtIpa=USe>$dQ}h&XSg?=vMDP2TA&jn7QZhp9>Mxc6Q>0leC>+EN{8T{&O&_s?nj zko)vO0koDjO_b;9mL$nVoB5*;j!upoDY$4$qPzwk*)O6=nhet5U6YdjLAzl^rFrWS zmGrQDsx~}oZk|@zuP*II;segK0urn$D6)!@;Z3SJM$N_dQVn0w7yGeX$;oeGO$rIo zwKTgOxKD+{8yz@i~PN9|6bX{-k>{Kt;{6%WubV2DfOqud|IUXdq z$A$}C-5>x=0=NEM%|u#RV|3#mFAD3;_H%GUnZqrfOo&>TB^j(%tG~6^CMIcP3$rVd z`^KfzKH8Gl(TRi0LK^(Z{c#;Ml`hU{adUODHVL&-NXomkn2~3_LF3EntnsXUtD_3M z`qPSO*U?PVebf51b(dGJ@o^cJeHP|i<}yMVOr&_fR$rsDwu+zC-bnkOl&edW12QZB9)hqk9&j~ zI-^zj@*K0|bbpTSxpg7cH&`tFGn2(RnL)QpCClrQMec6bZ;;OT-OW~DH%ig`7H{6X z#5u3}7JC_H_HI_#-O#%8YY~mUa%=@ao`j!FFO7@&!Ch@MnQ^z{YJ!bu>(%Ev z`|_60UNeG5pC7@Fn*t3R+l=f7p+<>0d>V%>l}Bx?ur0;cVsT4xqU!W6?JZ4$SSC&P z*m<#Z{Ps8EjMO%QIzOkBCDrEV_!QNuY@;P; zY9C5`^z9dyy6f6g$CQY&IOY%n(m2Wi<2b?V1_WHL>d&vl-o8c~5-rRcK~MnWBNkh`;T`Z?mEJE5l%w@=%VfSY3; z=iL!{No%t3aOz+e==#A)LyLFO@i+)BkN{fuD@l0Yd-3tmlH=cnXK8kR3l@Y_vJ7

2eV+8Iz;8$!4-0z0N*ID={38yb_NFugTg7-78G5kLXLa`_2bG!{m64XZMapp+gQ) zvXhDAQZZI052Y5)a@1nM9}_Vj@AK=|#6oqohbiMIsJ(0*&9#at#0+l zO-Dp^N3~q8s)V|n{`LU$MxV(e*~npFV90+uORm%%`%Dhq#_X%<6@Iqmn>ZtUeLO6$ zHaT1Cyc{BrK>$76w%aTG z6V6WyyTv}A=bME+0-Ve<==nzJ52y$THI)X3Yr-;*0BV() zu;gQ&NA9?vk=rVIUUdW$22$h$d>(=X9ovWbDOWpn-CHk5=;1_Jv(l>MAFd{acF%yX z*m4EeD?l(_I}xk`G9jtYgF-#>JSW z5I(}z4&3mts3*CqtJGbaR3;25Z4`?R(=d2gO`x+22}ftccV|uhh<(x0aiV?b2`8?_ zIo=*(U-Ogwl!1CS>s|7vBug&CBOmf$H?>J)3M28050UJ{FB<`b&nbeS z86B_E65CdP2G>yt(Vqu0)A(wnkMwG(ei}H`ztyhKXmSeS}uawfZ=yr>tS09f|gucDvI}mI10`Pdd7-i%myG zuib6sL;hqZKTmSECi5i?)H=qI|0BjPQGoU7@V!15F~2Dt4u8&6POo}v{IHt>*lAn< zumw6LyY%u`yB6796OVo(IXg z^Q1sAR?`XR3ow(GmiF?Jo_Q3SRN3`8Q@H;Obv<5W*$()40g2*Ti!BK*e5e0~Ds(CW zhdDX7H~0f=&uY7SM0RyHffAoxA2otKbJuwu`cXwc3+$lq8-H-7y9u}|^YVmiJsD$i zgY@ME%C&J{_cf2#OLiqR_xhNZSFJQn?AqdHo%?yP$d7dnA?cirnBC%Q>FKxei}_`H zT;hGl?SUljXbXRe!=DJDFsQqxqshNc!tN9qrc;(IZ-ADs4>1!rNWsV$-lAGBD*c8O zB2RaGugOq9ADua-)>gk~FHdObXtHO|Htzca!Yn|p-*vx*)XBb%MaE zN_M)@(q0A@pY9%lIHBSg3E{9d(jpgo|BnB`>@MQ?$ zH#g$i8d|3^Ni4`IIOky?-5x>QRVt4?njDX)Yqcqly>Iz$-5-#Bj)H;eE9yN{AhV~l zv6PV!Z*!{2K+?hWAb=GBNp)O=5HkR>{Prx#uY0fX*Krrqj5gm4D@`+XE!QwMGS&N~ zQ~FOrbhAHAa^B6@*ZZ+u&6JtaUp?1g6_Wnm@*?@ohf(N$0y5ouyAD7&=t*P#u+HdF zpcI}-(Y)dm0X>o^)6HMf1Z*-2Jtc??c<>w`k&Vk{J`_(WN5M_AxI%5Q-FdghCX{d2 z@)E4Fu5@J0x5|mVx0d--)p~aB{0@m<>l@@@e{w*HAc7)B;4zim(n#nV%K9&^b+11R zS-y`4#gd8d0V^?DErvW0*uz8`Uz3za@^UU`m*!wRTOFsMYx(IOVqWDF&KZn9QJPNi zlI;1P4pHIc0z6i0RDTkHVoCggty;gAgJml~-ak1|o78A8)|{kOmo66U0#c*Bl)db7 zK#|>U1$F%jovG=!T`FYD8O6#|A(V~~qc8v@JxtGT?aaz@)=#TYVj7xp<5nAq&*XIr zwXqtpPXt*YRU2z5d%%g~jiMh*U7RB+ABBk;QyZceiirE)mgd;J60eQXzyhnr0c$c^E=NXpx&wY(9yClgYP|D2&PF{%t^QN}e)(YHI8Z^#ISM<* zic7qbWsCBr+e~J$N%|~Xg0AH*$*uR)#pTfQ&b;(Q*6GQMd@sMQR!^B}L;IJL#~{XY zl?U!}^vc-m7S#q0ioKObbV~8J>F+`R0r4H;y+uf!|NTuLUuXcSXCD!(6l%$|b1_KF zSe)fIB2Fpl;B^R4T8hGWDh}`XQ{-zU-ZV(;t%p{NuxVKxZscxtO$Tf3 zKi=pJv2E7GL&X>q@d$*{)!WZxo2ynMzXlJD7H9kENR(%f|L&fRDNbI3@8b@&PB6$e z0r94}sAYK_(r)K}R3=g`Atfy)6G6}9zkbSv2|yesLzjshl0SmR_J-Q6MukhRH*=c0 z#ATPZ;sxZmq#rQIbZ|m5LLal(%%d3qwJUlNjos1C;E7CY3`c|On25+w3tz!1A?1WI zAavWMV!dDUK1+fkNsDR$Z}v;RBmLYByOU?XL&@7hXN>d=D0v-Al8+raiz{i*R6# zAW4eq7SsoRe%*1W9z8eg-5p4``xN?&i{}W5XS#m6025QaCB@dUk+5xufGebay(vKV zZFfDQLKV8MVYgdZM96pMIE3J0l@mXM^UVU@DgT*AU(ovg+X#7&2=U`Z=h;kS#DNf9 z*>&FJLDjoKN7M}&7z%lxy(M#Xy=V;TM#laGEc?!zWd3r<3Wqy3cJ&Ay+7U|(@P$_l z=Gy#i)m8nZpz7$H{n+pKc~x1xQ`%JOT2o7M;A!^hvebuE|t}rlK z=ex#^HRN4N?A8yv@U&tRrh8j?tScZ^%{WVOVV&bfcrJSTRcU+VlelxQGwxZ0U~9P= zX3P5qd)j-Ez@+VbsRV}hk(;$L^@uI6F2S`&vGyIIC+_`RUmGI_)# zPXe;I|27;Xen6i&PQhO>`Q8<1P2r=2_^0F`{1b(!__fE%%o#`C62K>L?zfmdm50N2 zR<%ulMYKe4qYzMSi|Vf6Qd* z93NP;RrifU zy_m@4OV8j(>m+d_r~9LG-Z)D?$(JX%+-OaG_5#s2rZ(b%4@B+Ds@06)fT1}Q@o`oo zX%btxy@Za zd&zF;eVlPw0$w^Od_EyxLPO22&1pj;2Rd0#+Ze~k|#JQ;^~Rs6AIHuS_t^`IgoSfMmJl{jo1WoV1GVu<-ZHq^;vcg9SHq> zwwRl*eO%*L278By&41bjw!@4<;rpaz!cEsARI`spWN^S2dx*o+2hWv{^GwbXa-bJ?|dO$%W;QNDzI@D+;?A7`ZFt$wlUT(!e7^cYDC$gTv|&FK&H1>^C;c z8|MEJ1Cs=dU<$*yi@)C@6isdXhV&NED5f*;5v}VR?H9+bK8(PILP6Nd%|phIO5ij9 zdy$imbU2L2Js2+&p+yah=lMYvA>UGVc6L}L4xl2?uD+XG#zjMtM=WeY`s8Y~do*1f z{x1LRD6SDqC4NJnk_!Z2qcp-1ici)TzrY(y^(N#CP9EAN54`kHl@p}6>e~gWimlCIYyX}@GnN1J!IxV+(Gw^F6%_JM=GvnL(DfXmv)a9`=7;Ll(x*g9!Z<%S@ zB}5VlW%A$O3^56ov;uha1W{J#Gv1s>_p^q+GH@v6I4NFou-l!XF=NSR?sTV#sdEOZ zHO>!>52?~ef2l>7*|pTW;a89bQz}3Pq(hW#cltK3$&OIrso@9TOSdEG;z3Yn1+q34 z^A|)gO;4GIMp*{+SLLKWYzqfSit*9m(!$RcQ79!4M$=#y5Y924y}VDmMvYscMnaNz z>g*1#?7!VLO8SNh)RK^t-2Y&iAsFvc(6O4)WKi^|2E2QbYI7oDz@%Cs@r7K+xB5?V zJ#+IuRJUHu4qDd+ja$ZI3a&@qBxh6^g4u9M6wB zZ&XNt%aTcZ4>R~rFMx~7Yr2>Aw}JQ=^klT;WZ9c=NN>lsLXJzaZ%;tW0;~Piwem~7+vWeQAiyZ&kg&TLm$bdqGo|y)Tt(} zT&o@ldR_;GZs{D#+i9`rTX>6FDZrP$|E&1K6Zv#J6N_n8?ivKNK@Fo zfhJ*!U`CjqvJncQwuA_=HQC>#5%E!^;B32@dJFT&kw><{%zj?^kE_Qwj)Z!X! zqQ%F3M9XvX!=2B&*EX%z+7sj(eYsm$<7t9yvOc93?t8(~Sr)mN?~kLUu6K6V??72g#GF`7H?A}?v? zmt#Sm2G@X#cfpIP+3A$O22uWks>@2&v<4jxSrFNe3xtIA1blbzH}#8{eyV1?8%2@3 zxQt;Bq{+)8RTOg>=l2tjzpYR&f*W{UQdzh>&D(N+=lev%#v$@+H&xR>F}O5__t8F{ z>gA{iro7oE6H==qO<~#23lBQ0{YiMJug^*b(tghJx~91#)a@`S)n{3p;p%9*yq;zs z<7{$vaw_bOrWJ@hEPlO@pg3eUNYUq2dF??+NVjWSi}W5C)86BkOHaNN@V*`K7lg=S zN>{`(178%KY&sG*>pQ(3{~VGE0KkH)dZ-?OgcW>vC5$p!5rWBk;p?PtjJup>RKvM< zOmNMTKh)@n>^K!Qp(>_^K(nj-Fd~FwIH$h~I<4hq8#9bOr4p~-W9{*|9_9e`K(ETv&?;F%1DU-4v`D-R z_J7$g$|$Fr?EwinsMAF?s=_X21v(gHEClg+q%(5{@l2sU*xr4$#?`Du{pVRtejL%Z z4AmWv;pl1KqLh~cfurB_0}9+v_!_uiOcw0)O~=%Y|H9~aDnIKl`7we;2*iJ~A2V~> z%mQ;?G&k&{YNPOY%H(6T<(@A)$n$Wg50Y{6(n*hVyHoJ9fY{122Hxi+!P1an>g-QQ z=BYqt_6w3cGiE|lz*N(MhUab4Zt3xm-Mf?DDDNYX2tn>OM-h>{+{DxKH6!1Z8uJ6U zkFkzkgQ1D-lAdi#ElL<5I&!@p?@1(WA-9trmB+rAhZ+WrANg#8C{|3qI*B91q2o zlt!_|V^Dx+PwtevlQWqAaC7CFgn3APLU?T2QSQ#XR!(MILly2kU*N#=|5*FVs5-K& z?Z$!y5AIIT;O_439w0abcL)i=-JRg>aB&Il?wa84u3ypJGjDgMXMTNa@#At6R#lxk zviE*uSLt^jJMmjZe=_s2J9myttr6}IHWR;kr!_xKsK|Tz+Cf~LIg-f2SJEg#wj7vm`dw*?fmqGC` zU|^;#udir#bm#K6@Le*sucCF%v>Q8)FUEUkvvYzy>BnHVSwWm}rW!Y3Xf@~nuuMv$ zIyyq)YnOBUN7+5hx(jV|_E{{SwWXo;35y@HsACm<>oENn3y4j+y>~4ocR$U;Xl-fT zICrB$(Sj-Q#iPe68ZiTSmbX=`A7&vs_v;0gesEz5cs#4^l#7NG3E2WH0aZ7qwIO7l#g zzvdHd-D8Gy@Yx6FMztOK-fV7BcN(`~)Uf&yLv+jdw@{6QUw^TCh}gFdZtqo>(-mraRX#S5&gM9HzERGW_ZevabcT z?VRau)4m5u_P;$FpE6IbWmAh0cYe3Zd{9S6r^OPZuIH_HZ)0$vZWVFP{L3jh4{6W( zal;Yn>P@AE({CvdB1FQ!=`53IxmyivNbGOX1vW`YP}s5IjRvm zghwse59ILoF~ag>S%XlCi9GJU_MfsPvj{&%TZaIIf*Nekkeu4Z(x}b*VUA{SmRl0k z3(dH`83+|m8;d)!9C|CV<}Wz&=r%u3J(rzk%|Kg7Q=EY0gzDbv*@ITA~?A#m-)*ZX*>$qa*$*%wh+L1@QQWY|G>(xQV( z&lMzBg2D%)#mcehn1zmmfjupR*RFx1|Z#6xVJWlBjpCG4)Np?wGw% zuN^n@`7Uyqy^?vo3ufeoiso4f!lh?Sd(OPpif{Qq4!Wm;4c|2oG1tiJa#WM2Nx6ly zP?>URq}L;wz#ZS`Yy1S}f$s5{g=Ey{=~lh-hwnY*-hj*QZ5@G(M4(rj`99Y#xbdA( z`(!bd25iv29OVu%D!O+oa?J8lu>C#98jBgw01I%J4&{X+pHN~u%_Buov-YeFy7h?Rqg)y{Y;!D)HnJ%1 zx98uIfKr|3?Q{aTqWjrKe~&lhd%gog3*qlehO_|2>cW8slXQ=?6VqhThJvMVwHk(q zTWAU$DNRH5P9i3OfGRw;{4Jyea`3U2n7jY!h5v9^3o0R@t+Ua1x0*whdK=djYq&Wr zV0OjQdKbRXo29W=sZuSVqP*_N!gf?A|7|2_qW-l@m_qm-mZ9DiL-B?ll0Lin(z?oq zS${S)Okt7ie+_4D&+GA=AXilr-)}pFD?`l#i}WOR zD7B#pEuW#tkZN56RWheQkiCvI%c>9avetq^EFGBTRd89(rKB!{Mf>~fFB0eMr|gH! z=HhY>RU+qc{jm~h8OK{D3R2FD7D%rXM2nTBCnRl=2ax6BLUYM|4FCfOsfV3`!Y)8% zMz**pyRMwnKd={aQrt9WeJ=yDKUWHz^b9I~M>1k~{&;S$((BI8Q_F6%Kr8>eZ+Cf1 zZw_sw8?pEcBQzIQAk`9eQ6#bt5quZ8C#A;dBhJF-@Aq#ax`ZDrb5=&Kq@qj=!-?*Y zgqTI>nzd@oh_{hA^-G}>k|EtrtU+>2ufPgL2QkiiGkp5iL_@-mEoi0;UUSZKikTHz z% zbGsVYcUy^64NSOJ;T!tgoV>)ZsEgfL;z7d2XA4};2UO=6?mazpSxwFmb=}J@Tj-c;yK`_UA1I+EQ)q(mvry_d-FpnBGB;-Y zz}W;D+5Xa>dqO{$N+Lt|>>%tf)w*wNC>nL%X_a3pL}1m7t*)0GB7(fVUy8;*v%ZQ^ zRq_%lHkY?NC7&jUR@DRM!V7AQ+uvibgD!p$T5BU?!zd#7vV+!eL_P%0JUu=2l)ElB zI_26AknN#mUGslzTXMSA71OD)ZsWPuyM=`2>qt)d0+pz z=xVV3YQb_?8S;9?qrB3(@(B6!#Z;j(R6H|QNVaj%krW^nWfp*#m7DHfS2{Xc`vp+DEHEPBeMRt1OcbMdzmQHBAgk(K@*X@Pyiw#(QEQi< zO?ByA%8S6~-#>uThlrU*8SwaGs9Uvb65uE@dx5N91GqduayDIXyNL=2)9t*w+z$)9 z9-t}j+f>)F@%)N%`7ks&Iw#u&oyp2gqpen|Mb6NAk>z=xMq#9Gs|uqYg251diq-?~ z#}XJ|)(dKHa@`;&4LfnVKdc)>n)Hc;xJOEabUxo6P4J+Qiv@r*9bguk@O-l#Wf3!^ReT=}R^yGp_s>HiTvq_e zP4{@YZgatIHo4D0d|PeW`@u?J<94k(WE1e^iUMFjEJG}{w=t_JwDSDtHMee`Hqr== z2%MX&OXKq>FU)__X!E>2blKX5^R`i~S#n=2WwM%kcYeMbuWcIzkUf*{&-$WB@0K4W zj+&nNVhS7qE>xJlr|4pN(Om^b!*lCB)c7rXSexXzpBHriDq_;T-OO>d3V)*}B0iV# z!54!s%F1hQs=Bsb=J|4f&^e*M@OXANv-pwLG~>7C7R|p2s=o1|QPEPxF55Mc({M|J ztd^Aw-vGUW&w6s$jo&|spqapwZvuF0n+P{D1#yih(9Af=YgXES74QVT`PjYIiNL;OP|t;`p6|`0dUv%?Gnl}@9@Pny{$p%gpTv;u z^rO~}w;7IQz2zyEc)r6-YUotG8PovqKt8vf%mCUZ%L9CP%b)->S+ZOF#sVYVlNyP8 z=fh29^x{*8Pq{Y8AHC0lC^Ps{gu|q%A|WKdPSkQcdzc}4xA{A%BYv0Bt8ay2M3 zrJ0>nEv@b)W)Z&FT`g~O+!^~mhc>4dnxX|O^v?gX+wT;O8l4#C`_Wnm16%xS=0EvO0p;S9VYR!fl(NnBz?<=OBnMiNs59FZGz&9}8)3{yYEz4TP z^xRK#nR)|y9~co`Cp#8M#L&L82V0QoHabR)XN%)1q6o#4o(`@gT3!Eq0Q$2eiErVG zv9YZ0Pgf^MR=5tc&SHf?P6?7#TZ^#M@*A9w*JvuERl;t8pxDTtz@9$$*^2ki(Qda- z;G$Hi-0d~&OwmFy7oL^|lUXO&$BjRu@k}j#-y?r#-AZ$BC;$Jzdc#HpLzvvgf6Wbi|zOl*_ep-mDIa+x!m`mk>AA7I! zeV(7TO#J`?SAK>>!dQiZLmQjr!q8R4ZRl;I&5{#p87K*PfV6{jNax3s`-v|!6nF`* zUVKl*k1tSIv^-zG`b*v;9uA|S8JO$-C=SmM{Q`{;-xGGYUEkq?*w4;LG1bit=`P~P zf3;)OgSk3G&^OWB-w_j?i}CHord@prK z<4RQ<#r3+AzW-`F#7X~#^YgwiE;{;g>Eci4X%w?>k_aPRm@OTow+>Eaw2Sc!X!KN% zodq3Xr;vX+IQ}?6e5pxKCf9UGrB+$1jH?={_rD>s`fXUBq=-VAXo9P|(Z2;cYVueh zMIo;tcD)OfM5mjdp9eRD`b_HQ1fz_OjeFMH{sh4g$mQMYjgBvrbUDt~18sx6KpXY8a+x~jl1@}9FkeW4}MkgOG&q9>g94gz-1mLQa^0 zl@%fF;NV?KOP!$4)=m+bMT>Rsx?E6SpX%~2Lh+lPwD@vF*g--&~@Lo2Ig=Iv#G=m3q@C2KDySmB!M)gq6Ur+c02(Emv96 zG!Aaa&d7G|c~Bkj0880RNs3^5pB=e&)SVfH))x%>eH+HKeng!&B1ua}A zht)&UnoiXA2QocMQQjjp^cZ4hlXiJ;ET24sCs_HR@xcCG0r+F{5Fm&3ynein&RQ9A zcuu!GcxQklVhMS#88B$o+L(HRn zqL{jlJ@N3hhg_TlFEfY=2`qSGGqa29KL-`~rZ)UHS~b8o){fKtqJXGyslu>xq;D;U zivbz-GBR;uxl>n6pRI8Kl|pShah~nviB&McD7Z@KtE>`!y~jPQmwz!r>-ib|=V0KI zw@d6=q}CrS(as~cNrju@$AFdkW7s0?f0QiLJ3n(US()J{TWZU!3ALhuuN!7uJj8Lr zFwKv~Hdv3j>Ko~zo1iMFym7r71bx9BaxV5il&;lI$JcB~s&YQIKRtgPdo`Xm=m57L z`RPDviNYh|DEb3RDeJnm_o;Kt*jDb2Rj58`P%qLzq%&rJxSy;&kx9m_oNImDh1}q* zGltcpGS6~Lj**OuW~+nXDX6YVzRCPi~2g0JY z3#gNP80V;@l)|)lwKCm=A=x{ZKEYNLGjD^t+-T+pVOsbj)|p ztMV*2hY`(x^NkT>yPrQCU!K<0(b1`G4GE5?*4tytlBl%SR)8MJYYNG)Z>Yz#)!su- zr;WWRS&xoRH+KGc-b%_{%gYe-IuxW5lNk9yl_C;@eE^{e(p&E~?#A_|{}!KqhSQ;1 zJ3ot?*@1Z@K~-P!cnc!e+;uQG-Mi-_?F79EdKDx(Q&}y>cA&L34LA<&x!Q~?I3@Bk9 zN>kf{0J$JlD`d8t^1*gJ=T5L)%P?+%7LU(apqclaH_Fg1Mz&V0UJhqTKB zT?Oi?nq9N)ATesOUI#^RQ~ifqc4YG==T&S26D!QW7m9EIBJrW1_z35Yte0Cxq%5LSL z)G=$DPhtp$q0KI8Z0!Q>rxr~1GsEm99^)M@`A#Q{(u_Rb21K{61xzD;m=C|TXo|L` z)luuEQ?${R;V#WukS^|X?tWcST~VQMg*Q(;=sY|NbH@UEf*Ai)8XzSi5UV*wMIZph zzQnqKeNBU*?WtncLlUt4oRx2#A{1Mn!iVswL9nYe!Cg#ys~=?Z%_VT9^6Ll1SKEe* zJSYa*Q5k}U9YjWh+ zD9xCauvxXbkS8e_SAEcemuv7P$XYjW9K|x=M4-Yu<)~-hU=)|aAK?FuxUem@rzV(12=$^^iXqIj3=fgL(ze6DvA_c!a zIThY3ZBfA~R6vL@dJ{M?sKOzyz`rhX$=@?4^gt3;&W?IftC;b=8pgns$K+5-S#Fi~ zR)UUZBDYY_rzZGH18**_ep1z^vo!o5*Frf8}`7`_`K7}c%3vto1COVr{DygHpr#%jIw#fsk^xf`@Rpm^_^LvUs zdB>2j6B4SSyj|=%-dd*(aNl~#rdXF)g8aOsogc_6scVpIu93pboD;yqx)9DIBD)v2 zBvJ~(sbzXp>hBF?ty~1R$0_zOD6?f@ZY6ROa!`6eLai}c*%wn1>pgoRVc?b5_qiDb zflWdsP&#;n$|%=sHtIp;^sf^4&tPL#XS^AjSl#PO#T3fS>AY?4+i}Vh34u2jJ;19EYaey`GS&ft zgqf#?IB~1!ME9E)$sVTHdbPE0duUD=7NMSEW7xU!L`0FOlw8mr%0hSs+*15L+~ikq z5#?j)1=TD)H+~`#d`TJ?!WA389Ugq<*Ggjn#S{f4R=x(IebzV3>&c9IA{eAhIO7L# zZ-KZVX)^h19UIC)B7;bkFfD(2(tBD_>Ph<1f6tx&s|@|Q%@3d&`Tby!mx|kw#2l^oR4`=gG9WA> z*V};A8=nc@JLasKgn86PDoc3m_mE-%R|A222f;o3V)vr(79189cJ1JR_WSqmTP-AE zRx8b#GiBN|_}q@M;rP=0C_$;L{gVA_TU!)>viq(M&1jgqBf;s9UC{y>h(~LU2=<1k z;NX5T&I-V>aLuuq8*R_6Sg21_D9u*6_Ug=6`IKJRGB4Hm?pWT4P!jMfWM0W^)P$Gw zK+P&8eU>oNFmw#u{Xi0CxDCd?@3iOZWtcz{YU?Vx`1SeHN8PLRytqx2d0XsImxK?cCmVhphc7YfL>me*9p(xk6T}5NFX`goEW5!d!h2B*tWjSBu1|u z^f<|cHW|+nooH|{)vP!8S?K>Ys zrUmg~NZvgo7BS=WdBrTM`nyHc$d25_{0{kvN8L1!6_r%BzI0H{<%axgMIaIr^uY1k zuWqP2xJqiZOc8KbK3JDgBZD4k2Gz{Z7YVR1FvKDfI6bRm|klC>yy7Kt$pvrh$tz=XG*nAOAyb` zW$(ejz&Y4MObu@wJ$uazHSh`G+rr?3>RQXB5LYqiKTl|S&%*><)r6{T`-G)2{fnZRAjc+)f z%|I}^FsgsJLykP829IXcLuNd;-U)p4YFNNC6kPGJiUChRmZ#>+M!bk!391pLHJrI?|6)V8td7>mMyB!Sv<% zcbDxeN|tH`peENRK#Hd8qzL?Gl(J9k&FfUBrzfQ+KX8lX&*gxn$X=Zw27Sz1CH)x3 zj$Mhq<`@!VEps35uPlcbH;?Nb#ip1hqjK!;MI)UMybTMdXo7JgW&Gf_z0H0S-b`oLz`a z7t=#Fgi3);;k}_M_##^VtC1>3@3@#!eIf!KgzU_rCDN9b?TXEKFH$oKExLo)n}t-_H27&7rC07jMzIDr8v`N5zoYdQnE zpId909eHBZ+US8pM`h{cT?TkZGdU6U#igB}OMUv%Nf(_WK;@UOKrP>t0NEAZ%C1sU z<(>9<$F{&RGWPtVg=U+}SGab&iE2$ByDA)?Z^5O3flo${@;Lq41(Jx5n`e6LK-6X~ zzmI4E`?+sN)6z#^lKMCC{=kuhI8>wI?~@Nmp+6`e?;8nCYT<_B$^5Vee>h`GCQ!5- zfX3P`6*!~PD2gvqRqaGk#t*ZaiY^1RoC>HA7`+|K_rqMDR#o-ij=w@JzM@jUXq9{# zYrP_vR|LrBr9D9EGQQ5gYuUJq>5LDgu5U4NE762FMfO$g;7wwJSIoG(7<7`-O%ntI zZR`EsiU&?w<2p_3Si?;?Q^s-sElT``12dGuF8^UPovt$=BGMOPl%^V*$1Vu~OZ0sn zYfDxuR>)NG*c=l>>ka&F?r*tk)eP;Xp7tjj_Np*xAi`1ZIZI#g5`FAX+3NB^4%c{Q(9G2S?5KVg3{EfIR;r*-L4q z)$4u$s5%&P0>z(~6U~=P1V~o!lS>8=rV~qUq9G8u<0@*!!EIcy+E8{T%rKt2yB$8+0M}iaMprl{wZ&gQ4J%F zIs{+*&j+7oI*09S!$zFR8apwuQNHg|!x{PM9kp7ZE4gK&gI}2N_L@&Q#kWqd3eDH* zScmU8CZPnLvnb6kE|I6{vlnbGUS-mgmhbKt%fcs`z*X zLkoC|=w)0q-V~c&?24F^iFg7mR5GCZP~aHyr#3*pwL4W9vjj-V0KyETSOEy%%hR)2 zCY?v~{v-j7Qmzj`#54O3;D=V2&O)$oeM#{5$53F0iB&1z>q+Ds&=UHMU`#MsqoN3o#Quxt zXK9x0lJWKtIr2mD5}J0o93H4c0nhRQ@Jhn+GmJUMRGVgr3A2bo(Qlwxb(FeEO6!t7 zPt~5!-79nT5q}A$fqdwjJ4{!1cmEe8UMf26n%Mqhx%ja$1wqsRl&@4V%e z7Wa^*rlz0?ZvaU%0bmYPG<;Hdo?E~ArupZ4I#$+cn8h!z5TbEy>lGslP!2UQeSCbd z-x+**xZTbWOKjaAX_7InbxKQXavlI2E^>gn^2?#WFZ?GHqCgmuN@_NF?zl?)| zXE|0_fVD%aWRTk4-nQJh7PvJV5YO#0lm1dcb+DLUzH2#}&P##QXgZo6-?{Y&^a5ua zUzpW(NfQQZ?t=X@mQ$dC<(M8&v{N8cc;&klWu2R*6_84QOK`vgq?56Uk-?NKwAmg6 zB!3CIe_z=+l)q&HVog12R>V1r=93P1u|U20kC{0+Ik81X^C$!a^q6|CnZklNm&n6B zyO)wxZj)OtboQ_^-6kAciwg)#B=PRqS@oV!>~)1mQ0i>1G^Y6?sI-zyv&p7(3z^HD zldP~;$z&vz6BQr7G<~r%kiYLjfBTxP>1N;*w_fywRZMq&RPS`N(f}L zOwH_*^7a`JqxG;sey*wgWL0SCc71jceNyppP(0umYx1yenO?%I-u3i7TCR2B!>wt? z;OTm=te@+r=fYEs@IO<=Z%4=#&z^G2*!<#JNU%Sm%Fbf5nnO10ZmHx`N`(KuR{#ZA zUjYGwPbhKtVY#Y=H4+GAVjB1 zVmgnuJl*Y^0Da4u0D{@p&E9me380IcC{QHDW-<<3cBqf}eZ2!C0i-j_Ni^ZHe_#K< zmqcEJkueW3^tniMzF$O{F39ZU+T{Fb@C@eWa@O=2@{G`%L)881z|e|gX?YonA@=^b zt&K-kwP0j3n<0Ur?Lmp}@j|)bsd3+=I~YAWKAr-=Y}h&+zv38~{Ba6tiGPZksI`&e zAo_ch|NES#N@)jnNiyAuS9mT7mcGW#_lTQg67HR2!FrK1$M z57*)o#3T5R3kxihMkXgyzu>t5G&6_KgL-vIIJT-`I9K{HIgOE#@eCN~K?o#1B6j)u zc^J_B+I3-fPXLqk0t@Wx*Kcl^?(gq2@^Y(?dPRCA0Acn6An1JY1sR++Dvz(IcsE~b znILm(7Ce;7S*;a~Nb+{=x6Lo7qsgp;WNOU-M`MtHHsTL>U3-=MR$QcWMC{)c=J0nAxrBZrF=Sz*^kH9-|sJH^%Dl^TMk0) zx>>@b_JNkvFOugMKdwt;PZj@_A)7Kv`~ZUaF<&nD6cFHRQ$n z=-`AVLRDuqt&}I9K@Vuyl@t_+GKn*pET*U$0A|EyR}fmy3dF39_R{jwW)Y)0Houw2 ztfltqU3EZHfDWL)5sM{Y^z?*Ju}^~YHxfKM?-M9H0R#(7Dr+m%u5U@{N#O!_FO z7{5|IMc4G71qcoV-wcdxDTq>sS&7lfsg0itB18a9A)Jt(J}?^bHOw1!_Bsn}Juxx= z(;`53@Fs8`d8W82wAHg_D2-d4qJ>WqAhp<*RW{xm-~aJCr{#g=H$9rj``3f<&(8w2 zC?^*uZ<>pmTs=JC^-Qzd!;NpxHn-5RvEKp)Nx4K`Z0*%ZFRz6|8aQw>$j1)+|KY7j z0LFP0;7N=|{y8~$eGGs;Tmmb|FU)$O=Iy-*!5_|m1$HmdGmr z^Sc-#)RpN9Vqd~b2!P{sr1!2o^yO-MZ-Gk1rQ;gFMEa!y0{p752-DTmGXV5&r*Cj; z=&8y!jYwbH*ic#Y??3(HDN~7oKR1Pm%>PG6Srr6dU}GIzc3IVB4XZ@|bIX$cG#FOv zY{BvFAGWN27mGNq0U(3#dMj34WuQys74^Wh}xLNUj5%l~E<@xh2JzfUb!(o8t z*Tep=XTPtOG!W94rr{v|J~Dq+IsQ`F{^OewUSLU&ws3Bu|H`HK>qP}h$pNq3894-K zvHx}d+XTS)ZLg%B1^>6py?p;|1{GMgmihh=|E*g1d*I>_0StzNt(=?aUx(<|&kB|= zj>5IdoxcC;{@WYGKV@Asu;(|E{IAzkQ2R3T77Bm1|F8T1u|z7Mc(;_ItcUU+d-Y!i zZAuFmSuC6GdEh@Smw&x43%ZvQ-2b;}_DQ-F9~*d=sv-v8 zXZX7T#Bf2}C2kmcW}rVNYf-mrbh1qZ37c~lC{ToLU~EW4C1x%Y{HJUW}hAGT_*MS zzXil9^!jGB95oLSG+5FC(_uz|UiWWDIi&H7P|aiO~zM*`w4YT+$<<>r3| zvHyOeFCbCR4dL*X2$6zWLh!_(7a>KC9C|)EAqWXx6Z`R}A=7ir}zNSs1Lg zy52rUa7L#j&_LW>$2eOr_BG$a5Amr0Sw-x{;pCu-KcW4H4|xPBbU*;3UU``VnwKae z;O?o}y=W8L9@eMgL{6nnnOARD*P95ZpIPKp-j8CEJf0eGXYhbco@SNA zb>_t+Ta)9F8OU<-8Qkl07<)~Om>{$(w3M@rzriA?zUa6nKX}Gw*hU%^_6FYr4Btdgj!iU4Ny(@Y>ff3y7gN}5;{d}M zRhuTK&w#_w0!&}i`c>Z@0&cF|I@a!ZOYu-5qjWePAIWeEYn->2$6!YFwiMv485WpY zx^{Wzgi9_r`u4%+Y6Rk4utivhk2@tSG7+TEaSJ9Cn4qG077My)CD9!2Rq$nyt{@5| z&hxGRbKEyx#(k-J(0&v$jEg=O zW&H8(N@;vvKRYr;X5;LD^W1p$h!=2DWu6q9uQJJzKTa1j)2seaic$dh?ZKji1+QeL z59_TYbnA(TAFoua>v?TLk-p3JMLe{Pc3Hhwz@U4Yg&88}^oU9mP@@3+bacWbu zW^m;&kRqgI(|A4f(mk%;!YVd}_4QGiuakc$FMu)f5z)b;Dv^IER zChWFZp`|(Hb>rlyVev{j4td(*JM#cK`+v$o{@i!l<6imzMD}Ac5SY39J&M}f2iMo< zsA^kI6;PNA#IiYgdU@qMdp%Bso;=*XgQe5g?Op<#DU&4Bjoo~HQ zgu0+8DJe%^VYYVT+Uv!IBW^Q$$Q@55&DO=W)FO%CQm8-O(jGo)n6Cpkj{JL*{N;lJ z5hPZ!7Lf+C4T}&RCo=BgvA#@pjzc*AyLV$`*fp3novcCcE8lldh$@)!M3>aHqjAf{ z5WOm7a28A;3&U}-w|}UDhhx~utnm8phrKU289;Ob_Y27z&5*C1`Uuq9$ihCPb2^0I z+}##ZI!ffBjAJ7dD|WuBGVWJ`RmP2&Fj0EUFfv*>KKdaSSHP)yK zuL-PA&*x4v^X10e8}##-%|Z3PuO}aOC-3R)Tpa3DhEMPP5mGktEBP%+y17tsacLa3 zo=Cr&3`iUHNN_Fxb6GACiQCdB8o3;4x?)d62Gum{&rDLqM$cPh zY>tng9v;rgu*(_V5L#OTLL!N5F@z!0hhA0D_ec?g;I#qy0b&CBPY0X3g;&J%Gj|$h zi&tW>NNrT4ZG?0uScMwIDg zNXM;n3|QD8dpSBOqK~He-rjiZi~kqU{887y0#}ajO~K<3ZgfMJfwuZfV~<#Ytzc4= zO2@SC<+bvSk(=NU0q!zs`J8f zh0M%+FTeZ$LzechuvOys3G&0~q^}bKuHy2+vN16u!|`~9e6_jk+}7AC=)cFjKeS$= zY%T8W1`Yxa7mg%HiiWwQrvDLkMhYOpj45+LS7`iY1pi_364?Tib~}vl`fm=ae@&f! z|J(-#w&1ey8%FV;%*ek-G8^dvQc}TW3nUje(N+_2aOCG;2oWb{Qx?_=Ye^yy1BY;6jnNHkM?JYh8S-K$Dv|kQmPiK z#`Qw;(jOfixmnbGb3tq?SS=rCTw7m%snbI(<1Ydvh~NoM$ez9boN?+%V1Z+R_@iYg zkyBVMjf=dpvQq3@fl_WT55T_$>has2yorDjmt^@$OOC~K(OH}P6D7HH{7}uK%Zi&i zo0Sd&VDTHJ=dzk+zMNHWcYU-x(e~^GPW;r3sTT`4v=9D#2RP1=Bk?~}SS{5k5-DW= zzV4uZ?k@TFo(T zpnd~*4SLbTW6(!_k3fnCG-l|I30C|8FLMG}!=@;M&r9q{w^0W$tRz7f8r;r{NOj1MO17zPCPMRS%I?3H zwIf-50b;z{W7upMRaoCa=< zIe;h*R(K2AxE{A$L(aChTrXK>HNjVvGqgVZUNC>rT-Dglwh}cpZY}E7TEvACFl!CO z(NGHO<0NnItXg7gcnUR_XxGW{@bZ!~kub>zG+NCwVP`L$zUk^iAY;ZI0+UMiP5ZDI)C6?Op$c`Q+xe1s7usC!npNV(ZNVJb+O(bb{b4Hvz$t z$z}5NM3qS~IA*S)DwFjci}`dBy67%X`j1EGt3kl0mELJ@D#|q7Ew3*m%Z+D=r21Z} zc3ZIFe1tm}aGl!XuIYOn4$)8q)FF+)ZnP;DMU@0(4iyE}CXC9kBukFqtft3!!bZw4dy6R_g7H zzSC5r;$m8|3A9jX1&tB!>5 zfez!uDtJz6+AyZu#Wa(4Z%u+Q2YjAO2kt(F2q3tGg{z5b@#yffcHnB}rFHdoR(@{< z(q>mT*A#JRU0og4ss&j~eckN>7@}?DzirIz$e+T*a)aY?0FB#jU_0NMT3Bj&q28p# z+E?)we9eR0#Z$PFPql>6#7|8Z`bkVC!IiIIfnEn5M-AdQfJdguMwVNs*C;^}zfWt4 zZk-wrFHf%CqdP@E5h`ED0vUtJT24@v<*bd{)^5J6y|}bCN)*c3y=~hdvFtmyha0=< zyBG1>r*?r;C2ikcLLVJ)aQkZ&suCo-74M{rkkdl{O~Yww)lI-!j6JHRtZa7^QDmfC zRr-r?08-L9uP$jKpj##BW&zUzq@(04EK^L5``onXXlrQ3SE-y;p0`Y#4qKs>1iKTt zAvH~fX|Mtg#&u@9@H6;{Sl_pW0}w+ZC|nQbt4;l9$P1c`wh>=y(m^}oLVe-vF0sIV znq-_9e%E1ODE@`&J=yF5fPiw^J@|#**~OkJBE7{WiQqX49nn+9E!OMg-)`<4J_G${jJ#b{0E_RoD-}NfPV8;O$#Z5^D>hw~8YIOK) z<892a#y|p%?Sr>n23I4rUAWleO}5o)>+ppeV9a{^;}NM#H|Bb}P*)p(YGcZ@LoYkN z!ZR85yw)rP5h^N1xu=IDNvr~8nGbHGIhJEKqQS2Qe%>T7Xwyq4(8WF8U#H-(uefG6 zl(%<}SAIhcH+>l8mo~5MbOnT97xkc&bFZxuJ?(To`(AvPzS6ptt-IlqtqyqXJSB!sOn`f1Q1Faj zWB0>wOL#sRlQfLm#tzEuWrBXUrY<^=IC2Uqt(@{lBmhe0J>K2Y)l-Dcr>E=v%OjiG zueHa78FWS(jgE!4+=kelvh2%bfa^;_`zHbMCf#wT-L~BFosVUuBR|Q#^cX0l1@lG? z(lo2kKidhfi@^iQT-u#D4>_l(#ZRd+I$s{)5*ejjdbAn7`gBoTsh7S= z1nD5Z(ikOECjsY+0KLZ(g?-HD-KI0%j9l5+=O&s~M^PQ!6X=EM51fymnt45^g}E+4 zT~+zPQ?WUd4r@4nOW67leW!6?5fsZyo+#{8M$)-0yI$RteIO&^Tqv)Y9ZupF=eye> zCEXBoyturKJKr7|>^m06VLWbeS!L#H3h#kJK@mEcUG=2HWY7bu55Y-B{yV25+{b-1 z<;^5t2ykO_iFOOD2OIl+WZ8nq2Nq z6UaUWgJ-)Z@|%Dm;MSbo6VaRxU|aws2w+SXn+d9Zk~FRiTFnwKsEVIz-~#e|eDMy3 z4h4WaTF1!6`q#5<9=|;UNDG4ij4AV3CKR`=xHlA=6u`Ek)b+h&8w&!>^vBq+NXIF> zp&7L5`(V__gA?A}bDmB5L&4FSP{^bj)PT7<3g-Zrcnyjdz%g>#UC1pKt~_h^g*dy# z%#aRzO82h^0?LmLhr%49_FSPr*P7PoHQ(;d?gYJ90H#S=_ch}%?0_V7_c_00SE_t3 zdN0hF!C1-YFe7sdI1CLr!5|_pe3bP9I^OgwfUOrRH-!s>+5YVKdiIF48j_!o-+?Q7O0*0+|Ge@!3krjM1kQrtOI!5Wlhbo=rn3rNA;@;KXzNZAKk0*zRglVx-Lqh zrlycTKLLffRx-esn{5`ewfF>|<$V{7`D|HQ^TQd9eT*C&$6af;F+`cR&KGDzf=Jue z+nyqa%jW9*-8!PDFR*DZ{>(Ca-@J4dD?+{sJVg`0^PDiwL#0t?pOq6_1HGiov3_cO zDOJpo^ZVic#r3(&TbzCR7+!qyrgD8NUEuyk&TX$SAM%>{NY&E^fFc)8JcMIp*W6vY z5D!1!0?Z-XR?`#S2+GexPh9?T_}ti_BwhLN9<{N3;Gib@`K(qF?RJi#;bFE=Q@P|~ zt6$t6ijc3O^JIQ7dS`-1WO@nDB-OnRwAtB9Fi8a9&i$cdw}xtQcFUYg*kQAWNT zsmrU=2`)^hSG~eE^_g)aH%^K_&#OLpZXIwwGU1S7ULqksVF_FD6@LDhf@>QI%wmb8 zA51fqf_NDmyX-B%aHmipb|t_r0OW#v$+4Y-SO;^*-taUg^NHi+@jK#22(7^jsGlB3 zOScwmZR&hjSD@NwU{YE>x9ugUhVon(_@vSCmNSo^UqmP;qGY$-?lF5^gJ#;2F~B{g zB!=w~a{O!~$;@+VOy}lcZsMeLX9Asnfew6A(Fzo^#r(N{_Ht#h z1AMK}$StZq%FZ-+I|!0@`f9%DYy0q{Z3dnxj2~dMJ68xPB!~hfCIJKe;Y_o$nMKW?(TR`?!E8*+}E|A>lv>f z97DzcS#_Sre;#xGrYylgxn-LVobXK#DFVm>gfJh!$5IH<_IffTLm_Mws_Lu`&BKdy zA8sZ@#cjuDj#E~E{pyzJ{I&(t^6JGJFo;RWx|RF;(fF5#FyWlz!OWr}hq8oGk*bxJgoa0+M8 zvQT1ob&%V8YNFS^vX<}2!jKI^;N4Y-R{P$Ax`YCM)|z|~%|Z%X9|o5G4UT;zNPK#w zUV&K{B(%vv=o%!>V=E$Iu2u^a`V9mcG0t+YMn`Mx>%WpSGE)La**cz3$!ji~HNVEQ zy)QoB&w-Cca-SbiFJ$&q0n*=x{e%6qiF~tKVBt0J9k=IVM?d22oFIsa-PP zBgbzjnD2Z-M_<=F1qx+E+x@bHx9|^$>G#wmPId4uG~2+*s~ z!NYKjy^&egQ110uQu_oQx#TaYG*%&CE1>+Ehx41Ujamw8^RsTKvd+j_QTs2%Wk z8SqT_Rg1(42|{YS?jOW{2M+aGv&HMVPLmu&Vkp6*u7yEmds)>rwY`Wu7@PI zQw54}uU5YEpH{Ab$OU>`@*90F7h&nDJ zf@1LNbu{q51?`#eZA3N*VdW&C&|tL%Fa=vNGVv@3QhH9;{D0GcaFoilIzU!xS2bQD z8)W#4UQcxjr%R4pcRp!vh_TtsXCkFzOEWCi;h;Wv2!xvEMP*{eeSW4z0U;@uYN#3w zCtGB$(l`*k|3oLdK)U%L)@7Y4A}PsEwZdd@f~-HS8}-y>Z2yUko6M-EO&;&Wg_ttVlOBjH_h*C$Ud6?>fS^_WyZ5w`zs=?a;L z2JZTEX2 zr%E-=9Q~2Q%tmcBXKMhT^fDIEV8rKK-wIxE?g;CCtN(`#3$F6+axV|7(n1q=85odE zOV>m1DoWB5HtWu}u+8vr$wB&{N%elj5-WO{S?*JS1=N+Go!EkwxKK`mX*S&8szxK+ z{ICXL?wJ&fsn>&sA-*>&YcV1-)InU!*QtOJ<7VjdMc|QuveVE{jKsRQ(cda~=VpT| zI|g}HFNG>%OEeo^L}aZf$N~E5wkV+xH`roC%gw2%K08sV%VIsUFo(}uHgw@4(pqb1 zSj;U%-l-ZZN5@1D9*`;Vi~e*rt9zvzGTJncXLPlZIcKQSAC=X!5jz(^$Uq2d@^Qd% zYHC&wByBZQ+b1_UuxCD3^_6pZu8&GoUq6A1GevcCvS>FmQgflR?`1p0viD=B`aFPGDi`2ikbpcWz=F7kpu^gcX%8aT%! zCbwHpCs5dE{_Pmpp`ziv&PE<2E|Yp%vRL>d_I`y_M?Atc@loqDRk{s8v3A?T9D zGZ>P&M9G+F@5^t?(X(YShz*|ak0jW{440)nJwG%c=L*DoB{IwgAH?$_b36boCD?y1 z%lf>M?z<}npYXQf<1wzL%RQPNZr)otoZR2-myH8z4j82*%nWVna|)~W)F|~l!zhdZ zW=u+;a}6H`yCo=Wy#an{6?lHD4)#tSbxX{?h^kX9+8y&4F(QrL&O4dc6oZ@B@A2W( zh{!g~-+{jC|H*#Z`zjXMjfq8R;g%cR%1Eno-j&p+g6z`hu-5Ex122QHtD+%v@aIQb7v0(fpF?yr>-qQBu$__Ogd&4{Kx;IK-* zl$rVoCwNi>ruwQNtggSvzq}sz@R?ziuG9oF`GT+7jzJ*G_JHZ;l^WgKvyAT7FcC}I zh;S`QUlfZCK);qfpQX;}>);=ZQdrE4@R~iCvmAtIKe;#3Jxh1Owux0wfHpXzQ7mUG zK4Z{uF2Q{w2qY9)q7d1B>&BA5+)9cG>ZJD*5rLDzAz@r<=C>E7#F3lwj3Lv$=u>#L z&|qAKVC4H1Hq#F;3<-^E$7wKma(Avq6H0e+)IeZYE+_1_G1sn6gSK?M)sb^$9iP!~ zl0~!$?_F;eSsigPsYa?M=!}RPEfa`N*7hJveaOHZ-4Hbm3W}MjoskSc)V3k*uv5^H z@B!n-S+kj$uSRW=hphm)|mp`H_YhGAATwL9c$graVy7x%W9{ z5rNb55T35dx^qztps=>KXErf5!3ZK*Md9<9vp-)nQ;l#U4ezQG#=+u&^2z(UqK=dj zp^wc!S1uqlPc}wfGrVH*7XH$?ALeNqXUdA6l?}|LM-1!36mHy$CNvO3$7aSTUJkOc zAD%t(%892G*QPwHJGf4KI|>w9m3VTb#Ztw6$r&;-J%hiOYt{%PbE7C?;!rmzyJJz# zM>fTmX)`93FZSqL$GR8D|0y$w#24zFY_S~6pe$2U@k&{tOi9rgr%4Lw1oD$!6BAAh z0T*2zYI)SL^lv7yT2A=ZGKW@Qm{9*$jXo%CN)zw!dp!3CYeJP7ixDH)-|3;j20ZQI zyxm8E{}A6w3OQY2TQc!*{RAiIs04>Ut}N7M!+X*SL$-^b`4eR~9OQ=FuJhHWSC}-C z2}=8e=knGDCea)T_Wks-XB^`^YZ{l=kYkK$Hz{y+ zcmH1MLfY^E$#skr{M6Sjb zXS;JY7dzkT#iv_?pQYfPoIeV9)7m<@5m0JT6XeR{UA4yjP34D^TIn4nIXmJyPKM_R zOb(16LK0voTL;&qTTkGlCMg!HjNV+Xjaq>AXr}^?0kR~vg#YkQFC#y2XeS}5s}O3{ zfVl5ZM8pXRf-a@vgt9dzh1sc!2RT)Dx(3 zkOVQq@{@k>yM(nC{j`wOIpv>JpxQy(!5DD(UZDN$_!AC}$YDcWLrzM*tpZ)k^y=Ke!7qsUz%5UF z@f>82xAMRWi|JtsaA7bKimUI7{pN z;Og)?Uc3&?XX5AaT*Y{&i!Gpj!Y`~^qJ+LbT{bK&pEUL7p}D8CgH79OeMEi=43#?H zP7O#&jEjq7yPsTuKEQXC`x@8&2;`(9o$sz^W|@qoG6A@E&kK+*^jnS5WiquY7xpXI zLjc;^qr%(xcr`C4maf-xjc_19*h{Rtp2%=V>I#KEqqXAcj|WQ(rdj3yFQ$#;9azw4 zS=69+R(x*9Km+Ztk$7JMZu(p|b@fyqOc}>H>WtA1=RH`2*EBw5S&u6P;n2qp0PgEU z>N|Hjp~Rt`rB0i5Zo^L(2ojVJi{&boGgtnB<{`?iw`aS)VzL+mx)DAY-M;%UjzZ-e zK2BFLGCU^K!Y7^lvXt*1sau)6^9?j&opbUr-$fWfjGg(na{+V7IPA~7&%8t|vtKif zw$yVYf=TzKki5RkD@7C(Ji%SEwCj_~CYKWm8p~%YI!j;1H7~gBjtR)g6MRnOw8+Kf zu$Amd%+@CEySw>Th0AT->)x!vbuTe=XBcYxwBRzXl^JfcJ+#=3G~bL~E|5;4PvxGjo+KOB z)-#6M;-FyRv6}Sm2Lsq#7PD!CWMq1-H+37!pRwW8yFfE+Kn^8ciPjK38wC%6VD*9G z#$rBO49#1a-m`2zodjYGujSldS5ER!R5;Dj{R)4@0xRN>D;#RQ(ph=?O~L{gO7?CG4htuX#tz*+D+4Q0{=0FOtbMl*Ue+=m zx9fd^#KW`Io{ml52wugq?ZLXey6v>ZNjKxNP<$R~GU+=h-sdx%n6T>5IlE%j$|3mi z_@Bo+wkaqn3Dl}&F`lnMSAjbbrT@ zQ(g|OCyY>M(AX<-?!gpU@10r24wad%z@ zjT2rJQiSqmFdJmv?X$0}?M35pcM%1gxpNz~Y>ue)suS{*OS^+bmF%Rm-@kHTzYwtV;Q(49($7aAzya$aO1pbub>y*$lTZAYCnYM@iCZU@&VN?M( z^MI0iYJFXfcZRMmd?pS5P`+yut8$ip`wWk2G*v7sZ`pEqWxwvX&F5z_BShqi9}@`P z)a(3;b^9o4H#`9lGCMkB<2}fvlPQdc)2iL8n%AG&uQhYT?uP zYWDol#x>6of)J+Mrer^YbHcuyYSj+AYXp%r`gpL)$&`M3qkAcR7XeH=n*+T*zK~uf z8KghFaueA$LX`6Lv6ts*JoU*TJ<*isz!4VPYv+;kov+shbH28W)sMovn<+{JE-xaM zn1dXB+KhNyUwpTj2LT~cMpRtky@aia0;bIxz9-ZR%?v@)881=Ma-$p%(1!y)!XB0& zVoM+no04L4xBuSFQv8Rj1>zK|Q~pY*2%@+tv3GwQm1(S#&y3q??38}TJY-ZPa*_v z3R;Tk6F7>PKJc|FS?>dy_y*uF*wf49trZCOXn?()Zw;9k)}y9IvxZB7dQB+@2KbU| zX+hR#@Ry;V+sz+A1s@%5`KIC)+0}6^=gP(DicnG$WLa{_RKgq<{vzDFLV0pc?OG#3 zdO`R0m{Ax4YzpAh!@9N&oFUA}*jdeIbcksV$qA`F&?nr!^%1(PJiQrkxEX3V?rjr# zlOuE7Yzp^n7KBTZw6epHB~|5F*5HOdL7!b{N-!e)0hj%EU1c+ypv$IsT-Z0`c}g-I z>m~YKXejI$CLOTXvL{xl7(%$h`{R0!4;ycYedProO&_HJwkZad1 zjdDA#n_f_ExITy<2k%f@?3Beiy(i&$kM$m_*;E( z9c2<>+dZB}S_1~;p|1{CG~59_ZmdL|?RNS3$@plR%WZ)&M#$@HUWFEq!t9X z>%+Ko&pWXxD;29~3b5tmoagkHyE^N#kuR?K{>v`@Z!@Uwej3d&a5rPK<{OvD7b*aT zEFvW(Su5gs==4AJ4rVC{hpzBd&Z_-)h$$CHbGTS%H(3DmB!N{&uQ4uo5RL57)SQm` z@>GkPo`5YhxH6P^`;5Nl5DN=Lb(LqYf5*R$-^g`p|jmwKY6VY7vrS)zWM-*J?!v zk|g#f!4ImTLr!VAyZeIX^5zQ)C}QqYAck`)E-PV<#4cKivVeE`5t`7i$gYr25CGA> zIi+qT#$-xwQus6reEhQwJ|f%$J0KhZY-r?YEuXdekfk%j0=c!`5T%;O4B&ymZ&O zs<7jqTy9GyCD0!fixlGCyy2z*(iVoA+Q{!jweA*cmiy#o_&&ezQ(aW=+B}|p1DdQFLtYr^>${e_1m=V*p7(<_Mw!DEPvR{kVw-@?N}=B2*oZid=wR-X zqz_Q*3fNc1zH5RV)R?V^NSbkod;{Lc1DixC@_wyq%WfO}HJhvA*)6xedLm!AhcwLJ z_*Xz-I(Uj7=Vs|1SiEn5=PfHsYcyLgUlHB+jPfP7V1ehU^%L)|6-exX1Na!^V@}xx z7RB$UDCgCYwvMxVf*6OXhu5d4S7Wnj>}hrH6DYl8roZnq?(uv|&05kee7c_4z1vZp z6GPx3g? zOvzO=0$wp~O!a`mJJ#amRiN@GGsm^w2^Uh<@?hHS-2*vgcagLYMG-fhE}#iCvfq$R zF3pfssv4)bc=bpFze<|rBeHA;tlv%2La(Z|BjA;9zLSUp7PvvO0*p>!XNl=zRe7Ko z{ea$fVeCUULe%#G8GVEO_>$bxtUo}31IY9F(22x#?bO}+e5#d^o0ku0yGY97-4wO| z*>lZA)%6hESDaKSSw&2(0QmHAg*o-SKo^#B68$#oJ$)61kO7-I_6AV|k3CF}53)%5 z8c5-9yS>HUfQ|%3E9nq%n3=DI{6`>d=JA~Djw-$@_`Ufa6JMWCn1nwva@&&-6U#l0 zu7v9<4hW=za`5U(eThKyF46+yDL$@4>6U&={^I@(zQBIcUN9S?8>`8K6|( z&4J|TG|IoV)B0h}%X6d1%A~XQuteN5(ZN9z_;qYP($i?qaDLOt_!E>(u1dYVRCbxB>ZvxowOl5!E?LV zAqsq@)#919)nm&d+kkZ$lXmIATtTq?K?aR~WuSP$ZkT5ayDbI^Kw_}D47z)`4>n&f zrC@WUjXr($6&G*ue7yMe_K!5OkpdgnzV4=Po+!PpT#?e@dnc2ODY5xUOAM4Q=U_N7 zXdA?}IUgs!U#vDC)6C~}5@ci8xkj;=r)r5Si(P3YP8`zmc@&9Ae|AvJ zK+KzykpSzZ^Pyj3FN}m+l0qC-uJK$crfKfdH#aKlYR6gENV}u}R;4PBpMZIN8wl;x7#Xux$WiIpRlV8k=RijqIRUtvb z$S9sWoVYoHG&uI!Xrtb-E-kYP4u1JBcJ>u2VtPZD#y_igVAJ!jS`Fl|JpnEbb z%m{8=)SBPZ1RAR3fIz~c_6k+2P$?flZJ&(V>VD*L-VGgS=%k*UcXRmN{7TySm2w*3 z@1JCb+!JxGFoR2Pgp1SdeT)?td1F~S*0sR2iZKAfCBAPX%evnekC+_eJK}N|S>u9= z3HU4?+iUOBS&{yD510Z6op_q{ZD>c7jQ#~F!lFAcqPGe1K_HMc&nL4W%ZVf*Y=FCx zXaAsqRLfVv^z#6mwtNYAsM$t|=azs|=%D}3ZeQOIV%K1H>c7m6wQGR2RQpuE73#md z{2C&#xItsnkk#?#bxw|PAVt+89UdF-|H=o&BCvb1=1@c=>i z0hj%sb6~BL;;#_UU+fX<9-h_sLY6&JvYa&=wFLkCEr9JjnjZ+qZT6A>8rWP?zP7A7 zuB{&?5Rv(R#VVB1UoumZ|Myt?{{$vh_Q(JbMA7|&W=s~+y9Po^R|9V-sI?7yDSTq2 z;J>47>ha(A}X7g*S1G;2QqY@X=$Z@e(;cPw5fT#%4y7Z-#2R!;XlolT?O_JIImqC&eJsRB z-AVB1NxSj;IO|C$fEq1FN+htMrx2XYESW)Z7)h`Ee@#vRulmPNFF*Zj@}ogYYX}`T z$o_pN%d>T}ha#>70hBMk{CxiJe~AN9Va>Fg2upkchT=3hnJX zDwg=i=Ne8B2)=vk7-qQ;A!A}jCM;GiurX4J12Z%QP$Ls1f{!0*_}E@LQVecjE?tev zRTrHor8QAHh55&)LnH3R4!vS>Z*!rtJMu)v;dtOT@Mzo&68S3OADm%(%;S+`5VSV+ z3ki>t7E@v?~65!ORA7&1}--B!JC*yi)qc5lMu^z<|;#nO}{jnffX87EFYB`UBN z{`T>@ufk&9(ZU7R(v;MU%3BVTbU=-SPbVLOBS*1G&DJfNZ?$QTRTKH+TLL-4nSuAyA z3=HFvZBn2?q|)zayv%e@oJNKa+O_17BoFDV1G^UZNG8&^XOdk_f`NeCWVutmFu_T} z?tz2jg9eN&L*LnPF8izpyKGs{M@p;}YALgNiM0MB9~;%Tr5&}kA63B|(%^#-wjy7N z`d*8Y#_UA488y?h|AfE(#|H!OnUA6Ng6_lt#;>ik&gq(=?OG?LjqGWSXH&f`!$W4V zO0`;hdvk*EFKlWksHa?6AhmjWc^T!fe;w$>;H6q`Ul+822v}`t)N8Q33?+^+X#F7h zvichryOnY^mUsY_E%I>QsTWYPq6K_kiw|P6jKTYOJ#l=Uzn3vB`k`K;rg(VoLoM5e z^K0;WX?%XH_+Y6?r1{Ax8wCv54XJ{tjLI~sh5a`~>sp?hsN}Sp6+EByD~h$MmEcx> z3LE^KX|&xmoozY(@#2s>y%3j@hDX6%_X%8-gfrvg;|m&bc-}j$tFIO92|p}(FbTXO2sddC|5;IhqZRG@Kov8zL2b({V*-LylA&%vsTYgEDv4> zUNO()f|&OJ_^r~XsI>>X=k4n3WS5w!ay@qtGJX_wOachvA4pmtHzc*s+1IQe#Ass~ zyD+(=F8<~dy>I9TpZ&kwp#S5g4(9fTi0elY>`k(@`gOvF?I6Z_lC81vf9)hay*!Tt zZb}eZbZ_qPS{mR$g3y_nN=@;<~8bunOHOfzZt^zfAmwuUVe91;wnK&~S)P=_@s zp8unt0HnUuTrca#K^k0KTw)bubf9PCd<%(h-^5(3TRn`>XAY+H2Z}p;x+J#MImIiD zq!b1mqgN{0sKg^8fta+~*WL9Vnf#F!fur%>3!tA!EhPl-=b=+&)|ffDq&eube!3!% ziLCpg4~qi1%5kT}sJm9uzMs6k!|Jul-==h(u|;SBfyg1Xs!H&6#o^cr>L8-ZrJGzfCHw6?&M&U4y87v1h&g6K)t!rNb|LY`c<#^`j01IVlT% zZWf>i4d!v|?bvty2DJc%4>mC?YuE)P4)mWUij z@_Qw=dOyMt9FEyMOmUJRJW(E^DQY%|J^7ivHnadnA_D4q*({#snZxO+F;*G!R^LHa zwcr@pbv3~pMJ-05WTDBp3^tCsAZj{EU7@uHO9`jJ=~$X%ubr4g{E%zNEFGNl+~gr; zaM{qot8gEB1{??w^*=+S%%kRn-LWu_-Nj4eg{EJOBrMaX7b%qxvzRK#XEa4Cegj)@ z@g+1hHFjwqasWd4=QMjhH*w#~#!N*x7P z@ItJ5Zl<13t9?S4M4&01=sf{X8tI9{kVOI39_^qhd0~Dkh4!Q8Xef~aNlQ^7j|gS; zIzK_Ytt?5Urb8g4rgQHOf`d$h2#L_xTZ`Yi{ijf@H6og5k-KKc8?}iKG-4&R$dne^ zD<~FU&StGdNUO5+=IV%}!Yydf2Nw*^6Yy!EjnL=*&@>7A84Q11EXB zfJc<wvgdDe6GrTy~yeMURGD0+4&tBQ8ZN*Gy3C4z4On}M zr-(O8r1+76StrzmXjVrgOy%j}yv*<_)dh}LykVa~ATc~NG(Ip;v>JyaHwagvx2UX< zA|qq7Sbty_x^t#8`=frEZi^Kyp1?s$-v!eF%aA`g6 zaXg4O2ho;)iU)*blUQr@A|1r2xxv9fDg~kZ5&&B9&|qITG2Z(<&1)>f|9n81S~kACgHScsf>4=l6AEMm|7%?)qccMYWBObFKKBBNAkIDBsypc(6q|C z7U0Ww0b}g4heyd`>l6uHju9MN+rD_*4XD~fmI#v-KOVIV>LSXtVD*=G2|O9?GP^~mplpEW&&bQT8hPcy7JV=|aiW641iNV0Vnuea3@*#l+4*GmZvtjdMmkAXej|Q0Er(k`% zai++2*PU4b}ovCG&(1rqj_4$49zzU!z-rUM_%)8Oni2R* zsUf<0pRM=F<4tJE&&%KTtAft8#hMKQK#-c{bPWrTQSE1KXPfo&U`;bcK{o0j>-k4U zbw?*VHm&&-`+*L=`#H5qnWlOG)0+(@wy<5ut&aLq`z<51sCWUJPCh|cV&4@XH3xra z-?1xY$0V@r#0@MXy>q-y-K;fadjiTdUqG|!+|N%mFwyAffL}n4!6*rdV$$u~BRZrq z6t7L(@INWx&2l8Fsk)G~>%1(ghp?jOc-@lA(SW!+r{`7S_DE-oJSS)_>=4lpEi8B@ zP!^~E%>o!Z7(n{RcRI_z-syKKtQJ7ws%5;%xRI%hv|N*`qKj=WAsUUv?%l{L$=Ujj z4Qiee4h3I0{udTgB_|5;4oAI});9(VwFrzx1MKq4>K2^%_&2}bmLLuqL%bp>P7BBh z5^R703YfT=E0nS{St#+kM4zC3ZSbh15rV%sg5@dhhZg?Ft(jbz(7_vtNLn^mvGHURo>GXZV3%iF`@-b$(d_sXOc|5P zpU?jr9r)imiT4F;>YCpAnUP>h^PuGPfI0@<7bmj*)*+LxrIJqd;%ryD*FWAnukePw zJ<66HBkvS~n+MK>RH;T8oJQx)qht@iqgv^TSclV)V%V$4emDe{MOgi8CkJg*ZV!bN z3G=_n_o~L3kbLtQklNZi=uC;fl3R?+%wP1COG#+LPbO9G{!Za8;dB8Kirt;b6c*~d z4E0A1D17k5`8^Rhae2I@8$+^xC{giJsCj<@8bK75QBh2YG;KbAYTM`dND5T^xa`qU z*Cl3K?73zSfrh|LNBJ)ip?fn&c29a0r!!XpwQ1fSffgQrafp1>{1#?hqDzF8e1A+cKV()?1-5s8;rdMOP&uyU zxNp8#uNnVbBdF!M%OSvAlf$1H5gyJkMIP^Il{H4Y}-9rhXL;%r&E3@5U8Wze~Lq>`3a9hjyYheLgV2c++ zkkWnl;GP#=8BrGy7rA4xN#%zB_rv&Kqjqib%aGk#IeC=J3S|DiLtVAzGLd}C5X^s% z|B!D!4hqei=wDx`qYq1TOaOLjqQLPFm%dP0MjQR(n-vPR zwgNUWF2l&4=R9^%$YOkw*n)?2A1D}4;?4~Do zx7z+m%X)bjt#JSy@$Ub}FJ|3T8Xo^Vcl# z_<-&D!njf>ARJ!^#j4y~s5>_y&O4tQUL^qvk(*&`I}l4c2M_0JH;hUGqbf0?@iI*m zI;7^*vf>mWb>cyKLq5)zhAC?X!%=>rg|ZXpA_=KDSMs(K!Q(= z-(EB_3_9VB{okxsOJwKUbg^4B$y!XA7q=mlYlTk3nuqS4^Gqd^L66%9t<<~6#LgM! zOE~Fint&VgFO-4*kP1r0|HWLY`uv$35`;#+Ik3yro!mAK5%Ph=Mzyy7u;)qVwNnC6 zszfhP_WkWI8Jm!xn(NKLc_0vtih@N60NY+be)?syM9d1AnVFk2fArUs2V`Ev0b1IE zDU^T@1hObIQqVBa8?D~Hz|c#gHKzrH@y4oBED2{-Y#4~;!oS}$F#K6NS}nEsDb8@X zEVm--As)dY2zT^CO3`pnJ(#c222ci4aR8q~wZ~+(r<~JMZYYh94uIUP?XQyn9z==? zR^sx-t8>R_Jzgwz2hzf>p1Kp#I^?9{9#Yo4~XN8JX1c`V+t!<;c z9=C~|a0Kj&!5iPn8HI;?Zb{{*I~K(R#p~gh{@Q{2A5WU-@A4Ox1^?P90z!pO8!ki&g#drT zcKI@Xz57HH|2z6~7(1ThlaE4~mf}!;B4Qf{AX~rYxhkIkWQU38&4lI8vWl`G0ioER zBk!OZ#N))zdOMIz`Ie@h>?*8}+!G~JZ;D>+}SF;uY6)fD2WsPdukxaeubOIp%nnc#q`{Pn1Pq9dMU!t?1)@z~(O@+aZw zPUpicz4D@q@B1XB1p?E#9y6f>8Ynb*L!YtQumxRyq*pGC_DlFErvCHg&AS~KgX>?J zSgEv#0d_adxkdXdAjivhdT~MTIe5NBgUlD^2aa8IyXtpZe*6t>$KrD8Z=CIX$`8!9 zm7$mn;-1)S0xv2FVJ?fB|8|y0xY$cd7Z_!tkG(KyUOwOwa}4Tuz^9=q9!pL1q78@h8AmlS*icsJnVJ7w8s?dEugy4Mq6y(H*^cKycI}4qIeN{iK9nvotq4-Zt^1!Ybi?;=%JA zFWGO9C_ci$I%JpCQ_>Gs{%B)5i;_P&l#r@6Kr0$QQyd@As?;g>A_2hkpl!x~(lTX< zc5Qfb!wIp#{_G(~k|(nh^0)BLe_S2j#sJjUcY&<1b3$*BB#yOsCedbjI<(f-)&O3@ zdNT8{B9+qn>M1+LXa6(P^VPjID!_^zGnV61Ja1dEQUJzy>IznM@G;L(ljJBTW6OL`$c(3#gUZXp-F+Ty-d4BwnW61cEz=T za3Lco;SadH%J{w%+w<4k%wJK!PKA+!qE)ppPMHr8Fh*^m8OLlabSXgH)V}Q!>!XCm z30wFW2q6+Et#A}+d;k-QQzbaCc)U&!C2(jul; zCHzCy>X)W%>*4`blrM2Y8rcn{NN;PYr3sW7a2@gVjfFYb)ibC0m%5`9)>r;n$sm6@ z-`Ow0(0wNNJ9&o_6bk#zcyVQIE%OTRlni^OOZY3x{oc((@a^V41zrBDPQ5Rs{!EddeWO*eAgW9mgANFs36%1=I8n6#u^cP-Fo}89T3&Qkr<#F-OtDA_ zg)WSCIAU#cl{zii4U5l2Cv1QNT zv}uDtQ?`VMwV(?=v+m0-<3H;v8Ya+^_A30wuSSR2sw{IHKkfrq$E@gL{Puz}gV{Q> znp0`v>GG@ZGrybX+?{(!brA2{e(a%^Kb>aAj21$TaCz&Zc5%f*gqbFSR z!($2xi|5mWOZ8)5`BY8K?e`opJR|}Rs!F55YDWHsyvh0v08%QyiwEE@nZC z+hpGKyK?dS2P%M9gWz`zA2#z^7&OphGWL~Jc%Zm;pZ5l!LFo}dn&Ul2@H0z@1oazo zq-VMe!X7@gJ;lql1UEPrivE#3!bpe-~!Ff_K!7axU>PuuL#8;OSyjqHg^hVMR_*-~LyCBl5ZS;%y{kkU}7 z-&C)w%8>*>g2n@gjXuDdX}s6d-3twOW*dRCtRY`s2rCkD;oxqd6Zuu*#Knk zBgi3r{QD_y({X%jYpZ)mKNw$>h`P$`fbxq1a(Gw-tIz4^xESirwz;{`6|NXP!dnYm z^?|^`fcm~)Btd73vG9}_8+zOsR+ej&iv2mR;Q=B!z5Nz8jCL+ns&67ps@|3D#XIm! z)UQ`iguQMk7`{kFXE?hgz{qjO!f5&+w-Gp1mhlLiV9(I*LiAe)<1ZgR>#qoe5raT` zhg4*E*;6wDEn2bI%HySz@SGRlb`POUI5jIVovA1u>Ra{g!_D&tinIRzG*$l*|m%-;v;r z6fENbi)nu3yLZSCzG&%Gc0-!Ej?s2!1m$HA3!3U;$7VChcf?B=#vo24 z0w2!;0n#*1!vj|Op`K^J9oF`yWLVC~+cY1yqXS*o~t3(KXzmm~pJj{Fe zTn^ghqZ(0i;fc2;A~N-gW<@ZlmwxNgwUiYkOo~KvNQLarL=_my`x~XNXP6B8Pi?F# zJBjIi_M9s}s8nl7DrWMAdBH)Fu05}f%^&@!5c-*e47CSf1kud@I+r!;_+1O?{?b$))Fy{i$93=kB z<484$)1h$1mA^o<0X*<*>>0n^qwD+M(BVj9=%ii~7t0hx3h!6drL9HH!sNzE3oOC) zN`re_ak5P-D`P$hIk9vEdaBH8mQst$&4g53%vFtVTPF|LI35nRwsMN+wSbU*Ucr<5){t>Y`&3*tOs5+n+jfQe zG<0X1z!`@-DcbPiQUb$?p{z>%=C3eR01J#v2ow(^Byqb`AfTRIT>%Fsfjfge%W8rJ zA|~S@1xV}o+1figHDB*Daah@5NIcCrIUkASiLBD01yJt^C{r4MN%fbaqNNl6%1WE> zPba{efM+hH$zs_55rAXzNs?aH{#nlk-fBL-^NY#eGn&(fAa?vj9AByG01k6**#Hei zbz;j1wHFVH+nW~vB5^qH{C2E%oFn{L_nbfi#VP*S!`c zuMCNJdRz8rv1S_7TVpaVe0OzN6d!+?4FG-MUhBW42!Mp@9vbBSZ7~w7By@Rc5|1%h z4J;kmo8Jo!r+1f}Hiz*m(U{2lfskL8laJ!lD(eEvS9;Y9LNbgW2 zSI8%T`ysCcS6B6kMvJsuzU@*2Y_6(rBbQ}_*jM=cQ4Gb|S0{R&x;&TDJq2PxT=@mxmxXtgJlpl9$I>h;@lHB1@(7R$NHK(B`<_Trhz z&NwhV3nJpM=xWYZ@1*|myAq5P;AiI?V*Ff;FAt3dAokCFRAaPj8_4g1E3 zSwIe)+g5_=?m<}#M&-21{iPO^_@?TBtXM`M0tUREF^vu|^8{KxuZJ=0Ma<~beRlxi zvX}jZnQ+*!O!LEkBCMfTh`1GiEn#$WH%bJd-Gs{C(C~wF8cPf?(rL;Eb~+~4qimrXt3D|EimH}=2{OOG48f@|oZE#1sFB;xBpq6dO zq^jf`!*G8$N^}yq9t|JIz2o2DhJv!s_i$g3rxGDEwsLv#$S&Z*IQkHVqA`W&;WRCt zYLznXI6RzMfcN7psAo}VCF`)&?kd!>=WdvNMGh2-Dj0Se|8U%&&R)fBM?=RayLg>i zM*>vvrYp;yR1+JB+imPCUZhu9G8Y_Ur55b>AcrL1YjQ|HKtQQc#;U>bLZ#tA&?|bJ zR5Svu)!CqBwHOWgPpL-Dw)?cGQoaQGt9dO89j){|J3|&+z1_5 z>gp4o%I(UOKq)T>Hv*2|FlttxgvriixSj$J5MO<%P?j`QRq()r)&eTv{*(y&FB5#& zx1jtp^XrS`21R%w@MT0KGHA*GL!X55_8DrgSz8-Kwap6e{&;R7B~^A?zdm+7~I*`aM5930SW5_%LDN+k<|R!b6CcUZUcehRwx zwTbh3Ue*Is#ag43#BqENhs<7fS&`8bYlok?tq(r||0G|3=j7+9x^369XNNX3HxMSh z2XY^$Dhx!EY1Hr_h$C!Yc2>N1y`i2(tBgn9>(4cX8x1CnA2h8(>Z8?i$c_3Ne!IuO z;KITcg%wTtWUC+B9chLQOfCq`H_z@&vaOrlsr#(vA2GUqtiQtHd)6e@6ey3vWglVD zoM7xTrN!{!e%&Ld;ve6$nDY2!xIbBkRI1)AQZ75-u=C1j-7Iu_I7JaS0}Rh#^H|U} z)DB(iZw8@-n;4=rjUlP^EmhR&WWLDb<63npLYZoUpj@+I9Ba+~&2xdSmrqZk4PVb7 zJ$1vFLp-5VxQ)AGRRahRn-I9)Ye1%CJUiV=O&CA z^m3?XqgE?oC!$ufERxXwxlQt;xJ)4jheTu}>@diwnPSmBn=ty~wQoG8b2{oXRg2aJ z8Z6yA=DaIy7g_`^$dpAHrw_gjRc;acl_5F~N)FTtZb+KqL&?md@x^=|FHo$Y7LJM! ztuKK_HRl~Z=NOp9itP(W^n0V@iJ)L-O%WxA)vHY8``?qr*-aNKeiQ5zRL5^jkHq8A zkBJXb@C485ayr!}M1h%#nULT2L1>Ud$m-4d`=g;ggBS2kw|P|xt`4RpE6T%6!J%%3 zuI~1h>&>Ib_7(Qr!h#}M&y0#EVC3V^d>hcaj6s-Z-2CKuNFoyfVMUGuhy?b7LF>Ur zbor@ce8u|}m(?8Y%DqMh{%sgK4Y|+-$c*2+80D=iV$0yLAU|4Z&CGD!#!g{&mkA}G zD$~jQ+m#n^)hhXtUnkL;kmI3N;qwtjp2KqYqdFEN-K#vF5<^`YCd=7!rBIjXEK-q3 zWHP=1vxNdHh3kSSRbdEq3U&-*!VQ0~=dD^GB& zb9z1g7S?xd?|_NL%mXRwB5m*C@;EJRPaTAe#m#8H^AjVk<5HWEf_pJVD(3Nuw~q`S zUyNUT5F}xyC#{)Y zgTKn-;T#2qGWz_@V`O6t`NLF5Ow2U& zkf@s9K_e^+S0E?0RQYEja_shA)?)xutyN=f^-G(V{CvuLu)xE@d@<|-UnKR4`38z%VUaNAQ`ZC{pN~1M% zWrF^tat5Xq0t|+yRy-ZbGKB{vY8k&pN znF$vbi6H)t+G}N$C&@2bB>6i-Iwy}b&=%$$E!2hN%Nb*6GA-~9Cp9DYB{Zkxmi`YT z(cc59k^mx_7(`Pi5xUI!!L^f~mtDIn$H%Jc7)-~*)zJ0rcs|^O2*Xa*$nh4S&yF4L z#^ef`ewK$PRKLjV3l^i6uM9vI6@5o2{!{Gd3@)ps5WCHC9{Y-iBHAvf^d+-=m!#rj zDa?x;CU==qhjcyPs7T`1`xS)fLmwo7Wp4o8Z zX>`!&fO?LMtC+!SuMx^dp>1pT((=S4GMn};)LIfk_yM#{QS5)QpLhV7KhUYMCJo%A z*Y6Y04LYSafi%iEbnsL%X!zay!RWr0n#1=|6y)Ju4xEc8yA7O*Q`X_ z1s9KRlblfJI+VFJ9lhoitNrReCm+pCc0H!^K&L`|N2JzFaYsY=kH#gt7!*gFzXO z>VJ*`t1$wvB!+ET@7Ri4iDcGb!w|PuyWgG|+-4ZpnNIwE6M@GVTOLBd9drhjKyFFw z2HHRgdbWj#?q99n!)sCyHSjHb(YAWRY$GU3j))TR7V3>8G)Rqn*=>EPm0+CxUJjbl zrVhHbp|m41u3#T37u9I-%K z)hpsS>76E19`?z0T}VMbv4?Drgs?3LLcT~Y`-7mOOx^__7*dKtM(UMW=?JTh22>tsG4_Tr$_7?Ou3y=|1ahf`iJn)N@LkB{ zxXXK^2uG*!I`ZcTFWZ`+WL3b%^+_ z#TyIh9!Tg8ISx%plOt}W>5J`AFjIYlhuGcOp?K~r7opO~D;lD?CHF_GK?|bhD|ONs zuy7lZ+fB)kJiw~`C?6A2i#?lH&hHD!R^?+_iFMuFT2?Iz8m|RT z{#1aeO6)MC6#^w9GKQPnGjPdoz6ofoC~e2{fp@=c>@=$Q;ZQsQ4f81jqum7acSj5C zQ^P`VNC>(gt`HxaVm10{o65mEO}MQ`3kivxN5*La>VG>h{_FTq<9}sH$+n>hQWRan z@%EP+Be+LGK9DG-mgASBm(R9s9LjNWRj`+qnobrV)>zKP`uX{F-LMi7`RF#61MdOO z)f(kJxGNQd`--@*543}$ZOqLnc~6gJZAa|L61+i&{#XJvJvI#?~H)#w(ma{pd4FbPHL?{q{uP6vVz#YPEu zm}8YO6q=fvKa7SkG>P%J&yUzxyz_s=2e%&Ni=IcVDkntgbj}1`tTW%}=f5uP?rY)` zaBg+S;cPgbO$hr%L~cHhT2<<`uQZ8G(AE+?p&%w!at|aJMMykPQrHh z5fN>^Hsk$A*|HOR0?2);^ot%P_y6HdY9ozmn=xoDu-h6O=ki}6j&7ZXtVIqkA>jsk zc41FA_h{f2(EO<~(kTM5$+}OkP#xS|?Q*#6QoX#qtPR%<+AEORy!`#DOviIB2^WmN zYhv;zXf;TgQQ1FSA8mF(*W?pUMPv?9^TQp}v1Fv}Ls{ zkSCDVVt}t-?D^>%)0rDP+na4izTKN;sbzt5ulq|g;?vR^Sa=N~(0@`wR^j>#BBY=N z=SF9uvVNC=hMpl}gHA3rN~}x>Nf=g}aV;6p>X*7IU`4;*?M{adCLUt%y~SF+m=6P&km*6T-gYrpSi$ zcv&TzZ!IY?E1AU5zi~&jdHUV`$?Zxp0X}CpNyjVO>1ZM3rp6UgjmAgKZ~af&VtYNt zux8)J831GBhw%{CXDMNy%YgB}0QkVhi+v2E)HmGRw6i%qD`vt3pHt&fiE;&;K4+Wt zz6?Qm_3u6aO{#kF9a6GpavRe+NEXj4%WWFZ|T>}!IF#xq4HxNYI znYz2U2)$RgDdv&oxr(=hXSbW``*31Nihs_aR?dG&t}6-A7&sJQ+0$D~`JFJ4mL)5v zW=r*G?O0&e5@q1=&5ATKq2;8L?z@)z{htAd9H5RnZ6Fd_1qECoFx;c(?6>neFfuw$ zxxejPf+I*eEO7%Uqr*yHmspIcTyTUx5=Pyr^{HsFBUze*uAET{b=B|MusuZ56|)9r zUVdXI<5jSpS64H|^H$YR2xKF!mYN&ir_J0fs}ZNEw{hR%SatqZuR7*m>e+d|zapB< zQN-(HCN#65SS$#*ox+W_UTC4~=i(L?iDP$i-bR*D*YNll>vwnqx*Z}|Ucer$bOG^n zpDONjJN(kIJgtU2=Hh@-zLSuRbYgNN`z5jvVFtBG1>5mmedceAFaJ7(|JR7Nf#3x5mjWo&5`X?F|`YAB`x5XlO_zakMnE@le(%?~4?gU)hy=gl-gs z9Xtv)dOvlaiRr);m0*uAf4>-D;wP4Q+|7WrxLU9CwR{IB=ciEphqpFgVJpujW%=>} zzuQlG8Al;aZt$6F(v9DvUH_F=Ij9amhGFCOwIz72%`D%7nVOw-LF`Js6N!+M@1$@7 zCiiOR743mcKEC?KdW0AlroT-Hm}QF_6p@puHciO`7jxBg(~$y9&7&BviR_Q?4~6IU zLF?0x8K9Uy?+I7Tf3dj`aa5!Hh=iaTfhb0+KN+A#L@}W(ZU3vz-ZA6?r_vxN@ zv@i9C%+X?I{2G5Du;AUG~WnGa^c&AaC8ieHlt+hrBS!bWa?z zlKIHT_k3&6K1)>>w~D}LHB^&aWjx`qe2dfzCb>w;8R-QA0u-5()~NdCbi28o90jlZ z03s1LS`57kSXs(84CpR*5hw#@w@XtqTsVW<9)N8uzJS0vqeT!+A?3o^!Og!*Z*o{} zwibaau(`c2B0nzA6eTrDvb5-GPjzct9(`H_J77mkDgFHHp2A|5LmNu81aKtkRE?DF zUPg>?pnasj>BMbkH?*IP9z(usN-gN-LAxmmM8F*2f%xs};wILtRxQ{H-e?;2ydveQ zM9OJI{iSL=9xoQ;@{J`ao0ZXDzh==tzu-sY@>(%%e|F$oC~~Cw&xzxdlH~Me8;dx9 z#f8a!p!F~ad#a2l^MtCaG~1HJige0<^u{9tlnZ_DXdz*tRT5*{gn+>KO5Mhy*$^33 zF>wzd7nJp3g(XVpeM{szMBESaYHHM2c{9wGsO2HzGLl<9LTP~Vi*`#q_y4p%U78wQ z3jW0Zd@$PDW!`E4ifQrs z!eP%7X(;;@Y<)OoSJ(cKjCaKngXLdM{WR( z<8WG<{QE zPbL|kH)n4g=l#Vy%+(rVm`qg$G;Dre#LgK#i zqhsC+}hc2*BcFOPZ67hm2aKdcWRzD&cjCbSl zU9JJJ95vXOTfWlZ;oT3F(iB%GSEL%w_zkr#{F1=qrZN@J{|=p!07WS-P=G$)5094oMq^GfW7ezdOuYWzEbq z`(xvUZ`6K(=|p{s(<_J&-|YYTUF;}-Unz33D!_i@&X`A|Zob>-6L%OuGrczmKzy}O zZS{FY`c{Tbt~!47)68W>0rv^bAa|Qd_D7p{!G%y6N6#f5?^f+CX;LnXzk{6LI9GUK zj$p6ZlxnL*V&aPVxzr@isCb84V7<&cnupn88yHlV>g5JiQe~IcX1_)5`~B_rr$%It0m=Ks zJPIz}Wb+Xg(=qk zVbdQ);C1c71cB?Of1#SI6M@5?!$=qvBb?RPKCJL?x!C#5hdQ6Ig>e#t=0A6uud>K} zW)fzK(fmD&4X%>3Ed0;DE{unqQj^%da%k(ePG_H65IQin1iInKEFGj+=5{KR8U*-_ zSac~~L83rodl(D6G6|UVHAkTqosG-#ir!MkKP?UthM$Ky|414@tu$Gl%#V9E>+Smp zb1XreHr|r0eJfy+H(a~V@BQ)k)UhY6idBUuJiDhGix?k+@HhyoZi?RW_Kin{tFiWI z6B8^`0~W;K8_P7f5`GakSNAt}*2TP%JF9V#Y~M%L!mA;!ASq^*e6+f`NBUg8G`q3x z*?*6@3%Sl&D#8pS!tS?t11q^BweZ?+?){tv72(L5HjLI+oi>jujBwix+(VhU< z@=VF0`#%6%|4IP%?fnG=CPmdA3jZfS;9qe|el|gXXj-yh&7=K~KgYlRqa7zCxW-kMD*o$J{8u*hzqzdcUp(5c zeIi!l1^+ea{>PU#PeEOPB|2QqE1NGCF}k|B8M~Is%gdwT;7EY@mCfz##Nu;OQc@~f z+HkEeU;4Yd$rOzYzezDNGFH3aSkG5EGvM>M1vE7`|79+eYRvx}jy2I*e3p|#UfT9P zwmyyr4Ft3_st5|uXufHGUw`}M@8(hehewwRFmcDwjDs`0tKD&bFHk6!YR2q-29UWN z0v`9Vb+RyKP3YlNcG&^Y7%E>d=rV>4?z+2Ce9u`sIxZQn-{JA|J)S~&-tQHnVPV~7 zr6%TI8JuOk96S}jSUmlu#nd%wF$%ys=Rg9V;{W@Pf<~$4Gm^jN9#r9&#EDt+TOf|#_aq;FmytD*j}_+OE(g4-O8YDpddHRZwQi5}-3 z%>VW4M|?h8E%Wb}OCPAU@=ke5=nleoJ@4NFE*b<@k?bb4lo@)$Xy`|N)&&7-f725y zil}s2JR%P=ohU8-zLXYUrxeh9X+>9WL*g7j=8XB${+r4=@85*xpX|5syx(w%(`A~D ze0bP(;tHS;Jwr1haX>l7FfPN%UZCnyW;x9Id+cz za~B$Q(xzqn#5!#9@gI+azg9?h;o7R&?FwfgbtcZObuslEd{{ry%UOZPnp{{!NC7Aq ziZyD?izimQM$#?M%B|_JqgqveDJB0EPJqO#^6vx`KtC=6G&szzuI}=g%bqTun{(H7 zJT7PD<$sg3nysQd3??yzA${dN@hC`Az{?%>etN>RnyVBZ!K6_M&u}}Z`T=H%PzST- zxk|^dB8uGH++wj9lFP-aQF*{HPYfg;ACx29?G-Bt5or9{JU-6&#Z+sv zLQgQAt(Tqi!RA~I)vc*}V{>gS=GWtP2qYxr?q5&<&?*XIV!>Jj%*NqOInv-@{x}+Y zN#Hu3H0Ybu&k@D^r%2r&^k&EgA}pw=calRVQv5Bv&7&<+UfVm`*!ZmDd8Zt7@5k}m zZcBm_2)N=M0inh;zfx&L^Fwu%uef>o9R{r$kr9Y5Q>1EDm;$%Mjz@9X#RkVPK@go2F`56Bj<}MJOYw|2Y0dL&Is`AkXrO_J=U#wNk+;< zo^w=Pa`c)Uh@2w2Rc^!?{z8ik3(Exo=%OBVnI7lj)QYvVH};9MQ)pmx?D1d{=~*;w zORh381u==|>H_zFEL0{}ykDe24of!ZF;nP#jToLsrR}@2c|uV&dla7rqGx;mj)-i0 zNPySR1^+i)m*b)xmN1yp3!@G(HAlZw!DCy;Yi|qf3d?4!tUC;I62Qo&FV9bQZqH>G zM*gx**xW8(6Qk1Q>solz{w~nW-lMiy0|&1ivL7pr7_Ldb8M9riDgnNWU>!sim$Xib#@?Qwb5 zU%2A@o1b`KZy)c%Slo|2=CE;7zjpQXj4${v=jaQE<*DCX<2Raa{a|%Cns*G13M*{V z&Y0TS(%w8seKeXYbYXn%zJioa;STh=H)7*iIKqAoOuR>MOGz+;{MVBh?6pL=q{xJX zvMbDQ3`bYi4(?`hLE&Ga`4L#4rl5}z^otYk&zEZcH~=Iassj8biC6~Y9fDlP5j3%6 zZzS&Ehbd&YjVt!PcH*nd3!?ni$9+j^)n9mIT@+*A2tCD!3i!!=hnS-F_+&6Uia>&| zVMsg(SwK^;Sp01(2pY%T<8pIJfmVKUM#ozk0Dk!lyf1?H`r5U352LNOTIYQ$zhq?2 z>v{p2CeF}uOVa$Z{P1|=U*?+V(29hJxYf!^J|6G}HQ>?F-k$XF3p1#F6F0 z3D$pPk0n#U*}R%D=(SrY%-=D5vlIhxG{)b3NpwEEbz>+cJR;pbP+NcFU5mP6ByaMiA*dZz(sz&)xNzgMXR8_4h zq9&CHZj6Uh#JMaq)m`pDU~$0W(Ohn!a1OdX!>Yrp1P0Y*5~^n1HOLe$XL@7NneC3&P>>2z$`u!1EM3Z@Tc<*rp<0xc-kO)bI2RRg? zwNlCl3GY*M#>rh%x6=l}Iba3CmZSi>vzOj}GPdV48UO9YOH>`SE94UvzKEf=JVctG z=OFQpionf1pYUDIWO}1u5F-;6AKj`68i)KpSpbBP8^$4RNn!UZq#^wKEBa9%-rm$r zqOg-t(vxpVljqU}!*3x%7o6nyZC%Lw^E&nsM?nb(3d!^8l!aqBj!x>-qsU^Gb<5W< z)hFu?H|&R^f6dyixscPo(b`PoGC`gIN2fka2g&n#a;Dq$ZcnS>L|u+|U6I?)#X9-RJ9rEGfX0Na>hT$IRXvntWBV_A}>|13SzTdBp;2Mxd zt0C50xiz36ZF2;PmWoOtgGRCk2otm%d_zjKd?KH}m8y2Ow%Pr0EV8thC3s;#L5%r0BehMuBG9q+prL4b-vlg$G^P3@n zDF-UOtoq+<+5D7|b!Hk)ao`5gr}7tqPl#kTzK}2h!Jx20=k6pubI(y5`gSLijB4tq zc(N6qQmIA)C@&N-nT^A?daDnK@+7RA-NrqZ6q73=k-=m%kheSdYpF2+S%ia#G}9n< zN#!j*n-T_jOX?{;x?TlJu%4vjJasO*O_y4l@~~W=fqb@hvm488dV6elVh8@y_tPb4 z>MuX4k-vkdM_RPuoqQJ-9S`;TF>3#OCAx*oQ&AZy6%~0xP0pA45frzPag)88aA60yRGQR=9xQ!VD00QyG6cdEB@u5SUFVGT78QHl8LVn@#)I z$&_MWyqZ-Ry`Q=5ob8kDbehy`?@BaCtp##y=Bq@|U9L_oXk0t7LCU{oC$c zI*hce(#~&4m|SoVTKz|KiVbgT%oaoluD)r^V`RVO=6yM|hrF}E8BSq0h;3jTPG?tD z>MUOX0yB{0V?2^Z1-(5*rKngm`M2`#+$8J`WxK$sCQ1I^hV=~?O}`UzFNy(&Ttqdj zSKF$PWn(a24b_%&Og;Gy&4RW|K-T1NIa~2T5G#>xdL0Y}2`&7>d|ThBlz=iVFK-v2 zZw}lrkTK{v9Sm__lf#$7h|LVAvV}>9*07kRf7^ofB2iazS0+{wxJAO{9O{d`4240byfx6*H{ENMe6!hv0F3Byu0{YL0s>wYg=L%Vkp?WXCNJD*wYL<@BmnuximuXF(<%KOfp(7 z7FDbw<+Ee-ONpB;j-F!ojGlNu(p#0N=NdO`hyQuE7l;?ZKN6i}JW1>~!E&kb>B}r3 zB_I39Qe`o3;62A_A1h}od-Si2w>jVYJ{|BFp#1zo&sFI>)Ii*XoycEE-!ooORpCHH z6jVzXSrCXzYWiqHjD`~vokNErU$=L;)m7bxI&vcI4^!np`oWi8DlE8B1Kxx_h8( z4fR#9d8dBZSa#zBnRcTSPno{THiJ@N?1(xSoUu+Fu;`3uG(XIR?IWjiIs2++8qku1 zc_WupG-`a=6Lxp@3>D3FXPhxCmuJDv-*3>v*P}_u{E|V# z#g^1QT|KjInb zJ1!klhK9FDYg>M^4S6$jd%K`i6HfZ46mB8HFz|woJUQtFQ=DR?H|A$mI&w*dwbP{w zz6rH5i>-uj^^z+~%4C;<>8(}hs@=;Rj=)gvMG|&S(tM*LLE$EobcNUf7WBzu!kTzL z_mbVXqO?}g#|Mejo>ooL{CCkuy9gi8sZ3=tzsJ9elFEYAzP|LJVfR|3V8ooz`Hhol z$OtJoU-lh}XKps|NFa6re%bl17LIsp+?zPv=7Ss~{X*1(4!5@*m)fZ$SCsIiH*78p z#U&rxG20)?10iXP?d(NzETIdD(|$#WL&s^>VbSP!1e_hX#&+#gN&K?svBNFS^D<96874p5T zmKtjQTu<4^WoD7XVrP!~=&->_1+;qeEboxBa=d#huubfAGACUw&4`Gc>E-3+u(}F? z!{&j-Gr5Ibi(@Gv(pu`uo|+hg-g~=ne3{(U>g~oo)2Sa*e&i#22c(XHl-$V`_n1SdjYVX2tt&;mqXW9%s-f zTLv_x@{f30Wc2}P7(TCKN5d|huJ`?x^Sniadg}i52Z|k{hx$@wxV@(dLHNjQ5&*RGa%lR+-x@4{Mdbx+FOd?gU=AQkXE7aP8`!>-k zLARsXVKhv9(I_NqsSGLFZ`yBi9apTgd0Gkcf;{6?$I9@La&l>88O`wH#3W9Bi`8F4 zhZa^_cqK{2Otfdesdh6#t1rhFX)TN+e7QTmL6(2KSC!a_BUpHGI)-$=!}r4 zw$c?`ajtj0a%nIx29(vGNyjMI{mk!^ygLGgPA1zUoCu=|yxA@`Ow-6SO>*X&9C=LI zUs(mjx-Ml6b4vy1rES z?+$3rzUOn^cT=^#2%2AJZI?~O4~DO%=`&MzKI@y`G8-s_V1UqNSWNt^G@DfltVa?oO_6En~nms?RxL(~jUaw1B z`!MwzUwpke_Ixaww4P(c`*CoE%l0NFBdJwNU-7eMUUh0?sz-m2-GT z=28t0wZWhNnAFgGVI$g@n?i88BP)tEU!MD+F9A;4EsB}CqmE#i2)Clf{rqn0aBDCr zF4m8~VFhCS2KIQ6yLR@YvWRgW-Kk0~2GMj_h0R&JKWr&kg&P4h53M}%^VPnFv`IC3 zK!d9ffBHu+$SaQ)3Iy-xc)~RQlxCaEmP&ySeXH*Hl#M!TzNrxDAIx` zImSz#|C2{KW)c3k1hz6~JjEllC5I@N@lk$HTA^t|bt%Dzs)QH*A#FW`x6wldhDF|6 zi`5x#lqua2^DiTiYddt69WOZR1EWRUT)3RU@++W&Ll0yXGYc?Ne=Tk9HX>m^;mFy% zrF8B{Bnrz#+$qp7W8jCsZ+4GR>9yE%{+pj0^IPer%$jy-h~Xv*oQ&utpR=Z% z3<4eK$m1hUsdkBWbX_N668?xB>YXoy9GK61jEU~Kd#!9YiLI7dekB@F*&o2C1p9mM zGd4KzgK?(%<+u!B=Gt;JYPcd;`tjPL=J7c_0`4!56E;V+h`f3C?-r|APG(lrY;7Z* zAxCb5C>XBx#c$gS!g0Sx6MR~gmWV23NeN;gmb23VbBS_|;GJDlqhn=GSDvI>(LabG zLw9J2y95#!{?5s(+p~@H-(VmJgUcA7&3b1pF9{KQ#afH{ierC!n;f@fP2QcdFk1sU z=6Z6JPkkU|YeyG}$@|#@hshy0I)Es0oT4Zt42_;-a~E`ccN?DjvK;h?1WiNcVR<;B zw70jbp#PaZ$KBDaHf{Gd`GjLb*U~}XrO;O9dX!SbVsTA77mWh15WVSne~rR=1bgDm z|JMT?&pJ5b+sDe*9q@j6ekCx(8>(_HSp1&WLWqqD&eO7Mx!a`%U5?X){H^{XPERrw zGuLMO6NDb^4;PmY4|AI4I-pv9O*1zej{76DWt9$6i8_*ZH>Q(L!J@T{6gdTI{BAX^vThj(}(68wb`%Gl{uUrgPZdVlFN-V_qkRgVjEsT&Mr%Z zq&dVO4K(N9i2)Jvo_7)CesowAXaAn`3j`9E1C#^f1^1TehHNGbg;%38HE!AgQiy2!^tt z0y&^QDLFVY1S8+p_@;I*uTIp z62EXv1xiJU+pw_ANUcrmn?pyuPBVc=daP;|Ws9%8oQvn%j>Ydy&I2e=hXT*H-Xla+ z@`fBm=p*eOSu)EPe4>eve$0bXm&Yea;J--hoa7)|a!+;FYZoSsD{Xk0!>|gC=IzX# zA0(}?A^IT=HBG=9c(`}Er&jwaBwJ(ay{h$EJH7*rZ-!Y+ktzH6qM-$vWzX-MPgRRl z>ug(tgY4d@Ju3<9@V*QVO7T{9I66&P9`rgbcqa}|6i2i5nj$$8e+KMYg8Rus3hxHr z9&++N9Mb&axpGloz+x0uth$wcn`)OE^-HBC*u>URBkdmx;_C{E4RYnZagkjfrP^jG`B}-H?Y7Nq6%szl24y^;EbKlEnTm$?JqYs*5vK+Mlp8C0;xkW z3Qgx)($m68YkyGaO>BISTZ?6Kq%4n!z{1m1seT!FQ~|ts`kX2443W zt-XRU8AYF5c8RJ?G-Y2aa#Kt>)jrsaa!%j*o*=>EP zw{OG`ex}NFeW0xL{&+hDb3sKnuEUk4WACB$b9d0Xh#2IS$;4#^j_d3`Nxg%!Di=Ab zy?ofbtAYy!E>-l7UO4MvvFEB1t)ulZNi81MYs&W46i*suXI%)pP@bBKxs7ZetY^Xg zpMSztH}>m`iEJ`VaZaOuDRhPGD+djWNGM=kOTBZp6p99R!3l@dR^1NFw~*#ln+4qi zHRKVvrvoNm8osW*=hJWs2C*yQ1u{=D&SeBCo1JgNqCA@57q60Kl*)A_{_xW;+g5@K zCaQsELYwkz=*J0arE2TZ3X2)-`6eS8X%o1!faC!^wq6i{%aSDzz7PfmhDXNquB zUlZ_p%(_@ypr?`u+CGAi26$}K4=pZxBoTKm;b{kdekR#+E|n3jmCLXD1tOTP=Y{Aq z=v$hbqCv_Y%kn+ifenJw+0 z)StM2ekp$Y>l*jkq|>ZL3qzaa^d*I}pmYZ;kkO>%%_Y`#7#woV4QB)Qq_CwD=n51# zon~8sL$|2<%^h%KF0uFx-qrhg%LE8Cs~@xhG!oC%u(t?OP!8 z<4!`@tf4Te*b=i==ogHv=4DIqOb(GicPtlABi|W#7X3ETb^bcSX^}$I%cI-L{WHmX z&wK%v2U|B<-rx0`BsR|O+Ql--buI$#4cLiosbri5L^p~B5*|BiYa@-k4-;po6nkgA zsTWDv@z8bo+;X~YgV=nx>-P(U-ty2dvDXe#i{+L2fp*nK2i^g_F4R@sqE5j?+N|$3 zMV~TOc{RcU!(OrtdLu84L)~u&1@WID)9QPROA^ZdW8ig<@Ij5MPtQ0OI`KZ`rTbDF zpNSEkgQ?>(Zd_CPJy@%2z}%8rt-*n+VyMme8B~u<{I=-{5v`$;x2h^{Y=X=G7_6pd zBbCYcWU^2;Ntz$<)C_Fo$;EK8gx`-f)X zFJ**u_doCG*xgBWMY4@fdU&NuFN&4Jb2{~R*IW2QO&6gnr(WR)me8 z4)Xmqs^Lf+s&y4C&F>!>@$ou> z$Y_nq4c>D_KK(v3C-^hSIi7EER(+r*AsLBVw@&rFlxHZ{I(@#{pqKty34yUS{_=Uc z6nVbMl_pAd0K!lD+s~f}TWh^x;YB*F1P^~WCI=FJ)<^X3b-LyXMXw~1n2~m59VF7P zT-Aea9y@HO68-XH8|4zy9JlPR*?tmYE3E4p|E4kuZSxm=g}Wu7_tx$Quz)~c{Vesd z677A5AE*oTgg>KmPo;i!$RhiFIvRpLY*snMIr7hk=o3ia>>GV zgX<#T{nGo&stLCkqBG}fEhN2}>(!cEY*Tox8iYs9E$wbw>z;dMvj87}>&oLwnEB(+ zkBRTHJ;5Y5JDJ|Krf1R1Yz6H2O3SThL6@h~+O?M0HRhmyKz^d`gX7VCc+qjD_p>W@ z)Ma8a`W|&<>@5&NVAQ+-jZX2G2Pb{WICP`bq%|OG$@ISFP%hI>e>q+n`mwD2H;JOD zGnLhboZ1|?b?)Q;oNWJazNoZpE|YJ5Exp0vi^yX#^j)CFeCB;gw$Jlp*r+giq^okP zHcwc$&sfkr&cH5cy^{l#a{*GlB6&*;12}lOY~eerbu1ww`jM z-%!zeS}f<(Bj5l2#&4vZBNReg!eJz@M%(eUwmY61@SxG?bVNz}xO|~WrI~$F$p!f% zzD1OD^Jqih52tF*294}E;&Rbg)o<9qFKHl29khl8w(Rtm2wsax=_c|Q99l#_t%6a|9qH>ywbsvHf*%2$0g(p*7ccWO>s!bL1 zZcRH8IBCz>01=fpc!=rwEP>}PPT{5H@tcnoiy?a2bZX-zEAD} z!wLBy(nyoEo1klODN@dfGH$-~fJ;&Px{Qsi3YX=y@QeHP#3U!_Sj|QU?Jbe5+qt2L~|M4SHqe z5TA`S{aP=9xJODqm!bTzNF$#~I)ht!;F~I5315bLEe-vOvR0Era&6_z!lZ1i?6}N@ zppHj2EUV2m)?GZMwU_wHKaqPRL`b4p5ECK;lxt`Qq18C=2KgwX3jqUqn)J??&%oUa z4;Ab|WZXPF$ z5qOqKW(tJIpfpuxM9>8B)&jL4NLYK{Z=NllPK>Cict4FD zSaK6@th#YbowhPW6}IsFI0E&Pr|~A3(-Z6*IkB&g?=G18mkUbOnAH|2QH`=n<-B(; zMoiFLXUgPiy|1=Zl?oiN=gV!OP6E*k#s@n4$3y08ta>#mmbP1o5j09LzYD%Wg!x_L zQ^>B=hlPavvs^c1gTjA}_*iEqlam=jD~|5dG26VqmQH!}^X&!F*?G^iXnFnR)fL%n zE{oYjmpOWOD0*(D_q{rtRncX|X?$j>5RhH{U$nhrcwSu>E!?P4(>Q5kG*)BVw$<3S z8#QWd+qTulwr$(|b{@Ps&-wnHpLecY_r3PoYpprwSYwVsiE|NuZ?#IHT(0tE1RuOu zzWJkImCBF|ih5}v&9|fT&)?ZNIM;jQuym>D?%nWje0_aY75b!mFZtlozIPBHa?!_u z-bRq9apCV%a;kpkP$XB5yjkmqHuJXm0ceVr%-i4f>6~*1a5v`%F|d*4=B*wwcP8eDD-q>CFS`<4Rc@`};FR;#}YUNM??q-Ce;G2o18mBS~@V)Aq0@NW^X3qH!|O6aX$ zad`eM$H=90awN>7X$PDrJ-a6nojd5ui3kBnm^M!ul-t{moj<-LJwgyUjX&L(PezI_ zc&w{o#ZsLl=*xn_BFA8&+9kKJq-!ItJhOyjdxO*T2-tH)xAAg%P;h9)OclW5X7lIk z84r4YaxDs?zpp;6K^)gu`Aq$2YTXh8N6_>&`pLi51-W1UMI~x;u&2{EV1E%h`c7P2 z-1VUUBOe>4!8&T2Awb944n-ar_rFBnMrzvv+Mue~Is#HoomKn&+27DV0T2+Qy@hGB zm|j+RtM_se6T7X|^0kpO&JgEsLUn+63|i(@0S80s*ji`fr6Y5A6E7AkCKQ@&_c;QQ2J2j{^* zZW-Y2Plbx*R7|e6e&Dlt&+1Bl>O+IHhzm<^{s;|zN zkt#Ny1gyy1(t6w+(=f73AjnI#>bI^udjN@h7F+(LxC!HoCXJwk+hqu;*&vS;3-DH2tGK zVHHyG;~c2?VPqH!oV7p|Dg;1i@+`ej`JBH(R=FuSa1}Eqni#g^2;5DvDj^E zF6P@cM4n)6<)l5cwe#%5NL%@6%JzT%8sItBaPT8)7nfGDg-k2|hp+qJneU&USi#;1 z+C40$H2*yZ|M1C~6rd_UWPT#H$oYE}{;LV#e_@ON_h0MHfEXAWo{On73tbLyeExq% z1f=*K>%593*M{8Sj;SkRfKCn^@sLL{O17AT z7}FU0rG}?XvWay#s4)u?W*N_0zAfbp%44XxFTL9^%2^tXwl7J2`^6;tu6w9O+q2(~ zaIL-SvDC#ul*8pVVW1mlg7)T&*$|x*Mj%u38tzyI4i6-WF79RfL38cw zcj2|?gl(X06lw*Ig>9E`dpf%lmZ9LYVBEReTn}w0Y&>s$$eMs&bPG0T9e961f4OJ6 za3XAG(nSVAwif8{kJ*5JovaqR)kXiVIOND_oZiwU_A$16?kw^@&q+rsAKq@Y&n-+N zmdeQsJ-abUbkDj3(}0%vG&P)@6a`4M+@szkUv(H1h|_!rhdA&Q^-(yzXT-mYN+C!|}_m*&2nWO`5D{W|P;e}kz zp@VMq+}~SEkNq#F@UNA8Lh@EJq#GMuHl?I$B)khFfK(b{Wxt?}9&J22lCNFpT=7o9 zvZWtS>M+6X8}AIl+Mtvsl8$fT^P8XF&RY8D($J#uq!%BI5~@?B|5zAWv)T2Y95^mx zq#f%`07Wcmy2?lUWt>E%3qb+lv8d&C*<(4l0{hI1!iVU2ppYV zTMF&lAFX68Pw!pWE)zI>yeoeZ@Gh#2%G4q`L?L|Feb5Oj?VW`#go5Dks$sx+2bvsS znrSx+y4Tp_QC;E~zho(=WZ5>0(R-^KLE$c{CoEh)GmjuvmYR$RFcDz!Xe1YC4U28hyih@7J^;eFrj{q_#q5B?o ze2W##n?tHhAJ-uS8dliW?j|RqFIhq_l){qtTBSdRvbwsLMIJ6h%k!(HAUiA+3BebBw`Zpl>P^+OHkRY4{ECWkhF2mFzfDPg_NZjU9`W_c1h5#5E{JlKC(Bq z6Kid{QLbuJU63zJuaeGXEK-6GyOiv_&~!>>RQI8Elfz{^f^>;7v(d4(ho3U z+x(P+3xzQwKOo7EpHah{OyaI0C(-iqp^)!|# zUgz|X7&T3Vw@kyRIM{+@7MY_W^I&DrksQ1Fuo&+;r`S=gQ zL4$D+Q-@jhgW-rib@S6I#S)q<=ka&sj~GOUvJR_FqSpyHDXlm>$#cPYF_)baL}BPK z-x$Al|7{6gtS%Hyljw{TzybzbRI@AqdtVE$(Jh`TkW#r z@F}&yh%w_8Y!x5N!nQMD-Rx%@t+aCML4*CielqzwUK)tG^aHl)>&58_w*c8;2h5yO z$x1y#ePu_rckepKEiL+J`GY~Se7CNme5VZsLBe8lQqashe3oZ%Zb#)1Hsv|w`@L?k zBNNS#kLN~fEN&Cosf^DD)uyeE!4Hui?P!@-wN1|*XzHJ8%ultKcHZG@t1F%g2(|{3 zY&Z5OQ7+y?hg>pCMZ?mRC~gUsVh|l%Y$#_5)49huK|YZqF;`b|3%*HP?n%G3s0vgnbcQSH-ZYB|sVV+Q9Z4c)P1CXT zV03%RLX~dwS|vHh&7J#Nts$}N6?Ch`{$hTvyN>O%kaS89WnRw_1j~M*5G;6+o)8yIich6m%oDPk&g-Sz<@fVHg2y_(%PNJ+#Bw%*5AU<##JSE%P zk_a|O(d{u?l?u{Yvrih9qWIL8ZYXhj9F~?{{TyXvq}myiAD8?kerW0u!v2HqzoR%4qjtC=eqy@xBE+qs7-5 zMMR@*K!aNeNPP1D>H?#!WYq(k%*2g><9=0of~=jP$AL+qa?5YhZF{e)hCD>gE-J_dfnUO$JFaX2hRhLBVhW!Kt@~ zYNHvfCKXPKv(34newpJw#`ks!U;gmRm8)Up^bk(6kWjH?ZTnHm9(HbMjh{90BmV^d zh4)cXaY1GW>~wQU+sRYyT^yb4QE}J}o|VPQ9C8Rn;JY4&^Am085Qbcs*ywJ=h{Sm3 zkyvsSE|ZoQox=n>2~c!{6rL`eZ>QSkU(`CXq2gUa&SH2Z+g(2&sAFxq#_pmXIa*c` z!CGI~j*=LB1GMCrlfq~MS2D(m<>E1EC{fNYA|ZUT<8KC2uGZQxY*Htw=4gcndUm1p zcX3w0uVF^rxL;a6>zU<9k5U|Hjl#m^JAc@4`7JmVPV%WPU4_Pv=7h0Fw^Ne1%hv@5 zo2xyb|KX`7Zr1=R9W2Q6dWWcU0PovqCFHZuakasCKS_J~lHPX`G__K+++Ni2H6+mq*ec zp+1{skM5RV{z!zbtYUeG>ZwCK=*_+Zg*IP878m+dr^R{a384Ywf)+U{A=}1`zRs%e z>Log4)thbt-&4ba4}XH$z^sSZEr+t&Xc~%5S0{u{{L^xRmUz3U8m5`982gksL&1-kQJ1lPlOS5R zZfaZvy?={kY6LY{2{j98>ncW3d)$He-g31pP5`HjtHO^Uk;kn{3Z8sTRi%%v9UzM$ zj2P0{NXxa7(i5JmbjOMI=a;__@6SEG(_i0IWTWfXkYH+9@^XZ{HlL6dDI+Yggn+gJ z?|Is98YQ86*Af3YctgIW;~gjx_-9aX5~iV&U#4>;MUE(Z$N~=TzjPNm{b+iA*wqw3v!|-RsZszELANb|Kzpbi9X{rhkn(_`PKTLatcN7oyp zcr1#Xq>{wr2E4^EijFoUEI}{TIKuPGo`TE#wL~8{vbA9wI7m$wFLz;K6`%oEud@pK z(bJNgaxsGwN(q&s-!rTTd($wF^88A{dh1XyJFJ-beLj+cp0;?nGzfSDC}nsdxFpV* z&}kQVD!6*;xRhv=^N9r;!fcd&N1T`GLqQ|gS|W1idODls7WDf9YdW%Ogj59W>b$0! z$0oA%xNQ}}4@(74n-U`FIjAj-Li7^$x5bF z2Cx0s>tyeKnkhl-P>T6@ePWyA_A1DfIuJ!VwcdG-7haK6B;<6TJ;YJUa}yhU z=#a3OJimpnZO2LDJeHevqJbH36!i7#tK4TPM#WU))nA+mMd5kF;eIP%s)W`ysADGW z^J4%F9;7p`2FYbbnPg1Z8u}@w2qWI>MateTj9-X811+=4=MeNR2o@HFFk+^L3Xe8q z>srVE9A8!+b3bE4kUJBBd14ba?n5NU2(Qkp;BwGaMOH%(%+X2c12N(R3%r~QGlfHV zmFwqE`V2f(n~)*sfpq@l#G!&4p9f$0dDTnxv1McU9AGx4WN@_`Y=lq-@D|~Ieg`>{ zX2R0y8Q6OVbWmART=;VMZD1r1xHNrRj^YzuFpNCtg9_V2K+VNe zXnp7YJ87p<%)&3C2LfRZ?~qqaZydimhvA5nrwdb>F5~5Z=&&lv1Dm3U|BV#Y^YsO9 zf_>_MxFJB;UzVtD=j&OI(JuICy^#5$Z`IH5d>G{Rlzbg8zo9r}y=m#D1}$6ezQ6E$ z!)ZJJtT$1h*{AVi7|}Trvu<=#t%Y}RQN(eA`#br4gDocb@W{!7JzqDS78-1_zfdXF zd~!INi_9RGlGbRl584??76+6EN#LE}O{WSFYmLW!I5?xzZL1YWf@3LiP5|}3i0bO< zspT4z$s7nrb(i?3YCk1PZC*g22mDv#TZ?SULE_Ph2CJ$SlFV?Rc#^MFxLA zzcJu;R}AtaR>XyP9O)l@jQ4kUb3^qGhe~Qd+mIqa4FG_2VRpx(jQh)7d1IA=waIED z=^|A?dYkSl>rbSB=Y|)6)Q;%U!p+5brV^w0@Is63rgnN~LV}FwpJI{w)sY;Cpju?= z+=c)S?x%YVSVdmgh0prFQk6`3_I zmxlczPnnsSS3u953}8=e{8Yc$KRe5;h#ui|o3_kgzbCU$Wgs5h5=|_bRcEm{(RE5J zcfQg8==RAU{Qdihx8Bg#rWYkqlZdOgc2B^q2KfQ13b;2~vcKGs#9+6iYy~9M7_2*Z z$Tj9Jh=YtLd-b^T02|^-?`KGGLN_zxjU;)Y-CBdvWBp7ZddqF+CY^PyqBXOJ*WxcKjjVZrMV2yeSt>4{-GvY<`A z7Fh%2I+nR%G^|4v-Vd0d&bB}r>xWTYDpGY28-+4+HdUwRP-b#hnO|2Z=)GU-=3qV? zeXBJck3Ar%a9VAO%{6WKg^6hyoHacbWV)f$x_%?XoFd$2crWCft5|E@zclkdDWp{3 zKD^)1&XpXh0HXzs>->v(Dwh+eOf%Db%O_NzR zl0eYUdAZ5~7P#U|)N;wCkxXYwO>;dcRJixG1Rn>~@L>y=YR!}ZIvG1^pZ0glr8{mn zBM{u~#@chRbH4@(Q4wn-A90&m0xBgM#)H=5XY%?LIcAs`G*g)znVjzBUOKE4|AW>v83^@utKiR;dz zGyJP>VIheio4{nFE9g!6NX}e>QW7w-fZj-Q*>BhLG#X7+H23xOQM60~#JtC)<-IoQ zkP9hg?I$^O&$48diK{MJ->_(_K7O4l)9=Vd_=lC0gR0{ z1WY_wMbj#?X!1T6%P-&HS0OuoMzC=U`21oMbgvZe(D~|&`zYX~6A}>E;Yf7JN5Jz8 zir>l=k_hw^%weTtWS6j>SUi8f0Glm?Kh;tptARc?H{Q-5KMiA6A%cKAMf#axRTAX6opvf z0lxsmI${O;u2%DlNiZ0DfB*iy-|+&buV=w;!qL`73YX~w*g8%DYv@7e0-ntRlfgJc z;QFZrR7_NKJTX4+6|?pA)a#WH3b>{$QP4Af@$k(zRIfLce1^Qr-=>J01fmEl#zGA@ zggISW5c0G!Uq`9Fs=U`Y}MbT-~@@>|KR<#%~(a zk}yBa_2ZV#KK~lj3wAbN0nV?z^TCCQi#vXX)GuH)~rvB$9ir_-p0A&7|o& z@1+(EqP-$x-O_d)L_bhBSQY7(s}1q@6#k06IsMUnGc!sqlxDCK1s|HjAbYH>A>C;B z-B()O>UnVm{h#XXa2ES25yG5~HvnOb0C-#_T_>K7>#pl0Hi&zOgHx-TNh?e&tRciH zc9VyzRf;bn(#cGrfSsN3T8FpT*V&i)cMX8HY)lUqm(sj-iAq~aRh7i6hkCgd=fOzi z*n$Th{J@wFf9%&#MlnRtKlbZ^G!H>;@hfW+h2b1iO^8@do&KtZl<}M&)_vu3N{cyL zH}p#la%Ja2wp%m^gH>;N&BGb@5$CcGgfwQbbhw_)0g8jgL^y=>GWh4ZBbv}J?!we3 zn_XCO`oDFR%nyi6KToAWuq?t{UTsjcxsHN^S2g21m)-`QN*hV<;nEmcmS13 zSiz;4(jwn+Kn9$6SYAqlRJ8Mm|FeJOo#kOaBRM{H0)g!V$E~J1fNK z9D3ToS^JNQl#bb{{scnu%sfW|&MPpGRuA8kn#-&AX{Ty!g%dLOUr$+^6Ok2N<@Hu~ z3_h319o#j6kJUxz8*`Ja`xb6J0&u(Jj zf#fGYUz6fbbzh_Q%ntt08#Eq{^kN}sCoAWSc1&H)$~xz7#V~6s8G9_NPL9cMh171h zAse^KTeE4PDMsPp7ONTJ%DAE$7;7j>h03k$`8dy-nBC!CSm>oXk?XAReobJMn!$F z)8}z_aB@-xr6EWL(vp%%q9{Bj^EnwJ5G-a(tWX?!wfXPHQG^8RnT0;Iw9(DAcL71m%#89fg4)7vw5X8UM_ugn^{ zs@yI1WNo$CsVg#bQ6ezGo2%m=zK2o=OX$QvTdbX(_UX1`Ml+{SyE$8;CQefvM%;(? zen1NG{`PguRiRN($U!e-{+(LgDNR!IvC&CA8mrx}Uzrv-Sr+*-vR}d#DGkxM13@sM zoFHjxaijaTjpvQgJZCT1HdX9TXWbhv5SfiYFqlccHCLS9!LarHVim)_fj(U-fDegK zeErtDUcfnE3Z8W(+ZN!C^H!h(o87V3v9Q)Jy_I`^aPH%H?#C0q3@b);O$WT@ z@xKy7IqcHDuf>vV=(nMVm_3f$ES?&sy^^2h^c!tF;eKFv7XE5B2hSU`@_1_H%}p{O zP$gj@i^11K60-EoyTC@e%^UyU5xT$yeC_%P@Ge8j@&(E&>9@9au@y*=`$}QlZ0aKy zz?5+vH!F8@bFo+}%L=$5_0r+7I5GrGpbqYu z=T!jrLqaPWtKg6jLV@ID@;pBWaCy8r$Pc-H<`X>EBr+7Yrj`b57)#dO#kbqzBhe5H zb*I;Rm6%LXFixo6TSF92ES_yuhy{8UPtF|_|9sCPnS5# zee?xE*5V-C{P;l*Zy2!MHN$d#0kuuC@A&4c8=G7C zC0f>(yxgFg^o}m8I;T-RH?&GSGh5#d6;^iGt_kn^{k(2QlxB0$M^Tw=h7v(ad@U8e z)kY7OW0u0r;2|uh9;H}KjJY`#KpHu7@H{@2=Y!RrRolxCK7I!<+&YWZJS1d8Lqj>hbE9uy;HupU?;|(u z4KxOWafB>epyP|)4zB&i9W*1gpVk#75)#14d+|p~kR+l2@^^H}N0+4Fg`OqE%21%{ zs>=nabiNNa`(|g%r=9$e(>8O_fY({~Hz}QU9TaSA$!KD!ELy#uPgt`@-x;B)I{=T5 z==Ssz}vGeejpbhGK z!To`bJ>v2s6%J5YTDbccEnzBw#``Hx=0q)KPtJ@MXO=payk)MAa0|V~lXckXZY`Eh zWFf|CX{;MU?+BJCn(6Ekr*Vzd%#~Y^k*GoEi&TL?r3^`%@u>ZB9xt^sAT3^#<%NJkZ9EH zw~QSa=oAzvf!J)|Bxwi&=yWs>9?6q0_xWiuvD|kvPPC+Dvc&9ZntY*R(pyW(M~cJn z16H@h*nd6ZABlehD=0!De&5D4VAjVM!%)Kd^73dE92!D|Yn2`a;&TW=QN9HrHKh0~ zS&cU14LO}~OlRQf$;HX8{{H^5fL9yzco&IO3Z4LeGE(k1)dImdffmsCkrQ@nuW;G! zeovPQSZ6L}F_ehUlxs^1hhb%=q+n&E5vVg+$opODAUkSB6LK9 z<7~NGnzwwWGiizh@azyh02>JG}&$p96F6xjptE(N{!cixz zbE+pGr>?Ggh*e)%mkG?hteP6ea5{H75)!g~*yiv3$$XQkJ=v>uVO+VTZ5H263Z;^a z%-=sI0C9V`Fw}}!x~DjN7In4HJ2;6zo4jdApz*U$W3~oGlTZaFrB$QVoyXSJmH@Cj z>DGMOkfM=Ho=7%hPwjy}gc8$Ho+ij?|FtccL4sn+R(6FANx)B>K`RLM=gkpNQBlc8 z_3kcLs8_eyadxnq-l>>iF?dw$E&)OjZdM z*YgbDpBY|Rms;R}j9W?;XHo=bZ$mesdSl*Zv?x$_&K+e7eGHbSg$E9kNx@4T@cm36 zmP!&qNL#;t0(?y|-t{#m@dLh93gcsms)P7@&;3mu%IJFCa=-)$DS)^B`$;_xWZ1)#JGR>IL$2vU-$LT%>Cb zu(h+bw#FN7Lg)lAKzWQ`K?FJ`q<=*`Qzjs#F}t~sord-{<>wL9pJMviSHOfE6ZG$r z^^e>>`OCZXU7#02Hh&})@Zpf0$~J;Wjqv``>x@6ZQlk1v^3Kv{JaUcXx%Vfx@m4`3 zgIA}!+SM%qs%q#!(hcAM!C`C7PC!DVKqx=7zVE%d90BfJef#99210eKw1(>Ri14=-^ok?_X z8ERy*M|X_z<_@1VBzO2Beo_A|o@i@-&w<3W08(tFAecnAz&e zn>wbttNuIb0)vpatJ$Y^QX(S3+SVu`Os?BF7F?>n z_uSMr#r_^p`Pak$b({gO)*1{n1kkXcoprIS7=|+)Sg%6hnfP^dWR9BoLE2zWF(#iU z;zut-O9s9e`&@i0ClZXVdrfU+rL2#Yss(M$A|FGUo^rk%6=Th#uzf>ns%GwuHcpS6 z@}FDG5+2xMZJbL63jc99{Jo$G*1_=_HWbHot*oS-6?1q3g{B+?2ZjO32xrA*FV!79 zhd)XJzO@^q0uQ%<_;LS#5Brb9>+jg{_lGr00=%rNW&1jV(tmi;zyIqEP+F7#0HsBD z(4xgNm-%~p*WWH;p_1j6^3nHy5AJ`z`_CW+1{IiZ562P|+vs;UDOz(l`@A)|lSj8O4b$N2y9<(nl;70T&k+eG7wb)vCn_kKX|+6&8iqgPrU?9cA>%`+d0{ zQ*EBi1AU_T*)7Y|HL#4=Ryto_;d+(E?(gKURA$jlCW91-7HiE`Uk+ElRaN~J{{NiC zKOW$(IhghXHpcXpfI_?p%Ok5?*Ph`P#+L1Gvg2gCgt8Rr%nF^*!mwm2)GgE~|611R zqEPqc`t}<0&%E9aU{eBUlurS2@{@ZQujMtM=dJ@WCVrH&*+NUgBO_8VgTHD#QrW)n zW#a?wKu%G)xkR;=2BdQsGi~%Y8pG{kqWkgC@nV*qVGC`B8&&<=O`ll{O?4I)oqEI! z;{I=Mt$`C<;B6Td9~U6RCtsQI)LLdxb`Cu$lvsPm^bjBKJYD&HV{Qj0Ign}k^4BhqoUyXDuMQ7sb zOcw`!Es!cL6;v?P%k|0#S6kFn9ijY{p8Ut+0m1*{gA6dFI9Oi9KB@l9lp2i{>W|Q+ z21>~qPuP+ZjXjy!cj=9_g1ON3%H=z9?(Q79xklCswp4Wk6?j%O(!inqH9?q{7k^eV zV{1zvryY&eMxZ*pzTVVGrjdia!re1-6chT=VE+bYw7j4qkgzP3jE(rmgo{O7Tnlwt zakg)(6#DphWsG)&bR1fo`%=io#U<&3+y{f*t%%f8s{8xLC{$r0Gch3{VogIWR#s)j znyP>Rc2-taxnnPqG`nl^Zfz+%Cnx6M(9q47i~hk$-ytf>Jp$O%y}{AZcykL2g?KV7 z(X^x_u@_IzqSdV}6h>ufX=z(q`>A!1^|pe7Ko}TUGIok&Y5}1_uCe?8$Z#955R_qz zqRr;e+|;BvIM|6q<;jp)1HPCtyhQ+)Y#je%l7N25$1D)Tx_5YbO{MXJ~ zN_~6d?4!+{MWd$;0{OFP*=B;>Sv8^2jMrZ6&AhEc6!Rz^XLQ?!TNAZDW-(ZaVkEPv z%Gc(prDPfY;k?OJN8b@z_fES9dgr4ANzUXwY&4;G5$yrr@Xd4Tl%5YdoKY z$n|v;=1nW+nDzVcn)3DBQe6$6t+&PKuvwe~E!gQANBNqp@uOzS7BiBX8yaLn0?(=( zbLFijcPuEOdZS81sZu%Jq^{vGBZ21R@jcmFicXcucZcC&yqcJ2SP%(9yk zl!IkIEc29@v$A<6CJSjutATUVoI9PzgZ9Oq1KrimK23Y#6PDZ61U2wldPT{be+Z|4 z9L*U*$Oy7cLg_12G-WpFGNw}$elVA?CcWj4r0WV%<2`R@t$DvFx&Ev1lw^pge7fv> zageaT;6C6cG%*lswig?pM&ityjfdp6`GYFOSZ0<@=P^u^VRy7$h2xl?{{%b7Zyy5o zC6A2zMdBmnj~|R?Sqt&I+^UpqFV)V8V&*ClqkLxe3|`cRV|9{;Fd-AFluMS&O}^RT z9&d&ka%SEcfJii@t({$N! zKI5#myS+UbMKriSwNHOF^171o{himZr}p$aFv(XvCJ(k3Fx2&wQ6C#VK7!nwoC(a= zTXKtaPds977Q-)`&r>Q%jBeD&^UdLa@!e45@D7$uDnImj5Fp>I=DL1wvvqjLFC31o zjI$W+c^9nY6c#|_RPO(b4}YG+*7b-8vJaN*o5VBfi$90K&wLyN$%0^X z_GzD*Ut-YWc?VZi#d)z0lNqS%LxsP$<4UHSp$a2t=K*$9;cQM#0XVMKF(Y%R&ucpe zVpi1|>b+%iXj$5;S~YH?TBxC+1?HioaD%Y)^z^YRHoGIs~Cd|AaF7Eg%*)w@SPJh{%4`vokrT?(81+ExcM@;w}1 z|F2&fs%a_QUfwKy8u@rW&6b*8wdJze@27G^3HkW==iFGTIiZ50~eUpS@u#V zs>@}?eysQn%vbuenhTayl4{cWerQOa%G$t$IGZD#XQG2QxV$*^JhmWIoGwEMixA4G z3Ag(WHIawc@A+o{`QHp9qX)Ucg{ZKHFbZM?1{B|1S_jCBxNU0yf0SWWmQv~ABqlOM zb4EK62?>R^UIepslMmsBD1ljRZ7bk|FmrOo?oo`#mb>gvITj@j*{z4~!4Zz=)|e%Q z2wc@GBYrYw*`KcX+uB{u)uA}K;F~HN5A**J`*`SSmZaR+_+hSiEG7-iJPIf*^w{rm%r@91=ed<&y^qHV< zcqO|;GAHd{rP2SyOjE443S)_^l^z}ClS;gn=e>(si!+%UaQR6_pg3R09L%<7E29@fHrt9;x8ui{P9Q+w-CZC zvr3+YI!SSVz3;5+&oRa<*I12oAC z@ue>X1GYq^foSG^S$8PQ4zW%W-0*fy?d*%Oa|wnjD_ps4|1`Qk@(!MDU{5w(sEA3& z3UqX~eXKQGOd?1Mn4}+V6NyA80ICv4{SnVWOLHn6J-t%*_`_LvMd)X8lQ~-_--6>| z^*TgK!6wIJiL+d4vqtB0f=*)o=$49-W0}$J?jXWWi+w(Q6!jDaYLleI#O@hllc|VO zY4Tze6cpR4F7TUFY62^o@_~aHWA2-}+5%~I%z?pnR%sKnVl{oBcNfCs3+qqOMgi{= ze0>tcNuhGEd9r_=>M8d(9OcQ*UAW}z>0Tt(eN)R2cA@&)a=sId zT9Z2~Hm75Xnt)$?$?00=?BI-hk1B%oG&a9FT`tjNq(&6cETaL+ zN*W`^^9K+%eEi6#C-*5Cpg1x)U3q4(-SQARTs7traoy|mxhYZgns_{Yl_m-lNG@G; z>@e_MsF}V_YLoSP=ncnV=LG@j4*CdyyZb|lb_(gygs#q?9`FEvAUU+Ivl<3lTS_UP zf>mu*ZbDie&GMw@=$eZ)zNQ5GFf0qry?w1$DhiB3l7D`7C~pkG3_}VY#sdY#W8JWF z4*vL?Zt`&^DyCGJGPJRx^W>=vhsAr@-#Fc(w?(FC#Y*M5KyZpIPKLdAcC)GarNQRD zMapP0kmG=VJ3lR=^~37nmK!kq^oQ- z%qY|oZflv+VmK1=5>0i&dgS3G&Un0$-QC@4i+&9sN#XPrPO`6GdGfV^v=)P<0vC1z zcK_IkD+j23WtO%F#qK<>A_K$(OjCun?@!6S};(q;3I%hp7u4a06bUNI9`sE&*Q5{G)3JU|v@}TYMb2?+j zJ45wPGrVR={04@f40BRwOS%3F47cj;?y&txHa*CLcWzFX+imcvbbo7?$C9_3t0xJ@ zg%twD<7?az=W#!$$}Ip&xUA^-+oV~rjijDe-gg@5ZBb_nRYDwjQnNGc!j!yKJcx2?U>F$NrK2Ofblg zk<750oxI))0UzoR@muwFE$fCva&IVIvqL@a^>(n>JRYz(ANs)T53W9oNsE)9r%{+Q zUmczTvdA60@)1jwAi|{0)^Y;Raw;lapf?a~zs>m49awx?Ko%XrXW(QIcMHuv6z z{=SQy&KHV#d8&q2^}C@_Zl4`h-?pCCHj=!5I^CAbGpo%jQJum6*SMBc-)f2Kk@z8{ zzXsHiD#nwB-7Y_>0hj8e+HF9Ii-=WQb3`-XBd|!FO?hplkguZAX4xsL<}t-cq!m9? zR->mlPSQhR)xOPYm0OyhhbylvHcuU&6vj96f7#|s-QXWQKAz})sI z3{HPzlDK-kIiVS**@3-u0L+c;V-itCLbK7R*1#wYX<}EaFXWpIr5Km;Y$$&~_{7!c zYEq68viZeD%v3`;A<)z?cA>XGYGSEab-a0GRnvCV(hRM?Z8(uxz`3P=$k#^gu&;6j zVq0aG`=Axtza()xie*G1d@x-N`FycxKQJEur=)r6i}`PKT*{;rI42~CNKp8;m8#&X2N!QpA&@^b1zorQsnwBz4T_3xMD$1{xt z072C)IC~8ml_EaA1R@^bTuC!oaip;90OH>f>kGJ+j zem9iC2^S`lk2ow%;lqYS)m2u>@Am&1n#gdK7!X{ram5zyeP5&pG?Uic9-&oL*X2uv zy2^8ozJG6V5`*1%uWZua*0^PoC z0N*Z)&Ed$BB~0NzCg<-2*n5BwFUx+rGA0e+84dYS26M;p_}}|8eq(exL87D_>L0E> z0N-bim$*)LQFCQW1r!Ua>}SOPZ1QV9Ud=5 zzzRhbkXxNSk##7@_?lj(PdpZfY-T*2DR`xStK9$VX{5%Gl$1Q9IzGG_PH@{3{>TDL z%-Q5pAm+Z56k(BuI4!s7t(}hW|y)CbrgDs>-3S{5DM!T+9r2`$e|%Kd70jKFvmy&XiT#-udwXYvPYH9Vj-f+vW}2D z*hFUe8zLhajxSr2S51MA`#e~h3%KHlw~Y9hy&G(T{9!F0L`0=Tsr?~zR2U%H27&_Bbw zI3o>H5G1Go^vmB6(5orrZ~$CMNKjF$b;Sm3CJ=1Du4A`&{w5|TCCy3WY?1}kQ(}m^ z0V^W$9_X{%>^2YASoaz8js?Bm5zQj(sBJ2>8bHsKK+cI_k&lICPpHwzXm{+0^>Xj- zJbLS3hmW(#Y1-c4EG;rpR6LG4zts&sA~u$Y(PSy`eYJLV-e_N6NR8_;8wRH-_5wr;RP?Ch=!0PoZ|96B})1>sOpQ58BAqXm1XE?=81e48+s^A_3OrcfF`S$0!A z&dA`Y8*3=n*G!_$JHPh1v(d)2I#?~I(G2{V!@WC_pVLKwg0mt~3lgts?q$0-rZX@w zlyy{sb@NVJXtC~8X8G!9CDg|kj8U`b7SO<#$4@^j(_}w9V!ilUP)nUN?({ z5b{hUk9&nFa;~q1$qLMHtkFNkVncQFOR^Q99tZ}5ooyOWmEVzS`q zc}7K1pA{fVqeyJdkB0Z3waBI)jrw7*Qqaw{oCjh2(}`{eN)Wt0+d(*vGz7EcP)rHQ zLa%almQkj3Fl-cdV8w2+5X}zura*d8x-@@oi?p_kDKnKUkh7DKh@Clvsj^gvx*S%T ztV8Sz6@?&n4=c1$7(%SDAtBF_D82c$p_{m2t6r8!Htxx8{XPnjR$)9KI zt)4ufKYrZ6{GwIku_*PDiXo=-QD=dR1+vKE=hRwaM6n|LrFr-?lNg*q|_7>ZGIb?BaA1D>b5x6HPjJO zp0wS6$`fg7poyz{sY#9+(Zq)}qaSEU$pp8Se7>YK#eI1MKfd#C4J${B04{0C`=~Mu ztjcpy(3U9FU|2q{ME>qo`MM-Zple<1;KZoJ>f)g!53rn{{Q%T%cwZoE^Rarf)gx22<`-Tch}(V z4#C~s-61%^-Q8V-ySuwK&Z*3tk$2{qkJUeb)pXN$Ro%7swJ*uK{9Ah5rqoJ=4EzxK zu8*4K!ZKcEv)DDrt4Pn`y(k?KVB<2oUeY$;JMlY7rlvkzlCF-0C>Sbni`$E%tihM zne^|xJjxO;bTZME{+qDv7V@83P@kukY7dHI`aQoukA_lhE9dDVC@U*_)Z+W$k614@ z0etj3M+q^pGBM{81g;{zt7@|ubl9R3nY-gpl)hfq3B_TJPJ@9S)H~@G8y(?)16(#d zIOSYb3TqGXFr1t7N&=gkQBrDaYSj4l-zoLvkaB9D-YyX!Ur_*xOGgLK@xK2X{p&;& zHqL70qv!6{q4azb3s5)QNqLIc36bdEq%-9os)NC0z&Pwq^W6XDk@mhw$%jxO9uAiY z-@4GhY92i>J+UlgnS8)!+dr1m>?Tx6f>_$* z%I$4@4$wkddmIp{7ZP%b^7$jwElC?vIXnSd7E!%4n$R0$4HCD*p{|{+ zle~Zf09ZJD=LnLYnI2jjOYFY@2Q2VD{>Ak*tUE-c(^%wk$oov_rfALQ%W~URJ>1Ub zl2s4y<%5yA-=;*frf{R+&sQ27uZ5g!ZIyQb()6$UGhV(DViedy;6nREdt)ra$$!op(X{PT^T*o9##sm_;a z`!GxjQDH54fxEvjwn`-~38Ux!QFUFsHM$fq(0qM4arnk!NLOz*6V`up0aRgJ_UO5C z>X)v)CtpRgyjk^75WX#D<&I#L7!17Gv-4zvpUg8m4e8<)5#*>U)HO0cOSn(8rFL&y z@iZ^FCn#b~>O;Vl2AiJ6_SfxSZj9J-1O#q9au$?^SlHKYI}(7qy+2xFhpt4m0Ct|+ z4eWdS2h$^ha7x5Bf)~alN%*JgQpmoR#U0M56#Cr{;AC2-i`h^>Jb3@Z?AHdAsrJ~I zF>n_H^dA6+xYUbQD>TpO6svvzQs1p=hVf@b)k2phL6RW!XJehy%rVHsvK?dA&D_j{ z*zB1||H$|sw@f)vy~hnXNa(wIjmTp+r?XWUH@Au>5+hAsL@+q{wK5J9#{S=9h;qk% zsc>60I=pj5MQDo?E%O!(_$@HbC&oCb*}@tb~Fhos- zp+f1@mPM|f@DH!gyBj0P)U;)@rkF4(2@WhNsWtt2pqh;S4A`r!p}8Lc?3tXHyrO!rI8i$xrXTehAg>?u8|%u0St zOqmUq>hX;Wjv6Qt3rCrs0faPt-@cBi&n%?3YQiT`z%@MA|091}U^}FQlqOZ+eC6P_ zEl>U{*6$1tlE8ig5UjBG&zw*Kv0VJ)sg==iqCL3c7#(smvm*#v18;Agp9AK>!q8!q zqG5t`3$&uq8QIF^gbrNMCs#yo2w2S7K<{c}Xo3tk!16aL5@TGnWdF*d7Fm%M*eYiv z2`9EHPkS;K-+!7t^(H)F!YnY|%nDT*%vX^WoAM`ksH!rSl#;+M?1dabrk|djHs4UR zsC8Pec0nT)ivsqQ%Ho^4uYLhG6cp;6c9=W|_I(|Jfo5<~3=VPy6c|fR25_RZ&uj}M zGNL;EEJ#6~86Vk7Sp3SC?g{!@2|iWdLBK+hD!{MEba4PugEtAb0Wacd^FFzrkPlIk zkpmTR+ao=!LYk64`k<{1I4Rv7|ER`s&zc{iDo_cP5_(;tvV(i8h}bU5ak6(mFy39|>`z zvF6W_wB`{_euU&l-_Ye7-VutFI~6_~N+RR&D60wc&-LfHNG-&sDAhR<{RbRHf=m|s zo3a}YI|W1uweKZB&1g`op8Pu56HFB0DY2iLoKpBwP$^U(OJi*g%T;hC(X47K2`{a) z=jsgOKuETsZ*3~%*67*PJhhKhQIgY@)g%h4AQ3nMqLUDUx+guKZ?h{q*?(ZMSQNw( z1!1{-#A0Ho?j2c{a1|$l!EGzfrR}Hi-tVP4C#~hPvNR~yM$)5{=Q|Q9v$Lx}Ic4!! zWW5(rr5A<%^CK!mYylXO(a=~-*#0O^LaN4RBl6>5rH#(XH7IsWOR6)wQAUrNSv&hu0`+skY) zk_hB(FUJ0$30A@d%2vKV88uIgbC!B?zxDTrar;3`hh{J7H}b8lSgLkqTBgY-3fl$% z0bw}GGrRtbShjm)H7L-8GEBNz2+WFqVI{#{@|h!`vNaN|;@y12d`a0dxwh9%Iat)W zvEZYFdN*mmA$=QFgz}trGTKUE7u>f6>M{u`ixFo=aKVPXo0{uQ@CI>lLZN7#t;2Js z2C<{%Je}cYMvhp!bE&;Ta=Og7M;a4Wd98mqpd;b{`N$4D{&+6jhgno?qbN_fP~kI~ z;4BR;LX2$HVvC@=w~`eR$FmbU@iC=j4c7xR(ec;Vp%5mTC>!c`nNM*8uC~PYPEpg+ zKg72>ri+{_&rem-`MzU+_e?xvJw2Hv5Jh(_E!oA`rG!H&+Y=!<(804bxa%U)fhjqq z9~Yn}`~$k+%=Rd#W+4{j8hBe#VY}ueVXt4@?p<0^RmndW6uMb$hD$J#NFL8fP=ahL zBaq*alAAg*!?f74OKokgVBlcqh*kM0G^(>v$o+%Qr}KU=ZQ04zNsnikbuPGiAPKvF zH8M9xgoq-oq+uoC|x8i(V1O)1@IWyKJO)bt&^ zeo13_btL`U{b!O1NGnKBGtqlY?6z=cD(#kZ0YSmVhVEo^T5S<(4JMV$Ni_cLQ5fhe zRjxQ3V?)CtuUIbRq;DbVfzEa~=mn)Ei_2d$EO)Ce9dfsItt$gugaGm-F=O4fn0=(n z$*|nuWnITm#~*g=(6fUB$@5cbtkL0VB%GfUo&-59ZAJrlwZk*Lg2F|;Y2QA@E)J0F z)PSPunT<{&w|axWGWCEql|3-JOwU^GAa^!SKi@3B;Fy?4j!;yU4jCYty@E#{3;Yl` zv@m(l$kAym%Oa@R-!-zoQ@4ngt0sdS;g~Nk3wG>2hGfBaWMgP0?Dxwp*GsYExc|yr zxspUQODperpW47Q2&%G^03+KM>QN99cXvHj$5a}Jo(})lLh;{#pW{cvT%lH2|hLmV4@kcSy2{|&!>EWDFt+0jnE5=GnD z&XJO!x5YkRAFsvF%Py9rG>DIkB znaxj5=E^0dQlC@6$iSHB2*s7ctUb}ea|$(%usNt1JlMq&Cn_SWWf*(XCgEgyWi8Nk zLbU2anRZ~PXU1QpKJ~>#iDNCRo+2~z0Zx03Yciz zMj12o%fQwapv9b)Xm{gR?CO{X?9#uNFI#d4nRm?$2Ybfc918upbM4{&H2k(%czU1? zD%cMpjz|UP42wu-VlK$YbPOJd{|0_BmPs_`qIBmKSvmQqbitb_ZhD6uP|ZHpj)ewh zhQMneCX_z1x6#Zn_BczBL`a3_3q>VGNpOk2RrnTQDQ=26NWqg3lgbBwK6?NaFT%Bf zuZf}lQ@Q`)FQNGZlbM}63~_q1K(Y)e3JMfyrns^|ta%LM62}owh4rWtrtjIy(WIY2 z-3{n<7h_9$e}4aqH(_i|TupH=YB^h+I;(G%c{XGCLj6(S2xGqh3*6*UG9!6*ex(FQ zNFt|8HT3ZIeKU2e#NoJ!_i=3+5ey4~vD<6@pppD(tP8WsEowb$kS2Kg(E852u<*G- zTIiR1>9L)mb%3xGiz>P)z&8h7mRbvQ65@EmI{Dfg9ETS^Ob+^tE2Q9+D&jq!CL_ah zRkU3AniZMWNRDUhLT|m%;D6p~U39O9c4t1eJ`K>?iB$RdO#ON7fBvM%w@2w;=Wb1& z6}<*b%w_EK`-IQ}BiIkL$MS*TsbY>h0Pyv5a)tFMB?2bpzOTWi`+wMH^CihhvaO8Y z4*~*&NLtK63ysdSsrNV5w@?d~YbBr1fPL8LgvHosAe2Dk`xWM$X9}WFZM!=NAgm+I zu{3En+XXHp@&gi%`SXT9D>$4DDllk3RD$H)Nig|uZ`5Z#!Mv!@NTV(GV4^>cmb&Rn zq!3cbMv+2^RRq4&61_qF!_RbVWqd$>MIx#6Tj-~z28uYKoQRFZD3-av#9N z)~)oO_}__(wd=;u(>5uWm6w?Tq1hxJNc8KK*0c_C@-}ZszP#q+T-q8%VF|SCE^sVA zZ2K&+pZRljv4-J1(_h)Il^2%#0i|N#0sgX$L&|k>&;~;s9&R*`7`5MuJz;N{@SDD- z5Mm`)Q_Qz#(JIk;W{|7TpjfUKGH9pjNA>=W=MQ@u0mqD~TyFjaab&kHN_y?F%{>u2r7;ZQ6_S1k}GlW2|r zF+Ufcci8G#yW+M$$oSizwce@HJf01_O~YU>#ldCYc^tKzafRab1rqAf2H%Y|07;Z( z;XR_;UFSD4C$9g8nOXMqUy#>~JU>@Mc=K>t;Y%%VQkZH2&-jYTiDve_Ont!z^o;uO z6k*GstDQV*OB&N}&7y}r4dgtUk}xyUkn?2HeYH+lAX$~;2Pv#&W=~$r7xdW9`k~Nx z6gL(JTI77sUan%V2_%l@YbN2dFj6@5mb7S7i3Xa6FJm{;G#H@4NnhURqGtW^YN(x} zF(TyIY*FsBpGqy7__0b=>da9Xa?0Ohf+WHm+L^r^3zKHTW649n@S zCYAms4`iU3oh>7LL6HZzVrO|~IqR)X=TZRBqe5u9(qQQjwe_*>SFG;EsTz;y*)jzI zwi8Z0TMcVGQH;OeN6BS;7~BD0o2Wi(woaG#$AhDiaiFCJdb=aG?q zPagOqMj3-8TC*AEm3A<{hlW5G2IGCp?b9HpfnW?7o8Se(fBN+4X9;q^y-$mm!8?=`498MaiVAWy z$$)6VcY3i>i1C*#&~P0I_NUqTB9lYFK7Ihydddnfd0*`{mV~jAC7rH5;?~r*(_}B` zO|0wnp65GnJcppuyabCxwM2iCT1yicc&aS(d_PU;*Fp>4*IyZ1_lIo6&0Vh_Eb0~i z{45M#hz5l|`9vf+#~d!Uhu)1-Y$=9uRPKOzg%Q0XU+RkbHCIc60F@k9*mVlf+%+9STG!Z;AEo5MOgS~`9;glc*^7P&2?lO z;^Y`-oV8Kabe>jq;V?>Odc)(hGWLUHIov$S{g$AEkXfC5jU&kchn2;at&o~Cn<|FJ z@*zkqcEZ;7s?Kdp{TuVO*Y$1LBB-8lM*`~~_Iq+t*>ECcNmrkSYx?r_WKm8T^vT7J zmMODD-nd(GhzeBlA%kiN zsUB3{zo(#Hr`Yxgh@$^0xscGaj{WsZ=$z{7N>!0ZuHBVBQ%Y^o`PrVM=lw#XiPmH*{4;-RC^N7DYUlc;D zL}}iaJ5@PSFcT1=2ZpTIrGNQRmog#O{{wrg{8>mWpSCR>XME)fOUuwaaskp?s<@5j z!8X|_^QV?3Z&tsnkPMOCnku{dBQfm|zN z;l|U@1Eg2@w8-hOj8aRp;EPlPD=Ql3KJ{2tdi<`+KlaozYttNo7ffvll9T{uT3Tc` z>w9==Mm)WoNfaqbi8Mb#Sm9bbsfE^`l$$f!bDHVCT)LG^qazM*ud#i#8z~CxXFRv@ zc90}Xa}o-5gwQ!_*ZMPL(?_}`%S)q<9JdPi>_iC9*xLD*iUVAj%f3Ji4-YdruY&`* zJh{jqMCuvm0(r=!AOEm@@&yA@01mcY|G%Fv+YZL#W=u$+re}HtF}~A4?&(~-ZvM9c zr_tK>o*FZ_t6ABe>K$2(PRt;*JcY3T zTrT{-3;J*MPiQm9IXD9)Fc7_3apa)n)$t~){hHYuEZ5^JT4&0l7;TJcK=g@q~ zKDU;y-U73bQ3sxNdbX@eg3l|BUz|@W!F$W+q1_lrD zn2?y5kAAqh+2!P*^ekgQT=qjkLf%y=h7N1qnI^sL+q}tKK7I_it2P~Lv#W;IxWv*v z7*=Ob54fG3oqV&|t%k6ONKN39*$*yU06z4ks0{YXNPTFIL0#Bs8F2pG99i<@u8oSB zs*Xz9`TggAcmcdchI7f)KZ@%-bKHwmaw=FFbs|k76)nFX%ta7h{G}xLwkGiP2Hjmu zCyv(C!#G$>=8C-io-fv`q)=O!WI;6DiMRZZD?IUs?sT3w;L=1ocd?-3UEbFsffvBp z=5|LxtqGK^VU^i{9!x@7S_wR*wUzVJCrChJ#4TaDQdf>ncu85=mJ{#bmBX zQ&a?(9N#3WXct&?TwV3<4j&r_-?KIC4{&q-(7FI5DE#rwQ8;9ZomdipNTL0HV_|4u zAV?cfO%{83J~pZuWq`^x8mIfjQNI%t2dsNvcqYCV)jTD6o&Vdx-2lF$Q*dE$RR>0*^0sYzBwhBVf^bv8$O)?y=MavMk`tH#);c z8m+S^;Qy0S0vybc4{_@}JomN$mr^}Z-GndZZKCx3Hz4YZNlwOSzZ$>-hG0(UHu6Vy zt48Xr#?%OSJetB~gba^>9TTythZr(=qIB2%K+=4rhRlZNGfw->J*T0G`+=x<7LR?Z z*W07Xa=W{;(N4?BGf)Dg=%>Z}vRSA_`k?f0&KjB35&v~r{TCG3nDT)z_x;x+6b>LO z1PJFMAvvqn2BL|7e%_}qF(0UYY6;*IV61bf9V4CoFohc|8cthx78`K0H?2} z2juL$v4Me~JnxT8Zl?zElOh~RKKF>yrI*E0hI`I$QN1)8Uu z30||amU^Hl$6)5oMQ}L)0$0uU|D*)eXL|w?y`zpTP)doF!+RJSr71A09yurAqDmKu z{3a}RubNo{gy$LY+U=iW)-*P%__+ag4x?+)Z@)t5bgFcHueZJKmrN27L5LP)Hrsu+ zZVy|*2=ier2jdyJfEqu(v$NC7xlV5fa=F$WvEFh;c@2895tq~D62Dxd^9RX07LNtn z*;;F|a@9KsNDgw<`pjgy$rpbh<4srh*RKhXe<fW-d)Ntkk9-ov`h&=7V8bZXX|YkA(O|hIGM2_#sNL>XOuzra9&E$o^>jsM=j1eR zox?-qyM4M;J9ih7m$BC3L{x^gQC;(e3y1Ea(v<{xBJvw^&htge%mGrgXIWRmcI@6MVjpvgGU0iIxY8G?SpH3{*B zKc;}3Ef|?veB15pZvP_B)_bM6&H}2NSdPXZ;Lh_GF8{|Fap(u3wuz-i%wfpRr)$a* zK)0PZX85La1EiNqO2k-9

w={7Ojywmz;B54G3`gc~N(L;i>$HcrQ5nUc>!hO@%c zEr>i1KI@(bS}o2)?S^K0W)5wBe&8fbghwlY$T%?@p&F)VzAmeUh1^fQ5t0weENf;#ivzuT)y%6@bWi={4;CD1Mabd9Jn>Y++?p z;c^W68`w%xP=7JGUPRvRcK4IHa6#K$I&}0Y=Qgw5J;4!{a3MY}?r@BCLlOC`%6S+d zJBz0eA?QC8W_d_NMMXXJmI8&J?J?vaAT?FgfNlb$fMMT-){A+i^Di%LaxF(|P`!46 z5Uc`#Ixh~h&SvdGFpbwk|I{g`)@(;2{ov(?ViOrUoyKA%Z_Y>9_X!T8=mfm1%D7Cp zvyZHgvZ86&-yE)oC{w8G4%i$8pY~6zXCHf98I>oEr#8H2T2Ifs-d}@#V{rgsXey3?+kvc=+&5Mvo|i*G4(~0lSGGOT zjA|x4Qkm4U4kEFAXGWu)g2>yalggRjg24%0fY3?9BT_n32oU(^0}0?+e*S)upM5vt zqX)gE0BwW9!7lInWAszhuQ?W?kQIROoHvN;F7^8P;o;%yS#Dj%19eKLF3(m_;=aeu z_b9-!HMTUIlKbf}msHp+U2;{?9kk{=XN@vW;XFS(agQyCrBpPEbmG5D>ZqcHUA5-jHylXl>6sB{X)+vhw>5 z6&?4)x5ooKfZl_~{jli|0R}HVj*kxPDA5#lpyVuXzz~enoRt#9B1G+CN96YfX2Igj zqF8)~bnm>d3;~E=`Vkr$Dv@BdT2zg)j2sKsfOMV~%vxBO={92Oyy5-cuD@6yjrHyM zK@}DnS~hlF3_N&fiY&`Ro+N;g0{P@r;%l zO(t+j>WIMcPJ|(<+WoonYX)DeJ6}bBBtRwP0l0lyVnjsec&%+1nAI=e*!79G-24wa z-@Cj>Bqmas!vTo+2(Z1RsfJ}(id_eT-fe>MA-|j8d6$AYxafQbo7*$TBxJPul|s=} z?30EZLKy5~VQC-@$Y&H~@_i`1h-|38QZ@x$trGzFV zKp2N67abDNv2=Z~%A42^(KpU({K8K_KtSP#{JM?&s9dg5Og>zg;1lAk%(Q7qipyC+(1dKQho6$`wREzKZ?R7Z1-&-iZhiEl{JQ8~M!}|wj z6<*#>6w(l}ph?dpYUE4pZ!6RDP_amUw@oGkQ-D{88j5(dJ(OI7%7r#Xk1B6TQyq^q zj-cW_*$%H9I(9*Y)z&FS zK)Gf0YoCaOwZhfq39(w>+Vj0p1+3ECc4I{kfi;jj8Mw>Qu~9&fVeDdnl=*E`tNKX_yYJyw233JOQV&+Y?DI_kPYzguWPT9Y$Gr0wj*UvVx01C zvU}DV^#s5)3dIa?5%~E3ZfJ)RS^~1!Py&osP3e^5Du};-PEzhC%)M{+6@zyVAER>G z77-AJtsoQ9H27SFJ{9712xkD?-KJKoJGG9RDJPmj1Vm;#zVm0V<>+Wn&9xzcK02-n zX|z9|2s`c{yIFE7wKO#q0~q!_DdDW(@%^;kmm^GZyJei1R2pbP?pc+Q@}o8q0Iv5B z+xdUfrrflJYv4KA%&ig&wmU_4}dx!ONwzrL$#x1pb>I%W))n42=UnrAF?#)ADfd_ zlj*|1@ahgB4&E&Jz8ssC>bd8-0aysvnDGlpD!}X@QAeNTGQj4j>Fvp?s|~TT;Rp2^ zcP~2n7bzfanb!u<|>Xe78onrC$l3I%?sWPaIq8_fx zgzoP@8VbLQJwef+FeW z{~%oWfcll&xDMqG-^SJ5U4gMGf>AmHR<=4{A_sE~srIneYf;vR;`uXn!lg&OrgA)L&Cz`VAb zij}7PhD?NLpC6x6xPq(rx}CAn@dk26nGJR{(^kxWke}TvmP@qaZ)qU@_kG5h9!zM?^KuJH zVi%KMAA+DqmeUWd2eI$-7mJ;*Id>7lR!JB{eH^N)eDFcPa$bwtt2^ja{($8W<>(;< z@HowpQ&2F>*BRmw+7W!#+Ic@pPCwQEy_Buf9#%g@N03nvHn99LqNlePfeM=G?((xO zJmK-0{P~d!qUCavIEgUeiIsef&ttRsfnenE#JZz^b#Z)qD;QT^b7WM=o<|Q+UOmss zEc9@M)7b2;wl<7t;EEdt&LDaN3;Oo}p(*pL%7C-<%)(fk|4C77u3}9uFo~Htl*>&B zX>%M^M%!9#wAS(KQlH8()A$DG0Sbc+pS=+F>MpO}C^~GhYFX>#RcbQ(2p5C(%0u9% zEiv}Dy&dB$tRehg`)-$(^oQs!B7XFMCxDfl@AvG&ewW-hp-4UaVW$4s7Qj{S04;*LR=vj*QmlitR<_Pef^W>LVn9N!mr3( zXeAZJ7g^6eHw|wOXGPT$BkHi9`RmY03cY8L+zRBG)6>GY{mSMb7te#9an zB=qxoe8h;Cu{GVVcx^3OBD-+r0i;3~FZSe={~$sDqXxfZ4nq4xm>7-CoujQD?8p)u zgFr$~9`o*glg}HzQZ=&JV2M?()tV#{jcZw>psMcyH1z?7rU;9Gh1s7#Bn8&&3KaG& zY6LLRPQFPFrB#LRI!H?q;1im&%;-w3<_AAW29BaDkKke>kO~rAl4AIzt$i0N zjZdf7+quF$9T*vFB9#4qc~io1wO;kO9xjy@ZUb#G6CmMN4iqvQdt7hy#xpX);&pZh zoh!xO=L>Huqkoj_5C@Oed7$2T4kY&6``#3^Sqcy4Id;r^d)j1zkh(JfQzmA2V>jHt z)Ss8!z~7s;=$q#Tsx^6L#a`<0e0I9q?E@Us=bUGJtzp-sVBioH{7!}y$iAQ3rB4+? z17&(%1MH5(s!Ak_u^=V=TJ!F$D*M z0$@-R5F75VN|u9?8Ac*7XA(b@VM6tg=4daJspT#ykz8=9{qgoV-MO7x(D_~p^~%rG zKv~e%c6V~(9h7V24>k`b}ld~7mg zQn|!QL<7abn%6CkCOiCF!~;#89+Y=PQk=kYF&T}?lMuc!Z5ASd*CTFRTQc70i;d5Bno>iJ6S2{{~DWhYvwe3q2vRM5Y6HjPPEKC3aTRpmL(WRKckFi2olZ{cji= zfTa3-AdCPkY7Fg&LrR<+!?+~~bXm>kr3z^Xe+}}`CjtCw0l-UAo&}x*&Fb>EPNx@O z=<)Rl0DX>z$+Gfrx!oqaz&;L7Y(!grg;fn^GAf$)=~t%9HH_OqhO;W& zkL+Mv4_P%^Ai6XRh%Wt`ATN*HF|hpezWt#m{AY*v>s@k~fm=@agm>cVz^I1EoGQnp5eX)(mjTC39x>xP#g){+dC6Ojz}T|##qp?aMx?s&ZS zFDc-ZVd)>}mw)$qos-61WlLc&3Twf2zdN?P9sc0(6&t&(Oe%>+OTxZ&Tq(yIz}yfr zndrW@CE)xf`29B@e!0c5v;_um)?Tm^^}{;BotoI;#gzd}%f5QvPKi?VV4nn*BX&@R zf2`zSBUsH-?8Pd&LE1jA5$nbAE!^qfh0Z_#5&Y9q%3fes#BJVZbU-0oY2w;66 zS-EUFV|l&1xEc0PX^*02H^x^-?k9FQ-L|t*z!u``*ruTF!H8j%Q(L zU%qq;h`L?i|1ekB86F#$*))2&%MK*oT>;!P`Kuls?QJxxu%zn@|#s zsxkO6GH?P(?i6#YB`L#bwp^xg7LqnxiFzcyPENAOwyRCH*Kf}kqr29mqX0BHX8W7k zxd`Xu10m{-gz$-S`CjD0Mhx%UQS|iz@4K3|>mFLIx1m@r0$a59>vQQep!~CA1@i=L z`XiPkgMzOoyx$aF2j9(4I9<>te(?xuzr2Qn)1Hik1RayT0XWxad9F1xX4!`H>$u^= zjz^#C2Y%!vM(>ALJlMxv4a?F3wRa>gg4N#nUCcZ8;B3TqXY=PM9F7qPoJm__W`DQk zI!mG^T)GFJZgdMylX>i;na1e)G=@$A;-E8FhEutX@?(-Sg|)&zcWf&k%4iN}P-u_i zQE59Ka@v3hfrcB1kGfwKf3e#aI2^6^FYPC`z{_a-NvEITGOE(=hwYw$21X%Byq%-9 z^tMh&IF3HxAB}f#zmi?FgEAxVc-P@sHZ^c3F9 zGo*R4k&6BpIFJ}5o$aNJ=L89Z69cEke|sboR$T~1HJSdV8C#`Qx-HR0q({HU&eYCi z__<4N;Hl@$SEb>DBN7xwh{$~#<8ZFX6u#8aRtp-UI-Mzu9?leIp(pjcsob$T2*ljq-7x!o<0_2p zejX;S@lSWhk^rZ~ujQbGFaAEs}Ez3rmP8{c# z4-rIT=j)xdh-^nXl|nk}>(f1uy^;1c_A@xm(`Ua2UhUUlWE0T&ig}dh?ojNHKuzd* zwI#KIg%-flF)G-M!D&W*CT|8IgXVko&aW+!NPeWcPaa!nk-i}SK1{Ulb$vuO-KIA6 zs>%t8=wiicHLDsIA9q*$Nr%XdCCro0v_XeO*j&{qZhc#R-Eq`eRqG)0HQH@4c!q21dSlZX~sXgX^qj1&Fe84k%f$J zZ=g<$X5M7bVw2V!(Pj=#WwO>@e-Cv^jh9XXmxn?JlG174y}C9Y3qlq&;LzpSV<}nV{cl>A@FQ z1D!;y6#mTjwb<|Qd`cw)!*5V=*mR>m2*srh@VM0z<sb+kdFN64@MJ-qU|GDk@41 zpZDhx(&^d3)n|i*)a~tSYJj2BdR#u&!Nq}z`S7m~K6Yq6)zvNB7>xcL24HN8> zmRS?7{tvMoHD%s3bGQ|i*x+CCDT5h70{^mU{MQB|D-4a#=?qYv{0b4#sWkBc7vn^m zdi-W!m|7|Zw*-#@d{Ehhj)v!CQPKb7B{um!I3d5gz3MQSjAPdpIG)U3ueV;%Yb^Mp z^2T)~67tDCNyHkp|JQr|x7`c)rBd97Q(2LSuLRT@bzh`-!o3UgDXXR z5I&-qC$RYZuPgkY3*MDTvUzesiO6%gnYadHP6mcTp5$X*ZQkSuA?EY{dQkiVUKtj0 zcmr$XTRsO%0=>LBj7g*SIf9=+{|9Q>)%O&Is zOA5TFpKlGv|NCj%z;U6;L|FKrXWxIW&A)x4NC&(p8hpZB?7#m0fBe-K8J`@7D~qNe zhzbpGaq(fh^VP?b`v=#}|Ldr!MDf*AsxX^(WWo@W6%Or>Y3vEe#~}y;-1R)GHT;!> z?e)C8f{`TZ6=I6xB10o1NnKqZhto;z;{`-YD^!|FKJel1->-Y4XZ9AWQLnq2s!?#) ztH8}WSxS~$EQ8azTt}SfGBa@*b_e(yCi>fl$Ho$g+_bG%n}p+TmoM+`5+^5Hrb|^2 zZ7ZED*Q4mWsx2Nz1jK*=6+tAH@E7#~L}D8f7-G_ck$b_E2Cb%+kUD5kj87_dS|k4! z*8g1DA|ddF0$BOb56zSZ5OHzwMsvsYcBC{v0{5tzV_f)q1Oz2WB)o6VnA94r+Gk5K zNC8LP8bCl@jDap8x6FPFtCO0XMn+FxXaoS297QpjTX#BeXm8h}R!eP0rR)iYM!N?G z8WeJFuR+q+djaBch1(801IQFFcq+bb@wX={2kKqhw_m5HXN;z{^NqEPjSGmi#NwcE zo1$~-6x0bv8w=2C3v_L7f^g**Hp+FonIC94ctk&A(;~&5AyyYumewiqFU<%h?#YV? zNK{y?X6Q+n7>61f?uB;3PJ=OXOQ?Me|KDeTBJtmoLpvbc4yQ{mm#%YWLll5F1?bt0eJUl!vKR-M<`5>QV?+KRhgYVtdAZ}dQsYNlC z$I+jA*yS@NrLm^x3*;A|haGvw^PmDIN3=@M2ehihV}xlVa1-w$nz1FWI6^TzN0)D{ z@64htfXAHc9iFwA_Im!sr+ne~5>PN;O{|#8Vo6A3jjOyoR$|etC8|hYAHG=IEWfrQ z{Ne#So*YE*Q24xzo-dO=oe7ON%{e)XSW%!h?xON!TD0=wWg%VL-S83f zdWHe*o${QC%2QA^?tkqIT}avFW2nC+kV8083&HD>`G)-PBQNjoOXMxvaKG(b=p2OM z8mqenrSo_$8^ShPuBiW9C~*`9sVGs%NQ);bQ)?`apOs8kls4nIpcw2FP|E{kkJ3jv z3(HRLqRO*&(%DfcUSjcQF~p;#0$ttl!IP(|^vh}D{Vi^fJZ;^rN{R}%hx0&;rC(PF z|7)Y`n&bE3J*kNDDoIerou%4KsoftkLksd${2CPkolGDIDJdpq6Z?wCgKac2(3hFS zQExtc))<)t&|A^IgUo4s?)s*UM)Lt6=6EBG3NWLJd#F9g6W>Ik@Y*0@|T_(Ihd+s}sRGlm1LI`L2( z_ivs)o}c2=#R^cET&B9Q@HVscHr@J5RkpQ?3ej6pI4h&n>Xm64Q)NSdYej5ecv6wD zL|bvK<4F=jwzrP$mjuQ;wL5^1K6JfTDy8x2Q7XC7(Vj2(>?EHXlvN(iFsrUN;=Cal zWh|yKRjz?Sl%t+izEFR{^0o6~{W$Pt<~GHzp{YcER;703`Sv{Dl6G~y{rU6IpOo6Y zvLBhyt>F&!4nuPNV;U2TA)zYj2|uJIXPn04JeQ*)BH)WF=jmRb?_vQL>S8_%9Hlo( zHmXUU#Uf81pTc{b#%P*8icZ712kY4>0|xImfjeDZQe0eIH!H{48+W1Dou20C6D)YH zdd<zH>+3z z956K!#Twr1dQ{wK_B0qao65}DsHi%qV(pn zE7Ba42lPgk>AT$b8kpE!7(`1>yjmNsV^|_by%E^vCno;=)}ulO=5dfgZy!{q)jE&O zC$@%!$>C5`XT8y(2=xUOm1yJrvK^blVd#(Wbh!qrXKG!R7j3!R={*oK$^dl5S65fD z?icMUfXy>LDydY=M<~R@c&{Bppw@4&M8xGP+L$sqMm33jdOa)9@9YF@TZV}fxLz)M z`$@s`Hl6?U1lAazeS77OC5pUdU62;Enr=y3zCSn}1Hy8wys&&EWo2W$I-lhaFqU&V z`2}~!Sl1mIV3PlRuhk?1>H-}i99Q<>*!XyJQo`r`m12~oy6U=l@u3=}UtBJSRq1Sw z651Ybje#|Zjg}kVQ9D!1^pmpcOxLA=mSL~nyW=~N6)r`t6)wT~o|s-5=mvbL-Mun> zfmZGp@l~rC@2@9<8U&>+a)ui56hwMy;fA{tR&gnZvc3`*Ty%88j^%wz4)L|48I#?9 z4DUjHD_1{Nd>AkvAmMpSr;_h(OftU2Ng#p-m{Z`-UL!y7{F=pv#pKCG7EL^55!iS$}L|%U0A|X zy=X^|b|7}hZdtY7tDPuQM@Cq+Rpc-jW$VuTaFkejXtym zywf<*@~g8vkJ(>q@3Hz`jmJ_)*4v>BuUQrHf$#17!;V5M%29Lfrt>Ky9v0*$%A00v zYuqn*h_VF_EA#g%4Rr;2ygT0TdJzSv7_MZ@u}G!TiJjMN(;Uv0hZ~;lm!YyedH8>1 zM6euSkMll=_F}z;4&o+pIF4jShWkR_Dy4>%9w;X0l=@>1Mr9!l8Bwbbn3W1lC0R`u-hrFzuUBBVw@Xa4he&zoUnOq<#8A6 zOB+5@ZMF5V*QuY`>vsAZWPl;Nzk|WdPh|f5&1gQ)W#17TG@B^Yey&oXNxhU>4A0-j z@BbvP(U`($-GK?w0$Ojic%~i2(tJnld>YVHIIJvCCmY{Tn3}p?+2A5!w&d-(hFBPm&5t89nBz9H|(E-hFNM&^CAEnrD%6Or}>?roiAn)pH;ycCl z7T!@8dW{?=W#PfSq4nGp0MD;aO#Xy5V|dUl1)~IpK4^O^6&3M*y5!o@o+QQ|5m^Bh7&RZyEgTrc8bhpidgPKJd ze?T_cwACT6l1xPBV|Ojp@X|yzckB47%j#=#m(ENfn>7@tmwI%j1bJbu@csSYi+LMq zq+bAJ*7h^Cm_n!*TtRyMY)wlN*Sl zf9RF$OAChShOhskTtLDj?O#yqwl)8TjDF*3L*uEHoWFB0f4FhOtF)8;zL@R2_}N^= zP)GCMn++RF7ov^yq)h2n7##MwX)v3nNoW^fS z^;RKqGF)#V^B6xFGGf=bu1>5Kh1N_^W#kSRWw=SRyjZ$J=8=%_JT7_ADhc;!y&s>2 z`Pp>V`Gc5h*e+T@R%1@Mx_xEw6#8Cy9SuOVPI=o)W3ojKU5(^HiP%D|JL{NYlO!W{ zN!q?>sqA@9X3r2!1GoTdhY-*6A5>CKRu#rj`jmC|3va4&jfPp;*jK5k8wyAPE{o~B zYOd$ocosQKKQhup!Jv9Hq=)&6HT=e?7B#EpJ!6dm)~`fV{NFA-J=*TzcI;iuYs}~; zW#xqi`%>+*3ylYIaN&QvoImoWMl46+EMxv=R`@K(4HSiZ*1DP9lf$UUzHv$o{lg4v?5cX)dCXjV{J&|RK zGvMx5`5Pk8rcaRJo^N$>N6ALQQqpw-v9LNyCyQ+&tB-4LyExc+d(~(IT3(kSB5&sq zYkFv(GKS2qa}TO)kDfI}?IzEok`X4dDLgQIUhR$|vYvNR=h z`dLPE_9=#NxFK)&c*c~zwXi{O)-I7|_e=4cNVl*lNpTHlMt1f3lksT_ed&YgZt=5U zM0>G6c7_+&eNG|}n#wa%Ybe)T)HfrBt3N`5i@0Yb9cw^r(57`a3hwoxKpc>gRtGkJ z!@#~Lw{Vj1%4dI8JMMl`QGL~l4+v!|$-3^9XP;G8NPUTiah@l*6OZ-VFv-{Y@f7SzhH<+mHZt8#V4iU@5cR;0(_T}vLWgMn% z{xqZdPSnJtXuY8eP=0R%D#R%8X~(z$4-!7}^1-c&^Yy+gTEHubW{Z71&`c*Jv$B$# zWWHJE0igddx!oHjlIewF;}Y1=@&P%%Nj(5F)YaV%P1zYN5bD>GhO231|C ziT{DjH8R7TCr*MUA`=}xRR!|iuB(oI;I4YjI?S+^F|31 zP&jpZw?CRJ*pC{8eark>j=3m#gETHG03-13hl?PQF+o%~(0n?{QZdiy=J81MIRcjh zK4ek}!hmwkd5d?Ha;(A88<$_yBp8J_I;2Uxw-rZH)}PlDwgkB~dWOyE6q4AHxk!6l zp+UU1V@eUZ79+2kh_S8$#Bmi$IW}tM^IN?fMF%6>HMJO9Pqj*lxzTfrRKE#A9RX%x zzZU5Kk{V`xG@oX8v02R(?9?BD&!TOhsd-fkKAdfPf<>?mtNKw@Q)50;V%lSh@WX^9 zMc-QomJU4@th#d^N;4Z0Lh(gy9K-m88hVeOhhPe_`^*#Mv~LgPiR_%@1FhoB+SfO# zo@e;;>Db9!Q&3RAbgm-Y=;-t}U+{~ohN1j}PUM8@IAM?dC{}+HWHg$GJ6pBc3|1^A zm;FFE=@h2JhP%B{L#^b}hn5)L8?%O-_z(7sMcQi!-3VAJ1mEAkgHH0a?_gy`E7GfN zf&1lP#xZUMsH1CnVrxXT^l%grS{IP|aC=n`mFG`Aac{Y1({elWzLfE*{U4%dlXR9m^EBu8L4SddIDuHI#C1}&K$g;Bv%w5cnXt6@Fi+G>c zVgXpH(}7=Sa$D?i+pzURAWyNh95iZ9UL~pWAK2Vl}fLK8)1m= zybeM9{a4NwAakLv!|DL1N?7uvNF%~c)HUL)r<9t}_&052V?ZzM{G_*O)>dG|- zZqEV7S+hK9sDeDo6L<|Gsm4{Q7isxX2}irwR*QqI@UY zQOQRteuq0s+LQahvizG5AmGZiefi-$9=t7~@Sb@}h@^#ujk49auHj)Q8A{YxJs|{0 z8yk$?3b;F>yFBtb^4w_D`y=1OszdPT1y`Vu_m;5M&PCVu!&Xy~}L_ji~%+g|P6qGQ8j8x2iL<%=sQ~m48Nq!mE|M zW9;bG(ZW4CA#>F4sD+pPMR9Xg+h-JZV4IUP&Eq>hRt`k0)*4qnnprdQe~Z9x?S$lS z_DJKj9hw*D?C$3Ny?0L1z`+QfiGSf%4xoj3BtVRA$@6YtubJN%HeSq*jTGe(n`>J9E#>)4wQwDW zMzXEiwVm*s(P!%>V5h3|n{-hH72(Unrin{^<$&e#wHp2`uAj^U=vI;D;8IwFzdfl% z+9TzpoGfOV9BQGv3ZXcxv%E~70jbz_0ty@K4|B4kN=uv9AgrHREkebiqw3q~kdp7Y zl!)rV;X0^_2HL9-Q>@&#_Zf%`Gge8QcT?;yj&%60R#7dp;Fz_(CMel6*EP&3HjQBS z?jLAQ=Z(mlHRE&KLFL-m6>8D|Z^(q3;|Y1k1A^At&bw#8FVQ(a+V$F`)%LXZNlDd! zK>tB-R4XDPWY!=f93Vuk%^k9p-QRmXSkt67!dcq}bTlm@GGcK@F;pf7}h`7Ha@H(i3y@T#Yc?mX1_+OFuTPagn_`pWvH;>uXeG zu@YSLg(K-gC<4eg-v0v=^)XKYaB=fyH*qhUq~jweKIuKVQ^iZ zYoS_^q(G_OD{pYXzg~@G@F~bl_+sW`Rr6Qs_39%^+Rex zBFa9=V%2|%Vc|H~=-sQ zqioPyEzc7<2p~8Zz{7vIRvpLF3>UdvI`h=wbb613r}H>a0-eJ^-*6EmwnEVSvSaPV z607d`J4|=lHXjn)$DK&6X+=8Lvz~-Dy^31jEhr~md zz%c$?K~M^%dV>75f7MO|1%kZ;iCp-)WqC_Dp{cSmvY7Os`|arIEk*tJr_X%1obK_2 zdyDvdIa1_Xl?#&riRkKz#Y()}frU(@+?3|)kKNC2iz_0zFTJNmbv5N@d4*Xcsv8zV zfTr)c1G|PGgKF}D>97q}w1RXYmvV-*8O4QRv&T)(Eg}|&D|DVS-!g+zTy`TF5=edg zB?tPxlo`#PgjMc(h&R_iOOJMVKwCQpM5Btw5f{ZER_4VXPArW%E3 zgp(U6uUPD*4E``Iia5&(J!V)7D!ZfFI-Jo|j8$Csr!8lrg3jgYpgO|^B69{!272AM zo1cY8U z!Yq5To+{L)R+5pQ^+M|?t@k(;kr0{JQj1f^qXjq_L8EllC_4JEvZcp))=?P@N8z_n z!(Cm*e0Y@Wa^A$9qk330ygG~>E6KlH4;gu*3n>r>p&o31@3%5U!{KDgV=ymhdOZxN z5yPz+ZV|yq20p~OTyz`07jE^3ZE}@7FO0uzTm*%LC8~Ux_4RsU=lFMAD0{vWzl+>Giy52z&XY>#wVv2hl7w zMwGocP%6)kCyiW&v#imh_H}yZOP^^qXZot0qiY=uE0-}le$p3S(~CeN`TaWZE=?1%tw5<;xp|KAH zzH`a=T)T)cM{8cW_Znl(DlXKB?TY|HzXwGB(PuJgi_SP;^Jf@M~p1gc>enOz(x(#CrvC582P(u*QW>18fy=Bt5{~mRxze?^0F0z!b5Uahe*e*ZHIpnhhuTK~Q2e3cJd0^p-A zejb9|K~Xi?t6u>7s-Odv5ubY$EZ{D}zEtZ;n zt#MlO^f7Cy9sC~T#WofOFm5MUSaxyw?E)qt@*qTpOidfqF z0*YFpy!?sB!EZI^uc{PnDn+6?uGK>qk4=gCG|7?pmqW?$X3W0|;T%2$Cj_(Ou}afc1jmS=H_%9H zc1?m~w8zJ8Z>coyJ`L*HX#srJK?5{_uGZGv=He`%Afjy|pcMWS&+wey zAWWumMj>A)$ux@-$@wH&-BKlZ!SnQjMDN~nt~YG^_HRCzm6%s{5i|bCLX`?loA?HP z{CL5Rsnn?&B`Hc5JDX^#5!`R)XwH{F{X4AHrO}A;aiGqWXD~-dTtbPoopZ(R4wrmD ziH0A^_jge=@%FDs9wyXLK0d!-d$t_Lc5fj;e{8zXo7!zvRYYJAx;^0QQV|(R=2)vk zQ|%ro3%s|&KWhbNU;ON&Z#~QM1=o&qW^an?O3PThP6B+Jw$%M%aAHLYEQId;7>D(g zYE8?ca*hC+LUKVnr93-PUw%sp#3n?JW~}u`iTxrhYWx!GKQBVcnDIRbzVKm z-O*Kib?60Pj*$xp{rO#e$C>E!&)UI`XmW6iO9EWWQW;?h0FRYyVS9|diQm&6of}yC zRrOqmS(ZVIOd=^S62S;l3VEE6)OxWMEmbV&_5{w*CN&`cemn~Mee#G!@J6t`$A}HU zl9Jb3B?tsX?B|Bxp$+m2w?w;Wb!a7pTD-NS>^+4;<5RM!%vjke6yY4Bj#HeiIy?mT zw(GsM;n!79?OMN821E8z3=i?q$G#~{7!7SN@KGiRiFC*~Q<~Nz&< ztaVR1u9i;9kWhF4UGb3Ift=@7cfpu>!tzF0;y$?SFmJl`J4#-)mjSJl+a%6ZK=6DgZ`9gIT#i0Mn6h`)MItttMkV1A7y?0 zk<@!l4DlM4{)z7xmtJtsTNdIj2;VD;<@MPp+hQ*`80LxtUTcyr<;!%oz(cI_(D!Gj z@n@-*tF_ntyH~_r)3$|L2U=sxM@#^%L3Q+*}Nm1f1$=F;=K@y+^;AAbvts$d!o z))(f!hXtt98$P#NxZD?9!b`@_FCSSc)6rG;HNT0h#b8;;d`qH9g(%gZ!JJ$HLC#4m zP?7ib>sdKbX$Oj?IJtI;gLBW?Tto9zeFir!*}1A!E;FvvDxF%b)p&{re@|fiubp?T z#p8XM@|CNM!~}~=T&$(oIW+E@W<@8$mZLZ{)HO9VH{vE`C|d;kiPK63oW#_Mg&=E+ z+J-##pXSOg3HtOS(4ZV%^m6^yt5p%w7MzSRP8*cEJ0{{FuurWyDiM8`=LTp*t4`ov8|mPy3TH9+duo z(VSPV1amXP(FgEtVm;?OO}!j_N%W5uG@SW1TyF)prmr1cEW9RxDpC)ntvZp&iE9{52`EjM-b zMYcAlt2_BUYtP}8SW{mh6cNK=iBk80@8w0vL-O8vQ-Ons?RHZdv}jfdYErxK`}w+P z=}1cF$BL4MCUOvx=lCCTkQ=i}F^cc_E9Kc*hjy%hFxCXyp{PRiAdI%>gW?B@%7wjY9l%Z!4VdNU!epqCox#Q=!|o|lbC zBm79N+oaZqzSNZ8(bn*LDsuqgXmGyXW%kyEPpMpuq+A`%^COyN60L1c%{&pn%jA)& z*Ey8&tL<|#od13~_e1(-fsy^|?Vs9ZV~P58V{ZoJvChf92hBgdnpL-vpB#?Jlv`UT zJA0X5+~E1#t!HGr#2bbP3rlU~(3C*D#rpMY*7TAdeRB+HUM;z==xkQpLTUbv_M(Tn zWl@o`f$De?oBGQ`WFoxb2LYUbc@;^9M5;<_u*d0|7jLcJ5w`k!@J`|t9^Ue;)=FXt zyb``)NKHbA!V0La&9z&jBuO>0rr-%kb`xl=+Z!P%A+N*2(R?~t?j!5#gljQ7 zwNqQIW5O3veJ|u4kJeCQAKTd)73(bbEP=qs9XyN%Krad$EE^wT)}8u+l$&Wi%i=F2 zB!d(*9eU6PoRSTIQ|#foR+@yJUF{trjsjr5p5O++v>N*bIS=wnHxD^7<=*AO>*Cph zK0WKZ(-n5ryP!w^BT6>c>!L*vmr}Mj&;`PH@p<-jm0mjLW`81Ag%68E`1a1@Zq4|q zHq-eD)@5^$?D|`;mK1MY&t!so-B48u}YH@%#guyl`)$MDfOx zyh)7~i!B&f)AE!IE38#x=-G!RKOf?@-OO9|*s~-*#<;-?6me`{bG-1Cjps694uh^> zfE+*$WO49owwjdVO8R>j^Tmb>wG)T^to^D2;WH~QkkCtMK3BmcZK6wLCNUC5wxL#U zVc4T)oTjsMH>0eL$#eL}=w*3da1_h_z_V0-;^*gQxal8~axL4hingOQ3ldi*&az&r z2X;HADV@M$NX2TMFooVAK8NSe?e@dU#5 z%A~skv})i+m}h^=J7wbJ6G{IkuUi1|ye zRVUit+e`!q*YDa4nuAcbU!s0qb3OBr=ITE^La#rhCMTN;ni@#|4Xgb%OG@y7e^<81 z?CI?l1I!cK2W3qI78Q!6O398I1Sh`naCGu~bU*q67c{IH z^Pjq6Z>f14lb4~NkVN*1=s72m!~OmJ_YzAqTW)_B!mkmX`Np*5R^rruExmujI)DH9 z-#_}$f6V%-DXc>&^?xg`|168)@d)+*GK~Km(m$@_q5)K!9#Y@-zrD_XniqU7QGwU= zbX@-L3eo@6l4pehs;)$o&p$DcMcGnGTfDdlF!W;K(J%kI6W~7v633gR27A;P3jO^{ zmEA5LTjO@{w!w~QDhgFkewqNzp46A2=5gj!kDcA!kf4SZ`^H)jG}8r*?dvVYI8Jb4 zJib+2eQt{Qwzu$Y>3zn3ld%44fLU-Tz?%qQ-!e1*zU|$&DZ3)jy%-SO7}s$#W9}w? zMJOrx*7&x6Fl2NhCN^4r7mk5CPh9xBQgXxAyT9h#|M(a$0tm!+s@r#OxAC>a&E_h< zRaBISY6pHjIXEH=cVnh?mq8RX{fqDTk9YlVnRzEj%sb~Av`}ftUQ*X%KPWMrfWgf1wep(6LTIRMp*+Bma!u&%A zfp+okfl`r#Dvv?FF*c2P9ioGgaROIua~asc<$wQzeTD%o|Kla5)(uk{o3oOm)Ecpe z*OF#{srJ%^L4ncGExwbOR)%P0KgUwSS-O`@ZL;(N_go910{iN!@bdD{l<%3!9s9UE zC((BOAM;X_nFdG4;@5W}CNCnGeGv{W1%-bUSUfrgrLCfpostI&#ND1dBrfAve*J5& z`L8eNKQFSr|Cw?5Erma@lyfUG4NMEJClJZ}=M5}0$<7ZNrkTh!IR zAE7+#ptsgbOrlQ0mp5?pa%x??xL#GCSvQ*p+B=A`I`GYgt$hV1WEQ`pd8tXVmebg> zx!?u%sVUip=3z3zu_aHDb4F?L3c~;KF_BAVnV6Z!TTx>>k-*%)yASpfvV@dUMi`69zk>1_Ke07l2SYPnBnoq3C9$`eyNboGZln}@xFisKXxS9`KL$m?o8>HY z0e2jxs3ZxAoa~qK_H*QJBk`VPc-RZcEG13kJUj)WieqPPv(zuOn2b2x7kWARd|^#( z{jF%5OJ7Uvd=J#hli^WW_$VVExlunNd()P8+2J_rHO<%|aXF z+5!gj9PcVftum}8j}9tG^%tuXI)xo@Ff=b2=qpi>LI14he`&w|>my($44qWg&eW_% zXTe?;taq=~9K++H5t+-BiEa*@w#v$}XX^%~ly;V~lQAfp1WE%LH<7$H}4D?uk=C5nn?U?cd*qB3C*}r&MZ!>9l1nMJuG#Db?r}5#-RFg z3M(_%8iz$1NDd?l>NKf@Jce(x{X~^)3v4m*vNEgfyfX4$7t>~4d**5?|_Lu$4rsy>*}Y|F#%xp;`s{4A7w&0$Ahk2>Zlhu2gKZ=l65 z4?c|!j7=bzMO3q1ZX5rvle)<4k7)>m_Yl8?x|-jPqwXbl=zt(AZHiP_4m)jOn7O!W zqzQ!;; z2T*EkMjRpa45N6nwqUhnaV3$BDp8(L*0d!$feSlJHhfGn(+;NUc(2eXGLNa7ot?Ui z`40i`rLGy($4R*WOHhpCM48nz#zMzE^OE)O-Tzoz{`zGH9xzWk@WAA?d#%fyViD3z zvG1*(tqKPXD&#wq0_u^vYf$pURn1L@e(CxDrP=zg6aDY!ws8O|pohcF9Ga=6lv2fU zO0Blk(YB8y<5Ht(hw$dEl-Di=WNQ5Xx?|{ckOC@|gD2$r`3mQ9-qeaE2@Q>OiHj0L zEY3&x|Mi{$+(k5C|7_BsXG+VY?&(_Gt`r)Fn!`s){&SDkoADu%4|bH)C% zD*Qj!>xW-}!gYAeQlIj_mwj*Oitm43{QtivOG6Qr6nCmm8vbjm`Jay^$iO$JSi~^@ z=_7$p4eG$qP)x1yxR{cX;{r>?Hr4N0XG?P_DJzn*hoMtyhO0%+3JURXkTRps^0Efo zM+b$M%S2^^;n@>3O|GNASdV{i1R*{a@j}j!S5YhdW48{(^a5x^jqx})0K862)(BmF zUwFMe;n-2I53|(Hz{8_Ak@5QDKC@V@kpx_61c1~%j=Rn6lk#zidb`#0JJnX_6tBol4v%9aqh`+e=uXoC?d>1hP`40bFuVVqmyhp544LmGZ z4J7CfIGkUCA_c{M$bHYpJss0_9NZmU8hHWSW4+_!4GKAo^vx5i?H+E*YU&jFBF1Aq z$y?tg#md80Z1KOy`13kCCb)ALrc762kVVnRAuFhLgok)h!no=?xV z#)GL)iGA>O)U6~J`SF`V_q#R=z;~D7b*fsd%~RHWXejh&so8LSOll{UKWExGh+duB z+PF&k*DNLv;oTu;jklLs2K-E&H$nt?RyO(YlRJdRr&^MbijCzKd{~wNnKuCQLPAa5 z&M8S_i*1mvgvQ5C%pf0;$@=ZeQ%goKwX}Qa7$+Lw`W70=1f(*jkmmUE4p{HAQQ28z z6>R(ADbfK;k!a!=3!uRqaNvy&68(Q`gfb7rqLaq6hx39+R7wgdg;GU~ib3kTw?qGc zgvV8D_l7Xhs=BX5UI0j2)`X`@Jc-LKqbGx#7-T*Zvn0Gm6rL*hiCo`Z?7Pgt|ILSlD8UhBZg?=z1&p%xxe9c*wHZYNMN^251X4r46i( zsN0jpq9`?15Q{*qJ_e1JUJdHi^lv84R-a|&-C3ft_6$xTK)*)P#n(lSLzMvdtAZ=7 z9bB$A-ot?)PL@G#4HirF0zk_>ld6ZgVk+W5q);r{u-+|cdj!_w|W3H|VG_`iULo+`FD={e!=Sr1xR^F4Es@J;*r14~a&0f@Y zTBZ|*gnB9;9X(ofz~1h;K>bl`#8s(YnlUDx5YpnRez(6WRJqX=z$%f%DmFRAAXu0A zVZVBVf#}N@!NAfJu~Bmr9<&|6~E^W@dfQrRq%@CyBwa%SRP z8%s7K-cVz!E%!I&1dH#nNwrNe8S!M!GT&HOqzR;uj*m&Y9NdTqZx$jCw^>tHV1w$SxU0i(af88AZbzdD4 z?mVgVdN`smT-v_;jvp}?9edFF5gw#c&*#<8dQO;9-dhTFGWI^Dja7CpMQG z5X*L2sLaL&V(<8zGVR3TgnoaX;&1}<1WfnM9gl>v?sFLBgxI`UvGa!s=eyH3BfVCj zH@S zECm#%Wr_8Kg_+~o$@LP*#1lzEgemd?-APDvh7RygeekIb_9M4dsbBmr9cwI0g@TDpvAlM8t>zJ+3 z9H#AE=eI)(BxF~=m{mXfmZ@K3K8J^f#ua|=tN=y_9|GMkQE+9Mxwuv&65gYrf=d)j z3(`0-sY>T67mQ_w>Nmm`*7Xb2D2m_BdwDqfy7yS`qivO)+&nicD^0+2yXkF=i?2(G0S~> zK+v;oU4S+58A=5Z+{Xcv^nhR*({!P=sfowg%|(o%%@LVZd3Q9``W*{k`VMbwl{&*b zFSVK~h%YyTNrgwJjuDIPh}|7cIczJ8o<6@~xLKn=G;-PZ0pGYIRmby`x6c6xX*)f; z^(pp#3!9xM^NHD1b9`g-E)Q#5!QRIGMJ9GvTg58;VL(7gLqj6U5M9-5jo|{>)bvvN zal}v@tX)j+(y$^{kYa4sq7`IxvruEpGFw$M;FOqS-ezHudb@RoUN|t=s8M`$M%ung zP5xvwR6VuOT;3Ae^PtS1a@Z%2p8s7=t>Tz7iNuqedb8B)JrkjyWwMk9$Py~6$Fx1!Jn=RzxsK(8qaY?&fKFmbBOUN+@|6Q#IWQB|9I?>?7EZIAlf zgU@Ke>O#(+`LN5wLkAO1nyv9^Fo*+<4MHB$@;B}DxkxGGZrbbjObWgfhNR88rCU2- z5Z4?7w3p>pmM3&d-E!Ojcj8|eQ&JIK)c)KH+1%=Lqm2_f+Dt($HVQY90v zf&ATXJf$#ff4JI%zzF)C7Sos<{xG!jh=9-VU6)<&PZ_#V=)?9#HG!Oqa$3w`6cj|s z3qUS1B!Sg50}U>2^kbJsX>> za!UHVpu>8nW$r%GvRp*urLF-unEP6zQHF(C0qf=o1M9xxuXp*UuSa5QL)x#GWR~U& zH02AW@;e$iVnLD zk{bax63NLp1~ZH-$a8;=`mi}%nb&3%)}sB1hVUbv%!dw_TQTB5qN8V^k^JTC(%IlH zmAWLp%I3F2sk!4Bw>s-3kWe4U1pS;GU_WRK_aZdwA&_X>k1CcF+$)W?f+U{jv|l5Q zT+e9r8h+kpqTQ`IHQXrSxjm^afrnjc)yEewr;GVquM>rM+G-Mh!bhub4yk*QEFZOAqkq z^~j*5c!XK@a-4Y<`98ZI{LW5Sl<)+n7LK&DSS{*3u15#;FU-c@AyRUjHh~>$*&boR zRNvSgO=zGV?-YHWMN~Uck?$ZzKs0r}EPKi|0Wye5Mfsqp_(%vi1kZ68n?M zK~m;SHrzr#Tr!Dw59v;;MlBe;&J8?;<;~((p=EnFE%dz|1*yvnjm>y|KL^o26z!BG zj~z^wrWe*zb&v+1AcqnnMB?T^p^|?mj_5TSRzNGs&8Y>Pc0}qvU{v}Fk?YHZN4}Xb z6Ao+35{votZv%Q2g~P~I?^RnE1lU36QC;b6;hkX~l=D%fKbZ>-o_jaRg=ssQ5+i|5 z;;Qv0%3Z2LwlI6hldoKCe90e`2VnV{1Z(33tm&;g1nBaaP_z>t%unpJf?qVV#G+V7(KeY zDz&`O;MFm>d|aRen~)z66xxe?F?IxP<$S#gXJEkJ;{y{;DG7~NF6>xAa;s{15o)od z)dolTF{&Ct7nlmfhe4?{n?n6P1G>-48oiV-lgO~L#w;MpPW_uyX6wO*Z&jtABkhUp zKKU|sudQhlSP?Na$e0)cyu0vreL^l`cJ@O(dvK(j~ZmFwI3pBExQohy8QnWtP;<9{3 zEmI;J;FglX4%s4~R;||EA|)0k=9sI|#$**A!i%I&kX~ zrs~Fr&)w^AI6Yx^8it8eMdL=YN}P(lH<8XxtLqiPY=x7(Cz(!BJf$>8wU5R_g6ng|p4Wgt42{r4>2d)>=Q ziw!nBl9tLwcI)(v%NUFf_4oxsTWP?y&XNa$56 zZIC$uSD@wLGauG)^h21$3H+c-Op(_Zq!J$2(mv{kW~62QCFYALtQq)r_H{-Ow5dfT zeHXb_q0y)I_pGHYjfP-pgJg*2f)rCkJ}jT((}-w1UoW^1nKfJa(%0JunTbZV4FB4E z{_COw4-&(!wj$$QZN74XcOu+iRcBQhxs^iKF!u*MR*RmvKi-0kK2O}9JVp+b_n46@ z)9{Xwj{+U{;6#OGD`FtFh!)Z|YSE+~fXtFSn{>!vy7_y>lPlFb21##o@l-TB@gQ)Hp`OhU;dIz6IO`fte(vk= zW>kOhDP*K1BzVe2IL3>TRmVgr_ai@Ft{;0HnlF6j{$S#@ku+glIJ4RfH}98cg3feI zhXa*ys6;TlEGchAIH_44opTo@;QGXh6r~zr_YD9PD#2;|duU^$>@Oga@4dUHE6qv2 zdfDv%7$WyPX7F-4`AJFHXUl>t;mSO5e!Z9?&pYVo7|k3qT|WKvnswt7x8vz#3nrsT zTj9VtvU@_fm{UKY(wh-ymuK+Q?eL-aLdT|@`Qja{@jIxh);k{QnA#C%2!Dj(CRuz) zC}z50fvywMt2fZfO)0ax(-H+8>lR|oXjxmj$FMkDnD1S^BB@MmQ|jzE{wIMzM*5-? zC?x?hMTMZKv>axl;42I`?bq8K@vE0GBZn>L7^Yv#84#@vw&r5(jrh}Vm(ZSe4j;Py z6QugCLbPo0tDd64rp~Q_FaG)#d<^4KS021&F{cU{GM%f$xDvD+V5m1o-HBp^~lRF7_Kj0`gvSn99a=i!};^mSKY2jsspLFWEPXvO+kZk zl)83>r9ZOQ6=ZZSSttlT|C(}ZF^Xk3(@kO>v$g43tjL=)Nv}KKy2wnG*va5(IdIu8 zguQ&?5UR{WYDBN99<4aMJkh?i@9|kV6{rg zgZe6}5QiftecHXDN2-zzWL3m^AaR6m!dE2BWJTH?h7du!Ki<@w(p{d9{|t6?(7Y7o8`RT-Lx9o;A7Ab6_*$OR9da_{PoMHs2egEXEEjV2{k0R~{Tz}8 z$a|m-s(8HD{mbT%xE~daO7{)UT+HL0+(%_NP$cf(*?#na1ycTXGePE-eq!4|V!>@Z z838+sf;jTijT{8>P21%m;Ln@ffrO80PFX>`fNIZ2=En25CM<0ECQV909vU*90M9;= zU2768%MFgm>g0`GNca0B(8B6=+iGOq{IgI~xM}5(-dtaII$ zi7yR=0&NOD)-->}*8WmomPD-KPe<&f5tvg^S#rYqAiV|ucbM=j)=H<%81ioV+s1^WboCi23tyH-><)9#I z+K}UNP-P5F1BqIT2^IJ`VPIf>TS$A2W^gO{LkwX-C|D9ApGO0UVX4#b@QSwN+H`!R z%$#F%~|u4HHQ-OVH>K*knU_2Ozlj=v_lDwCt=1?Hg;T;dOiNBEcVKhEgnT;$7| z8@fBor3UP1Hr67Y9FfxR*QscODIoZ0bkFkJeeB-s#ozVX5qTZNgROIgQEGI5k@6W?O_7FMa&+77Wc~`UP9`PRz=lWC zQxS=4I4j5PI(=7;Ip%N~cctv8^5I;iG3jz$<(#Y6p+cCH&O>x{ zWfyO_A(>uz|51b=W?zN=F)~lFJh8S;XOT*QiR=`Ie8r_7CX%o);L03BCfZqQ!tHM-i9tcr#L%7$4BqF9#-dzkQ};Pp?w@~ zA?Xt~oMlKQ0sm{ML%DuB8sdz=+6!{?F|hLAXWM_m|B8{kx&irzph&6`Xh`Ij2s{oe3uXdgTsa?%O=NoAHeAw3-(Z)m zaHtt;hjJ7IIzntxx}I&vg$30gOG)bCNq+2J86Bdxrz>P!%}z}9cv0UROOWj1;3fwI z9T8xpwLPB02L=82&Vi0*qtH$)E37I3VNdcPBSaodpiPp*gH_5%8k5LkgSoljaQ?8; zXFhk{SI>xr9G`!fzF_*~&z* zjYrZfNke|=KtfOYnWfs?r8ks{SoXssS%V0wu%qq9m8^Ms}+dS$vQF!#S#yT%SoS8gLGXzpk^tLh+^QvAcgGFb!0z z8W~mdRPnZ)R~E}fB7BdhWWWd^T^sKge*OWXT`ZQ=2vUYvP`eCfk7O+TWXW+Tr&l~r ztBp2Rcdc1boT1Z44_W^1gonU*CI}lfgtUa`M}ihZsZu!;XdSCYaDth<0%WnE;dyV{ z43~@fF(=ld;0W5Q>WUZr=C`hZf&^t6oqP4SMEBx~=ecSDH?}fgaAi0 zD}tgzgtv@@@Rd}r|DN*LbT(oB8J#>LhtdBL$apt3a*A=)BonK7)GYkcG9OVY5abv@ z`jfKGPmfzi2F9b+^OrChmU=Q@Sy7RG-x$eHxkQco|e&AM%b%K?6~qA~J&fBe-af z5pqsac{D3?`Wzl>a zJ`wrHV~LH+u0$F@UkpmL1IKEIhbTh7?Ol{#q0{Q{z6zr$mt8@bCbJno3G`9$Dm0rN z$>V(B0D~;O^ovm_oX@aA>41DSlc?6qk+|?DN;%ta=)B9^&g)Sqg3Ek6OLx?y6nAckTPSFZpBfhue)IY!Y7(sakgwLaIvH z^%yHo7*nZw^a`Lwk=frGkO)43_&miihO8TL5r5!%fAxp{Da(b#+EZIkSh%m`P}4N%x1k_ z1)!dvzj?ks>qSl}M5VOM0<3@U2?$pOMH@Le@$eEDTgqf-+=CO@thOlXbj)yk{$?6aJ5m5 z>&h1+=*x+~+XdIjN_{)0h&78fz*TL8et=m0)yI4E83A5_it^(M;PfVw`IKP*#rUD@ zaHTW^sb$5m!RZOP=D>g;prg+(qSm}1;4I$gX)C!G$CM+5Kp?};_l@2DfcSl?jQdfg zNz)g$!!*s(sXDK)UxxiQ#mex==M4Ri3k&?m$*Ss;kAQBx#@^_A*>chk@2>)}pMAM- zX8B(CF-pBgG_P;e6!9wrKC_w_gdqTpDepyW*g0yvY+=vNC_PqR-4>beS!-hu86O-p zknI+-d#*NQEkprIs<{AjPK%6o9IXJoEXTl3KDtm87!HF$5!d9QnELqem^8e;9Zw~F zwm`~8Kz+Ypby;nPebKLLtNwP)H~Q(??sdX9K54HL&*(z^tn=SI7nA-p#NYWGs%rgj zLmcyZsH{%RUK~>xLNlwHr7*G{5>&cT29L%uecfg{+0*%9A@c@{NKJ&;R*3pxPC%ap zl57aZLX9&hbAyzFLv~|hBT|q61K&L8+s06mYqQ1S{iRq00{BQuezb*wX2YeX)3_e> zT$QA*!PH$CR952f;GF)8wzBv*h^np~_8aH83d@Ip6(Gl}M6;SB5}TvOD7IZoDSe7w zYraA-!gZvK$)a^*w(r2$1qGW$(Ek_GXw{d`SH4 z^qKQYUE{bOX`4f9Z(-pats!z?w(gSt><)uPX!+gZUlegTi!0%%#zjekhzL((7_wew zEy~o}G0EvE#LIaT0WQZgc7;yEG0rgJdskfMH}Pq^_4N8z2sG>dVE}@q6`!?F&W!Eb zCE~zEAMH{Ey;uq#ty>r#l;y^@s~1(J^tq0J83d4*=OLBZ7N(`| z6+Koh%bxMkbqXwt{Py&Nq++{sV0vTu=rC@0rR%KcpgbMrtXEMw)W_$fYraLeN^3jJ zWD1_;+zsqDhaNU`LFUGqJc}6`kHUDIw##LKlFHjR zOJZqMw#*BR|IMDvK7uN!{KdY;lS!!gbbD4aH^lG{07oL5`OS+V-AG{8kYJZI17}RP zN3kF$>5CLzJ_B-hi$U*0etCn+wp6QKX${2a_x`mRly2JPWMD7Fv&ezbXp>@!styy+Rj@44xI?_btM@zEe?Ly!vZhho0>3O(yMa!dXxdBZ~KV7_v3pZS}c}e&<7467I({jK8s-x@O1}Ui1glD-p|5|FDv9gCU-(UT+%J zE$KafcfDN9=OWLfgixgs`4^A6C~^+XhT z{}$LlJ`oDFN3#-YugU&jqbfL!GB`S_-1+5J%4bYg+4I4E3zFUkRK++$z_@9d9?`!p+S0;=BDj^q+r5fn3 ztkOzhKKxn_R1M1f#c4!aP9h0$l8%MgkEr8^MMa07WPmw z5B~%rU%GMs@B5wB_@s|!^SU!h!|4Ay{=l8W1*`^aBXfuN>op+n@1Y&<1{KNX0o78u z<_#HnUWUwf=G8izfiYb)Y&Ws@@82^n&0gbi{_@rLRW=<mg@D64I1)TNH43g{2fP#Qw$FZ$v6_w`vKl<4n6A`!2fhm}Ee-$q z^UAj4IH)Tvjgs3Vwd5wuc-u6=yRx7US`@m5&9xR^o|l^B2&A}8Zgm157TjgJS_9Ws)6 zMkqThjwj8%NUQmL^{PKa$C>slafXGh6;M4rg%-U}esGakd~{2Yd^T01l}@8_z&13w zoSa!)Wj{^|J3d)u&3V+=N7dr*7wr>uyj$kywl|&2_enJG)XB4Y%w%nQOtB31f}IL? z^P)z77@Ob>QY%^e6q6cHiBc|o{aWKV-6xsK^4DqDRWJ5OCBeCIWLHZWQ;@Sll||1^ zs!@xXzXUBkm~x0X0FTXttN7rk0RR5I$?MBoS_qH9^2TNBAby> zvP#l$e;g^^w7*X>Q;E^7xitDU4ZBAgIbY8By-|fMlM7#yq>mz))$NXtcJR~icagP0 zu2un6heeT=`e@Gl0exPI;akSIlOOHILw?+pVRz0KaC|rU-1>>k5$II$QA2%Y7|*lJ zhDYalWLmq}4L+*aqdGcD5*2Zf;RgS@rYt^CW6XJ4Yj;=e+#+p}`r}FgVb?p_lWxN|&npO%01D$%K zz1_12X(PJk=;%nUT*;FhV=hM)*Q9G7lUP5N)kn*0l4mB-qDAQkxA+0&H&e$V49H(i zCN)(PvKl9%t*wn*!Zjk3PqR? z^ufm^sw*n#0n8qGKdngjFYYPT%mXSI!dqNBafv9;9zwfLh@3lVUVxX=F&D zqo3^r_uSnktCSXhbY$&>>wSH3QCGt`WcF=rCNGcNVslNbk5!$G=rXasbyb~UF$Bz0 z!gm9<@YwV{l~9?J@VH6M8m#nv91yd3-G1LU|JhaqBg9(~{TQ-h9k{Skg`PRr(V4(V4d{Pplg;qy1k@G4PU=t12uTCF+ zbydPcAflnCW!GE*bN2R@U+_vw@K`}@HSi0u7LCi+?C+IWhV%a*wNuh+TmHDG26u(X zDQxYh2g3<7ev}mY+t$=42--DPQ{*&eObE51CWq%HQTf*Z$B?^O;^feM@O_P1@bAGJ zKJxj>r+X{9-&5Ei=hly{xNjCdh3vAv9F+@gC>g4n>(SbH2h{768E?iWs@+Is!Hl0w z4xSog=ABOaKqvC;>hg{5`q-L+YXN;uk${`$ay|$l;p>sS8;_tS51+< zG?-)jx_80pVSMEQ<!PgPB8e5|&9=eZYk)&I>cER>kluV%eBWT>e+ zmjJ37eUS=enZ=j<8Oj3ItTzNPmb=z$mQJfqBKWvmyOHkHi)>yPL8s9tz8sHC3;~l% z_j8feCv-P8{--^3g5K4d)2=sUpUlh>zja^QrqQ)~CW|`eEbF%34g&Zbg*-O-Nt;uL zpz*WJ07^Ji74Dy6-=xdWrvPq#!uGnP9w_bKWvJh8-9Kp0sfL~ z@Q8)-S&9`FVuQGOYRCgo8O%Ah>xOEz4?Q~7Ht_kO{MzL@!D zqJ+_17hp6&IJ4!YP_RQ0wl#WmY3HR*)lEGE_lYTK5;hI3KR!p%nrCM9tY-e>I>T*HgU8#A*X;rWJCV|5K1F?SniehQh zL_-F9PSZ{#-fiY8<;$u+TFy3UzG>lLa0FmBykCJj_A4$ii{{O$jjVB9yM1_@94$JZ?DTy}p;)WhR^CT$^kI^}Lx9Wx^zgu}HfXA3d5?2kLN7;H^b9%5riXqTntq8f$6>YpLVsfwe)%yiEWRo zFp%pPo@?5~0F{v?AjVsN&GVJa>4-|eV+!<<@T0rL%lSoTWXj{#rT_|2;zGh?z&cU`dd+SNu;iHgZaDR?2wx|2U zMMRlFB&>XUf^+AZR9#vY_Vf*8$L%EnTVej4p;W& z&IlQ=;}`9Y!0mG7NRCjU9PLOw&1EeCzje{o9CWz;%S9u=H#J>o^GHJtZ0C6Ybp6_H z^I$rIIC&<5nQoWCBMv0gnjraJofnD)_4kOab+DLrki>o29b37WF7zemZsxvdU3*=i zPvE`#{WdNoh8&2vB_LBFZNWkvpPxU!^}P#c)L5nk5U9p)AD;&VUQ8~!8$SpWPBB>8 zDCK!S{tlEk&bNiVk9pr5S|fgOe#4R#d5;{lSPPKVPA?;ssq|YqrM6r!^*SHEq#`Ig zaJHDaO$V`O`0^m_min@6_!7i-R@O!k{{B$DbUEb`#hrFCC!lxVsJ27C_WI&Biid`h zfK0$^i1p@(OXp`A+`JchfWuHQ{KbKloy0+3Nw5TH%BULRa#_lKm0nd1ohoA5vrH%E ztNIgQQXdASicCb%k=_8|tyDyZUWd4tBrB@;;!~zL6>!+J;`*&kAAiM|d(-9F+#^PD zB1C+!t?0Y;Sr;k2>hlj>qM=^iYF!pM$2OWl=a%8sX_xUd1i+yH_7oeQ4!OR$Hp}oX zZPfXnRkQ~9ljBw0e!o}BMVQc6ym|LyoRwm+(qOgVUPjHC=-E-OS45zX0?piheX2*n z`M}*{P%FfA9n^naFS$ECP7^3`oLtx(9Zi9+z_ibA$|eFki!wzbrJgu(oBl*E^wYgB z=rF1XhT~yIb9i7U#({>aP8W5NY2f0ljc5_`MqF-Z!OpuQj;wJ#ez(wK(i(x|-F_eKJx|*8rCVA*Rvv7w%2mI9H(L2J z9vXv!u}){1e~c^Zbv5sRKDvuOc+B35EcYWBn{Vi|! zJ45w?Q$lQiR4mlm#ck86Nw$gAX-`g7Id>B^*($LRq5|Ie5s4YJf=1Sh4GfKscROj@ zQ?2TCGHIL(BP3n-V*!uGA!FDhIFE>@Ik}z^>h-yy0-j@_A|%D?YGn;^quYQzLk*Yt zLP_*~i}p?H5EPQf+s;?zrRpV+^kz`>m?|oh5m(@vPgQagdBvuiGR4TXCR^cBf2;3W zM~&zy!+eYeO=p$L7$vr}Y1B$kt8~Eg~)GzNNoDQaW=XiaY zj5Cu(mjo2xV|ellGpG@5L%+U@tOUR1X|@VD;;$Ed2SVaXBm0D*GfWiP@zouH$R^?~ z)XpU?%}V3&XCp2pg#>k@&MKCT^B|Eaft)a(;zn1?8|YNd-&o471*~0PL-vxh)bHPg zsVNimm-gi3CWd7Ft!7{RQ?nnFElWMZbgIz>VCW(sAYgQIcErV|S{wnU%~n~zY4~Kx z1W4qB@%<&jLnY|C4I$^c4j1?l6&&DVdqSOqH8iuJ1Pnpji-m)OunQeVg{XDI+6Gy< z52r8uW2|Nojbaa~83X)MxWevrT9RI+X*=CoP-zX_kU2Jj+G!?GQvRV|Hb7;>h8X;d zskj_A6rl}OJl}Yn#9CZzbRJ<##}>T|pMEb{!}&H9B-_d~+OLzMujr}bgyw~ygn~I} zr!?H=Jr%OJ(V1#ZSB%4T8iw{T2^diDQ5h^KkdX%@KGS~zCoC@ACzI*>eZhIWdpHn_ zJ?B(xDL72Kz;9Z74E0>{u+=^`$No)vN%f$@gIw-4y6psHdei{TWutFXh4OawJNr4P z(*)Lf>p-pB<_~d*$K=gPg1fX@_>>cNZ{~8IQ_JX{xQAcU*%=V{)?}qcwx6_bdRl~m z0JP?MHfttwuTyJ>xBAt5s7{_Nly9XCTtTKVCSe_^x?Aek?zKi5U+7l&g5=?FO8n)6 zNiYoH|5tVX*#)lW{OrUCT5tXk*|#)ykiaV2wL)y_xe5x@%FQc z0mj8AEC|%umGYY&@Mg3CDIL4iWvN}#F91IHF0mR*7Ed3t@eO6W+}r^qd3zmQU5}rHzt`CgQ{{pNPh7}h z*rxZ^6jNy(eU|2I`s=Ql zFNr6hmWFM;cQ+`4d~jJf;@C%veEX?wWYc*vcjGzHj`Tn}augn9LGJA!ygU*=MEk=+ zU}a@!F*cVIqiUq-`QelsWTZZWyX;nq>_tHphcsL#)VOEr8wKx0@#V$OHtu8IA$9#0 zHC?9|9?HyCwE<~c**doO$%X~G#R^@SzUqwrO-e}Ex|-A^>~Xupl5zJPm8>z_;(8e> zI4LqJ5jm?0U$fdb_GhL5DO*U9e4F}x8s@=C6%K3Zk(A+j1P0l*rKK* zP1Q=6J2<(nf)cPX@8)_7-_vdPdV8md6}ll>Ex+#D=B9nv!Q2|`&!x*3*C1Nqtx)SckkUd@v)Qm>0eYM+o9BqGoGI} zV=?1WuqtQql}8*B-00V{%lH7l%LrVO+}y$x*dt8b;NzVQM%|^`vdha4x8B+Mpet{K`Ro-FSVg56>=kW7qi=!&dWF!*!b2^;1->bwhlcxR)bKn zU~CmEd0iJWcJ-htwfKkPLfbkmou3xZ^An7sTrfw=+#{hU^BF1mE`pI6Ir9;|tMzOK${agfTQX9wq@l-~K?Bhp=Jl>z=_|=8J{PufcJ?{U7 z)F7zFKO$Zyz`&sUaI>$RYXW<+8tctVPFYh^9bHi@@z_;ku2Xu{e;4t7pT<+(ZU*s@ zb^AsUd9fr^mY>##R^#zY0@Fu9!PV@Xi}hO1?XP$y%b>#(y2=QW?4^M%%?v*I!h13Jgn^-Q#gu@n&zZ zaMFR;xzHAU51t&1w%3pKd`=Utt(q6Q?42uVrV0aWLR6JKU!xKqph+GA-me_j%M-8< zrTv>Vn-x&WC#IfBz!S%0#*#?xj^pWTu)7^L5X5D~leL3y7gpgL8+3653?jU$&A;K# z`%1LudZtQfhk6s0iqi)T(V-%3Zf;TlikSwI#lG<38f7lEbT+esFy*Mm>~PzXuSS5X zuC!slN@j1ixaPC!3^aGMM@#dXDZl{9b3fSmCIM|Z;E%Z6^=mUu7lJfA1Q048&e^f1 z;ja2T+VuP4-J^r$@m#5I2%A4fZ5?mha9+KA{3=t~anrI;hQdGU3;0H&;UAep`?XZX zett@=oocj;KrLd{0~%&*9z4$G`jtDxVXg}`n5<4a&Txu$HsscRIHf*Qw<~Uqv&t?| zt~RvV^_Jy0FwxSh(}!HvoJM@^3fo0W^TEVlZotLLQ=R&2xZ%+=yhPqt#nl!5Dg2&T zoS{}vK}AoQx|UqXhtuCTho0XaV}mTp-T@)&<@|jqR=>Z!Y$r<_A0$X}GJVmQ-P%pQ zN0>81eG5%i;`3{&655WR_hr7frD^kng%!sKcnXwq0R`VL8X*yr9;Or^8xitGG%Ws> zIyWyyjot4DP6}X&1rNtuF>>)kF>e#dt5_!(at=DtFTvN?Ot&?`0 zvwMAmnddpQC5diLAxy1Xp*Pg(cB(3{g?}$BTFhZJH{5=^s%fz)G_N+2${~Wqq$m%L zr{V~!3C9=Os+)Dn+Chdd^<}5qka)f5S<91lr@C&xi36Htk_omoTwe1ikr2)imPiQi z!Lq0CN=}bSJ=Xg=(_oLu#G{81=k(2Tm~Apjx05mH)Mx`|YP9+mi$Y=19h%fNw@Wnm z40<%+s%xVF^@^WN#wSHiyH(0U7iEzuSt%(c1NJd6pUKcqsro1a&p@&7jLD6wK69ak z`};Tr`fp(n1r?0i(V;}#Jz7ilU=AZn(CEdne6Q>AKYGpI1)r|e%9E{3o4nXK5j@m8 z?b_Cw8(_V?;_1goQ;Wh;_L#1lb$Gt&eE24LYA(t#(Sz7I^D2Ee-qiS{9oT zNPv4j@z`JFP$F}ZFBW%6U-r7BH{w>V9%0F?RQLC82dwXxfZb)p`Qz8o?&C|lQqr*Y zGR5DZrByUC~XM%B-!w2NjG4wI5{~&r9$Eym0g!E&dtH}jAoAm53 zvJvPAc5Ui-56=z^hxs!iycK!^L{b+gojYO!! z1fJzZ?+t6)fW|_lVqf2Pmv!#+_!(7V<}yog=||H2d7e1^UGci_ciBd&u3|JlXxU-FCdc-3T@q^bfeL)0n=4*OnelTeQrSP++DzkQnP6uE~ zT70*p-jL|;<{RC#NPzw1ZKzG3%aB}h_gk2c^FbQeP3BO)uPl@)K2l4_6`Ow>R1cj~R76!v`s6*zdZA6&8E})8;4BH2=Uv-D(Ec{PiAV)A-zLADF`pQzL@62RND1!Ia z`suGR-Bt=Zwj~e^OmUShr+po|y{@i~$qqQb ztqaK;VWp>3CsrA57uD*{SBQbgi6@tC65h7(Ah&&Mx_2ACsx<6%fnILi&ox%Jg!ShV ztZK||=HQPxI?n(d91e9io=SegfiXO+FW?uWtb6jE?B+lLT#|31>&i`w)1VCR!7Z>k-X~Fm)al3g+B%DyWW6D{XyWjEc6Wy<@P-0IrsE zOTM7C(=ZbBLb5={G#g9eJ-wy&dlra zU<&bpet;^){Dpy84o|0M=99a^kq^M);3=b)I;+h)gra@i%)h$e_*+H#Df{U8n21b> zaRz{e0>0z}x0 z25I=bT_VoofC$2WnxXJ@NkjO=zQ-!yEFt?mljx#ACZ|8KcR4`lJvi^?hxt(mY*(bB zp^^8j7HvyVNhcW^_Hr2hs?eH*!)kk!QZs0WnN$7Ik-K6ZG;Uo}gnC`^$ySx(&Mx=K z7Weq^&M2CF-djOcSJva`_mAFyJxkaIKp$lvcm;pUvBSylK*SDa%VpGIZX9J3Q@3S? zsSv|En9|eGBoxXghkGcV|FDai zpoe2tYSBc3$5YjYL`lN^#37byo=b5y+t98~`*m?nd9H=zojMilQnHnIrIpWN%K<-$ z&rE|4?0~H;;w!aP1nXpFO9UO1wAuAcISoZ&o`jfb!H5#k(GH{iEI2xBS4oKx_c7w} zq`kEJVFo1}0dq-nZp|g*tqVivk4yDiQ%RAzY4CRatPcl=_^kL}DKXa+6ZQtd*EVk| z$^5^doLyLQ$Ktu5k{tSPd~eUI5PqD2+AhiAwx-1;>vnv5!vXYjA{C!h>87P0p~sK? zAYMyn->J#`^+W%Qh4T^0d~Nchj;19UT37#P{ub`<(b0|7>gGR7Dw@o#+hCTU?-0m@ z7Zvx=bh0>>AZsRK6OVy7B|FhBkKAZCC+I*&S1gI`k%pS2sm~G;F}S9t5p+foaPAc zr?d28nws2c7;G?g4XOSL75o#4;X4lSzENwz3R9;qqPGcS89cvUSG~m1(Bmsil{L8j z^H&PeQ2@NSL?mnPmhJ6r8lcU}pr@yIF^B!i2+#zsX}-?=3!MJ1XB#6}4-BVz_|78l z`tB|rppOTd|Lh*8&(V2BMSF`--FkoDivHu{*xv)E92rn=f{lxbLqaBwl=cBInrY0V{YOtd^K;--8}CT0(~+Q{ z?xdHx8XR{^PfHDEnR`j5tpaA$^;IJ=0EB-N1e?QQ% z`Qzty1Ixboz{bk<6Hu-PTgb(m^2%7_{>PK5qlQ$$(+1mf=o&dWU6Q|yXzrsd>gnj{ zey=c`{Xh736D5C8VJ&MA2bs4&#=6I7pwbsMf3l@ z;-4f8{M`TlJ24$?DUpSLP+MssJ#S9p%gXSzU2NVy<%>t3Y#baI@~F)*!F`i-1UL;# zCVIg5)tVs#ysZX;P3(Vj*-cn~)Yn*Ison`AW%LWxM#)!UQAsz)OR=zjZV*`F^Lbq5 z_F$}0120Q^Et_5n1&aa}j5(^WozCT}z#Ka>oZ(^((U&`?vy{LUtB zKAuhc!xTwwZ)ib434FOeeI1(U4%`wK_)^wl&8r6w34??mhs^)Rn9PpsqfMvv3?S01SViX8rzGELs5DMydzdU0aF4ejFM!g;c!X*Gk1mNp6C-$hA6AFxtF@{Mp;vUNQ~IegE@Ye2x1rb;p|{?plc5!%Z^fLYX+AfuY*cKRm5`7J`wz z%{j2ORuFmo0+{3nmFd;$Wo>SAQjS)STBHAM@(KYMvZ#jH5p+4u2xO`M7 zQ;Z&y8`~(U9MWd3yTpW@I*SvlYw&>4UGn#-S0++_RLS=CLs=CggJLQukWw^=g(_kW zpCd5r-ct{nK?E$aBsfJKOL?k4oM@S}})f}{b8X((>-kSJ5hGHcRHY4sZbRq3S z@OhtC*9T&c66TPO-i{xJkhLnK+A;c{hi(-;VVGT<=zQz24!oqs2bobDJ?>3zKkPJT zWo3<}LS)281;V#NF^e~&@HxDad|K&{se5abSb5z;OUgzz4V$acX5m!49A*=YIR<^q zRUyRh#>I6$H~M&{CejzgX*8DOoASCho#;-J>oxKS|0&DSnO-LmnKY(U>V8o!Leti^ zq8U5mI`iW4n!~2bESP%xQgV0nw- z#&W%edwY|c7rz6MB?_yeb`~JyptS}77rQ*S%00{6GFg$zGoq21tu13CIzs_|_Z@$j z58C5)Y{)LCaGMZ#Xj}5?ggE;+xa+!xnff*rT}+SfTYHB8&CiGha(n0($E<_vTx{1u zE!@R@a`^WAq|rvfOYxb)sJa0(|5)RyW3B9bm+C&Pq1Q_v=|Y2d;d@3}a7h>zAt56` z1&^&zjE#bxyO^uqq>6y>($U8bac_9-5+d6Yf<2n$kP=<*(n{J&u{mButkKG?V^~uQ zRT$@ctP?2!EG>VP;x5cL%17YOxe_0+0Kmmv3CdSjA@?j^k2aa_AGOJ7wD zE(5~)#^OpLW3seh0Dih$e?)V)P>Pu5AG#dyMByS;u(bT1&XfGv8bnIkL${z;rrRi_ zR;H1!M#U|b9x~y3nV!mOJ^>NJId=o|^AcO{DP)=d6l;I2v+}scWUV4*Ub%1^=t(BH z(l(J2@H)@WqX?p82%M@BIJsT7J&)93L*Bb}I&~u8eVSJjlfM76qt|SF7?Jb7?A$Yuk02c}*G^p;vMue@5uGzbQ*|wubpc|0(?= z4xPSN^`Lu+XR*6R4yhqgMq1-4tN3nSv}!xOeuvb}(JCD}WmNKLTH^;2Yz|$;rLN&~9)zbLv zU^!d1-=es;&9_eQzUHyobw#ZHT$6GEcL9N=L*(%$E?;lN$JJZdHM9-TR2Mf_c45X& z9CI+81b*<;H}XDdyQrLlf)tqQ@P^rHdtWC}b>8JPywLpQyTSizSba3xte~P|oas=7 z`0Zq&cOD7|IfDjYWZ5NGCN#8ALkQvSw?%O*3aFf-FYkVcj`|U~TaWbP`M$G_d@dT- zVkd6qh=9j!7?5gjc_K4b@x`N~p>LyKSMevuWZP9Ea9y4}-wGrE=|dlWd^s7d-Rj4q z(iT1YcN;C-M8SLCYA#C-`ZjKKzpC?vUHzf%z>qB}c|Hpe7OaDKG(mFh`7SNTb8WEx z5MV&e{>k3|+l46jSYQ7kr0x0U@!}_Xw1nULP8V5}VPePKB8gxLvCvu+QPlh}^NokF zDI-;KLVoK|F?MVqSki~MP$jfHg*YHLO9(d>0o4qM-ut6XEgs}o&3rkJ7b{u;xNlwJ zI5}iN8xEG36YbjS4r-J5u_5zdRLE^V|L4(uUo`?0Uv;aWTk=^iu|Yv~(`^(N#T_TU zNAqw(OP}13YHNnnO#C?IvN-#|(C0@$$3MQal%w0u=Q=$|7p=n@8@vIZ)3NRn9;yz6 zV4H&ybCBq+zwI+9#-d&vu008HTF)DU_(N5cDdiK?U+%x}wGqmy zRAa^Wb%ip3$fNpWkY}CXz*%PNX$9jx)*pU(7Poity{ZW zTe38p)IVvzmD9C%m@*q=WE%%)R3E`aC8Q^H#maeR<0mG!$v3A0uO7;p?PTMx`;854 zAJPVhJV7;A_m`W6SuEj&s8bDd`gcb%4Xkx& zwRFpXTDgj5XNC4+<9oxW&eImF4yb+n#TJ*=YO|_EdmU`7u2SVfW~a{IdV9ICZSuS? zq1A0w7n)g{1CdFR@%?G6iZ^+Z=n=AmjFGGLQ%aaYsNFo$&<-Qo3EU1n8cs|n>fM(z zI&FzFUP(o0Uy{R?+g0ZK#C+YA-=qcf??2VZ7h6gP_9awRDJWA89Rr>yV$N$vRo|#j zP8(Gd1|a)_;5KEn*Gc%D`q^tg*Xd$M9mKDG+4bIDP}>TTzF$e>v}0fCatsX1AX;fOtv;rbgRnC^}a z8Wxsc^qE3XArKMJ+@IMvrSeL}# z^aM6H<&Cg4Y;crcb6MjNOLaG_w~1vWmCOidWdcxjDXb!F$MDR zwx5S=$XM~=a%KSTA_2^K4a*|R??Za0fqNA?ey*Q{iMl;J z!*|kYO`YB_ZJO zDzsQ^@me#}itTBc2+}vmSDl_Io@2mc1YUp113FUQL%m_AZY=T`t-CTIXIU`OgH-97 zOFkYH_?|H}%JbDdhx)wEb-s{!yTrmge+!LZo+ZDzm(%|e4`KI4(72w|hGZzWd_cZ` z2;&jn^8R_EyH^b2E3-`&FJH;cj{(xrZ}C*JP|PPx%T_m=2Kr*U9h-!2?e0{KSQxd} zMu3nlCM$Z^-;r>joX5i+K{JBrBkSwlSuW}`Q;?HP6&`MJ4lf#M`|gUXbnapVyZF0* zQyg{809fL~!G#@Gz0uqHRJMZBkLygsNtGz`(1HlTzI1vaje57@Mw?(?4E`#VO1dz+ zs!%`JrA7274}G6))s-^lRglwz`{RdLy3PO;SR`P1iw7)Cip?`}Hf&R=;i4@-^}>6# zXr!9e_lsJQ;NZk>-T|-7Q1a<^C16!(ZL4W9P{z%v`m6c%Vgn9tRfu*oiq6vEK^#+y zI5H;JupWv~-H{*QOSnW$MMJZoF`$C~mY!3kE~fc@N3+F#S~2Osz2l`{d*jEgjNP?) z$798kY{KRCV(=r3V(ILT*C28lJP1`pqe0$1{LO9hLf!NWDEPFh&yPd2_e6`KdX$rcmtB4FQouaTcYlJm`UCm|u0=W~*MlncKtkt-zyE{XLQ=k@eMwZ9zUW@qclswP^2MC)1% zV7!>f^(AYe5l?5i^4malePH%jWfRD2EqD8L$)t8b=T#g{Ai(JRaH$`;%XEbGTi<&V zENOU}4{rq>S|bvIG%Gv!Rh1Tou&<)UeM04zDw)7cbY5`@+jU-E^56hnEycd@LchyR z;-fqFulUR78To}5^Oa7X){l5&GrDkASP^fIG-)Y`GHy{^%Y%xpSz7K%UQk3M5z*$X z*e}?|pOs$DTJ>?Pkm>AHvqD=MRzFpZksUOEu!*X=v%Q7u_&`SwV{f?HvAlcqg@xm) zQ~mc4UJnMG360nk$+1U6*j`J~+L?n5h>8>ePPI-~V}L7o4*XQ2S?U!dGvQj{L@o#+iL zX2vHMcHc9iK2zJ`hoM#qDYw&AS*+5O88!W0qL221k&yaEw~RvNY`~+)I){*ioHH0A zNOoppb6l!U>?hKPiPIWg8EI)YJd&O)9Jtu{GxL+F{P^DbDpv^4d5Wt!N0JQ=)0!h8 z+}fy?q~pS#%b@PeIBf-P(q&n$Pbz%PlgjSy*qcQBf?Qipt`+UnL^wE%O<0OeM7}i& zfR_}LQNND9k!S4;DU{+_m3XxhpkEp>4Fsg=X^9NWSAyqwZ9il`5%S$rnLEoP^B z=nVRk6+e@HB0# z-Mxpe?cL%Cb(iyexo)L=+sT$ow$#>IN?MW9)<|e?M^fEG=&SUBW%PWZhe_2Kz>q}9 ztM1FQs(u%x%$8{~-M8$0rl2qS-SL69Xha@&z^=`qCa;Lu^8!?6(+1?iZih1^ONd`% zoh~mpu=LU%I%WZp)*P1;{A(817GfZvJ?f-l9P}{k7O(4hbI_l^?Sy~aPw6w0?_0Xk zKS1P5>HBgijpSW-p)X*WpgF>g<2m%nIFoxo#kx^mt_9_H*$u7Pcp{&tJ<_G?Tt&Mj zfzsI63ofY4h_Ht>cY|$YXg7bC<@x{P?H%Lu-kLVhHVvD`YHX`X8rx}X+qR9yXl&cI zoyN8s^Nx*k_t{T3x}W!)ZzrGbU;bK{HEU+pHP_G@<51!!-)ArFc4{@ZoAd@{$x165 zGbPuyw$XV-;BuQ}=Pwruj>P3Ayu5_CFl+&fQqI$3tElXB2Y`B1K9&58$=;k?FGo&M zOh0^v_IN*bf!Yvp`M*58@>rgxCFeZi^9NM1jc$KvlBJ&}d5^g-_~zC2pq#BbH3f;} z$Gwfbqv97RxD}^{^9hgRU|b-g>Dy<`hO-Trd5LWt&;2gZdN6o(H+ujLuvWDX)~vCp zxjJ|Yyfa{qIqL&t+nGvzZ({M#1MsM!S{RIJTUdasH--D<04&Dg?ktPmaRf#|L-B+z zD12cCcCwNdC_MIn$=L<`-r@!DNtgSOS$gvYX&)^*M5fpy^i}>fB{7gf-AVvYEd5h3 zaG$P0Ai{soSNJmK>$cO-@fg#3_JdnIwm3sI4~xTIc}jMA2gvFa3k>L%SSUG=!f)bC z7c{s7v!o6+QuQCaw!hOI6f?auL17wYci%27Rcnx;(G-d6@fY4$mS7nXB%F9YFDnPopd-rtp8@u1`-h$O{~k=gd0h=ynJA zxjFE68GZJ3-k;z#q{)~XecfPe+wgJI-@x-==b;Um)dSWUO#s&A_~Lb)7f=RBONK49$hbgaRIPo#H_a5CWSNVxe70b^gcfWGxFlNJIwzAGpz(=cs?za3#UAG$jJ+FYt{`y=ICRn&6W@}DtaWaN(>bcHz{WpDJ8xx^NQcrurk|%32mA(>uT_o z3+^x(7)0;%fUbdN^oC#l%SEbNtT zdmH_waJj=P65cwLGthrU!aEtoI(M3kG9CrxZe9fVs(K4zzh_#;y}oN9U+!uif^r68 zBv)Gmi+Co-1lkA)syrUylRjC7h2e4wwYFh1g8)ei==n;3b)WU~jWA>^B10U2_UWhj zxCHeZm`TSoHGgN&t|2+W##4$p)hPd)`>G~QYwJn`hgOB45*l6(Xn7qp%sv>58La?V z^wJ%rdN6N6kgueWHk_Y9Y8&2LFKj@2optn+5-{L1@pIhF!|YVbV0k(nt<7FxM@?e0 zeHC#|7;C=I2o(?#5UHg1CZ*0+#{V>)&dAT)6w362nQ5H=F|zWDc1OEMu2sfILRT0} zriGxyN_u4=N;TwRe$iYQo^iQB3b)2Zw?01fyQDxFFnXfkdbMu}$}MM%{pvGL%{0c3 zY^A--gA^XRuWl`*Pj!qE34ao1tZnWJt^)^x#`M)sT3N$ai4Ig*0LsX~Fh%6dQlo{U z! z)zo=iKgt{i{A1OfH#1Bnl(xvDqYz#y=Mf3RsbbQ?N4v}2GKy^prmaL*y3wG8t*e*r zJGG~>r^>1QiT1W6wIJKTyn)n31}u*6QD~QWp+b^dt+O;d1N|N!?NVzHccmb(#ROV+ z4=|x$*gC8lH`$VkafTb`PmqooAB@*0gln-CaoVoho4!0xR-MT!ynp{;#s!m%!LoUB zBrU|{lT;_%Ex(~q{9Os-L|97x!AkI_ZU%zRNr>&9{B&bESJi-eMx{%EAq$GsA1`2L zD?KPkr${R?LHqsPa=`3Z?19sKobA5sw_kMybaT`>kUH0?n!z9rIkDt}drVQPY}R>7 z>(9%i={_5ckVDq(#mI`^S6(M^zbZ0}Q|LS01q;3p8YC3{zu;+-gSPwoEI-qgBM9g`u z@9NYd{e1Uj&WP{p?!etl-&%h2h07n55}7WDEbjRWRNZh#2aV^pm*&)Je{%dx$U?E~ z?CtPBnpW5T1=13RU{cvB-LD3H&-m~WFsw&N1=-6;EbxqK=1Gd;pdl~atS+vtaXByF z-~h{n6ExPUu2%L0bFb1b${Z-S*^g)(5>kn;k%X6)l0ph-eQaM;AJxPYz}&ETEZBRc z80WgI4Nk4IO3CUEda|3&Hcesx*wl$9rG!`ouJPqcYg83NipubHFI>iIy3skyi#j-+4EDo)@*C;E|35sHdX77oo|w2Cp-L!RmN3`mm|Ike85G%n^pLr}!4Ew39~ z);Ml`y$==HTq1&OhIge+7`m7(A1OYp@93bI1FKIs(o(qP6{K6DaQeQ%JN4y+zZA$6 zSQxMM?4hFIR%TWv#mwx4q+;< z&RwgszyNN#)^H6*kR>&b&`pgGaL0$)pUq5>nc{l-!+|Tnpl9yu!6A}24CGU5l?wjT zY|>wth)h-_AP&L~2fIG}zc>h0I3U?oLwc3IR5JcsG?akl+Vko7`y>ez%VhtF@_$YG9}n?_;%_YJstyIzlYuOg(KiUfZY2H7ZY>9JFlhF7*NJ z&p+vzkWo;+XlrL)0i*rEAXVWhB90Xg2z)M@=Sv>2l=!fQ(`dq2S~o`J)tt=C%QFNq zKHcCPx|0(#I>UqOGT^X1Ha1ptC5fTh=vMQs5v~?4uoPXi4u2q!(@D%Bp>BUmWpVLm zy{JI0tNlrd?iPDTmVVrDVV;7tV|E!lm-~ku*$_yFxEr4`yD=4yZPI^ris$ktfbBj) zBGgjFP$<7txk)v8yg)=pCTqiK0*SjYj_i4IAY#o&$M>(D3+YK@}1^MK5+7y#*57UzpB}X7Ei6-i)(-dT$ z@%-SKe#1@ssDYbPePryDn~QS9pg=^}A`j#?wmi?aH#H2#3ZgEodZl^bT8K1;v$1n1 zro)x`H_q`h_0P#3eoQVZ;}5*KIDUN$KCm)BHo4!rq!syMGHCGV^(0VQDo=-*J=

zo~61yOg<8l*E{Q1VC_AaYLA*8Q`b%7k7%?QOpb}y}L*xtm8{qbq&_r2IY0AM0WFt`9J4ehPC_vX1 z28&!Gd03bP8A9aDU6hP1KrhVXZtM$)FNgC|*EPgDF<-;O-? zv_*lRWYC?jiF^>?wYm}JZXimlWSIc2i`cYwM5>O2*o zj8o@&munh8H|BG@E9zUqDm8|6U4|Rv z;TJ4i?`|cGbR!GSyNyegB<=8kYHv*>c~>E0c6o$$HDFuOC;%NQ zx|NXFuWqn*;;nsZ`Kj3a;MnX5B1#DAag}N(h{&+3E~0D#>gt z?g&L-)5S++iCUj!*waKb<+VCUQg{T%kl8ktUn1F4yC z-bTKhRs_h)-8UMD?2>^xhLn(5?>YeLIf@Tsr3|l@#2QhgCkRdSfaIok>Iq$;G)rv7 z?}7%Gx6a<=r{L)Z-=4_%=~+n)jk1KQ>Ir11ETN)+eX|0EPe}qVYKXK=k5uTr|72L; zWTM5?Qy@G{6@Cz;k)}9UAI@hUibFXvYj0=CWY4j1L{*66_aOz1s*$0)>>>)bY^^f~J@0X?EH| z%QWR&rSvd-@teJFN`+b~;kIWvs-161i{u zjhBL2aV{G{4y$^(CbE{Tn71uCGHcOeNXbn!qdCV(*-+vUlNs1?laI-tN=F7-MjG5k z@?ZlDy$g0m^uy-O3i9f6INyrJ$bG*O*sSUowW4dA(j^$3*L*cyRoTv`${Hl7B zo}$hcyVX74PakLFlMwbc)tPFcI-yp?3N;=styd~N2Uba?Qce%b574 z;{FJ#*5rC5FmDI-J`0eZ{IZf7I;oqrxlV=>A;9i=Tcm77T1p<{klw~uYsb5ldig? zYjSXY`S{B{wTy?LnT@fooanu-dgSig)ll;jkS5Y|y&CINl*G7hY*N%6bY`ZDt$hqj z7TUBQEKA1Gqh^>zo8M@{32C_vh4sra(68H~jH5n0TD2}r?*Fw;Q^&AF0hvs8=aC=?~q zWvBi~T&!znW$lx(V{w#N8tvHoH?ZBwKlz)~)T7<$wD}cmTL?0 zVIW@{+!7N6)$vEXrr9Vx?H?ZQomYks2dq1C{w{ljq3XQaH+^L(vs zo5-iigZYk!Ng}HjtEfQq_%m78Bzws{x{)6jjxYE@W*0ke>gl-k7iemdX4X4dQdf`^ zR7Bxfj-;C&a3WNf={YO{$H|OsaQpR33jqR^i4~WqBZ+u%P%?uZ)P5W~W}<{0>O-V0 z!49(Ngh{O?rL*ISY2e85(^xyb-K!%Mx+9@yr@1%6zh7}~Gu80?f#;#muC|MJsw6DF zzVwq9q}{L-6vUy6)DP&GI7~AR#ocs_*6&hYJS^Ww>g}u8fB&$ zRY&_4pS#$g8a^xI@M0FSUU0lWlNZ)mTo^*5Mj>_ovW8s=p!hJ9&XytHplhOo_{#5K zRz2&2h8&7hfTnTg#S6Y3GoWS*)Xe)}06Z?teXMDVHV+$`itFesB zy;C~(*q6D-KHuMNfDU%rSVc!Te>#Ee^pwrD#wLkGidgVk`AlLQ%=ivm5?t&zq$5ek z)}a(JN>;X6x4jPMn|~Vjqij4cyO#gHvV7x04pr&iFg9SWn{j_-u)UBvgyV53>_RQz zGROl<%#V?6Wc<@gf0NV4io#lN*mMr^~BS#tS*vg6}AhjR9aGBN`{&`eR#)w zYLxM}F6hVEV=>>O7RWy{-Nddso`-dM=?h*}pPu>2f}XYNKPwnVTOVF75nD!N{t@IT zxra-X}R7R=F zz`X+_w=A)B?LvH!uphQJ+mZ8TDJAw@bmnam-%2k0Gniu)+|`FuTuZp7*rW5<0@J#r+-25i=+#ItWayqH`YM>=%*q2&LZ`bgUf7&T;sf@-$2^aQ3@Y ziE00}yZfKV#Zfjt#Yr4;3m_q7$5!r^)p-=R?7j&TH_U!Ckm3kWf59|43O;vQVBx@_ zsn%C2l)M0ni5{pu`@Ms(oxb}M zJDun7rng!ODQcZS{f|&N#J`&k*6%l;_Zf;pj1yNT7Z`qf33u3flE@^Ul>D@P zdgb=iL!XAYiP_8QW@@1rB^=kX1(Zv^GiM8Gc{A`WX`xl@k45z>nXeJzvgXS|lI%gU|L6Y>O*_&VjF?0OBXGa$$ zLVz)GnpRc8z40_gM@PfsOSWlU2oG18>->SddMxOIb-7YUMHw#e6GL4W%`68<6L!PX zt5PYKPaiToJ}RD$E+dP=Q*t|9)h$(i#YSF}R@rE$LXI#>ht+qse#Aua=)$Z3^Ou+D zE(DI_{V;sYucy8yEB#@T_kZ_S7FmYl`enO?J)SAxI?}$BMGI;H@#W@-j@s4{O${Neb9TTSROUYL`j{?L?Oz~2}TTGremzkiS zJ=IHNNB~NTe?*K=?3VcVYZ}}8XE#09b4mj=uCpt)-=r|+)@7tH;!pr#a6{uRvJjnX z4BAZaNd<(1_-n?!{=-8b;dc>$z}-oCS2vKn;{afLGp}A67@y}$(Tay)5jWB0Ws^;V zB;zp|Rw+pESLoXB+wO4!B$)A*N_IbF=?5j-u`UFq9$XixOYHBZ=>Ar^+N=IU9+?wD zOzp@9z~XMD(S6m*zO9I-AnK&jOESU^$OD|B^MU0l@8s)?Fg2U%$u!~$uekZ zlDR?`m8vSaXH-9Td~l*H^+ykq)pueA7$0$^uSJ|Vp8s$@(Tklpop){d!%CihFJ$NL z+Nr?mt==pvS~Q3ao?bO_K@VlXg^}uz!WH3R0>RlGHAu_okNquqSlF!|?-r3mvkK=+ z2YTTgsn+|?Dk&9@{SbmrSf_*{e5dRagag#StEBrYf!S`X5#JP5p<24G>T1~}EPrKX zbo&e{%G~R~OGoMO0ucT{6ER$Kehu&Kr8=UY_j6qf4*4e2Cc_drCA^|4#gn&Xk5Kf} ztCuh1r;i->E|q-6!@Y8bzpQ`Zsx-ZYE@;X8U3F7lQfgfJqt@zZkP+8Y5!RjYg=E7a zX{Z?9>VF%%1t_9LH?LTW+kFhfi+Kd2-{=CfT&_$zCY#O8FzNT!C!f#tix*r zmjdp6C>JN@Jbs+MZ`Co>TPmU_{vBvYBoR?dJ#(vt(Q`whVHzedA8!4;Oqj>w8Utz; z$H3AZCfOJHRRc?MHm9AL*Q7O(rC-vRdn1!1x%^Ea;1>Ps{82L5%GZ$NNh^$S&XH)k zMs6w|)$rss7znf4$I{k%gxd#CJ)=WnY<3=-~;>XJ6ThqFBYk~|3oDy^D5M- zQ7k5bv@>SK0+xXQM4$xv&Lb689WxCqPno#Xl_xP>lTGErlV54tsMuU&VDv>iS6u$E zjRK`QZb1O=Y?O0vuO{Lk2_$D22|cpRZ?q}+61auzsV*ELE1`{Coz%r&1uJ3VnE3av zxLj?Ul@C+UD{KLxbx#;EisTXE2I2;ovs1hEpuZ@3vkB*z7SbjzcvGbj zW~%b)=9wy&q>@$sP28(~C?4AuwL}oe9ms^;Ac3I+h*!!~Wu-+Nn08-Xl_awIsmA<# z4s~v5DZ*)6u;8pF2qR0P#+TuA-eBWS)J%g}O%fgmzLzv;NGV--nS*S1;KB432Uq-!;}`hxOd|{su2xK3XD*o zy8!DGxbqNE(>KF%;&Y9aUjLn(GkTnST23I4tyAI8F@#T?sCaD2U-#3>26lf8-}<}(lvI?;|1T=k1*i(OKEXJVF6-3-$B`lg*b ze_mXGXMB)NMYmYW-2c5`Pp8MU$Ty82?>1EWD2wG^2bv`Gp@Ub*k?0 zE3lpAl20|{Dd(qkt!<4s7XA$kBAA%$NTFR>QTpz4?eXO zDCdxMcA9GU2L*5!iv>CIO>Z10=Ujn|)<3dqUK}uU~GV zK%8SN#x4HGlHxeEV2^5v+$6ORv30-43W8j9d4AJ3Mfa8@^8GF+wptwbuqx3R2<`-Q z)vJ1Zre-G9nH(LxcFq*#Y&te;?UwRec*3Z;mLYU!K@f3S1M6(=9wN*QHQLr5xN9ke zNm^Bn<`D($kyPU>`vz(^lOfkw0<329MR+yYDl>NFOE2N2gY$`&1Xj^MKn^Uv9*L%) zy)+T7gn3KB7+r`vW*A$JyY_0Bzrs;I%FB8T^Cn4ji;3Bwlig6y*}#&A;>G(O!5C{3 z1G4W!QH9vs7|FN2q92YIy2R$$OU0u-elwYAZ>=0J%G|$sTvnqSaYShq{59>N#gaN; zgze-nq|IW3G`|x#vrYtPBaZlS6!e%rI+&@j_9N`=BfURAS*?4AHZDkFgh$cDq_B!x zCMyO|Z1Iz1N5hY|T}nD>CCl|nyhAJrR1+*T=$~t!0{7i$GUnBui?`8?lgedI{K6lS zHXPZ#$r+%4>-)z@(OOUb75HhvS*QRiy7mEL&_ulRwm|HeJsHR_-m%2+HJbaw04QTn z$@;i%6%m^Jq_GhUTpZ2Oweb%wfI~jkV!*79lkVS|w_<<93yHuaK@>JoEH6xBRH$5Y zAu@Ji#{XD&yagUA!5SBoj?=B3*0XwK5X1E`Q09BQyirD#dN2;tljAX5BHLBbo#XU8{i_{Z!jWza`D5(Q z@>w4lLm1(vMW6f&Nz{QNLlIP$bIe%^qTB@vq6YBLV#Ty#u>;2QbUU4Ii2sZIk(3iv2Y{>-)ljn0)oyLFRLNmgPYaBH#@a!6ImX@=(eN z+>_@d@>n11sQE>;N(+JDdtTadvyz1G^vC_C)*4 zXO3_~b}C^Oded?vB80Jixug0$E8MVDVGol5lFFr9uHenqE?S`B%__nDiGX6n;{e;k zH{#)wmMwc<2@xI~Lz_3TBQLLe+=-bFa$a+^`DBx}>YqL&!2%#quuDN}M6kmV4#k4( zdYAxR5=Wawr0viUts=fo7O*+O~2A)TsR|Evr_;AAua z?>=*IOytxtK9HZs2$GFp9XWJruVVFZ3YJ2==;KTvDu4JpuqHbP<6u(taU_i$zNo3< zXtzm`B;|@?OOcI8Lfqr?%eWxsDLUCe{6Es}CSwQIaO$Wc9K&1?z+?G`89-pQ-Vpo+ z1s;7`wMHOU&Ly^ydRS677XvU%VVZ*~YF8=Ig)S&>iRLa`bF*rUtn#Gvr6)y;zTtqz`ZeL@FiwwbwLH~2p62H z_Qi|i%m&V&R|hUm5aPc?1cUcw9w2K5IRY#r|aM2~qhL|ZhHyUlyJNO2J=mRjhIeEYE)eUbj4D<6U zD%ZiK>qbZ-MitJ6jd>NDjmBSODokV7Vl$3WAOsw6xR2<+c(1{*-}&mA!b36L3yMCL zgF5hz&hs)0`>;cw;Y)IlqWBjO$x=*pmVd|8d++9n;2?Y*ehLi4EUBr##SUv75F z6KD{kR4#B2Pefq7VradBNBtTJaNW0lwZ!v%P5pYxm$mLMYax6a8J=*}@DJ+48;hQ6 z&0kd3_&yZaJ-Ip~0w2vXkUix-{{B|sN~i`tZM^V|K~vq0VbR?vlxX&gvXLYvGu8Bp z^`!O2y(ip~;5wlp7~ODOz<*NFaMHkk+TL)Q_%%5F>uHYHkucWv=+`fpfMab&$%6(3 zT}HJN{xcGwh$x+cXx+$Nh&R=bfcu8pn?LTqP)ES!8zx;&iUbU?&rDPsBm22TcZ}+vcs|XZ`h2A zeEl0T8vijv$6hecQt^Rr1OZYxL#zK?IZU9W>b^%t3Dc*F&Wz*~_Mx?b1`w#;0xh z0m3JzwMM#OCz)#wwhZo!$CQ|FtL)HW94qMd zqG`#N2LItW4N&M0Q#g$wBlVpJO?~jv=@`sYvR9Rld^f!0mwhTGD3Jj=bqn4ZwzXI` zzW^y%7T{Q@bJ5gcxo(D@3_^&VY-?M;4qkK zzxKxl`*wo0O^Q$K8bk}7_Pe(YrRTP$BbUPeZNv3r0Ovsbf34WS zyK49!G3@jpGE#y~Jk_qjUBgUep2_=0wK*Cf?)bNMmWL{yCS@4yDQ1xPMH%uD$!!p+ zh?0c&GD}--v`XgMpGD(opyn=n>}29`w8o__T3NXGB7mxvMsaQ%HvEX^RLN>?6sh&} zjrc>>2hwr3ET|_}S4ZuKKzS1OoP*LUZ@!vZ2HcqsXM$u_h}? z$1)1}|3G=wu%;O{=cjjYETHK3kBPr89V4((22K)ERswi?wUCZfs)>6JFV&E;DPQQ@ z1k=U9cpHbyOrI{hnQsNKN5TJfxRmHw5Wr5`{uUugKf`6Mz6LC}r4P~N)yDm9^knhk zpNi?};s!_e(d<`#{uOP0B2o9w5rkvn3D9}zaSt5(f&Fobunaa%YUZ#VVi~Ax`4WHD zu52cAPd_LtpwpJ*>*^CrH8v{qe3{@zbIq@jWvUc12V~6o&gQ$n3(1JB4b@LHuhlxf zy3rpomni+w+L(3yHR!silF4YqP0Qf4_e({8t=7lFPviWUWW2Jk8%BFK`7snbb$REK zB(Np8-dx0z6i{>vA6r;esHhfu^#}0j_zc-y{yL)VXDSqaS-$e%E@K>j`MFAZfI*d- z#goJrNyg681r&Vv>K8Fz$SSa~`!5jkqZBEKMm;93!GwQlb|E4z%eulR61H$2x7|NV zwlbandO9UUMKV9bbYRk~%KCvy{`~D%gTC100ftVji1bi4_g{>8 z6RDqc(e>|qAbaY#1=huT(dKd@Abd#%CpDwUc9h$TIuV`MMiw)FYu%HM!St^ z0M6O{*Y8yHmj}3?ztzImF;f1LG#!=$+0TVCdGa#jNkDne^tRze6vP@nJo6gVltEEs z_T5nrsN|BkEXRJkB%bs_clDdBb-(@!+a#r)X>)m}TGL-`APArb05eDg!cYUDAPqEV zrY3DLv;yo6REnLiA{K~{NS~eBvdcm?L8KpHPMR6~<{iGj5YE~;;shKC43nG}o~uvN zNyndw32U`S30S}m`EuJ_e|?rbvTbqXd#Y3M*tk+STRX@8oO1q}e!v7&rK1%%=TvJX ztX9IdxO87xk3rP^iqCXQNw1JY6MtBP(oBY^v2f8wPMMCxG2iu{lBU+prx89qdwga~ zFccu1`$8np3y#e}8HvBoM0agoJcplENZKtE8yy;S6FgVNh*P?eP9ODI#NRgz0s-Xl zm!}!S&`8RWY@@S&kQSjg0k(6mhpa*?pfk%JgO6q*k?pLe0Z1>ez6`j&hpEpC1-<3QboKtB*3=I~e z5MHecx9k+mOuCXE?@Y^;)u#m=(M1uI##`lmgoRDFT# zo8*dqx43zoki?<1ZOD_0u@5W`x@ejY1`EZ93%JAji^B;Xlm=(6L}R9I{5bQbl^+B| zO`@c42mlF=g~9kl)d$0>Q%=mIfaJCo0V(y%*NdTssd!oqKK^QPVm1(}DF6DqakE2& zN^9}6NeS_G4j1JyhumDz7sZOkd=D`hZaexY0~YHzWT%<$ls>(WKTl7D$frHHvJB3& z@*K>;(Hvk{TT)D-KX<7Oh9Q*PZcIM5aGhrsT$x4BQe(7pi5V-%SkoZGRdKhpG^uJg z#8<47?NA^tg~W9vg8)IyalNs9<{_-BdGjxOWNYzL?p3rR8%A4%xvr_!GM8MC%t*GP z*iDRV6*GUi}fLqW_}90NS7SApy|nY(BB0;)05L@Gcr zpu|9Hc>x1xkUBg{pSqZ!dpDdFBl*%4c)`dJHh%x4{DotM4qE5;y*G5AlEebHK*&Jm zUh>^Erg7@92>wk@52NJ&j3!W)$T0B+7dE1Zpbx}rO=7PsJ$>Uy`=6X)ae5j3pK2OZ zWk0=(d~1y;i7i8`9BU(jL#dW7T$hX&3ZyTi?o=3)M5N}8=65PJUcE(CA>Pw-M$@-P z$jmf9eg&|N zRoP2Y>nMvAOT|*T4g*;dugg^s=3?WO5-ogL>F>}a#q^pj!;B6N@tc~X!?V1qK2K%M z84Nr4h=4}qFkupO$8aEQ1%WCG8QYl~Lwv3WQF?khL0Xq(03v1Fw^j;uDLDW#iWC4+ zvwjxs6(%!ycz7RPgQ>WGDx9t58R)UfuqFkag{^9|1PbZ#Bt;#RzAG1Njp?5B~SQB1()Go`|%%_SCmEFJR}!3TcncQe5x+S+(hQn93P za-1eGoTvFdcJwjKy8~1yl0!KP3g^!4#^Ao4-PfenGv2npbTQvyQ2D~vQjtK+IunF%nVU%VM z#vhtq6Jte25AuZyAS5Z4>8gpxp%wF#b~%A&8&>Gpk$xBo}+P;_`RtJ`t)*St3IcJ)2cGx*-Z+~2x z_pZO2|1O1QovFmZ;%(C6SLC4;*rs-;3!_XKEy*z>THME#oL|U9elMIw#9#)sI9k2a zJLML!3x0fwd^)p>xjcSDSCvAY1^k`~W~1dG1vGg2fn~z(C;JPLb-6js&<4;NrE6!R zHDehpZg-0zPujn7Y{~b|)hiQ7#IswdBQMdmsY7$#nX|#S;tJT}` z<>rnW%k6D6L~4+7*(QH&W(1s8sMf;`NV4($sQM5ota{V#e_CIALvKUay@U6>7-TWk z+1C6f&9M&RBiq(%9|*aKyb+}?^aO`Tp0q!ViWao~Q)0!v66#GnF+#hdPSXS)B)?|Q z5M?u%Jl)Gpovy???>p-SxD5LEy)385)QXWv2Lfwzq!>yiz`dqo0FsTL2kSQ&n5w}^ z%eJ3d0=eP6U?UvxqFVCrZ|U*1azlvVt{GR6nC(bV>Y-3%W|{7!-*|Q`arC+x&AHPM z;MAgZqN;#;_-y>u?IGX(stJMCu%Sjn;z{N)EIxse40yzXBwPN$hrYuc;S*HXtYxnJ zsIiThPLof~9Bxr$sbN3>`ef13#drArordCqAFSOzi5u9^GE+*1@4XiV-g}b#l(m`E z!6~5!r@lv9im8uk*LVdaUouuslgQ~qyYnd|T^k7-v$LSRU&mfP`W5@SXW~G3pwBcK zaP_>=@k4)rhB=TqCokDfArL04`P=*I&DrpOvSGih8sdmrrgR!-ml1_*f;bSU*%{~9 z21VTlMTTI1NJX53hb<2u{%zX5+Pj59I8Z%9x_N*5p(G*+RFN*nDqa_FiCEdwjdFa) zlh7-Qp!&awvn7kteFDPyaZ53x-+2dvJh8)+C@T^>*=hcobiLnLVSiZLf9q;(_$57tN&Dkg{UG+Z8 zedD%RbnTIaVnV!olFN;edaluZteBD{q*qgfinUo(x8mN0twKEcihk)wfGyp`;pJ81 za5%Uz_e*yA0QS2G2KV(#Wqm~N;#;}vQmEmV-mrWccr8%TefKk>G)tyC*oAH5YR9ZM;24VV>;-hHH0w}9a20hN+I zr>W&AK~mp@=IyVE1a|8$RB@sXD|l+OYIKm@PmJ^PJzf@#W;*lcIX*!W_OQDaUZK(D zS>$~5iF|C=xPv8XH~>&fK7<62s4b;%v}@3DaKy(FsH5QaFd*~(DbjNWP4`J_CkegB zyI>34XK{SQ0b{xlY18K*bwVWA+sE7MHAt5iXS<_9-?6>(65&ckR-PcAHFG3+|ND6C zDZ9;ae-z#C+2C2hz0-`g2<6jz3wDe8ZNHPA3!*8*mo0JqVR?bPC$`Qd@}Ya|+@e%= zw3-#VQv;rb_fT=9%n7}7r0USe2-zjH@w*haSX~Frq1xW+JlX%18{M^n|5AL*ESrO0 zg&U=9FF2VxrW6mc23lUh7z*6~dWurr8bJR;vNz%&-{u;vQqbQG`dx2YYH`%-1k{f& zoXUvpQPn^3O{^J*QWq&}7XEQX2xj_k071op3w&ckQt(DB|02!oph zndsh+gUW9Rijhe$QQCHVQfMAi(sXq#?+K$Ix=I*%_fm0>vKX`Btmq}k3L%Uf5NAAG=CH;$YUqX_LwXEg}6hZ+Dt91%^(apP1l@T}?rChtp`U*iamEF$O8SpEOsx-RLKxJ#0d_nf)QcSC_X)L_b14zYMJZ!* z%fYAK=f+^1Fk=!@)ra#s^P91Qy}=UMV-sU35okl|0awruG;Hx+d>DhrqSY+@4Qc*& zbn(TNrWS3f>4-*yqnBWOdw4P5CYwDY$yOF1M2D8cu-?aWjXY@ET z>ZQTp_4`Ibj^s$2jv^le=-`~c*oT_{#4?r{7?PU*X}>uaEY!rwfz*!5USVcefx+Lh zqvCYJz#-sVz+|v_jXuNQ5zm|{>iQOSeC|NuH7#}yix!hJFRks3Q#EC9x8%^X=|Il- zVr=O&;9o2t)OFn!UPNE(8O(%;|@ER@!=M-QA1_4-8DY zkJHikRLuf<_v@qnTXYUKBmgtFZTiDV70|p9blFa3*b|xs(5MXUt@U6(b$lj;76}jy zU$VO<(lwb_?|EbD{2i%?I-DrP6r6u6gbL;rx%P(ty{kXpUH6+FJZjW0Svq@0DWk^4 zdpwy8u0IR6KFWqODn4`2>~Rot@kSRL3YL}$j_ZgdEjkiPec?L~-P#`NKy3^M-9v9l zM$|VO>EFqc^rjBA=o`#@&*8`p#8XcNkhc39<9vn^9=Q$PtLLZp9sh_obrZ`#Qg6F` z=|I-rMJfH@Y@h{%e@AZokhQ&!uxOqk#% zs!O%Jj_t5bq1A$%p`W$;e5+JeGIfM9@pEhkTbA}XN<`hV4FlsjQmzz^U`O|?s@H4{uUbv*6?-OgRf%hMpDM8cJ) z^^{8M6=SHVojj2VHPvQg{E}@NPTS3IJAbBqdZAEPQOdPN0w|7w;N&X+09ye6+g5p6 zAequv%|0`Xw`!38Ct8ss2kUQ=I)M$nOTa(-&u9-teUdWAGVqHgq6Q^&vOcnXJ3)5D zsoo%4NCWjzz7n1-0@4!37BwHj%B$F>rUZa%$ zmq?!B5Ur+Nd>cVftxNPD!GV>)&6-tigDbE9PH(aLyl=4Zd=*K~nfY!3HFe6Vzs&!6 zi;C@1DxHgNBZS4-g=M&3;EIc>xJ%FKrfZ9Y62~t%|$9M@>ecHP?DJZG^+^C zJrl3gWkQ`DFj58-f0u*f9y9;(n!%qgQMy3PaX&Vl?k>)Zx=I}BB z2^X@ey)WGfwslU`_AUPNS(vpfPn*zUZDTr*7%e?%^b{g?Q`X&Z4P|@Uz8=? z2pFILE;zQ%>JVh;n>%(Z8_jp+NbncAPCQ)f-J;?7D{96x{{tUR;1FeabREdd|D+fB{+Fz@|H`%b-+G#=$IQ)1|m#9AK*U1cZ>xJ7j4ZU6+dCYSkjZSySL+At+5^Kg^CJm2hPm-}x?x%qYE zR7#Q;Yjhu@lTGRD2j%HE3jTQ7&{gH2dt5z+3U3T^Dl%x9>fja)UtW2!Ek5>JoJ^9b z4DjrFQAuL5MZ2>O0s7@JV77uWpSPyypUHcXB{%MDFi^a=+j%Dw+-^hsXcZi!<+@%U zn@AN{By8NMSEzJm`SDBYa@hfGr{!Xi{_~7Tle}L47=|7Ku(o!$*NJ0O^&hgEU(T%n z*-aJYBfI~Dby`$_Wdf&xc=c&}h>TE5<9+$bZRhCPF3`2=9}DyD9Lcv@Ep}8m1EARO z>+nA`LkD{7cy?0z^Z`4Wp30+xLZy%r!$*z6IEBnu&VzQ3Y^6FqqnHweJC3{UBv_y@GW` ziVUszw(M?4oHkYQ%HW<)i z-8V8qw{*Rt4LUyyooyY(`4kP{K!m8LAhEy@k&=OMYE}*bqp=b^AOs+D^~0r9HNpQ_ znk!9zY%~RsogyD2b`z)$$sa7X265XVfw+o63oDeiL1HAL>kVJ*82|VN_~!O-=Jw zT&<-aB$VM}EEFj1Y7AIqWD09V=S|cjnB5E1nZ0)tyklEKhnlDc(O|45KUAUnEZkD{ zw&H!}ZJqE{$rk_Y-+u@NHEQH(7xE<%&P7#fG zTM1Vs0T$me<1zMC3k%S0i&BH4-jH1b7P}Z%xvD_B6BbOFO&qJ6&8UX+nT(T*^%z4JB(~XNubD39q&J!%tl@bnE5H0g< z02|=IH!;?I2S)!@eQu+3C&oAk$v$n6dnLt3&2puPTz7zo3I?Dv{wXU_kR7zA3@4$m z#SWyTn|V@*K{kp739HVIbyol!1*)kZjZU~1`-$)rR$)h*Byqd$mEB*y1S}+ZO}NC9Z+wnNW@fZD6DM6e@f} zU17~Mm%G9d!rQyE?%sk0QDMQ}S8XL{t4o-H2D{I~A zfjAP8bm>zjjgHK3bs`v8hW$(KrnH$pG7<;m-zc*Coi%#riV&YXjEPZ)Pb839&SxfL zwyLv~w~6>KW;|fBU5YJ-JMqy$c8O*Cc&jK~=sy8YRpAuu?25Yf-Sb%k$_*k0T-V-d~Pa#kMbDIfIq z<YUD?8>oOp)GVyk(^vu%%S;ef?8dq%vF!!yy^ z_i>XDH5y-NT(fc;kdU88YsB@^It;D~}Iw`8Vx zDymTut1K3tj2Hl6z%87BVqHQc4+F=)y;dB1t&5U_MnhYGF;P&;xuxm$WzaA5@@ZzPiBM&Wc^bH7BWo51|AGr^Dsvh0dF4_3Jtju5Jy6<;<+#X&^KF zigQl|?LKP$n-@1hg{Q8SQ*W{uqy&B+=J*|4c1)L51LG>Epgx_EWp#?ylGuwk&V?$n zUw?mR-@+wP_N$uTC{25OyH00I3@_iqrjZn3g}NJ_QM=eayIPajCNL4sna z&BFyB0~OjN(Bk~{ESe#M@n^*@5-2)zkprB5l%uF@%1rFrmeT2{e2_Koc%j}Rm=ONN zFgz5{Pr)<@EYlq2amjI^wJZ?`D>xGE8IrG+)?^5&iW z7j?3rFl8GVmn)iJ8<>vPza#+!^#i%I6HtDOM_P{I=^2oZ2CvfRhknoXmLoImHo66e zKi8ztRt_TvH^JDDGyNPo&6^NpZE$vXD$@uUP*UCC*BH0?85p8fMWzIPX1jJh3smam zm>2SEjeCDqYw8KeerQdzy|Ia}3IjCR8hOig)Xz?-CdlrdwTPML-L?-h4i$cXHa~ha z^^jBa3DP6(W>&klSS zo8P6ohxIpSV|14;D3!v~_l$^SXEQCfx|-SMGK(HQ*|2*-Q$x$*ua)MMQ8dOf+TVq< za27mb+TRLlHuHcbF%gc^5by7a_@CFS+Mw54QXmQ5f z`ZA$@kQULb=9{vgZ*AHp$l&{){9R7-WiS zmV6GE`4A+ZZ7ycn%0jm4Sxl*Ufcce~(=^#LFHJ}49ATa+&HoM~@Ibp%j&6C&bfwZ@$s^ZgruuU6uEP_QGEI8MZ~9WVfb~20Mgh~JhfCtT;$LuG(8A{Uyv1Zvtbl zXy2eUH0nWndzEisX;^;&8PkV8jSaH`;JRS2x+ir+&jBoTs5~|;!F{wa;uYp$^nioR zgE6}052T+vFj#i?NQurJ<*K;3SXwprk~CCpNc{w78a%fe%5fdhRTnZhagrq=bdX(= z%inpsHo~jPs4P=EZsf3eAfFxOQQ+;%FqJASvpbnYh~&~`1slu%6|_>fLi~KtV7eSJ z9*j{GOwqn#-f)PoUVM@6HRAV-Qwsq6bRO%liUDzomKz(V z3;v+h(#?7EA$s4LQzXjK61^U9TJ)EeCzb9mmruf#X5u|I7P;vv52e2v0#<+bjjO&< zWBnQb_N9F7iKsP>)yP7U``ck!G8Pb7w6j{21U z7@u>{ad_H37wO;xnJ{LC+Q<7kG6A2b%*rdlgA+NQ@(s{C8-;{&2t|AsXDyMqRr<_s zmi%iKLXHPc-y-}hD>O>n8zQPa@sr~Io)v=DtAx`h?j-`KY)>-~#4;f1lWEgQ@3H}Z zs&?u@jBtKvKN2UaAtBy<}X&g8LuSiYmK|k&PZi?fX0$Cs0ge@l?(8WEc_$J4E=S zQ50VE^SdsAW1>o}551fi6sr-5(xKF%%F;`0Pn)mxG6H#DnxT4BDGoCI(?erzqv_UX z-Ism_`Oi`^MaO}?xF~=^`4aptF3&!xM&f=_3>+{tNF!XOV<1@Qq_n`$0?Z2x7$c$Z zn2Dneh2*#0*{pgFMa2&RsVBx@X0GUqF_GUlpu@-DPJ>9ebmYNL2}&MXrx{oeIY0>s znrOZ~5D68SqFv_M5bivsWBHT-yn#GP7frxUFJU z9y~x24M-JL+0~~OW!tSnn1rTrH+$t&(K*>BQ#^LiDkcRJ;-Oe*8DolbNjfK%3NjGM zm;xs?0VhWw$g!|>sX!2Yh%X9?j=4@PRSl+S_ZJ>8q2SSsI7EPcF&KCwh8Sbq)niyt zkkn#GK#ghO%?t$ze)1{nDJ1(jZ+56gc9>gs-{IZVkZdpt@+^!ZffpP!extUwgAlU# z2104eBtlNOlMceEQLs!$Mji|%Ff?gl^f?W|-<6O_e~@H5>)!wYcxa@_lQ76dCxEvz zc}~gXvtddru)F;*apcVg@&TUt!|D0z+d#=JAb2)kY%5<9SuiV8uxL)o*-ZMbi*%ef zA0R>s@Fe}OpH#ld$WiI}l>tRO4o$NH>x1V}lfbKK*$4etE{p~B!)?Z^;b(`plR@l7 zs?3)!_5HVz@!1SrHP;9w2!Pz294v$Q5Q7jBA*FLKp^q(LtSw=lC}I6v!fsI_yanW- zWJbio#G6RPVTF*>n{uB*;oMSwS@>N~Qr=pGd=sf$Kk0wAPkc0#4|j#OBt$#timpmD zQbV!)ysXZpHrBuNiU_Gi&Bos@7`T?AES4jBPVZDp!wVlHME67~+!O3l@^Y&XZZ}up zgzR22Ol5}5T^cUkPl{QK6qALE)t2&TBIJ;8OgE{ZW}&>h#X_iJ!UdTx7@!&UpUUSu z^}NhiE+X7H3@WF|1^dZv)V@|TQ zKk7wLHDtRm^3V`&mmwsjBR~?NK1-KJDIW6@J_MrHF|SZl4Xl`jL>051hiQQ({__a~ z7k#Xz&ypY+|Ifb@!Fs^px&>>#%+m@LnRshK_r=Fz!p# z(hk$*C)heA6Kx8;TU+eEGOz4|Joq8P70|@hTc65%)g7faSqG6Q%k3i36nl@ux%6HaLyB#qs`0{0(UC{0`p*?$(HuCLTdnp^^DLP(ddKHOnwP=yb0g!4)+ha zbSWpnG$diFe6)9~yArW^>I20gM=+}N(5G>3pi?c>GZn6FNK(v?N`;oND(Nm#J){_G; zLN6Q%&w!K+0%nAs*0nhiT7QlS4hLh*)W^P}6O*@JBbsyH`uN`q@l5Wd${Puu(kaghaooiF|yjm0 zk+XdVP6KyexMN!;LT*tasO*{QG3+cKA$J&CkOzb6AWELpYMG;%3t(}r((I_mlTmkH z4!U@_^sB|*QD9@pPi0ZGWGN$=@t+-Y#tQMAYEXSo@{GC;yT!y%q>Yd+fJsfm;&$hu zgjxB&Od&_lJoG7mFVx>LJg8k-NY;`{Le03LgeaPm6kT3V?}yg?pzu^9sBJeUqn2oA z$vx|rRL#h3`d1#s5S%t)v}ThJ6IR>h(QI#4Z(9cglHaBAGfUQ~Yj46T9|)vMsDjMK zuW6O5&LlGB9dddRj_mXmH+fq~I`!vaKE~Bl(a?e{-&=yT@qBtNYU;+nf~%h*XNC7=X|I1sfQ_WA+?^g*k3*Cm!9IVP$^W^YGTZ+x z0YUy=lHAG4 zJG`;Uv;PIA@iVP&8fFWNleH#y>#zKU*g@TgLBef|ceq2z)o+r(^~0)#2qWEn=g@KL zStR%>fC8Zhv%61DGEWNK{&R)uM{fRXkAR$Rz2P6PF;lp%zS}jvk2pm#R&C!9nuUGC zzaKE_@OPI^?rAHsyAH$+lS==W)zQI z?XE6k(`_v_#rdCK^4i~TLI=DQ-45EU-+jI}y}1U%0Y5LyW!zb02t9C_`LPxvGOd*8 zMVd6u&VgttG}Kcis&2D44UO(IN0-dE}R^Fd#mT+xrhIC9u6VeP`B+0z+|N0(BTT=o=rABk{ALt!>*O5GykmlxiYH!+oOuVWH~*Te)af! z!S<7){???gXYu{{jc~Wdclmt%{4F0JZXd@^9Y6 zUedz2Pysw#}6w6L$yIz+uHP zoGPgT(O^QQb_z{I_+$O_YP}-+xA8gRE^V%$91>D;rCf;um4w@MGH^tB8B*tVui?qN zI|T%iG0_Rp%B50|-WE4XWGP<6mWhVive{#x8HDndq?{FG=|qZ748-|4ya@}OchA>^ zC9|cI6>;RdkImpS0QU?8jMQD`UQ=4O*VcJeW1XkOo|D&~=$DVukw#^%kRQ)>GZ9`Z zj=?%~qaV23se1u0{jg4{cSk7juo=4zqUUFSZ~4o+2%GcMnZ+P*FSZH_*;R8SCDnf$R5`$$r9@ zncg#};c-hxRp&TUTM5a=hFiMV0BSVVJAoBDB9(Gyxnq(s-r|oW3$&-kUp1ZNffFux zh7%fp+k)y}m-!k+_pI^+LkD6QxT4iRW|~K;qS3!OyRzk}Q@T#+c63k-K5LCN(au&a zlWi?+(J%NFc0^lm@dtgDj;#OTYrdyDDREFPmJ5?;=AdQbh4n42{wmOF_}WG@(1 zx7kY8`V36k*NSHtb*Sj*B?z?fq{hUODj7z61xsMQi4Yf&?ojW{Vm<|T<>d(xoXK5M zC%K_z3CtHALbx_aYh;-mIxe^MbtMcLfaQR3`Hn-OJmJY)t~svHb~=$hf@>>CzhGAF znd-V0?};Z=gOXdX(JO-b)W zKz+kNQ&fNO+O1N9wX!0&($kHPo5=d1)SQ#=U*-i&hSDEmH*_1}J=|7CtU)rX~+&;@?q~w z7eLlu3klCcpjdBH;X3Z2l7cMC)md#n6~K87?@1fIGoZP_(zD@QuIXUz1dbjlK3$Yx zXw0AYBNOieU2MQ^31W7SRl0e!A^|gHLTLy1DN!z{u+f|_q(v<{9i@1g4_2d7d3Vi@ zo#*k?vUPp$nvx5E0BF8^#EvdcziQTtc^j#4@$Z=tL`7PD=6aJybfj|nstY^_zS78!ELyMk&fy|5+$!!C>CX*Ld3Y;k zHTlCbe}z{Hwa^g^UbZW7(kxcls4#OO&X_ga=`wlQ;?^Tab^joJ9(Op_8V&>{x17xv z={lvKQNZLnfL(Hblnxa(_T!CE%jP;nbGD+_^d8)bO#H;TD-e?cp5{~g| zYRo4(2r8zPdDq)q+>DD9@FjbB-qXLfZc1i}gvu<($*Duj8%t`j!>K(pcs=Ud>*M%> znnh!7&0nejqAEfSToB5+kkbE-xEJ^bzb{~18**OZ2sK!K#)3C!*ET}wNvIbUk~gc> zRC@(P>x4C#JOUHO)ooQ$|8H5ojjvsER=F1;P3UESa8Z2%0;X!0Iab@ji4%kGIAWy) zQjky%>N>6zofV{&!q|P~(t?)-^b%ujw+1~jC&f-)@|ZN?ob>YT!{Elw}ySLr)k6_+=l3IIjWMr6$nklgcglO(-c{_*2IW1Tt5CFdv zjJB5`V`F!_L=IJ`L#hrsMhlq>_x#Sx?&a@iAEx!|I;m&4P|@0bADty9xg|p=tBEiG z!DXeu%pcegGFikt@-=D^kun#EC4L-z#Npw}>=36d+p6P=GYoW_i&i=p?tk$>_XHt` z*DGHQZ2dy)SNoK|fJcYvsC)ID9cN1lYh!e|;;#>mVy%{|+|<2PzE*vT1>DlM9n@-} z1#0Ds&B>{7YNSE?st)m^sSD(tDsQR2Os#~jx9qp$GcD$}o@Qr zI|uVf#8ZmTy-yWq%);n}WS3X_lgIFWGv_sWekX30KdxIlvUck(?(L7B!#vw(6xlI*Gb!_ z-Rlr+Hr4ww{{=n4J)CseCa*FPa*Ri>NRhUir(GBPW#45T(K-4}`bnX&uhs_XcylcIFd{0axsaDtwX1IV@RjXp8GSmKFu>X{LQ)e^x@)EoV zw@_Tsl6=h7q(d_&N>7Pw{C`8g-5lk&jd+jE`jli%_Q^|X9Dl9;rSi})yYTm82VL*4Y zVf7b=H0;zg_+F?NVR#=LY5pVcw!lr26eJZ)!^R(dScbS|$RAD$`A3T9cT7~I>))#3 z=57%+?t&`sD#b>tI+U~Ijj1eg43=)Gd=u%cM>dLCLb(xnj=sIgTf_M$_{7sPA3RvU zjTouKWPs;)XO&kRlKN;X?7je|=1ur*m{j@+_bgQG>Q|$jH+Mq_I9_^SQf_42B9Xog z$SFdsY#I{E>1$mTerzaps$bw-p5j(lKwu(!dJGFqi~hj^+1@HWUTOLuJE)NS>h!xh z3x8}F?`Wm^o8@G6+j)q;QR3<~C+e1E|Kk_2FOUrrV=8xOyUNDYQa9fC%8Z}esbq&} zL;zrayP?cEr57`8ym)BQ@pvo8t5} z)C<>+%e(4|F;iN>;9WjE1DK+>HjR69G^tzGgp4n><`&h>7QtQfAR*C(-f%8&={?3*DSp& zKRstORnSVbjjPUQdl_{-uNjt~aOg<0o)4~}lC}T=hDahQuei>0bFLi1K9v?;z@o=` zhKSO@TC6Tn>D|PP&`++qAF2P{^gmgb!;t0hq2FUhZe=B)kQ`sC2u><*Jb0dMDokW* zok=f_XI8;OXI^`zNhHPDx9P2~<{%;I&+&BW3hw$BnsGsSSf27nIhd1Yrc#86X(BFJ zalEpfeC(qYlRd3Ws`~;Pz8)&x9S-#xC|}oa2yY@JKGq-H(LW8FZj~d%bpi{u32^`e zQc=A-72qO|*;E59?B{BtL^^i)@1&NSeIN*_=?R>M& zEWj*C3H?hwdwrI(4(K2~mxm|71qa~&@KurFu^6XBUSn~GI%I_OBChw%W)1^Ll$DkCg(!Y8WAxOPjt>ZjpBF=YrBMW z3Zi4nqRss3qKWUmuTFKhsYFDpIHbQ@I!$$`U>lE}XWUR&oQkoO%#e(L0wxyQqLm%H zUxv^nm(J<99h+n`EvzHS46?!M+W7-ov__VRn4_Gp)I7pGqB}-}xrG>s={mZCCD;9; z2@+#nxe@1$c}{$(!M=FPgT|Ta7^ETMy>_0m=g0&8T<*>G7s>QrH&*HoCtn}Fq7O4I z`k^6xtzr;eu-sOYH;Iof1&+s7OBR*RgnLGms2c%XBR)T|*bmHowkTU_-4Y$6u?EAJ zMQi8(T_qN;2xu)+<>owGFx(c4uRc*KYqx0PTS!Klp;wuX%cJYpWwWoev&~j=_uDiE zOcF$1a;~hh+XLeTqkRR|_qM4TebLEE>r?6#ouL@^-o{wlu0z*V_MrAKeL=%k~wKkMi_^AGFi-4Z9$RSl#RjWa>NoXS@mjtuE^%*8|lVR;RynL&}0q4Dy<&-zj5g6 z0=|>{#kM2!VHGgl-sIu@J@PfH&rs-2M)d56g}#H*1QZfPQ28V~l50Lys>Ob)a6RPCmUEdT1ArH zjaGSmF7x?%@$8Byd#zmg@0DMF*#M+r#ZZErqqV!Z-m>wn)qQzFMf5#|aUSO7IZj51 z35^@<-opRbd(Wt-x^!)KQ53MMNUI7YNhop=L_j2oS|B-DpdbPw2ojYn86;CgNs>Ww z&LAR+k|hg>B8o_kf*=`GPWguJe)sPF_U<$GIOCi%HUs|hgK&-OzMp5#nN0;3gP#xq zPw3a4Od|Nxn^xYAw$;0N@BFh#W8)W{8RH>?m0AQ#g9!J`jG)vG(9p7^!IFocuLO(M5XkY9hU+mG zDlE42jB04ff!phR9aOhSna!Jd$`23U@V4^ZrwSkB6;9NkG)tOONTRJr zJ$uh~MX8dYcLBM+QdJML3M5=|kc?<6TPQuyf8E~o=FABX?dS)lL+a<}Q?L_!rVCG5 zmbiIASGN)oy9a)fpi=71md6OYXgpoYpz!w$>N{?$dzq_*HM?kFC1Z)0m2Az=o6*P2wybMq zybFIX7@?{k)0!pPJK6VY_r$^h^i}Jb?DDw;^E(Q**5|12X5uvYOkwYtta(%4495(N zO~qBch{5rxrHU{L`9{|>tY(=I2Xn9>+}+V`+fp;8kxG_9<=QdC{D^*pZ-#XqM9ceA zaB`69vm|oV?agbZ^>QAL+q~CCyMx0`E-diHI3J&98@FT+)~8*)5b>q3{(0MjO25L_ zxOJBUQdz#QFI%kY;_a`f3G8H1@9o;uw_G?_r%bjdRjsfi6MWP;_?2P|j2kTH)LVOL za9gsFdpmTa-_Ra>-Q!BPQ4Kl;F>Sv4v>qm*(nrJKJYp62(b0L?(Kg|WtR|sNYi;G{ zTKlL|UTk+fiKFVeS$n3{6iW;SW=%$`ia5%IxMQ2KKc`&aah`_wJ27Ig`f zHzL~G8SD(JcB%|b0}BmIuF+W1Mz{Ugc{gfGB~{w7D<}D+tw8&vM!f}{(~g-Sh}h%M zx=d+R6f0`AU7E9EZncM@n5~A~OMC1!uYr4f?sU=mVlSyl9rpYdlN+<$)cc$Qhe+;! zj;y+67E~2A!iKvjbz*mLGw?LwbJ9NM##+@?kBFh&s3)tqMUMp##s(h5@ozqmI!Gvr zRcGEY6>##R^-O$FycguDycR95o#Fp7``mHSR&e89>fXVl%hfIGp4t3|xi6{1E>mVo z9Tr#}UVgn9;BZ)+>?K5Ngk(M}`D*vE%PS@9u;Qi8#?E0i<5A7ccn=$=T9u={Zvv-P zs0A9T>ppLkU88wgq#XS`8_(Y(z$e^z(KBxEDDLHP^OugGxQ)bjKu z2wo|iSR!7a8aSBIS$^OgI*@Vt##|yvOA+ys6t=7>wTs*1?s&Gw6B=@Ya7=4jGum4`PApWnkc|Pa@m;s$=8t^ z&j6m7VvS_8`UdnnFJq_ZK52(sUG|br)5U@8i!;;}XT_J_T%*i08EATJ7nt(7TH^4! z-P%~A%UE;4GxvdyFM=pJE?lX5lUo`d!HZ34+*%xR?@A?|^4Jctud@3*cw_#`9N@ot z+&|g;{9sFnWIw~6x#i9WmCmq*Jh1u4QO^AA=hrV^ZipQo@K5=}89a2I$@#h;i6SK% z6Zx`P>CJ*^^sT40Ne-=gm7e+MQevNHhf#_!CRuZ7p3EYA7H!W+;S5L%ksw5HZYs}4 zOD`~?!)14u%wyzWj*-z9LmNU_l=w<`V)RPH$OAQW#~@DFrhJmHMizsG{o3vD*hCuQ z4L5<@lZyQ*)`cYtX?G4AZrj~%lDv^l8{irLuqah&G3zbL&5YFvgSbI}w{i{L^5OHs zo8bi`l7tOlfPmsF>4?wXf=@?_3o_gyJ{Inott=M{?#Qo{6c?7Rl$JL%L0Oe-$9Y9% zK4?p!ipGV~TYA#$?UXr9UV_QltqgWw0y@~s?t~YLoQo~?)iH<{8t?HXi z;=T4{Ds&Z!n^{pNq|6tVt=mpkdYf3Tcct6cS_G^JJbvjMM)~v`JN&faZqre}?WNtL zJ5f92tPZ!jFt*hN$SYkG<+NWtMf9$e1Xy%Dtl0dj|IyxPv%5%JL97S+Ncn60THzOG zd7+oWTm2`TG+gXXP4=JQm0bO@rSM#^JFJKG#~oK)d5#KK{1DCiZQ`1Al>O+{C%Y1W z8-v8-0)n3Jm3JmrcB9PAgu)$ljgl+e?njkZObOT*!QCfZ$L{Vu_LcD7oBUjQ-1ek( z{DK`5FFW;BiAy2J75g($K|kKVjZzUo&*|!jJpE*&VQ~SXd!+sL635Qw%+2&>-NEE4ztW;&-J`<>qmn)S^v17J6T447 zQ~o?`e_6hCQ}(8-*YwNe{s?{k1l5IZXC#b)hk@+*ILv9JIaM0s^oyLTCs#&ae80|E zmK{QFrdtxW>&Jh|BZ zN;CGHfN;+;(+Gu1M=U1Ffa`jEO*>cZ3PFF4hJwv9fl2q4nX5c3*dAiR;ZBo&Y7eoQY9RfoJx#2ZpF|J-*@*5spxVr`DKzemyKYr*YP-`%h z7RSMtBq`MkkAow~00UH4Q*@ySPNJ9k$ei~Ql81(F%Tza4x+}=_TO5zEI`gR>jw>d2 zFi(Q#@2OiS&bF>SY(3z!3h`pW0lV=_iajBEt_%@478 zww=Vh(7{ubMyG%*I-%K|q~dfYB9p;_-nNwfv`R`l#+ELPOx>@T2Y-M@hB`c}5>Qio!Q%t8}aEnu$ zti@0R_P&R`4^=vsD4;A$`C69W0Tg@4(QEs`?w);B%*q#)#MY>cW8m>)W0^Z@tZ}i# zj2Ny(U+iKLX;k%`p}|fb4g?z+U;9Ka@%)sv%R?oEhI9hga6yl45oNczAJ4OVGhz45 zSqgP&uG;flBG=SUKHa#tSUY<{`$bal>-`J5PXta7uzcvqj~^Jh_RFirys*edg^riU zTGfG!{icaEPg>7t2nO?OP9s0=H8F?`i;MS9(|9uxU)WpZJv^L7*A?F8a~t5jWroyC zfwjIlvEj!;;;%epz!%dk=D-nm>qRwJ-F!_=G(voieb37NHJN|#M^|(1bg+G|Bq*V0 zCPJXBr&)i{IX+i|LQjM%)9?b8bpr!QXRDp4@euv2UxU<7sXtb{`7S24uHQ1CaaV(s?0l{gOEn`X+5sl4^{+6I3|(O zB+T>!tzUL~6=OV=GBTf0&u5(T#q*`xCxiWmCDV#4GGiUt@1nF8b|({0tv_~c8m1>v ze(L*<>fXit6Dv2|wJdWi^_2`Um8#o1(s23hCECSIj6aq^`~FYv-V z*>UJ5`0}*N{c*I1s7JnvucacSD*7U3+i`?zzK2%(xUVYV$I9NsK~=z>kVy^47RNDW zk58lPh%{tRN|9x35BdDO{qc+7msq-F`rPW9z?9SXvHNcFMwd1{P2`bw{H~dzezJl0 zNn1S)Yy7}{rXEI{{@D8f&Q%QM&)mpyd<{K)HBbWO%dHAII@l#p%QtLvfS0me59 zV=ypLN2JE>NOj%YYyiL|3get2;SvS$g;96n9b0ioi6Ig$AnaWVZ@4mo?<`^vAZ5ps zPVPtB<$@SIEY`!j*&r+o?*j})GEPUjii4OISgb0-9s~BI+}lmz!9zNUs&wh1V0v{d z84CH<`hL3sPZ9>CEkUQZASiocSFAZyhdg|g(afoFCvDhwtfT{hn_{SVuI00>m_Qpb ze`Pu{3b9KJCGki;LgMiz1xf~!Vd^K0fv^ZVAvJ;)2&Cd3kbNWmp(d2K`ZS(>VD3cW zUQI7^0>+7f(l_Etq@(s5c~nK?y>rz>MPb|<4^7n|Jb_PC6dG9K7V$_z2Eg!+u`o{1 zahVr`Nx0ZXMzKlZp2{b&pL`MH#qVr)&lF7FNQMoQ+Vexgcv2;Ct8<=77d?@qfVH|V zgDj|FJ{|Y4yp_pX@XSK)k^xZ4(lYm#r-3nrfv>)i-P=e~;)z;&dck;zOal+cVW5Jc zlmj(%wGI1MnQSQF5l|hW`IuCW_LMpYAikwaq>gAvngyULB6)^dV$b1|U zP^gB8JCz#hkIt)eYY0NxvSB}Z@=9tS-5?H6V+$^SC@?uJcs)$UEC}5)EHuW$&5?!F zH3h^S^t+`ej1B2-Kt;BOMa`TPZeEH;zPycVMUen!ztOyIm62P2f+(zl@-q5i;~Juwq*KKmES%X zIAbceys9Fci@AI6_LNFGLuLD=jKwU~wlx&qIEdW)1igASX-!oHQx#P@_XbN1y-|&_ zIb38u!0ZkDN^1>+9V7cu4cEC^usAz2tcIsgM>nNb_+zbz&~>WA+TF8d%5I=isAq+Q z-QBho$tP)b;zxD3ll2Pc>J^RZmA&g#)9ckWSe2n#jiY+}$;Z0q9$z(jtndBUApNo7 zv&Y7EK9%FdrP~w37#lOA221Y->+}ZOXAO5gHrSUz@*54#&*)Sf;V#}!JkpC9jY76?3Ma|wt{4JXH)D^vcg!_kRdZV|#hnu~Qc8Bs#_H*I0-caa ze`C$;t5|N0EX}92^L;62>?Zr4)-Aryz7)x>)l|Ryrua(PuV}hDR&CywrS+^~?PH_M z>g2$)Ctp9e5TmK~^Ty5D?gXKmgU_E5qiLSTBkksgBN~x8p$C z#?r?@nMW_0kM=fZ`yO3>`QpdX{?_WRXnK4MkYj&EQ|qY!kgs?ukVP6yKy zqiG0}?i008R=1_;Fia?RhQO0#Jrj;CES`xFZdjU$6z#&!MoGN0{uND&XJh1cmu4T} z$OYzN6&Y;i;#B#rUp?J}U7kxw-+|31Ue&*Dj?FPRU`sM|Q{&_`2^CmKu}HF6Nc}yU zHY_isJ9Y^yX1KnySZ%1aP8&`$1 zwaLf;hLAvv<4jLMcH6RmKwi|yP@xMaU8zP!O4CYNb=R@rYI*%T+tpvu)b2{%mzCA3 z7IL94)g2=}>NVYbWnXIhiFvSYNLgsDel+x*-Q)L`Wor!+ZmYkdsnB}kT$0`TQ?@qw z&?aC=N1(~!lrF{d?RR!xoA(#WzP|XryZZGdKq0)*0%yFl(F*dHi&l;ZYrZ1^qNb~_ zky6pObr`c@fG(Hew#`?MWJvwbwEExq)`Kl7|JEz~MDz5S{>JZDCHlJWYz-_w4cr=h zsC9<=HICxc_K+gu-R)sj{)+7p&1Z^QZ}2Loc1EvWySww&z$)6Hy$Q)>c;=#AbG*da zCrsh*t?l$wKiqk;w)@es2%$-groJCT-5lzBCV}$fcz0#*%Um#dk7KssN$+ISMkRv7 zEd)^6sM|ghCdDod@RFJaeNH@MAtUeOiizb?=B9bG2!D!h15;`5dQOY9UWnylON9D) z6kiUye<7D44Wf`?O+VsG0B@O^ z5-oJLrA0kSISfWd3A*B+&Wf`1?je1>s!sg$Rx{%*By8M0GKd3{lyt&V-yFf}gctR%XaH zg~wwoqjlquKd^bxIj*EwQymz(K8~!7bpdxPM+u$nPj((hf@or*WNDtc0bo1*63vkG zj!uzL!Aj$Iww1I20@p=XIKa-s+>7fM%a#y)dq3i-rfjcH2I6|CB7a(*yVuN>pE6hl z&fej{^A&j*>Jn8I^^y3r?R@Mh6ypp3RO0XHZ>1j@k*wtZeX^dg`;Dw>5q4dFlJ!^V zcZPUR)34I+pOW=W5kBwVBkQNWCx0WWs1m*j$430e`oB$9>qX!%WVO05_@BwzPIr8x zPI)R_YUWL3bdbqEC##;b7XK;lTDfylykcLRsdu>|3$ZAazXeXWc7}NE$1uPxA7IESe7mqX1J{^ z7qOwhmEwHA6Y9T8KU?{t%9TIKs?Y#y!Pe(4s8>GU{f(?fx6iaiG-wjZN@*qDEADAk zmvNqwNLGEjwf{`kbFl&o#L}}!s}f^Uw)t0%jpKT$ z&%RRIdwi9S=>1FXmvv$E<*YyP*aWKj@a#nPT%%bo&DnkVoG*qDFOT<&16wTcMgli1ThIQTdcfRO`Jr?&anAiI6KWUzVGYDBM&E z2yP)2uD&Hvi~>>H05EZmf!1a?h&|SyjMKoFse=HcuLkHvR*h&2TB&S00?8`2lxWeZ zinib5$O48kn2vTktUGey6&hXQlHrO{-)rCjgt;aBkh(24j{<|^LIOBgRkSt>xrIC} zMlG6Su9iX};|)-dLq+e1M%pjso>B1^sTp57QMK_}JS8U_?T>@22$LW*ixuTpy6Fm* zXlpc4|h`&VLaTg3Uv?~#Y3 zzb&a!>t}z>PyVT--YfL2{8LifBab;QzaY*}mfn;(ydd8{+;drM4EtA-8nF|{_DfPR zcO2yYkW_moe(B=sb>p&(IGW0eJ$^Aq(~79l&U4ORm3#H_#3SXP4PjNwPjl1zT-$ZHhgytC-38`>hV56kgsPUD@ zni4m{PVK(8NWQx}9wip^8%ia8ioox?N|mGdwh6|N8D$F2tH-)Sd=fJiu|hnq*J%X5f_Q6rv3T@mk>;%Kq6|baDn&Jqtin?_+ZGNMA$&VZ~NODhl>EXL?Xl&aBlqI zGys;9Bj94-PtOPF9ZG*#@1{R;yN$ZYfNlmi7Im|c1dhbEf~ul{sL>Y2H$c}Y{z;q7 zcYiV>N)c^gFzgg3!<&?@(c-Sg+gM8A>{0-D>@^jN!{t!mK}FQdg-aYJA}qro92pCS zp!}yIFsAZMu+2zoEMl%H~o14<;nTA1r;D0amXYCmMk@}ld!SJ5#_}|@BzF3p! zrfNhZ{TopKO#Ltw1Q3<~A5;Hg7A&-F(cbT;z+Y4UA(KFivY0f~wCvr^s_tgIjsDDfSg4X{z_5X5H)!~5ul=_!`cT*v&GkQ&bx+yXBpAPQ* z@*h+GKL@ImR{NhoO(v%PHSu;$`BIRcsxT}XRR7~X6!F+nr5cDtxyD~ixPVC z+($w_p;25F!Re2IQ5DH)4bif>V%k7Xyr{xEL)vZSH-jzyFrmwrXC#11&A=R?%Bx=6 zNsgq|J&y?8$Cj?+{uk#Y5wOhKCzAo`Bns5!cV_mdZ-3u)f)k<2n-Y@lI>`TJ~bCpNyO|yeXU!T%7_iuDCUX}xD zY1jt7^-F!01BSu7-?zIc*1m5IUg9`EH0u6HZs<+$>7V;^VaIiQle9N}9?p>ZHt&AD zM0??Ap49Z`>+QO#?>n1xYc)Ru`b?Iw#B_bf!5`GjhH2E1vVS)XkTb}J^Q*QZ4L1Ur z`m@QUx?5?yHi9rzIiQMa8#-+x7@MKVj5P>7Q7CG0>P`;M!k|e!e>#LWZyI)ENrCln zBMe8C3)O_Fc5t!8oxj$o0DBo5%H_csV7w3GdLi1v$23jJ726^aD%v6xg8@#cDlw{C z1&hRD08`gcIufgp(>|!^6OLVsS^E+~^_x-FRQ_<2VKUju{4j(ajDgf2AoZuFbp+;y z%3H`$SN+LIm|AJn{Yfv1paHol7*%#Pa93g&R3A-)jB#oZ*g_VmdTYF?C5UgTg-qD7 zl>w55Gp1n3%;Cn^Dp5EafD6wt*7-**q#{}~HSFoXq}Z>unt$jnY5wRgqyLTWQaeuj z-%8l4wmtulu>T+FF2fuq!DHjPg=YtKF1?TbDaHPa?vnF*`hTH?|GK-(cW>r#Atr2v zcN)JXYywdMdEN9(N(uskeNQ0z}F+&1LbYBpj6TA23r&$i$=x6i#Lfq~@=r^xvyQqBOor{3p_ zlG28RI0@A|GtrDR0Dq8c>^@K8wF`J`VDLuJMCKW7JhmK9+-ZxcdJ#Kc`AX!7NHP1P zwZ=sv#h&l2AAPkgj7M(Nzl^WI6@0Om19B%W^kO?c+dt>eQgryS^SC+c$L@st*B^UR zVMK~4I&G32EEQG#JpA(H>(8T&SErA^Z;v?~|JYxwI{x{6?<=uAr^*H>R9j#y8$^nk zx;~!@nYb|>aLo||cc5rR>Q)ER*0YhHl72?*Jamt}!&IXMUkhoAy7Bd6K$2>Cp~fL( zop%n^&G+)OGupxRL7c?fk1nwZ{!X#u-zY}B5JEE-o!s5QC%YMrkIJPlQtcEp+>9{j z&t-Vh-6`U=8EHzD$Mj0IOFWIpE6qHXvFcXJcZj&s~6F zz~^t|A-J0Ac^VChmXkafGI3R4U&k%_J2%%2DK*6v9EDAa#TN#Iszx9NyfMVHb~QGX zOm4~pNSWg%DGK72zyJ^~7<*f#_gb5-_x*`{n#v)6+pF9F?Gy>4bI(~NhT0?&5J!r^ z1=`f>CO_Zy7bwwzF)p=)=^M@A$iqqLaIK^yxK@M-1ixFUO(BRUL73p9L5o~)KEp_k zEH{WT1E3HB0>DO5OuyCwI+lM*9;w{|4-n1CE}PA#>GFK$K|T$Z$^8YIzt@ugZD{^) zE&0E-K3H(EM@co`C)6fcquCSvGZ$6DQTE5HfoMK?PfDl2(Ww zTcZNlMv2p$1dc@ak}%ixj46P4m%*jM>LC)q`;i~SUkRT@Qn5u1m9CQ2C@6qj{{F3C z#;gg%pP2362%fEWezpOBI-`!QJ@XR3F>;Lv&G%MS{|L=%FTNr7vl0V+g(^}m{|3#A zb|SBTLDSr=omS3+R`KUAXvVz@A^8oO*)YcL7IN8*04VCeQa{Zc6=$ouO| z(%_rtpM0hW5f2B2K{@DiFo$adhAo?joB#?J_0Q3i7JML&^rZt_LiLm~Hbv?}_^;Nl zyFM}RO8|9+g*_hY;14JS!^5*1zraI?;}ABg(Et#DdcEaysB~eQuuNwkg$w|P6acEf z`CKZv`4{-iB|H2qtmyE&uwRnTg+H24)>Y?!a)Y7eh)WxWHm|zfU-4|uQdHeUz z;TTG~FM5q6O!npTpJrBDiynzjg5w0L_xQ7$%t<+xG z4{TMlK_O`#x|W0IjL-eyvi|;O-?xyd^KHXrrHRisv;^^9t@FNy3!>4V3Z%nJ`0$Db zJb=OeW3%_K3H!gz-XHrs|J&^S<37*-yPCavg@g=rlu!|CG$a(52q+-5&S^nH7hQ(} zKw-G;Ss&oKY{(zdVCPuw9*r7`{nbjo`(^LR1spTwF%|K;v<(ntb|qt!+LN zQqvw>0L29lQC`4*n&&=$rSx!OidX|vtLlY=;YunV82dxjpZ6AlC=7u&{MB0R=k&6e zCo9$eBont#oc>O1_8hPSUHnzwzj?2vPdC59i&&uZ#S?R2W%(;cw^NO1~H5&Dw)uC)lsL=xQjX3%OkANYx=O6|%~Q zP$7Oh??(GUy)@xUiRaz4%L^K?k1jy7 zqCU%8LLFihkKf<*cB;}&0d0xJoT|g!6NO14ZN&tH?Z9$}nngVRG;yhrS=gx4 z)`{8jz09qoESeHmxlh9mHerEmG-*7JyI%t9U$3JZHS}M7BD=TjrR6g>GQ)kF>!PO8 zS(ULqL|2S;=C3npEShcf*oTpF*-}p5Oafs<0b8o_`;YD0m>St84Z@3j}pHr8?r>l|l#uas= z1fe3vXr>aC-}VlR8cO5*W#W#RQyH>Z3exOyVQSV%^ds-4?8*wynr0+4+1|+}jSfgQ zxf>@KS1v1nPULfdi6Vp}Sl|(YjBItb)otw0t_RPQ@>;7rW#MD2mz|eflb^7p#D#CI z>)tgw!yrNRbbj|7`q{kXHR4)l41bkUZ8xk}go5%ahvCt;dm063T{(Qs&lvbkHB#;l zyC%T(ds?XNk3)R>=)60=1KKQO?y_xV9qs_9Z<)U|r>AP^qAQ^MCa*wT_`w-QwF=?o z(&3^i>z1tg$-u<(jDGFK`mWbj)HjSr^fY)V8?h&@XpYh9Xzl74T)rBjWz*jMSXF~V z;)Z&l8u(S2aQTyRv!ro zz7Xsi=IMbrqe;Q}AT}*m?T2UH?z<+llSK#=P8_|N6%M80A5h&Ck_1E|lNOA zarV%}IgF9`i#ygw`X#PGscUi%WUp8s&g|Kr`_cd8(#!KVUtSsWP;p5Zt-sXel2|Q2 z!FGnh!|#68qdktD7}Fi?g^VpVmyB!nTRq;yr)lW8kMyGbcmi1PhVJOB9q>L@{gb|` zTimp#1v*{&rgk+iL_?E*;T4eGJ}1TA&a8|Y;Q~n!3WOlMD6dC=sa2(lLbgX)=oTq* zN^nGhP`<(GD07nf*l8)@@Xjl&F!wDrP3asCL7j{9Mm;=VLg}Hdui>3$w{)0VF9~}& zVbZ5S;gKSg3A7PuEf;yL-d42HqY^6PX{Mtc*CmUtiH13G8}Ph8jUQ5`vqXgRG!!%s zj-!+e^JD0wT+Rl6c`bT4o2NKc%t6imEneDiR)y#38SS5Qap~LLF}iR{+kwc4bRA~C z_V^Aa0mUoQZISG!`GsV-z=v_IgM#io^tS~xF7{66mt;sVT*_5Ser_BEqZsM6VChOA zW465FB@KyI48?b&rc|<=IN;$63~dIMWogTr@!vJ?U(2&_9_`^0k5CMrmqS=nNjG{} zQi=aaCunx59J6Y@ukc{wA&7D2YI(~(pp7&}2vf6^1PJO#Y-_4>-4`zph>BK93!c-I zJi}!(=^TM-otM`%!w+lHtDOj;JI7t88^4jj9j0#Wfp54F$+{V()kX$Gpr0lbF6FZH zkmctl3`-DioSZ@CFstd}=@FM4Pkme7&3>vjT!zdfIa`PymLe&h$k~ouly<^RXdPO>P;IzlJID&XchJgGMalt!r ztG=EK-&0&tI`$61D_Fr2Cm1=Tj%uvE$NS*?+f3vwjR)D)lA%smOOD*}(w(8YG(?4E zJfBhcaiTtt_>EJiQFdr$M;)%0kNNL%&kP69?=>`rteO5SG0Lu&lw-c5al58i?_j## z`1t@6{yy3`50lJo3!XB+r+by~T%60-W17`Dop@N^?xsKGVvUg;n}`i}=Dqqc z;5l{7kGqjq_*y6D<+`QD9&9GfduUoijQG(Qg%0fUE92 z4)fh{sNC7Q+n`MLRB7^xtOZ)qlbha6*FE_R!-;24dON1CDat%!Mz~mZXn%0fc5c_x zyTf(d%c!G7d^;M_1DN}#QD+otk5Ei>6rJ#u8s)5sxRqWe0o|@T<$XDeGaMR2!a8ak zN#7wAj@z9Pll|}KggDh*=7?AQ#Tg62ZTJ}Hc!Pfu3N%P5Whi-qQ-7Wmqe>aco1+vv zm8j;m=9)otaxw`C^giB9u=UAg8^dzqp-Q?&Pr_EVN;^nGP zd^A5ux{1+6N8Ndm5r|$iQH!5u$knAK|45^A2KX)v-AOu{%rr|@kUMq5{nAO9qk<B!F1-N)Qn*Q2v*QDB)?#_cw zTp&A}vqned4_!Ayd0(d3$n`HEqDgQfi%QRw1#o?RsJLCZpHRKJ3ZM4Y-aiFh%(g%) z`GFtbitG{kxi$$lwzJIl1rb-$KdB(x=Ef-f@7?d%!A6i3TA?UqrG8$`eZ8Gx0y+dG zHY?Rv?Hix+JF3TNd=v5%7{C7@KI5dtqLS0O2)8TmW?s>)oV4kYk4>|U6n(^nqKG`6 z&|!|e&Z^W-O3x;iRr7PV?)XRdQ)!0VA>Rq6_jlmSFBF;feOHFqff~R|IlxaTpW#-! zbvJ|GU>>Kr`~9#Sf2UA4c${atnfp5__C&x}UC~Ws&VT7FlxW42P615hx}E2T&hz`K zI#VeZaTvI(?%uw+wWmnW#0*cNd+HuQzRAYbdS{TIV~5cOE@p#razSkdb;h}oJ9$Vs zQ(1&KJZU(Qo*fYW*6Tuz5AC%3^%PdlvHK@;oS_uDvmTJWiVBR0yN&p^%LbK9BZ|`l zt;}@U4;P}66KomcFFg{d=A_6Q;0ouwXY&PBbN$VWEtcaIsqf8Jrdh^8~UQmx$_c>3RhR0wfP~LS4YL#XWHGp31uqZMyJ9SeyF@+~W z#+gh(#j5BA52$&cuHRa?33K(*+bG|~0KqtXg-i5_Y5H|6y2cvXBE)n%#TY86q;EuZ za}tuA1%4V>8=+!$J(%-6gg;@~Ny5<=UBkO|5TVwH&PG(xM)b|AzKX%_9NScKDGW!1 zz=yH1cTo>6wo(XQGj*7cwTipB14aW7@)Sau!wH#rE%u^W%>FS!a8@i-nt`3i6aAer z5mpmR8V-r7J*eq^AS+LKi63GJzwV*R%A$se$_Ar0613@*l&tBuJQ9QV1j;k}A=`8WYk(_clXyG)QY;fgM0HYy!X2^OT83{E$cGgSJd?5U zlwQ{KY@X}QCNZ$RH& zrZZQ#D{wtpxxtqnr5FRGl9HqmZ|_UXp#oy5dU26C*U>t~ykd=JNn@C-9#jK!2ARMq zX8~Dl`QXuAHA4D1R)8pRAX5vP%SgT3*tA7h=THtWUB7QA>B$D>LE%B zBh~iZCRc5_6ko99#NEC!?Ie54aAR(Q0zaa+-n%EYbzKZ?9W4Qj~`c^5=VYoLEK_4!wy%Y#jLFA$|yJsz+}%u(99KH;WJI4 z+D#E;>M4DaU&yF5x4r&iPK~PAV+OG>@xF*R@0m9ZQ5m>u{jyNzNJu>uebWx@H$)-Q zz?%;t3#Jf`hAcSm1|PACGvSZba=?UG3Z1^kw5_0Hdiu70-98K3aVni`ALG3UWR)PA zQUeV|#zZp<6v!motwMg#W9nO;rd-uwI^|rOji+Xcyo}Bo^ywY2guj(RkEby#KdoTb zfPBtDCfA`#2=(a$v*)uW0HaUy5!Hv|m+?aP7@=P9CMQWfd*Jo##3nM1v#=EJR|8N# z=6_Ba_mr*%`SSQsX+Ws@hdN{@P+Q>5(BDGUSyOHWK6-_rY>wc0<_%o|ojw`7U<@z^ zC{Yf5$)P8?U)n)=_{Vgcl&>gJ#TcY2XKC)4m(xy9Yp0qm@?Jt8UZTXFsqPs0nzpLR z*TP8J;KPl8Xv@jX#*)}t@&IK02J+OM78t5>!keMv2s-b|$t)jP@IAP`&qnPBL)w$WB`Q+MXO5J~#XIqWROcyxtE6yxN@3OcN}-K$IJIUK z(vm}+KQ8Cs`2xD1^rjOl^y}{e#mYEHUeJ%EzR-JV057?xi8N2=nlEZfCAVXc#~~Q> zBe~&e_Xo%zKj3Fk_CBA|EYdY(}+_<2XN zkR&{BY^Ra$R?6uxLif2Dy^- zs)rS2Z_Fk{(!J^P+DW&4R}OvT)378kU`_Ixfpcj83xs(0nk!(44%YvXyG=>HPg8z~ z>=bmCm79vKh>^{1OBKm_O168#ctMzB`W(9W8FTdN5WoCD8t3o;b})T<#H6E#Lg%IU zar60T(P2iN;V2u3o^>Q+y6#8r$f*%fD*6psK!iKW(QgI`E-j->+-yGjk@GGnWe$)=+-ggAu+C zv3HYA58@{e>5@P3L}sH3DuTRzoc9}`xBAgM{qa4v=>+qdplh~byl5eNPM>cS&jnxU zzG|xemUP<94>V4RMff*va} zGG8YC$@IH%R9_>R)`X$cBB<_)EbF-U!~KZDlb-=R#e(-6=&nA=Qj7DogdU{o-1*bA z(?##?dPWr1bDsP=HDjze?A%~9f2T{YIAD)7N1{gkus7?I@!(S{7 zlTe9kmc7^T*3#w|@Pn*O%=IhL0W<)idYP02be)w&^a` zLO97_&-ckwx#@S2t2}1jC0YGtF_5tcv}G_-C6BBTh5~88K>OK8m0vPVpfJC;r`F|c zv>|^s_LnhG#>TS|7Pjm`)II#i{L0mo(a)~&NXuueuh*fFyI<^C)_SO>=h#PSeo)9= zSl{}2UPJ@a;D>(iGw*h^rpei*+?;z;(aKxBC(sYt%lyh}wqlrDbVTz=r@Re-z5tGh zTLZZPIC64%-89VCd7e$gOV+QfRIQGJfiau(^79Y+>y!pIHjbIex$VuHv#DOWZNYTD z?UVP8eL)xuqW0|{)K`{6pHIuZ)}W*XYQG~gT4y&9WK-0WlbN6Sbk?An<~ZlI8PsB0 z%>sGNsL}e?1&(b#l3oS}R2637-Qvjp2X z5)Xm)L(I1f{Rk?YN0XFq{2(P-ejRphn~UuMxUG=O3c^`b#uri27g4<_RCE`a?nQj# z2v}#P`(mVhK=p9@)XWYzyayv0en-7OjUv~*h*r4|G1zXDJ4U8lF+vaC%9 ze0aCcLYzRD+(U&sl6RM{6r;~86&xmB*Gm{kLr{h8+&*JUN*Y4q|7!Jmy}(_hR=T8N zeS_2MBn6(a^-p0V1~c>f3|!1W{63AgP(t;XX{9lnWkymAt|giq-IBh|84S<`sk2)r zW#=oU;cc4e%OnH`ON8v%4X)l(Z?3w1+E>m9bA0ADDYdFxh{T8biiY{a8%%t$R)hZ+ zZ}%Av_xkn=e~dO5%;??dC3;P?jLzs?^cE2<2vH)Uo6(}TAbKZ=-lF$T5FtwRL=6cd zu}9Wg|FzbA?`J>zd5&Z6w_ZEW>zwQNy}q9s2Ye3Sq~`90i9#(Si7_q(e2+@fS;S8! zvY;RwJ|V@$Q;)-hXBRduLe{RWT`j|h-0tpvQH4_Ri*H}es9fO?Xfi!uph35Z0Z;MM zs=G0Hgs=}6E2Q%Qf&6UeReqe}_@e$?U4}T(N36Pl)z`gH>K_;YEM2LJ^qg+Dp1!Q` zygsD{oG2ygCZ3ifwhI&YLP?q^krS1+?m(OVi8%S`y!ryuN75rnHjqF=DSwZVh{2NA zH8f3iPQv1uWMA3lJ$@YXMby=mvFU0{J=R2DURnV#_LAJVLX&p;w8F}y9*#x&>#%d; zeTQU=?+xj!!gQttA#P)|Ey_9}(d z&KDSN@toAq$J)f?p(2?^*k?*+Tf(r^;V2JzujCkZ3y^i{x|xq1;2W@OE)fe7X#Skv zg}_*__-a#Hk%ikJCtb_DOg7=-q~t*kxe3;59ijD;nM7AZ?vb3APco|2MDXVd4T}t~ zxwdVJMYHE5%);AmYwdDia}fYeOzXst2u4UO`A#6p^sMoxlA zMDaYvd&#}sC*@Orvb{4WBl|3T7-RP3{nJ#CO^kijvgGV5-EVi?=^1upq=k=vUKDa_ zy?)=ChY72|soegOY*FJJ_B1Ys($ZtM_(!2tBpprmEb7!IJKYI4A>6CgOe^e%E`aX& z^9Nr)PJ70T@}hr{q^y(KboR7q!j{YRSkJ%1v8k(=Q{H4wb27^o>^L)nLSd?~<7-(6 z{strh0s=8j$&v}-dP{ZD{A3UA;Qh%HCY%WpbvQ5hBJUZ6?kJSe{wUG*Su-AZ-v z3G3!AzcmY%O(e~f0;flR5Jv@pY8q7^G)v825#5^C>nX=$U;g+blsu-1s=r4c8pF~v zdrP6KGo~%iAAil@>IgGMbhtmrmo6O~BpONQw;jz5g)&~8$jYBUeJFFW1r}$j6;cSG zj?s3cT_mg#*d8HZ8auYnp(+4>0TNbE)lUGxz;=^c%&$a^H+6EXS^*@{6L<0yuqf4b zFa&rzRo56&ZID6m;G_`hUb!bBYT0e>0$B>|9L+-LZ&SIPjYk zfy^flrdWdl<#^KKfFsiGRI_7MdYFTv+PVO?A$I<{F0&VBX#$i+u0Z5u4W2iZ944pm zlH&fupStnYDhlf%2cbh0U-H0I4YMkR+!nZfY~xRUVgSO@Hso@46XXoBQzY(lTLwfT zyy@#pvED^}>rK_!iSaDcFjGP>4oa7Ni_J1EwARy2d;9F0CJ``*{N8c~@71n`v0NAk zX3qkG>E@?A+AR0<$WTG|SgFc>V4``oH)$4A|Jq@fd#HMNK#)fDx-6=Y2fxd)Zrfps zd3wG?l&Q&V(Kj{`0~aTAwFGsyxgbG<1q;ikAC&3Wv+zF?x<311 zx{71e)U%&1(uOb#)1DENgS$?q-Q&vv0&3pGm#Er&SOQ2xTj>NjAN!XsYMg$7K3qOf zxXo?!;gqz#oYUF&LGi?3M|gu)uzZIc00`||C2RNMSJi)SNhU-LU;$y^$N>Vik*HK+ z&%Vb~3wLw_PF0)(dnf^rR^>HOLD8K+5SCOiZ{U+BMIHiy7mcV(Rw_VZTCa%JY7mY8 zx$5UAI)2fIHn5b{o=AW!Ua%laf)}Ibw&5gh6n@~{INf%-YaKp5+0I~o!d}AQRsMMX zX+06Xi-wm}y{ux#_k%-&Nnel%npV=~LZ`_aU#|A1c4hMNW%?>0^?4LJBq6Pu@5WqH zzN(r)?`N^63p^S7y83N&TREL1Of^Q^^M`+$e8l&uedhgmBKHTi%zo3neV&Q}xrz#3 zzEvhr7^YL6M94i_RE%H!;`yx_*WkrA@f)Su3|kE@`6r}B)3Z!WPKi}C98i zC9_+QH?SsO4&XRA*TZ^x;pZD7St_}5VXFR08IO|ex>B#}2>KmTv%jvuts7Rp@hqcV( zPuxf<@Vna^dS)Owp$i|B7pOFe) zU}0B(A?GH8;_N#$2GVOQ8k#B6a{`$H`14m;u2Sp^C!bem01b z4V{uLkCL5~(tTE?BQ>Q5BK>tAs`edHDLkQQ3s}rpA*@=S650hq_0I1Ew||htw+)ft zl+tEJ%9jXB>nPO02a0s$ROpa=tGy1+QSPirkI^Xu&G7nR} z&H+=zg!@5FBG8{iqBlxOfmc#M*`+Oa&9ovm6tpEzAabsf zh;u?-| zLu6-`CHM9VtA>cI65I(KF7YHQ^CTt2ITd zB}^ikJ)2tE)PiZ$+LqMb0Wbwt(SK};w^r`t8I>VLyd?wi8>{nckM@hGmkni$i;VV# zs)q>5^5m(FD3H8>y(Wqr1T-sAGL4*C4K4csrlwV(ZDnAZ>?#T zpqZ^w-Zu2A##F0*gRZb?BF&Tnu-X!_2m2K|Mkb*Jpw;HX&{*4GIm;YUjAXm^&%R)t z1i43IVe6EgYm?juUp>wMXEEVvXEfv6ns>$+6iO<4GBTB|s;w_QNT)EMv3>IfZ*U$aa4^7Iddy zMdRI(E~qxRVO00J`A9uMFjw1=nZspd*_lfLsL`#ha0jV14$=#D=-swcBL}mUcF(X! zmg1deeZmT4H3!`_AIVBWa%rHhY6z{2$@%&S#A4`R_jS{UDXuo6GzSDIVJREB1ECJ}k_O#*!<{%Q{N z)WI>vk;zfl7L~>&RPS=|^rICuW9g$&`^K-0tCI-sbqfT)$5;>@)^A4Y-*Ez_ZGsZb zLAM~rYgU*(WcNBGg4aBXlWmQ&6xn}zCgIz0hdqm-@XAQf63GBAsz{g=NWaTr!&~#8 zD#gCnY;1x$GO(*%EN@3<>?_CoT#R2c(eg0Sa-0`%1hPyn_5~ZSC@egA7|gQzKBfD8 zLZInL(gzQB)2H1ZqB!R(g{Bda(~)5&g4FUbnni^&)7qcBZ=ad1+APu5-a{hI_5fx> zUKB|&piy$7*5#$vT(hflvz2>>QA$W@9ePt*pyIam%=o_ZHgCkpenqCPqsJ z_%j*>*EOPorTgaVXO+qNpb=hF0k4JajJejHy3l=#*ABrO^-(X>)q9dZs+5@yxJ0eI zvl#nfaYS!`flCS4IfB1GM8VGDEo!~n2=Agz*6Vg z(zvwncXP|s9ZO72tAuzX>>}d}m(@s{RocsjFsi8&IV;c{h+up*LS?$o^J6Py2@xqq z#J6_rVo0jV1P&k})3lBh_>gjGOlcoWUWEUH9!Z;RO{4Rkxpb`o9rYiyrf0BWF3N>L zYz`gtSA17HP7Jl=)?;=)GF#l{8rR{`8=1_q$q!i%YqI8>TmL0t69%xMn+xK{u?>*4 ztr5{|fC+pOo#SE*um=o5?q$-`iy-Xvxhy!O7? zSn^u|w;@u_)y`mKT_wftZbL01#V)96qiNMzgJK!umz@p~1dkmo&9GS_5PYh*>9=R` zA!|*Kh=pa)&afX}o@yScGRt1}UYi|h;RDjgOSXNIN>6on7xdp+%l}J?YaL=H{I3+3?O!RboPVac7C4v!#ew84 zQcYWSN|EA5d!9aeBjc~&lHK^tw|=*lGq)9ba^xmDIqK@?_p<}Iu}iI7Ollu!R#|Ce zaNqXKsj9|_Ae2W}!^xVu#*9BacO#N-x%*b;^kFq3xrzSlAW1@(-6}%SfL&&^>DaW& z>BG9B!$J+bL$VPaifXo<9ap6cVbGxAGi!{;5N73_;#U}_Gk-kV-NO7TA`u5~ln@~< zyJ9^74D2ho);ng1wLsL<9c#$Vo|q9-@o;U%3&LEe z;+lB0&8Xd{kFJIjB*a>wO>PcL*PX?HGa;FTaHF_g@dnq?)o=?RQDR%1=)&?7&R6hq z*#dLzOG1%wid#5^@8PQ7c5WVtM=#rRBE~-~^FkTP+OojR#ou z>H0aO))EjE( zz1N)9>`Z`K_kvQzY&j8X?FL{Wq6*Ep+RM@keS=j;L*~{fC#kKn zMU?tkThjG2U(`s;=hO@hkK_tJTdz6-&Xz!3I=TG-6agQP40qh?!vvA?8Yj8g?Zzx9 zh0zA_(uIH#giXTDKDE&Q9ZvHWu9d2BY=8y2iZ8?15ibJAzJ;FPpuu3J=OAi zRy}y97h-i1rwQ|=<7c(H*H?TjNWL_*YOiFGForH&rzkVvy5lx^)>^5#a$(7g7Uxt zWI`&t>ikUuOM!1v=J%@NnD{7>JE||~u%k9HpD8cF-*xl(2fcmCdKuC3wJCh@y&jn| zo%8dHL-?Zr<+xLrqp9Z^SJuzOG;ZFfdf#U#v96UuqUwfNhj7`{K3}sSFQPFdzrG`u zsJA6xVitwq;2gkm5ULtG+f?`r5H_qfE5C)*1ijqeAQG;RuX##j6Vncj)5P6Xeb@+Ai|Ph&g-=Kc<{*)QUx`kx`@?79Hzw~sepc7 z*#t#BEJnF9F_AakrlBap4ISyql5O}dcYxYJ;p{O|&JQxP#bQMPa>z^vIZ19y^df}2 zli6!i_{1*bdGX`(6CG^^vXV++&{GKXdQgQ!M=^Sz2~0=2%PLP_7LUggzAf-RMUEsi zfm;VF7bJubkQ)rlRA)<4X>2!i)L}V7C9-MR$QxMny3$Fd@lvuS8Y2|gnWJM_i^xfA zND5w%tFG}quZI_cJklWkzh8%gR>GLc85fckSBVYkNSkr-Vq<3ie$=ah zNe*R_jC^YlOAxkD$w#T7WI?1J->V7^+i5(qdq?Y3Kd)4DqI1=~nc18Vu6DE(hM_VF zf|@JT8L1-pP&4ppu?!)%c7)&UAmhXwoFQvdsq;j8=9mXU?Vo5UBoc!ZVvArxNh0PM z6ao*YnWF&&hWyMEx}pUNn;U~LW-q;J=j3wYwcXaH8N>dhdNKaia>ePrc%5#q7|VAk zW==t9gr?wYC>ICY#iG$$344=AKR+uA48KC$rr@=0x3XV(*W!XL=HNk&vNq~AjtQ-Z zeA4cuF)a}RI_ZjFRKpn)!P85-4j-1~Dh<8Q|2e*;Xyd8M)GZCjiNcy#xOQIV)Onn& z;u#aUMD9EtVmQ~T-t&D4jN(wZ>YpQ8? z5@EZE*)`=j92MQ%H3zAXC2BQxTZ*HzYFjZptziErBCPg=%5Uu~^G_$Vi{ZuLjO!Nq z9V!jnRfJK{Zv7-5N(t;Otpt{7+=a#d0L@=R@ga0jYtH(&I=>bYc)LHwnE5b6o)E;9 zE~VEmP{^4V4cdRuqizK}ydDD>Qne#JB(#IPM!#>msm$70~)*=u^`?LWcuRsAt73j zK!KbD8v$o?Awy(#&)v!uRt6Jh@a7lJ68U<{GE^#=&`R>T>49E{$T1&Y&AghgH z;t+H{7VCYVAmD^uJMi0!1?h(Tv1^W57t|jZWxX1=LCUVAtR6zt^{RP4caAAO2-Wb> z6q@57REtRP_<%+4AK4VA^+ruv?}~f%w8aksVFSvB*u75$??)xkF4MnfO`4@2qHZi< z-OLPW!w~R@F#Z7JxYk1TJhW5Tu|c<%+czLHo>8^&5a^3-`gm)~x}$#hlgey2a|dRB zGB&PVpGrTIm5}=ImhXo^yU6g{AdkZrr_8m=9hdL;Eg)5I{b4lM5(s$3ez9c12G;I( zco|W=sx~c?{KPT4AJK8n_u!o}ftDcM$o*&6j(dipKhzRx9m-E)rX0kPRdCuHY&G|kguG1yyxTMj*nN^FXN!^^5%l0CoXD-EEB>-B-J<3`D?_-#qEeCLcedet6%R*1KopXI|Nf#I{dhgzY#2wHPmq6z3W~fYr8Au#@$3{U*6 zWdq^IWT)cL93v?m4!3?`k127ISuwv`=+B#LkI^|O-Sxn|d1yc&83&bo5+n$5Oi*4O zQjZaA)fGq)4Z~E1w2~?sbD=9WrGBMhd6SEa=F{xHg*?5hU?^o(7WSPc1J{7;XN6|lgteVz}-=t zklQ;H_}7CG`PL7Kp`jzzLGE1^&%Q#Jji4@R9x2+E(N=h`(nt&<@If^ZN*ES#g9gWx z6#3Y4mMREm_ki+23dJq9IVIE;)GvR^4r?vyAr@5$2-N}$_GAvh?vA<@q*a;5kZBbG zJtinJj+$JHh|Y~l1|TP)QLI4^S?%@4O33Ee!->zKHG#-k2fFPpPa5l(n6=QB5{9J` z=%mpL!5V*VCKPEGUUFT`tpvgwWcAX4#Kz%a zMPRIc333++!Lotj`I1d8u%&Q9?-kJo2!Nyqaiuw*UZg!)4UeZq@ghJJ$0{#iLQjvb zG0gx12{=$gQtCv;6R=8}R+hVyzz_}pIi%7@sxiniWD+-E((vvDL=_Kkr2@$VCDru@ z=%_@!FC^)tqF7Zi3hB1sm3>4eYZ)n!jP0Im_z;<|6W6gyFr1T28y_YDL=Fxr2F`>$ zMM2yirk1BkF_ntjkQl1I50_kfVKWdbydKm~#Szv_`n;6%oQkYP5n2qvkH&*mXhSlG z$Z5FJhOl^4lw&pX66cLA*`XOYQ|T&D0y<7bpNG`3C~XRzmy>JeiOq^Z%_MJqsQ@T3 zr6fN_)eJM8Wa253o1ncMVs@HwOyM{H20VI)(q*?YZn4!B7qugDVaoKtREg z%fl@nFr{p$`ayeC@+}+jo@u|D z#wZ|}!Y6mn!1Uh^Uqq~PX;8ecN;riM5(73k~RYPLXKeaW%`WIs@3F_hfG_wH6x zLyKWW4$zRXA*$QMbncf>U3`Ed6;$!OI1u{KiH5D|Aq&PL*=__R_?iZ~*-Y2&3yFjz zCoRH3-!e&|p)~mD99{S>Q=#@Ag|Y;+k{$hzm){&wwr>sR5^;*)rhmlE_WpKxaa_z> zAxn25{D&rxTzrbh?+H}*ERTGhUm|j$H7O5_Ao2Lj*{ivQFp{}+k}gNcWKJX_X>L`B z3s-7XsA%ldH>9xwevzHHEj1N7LNSOIUa>`rEow6Bci{%jcvL1NU+YWF)=C*=@t z=^Ns?BZ`@=Uw8N56--vNOVE@JzecR#-x0#&CCFH?Y7p9|kRN*xH3FJ2zpS69NXC$IPT6{jsqn#_@N-9)DlHWE2SkH_swgL~ zrTFROQQZ@++JjlU{$W%#8+!mCTN#>(r~!{yy@_EW*f8Y&go5M>SQrvOpOr&Dy{{$1 zNIv?6OJTxdeG5|QR!5c#9)&>j0;`mC-Z-$-Lr#!wISt-D`4DImS4}<8I@e|$ltVz# zrP|1OjL&3(-)d6$8cvW005h3DVxk(k*P3yIz-=Qm`-tqPeo)yF@{kWKRdKBaLCu19 z?9ELIa!+bS)=QHF+O+c8TAZlgeqc+o!mE&kW?v7tWSF!?LmH)#O7F(yE7NgeHY(R{;_CXrS zgwsI9RENJh#Id}YRdztSwu<|-{cb$I%k^=u8eKWWW{_O4__@>&G1CCG1KAa4yVX=D zT?L83C|!Vm7}p$i{*p=pk5rA?(2qJ&U$cJSQAY0{d`6=zgkSofRt$@W;-$eLSve!E zQjnJD5mKf>+~eVHI?607Xcrie9XGrigrDGpXGtfSGD`k#iJsDbbXR4Rwrh;jeGC8} z^fw!+d5l-nnNtMmA7L72>m4@>%0>wGNuXN{Cqbv9(C_NdtjL-dIb(c%HF01-MRhTT z3lzx%*~n!0<~)JbHF;?UjhP(!MQ4%g4^e)SEHgaFnLA{eFai1L)#xvN0H%7c4y~xJ z!sdl?{UpWB67Z^4lct-70LNvoXTW3CV73^D+RJId&&8BOik{V-5INkaRW{p^0Wo^Q z5$!3;HGEC!DLN)RPZ%Ch_MI{Yeu5SLVA4~fT<>Hv5fO8y&Q7p;yJ9xYEKp}wt}=jK z3M%q4_9*i$NABAOEL@-vRG+-H!U>wSuG7wE%1&|oF>$*r_`=?}%+kWRv+eshvB8cK#`DAElCUBeAr z#pS1mPQwVNAcUUNE7w^JV$0Ar^M-apc9x$Wn=T|TR>NORPLSrV{2)X%|AY_(jGkP5 zbnjXscP|>&7`m2x>9bYyUL*hhKI;Q~5TJAYnK|?WZ_e^h2=0esX+nCe&!w(|ljB$G zMDf-8KludtAoz~3O87j8F!e-=MtU3?sDaC`u^>|=dxwzyGJ}C37Q*KWsdj>VZSPHx z-i*p?0>CzH7(_a`=Mb{^Os*^uu!R=dN=nbCSBo3ycH{@YAb8o^E;`i!*c)*vNYv40 z+zw8V6-58q1%IZkw-W#!6Cm_VD9YD>%Fv_@@vPy>;`(UdxVbHOy0w;5f~=2>h9?QU z?(Hf3Vx_BM5Lw!j#Mm}6-o&zgH>tmYxWt{ky$5hx0HAYmFub||lBd5uS!c5}xWcvx zX)<#L3j})-WuW8m)9-w zf$i=ZkmeuDy8%?%)kh41UvSqPJpv#!mLxv|9$-%&sZN2<0yeM?>&aKB-)A1WYSXq9 z`<7mJez`-kf{hN+O$=PdLNctzOCSVyiJ^>#`+^x;@bq<@sa56puSso(S!-VOE7Yua zQ;Ss~Z{a5(_cIIKL+7=%Qs?avtknadQ_z~1k{0AG{f4q&Dz+-YNjA7H@M%fxS^d46u7ibDf*h zu|gL3>g~jHNZJa0^j*kU#xI!jS3lt&lg}YpT7)8RuB-+2s9uO%A9!Ko{h-8vi~<1K zVv{+tmH-k4*1<`1iVOE8wWlcWx?(i7sOtu(bEf}A_U&h1jDM%NwB`VA@J+Qe!TT1O z-$txpLP7Qi8>I;pyp}_OK$SVY!deGxaV24i%6kGOUD2A)E>L?075D00HxcBBG=bZ# zv0=MTO!v};lYU+nl9iVmqT>kirt=5p03Y48_VbX#l?sBM1dOZi+Y_+}mqi}`IbOq3 zLDN27v-c;P37!PR5COpBUbw4Fs?>)!F8ue~sc8Mdk42U5cO<3QFJzQmZ%s9O9m)(& z7mNr#AqG>8|FEK(5>TA-3mX=yOlnx}z!{}z(EUIkgyD97Npe-fYsa4vgw5;;z-I7c zpvpS{od7yd%zh#C{X=$$bq8JwJo&OXxERZA6^M>rU6JTRSWdA5cL2CGkw;99>%znU zp(A6rp8Hi!ysd=9p^iQ0L`+b?O3O5HzTT3gjtrn-Fsho;$&L`P<4lU=U$T>M%K^Id zf)nM{$%I%QU`YvqX~mJ6?M|ukyb0w}eZV~9Q4D^|THccYxFQBLEUuTx zH{xs{??zXBc_<|Kxo(shAY-Lfhye_o&I=M&dCc#}xcFiUfd91Vx*CglXLCZUAj zPN7%{h&wi{GwI!(I|*-1+{ZN=siaZq^f4JxdWJQ2Mcsyy`z497;4HkFbcRZG-I$!{ z`T`@1+%u!tlm$0t8*dvSb*VinLUMilQN zZ?V?vSr8+YNywmJ**SAKzX(w>`L4NVx}`cj!V=JgoyO$TM{hi83GQ&#Kg2)r;xV5W zRn`2+PVmhtmaN~$_Ryw=)LccN}Y`$@3@C+8~W4-(i7#D`w; zB)8)@rs^r^Go(?(9RKj`$vBJ*=X!;KblzPqzz%$nO~`z$>QM1ny?KK&d8olCgf&2A zy>J<;Uo9kMY4&<>^m;VOWP%JYjq%w~8;n?Eeq`~MHu^p=) zn=6$qaI4ex2H_=ileXXHBcM2lv~0sCsgIUAWSy`0b9#Cew6of_gWO25oRuIh% zVY+PC76xNeHtncARyx|}*@^+Q>TfsPCT)#*7#fd7R;HxX zIn)NWVwY0@(3A9_b*o!5RxBLm%{f-PhgK#2_j$#E$y~7$b`2Z%4=WTpF{xvp`t7h$ zTb|#|j){NzoYP)dF%`dQIbN?WI$OAToy_Ul{*6ItNP$Byyiv8vO~^IsWdnZc*znbf zU8{4xh_Adx2ndq(b;C~J#dg+X#36Iq9#U$`hR4swC1DNBX>@f@JCt2SJXPO8p57!? z%Z@(^j7@dT;HML-$m~G-0ZU2xQYS84zkpSDQ>DHy`c8%j%k~vfn?Al|)Sg-j#^d7q zCnY429r`Lqv!$vEs8>ASJZ&RFje|;QUR}J4+9F$(-nVXd5e`&H2}xpl}&ID{Y$} zsmty^sEc$SXL_vRz-cv!0aZ_FW{YQ(CdOC}*6b!{TMYzpci|cOetTZU2K~`M%V;&rAE`7CTf=}9OXLf*m!@3;uCDp9BsU$eDSd(nWT}|{P;-tE$z?rtkt(kL`F-lQr+Q+CThQ-IR@slg;?n+jFZ3v2Fij)U zGE9P{P_OT?f5O!YlOF*t0J*OJ!L2~qc04$JZi~`^X9xZ6bv8es#9BTp(w&>A`*migqC2fouXm}0(lYoXXznnE}G3H#H99%Dm#dp<}})!N0GFE)}!<)5d;B^c!*8A?y>g)dWXj`>YY( z`2_@ORE@G$*wE^OqZPe)kL#V;{ zvqwk}UD{H=vqc-mTv*WQ%j^IQ0P&M*bX6|^B zR`0amqmL(1GVQTL9$G zXqJ_M#*~o*;~=+==4%_TPM+LvxES4EqVRCVI)mOzCW#jFVdJsfqto`_ywrD{h-1zS z*r0ys^F3(w+0+DGggN9#!xUlszVA=P&I!;D(o?^4N~T|ORKTD6md~$NEUzVC(g4ru z(CZ&}FG8e&8{(Kea4ab}wmKX~9}aMUgQVbR5_iiN+YjBu@7!*PaC_T2*zx59Uh?CF zwNHdj@-koZ;o*TYF1a$boS35*by_nre6YLwZ@`b`WypGwxsu47#W-+XJY+UCptWQ9 zsGSZgkVjJP3MLfYB*qqv94aSc*&twU;}k2w6zgo_m`&jF2lj$?a3+BmdK-1TxxB-7r6@ROA4A_K!jgH1V8FezCT_1nNoJRy4O zea9#{qv$@MX`f+IU-@lX)6u@~5(?&{Z=}>A-jWHzNId={U@KL>1#6%367s$}o}qew zmS3TLs1jXp=mUb12L=5b@g0`53g{*1_LY*m2+EC&MCX)9q@>T8EYXH;U^$J~TOUt8 zTAANb*{@C61rZ|BsZ3|09AJmkJP%EuE`2O5z%Fe0^OI;;jkV-#5 zz&>N^@Ponj?$!QD-=R>29*;ZhqYH?`)jne$l@X8{@@T{)uP|)`F*>Tgd^;3wi)>bV zqcy9}n>dmV(lD(B-hya+f@!>qM$B9h$<2;HU-ryZjPazal%>HwWWMxW(x~cGTiHNe zBM8RDf=9#F33@I{dsUnE9fQH$Qh+$j9XsJ+*74Lyh0oFCEQ6W{y`b4I;|W&keeoJc z6}=5@(fd3TYY%03C4r-E<4e9{MkMMTCF9@a#%6g?SE0yTO~A9$H>du*Kd!WZKgs75 ziUFd63RIIu5|hC8XoA*JT+v7@wy2-8NP-wvJcEf}{&Gwi+JQsbGV3E29+RX(!R!zn z$TK;zunF=Q`S0j7kg>GIC89uNiY9j|*%?TgtmC4qqhf=}ajIjnHx*H$O|q-O>_x(I zAH-@9$8J9D>ou zy);~Qn^QlYm;eO_HO&Pb8M^h&VG{u91&ln|jI;@6C^0lQthM8W)V#9hPo$aE*c@iLAhj%w@EL z;Gfifn&kd6(@$3Hi;||+{CqFbBZwXzpKohIX@x4m29&s%#FV2ixEDFlmmdG&!+-!x zfFaQLUmZ#yQf{-s>c2abZpzI~M2c=;MwtAc9ZLA6WcsKZn34WYcjo^RX55|P`d7L6 z;ta)qg&Ci4%r@M>jJF!`f5VK+FDLnKV8%mwmcL;}K^5Ld^#8@Y$uyCA?&)Fe43@+<(j)P6i&n{}-6?w|SGkKu0XWwW1AEOUCVyej(|2rn=A6K1?AH+O_2b^L}I zDV!=?e$b;~#txdV;5Xg1xM)6XZWwXHhq?HqbF+O`ZRc#+zcFuIBZ?<$KMRk`MD26c zWPWhsc{}(w%vhe*@(bs0m~m;f1Ru?Zp^~N0=FO%7iMw*H_J7P9N>#+*qKgpMO}V*H z_sgnLRu+L)XJ^KMUY^I%%OBB11Bd!C%ABe3+9v5I%|a zC-G*DADE}SD~J|~oRjo85&grwahT|@f2Ui#FBUY`X8uXYW8OTOqrlk3yQ<{N_5S)o z*W8EoX)l6C-Uk=kIT1t+tQjgc!#qVL z!7V!#jaB>{F0D7^=C;M2uii*ux$P51j{JD4OguYsh%R!IaxbDQ{eB$G+}-xn=;d-|Fhg&JfW9a zBnV%_jF|%W3oU?h5dJ+WFX){w3@dpCh4&ZH07?b8O^Q`Ox^SKHqoHV`p|X_<|89Qt z!-_ajKL0;@dVz7&qt&?%d9vd4mvOqIas9;C5l9Xr2)f+7SB0u1{$J(hn)cp?=yG$s z{$5@`9Ze`Q7~XQ;Cv?C`W&c;Xd5zW>@&i2dyuYniFvKo1M#N90Mr9VtA9tP)!&M!W zqdAEa1>!JM4h(`HAhTKAIKd%p(=+eux~kUZ=$mZ& zE-abvLz5E$mtS822ut9&h{@pK0rDo15;?A~kw!jp!36uNKWT=k;0mXCgl7t;d^dd9 zALb3J7c&TCU2uns3t==oozfzrVeV6^{s1wPv3Oc^d#qH`dw3@M^0XLESf(9;n9ZX( zD^bxX(@hny2X^6Z6oGe7SF1D#>y?e56^d8p1lqvtgymWTj-t}##ekOM@r_1l`oP~`GVdE z{twvfe|yL;75;n3XZ=49d9OKqMBVR*<-cIFwaKzS^xe=4d3XyV}i^EWs`fIA^qJv zO=Z(3yvzruVtTnOjw-H&%g$WlLzLNXXh#W_J=K7Dmi*|UvOA-KzIv1)_-$+T_ zz-FWTTr^LOoc@H(FfZJP5Z~62d7LAA5yO#nXxI!dT<*q*ToT}rczOR#CdGH2KlR=H z8{AUm`wrq?Mr37uQ~^vblEu_$_*8EwbZqgKz5JHyKa5COQMpD#DHfb>@-fEO9^Y32 zarw?yLn&R)*Y+KmQCt~mLTbITEFHOA2}a|oEKf~uhJ54J&|;kKVsl{Liz zdlez!e({!#G8{X#uZ$4;d(sJ$%uTP1a1Q~K7z3z;Q_XBv9~IrU* zzzcyN!Es1W3QP&_D1yp>=#?)HjOEFsSuh2$a=1_6I?3dEZOo}KUjhN}^5iM4hNY2k zyEBjGgxflv_o9rC1i6=j@gs~Br{PQ}bJj6*?19EaJ3iWhPM<0>tsnhCEZXIClsPW{qX2BzdT9p1Q!WJ zl&0%BC#2cBD-t3E1nm6&nD=s1>Hz0plkucs)?nFSBF^;(z~(JcgH+T}C=iRyEezGo zrRi+{m8%${fU6CO4zBx}rFVw|FSzDf^T|ijS6X;VcoHyBaOnCgKv*O-m;}e2U7x$+ z_9yf=UJSv^?kwW_kp)yD5E_TP4C=7q8RsXXaX0#|M(H0z{z>>-Cl(BDJ8C6D$h5Ldqs4^lh)uFCJM+={T=cmOe1n{oEP zKjdk?RUA#KlzDaj3l?Hu+YYHdbLTKJtFt@7tRk!b%5awZ-X-Z*?Ua zybiD3$XKXyi!|T}XIe?q2S9AB{~No1zo>2W&9SfxH~rV{{~Kl3>iQF9CwP?m7s_sv z$^08-Uo-p@Ho`q1yy4l}REhtAvX_J%Y}}yi9qB%Qq3kBLDbqJ7`@SdI#H==Mq!&~F z3uUME-bV9miYOda45LD};tP5)OY`#+9_`w`EgZ*L~&kJX@$h2b;w?mtJREcZCH^i!IBQ8PuxZ#wvI z*vMz=g5;&QM&6$&J2$)hPVOD*$eXo)awjjYW0qd&rGjIrRxu!Mw@^=PaJQJ@-p~wt zve@snKVh$|%szv=` z_y#s&5j@$kJQ%mZ@3ZdD0(kwp0t$zMF&etA*?3#myK_kc<-OhTitk<7eINj*puwaZ;M*x zBVy4;Ut83pRo}XNU-sFq{Qfbf`MTSC*6Vsdc{uz6Bc3sw;P>u-aQ-PynXh>+!2x|r z(3IyLZ)AGA@^fVR@Llc{glwy=WaA?#8-i|S7*s$hF}Mo>BP8!bp_V{f{j=z^qJ!B z>>cx?e^f9&cK`|Vve1O6qmP9@cK(NeuuvH+?^rOeEsC@BVugXVBA}G*v}ztUT>dlEPfTPA>=DC21JVsbFAE$scs^ zpSyqEjgVI$v4-)-u|THw|8w^@9xF3!{Qqz)U^s^5iR9veM1ys(2n@ReZvDgD{6Dhm zFW&6>I*GQkbT^2xUTA$b+Jo06cvp_z^?7f5mj8L7b4u|ZU5Z_1J|bp2|NBBmt+C2H zN&nyv#5maZ8lM3@)U88BPcl~iJe_iO@jrGlJz8UJ?9z+@~b-Od@q0T3L|E$kE z$1`Ysv*q_t$LtJKYdl=}ZEn&vO|K6oZZo`5^4%~O%2G>hQW`tnCB6WShO|FDY@d7S zeO+Ag><`5F-&$SH02WQ_#M^5f+aDM6`htC+1&aUx9cfn37gVa5??WaKEQD+kz50{e zmoTY7TvgtC|Gv;c5B2|C=%79L8I8X^c+e|uiElffUchm<3e+C832wxzu>WJI|LMUS z+n1sdV?T0bI`eQYcDRBlH+0T$s7DGq*(W*od<7hS}SjuDQ#( ztALYHrNvui|1md*mCL&R)aw2Rdv6^U<^HvOUkn2ifXoctL#IfWsC0uvDcubsrIa8; zGlZmccM6D=S(uCGzNKV|FbrA#jl1=-TL`D!p$Eab!w_Xx5E%)4qnEeA;v$_>Y9}X8sr_>l7P1# zuZ8wpdO!9(5B@|-AD9RKY|wjx>%P*~qy}&O)|8InGlK1~#L-XR)9N0YIM;uAWO4XW zXGrqNn6#<=to0-#F!hs|OWV88&%Ew@r4jVGKdbTFnt~#m6D4_Ihj{U`*N;738^=}Q z^4+pgy12ljr?nvo_2wL4VJ)$61)%JexO>s3VH-Bz_LFGzo z|5>f~nNy$(!xOMO^A>Ql-!+{TMwO%-{$9~1!KP5>1;*9x|t_TLHEer@>y z?E1rgA@iT~`O)=@9qfMq)9M1+Kb*EWC`Kw{hf%TaAxdWT0K%eP-f7UQug(T3xuB&n3KhV*$jz zo!TanoBa5qt@=S85#S6h6+K2>a?T7Mc0^#3t0tUK|6nPgX>wbs~QD`X7^H>+T-I zfFJd%wXmcFa&it+W&~Cdd%3KPCu)(P`@PpM=Tm>e?IaSBUZul*GmE`9fki1JgdZy8 zta;b$u-A7;rt}@TYqcj9QX#j{6)H<>h$z8U(({P6VF-+2VOVAqo-Ms&tkxr(hC`ws zZ8;f!BzDgAA@gG%CH7dww`4$$7b&^CLWE`XgPd2hk@6&B2-UD6XhZVkGOGB1)o>)u z0@7OnPukH7_~whvqaQf2X*yB8zgYzFCLxzwC+?J-E~ey;#kzUv*D3g6i&q@f>t&}> z|8cJ$dX%QRv09INlkkej#{c*y&C?O1g~w5UGISuFc!jIL!)&0q=KDvTzy+S#{jc=; zgZF5X?4X=uEeLJ=IXg$PhA^W4#sT`v=Ko>y6RyVilJHc`srw2I&m29X_9NOpivG~% z&te~*kHJP)rEqZkQ56=9@{=k(Fx=RZ2lQTxLI0$@U3 z!G%XW)_bvM!a)Zp{%l+yOVrf*@6q;MocxT=Z6l>Dhtc-?R$4x(31ydj8bfx9KaL7H zk!_Ai#DL4#GRv1TIpwa@dEQrm9sS_|{ZfE4a4Hojxk`X@A17V9J_FF_Uv0GUi$f^?Spr}J3wCq<9JfD#NzpDgsi|; z-~29uH|4D7?$UKxv9|o{^6AH3LxafVf=+=R{z_G4gPdyx^~k3+e-6l(K+F4~R-CPy zZQnh7^|<>MSe~jw2k1?N zE*Qsm`K;Fd!1(D?=ksTO&oI?P0DxmZ5=|~5H7Wz%Dl zUHBR*!{lmGZ<`XvVSz3FBg1r(I6?F1FO)`Psc>%-sR zrOJ0EaLh?=GkYSTLZVW0+|6t=XJ)KIs%>Q4^P^z)3vy>$s}1DonbUbvBdoFv#Be`@ zw7i0<{Nu}-KU#g~pa5(vihYHOXMex)yUjmZMMkPyr9?M65iPe>j7qFh;nkWXm~EBN zkN>IFSJ(PyRpCFg`Pa_Y;nH~|h;r3Lw9eRfK0NMR z^|q;wRH*_LqTS(RPQr#l<0`MkuVV;>6kIu@vlcu(_TuOs1w5E#BT?x?(DW;UPK!)R zMtBoEk{j-`5hT@zpu=pSfS2kE5yp(J4!bn2e`L>tZ?ODx1}VsV#w8k;O@4hX z@8iYaA}foXYW3pw3_Er6M^XEhEYEy zReIEV?|)}K=P!%?FN^*!i~cW*{$E)1X3cSxa5a(E3!2UCN+@nP5u)tjNK^X)j0GgN z;%s^ie13b4eKChz?wArxgOeiUaEP-zu9uSO@ADkqChUB?YR>=#a5i`G$;fOo*K!4o zPdYAc+!oVy6_VFEqHT;ga?78-HZH=V&~tdq6Y6DSDg9YcP>(iXb)GfvsFU#X;hUrXR_WSy@aJ4sjmEw{g|M7 zqq6V{nT#>PBv{zV;$Np*U61hSOF%36#hD26_YnLYD0;%omB=!Fr8#%Pc z&&m+c38)7=LW4JAqK>xzZJ6z`+eLiUNCGK;PK*BJ;Lk;TKEsoFRQiddnIiV1 zKNs;4*n2&a?g2=a!*|={K>`c-ZtFTKbACbNg4T_iyFYd`e}A`aefwC*)Sx7!YS6~~ zx|i|V6pgfJeJ6T%?zv_ZVX!Tjm`R*8%xl2%CPa|b#(iTz`aIA@v^KLy9bqrvPAcoa z`RHbWvOS5=_jg;OF;nrFrO7di+OpqvG^uT0z0jq4eDp<2$dLrM^p^g+#}bLx$-3T) zclGDIEO+(gTSr# ztX+2-_YS(w!REqfH`=tFp*&eRv=D(|8onHvLx&zBjo_;xk7VbgxwwN1V2$3fi6nJ| zlbLjIrKiUVweGx(qaEQOgg8nV=fnRx%aWm=EZZeD-6045X`Uh3!;{o5@8wZV8X;yU zjY>PY7ZS?_VL9-XqDU=xWr|73qe@rbcGD`Ai#aO8x-s|CXG*g;%Ay$+89K}=r&tUp z%D*|f2`J}>3p~xSU?t`h%HTOLTB}BOel~EbnF8N!=|mSy8>pTlT~fL*OKC89_0zxyX3`?W|$yh8>NVW8gB5)Hz6?ua>UWBcAaj znzp628){U~gxv=GU)$%8?5-BMfBLLlsSz3!pRq`79Zz{1T*hf%_I&ylCHhtW>}WAA$;&v>B;?!Z)Q9Zw*zjK!ViWe+Us^cT)s?ovJX8)P(^~Uf zwSYGbaxxj`=bKFehBK4BxF?B`&;-0Wy0iRHK+Q^&Kx#2zJTO^x>!vR8>E_-jkG>FC z_5i<86TH91rNotvXfwYEfx2e3tqYJ;EWf%9M3q1P+j2;G?P^I7OzUpC=XNuA&cBjPE>= z6QYxDb(BI)cR{B(9T&tgn5akAELXtOOgM2O?u@b+F2bY_VThGRIwI zA_%1}%h3>^PYR?KlV_7&6(BvDZdj`|aW_XRXnhN1%2om&4tm5B5%Q7>?VjQ_3N5cZ zamChfEnEIz<^osv=CBLRg5ZOpGd#@oiAT#N9=^02Ya7z_)H12H2;;8fx?it(Huui# zmE?uQU2^hs#{w)RD_T3)p44ho2qwQLIMM}Ra00SscC)M&MIQ~ddYs2ro{EW6JJZJd-;jh70Bgz1_ER{ zvx7uTUeuzL`0T1eH5xSr%#(GKcOrg6GZ|65U$%Ok!$b-akcm27au--uVSQ=Mjfv{EJ;fxlgP|X9%Cx^j$7jb zjq>ZkWR3&s^7Y8<`{cAP(G`?QF4yg*uIZ(EGsZ|a_NmDcvTWmYQ7J- z8f3P#c`SrZ`8_hdj=RQhMZaX&@d&F&CIHp9T&Li=%r+wb}C}?)Pmbu??&z=bxV{NyrAe}1ond`&r5vngt{e1+>95%T(m=Bc-hq3}Fc)Y{Y zSMbQ!0y1yQnuDD`nq_w_5&?VB8cI~DBB~X}DXVl(8GzigDBih~$#Uca8_TTJ0!H{< z(*e5&(u4ad(@bP9m5C>6Ui$4Sg>v1Yl+H*$7 zfT^HZ|MjzBD(t3e%E%<#1*m=~dB7skhj9jAB$vV-5J!L;h}|~ovRM(WzKB!)5zH+Sz4ig|>ZA!Um?|tX7auyI zjviA-F-wP!W@4HettiAP#sPHCy1VIy!;++D*<6%@iwbE(2&5@Wx7Y`cK9>YUd-6qZ za>0!h!zwZ4z3Y*|L@`?J4DxV*mydSkjvyGl(>q5Vyo2iY@Q52Z=7j)XI!Ujee$zVnIJa^MFvK_q3%$vWRN%6=t5G+yTdMP zvlFgtBFcxUMinA%%3xNv@LO-7MU=m!YRfQ2PV&_bc>IP3&y}5>FH<)Kzu~ zF5(cDEMl*ZpCc{LWaQn6!LXa&YG)WjCHVU#5cj3r*-Y@2NMb)2V8WwFZSh`wiirh| za6g-12X7^a7YZhV!g{gd8cD!Z+ZL}RNqji*Wa>%)idP~DCJLAZvdU`)kp^aXOc8R} zugGhX^73D0_l9SMA&T`=*oo4RO-W9ov2Lpz(*Q7?oVkpL*_u+F7uwLoF z$BfISs8ceirnxi@NIHrrPSN+m%_gVu`Si$Y>?n{)%yFe0A5W_eRqRhQ?@3EoX26*; zIJq1*Unh>27001+=j<}_u0tX7|nX^sX#ahq(Ep9dmKJ$8^qb8Q_7(f3($z1ZEsUB^Q$g#dc6 zsiwtoQ(mJ03w&z1u02 zR3x1p7R}Ho7Pk$Ssw$@R#zzmIwn@D+2S-D~n z!Y&(uFT9}-kD8#y6lIdK$Ecc7S*+10jxx~!Kr}rS8bt!pFIQ!Bw(Bi&CNM2!7l`Tm z)Qcdmg_T>Q%h&M9)BY%*QPjum%9R763h(0b1UbyvH5Tbkx^?<$w)w&|LiK@c$<%hK za7mo|XmxLYrMw-C-q6b@u!3t;o?5e}&7KsPBb}i~oNpnYY>SUX)>_yV_?uyFj@E*y zI0FQQ6r0+?oVwA@x-w+V*j^pAbooS$OmOOrAR4f#oIvP%q{upYeqZ8iKoKs0I{-v$1Mmw9zchbO8$CoWwu2C-+W_ZIN)riziG!NvopysbK z(pP+OEM%iYWCOIpjWFRaECx4kSbe#{l;vx&e#1e#wR$AWF<9I=w^dxcm3RXdzux3Q zCa&@X?;9+R3~p2O4V$VdF(o?@gl!W_Ew;ea!RD(UT!hofo(scyRPeM1k%`ALaYQn8 zXe?g8`bJE<1{=aebvgIAyC63;SysJG3-LlbPy`FYQ5D7?_fkkV<4DUsezQeTqTc)tg-voS%U*=>|5yZWENN)w3&et%Q-h@?+g8#!ns;6ZSiA5t+4rf(M@SpC8n(p9^ z#Ze7vZKKjqd~JgdAH@yDAC>T-25*d7c=52mXZJ=@E?-}{m2 zHir=O6aYP?aGSj8Hl+^l1{qWy3q3{-6?@yK1VFdqbCDY)mH^Be2lHs`n``dxAOk!a zZ@M1uR-HID`Gw^AGZIbm0o*>zhd2FBXt>HBXQ=G`T})l!{X@4vu29NvZUSSJa)q}$A7 z;&RY9>>@Hem`dt0L3*x{A%6ch@OGG6pVSe@;F?UDwLenCJX#_@T4pg?acPuj^;%We zD9KJrT^^60hd`i3+2rf;C!DafJf6h2##3`)nFPA%FCYL@UX|`{zr1$-arXS#kvq)1 zsaN+Pyi?`xt+kdtGq20_kkxkUlrbKe zA{q~~ze}um|8)YZ@SeA`2+9T^H8r?*m9um_Wz4l?b`L z0lG{YdBcw3o>=#T1Hy#-*9UF(O$sNbU1<&Cj$yJtW-6GG& zxhK@ZX!0#-Q6W#{Hl9qD6onprO4d78)%%bVdT*v39|Ls27oP@aJAC5>T@OM5drZTb9>CHq9k^QYa<`?6+d zA5k#BIDwjf=QIBG`AzhL#}Y55+NNGVf6;~?=OViQo`sh2#7pf-Xw(U6wsS9$lhAL8 z&!kdb?sqdmPR@~r&cO@jkhkWny`f;}49T~-@?I#$YF>nRj@F7%eQu7y>Pg14d90Pt z)Lb3A)dElG0$;&`z^w(L7n9$fFI?DI5NV)dKKV+Dl~)l3mA>^#{>7`4-(HbfzEXHk zbEJV-(PmL2bW!f)qDk@M!&;j3@kJ>6qQO0C#kn~qt0l8rOBOGdtZv;9`?l2O4%ZNT z?G*Z&umLKUhKT6r-5CJ>OdtdQk~yIo8A0usSLQPHC#y>>fy(=DtuEPh-P48g5#Oz@ z$x@9p0TvnO@jO|DOfA(lpPGmGp$50-qc`3d2$1v!vE+&iem_yTU{bC%+Ddtceyq9m z{auTWx8R9_|C@AvTB6eyoNXVbEN=o_NmbgJwk@rgM?n_eiFakrml&{C585n`7oA$5 zsFxI5eQ=hn^!qt-c-G5Ci9J*IcaPhBA9t7E^dEnAD}s#eq~Y}kB{gvbZoaJc&E*OI zp={#0fUOA6Ywj=aSuPna0%30s#$I%TCklc@J9(ZAJz(PIV9e`Mc=y*Y#Y?YV-oJf& zU371kcPQwv9Y;#${fQXwP|6^=4QJ8DCdX44E+9RTmB& zrh?d)BK>(;?D(80iC6;rhT5w{nb-7~IPgRPjD3N4#V4MMZjEMC<*DXMGOiXS4c9h! zjADmuC|(uPE}(VreCHUKoPI=q)iIp&h00hK$eaLA6!uyj-5oonEOROGfvFjl*{aJ0 z578HGnZ23zMms^q6!*V4oWL)FJYVn>)T(~*cr>P_LCKN1_@*q9iAxQ2Uu%8;wprXCs&2& zo1}_P%emKId`VQK5mH1He7KDI29>g~rWTvER8jlh?L|YdmDBs7T+e0){2Kp_+deU5 z9Uobt$IL!=ei?I9{`|!w;S(wIdAlL3TVpxWa0pgM`5{o)*svP!FpyEd@!`xfPxFo8 zNz z%xq2J%o9APjoLm-02gT`Zj{FwhZsJxGW?uiZz~w*Wni9JfAMlcUHu%tXC>5s*6;DT z?HeHy!P_rh)*SS;^*%Z2PS4FsVI-j(bx;p7CnCPiJWNm*#w;4>3wJzs)ppoTOt*L+ zsH8A%n*2)f#`Dk1Ri}kzo}w=l1f}BNtaa-7-e&#aky|S5f2?M`AmQDSRL^-Ho@yoe zb@wz+x3|=~3HzH$CkFR(hF#9;%=FbthTu+cKK!EhP?_!1#)5Tjx52&4YoRrjRR&-7 zTFtAs&*Zj$ke>bA_LA(|UjOa76>B+bzo7ZsnPY@AylEP*hkcL`S}t0Wt|t)hsqSnU z6nkj=Tnnih=G4r4y4s>BQd@)S)G=W$gpTQ#b@f|lH&us>024CHDwfCjjp~~b_edxq zii}c=Vf?G`j|VT7`|s!^ALkbuS*4$XsShM$6HGWvQ=9rZn%82_EFOWeIHl1W*j-ei zK1)sVaZu=DWq8Pw0^KQI8vX?+jT6_fc)|wx5z_JmplX1B!lWdwNi@kXh(mEbfJ5P2 zIVPN1ODL2VWeqf&Oys1n@m!UX9)+er5hQ>KdZ;t8LRdj!l;Vp$w=$CJ2-T*IL5a)| zXn>_~S!gjF9bq%H^1!x5E?v-aNq^P*E~9ssQ(5nIjN(>rgh`!-;Hf@@9(`GM=T;&e zrIPj*A4eQzHIF1o3H;pq!IWF;QDP+>R4L{Bl)yTcZA6oEAyG_M*TGq5ZAD3El#4ni zo!2uq>tOhC)}bE7Je2vc0qBI3(FnLYd6)OE!12oTvyG9 zn3@t=+Tx;PiN#qzO)hmCETYgK;Hu1_QbJbJ=yYFI_ZBDQ(>hSQ)leT(&+5mzQRUWe zK=}b2GI_$TBI#+>4e09Ny}`!9V11}j2-SnSHLBXs5DKe|&K!GB8p%9tlvyt$c#bTk z`{q)eLvaf)QBiqMux!~G8(ARm*N$|bx#yEwq75?^=EyfY$;Z5oMadLt(liB#ygbu{Jd@RO zpkn<1HMdztP_9MRzjXl>-y)x`yY2Xq?`fJ1Woevw&Fkc~4g7LqReZ;jJ z)vh&f%<<}}bF3E>n@(mGWAl_Uw5b0YT`IX6vW(97(i8SuT`P`EkztckIaT%f$zH7I z(7LZbzeqp&{)S)YBsGy*N5~`c3#ZCx)-3&Xor;~#sG4CLG`93*QV8mgkLy2hQ4?9T zY}FGazyrJnCEzDhy~Xy+-+O9wv00@UE+b#8SF~%9hSV8teR+^$A}U}f`mtESD<$cm z>*DqJ8AReuF!3cc&_HI=T~6129*EsBh6wvgFyslYybnwrv}Q) z%Y8J}U$6=_I^-v65+M~3VHy=G(;gu|6Y(Y->Af6rFC5QM<*O7B8A<}z2oOkFM@8Y_ zP$Ib2FpbQ%hUgu(0-P@?8sDvW$zq;VI~HY1A3e%}#ArmfG>0}!Al<8kQb{A=^Pw(q zMk^D#`^yofIM@CZMD_%oZCiwjMx?Jytoth$p49W@6K5i`1YtYY3dJ#z>>p(21#RmF56i%>U1XxJe%(#K2K!t?p!uZF|5 zoa4*F;iHa1x$E)bEfF!;xI2)9p{jU-UBUoW!f+PPXgi_-a2y}z>5)Nj10mwX<*M08Na(+~#5iX?LY5PAR@+Y#@@hP#S}36~*iv2boIgdGc!Y&1&a zj!oZyZMF*(qsWh}B&p9t0?CMlc7eD}#<3Xlc^O*&11}gtmUh4;>G*CMiZrTyDO|xc zoot8%wgFR<<&kJl*Yt6}U<1#bOSczu=GDy5Hh^ixWw?~2UlDP)Fy*>j1Uu4~deSEY zrWh~y32rv5f4MOORt~#iBE0Dw;bw|eqrZC0H!QI#Q)>!QIG1_FHbrsX`vQMfZc0*Y zM^-|%u{8kbKFJcmWDBmi2m}a$1FwpyNop)S6 zcT6__u4(>sV1A!w?o$Mbd{6$TJ19v+{_6w9TyWk7XYb|gf+f=eaJ(m*B=G_Yv-t~X zAcYXoLSMd|`D}rrCnWJE&~KWB5V;~~4V~p&F2uVCIZ6WF`jNPy05d3nEjB|JNluc` z?iDe1GWawWlXAdV)`~ggO74|pajiwTgpu-2k@g_+!HJcZu~ba1RKl!ODyUQ@r&O-9 zRK5ns{%#N8fCM{NGjwf|gKslnybp$X+86}0x%FPI3;23Tm zBpdc5(|V6FOf!{ax}0n%%APUU2niT!aq@Ro__$G9&5`&9Ri@Ea26R?lB2?}^stjYS z3YV*jbh|8PS{0j9ML-fx@3mJYx$(yUnOFA8&)ATp1y#ejVKId2yftniLf-7>3O7#J z*{9Vm^JNulG@!`?ZK^qITb6~asduTa4&ul#t8LGzrL>0%FX3$;Kn;oNItjF(+cgwa zXS$t}f2Vdh2xl-;H^EpxHLBMnTR)yru67YF+)**(cFtu@%JOObBe{k}vxe6}4J$bf zYn=^mpEkUgqf*1weUQ7hWp?dz(6ybMYkQs7_Mcw+ws#G9W9r1v2sNjk#JZB?HX?5} zl0R!a@}&{Q)HKcr#h5pVdqdT2niy|3F+Xc!{nCUr7j0u~<}z>Q32x@gZ5FtRqQBX^ z^!e)j>c(HkK?pzs&_M+M!-R*GYJYF0`Tq}EnS zKgli(D_m1>bIr>GCXfKg<{K$5>RaXKFHM-5sPJW{s?pBN>RhY+1w#UkgYJgc->!jl zs_zKGsSz!ZP6Z+e#}3b5Ce#E$1Yz_e_d^8XyVlu@;KlmkZQ>z<@O=kMpJH?;Frm-i zdH$#Y><UAZ@TLXpk%NP56R zytEMl&fP8+x0ohq6{u86K1GD=^|&XyR46!rfODnm;g+i^J#nvCy7ZeBiv5IdDmkI3 zb@*&`ZhcYa1SarI9h8L=JjLYUeS;9)g^rJK(*=TH@vPo!_G$kEG}numW8Zc_I@Pz` zl}b?TZx7P71m3kBfNpI%=3pO)EeWmO*rx2+FW5;xAl2xZm#+_l>wve3!#$*O>v+@v z8Qrb0?66->j!8gSlm6$jrg8r+YfXat(C@N7Txb$sNY9b+U7H=bUU|Pz;TMoi4;PSwaqs@NJUi1-$+pI#-|% z`627f^0*(e4o-ormMMAm@sxun$Ey_}S#-6M1r1-TDhs92I&^v56e}BkgU$)OsZ%;+ zx3!eK*7}_;WbP>5M`+anWliQRHYyhAd_C_387S*B;6l^i$@+LQ|7+0Y0iknDFNMBC z=f0mVycr7rN3sS_jzO|$KdMl2TmXI6V`H!o6EAv}7>wQ-GG-A$!Les074C3fi_#iB ztJyDxo9+T#9*M`GtiOXOsYc5afZ5=uob81$@#B}Fhi9R-1N^x)cFQq+GWhO@+qD8cC)8wD4R#1;GV zoq|sZEWucgD6lq6Crb0?33Blv?hVVVu{Q-;?I~AY71@15-eCX%a?W!kzi(k{iNgX3 zs6C#6?SctP$wsC9k6lcsQG%o5FS|COnx{^DdT4*`*OTMlWF4_PD!3GEptW5OHtc&_ zkIx@`t?NiQ__n`&s5jzI zn~5@N;{!kIGgdjgh5N8R^BLCssL%Gab==o0#&iEp$OUalf1*eJC-vF$j_7an$nQdy z&fq4S7B&f|611}L1rcDe48Id){^R;A{a*6WuKiWWf7Is-6(J3vUEBS)n6UG=NO$(O zeV5x~{#kt{d`e+Ctj}1F^YTB~0iNC#AUoh+)aR9#JYtVr4(-~1E@ZAyf;|5ZAxnye zgG8CbfNq;;ekZHqNHMTJpE>h`9bmG%KnC~-5dR>`c)DsLKz2Y)M)nV)ObrvKnE+Uy zlhp)P%hJ!R(Q;ol`(4OI(E>)LC0E`4uxoz^SxXp*8)jKCdv+YlA|5^Mf5gnyvJqo8lAW>#xi1{Z`##)C$lKZ#%3~nZh-1!fMoH?r_4k02Ix*pyxr8{k5ctc0R z@(>f|ka_O&lLXNSP{_~J?4Pl8G$Uu}$1NxLDqG25|&T7CyG4m>Y@F;X6-uSgu`e$tvcSHOMK}MPkDxDt#M*R`STF z6cN2R*5hl}DX9rqc5Ktmdy;Y1y_^B2>EMs#<@feCC)AI9-I_l8eKYa9kgvE4)(4yq z5vYc%eEVFUJ~hJoFpcuo&Xcs4n!M|e&!6()d-*#%03a^{ZcLF(L4N`Lp+E)i5OM!g z1*^0>jr~c%-yz?c5oUUSDER5W>9GHcQf%%;$7fj-u)*@*blB%_@ZJ0!^p`7E2!j6p ziGqLcu)hpSpYMu4*kA{G$##c7lucJLLO_u}usr z6#k!e*ae@=lT~P4K_*nE20U(LD|Imqr^dgeSf%5-l%WY0;6D`ndxs5CM*smOVqieTRJi?6CLf`IFQH`19TM+*W@p#fYRnSC{%r0$?frvw~BE4~XB?wfqA4 z{-eVdaQXWV`>+&iOyd8p!(REV6bm|w8+QtR_@l!<7CHL%&4=3{{o`kc{f`wat=qrx zga3NSgnB2|ucKH4rzWq6NFGX%;JfRh5iR~0gna)}igQ~>Ce;fKwiGqa`w*D4>87`M z8m7T1D8i$8Yg+w0f3l#tZ#P0xpE7c*C>Fl$^91TT-l~{}>sNxE>Kcy|>@^CJoNiM}d9o_(LKHypHxLDer8SI3Pon(Dxms`44O459%5?!+ucH{Zoz1 zo9xa#oJ}9B%%(`(O{R~V(4aEbn9}*q*NK7a98%XVc;q?+NUE6nci&L9bp9$iV|(Qs ziuVkLy7iHhIX{G~f!e6`36LkI0pruDzbI1Kn5HWY=aLaeD5f>esquxLKM^O$p%+6z?k-Txx^1Zjlam>|X?*Gm%?_CHJnFN}Pii#hh} z?!wO*w(S}fowd!cI{j-X{n5+*HI)9pHo39fBr~D@H zaG^#>SW)<~@77cDo#zSC4HI04))RMwj$NQ~F7Bf=P;ez^*n?Zfeu5|WQs_iA_gl9S zg}UqSPDdx={{kk>d{P#m? zz^#wS-GcPK5W)JYE8q6Pq4boy@b_NU{$f9+Jc5J!{c9%u z%`^UgW+rVrXDQO#ej=rZJq!yWugv4vR<1)eNPtFCBoM|OtWBLDDCvg{?}_4-I10Z6 zml)x?*E2^%(V#OWqvVtd^zdZsmB8WL1Kqod;bDOCOQ`-rG&ZQv6U7~&(>(GH8r2u~ z7Iv<0rmeO0nl6;F8*#VeE?rAz?l?Ql_8wW^9!i>uc7o__g_QlTJ8VELup~_2v1$3 zfrOI!X^y@r7)yvB0;=0LGG%aHDNe9~TmtgQlE(-;=MbdMR33a(dI-pW^a67@>t((0z*fGF(7 z%(-CiYkE0co9j_NAxYdaTZ(;P&tT3 zD<^~w)Mv8d)pW(+d=Ux$I-b>qhF~gIjJ?Z~MJuya-A9?4CxT3~GQBVZ)_JEP6BEpKgn*fN%4*Gt zY<`wiRN?dzQHB2bq`}AjoqU=&VZXJO1@$7!i&c8ZwPbO*nna^1mBVNOR3%*^eYN`c zXV}Wtnv^ivlmmur+9JmC9QP84rps08sYi3}wH1;!d1;+)9!127_)M#FDFP{Va{QQd zp7Rh9gb;xdN)Vu9x$f53$9mH=a-oLXMZJTOhpt6#N$Q>AtP`0++~#|ObLQf-6676A zpO0g1E=ipQU%8Wbuc&RWJYXeUp`*YF2@+i zxc=!Sf7}3Sqn2UFt(SRn06uSLf7_m#yl052ob02b(&yD>1+#=+L7aRpR7Cx~6Z4r& zV74o7OmDem=)NE@%!K5``G{9~dp zF|U^R(DZkx?0524_w&CLdb>Fn<7Udz|^hU*57IE5u(972f zx7j`=*?iJ_owup!n|Ic8b0j!Rp^l34i*aHo7oHJk=8q}(1i#Fu_56&+#gzF#2TZPv zwO%7P>d29@lXrlk{zYlleg-x46bGCbp%fc|6X6cP+c-C=_B`(J331wK>c|wc3Fx0%G9Tf38%>QG`Vcp0Yo|}&t1J}cjm@2d3r$s` ztx)UnF7ojQT78x4BkIwzfwua3DMNCYrbLK0rwP~0G2Db2l@lV4tF^rQ-V?N{Sy>X5 zw6A33+xsGWuS!+ss@N!4Kc>o)srai!kT`7 z0kiH*eEM zhzie{M7wI%*(V5AXynmVr&wJWecZigT&Yh5pAR^j5-S#!$FH~o?z^OKwzP2IMyjf7 z9zQ~G3)C~F2*gilq1&4;a9=s`Fdu2BeWj>TD%zXRiLK;G&8La$If#0vR37uVgY+|8 zVwOjbq1`cRUiuujZ}6VuT$sdDZ@0Eby|ejNZC=zOCC}iY?buXhygT1w(KSwwyNt0Y z#b$E4!H?QsFffYk65|L7m}mCMH3}fOTZfS?H(hkWXyN)O)A{0jxQ(9SyC{;ro{Kl+ z>3y*zKP>(D24}}QWBxmyatt+p;}WC`^^9jQd{0r$H<84)ZD@miuzVsQkx4fu`R&cT z+$am_1ZDLyk=rc#b^D`t7Z{JdZ_&*5jICo_pbyp@T+lC1e5j-j82NLZUm8w9m%O^} z2$wCItI1rGbHGRia#CM3@Xr*drMcNQIxv4$MfN5G!q;g)@9B9xpMGOw4~~OTI(=2K zR7I3Az%VwC7FTNif~Kc}4MNwN)Cy)()<)_14Ti3(?Z`WbvuRHV>1(oG-AAdjISvwD zjLj?xvTOM+f|21V76MRL9=b*D$ZxUb+QekCWL%Ni-~yRgOa=#^-lmfYJkG%JOSoP?=7{0 zsI|D%Zq!|*pj{fx#ZrEVZF_SGdGpi$@|{O;3B6mXo^o+dMEAB;7(M4>2JlO=`n#Gs zNhReRcY0M$*9}Q4(M5}V<@IByA`x%7uu!!?-M!P1dq4EERbvR1$CW{aa8?!{?SY1` z1{ci~L+F#^-@k<;It6A6$c=3n0l)iuDq9UZX^n5*K<9(?c8;P>6**v3L*dUJ3U9}b zacso8y1in!EPyb~eXfqUxcHbX?84=NPkaQD3THH#ob)%NlKWd(R`Bx?>D{U=*LEz9 zhJI;L(EcbG$p7T>mDD^YhhRUk4|Z4jEd1 z|8h)mn0NF=Xi8wNt^Xrw)^s35OXZ^QV%Ul#D&3hr7Y59hTs*;xI>8&F;X|%g$!6lO z@!8ROb6bU)o&lOg)!~mP-C*GW_jY*MKGC^CMP1R}zUYmJ!IX=n-T~4+*TWSX!Zb%8vW@|g(&sn zNT;YUnW=D1ZxwF5AC&!q>%-u?QYh5x7`SLO)g)Q2mj|{y+V5a0T7f+xHda&6A+j+O zlWr4h%ZJMAi4(QM=dn8|Eya>F`4SrAWLlKY$D$M?BQfaEVjQ)_Co({Rj7mdA$;p24 zA~J0lohuSkwuACrxpcLNDvJlN`kL&VcSNrYYqSaK)+a_4dIs-dm^Xb~I?5uSKB7tk z(;9&4-k}o%QM7TU0UFGVn%IOQc*1&`9+j%93-x9|dgM;3C_m;l7BA(BcHm)k z4WPa1ETn=!2Nq?p%oCXLekj*;$2jF=dRju`)p{ilQAb^~hiRmfN+yAse5qtXF4Qc6 zn4(zPY`)a1B^ZHKR6ng@s7>ON&*)k>I%y6Loy?Bz;EsR7kzNEJqfJe1#hhEEvR69C zZoYqhG}>+HQOGF}7d?-O7+h!hh6nV!hj}WWZg9`lw5>)#i72sqHUkhHsR7@ z9;9sJQ`Q;KezCNR)o8umOKBB_A*A@p05tg;6-{R`bqWj2O$g1%zpeqV9L(e+vK6aB z6XoO{-=q4ls(MTdM?zD^#a_s2OCGnX%4WuR#59Y`A=EX!O!X{EgHR@vLzQMq0OnvX zc2#^T6DUQ=xEzHLqja-@<>tkyTxKo>)wu$SNT_Hr43De_fGQld&MKLW8S1q&QYW?| ztP_0%321AnTnEYl7a;~lPLG53=mqx5i)E>n0;pWqj2xnB67Nc&5eY&C{2m34*c4OS z2IGUuEo$I;a;zr^s5~unP7tbxAFbPg4k1)giY7tDav0aRTvw^;JO4k%?!qg|zj5>U zFw`&%aL>>^bVv*cf|NtU&>=^?y_ zVHo-aFANMu=#+L_(y%|SMD=RyE^F9Du^Nn0#736m*A=e#(uDB>BEA`>5zC4zO_3_?BN7x^_rpOy?HL7q%ZngZLjcinv9vtJ_tPAYfB>M8#QKFLYi)#173+C3|5mB5 ziKx-o!=H4K3-=KpGpP<*s+rUPe@Vdn(d_|y_}VhDG zrHZw^_HCm)hbFL;RA>j(fk+y;+Hn(F$m^h8H@_4o?$rLl0FFHM#eP)d-LQeWDm%!V zAtZ4}6nmQ=pa*eVGwP%cvH=mppN*x3)3bFs0)^U*Se${5~JTnVyPim9=`hZEUkU5F^=3*n_feWdYkfh@p{cd*|hd;FRjylI;<9hh`x= zK)e9?BLLCTj@gAgYb$0o8I-{3*s7~XsSkt%SxnAm-jJhL0Lkcc^Q^m~w1>#NbM=n$nFg^$os$|CLq?paAX#YH#i%l^s^h?>9k=d6^8|pMmzR-u`yp#HQn9@OB4##$mSM zd%L5Mpg~W(q;wdlI&f%&0q$bTcn4?r+<(eVx9__Y;gvD%GzjSkEXd~Co)-P zCb%cFHfPQIM+kMggl{^eV^K5IIx{g(0SboM?9F$73TF9dA!4y}_(A_J=ItyC~ zZ6gZv;-S!Yc|_iSW(IKPwD1;XaOM?prlaRdxT_Hg{0m{RA08Tn$e9AA$i+D4ocvYV zoP!d%V|YN`WYo)N@y=yf9B zh$>;qAA1?YF7r}+tQI!joke!OOzM_gsy*kmP1vZx5}o&vA55$eGj}uw>qgDevsCA- z2`0rV`5=jWZjivbGsSxnXyO?#vo=(I{NZ8YCyn54K4-qdHMnE>Y6>B!^krJ}1e|QF zptqx(t8QXPZtN9uU8eLFUE_#RBZ6l7GWEMrjY6X4q z67FxR?5}}jJpRbDl_6e(IC5-E@hi(2`eb+4PVR`~-Ai~8a)((85f=!7&p-mS38_dy zGdBQ1Ojx~gNzG3~lZz(+urs$Ys6hmgg0Qs*xHu4xjh*mE2Yz1^Uwjf3 z`dhMs zz&5v;=1Kn$O39pj{VOe?hHMHzEcx$v{XSM_8C2>huu!n`!;Az606%h08LSSC3rc^J zzR{`b1p!|`u0+-o1wm*60$JTml{YxPcUk`rf?>KXhka`(gD{%m&^Tg?Vk0N61@7(M%B@*1&w zLSFlF$l~;j174#IKwPG2t&Ib)$}GP>5zhqxiey|mOl(gd^aY{6hH1(1<-$xKz{MZH zN7G^C4`@82E|`N(Xvx2rX#RwyT=H*ygUtK@@x!Qyi=srLwzXGTn&Pd&Ua3%cg z*!Z0`vuq+nQhN&QyZnMDoHV>WYq$Uzu)ywB}DiXT$!Rmp=o3roq?RyJ)k>01zH2!&S7UUQbTC*Y+F;!L zo#hFI{nsb;Ss;Iouc818C_*Yl&gq`>fnFIxTCw<7@}q}I6PZM?@NbXrTH@k{;RFsH zJ!;@_hH7NpGj3>dn@W{qUp!fhm^IqkxuRmF1tngQYTikzU9_w*WqgvI8i($VWkYml zU9yCN$U`tp_NjSAikaF^TPZ3-?Mg(4`3KtNb=`O^I~@#RlzXJIRs zww~6}Q(iYW-{@kggypU`b1K&a#F{L2Omw$F1Mnp@y|x#ZPZuMGTj{t)pvhaJ(y)P4Sgu(f#+iKtw}B z1&6M-)N{?-mzS0xoWo>Sp3vlj0j;nKsizZB{yLo8P(tII5?--y9?5Sh-_UOas(w>Y zq%c;v50j3o@W4*DCF4*QJf_0$o=-8_A4!UrP!85>bO-?n`)Fq{y zcYmzH{TTKT^03Ol3{!U}%(IEz7)KmcGmcz7dgR1K_l?D($gLVlt*5G3=Tz9s-mOA! zqZsPG5?0Rb6VXwrlbp%1Xy(t40VRQZjAEe6osYb<&dqQnObqvIGt~+ZgG zP2^go9{be~G(K$&YwEk~S#DO@qJ1Y;NGMVjd43}cK(~Pi00Lo|k);qO^p@(O`@~1zh)c&gIv#f%QSdk`;)3E$zOpRT^mZj>j7yHhEpcNaQbrju<0=N5M5LXqk zYC6pTJV(u6@iyGi?;*$cr1JSEIAv@z&0wECJeI9*{*FRVcWirsKXmiq^%-ue=;&b3 z3x*6>kZ2Tx?_LZq9M1gnLRS6)?n9lAk6NCqRY)aVAO&9<|y&4vN29b(1O08XJTTP7a~%m-7ly z%WZc<^FK6-z5K383J#)tw3f+#eV}0^7Y0E-VS^xb3sax%RC>5)s@xu>SCw61 zp?h;UZ5rG7*8YHZq;_;jh)(sUBD$Cl+T+l$XFtO_IX7(EVLdmxMO^usK|&9g%q{#@lo_{jphqMwFMr?m`V5=s@5y3AZd6TgAn&~{}wYlY1ZnE6o~SULsmel7x~c|-V49dso~D>CaqxH z&LuyKAE^o{KZ`eCe!RnJE;CIzrD(IK@^gl*4u{kNg#N;`v#!w`Odhukwzsq61%LGp z|B|CXl-CUf8Of<1MKcJBmT#iMtr2+ncsZ#XmK22hA&U6j%qkh?aoq2V*{*bB_-FM* zwrJkxTYf?tkMk10TNr}g(6N}gjYTnI(Lj}v5C|F?#2k2~V`}6c3X~gR{k@T1IS$;b z(>OqTek~IX&Yk6zov4O_A&EvIt1p<{o)$0>avu#*0)b&5OY;1(Bp#jgd59wQWGGP> zQX2>cYMo|2vK}XpvOK9bmJ=#U|5|huc@SkO7mZyyHmT&RVi(*d^ZD)(#oF`n;ENSm zHPtZdU)Li#$&3#nJl|>#E+ZuNmlpdtzyF>5ooP;;rDST*WUKmpcK~YQ{?*az-BDY7 znJn4N!uM~D1Mg|>%TGtIQjx#IzaTWx+gqymc(0{xJk0T3{=H>SF?G)SHlhehxLl1` z>|r|~N*6r%=ibOoH&G`?eqwDap;n~JJI@G7m!N*E8`;^^Hb<)Qf9j2*^uVqy%frw=!`S{Gc8uTvc8B zd9rQ|mc}&SSlZ`6!(X>VV4bPCbQ1(jIqFNU&3xZbQ4d?H&6NIqe#^DSHg`l8r7<4Y zdAlSYc%~OnxS2m@kJNW^|H zPj+u4D3~KpL9MD^U|c~glvTh;F4(nwf(29~>PohzgVwi2GXFsv{kG%fI4?I@ z>V%Mc_P9#=SV@nB+fcl!f2_cUWTzhLUKws5v0|_|9%?R0Q6bvHDU&0nKWIN#GkLHH zsT_<_p3qYc+Yr-jAaQ1ZYk5!)-WkTCT2Tto_t1sK?x}uXWnM|ege7Ccx7lti<0YJk zhPle++g%mr>qDNe4$`xB4qT{U?PVI!xbgEmWs=J23d$bY!%;}yOw)AwF(FV{SC&&` zPz=`PGDnzZl#6BLfcyS?xsFacOhGb3;VQQD%SgHPh?7*3hzf3Jd`MX`M!6iL{1nqJ z9#V?N712&l{yf?M!8DkvH93t@=&HSsQEOq3tj->bc&FCR&RsvQ*0~*%kB5ueS4&)K zPI#)^BQ-AYd#qbQy#m$qAw+&KMm^-dEMJA%h!o;A&0Eq$75pA0YM!xVkXnPi>U$W< zAx3?+2s_VC)ZMO5m(V9=tg)z0lAF-Y8X2nK#4C6f{E^~~ni^3_7UNC*s+vK|=%?fY z6;`#n{@0s$6Q3F2OAPR2+c*(dP0*5t0DNLkpQLzIGjeakV zj?zVqtYl7dSz#nLHAudOerK0|&pzq@NYgZGGDoGdeT2E*WU6tSp}2M`T|RnXzcu0z z`PXTJR$}U!PFrA89R$&o(VfaQEi$^$%1_n+KLkqSTY&1QbH16u;RmHN)AWhjcK6ki z_b2gu%ZKjZ{$ik|Qq*CjgaE~&(6yO)@sPXSqYj0+xCQEu9Wjszs=s);CGP!9VOVZY zu{e*ki1D`!kH>yHrd0%w_r=c;f=4(#bz`U1JH<6l8m0;B!8h+$bz4w#2}1eW4y@ds zW2;U)3c7PWMhf=>wI*rwf?XAkoW>|&9Obim$S5A@CF5tjK#rFX^kcQ$WGt^nqs`AIi4|-vPZns^B)CcxccggmM zZ(-Yr$%j3wxhQ+^dQaOu?UDJjX_el^X7PcG(6OgxG&iBuMlsIBmJ>^*@rHS{`fCIUK>6JCGDJ$Q_i?re%na$jA2*!JF<}sUb#h z1~~qBP!QYlMm!{;_RP#O6Uk&`8Rf-fdWoc@Y~}%QO6qL&S{+D;5=uZT>i+`*zq?0w3h19&JKvj8ZUcw z5l@am#SY@ysi07Uy+gxfoz8UhTlH`UOHLSMEGMqF!_>;^BX-|(WyxgvW#;$*+3Yc+ zo%C9Zli6bITEidHkBwvVjM$Zzd70H_pUkl2ikvsz$7Z=kX7X|?*Y(Dm8lP6IRl}B6 z6YY(6IGWaDi^nNi_P-hLH4?`=O$>CH%gnBfI1_JuGw-IixRAEE)UfzAk@CgN;>X$~ z_P0rr;-`6glLe@$D-=xf*`R2iT+T!AD}Ie)zeQ*5IwPeSbJF?`=SYybC7}V0-^-1s zqLxHWrI5~iR}%<=<1ImrW%QCI+3g#FwTXk{F5);=2VyJAPIG%RD~dx)_NP|Vx!6YM z@`N0#&A`of(-sUR@HBn|V|Y}@j#bb!4hXr$gS;`|?UkS1z#Yt}+cHhGcO!ZJ1@nl|~uB-WxXHe#s^oN=EyQ$MqD+T01Sxey-b zn6tQl@>ygs)JeXCPBZqt0fgsCOzgmCUkO{qlX|ud8znCrX_sx)tnKD2D-5Rz-lVPO zlQ?qD1bT za~s69$PKcr39|MIV(jjui^rjL#d);(*y$tAMN-_qAEEz0uC}%S)4Tt%+OqkdtF63$ zUu`XMu>^{NDO;tQcWsrT#0(ETeDua9-=HOXp)GgH{s|?rwikPF+LjaEHyHD#Xa(BY6&7ppu!}B+4J$< zR@OHWNd!dWBp5N-b*m|G;6P=eYjBJEg1Nwj2mkJL;j?VvVjIs`n+l0e{D4B%{fniwOGX^>1>Z#dqDrTj3GpVw@#nZ5|*JmkAr5xvIrAK^STfXZ{40MTKW`u zZBu^mZPyq zPyabiDm>0PKQc*G-iwGh-4z^YnN81wN1k#jTEeO57gtoQ@KSgvf>pH#f>xQ9mfyp` z5=BaFv~Vc5?eH2i^z+EABr=P^ZpJ#1(TAbtWkquO>JfMTK$a6se-^FhRv~WscVb!} zHz#mnSw(prT<;klzU8*!WC7K?6_qRI%8AfwH-U>WH59a8pUBb+e@E8F5QR9Kyo&SS zGw~{?qi}sMC#kKnOPY41E$MP35IxpJv&Jk$#NHr)AVm*RAiW=RUA6Xvygx7K~k5nr0xwAXVG%%Q6{sme@*ZiLMq z^_FU`glvHlb)w?FPq8G{8KWa*26QV`#t7b9aNAKXiR9;0d^a}U~b!D;t zifH}X9KQTfk3yNj>DA9u^s@lv_)DaNiN`mdoIgqFy!?K8Kjx_MZj?fz8%Eei2szY_ zZrHFtV{jzDE|5ty+7Pp_iUI@#C&)aEs>c2v4U`Gsz-zbkT}n&T%kK|D@O*m9S0fq%=gfS?&;lONlj%1bh9R?0MY-f>499q`$56$~s7^KqqsX3C2 zFbbTkF>&lAln84?(Q8W8O@UX9=wgU_29UWUuT9%mkJBBk(X*>nQ#=7~nGwqME!N@1 z9R+L1QI<;%vy#+n+F$JZn#+BzNJgl?MolLZ6mZJ=2;Im;osokYi)Q%U4{BT_wrQiR zC&fyQSp5eh-waK2DI+oqtsrbc_`+qMq()MNuzCV-s<>=si6|bOZPEO>R?&&cSNCS+ za5}l(*HRdT%P0tGuG40wi9q3|u**^z5?<{HU-2NLq&$KVD-)@!q$jMgcETN>>8K=< zf)wIPkiy9#W|>r|r?advAYubS)+t@lB88ppVI-@kUaeC~CE4adTl1X3U~=O@|uFt%~yMaMYNUh=5%5L@=unOo$NarQd{)%JP(lJ{CMmXf4_HQ<=G=0bD3- z-V4_*$ey{1msR}6LMf5|2dSu3DgIe^H?3n0@{FTCQZJBzF7X?}iWYZtHtvMY-cu#g zf2`n9SwYUGB0XC#6!gozzdSm`*4c?}{V%u}F&}G@E$(0*qAlEg*Vx=|f7hZW#=DJq z^HfQJ?(U{)`u!y2K~ipAB>`7eFK^vR8n8;M#%V)!_N~_D9+6hCzn2L66B6YvTZ_WW zDeY2pX*lzixqhcg6K@SkG`v?o*@s#Je^)D!ZI*Cpc`!ip??^%j1Kf(cu}kOgQX+rv zr&v=TR=|rmzI-*KafwRKtYrAfiXLqn=;_S_$cW0U^ZL$1_Cji~4k|;^JAOa4sMx-R z#CvxdA+D?(s#+3VfD^xyG@mZ|Zt3oGLBx{S zAeiNg&q`v95U~O!0w06saHhay_kOsOe^(hslF46KJWu+Dfn%FBfGP2*zzX}yXL1|x@*4eycO5SA^hx#@sg35LlCZZ)fOorQ5vNb`^n6M3GvYp?#0$C248^}z<-4@J-zqRJ z$mlfez%&5=iiB!DVplIh!%R+DcT=MIeI?m zm~vZZv$403*rSqcO)({$f05t&DmCaO_xY>LQV&4r@v$Kb!7y9^&ne1I3+R1LVD-|% z8WvT+z~tp`B^!u7r??b@=NU@raJdfNb)OMK%-{39bNe}S^ZD)WNp~yoa1kC5NWn!T zp9}4=9BP)J>b z5{`NN@WXRzszQ7@3l)r$TR`P7mEtbP2c^hsxNqT%E#7AIQ#_h7NMtKA*n>3$zc>0$ zkXCg%Q?_LU{G7PND0+G`A|^jN1%#c3N3#b#Wq+bKQAY8BGo0)SUKfa+w`bVv@u0Jc zjol1wEn`|OgHId27OL~-Wr-y3Aqp>h%_~bBs{+)ao^;l#y*EOhEHNc-5T+L2-7Ew6 zgDkV`5!Uuks{-Tn%diJn0M8mp^nzk~i6fO8{-}gL00ogACY0v(`w5uQLF$&Z0h zovXY?3j3Yi;F^L^i3D&1a@r*33z$l}R*st^YJ^Vk3aIvxdLLvFGEEpTZSdeHph^U~ zRsjki$qj=6Ix5j0ixJ&4R2wRWA-(4Ovd<`FEuv5<_--i%PqBqM@tqsQqj@Rx31K2& z?C`K+;9Q7bB;fiqtukGTrCiJ!VW9dkTypcZ^-$d1t)M{~uCNyJSLNhaG!(6h@KOL8 zLj3Gsd@c2}e<1`DB7L6=8;h6+887gpM25v>4r?hdA+EhAO)0<{VEs8-c zh^`kjpvZel$-d00nWj1^WHX4A@?@z4dxyPDs`Ctcq3mH=B-kx`kqACs4w(>%ptHhe z+?2y(cyg3*U{Xanggusco9Peov*72j!}7bMBQ&jpsVExWcjdAtFA#;SZ!TJL__^WI z%|ur(#Keu#$gH4u7C92`(|zH|lZ2<@)g?aIB$RoP2Zv|>Re_SvK;OE)lHDX8$%EnW z#Dh@8RBZWtyz&7fO1SrdgbxKVvNq51AOD5g%o6`vup9f)r`sidUt9@TZP+9L-PJaF!_!B7oorPK%71T}YL}M6Y9ah#3lWVm;%j5M>1H{z zEc9h&jlKbq8>W=i>TPcyQPFf&hXh^4=v&Mt^u90=S2-jES=(n|vx)Itn<=M1gjY_N zA$2P_tf~#0%eo67=8=f3ctUPfcMuBWy-aI|K@@EiiV71GRo0r{=+=+k?$rX{ac>e5 zU=WCvL~vc{EusNa1L*yL--m!2F<_h9!~fh&>*HM z$t!3r^_xCx@ZzaInYSGrjjZM13;^XS!?Q7UurbSbu`I;f2E3mmfqay?0Wth#CH(Wp zdJ3GBv(JQ7#%xx1fNIwUihS5O051rvQPO#5&(;WBVB7PWy!#3Pcr#C3BiJh6dJB?A zOx2_Mp8FiiVhn9FE`Ez9E&#z;jDgtb_q>}egh8yOtthBP z=>8KkM*Qiq5jx3mp7@!{%!;XcEni;)q(2me|w&{@k@@u1JFd2ZQ1UQK=cX+%?jJNBXGC1 z;Do-L;+(h(#CkoPk&TMtn17a!hGqwLNfi`SoOMrMYEjKdI5_GmCiNuJw9}5sXHQq% z9VePHrZ2H?;g;<+IqcNx%_vxb@BZ@qzy+m~Eqa9Mm06`=aD?B^tDcW$piF^B85FYq z@`cD=Wv8eDG_eF9{3hBZ?5iNfwc(H?oM=_@(U;6e?fqmpUHCeK^f>h{rbG8w>+RAJ zQ;tJbGoAkGfJ0>qyX=s3eGTtr$Abi@^UZm`8bc*uJxnQ7`buhqjAe+{p5mIj!*ZsZ zp$hSEoFTwJjOPPw;i^g^pH!XN$nOU77p8+R#+ki;3mA^Gk$f5Ss~QyxB}zvEIeBAk zQb23W7&*%@;rXo$LY-p??}34G<3|sIpou<277UW9{J3aE3!93p|Q1(iZ86D=%AF)WB0{(cu_ZK^X(R@^gSJl?w z^TT=mkQ3&hJZsgY8D;_Sr0mTcY@!y%5eukg%?cfrQjaKl)OG`MgwY!uHe*Bg7)i#o zXQ(%!n$j~2EJPkiBCza&G7dD+5;~mhN1E@QVk#nH#?svlQ}0mBrJD!q%*#~=a7w{N zvf|FNySVbZn(zpHkbtYD+Ka^x+7o3W@~!wf^CyXm5pakt2y}ZN5ZSTxK5-!v)dU+| zB;BmrG(`$K16KUiX%kdj8bFQ)+<6?XI7Z3;63AH|C)8OkRs%dX!ap1-mu@V8-R2QE zY>5B@VG8)YtT=>ebku%y-h|Sb!7K9y!1>D@I7{q7%b@sain>o++}_txO;W=$O=oNRyGcbpNgH^N^}Pm$-Z|0aoS`2!FKj9*-Ta_d>8 zbSoLv7`c(m^4YEXs8RU%nBDG{EAQTVX$D{6&s+Ng5U!L;lQ7~PmAed2PhM}4Ce$AP z5fBmppbp4t^df{L?Lvx9dJ-O}K`5xPBvT`MpM>*QCKFQ}Am9SjIs#ui`V*yhq6?Zq z$Q^4Yk#61(7+ENb3tI$osg=H(+QaX9dHc4{XZIH%%H4C;sRbe5iAe#`XFKux1VNU7 z{*5zquD!n-1e-vScqEn-YQSaa(nt6<31ta=GzeT>mpokCDybn>XNIHG#Ga2175=g_ z)G !lcu85-^2SuITKZ)1KD&Wj&{T$ez%J2)g!Ljc0>?`NxAwk8+k9tmA`-f)pn zUy=-b61}#6ZvzC7P*)v+&yT!GK-4Z9%sO90-M_H097zOi19gY~=Jev}knl;mHj<8f z-S}={=?XL(Z-o&-{0I*jL>rY7Oz=2dL zuK+S_5;-!uc7c6qX5wgoc-LvNZ@+>PkgH- z%_$n!2W({mjQ-Dtz^?$xZptw-(8xMdtIW^DTjI|3S9IJx(7`XdoBX`ab&9|@T~n`s z^mWFV2f#$;U!>Dl-@Cu3UjaERAdvRG={#8r5Q2$) zc=~p=MVLkFAiEk**tDj)QU>+SKylQST14u%qwjuLN+3p;RRd6Yhy z{O4COMP;SI?fgLAWbwodMsyv*nSf#0B9$Yg-u^y9@& zq6aYA9~hwPK-4rQUdzAO(f$MISQ-cGHq5&8hzC0^h@h_Ei|jKyK=E*VJp%*eIxag8H? z8wpvcL*ErC3mmlGI!jilw<@V418N$MuBCRgB?0X_kz)l{Z6#duz|Q@!BzbiTVKzHF zDPb7h>jq+lB+kTR?yB^I8CAY_p**T~taI+AurBt>zC_S98K`M_t4#hq!8Z0mOwE_4 z!a_$4SXHZxk!pw70W*Ff^PEGZ6_LsXZ+RIRQXn-|kqWN4oM%`h%? z$(7aG+gey%>X3$nQXiT!(wcJ}a-651R9%^5)fj6}#3c32%hX*jF}A4-Z>y0FGgh69 z4GNb1V1^bHAx)t?F!RW;P-nzgfSU2sS$qZK}tAaF?2Q_yEh zr;0uQ{h}}PG%B3u4Gz}nV66y0&@PvR^+wgc>PWq1n>uBr$uNXHKxM0V4R25_B$y$V zLKoxKmaNq};d>%z(y3-C#2oOPvxK>T+&Mh1=F3(PCUQZgm3*lAG<}|qb|JQNvP^!E z1z~#L3KOzLDgZo1z_`4i*wb951^U9#yADsx@ugdgJ(iAp?|QkzWA>Gok3DR@uhu1- z?0_G=QuX1l4CwIQ4!f3qv3tBKMGitglR4V)aXN_ZOrm^FIS;|=rrg4 zuBD9XVYE4p(ly??*v;_8Ua8rkT%`;=Aj9W9bCuvU z*h}6aEg;UFu6ESf&P8ESeL39iX;q{jMsS_CZHj~OshjuJ zo-1B#CiJ7)EIkNaNqLs#ofef9Qtp~wq)jSvWs z^L5)6^?EPoIp&l#{SYfPW6kGl?VPv?<2Jm0q#epBB9^9aFVAS4re!M_4a29oVe-|9 zQ)IQLU%^w7{-qNiu3yBiyQ9)L5OY6Mgl+Gdv|S%68GWdhiu1hm@kJRTs#9O(Y`$Do zA@U91cMqEgpMJJbx+Ft|yD~YF4tk}f`ll4-nv?F-cbE?J3&r7;TG^p@9JImKYvTdc z@uuuQY4u-55s}`GTR_e6Rocz@xGWHS4$}I_xF!dpj8Miof%glHt-*MV+6vq!QHycA zjhb2gt5_> zJm*x0L}yt2>|NIt4!6Q#_c+eV(+1+!K1KusTz-BN5KTS|;r}u!K?ByO-gS+*&!bNE z%B_WEFwui7*up($s{o>zE1`OA9n-$R!l%jPYvpefqV4IcdrsX093phe-CP4Bux zk5OOhI>9^EpWKjKB0C-Zp`P0)7CQWYby)%ol>Z86rv15U2Ff=ha zTCFGd#XhMF;<9!~ojrbBIWIVCOlKj4FUCp8@R^V@j~y+3->ymH1!Hba=K!X~MuZDG zvLjZg^gdbW#*68>>|Kz(l#;fll4bwnPXQ-l)PdTeL$B&~LD&wZX5gnxYNM&wP*lj* zn+eKF+$Thh4r^F@bYe4z9hmsDa6JP`=gEcc&;-?`#u+o%%|F>ZOJa^JnN_D ziHB^_!rj?gzZ;G}2VbnnjG^9dtMx=TqeCDSBr|Awxa`XVu`esJ>vOVvb3J%);h5%o z95L9D%4D|fXx4V_+i}yq?q;s}L>_;Le@LBUpPW#8@10e-*g(9oyYlXvr6T^28)oAN zqW(n47%XW6>S!gNa+{+)QvOr3eDayRj5@an8W-$>%&$(R0+137Jm0Tqc5YIa5ac9;@hh@Seud8C|S%)npc0fXd$ zN^yFV@quFr1vA@sQtE)WWa3>ck>DA)jb_lCeL#5?`&gaGKz%UBxA;k@5<_sP9dVgm z(cpH5j5)o+?M;yQwUV1iq$>qN=aN*UY`}>k$(mtkEuG(6pGZDNSB z%wVh>V2jnf3eA`;e?FgRojv$U1RJQ(5W3yyz72IDq6&8!_T$5kWRJdS_Gz=9S9(@7 z9BnWE+G9wZcmyX4YsfZIUaOqkKWOZq7ssBaVoT|@)#O2uDZDh4a;+R1Dr7vSI!@D{ zvprH-fX%-gX@y`4JvihPFpLZ%MGBEw{-Zwr{izBHOv#uydj&Nok*ay@OWRTYb|nvM zUaPNh(zUpf-1j_UAT|n0>LT}j7_b)p$bDSZ)&rGS9@vVi{s<|EQ4HmiebTi%Fc(-( zn!1VzUz$xXtmcx`JZ2!c0ah1^?W*E1jvA>MSD%=Vm4}Fgr%MX|?w^RMZ^o>GwyQft$r!Ow2xF}em3)Cb#g`HoD2^Cq`?1SMXIvnaVSGGE${#rDm zQ460rYSl-{8x!cvMmT+DXeUZ2!`Sb+_A)neFu#NlbHLa6X4&rRhO6k}yXkT&a&a>< zUu4fdY18Ff(-k(-@aS|lm);agsH;@y-kpg09HS@klC`=@ zPl_M5s8b>(8c8t_W7j?>!>BLEuP-mHub?qco}jDfJg?&?_Jv{MKF9cRrl#^SR*fgr zlPxu|Re!BaM(qzw^qanLl)f$_L|l4-lzt8`YhLeI$HW8kFpS-h14-n5dj)>@kRK!e zZ754$b=*G0m?PibsNs?H2iqzQ+u|&wM*mN~`6oNYUrj%>O)vEBKX90cwVO!3xsE~7 zK%5w{&qx-Xj^84ugPvlVxem^5OW^WXK<*c>d`K zl1K4$AFGxO62GY`X*^0j##-$VKXU$Z;qBxpH>e&jzg4deaZ?Ej}sb1=j6A64JwIjY6C|5^3*;+k*z zN2a;+9{MktW-V)4;2)Xhl##9ZzhoLA75-<8|6BP!+gRowndVaWU(7|0*AnW(|Bz{% zKZZU#`sC~zOZO=}_8hF4U63i%68(UkJ^uB@-rLO@*}v_qUl0G6OmkaJV%F-sg-Z8B zMon`%JNycUygIZnF-zB{!m%UmH_|O9Qr6X6%&+jE_Xw3YYjB@JDepgDfJfu`kxBW%)_#c^uQ^&66KfBoh$&YjW=|pzTOuzrDoBeAy zO^nlq+YHOuYM&Sb0uBn3l^XUG(+q5_Z=uq|a%JQvg^^M(*(;8GUBiy29ap=R{}2|H>8*bW{#Q49b)yV=OISpvNZpq2 zcOD|#l=HR!t9(zbiWy#Z7Uua!rV;MVsu^czL$x_MF$eVXJ&#%Yblc75dNTezxBB`^ zKAYSa!?T&B`*IEFx5(qmIY&1zdioaNA(}U`GfQ14iV=?bAnAS~`rpg<_EUq63%aGp z_kt$c%{~jeFPf!r6&X2u*OYy^Io?|8`LMDz>q&g_V-w3&a|@MEIqp2S3P5iw z?LxOKnkeT^WObK5_OGMiG5H}9nIT#rej#(w)Llg*Ev-d263 z+)5bAf1C%i_O|;OJ~%aJo4wnt!U*mO8j2h-v|wUN+?eV3@mUod_;WAm!Kd$s@9m(! zj=c#VkszpsDJvD>7kUu&F#1PwLD0erBwor~B$4r1FwJ-# zffytW$7}QL3uMI@f5q#L z#}AU-L}0lLfpe@%zY0xRLO-X(d8BsC?fyn(fLHU0x50P;713Znzpsua92<;oy&4cc z;ih?_UP!k%Jb16QPHO_Yf)2eJZ0{EevCWPZ@l~l)nTHF;Ulk$=Rfpy1F5*SO1gz8} z!%EAph&Y8Yo?uy3jFK>4l4}?e1AqZ6h@i5W-LUyGgwz9##}2{4S3=#_u~r1YFXU0C za2QQqUP?{TDEl-wV5kmGtU*}|M7)5UIDr%UDAZQ66Vz+aiFhDXUn*W=#S?=87_toK zj&>NYqd5mfNFJWp(7{B7t9AA^AJ@a_M;dLENeajMc8DCVDPMz#+}lGxoEIb0Qvtue zz5$Vxp$Re5!E~3>JyKK-jTo$N5x4%S<&cyj%79vT?RU-Rw zgCJH#_j!0QhNH8ots)v`KIQ6mn7Pd5%M$U4a!v2ix!hlurD&20?Fh_#0o}JU6^#nr zw9)wziEriFu@(BIn1u@CZxziLdAi!sg@|M;$hsx z*h`O7kD1i=Dr|y$vL(vLsYn>isYZReUN(PUV1CD3V(Jn$ZybZzkGZTh|99R* zP_8}THr+mMNc?a77;=avT)m}!XDt1{coR=eB4?dcKJ7Nk|Hj^Xa5cHEZMz`}AqmA0 z0@9`T5a zoCpiZ)yNX|>+pPzxnch=^d{CP_Oo&JFP~1FbEWtmTs9QHeEbb-uh`Qsr0uy^?A{sQ zz{8_YkFp^S^m= zF6^fqLCrl*huLO{&*@+2$9U~8KK{*9#8L&@BAk4uQkiOG7O+*!YuLY4V(JdYiKeJO zP$|oHRa((b*I6U-SG&!USC&?Tw@cHUe%Ppg>P@zJPUMaMrZ>qX83puXXFn%~^fjrw z0iL3VoBZR4`mrf74#R4q(Iw&9+ZGAyqLuVY3AZAK`-R%8XZM6VM~IiK!>&^}S=xcmOht3$z(>W3}$zv##6 zS`$jy6yiC}jmP)($0Dbe1f3K&)PB{E0iL2q@~0HqjN~|B?-i3w4!l1+!IO!6T!}pH z@p1K)D@PoEZnn6_pgia8BK|bv=`7A5^ZHL4`E46xODTFw9r)sF^;XY5ZZ+L7R)4j9CXL9^e#4mT4TwlG5|_5GUC8CHs@J`{wn~D3i;_6;cyIPboBz9I z`3su@H8yX)eE_Q4f9S_<2P8Oqs|h6xHhurRIU;(_zvZf=)`!Xa#|n9tKvhrhpvn{qs4u&A=?u!o*^%6X$nJ4q!l!h<5(N?#Dn7pwm5mng z;+P~v+q-@oj5FC06L=Jkj4@W8#j(d(a!mn)4~%9ysfo_a2K4#a!@!eRqWk_N{nIUm z)3dwD{*(3-kFbHOzU#azl2AD_rhc8doH59{0`*3i+)HWwON1A$k7(5&fBE5oxB3qmcPs>jmwy#}G z&xVo9=tS6LJNxFqk4bN;rKsZx(0cz0sS4$T3*qfxD5vM<*$VLs-c*q^?*}W+l5J;% zGa9hfiL(b2TQ<6l5NPpKo`eNfCcILb|YE`d2aKe=7bDpR!LpycwS3%>NSqe~2kB^u@Di z+ycauZHC83(+wJVTfnxYdr^z?#lnBH# zNKc@9hw2UE7`~AIS~C7a>Ol~{)&qzsw;COf>>G!}vQO{x8t0DELHHJ5VX*TY=HJZsU2r)RUwuO7`Dqnz0^%z` z>LI|RxK$+05Pz8biCe`fx93^T=P9{XU8n%1JTKEfJ^H+Y)pTr*C-d}=3qudZ zl&5`>!muJekJ5_4CXc#CoiDHd(B|0O{s_k18GkAGhc*WrR3vn0usalAafWx6%_W#}{=imz(1!Vh8fNy){m$%!i>AkQZ~@1L)doDC`WKlj~#U1p@U`>PQ{yUb#|P zB)>{w0|G4?l0_)Whv97^`#uqXUkioR1_h|FrdBV#_yD~~bj17$fzofWMtw);^msN9 z|9vauoq{&&pfg%mF z&`t8B(8I2&j>s$>-VB_z2J9))+qehd|6W)`t z3s85u+eM-I;C+%Vy-4!hW`TN7WxmQ!(}7EG3qMX)oc%D?|EKt`(^Geo03Xs6&|^=D z;>qBnBE|8Z-6h@-+9zBiQBs!tBmS$Xm$K}vka68Z9Me0D|NCVo+u(mE{+moy8?}x9 zgPVa-M-Wqn&{D0WP845kpnGrrZyoFZB=9dC27X<@Nz8mGCe@E@Ed<1*dgMQR!@^R& zzxjsu>3;PMpSHjMgX#djVap7I*V{kDq~QSv$V1<-ZDiPwW4+B*bIAeuKYYV} z-c-N&hDFXez8kV6_=c^mcm6omA-z!=zxjrl+h^BC(>Gb0&j&oS6fe-oYCk`<`~27^ z_+&&+(3_rxJimjA%8)~<^IvUfgb^rX*WEh@y7pf_-8T>$f-hQyf|zLv!d}K@Sp>MS z!`UJ*OF;gob*f}nMR}+`@cTh^{)=yTPU{abDg1_j%=@jU*KjcYQjK4_#s15&{;SW> z#HkAK83xj-Fk43R^XTX0i#vJR6jp8Iy4_+h%JuluvHn}&$HUY!Q-Adtex}Wr?=R-F zPK3p+l<1?u__7SAPMw(JhQ-e-2+`{LCuH0?1Pb#vP9nIe3W~>hdfE>JY6R-R#DuDf zjbB|&fNywQrMmCXX9&2O++4^-fMdPlEDc*rkG2NjGZb(wuWWGuTult(X|(k#tW~NV zTjBRKIxl?>M|O1#Hwkxl&CUweFP)b9LJ8{hTov5uh`ay|4Ja_}<# z;WPZz)zqXgSTE;zA{q2@?`CLk@axGRV$w6I{eYPC;gA=R>#oB7j4E&4{;a0{!+6`# zlYfXw>)tI`93JZo$=;bWHZ||nA7loky%TqCd-eXI=g2o&LGQbdRF|zODRVecrw;58 zkN*h#v9dLBT;M*Kf)SiS+GKmK>$aNC=+-oHkF@q@2#0IK8P{^o+kK@n1sZ4?!IDMY~-%r$^3 z+`RK7vM7u#HQEup3WG;K1A*uj9r|_T$wM7L5Cn;R{|@e0_%jd~tA^|WlZK_p2lKRy z_0W4GsXf-i%o_^9_U#y(NNx(*XSON_`6Qr=&=N6GOtHHe98V=M!$I|Mg@&`A!quWY zQa@N#LVQkv%}g|*hMk?>a$r!bdgHjs$r46V(kQn2)RQf$Pnk6Ihoy6eldepbuzuJQ zlhlm(Bk=E~#MVxTqJd-mdJS1}A_WD9DKmmip6zOBDNoe1cSzl=}i0XI;&kWs10 z-IdMWm&l@!8Nv@0x~Mi`b{O~_QjYnIO;~;23wie0(d@KswGGloXi#%Q>~5N-oyeTv zX8~1-q)(F-FEyY-TU_$FaWYDko0y0#5b}z2iWc-KX1;bqABO{99Cc<(w+UlXSk=6I z))C#uCQpVb`ljXmfDrsXU!CtUF$`s(lLw+F;eX7aQ`LUh^3jXq3T%$n0~irsAI=p7 z>M`{d$d}?!IHx}QuLA$)T7%N?a;eNo!DKT0^7=fl>^J_aui5@Wb&y*yuxYsdMQ~&l zKy^%}1k&1fNbCMj1b#YMW2tzcQeloqXs9(NO1S;chTFf5fQ~r-ube;rdW;V#V4zp= z5gJ_-K2%lziSuW(j~*K6D^oc*t~>wA`PcgTfuR3?&H3Y|X4uko^zNyg08@JxBv-hh zx!r$pdtPSc70l0b?LzXQfu7FrSHta}f_^7v!_sWyhk<^{DeDvuC!b{`UEo&g&!B(a zm-~FWnUdY1y{}4z6+ryuzIp)S5BZ7s4}*Ro7*|ag{*%4WH6^|C{ZBt8fcPna8=(_G z{7tu;MgRl-@c0kIt-F7w$ojTg4}IWI1ATM_QCy_1V$fTpzVU0*uZG)0RkiiT;~$*= zrytWZ=mr&lfY^+}0Y7Gfaa=!3)a=f0hTCpVe#VP!Vd|f{( zG4B`y1bw$3H-hNpE02tqEwWFbK7~mx2Y)zt^&0~EA{fV$mMxyZUoB(>1by=f1aGP_ z;Kyv17H=zPmdg;`fCiGw1fByR{ubcJlyND?jJ@0T;{bmNu)G^;#d+&(+YgAZ5?8m$ zdI<5UyLX-dNqcXC^I-YSblyee+nI|hJq2|wdVf|`zg26B<*7VGKrbS+fS`ZXSpDnZ z)P-}u6g>Kk^J^nOAjbhDH3jzcxD;TZ-#Q&D<|zThbchOP-|w7%w2vxqCxVTl2(IFv zht-LQtDo9GOE!ZpixT^~9?`_Qh$$b>x> z9f^m|r9Cy|>5D&sCqUS3NCY*@N2((GDe=JrOyowRRhs>@Tw5S^i^k#eMvgQYAbG$p zthUNhEE|r3bCW9wXvnNP)h|YJ!xXCZa`pJj?6kSfpN|_03{ilo6|v3_)XmQ;L&F=O z!XaZA<4A94I9ypYjv>=g{A~^~vHWC(+LWu=+uX&;^3!c&QyzhD^FDh=3HGW@_jj++ z7B*N*yQlT|h{I4XS~jH5=yv)49`qCM?(g8(6t;LZzw;k*egZsG_c(f-7%j73gi5MZ z;#HrCH`_0!pQ=3nm!SVIZ-jrw`EQyO@o71SpH8yD)X&b>JOSp<**`%^Nr4gsp}&1V z|C7jm#OT*zj~G25Fg{}RM~wbI$LLMzXb_RKeT!UT6JRiP?+WIrS-H{aB2DTY6jrC>q*PAgd5 z5zU7WpNf8dp;ku%lc(w|-_{hT#$`}MUa+Bff^kMwD}z8=K&K?}XA<+L16psPjDuGA z%(x(tZmu|E?aC?AaSaxqnEYG&Wd&Q27k+<;bxrcvfw1zO;>G#@{t)|*Nz7j#V*eJS zj~b^;UFg>4OA)c&6t$vI;3M@;@OsvnNzh#oQd6cRF!=Mj_tE0YJtQq7`H zeDfb`bPK1&Zap(qT}RRbVINYZRHf8GtCuQ(3H2$2mkz1dweMYr*aB~+AiUuc75Z66 znJ8i=4DH!;-H5te)RG!ZO`y&h^DUFd*-WaLfOC!64dp9~CYT$J<&6o!xowCf)KbUt z%@NA<zcm+P8t?Am@;$NBk@Sm9ckEkAKenR1Re2zh>0vnYhpDqUyuN|yV ze9o&<;RFPp`0GfH$|1bTP?cTjJEmPt!`krkwYG6SD(4@Lw`TvKwymv?*+zER%j?R`b-C__r zAr_T0*(fwe8+fT)JVH7SjkC3$#c1$3Jd;r(#&~eTVUo>inL55rY{y@4iH|+VFvQ72 zJv>Pz<3^`zBRMEoKz&T%)E_81@97KH_xyypt`HmT13W!e(& z!Ir|!cbVt6kk1iEZr$(?pIiTpkPi&vH2Or9(D%WG-TU&SKmNz$J%Vkz_tYhSB+KC&ZOTwQ3-Ctk zGA{MYn(Afs*6N90hcbVAqrLU=zL2S2aY*Hmjd`=D;r1-8q(@yR^{16(wW#=^wjczdW(Hj!fj3%Xr{_LY4%bt&wv9%E%iZPz_FuDhPc(c!=yoSt!PD)wX z1x9K4a-|N5JXjLJS4|Pg&PRLYqmDmo^hcXWm?NCrq=PFXBUb3v$0u=gV;tmsUA?OJ z;+2>8@)G3UkESPiuBWZZOMQ0c(tP`l?~!Ucvng6c`#gVH3T%O^O#P zTzuM1E0wO~DvfHzOlK^XWOI~8Gs-h`m{rWO=o8DnJGu%e7K95dpIE6BK4h*)d zke%=KoT_JmH`?Q3Yo_%yOGxL`ZuI&KyIMNgQ~@o4pl7AixtZ3Q6-t+0wele@r5DOD za0=YIpWGPTJ{Dd>)k(Y80vWYF>Hb(F~+3dB?Hgs0%{ z9I-6M?#xi6sL~s&#!%l$iH}y1o&#{ox4gp%yG18X5M`cGo6x5FdRg9CE#CD5`@Gzn zKtv&${aEk1y`3sjwqT1AxEdhgC`I;-9mGUV32LxrPZAdG9?dSqip$QM$SZG>x0tFk z)e&oR!>U>bO#NEjI8c;`U)!xJe% zaq*SN1iug2qnP@SsxhL#=*?+&aDb1xmem5!R5ESb`gZGinuj8;gMJ(K1!JF{6E3}b zuTh~I8kmsz3}c;e><%z`)4u7k^b#fZQYgHWX5D$`R)J=4dD5}VFLx(PIs)IS=z&AD z>o5HB?cL(V8^pb(^j7Z=%3jxu$5wo_3!UN(j^RF2R#_j8-ki`cP2Lqb_@?mSZsvD0 zo`^gCw@cs$qbJ*IKfbwom4@mvg}5A41|@Z?dRe)UHywO7MaS1ChZOKHlRut5g+8eU z^5W>p_C+Fn`l8(WL&$Ol`3)KohA($w&hE1#4{B&rO_+D0 zQu0=DJehs*?MbHv<=D|)n~gjI&QU4`anEntm%SW9i5MAJ85*>w3u}voa?6#h-8P}U zTSd)b$g#lGx30)Py_-zwmHx2>J?QEPj}>^iLNykv(lKQl2}P6y#+sCauqI8_^sRH78NSaZ+ z&=?Qp`BB!voa>CBS&vKCZYEo>D5Z)8eO6zux6!Z<^wk ziKJc;QWZ7~*G${zNDxwwXTE8Qu}|a5<6VWyQhKX*J{!ckG^@3qraq7j+n2C@?GVe! z%$~xOT$b^cd0d1xeImD|Nr0SNl}~|$#xdR*>moiZkzGX-ihPF2jIB(6^qyF&vyWNV zbap?>-!60tBh~mZO5T|yDa^#6j9!pmVGnrEP1F>P*oruDesL;i(4&~uqQYd<7;}yu z;SgDA%K8-x2T@$+qp2G_N3Nioe>&=tk}gy}q4P{`h-QYBFy(ozHO-<7oj{JEByI90 znL?hX_%mnXj1aEMV~Z1wGYeIfr3U(mzg3fkk1wdut36^7Z>H)pgL%tqLuRT zWED1E)Pr%A4^gic?xRHVWyN~Nvls)L!4_==Egg>;Jm&Sv%jLWn666o&x`V>rgeOXz ze=Tw4-qLF&1I=_yg39PAIvS}YW^RfYQ<+!Xs+VaMH-=I;4lrdqkvVrM=$xa=k0m=d z+s(?+ISzBs`M%fIP$}NTF?DijPa$}f5>e-U?s3&i?Q8H@2%Ym?Fm2Yk$!|r!uHUi1 zrcLYGo#?NvHt?)+&(&Ksv@tQCxHzA{P@#@qHc?smw2)OlUQAZ(nh%036veS59EZR` zd<=`O<_%8CLl>*%I>ri9B$|TeJDns4XT+%AwY0s8u@{9tw6PWEEv-X=KIBTCT0X4? zGg}gpwws2<`I>;v4EdIjJ=%s5#j?lCE^G!Z4culGfQoy@aXr0va2}y<`>-dxqgv#NFeV?q& zWpdijH4j?re_y(LFmlWbt|S$H0JHVq;SBzKkvawtf3o@Q7~_@LP0uSLlXWgbbwerq z&jI?v@4%Wr?s5_i6+?ty#)Z;;MDI(YZsT==`W;H}zbLN4wYl+}{^(Qd_&G>~SS-57 zMnyV1;+7BMoL>ZUOGKZ&e}W1uk&H~4EHW=Fl&C^Ise)pb3?I)zH#S&NN>EOLsC#!V zneIBQpYkYOiNZN6!6HJyjZs=f-f(L7WKgsRU-VlpxPd&r0!`7k6B$Gjqu$OS2M6); z(QSW%8p77bgZ)mltkERH25At7N)stCJG*NAu26~2R_G|8rcq|nYR(q4^D zGB2WdP=TJqQbKJLok&P0?PC&194M$S+Gbxncbfa@R`OhLz>~0Ouxw7R+h!c`!NR1ZhE_& zVG@<-=bH%WPaS!i=yNie{a}zO39HDs+VV+5|axDS$muWLOlNC#y~aDIl(G z@k~Ay77m$7+ww>8o=hea1DOS|%Bcmy0y5oZ<8#@s$*IA3`LDBk!L#v*BHdJWl5}Ka zvXfY>>vN8I5NJLnYcq_@))Z6M5OB;dOB;BZ@XP@1WnMK!os&W}uB3B-Gf*UP@;;Zl z8l9$AGa{?l#z9#Sj%#IM33Mt@`GIuv-t@#x1|3rdCudpn9Y}(-gbpfi#V#|y846yd z@ckriog>=wk(};cZc9(_X>RUw(_Gbf z`48md{5)W3%;Z5f?adt|Sl4^qGimS$QMH=9);L+x&drkIo}G?TwE zE6uhT6EcCz0kh|DQx`^s!;zhYNd8<-YDX$0&8v?$PRYX_jf!Qe7D?C!ovti8<`u>& zaPI038M|5W?rZ{2Zm~dT@pV3Aac}X`Kmp}U0^gDDG5!Gf9~9VmYTmv7OR zg%uDbQ^l0ppDZM#n3Exnks!2XP@qLxC0A@&Z)ur40b!Se2)og$3y&gV(1a`)dyKLf zjm0*t{5TU({vSy{}qUbO2YT#RR0&nXnw^{&GrZ{o|Wsmr#*Qs(_o-s7mf zoQkajl5(%2vP2oQ@ivQO=kXo-suQa>(&MWRq>E=il!z3^T^g_I8>o=8Bcs>%^bRQJ z8kfVURkzv0Kr66Cdc-d+6fjc&%_|#&3koT(Uyq_XZ>3~5HxEGTevrs;aT1n^_ZqJwyL zS@Gpky@Wo3O$S_`BE4^Ra|l_M`I$^5w+^N%Sb>GJ;K2z?H|Gaypf#t8KwvHuMd?7p z+)}mtQzSQ$#7O{EM7;SvUZRB&?16GALc#VKn=HM^K)p>Ivm_onjf>5RVYbzU2Zn|a zT}TA6L1gnrrWbr+NpwtAH%7fyo}AjFD$KUi`u!)b)D(nGBUuok=}BXYK~SqnSD5q& zsma4u%e>sg=dF^ETXwP%7P6?T4RCt%TUf;mmeE_1oDH5#C&~Eg1O!@%C1jT-I2gvc z`vOsgGVU>+sdF&+kdteWY#WxQoqe_~K0)d9mv)inQlwp*SXf(!;w`E&J+7lp`4p)OD_tVQtFq&f6kakq7ErzP8K?#%}C7#iUo$XbUslVDQ+m9ICdPHck^|wL&_jNtcp%#@lo1 zUiTEHZS+yChlYC3kows5=F%Gp`pH5pV-!+1hO)#g~}- z^Lf(cG)i(k4=Cz(15xq=WYpuK|YM);9=d-n3r+?^>- zFqxvgf^9Vwo7#DL?-cvOv_dDlw&wCYwbV8F)Xh2Q`$)X!s5HATf!_ zA0C&0tLTaGPO3^{Sz3fIHCaCV#$MCiS{AwZXmO&4Ngzb)k#Gptx8;oxrWsB2^Wev} zVlyv$Fj_136~kuU)S{&kPYJBqb+Y=D$3i#{_^gFGJ&I<496Sx(lX2S{< zmBgoSD`j3#GLhBfSM79#t3w==)77i2-&fgK*Er6uaapa=g*@T0I?h+PCZoG5^nJ|> z4V4EyJ!$pybm&tlZK6owQ!B3(85Hy!>oeThr*g@(im$uPW)_vTQL?w6X;MSUv{$vy zt{Ygb8-=bLbgh|Kbwz_(%)hVO)YG5afml$Z{upTbdweSbUz z5Fp%lYy&V7#`i1jCjh>6MQQPt&qOz{gWy&TDrRJ%OhsxwC53#serd73VZHU~OIoVy z@m{T?j@41qAzN=>-zuXzAj2~q?jU?>+UI8x2QAbwdE79yk~pEzO8}4c3LVoB*?n6)kKdo6A;tLm|k8XCkN6aLmci#mtZ$#C@BeK3S65ezOqjV!{io zmTf<|q15TZSXidUTdCw#I5?seIqNW4oWTlZ@RA*-j$vG$S**apj09X2N^Fsg6%OM~ zJfLa?-^ohq{)37%jq-kA>6nIk*0c^a?pl%5j=mRT?*zLv!&ObM!NoaFb?T*Z1Rr9K zXUgc3yV|u4U*v@m%|Q3&ONrDTjZaQP<5hAg_6gBx_~Q63kh96_Zgd*?x>&cr`Y#nI^#uN&rc1i$}FF%-5Ynv7As12fAt_|H}#dtnJ$)x zQ}F6O{zu2<4{n_@W{+|EuyX2xxa4ZA;{E-+bG)zpl@rd1e0nAwry1a(XnmHB`}(za z)fC~QjYGHno%=VhYJD=kcP`cC;S=vd$$&(QXUDB7niwXLb z{V_OABhdr5k13}6;OLC>)dne5>W(odx<*wP+K-o(hZP==G(d4fdxlr8}&9>ZwI^qtY#R2iUJRBF(y8lArXmtFj@AC6|Vh zWuT50P-BGs>Z{8PhWh#*RvE24UTmNjc`EZjm5*NMq&gLxyZLrXcceanT^O2+mZ z_Son2RZkzEB~zJCV@q5tSDTMbbHKb+>?CMdmUm>hrVSQwBS>Y*Ik-W!G`u#K@-$u5 z4iLxGo6QCWH}*fPUH6%O%VWYvFoEwbR$@SHEds95#^_okY1G5&Z8v9i z)cp>Rst}Z;F~7KBif1?ttfR)ny7a>Bowsb}lqnqb4^ny=9RlOAwU&0<6))(@V~BCSG|ftlTVJ6Si?K?+JRGFL{y1m7`QXc3l5>U^S;Bi~531>S zitDCsou1%0r}O?6oRilxhKc4e+Rtj76S3&gkKAUs&%s$>=l!-RUh(|#IEOQ@Rkj(? z-RNhXwjIxef+NQ^t~=Ee6YTu-Zdr`W+3UTUDsX7ku+AZ5oyN4PYGh?Bi&bT6&T-bN z?+2oH(1SEU)q05jo^|nx=j|)vJ8IPvn%JV3{kvruksW&$QG5y&Y|#imMELBZmVUk# zot^M3F3GQhndoFth5IQ9B=oogCOk0HR87V_jq5Z!m@0`^l?1Pck1XqdacP)q`~q~L zsg(oKq=}iaeele0sNZ)mB+J)MD1vO9mWtBAegL6I!7ySaq9Gwa5PNrg_@K*6T1=om z-)TAj3RhNLbD?rAjfROGI};3)sxiBMro@3^+fr_E z_OE<(JFk;6FsO?uZF6$*=Z}}JjCiyg-mOC=zvX($c$KDDQF|{fkGZ+>fc`o6R`A~S zno2JlaZxW(YI5LYz@zWS zx@eIhe>DRwbC2Yn@4>vSavGbcvt{GEt6@O_mZD$4afN9{b0pOXm9*G`&=I@Z_x8SI*u?5LG zOeT``&VFM`czfn^8gk=<67<;60t7U>#VMOXCya7YwSWCfzl{Fk>kP+4<_|P#(L2_z zj0rWP$M8D?_emYTI4g06H}}fzXWR*Hi~FY0pOwSwra7ArIrwsLKJtJQ#2#vSJo5c& z`q__yVD~WM>Wd=lJGwxPr=EZK2k=bi*AKj*dl14mvaqY5l;F@6GT(-)qNyQ}8FCmY z&xiAX4H*-I^4p5Rb9pIIj>_J<7{)(i0-Z5ot&~Y1TxFJ`VWZdY_5p?n$sBsaK{&FT zI^jjD!M9YXdkLsv-iWjv^bD`WlxM`T86Q*z!p>00WK;g7L|+h0SH#6DyA|f zhHQo$xrIsEk}5#O$?nD#!_jw*4t6L^aV+IBe0YwcF_c zD2i~6P?C5MPL@J1!Do`P^K<|!x-3oe!!v1(IjPZzV_@E>i89s+}s?oJ3F}x z3OQx$kvCBh6dZYx0nT^G=%V@9%W@=iRx(vMDGQ(H)d8|L74ptcT-5=dmZ{glyRqYO zzI_4QWjvS@2s&y>zrh?Dqb=^?18J0f2W?wN9!XR7?GcI*1gPU9TG5#|RQkqMhRnOB z=%mXx#BFo77-&3ESH<2Ye+!@?qfdlvqYMHFZ_^3LB|`I978PR=TBhhrRywBh%;qOl zFOIyoA=C3&)}z%T)Hu(>`?PbTHyEMCRx|O(%|!4znAx>c#rQmf*Z zu?((^6{Bq2xu{iXCV@^2EeOP@hVpq(EG|}R?N!>ES{j3(LF1v|zG7hkWGw^T+vlaX z*dy;T(6l{A*4dOh>PBvfd4uCoQ_?7RWcf0CnWI>-Hxf-d!jhAM2)9l03#4ZFTyphu zX0#2wy{%LZ993rH5OFXrYd_B6y@NfYUwGUsb7FuZcBwLJF4fL6Av*qiwm|&#>MGOz zO1sn&uD*)W&g$Bw>Mx2F^^7%5GBud(qL#p#U8BnOZK>FugsA2kbQs)q99yw+Z5UZg z4(z#0AnMuR+$b;`8yHKp8O;?tMfnmX_3#$|X;bjN1)?7WF&^3*fsqv|#NCItkca zW3p&Zgg&`M;{7Jm3GC&a7E30H3t!+Wl0|2j&Rivs$)YQ4`deW|H9ha)@3vg7f^G$s z-?C+r@chDlE4K}sfh^x{qnJaG@UzL9(Om43wZ?OEOwe5WmBwR{f+ZIzS_LlUrXA7aMHhHGm4^>rWF5->rLidqcHb9j@ zP_Qo2P{!{XJc=cr+vDMhiUi*sBsT@J=7fAl(F9h64Knuve6bM%U@TBdGkB(D|8h6z zppEo#kawI$hr$d@S`1?A1u^o1ykw$&nb5PChn_L-TK0m-?cC1MZ7vOjNTJx5^6r2W z??B~xVUxGzb|8pJhz{WOc!YX%>5f}kuL1}v#|Ax~-$!fF2V#Sg&yae8`fCOI#`{UF zd;K}(TDzJ0o)mXkqHZbg^mEA#w60d@V+O>&3R`;i%V`d5%#c16MB(HHEp(vr%rs|S z4uHc3Ksr!M_JLC~q&oR1(e8GQl1_Cu!Q(EH?dEk8K_}a~Xqj<8CG+b^p(qc3^c=QTMN9;lOXm3nP z;#ck=azV@BA|sR1M-p8ZyCZ}M$t<`@Ze8@J&Y$(5t4 zmK&*+8?z7_hOQ3RGSm5YpK))P==eIZU^LSE=u+gD%F=DpT*Y>Qhm|)qrLM~X=F7>I zT||`NRE?(e@JpsjH(o3JWVTY%Ec5i55cTCQd32AwddcMw zOfZqViz4ZounkHM#yl5l|6EHmV}U8`#vCNxB^4uX%HII>-s$o0fV0eWbylJ+X9y7` zbOkeHm*H1xX574qHLj#aD^fw*GjMPXoBOO7I~l5nmcMTH`R=SXM{UdjTeCU!@b1FI zyBhSmg-Ed3oMqpvdDz4%C)sV_3w#r%5~d~*rV*ZUYq2=@@Z~(JpuLIdUeGL*&F(g& z@17~i{6qbY)?0Ihva?uA3678j*PaC`SLozI;d046Bli1_eK5D)1sVDK!{H@rN%xO= zO_zqvsLoHcWtXIa#`hH$)feZFZ!d&e#_NAuO#3EkRp8_hVsS-_I@8iROUokX8%n{Q zPW;S+EyQAi`&?&q5`T0>{%z46nS>3x6NhlTUvI?GNnq|4sYk9F}`O)(7~VSWx#!8(@ocIinaF&#rG8y>ni%}>ebp6%wyW8EKnK3D)a4C8P8S2)m6GeS{KSS5O$5n1EZ3% z3Lq|#?`v4rr{do$sLnpMG;iy1e=2kPsZ}FHmPq?=m1P{QMjut69#xa|IG?ipaV%JHIthCQ>Fp!GxLl|bv{=RI4lL|`GALUOPFSAR1rbil@%YXLDURMppA)Qo_(Bj^2fgX|mu z?VYgf;S48(${YdXc>?5I`*mPTS~DD83>#stFt~1-qNAx-@FH>(lgacqisiearYckJ=*l)q7d`s?Q1oI_Oc z$sz>#sc>B`a^vyjKhNAAEm=?Z{I|NhqaxJ$qaxI!BGmu47ooab*P@@xe#+rwk{qWg zNui%(W?L?%D5j|Jj50ShZKD@NIO*o3pGyzLQFTfK<%XL%Ad}-D;&ZJ!ybbh~h1293 z1D$I_FXZ$h*O{vR4+vu@Cp~rx4-Xf+8=@XX%jJI&&W8-_qDd~iG9-WWBAJyieZ`Y$ zP9admKijVVt<}0e+OGfBk~Oe@QRMw&|3btatY>h^WI^WNx(ohs>_1wwK3cOrTC+Z? zKK-AnPxa!0cIx^{A!U{Qk&{}~rq)x-*04jXx_^MaagAzH8^ zTZv4^=5)9l2YrRjx^PuL0+rIs5Xv~pWwH{j1NX_+&WRLMC6Xvh9Rp3%!@m$rGj+NF z`y48wC0`P(Czqb5ZA*&AfwZX`^r02Z;Nx(oKpl$J=2g@W`8b_hSs z2k~VhJAcD`@PGdEL%9ZNyAO2Xl{&0$_7(pfY_zLpG~I%eMp7? z8lgM_6t2F4^x2@IenB0HTQUXqwqE2L^koX3-u)mMwm1hgYiv@BDyLippCp()sE~gX zN38JGW8>(Ba8oQ1gQ*;#;VXmZ1aoO^Ju-d>ZvOkq_1*u^u3Z1^yWk&3{+SZhA0C|l zzsb&yN>GnVP>)Jb|5SqNeBFj3HOZO;XsGavckiPX%2}jq6Yi}@<>L& zKTrd5F!&4wpKVuQONYbAyO|mfpuDP?>J}ntS*3g2hWIfJTlJ{yo|8@@5ml2;GXJs!_45Sn zbpW|T4y9%Np-)@X-j9#b<4V(W*Y}lPJyyH>o9$q3Anwpwb_4sI_owX4;Jl?&rNVEK z|36rQddKbuoL@W{uG=D@UmyB!0hxbNj&#(3dene=WGOqcl>LV-WdNLa3l9PT4X6Wl zlWMVewgC&L(!`E9G#mJ$kyj?k1@%K-hE2s)IHE2B_+DCPNud?}Lvpi`&u3_% z3#N)CpwG=Y8ye|C=o>gnIqJsw#dCkSX#Qj=`%OjZEkawh^IX>|>~s-b8KzA_KnK5_ zEz5VW0{2RZx9|@*f5|uE#EwmkGzs|sh^1^|X`%CdYeSN-LA@u2lajuuLJOzvA=qVp z5zw^%^N#F)oZpX-{SmT1LiR_<{(nODdvT>4_qgw-jcIz!3Kh&h;~heeYqfLumT++c zR&Fq#NyC*Co9r8UE_9nDHrHFa)%o0VCT=!>ksO{8f;?dwVLMG(`iLkd85CFyI&f|D zQM_OZ2<#LOg3<&31v(5`HIV@9LCM2yK9YM}nak^ABLyUH)3uo9f}O+)xy?WF`-id4 z!)8>|7hfuHV(IY)@KOSV8>v7-jJv?K&r3?VWe?gV{#jyxb|I7d7^ZT$KO*&q$CCeg zC*gm0L;M|C@!v-FujhVfiD7`2c>i+E)o(_)|Fo9)2+bd%`6D!cgy#QKXdciK2aobQ zU^H7A*2nAk=HBb(F%lpNN4JM(&qFIt z$;QCn<=dfHaDCK>;_1ur&HP0m5=6Myo917t-xli6IFar3UeLcsLx>O`Jx9Gw>!X)m zWZXx@xq2dl6buBubpC56&GUM_RAgo+M*OA}E9lCH*}}n=@(&%5zqscaZ!p0f5K2)9 zRN7DXJZ`Q3IN^`L|BvL8|ELYsw8dhT?>shKEw2GHyLYc;<*dQnBPD_ck`9{eHx=EyoSoyawhXgL4&=Gf0t)Xq9s zrQqUHJ(Zy3G*GF#R4tV*?SVqhJ2Xf=g|UGk^`43>FB(mO{!@Gt8jVcvMQ~{}E&ZrK z&022~J;*ba|Ji?TD{IlU;Yi;QfPbQ#BoFph%TssjOPo>d8Sqa^H!#8 z9}AsUvzpebv261o3Cl0766vjwU9tpxqaC?~(t|LUAPI_xx8!~Bv(?2H$j=1gZwaLp zS)gmlR;%W&z>iD2<8|E1quV^mB|@1v0)yIBm6{V@h-*}{`7qI3&Xctjh(Yh+UlW-E}os@q-oc zsvyM43v#X(0`xjSsSECu^_&_ZRnPOu)aX`VCzJMq*oZ+4#UQe5)Zc<2vY=l6-Jbpg zRyj||Ru_YcOsy3D4m$h}oVkxot`BX|w-t1oUI=;)1U*N%O+kH!RFij;{IEKLn*z$G z*$>o6Y$xO)cS$WlWY#)lZm9kh^uSGWkQ=JYIM7DJf|V zZtRhYe;ri$dcq=Q03tSI6x^*WN29|$1Zx}w;f738hfeO2Ds-b1D2C-Z^DTmfML$Un zCEUD!>EwP5jl0gkrQi|&Zj{>&>6KuuN+uI$)TndH$WR*0nFw=lU*(iI!NfwvS6Y~WH zyq#H2*>Aik~(f~I|^MTwIWP9%#1E_lFbWEEoyqj z=1*z+=rP zs}Uo2UojIG#M`qR?+T@rgA0hr9-?*_;iJS|FbR=Dn0xGHQMcR-CbegcB&0MLlNmV3 zcn0&*0;BeF#yDZ-nAq$Vb*ZF!i(SAJAIlu<#a;0O%egj*#?u9JF0=^p+BtkUaWat9 zxIyaVt2xBp41{F$dvSpHOzk;*Hhoh#!;bc3raQ`D=y=gTvARI}pH`9s$} zqt$konfamQ)fv*674fx~8{>?olUvjz(3~~pX$)U+BI1cP$TY^+!zH2PwJ)8N=Q;np z67k3d0~i3mGFmV0!9ZP!;4y!PYfK?8u}<)6A^Oe+i81HQdKKxb4XU+&TtS`wD!%EV zvB_LR2+!T*q+yYSVsN3ZMBM#(1r@DxQ|J>hMh&`T_xrnR?|E|H>!NLqRT4*WZD9nx zSC}M{lvszo+ES<4)yxm|25{uq8T-%O1Mv?oM!xBGdTe`r0Gyv!ZfCi#c zsLSgK`PYV@zq^1c_cs?%MUGVOKNk!6?E>o0byI3#tBGt8i8LkIJ=co2L4!56tD`UW zHQ6zHe5kYdITjnO-&A<$7AuW56AY1!H#C15Gi*KBTOIS-Pi7-QyKl(w^7D*QJAg5+ zOgYW8sTn@!W9Sk)ChSz8NmD*x@^K>X-X>nPAm8qrhd71C6KyZ-g45sC30&&g9nQD7 z&36{Jdrd6A3c;bhtJV0XpdvDgi8a0DB~;13(5==Kt|CW%e{{k{y+wg z6#cei9w!ELj*h(--W*OL%UsSFr(MpA6|Af|52XVhOQv!v=aN`B9zKqYPsZ2SeH_fN zCNrLHT~hub)BdvgvEAb~A)_pUpeKnbr5UmxbKk-|O{rWEU?U_(5B-#xAG43TsXFRt z6Q?c^z$P;!9QDqZy>+&%INLL7x#Y}rZ?}y7RC2GptfXSEqN=$Knp;DCQ&?K*2e;&? zZuwAQrY%gRclkHlKud(H)!7RrHi=aKW7hSFqIIUl3FmCC8Yr7h^mHu{RA9IRD zr@k^@&sjxNrV zabg!`H#@GiabhN+{eu&!4))=Q5vuR@?wXRc)$Zz3_zPcW)D2=BXCJ)$CIIjx5qMFI z)b`h!GuHYRV{Xb3>8xpxR_*yTrmA|K&9M~2YsG!u;p~OKfbZGbyNa9MmpzMj?Z}vD z@E!%dc4U|2XnR1U8gqRjB|dPSIc)t< zWudoH&|h7g;q8^$TWQ+UGKoyn%u|NwAra=60Zz}-VE@Hj)fpCIwoMFT zOU7aTm}6Xgtm2rTM?$A`3nJ@z8p4QAcw(YiAUufb{YhXnR3hgZq17_BN4yN(_E54; ze&2JL(sRKet@a^8@@r3sZj}PZyq!`EI8U+^|2UJe&^&0JQxl^T*}$A3Z@?%|Y%!VA z)^yLg2?=@#8TXJpVMH(?S91qg;e+bsx0!$ejV^s!|c{q1}==yjKM0l zlG)@$abAnEIDvRmXh&_A>^vN6d{{QYFN{6)lKVB`R~Xh&HJ0 zAZfNko$U-YFnqX5B+$WS?Uo`7Ru)d8pDrG;EyWo&4`6IBGUfC-evhprOy3|*&;3w| zvh~R0W5au5wO6U3ug~vlzGNdtvNFS?mzPNC&#P+ZeOMtaQvF>ws&&Dn<0i@VFMIfv z*+W@WHXzGqZ6w^&e0<{@_`YO@Wy2qtE-yFWjU|tnJtvsVOd;Coz@9h6M*$RQfpSy2 z%yGlKPP7STuj=R*kum4qs&Hv@+9OQ& zofssLr?EF&-S)Olhw2%Q6gJzw$Q>LY3tzG?_3M9HHLT)nZDjXfbJ%`@Ld;wa#ZM`HBQj_2w6KS zX;H%RuX^zH>P@CDFS{A{Vv=sBs?zfSQ2(k8NlXw9HN+Go zBYA{~jMDDZ_C9Z^N78`!4&>(pAK~%fK0ht~-f?1FFRa*-J0Ln6v|^oMgCa4sUWInC5~dLq)I9>MyIjvd^^`P_K7L{>39(~w&*2FW4StH=^F+Ts0CY|^LTWP} z{}dqM&I=19Z=t<;2;X=RECBOoP=Go++l?lAag;$v2i^DSKSQ@7St)}XSji-jD+fu zg^$uh;0obQ4FNS%5W6zYM63|dMu0Vl!dRE|^~aDxb(_8faK;p=>B|rqg-|zPq}_XK z=0vCBDV@-C4(#(sPUBo!H%ha`+5qw*(>>4xEnwJ*k8A7lJ1N=rr-@^b4`#4dCQ% z@H>SEzgkU%TZW=Nyg>ulfDUh1=K}LPvUtoM2ps|#@9q1Yj2n&o8L$WJ$MftoJ*a<& z6K5nIunrNNLKAR~KhR|)R)hwtqf=)v12Ys?cKCbh;;eZC1uSB~%*fGWqccgG=F`7a#?8iTlr=N$MrzVuiJA2g|i4g9kCOkFiyDnFPpEWL@n%Oh9Q8 zDaL$O{N*W1n%L^QDdxbGXFPUh7YwNLkNB>McV|+tC8Ie`LHffQPob&U#n>-&xlgP@ zob?cL-l^Pffw7=;#ToE(iS+RNM6nGQ-^lc2jj%ZKjKmAgM*x79NCt~*2FH#yyEi8) z`6}tj^dU2v`~G?0(NR8=WFz%Menw3sv=9ua9DZ=88~vUMRIOaOZsdWO1k_+EOJN>s z(-j?1hkiRRo9#HMv6bX@H~KI+g~&y=Xnod9M$U9=&eCGeaCz1`7*p&9k$XA>y$K-2K+v-|sh?JbxaUi*NQEnDE>UnfWn;y<`zHS{DPO;yEZY4^ly5B#{lA z&V!C(%C6_(=tHseF#v)2`Yw5>gN;=B`G`w0S7-qyJvM_<0c&Q#5HN#%FT^?!i)99D z@FE)(UAcS;g)<99+X}^&3h!PPN>CI@K@?a-i>_R-Wo?UykF%7PiqtNP)G3Nd6N?Oj zupUc5A3GOoQo#8s1o_&EO+@)ndEAs;BwQr@@g7AuI0;jr1ZObJ2I8v^0q7|)+@dJ; zRw6<*i#%B>HT5hFpePHbD7_FW3->8QW|l?S`bylimc?C`#fu{Ela(h|utu1qr9et_ zOfWN+%F&syWB1An+8FuvvR8CUZ5gnQL@TT$i>sE1QPUm_Smnc>q8!_b>f!QQTl%cF z%2$__U(7JLw}VXIU}%|Eb^DMEXI70bRV7$gQm|A_imGc0SI_xWFF=%EW>gQH7Rz~p zgfdFjY#ki;gv>>2Rx)e$+GR;J#`=pRVWOaP-j2!3R?QvV`6CRz@02Uq6@lQ!GRkzm{u-(LYzpK^4Eg ztk352p;2k6+vr0Qau|=d)W08! zXHd>nX>HgZOXs&+8*gp=_&QHIn&wwAMwwRS&sexWU-zpRqxo>T#ch9WqW$IPcipI1 zsMgVP{C+rzVj%f?n1Gc#40n2K*d5kt;U1B{n~CUj)S`XnGvP>Vdlz%hH+FDYn+nfIBc2? zpR;?hU|D(CyyCh4GZu1uYS~J)`_xL^D;eGfn9^WtbK=s(?)YPi`SYvmZ~LFS0N9*I z-58|yM?D~xDxR7dPL(+{K+HznLv&oC-hM-B1Ypo@y7zeKxd?h7e@~$Oml4)dRF?(k zOO;#v<1N<@1jdF@#jm@q!6%a`s{DAbC9t`^PRWoue4SQcss1{n(k`R=MqQrkboRkR zhts#ZR|Y*!TXrr5tDs_`|8lseThqvz@AKZo zGg-g0!@+mNn6JE8=|UwGNF2b^Rh{nt|P{O$8s6YC69C!rI_5e{WQ?3JPl+E51>_ zCsvKw;y5U*bx?iI|AO_Mc(xCyX;0fhGvzzZU(eTmVZA>X{C8L%_2S+>IO>Bw7o1>+ zJ+wa_cn*)|eTWWF-x$=U=7E9`4+SNLm}Z?a+35r0r4CPfm3Lb^w#v(M;J_1-sLFA2Vc#ovuc!azx+Dybo0HwHRk5W_1Wu1ynE|t z7lG?tK#HS4mHl8-An>2Bj8GT@h=A<>UY~{KCi?%W&j{(@CZ?bI%&JxKyFQzfR5AUn zKIguSWB;ko{|U&BL%g0RsIl#DAm2`5!kOjP4Myp+p&Kcy9+Lb&*5})w1b>cg|5l$p zO8jg7(C5DB8`}G?eim1~sdRdUb$)r~_OT`6-|2JIX#(|6eMZUfaK>)?0@5yAOonDLPco*>h2`iv@OM-^B7&p=LFQQ-%op>s9{w+N}u8fv{z5ipA2 z`nF(^=J0JXhBpKS^0JWPGF1*drrY^Ze-wf#6gtT6q5Pt0lmOw5kRmJnil@Qq=nn0r z?19>PODADSOJOIseEIes-vJH*G3myM$mkVHoJnL&owrK$08GHU#aRKOyX6G#Pxgzu zjMbUYBVo84P3?|%qgN~8*ee{$MT6v^jk zO#hZ-nHJ0OzmOdD(`hS)=&SvMsH%aEO;@56Nk^G0#z7;xp@L!$w-;;b>weJs-(@;+PkgrcgvI0beTM`mK z7$d+sW~~s;KmS)r&I-?$D8)E&odyRXfVidEy-gA|fTa513onV&OJ3me(Qmg_*K4cgKJo%XGRCDnG15fR8x2&}0aN03{YOT4-*)6r zM)?1cd>i4k2D&k9{Lp^U=r;QNZ>jrl@-3ZS)_q|~$p^gKfu2t}zqxZ1>OTPV`x!e>z%h~Ku{G47Z%G(IzK>|Fs2v!Z}syhb-(4?&vL4N(a-GZ&a9ug z_07&og1}fjS>%)gp|-+|$}b}v0a8Kb+Z?@c9r>n_xymYFAcx-Vrc*}x(8H-YgEaN# zMM!=pn8}1d0Jx0V8rv*!3kL&t&b>Vb4=_jWDREoUlXOc7#2_Yi{?33>1`J|q;Tzd} zN-2YfL$kFmxQ!JCL=oISf%3pDnm`oGd~K3dvna!?Q)3L}C>Z+(b!VTheo=QsQ<4Zd z&hARAmMA`|5d##g-yLNg9;@kK$$fy*&#LW-KO12hmt#!JKNnv7Z&LmJ3i|&hRn!3L z|8GfE!^!N7+5Nuz+1eBN>ZaRk-e;>*@3NeGBi9KIxsZrz`cLYtbhsAal89l?Q8ui4 zsRsTeVPhzZW2os=dM@pj5||oyQ|Tk-qW+~so)U#_hcdX(V9+3oMI=W}JY3~u_My|i7+jxMUm)kX$-({{)#>+tTpbPFx@X7z8kJPf z%{}`F#JmY)e*84J33Hfz7=Jp1@xKxEUwaJxH=_Q3Jfgll6!I$tU4N6UnN{yyAr0G< z!=`&ss5!+fuvs1db7%z0M@OS+S;y7}N`Y%sq~bRPxF=gAN0d{mWLd+6aZw!>&M3P2M}%v zfdT0*O7Hxze_(-lFd9eRBbUX&Eb$N3Jl~~A(+I!IaN>r3$c^B>+$lm)7XIyT9f? zzb3iYW$LDVp+I7q2X30mvRNE%cl$FmP+wZ9B*SpQO=YNiuLMg<6-lp0ZacBp=xGs3 zqy%f%@Nq@DK_;tB?!&2BlkFE!3%F`k#m%hG??T`6`0bu>^z&lBSa9%lsa4BlJUI#j z*`kuDf|CPrNh)`584_$evD>d`k*IzP^`(`Z(_p~Xh1_yM#4I%zzuaAHb=t`$BA6OK zlhOIxL2%RSPw*CHouO4sk6j;Czpa@~hR5{xRAdF^=f}WJRcio%U`p2XNd5W72w2xwwz^SC(02+2y1VG_mpYS1*A2jXsK^Abt& zK9*KQjzZ=EF=md0zPADt$#x;j7{?P_N^7nlv^!0O_c+|p4U6KGLFS=oIg_r6WBGF} z5lP|*bL+(|WBpy#xim#_AHDQ6XL$dk?EAo}DJrul?}ccBa>c0(HtJpI^Vw~*5)G%g zfqAbsRz-Dg_r0b~`8*@fGPOHOBI;R+Xrl?G!!UMeDQPTOx%{t>v8Bxw34tOBH{=;4 zc@)K&b_GC1>r|qdxplkB5?l_iO z*@j`@C^t6F16uv7FCNOpa7{7w`X6x^j}*}v`t8~P?$?>&w%;$+`)0Sj)cc{wmE?oA zJyg^EpbazgE^{K>?m@z0oG+46s1H#R`Y}Bm>S9?KJo29`sdUl+D;?S6Y9E^hUt8fB z8O~@cGvc(c5^Jf<6KJS@)6l*DAWYS!Zx~gHPAg!f6zqKGmWIl^Zoi3Ec+_U#aARd=-%{ju9PfM|e<|H1{-{f9-do-+X|_pv&@H)6a)p|o#5>?=?ejC*(>Rk;wGY`Rif-8t z9ZyDl(9~tV*jo3Z4lYPb}bB!jIJIn4tLhMR$h)d3{^A zY5K_JU^Da}bg&dMM4gApJIKVUMqVn;)Di|o;q|dV7Y1F%g%W(0Y~@$`v6YbZbvRBF1IKnEIx0(poVhQtpNvgLOBnTh=N1cx2t6nzp=Xla zYlP@AoASNUjiT~w0TSr~*|ZMB7$Ek{s0GDf5+=E&mX9!$r+O-J7`85->q3hW`GKTY z*RnEmS0(XU<>|vh3)k5ZdcG)`&}}iWHLh@rwO!?QH6xOju0YjS z^cg|4A(#`7qCALQL*T2568%%Ys-T!y+04)_6(N3ln>E)cSkJbkimCdv3Xvjl7~vg; zM$N>dB!&njYj5@DyU|p~F{-_oKrp;Dsbr^sVg$3OAZc14krTNI$tPFTR3`#UJ9B;6 z{g&4%U*R~w>n5>h*INcpKHenjkXTb_=~E5&wDhu+MQSH}nTdr4XHLUx6syc*I7$?< zNy`(AJx1p{FSScG2tga(4-=4lVcBewJE*OfjjGg z!{&4l(OGj#*rCafa)Z1kAu)1$<;V49+7}y5h8+`R>QCW@g@`l;TM(DIhvoxh2Oqt^ z_Xd?~)&uV-yGMaIAL~7>;Y#Yg1j($Cu1pV>gF5iyzB@!~G54%(iw)nNf5FgtM3HmI zTnr~-tJ?;4K$n>Zf-fcI++s0JUk)DA4HQp#$5N_B#2>V0XN4Kwj**rx;_0H+sJb2< z+oZVlsYx-z5m`mCN#?6Ku&GfT`&LRG@W6}FX?r*UR`9;@F-RnDy&`Q-)B-N_gn`IY z(<_aigt-0XX#d7T8Ig8!u$yJS+LDu+YoE5ZJ^jrnsfH|Hq9jxsKt8?!l?2VGKX%05Zor_uU(<)DKYADjCUPI++9}h&WjW29*&?&iXjn0xM7_wv7 zFq3XEh5kSmE2HCx;4p?}{GjB;O`j>;!r|pgR`fY^FKj{cLEHkHN$VV%Zhobod(T^? zBzlk}{qk|XHB3NT=waz2+Wtj?{12&2^wl!YweX6~X_}N6mywq=rN~wBO9{;#Xwdts^)D{B)t4%cn(Yk`SS*vgKF8ZJ zZz(nm=!7B*jcfyeD$H|ppCvJJrF_i|AJyM5dmBi7GE(v(Qeu>QQRRt8vOSuGAoz@Y zx$g&QKfV4qGzSt;dzI)Y8o9`Oc_u^QxDnAGv@N1>p{Np9P)tA6BXhrM@U|3bIL~($ zcRE5${w9yjvQ47S^VY1_0pE=4{0Z%!4M+sjP`fJk*L>IX)R*)pi;whhmN9$3^_MsC|^XAt7_||yyeYjPag)tj~IwBw(_T&fM#1M1G)4xF<%!lPpuOx!W|! z0DmPJPwuV29YJWa6!tAR@uQP786q-rjC8_QuOO^r zYWg1gNfz2uQX33j8<>k5>^Ni~!4u2H`?f2tMVQmeX5y^8pvbpAckBHKHoWxGsp#gP zQs%ot(+LH=p^ozMKr)8j(h$HAu1E`v&KoXAc0WKOOg=x(b!KCP-6OXm)obuUSwworTmk z60_bdsxDHvNy-Tcl?)Aq!vgZvi40G101`Na3Nlib=3AbSq+wVVPejo<)NRKvHIFcz zIY{;cj)O}`k1$QRF7(wYg$xiPM*o&pL`3rbDK>vi;DtHh{%_^CmC!=3Hf^L5qan zbB`R>0Eb(H2U=jIN3o9{_{)TP(SF4hODDNP2B*ZwJHVdZ>%nG!XyUXTZmZEjjPO>b=tcVEJkU5vVq!DgVVBTc%7INUR<7Bf2qqH;$UsNS1O#Sf z=Hmk5aYrSh^Y!2wWlX#+rm6FY+!0tac{U~+mn)m7nq=tf3utK>Va`H~Ryl2Zcf=qN zDZdfMlL9Zj5zOfp%t`46&x^o#N1_cRaqf>~)9_}yZ$@B{GdO`G6q_?ZJ+fmL(48mH z-4UWsBg#(}$rs6Cm=rV@+Rp{Iu$?2J-)&%~izM~xNfB=n&Vmw-$YJhClC5%>T902+ z$#Z|KplNRy?j9j=TRu?&HMT7$jDqb*0aQAW#)@XjR|Z4N%(`<)_<2|MmXbOqaSB^I0 zgZxBBee2xvEOto<25&xg5TqIaC{rg=*~Kx@hkmevs31!M+hF(*fU=TIBcK>y%}Gwd zV1LsRzDZZ=S(IqR4$ZPj$wVv1bSVYYLF6TI+~=N*nB)_g`Ud$F8&-hSL}|pMpxH{W zOdn`B8%(to<{wo?z#E6bmr1e5XtPUL-KLL08oRCsbA%98M#1k@5H?x)MktkZBp09- z$E&8uS5t~}da#9*sD>_Kg@M6vjnZxtGRDW1JiV$PmQ<~x=ygVkVk65j>kF5C$imp6 z0zMgrqR?Q)oFpG8i+)rLwD3x#)*%7nSwYeS#lbd!O)O;)*nm1D;|@zxJ_m8c%? zG3Kj-OY`a}_G?&!)n{g~&r`CK+e+wq!Nn#}4M|SXlDQxa$rXnb$cpdDlPa)yk?8jTpANfKt zACwf2tugk3pa-PH_!yEvS5l!KP!GU+!P0@A&`MYj>AJa;o#3eZt^~DX zYbf?58Slm&sIRgDJs(2gbVf0@`$DxqE~~n)NQ2A)I54NNv~Ws>E<0$U`U}EioFN=o z83Lj}S5d&^e9R;0MU9erdt3!-IT{IBa8hF>9j(n%|2d6Kiku zw1YE?^=(S_2)jbE5S;*aD4`w{-rAw`0p!$POm8qKih813-@v0X5E5ka2Hl)@sa3eB zF&jESSwG0M@(Nv}6(CWA?b3>EH83RAOFErVzYkRvgNff%(J~%@yeNGMc}oJu2SL1* zv}mu0W-?xBcj;o3d#FInv*@==+cL21NF*h|Bs$Ry39(tjP#=Z3qY)3WflN9t+zxo5 zy;ZUwJ5(=?A%CE#tUT#X#Yhx%?#@U%E=hoIGzD5xM@t{R9~OEz@ZT;n4=*z2iowl-)k4mzHegiE5GI) zwh3#r*CcdP=Lb;m+-v%vDMH}*GDEMdt&V>-qLN<=l2z0vr+V1{c3 zbUXG9W>CLer&7)o7`Opeo|r|ipH=)0gQ&jNils_3fob9ao*jX{z#zTZZq zvijb+vAn?AMofOl?w%);$Wua-Kjt69c-LQetPXd)JB#3W3Ew5TRQ-+T7WNBOy6C(` zE+CFf%$xl&+-{y3O1kQt)muria^48A_YDI2&VlG99whMyI=wnnemJLHxTYH1&FR2d zxC*l?UrE6Rl=`Q&Ouz`n3VJ)sS?VXYrRHrUv7HgnF;%HVC|Vg+@t2L)nNqn?=K0}ydUQ#_TG{$wm`Sq=%fpQFhRIia_>VZ+tA)(H#K zu8~|VN+xEOVRG}M`>nwOA zW96$f5*z?M%lS-Yx~E@IdWHX7qpBAGJped^%_a(hB(Sg~H8T;Pw;7MYT~wc`aC@BD zgX4~gB)6Z9H_A>N9o>*)F*urc=HU)`o&YtzoMVm7AAofyVdsv|nrf<`?{0~`R>mO! zG+cwTd)^;`G1u|d)^gr4YaBxBI}=px)C&l-F>xl8+%8Eurr308~vF!yn1 zraOzFW*x!}-8O>jI;|NzgMau$Sm!_V=<^X1tVSIQa-1SJ(+@z((_O9Mya|BH60m5{ zFxcGd3z9eqyD!C=i)(lfCVUSznvP3&kIW4@xwF}&ouUwm_py@Lp+VmXW z`34M2^B!FODU`(a2;b$5CE=oT{VHvG$$%HH?lW}9@e-Essp%QjJKYPxTJlac>aHW4 z{HL6s{TOc4pk_C<`vSCBAQy1v)I=H-2cQOR{S5m+TG2Ujnd$QV{_JPK(Xijf*NcFQ zG}vlK7kL%|6o7$GbslYUD+Gg>`$4MnhBOk!q*kOmUC^sRD(JYfQ2wS{6GPgSQEz5T zF_}$KNo#Rtdn|0ka4=XQT4&t2(c}}6^@(Le7Qm0`L=Z{`h!9JWvKMmL)hdIF%NAcI z>uD!VWP)+SPapG}prePO1rF`&HL*EBRI`Nio0?r-r%Ex-e_D;0(cRoWC!r??B%b4| zaU|8vo75OmTV|)mNp#0Dz`L`)(uD#DLzHN&Q}c>sGu3U{h$;oxC(Ah;X>=cWD0S98 zzU41wfVkm*jE<)u7ACONRNcINX+*{xZ#7wO4Pkkb+}gYFy7>M>(Frygh-)?BtkQQn zqM#rwZa&$iudbgH{V&WM_)Hz!d)h`nv%9$XL>G%CEOkA9qi~Idqef>%LxDPP0Q?F` zuj@tUt=6Q}Ck5z)5^8*$f(}Bj)Ei7BO5_ zTTju_WXFFyo9KjT-u3F3JEEznf=N?d%uNk7yfguz?Ik<2g(mL~+z+b|vzdtU(_m(W zVC&zMu-`s)Pp&0?PPrbacq$`Hq%R|aD;`(jj+|;wMk6kGOoG`xo7iT%t-*koUl{kX z*RPB;=!<;}h7M+1a_U1hO?={6*T)L1k8!m@+EqG6O7$FJ9?gvUXu>=-b{BR?)BXr;qRv6gz`>~$)m z#S>t-@l!$_Z&Q7J8(AXNuzgZ`bG)#$(P&p`kCa$uV~}aurlGe5;2W@KE(rq~X!P`! z1CB0l>Gig_ECaiCUdDZ+3dzKaFJ)GF#QGSu8ho2y-XuBdu#e?sd1lrr3qaYdr=n%_iRsA+cYit`_TzbIzC zU%S{|fR3obs{VM8Vq9+@<{O_!`p9*+^s3k-ii#q4Hu9@kZiXFpVz@`U;r*~HO#s!? zr&cFxGw!kDT&P5nx=Cc#-PfUpSgq7zJU^4bB(I@QZOoowrI#$)v8M-xA`}tFH0|@29A!UQ)ESR{cPUQGO1Cu_acm3OVBZ5+EJNQc zhfGg*Y)63~WJCM<2t8GBbTH@%RR(U5U=)?l#~5}PjP~M-r1TehR5oE$>lFXb7coZI2TlOw}iiO;JX6{s27XMu}LAprv1$e;oI5W@r> z3*(W2pSj(tqA;;pq$Bf^)Viq@=pYH1kYrqXGk}#idXZRgkyOs>1k2{l-HC`<3E(#| zoV)K`>Eg7D1C9uL(+rOlsS(z)%9}ixI+%rQIViv-Yo1joW;ezjV4C#&j#?2(-;&DPO_b8XOcj01{wN?y z$&30$ImX-QZ~bW+JF)H+s)lk(w8P?M-{Nu%icPgN)4Tk?so?{Ii1k)8xvqCrb)~{U z2ulVKLbEW{X}i+hHB$lguwGGenU3Q5-jreNi(2bl_K~{LAzli_n~LaSPDqb!(?{!R z`pGxL7M*5qMmKRPpWz*1+NpS1-TcazRKFg;Y*s(X z2(v$2{+iUVff>jF*EfE*%imC&f0(qcUZYwCti=$Kb=pvdYyTh(tK`X&Vm1Zy9)Ag{ z@#dzuBR~3#CKAv290)LD;e0rohfeQ(E2kN-w3t!R1N`ugS(pw)1d`HAO2@(xJwn$R zxA9MSU(BrN*QXjvPnK_T3&7cfsz+W|cGK?-bE?WCARz`ky+IWFh!hy!ca$2{)B$lw z@dVS+F4Bw37A85}dCZOzN*J;u0S@K`iwC7w>&H!jb}t|EoCy;JgV1911~7%5ffAy^ zhP|-O=F0~&5cwe4+}krzoG+6{LhCv5uy1c$Wx&G}W7Xa9{L^VrcSMTBXXvi0Y}7x0 zenZ?7N&>52Rbz7JQ_>x-arQA735IvpyD2 z{OhX^^FyAn+zg|lH_aSx{Fs`zKAatxzw@Hg2%#yicd&DacH%{b=aF_zFj?Vj5ww)3 zHE6#-bo-crvt%jl&_ww;O@(j7mXV#lBgTo8%ZJWZAoL~?%@`g+d#xzNWa>d22Vb?^ z$M*s>(|CW6*T9|_Y}hdNVp4_~-81Bi;5n1PcX3Hr#)Q_WwHiq|&RXBnF|1h-*3)t^ z+J9(VH-CvQ=(sZBc+uTxw)UTkmZZcXJ_%xsqv$J)(CY zQcal2Xh6Qu?a0D@LeuX+xvMB* z&wQe_!E$E>o-uSqS$7CZ<$Shl9pVUPS_dM^if+!(1BKixm&Q_K>~PvQMXQkA?IwMZ>p@Ia zrK0D-qJbfRn1TkkWJPwtp!8nR))1+!NIq{QcbybRHVB~`tUNBGf+4LIBh9)AWMM=O zpL7H*FtDmTlZw9^sW9+W7f9_atLrCA%?hN;8=!**8;r{uuE-iu1q)pd&;x=^iev>j z2bp-}EX3p83wRdIl z2$hBOGsq^r=NEU8Y0@1kagkD@LUIEJZ0&K}7(wm_VxEl1r*~wRcLrf#S+6HzAu-4z z2I(eibOC*KtLc|VS3^A}3X#qVH+O;I6@4T@esHn=XayOrI|}kn9r^DKs-A^{cBF9x zK#Dn;ZSFCO9uMTBia-SwieWYlEa-siKE)KoFcKjDjt#xQFEKG2KiRGF?LJ2Vr_zYX zXl$U;bNhq>3?smUG6oiW7?E6QE=xCI#KJm<=vDny>T$oHzK2;q$PJQy!ikX*=;9?Dip z&&#!JP#zV4KSR{wXAT1vRI>MDKiKvv`4zq_aQMeKggrP9~_ff-z(jiqO4H2l2lFxyvFb;@8LkdrXnZR)}Sd?HE36- zQH|vn4yp1J8e>EeGtnNhPdHyR_0EL=BFkngcLJJX}(;UK;?_qjJWd2=$Fa3d`w7%@yTZQ z9`(cuafgERHi>tVY5UP7RB(-^2KWFi6?0!g2cFl9^_~Xs?KtwOQg01bFkL#SFjqteQW5_AShd7 zm=dFqJgbhb6u_=yzB*>H4Mwa+nkc;LNiSNrh&$%g@)pA(abW+rtFv*WwJ|l*MK%A? zq|GW}&L%4Qp2zDass*%h`Ih}SPDJpnS)gs?m z9Br}JE!lHnBDyzGoeRwXofvcZ0XLQkD;`~U<~StOAOmmxhTXo5j41xIP3 zkvUy2PGK>uE;yJNUnqVk(Z7;`jN8knHR4duaPPkSh(w9)!fc>MX}z9mVR?QmW3iFG zHj{oFncCAA`W?>twd+erkdDQueswh{`|(g5^>P@R!Tl)x`@!=(wm^oXrB|5?ONI-c zHo*+%i>XVCiFpP?P0Owc%RZY1$5jt~HG6amG^28sxJ3F``Iclx4Vq55dU6ck1+P$! z>LJTkb`gfCmeZ72(Buoe&hIOwJ%-n0t7|SgZ*r999E=uZ4PM6@waKgo)vaO|=q;_T zhAC(mx<0&F+XlZCENWz`ufQ|j>a0$E0Gi+em#D6pofzF;8cz&at8p-H2aU`>Fx(d` z>PT5>CR_WIa_5-((TVt@ud441dyG#V9_yX*c_?N4c(()4vSknLgAs0XKti*G$3!XV;R~ z+9e*|ZxbT8Yq}q%LnKFsCkH1s-iTCRPKE1{k;IYQ#ksCFrLfUsXf-XHTBafaQ3C=I za~p1Nf)EmBOhTKPxWV+_@D==XL2`;TH7rMu&BEHvh_@S>IE^@enDJmyu;82XahvmV zYth~{&lWT`A5k>Bt+RQXd6OsCOo)W1f1Ll?-&|bCTxDIzB5`9j&^*lBY;bBpw1!3M zu7&iSU@^5V!B^(8Sb_?1(d=@HUXRO|0dEgS~-3$Y$efm6uYzJC)wF*J}4Yy2C!q6n>gq)Sv2VW71ys5_C8b0Kq*Y2#Ky=RF-ut`vetysS#aZi| z^B1sSv99~RuFrM9U)kK^o&|OFc##kVOf-hvU6=UR56)e0D74+~mOXt?k4kHyKRZa3 z)MdAbR5DiN*T(aLBnU-oP;IB$~$vQ@im>9 z$3$NnbADtB9>D|zB_{X5atatUSY7NI((3-kobSYwcYC_{VUA#_wO71#m1Gz1yEOqo z8_6M>o7=yr?&G_;+W~dIc6Y=dS}3C*>3(|Csf~w#gZh|g3;_tv2immO@GRYVECf>&lOTR9w+q3@1|}L~ z>3y{5HYX-5@q{xUQ7uPYQk=Iv`y!jKfl4N>O@*%H=1U;}7 z*Jj(2#2&>g!tLNHYO?>F(~_MD(CAiDsgx%#Os(AnEJf9kQGd0QqZRxHua6@Lb-w!~ z!IS5%cO?y(YqPwRHgfw$#wTqlmrs1L<87ZZvNhb(YW%IeUJ`M(1?kese+i5x;^UF! zPJDitEL`2-C_lf`oC~8cdU0b*jYFV@DIjx*43fhy@5p-7tqdfm?$nIG>@%H2L@Uy$ zx)GyzFpQEJId&JD>mV^m&-%PHE_wT<+ABG+G>;jTcXwx~o?J{YPcsh^!F;%btsL(F zsA9ZO?ExyMmJVs2YQ_C)?!2>02|6jWkYbsnd9A*U55DFkpPSmXKje}yhOMI0RT%Ky z@LN0^E!13#y+75SYn`14vs<{5DtZ}bt3R4wtW zuZOd|WZI7XWK*xGGJF7?lFq9;f6>HJ;+LB9y{=yQ8l~u%>KE8n9 z?q{r*k!@dFB3735$W-W@o?ILv9tNr;p28jOdY*CR{!Gc_=6$61eU1_btsENra+Gxx zpH1x(nkDKY4om9m8)C^<)wHgMAxc5+Sx@92 zf2j^P_83q@p1e|Ogc;JPX@9coZ!Z6_DwRb2DgSgTUJ<*TuK-#$=7<#Vs$_=OeXq_% za+5m7>a|$8F>}CBbpG%(hYCq{u_cHl7+0|3z4U0BK$IR|ehr89ECJb_qYbK`S4f?> zLUkWzHm8HDT`k2in5?3J<_GHR3}Hf;DfqNp7Q(F^=`S8^oKk={YI#@sJjISV{=Q)6 zM;Z#rlwie#GPq!>uvs<*|ASfPH~^91E#@g*krKtN%@H`WmtMV7S~c0_) z%^6qJ-km(!(x}fkKCC9jyVFr)Rx%QF(i_RBhBqlppqGh`7?b0w470uUDXFb&^AU39 zrUvvxaa}Y*yC`SoJW)>RjEP*b@F!eJxmx_A?si7!JJ3V6#%R4DJeuS)5=(0AvDt(J z7JDybbijDgorr&HSHi1G-=4Rif2WD|ECBo@}EpXy5~iMy?p%rc9=v@#T^`D-*Oln!Re`Knvz z*HSWX-}`t|UuLK`QDWt4)~h87d9$(+ySIAO?SKd9Nq{khS=ZG~1J+_npbmeQluzPr zdP%8$E5v7ennYYhB}}y}wg@Y6D`h@Y}oCFtzU~?uz<@7DwEEG}!L$Y~`OXqL+dCD==Dx1(s@ww`O zo`=daA70S#_fbUE8^tH0=zgrc^7BR^AicW?@s*M+!&?dK4!IZ9ZyDvhns-1dE~KpP zg4C~6i+=7NQ@j;y;G-!uBRr@VmgMmTi`X7nm1hpbPFwDYdG&WBjR4`pDu%cNj|6OE zQ)%DPFSDl3(~nX&SFmp7gmz%@yGI(og>#^_qWd4%DDGNe5)H*U;ioykc`zwPGx!QUx7)*bAA`1F*yQKjqh%`J0iU3UPS z1}%v~)O;zID%r%@`;Mr(k)*0k%cL-M%SV(x1} z`#kV0AK$YA#}v^qcn4U@1tE^fPQ_paM$$SQu0ulZGh!t3qW(8AUozJ{Fe^{G8$tVv zu)rWP4l0FIXfW!SsJcG%6;_BvZxBVWC$>PKG6+yz=CJw-wk77NbcAPs?Rx)p;Ht}??y=3 z7a3zg;5|YhRTu$4xJ7e9#dj$P(Ib(?mJf(wVdIv;ZoTG@zrx-b!JISQ)3xu#SrFuB zk{Co1f*K-~vCI=k42~%&igD%dAyH0lfz=}vO51D;%F$Oa|Kb@Nob}iTI8+s&=r(wW zCvzxnU+m3bt=de69E(WUF;SUu?DTqMTw!b)AZi*G%NqQE)lP4+f^303g7_TP5EM0U zPq)+SNn;rwzaG|B!LV8Zn>KnX&=A1Q6iwPo5K-}zTaG9m32orF>#A34HijQ8F{G~H zr zB9dsMc~KyWW8_n~;G-inwkd!=84qSiN}a-Z0!C(P<+?fYkJ8*aht~Q^HwWJfoyHHG zHoScSRV4siA)!T})R#knI>^}NQj#7jiZ!HBXrDQ++(R6(CwvIn|$0HQQ7tjd+G6tuj@5&)#7to8majULa?L8V+>JStNi> zRDvdjBWWz7ve1>VIIdh}EU-e&M1u$67FC-!94B>Ov zCvxjVqXl3ru0#Mo5d}*j54S?#s4}($G-;tIPA>PZVh9dayk2Ey?s_4K03pyVm7VDs z0AM5F59>!3-)km#teroLRYEdDNbXjID_2Uq?nNpvr%engYSQ*sO4xm`~UD~Ffa!$K!Vsl>T6-ihvJLVs+xHYosizR|f z*fElu{vkKpvUqiQVtlvYJvTwZ2PV)$LJE&%BGvtSM}AJvP=&CD^!rB8BtquAwZc+3 z$wC%MuLE?tAcm2&urAb@D&GLh8i8gcvKs&=nBO)HJRm`2!mDv zDie~guPRN~D;eboA7|I;8xpvo%9$;n_w^H$OxJWu(o~H-N39b|2oi8qfgfu&ZWWtltx-!wPZ7vGn&ep`KBuZXfFI?vLVX`aQnFSoB1l9~U2l%o zZ5+d_ss+8^T*t>lk&wJi1~!xn-h_eGptO&mKlY(&L^R?4xj#>%7(=T$3E z{9$tAJr;af?EY7?95C`3Qrn^H!4&4JG6>A+8n97-?F7z5Y$M)^3Y>#*(M!v z&}NyamTjUsMqp{;vrY>gy0_2xe_FRxHmSw`cm)XROt2Ja05sbF@H%eil^TZyA_&Oa zbKD)Fv2WR^-m*+MLWSCj4rqJGj)}Sf%vU2>Is7qf^A8IVggHUo(nUp8M?KT0S`;&q z4vxA?DZR;59n|9rIny;l69iKxv}N|KoN|44_q(+EvWniqwlBRFI0$LvO75WgWLL@P z9ATKvDvz-&epBe3EHb$Og<^Q0ic?Gxf=H4FhK_X!|9Xq;%4k>$MzAV%=X3U*jsaq< zZd{!qTC7GF(_vBO#`~EhQ;x$mGhG4dP>1SPR=HuB#yalP&f7_Z&gkO-HM(l3)d;yj z`4j0;Vy0ngd$KFePK%iyx*8IL3A(_5aIOXF;#Fiak933D=#Q7Aex^fy6O2AT_>3l4 zAfJaG)r^US5oE%lxdr3x($KcJaZ;uc{Nu4cI?7xNST7immpHZ;OqlFTaF0$ZeS-YW zDm`Vu#2#{jws(@#Z4!VO2{0XR@E~aDDJX*ujWfMw8+dIRoQDz^l$-+rra`9@u{UpWD<@c&rlcAf10$xb_U?I-#b_3>_1JC!7E%_eKSaFxi4|B=ymaLZ38KVPP|- zo*uAzr&1oxJWyv|zBZ6u8YcWK;V7q@qp-UP2j3SCb+u6QTU^kdtPoac!_}ETNM4MD zfouQ(%sn8wbE!G`O*VfMcx>^;dc(RYT+kV6$y=K-Nx`83&DDT8Pr#JM$$1|`b5|zt zbyiB%pq^_H3!hZV*WLi#=1H(vlA$CdrqD-^tMx49Bul$Y zkQvD&4JE@nSd=RWwvHdPhJTA5HVcQ$Kp~#9AJDlBqVHfGW=)+Cc9x&+Th1g;*CL)y zPmvaW_yLJ-{Rt%soH)69@7B9Y?p8LYF^ZOY=DXdntWj+Hh4ns$rR~{xYzBMFTk!5D z6#s3x41^x%Q>Dwu^y{mQ8%gzFe)0+MK?xn;wTML!B;!PyM&>mvNCW?t#*%EEoCJjZ zGMj-R0m|nBt#^ce?Hov!*@`V{0l>Gc7=(Mc7f^D9OfD>u@TE4|T1wAHS1X&CfWG^` zpagk4&N}q~_zN*18v1uZ&JNt^iSn28*gje^auy%}$w{R@qOzUr=F7fBZ_W`a;0L%&; zoZw|3$)jH%E%R8KT;Mwpnw)}>5`q2{S=ejDyIs*W02D%5^9gwT$p-?UbXjB6`7Gl8 znT6?-Wbh`mVL!l}Ry-3F@tUR`(pjjR*ds`|{hBeqpu`fsAL%01{f_A520Qrf8iU*B zLGlFl3;|wu?$UwEMjlH~P^X&)wDrfky+A7M`XdH`&-m*O?txI6dn7*t@8ixMsm_4U z0yl9EUy*;HUd}mm(WY%H_p3zre3l^jfQ#9gn;O1MfM#2~u7DEVCWbK{ei6vtMr3W^ z&8(>;eNF8+%w6}Q|3J-pJEI&4?M9q{+|JB(51rQ6E1h=6an=q5PeJQm%39EF`b`yq z3|v*BlRWUtphp!6XRl^H92T9*%!1RI-T`69B?1utThNQHPmYRbhWkvj{H+z>Z_4 z_otJZPDohxqAQ-2G)^j%)%D_Gipx}-VLQVY7v)BP|w`Z(>(FV zpN)SnY-ue3ToGGpnF6-vIp4-D;DW(+2b-126ukFFgMi2dz0yW|Trp)K$=W;o6}@qq zk1wM44QlSZa@j(WqcZu$+Y`d~9GUK9j-~#*EG4V1HpFZmDBN8QBbH`o1%jfO1~p30UAYtQ5FA$ZNWMvX$&fL=5Ezcnlz1WHY4SzHq)}+et+m0QL}3 zvF%Dtw_D1tLT}HsdL7D+%$AG`coT!EUjMM5n&DTP@edyptW9lt*M&Dh(WLv9J{Zf@ zc2#Ok(rY(>5roU^3BYCWXP_!N0G$AOPE3EH^aDb7iFJpc@q2$>8Cgl-wg|#(SzVFn zLs?F7f_4G;4KYVd4jV$m0Kp?;*M8eNN8WY_ahOB@`3)u*;6vLiak1X2l#VQ*X(YCu z($NM2*mWX}y0vN}=~@7E9ss8(sFMk@+{cj?1k*fyNu-#}8Ba zq|Olub)PqaQPFRZZKT63hne#<)NkUuURNj#F_D-aw}Az0;EGVL66l1&EwKlA3~y+Q z$Ald0%yDH}O+1&r^a**p!{T;TR=#*ze_L%xy}Jdx^F-B`w>q%XXEXdt#&7$}sx&D8 z@lf{D)*}vCw`xFm;N?Iy$5Rug=R0|d1H*^865AHCs{66#Sjty8AH>ijCp+b4`|{PY zu)r+eX2x!Hr^6@Mp9x;RREW(PWedh3TPdYF@5#U^Ca=B;T^CQj1!CtTNt#~Ov=K(X z!sXR=qK=!|NBZ`SD`JInurA+I7Vfz`!*PoO47iv!$~$)gBQrx4S;bFULjgq*`Fp+B zp`~A;8}MJ&ph53UIQMC#=Aj506KdTcb41&{FsKYI zu^&J*tJb*+y2L(fBCMPoyE?IHcPbY4Q_u(nL36)u+VDT!$@M@TGH32bNzYjE_**$A zuY);_uI^}uu?vf3=-VsMn`CI&+=>O`QlT0AbrO`A?P=fQD9c>xBu40$uIlqvQYff4I$4Rd1ELoMdp{tWUhr>3}M^87%k1p+5^4X0ZC$L;y#sK>9* zZrn_ShCrhV@XB}j`~)bJ1%3vXuYd=GLHp(@G)0M7YaD^3INDM3!CAj>_3bG=Bc-6{ z%n=p+Ob)&VxGF8_Ui>%}tO1tbMcqtlcI$@{IcysYHeH*NgG%^0(q4hagEYO>3Ys|` zM|H+S_@n!$B|x*U@xDVQC;R|TC(A3ROfiA?ZV~I#8sp5jO{ThpKRiqK6MNdSgSVCQ>~_cb z>vXxV3N22$=iKwuT)7T8A6aa!Zp_>j2O!AGS0Y%LXgnxVUy625Z^#%8O=fMMDp230 z%8S=?BS;{oM!}XfpT>?nX?-3dnlY#U39r7POk|kf>{CNx<4d9Ceug1=2VRe0eoqK- z-SEkM^B>ta6C(&{yZGM*ubMQ9h&CBoTZLe#^`(M;`LZJ2H&q&NqBJ~srJ@` zl0&D;fsZ1{uukcwqIzqI!#+LC+Yo86zPuZ>PuT}uK?i;x zX8iSaQEmsTAe3#55&cQ)G5XWbCukxBfDVDh(}RTrz*a{9uK12#aIgGG@JPY7cog-u zooFwmE0;=wV_oLGZ`0b3E@bV2+O=6$pxn-FouXsMe1FnMfY zc!B7Mf($DKPaHWvAhd6{A1qjhU?mbWRa6O3MCRlx$0?#}1`;w6YSL6UCloc~N`%CF zHNk`9oCAUYB^^3OHfbe;(_6a2g9aTjFZ`75u--!CC`qLB<482KNQ7n{0dLh4nZF#= zR2+zh52bP{S*}(Z2@cr|Fd-35LGnX(>UmrJBClz~)qljMW4L#@>is%5Lg*rw&zyk65_0fn|2{|!7;8Aik!N+`G*w1^vcsx}h-!n7nc-p0`YoPb<$`Shb@q~pc0 zI`8>}7W#^OPO<#w6~E%{lo8=Hx&sV~oxl-^!D5TOoR0#GFu&IW*wweD9eD3dD~2+ zuQo}m2BQ}V+!n-SkjTP2>xY^>KGtN1h;hd2a@XqK9OPu!DrPaBu{#;RX`3f6O+~yF z`$&?zCybTjr*17k6D{IAcPkqu7Oyw%N^hGymjcz9Kq!m9(v$t7cl)Ov0-`TBnaoD7 zuMjWdnWFjHX0D6%`L^_Ya!aZ_T+E7#3whQn>N`J0HK*pxqVz>S6sf1Z#m{HJuS{=1 z`*^UJ&OlSr0GJF{Y2(+iHON1mdlWXBG!Q51YCsZ$CvR3TP(+)!dyI z4{^j*1`K_2jr?DMJ!*{tCXF7a@!P&Ldh&CTlE5gKd@;E5ww!^{O7fyz+RXgEA>s>8 zgh+niyLjEfIE&9X#&MIz5GCVy2v@=+p~IJ@d>;KI-a9F423^JmDO=Gj^$Tf(g^$wa z#y!hed>1l0qoiM`U6>U9;L%Tp3`WUhq1x}HxChfCU9t2=B3yRu(ZCh{Oi3cFB-4++_GsuO`f~oK z9?jki*T3?5SLP@dpIh|D(5p4o{OQqnbIdngdo(wj34ePu@19NbU3)Z#^elgSGy+K8 zhxGp??>@&w_S&O4)%}fIne${7~>H#olJ090!2z6{jk{+)>Ifw6Vf4rTdjC@b`+N<=!UCbL_!_C1dPWIkWrK zb$MtYqPpZykLEf|&;gp-_1mMNaIA6uL67lhx@f+FU-UKNW8jK~G1N6&;q05m&Gt#P zle6v1b>6*8WchUCC!yD}v0u0va^5=fbdNY5cAjrnU&9sEnQg!D{`P2A*D44xa7A>Q zG$!wU%Yej9rBM4ndH0m6sF4+CL9Xk(UctU+brY;C{OwLojDZ6@9&zv9V^Xp?>?S<& zYOg*QvdE9qJ)B9AkbjAI4#&V1j&4B2G=|+Fm^Z#}mj0$BPB3Oc%Kb#-kGy;Psi9YI zbj!bp22XaFeH3(GG)vTCEdqlW9RrBTSwK(*Dh6!GMKSZO&k_VWDg9$ZEnJMr;(*h_*5Z_aag5UVT zank0Z2~3Vcs3r>V#6TGU*J;rjXfM8FaU3lBD6F=fitu)E+=H4#5x#&z@O@-I4KR^< zqQ20+NKTCYGEsLTaflcl8O31)J&r;SAgL;n2G}K!qqXBOOE<_tZcRHM!-*maf}sIk ze;rL&R0yK&d{FR!lgduLm}YTgNVKg%YclFBBJ6yqV?ZF(CMRClAK8GMhuum%FNWi* zj>yxTB#Hp>m?=j`lqFA+q~yq1$3v=6nz}q`FE`nGlSlQP8@UTJa}bgjs#P}XI6NTb zaR36fO&=mvo~ekhy%wVi#k>(((&efK0!hTJ(*PF1wDRktW`cv{th+(XaU-bvfF5ko z`h0<0k{B^hIF1Vy2rS7TlBA)>U55aIBmn>z;XwL_)EIVofhdwpQoL&9eFO1z!iVe! zX(to+y>iM|rvgbL^MCOWu>(=lAvAw5rIcgS5t1*(>nyevIJmQnI{HXSN;tLl@9PW! zXAc(vC#U z7tx$mAT_FVGsfo2B+n|f+js|=gR-qiV@Ra@Zd(ab^@8bwRM*j(5q zlVgSAwqp?*Dzk_gWxC{f@;;`4@1qK3(+(K=$eNUGskx zd<;OAtN;EQAai-w@&|BoOTHrz1CUJ^5&Z)ogAY?h{1<@COOwD^C!I&T-6H9?OFi4- z+L@>E2aB+1Sd0P47OfYqlsnY6F;A%%E7s%bm>GlpvehzpeOg`j$nvfK1jzm__!t&} z@iY@*{rThgZ3pnLfYQO3ca(<=Jpvzp;I?FYTb&u@2Z16)N8kk409msRrHLz<{QoEw zv1tBX@Qw4h|0?*!YL2Ep{|!L)52>isB@8OKl~yx&jQ0nNpz0j0O=q#fY4_g%WE|G_ z-~S~Q(O2T_76_lIR3sUi`0W;P81(HH-*E;aZY83YRZ24*6xTFUv^S=?s+?wtDoUz= z`z6VCzg_A-fRlZ8#%E)H0Vio#BN%{8_A>5qZzIYH6VU#4himK_Ae$6mHmI65bmXn+ zGL7B3RY9c~+Y~y~$J0_Zd&1i)ZMeaS0Z!UeUjCMfYPqlxf@4?me@aEKQJ=W}1CU`@ zgzr*BfU=&Y`ivLS($~Pr#4RqGM@Ei+0w>rPZlkDg>rq9VR(b(?W@=lxO@!DU8Av6z0t7Am78`7+p7PNisVG( zn+>H|@V+U;8>8L7e+a_oJ6{WU{v(de9O`6&1|-Fp%kj5x^v#Y)3Xg9SMWusxSkBckTJH zRxMl#>TzMH(oh3}P{a`ekMyMEE<{2JR0YHZR3w6NJef30W}p`KwnQ$|OfG0+PQ}Fv zD1euzNO>(hlZ4xid7>b~+Tna4+W1I-do_eG(nx6*!4z%AI*HkQpfS--inFKFr^?A3 z!h92pb3UD*`nXFiI(wYpJ7GP($`6sbJboGkF8QP2Hws=#mM~LB^HK4;3&{9xK4cBT z2|m?H&b*qL6C54Y^gl@{0NdtdyD3?mLnDe#$Jw@q6;`!FsVn13d16DN?yQ`ow@j4s z{cs;NyFAJ0(JzV)iB8wUVWIlSylrgE6h#sighQxrXKZ|o4aF3E9t)+3lF>Bnmi6q1 zpop7zLmIW}%v7wq048IBi4|L*^s@pS5OOWXJ3ZxQ2*#%cH=+p~-sy4QCW>GL%}xdW z^5Fh~6O~{3m^+O>6fppei;z4mG=K%ed1kcZtZZ>Y))eJrOvv35QvWRYv*~T8 zrTp=g>i7RB_~Hg;+`36~#T`Ir8D12Z3#ER+=Xn7iP6th&m1s@QzYG4tF5d06U;__e zSnYMehg2I6qZS&o&uZ*7s!bNh7Mj}5YF+=g3;wr;#P}K;4z=YmlW&cglQni?tHl)QenEzsmu@5d=^Buf+xSw^!opsUSLSXI_~;t*hAd? zS1&O3s(SIcR_~v^0MWz3zidjY9OmCP<+|aYb_f0eP$m9{O<56suz77$c4hg# z_|v8|X-uEJwkf}OVtlN6<7RqM^}oa%TAv+^m{VN__PyaQ|>mHon?`*q<43yTMM3X6gc=Lk~0Qkvm;Fy z=DDtI%Iz`=2c!YjzYx2oMU^Plbo(Nen4JIES4EU}|7SMkKaK|5$j5QwTWQ6U4Va^0 z>u?PZRy!1|;uSRoP{8SNy}KOnR-u{+F0DZW7c-;mA`v zB<;adcfyM~8ZsJzpKe_r4Phy$SCy)xr|w^Z@&d1IN>NWjUc5qGmy+^WSBF^7OLl5LB*gVE6&8g8R zRlD)pzN+CL6TJQ4cu?f~N+cu2jw#D)St51RZ<}&Ffi6CM+`Fy%FT_qt8f7u9|IYZP ziO-j_MT=|u>H?@BnsAa=`)x(5dR#Ql=xdvLoN715uk+oh{r*0_72W4E?}h%7HWqP# zmBbi9^t%^0IRBWa!q>WxY>zo9XsU~jH*;YF`l0jN z-a3}-<1*jdzkIhpEE6v7G-HCrF*Lw+u=w+0)>!+H81{^T+3vUBhzbBZdNC)$*g-ot z3;aYI0059hKrZ4b;06HD2hkQM?pX7#D3n_VTL1t{2Kb>0a=}3sVZ9dxm_9>(yHwBxB_7UI0|Vznd6ijOhiM zM+W))k7F%TA)oq?LxOxYQFiJqxy(@9U{jrVSFkSs269+(<@#t~snKUjl-NJMg=sPv zpV)(hcv)yd)iFoIAH6`LC$SK->L|+OBsvgNif?hHtBMl?;7}~EW&^LL_uxa!%O{XB z6bKFj01Ab+j6>FAXgm=(v&ptbh(!Eu4J(p4i(q{FqtUl=Mbh+~a&kPqAZRL_DsYy~ zko_11NJYU@T|?n0uE{DVX5x~zGK4&A+{N6MGzU~JK3Pfbl^m06?zSVfzO3mtn{so# zqg?j;=;&17<=1=wqymBeS1+*pVWE6F!it@|5(-kJN2Nvs3rO<|cD3MR)5Dlv01l}{ zs-XVp1=wb9_+pU4{V;sK-$#QUk5^$C=4bss>IME!js}qm@|f8$cJXY)g}5Z5A%w9VygS^NzW<8pOYR@>&4%b9*jI} zma2d7hin+)hbFw1hb_Z`e^>YVH$#8R!?zRsa(>IhKJGXEl85V7s`H{W`enD87<0_$9u#Vpo!4VM~9sY&wSA36_5Xr4gW1O z6%6Chv`=-Tb*z6}Eb0pkf|kq!0d%Cf!JnfuO#L1(f#9KJE0{ij+^&KN33Wj(`~05t zV5<9nCOsJ0a8BcIq7;c$n8*8@zMq(Gf@jBlh>^=R3cky-Ro^04097|RjizvbcDvjx-Z>Q0^Do;G7q{SCF8=9hdX zX#ZOt9{x#w(|u|c`R*PBlEnfQL0b{L|NG(}B~=~GT4w)ymLu=I!LF%!u@xZECw4vQ z@pH(lpx&nw?;>Ni3ie3eOtVrDsV5l4V&H_^i# zUiV_wk!B78hGhN^SN^^LZ5cqB`t!WgmHuJh@7rdFm=+-DKk{(%p{)C#Er1~U>JY<5 z__iEsnW75`72qS#D96Y0MnKknMBYyKhp@t6cv6Hda2*d6u?YZBDcJOB%Mk_I0I&(L ztox1-#37piAipYMClEI{Q7(Y};qcs79XGkY_}e5BdyI~o$HbX- z>5sFE%E*+k#c45( z1;hDhM=%+46V-zS)3>?@dqa5B0f232f%(<9*#A@Ae@}Y;bMa40i_xDrElc(rJOs3H&o zvsei$eYsHo9M=f(KO6}C|38lYPX@fyYTv%p{vd1mLfK`;vLA}w%ABPz$R|&c834G;9ab?K*CQvD#{ha+(kC+=Y z6pcUqcr8a9I5U-1%umc197+b!6(^9bxBzizv=I}M$)N!NuTdI}%R8!VDNpG`^$Qzh(vHRHWCmL#5{rsS>@8s1+4mg2!71K3J)njGDCwS_c!vb z3piIeIR&xm3;5bciVDM$&D)4dhg>TxBOZm*R7I6gq|nOwmc|&#Rk6=oRq+m?C9PeY zmVw2H-evC9I@~wDAD=T)KOogt(iPZzIs)|LNdi!fI=#?GEYewOQjldM-a2QMTCO;> zEBl!Ra>%?Cr2A+FcH)KH&9@t^S;0qEe(EDnErF?5#G49IJJib-S2wLT(1T#|_Igv%a+~v9fQ=q(eRrCYS-hHt?6?Z{8Qe%;(49Ki;Z-Oq5 z^5OSPO}ZIj(ZPXt@Y--MlQ^K81!T#IIAAO2oe0H}N%71QMq4>m#(5w`x^)D}joL7y zDl_)*GO1hfSn2{bmOc}SG$N3VhzBO`i9hg{Gk$xmadamGZnG?H(nS<)MU+@rQ_ca9 zX}In9iI@*@JP;^T6=Ui|CeX5^bmnFs*NR-_N7)WpZWg&Yds_cIvT9BEa+o0CUcAG{ zK?mI54{B;;k^E}kBhxg&NA;svC+`SnUSgUcOt?fA-w%x>T5-y!ng`;&fa3n@44rH4sm7oX)B7;4F``Y4RW0g}$4~Fw!?ETI;Z}Cskf&T!uM&x0Y4{~!U?@;UC!r(y zW<2YK?E!0n)Wvyg?Khn~3+HI~an@8e?4-t?jg`V7BD~RRz1A_lnrt&BoTtO9&il;5 zjB;#2pypLFACD!08FHzQ#5NYjKKToWZ@MQHUx z^rus9;GS;wrApZYq5(k` zlyNF)X&el1B44Lu&3W*)?;AQMfu1w)SNpMA7~{W4rOSG4Y@=joGW>QyK0Tw>L*tg& zPIg#JT}GXEyko%555snvg>d7RL(8*AA8thlH~NwE+q?tJN@rO%CbPMQ5Y((qN*cdN zCjWAukuJ)L;;SYFUfF}_W0^VNtNuD?XL7&xyQ=Vv{$`OXCq2_uL3h2X_IUE`>{y8@ zENIYHK-~_>u_=RAbK4xGF;S-ZU44zEl+q|rE^wX&koqd|qm1L-B#ZZ~+F4`TU5#nY z>RaEdDC<0Mg#td^{Sc0~05(3q^<+_f2`#vQ4#&o;3=%b2u|PK>O`prT;Aw*j6%QwwIUS57+M}z8>;g@B6<3ZBzKHX>?v23{E9ke0Gc7HnmhtsW$ zv|3wv2kP;u_a~{frb4VGi!1w+qNax^ql=jJT6@t@s-Z9P?oWTL?izl5vM6(3473CR z%N_+CgC9zNqJIA*qB;M&*)9UmHcjg7T1alTo=YM*kdz=?Vs>{=MJi_w`jop;0@9=H zbD2~7UI1Y9QzF4%40|#7m#gG~2u0+}QR1(cXs+Y+wDM@x4u`qtEC0qrRJ~d&p494Jff9v#Dcj zH07`PXeyDXymh{553d$jwXSNJv>em!25x1P^KA<~^qcf~zlr$fmDo-Ac~+rhi3!L4 zF8;Dp5%$lsyL^|8@m;nnjAnbtsmF7*8n$Kk9@TwFkk5Yc>x*#t+w(o|=AedxZ$9JC zF3!?{Z$IUNcvyk&qoexXzCAen)cy1FJ%=ay{AP}CCu7bPIbT2t=?9;)_IpQrk=>4@ z_lSC{{pYj0pKKl8^EDxoJ${+)o>uPO?Cr<*-48D+=vlcRZ@FUtjt7B_Kgklb$W4-p z%(gxQ`+0LPZ6=OrL9h~j2#t8ib1_e3K`@80Cr4%owYX>F{SYIHP;PtMDGDzn)T=KN zM}i7hwLH`q9)Q>lMXuq=Aj6c!!;py}Br*)Oi>Cv4sB;vCgo0GX!%&%zjm5)VT*D1~ z!|%3)>i~l8Mui`hyWfop1Q6@@G{&d1?#FNzI<)rT0TCWk#BOtT&NemZBaOz~{y`(vKG8;iMheYx`KZIvF zneQSQ^Xf=YB1M=B!oQp>h^9`FkVu(_LIkNH2chgsUjDt z+SF;f5^4GusXWwaVp(Y>t!ZLh5cvlwb8Fz)F2;e@G_?4*~e2vIJ17!HAE>%n6M;DG3?x{K_3>Sv7-&tBen)mpKzJSmZ9fip4*X);|=w~OHTjy~Sah3?et(ykVCO$L0lmE>x|2!-IvNiu| zIsey1K7ghGC|NKG0MB9a`FDdhALQ*2I3?Qf+%L5~+#{@hklE~4NR?ek(^g2=R#=_& z%x>8aw3!u*w1JrT#|R_GybYC`b0%HW%$IWoC5wekibeg4#j}f-2#V)}2nn*&iK(-7 znUXkSNKo=}mWGd%@bg>!GB9tUTB%EQB}?^9N)7!>jk8Nl+Dc7VO3g1zEojQDB+G0} z%I;m3Xss0IFFNAtmncQB;thJfh{QRr1l#$S`(~H>x0MI1lm}jxo6+Psju}XZYP#$f zATJGH8-|Rd3DPGkixX)olO-!tO)4?DRFm)u<~9|5rIN@h1TwiohtiXKse<33vLd_c z{{nzOf4{1_s;tVLm`V+rV1NpWG6In@pIQ*_@iIGuURO4PNDvG$38=z4ti)QZ#(J#B zYM`;&19sRlH0G(ddLz)WGjXM)C^(k#Ig_ort=!tJ-fF2bS)kJptFp>#oeHhdY9mWR zP);YODQE+98m!1Vuk>24_Ij_yI1nZ<=}-gk`?ks5JSl279mwo3PaRs=Xkq zen_6S>aQ(G{^Rdn45Xuu;c)A$YC$y0lE&v`+i91&XHQ znt*>ePR^B0L%SK*(JV&7u5v1LO8cTEJGNw7wq|>_XdAL8s|n1SvOuaiZgeYIdmJFd zwF0$PUz@QS3k-G&wSN1zfE&1Enx^7OwV_93w=yGhYa=lGR?#-F%+R-jJGqowxs;2t zeCU}%nip8RxPw8lA2bC7Rc%(bfxpVPcWJq*ySl79uY{WjZab?cdJyR9xnwakMN_eO z8-u<&mdcQ}z#F{6JG{iJw!i?Zd>Ev(YP+1VwUXquc{{LD+L|3&z1DlZ*qgl=nwx3L zw){GH&i@6R%=;HxQgc&MBzAReG}yc0Dz?S@zFXN0tAGmgTfejbrCSLM^@|Gb+miZA zzgqdft6-q@*$Vr6z^FjL@Vme;NuMuj3U2Fi5lK#+JHBr5L2~7;U<&D!Gx$Aj2X2!-(0Mm>au1 zW=FBY8y2j!fEBRod#z8Yv#7cZ)F22QP{mdZ0wRC{H7pIv5Tif|ozWu zo+aP`9YDrD8KWpn4J=^Af;C~1Cv;ctnsj0Nq#q2#AhU;qoy0c8mcDEy+RKn)TQ0G%uV zB|r_daF?+_4G|Ck0&oC|Kn=g33{Tn&v_K6WK+6LF1Gt=)g(8~{?%A35*oE!ih z;L3eV$(r009_40Tu87_Iv;W@Bq{R3>(|aB=FGoya0+Y4Y}FN60pe%aLfJM(6xL3H89Lm zTG7-10ky0E81U5`@YNK60z-|dGi|KO8o~J&v@H@&D18#>@e>p~C3J?zf66~9Z=O*{R#(X;N89|?cG1XT#=9%Hv81inrahxMdC36%%m6?Ov5W#Y zJpe*|*wioy{yYFB@YDkk0UhnslC97*N!9Xv)eHTV1ijUt-3OYm-P;WcJ^y^$lRA^k zAPu0P*44Eu%he*TjTTyRJGGO(W@Umx=L)3_-Z;v_eht(ZKn<%Plc&tp2cQ69;L6k> z0$m*pBEZQ}t+yG@6lD2K%IC{dc0K0^2V=TfK zio4z=83sx&03fiD5C6c)5WwF~{@hbd z>%o!;nBPT9?1*_e&hCp*ixzL5a_(?2}`3NXi% zJ?jgcse|mW&f40lZWi3)-tncuNC23e?2vBd1e~dYQ0Na(!(2T83s3?K-|!_c-tK$uInJ}B{=IY5*0+Gj z-A)#|v&2r~ z1An|m-t5>t0305YWIpl?jO`?zdFf=t>b>!1QCRRjs$d(h{cH5Xd$P8^-?k7 z5BXdn`R>iDr919)I=z_x``8<$C2!9S5CISX0sd?NK>u9<8yU|CAOIAwk{`*~!p-_s zjr|dz{ty5I(jfZ~p#JL*0j-P*yszN_F8}cl0hbOCw3IC)SkT}>gb5WcWZ2N*Lx{_o zHDkt%nyMa&G;XYw2-huJw{QUW5lqprNWZBZ?OPDcb&ZJq>=1rU}&FnNI1&hxl zNQCCdfh5?(Y15=hi`LZXQ>am;PNiDa>Q$^(lQsiJt;PYc1H_6wAV7cwYNx1mC~&|4 z3TLNUwc13Df&j2Js8zswV1QWxVgrm=I{<88zykt+2!^WJG+NXk7#3^xui_5WXeFJN z)$?c2p+!UG+>F|+j2ktE3@LJCPS~+!&!%15_W#Q_w*kE2{e~ycpIDFtMM4ybE3Olj zFK6D|`E%&erBA0`eL1kMJuZ(mtN?-tYFw!`s3u?msbIh+MlKOJ0EKB00&M3lpoFUq z^SO@|z?jy0Y92srzrQkzMH%Z7RB%BC8)WXZL{i(xmP9}b376M&({Mu$JM>Vd+;r=$ zx8J1jNvPtAa%HKcmKyCv7-I}g8jDmRp@b1`9H9ghkdQ{RWuyUs1QJGI!I@>8VrCjv zN+^;AYGBxLM;&n#VGL@ZnDRyuoE$*}B&cC#DT`Q`(n%a~93jjxWpwjRIG<|KB284A zutHmG!SF*q`}FfqKw(+~fHl-G^iVZ+%Krij;e<=^IA)Z=&Ou5mwN$}rx}s*&X*Ttg zmS2?X)Kg`qVNMxOsnK*(XGV3#(_dJ1CYV=KrKVJ*O!Kr=TW>Y>QecA>7CY>w(L};K zaq(!+K$~^;S!i!F)Qm(G{Rs(2jdO)FZoBpNTX4e_cU*GIH5c4m=TdjBNx21v7IuH# zY9e)k$#h+OTX_taeAj)fTYmeU>)&$=HuzwK6YkbDRU))APd)Wy7Jv++wfJI;qaATX zo=kM~(G?MFCL)qcHu+?fQ&xFpmRolD<&-C?h?+X>OvIKzB*t*0VTQ^0XP|@raAV#& zW|TN2Y&cFDk%e{oX{e)?dTOexj{nYBWLMKOXIy&rS!l4s7CR@Rfx9+}p;VmL#W>q` z`)#=6mV0ixotlWoX=1VY=0IxM*=w&!B4%vD3oksxlgt2MCo!;y;>4krmZn9f>bCrH z%rn<~bFGwG^4PsE+!JuaOE-ONqJ7)RV-$-!E>pHSmwk5HYquRM7nhml6o)yg@D|{^ z2K?*Oi#J~5vRC&hTNRgbzVfVKmVSEbtGE7o>=Odb`Oo(T$wJov2>f{R%l9*Nv#~|7 zd1Wf9h~#LVmw$fx>$m@Y{PWj;fByUT|9=1mP=EuxUo=XljP`vlYZSso&RmnBVwg{Y z6Vy-~EEtE4?SxSuQyXVu2mh7lHKkLl(1au=Aqf+r@PsL3;R;=-LKwC%hA)(14QY78 z8Rk$D0MH>0ZP-H~{!oZMBw`SYI7A~R5s6ED;U-K&un$IMPSntwopScOiBV9CTbxbm zRM$A+pv`sL`d1X4;w@_6K@5WMVjJD~MmWY%j&r1A9qo8WJmyi4dn8&O-VlaLgokow z6rty6mbH$2WM^DtWFv2aKAto#3fVHs{H|gVLAc>Zz2amiJ^4vchEkNHBxNa0c}i5K zQkAPbB`d;k3Z*!&D%`tB?=*6Yz6BzDCFz+Xefdk2c#&}%T%S?yHo0<1;}>p-hN&iH zHE2dtn$x6ab+AJ-H~*NbV2`PpYA6JfMFO)~#t`S9<}imipfiIT;+Y*LnUfaO{P<2NF$`_A;|j@g20Mk?O{1{AVOWrp<`UtL+7+$9{gA|Gk}qj!H6H_ zrqV5na%(gM*=Jkb`qrqhNGVHgMnIuQ8qU=6VasY@*Lc>m2x?WZremmA9U9h;2}PtH zysMnJwFx{>L;tPYlOJ3yds*AbHBfr0oN@rXCr+OPt(w_zxWR7cF# zkr653QjWbSs-D@BORnkxRc@1s%#Q|FxWgrGam#hLkd9PbwLRp+aQ47nu2#B)L+1rK zHq68trL&C%;qz4C1~JJpewF*hFA(^=UkD_R_sDuX^K!XlEU>bL>ft{(L00|)B0cdFe2nO*05NKu~%W$eut$l55ciMeSqo*`R zMs1)XOlk4qKRKW07@ZuO zYgvFZ9&q(nO9lj|b_FXapb813oaD@Cz?wPm>ISU+0l`>637i1}!azRnyXSrHFaJ98 z0zaAWddqnrJc3JMU?>;EC`R*{Pk89prVo9XgS+`~UB+n|MNdX%RrHa-6%n|92%@Cr2WSDwpaE(ife4_65x74H zAiy?pIS1S)&DuMfdkUB{7AvX{(!z!06Q5#mu;}|hoS43nus#cNEe(o-nPR+&V2I_| zH{}quOxYAc*p!K&hCo<=H-IHEp#}q@27-_VvZ97Tm_d=E20`eQSdoS>fH7*Iksld5 zY0#uwF`yO9HY>csY^w<5`X^wxDTP>$zDoqEat&bsEDr=hG`tDxehd$BC^4aY5@CyYRpHG`?YYpit~UU=&7rWQh{Iv`mXbS3sZy zvBO&YM}Q1SS=_N;NDpi3ibfMHoM|Ayk;i&`NR;3M09ZpdY(rICJpZP7rs?p<4HHO@ z{78@t7J{4zjf9SM+(oJqp5+?`VrafxfJm4$i8YKjKZ>a^NWo|j8Er!fU5d`hT{N}{|bNjO4&{I+zg!Gzq1A;X2`TRvh4%a|NX zW1L8LGpv}3L+&e>u22LwSOwpUOSzm&x>T5E*n}`(g|$2`)7XSg^a!dN23*jEo(W50 z&;?xpfW#!rdX&hDL`y+%%Y*12@=A&g@Lj{7ldcP0<`p(kxBWJWbS0 zP1RgY)@)7Jd`-?216B|d-x?Q&!MSo1!-W(~002v|1b|&&%>R0%Nt#SNH&{h6Vmy;6 z75xhZ=X_4+j85sC&gldI>b%bCw9Zg4iS1+w=j6`rgiex>&hf-f^E^-VOi%S(Pxfq2 z_l(Zj^fs)F2x*vvsoEOB^cuqyPO>~pd2@rXLc!#uF@u@8x;#(>P0+e@!fhf+V}Sxk zGrqnWhOZmaf!=T-eXS$xvZ* zH$~tB4mGTr+zB_x$L$-Fgb7Ip*$Ns1QX;LzAI%%w^u$0Qtw5mATtLiS*ack(P8lUd zVysdBbSTLbQ6#9$?z4&yA|NrHpI91GGd)u@O;a^pQ~&uXQ$akdtx&ln)lDXK(p<=e zVz|>P4aQS^H|zQ$9_>=@>qpPogh@D5L`_shT~tPGR7ZVONR3oUom5J#R7<^7OwCkH z-P990)KfSL26<4f#6ab{(>slzm)z4*WT@6kOEGe?NNL7|&_ark23I&dp-aVF-Bn%f zRbKs7Ukz4Z9adp2R$@I?V@+0MT~=jnR%U%xXN^{9ka7zf1w3n^)#0DZQ zQ+-lBRaH_XPI;TRn`|AC;);&sFvyz(G2jglWutk0gL=JJGoaUewby;cSAG3geg#;6 z4OoI5ScC0XgcaC?E!c%UScQF9hJ{#%jaZ7ESpSP{Sd5j}jOEu;kk68&#tmaf(Mp6| zVA61P(NrZ@G^EJK1W_Gb#V(DXrlF2Z83ZNcBb?1yo!wcU?OC7wS$_46NvNlp-N?{V z(w)hL2D(#}RarD71eRsPOFPb2WjxOal3x%6HUe6%?OLz>TCfeTw=%)GRNBQZ!`;%#2^8C+16 zRdLfsYA}U4P06KwQp9v!*?llYUbSmH*^C571U)AncnqAZOjzDb>6N;JXdfA zXCQ>l-PsCD9YJ7)K7e2UMIXYA)%l#>Yw}Bl>_t#u+U@P$2V(>WMu}onghB9wJfL91 zq60HfqaBTcFc1o#G&%(1487&t|K(XT$OA$UfeOF?7H|c`Ti$qmgXImY&3(h20MQwa z%pA_N7=~ev2>}%7gBgz39A=z-rQxvR4H&-P5=LIam8%dw+}vbRuhib{ozmE4;C15z z3I>2Sq=PrWU^AdvB)D6mU0>g=2>)f;TM}+!J~9JBkO1#^fCUf%MtFl@aD`yNAXf+l zXK;l(HUm8lhCVQZP;doAeuMdShCW~f8fbtPa0W5RV`pfnK`?^_zyM%y&OauESz&|| zo|Q_jR$5^MSI7f1&`W2yV>foI(q~kN_G8h7fo= z3YY{ChyV#-fj5YN1%QAO=mTp;0!7GIGiU$|$O8%(0SWK`8>oP8W&|YQ00_VUB&Y-! zr~nBd0SXvr18h4`US?*#BmXugT(i=OnKNJ|#Tg1c%v@gJU1qmD@M4noDh$pf%@oid z_+a@&Fs{fH;bq>5wxdb5Ga=>!fer=x6M;L+g9gB7_G5&AW4i}ngbMHu5DIB z0t#4w2xtL`YcmJ{3nmhX+Ya4UfKkPQkHUD0AQ(*HZltKg9#o402qWkpaT#E&<#c#pPVc@ z1TM{$=(w&UXSOqEpaCs|fEHK)2|xh~PyiO_>Shpu1>kIW&Hw}`0SssWQg8(=Nb3$z zfE@S%1!#d%7;6;30RLO-Uoi+YEU4pD;4^1HZ66SWTeGtgh-L(|?WZmQXr=&ah~dk| zBf5rSs;EG;jnLJ-Q&1R&DK&;DH3nng1zs5JBjbY!_5&_f?8SCj&0IyFWSZLimX`(w z%f42OxzMZU6~zXBxn@5*TiE zmH-NX0YdN%d`5z3F760eaHn2Bc+PEVs5KgJH3^Ua4zOeX&Lg@Wll%6Tm)2|J)1@X2 z1O;Z?#x-yCJ~B#hZzO;3JfK&}Ojj=rzwMr!ebHKZJ>eRcYXGP<3UC8ugMhL|3l!*p z;Kl$1T!0ubHvby%05#Y;Q)%@FaL@LN99ggMbWJ0B;7g`=f#Wb#*$T>v?f$d#M@Y6T{U7aw~4! zPba5PpDs!`axPW`3r0&!2$N^fLgFV}KucfiHTbFZfin=pi-Q2o=NZ4TLLZ zcXxkx@8wXeH)++`QGDmVV;(P37 z>+=mlxMMcV*Ns2nP_WbS(>kLVklrCi^++_o2OL@9UIU zczSS^dcS7(cDH)edSFWUUSb6141U9#gzUWxVWr4gnU?%G+KKm-{hJj!T&?}#yirH-=-#D$s{_toLFI#$Yw|Rjm+PVZdb_%af`Wn`H(6ci^z%;d>z^(^u!Q{w2tRoS z(s=_%3_>?iq96(5N}94}&6ZKDXptE+iPL}yGV?~zn~)+$k}PTRB+8U3SF&vB@+C}> z9zBALY4avdm}UkAlPJ+5(25eNse+Q|XrM&60u9R*NEg&y#-tiE#)}t#tXj8n?dtU_ z*sx;9k}YfYEZVec*Roa12!J0xaR-sh9*s^ESu8p=&T!91g z)HOpVVVH$J!dRX*Ewf>1J~`H$?EE?O=+dX#G&3ofaf!$=YwVo#`_f#X#OIQ#+L-P1 z>esVx@80ZNMSeEKp7`EMd3oVYq3Px-+ zq?%ghhD({I%T%qp`f9E5vek^d^`6z@eR=Ha1{_!{#1L_Sg*h;e7aDvp!U-$9FvATy z{4m53OFS{f2NO(iGt^jeDrlgA2#ScPUDcYsC7ZR3$tiQyqCkGUNdJd#2Z<3}6aX?4 z(L_P%yfe=|`}{M|K?^-J(M215G}1{cz4Xo)VKj{<8iM!XQ{%}J>$~u(yfxQdXT@?J zF5l;yUNZs==w;-py*ArzyZtuYamzh7-F4f2x1gk|a_WYojfcysUJE|>)?n|}n;;1F z_a{Wd;{7<}kxM=~<&|6B_A=9;LZ+EZg%_19?-D*b>9pRdTONYoVTOJ*2Q1CSvCBR? z?X}x}JMOvbzB})|`~Lfl8KWY#$4}`33RI@-!pkwnTwVI;zd(Oti@2eFA0EH8e)eIP zd;dN7;fp^$-O?~KW*F&Gjpi=0wC3vc(Z~N@ivU>fqCu-~-~Z4C_;_leI{Mw8INk-bro35uYwj-PkjmkvtIQFU=P7r0uLy{5t6WkCOqK*F+vn{ zbu1US7|&_2c9mFNu!c57izRYsiTV&kU%u)f6kZ3sAri5OMm!=Clc>bp36F(Lp&C>q zff@j~YGhcsAr`a96&+f_P6X-5o;vs^W#9~jW;`Pr)2K!guCRfiQP=Ux^E~)zv5s|g z1Rn7?pE}V2X8Cag8C-`p@)5F-hCC!9>!vp+erP=8xf(3!Xvay`u|<9K;}1Q!#7%Ot zlb-w}D2Ld@zIjMhx{w4f+(*e(+A9>Y!PkrS6-Z#cuK!}Tyd^GksmopRvX{PO7-u-< zp*X6>eW8;iE0a0D`b^?wbkH9e_!EU7x`K=n3E>*Esm*P2bB!8_nwicNh+XKyeOWuk z6_u&Z>A|ufcmSm90%WX2(zBlSyeIf7w7^6}p>OI!-qo&>HE67}pr!LeGqK03nVn4| z$H6B=BP!8}Vs3#(2}27TxeHiaEuhRxhCxH>HI`kHYzpDtxG1X9m9i9{=95Ne(pNn3 z=mHiT4V^%>Ceodj3~aH?%SrnrPvbbQrA9p}QYkkS?_@L=lBj7%-A6K>Qnjb}JIMYV zA`vonv#VbHDp&)^87Ha=6dk>(t7ur&wZ@H=W3?78Zr`#jI4l^t&WWoETPFzp-Kc8z`$l$GppInhSjn#HAs&q#&C8bjXVc3m!RHx%Ta9i-G6-W4i!Fj@J2OT1y?m-m6 zUYn?YL)%p3NrJRCwJ?a+vRc+=kPfqDB33r zn?|y+F#a)FR@;b1l-RZWN^uZ_0Ssk0jTzf~Zbg7>vgvyDX?ydn$MAqW<$3g@QvNbn zhAd_x(_s-N#=|>P%s&BzQg&eWTAMLu(L}hRcsG_sj<2HFWcc{aZyqsgCEo~X}+;0 zrOu!M1&#@vO4IiF)IT2cnEg^mfF#rWHif+BUGIX!7>`3<#3G7J2Yz+1 zPd!maoG(W4Sxo}~ArF&!v)eH|I2GdXo_8$h-HTa_+`<+Yv&%ZoD^LqnKn^`Qj%rRT zpzA2*8U{_X9lqmw_W}Sk7dnDD0f1}YyxV;|uN#29VhXnx>L!Y4V3+||D1`GvcrXRp z>HTy7Oxx?x#rJ~sP3Ehcfec&N0u;88ifQ2N;0AO1o9N~D3;k8)fxttKY zD#Su8TwqmQn%QX+8+_Z1`a-Lc_MB4Xtpe#UKz0sR0(83z76DI88AsoUb{6QTUg122=T#*40xWQi( z3yW>uiqIFi$d`*nLnLAbd}W4wNg^e>SXX$S+Gt{&IHIbZ&+v2~DWVzap`9j#pdHcz z9_Aq{bwVfXVOIQMxAmKm!9f_rUKqRr?LA@1%}MQeh3y4hj+k6mfQeYl&d`+{6#@e_ z>>nv|VA7!-HHx4su2cGrArkhH5~`Rphzole(j=lA+*D#YPNF4#h1XFEmAc4 zAOMbFypiC8s*K>H!5N{(i1t3k2$8}Ca&Y0w4;ng1NV`g zGzK3m#GFQMWJYr2B*9`g^{%M8CafR*Zo}5f!4mLxE zfQI+UW7?TQ36h{sLQg56g(EDVBlP1S_L><&0U2Ok-$A5-$V$W{B*7`k{GKUD!YYDgEYw<9cFkCxg(GmnCjbB@@Z%BkT2U5d7?8m$I3W$z$`LuG z?LlRjeE&r-#tSp%UlRqwL;~j7B^?NoU@{zLEI+Ld=3o$2xn18UN|ZaA=bM0{x-o+^^g?PL zo;(ufEDT{*;Nf+?=M6okcFyNNdZ!bHC;5!yekN5X#w2>4Pfe~|VB#bI44;E0Q-rc0 zeSX?yR^KA(XCrDTOrGaNSyVh8sM?k2DnV#uuAuwXC+6j6i*aaw!YFdEBYLW54{{|1 zk^d-;QqqZ9-GsKKW(FrPHl^4x5^OTo@5U{n~m!8;wOboS($Vv#=XXdu!-kJ_E|?cF?8 z*ni^b+N`9i1xB)^4;dI}MQVaYdZl3&Y8L&$9~^=pI$s2K=j=VIcov49N~)kxs=AHK z*p;FWYJ#n5LPlN!37#pa+7Kr6;Uxs3slJ~sj+&}6qKdd`o<{1PZice;An@I)CR_pl z=<1oSLYX#buaeFl?xCoPs`D-CEIF$6i6g5rtFpdohDH=TLhJ8IYqbKvnf3y=YV6l0^~w#1Z#L`?@bzM6m*XF%_2#Ec$N8 z>agAYYbszw8541Vh_O$gMH!zlis6AE0G|tY1qDy>8>h_M4w>`CDH(7<9jEHgnrbGEF&XTs)d#wSS`2n!dhkhb^r2ZcCI$Ja1)QRDA2+y z@N-rG11(taH^)ghH*)v(W-ABqz-scrvIRVg7bZXSEgS4|qJk$&Y$&fSSBQc@4|J_` zf(_&EzQVylLo(iBW_FO;W>#|031drRDV8RzJj*mpzw`}7bXjaN4bpQop;;f{b2odl zN5@M@Z!f==q#c(rHIIc|YQ;3~aa<~7F4fUf`>{2b+@Jm_MrYi#@~T#F^ib1ECfu(L z8+G@V#`RYPb;%SpxUTZ!sx{K8 zG|@R_IwPY_Q|Sd2Cs+{UP6L2mcW#+s96!!4SOfN~2>-Un!YL#(s$owp$C0N1?<2J46Heo;V-5EATOs*O#w{gpLP*l*O&9%xhH%8E;USsqm zJRoMHLMM1a6r(~%V>g^=_c(`kE0;_7B9b|dFOgmlC2og+V4Y-2V*!lEaH zLMV&^BIEa)gf#x{HXMX@$O7zu2r&@r{y8mp_*ic=kcUR%Hii0T`^wA1ZH-t<0 zC|vi9r$|}-l;> z0wiQbr~7#y0s_UoDSpi}Pag2m6cU2%&=W=TVz!Z{p-GM&HpwMDU}r-&gKf~bnR zSuZmgEP;0~0~eDx8Sk;zRpAdaH9?l~YlCU8Nja5Yx+g4VuA9goh`PS!uj;;@zvkT? zGlN^BdRKkLk{8?1nEPEjjikf*B{{gA!~ggwRQt7?NFfx0wi7M)l60vDI}ZS`z&ds^ zO14rK{FO>JLlfuj{oI>F`>f0MY{Q}j&%3qPyL)K2qHZ{M3;SC8H)6x`z#F{CFA+<} zbjWE$#yq(TKKu&4xF|$1y<5C(L_${xw*C^fssH;23w%zS{K)@2?HuP>D5c6je5J?x z%j3Gt*T$!Fg?u#X;JZ_I#d<>0k3uRe{iXu|Bs@Kw zvH@>%w{IWzLZ=1L&;3-QMPmb&x6u(fL?EU{n2*^|2ML-Io2;PSO91u{ah?a z-=|rA%iDRyMsX^n0_S@^ZE(6sbGettY1G@@zdPzV*Ph)sKJqhcPA}!ct5?e9V(hcL zgG+o?Ozn21`D=qj0`0AH%>Z`t@muDg2ZM#Rmv`>2{ zaC9k@f-AT}_Q%F20K}(500p@;X-E15*}enO_SCPV@8b|Id=5;5oEK1 zBT1GFc@kwxl`C1cbh)x*Op+pB)DIM-7jInvb7kiB z`xkIv!Gj4GHcWWwVa0;mGLt4P)|N0^$lxIZw9e2*Mm>oV<*C%GS6NAyHhmg(YSpW~ zenqJ8%h<9J(^|B7J0w(^xOw;X{TsJ#0Kj?Uj5WFEPdb^2Ztm3ibE#6RsaLmt9eZ|} zt^b6r!%#MtC1@$yZuU4@diCqsw|D;@e*9=M<=3}=AAf%R`}y~Gztq0~?ZarAW^zKV zvde&4q&dz!6GgiSC7h7L3QOwhkV60gq&wIgf{46VESiSI5=}f2#S~Rsk;Q4GY7xd5 zWt@@58g0DM#uov=k^jdS4LmN4MIlX88fK_LC5#{weDf0LJV|8~(DWRY)KXWIl0)yn!;-c_ zFFH?}Nh6I()>>`7)lmR(<&VH05p;7oA~AVxlu)NL71?B!eF~Bc2lDPaHoEvQA|bep zmBd4Ltq*|p=-U?DaK%+m*Yvs__q}YHIgql-l*#s54t$%IPbh8=$R%cn@(aYu+}B+#Pc%yO60OXT$gWB^3dm*kT1%mjc9 z|Als;vEbmz;8LVn1|x0JW$#>bX}y`}o*6CI=k{uLj7=dIj28e;iWSx5rk$>^*?(7N zS+#)Tho9wdVO3duAHM%rYqv7qelcbkE_UXFqUX5RZqz0I3 zR%0H~(4ZCFS@6OQj}Pd>PXv-DU>9M|V@wEo?$}iBy&Ln)uku%FmcN+xp=!5KYnjI2 zO1m(E_=*Yj)?I&{Y_wr7%=Da~*x09zF_D}zx;6hDc&YBVjX|hm+LdXh=h+)G!*-P{uSc6~K21r4f;f8vvw( zLL+LfD+F0#Y*@7g9&8~M>B&~C3YW9_5Dte~3>wg^=(8!ZYlK1E-4LZy3QrsnjZf=J zAv)w8CeB78P@EvFviL16-jQdCGh7IFVl?oHv4BMMT^b3guYV1XWmgK_-@Ft!9O@B| zk^j7vt_Y$yL$S?=oN9z8j3mfHe$tSgQ`H-l_rxehqh?eToE7aTNmt^Ei+eoJx{AiJ z0WM-Qk^|)~@zs^#O)V@8>B3md630|LW{P!G$}5>!D@xL^M9sLA_iPC-Tym0=ohTwN zxk)Oi*}-!UTtdv6!3@*Q&M;s@=Q`Qh&a)}yo$k!b_NXC3TLy(eo+8LLyV=h>?agyl zqYV_(L%|QGXetL)=t4~tm5DJlng)_)Ed}^Cj}6hE8C?>e{s7QX28t}>+*14?dZL6@ ztfVRJUz$(~QSMO_4tM|xKEoGC6KWKv*hyl_0O8SKexZHEoJcClnZ1|fGiQpHNPyn<6JfCxj)qnuSxSUg-cG-(usQR>chSe^$vnNzF(+ORc@Qh`Z zYiSUHh(g>|lmc7TpbUnv$EebVbA6h*XjrLwPNrQy1fpAs2mnr;5u<{Y>{QNIJmYG4kw`5r<$RKFOnfb#a#D`u13wb1>VVYbG zd_0hzxIFU9FO-?|(3T!FBRE0Dg)zLG%+#SMf#fHY={2(0-nI?jVaUMb+hY|&l*>zc z=!+%FLzuEQAw#J#T=Se>Imm$xx!v)6e+yU{7MeoD)yS9|H)B8i!4HPm@ROk|fVdL7iZrrO-M_116Ewv@j*3R_^g6)&g6BSF)REFyyYd8^F+n|p2 z`UKX#Qp(ZCzz%M@QxnNl+U~eNsY9k0v1E@mo8CFy5CcOkhh6U&E$~hykek_XhmUJ$ zIT819&1~*V{9!Ym4ER(zr)x#;_G+d~@sA%~a+9CDJ`vZ+QvqG>Odn#|aa;4oHTq5I zW_8CvNDG63;ccJ)9Oyw8I<}iPjZ00Ozxw94zXxq=nrGAw9%o;5uXY0{TD#{%*ZS7E z-gU2Igr2o5b3!bR@!dK7>HUnl!E;M>A>aUtzjidr>0bATNB?u0ni_k#Vg83@pM8*N z*QnG2AmpsHm`?0y~hx!3*ff1}zm2TR#z#{}A4zsp2_LH1qnyhxuI zzlE0``q8i9>2FtQKx5hvFt73OTVH%$%ApOiPd*m{#aY{I0>c9{f1mgg10{?eucn&T6E-+9s5G|HKW}+d# za!?0%kOzGP7%rvyFzj8rLj^65`&!Ti!LJQsFaQN`Jb(c15D(QpPz0;c3LOO_qJd^g zkm8oZ5K!>qj4=O@@ROF%48yMp$wEA|Bnk_P6F<>D z3gqbY?p^%g5w*`K;^rtQ5ru}w55=$Z=ji?yS@c%kb`3x@#6DAkS z(HzfFVRn(_7Qz?vaQldF8-J%8y)gj8aR9CE2JZ|V_mLm_(SK5n8gHi;%k39eFJvMs z9*OY|&hQwOaT!g?JUTHNClU@Rs16;19bGQ_mhDM|F(EUj8~;xR?UDJajTu18{ZdjT zS5mar<{}?ZBegF>;PE3f=L|&>`Rs83d4LG=@eL^wC_OO?aquNuX2~KjLmt5+Yw~IM z@2bqO48Y(52d27o&IUbj?t)S)tI#3^vJv5c@4Djtb|;XSQX!X6B)<_5X>bE&W(u=% zE8{Zy)Y1CbamkpDAokEK?dF&EV0hB<8~p_?*K5>vhcV-OQ6sOiz>TV5;Q|oG|dL=ey|!Hlk6_;{s@BEC=+=8@-owK06Ehq z6VWzr6E~el%o?+0z_Q$maCchMH8tlB03a>@u<%3*3Jb7wvMx8D6FQ?4Bo+}0h@dWg zvpaxs!-n&B(y}3wb2D+k2I0aP6Vp6LFAJB!c9tODd=ne>kUN1V2LBH^0}%-BvoPZg zF3*!c9WFhmK^35YJ-;$6#B%%eGCrN=1uaq3>M;ZFQ#?t^k@}NDOAhbGY(Rw&I}Ma9 zCo@5trWhF%0F|!@W-~(Nu0m7P;s1;c6|7|m8nHkxtq~p}6+cvSUU5XbphT53LK9EB zMiWSbR7mFu7~%pl1hhTd5k74cb6zngNmM-UlQzvmI;+%5ue1R(v^SMh0-3aK=J7jq z)I>S(t14_r&lFA1v@POKCy1b3xBw>aa!I{ZK^M{+)lx@y^lG3`2s-d2KQm1ORZv$l zysGm}zkw6J@SN~`7SAq4PpzA6BFI6Fx3y2`(PV`R?Q$@?QaMUs13N%qW z5?k}-kSvo}!JrBAR5Pz8LPt(k^HpEBj#IC*9YwWWn- zP1W-vah2@W^?U+WUj|kx>(O92i#A8jA3qjkL$)g$2Uj-~Lo%d*Jk(-IWnha{88=p> z#Ipl&a6--1W{a&vMzK8;EjvY3GFLWVFcwk|HfFEV$3nclcTg1F-}c$e3~5M1j>3Rs zkR(WkAvz#gq67&_R3zsd2LuEp=bWQtkfb0WK|qp#l9M2kB*X07_b)xqv%BxszFW0Z z^Iun=KBv2@`a0M7p6f$}@t+xXT%P|7=as&La~Tgut*E!Y zf&T;hLnYfgZfbT3CN26eJ&PS`U5}rQ+UR+_I9?ZeUQ3vFf^SE@dz$>}>VYr1?5l(E z=1a|H%dHvRl4koyjb`2m>*1+aOw=y^U?)!x%QY$h-s|+J`1u`S9q(lv_9pSW25t{q z*rNI1PfvKhnTvB$+21$Ne9&Ugl;k`_F`YEy@yY<#Q~MFNr#t?cjcMxhZvfFaTyLw% z_4y2uvw?T2L4Lc7=lyq!ag#>tR9^QW_r3+eQPdX|9vsh8yhj=>J{tI0*!aesc*`cc zW1KyW|rft$4gm5{oBVJEQY4(>RdcDn&^mG|BWVd zA}YLb7WrT~+RfPjhqQo0PwBH3ms0BRbk-nzmLR64@N^PfA0Y=hnkeS|>39m|&QMFP z*2pF+FZ>kW1ih{O>46u9uN_*qFq;Zx-6QWqq6=vxTa)ddHsb}sO~MiK(qd6dh6rR4 zZ2&9;ENYOO7L)qSt4+iz__KM`Y4kT5zO>YM0`bryyOG64yWJoKfSIdS6K6j0lcQkwb&DRARgqYC=6j<@>?>;Mxe4+pzllqn`?~b zg)n=%A&-$7QJV8r5(AM@TI4r1s9u7g(A|zg&1b(-oG*k0X1uU2QqlLB)1tm*)P7Tr zxp+P8o*p=x&i2f;1Bf+9&!8WQeM+0XrVzJ7qcSl3nC+ZIEG)g-TV5yK?5kM3jXqO- zdhQjbHgt2Y@g%!kBnNGtl$oB>z>N@ETZDsnm&jgVuWc@H%_~a$fb*5OW|-D(bzKKkJNk;eO#{~TrH62Dlzsf*Io<3$}9gO zrg``+|7yya<4N^J3YOIh?ug}kh-jf`UuCzC$R~-6a0IT~zAO5bKzbEj-Lz3$@IhMl zsp#8DqrFRs2LYC*3vV%9GUMn42wI@_1BUrbDzQ0jOrh)5#q0wIJXC-nwJ*( z=)7ruXONle+fOSTTx{Twm%MiiKW^x4CsMp3EJ>?Ed)+Thm%?faj?8SuSGeo7jSHdk zF*<85|5)N}Y{gIe?y+yK(L#Hwr>&V}vmhN|e{)Ud6?aaim+w{Lahpz=MBUc~qOCN# zxAg99neNZ&-c!=~Vj;riGTzf?guXHCypsGegWZro>+gRGTlejHWaWi@?oVLY{d`7C zZN9tGC$7|jJPaNZN5}qgvYF&sct5j|D23o4-8l+Q-WZPw45I57Z1T`zZsYQ_Wd7PC z&cGv;Wl!s;S^BN7x24rHYvA{)MY%IrG@|2z_|tQS-U*<4NU~3`4ZI}u;VP5(`+~oa zl+WwMLCv*~k91WF+co_g2f7(X6k2GrR>*k$5Rr?XwG1Nf7Q?^zSfek8z{aM0{U1a> z)eXlgJTMupw8RgjDKcse67h=tbHTCZR~G3)C*0d9$lz1ym(=b1C6lGfK&+iVeHdT5 zjOZp5{kDIAtA^V0xMI-=jz!Ai&wXhUgnl26{e9G%IPmG687tEno9r2f?=!FN%(|M+ zdS=i1exD7zGZ$()M_Z@FZ_<-3=J@;bR3S@H>Uc?S4-{P>9?P7WJYoD*^HNp>3mO(A zJ!Hu&P>E=G6Pen{t(+N7?ipH4r&QZnF?*py)%h&pju2_aVyGB*p>(@CeMGR)$=uEO zRn=U_ol$)1&cQp}pt&FUrt{3Y6>L}SOgZr%3EQN{%{tV>R#P4{=o%0FR{p3bCvi$;bWBkWA`KVZOV#Hh#x*T zV@&tzgl5`LQyHQfM#9gCO@g#dXQ>^^^WEQ!>cgI4Xl%2M;nA%D|6j>0D^Wk{&*tAp z(QT14d6K3t3^Q&RvyTmGkW4Zr?wYPe=8P&hW?U>R)k{zFX8gYQW2-~{7x*bVj_k3! z<8d(E2T7(VeqF?O;f)r$UrZO|&>tsOmTOD5i^G>K#q-05X6Kl-dWi0F7ktdR&6eCBaC2-fDwC$nrWeYPeNd-B=1}yftL}}OIdA)##4v!ar&stoKLv|!30AuzsW<8AW9?)ryv-{dv@tDPx!+z+!=_exmI3%J!Ta0if46{X zAJg;Cv|~3*$@l2-yv?pYf`C;tj3xipooVx7$0vW;*uo54Jkvu;Cc8o@7KRTu)vUY# zX7B|yKbLON76FY8@2d)#aD(!)Ru<8w-`?#om}uwlT7HzoTt>Y8)_ti2GYs|2QvZzc z38oth_tiHNS4&Ti9)idmyKf&_M!)oFG;Zz141-5+Co=Fn)QyyWiFt8Jb-5c3mp*$u zjX6C$p$U(M8gq$02LsH#c!p*6c__p`OYGK4;?u6I-T>YBa68^9rVq=bm^B+(v2WxX$-i%SM58R<-~N)+^OV%XJo5{* z=3hNbj%>a2u_-sxv*Pwqh*z$p9%g`t>1d-R^j9NOmx4oC#hPUC+ucB}7d}B~o;wxO zol7_9WI>$4`xF`pOt<7sx5@JFA1}TCM_+s6=wfe}-CkI(JuSz)3w@Hun#L7PFgDCk zznrvs-j?NexpWrXrpmv6ZIJcI_z!(o@(okAgEDQ=3Pt!j&>Fm-&{YJZot^|15ikPFXUsH`S{KULO51y4Kwcny+8@g~?KVfcvTmV>7 z>#x=YH=Dj(j}^}5VP5ZS7CrBaH;3eS>p^tmOgC0~ky&zN?WTAN(muxE=hRKNZ>2JV z&1=uv@%k7$Fk_n#4lZ9IgUf4mbs}hua&~38fr1!>z*DFPmyY5?QaGV^`~~YhmZm5Q zo+s~7f`y-A863eSB5xr0@x$bj`e$r*pyDCkCrx%k?fwL_ z)kSTt9Mi?GXRBB{yss{A2*m1^d&3CmWfrL^O#4yjtsEj=q|W+KBG2PEUi>$3sT9el zW5c2+rVY+RAMn@6*s0T<=7OrD?t4sqYjjxXij{0}EO}f`wr2@rmX9EEUTzg!>nEV) z%c!-jDeyj~;4AAunSBqBqTp!l5X%qgINx7ydCTvdd`8)ye1b zdHS;q+Mi{X5q6v9mR;u|1ZM353RV2{=>mJMS)gXe5nFbTKfV&_gD{8!}; zWAs}YFMsUrq}z`Tvv)gm*=^+qBu16>U^Bg_EAZO)w(YvPBoNGSUfq4wN&1xG)%zi~ z(!)>uFZ^}~SblTw4!qA$dsp}IwBqRVK-YUTctrHNhnHk*e{hZLYZv4(^&C`uomt{W z&~ZYUDc0>}r?$wn-UnvkK7EM;gnP;_m#C)qwZjRYWBcaft3;yu zIrHvLkvX&OZ1+_DxmeE`_a%SPx}lX{Lc_r%`#dC~G;v-lk^GM5?<8a#UDqX!S_{Yc z4o9$^=051-w#ZZ4p_ohdHn(LU%~^zZ86vKqq2-156stdg~c)gFW|@|>MK zJ8+eqLRuedKzO`*34WSm(^f72en2C=v9k=}*XqSPE0)r|AP(b!JjNBB>s{#8ihxa# zK?FH_@g{8wNi(o&|CMp+gqx7Iv5TJDw^IpH|X(<#*D~ zf_K_6z7e|pipjB8uZ@Ee*N}`1ME7a7yTxg;g2Jh3wtv9AlDe+LPcr9+g>r`zG*3>EoqxaLK-Qg=+EL$JI}!%7`g5rKW#s1=49%p58Cr zFt+73`lf}_n2M5L{(L_hjc3sE$-Ty8<%801dxPw6?zNs9v`xC9!#%5H#Ix;74@r0; zrJrfP=6G3UrII>nb&A9DS=d~kf~6_EYPclRbj`X`sHrAIudxWbQueLAo??YZ#bc3t zd(+*q(hBlyZBy3A>2!mY$|9A@Z1#3d^V2m)=JrC^)f%zJCU6RiN zaRf0S#gex6aY&UGek`s%40*}>*qu$WL8>MZRuJ(CZs0j6 zue|0K>G!Oo#Cd2dd*3^k!B8wo`?Kz+rA^{TjTwL?$)7vr0o{bw?D@>@=5-+{@n&3RsBBPE+U;LI*;?di8|T|zqe`QE!i zrh8c<&MS6_UC&9`v)fX;guiC!m++OI?`XMB6&_ZHGHO)g^0~Ibf)Egv4}`mhyCvO# zKm%ejYx8rCAddnKsK~R5@{Z!mIahX%yf?9X6g&%kLyjIfQFlae6^!SwZ$;{=V_&Y+ z87*`)@A;(K8L2p+C0vufyU`9;+i}m5Ozo8nS;$7)E0jH{SA5&l`THj6K_eDWz83YW zs;51bZhW?rueFyX?jTH*W@XBw`6Cmtvkg<${6}lA5B!c!$WVII?ETgOS>hv&r_a|} z`NfCiOmQ<>tv8-J#ooDfdYd-8J|&he+Vv{#xCC!}X@K{bIwo%?*vfBPv0JSF4e_t& zhkiRA#3964GHZ5^?(8Vl`b>0mI^TC(T)4y3R-#UPTKC$2@7^nMN`rvY#%}sek(HtH zEmM^Iy5GJVt}5N6fOW+|7Po%h=QcC@upR=l15-d^-2Wa!C6A1~mVrclHsi~ZHKRT) zYUinPGbeimvpF=**7bO-)8Py1{8{5K?KAftolceJ5SiO_?hc#9&vwiF;;F^wU(mue z`x)@d2SALTIYml3we9!u%K-ak5jjbZ;JniJhcX4uw;u%_DB#KesbuonHAY{~2ezL^ z_K@%TF72q*1)PU2yPXs=^-1FkYQA3zIE}Ox?x#0DnPkr|as%XG0kg9X zOEy6euOK-Ae*&aegn<{yb`YtTV?~P(`+yIHn1@E9FWulH_aNW)fky{_v`>odyFGEG zvGC8H`|%ihTCUSKSzGh=d#a5?L~KKY2Ow&&P(i~`@wCujgHUAv5ZewF7lWw5DXyt0 z0Na4y)R?d&SkRtL;A3QRY%B z4UktphFwRfx!O_!2iR`5lvOs7zJ?yPvp9oOk@vP(FWGTj#&I-`SYK+PUfZHtZOAn& zaajgY35KXTIUT^cCvE&|&O?>8B5G`-Cv2mwKY7}7 zDhqChaEn9^M@D|%j`b2lU3#EUoN*hRaS5onZA0>yL6pg4h)L3&^w7vj3 z+P>_~B%Z$%bF6%8keY2wb8CPWGXAGcxSU|%zGpn1T|A^b=I20=d26(&SlB}+$aUEp zdOPe_+YwS{2}@#;*C{wHo7jU%I5OHeY*A{cb5^MpY&(HCS1->!PFxKT@Syx{3=KUq zHlB>&tAp04V`S24iKjqo=tHtFh2SugvM}k1cnuo8BkCY*J8vTWK)@@InjUp~fG?2fjvSjpJwcQu~cXWqSr?t0mwAu$*))XnH(!#V&29JZCrR zDMt_a{zVS3oO8^TEA4#eKqXgd1$4-jyVRR|t&)3iL4H0&F)2rJWyG@A#)^gYKXK)~ z|If^l|NrQ<(;=USTWX)a_WBEAl~zZUYxN1QO2;eK_XgmdGWrCILlOX zA*KOj5ZM7=QIs7_CoOZp6>S7G^Gvo z7uONdWr48i5aeaYau}p=(6P;{n>@H=BSS{5L=^FZ;CB^X7POQ+4AZ#KdK&?y9lYm{ zV>etj8cR1=UR6Ukn777;2BlOsXJsHGzI=mldI5wY+j{SxsC+LFmHx?@ZpP@amwI3Q zCr&7~N=AA{FkJhmV(^JkMLw>2OGQL;O2%MP^8=3fgk}wn@#k2^$Dvv2}n$lr;QLVv>ECdP^$WIJl zs9nSz0*X)7z+%PG05ACRP>!D@jPdi?d=xC-VEV=5x{#XP-(Q4DbyV1JxIQ4|qSyPN zKqf^I6ez`WQ{@Mwz7Kx|{UK|bDs`)lp3!=IGd}g$il}GWDDx&>2w=5}pR)u5>OzhR z_qF()7o=grFJFf-q{pbv>K=XiXm@Tf4hHn?X!ja;z}kqJh` zZsY_ylHH%6U?tL+ND7D-F6Cg8(0JRzsJ;uC`0(mW!d6X(AI(|E)$g8`2W9Ogl#kU8 z26yAG5PclKuaEsVuEb8J402~rIx*2Dr;D0>_q^F7mTu0ee?7Xr*e9`+<%fybK_U1DL3k&4jf5#ZI1&de5Z^oq#~dt@HXeg3 zhs!~%!9*ILJjqQI3JMD9h<#u}XZAnv4e$_q^;+D-zRb@MoF9vYt0Kaksflx4dhg5> z}IrmAQ3iqvJDG0<1h-t!!dC)R6>gaQvxlC9pHlQ-*l5w21tyU^AJ2d9eew=*}Q!2Hk^2KNVIEOg_AA=}F ze+f|Cr2TYIitr>G5B>{R{(N|b?DM$&?J6~pXR5%VIuZTkq=07B)=mrnNNrCF$?|(} zRkC^z>nT)9C9u{q2fE zp8kz1{}06K!D+2?H6CLf9EaCwM(O`VubrQ1KW(aut$ty%TOfrND};{>+F2775ZV!f z)UETXogyDCuF{>g4yxDKhjtjFMv#)$s2aD@N8f)wIcuLAt?_6X{=V;X*0D@f>oxG` z#}SSJVefRTVy1)gM*CUkL2Rwx*6zGq>uSZG5}yCr@Y3z&S$74c;-kO}_Lyr>d-eSRwyo z^XcHa{SV;${*2dZ+xzXD#4ws3FqKmfYy^uSOid|Hr59yhR6xS-p~Sr!6fVOMOJN9C z;xGb(vFqTJ@i;+6v%C>tWDs49*b~mpWvGGqB~eNMjA|7zC=`3Ro_X4$3i(^Wb1>^$?QbVL@0Cp?Ihc65;qBFspfJA*~67%pB{k;z1BD zkVgXdIQ7NG3R(bN!s$|9m0@Clm638`f@pI^2*r3Xj+8kuR4WKVl?MRk%K(j`Fu(#2 z!Zn9Opo15DYyyC~YS0GXQ-!pfY%rEE0)%VWGeJEbnQnu?f^CCGZTJ9+q-B6I=(7Jl zqs!V8D1f9I%$4Qae%CDujj8iu(isoJmIAPGVJ(pMt{^;^3vka60e-<4M9T1eR^>nf z8(6|DGzO7+^J8Iyv_Ow6dY6zWRxT5bXc%FS1sf+8gbE&lh3cWrc_jxSUY@{G1g0H5 zUq#)#H#=>XJ{{_p=hl~rWK9BovT60SRcC<$jrRdg*!y0#yi1%B3u1WP6__|ar1lL0 zAD1SeZ`M3w`1RBYP$q^3gq#M`-*o+m(^SHT#Dfy~Wg!l5$^A$k^XmW;cuOwY`Km4e zpS2gqqXh>F!$QHmRhC~(E_**X0EmL{?rC9Z!mtPga5K+<{2(lF4~P>E&X?0K-7N)UKog zINR>tH1Xi7Ey67-LS`pG8*mSO=+33(EGp_KScWMY0NJC$LXcJsr5;TKW+TZqvSP;b z6L!MraqaaPJDFweA^{wMc(8R4L|_^0pGU(vj_Uve-!rGZrv-Wv4?+SjIALJ_ac$}W zD@&&+3jmBX$GN8kwps=Y)H!g*gH*;rGH@*TIBw+>$o~K*Ulb>+8P%s`N$QTGo`H_o znoNXazj6}(zGc)}ALHC(^?jSg|G?Jz07qQk*k9nelt+xV08R`Hw~8Id8)mwMjN9Ib zGZer*Jj3ZL0|@E>+B!TF59hCjCS$E0O!=B3&%;7n8zEs?j}wBP!T!c5|TequzLrbID@S(5%% zJjz^RDBh3#;aQ{w7{e^N2pyqJf*T~Mwk0u(;-SftMg@r4N#9BvCF^@9!!}t6!jmRG zB$-_#pKKUejz^n#!;%E>{Fib4>QY{OOL4qNaiUFi5l?k9O7-ymn_1G9>i6w0W{H1Y z^7C@>Nr-f=YZ}R+#3PG%o(FF75=~>^>b1u^JXfq1LGm4Bd5-*ZM z(=#gCGOE61V3;MybdI`m4F(WvLzG5-A_0Phpv6d|6^_pw!r0N1`F1LExsRElfS?_Y z-_b+xiB?0oAnSK<{1+~b11#wK9knd2Y@A-^--2)ek-dl>QlDaleG|`F)y>+**Vt&w zS%T#3)8-zD=bjk-%`EYzh>QPk%o50xJRF}qymrN+x?KGEJmSkd7+pS@L_WD34p=!~ zrV(2)EMMsa%FwP@evmH*!KP9b*JCS~u7_3z74Xg%@Ld)N&=m^#WZnN4v*chMUqV$* zYQB){1Ro($r1+#r*{2AZQKZ^lq&8oqaap8A_cyboLg)QNj^6(jv&7n`#5SYEzP;qd ze2L>_i4$F^i$tm0lTwfW!Yny|h8MA18X{2^_M|Mrrwo-*7JW&FLf4hWU6%cuS(4&Y zo|aLb(O#Z4U!HSWo<~2Dq@u*9;-Act`HGs$iaNT=cM_G2Pb!;zDqAxu+uJLJ z6QInWE1w)f8KG51+R$P|mEKC_V0%^jT4nY){s>+5q(t@9lj<3t>bZ>S`F}7=E~}U6 zYQisZSD(~u`qXS^)ckC(*_*G~zpOc+t3CP`v*bLZ_OiY9dLE+?YXSN?kYpXixb7d! z5@<&q;X)npRUM4J9s?txFs`Tat*5~tLOSXh7XAyf#P}V%?>o-ScibKCco*LBUA+^a zZxE7f5H@aj;QcqVM53cXYN0{qssTaYC@qN!X@>E18?98(F`i@iiX}o%PDlD-W3n0-Vy(hrP5F`nknY` zb8)Dl^h+)x6nY1PRQ@Dl6~m1|D(@hSH3~6E<)(_ik;>mcH(`*7yLAHX%js zH&}`|0?!*ZzT_!fP06R)SWlEauJqV#+s>G-vl<>7oZF=@%(LG8VLBD{YXL9=W3%BU zvF5b@tk@X67I2F2R)e~zs@2>p3yCCh80+jf`@P(dfv&Hp^f^C9P!>KEHzm|FNp!+a z%=PQ^&v2OH)FUA$NMuD@Foy?0h&lT;tz&S5=z*B6h!9fstq6Fq8a3(>HAvtoyzd3) zlE9IF88hEq9HEi$BdqvUe_rLHPc+xqr%N%oEY5ja`}nLlp=9c1`3TB(MN3B>GTn6) zTM6gVy`Ux@2oBhFa=uhaABq_)GEfphHE?SwH6}QHqK$8!L14TDzCUH zw&c`USU0kxkWp+NY8K_N+WP+0IddK~!SHqYBfE4qAZiLtwp;b?vyW-s`*5Sj#476mf((RZJf5bg zt{R^UQR3F3airO`WkIsK*fk;{WH^nJmc!;Wb&M5UDXC^|7CCj%70fA{CBCqC%Jn?) z9rdf+wJOP+E->alWV$LErNB79+)V{bJogP1A%Y)(#W;Py{UbEQMQ}y$EZ>Pxt3$vD zre62J{v^f>;IQ2t9~ehT9U<5qqy)7;G2DGD$F5-Y zrXfR3F^ZH#FKSIFZ&ls5oK$ob1}67Rj;9S5w(K!T<<5+ba?<+^v(J`VMC5Ezt54_M z`+2nHUku#yG(HTGKKt&qrM~5f{DZDOTOyx^o-c<{JD#tgIJ%|+qlZg|7X1y`!y94^ z9K8d>FD0}DMosoFwwS(oac<S--7pI55hRr@}UNUAE??7!UbaT32l%c>E;h2 z#76RoDUaUWxjcwOuto`@b4dGG_||EZ)e6W`&tdukhfyt$BZL3}5zZ%v(S{=hR4piZ zC;*3;ELvdWt!4_Wj#Gl~7ZQ<|eWK?k0z%U?=xxqFiO(O#dHsb{_7X8aIQ(x&Wwjy} zY7A1@#}Vcf!^*mbRFTs?N=$+DxIHKz(r}q{({z1?bE7q&6fLJtwXP^oWQa6BPq4?7 z$a5>H$W^{{k{HP==9?BBHk~|3?&8hq^a3$A2*|^)2{xb7^r~g`k@0cD!{3>`i{RvZ z99WJ5U*cf8o97Jw?1H15H4$l+7#<5U`Xp4dL#YUP9us0gC)q88n@wmg6oRMBhs}a+ z@^&o7rsN8K*p&_i7~nWyZv>cbHHK5|I1924eudu zy{nI}^)u1oZ(}~E4I{=Jwv{eL6LBQed4u701F6hY6&}=;H$S3WNKxx(B&hiv>euOZ z;p?e=d8)SL@1pKk@rZRyK$qS<=WZKgvu%C~pJGjWY_i1-d(AeGbB%ka!S`SG{GvZL z7(G5>W}_Kr@3+-!ePp*H|NLt<`e^BL{;cbKwDw$V1^)&!8^uIF2H~nLgXqtD@HFZ| zIOd}Dc`>umxVkV7wH4^&Fk`B*x(Lyc72?`r3dSyalmc&yM*Mjnr$&9W!N@9A$9ca% zTz!m<+8W)$`KO7GV4&yq8spXZ0D|~ke5Bes3;o3)QsZ4>YD|ujzy$`%_b#baZG+qR z;%spzGLYWsMwi*o?FU2-RIxf(oPH_!cTWVVp3m2G$u7;em zku904i!VXMjd{50+w%06<0y^B0_xFiWy#Bl__)R*4)q;Xo#RdzSQ9 zbAuYq?@~witR=6$jmI@Nma6}t#I6)(_NU2N9CjE3h}M zeH7wGah#Ev zf{UnY8}l4H&bhkYLXfnNXTJ-}r@z@ob}!ex9XlzJyxCEE@BtPB{E>M4z3YEVSNy+m zx#yu6U7`KfYKj4)E6N{-HRWJ*g$}{ry5gRg8%9@{f5hmD6RK|wwqGkuhaXtYHao3- z&VJNVW16J9|MNS>cJvaI#Im2vDJ=!zfp`cwU_A8ej>A4^`H9jtlo@pa!i6`z{6W7Tz9 z!sXC6sY^jVvB4PkdMZqjjDSTDn@R`4X%Qy-myf+*YWpdGxQ#haF4zgVjB=^Y#|elL z2JVn@;`IR zEESP#xLhCbD#2XnL~VS)V3d0@Bp3AqR(8V46k?V`c^Zv_}dv5 zs^t0$Jk*5Btt%&l7eNRj5s0&7EMhIOlKd~{cNDpsQW-Bisra@=?nt?zrulrcver~; zfA@EH;ikTtAV6*MwA+MsBq<&$>X(oLV%|IGqbMxiD5tcks{i2OxObRSqI!Ke$eQ}% zXo$1)1z9Nf!sd%%UsCAti16#i)l^8^s^h5C+1~glu)cget|;kdou|Z6?Iw@J>pc0Y zdbJ}wrAtm!LZoNI{%-Qsc%&XN(mdPUissGB<{@ef4CZk_&FI{WqvW*BVnn*CsNUnH zPU;V^UGy*AuhEy)2Hp0ULZI%bc+d0IvQzVM_n3z@g@Xq3AnzIHK4$OcM6s@mE#EPa zCrdMHocQ*I{p81)j`Y{I2so%fiC9GGv54pT~6GxG3WWka1S@xvGZ*GSV?>bNYnFm+h_?)J;h0v>AE`k z_(#a#c(zv7xRP4;(as9#r(NL|*}f4F^Oq|IEP^r-Kd~{fK7()B0kJg}k9czKry%=UaBH$k$G_@u)@(7HX~p z#8g3OOd~!n00$AUJBB4R;$!21N^Ydfd7MX{smn9N)KN!CU}tP@1Fm>;LROM}i{dW4 z;5*iXM=7l%#eAMa!#5&@sXc@x0+A{smUPEygK8y0sY4^y636M|F(tyKDx>yKjx**) ztc9N!VO;J83qKlCuCBIp8L^O*_5a~=iw{tZHw3}AKT3b!LPwq#Ip;=@DsX>-0Lnn4 zKY_^?S(4A=5fUf)u-G!izg_M|nSkvrCDG3laXu%7a3ZdUU_m9adkRGc_=h)2~?Ir6q@tlY8HZzJIi&8+sDIMJ$ea>Cn`#bdX?ZI&}frqq~#&Q*Z_k0 z@wPK4kNaf>ALK~4>=Tg~xV*vud*EyRB~g|2^n(7^&oj;Kf2y5gD@}+tQEl`8a=HJh zD_(p?Y8&*@VRVIhmF0hNxp$hQ_0&$^rHxiu|5I1|?Q*}S)Qq1oFOk02Ba{Chm;2Ge zJbM1LxplPK(Q|m=hdqIqE#`{`&f3Of{}(Rz$Lkf64UDds9sY5O(G?q# z5WgE8)Wtt^MZiB@?*E}H{^fH2Q&$+Df1vrNuJAqoxUZ(fjZnkHYpha&xs;;3T~;ao zyRHx$tB>;>`KPXMnH=Z&kFFS5XP5lH(-r2#4QT`a(G{~Jn-4lJGXKBm3enLW4d2VJ zdBja+57mF_WL{2{X*5+BjQ-UBuew6wE@HX2`Y&B!aERSS++4>riVgHw%>BCe;BQ?q z`(_YS9@_A?uJCPB!21BJdHIz6Km`7uRcQe8(+7R}U#?0kg+=3VWi)C}^#8{P;Cw8T zMXnwDIaR>w^M8B*eE3+8h=bSPK7e+7fAk&9_uB5W*sE2fJH`hXt}tw{|A!Co_xHMa zZ)`0oPv9C#ByqqkKS)-pgHC=%I`!L%@C|KA+U|C> z@tED0L;PC@%5N{Lhx_*91N%hy%2&QCj*GCGnQz_+U6lL8TbiTvi<0`Sz=u8?3wd1P z$3cps)wY4eZstaP#nob8y3&yL$VAL^YGIR3i$Hi7y~xyo-n(D3a##41u;f)sr6+?Ilm38h{yK$**o1Wjp*s3-=J}JD-Xg68d?8l3Kz&xE zUbZ{eUZJ8Ml9Vs|!GoXgFgsDG%pE^-ab%MaA*&JK0O4HAyrk9wrC50iu7+S!Rldg+ zr_H0fJsooV=Q#95aG&ND``Mu%V$q7Pe21eKWTBUAv7 zb}M*e@<&16OxRu8kOLFVp2Xy6S$}AH-u*Kg0O|xv?Mb z#^&YUVAB!?K6$O)S!t+k{fs%jH5(a^yafQT&lN@T?NiX!n;Iuh2=$5~|u` zpPG4c!JYI{UW$GZmiuZu29}Fhd*&t=2Ffc#1n;2}TjaCVD_Z2*O|r<}49axI-^-iU zahGeB>iV;O`8mwqWBw1eLkG7gYqPw4B17|>Q7d84@Oi}{|4-1(ZuSU1$<9_!B0fbr zy~2lkq5#q33x_-$Y>=NqaF(GI(2pxWvX6_OGw#xkU|1`rl1vtniwjl0I90x5XWBk* zbSAD~h{vjQ0ifdgFZODG2Rwn~lK@mtY_$V+j0R=376|eEV0(_QGid|Za6}1LJ^je~ zKJ4q4Wl2LQTzJf)SiRmWU_X3CXo4q*NFXqQty%sOe2j}_E|z9eEtvRt@Q-4F^nTmH zUCz5mGQN;-TA62lINDEdfx3^3HJXH$%NA(#`C0cgks{2I69qrmz`4)r3|G0P1SfF9 zM6(8ol*#+PH<_epS z`|+`m5~qMF)`1xylZ#heKMY5`*C^*ZE;$hwio{j{ky)c4Txu?fKx+}JsF8|#d#(T8 z{iRFQPam&#YTYTlS8vk{m3V~(C0boWYw*aFc!^m|y_b}a4Q{~;yVp3RZmgzm|Lw$@rKDt3?gtBLYhAzC zwD*_?-4R~|L#dQECM{&f6@I3+ZnoWzrZ}%3epYyFbDf9~Qnw}p9!QlDCJ4YZR1=@! zQ{pMeT?}dBB)qf$_bA;xs)c(b1=4@d<$i+)7^Miq?kaH|sdB^2s8~avDI#NOw$;{2 zLo@iR3x&&RQ7}|Col*w3$f2}KUh<{eg`2t7QjdAsBb;X0=P#mlR z1Rq^E>(O46Bj@rCh0tWuJlSiNusu~we)uOOtL`_#91YF$X@o#imU8GDskcMAB^g|q zhBt*1jhA{T*d#n;WJ{-$+qf0&*MMQ`@w{g&=w@JL#`Q{GmkaiVsmUn5b?IEcNOBm8 zvCL0A;>mTx4w32M>udkoX?sB^32V_O#TSr9(UW0)Bg6rfweTXzo_0)ysgZjpuCX%@ zr#C59rMzl|7a5F3J#=?*E&sV!<=10V{{&AzbUQU3=Lf%{ewp#-=?a!^ zB~E7od6Ok5r1e1-GfI@ug!TLZE<4rWtME)1Rf8eM-P&dwjttwHp}}{I4RPP1#^&8i z%a>%wBU=<$XCW7dA(4s{AkuIFSX*lp(uE?4;W;;l_j?0kMVf+eJr z!4I-te8KyeKCGlq&7fH*NXV2I{=8g zwBsJ9wXUOkj!bLwLsWP^<5n=2`$%}dU_=`M*)OQCGD2jRNMutwHe`yPc?v!#eA@Xc z_`vrE&QObDkp;|75e!U-d3_+^BMTvTwt}A;@sT9a>D>wa(lHgLszQS-l%tP!G=4Di zyE^55UnXZUnguoVo*>8?xGOMhh%+=ycAUzw=17*)re<=SIFcpBGi9!PKjH_WwSdAF zG8ZMRF*V&0Bb5+yF!IGpNG2jtepThmrD6%`QE1qo9W75nSyvagDuh$BzUV9G~)`2*R6}7wlcH8h+m#)TjM2Bzco6Sk-%IC90x) zXb&s!%sxz`MlRf!Z8OGah4unH!{VBkVTh)a=lH7Yva1)ti}Zi$x?|%`F1#{mQuDWc z{rA4qM1}BnRp?0<&HRzCq2}nt0i62xNtVD6^eud5Y9ux#7bY@9**|6D*UB$^wRd+t zk$bEc9nq;7P%~A3eOG*m9iJ>FsxWsw>bD#-dDX?)EIUDZo7yWI)OE_jQw-(O6>USN z^?~AA(JE8da&QaUE*f-Mgg?rmpK<0+EJpr#fZVQEKM7*eQ|w1sW_;)g`*Y&KGzY^j zqb#_u!l)l|KhpZwbC~9RU7^7cqIx>371NuCp;3_FE?mvTW3IO1(CA>xHI6WT3IaZ4 z;664Whjj5n__fqOz&$kP^>kBim4>0rL1nNl&+sQJWC=Ewyj$T5h4x1r`sNQKeDh_w zN+S3akv4dms@oCIw0);OFwKc_D?E(E6BIsuhWvmFuntC=Cs-=Y-4!Z@HRcg=91=vL z2h5CZA2!wt6N^Q>b@c{Ycwumb*!fYE9uad2D5ejtg3RHh&ZvS(FjxQvs*45$03ra$ zpLHor^@^Umk2ir;%ZZ_w!_rXUDxA^D!PrLTLfdyE#KpLw7z(=_Q4h>T9|@~zg;HvR zA^B1JvoLBKW+@a*7uz?%njDy-IFlE;ysyyN%6sGq00+RGAS@g#to*YWd_g<*gjk3i zR=Xk0*NYjM2J6M7D1L*@aKhlrg!l=s3O!-0a99kIjK~m1w}rBmCo;l|&g4Laip4)q zh@oa7A`yoj%=to`0Zi~QUFBr6Oa#ndcDA+D$&y24mg-%FBB_%L$QE_mp zrW9EWlO=%ap_pap#yS`WK476w_7z4%+(JmvmIT1DDB)NPV71U9UcPT{HLz$wt}eTU zAt{5r2PmjQY7${^JTM*&%X4OxOITcs#KuDEd<;`ZiYFn&spm{}w-ao1;=vY4NUm7i z-a9NoZ>j2Ip}ldyavInD#v?q{@9kRo$tlO7)K)1f#wJwuy zG@|~JocXr=)h!NC-UcHQCtZm0XrRrFwy-SoV(y4a2Fqmtb#dU{6e3bA7^YYY4&wz< z@dSxJQjsdp-etwlBMrW9tepaAWsKIxRB^(3>|h*G0A_1LiW7`X3jjGMR(d7s+L7L` zcxxNQ{xKq9H%yE{m23@<+|wP_?ZtfG9(ET1CIyl~6S#y=U|3qPeth6Af+#Bub_YRJ zAD>+-CSE}mgr?2aG9;C|B%Ayum?>t;OMN2!6TRJM)lXJrL;I~3xw-o#VBWMf z%FNg&b~R=7{y$a8zE+SWPt_bcOK))3N*kH+r#+}D@iOox}EZ| z2&i(J67YR%Aq%jaxw@xvNF}y<4Z#RTBx#IYy+C~}8L6fWHW!00xyS>U_A>N*5N0Cr zjya(mQXlEe4I`Dbc-;R^7kyagVAsH(fQg~;i>YYfmy4cFuBBv7NBF+MR0rT`XG2I) z9k_2>un=qnKo2D$k8h)SFPr|yijZypQyQ|T#?+4C4Td}v_pe~`N;T~no=J77wchO0 z8DI`ya>__2LW5?GU=8~SWYqzw^JTNNP?O6-082EPG7s#=&`FA?;q~ylQJ+VK&#M+c z5@7d2{U4D9z#0m4T8WvRNmJiV*kayo)Cj`qa}Nq0m7V3|R=ki7Idoxet3Q>%?G1^2;Hl?Kl>09R!VbuUo`>4WQaBR0$|ZLQY>6Da`83q_a9J(7RK|(;fL0UpO1Q8?^ zR1{QX&wc;?@%*2?_u6}{^Tn)L6E9|6$E@o-kMHNO-)d=FeVyHdY=~KJr`o~jzJN!q zRX)|{=Fu|}38R2= zb0MD*&4Pam`tkU|ak(L8@k$OIIQc9w@hk}J-?1{;yu&n1sRD~zV)WnU>ru5cR-~L` z4+v$aV0>LjiS>n_0R#ge&^b6Myp>eJo`abRu%SJ^38s!Rr1RRS08?<{b6BbqQ$Eix zoSH2zg@>&YX5wf2`ZN~KMMFZENUv**Na*qz5=Rdp{j?uAHA`VBer{B$T@R3At~!)K zHg7nrx@&8Ef0~Da&xtQDi4&?xSgS^3A*QPzC+sEY`BXYIIr_s_2c33Ch#jDrBvj^Z z{SzdVXQ_HLDB?#Dy4gC0@bO+y=}aOLf8A@`e5_B?HL&jtt40@qiwgYC$4I=MfDH7} zdOjX-dQjZ_TDYC?iw#|rF?>O${k@ls%EMur_UyK9x)!HqF1&8?Q@D-|1v;?nq5ljh zfsZj3zIBpx)jdbW(M{#w?L5}2rI<`h@hJTU4xRKH6^x|%C_JahbdlmDv)?w4uPHv*Z7Zm3J-#9l zam@A2??qP@@ih(O54-@jcYdMqAulOa^MeRd6o>4k1LxjbPs2o0;OKsWnAtI~%6uT! zk}LKx*Jsrj#0nd7TgQk?*e5spshg~W>)ACQmm`#GUfqEfpCq%%^%IHj>^9X7k@1!* zWQQo(a9IguqUqLwbl4->0XHA0(y+s$gj*`u;b)fOI;wC9aqa`EiU4ek1OgVV3-?xr ze_>?1f2zx+_)$ygJ&_6l*$tjE&_7R$g85360Jsr+01!#`9G2QA&}h!H36~OvpU@|P zk(or;5w|kJgzd$TdRz?P9k2vp6qX=Le0M|%u0Zx0GzVmo0X*V|(9{jkT&45h_qc5D zmtVNHMJ%|{0p1Ac2;kM=uH&`)1Z0{-$^q~69y!itlz}WQR|$TBa{4>o>Ga1JrNC;Ch+Tlk)v1}jz9?%sK65`FRNldY6DkKrdU zCb%NpELu$EMjekn98M|@&1F3VQBc$Og|(-?N1M#l6?K`a?m|=uE_^r;+|bW29U*g| z9|~}TlD+rxaA#%$?Y_g@Ind=iDC*%p!z>Z~cH+i4#6KF}1))w$xjC+`%FO-!kF~p# zHzket`;U&UU%90Gla+;cER;E*59{gF#o<-op-g7%kI%$h#ZEX^_YM}qrkfrjVu>-2 zB+y$gQ^Y6v=h{F6qs}Q}8%lz|(!X2Xp=6~YvBZM7zlnXuZSw4;QI@}~Y9!>ifgiF^ zDpLJYl_l^fW}M20_dWYUm`a~=`o45_P*aTa@`HN*%n{$*E_pB9$$V9%;3`pk5qkcC z0Lh2B(T6*n*($@&X4ojLL@A1%2b{+7zJ3q?a(y&zaE~r_?IqpR?i2XlLNV(}kn=6t zHvs$%K*DV~yRCvIq!D#qncY#tP;f~)a?f$9OVN>o@+;?d?_xPLQn;<=xiwMq6;G#V zV9_sa!6AheRtx)j1?)m*6A9u5Dzc6Mnoy1Mod;S9*BR*COkDrk~&A9dH8elJVNE)a8g9 z6$C>NPxBncQh7WJmW*dDQvH&@%XbDtzsGiH_TC2+46xuTUZME~8 zyVVUrU-mcstm|q3ga!WI>!1D~>z!1&n2(=Av|Y1dRn-GF4nDw(ZL94)j^@jRdQ{5q*mCmI^?r~#y#w{+jLkrg z3BIUO`7<{3Oa)rHD}0;r`P-@MCs6aPO07Ly%i(96-whINK(rx4}5A>u2q8O{y1YS8Cb)qQ!wZ%?>S&spv z;k&O>m7;axT(_tCDfMKPgcI2fTXsE5Xz*aVBeK6M64La59Q8g@Jov8O9jfaa13IuC zgk&QBt7!|LMc{(3vF>jvaT6xF0Wr}#qCM2W?J>BAzP`z#Na_#O^?SN@_C_?_^qxdK zRkurXf-J_Rb9IKZnvaM96K9EqyZ0Y=(L@_&vA7MkL#@=ikyEgVr*f(MFnas6i>11w zZfO{uHV{3cyV$$8xEhlTVJ}yUpEtJ)TUV87K~CTUc8l1WY;p5`De$vUa-y>bXiw{B zB^0e74P$tz_NCBmc>d*wh8AMy?0AmRP@HX>_tPoOx4G6i!^E6HKzqz~Rmj}Z>LJZ< zEQ~8NJAhZ4){0nl^g&@j;^UIsLaCS(wQ&q*a%xPlJg1^<6l0C~{Ll>-7b>qP>^K&& z)A>4@(BzkAGpQtYh0upVZBdnj+z!QMXw5>9hk=)iqj~ba@#%!E}E(W@opa zKQ#I46z&(RTu4eDbKl|59zqiWeEASow4oV7Yz-kpjq#7=PMgII`WSK#bO&-c32DKB zgJ>3D&J&Dyv}C0G`;m5cTtC+B)ZBr650ywJl(O5J9*>35a$;N{tCRpEiBJIc1HE1wKb! zq|#s9awYsliZ=9(2Im7M^`_ztPcC$Zd)Tu(sduXBdicknx3zBCG^NWps^-@qeX&I7 zYW)X5&IrO<7T(`97Q&eO&YXZ{4~zyggF0eW!h{S5 zIWXKHT(UTGlDhURIWmlbJAM`fwAfduXPq|)uzrAFzDj}n{K(Or@h~a=Xjfz}F=5Nf zokG6jWMi8Rm(O@6$3x;$Nu-UHSN5XK%h&kewlamhsZh79CKjtX@T-!Tka9+ATCJ8Wn2n|l%I zHdy;6)%j#e7CuH3OER$HVHI$A7m#**`e4NMbSkgHy#yW}R`-^M$(YCh`yrWhyqIao zaPjqDt<1OrW~)=DJRVYTYrTO-+2X1H4ixDi`v@Q0BBhs&|H&E&|_>b#V%q`O|<>omTI6gf&NVEAE zh0acoaeh>o4_EoSB=jxfr3S{&c+s3re**hJtJ4Pi!Na24pHt@!8;YpIIHdb{ks-@o z0gi08=+(amVXy_stqhj6ecSsoG4mL!@Z+_}6ZqLv&>Y7hqk1Nz(z7tJuM-V5t=0HH z-crpaC?A%E2=m+W$NEa%Bj4p8$i^NEvTR_<;_11O>Zd+tQ~55#^z`6neFJ9?HZgtu zNAM_rUq@Yd8Mivl-osDbrQTxYvnnXRVW|(Yb$lNSUmY_}n-PQNJ26KNira*0+!ZW$ z-uy#PV~F`&;q#}|`%$`h(6&HMI@PY5aLlNN_9ukl*t~%6B8_tF`B(0P{ZDSHFTivB zVR-CBuRLBA#aa!csX&$pwyK$6(Wa38%PgOseVX*st~o!^ zDU#g_Kss11yHUyIeB7_rR$}ldQN_{|YgXcIA1{w}-WJx6P4ZP@82yv266G=~X-OJQ zwfu3u3v{m5wr%Kh>*q?EgqVwhdk%HJdeM$%V!heLJMZ;3q?efx7Vahths7_OAMaM5 zE!eTCy|;N!QhORs1v-hm^AQe7vAgLHU-+`hP{188uAWcR%Ou$?FhDS_7fd=o=Utw^ zP5yJHi%K%l$j_ET?%}0{#!UXPjQXQ~`V*mOjxXWI-#?CN%V?=14{|^Kk$cR`+e636 zk~~RAiN%c3qD#Il<#Y>7eU>=L0`PS??Ib;UU{lZUe@9|}9L3B*W?s+0Bchb#%!{X9 zNd*nXN(W2YvV-Y{m2(j2&43H8aM8J~{NEyuyMW*Cbvq|(RH#yRsGj~7@jU+8)uwnF zmTBVF>0!mYS2X3J_>QSulRZ=rG9!x!lMjj5hOLHg_!4LiNim*R*{$=T*e=y~$s@*= ze--N4B5f=m_{D~*{#c<3K6!hy>xTN?^TVN|XNb5gJe3PX0ZtfJ{g`6FUlPo2$@*7s zB0ip!p^sgCc)VDwa@xS{>T5gzVXxDJA6fMAt-a;>_%m3u*?&7$pvH8LbPuypCF~TER~^x|K*-EenDvT-rji4DO#M(#$vI9rE z1FUs~MnDGvg=&mRFM}y2^;aclvTD*L7_|UaGQ_ljqj}&cij2Vu!@-7QgxCooHmQZW z8#B+O*6v0tK8e2Jg%An~W5lAtJ6xDelc61^PK=fsz~6^lX$RY)yatET4{Ej2Ri0gf z??_`voWW~5C=s~2YJoaR9PMF)5%qgfUaqdFh`Yz>>J1RmXC8?e>zCsmDF8Z*LVI$P z)X7WmVhaQur)^Il(F*)VuxK73B{=utTr^UKzEVxXnfKT_??Qb0#>p=vY6EFjEZA86LooAH=Lx zn1sI34TT8`_b9Ez#Pbu?ztR$S8cUZQLLO+9*n?%GHG09(dfck1(inYN&8Am_82-e> z_=GS+7bc77_I;-v2ftg+tzM+7BjbFha(GBTr>yIn!d+%eS%gkiU5~u% zo2qV1O@=&TdqOW_f-HH$05kD7y|ZMvUruqPH@y6%7p&!5-|H7@DkL$+u<`akWRKqE z8kl0@nK2q@SUDKf-O}Fkv3)=t(+WvMvB!uePs$t0HxcW`woeQzKIQpPtu$wIA ziI)&ES7BK-n82nY`LJ~9;xONwvmUyAcxHW~HhHFEN+upOATQq6_#3sGtZg@>hcAgf z`lcU;VNZgPeHF&sxx80+tc$9Skvl>8b`N<=*Zkmy9Z8SHv=CmYW3C~0tEB|d?dUu0 z=)cJZ&oX9Evj$&Qq;U#liH>E&K5~lDCC_VkoaW7rBjL-C!{pOdZKW!;rD$^E*_R zEj`|Mqxk5BTNf$chgjtwVtBSuP2CIovZ9FkUaFBwPI^=IP5B~YLy*+CdZAoIvmpc@ zxEn;qANlS)*EDd~I3`+SDnmb9T|Vm%$Z}X;SIMj*{W-pdS>d{AVbZjy#-ff=$1RK* zTHMTh+RUzyS0qeZrW+k1 z`2{H(CSsB0o+5-&iKBEj=I$3{?j@|@3gnlH&u+0>FzYSM3B^2$O>vl57&kJ%g|&zc z?SDK{X7!NN8Q;_;Lw;D{ox!O^y~;aHYi#@zs|DO083l0*#uZu7m_$`7F0%B1O00;Zc8sS6 z-6DC@awefZP`!vW#En)Yo5q-rt&EUs$4DER0{|EeprV6jg-nUEo+in#kaS$YJ2e)2 z^%DC|)6XXR_FBl>9%4APtd{Pwo{R?BE4qOvDs-Bu^Q4%Rwlc7rOke8 zi+5(t6?U6{k2bv3)*rEKAl>YiBSqJGHm@e^3MI;)N08nqG{&UK#z@U>TFo`T4@~0=jlY!$N`#WAT(s_VQN9fd)lUrwe^)L zbe}5wc<#bRT=e!-_we0I^n-UA>h$(_>2}cjViZeeJ8H(iVoX>=@l+~CkksmJ<#(z? zwo$T{N!040kzHS9V4`m3%=9~pg5Yiq(|g|=fmjSBbcwUFk&D%87O6oEbrdLa6lCqW zsdE&baTM8d6#eWd_SaFIY&RQeLPzT)1>MD0-o1%LEs&Wx-HvjSO>vSda*}`Pq|ocM zG>pg0?xZ;LobB_jEeOFQm+5Sw4nOE!m}-WR^O_z(FjtHo|#9psWphFMp1Dt_b zWKRzsRtt{~0i)4EW-BA9vF>?A?o{H)nEpemes{Di9w3WXqK_$IO(@mG2zTs+Wg_nnYPpAd((atB(g5;sI`l)RxFvb3D4}!>lOxhFJo-YGjr&p*A&3Y_Gf} zG#VocW4(0Bghn%k;-ULJdw4N)p-38fOja-w7pFkcpU?ouL*{t(_fP8X;}r+v9>4}! zF;tk7iI-j#DJR9|c*T`oxRdnB8IR(>Uh_W=XEl$ed%fQL^_);Xp|U^ibMbzL^~Urc zcYpR={p(5Bcv=s|9U=K4nR2|wSraQ23yEWe3QhYCqd@pXnrbWH_dB4QS z;%x;#{kwmhl!L6iM4}8o`^jTMU0miA?>a_xNn(yU`9UgV>*#*G?q1KBgX51FuhIJ_ zm#i=vzb`1*IlO_e&j-`@*Ei4b@B|9b_`>jRV5}>6tnJA7J-j_A0D5z-7Hr9Ji6rbZ zOD+4PS_1~-AfM|8sL-=mSyQVl7|FA*#LF1!yO(9b-EDq=UqEaq-tG86%?584_<8#Nmyspp3@c2}0#C0mP;WVqxiL`x0iM>KAmWDa zcSK=k1{azJLF<1VOxa*sA?Ie#FgCtPws&EQw=ws>1Z6`2R(l_!+n632<=OF%hul3( zW{SL3uIZvM_E{u5L4x&dj8=A#Rq-C%5}x)Gq)x+k<9L_}`A?czJcFO#sSqK-4?;%F zLjvC(85)Fa>4%_Zz3Oj;1Q7fT$Ub=F>K)Y(XnH5emoI_!F2;@zgJy#%MPXv@V)n8& zZju*m5<&(=wSJ&v-*DgQP`i!c#5xle?;~LknR7fbXThm&f_;1gG6+Kaets9P3PRHT zjFJ8M=)uo`H;;o2ei~Z9Mn^qIKc8f~hU6DtJqo!py&dEw=Ec&FtbFndHzFlAK3ybQ z{q>8&0NNV46K9}tFd; zn{?5Dm8_7VH^+Kx=Y?WXMPh%>pnoKvg#>>J?0N8g?Mc+;@^$CWaBk%CY>UnsxEEV{ z|3YXhhTf6O(l{3WSi$?+{mq}F;_%dBm#p}R>ZH8t-g7#phj0jAk?DMmbUK`i{W+mnQp>cx^cZ$=47)6b9ZtvsL&fp` z{`b4WkNGgoY)|sp7r$4>+`=uGn{lAEnlDC_{dy3SVhhcSJP{VS>-rim(T!BOfk8HmBA0k!+-Gq4LC6Tyge9CCFT=RlezjP zdy=GC-scmlL7O)|BD{o74F6TR3YCoBPsxYB$h@R71lcR%NJ#%o|51v_jU&@Y^u76O zUQaJ0%Cp&B>a?)qihTr5Ygu=YWN@KZIbpbDM^os?I;dDsYr*YQn9n!#K`auq09%|a zr-7TT12)8>qTNxKx6;4NG^B!q>#3CankCM3oq++I3M?9i93k&+n{eMH)i!(vP$!JB z=*nL?ndD}0@&Kkfx!QuchV4ArcE-<9*$#>03xuKvA60YRLD4R{Zh4PE{*q(dF$Fe% z&(yO2Yc%SgR%^@u&sOUg>W2jtZu9>~tF>k_mH&TlwU#^6GbmR4H*$UO#$o86$o2QV z0-1n)z+0!a2G?p$%sBaP zy_coV)RdVS$+G*^yD5r!+`7+nNuk^TDp12-YeYPD2dhignvX@$UTr>=Uu||yw_K~h zcZk#Wx64YR0QaZb*T$OW5{z8V+Z#(~#xl%`@I2Qkfq)Q&!|&vbi-rzVr|u6~V)jeW zGtQd%GPy>^>@k=MK7L^3s=82EhZ9>uxdS2+1>>g?ixxeyKB%rJ+mCZ4)IN-3_feO3 z)j%R{1l{XEBaASKrbH_vQ6z-X-MHt64yTG~mPehsXLYI>ZLmxR8tnq()J#p}h14MG zQGut0C8~*@g<+_~7dgmi51$6Y%p{+V)Wk4D_Ira&7!h1E{D-FJ_n(i_`_pFHypnx+ z6vwdIoF}N_)2>o82q#pn$;jwT5=zS0(w^-ot4(U^#7BlDb$;JMO^UF+C$?p8T`|rT zN!XZwGzqHNX!hXm)0LbO<1xO+DcO0PA9lIV4OMY;wrNr$dd&zMqTUSuj!+Jn5a@30 z{C%Fr2KEzs3p$_r+D#3P=9u^aMZH?FTeq^}6n;H@YZ+t*jh^8-6~67xwN>Fc%gu9> z8uMODIuk-^Ou~W>sEGy2&iQcPH+-SyN*v8(tZ4T_WtEpxPR%c*M@}V^#k;CnF($EX z)pYqqYhi-nrhJd$+uxlh{XO1oO9_pn{WA|HS$=))WUFVKgv=@3em^F(_u3dqE-g!o zB##RH1|SR!sV#-?U#m=aA<;j#pNL(3vb$Xjqx{52sqxFF;@RKdF6nm+k4N68$X~nP zLEpJ9eCs>A`Q~^H0kl(fks7*QAK%+@p<-o`00HFA5UyXd@dW0M{B&Mg{6xkHCcrjz z-5I-(W{wK-dl`Ezd`!T!6hjr}7t0EX77R;OMYj0GB^vG!xWa~z?Qoz+7N7LSsa=)* zD>jZ7f)Liv!8!wT9OHgvt80kutvDy_04zzFuf;u5hWt2iHp>&sv zFE`T#02m1?DzxY;D6_RBg(eK+5LrzmdaOx|Sx0L^@8D`@Rn3_GlR^Od&D+O}FN(T|Q^cb_ z8X!Lg_)Q8OGy!=9fwb>@;jKv3n}lp3y?31Nx(=FVYUWnhGs3P<+;R^_jZ&2>q}&HU zsy9#|Dvw$>Eb)$n(iHRz>^|#>JB3(VEX;u1l2j6^`1j zy@5xr*jdvWvYLu?ZU~37x<1l&p;jSH;9mfYwp!0lMhHtuA=8SBMiEd5*?!WoxY4V5 zIZpB1v?*~p-CZA391GKlwQb=%P$5(!EDs>aS&(?CDd2 zC;$L5%p|>-^{^{Funu4rf>Sio<)s%AQuc9=-I+VG~gKIJKeXkV7l zpIBY>CXP7}_UXEGyDAfdVy&;`~p_cKn{@`_x;$pasC#SeFZoSkXntJ*(< zPw9lEMwZAUre~R}D3ysT7#=)?IUP>Zjus4WX{@5j(z2 z_NUL*MQbKVnetTv=0M9p`zEF6d*w5AD#HV6n_N}iwDv!|QXyf|g-TenuN6m$Rbw%cxRbnAQyKUwp6sv-7w;D4`^Av=2fXuu!VN$}e$62tSCV?0@hZO+oxAiE-*@I}-h_upt?F5{ULVW+ zu^+$kV=&9crYx%+56!$wkCnbrXqbiBPpXjXYFkS1Hq*@|j{whCu|A?Ev70OJxv#s^ zwb6Ec+yk>>-uwuqG`HXcz25Dd`@U|4t}uuqV&4NH6-%{L%qg(6{hB&3E> zbw)=Mtx$LO6W37_J$+3@|2ldonmDar00sm0pf;2()GsQZM9!m%s%*HmP)u&rf;rJL z%`x(>9BeQ&oDRm~#(}4b79tSHQ}qqR5(L^qUsa)7%ZO>d;pWHrA`MB@w5-d;iD1Yl zmmyRr@$he&(RXFxXDZh6?Qrj$SQk-fq4yIBNuP#O9@&nl1?moA&bC} zAL?fqj%Y^(J&FmI^)9+8qvBk_{M-`|agzYpF{q2UG)rneCnQdfO0~48GeqT&Q6mjS z^B;-i$XZB9$ANbup3_qorW3>36SZign=m3DT+k)(#D|&T9V;|<7m!_zam`5N07kDn zjX14@cr+*Z;SUVhA!%02r38*~S&ZN^efod`mh3=e>1H;~2VWn1YRN%}rA*PrPu^dl zQEC^N#!ot}rktl|GNRV##f$rfq3Iv69g`q_6|I+I_!#2hplH&hBh*K_%1btA3^Ce?Z-IPh@yU$ z$QB6$4-gh1h>Qe`E4bk=`%^Rq2y3F@IO3^jHgiOpblT7P`9P+}IGsA7x>*M88){|< zA>b!22Oyvh@NCOclAv75WOKoA2B-}J65XMz-vKvYrQttJQ-=}b3BW7+gUrn`%{p=v z@YvWM)AgMZoc1>dHp-aRhNpE=iAJuAW3*Rf2BwSuTW``$<$3|Ke@S78WkOZ^iT#U<1HXWH@%R)EKtnSpTqHS2g z%^BfFF3-Sr)}EDvZf=pJD)Hw-8~A`L&lO{TbkT{sW60xTN#mSfR<>sX@NcWdAo-Gi z0I)>fcaKY~#)>H@N{EP<=KD*?*B%gBQxdlYD#B(F`e)I1N{9Lt1hv+> z_`~AQ2*#hGu^D;!a`#AxCsH>WwHSoxjm@9udOEeu;H>+deyj|dO5j#sn zAaZ1yS6efy16|b#QLhc(5`3YE=lzf}>$xG3m&1!WK`w{Rm+|Zr^DOkwt)}{vm^vayBdelu$(jaxlYqtNE2hY(aBm9J5w{K zLNm8bGZ9`BSO^}EXaxG3cz@r+8DQTsnj~=m*o|lEz*$w)-1FN^dK%luaBu2$P)&v$FBN?j0pg|^Ak>U8cF z+&zSIzTy-6I!{k3&0lR^=QWR*tQ~&63`!C!L=?#+5gGR9H^j9G1ePD%VksG|Z!bPwB}b&ub$5nqAjLV%|k`JEpwI!_YXA69mOI9eC^yDF1-v0eD%>)kWI zyJwkt=JQ)sZuKmM_c+QotR!(=bo3~xc5U6fpbW&m*spN-OQXQICm9~KP^ zP}>gBMhwsw3@|cNhbO&e>Shf8{fg~`4y+63Q5@7gCyYoM9Q!!%jbk8U0Bm~D1|N7O z>_t1QGjyAz1-00w@Mj3YJS+u9Ag2x6yi6!RKp7Jr*&N+{cldL-Z0;4{i!{k@P|gZV7y>s zyvVD}^VfKpFh!i=M8PuD+kV0dIZ?aua_Sz`wj@Ync0$hxhlK%>x|9B$<3AV2z!Q@v zdy}&XY2oA0&WNe8f~kq_si}>rnLksr%+vFV)9-Ajmm;QD3Z~b(r#CjHxBg6T*P&lA z&wR9Y*jp6dT==v{5rEtg89MNy<%*;B z?`}L$6n|&RF-N2amna<4U&hya${=3?l5YgrTrb*AFY*CPzKi&Fh?gLTsi0+iuo1*6 zlJ0)}JkYpcM+(?@FFTyh_}~*zi4+E57YIuGJ69L%>{bM$mqSUH5(}4|%?M;!LWwpZ z#HC;j#A;YQt#IUW$R<3#9{w3O(Zqk%h8PNxSbSBw8vk@HSOi|yW0F!2kA52HRp_V@ zz4*#*SY8|gnOl21wZ1vEE)R#WQ9yblrw8re!-X3IJsT678w1|UZ>~4q)=zi#tiNHQ z2s@n_tlyl~qc*oW+cfv1sGNpB?C*V>zcD+#aYPDCZ^D9Ma`scb-zTN(}! zO(4?y-q`TP#$e>;5AV&R>#e;A2r+USOtF0u2~pYJhDG69u&{)z5RT$$+WiNd#}R+cdz1fAJpX|6IO4C5TYb#kcCPxtmdpF9 zZa&!vh3QQWV<_sBdLus`oNZ1Pi`}9KolZVD4)J>M>+cO9Z+7421-@H}&rg*^ zT-UPXaa`ZNUwizr`^V97!vlRTEo$Fc{F5dQqXquvsjzn>;?tT!r!BYe0$5sCTwa{E zZ3G{mz6OfE?k83M0e$Y^l!*D*0rvQ_oe&$lBZZJO=yVktC*8;ui(E>;j?}S zomXQ3Mm7BGyE@t<^saU1qs$>E=Wk+0C3?~{qU6$1H! z&0`|CK`K+y%U<86Wk1z@o54{$0r%?uC?1OK6L|+}@Uzu_pHIp?kE7S6ON?hQvhcoG zv~;b%z!86^7t8kXB0pA~v%P<;cBH8$t|marD%#zcELx1SEGhpX{_1~jMf|)u{rTRP zw0u%D`YnbS=%iNW+DW|q`EnO~SM=&*29EgCjW!8Xb#?`K-?G z&&8kC=n7a2=0c5Od*8X?OBVY4$!P_<%{4f1-iQ^zE0kx)f%AgYza%bd&SJo(RXU6L z*D86t5D0tp^BA53ph{j=u(h4t3}`I1(E$1>=jE}Dl-zZSa12?p;7rAYjHGOJ?fst< z7Um2Nut-vE7Jxlo_|{IN9={m^_e)Gj_%C-Jy!8iQB znXdn_TyUoAzxLXHOxJ(yHJs`CpMw97>H7bt;3u)_{cE|HytqI8&x8@&0mFYRm-c|; zE!+Xam-qcK#BBQA|E1u6nk~Oqtl!glalG=%^ZkEJS6snoGwAKU`gXAJ;=$YAp5Hio zZL-*)ulM@*<+tPaZ~OXiq9&Ao8%M9ZZ6jg4xPnh|>i}2qHTieY)aGtGvGgw0JGg>> zuoKT7$NvGto#pl+fxoi)L!xjSuHcK0^6w@~FS+eL{m%iz5Bf4`gbtS>R-M+J8>_~e zTakK?_3&f5A*^&L#$V~(qi+H{^LXq-3SdGPVa zd~c|>Ypw_MYE3di^xI@{By^2WY6|9YP>T6+l~kN?>xjQ>il3@Ra^jD>KuPwkF!#zR zA6&uDGS;c7D$DZls44ktbtv|t@)w^-*8B}8uHesy5s6d{ryUE_mJA9B)_$*@cscYV z@0fQGI_cRw044Tn=m8paz2?OOCR(cu(@xvgeCAJE*F3@}ct09Der{j!k@V?Uu08f{ zUqN+=cAYJCiFBNX5sP-9U>`K;eWE2{9qH7%FJE7>)}0NK+}1tgCKIZ|aOTqspL0{u z*`Bd8hbWG-U&jf59pmWQY3TE*z&W!<>N`+M5iSlXYOUEnYGj5V&(vlN-x-2QWe|AM zv&wYW0puD~-Ys+D?`Eav#Sto`Qq3YUB0`y_lsY_BZqqW$cD_A9-3~b8X89<%UTewj zO}@-}sqOC{D-W{uLYDKL>rdAohuoZMk}9n@krOMab6_|#u)lA;f9xyS)R9>y@^~rT zpbj>gYEbZcFO5rCVlTsK>gu4Je2{=G#`f>|8)gGe*qeqvvStQUw?i|7(5n+oYArN! zcv6y}SZ!K%S67XEl(_!SIpSx(;x}cfFMqzzT9C)KxOUQ#0`9NU>R$)#CV6im2Ck<>b9 zIc2EYWfLYZuXY9_ zL|MP3T-Bo4FD1xBTAWz^N)gD8a-;;TsIdjIqX+3j#a}%oeio_bOc$vwJ}Hov%9vmB zk+McYxqTs(C4gI533f9cRe0v?BU}1;&`>*vhck3Azm(5kYoeG(HB+60Q~epAQSkr( z6^T9|uZl;zO+Au9Q;tdJNhptvh}n3p=XX!6w1sR^JUdueXPq;@<9~6QVvnw5y;yp! z{jP-dGt9$qnS;zXT8;UGeY_F|8xIoI#Zr8u9RX>pJn}IN`1-L#fw2OJ``vjRZmuH5c&~`4?&!KPRr#Mo4=ogs|u&Z8It&WAqN8U2#ospfQb&eVwpUn>>b89kP9zD;UwQpBsQ6=|#JMBOm zR$^qXAJQ58kd+wQ$h{=o#L(}@wACJbJ1|l&;`E3%5*ghK}O0v$44^Vf>RM>ouPUH5T@R zfu%BQQGz=pH*J1P^#x{p2Ja#-X8JGaPK{m6UpWq>2}G@`q()1rhEQhsZtmFl!|Xn( zEH}J+j`xhG-j4ZaYePnG5k(Dpm>YH5+rZgoX;iaKaLb@-x$}XZ`!C&JqM|l4iu+Q& z6TKr3A5)=bl z>}+4*+R=G+!$Kr2i4UP_`<%bh6{j5TKY_-u9*1@+`V3S^T>FHu`F1st9J&un^PEwd zcviuJXnN@GSiiFH>F^SW%p{%eY!cZKuq%1-+okO{A*Y|c`5U)XYilp(7^W?Lf;+$b zbhCNG1E+7In0cBf2An23{Ac%1htH-AQlH8^9NK%uG?n+E$TMwrpZDQgExDm$m9^1@ z^w-bMmD9e9D@%-q|U>u|j_Pzgm?FEadhw!pN^4;F%Ndewb1x`aBUT>L|`L;G~ zG#>uNcC<|7w4RR_n2Gh1rkr63p@r0CE`7$?t3tceIgOY0=tgD^%3_J9kr#ng`B&_g zKbx?ms>7%fJ3k9vX!hg#8&X^?2ajD8HPuQxu`>?cV%MMVnS@zh&;myG}1{xYp_-%F%@{QGs$hg+DfF%2Yy)i2)l+B3y3bQgCy#NFbY1?yw& zR*5Zc-L$MHsLUm#*cMAMO>$tG#-Ah)rJQ8HQ5J4iGLQ^0x|BMD^qA9ciO>1&xz(vF z>BZZfYucU0*(q%Ye&bbI#|NgcO228j-w1f|T_qC=XDiznast8KrG8uQ#|HN%# z?PBasEjMJUkBSC;gOhDXlbx54^+L&3;z^gIN#DakekF2aS&s%<%wqXma|7g(m(3Vm z45*x3*&yb*eC9vmRdE!7C`55EU24cgEm>3jImBJ(Q<(gIm?CeSQn1svU?n%>@JbZ{ z9d+a5m>@G#<<2VciFba7tu6wYmaYpy1k_O`ZKztf+#PYy5kR(aM!FxZci0H5mXNOA zM2D>PlZhY*e#U4Xgs323-pSv^7kLAi%gxS*#o3e}~2c>=4Q zEtKDdWiEjo51gEH+|g2Tve0{N>H-ZE_iwj`3-XAWsf)5y8;1>vXa$S;WQl!g7U9E} zJHQ?ER>54NL0_ZEw(LW;?8!c1$x;q5aw`A_B4Ll(tU^tTz{xC23ienW)(*zMa|Z7F z2CY<+FT0FNyZfX`O;Rpf;ifF{g{)M9xuR@~n%o(#k=yBF-$^dmsg2*A$~}&{Cc2wH zd`?`X)=01)AXz{-gO;to>?s)r8{0dj5mnwT*uL*&qMLbPd^ano`IhGgRhZTdmiz=D z+Z-chvxwX%Ax$~(r#Sve#_s)**{0LTr(Xv9>w^hU&yX54?TY21?g4^>H2nhsB7MuAL%j{ zfMdZSfpU{{x?E#&8Rcd!hTto9@;{4YJ=!jng#Q-+jzDq0a_5i_Jm7vAgPi*$GNgDr zX&I2aLr@6iJJMM*uXsE;Fhn!-L)B%A(-WAI#-l!pm%9j_ff=5GxtEuAX}%a(69^|&Ypb4-o}In=0NVt@i6fDUPDnmC963%aHYdI4e}PRvv{X0$oF zWo;J+0-ohY=#UQM0ANMcliUCf^Uwp~v^vOHbN)y|W&m!_$wIwTGYF+z0l1Lp)`j-g zbQBqeo*Js43YbFbmw+j%fmyKEC3_G!4Pt^Cg9QM+*QHYgW!xe!;&P?fqAeUqty!c9 zC(}n43pQjlvE7mf7%C6p&<&=!4cUMI2w(sPpr8rxtWgj-SEPK3|1&NVlX>u1ZMc;O zNI(MYa1P{v4(EUl+9Y6T>XQXJoWMI{K+SI$*Qm+4bdn_i zz{6Zx7=V_#QQGOe7iqRfTAuz|q}ThyJ`BV(fSw?gM0D%0<#aa=mtISpxb;PG%=A)& zFo^Hat>OSjawL875CSA1dw6h2aQFr+Kmzq}4oTa;|7#5ePyjEBcOM`Iet<~7I&)^g z0wLhQ;R+7kgadG3I&XjkCGY{R3l2QljRLBgkEozI|ELY#zz#it2aLD79kXY{HC$rw zoLGwlfl!df%QHQsJbN{s;t6j#{FenAy*`Y}KWx1~thO~k4a(3A>iMccG9}Uw4D%v_ z%a(S4x65Bd2^`3QyKF9mAO<@54jd{DLrV^@dsN;a4&%_iC9ngp(?^@o2Usx1^T3VW z$iMzuxdc!E*07-3@Bweo2Y}R$4D<%M*+1yun?A`6-t+>UR|A2p4(I@bhy0;F8N!*% zrXMGASa3RKDYfy4kC&HuX(@#%Lr}wuP%_+H*r|F>v!mn5ubq0zM~c0z+|fW>o+wZQ zal5dqK_z-rOnfVA=CZg(W^1Fyf#S6_Zh!*x{{RojY!2x_4$K@5NCghRsj}P<4je!N z12k29fCT(N0`OpcgUSup@V^BR&erg<+Ry=FP>Dx&IfH-#8`=(~g~+JsO(np<9Dq$m zI}U;hoI?4CtC@q?P@v&p4`N_vQj45sfIDbqwGBPI!pq4u!!tqSTy*7E2}oTRovP)j z${g*{jIFjP5SSqy4HCGd6ez1GU6V3}jPSEHz`Sf-#e+pyM|o4Ibi4c-vfNbpq#|IKY7gF8szG&D4Ym)xSoJDr9`Lp7jKHq3zH z$$E)Bq(R)+t^C+1fZr_e*pR*7FwkAA@sX_BW)XX(esnKRX1;M_Q{R(68F~-&Ko5NC zz~4&9J}qF`aCZut4d1{HDeyA6DG&Ip+Tifb0zd%aEY2^>4m2Qh6Eg=`P?gBcjr`ls z*^tO2JPvZyt=@`MC|ljkjopguaorFO^3dH)D1R1A10@gwAz%+E&;vX7oWdJ3TYJ1X z6JylVGd`4n5E+J{%ER^T(fZxr`<>rtp5JGl<|qIIu>2a}ME+iN`422c(#a5$=? z21oz{dur3jEDqy}$Tz;G*{}fLAiLZYuKZiwiLA&^t)M#S0W~mx^@ju~AOajvwC)fB z{E!1tU{+P`qBDatl^SEJq)~-!V}OaOYMZw9t>0>n=4;O8*xu%n4d=~ZOXu{S;bZ3o zw|4HLw^vgMa}YTDun+lQ4>f(-9Qt1<`R1p5o#> z&f!o3Z!j@`i~?k=U-2*x@Xk%wN1%AOrfhnM7EZ_k=Guuq&H${S+`tYj5Mp<2g*Lzf zB>)1c?G3B0R4LFxyyH93|H(<7e525#V|Ybf@=cy<%gO@_#Qc5j)t>G7T>{x&0zDuN z-7Z)Z$V9z2pChS7i~G{(H9nhQk|x=>{D2Sn(C+pC;q(yi?ciUpuCj^@z?FLqddChK z_qrN94%z_KD30O){0$>u27I6fWg6&#F5wV=+C(++{VU|!H?D-taRBz4*>Ls%9MzQ@ z@+1H>FhIH_KmsEW0wBNvnxR}G^DX`Ydw)c(S zL_hmQU;9Q+y8j)4B%K<-002z{lPQgvi_<>8cM9SQHiGa2T`xHKfWP&yzS#5*@c<9v zz}EMU_5h3k+3@-7|3D7sPR0#f~Lg)+||RX{AkL+w9b-N|Y*Xssz_=UA&d_$_-WbEu~PQ z-VP>wDo~Gn`$*W!N20MkcIx28qnvKrHO$wnSu3#Fvo&nx+?fLh?%Oxh*fbMh&APKS zZ6IvgyI1>O|2=y1ZqKV{j~+a8;eZ!S^iZM zMEFUJAIEa6N1b@)d1oDS(&;9f%shMTHE-BiM;zwD`Gz@c3^1TI*EYjO9TM=Vr#8m$ zvB%4L>f!AJc$Um&8{>?-COK@laqc-dyTNQT*9`ck0})CnA%qUj5wA4n%tOz(t^L8T;wP*0~M)N@r+OXwjQ zX*`s5R$6Pd^(wX2nx+|G-inJ7xmaBB*I_ByWRt=IV-ZG0px|d8d>YfTgnZy}2OfHW zOvkx7=d7-?*T7L{9P_>r@5v~uqp~vtt_epTe4vFkAA9VnM;?0cod=%C(kYD_ZPFt& zfo-_yrW=C~md={iK#KrR5HMhe9C1o}(%|6=&8#?V4t*DeM&&CBr9@J?G(Y_Io2e#E zZ4wH=P>&i_)C8wGRaI6|&3RP{m$~p(po12A=&L~F)mLGKJq6jk>H-Yd6A2r3Fjgk1 z|1q(BaJz?IdfxH69dX3z=CaK+GXUIg3-E>KqkxmU27%ErOYa(P z*l`t#l3KS9CfN1EDN_P>qKPM;VwPFK2N_KD_nm_mp2B8`HvV|zHDo3&W!{R>E?|{) zy2TbZ0W1_3Uo32{Ef9m&@7{cKrycVBmD8H(rsGWA0^asUvjoOz2OV(cR=2h4tbrgO zz5D5>2fc|2H}jZ>Jmg_5breoGrDNQhI;M>?nP*OQqntLr5sq+>1A`MG4|4z(|GI0? z%^C=3S7x$-B^I!5BrWMd4tfBEO5sN)D$7ZLbT^clF(oRe0-o@E7(5bCD0xF9ViCE* zD_}6~SJnd-6Mn)9mgFzM*tvDAv{6KH z0T8e@b9keT1)vfEs>6*B>|-DN>j6K$6sCHRselHY2jS3B9?T#hJ;y0jda^+z^-+#; z*jNBKFo;1w87w1cO28RKm>JWRV+1VtK}lLdve@;9KeuBgsD5%FQZ-1HtKS4Dyn z;8K^l=g!CG4hKd%+N}2RH3x9Vm-fg%d(}%!1e8aZ_C>fj4yj$( z&_?MHa2(aB#xt%VfB~|>4NH#Wk`ytIpi~n=^lheujXTE(P*6%0x+DiF>(73E(n_Dm zBxW^RP!D_PLtOTLfu8M@ZbfdG z=mE$A{u4Zi9N{8E_}+G9luit@MglZqn!{4$bdbbMe9NXBjgW&KAt(XtP$JTkQI>YK z`xH=eC#v1G)MmEaSxjr1+SKL}!x~mCHJUMvw7gctBi@QJk-4;AE$uHYg4&3lSUqMw zv5Cimnj&gD2{Zfv1@sD}a-HNRH+h3e+c?hsSaXdAEI=F8|AkHH&c7IJ zVVm*(EjRd*$3MTrq-=PmV`gjYXFfx@fq27nr=dteGjq{yiBmZjjDQF7)RP~ygrxdm zSx`*+N&}I~cT=e)t1PVHnQ~asxE#T0IqYbU-ZZBqrZi7O3;@|SPez-53oA?{wHbxl zsB)>TQA;F3 zF4m(*1SDXY&Jo8jZ>Bh8HuFL~gE}=^EUTd8Hkk5V9vC=$$In#l0on#fp%QG|-#G6yM;fCH4F zc{{!~>x0?))&^JrHx_UW>mEmhP_9O26xrPN%%dFdAmBYHbKWq~Tx?_0Of?Kp91>Co zfAsD7HL}qFi&X?YfJI-ok@L0-h@dA=59yv^|G+Yn=FZ(TD-{ogcjyb-+wA+^cfOrp zcIWSVwadFS+pRxD5CNbW$dWttn8?JYN>Ro!CN-&N6vd@skKw0aL?3z(g1?oCd|pe( z7|SSF)-+i)mM0zEPHy?+PynU-0C`{sai~A9xre~fjY2vkG_i(i5U1=CA&_$ob+HnH zFpY|EEQPAQZZi~(sDKba0p6nlQ+kQm@sHZ6I#|lO&^kUuyRd#^KIVhI=NkbW%t0O0 zK@^Y%oVq?B93o%>fPs4+8oLX+5S9`l45m4jBc!G&vI}bJ3n<7Ee3*xIm_M(1hjuua zHsXxdkdkoXKM`V$%HzM}cmQ%Zhwmtj|8zhH!+QsMpp1Q4qq2fP>nf--vl}`>ALVEO zZ@5DbG`gcBsJA(X4IpxmF*qwyu_FYvx;Vlpnx0d@gB`;MYgvbN*g~&4m~QAmIx2wEJDd7S z0Al0}FdU&ZS%8PAxp8<7IE=%4*g~Px!w6K4PMVx}!XG=5K$Q!#{GmM$G#$uVI^8=Z zlEM$$;fdjcFdbTzOXMY)vNy4-L9@fbP6S096ajtA!94M>QVd9<5h`G*3+V~2W>T>i znWoy(Exn+N7ciqIghAa+tp{5)#rIAt~X%{1YKFb0g9ThmB)N53;## z;K;`@4{YF!pEQ(_Qy0psBlNilqAP$XdyVvgvo`q#bpU};D!~JjI;wL@cT0-h**cs- zKC9%!eDue#{7M`IOW^cP|KJpX;2cZe{7MwizDY|<<}?ep1F_~Ak-!KH7gHMTQ8?;p zxa=_&C|tj{AcQyI2M~ydchI152on2K7_&iuF)T?tq8rBa3@Nz=b%@M#Fb8$$Am;GJ z4x|(A3IHkNhRy^z%9E%3Q;v%;0LpufaU_!BSQ~c8lcd};bK{Sn=qwkUCELWrd&?zG zyulqL&f^5m;w(|&{K~NePEq_YwrEZlg{`6qkrvU57Z z&pbVCP=Jve({R|W87;jJq0y8(7SS59&x=>k=LK`hdySL`s%^fUG;S7OBCDC+E)OAhQ zMMY5*6-DZcl}fGGuDG;Q#GYunPQs8eezm(6OSl%PJB6DA8mI^55{D$)wLnn~5u(8R z5hoI&Kx-I){{&z|Svv=@VUIV797y8Q0PxZPu#U|1%>Pu=pFF*Af1R_PeF>KIJ*j~H*v+vKsC`s9a^F-)O9UdL{(8~SO$A-+OII0OjVW`QL3i$ zwC8c2>)Z=bTPmm_1SEir!+C%OXgspI2y9qcal*-NOxu#=3~eX}&S}YUfDYyWhv$$E z3ED0)wXTvyE0l#YaVp7T4Ox^U#E$s}5MYq61Oa&n0qq!p33*B!YLE~(AP?v#eOt6Y z)yEP=*F{BI&<$PCEdlLwTGPc9wSe06BdQq{HC1H7f0d%a$O~oaixD9NHDG}c7?*EY zfCdmy{{a-uPI^)>1UZw$RXJ+_4I&S47za0@2skN^g{jFg9a%Rb(35M~Tcx1tT~h`{ zpPws-5BPu!n3zi<2XZKf)%2)$E0q!O06#fTbs#`~{8`QwPJ8&=Llxab)sF4(U;Y)* z5Fi0+nAg*_*GuJm;n1W+d7F92 z6P>LY5&(g70F>t#2XtTu4-hwf%wMpyhjZm$0M-sJcHIBxE2=Pc1L_(7}k*6D;9Lj6iH8sPNCET<^*6^4$jysr& zkUd8#m~a>{-zk+Pj)3t9#NkL3a^Qf*4NI^bRCwjzFLvB6KISk^X8#4?q6Gm0{xCB> zV;8;Dw$$T-Or|$3k+?ubDl)hq1z3p7&hc|XujL01AO}M}(-3yNfN@U?+{P+#(rh4y zCCN5~A-0Mjy+~TtknK6_T~;+Uc_V5FlwUHfjGgX=NVTX9lsKk!I#hB>cEWOn8Prq}9|X%_{Nns&ld z;8YibqUfo+zEGx3rC{h`DxvlZx~wg^8w4b%ICMVb07MU>>m>I443jmd|8{vOi>SuS zfTSn61_@dyP_AAty|uAs)&f0Q$`b&`YlrZ%&vl^Eae%YTARYT6hs1pf5(ohf(4dwK z8|G*(Sk`C(n_{G8X_HoI%Z}`mZfyCE@5qL1#YSewCE(@BKF)4Vpo&qSIgRUu7w0YkKr;NSZaM54F08+J00&Mwo!V0)d9bh$xB!XBxcl53@xanREUQDo zi1tYAFJ|e;u58Dq@A+oj`^IuBukXsHa?2iR0=|j>|L>VjT})kL|E*0Cx-`f(cB1QP z@KA_@DEI-O(1#w_fhaJ8JRk(VL>BN<5o93*EZ_$Y7>5ydqvY6a3QT|^O_(=PED`U( zIiVZCdJTaNSyVP*fQIpbt~>+~2g0$k@EWgs=o-TV5+-phtpcoUXb%w}0la1hxM_!V zaEEuuNOZ`Yi3mhP&WO`E2M#FIFPCikuIw$x@+(JnEl2jo_Hz2R@|1pQ&!$&056E1} zH0dN3q@qg&7r!>ngB*i_@J=sy;1_<92YVm^AfN-=b;1>qyE*uQ5GaQX*KPJ3-Vwrx zZ^$^Xc@Dll6aG57Ee*=L>5P+8?ouvLGIj2~H2?uz0JZ*M|H|+iw(1(nh=({54$vr) z?~LIEr0fzukU21dB&D(0%qFH zuJ%&IS74BaU&v0pY`8v7Cc*%BC_n)}YPO5FmieiktTV!0!O?Pg;?Q|%^hQbO&xh0QqhzEGMjlZFc zA6W;RtNLwV%+VoAc7R)g5HNTkpuo)aiR#^qSov92_WEvY&QEqL?|dwO`Ojzeo7a4t zC*Yy?Z=eszF*hcle*M{17CD{-H;Ae)S-^`YJi-Bz|8ek_H-V0IkOvo#1V2y&ML4m! z7=#+QfCfka4VTyj7zcHT!+5}lcwl8Jz1vuZ`@qUS?gi@|PVQ5#-UJwVz~2^_%s3!H z2RSVF_zO&PfCnlKn~N|T`??_gvLJOxuYUrFcHzb~;8t+K0&UzDaC^Y+1Bi(BC1(0L+*&XVR=`^Cr%mI(PEy>GNk!m&~R$ zJ9VnkDON_68a-MG=_W;idhoM{?;gFZ@wRe(=MJ5@apJ^zyLJs5wrkeTj$=pS2A)%j z=5E@=CkKdd47DXNVBp)ickkM@dv~v1y?5!_|D_Yx*ju->*RpL>tJWH3YXqukuIAZu zfB@A(i~el-^k{1f$jOVRE?&BD=4Q8Bw{D(0c=WbnjpxqYx^$1daRaCAnt=q|xOvNl zz(BTg?&!^{H*a3NcjLx=`{u3SL4@DRc_5i_q{oaO&}&2=(xUm3Cr40I#tbO_{QCFv z?~h-aG%z(YpfX8?QVAuLG_?s*p@gE~CSmlG&sFzew_A3)Q5VlT+oc0pHfxEP8D`v& z!+{Bbpc2YlZ`2^q0^g9+fCAV&P*`E<2!@qzg0(Z2IN*3w8Cuy~h8Y1#7EsM*qd6Jc zXr!6eq-mlR0M0qKnKO?%;)I0`m|M{!|Iaz{)B_JZ@xU_=Sn13bq?g}pgTPtYB#;?5 z=TtWjJ@sI<4m#=BMhYwZB@Zfiih>S4_|#PS>{HKGSda=2m$Qu%jyKrQi9oW}AP^1*eIkZWJ@mL! z+i&NDBc!3zVE-433cI8aX19r@0%YyYHe#rDp^@fQ~vHrgP4k>+t(AW9h_$ z4mZ|@Wm`M&sIx7YVKsNnbEqe`rJwlNiqAajxU&_YBYR^gcPB&O_C+(t{L!Pn(=1O1 z#Lq0e@5w{@`+FOWK-4rw6Foik)%#@hr>Yu-6s+AFwTXg^Fp`Kphh2@&KCUCSey{KV zI!-rZlU+92BwAy@HQH!{|Cavj*nKx+1mi8e^(h}`64&jTW27S)E^+UApp+UHufIGD zEa6hqI?T}ydJIN5V@bz$3}&0$#G@UqvCTNZ5t+*%AOYCWMmXTHKJ{T|O&l6X3cCZ2 zaF~od@^~3WXePwt4euhw`+yLW7_;IP&t^{i2+vOSDeF(Ql~31H^2mF@qXZ zBog%lOf+5-kEzt5GL>c>_yEtYDb=Y4O&JA(RT%5iv@Qx_oc-7bKg!7u3b~F12K>OT zGDwz4O7c#1|Fq*gNtC(-+%u5-*oQwmCXalK;E-vWn{Uto4t0F3m)t-Lx~%b;!$s7A zm|Pc=T8IE`GypQ*@di7-(wGaHBORu^ok+p)uyv>-HyLD%IJ$9}`c15b*zm?WIJ7T! zl!F}L_=Y37p}&jnE}2U$DlwHwJew&Ms6|C4aFH7`576fq_n|6uql=#b0iY<|bI>ME zAuCE$LK0p@V_2tVt9>kTR~&K-WYQv8{N*t@aE~HfE(~!A6bz$lg7+G`{#VOL7v>maMoAm%Ccz z2k7C(?8G)6xY^Z*hGe8WEeSM?g=m5$NMCfsgE-@WVa*6s>-~xBnMkO9mmm30V zB$>&+{xuf2s?~2AMHOTiC&$1$Ry20ZH;i%QxfH+`F^kzREuD;H&T@@#WQ9U~q7FRJ z|GG7Kn8`X>p^j<3;Z-j$T<1hzsgw*AmQdWQ4 z2+>)#p^XrkP16=bj%(?<(1d$KIExXM$r2R-pZ2)p&HS-4k;p_J=UUddUgpR}4qOpT zBb&f}Ig^{AjO;$BE_HcTvGMSOswDfISS#3&7M=k8Nt|L6+aty9_s(~ELmuhN$9`Xf zCOKyX1obdebtZD1e}!~^E>sKRo&@iB!^;}qSd4JUaXHa_BO5XDk|%|Q-mwS?lE)#D zSt!<|z*X{}1ds z$<&28=&woLqA=)bl~6>hjPf8wxSB+0}}(zKGk9?$#raqyDFOajKU_{TGz@|veL$z5LMNgl~n9smMY=Y^gELf7`l z%26DMgLILVp}^~H4Ah-ZF3E`>N!!q^SJBaxSuE7^se|k#hB|ainhX*=@I&%h2iF*s zvzY^;DIC~66!ke)ycs|@bk@Z!hc*z$SD1r3$O$-f7MKiNH>6)eUBhW?|3;rFi2oogZ`L<8D&KZUdL9<4Pvkv$6O6=s6$HC z1~@33ofz1=QIhqAMge$(SfoQHD#R>>gE)|uqIn4^by*UsP$Vr*`z47Ukxgd!g=L6H z{cuA$TtLd5ApstsFpeP-`IIq+Au{@u6f@3BZnZ z4Bzk(iePz%{xF0fqQxLC+@y&VJmkZeXbhUvgP5FKpV&h`B%8h zoB2&}IMVIJ)Hm2zLKxlJ>`yjG+irmabClP{q)BzC;2?dQJun+SxX(Ix)F*KRwj}@o zBu=~lB-vR*MlAq=N!C-w$T#eZH-JN9s1V?c*ftCpHuPg@6wV#p5j_niN6HfdG{8A1 zqyLTMFfL*W@h#$e?DgCeM;g)I$Qudh|FyviplibH!Q$Col9;STwNBQoKXloc+?}_OPZLF4Dro%paYAogOEsJ zvNWN277ir^WM~k8p{URTe3`@zA|NURSm4xbD%@Tk|6D9p5|f-w`F9yi?PkkXYx)W~3QUqT(6hzg!!frdj-Nt9w_u~cbCmg)nX0|#(G zN}}OYh3T38r+=C$vL>stV&)ifz^>T`g0`u&@`S1Yz%qOfgB*pnB83-eD<2?1Rd|3p zumd~%={b~xIuz=?7;2x&SOcJiw7t+dp2Obs|4Eu`1!Lr^#pP>Zgp0V0138#Z_x0th zdg?rds*d{ELqUnf;FGGprO_#e{z#hwYy&xLL}lvdInsz}~{@9qX2p+}EU#BY0UrrRriY#GvWc}Qaa`cdUk|||IrhdvSW-2b@B5Tcd zO3p^^O$>-MFoWtj$Wt81QZxwnumT}K{{abL>b;Eaz4$3RoDc_yPPyvE+H~M62XVF46!c<_2w2 z+%HoYg(3_>4wL{1q{I)wL+YL`JD^Fq!b75gTzRr*aY-4S_nbD*l4p(GHD5cP0DTLbav0#?$uC5DY@$FhX2QIc2{*?2yrRqJ+lI@Dr z1n=c?n2a|lKqOye-_nn*mMnZ(Mj?&|I}q^@r?MymF+i8ES&MZ-oAp?yb@_&X7Co2C zK{U>06D$K|_uw2Hep6ILg&+um8Mr}UOF<6wz({*B3!nf==Yu?CXleP4M==aWxs#E! z)Bu2k2f*X(WCw5n{|d&!lKv!19!;q&+7AvhPLx{A-zFWWwGdq?fSueXLRK(jOt4u{ zHuPT9KzyiTnT0K zEHeny9LUo^h<4S*B)majBf$^U01e~-7Yp+UkiZCpfIW~v2`Kg#g8;b}EwBU$^qob4 z4L~S_CkT*$7qRe8{5i5$bGn0f@MgXrvx%8sF}*c}gipwt1T?9Xf&*kW6Gk)g|;L)c)kp8Oz8w zST&L`_#PJ~NA7dyc(RMHwR6+>jK4T@Q#y1<_lv)^s`Q$UM{bYDayLcb_psh-R>dM= z-F1A6`v_J${W;Qtzz8UI7ngv2C+#}ePV0hTa)^ToWye+w##$+_ouF7Y>k)(h^gTD> z*#<9A-*Dg269UA@?Ep!aWnw#Ll%>p%8=h&EvrH$2qg;O!yBzhR$hlA9%X7Z^E#hw2aEs< zq<0J0dIFP!INWi$NCy6y%qf{rYBdM{^u=ICxSPLu2usk%M(NpRbvGLT40RbBpOPcp z7Rlh$q3$jbnPeKR3O{dyI>$cuU7@$j5{&!-t@%u0{uxKntih4U7QOCT-Ym@H-(SJ}rQv z8OjSGmYG>wu7+xZ)9REkiK1h#9=kj_XiH-V3J>zjp?FepuvjK0+HrU}OdV?An!C@p z|CeQST8g`8rqg@qv-{|eKGQQj=^H&-Q#UZ=d(|80=xsOWDo7=KEK@4339O~Zpg?m+u$o_G>%(GAfJ_r{8 zHjqPXDF)iL$@iTMcRUPt_$i>w=AajtIe$YzTtnZLxO!^-{ZQdr#Q!+}#DxnS2o^MG z&_lt592OpA=n!JVhZ7fG2+<5!GmQW^cJ%lWWJr-CNtQHu5@kx2D^qHe#%$B3Q>Q{z zqI8o|B|-h{;k!q#-p_jT;>CLx4<5XD?Z%1QmhBn>0|*c#uzEECHU-)mJdl7P|3nB1 z=D>L~>uuZ9wAs3OYa7m+wgun9apQ)~ssU>S_7*5WfIzjtgR2!bTrB|N!-D}g2JF`_ zf^X~It!szQT)WHY(wQ5#4qZ5O-@Jt*H*VZHbnD1^vwIEpHEY+far4#yTQzIDt?AXv zn=kL)!*|Puo$XsWb^{FxyufZbbBF{bPM^LI`*aZ0fJvJ+jb(W8a3XMyoe0#4 zpqy~5G;KNS7MhlQ8nh2cJgsyRRO4;Gu_7 zc-Bb=tpuVv&?>DI9MQn2Vxvug4YzTv8*a4821?qx>2MpnJRPybz8+(2Ma5cl(M1|% zWXu`?3@~S&caGZ8$Nl0V%BXgbx^x_G${GipYEh#Wtx;pEjTqj|Gi0|SactJ_UQ@I zi0O$39dYi`^r{4@oOQ&gM%470aAAWot&&-d@|pw;zy_*owAu7GTU9)4SHyO$`9;C} zBFwRC$SKOGc-C2mD0=R}2dQ~}EGnH2o0PUGZ>TMcK&bGF(m@gZ;_bJXck}w|acldg z+IOu?6;;=^X`meGtaF>r>JCaM-|hmw8}GcuV`g7vV#29C_fDB43V!U_XHk6YiMUZo z*BR$RtP)A)C|SmE)yw~Sj4#M$ruk-^TTk)y8D~_$9ZKV& z=bdwEx9?GS=Amclcf1j&X|u!;jcl{J<>slDX^WSe1h(dS|J>og-VL$@T(e7gyS!H( zLnyt803znhZ|>gdESg3cW|UDz@A&1PzawA(0OoH>IN>Cen&1nAAM;sMJ|cFsNWBA7 z+qm51*ElLtN+^}?Y5O*5D2(15^kt#@H#Rax1VsuYlbELE>dU*ZjwB*?9}cyAjGgja~5 zgrRV-g98JRjux|6zVsdB0^8vm{m58GfPH5g&5+4WDq#~!%p?>$5g@~Yavz_-10CIX zO1!kO6>cm5kbHbnRyx)(szfDRRodZzh*vyS#flqY|4I?hWXCH@p3r87nOR^0uz=sq z1C;Z)Pf{EO6jS)$8W19lEeM|}1Ci9sk&dQyC>`VY=YZm(KuM-3S1iKh2~C(78qG)m z-~eSjhBB%Bu;T;xFq(aa5=zjxLmi+Q2Rg=4j&+1XHLe6lHV!nwlnt^k!2wR{sJE9J zEnrpIP*t~p2tA*k3`#+@$^zI?0cf7@eCqom{|B~XH*G!@s^L-NCMxkwaKeWYPzazo z1(+X7sY4ukMAB*86b?7hvjI325mv4O#04O!9scy^A_dwR9x@MQ)>x54NqDmoGSq|! z9ZUck02GeuhaIND&+j6IkNvn~9p?zCJNTmxca$_p>WC$^wjsf7d1C?Ch-sI$CR5?? zg&PeR= z3TH%s0ANENN7Lwi>;Vk#wr{fkcT|VG1hTd2}1R}*j2nyj%Cp!hXEa^II1NrS4JyVp@WTm z9SYxG%~!s;LWck&l@EKU!yM}Hz<&1g6FO6tvI|}sXhQ1W>$-BgR}(P;_R^O^XE>&i zIS>LoCY7nYHJO79Dh5j@L@03s0@2ALi#N^bq;?T*<*TNkZd__@3Thby+XO4TS+GqY zs&MnM2Xy5@F>q{S0q5|*2RKlU|8bb(ac-LD0=O|bZv4z>&8kdiJab+ydwD>q(&Nh# z&{r7I?5}99nPEC9k9-Ij9_B0(In<%Fqx>!&wW|kYW9bg1LDoO3iR?KZOO6Dy;~OS+ zZ}m!R=;`%TWqJu20}gwA$hp zC#CGYyqcsYHVZOKunXJ-O-C-lLo-V*l=P1YgZ~Jh>d)mdjwfHo;vk}PuA8#~* zxW0+i2&N_wMG_W}HqTJW^6XE!QGL0|(oM(7EPV^oU6mPE!u=HlgC;~SKu90u?H3@`r_ zuQ|ks8T=0b-_T!j%(xDQJ$kH-W`Ys&pdT3J9@rsTDugt|t3Tc$_GB*Tj07CiAwTr1 z$XqDD(v1*lkFqSI9fEG8)*-CAL67um1!H7qR>z@cX1)->9U7$`_@VPO%N#^+6){7l z%A$upqvwJ!2y8_?nSt|5e;FvDzwO5%mKcH{S82X=xZOpL>po<}Y& zM()al9O@6Z{}6A}U<}5jDU7J08PEt0!x2z`p*xh}joK)=XrijzsEx<~1(dHW$YyHH zAt~4)=7LVF&8s~5Fx9bGI1NoO!#z$FR~;V4Fg58&4d(S z9@yb`V#rd$LFTRn7SE!GNQxII+Zyr( zWhypigVCT-8wjoZbc!w@Kpo5w)SLqi)exy#vJSc1z3PA;ej2jkD?sq9vEd(8U-Fc;2!v67L%gthKAiZBONp`tT-`eCW$y) zFeh(?+gfJ<dFlM8txPdN|11X*3LM6`dx`-V@AR5N#Hbb;LrYdmUqeS~>4r#&< z|6G6sCgw-T3m#}75psYASbzmkU<4RuA9i#fBIRLXC@Ak;d)S)uQOEcsuthOOE z7oz~eh0vT33mvjXWG6Jk0hHJQ9FR%1o508_=1lBtU+ExD=@5-=@!6V!f7L>E;h_C+JCYR6_` zf7auhP=ONQzyxaTF4y4$Mt}xvff$GZ6ht)(x{6T<$UclFAb|$<;=vxz!5k_hN&V?n zfDtEkrYab1H|on1KM^7)vM{W{tl}jBdc%CZg;!Kz)O#$jF-hP8)xwT8K9HUOlqpzaNuo`(S)yrhWfgW$&De87KWgpglr&kw zd^7_quX%53MQZdfh-5=#-OI*bPa;9rxVZK=r7x@gLd~o*_ap!5plpNfpG&BdxF~r| zo$N075br46Z>ww4+m1*xc~wid4=1&PLvr!t3`j>#RSOcSv%24`ABdTY0*22Gqi2HLUiqn4*$3f zNxTe~)gWb+5ixXxeB@fRW{#7aG-Dqujp)Hd$;3w*Rhh1326N*%7=SnbLXuNDR4L+a z*Qr&*!IjW&*Nf(ytp9wIZdh}eBTipneJkvDH3~MOp|ElD8>}QiEh5QMVA-qw!nxj~ z(fJ@u8#8EfCB&PL^ALX7M)pKpg)?VeUMi@!!k}?lq7K9ATkftAKaKLd-7MNNEf*U~ z%$l&Ew38AwHf$y>SK~m6L)5c%IFkgkpetbq4Tg_W)T@`o&Prr`XlT?M>x(u!Fni}p z9!Czb-|NWv1yH#v@3U157`kipx|eZ`@gg^1o~mA6G(RGU58j7u8qlSKOdYxmbi-NG zW$Y+@WVt?&htp|-F6A$ELag}R65}3~AiVPG(#84WR_>!!1P_SB{u5lbfWXeoOSxuKH=}>h11=PiCyX1w5ci zaYvD=n+UjDbv{aFk$^e%(#=TbcJ(dmW=;!;x|9o!Fvd-X5;bh#{k?CKZqZ{pTxodG z^+F0MvnVAh*^x{8k1ee63Spi{_dKu*IX}~HMPz*1;?VrcQTc&pB@BJ)OcOru{HyfF z#YWXPB5A%uRk3=PA_+ac3JDfAw~%u-gGkqoo$SWa)S!2wvuYtW?ru7idNAo{N`=5U zQN(7Q5Ui#zZAWR#*ngfTn?QhmdU#UtI#|v zztWvg5A#!5;eA+TEwD7yvSrmR>rD4vy_=5cN#Jr7D@l-F(T$7g=ZRW}r${a?$bG($ zzgoAlFB(}te8@lBzh9~8YM3T#5p7n7b8Rm2szb)>37_5F76Ug@p9S;B^)z!RRcd)yGHQoUfg@im9j!@sT4z0zq5 zQ`SCB7-17i^Q^BnNP=85=jm5nB60=4?JCG(c~xjQS{gRk1NOWM!f)jB49;!r5C%AO zQogt(NC&3mQ`fqh?3&hS+u=KOnd9D-E*N}q(P-HqTCS=wiLo!9j9pI}(QJ2c9$et* zaB8*f{W~_=`@8NvEvK9_gT?@D79sF+oaom3RVGMnt%7DkL zxnaYcO;<`0EZSPa>{=Ou5@^n6oMP1@Dj}H{<~PqC5kV(&fa72EPRV$YWnT@FjA+Gw zdhl(^L-ziM#Re|??$WM7ijRVg>57DOPi@%D&mPvYfu0+y3qng+$Mp0Soyx=G-Xvz# z_r%V$7gP@jZ(vE0zXy!pH@?v{87vUe`@(M5MD*TumF&ep>>QExF8N|NcdrJG*!FVH z5G0ZI=F+`H;3YTlCuBfqh3dXDr%{4^{*y`LXs-%)qH)Cq?^}9M!>TYXgJ9B^banEZ z^9^t`2i)lxyViZ!v!e2AMLjnx+Ti-Y8y-u!eSh<`rm*OX${LaO^IP1X$S^c`G>Izb zjesJ88L{*|pUCI~N)@y*{{)+k5|pTSHvomeEn^-%|nCi{+oQA^KH%yYp-bPn$?UBjvqH zQEtvab9wu$bK2>OLAJ{~4GnxBzVYZmU2hMpuyNrT`ad|!)@|Ru|8pF}p+h{8 zq@65U)h51g`cl8Shr2V#+MXcI+#Got{4NA zC>u^@xMkCalW=V_`pgFFzt&^l=Fxba8?`$aDIe>2VimkgNd7+BXxnvv zy$?h2;|u!>zr_}NUX5ndVvLyIo~(Py7&9 zn5|F{dR5FNbov*}o~iT!j&K5z!+|^^GLZ->?4nM`8(AxRskc{3C-LXz$}S`HG|GEv zyl>^#r_4D#R)%FPK{O8EZJfk_6eo`? zC~a!&7ke)&CsUb58J@OxZh^D73K77DQ&F4#CRXO+LXSh<>%HqxUw2RF*l3S&;WD6wi z(L?yhPIy%MH5-oacz=@jW|Mt+qGhLWq~o-E-}hFH{eLJGv)H=!hk7-a^Y%Fc+5HywU6ho0xe6!J?j4z z^}riQoVL;xnLCHLlV-!9nX|`dJ#XJG2gX^*4tmEO#hEHnbo#%qQ5SXjIlpy7_3v@q zpbI{LBG>A33~z=)NuMhrRp zw#S=WvR%kYZxanXB$Uk8>qDabze*sWA;Iaf6iYDmdyWH2Fbfc2b>ILUV(Emjte-$9 zjfh%vXnpvOxfv!$zpH0|;0u2=K2+({Sxc8j@Zeeplz0NEyF{FX-wOd2tuy)H<6Sd# zTNt(znGwDcck9J6m&%k!X3P{X*DfsSs)?YTu{ALwy>jfd4z^_f(f{uDQs9_UXXu@0 z4e2-HS0LA?Z|bNi-jofe<$0LA*1L!;-49kkZ;ejZ#g4=S3qF`^7ZG)!6RDRAIsNmu zKairTwfEg6H}2!hTXxawN|FtgqJm*raanGt(sk#U&7l;>lrgt2y7K~lIX9#Vkd($= z0(3rbscRcaGHs24JR7>Go`I0^etZ=4Y`g6hx0CSVH0fm*sLpmEj!UW)qB>hZ6WK7t z!3?^gI8B>D`$SU4{+g<~-7yBh(d>IxTl0$B1z*nHY*m6NS>LhX`5Ng(pkPDAVWh}Y zm1N=0(wu%M3O(!&^WNwZRGhjZdc1L*C|7Hp^=kYD({@&tlR#PqdGOCC)2sKZl}C)E zyjZw$av>@w64v6WQCvuC9~d@Joh9qoz^fG?F%`wosl%`|F=*m9wUpqdWVR}+nH08M zy`M}iKsO*pw7!m*o7Lq79*l?|w?mXUSQ$d`ycr{)x18Tj?;4Wk0xS5mF3GL@PCi+V zU8^zWx8^f4O|CvJ2b4J#j74KI1a>cb!0F3Q(NK0C(uB1ds^3HXEl;zu*1Hj7)`p%` zIWh3sv=d=|PwBqjUfuV_U$cs6#ly>>U|2LDI_!s;*V_g#AAA6sk25b`rSvq+H3DyX z=~|ix6`K!}hbMneziO8Sytl;-Ttm(nqgu)>Im?pnZabHcH<)rE6~>ZK8b#O1V24Ob zFTX(~wZ9905Gf0Qp$kcehQ>*Kv}#eh{u%b@Exo+~v7uMbMt-cdWTfNVw!h**G39kj zi2Qg|es*TG?K<81uZZL4xG{B6zPJMEVF`I9Qa$x&*qCw#G${Gk>&GErJ}fkDs_0NS zQpkG3#=neSfq)T+cA8`q8Y8}7tQ?87d~L1)1OlBvctKFKvLd^4ACG9%cHE6)D}&-7 zzRa2@uFdyP>Pej|AHU!K=}VUjm)#A^^R2llM`My*tCz}HbzQ>SM?sV(OEYM?%Abe5 zE(S?(@Vxc7;w73KeEn3jS6(bKXm~5e#71lD_TPW{@}GpX3%w5Y_T&Yf;Q)8F!XnqbX#X`>KW5Xcv8!A3!B>C5!PT8a`7vi8=zcN!hS<_TXDJNo5|3F) z-bcP}TfP7IQS_$tv#zmwUjsth*!O5YIa1+)5PTAHAH@94_zw;q0=yLvE?DzV2zjk~d{+=A|`{6rrm=OPoXUkER zf_w1r?AfP3p*QaUEAJj86CAIjNe?x5Gdcgfe)u<}?vB>kGur=Y{Qv;t^O|rKCfyz_gVGY> z*AVzhAHV+rfuG}=I~QsC4+MU4;q{B=Pp@<{sTwG{#P!s8Ke@?FMbtgFPv?DB5+`4= zIcUyzZT%?R+<9d#8UFu5;FY-#)&2v4Z?AW}hQQn2+)f|z31$>9cyaH|FqU3w{CD`w z=IA40fvQ_wr~exS{sZ~sO|2|;BzZsN3bamYcJX~*|5Z>M7n=2$Y=fBP*~^!IM?I#x zXw@B^9|BnLW+DQ#=DCgupwfBzfLQo43%%8C497B9u+Y<)IAKOKUF79a3?N~zM1)S) zhI1S#KV4ah?1to1QOt_u4M2Q0!a_88y@ofH>0;c3j?EbZ2H;v4Fplo89E?sxa>9)v z8S&GN$KYv~3D1@@89Lu@VRP%Tpz!I8up8a*B%&W*J1Oj|*e+1)4a)Mk-Cv^SSpwAX zcs>oC6-E`;&DRP(WjW7DLrk23-XK!32m9W08j9&AGaAH*%2}NuR2A6W##_2b_2%cA zihQ5XwKe~D>j#1K)=|qalkd^pAK?{Mvgwdh5T|k8k~#yY=5*{<%2(_6mUf*ZL82T_hDuvoJmN zDLcNleu$hn_HoOdjObgZos8b4aupj3d;&VXwto1XP6$;uoKA|oI68eT{{ORne1C_4 zh=zF1uXB&$)QLHLX7Ajcqntx&rw27gn#S(yqy28E^BgMxD{`QSPwfdaZfxwi%q&Tq(iDS%vnl6Gm z1LQWxSe7X~soeMgb(HwcNW41NdZ2u&2DzzzDzuuqRSjdN2N&fSr!a0EWM$(^l=_)l zNk^y7!Q_^J;DgFsxyfg7``k=`l_t_96=d<7@FwczYDx3#$YB~t!&KVlC4m-7kK8Zt z*Gn$y50ImA5ww8YN*N2}lmeS;40rc)WvAj9!)6(?0)%ozZt0lHgA;hL**Lqfqz)qI zBrBkV_r{O$F|F1a?shAkCs4Z7xEc_nKZqdg5;URwoQ$z}cpGuXr)PF7&Uas*698|C zNam5BFpg72?=VBSNFhT=IKEyk+hplijFI;XJ`rBH@Koru*%c#I&X|&xG|c z@oH`j@(Bf16SI{8-wR7&rZiUYtTQUIr;yTk3*VbrTdZvbpNe-BgM>EHmlUK|DlhoqYe zWlH`+B~VwCF~8Z@5Kb|E%>*u2U*^_vBkIVr7_9nK!GHT5n_(OwxTelf)FSz(q285& zRG~<$u%V{M>(vLQg;pxQlHK00Sg0G_%Z5rsZm+?|DyFJjt3B_%6eGJTshX}nemP(3 zM&Hqeo-t9VErsN}Q);(o#50-6VD3bI+JhGD6d?w3wwVzvSz2kYBZQ)UR+2?~8HDKg z;qBLsLS~;cbvJ3J2U)b70N(r}23Gx8#rbDqmW3T5P15%i^qbz2p>&G9{uNVK~a>hRX&iA`g^1*FW>@xfi%#oS#)U9Xul zkM+pX-!+*XUD&3DW%K5SXIx^u6`j8~Jb8Q|Yp`Vc@B2nbmZsE0VTze4I`9>Ni-hpd zR@@07IO$AA6lsDscnBCC=DHPDMhv&416L?L_gYZ4d8${@1IC&5?K-KXhACb2T#xOW z0P&9Hk6sVnRR=S&&iWluW73A^51|+ef|Q$!$zcQ{@encp)9k29>ak8@wQZ&xnW{lq z@5kIz^WhMqmtxkmSb#=_;`AxempLVCC~agG+(ZatJq1yzai{-mmBz);#`xt3Epc=2 z&jtGJ9})z`u)j6Y#SG67R6}gL@%rfW%forwRcbS7PV$7VvESWW?gK0N-mmszjnxn_ zDXKZOXG~q=M=dr%pY3eO4Mm0wBk4hN=)fnxwMPP86`$-0i#qlxtfdKXe&wADB7%1rt8-*?P^^kh#% zZ1=_3qD!hb?2(mh%6OcED2+~q1J`U!VTJ#n`|N0G!aZcCgEh-EnuL{8=RL_FC}GyA z+*VMB2a8!(AvS_vTof*o-A}3b^`yElH?W?z$$)1s=f%B+&sRgQB5nE|FUN)(G)(-H zmu-3S;K|zKwL}28jS1XgPj%7c>F<_1*7v?^*C-~*9vNi#FWfTJ{BB)!6xHC}b!VQh z8>GCFAq+w=!&57W4Bu0dP=ze(d=k(87opGQyCIE;+m*HkLa@`8AXzQg zH7Ph?p89kWI;yA=ZYCamOCS8&<3Z<bls48GkJJie*D~iXlh6a4T@^C8Cr0oQN8*NgaVBifxhDpv| z4`({z_JAW_e=gL!>D(*&y0m|m+*_H_(;m3qZUdd6{w@dmBn~?ZHtiU79p2F&mO-0$ z+6C?;T6VgHg+?U=Te{FOWV$*mZzEI$F~l29+w~NL$InT!|tx_hh^7mRB36 zdRd!=28bg(Mc1Q8!ZUz;sC|X!Tg$K(f|L{=Ra85fZl!L&JM8NZg9nxoV(t%CAwH$M z;jed05G1yj+6H`&T{^X3*VjzzaF~OX%Z}xPjy%{vLLf3!e}6d9jo)E4FUnnrVHtd5 zs_X8jYzJ;E3Gsa^HD(lXB@fC8)w!4ydPPhE=ZC@0t?wrW*lK%*J z&`5P2DsxwL+8NJlU+(uysozXguUkxLN5c?|ww)E`l9jp!^7;)~_g`wlGA)9pLc9m( z?G7sLALRy_3&Ga1sEA9c00Pa|HkE$!2cry$E}<}8510tES$~9GX0RnLJGgZeO`Ure zXkq!1z^5S>;#igRq0@0eJ~T@Pg@fku%44^1x%^(aA+j(P1#_)hRQ7(1-lo*;GtFv( zNiKmbOBM#w7El+kbjvZIuhzX25tz+n%R1rh_cQsPjBoyhYYQU{yEZIB;riPFl<;ny z?kT)sZqD+STODD@T^qcmyT_H#-Pc-o&9q=)LN}Zdd;+uXi(W9m!Ny42qBtxPZMS7D13n8oWp^#FX&d=zK zh$0(EW##0vfh1$3H9m4%?t0Hfx_T{=J@ESJ%1Cb8Zx;Sq+L>^Wsj7MZV9y{Stk_A< zoR$oj>87q`dP0JPK4U4R#u&MG7=f0`Q#*(?Hf#DB(iV2)Go+HRB!zMAuz=&cpyy8y zYk45&Ruq-d%#3y0Om+MFkN#NK>3E0!ngEFdF=iy8A_ckn3Un7*^$J^>kD;0K%+4^q z_}i7fQ@OGHiKZg_;ZyMqb_<4q%nb~(WyC>@5F~Z=DAh-V!;)S~$(Y-xqK9W@azfYh zJ+Q{8GPwCl7D{Gy_YQf*uNiJqTGB&r7>SI>s32-(*Pomz^fa>hz6X|qB-FgenEgDu zyc@^5(=39nOFa+$lSqqiVS}bhJr;twZ{3@>6nHf1J(2LdJ>J0S^OIJYtk)ynt?eoO zp)W{(7C>pA#F7IJQl$rD*@etz>lMCVi5`NosX@=HK^Wo?ghAR*v)2(08AXgK8-9^2 zJjO66(E=Z6+xi8>2{T?ny3s6HQ&eM%T|@DZpXK~&^UkBNJ z>ZHNG9=;^OfNZA|Al%Rem#5h&Nq4kiw{mAaTdi`Eg z&ECfe9hJYE$C-_%P%_b^fZJn=3oR4d6ef-m$|M&SILDyUwlsRI-g!C9zVIRRYAjyK z%l2M%y|ZpmfTn<6mA;S*4M}M~IEac2#uIaVuM=!>yRyco()8mNBntw(6^6A6QA3_n zZNX{&!XRTEetY0r0G0$YR(q2ut$Ij`q(GUeae){-(n6!xJYrm@q6Or04=$Vax^Y)* zG1e53vm7mYKCs0;)I1QzC~@!IVcKxtbNuEu+aH<}Z5%=cJ~ zecfnxF=KdGERtS_mb4%Cf{X-GqUzD9mDlN`Z}#O679>*b@}Wvuh*ZKC_HU~CNl6)i zVimTG1g;IMftD^U#(V%E25aXjzqSFif+VtuC9>12saBL=N9)7)y_b1?>29`6dStmQ#CQcXPofPxKzx^9 zfZq((u}@Vb0<$%I@+!=(wmRw;h1KE7jN0QSGZ%jnegyQY((z39+0lh#5R<2FVTT!i zWrogNqE#h{@my^h%m5r0CIYKq?4)-kOGQ93eQ94(02fR7T1@1wpY0ZP8;<8Qdpr7G z^P`jdU~nK53$r{L*5^u~CYh-wMZm6g4yt~M@S8O;>!inqu*}znTzJ^@=XYfI32au| zK5L;>+ADM;TvjaPXS`Ly6UWX)+}0|V=W^Cky8~j7!MgLzY~;gn`kT-B3sC0)+EV!U zD!h8zJ&;(qRfkF5V&B;OJ%LW!wgcxFSUUwb^?iS%dzw%kHJWWy>N0_9C6FrC1|UHI zpqUpseiqePZk^y8C)$reL9M*&Ah%=KwbnuPDs4}sFnFqf@$`)AClWTm@rc_H<;>K) zE(!zXdOYcPHrw}XxVk9k?@|_I?!=x}6b&L`Z!s#QttTSyMeL}nua`I#*M0F0_-y-r z@%g;jf=AR`k|%6Ke1;@D;@3JnPXZK4z7KMy0-W|pPKcr?jCR^1NH&I`n2lL7py+6U zT6q;SKB7NprL1c#uxcHUA6nJZW@F%#dz6W&mNfs`61rorA&0W3{J zvhS&B3#sWptO$Sp0!C7EqvT>`l9sN(z%0wG^ZKhp-RRIq(a(NkVLOFvBN;a@r?Twd zaOH&_HNu3l7W7}8iL`vnVs5MBY9rry!-(8z{VMg6@Q}iCNPb70D%C_a>`BLnzPcLC zH9#Hoe3E2i5+eo^uInFlhqd7zhl;^CZaaXHP!j~~08ahU>3Rh&dlw5^L(O~u8X=`r zZ9>5bk03T4FnOb0K*sU07%Ju5ct^|0)U(Koa%@_p@=N;MrBO`X+i#|hl?Gq8b;Ueq zfE{`a1ZmIm0DJ3(;|qyCm=#GsOpzBr(~y=14ZoZq5;y`8HHJO?0V;g~adur@-;I0t zCrxRwa0RAvT)o54O-@VlHN(lDRTNsN?Fh^>o7=)xh@MJ22EU z82|JmRtc^gC-MhDg7F|20H)@%n!d*SkTHt6ElqEz<7oM1{YWVZ!g0B>#^jo0K&2^M z#)4eoc)r#U5V2lvKPg9~MM9V9!}pWPArF+q!yOL}ol0v|E8dDS4GaGA-XNix8rtAqe~i5C!^_tp7u- zUiLZYA)N;N7^Fsmc*5p~;Q7oR|AE$r6W6i+HeT;BX!_OhA4C8F=?UkXXA`;&&K44C zc@>36!iR0}7zw}$Zy-5l<)zf@3(rsgTapQVn4bJ!&ovx-H>?Sv~IAI&KUh)De2`_B{P+Q1& zznt+~*nRyP4r(xH03Ony3 z7zpa?WMYjR8Y)z8tIdwoQAOR0fWnqJJ3t~T7S#-N7%UJvbFLmTDi+r+f* z)7Din8H_^gjXhwe3G5k&(98kFy0i?u?MOpSQnyi(QpwnjYfP}2Lucu3sp!mp(0Np$ zsf!{Gbxvd#fEHMAt4Haz1mxJb$>a&i&a1OANLVHq!SNqI0g1n=g1a$+iu$X{V& z&d=fZUeZE|e8C9Z6I!MmZPoau=b3n)dX<`nR&h869-ILJUIh%B*WJOqt-Wel?LC_$ zdZ+Qn=DzM7-{asxeTaGcrwK83TL9oxU_Sr!Zg9$IQ-=L7QyR2byrln2qSb z!Fvphau}Ogs6a01>9}h;qIC(LBmG`}`~bj{p(}~9B)RNISZ{d%QT#$Beml#$M7|!f z(2|4W50KKR;T0duuZqgd;x;FNn(IBCn8@-47`ti(RJiX$F!*s(c-SWrdhQs;RLW1} zavI|rFDzdlsq1L+;R@gD5j!!@84w}p=Us$LIvu>g>yLjZ8S>}-VqO!{8P8@nI?3p- zb7MXnN2ond?uBkE0%$sAQkM)*)?uJgA9vbn!nIE2ra~U5jr=8Xr4$JTbKUukP@bQm z&L;xGw?KsHh#XNYjKH>l7?&pyDHSuu`+x>gD1y=8Mul&;?dffM-?|HTkkqNA%yNAs zt?I;rMNCYjbuN2e2*+c19!mTw{?mD>DW2%T`ofxYOL>+qx1@sKcjeQTa(-9Jml_x1 zLV99P2s+wITM0x9DQq|EDWr0OGx_22er0EBoWw z_!bl*9}}KM_7w&H#WMb$`V6nUN@gr=H5)Hf(cHlemdcJIC-7-%V(o&QTg44oVt?v8 zMNI}U`WlTqXd{!!_j`Dw*fmgbRvxI?G$$DtQ#mH$kH5N{1Q5bFQ>Wc}qGZoIqyu9h zhzU)iv_FqzgBB6mQ>?mBll|<2i8W;lfBaIdZx*r)(V)$${+En&sdrujRQ1|U5*+a4 zfCEVEW-~3(iXHINSqB8=Q#{PdNwP-~vOL{}LfZG)yfd;NgwSnw`BW6}j&sU9<_zBk z+x#iSQ#_Ugg0hG?&S;rskA<_&8Qj8B-JFoqKij0q;%$IHP9$9*l^=@A+aT74nhd0F zaC4^`;*6v^+U^_RbFq&*F||D=DPXd~ssAf;w|xdeYag_lXvnbIvD<*?))$&cCJqrr z*=62-4BD^Ye$FJ(R*quo&tFfc?=Vz9UyISWlIQ-Qvtv+6y9b}(2N@@@llx=^Tj@sr z63%Q!FV43Tq!Rar%aLAKqqq=M(#}L8#kqP1o+eXjzQ8c(uf5zdEC9`i)JdHrIDDxUSNLivc^ zuEFJn7dn;KgTqut8&j}xz1RYZ4T@RM`J6lm?C3&j!n5^4VeUu<+z~kE$ukue9%vV7 z!b3?Z-|;M2M%cI$-4a|p`&@D{dit5-c4-_}J2%zNN|<^(s{8!BPoZ@`&A;T1_a8OB zmysgc8AEsC#FNsCMR7a~5>PqH3eWFXEaVCfaMzl)t4(GLx_F15%URaJ!h6EA zttP8;x76ex?cI5de}`q#QIEC&(ZV#?I1NL(-%zcM3RLs5Z48$iZqnve8P7fX?lmFa zN@l6+-b3Q8{pt#eHoZL(`o1gl>fm@Ho#ZH>1S#ohe&|aPtZ&ON~6wAa4}tfGBVDzu>9!sV~8Mc6$SM?NKtZ-?(j$ z7<936?z%j)oc?KYx_Z>v)B7B121EeY`U|xJ$t)7P1ZC1LMKy~E{-lph?vQL}{@Q$G zHG>`8@rV5wZEK|%4cH)=Md9r2#$AabvGM3xTL1gGhkOKgtS0S0ylH~&<;$b#RAy;je(rqD_Y6%g=| zCGp3sNwk~lMKgAe#mvQ%U-_lm9LkJ~yDOvt$M(4m%&V%Wf zHyTjrdqR*nuOw&>#6FwOg1D|&0?M}BZ~9x&Kj_In`Fv_CW;Ssij7~fgLJV?H_rRDz zC`Fa7yRs8od^9MvFRARGs_=#V4olj=cb<$3y`FfdjMu?=G0}PHKP57NWKITXC<^Cy z*@_9|On!~0#P%n*um&5ebPzxNOMKHYNXeK^8KYDA+*(Q>NlC?BlYr;Rvqh>zOCZ}6 zipv#-q;SK&xT|4aF4i=4g_T@SNyfDEOeI9t;c z5GtiM2kzg(79YVBlvNv#Li^!*H==cdS>K!CD=XAa5qdOP z?^E6l3mQm(zW5IW9fq+519oI`cD0&_!$R2-b!U#z=`JeukA1`3ijyw2#6=>QuI8BX zW)+UsUwY8cD5Vl-Xw0m@J0vvibxP2T#`iZXeW`5qoKu^Ii zDJ0RELup^6n(r%Qy{#J8rHPIoy3?kKJ=3)1z}Xx0(cz0%fLG$=C2YJ}$=kV4iP2s{ zyjOdd>7}XdY2CNu$8}=rONNPB{|4pdqT(>PYy2t1m{|LhDU??lC+6DKtOH#bO0Ta_1G1^ zKb8;~dU@J5s1AM3hih7yyvuGV&-ZkW1Ls z!#SFEDi9+vF7*fX^;W}!Y_#KX`;&3uu&@XLnI*3cI-)af037O z%zjaZGTP$|6J}cQiqx0+7^vVL+dwjU?%^OsshVg2VR9qDH-r z_hnORU{7XiiK9wJcOOSCbU0O>I)i&@(z--qsRNruxcZAQ=JR`d(;RxItZT5M)X+ZD z);9Cr>IB}#7;1;Bk$~Q3gvuI1gT}d8Hc3rJM(mWK(M}8TEL`z8nUi?)=!gZGE!{+F=P zXHLMFi`ISE7i9}EfP&DrXnM4GKbh)hvMb}(+FE63y*!lW_`@${Xbj^!nQRD5$8M8# zc~4VkkkbZ0*+u)W#9iK+{IbTbUP~l{3!~TVWf;z+orwNTmDT#fD~4CIh8MUbU1-&~ zdD1w``e9WG$CA#fIpvs$nlW0K&sor&J52ck!-cfeA|(r77Wb61BxS^!5fU6=1PA+& zwP8-^UV{2a?Ak!T!_0Rl3JZGtxdXjX`&L%D9yB5ESXo*!Ic<0)Zr}7WTFawHnS6ni zx>58dYY`DU;0rg{`H<*4o%npIinA5(Gj5+GWSz*u29bo?m+H2n)-muTPb37Yhx^M9 z9avby7OV}0I$#1FB)Q(vymY#nQFoYOw|k=EEU(&-tt*gfT@q@$bjCgnX9e>ew;TT= z;)4;Z%6~E$P_9}X@IwJQ2^MWKxTk=_>O@t>kWrSQN~a1`kQD9Tv8s%vD?F9s+RXGj z2j&@Yfh<|!S&hMPbH+{5cwQ(?#P!>|<~BJ?in&IbKRWbZli^w(@!uL+-ML%8cG8ZM zSM?CLS$4Kx8f$fy@v(9{ox{NSf2P z*W(cAYt@8=FXS6sWt9%HB?9$MHh&eu3g~d_#j*hr?!`z4=?81%7cP?jcC5wrvH6Qu zuC6eL{im89$!~?Ol$56v{<1(sp~16zu>tcTEK=C%cr3zEIH48G0xPsJ_!`sOs?%Eu z8+#%G&0W}@Lqa23$ox!j&-4H(jK;$KBr<*+X~a&y;g;ludxF+JM#rbDaeYh%Y8SMh z{PgoEy_F?K0KjE@(t$=5Bqe>%C{P^sQ%JpM2i^sYI2-_y78>zXT;!m|Cw3YM5_Bi$ zx+$?!PXI2k2$GQqVF00@0K%J}PBWFGg4dtCB!(;yNUNWHN)r3_ROI)TKK!>kBk z6guDTD~d_=HYW~J;%(S(k7dcqqus*K*Lduc|7b#Eb#G78K#0xRiM*(4Y#ltrN zCn0MzR*&fAf~qZo0Qn%;ZZqSzojCD(XH7xL#ywT38;J#w;+B34z9Z>Uc$tD&%IPWQ zl5|7>r#|H!82P1pO&8DMBvyHVx4?z%!$YkI1l8dnaY%W@&9Jali+aelA}1UkaFvKZ zaS98f58s!Cps7(O3=pE%Oi-3re)goV7>qsGzkOe<8P9^R3Tcw@bdw~s^lO__x13OR0b zo!lHy)s!dMQMh>jbpUvEGbQzqPwB3gYq*`0V3n_EhLtm|Y2`Qj;MN2tOp>n#L zk?8k6P~o4zkSc{gi>S~IXoMV;#FG%j1Ua;e!gk3QGeJd3lZGD`PH-fJq9eC{j*2~J ztyhRXh(ItcWxEFfFB2!noFTt|4R{X* z&rR@I;hj2w1ujy!4#8QZUr3=(qQalc`h6H3N&P`hP`poaqve*taR3B^J;z>t zP1h>n@?^)y%HGHxuEm(NqPV zaW_JMJy$^5l)E&6ElQ{?QEzCrd2dJjF;H%1ey2br zFCL|TK0Z{gd?v>yZ?N-ep;X! zb!sh?>qkef10r+?hau!kDB35^n_{oy;jf8CELCSR^HZ|xDr zVW}R;(&7h-pTAL)6NI@y1acrR;%o-Veybuqj3T=qrd&g&aaaF4Fnxje(k_Ckm7=M* zrFmN^MA_mXf|vRn=I?ER9LcsUX-vZa9eW!$4e>i9k!XcqajRtiT)IHux^vjBKiN~EddjK^i|1;hTSK-EcDb_ZbN?n#sjUZPa_z)P0}<<);MR;F zH!_i_UR#+QH5jd=1`&vMOrAv+7IO9_-g08{lRRT%PJ(;j(j(TOE;AS?YflVcoO-#x zsXmg{Y`1qx@ry8~I`uOFezdiMc&Y>Yz0;gx(Z>_7D4k{6GRWIH$2Pz=_@v*x`X)Uw z8q`|)6jRX<3n|qmWt^4V6#u4ryk!8>K#HCnGB}O=jl;B5N90?Rjon=M=E85#Y-{I0COGCB z3SklUt;K79JdpXAtj16ruN^N7WuhR>8Z@5x$PSNqi7dax&3CKD`{V0PD;WL2mhLNO zBVvj@hUADO8L#ca=Y&>jMQXPKozf2oupY;bcddYS_vp>r09r8PFm^X()1^pQ%-`WV zw}}X+ylI^Yx&0O>CnBXvy2Y+ZxU(-xpxl;Tj z%?g@G7Rj!-)ql(3RxlYL;vzZcHCiUWnf)$A2hDLxnFNUAZa~49&oy@y{vVF+!mX+I z{R8+}(6EisY{cl6ZgFEHB?gEfq8~a1Mu>o*8(q>UskDf635b41ND0yih&n<_kPs1! z4?n)Y>pFkIxt?=9&$*xbe!Yhd#DK6)sMP-`HakD4$Y3sMom6|>p;Eu(xb;YlqW~XL zZdj84e#@HYKIYWLyp0}f92aN=5RIU}uEI)>C=Pa42y&-B+firoNLdT+f?M{iIz&>LQ8I($#M_3B8wv8}< zU|+1$yn?xo^!>=4>a^q32Q=uu#kL<7Ewes)1ixr(VPBZ-#_UFdEF>`(hdpf%)$HR` zPh^l`Rf9DK^zBBf7%wxdXibOf-`^ej_nnDi&_fQf!Z3W#qA7x3r@|hA`-1K8$xuRW z^gx~KaAFR&v2wKd1z{h%^6zMr@S=~ z%bxXcgBM$7tMD!0>)F+o_@i23Cak;dl;1?6xYKzyZz74M(cM^9_AZY>qM>N7Ph8`| zm_=$E&c1Fvx}W7e{XfzY3W16E^Gr)*=?WhD@}r&*G!)F2B*Ix5kFCbA8v_6fvq#=z z2{+K^43lTgMVlWv`%x@2hI#VL{)ua1#skVMVACJyb<*nats}z`PQ+EYn3w!6v!AeK z?sah$onz(~yu~~}Zb!i@KASEnGSCxJJW7seH}}@XkC{v7GNVGj92J}a#t7oh4BIsT zKq4ojGs*!#OffS%EH3Rf)>3%sVD%Of3F|91s?lU(sbFI8dDAm=d5?YyhnP_D3&9&+ zTZq46ss=k7V49gxzLePQ8Tz0Qv!`|S=g)kr&ld2CaLm(Q15`w>xOb>O&ePlpZT36v870qUWto;yMv!MwplKyzp z_KTDyF^6?&l%MlM1lMc#ecOZPXT`Rf;XJ`@OzOe2*WsQC_BYPX(!S5M@$Y^V1aS-N z52c@7(RcPUw)n^iq(X6PWUQtTK*fH{#9Ged8F`^hfZ^->IV@pNsE0#AE#b2g!D8tg z%C>v-Wx|5zEKG&4~->b!G zrL*Gga|!C&$8B5tI5mi(aSX_#boXPva)*UWIFefNQ9qW^10n z!IjvT%VrKyPSbUZ)3{Q}vYVWG?3@EP#e>SU!GPL{p!Dn2B9j=^Kemf(pZ8ABjG17I z_!$v>8m*u6O*%!8pi5U>=Y&|9cyVg3pu9M8GJ>tPGK=iffVvRG-frS9s|^%v?|#;X zp=WQn>{JROJ*JJ+`$~pHb*sb@)nY=Kp1hYT(Wmz54#j)zK77Opy$Av>F%vYQX?SUB zU*n|4439ox6l+kBJBi3*T0_yp$~zr(wfe0M`$;E7(>MXiE-vHvihL6RyBab3=scYW zb6^q%5+~>~raLf08^Ze3fh&YCs#ac%=8@PTCqexRolNB6?_aDqHXrXt5 z;JHXYD$Q!<8`N*X2E8~R4|+4=ZJ%0(v4=z%=&zM2e#yetT3;7l+`z;Ja3xvuf3(gq zYeDzx42|$J6TI7afUr4iB19uBMm=QYMi4$bOz_klj&qa<2UFeC1RbGESh?an%(9!* zGF>e8eWgT{g`FfNr*N>ORxvF(7V@ZoGqY1f=CJ&u%S_GM>OY~PfAhKMI)#+w9 zlB#l9S*xlLZsHWvAEJeGL)9buAk}!f51;P_+XnX4i$&T8$K{vB{f8!uSqV!CohAvDbdPH zC54zgx;2un#}c-Zp+7NJ9?f6<27-Qr_ZMLWx(9O_GjWkI>Q_X^{XFqx>B-DN_3k&h z6=t@q*|)1Uv5o+PSI)m}&kacD?T?W7+OwKh?<{v`SI=@7aT!B(hS%(h8J>WFK!3@q z-Ky~Tk%5s-0<-l4-X1H^eX@(hyE7z6SB?@Hh(5L= z_8PYezsDh5GLujjmPg9fy$D}0gG4jjM3w(hH7-O>_J?~bXTp`SQTLS!15(Y)drro^ zzSPcL{eH>!%e5arS-uW27H91BD(W|hrPrGuxX74pR=q=1z}iwdWcYGA0~bkNeZvBT zIE(UfWjcK+zJB`0*nN78UmY&?3~z@`zrMYKm-#AaAra_g31PKq^^0SEz+_*Ie_2qo z#7ubIS&Q%Y9Q!1{XZ_$}P@*{q%XB3}#sZ<+J$QAW=5XG;K={%J_Ns@)9aULJsku1a ztj`sIwkWf-ND*Fx=r5Axfqwkkjy^Y&Czs^=DdL39EsLBt=#ZiWpFf!&Udt`rTYr1? z#%^y(W=4*^Vx;6TmUyr$Ci(!Ox zw~Uj=1G>T)d)?=rKHKN9O32p-SG@C=uMwW1zy96c>$;lv*E;sYfE2Ky7`IuA1z26U zVvAOuO0ly%m|658pmeEclQxwQK{{Bjb_I_1px*)-#0fh%rq@|>y*MQ1Gm~)A4gs5g z)im=rrxBEW7RvME8j(=LYfNpeh8a1@<74%;J-1l`usA6vi}S*$U<+| zKkf9Z4%}tUW7{;>FTa=jpiBfBRV_QZg6dwsAjkv#CIL15rKD(MJol&GWF8qOU7(TE zM^_zldnyy7N7fVP*KU3PHUodv(c~Gz51H0kwM;b6||Rnuu>yy%w0kx^4&!+8)GJJl7{A5p@sO^^>%VASw`Q z%RwoQH@oEo9U-x%uE}}vt4DsM9j*~_cToX5ULf#7erfL8h1fDFiB=m|L*FcM>bz_5 zqM@DrFt3SkO84mPp==#mpI#!pINU*}wokh;rc7zpw%Z_6Y1}4kfzf;SOIC)q*gk&K z`c!6rW6C%?Ean-8&o}N9|3Cj2e1TS$!QY;_P-OK`_8ie_)kyG{qm4eY;3}2 z3f7ESKkRJdHeopUH6$12o?SFTr^fA14AMps-kwy^*%5}Rcz@wotqjQJ2I6M{%li&K zx$Q?UxXN{835p{92G;AOyusX%;p~;F@~sqt&n;@gf+|9h;}1~oDEk!?;9lr%L`WWK{V@&B&@1RtV_*6f2vY`Y)mg_ z_MAl}O4yY?bMBlc5te?<{E zG<-l>3e3I+VOToeUlPg5!{_Xem`;c>WUGB4zLzrCqO<_WfdEl&*Y$+iAt` zpJ_rM*tfa~%aj7J7vu^3FzNS+uL?96>qj@kzyQttEAqp0@moSdr@@~c?4O+-B6v{= z%ro=x6b5C>o|7|kRf9oo4S$^(i@*IX3V*RS0jQ)XrPg+kP@B(U6pSSh)jY>o8G5E?%-XGwdOtP0;r^fORQP}e9J zpB*Gxs^>wDuo=Hz+}G_U#F#xRe$!SZ@z=rFNgb%5V#QG1PriJYhT5m!zQ29ks!;9X z>4yi}nU$a7ZZ0&x*7&)dW}q>uMi|so4aoXA7o%MlDcZ@_Cm(m`_h3S&ZoS1Pf1YGE zp$aFq9VzhVDl(fGj(e0MGBbmXeJ~L}KqqkCo;8r3s8L^tPg#2r*lYYtpi*f{74PW! zYWRg=}mhwQV#3my>;t#2&zS(h2@I$z!SCkU^zas9vO@Y#P}^ZY^LMo`rN|FdRlLSc}Y?u-rLn{UKjmj3I%s>e%P z6=l+wFTN?=evl;5-#)I8=KSB6>36T!-U>fDeSOsUl@z zdL%AJU^P0p`>B6l!|7f@qg{ldJ*lceNL`G)wz1~RV>CX22m%Od0ECI#&5lH)gYh8L zLrxGbgd`5>tF2+|u7(d#TK_}f*NnWUn6L78Bq7BC8TRH1HzZZs^r=jKPG^=o;od3Z zC)rJoQf*+L-$9fJU?|aZ^fw`-G5#yn2qs>DTtaIvqtDZ?ks94>3uh%-8m-U zi!h>fpsmz8(Fp`SNk)L$quJ+`BC8vh>HeiNidT!|4Rm>v!lx0Mn!(pXdFpZ%#>I@S z%z<2ZT7mvP;~AZ!X!oBS6FqPb`u)e(Ya}5;2;>bYBZWw#)xSbn7pZ zaD7dTFMmkn0X=H9bO}7I%vADp>YYbd(cO)hgqVSI1pdBY)UWT;1?G<(gTD{IEBzfLHY$vqdy1SVoe$+I}V`&m7vVggKi;nxMi%GQO-N@=Cm4-a(T0qhk- z0uWtQn$UV#DavxK61)B`eV4gN7rJ-EAXKK>3$s7-A@gidFzQd!;D73TNK78U8&vg2 z;)B?~e=V$)bFhrbb)~b6BFW_|U4b99<=1 zBg%IP$vUL_W9b}$$M~d|*yuYeOXO;X2MrZwjn-C8g2k=bwZTQLrIGtRL4urN;1YG9 zUv8);VRMEJ6WDKJL`YJ1+kZpZ(M^TK>eeO}(&|OLx)Qp&(#SW*ayH*nY8K=#q!)l@ z#@%vnJY4AiCfZsut|uC#n&YNT=MYU?OgC1J5UzfFH?r)hpv-E%`TGQYgU#NwTkee? zo!DL`2+ClXC3`5h{A^IlZG9338l8mgcDw81iDzUdOSJJ@)P;^f5t#7Rs)c0v*SxMN zQnG&Hf0!RUyEM(sm46*j#nA!Q=)H)H!&eKE$UFrLf`eUc|t$mTLSZPeAgQJ1S6n$opHDiPTbG#SxCMi z(KYZ$CM#{g9U7k6^xoicLWbo$*#Sx^HdR+jl02Zm1FCTZ1R3y!re1l`JW?%n2n$B^dwn35&ZW}p z_n+sr9|5Akd{0LZX%#j5HR~y37Mr}*1L20O$s15GceOMA!u&}IVa{lP??3hoiWs9J zx#zK$iSK<$3@6aQ^`t0dR3!UsqL5cEi(J44O+%T?Vkb5WqcbN&(DQ@3m))Zb?CJ$4D4j4(V}3eTs=xu%@&t%R0g z0&0aBm(rkQOme)$bWoxQP@)4Ifs!DlZupf0*qx$2ROeKREfOKQT=k zHD=0Q(;^Aen{S_Ch2Ljba(MoQr0zriz!2Pf#vL=#6AJU)*xF1DLvec>$&aP7@h`x zod^bU?3WSHpVbd&g!Aeau#VMbCU-WEM}^yd3wql(HM+A$mKh%YC%+&0t7I+IY{lbS zs%8dyri22MHnRB`jnGBLl0Jqr-hwb+i!NcoAX545waUnM)>1@o5QZ+UGXefYb)SyZ zL=f%l_`)o&!nCN-9$!=4%IFa*s-H`l^*4OKU;AW8ODYFXR6x#jdF`11BI? z&;)fK355#p1Gsb4D@a$kF30!1+Q9p&S~Xr^m70~X5(s~kr2hPv#uO=3_Q+SR?(UU= z#QgdWiJd4{{aIHj!x1L3KUoz2-8fMMKq}J4Em;JvGa6b-{ECUWO=TwzFY3 z`>`JGW4y&+{wyvw5z40oK-uY}bO}%qVPnR%Nt@`z^TBx#7Sd`ZP&K-vpZKACg)HGf z;tLmYVP(b<)|{3Y?S)HP`6NEOkR91i2pi&z$MoQIS?daQKhxXxH==ShFbg(anU!#q&f-@!dznN8TrNav|#6i>#ZZG6TI}?a8q(FlR53`2SAsM<1 zt!jXr^Hq$D`sdz)hif)mX1PPysdg}v1FGdO`pf*bV_Q|v)X|pKUrh@TgH2v^02Iq$ zH@P*U#+-o~P@65usWSJoD4y{D;4%9s`1V*+jI5c$sGI|zZStrKH>2X2MaOMF<6pc% z88Ji%@6fLkTFh9WJEHxztgZBYw;(FYUmtPF3B!~9Z)zs! zXij)Cg;60qWU>Z&o8ZeD5Z3VMbf?bhZoX%Xz|Z-FZ*OJ`B8SQaPaAVC?&InsCLlsT z5*c*Yo#Ai$R?%Ov3|g<*yNh}_P;=GpY8{{d0+B+0mU+&!CNiVI|Gpu}`jovYs5RGc6(VdwV+FdSS_U6iH51L>2cNZM=ywr}FCgl?F*Q}q=QFbhm z0qzvhp(TB5b(TL7i8`!*G+Wd7QvI=WfAsdQ%vzm;NWw1Dz$Y5h@KHqI^)e43;FWyTOln_nBr(9ieVQ^%FIl zbf^0imh6U;egnt-9>K(PNC{kE6oaNxKJZ7F)b6jiqJXP@nF z$I5oS1*jliwx$%sI3f_Lh;GKAH~~;cKy+6rN@17%Glrdm2;w4vJkyU|(!r%f4y{aC zV=++VSI{?N$Gt7i<>c=K#VF$pKEr6SeHkum44p4K;FQVdFGbc}JwWd{aAH`A!caZ( z_dh%1Lzp~WOM!PJbUy{v902~_TS`mfFO8Nxa~kKU%m7*`f)0Jmuh>sUz6kD@3W=Fx z``v$rG^lM;1ZWh2xgK;?Kyxz%Wli|qJ&t^p4*T~4Xq^I?!=PHjiq(H81PB-1zlo? zt|H%Qnt&ra_je!e8$Dc%!xDZ6t4j%by5$o7jMwSE+}Fh;e8^Bes?eKN^!7M}MuDv0 zzAsYvcnC84yWl4HNigAZi&!g&$*H>v`Ht|xz9X#z;_vk1CztAh=#yw1f+%HF=3N@fS*Hw@~{{Jpr7{w$r- z9-YC)!^8l|{bj*Oi=XvGY~;5h^>p-<;)UPhC}m~mUs=Dq5=6E#Q1ck{lnKIHLdUo{ zX>s_i^)#v%B+y@)`-uaEuK5al|GjS|s*^3+sjO;{t*Udd&D{zb!HH|_so7*gC|l0+ zr4Ycf)1j0rM1}6mXr-cAS{wnF%8aGIPljTtg6qqWv~p#*vgOGudW%MCZn|?}FK7*iq1=NlCHL#3o$E9$xV@ko6Z_-t=k1S6^3~mO9wpp#y z1AiNxLFz<-*snyL8F2$uiAv0VhP1NStdr-aeZ}&AEggj>VfZrvo&ngub+`N6e3;cz zL{mbyFROlFax78^%~f-40n5-JKm(uf52vr8@#?pYk38uuosm9`3}+`j zcGq1cN58vdw_x^=GP>O9+;;+B;84-6{4WmqKeq8hozOIE)~}`D*BG!Sa5Ug7kaO$O zFzEUQNTHL1WqM42kp5?Yf=VsZ=gZJ*Yv*rWMjyeQb{>d1e>agS;@zy%KuP^;8`F1fn<4j^pepa;cIG0NC7p9I zHc&Vu|w=#}qD{4F1NHOxkHwVzK*#SccfYpB*?(0S>Q zcg`T@CUkEp8f|U+3Wtt1LLs)%>!psp;#ynIx3BSt;-*D=W-f3@pw3{eDDa^olQRCm z3&fp?>ZZhh$+0K}hkho7_XYeunn5zrl8&mC)Hr?7BN1a)BYT&>y?(FO`2zj;gm^7z z)TP;a<9PHPPs-rBy~z1mO5~y!uktzHN~rh3ZRI$eC69Z4?%Qcq!qK1LsP)#XN7aFy zrCPC^p-+e?*;ale)`CYBJhF@$D8)>JaCC~s96OYaae*B8eSF@Zc4v;uVO}rW^~Z1m z-Jr+D%^W6#$gT%UT*47OrB~_auig$z=n1Ix(r}-&Wk0)|-hn|23UA0s>u{_7W1_)$ zr*k}OA0&42NdF4g^i#q)XQVHgl6~sJxD^s#fpj8OBE@aaPH6!zTI7mzgeHO|<>0oJ z4Jf(BI-fig`bFR=JZPDT!@b_}>8zd09_k$i?Y4{U?};{lgBmGQ`ml}abw1j+6Rdy> z3@l%>6JusSiRD9pK4An_TD)0X{;K!C;10oYO)KqbdCqiRu;~=pole*-14=Z^^xNkm z>`*`*2uY?os;RO3V8D>k_ec*17f@!CeuJq{mR@x~c8%Qd5adHXG6%&YgMENk{?#OE z>xB;F=^^X|YKIHd+Jnl7kADk}Yo(lh)0F+0XKB^0U*{~pat-}%BE!7$x$%OMfGG%B z0-{pTssVz)FI0zu%vwQKr#eRi=164nl94k0tgqrn2?TVWrqMf_cA*Q@bhX@eLGP=L z&xj0X3a68Z4(2cK1SjpsOb&rJ7^ME2>cZ>P0RqoBmm}5kOm+MzJaP~6{rQrvf4PC~6;h|=SP8X*Ai1#6vmZDUn@ zj$VB675CQ++dr2u)bh!{;*h_Fl{=daJ2~w6yz;A@sm&|)PEF}znvuF^5yCG2ZgJl- zcnE|W1>yM8YQKb_7EN-j3P3NMGX^mw3GmV+0|LLQHa=lYc&?&jIz8a3Av1&#?C(*XY)E>Y`|5(PQe}DZ z<6O|&ZW&_B<(BeME)?v-{;#w8J+QCe*d=bC?_40LQ*HOvQLZAvpVwM{qa{#3te*Dt zG6;OUADe$)+vewSygrT{iRtgmrlWtMR&(v-p5?DaiXz>0l(3VG?@8dU=8fgyzqGw! z_)^I*=dU?jsd?NoQM^;UYY2pLGkK`pc39qIRjkCH$c9DJaA;DVFuO|6!uThJ>ocXf zu!J|j=C|1WC4TEpnOf&SaVzag@Hp2}>A)bh5#+$JFJIGC%y~dzoAskB2lLP7F^D|9 zSno7_Bjo%xyg{~r-I87Jhsmp8x!)8yhDR*8FaiE46ypxS?Qvv%cb{yxpy zL$&2#o}&sB(kM{1lyOGs*6Q+8;yHTt&*N|P>7`r0j4w|6)}0?kwSSL<0@wriZ{l(L zp%mixs%zVvzP4w=i#V#dn6e*bTajKm-zVsfuqIacjNp!YCY3?&7GfP zdjiBjD-Pguh234n9)aos&JlPw`#Lfx<^v~EEKJ@NOhGqbu!_V&b$=FuOovAuKmpIy zy2}kI;fCnh&PEKJ>_Cz_OxhP5X(SM|%>zj0znHB0Y^u_%P&(n0aoX~?T5O(56)(nya$IZ4mB2YS1qi*4{2Q_V^23F1uOmwdE+fWQ#uf#U1$ z-#K;#u5^cgUH9w3N<(7-Q&~Y#`PR&YsfOT#KJ=NOHQ`sr5lJ|;e$x5-c=2?F9VoGXJGzC?z=G(M2< z|3pN^hh&-wjcpXDvv~!N-7Y9S$}($-su=@=ANFNia7mqTFksb&%wh#!GyB#yzccl% zvsS}%CW<}eauIj4Z8j0U*gxxXNoHW^QOfVpbKw4f>{%C4LOr*>LL`--uRv5oexl`#Scj?Ed z%DDC-IktK5b6&ZH_Wa|jI?WHaARmTeN-MM5#$oZcAxBe|mQg>5 zN`0fMW7Tb~4KM$T;Fh9@x$s;H`H^9KV_@9|uDj~=oqZ3U5nQ9qGvO-V?pDZQ;U>cV zE%U`2bCci8V}TA?4+3gglzqR(55a^l(9I9nH1{yxam>1q>qUy8>xkC~X=#tt+Hhig zIUT0>=<#A6lg@{O__Dc{PG7`m&<|YBc5fgov?B)cjhLV_TB_~;XHT?uy0|;uQ`%n) zD-y9dH1x|=S?n;)Lt{Aq@ZJgt9zunP@G{rm^LVA09GL2MG%=Yq@QO(6wL3RC&l-xZ zGC7$?!+jc4no@IL{}@|EFQ3HE+uwm9QUN-7Cko~oF&dvH4CPG3YTbNK_A@5lG1Vu# zvnJ+4_?!9pE&)#@r_}Lru3EYRzF8E%k`G4oz zP3DS#pcI9zsDz$~z?YR&Z=%-~=|wuIP;p@#gBUT5Va71*VgJy*wX>L>hZzj$2-gql z`qFs|fI?wMIFn(#Nw2E2f{m+>2|+><$d#hGejG~c8*$4}WFIHW-Wpd^HRk=D5hHNL zok4dg&^Bx{1G2wQ*8X3euGT`?aWT_L%uCQ)T^RMdslwbDhp?L=z@bNzR=&Tdt28UE?`g%WZ4DbsVdlke2~Lt8LG!!} zPYRRP=pS18r4d>W9{A~2p^~&Y14mn=K9KyaOl`NJo{-M7)qO9}KzR+r;znBdCQ-m~ zl?;0}GN{LVpk~FI!J?A@{R;MtHe@{a>}LPf(;?#%{wZT8vSjyljlzcT$5)sM45zKyQxXEw5#>GyN?)S5jB$jg@G$s1(YVI4!)@Cbf0_t5Hfew1->d4{nS0r`r-jW*ZM% zQ#Wq1-^U7m+uV8lMG5}%Tc&_>uEz!=kBon8d3rx)$o*!p02Y)d_BjlI(nr>WeB+uH zW&|-B(+nJ=BG$w%gxge%7U% z;)Aps#X6zS^mQGt^Qe8C>yQ|EuU=yMO7N+_#xt@!dt#Je zi$aK^2O1kPs%f^tMu<|p_$APJfU~W-P1-b`hRFjV5H+Mt(r1U=JIf17@O#g?57-b7j1p5GeYqbFvhbf>`rYDs% ziN$|i?^H5rGU6BmX)!2!tV{SrjNoB4151V?qdup=y#KA&4w3HL<`cYwzC}vnoJ!}7 z^ZPp!v$q-c0IP&v*cI3=cXoyem-5x5yRuQ>Ys{@t<; zSD`67FNQ#Yqk}6^8Uj~6q}Te-%)XOsfep~xE4JsX?iF{7ZyDO&RcvPl$YQ+T1-$Nd z6M2dd4SpCHJ_~wuHR5SP#7qh62rWWMDkgT8_4y0drzOnX9?qX2!G3Nce^eQb$zU;h zmt!i}N|7;{s%mtH+suZ^w^deSJ@#D!w`pQj@IJjGnNEr7s#irgtwgpGw1N*M#!5|h zB;7$VTAvU)i6XGoebJv9uwYHtUkEI+|I+ynsHwEo-cD*DH{F>b?EnDSR;x$ z6&bkZYsve-n%BsuG*-jVA$5YG=OM%GMmlAh)t5#f10OIoc}FEA{_!&VTM(Mr*kZMj z_iArwVrjyUpP`y-W?T9RiAbF`_5l9xxSguY8}@ATlWYlwuy178UvAPj66|6teiR9x zbCEwlz_+QSM4ogw<&en%q z)G)s5i4oDQ=H?n;e)-Tj7eOar0G7*u_#ooOJh?A!89t~q)W61US#6jc7c#Z!lC8*; z+{l!SWxTh4<{+{UTyoEVIVb+gMfE}zIoM@rSQxgIH-!RAvbz5j0ap)tWKWm*fX5?% z=g#3dJ|63ixsn*BEa;0zI0b2|ui%l!zAf>Yyxy5SNt7>GwBWSIKP^JbSF@`6lxkMf z|Fn>x)}ZhHsz_B;<<~cOye7dIgL#JLG|1* zsnJA;8X0P>$P}x{R6!r-K?#}C$Q{$T+k2YAH;@~s>e{K!n61e8S(?#fAA%Of)2m#b z!~oOI51~%?K9sVHf{Ztv#7W+;pLS2aA>gAqj~pRz+CE!K2h3;Vest1}B`l0jH1A8` z8M({`=mc3j%we0UyuU(x@@$&-MJwCgRfP;C*!?D0aEJE2eu+QJ$bJq9XBV^2PX7OS z`y)u8hwagr#)7&9D>li}GMfBTf~5YsYA?B@g#{@|d@)bxQ&a>Auu&ujK?1YR zIv=P?ES@AuD@mG?KD{e|swR~&dLxJ+L2`jSQ?{xpSUkh{9hG&2e9?W4sb%|&N!RE3 z5tP+)lErJXP}cKq(hvLBS6%H)iu?E~Xpo}5F4>7r!@26>WGX|r6TJ%=s!B4JqSlB{ zBy%;geRi(euvc_8R+?=zStmakRfZqYV1dl=zDKtE`=W>>+Z_b_2!Q`&fM?H}ZSI@> z)VP0_YS7LgD~WBk}{uOQ?n5p)H_7P{bMV z&I2G3HTln^Ky+jDg=aMj1;#aZp5LGZUGROb_lpHPlF}dUW3`pzZk6jfX*glTtygWS zYtKEk5sQ6m_%E_pb=@VF3>62!TnG??W>h#RrSgL>x#d}WHF7%h3_y@=x3nX-9N_(r z!mdMH4uOU}8DBjp{3}&0!dsLzi8r7_>UsJ7;Q0iF{yUkbH$+_hVyuAaOms$e+P2AM zdX6i>L2T<3edvu z!uAluYrbx??EG*mPjbb@y?6-8NNhqVT^7(0*hvCjE1dzC4ZV)7V5}nLwetnfe|46i zf}BFStk|FPIA%98+~pofnX+@fB>l2irug~Wt}!2<=DWR5xhpEF7@f&b4=iJ_6TRv= zb5X*^p%SlEiFW5z_|WEz|h9n!4#tw6--R-(H>#9kuz$4!h9X ze}aWa_JB2=cuXT-VbtNLWcb(>I8CGdZiMX~IddyQUhiX=|I3Ee3D{;Me{dpO93wlo z?^~g3p`Vv$wv*U0X9WJZ4|bQb$A4&os%Vhf0ZObB5BW`X(l|%=ctSt;Z@1F~TsVw!ku{{~% ziBx*^dK511r1yiWC(3;`x=~|$9S?VrZ9jBc_=$yQCS|rfwB07D?~+OvoIZd@2`_t4 zr?VdrrEK$M{LP&aL zI+%&umV6Jn-z}tw1bs4>j!XQJZQm7CNM&##LZkrj@`MDPs{m5v^RM4^+a2h2T$anK{|zi7{4;M9h5bDi^-_U#H7#!sKUSbv-!xLP zcmOPuM0r2e#RsqOW&Q)kWHtA!_$-d)#jq_4!{KIgYWG$>ql^^+h_)bGLqX4_v~4A+ zAmOQty#h5c8-Spzk-NSK@aL%LHn~+D-KbK@k%+Y@OI}x=C&C_m zgm2+_B9=w2snE`iPseG!Q-=n*DUl$hS8^ixJSNNg5wI;X3=iHseO~qFM@I(7%Dd;V z6TJA{KE)i6-KSOx5D&B*^@+!9u~1C8Sh!SAu!J`0Dj1)z0okMGDahFuED=mXXuWkKKT`heFmM88j0(1a?nXlUqIP-q)pZj{){^{I%UXQiG z?e~A6MKLsbMPc}7V6e|Zk%`8uh29Z&^9VxQ!&5f5pv}#9eSxX}mIuO)Nc{)GKURnmAK8(4D?$%k+5q~& z%ox7qIm$8#bevJ=_Rle0`f-^Bqzpz^3Hv#DDd=bGMcMbh6DIH5U~!*RD$18?G11%s zScoVQ)c^YnSXd}wg$=2qmHh9C=!#~^W#gq zvkRZ~Vi`YA-qlEdtP}FNBk-k1okJTSaFKq#BNL$b&@q$#Y-W-vzRQbmUcT7-_%d{> z>-LBEU4Hdji=1xL+%ujNbUba&HYM^PkS|>=rsE;aYn<+LZ8M8i8I-wR%0AK^BwB0F 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 J+>Z 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