From 946aa9d9e9b17712bff93c3a4ae16dccc79a0cb4 Mon Sep 17 00:00:00 2001 From: Slavi Pantaleev Date: Thu, 12 Sep 2024 13:44:06 +0300 Subject: [PATCH] Initial commit --- .dockerignore | 2 + .editorconfig | 32 + .github/workflows/workflow.yml | 51 + .gitignore | 2 + CHANGELOG.md | 1 + Cargo.lock | 4380 +++++++++++++++++ Cargo.toml | 42 + Dockerfile | 43 + LICENSE | 661 +++ README.md | 77 + docs/README.md | 9 + docs/access.md | 46 + docs/agents.md | 61 + docs/configuration/README.md | 48 + docs/configuration/handlers.md | 32 + docs/configuration/image-generation.md | 9 + docs/configuration/speech-to-text.md | 39 + docs/configuration/text-generation.md | 75 + docs/configuration/text-to-speech.md | 63 + docs/development.md | 134 + docs/features.md | 150 + docs/installation.md | 93 + docs/providers.md | 170 + docs/sample-provider-configs/anthropic.yml | 8 + docs/sample-provider-configs/groq.yml | 10 + docs/sample-provider-configs/localai.yml | 20 + docs/sample-provider-configs/mistral.yml | 8 + docs/sample-provider-configs/ollama.yml | 8 + .../openai-compatible.yml | 10 + docs/sample-provider-configs/openai.yml | 20 + docs/sample-provider-configs/openrouter.yml | 8 + docs/sample-provider-configs/together-ai.yml | 8 + docs/screenshots/agent-creation.webp | Bin 0 -> 91060 bytes docs/screenshots/config-status-handlers.webp | Bin 0 -> 66930 bytes docs/screenshots/image-generation.webp | Bin 0 -> 699966 bytes .../introduction-and-general-usage.webp | Bin 0 -> 53506 bytes .../speech-to-text-default-flow.webp | Bin 0 -> 27816 bytes docs/screenshots/speech-to-text-language.webp | Bin 0 -> 38120 bytes .../speech-to-text-transcribe-only-mode.webp | Bin 0 -> 13290 bytes docs/screenshots/sticker-generation.webp | Bin 0 -> 133288 bytes .../text-generation-prefix-requirement.webp | Bin 0 -> 161658 bytes docs/screenshots/text-generation.webp | Bin 0 -> 11496 bytes .../screenshots/text-to-speech-only-mode.webp | Bin 0 -> 16820 bytes ...-to-speech-seamless-voice-interaction.webp | Bin 0 -> 23928 bytes docs/usage.md | 99 + etc/app/config.yml.dist | 153 + etc/assets/baibot-torso-768.png | Bin 0 -> 78468 bytes etc/assets/baibot-torso.svg | 351 ++ etc/assets/baibot.png | Bin 0 -> 88901 bytes etc/assets/baibot.svg | 568 +++ etc/assets/baibot.xcf | Bin 0 -> 668911 bytes etc/services/core/compose.yml | 41 + etc/services/core/element-web/config.json | 13 + etc/services/core/element-web/nginx.conf | 60 + .../core/synapse/config/homeserver.yaml | 1457 ++++++ .../synapse.127.0.0.1.nip.io.log.config | 36 + .../synapse.127.0.0.1.nip.io.signing.key | 1 + etc/services/env.dist | 12 + etc/services/localai/compose.yml | 20 + etc/services/ollama/compose.yml | 13 + justfile | 239 + src/agent/definition.rs | 55 + src/agent/identifier.rs | 101 + src/agent/instantiation.rs | 154 + src/agent/manager.rs | 68 + src/agent/mod.rs | 21 + src/agent/provider/anthropic/config.rs | 71 + src/agent/provider/anthropic/controller.rs | 251 + src/agent/provider/anthropic/mod.rs | 43 + src/agent/provider/anthropic/utils.rs | 32 + src/agent/provider/config.rs | 3 + src/agent/provider/controller.rs | 172 + src/agent/provider/entity/agent_provider.rs | 198 + src/agent/provider/entity/image_generation.rs | 31 + src/agent/provider/entity/mod.rs | 13 + src/agent/provider/entity/ping.rs | 4 + src/agent/provider/entity/speech_to_text.rs | 8 + src/agent/provider/entity/text_generation.rs | 10 + src/agent/provider/entity/text_to_speech.rs | 10 + src/agent/provider/groq/mod.rs | 26 + src/agent/provider/localai/mod.rs | 33 + src/agent/provider/mistral/mod.rs | 22 + src/agent/provider/mod.rs | 25 + src/agent/provider/ollama/mod.rs | 24 + src/agent/provider/openai/config.rs | 190 + src/agent/provider/openai/controller.rs | 465 ++ src/agent/provider/openai/mod.rs | 46 + src/agent/provider/openai/utils.rs | 55 + src/agent/provider/openai_compat/config.rs | 261 + .../provider/openai_compat/controller.rs | 445 ++ src/agent/provider/openai_compat/mod.rs | 70 + src/agent/provider/openai_compat/utils.rs | 78 + src/agent/provider/openrouter/mod.rs | 21 + src/agent/provider/togetherai/mod.rs | 21 + src/agent/purpose.rs | 67 + src/agent/utils.rs | 146 + src/bot/implementation.rs | 419 ++ src/bot/load_config.rs | 110 + src/bot/messaging.rs | 334 ++ src/bot/mod.rs | 8 + src/bot/reacting.rs | 262 + src/bot/rooms.rs | 145 + src/controller/access/determination/mod.rs | 63 + src/controller/access/determination/tests.rs | 58 + src/controller/access/dispatching.rs | 45 + src/controller/access/help.rs | 183 + src/controller/access/mod.rs | 8 + .../access/room_local_agent_managers.rs | 67 + src/controller/access/users.rs | 63 + src/controller/agent/create/mod.rs | 418 ++ src/controller/agent/create/tests.rs | 61 + src/controller/agent/delete/mod.rs | 195 + src/controller/agent/details/mod.rs | 84 + src/controller/agent/determination/mod.rs | 99 + src/controller/agent/determination/tests.rs | 131 + src/controller/agent/help/mod.rs | 79 + src/controller/agent/list/mod.rs | 39 + src/controller/agent/mod.rs | 54 + src/controller/cfg/common/generic_setting.rs | 35 + src/controller/cfg/common/mod.rs | 1 + src/controller/cfg/controller_type.rs | 74 + src/controller/cfg/determination/mod.rs | 141 + .../cfg/determination/speech_to_text/mod.rs | 87 + .../cfg/determination/speech_to_text/tests.rs | 136 + src/controller/cfg/determination/tests.rs | 212 + .../cfg/determination/text_generation/mod.rs | 201 + .../determination/text_generation/tests.rs | 332 ++ .../cfg/determination/text_to_speech/mod.rs | 158 + .../cfg/determination/text_to_speech/tests.rs | 252 + src/controller/cfg/dispatching/mod.rs | 124 + .../cfg/dispatching/speech_to_text.rs | 78 + .../cfg/dispatching/text_generation.rs | 155 + .../cfg/dispatching/text_to_speech.rs | 134 + .../cfg/global_config/generic_setting.rs | 38 + src/controller/cfg/global_config/handler.rs | 162 + src/controller/cfg/global_config/mod.rs | 2 + src/controller/cfg/help.rs | 547 ++ src/controller/cfg/mod.rs | 12 + .../cfg/room_config/generic_setting.rs | 38 + src/controller/cfg/room_config/handler.rs | 141 + src/controller/cfg/room_config/mod.rs | 2 + src/controller/cfg/status.rs | 759 +++ src/controller/chat_completion/mod.rs | 599 +++ src/controller/controller_type.rs | 27 + src/controller/determination/mod.rs | 154 + src/controller/determination/tests.rs | 196 + src/controller/dispatching.rs | 108 + src/controller/help/mod.rs | 90 + src/controller/image/generation.rs | 179 + src/controller/image/mod.rs | 2 + src/controller/image/prompt.rs | 111 + src/controller/join/mod.rs | 28 + src/controller/mod.rs | 19 + src/controller/provider/mod.rs | 97 + src/controller/reaction/mod.rs | 50 + src/controller/reaction/text_to_speech.rs | 100 + src/controller/usage/mod.rs | 21 + src/controller/utils/agent.rs | 63 + src/controller/utils/mod.rs | 29 + src/controller/utils/text_to_speech.rs | 168 + src/conversation/llm/entity.rs | 17 + src/conversation/llm/mod.rs | 10 + src/conversation/llm/tests.rs | 84 + src/conversation/llm/tokenization.rs | 287 ++ src/conversation/llm/utils.rs | 51 + src/conversation/matrix/entity.rs | 38 + src/conversation/matrix/mod.rs | 11 + .../matrix/room_display_name_fetcher.rs | 56 + src/conversation/matrix/room_event_fetcher.rs | 46 + src/conversation/matrix/utils/mod.rs | 284 ++ src/conversation/matrix/utils/tests.rs | 218 + src/conversation/matrix_llm_bridge.rs | 34 + src/conversation/mod.rs | 5 + .../delayed_catch_up_marker_manager.rs | 181 + src/entity/catch_up_marker/entity.rs | 37 + src/entity/catch_up_marker/mod.rs | 11 + src/entity/cfg/config.rs | 401 ++ src/entity/cfg/defaults.rs | 35 + src/entity/cfg/env.rs | 38 + src/entity/cfg/mod.rs | 5 + src/entity/globalconfig/entity.rs | 64 + src/entity/globalconfig/mod.rs | 8 + src/entity/message_context.rs | 122 + src/entity/message_payload.rs | 47 + src/entity/mod.rs | 15 + src/entity/room_config_context.rs | 183 + src/entity/roomconfig/defaults.rs | 17 + src/entity/roomconfig/entity/handler.rs | 60 + src/entity/roomconfig/entity/mod.rs | 89 + .../roomconfig/entity/speech_to_text.rs | 59 + .../roomconfig/entity/text_generation.rs | 111 + .../roomconfig/entity/text_to_speech.rs | 110 + src/entity/roomconfig/mod.rs | 13 + src/entity/thread_context.rs | 13 + src/entity/trigger_event_info.rs | 27 + src/lib.rs | 10 + src/main.rs | 31 + src/strings/access.rs | 25 + src/strings/agent.rs | 345 ++ src/strings/cfg.rs | 356 ++ src/strings/error.rs | 15 + src/strings/global_config.rs | 67 + src/strings/help/access.rs | 80 + src/strings/help/agent.rs | 60 + src/strings/help/cfg.rs | 273 + src/strings/help/mod.rs | 17 + src/strings/help/provider.rs | 7 + src/strings/help/usage.rs | 7 + src/strings/image_generation.rs | 15 + src/strings/introduction.rs | 146 + src/strings/mod.rs | 19 + src/strings/provider.rs | 110 + src/strings/room_config.rs | 67 + src/strings/speech_to_text.rs | 11 + src/strings/text_to_speech.rs | 11 + src/strings/usage.rs | 62 + src/utils/mod.rs | 3 + src/utils/status.rs | 11 + src/utils/text.rs | 19 + src/utils/text_to_speech.rs | 69 + 220 files changed, 26033 insertions(+) create mode 100644 .dockerignore create mode 100644 .editorconfig create mode 100644 .github/workflows/workflow.yml create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 docs/README.md create mode 100644 docs/access.md create mode 100644 docs/agents.md create mode 100644 docs/configuration/README.md create mode 100644 docs/configuration/handlers.md create mode 100644 docs/configuration/image-generation.md create mode 100644 docs/configuration/speech-to-text.md create mode 100644 docs/configuration/text-generation.md create mode 100644 docs/configuration/text-to-speech.md create mode 100644 docs/development.md create mode 100644 docs/features.md create mode 100644 docs/installation.md create mode 100644 docs/providers.md create mode 100644 docs/sample-provider-configs/anthropic.yml create mode 100644 docs/sample-provider-configs/groq.yml create mode 100644 docs/sample-provider-configs/localai.yml create mode 100644 docs/sample-provider-configs/mistral.yml create mode 100644 docs/sample-provider-configs/ollama.yml create mode 100644 docs/sample-provider-configs/openai-compatible.yml create mode 100644 docs/sample-provider-configs/openai.yml create mode 100644 docs/sample-provider-configs/openrouter.yml create mode 100644 docs/sample-provider-configs/together-ai.yml create mode 100644 docs/screenshots/agent-creation.webp create mode 100644 docs/screenshots/config-status-handlers.webp create mode 100644 docs/screenshots/image-generation.webp create mode 100644 docs/screenshots/introduction-and-general-usage.webp create mode 100644 docs/screenshots/speech-to-text-default-flow.webp create mode 100644 docs/screenshots/speech-to-text-language.webp create mode 100644 docs/screenshots/speech-to-text-transcribe-only-mode.webp create mode 100644 docs/screenshots/sticker-generation.webp create mode 100644 docs/screenshots/text-generation-prefix-requirement.webp create mode 100644 docs/screenshots/text-generation.webp create mode 100644 docs/screenshots/text-to-speech-only-mode.webp create mode 100644 docs/screenshots/text-to-speech-seamless-voice-interaction.webp create mode 100644 docs/usage.md create mode 100644 etc/app/config.yml.dist create mode 100644 etc/assets/baibot-torso-768.png create mode 100644 etc/assets/baibot-torso.svg create mode 100644 etc/assets/baibot.png create mode 100644 etc/assets/baibot.svg create mode 100644 etc/assets/baibot.xcf create mode 100644 etc/services/core/compose.yml create mode 100644 etc/services/core/element-web/config.json create mode 100644 etc/services/core/element-web/nginx.conf create mode 100644 etc/services/core/synapse/config/homeserver.yaml create mode 100644 etc/services/core/synapse/config/synapse.127.0.0.1.nip.io.log.config create mode 100644 etc/services/core/synapse/config/synapse.127.0.0.1.nip.io.signing.key create mode 100644 etc/services/env.dist create mode 100644 etc/services/localai/compose.yml create mode 100644 etc/services/ollama/compose.yml create mode 100644 justfile create mode 100644 src/agent/definition.rs create mode 100644 src/agent/identifier.rs create mode 100644 src/agent/instantiation.rs create mode 100644 src/agent/manager.rs create mode 100644 src/agent/mod.rs create mode 100644 src/agent/provider/anthropic/config.rs create mode 100644 src/agent/provider/anthropic/controller.rs create mode 100644 src/agent/provider/anthropic/mod.rs create mode 100644 src/agent/provider/anthropic/utils.rs create mode 100644 src/agent/provider/config.rs create mode 100644 src/agent/provider/controller.rs create mode 100644 src/agent/provider/entity/agent_provider.rs create mode 100644 src/agent/provider/entity/image_generation.rs create mode 100644 src/agent/provider/entity/mod.rs create mode 100644 src/agent/provider/entity/ping.rs create mode 100644 src/agent/provider/entity/speech_to_text.rs create mode 100644 src/agent/provider/entity/text_generation.rs create mode 100644 src/agent/provider/entity/text_to_speech.rs create mode 100644 src/agent/provider/groq/mod.rs create mode 100644 src/agent/provider/localai/mod.rs create mode 100644 src/agent/provider/mistral/mod.rs create mode 100644 src/agent/provider/mod.rs create mode 100644 src/agent/provider/ollama/mod.rs create mode 100644 src/agent/provider/openai/config.rs create mode 100644 src/agent/provider/openai/controller.rs create mode 100644 src/agent/provider/openai/mod.rs create mode 100644 src/agent/provider/openai/utils.rs create mode 100644 src/agent/provider/openai_compat/config.rs create mode 100644 src/agent/provider/openai_compat/controller.rs create mode 100644 src/agent/provider/openai_compat/mod.rs create mode 100644 src/agent/provider/openai_compat/utils.rs create mode 100644 src/agent/provider/openrouter/mod.rs create mode 100644 src/agent/provider/togetherai/mod.rs create mode 100644 src/agent/purpose.rs create mode 100644 src/agent/utils.rs create mode 100644 src/bot/implementation.rs create mode 100644 src/bot/load_config.rs create mode 100644 src/bot/messaging.rs create mode 100644 src/bot/mod.rs create mode 100644 src/bot/reacting.rs create mode 100644 src/bot/rooms.rs create mode 100644 src/controller/access/determination/mod.rs create mode 100644 src/controller/access/determination/tests.rs create mode 100644 src/controller/access/dispatching.rs create mode 100644 src/controller/access/help.rs create mode 100644 src/controller/access/mod.rs create mode 100644 src/controller/access/room_local_agent_managers.rs create mode 100644 src/controller/access/users.rs create mode 100644 src/controller/agent/create/mod.rs create mode 100644 src/controller/agent/create/tests.rs create mode 100644 src/controller/agent/delete/mod.rs create mode 100644 src/controller/agent/details/mod.rs create mode 100644 src/controller/agent/determination/mod.rs create mode 100644 src/controller/agent/determination/tests.rs create mode 100644 src/controller/agent/help/mod.rs create mode 100644 src/controller/agent/list/mod.rs create mode 100644 src/controller/agent/mod.rs create mode 100644 src/controller/cfg/common/generic_setting.rs create mode 100644 src/controller/cfg/common/mod.rs create mode 100644 src/controller/cfg/controller_type.rs create mode 100644 src/controller/cfg/determination/mod.rs create mode 100644 src/controller/cfg/determination/speech_to_text/mod.rs create mode 100644 src/controller/cfg/determination/speech_to_text/tests.rs create mode 100644 src/controller/cfg/determination/tests.rs create mode 100644 src/controller/cfg/determination/text_generation/mod.rs create mode 100644 src/controller/cfg/determination/text_generation/tests.rs create mode 100644 src/controller/cfg/determination/text_to_speech/mod.rs create mode 100644 src/controller/cfg/determination/text_to_speech/tests.rs create mode 100644 src/controller/cfg/dispatching/mod.rs create mode 100644 src/controller/cfg/dispatching/speech_to_text.rs create mode 100644 src/controller/cfg/dispatching/text_generation.rs create mode 100644 src/controller/cfg/dispatching/text_to_speech.rs create mode 100644 src/controller/cfg/global_config/generic_setting.rs create mode 100644 src/controller/cfg/global_config/handler.rs create mode 100644 src/controller/cfg/global_config/mod.rs create mode 100644 src/controller/cfg/help.rs create mode 100644 src/controller/cfg/mod.rs create mode 100644 src/controller/cfg/room_config/generic_setting.rs create mode 100644 src/controller/cfg/room_config/handler.rs create mode 100644 src/controller/cfg/room_config/mod.rs create mode 100644 src/controller/cfg/status.rs create mode 100644 src/controller/chat_completion/mod.rs create mode 100644 src/controller/controller_type.rs create mode 100644 src/controller/determination/mod.rs create mode 100644 src/controller/determination/tests.rs create mode 100644 src/controller/dispatching.rs create mode 100644 src/controller/help/mod.rs create mode 100644 src/controller/image/generation.rs create mode 100644 src/controller/image/mod.rs create mode 100644 src/controller/image/prompt.rs create mode 100644 src/controller/join/mod.rs create mode 100644 src/controller/mod.rs create mode 100644 src/controller/provider/mod.rs create mode 100644 src/controller/reaction/mod.rs create mode 100644 src/controller/reaction/text_to_speech.rs create mode 100644 src/controller/usage/mod.rs create mode 100644 src/controller/utils/agent.rs create mode 100644 src/controller/utils/mod.rs create mode 100644 src/controller/utils/text_to_speech.rs create mode 100644 src/conversation/llm/entity.rs create mode 100644 src/conversation/llm/mod.rs create mode 100644 src/conversation/llm/tests.rs create mode 100644 src/conversation/llm/tokenization.rs create mode 100644 src/conversation/llm/utils.rs create mode 100644 src/conversation/matrix/entity.rs create mode 100644 src/conversation/matrix/mod.rs create mode 100644 src/conversation/matrix/room_display_name_fetcher.rs create mode 100644 src/conversation/matrix/room_event_fetcher.rs create mode 100644 src/conversation/matrix/utils/mod.rs create mode 100644 src/conversation/matrix/utils/tests.rs create mode 100644 src/conversation/matrix_llm_bridge.rs create mode 100644 src/conversation/mod.rs create mode 100644 src/entity/catch_up_marker/delayed_catch_up_marker_manager.rs create mode 100644 src/entity/catch_up_marker/entity.rs create mode 100644 src/entity/catch_up_marker/mod.rs create mode 100644 src/entity/cfg/config.rs create mode 100644 src/entity/cfg/defaults.rs create mode 100644 src/entity/cfg/env.rs create mode 100644 src/entity/cfg/mod.rs create mode 100644 src/entity/globalconfig/entity.rs create mode 100644 src/entity/globalconfig/mod.rs create mode 100644 src/entity/message_context.rs create mode 100644 src/entity/message_payload.rs create mode 100644 src/entity/mod.rs create mode 100644 src/entity/room_config_context.rs create mode 100644 src/entity/roomconfig/defaults.rs create mode 100644 src/entity/roomconfig/entity/handler.rs create mode 100644 src/entity/roomconfig/entity/mod.rs create mode 100644 src/entity/roomconfig/entity/speech_to_text.rs create mode 100644 src/entity/roomconfig/entity/text_generation.rs create mode 100644 src/entity/roomconfig/entity/text_to_speech.rs create mode 100644 src/entity/roomconfig/mod.rs create mode 100644 src/entity/thread_context.rs create mode 100644 src/entity/trigger_event_info.rs create mode 100644 src/lib.rs create mode 100644 src/main.rs create mode 100644 src/strings/access.rs create mode 100644 src/strings/agent.rs create mode 100644 src/strings/cfg.rs create mode 100644 src/strings/error.rs create mode 100644 src/strings/global_config.rs create mode 100644 src/strings/help/access.rs create mode 100644 src/strings/help/agent.rs create mode 100644 src/strings/help/cfg.rs create mode 100644 src/strings/help/mod.rs create mode 100644 src/strings/help/provider.rs create mode 100644 src/strings/help/usage.rs create mode 100644 src/strings/image_generation.rs create mode 100644 src/strings/introduction.rs create mode 100644 src/strings/mod.rs create mode 100644 src/strings/provider.rs create mode 100644 src/strings/room_config.rs create mode 100644 src/strings/speech_to_text.rs create mode 100644 src/strings/text_to_speech.rs create mode 100644 src/strings/usage.rs create mode 100644 src/utils/mod.rs create mode 100644 src/utils/status.rs create mode 100644 src/utils/text.rs create mode 100644 src/utils/text_to_speech.rs diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9d8c1be --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +/target +/var diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..d5c9df2 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,32 @@ +# This file is the top-most EditorConfig file +root = true + +# All Files +[*] +charset = utf-8 +end_of_line = lf +indent_style = tab +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +######################### +# File Extension Settings +######################### + +[*.{yml,yaml,yml.dist}] +indent_style = space +indent_size = 2 + +[*.rs] +indent_style = space +indent_size = 4 + +# Markdown Files +# +# Two spaces at the end of a line in Markdown mean "new line", +# so trimming trailing whitespace for such files can cause breakage. +[*.md] +trim_trailing_whitespace = false +indent_style = space +indent_size = 2 diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml new file mode 100644 index 0000000..a13fef4 --- /dev/null +++ b/.github/workflows/workflow.yml @@ -0,0 +1,51 @@ +name: CI (main and tags) +on: + push: + branches: [ "main" ] + tags: [ "v*" ] + schedule: + - cron: '0 0 * * 1' +permissions: + checks: write + contents: write + packages: write + pull-requests: read +jobs: + test-and-clippy: + name: Unit testing and linting + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - run: cargo test --all-features + - run: cargo clippy + + build-publish: + name: Build and Publish + runs-on: self-hosted + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to ghcr.io + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ghcr.io/${{ github.repository }} + registry.etke.cc/${{ github.repository }} + tags: | + type=raw,value=latest,enable=${{ github.ref_name == 'main' }} + type=semver,pattern={{raw}} + - name: Build and push + uses: docker/build-push-action@v6 + with: + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9d8c1be --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +/var diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..685a84a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1 @@ +There's nothing here yet. diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..4484b15 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,4380 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "accessory" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87537f9ae7cfa78d5b8ebd1a1db25959f5e737126be4d8eb44a5452fc4b63cde" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "anthropic-rs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5ef53259d9d4d8575d885bee6e50d0eab7579225da6e1789b2b77b5405b4d28" +dependencies = [ + "futures-util", + "reqwest 0.12.7", + "serde", + "serde_json", + "thiserror", + "tokio", +] + +[[package]] +name = "anyhow" +version = "1.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f00e1f6e58a40e807377c75c6a7f97bf9044fab57816f2414e6f5f4499d7b8" + +[[package]] +name = "anymap2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" + +[[package]] +name = "aquamarine" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21cc1548309245035eb18aa7f0967da6bc65587005170c56e6ef2788a4cf3f4e" +dependencies = [ + "include_dir", + "itertools 0.10.5", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "arrayref" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +dependencies = [ + "serde", +] + +[[package]] +name = "as_variant" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38fa22307249f86fb7fad906fcae77f2564caeb56d7209103c551cd1cf4798f" + +[[package]] +name = "assign" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f093eed78becd229346bf859eec0aa4dd7ddde0757287b2b4107a1f09c80002" + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-convert" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d416feee97712e43152cd42874de162b8f9b77295b1c85e5d92725cc8310bae" +dependencies = [ + "async-trait", +] + +[[package]] +name = "async-openai" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e1df052c2bd7b241fc828bc2fda74ce9a7ef05e0a593c37275aaaba52caf49d" +dependencies = [ + "async-convert", + "backoff", + "base64 0.21.7", + "derive_builder 0.12.0", + "futures", + "rand", + "reqwest 0.11.27", + "reqwest-eventsource 0.4.0", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "async-openai" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f7e40b158d5356b3497edb35610a408cb6339e68c91c7521bc68fbec83b2521" +dependencies = [ + "async-convert", + "backoff", + "base64 0.22.1", + "bytes", + "derive_builder 0.20.1", + "eventsource-stream", + "futures", + "rand", + "reqwest 0.12.7", + "reqwest-eventsource 0.6.0", + "secrecy", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "async-trait" +version = "0.1.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backoff" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +dependencies = [ + "futures-core", + "getrandom", + "instant", + "pin-project-lite", + "rand", + "tokio", +] + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide 0.7.4", + "object", + "rustc-demangle", +] + +[[package]] +name = "baibot" +version = "1.0.0" +dependencies = [ + "anthropic-rs", + "anyhow", + "async-openai 0.24.0", + "base64 0.22.1", + "matrix-sdk", + "mxidwc", + "mxlink", + "openai_api_rust", + "quick_cache", + "regex", + "serde", + "serde_json", + "serde_yaml", + "tempfile", + "tiktoken-rs", + "tokio", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitmaps" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d084b0137aaa901caf9f1e8b21daa6aa24d41cd806e111335541eff9683bd6" + +[[package]] +name = "blake3" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bstr" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" +dependencies = [ + "memchr", + "regex-automata 0.4.7", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" + +[[package]] +name = "bytesize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" + +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] + +[[package]] +name = "cc" +version = "1.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9d013ecb737093c0e86b151a7b837993cf9ec6c502946cfb44bedc392421e0b" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg-vis" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3a2c3bf5fc10fe2ca157564fbe08a4cb2b0a7d2ff3fe2f9683e65d5e7c7859c" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_panic" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7782af8f90fe69a4bb41e460abe1727d493403d8b2cc43201a3a3e906b24379f" + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core", + "typenum", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "rustc_version", + "serde", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core 0.14.4", + "darling_macro 0.14.4", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core 0.20.10", + "darling_macro 0.20.10", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.77", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core 0.20.10", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "deadpool" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490" +dependencies = [ + "async-trait", + "deadpool-runtime", + "num_cpus", + "tokio", +] + +[[package]] +name = "deadpool-runtime" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +dependencies = [ + "tokio", +] + +[[package]] +name = "deadpool-sqlite" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8010e36e12f3be22543a5e478b4af20aeead9a700dd69581a5e050a070fc22c" +dependencies = [ + "deadpool", + "deadpool-sync", + "rusqlite", +] + +[[package]] +name = "deadpool-sync" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524bc3df0d57e98ecd022e21ba31166c2625e7d3e5bcc4510efaeeab4abcab04" +dependencies = [ + "deadpool-runtime", +] + +[[package]] +name = "delegate-display" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98a85201f233142ac819bbf6226e36d0b5e129a47bd325084674261c82d4cd66" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "der_derive", + "flagset", + "zeroize", +] + +[[package]] +name = "der_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "derive_builder" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8" +dependencies = [ + "derive_builder_macro 0.12.0", +] + +[[package]] +name = "derive_builder" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd33f37ee6a119146a1781d3356a7c26028f83d779b2e04ecd45fdc75c76877b" +dependencies = [ + "derive_builder_macro 0.20.1", +] + +[[package]] +name = "derive_builder_core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" +dependencies = [ + "darling 0.14.4", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7431fa049613920234f22c47fdc33e6cf3ee83067091ea4277a3f8c4587aae38" +dependencies = [ + "darling 0.20.10", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "derive_builder_macro" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e" +dependencies = [ + "derive_builder_core 0.12.0", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4abae7035bf79b9877b779505d8cf3749285b80c43941eda66604841889451dc" +dependencies = [ + "derive_builder_core 0.20.1", + "syn 2.0.77", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "serde", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core", + "serde", + "sha2", + "subtle", + "zeroize", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.1", + "pin-project-lite", +] + +[[package]] +name = "eventsource-stream" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74fef4569247a5f429d9156b9d0a2599914385dd189c539334c625d8099d90ab" +dependencies = [ + "futures-core", + "nom", + "pin-project-lite", +] + +[[package]] +name = "eyeball" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93bd0ebf93d61d6332d3c09a96e97975968a44e19a64c947bde06e6baff383f" +dependencies = [ + "futures-core", + "readlock", + "tracing", +] + +[[package]] +name = "eyeball-im" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9326c8d9f6d59d18935412608b4514cc661e4e068011bb2f523f6c8b1cfa3bd4" +dependencies = [ + "futures-core", + "imbl", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fancy-regex" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7493d4c459da9f84325ad297371a6b2b8a162800873a22e3b6b6512e61d18c05" +dependencies = [ + "bit-set", + "regex", +] + +[[package]] +name = "fancy_constructor" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07b19d0e43eae2bfbafe4931b5e79c73fb1a849ca15cd41a761a7b8587f9a1a2" +dependencies = [ + "macroific", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "fastrand" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "flagset" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3ea1ec5f8307826a5b71094dd91fc04d4ae75d5709b20ad351c7fb4815c86ec" + +[[package]] +name = "flate2" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +dependencies = [ + "crc32fast", + "miniz_oxide 0.8.0", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown", +] + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.30", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "rustls 0.23.12", + "rustls-native-certs 0.8.0", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.30", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "imbl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978d142c8028edf52095703af2fad11d6f611af1246685725d6b850634647085" +dependencies = [ + "bitmaps", + "imbl-sized-chunks", + "rand_core", + "rand_xoshiro", + "serde", + "version_check", +] + +[[package]] +name = "imbl-sized-chunks" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "144006fb58ed787dcae3f54575ff4349755b00ccc99f4b4873860b654be1ed63" +dependencies = [ + "bitmaps", +] + +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "indexed_db_futures" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0704b71f13f81b5933d791abf2de26b33c40935143985220299a357721166706" +dependencies = [ + "accessory", + "cfg-if", + "delegate-display", + "fancy_constructor", + "js-sys", + "uuid", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "indexmap" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +dependencies = [ + "equivalent", + "hashbrown", + "serde", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "js_int" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d937f95470b270ce8b8950207715d71aa8e153c0d44c6684d59397ed4949160a" +dependencies = [ + "serde", +] + +[[package]] +name = "js_option" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68421373957a1593a767013698dbf206e2b221eefe97a44d98d18672ff38423c" +dependencies = [ + "serde", +] + +[[package]] +name = "konst" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50a0ba6de5f7af397afff922f22c149ff605c766cd3269cf6c1cd5e466dbe3b9" +dependencies = [ + "const_panic", + "konst_kernel", + "typewit", +] + +[[package]] +name = "konst_kernel" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be0a455a1719220fd6adf756088e1c69a85bf14b6a9e24537a5cc04f503edb2b" +dependencies = [ + "typewit", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" + +[[package]] +name = "libsqlite3-sys" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +dependencies = [ + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "macroific" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05c00ac596022625d01047c421a0d97d7f09a18e429187b341c201cb631b9dd" +dependencies = [ + "macroific_attr_parse", + "macroific_core", + "macroific_macro", +] + +[[package]] +name = "macroific_attr_parse" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd94d5da95b30ae6e10621ad02340909346ad91661f3f8c0f2b62345e46a2f67" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "macroific_core" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13198c120864097a565ccb3ff947672d969932b7975ebd4085732c9f09435e55" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "macroific_macro" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c9853143cbed7f1e41dc39fee95f9b361bec65c8dc2a01bf609be01b61f5ae" +dependencies = [ + "macroific_attr_parse", + "macroific_core", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matrix-pickle" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb521190328c57a2051f70250beb874dc0fac6bcd22b615f7f9700b7b4fb826" +dependencies = [ + "matrix-pickle-derive", + "thiserror", +] + +[[package]] +name = "matrix-pickle-derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fb3c7231cbb7fbbc50871615edebf65183b382cdaa1fe21c5e88a12617de8e" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "matrix-sdk" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "336687e5fc8b33661a31681e988a67e9a3090c7fb1a8323a7f71eeaabad642ec" +dependencies = [ + "anymap2", + "aquamarine", + "as_variant", + "async-channel", + "async-stream", + "async-trait", + "backoff", + "bytes", + "bytesize", + "cfg-vis", + "event-listener 4.0.3", + "eyeball", + "eyeball-im", + "futures-core", + "futures-util", + "gloo-timers", + "http 0.2.12", + "imbl", + "indexmap", + "matrix-sdk-base", + "matrix-sdk-common", + "matrix-sdk-indexeddb", + "matrix-sdk-sqlite", + "mime", + "mime2ext", + "reqwest 0.11.27", + "ruma", + "serde", + "serde_html_form", + "serde_json", + "tempfile", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "url", + "urlencoding", + "zeroize", +] + +[[package]] +name = "matrix-sdk-base" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00891954d0826a94f1d130f46cbca64176003a234c1be5d9d282970d31cf0c87" +dependencies = [ + "as_variant", + "async-trait", + "bitflags 2.6.0", + "eyeball", + "eyeball-im", + "futures-util", + "matrix-sdk-common", + "matrix-sdk-crypto", + "matrix-sdk-store-encryption", + "once_cell", + "ruma", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "matrix-sdk-common" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb365a626ab6f6c6a2422cfe2565522f19accb06706c6d04bca8f0f71df29c9f" +dependencies = [ + "async-trait", + "futures-core", + "futures-util", + "gloo-timers", + "instant", + "ruma", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-subscriber", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "matrix-sdk-crypto" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e03a64d12a83ebe33bb55de9b77faef4ce27006f946f8468c3311f311f39ab8b" +dependencies = [ + "aes", + "as_variant", + "async-trait", + "bs58", + "byteorder", + "cbc", + "cfg-if", + "ctr", + "eyeball", + "futures-core", + "futures-util", + "hkdf", + "hmac", + "itertools 0.12.1", + "matrix-sdk-common", + "pbkdf2", + "rand", + "rmp-serde", + "ruma", + "serde", + "serde_json", + "sha2", + "subtle", + "thiserror", + "tokio", + "tokio-stream", + "tracing", + "ulid", + "vodozemac", + "zeroize", +] + +[[package]] +name = "matrix-sdk-indexeddb" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad388005c5d4ed2ff38f405d52aa7fa606f4e1ab51baf5f2504721124ed4a58b" +dependencies = [ + "anyhow", + "async-trait", + "base64 0.21.7", + "getrandom", + "gloo-utils", + "indexed_db_futures", + "js-sys", + "matrix-sdk-base", + "matrix-sdk-crypto", + "matrix-sdk-store-encryption", + "ruma", + "serde", + "serde-wasm-bindgen", + "serde_json", + "thiserror", + "tokio", + "tracing", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "matrix-sdk-sqlite" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a98d034dd5aa85b4da6500e60c7d5b9328a37632cf40ba38bbe2c77cea3f14" +dependencies = [ + "async-trait", + "deadpool-sqlite", + "itertools 0.12.1", + "matrix-sdk-base", + "matrix-sdk-crypto", + "matrix-sdk-store-encryption", + "rmp-serde", + "ruma", + "rusqlite", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "vodozemac", +] + +[[package]] +name = "matrix-sdk-store-encryption" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a7e3162e9f982a4c57ab46df01a4775f697dec8899738bf62d7e97b63faa61c" +dependencies = [ + "blake3", + "chacha20poly1305", + "displaydoc", + "getrandom", + "hmac", + "pbkdf2", + "rand", + "rmp-serde", + "serde", + "serde_json", + "sha2", + "thiserror", + "zeroize", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime2ext" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "515a63dc9666c865e848b043ab52fe9a5c713ae89cde4b5fbaae67cfd614b93a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "mxidwc" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1b70c6b8e11b266a470e65d7c018ccfacdf7822449968a37fcdeb258614a7ae" +dependencies = [ + "regex", +] + +[[package]] +name = "mxlink" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80cb97e517e3bc8e85b4787ed87037cd324526862ca9375c6d038699010bf6c2" +dependencies = [ + "base64 0.22.1", + "chacha20poly1305", + "hex", + "js_int", + "matrix-sdk", + "mime", + "quick_cache", + "rand", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.36.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openai_api_rust" +version = "0.1.9" +source = "git+https://github.com/etkecc/openai_api_rust.git?branch=next#a9183fc2e699c3d33c635c2aed3f9174f9d9cd74" +dependencies = [ + "log", + "mime", + "rand", + "serde", + "serde_json", + "ureq", +] + +[[package]] +name = "openssl" +version = "0.10.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest", + "hmac", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs7" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d79178be066405e0602bf3035946edef6b11b3f9dde46dfe5f8bfd7dea4b77e7" +dependencies = [ + "der", + "spki", + "x509-cert", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit 0.22.20", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2ecbe40f08db5c006b5764a2645f7f3f141ce756412ac9e1dd6087e6d32995" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acf0c195eebb4af52c752bec4f52f645da98b6e92077a04110c7f349477ae5ac" +dependencies = [ + "anyhow", + "itertools 0.13.0", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" +dependencies = [ + "bitflags 2.6.0", + "memchr", + "unicase", +] + +[[package]] +name = "quick_cache" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ec0b6fed0a0ff01fa82d0c8982389375dd59c72dae84d4f8a15b1a894c273f7" +dependencies = [ + "ahash", + "equivalent", + "hashbrown", + "parking_lot", +] + +[[package]] +name = "quinn" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.0.0", + "rustls 0.23.12", + "socket2", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +dependencies = [ + "bytes", + "rand", + "ring", + "rustc-hash 2.0.0", + "rustls 0.23.12", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" +dependencies = [ + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core", +] + +[[package]] +name = "readlock" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "072cfe5b1d2dcd38d20e18f85e9c9978b6cc08f0b373e9f1fff1541335622974" + +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-rustls 0.24.2", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-native-tls", + "tokio-rustls 0.24.1", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls 0.27.3", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.12", + "rustls-native-certs 0.7.3", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "system-configuration 0.6.1", + "tokio", + "tokio-native-tls", + "tokio-rustls 0.26.0", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "windows-registry", +] + +[[package]] +name = "reqwest-eventsource" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f03f570355882dd8d15acc3a313841e6e90eddbc76a93c748fd82cc13ba9f51" +dependencies = [ + "eventsource-stream", + "futures-core", + "futures-timer", + "mime", + "nom", + "pin-project-lite", + "reqwest 0.11.27", + "thiserror", +] + +[[package]] +name = "reqwest-eventsource" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "632c55746dbb44275691640e7b40c907c16a2dc1a5842aa98aaec90da6ec6bde" +dependencies = [ + "eventsource-stream", + "futures-core", + "futures-timer", + "mime", + "nom", + "pin-project-lite", + "reqwest 0.12.7", + "thiserror", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "ruma" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2779c38df072964c63476259d9300efb07d0d1a7178c6469893636ce0c547a36" +dependencies = [ + "assign", + "js_int", + "js_option", + "ruma-client-api", + "ruma-common", + "ruma-events", + "ruma-federation-api", +] + +[[package]] +name = "ruma-client-api" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "641837258fa214a70823477514954ef0f5d3bc6ae8e1d5d85081856a33103386" +dependencies = [ + "assign", + "bytes", + "http 0.2.12", + "js_int", + "js_option", + "maplit", + "ruma-common", + "ruma-events", + "serde", + "serde_html_form", + "serde_json", +] + +[[package]] +name = "ruma-common" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bca4c33c50e47b4cdceeac71bdef0c04153b0e29aa992d9030ec14a62323e85" +dependencies = [ + "as_variant", + "base64 0.21.7", + "bytes", + "form_urlencoded", + "getrandom", + "http 0.2.12", + "indexmap", + "js-sys", + "js_int", + "konst", + "percent-encoding", + "rand", + "regex", + "ruma-identifiers-validation", + "ruma-macros", + "serde", + "serde_html_form", + "serde_json", + "thiserror", + "tracing", + "url", + "uuid", + "wildmatch", +] + +[[package]] +name = "ruma-events" +version = "0.27.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d20a52770e5a9fb30b7a1c14ba8b3dcf76dadc01674e58e40094f78e6bd5e3f1" +dependencies = [ + "as_variant", + "indexmap", + "js_int", + "js_option", + "percent-encoding", + "pulldown-cmark", + "regex", + "ruma-common", + "ruma-identifiers-validation", + "ruma-macros", + "serde", + "serde_json", + "thiserror", + "tracing", + "url", + "wildmatch", +] + +[[package]] +name = "ruma-federation-api" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1901c1f27bc327652d58af2a130c73acef3198abeccd24cee97f7267fdf3fe7" +dependencies = [ + "js_int", + "ruma-common", + "ruma-events", + "serde", + "serde_json", +] + +[[package]] +name = "ruma-identifiers-validation" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa38974f5901ed4e00e10aec57b9ad3b4d6d6c1a1ae683c51b88700b9f4ffba" +dependencies = [ + "js_int", + "thiserror", +] + +[[package]] +name = "ruma-macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0280534a4b3e34416f883285fac4f9c408cd0b737890ae66f3e7a7056d14be80" +dependencies = [ + "once_cell", + "proc-macro-crate 2.0.0", + "proc-macro2", + "quote", + "ruma-identifiers-validation", + "serde", + "syn 2.0.77", + "toml", +] + +[[package]] +name = "rusqlite" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d" +dependencies = [ + "bitflags 2.6.0", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f55e80d50763938498dd5ebb18647174e0c76dc38c5505294bb224624f30f36" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.23.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.7", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "serde", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.210" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_bytes" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.210" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "serde_html_form" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de514ef58196f1fc96dcaef80fe6170a1ce6215df9687a93fe8300e773fefc5" +dependencies = [ + "form_urlencoded", + "indexmap", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_json" +version = "1.0.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "rand_core", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys 0.6.0", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +dependencies = [ + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tiktoken-rs" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c314e7ce51440f9e8f5a497394682a57b7c323d0f4d0a6b1b13c429056e0e234" +dependencies = [ + "anyhow", + "async-openai 0.14.3", + "base64 0.21.7", + "bstr", + "fancy-regex", + "lazy_static", + "parking_lot", + "rustc-hash 1.1.0", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.12", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.20", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.18", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "typewit" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fb9ae6a3cafaf0a5d14c2302ca525f9ae8e07a0f0e6949de88d882c37a6e24" +dependencies = [ + "typewit_proc_macros", +] + +[[package]] +name = "typewit_proc_macros" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36a83ea2b3c704935a01b4642946aadd445cea40b10935e3f8bd8052b8193d6" + +[[package]] +name = "ulid" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f903f293d11f31c0c29e4148f6dc0d033a7f80cebc0282bea147611667d289" +dependencies = [ + "getrandom", + "rand", + "web-time", +] + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +dependencies = [ + "base64 0.22.1", + "flate2", + "log", + "once_cell", + "rustls 0.23.12", + "rustls-pki-types", + "serde", + "serde_json", + "url", + "webpki-roots", +] + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vodozemac" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "051d4af70b53b42adf2aac459a305851b8d754f210aaf11ab509e1065beff422" +dependencies = [ + "aes", + "arrayvec", + "base64 0.22.1", + "base64ct", + "cbc", + "chacha20poly1305", + "curve25519-dalek", + "ed25519-dalek", + "getrandom", + "hkdf", + "hmac", + "matrix-pickle", + "pkcs7", + "prost", + "rand", + "serde", + "serde_bytes", + "serde_json", + "sha2", + "subtle", + "thiserror", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.77", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "wildmatch" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3928939971918220fed093266b809d1ee4ec6c1a2d72692ff6876898f3b16c19" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core", + "serde", + "zeroize", +] + +[[package]] +name = "x509-cert" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1301e935010a701ae5f8655edc0ad17c44bad3ac5ce8c39185f75453b720ae94" +dependencies = [ + "const-oid", + "der", + "spki", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..754b640 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,42 @@ +[package] +name = "baibot" +description = "A Matrix bot for using diffent capabilities (text-generation, text-to-speech, speech-to-text, image-generation, etc.) of AI / Large Language Models" +authors = ["Slavi Pantaleev "] +repository = "https://github.com/etkecc/baibot" +license = "AGPL-3.0-or-later" +readme = "README.md" +keywords = ["matrix", "chat", "LLM", "openai", "anthropic", "localai"] +exclude = [".editorconfig", "justfile", "docs/", "etc/", "Dockerfile", ".dockerignore", ".gitignore"] +version = "1.0.0" +edition = "2021" + +[lib] +name = "baibot" +path = "src/lib.rs" + +[dependencies] +anthropic-rs = "0.1.*" +anyhow = "1.0.*" +async-openai = "0.24.*" +base64 = "0.22.*" +# We'd rather not depend on this, but we cannot use the ruma-events EventContent macro without it. +matrix-sdk = { version = "0.7.1", default-features = false } +mxidwc = "1.0.*" +mxlink = "1.0.*" +openai_api_rust = { git = "https://github.com/etkecc/openai_api_rust.git", branch = "next" } +quick_cache = "0.6.*" +regex = "1.10.*" +serde = { version = "1.0.*", features = ["derive"], default-features = false } +serde_json = "1.0.*" +serde_yaml = "0.9.*" +tempfile = "3.12.*" +tiktoken-rs = { version = "0.5.*", features = ["async-openai"] } +tokio = { version = "1.40.*", features = ["rt", "rt-multi-thread", "macros"] } +tracing = "0.1.*" +tracing-subscriber = { version = "0.3.*", features = ["env-filter"] } +url = "2.5.*" + +[profile.release] +strip = true +opt-level = "z" +lto = "thin" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7da367c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,43 @@ +####################################### +# # +# Stage 1: building # +# # +####################################### + +FROM docker.io/rust:1.80.1-slim-bookworm AS build + +RUN apt-get update && apt-get install -y build-essential pkg-config libssl-dev libsqlite3-dev + +ENV CARGO_HOME=/cargo +ENV CARGO_TARGET_DIR=/target + +WORKDIR /app + +COPY . /app + +RUN --mount=type=cache,target=/cargo,sharing=locked \ + --mount=type=cache,target=/target,sharing=locked \ + cargo build --release + +# Move it out of the mounted cache, so we can copy it in the next stage. +RUN --mount=type=cache,target=/target,sharing=locked \ + cp /target/release/baibot /baibot + + +####################################### +# # +# Stage 2: packaging # +# # +####################################### + +FROM docker.io/debian:bookworm-slim + +RUN apt-get update && apt-get install -y ca-certificates sqlite3 + +WORKDIR /app + +COPY --from=build /baibot . + +ENTRYPOINT ["/bin/sh", "-c"] + +CMD ["/app/baibot"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0ad25db --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..254ab09 --- /dev/null +++ b/README.md @@ -0,0 +1,77 @@ +

+ baibot logo +

baibot

+

+ +🤖 baibot is an [AI](https://en.wikipedia.org/wiki/Artificial_intelligence) ([Large Language Model](https://en.wikipedia.org/wiki/Large_language_model)) bot for [Matrix](https://matrix.org/) built by [etke.cc](https://etke.cc/) (managed Matrix servers). + +The name is pronounced 'bye' and is a play on [AI](https://en.wikipedia.org/wiki/Artificial_intelligence), referencing the fictional character [🇧đŸ‡Ŧ Bai Ganyo](https://en.wikipedia.org/wiki/Bay_Ganyo). + +It's designed as a more private and [featureful](#-features) alternative to [matrix-chatgpt-bot](https://github.com/matrixgpt/matrix-chatgpt-bot). +It's influenced by [chaz](https://github.com/arcuru/chaz), but does **not** use the [AIChat](https://github.com/sigoden/aichat) CLI tool and instead does everything in-process, without forking. + + +## 🌟 Features + +- 🎨 Encourages **[provider](./docs/providers.md) choice** ([Anthropic](./docs/providers.md#anthropic), [Groq](./docs/providers.md#groq), [LocalAI](./docs/providers.md#localai), [OpenAI](./docs/providers.md#openai) and [â˜ī¸ many more](./docs/providers.md#ī¸-providers)) as well as **[mixing & matching models](./docs/features.md#-mixing--matching-models)**: + +- Supports **different use purposes** (depending on the [â˜ī¸ provider](./docs/providers.md) & model): + + - [đŸ’Ŧ text-generation](./docs/features.md#-text-generation): communicating with you via text + - [đŸĻģ speech-to-text](./docs/features.md#-speech-to-text): turning your voice messages into text + - [đŸ—Ŗī¸ text-to-speech](./docs/features.md#ī¸-text-to-speech): turning bot or users text messages into voice messages + - [đŸ–Œī¸ image-generation](./docs/features.md#-image-generation): generating images based on instructions + +- đŸĒ„ Supports [seamless voice interaction](./docs/features.md#seamless-voice-interaction) (turning user voice messages into text, answering in text, then turning that text back into voice) + +- đŸĻģ Supports [transcribe-only mode](./docs/features.md#transcribe-only-mode) (turning user voice messages into text, without doing text-generation) + +- đŸ—Ŗī¸ Supports [text-to-speech-only mode](./docs/features.md#text-to-speech-only-mode) (turning user text messages into voice, without doing text-generation) + +- 🔒 Supports [encryption](./docs/features.md#-encryption) for Matrix communication and Account-Data-stored configuration + +- â™ģī¸ Supports [context-management](./docs/configuration/text-generation.md#ī¸-context-management) handling on some models (automatically adjusting the message history length, etc.) + +- đŸ› ī¸ Allows **customizing much of the bot's [configuration](./docs/configuration/README.md)** at runtime (using commands sent via chat) + +- đŸ‘Ĩ **Actively maintained** by the team at [etke.cc](https://etke.cc/) + + +## đŸ–ŧī¸ Screenshots + +![Introduction and general usage](./docs/screenshots/introduction-and-general-usage.webp) + +You can find more screenshots on the the [🌟 Features](./docs/features.md) and other [📚 Documentation](./docs/README.md) pages, as well as in the [docs/screenshots](./docs/screenshots) directory. + + +## 🚀 Getting Started + +🗲 For a quick experiment, you can refer to the [🧑‍đŸ’ģ development documentation](./docs/development.md) which contains information on how to build and run the bot (and its various dependency services) locally. + +For a real installation, see the [🚀 Installation](./docs/installation.md) documentation which contains information on [🐋 Running in a container](./docs/installation.md#-running-in-a-container) and [đŸ–Ĩī¸ī¸ī¸ī¸ī¸ Running a binary](./docs/installation.md#-running-a-binary). + + +## 📚 Documentation + +See the bot's [📚 documentation](./docs/README.md) for more information on how to use and configure the bot. + + +## đŸ’ģ Development + +See the bot's [🧑‍đŸ’ģ development documentation](./docs/development.md) for more information on how to develop on the bot. + + +## 📜 Changes + +This bot evolves over time, sometimes with backward-incompatible changes. + +When updating the bot, refer to [the changelog](CHANGELOG.md) to catch up with what's new. + + +## 🆘 Support + +- Matrix room: [#baibot:etke.cc](https://matrix.to/#/#baibot:etke.cc) + +- GitHub issues: [etkecc/baibot/issues](https://github.com/etkecc/baibot/issues) + +- (for [etke.cc](https://etke.cc/) customers): etke.cc [support](https://etke.cc/contacts/) diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..a962d09 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,9 @@ +# Table of Contents + +- [🔒 Access](./access.md) +- [🤖 Agents](./agents.md) and [â˜ī¸ Providers](./providers.md) +- [đŸ› ī¸ Configuration](./configuration/README.md) +- [🌟 Features](./features.md) +- [📖 Usage](./usage.md) +- [🚀 Installation](./installation.md) +- [đŸ’ģ Development](./development.md) diff --git a/docs/access.md b/docs/access.md new file mode 100644 index 0000000..ab6c03c --- /dev/null +++ b/docs/access.md @@ -0,0 +1,46 @@ +## 🔒 Access + +This bot employs access control to decide who can use its services and manage its configuration. + + +### 👋 Joining rooms + +The bot automatically joins rooms when invited by someone considered a bot [user](#-users). + + +### đŸ‘Ĩ Users + +The bot will ignore messages (and room invitations) from unallowed users. + +Users can **use all the bot's [features](./features.md)** ([đŸ’Ŧ Text Generation](./features.md#-text-generation), [đŸĻģ Speech-to-Text](./features.md#-speech-to-text), etc.), but **cannot manage the bot's configuration**. + +The bot can be used by users that match some [dynamically](./configuration/README.md#dynamic-configuration) configured [Matrix user id](https://spec.matrix.org/v1.11/#users) patterns. + +The following commands are available: +- **Show** the currently allowed users: `!bai access users` +- **Set** the list of allowed users: `!bai access set-users SPACE_SEPARATED_PATTERNS` + +Example patterns: `@*:example.com @*:another.com @someone:company.org` + + +### đŸ‘Žâ€â™‚ī¸ Administrators + +Administrators can **manage the bot's configuration and access control**. + +The bot can be administrated by users that match some [statically](./configuration/README.md#static-configuration) configured [Matrix user id](https://spec.matrix.org/v1.11/#users) patterns. + +Administrators cannot be changed without adjusting the bot's configuration on the server. + + +### đŸ’ŧ Room-local agent managers + +Room-local agent managers are users privileged to **create their own [agents](./agents.md)** (see `!bai agent`) in rooms. +Letting regular users create agents which contact arbitrary network services **may be a security issue**. + +No room-local agent manager patterns are configured, so new agents can only be created by administrators. + +The following commands are available: +- **Show** the currently allowed users: `!bai access room-local-agent-managers` +- **Set** the list of allowed users: `!bai access set-room-local-agent-managers SPACE_SEPARATED_PATTERNS` + +Example patterns: `@*:synapse.127.0.0.1.nip.io @*:another.com @someone:company.org` diff --git a/docs/agents.md b/docs/agents.md new file mode 100644 index 0000000..6ae1c77 --- /dev/null +++ b/docs/agents.md @@ -0,0 +1,61 @@ +## 🤖 Agents + +An agent is an instantiation and configuration of some [â˜ī¸ provider](./providers.md). +It can support different capabilities (text-generation, speech-to-text, etc.) depending on the provider used and on the configuration of the agent. + +Agents can be set as **[🤝 handlers](./configuration/handlers.md) for various purposes** (text-generation, speech-to-text, etc.) globally or in specific rooms. Send a `!bai config status` command to see the current configuration. + +Agents can be **defined [statically](./configuration/README.md#static-configuration)** (in the server configuration) **or dynamically** (via commands sent to the bot). + +When [creating agents](#creating-agents) dynamically, you can do it **per-room or globally**. +Globally-defined agents can be used by any authorized bot user in any room, while room-local agents can only be used in the room where they were defined. + +Agent configuration (like all other configuration) is stored in the Matrix Account Data of the bot user and is **potentially encrypted** (if enabled in the configuration), so that your configuration data is safe even on untrusted homeservers. + + +### Listing agents + +To **list** all available agents: `!bai agent list` + + +#### Creating agents + +See a [đŸ–ŧī¸ Screenshot of the agent creation process](./screenshots/agent-creation.webp). + +To **create** a new agent, you need to specify the [provider](./providers.md) and an agent id of your choosing. + +- **Create** a new agent: + - (Accessible in **this room only**) `!bai agent create-room-local PROVIDER_ID AGENT_ID` + - (Accessible in **all rooms**) `!bai agent create-global PROVIDER AGENT_ID` + - Example: `!bai agent create-room-local openai my-openai-agent` + +The `AGENT_ID` is a unique identifier for the agent. It can be any string which **doesn't contain spaces and `/`**. + +Depending on where the agent is defined (within a room, globally, or [statically](./configuration/README.md#static-configuration)), this id will get a prefix (e.g. `room-local/`, `global/` or `static/`). The combined id (prefix + agent id) makes the **full agent identifier** (refered to as `FULL_AGENT_IDENTIFIER` in commands below). + +When creating an agent, you will be given some sample [YAML](https://en.wikipedia.org/wiki/YAML) configuration which you can use to customize the agent's behavior. + +This configuration varies depending on the [â˜ī¸ provider](./providers.md) used and the capabilities of the agent. Based on the configuration keys you pass, certain features will be enabled or disabled. For example, if you skip the `image_generation` key for an [OpenAI](./providers.md#openai) agent, it won't be able to generate images (see [đŸ–Œī¸ Image Generation](./features.md#-image-generation)). + +After making your modifications to the sample YAML, you submit it back to the bot and the new agent will be created. + +**To make use of the agent**, you need to [🤝 configure it as a handler for a given purpose](./configuration/handlers.md). + + +### Showing agent details + +To **show** full details for a given agent: `!bai agent details FULL_AGENT_IDENTIFIER` + +This command requires a full agent identifier (e.g. `room-local/agent-id`). + + +### Deleting agents + +To **delete** an agent: `!bai agent delete FULL_AGENT_IDENTIFIER` + +This command requires a full agent identifier (e.g. `room-local/agent-id`). + + +### Updating agents + +To **update** a given agent's configuration: show the agent's [details](#showing-agent-details) (current configuration), then [delete](#deleting-agents) it and finally [re-create](#creating-agents) it. diff --git a/docs/configuration/README.md b/docs/configuration/README.md new file mode 100644 index 0000000..0ca2555 --- /dev/null +++ b/docs/configuration/README.md @@ -0,0 +1,48 @@ +## đŸ› ī¸ Configuration + +The bot's behavior is controlled by a combination of [static](#static-configuration) and [dynamic](#dynamic-configuration) configuration. + + +### Static configuration + +The bot can be configured using a [YAML](https://en.wikipedia.org/wiki/YAML) configuration file as well as [environment variables](https://en.wikipedia.org/wiki/Environment_variable). + +When running the bot locally (during [🧑‍đŸ’ģ development](../development.md)), the bot's configuration is read from the `var/app/config.yml` file. +This file is created from the template found in [etc/app/config.yml.dist](../../etc/app/config.yml.dist). + +Certain keys can be left unset, in which case [📝 hardcoded defaults](../../src/entity/cfg/defaults.rs) would be used. + +Each configuration key found in the YAML configuration can be overridden by setting an environment variable (dots should be replaced with `_`). Example: + +- to override `command_prefix`, set an environment variable `BAIBOT_COMMAND_PREFIX` +- to override `homeserver.server_name`, set an environment variable `BAIBOT_HOMESERVER_SERVER_NAME` + +The static configuration contains an `initial_global_config` key, which is used to populate the bot's global configuration (stored as [dynamic configuration](#dynamic-configuration)) the first time the bot starts. Modifying this subsequently will not have any effect. After initial global configuration creation, it's expected to be managed dynamically via chat commands. + + +### Dynamic configuration + +Besides the bot's [static configuration](#static-configuration), **the bot can also be configured dynamically at runtime (via chat messages)**. + +This includes changes to [🔒 Access](../access.md), [🤖 Agents](../agents.md) and [đŸ› ī¸ Room Settings](#room-settings). + + +#### Room Settings + +Room Settings come from 3 different levels with priority in the following order (higher to lower): + +- 📍 per-room (`!bai config room ..` commands) +- 🌐 globally (`!bai config global ..` commands) +- 📝 as [hardcoded defaults](../../src/entity/cfg/defaults.rs) + +You can adjust the following settings per room and/or globally: + +- [đŸ’Ŧ Text Generation](text-generation.md) +- [đŸĻģ Speech-to-Text](speech-to-text.md) +- [đŸ—Ŗī¸ Text-to-Speech](text-to-speech.md) +- [đŸ–Œī¸ Image Generation](image-generation.md) +- [🤝 Handlers](handlers.md) + +Refer to the bot's help messages (as a response to a `!bai config` help command) for the most up-to-date information on what Room Settings can be configured. + +You can **get an overview of the configuration affecting the current room** (a mix of hardcoded defaults, agent defaults, global and room-level settings) by sending a `!bai config status` command to the room. diff --git a/docs/configuration/handlers.md b/docs/configuration/handlers.md new file mode 100644 index 0000000..cddc6fa --- /dev/null +++ b/docs/configuration/handlers.md @@ -0,0 +1,32 @@ +## 🤝 Handlers + +### Introduction + +You can use **different models in different rooms** (e.g. [OpenAI](../providers.md#openai) GPT-4o alongside [Llama](https://en.wikipedia.org/wiki/Llama_(language_model)) running on [Groq](../providers.md#groq), etc.) + +You can also use **different models within the same room** (e.g. [đŸ’Ŧ text-generation](#-text-generation) handled by one [agent](./agents.md), [đŸĻģ speech-to-text](#-speech-to-text) handled by another, [đŸ—Ŗī¸ text-to-speech](#ī¸-text-to-speech) by a 3rd, etc.) + +The bot supports the following use-purposes: + +- [đŸ’Ŧ text-generation](../features.md#-text-generation): communicating with you via text +- [đŸĻģ speech-to-text](../features.md#-speech-to-text): turning your voice messages into text +- [đŸ—Ŗī¸ text-to-speech](../features.md#ī¸-text-to-speech): turning bot or users text messages into voice messages +- [đŸ–Œī¸ image-generation](../features.md#-image-generation): generating images based on instructions + +In a given room, each different purpose can be served by a different [provider](../providers.md) and model. This combination of provider and model configuration is called an [🤖 agent](../agents.md). Each purpose can be served by a different **handler** agent. + +See a [đŸ–ŧī¸ Screenshot of an example room configuration](./screenshots/config-status-handlers.webp). + + +### Configuring + +Handlers can be configured [dynamically](./README.md#dynamic-configuration): + +- either per-room (e.g. `!bai config room set-handler text-generation room-local/openai-gpt-4o`) +- or globally (e.g. `!bai config global set-handler text-generation global/openai-gpt-4o`) + +The per-room configuration takes priority over the global configuration. + +There's also a `catch-all` purpose that can be used as a fallback handler for messages that don't match any other handler. + +💡 It's a good idea to globally-configure a powerful agent as a catch-all handler, so that the bot can always handle messages of any kind. You can then override individual handlers per room or globally. diff --git a/docs/configuration/image-generation.md b/docs/configuration/image-generation.md new file mode 100644 index 0000000..a3237ab --- /dev/null +++ b/docs/configuration/image-generation.md @@ -0,0 +1,9 @@ + +## đŸ–Œī¸ Image Generation + +The Image Generation feature is not configurable at this moment. + +You may also wish to see: + +- [🌟 Features / đŸ–Œī¸ Image Generation](../features.md#-image-generation) for a higher-level introduction to the Image Generation features +- [📖 Usage / đŸ–Œī¸ Image Generation](../usage.md#-image-generation) section for more details on how to use the bot for Image Generation in a room diff --git a/docs/configuration/speech-to-text.md b/docs/configuration/speech-to-text.md new file mode 100644 index 0000000..18a1d36 --- /dev/null +++ b/docs/configuration/speech-to-text.md @@ -0,0 +1,39 @@ +## đŸĻģ Speech-to-Text + +Below are some configuration settings related to Speech-to-Text. + +You may also wish to see: + +- [🌟 Features / đŸĻģ Speech-to-Text](../features.md#-speech-to-text) for a higher-level introduction to the Speech-to-Text features +- [📖 Usage / đŸĻģ Speech-to-Text](../usage.md#-speech-to-text) section for more details on how to use the bot for Speech-to-Text in a room + + +### đŸĒ„ Flow Type + +Controls how voice messages sent by [đŸ‘Ĩ user](../access.md#-users) are handled. + +The following configuration values are recognized: + +- (default) `transcribe_and_generate_text`: the bot will turn [đŸ‘Ĩ user](../access.md#-users) voice messages into text and then generate text messages via [đŸ’Ŧ Text Generation](../features.md#-text-generation). This is the default setting to allow for [Seamless voice interaction](../features.md#seamless-voice-interaction). + +- `ignore`: the bot will ignore all audio messages + +- `only_transcribe`: the bot will turn [đŸ‘Ĩ user](../access.md#-users) voice messages into text, but will **not** proceed with [đŸ’Ŧ Text Generation](../features.md#-text-generation). Switching to this may be useful in some cases, as in [Transcribe-only mode](../features.md#transcribe-only-mode). + +Example: `!bai config room speech-to-text set-flow-type ignore` (this can also be set globally, see [đŸ› ī¸ Room Settings](./README.md#room-settings)) + + +### 🔤 Language + +Lets you specify the language of the input voice messages, to avoid using auto-detection. +Supplying the input language using a 2-letter code (e.g. `ja`) as per [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) may improve accuracy & latency. + +![Speech-to-Text Language setting usage example](../screenshots/speech-to-text-language.webp) + +In the above example screenshot, even without a language specified, the voice was understood correctly as [Bulgarian](https://en.wikipedia.org/wiki/Bulgarian_language), but was produced in latin, not [Cyrillic](https://en.wikipedia.org/wiki/Cyrillic_script), which is wrong. + +If different [đŸ‘Ĩ user](../access.md#-users) are using different languages, do not specify a language. + +💡 Certain models (like [OpenAI](../providers.md#openai)'s Whisper) may perform auto-translation if you specify a language, but you're speaking another one. You may abuse this side-effect for performing voice-to-text translation, but be aware that not all models behave this way. + +Example (setting it to Japanese): `!bai config room speech-to-text set-language ja` (this can also be set globally, see [đŸ› ī¸ Room Settings](./README.md#room-settings)) diff --git a/docs/configuration/text-generation.md b/docs/configuration/text-generation.md new file mode 100644 index 0000000..3ec1566 --- /dev/null +++ b/docs/configuration/text-generation.md @@ -0,0 +1,75 @@ + +## đŸ’Ŧ Text Generation + +Below are some [đŸ› ī¸ dynamic configuration settings](./README.md#dynamic-configuration) related to Text Generation. + +You may also wish to see: + +- [🌟 Features / đŸ’Ŧ Text Generation](../features.md#-text-generation) for a higher-level introduction to the Text Generation features +- [📖 Usage / đŸ’Ŧ Text Generation](../usage.md#-text-generation) section for more details on how to use the bot for Text Generation in a room + + +### 🗟 Prefix Requirement Type + +In Direct Message rooms with the bot (1:1 rooms), it most usually makes sense for the bot to respond to **all** of your messages, as shown on this [đŸ–ŧī¸ screenshot](../screenshots/text-generation.webp). + +In group rooms (with multiple users), it may be more appropriate for the bot to only respond to messages that are **prefixed** with the command prefix (e.g. `!bai`), so that other chat exchange in the room will not trigger it. Such a setup is shown on this [đŸ–ŧī¸ screenshot](../screenshots/text-generation-prefix-requirement.webp). + +There are exceptions to these rules, and you can configure the bot to respond only to prefixed messages in a 1:1 room, or to respond to all messages even in a multi-user group room. + +To support such use-cases, the bot has a `text-generation prefix-requirement-type` setting, which can be set to: + +- (default) `no`: indicates that the bot would not require a prefix and would respond to all messages + +- `command_prefix`: indicates that the bot would require that messages be prefixed with the command prefix (e.g. `!bai`) and would ignore all messages that are not prefixed + +By default, the bot is **auto-configured (upon joining a new room)** to use the `no` setting in rooms that only include 2 users (you and the bot), and `command_prefix` in rooms with more than 2 users. To prevent surprises, the bot will **not** adjust this setting subsequently. You can manually adjust it via `!bai config room set-prefix-requirement-type VALUE`. + +Example: `!bai config room text-generation set-prefix-requirement-type command_prefix` (this can also be set globally, see [đŸ› ī¸ Room Settings](./README.md#room-settings)) + +Regardless of this configuration, **the bot will also respond to messages which directly [mention](https://spec.matrix.org/latest/client-server-api/#user-and-room-mentions) the bot** (e.g. `@baibot`), even if they are not prefixed. An example of this can be seen on this [đŸ–ŧī¸ screenshot](../screenshots/text-generation-prefix-requirement.webp). + + +### đŸĒ„ Auto Usage + +Text generation is enabled by default (the `text-generation auto-usage` setting being set to `always`), but can be set to: + +- (default) `always`: generate text for all messages (also see [🗟 Prefix Requirement Type](#-prefix-requirement-type)) + +- `never`: never generate text for messages + +- `only_for_voice`: only generate text when the original user message was a voice message, later transcribed via [đŸĻģ Speech-to-Text](../features.md#-speech-to-text) + +- `only_for_text`: only generate text when original user message was a text message + +Example: `!bai config room text-generation set-auto-usage only_for_voice` (this can also be set globally, see [đŸ› ī¸ Room Settings](./README.md#room-settings)) + + +### â™ģī¸ Context Management + +The bot also supports â™ģī¸ **context management**, which automatically adjusts the message history length, etc. + +This feature relies on [tokenization](https://en.wikipedia.org/wiki/Large_language_model#Tokenization) performed by the [tiktoken-rs](https://github.com/zurawiki/tiktoken-rs) library which is [poorly well-maintained](https://github.com/zurawiki/tiktoken-rs/issues/50) and only works well for [OpenAI](../providers.md#openai) models. + +This setting is **disabled by default**, but can be enabled via `!bai config room context-management-enabled true` (this can also be set globally, see [đŸ› ī¸ Room Settings](./README.md#room-settings)). + + +### âŒ¨ī¸ Prompt Override + +You can override the [system prompt](https://huggingface.co/docs/transformers/en/tasks/prompting) configured at the [🤖 agent](../agents.md) level. + +Example (multi-line is supported): + +``` +!bai config room text-generation set-prompt-override You're a UI/UX expert. Everything you say needs to consider design and usability. + +Where appropriate, you'll mention best practices and common pitfalls. +``` + +A prompt override can also be set globally, see [đŸ› ī¸ Room Settings](./README.md#room-settings). + +### đŸŒĄī¸ Temperature Override + +You can override the [temperature](https://blogs.novita.ai/what-are-large-language-model-settings-temperature-top-p-and-max-tokens/#what-is-llm-temperature) (randomness / creativity) parameter configured at the [🤖 agent](../agents.md) level. + +Example: `!bai config room text-generation set-temperature-override 3.5` (this can also be set globally, see [đŸ› ī¸ Room Settings](./README.md#room-settings)) diff --git a/docs/configuration/text-to-speech.md b/docs/configuration/text-to-speech.md new file mode 100644 index 0000000..b794d5a --- /dev/null +++ b/docs/configuration/text-to-speech.md @@ -0,0 +1,63 @@ + +## đŸ—Ŗī¸ Text-to-Speech + +Below are some configuration settings related to Text-to-Speech. + +You may also wish to see: + +- [🌟 Features / đŸ—Ŗī¸ Text-to-Speech](../features.md#-text-generation) for a higher-level introduction to the Text-to-Speech features +- [📖 Usage / đŸ—Ŗī¸ Text-to-Speech](../usage.md#-text-generation) section for more details on how to use the bot for Text-to-Speech in a room + + +### đŸĒ„ Bot Messages Flow Type + +Controls how automatic text-to-speech functions for **messages sent by the bot**. + +The following configuration values are recognized: + +- (default) `on_demand_for_voice`: the bot will turn its own text messages into audio (voice) messages only after an allowed [đŸ‘Ĩ user](../access.md#-users) **reacts** to a bot's message with đŸ—Ŗī¸. To make it easier for users to react without having to hunt for this emoji, the bot will automatically add a đŸ—Ŗī¸ reaction to its own messages which are in response to a user audio (voice) message. + +- `on_demand_always`: the bot will turn its own text messages into audio (voice) messages only after an allowed [đŸ‘Ĩ user](../access.md#-users) **reacts** to a bot's message with đŸ—Ŗī¸. To make it easier for users to react without having to hunt for this emoji, the bot will automatically add a đŸ—Ŗī¸ reaction to **all of its own messages**. + +- `only_for_voice`: the bot will turn its own text messages into audio (voice) messages only if the original user message was a voice message. This is to allow for [Seamless voice interaction](../features.md#seamless-voice-interaction), where you can speak to the bot and then hear its responses + +- `never`: the bot will never turn its own text messags into audio (voice) messages + +- `always`: the bot will turn all its text messages into audio (voice) messages. This also allows for [Seamless voice interaction](../features.md#seamless-voice-interaction). + +Example: `!bai config room text-to-speech set-bot-msgs-flow-type never` (this can also be set globally, see [đŸ› ī¸ Room Settings](./README.md#room-settings)) + + +### đŸĒ„ User Messages Flow Type + +Controls how automatic text-to-speech functions for **messages sent by [đŸ‘Ĩ users](../access.md#-users)**. + +**Only works when automatic text-generation is disabled** (see [đŸ’Ŧ Text Generation / đŸĒ„ Auto Usage](./text-generation.md#-auto-usage)). + +The following configuration values are recognized: + +- (default) `never`: the bot will never turn [đŸ‘Ĩ user](../access.md#-users) text messages into audio (voice) messages + +- `on_demand`: the bot will turn [đŸ‘Ĩ user](../access.md#-users) text messages into audio (voice) messages if the text message receives a đŸ—Ŗī¸ reaction + +- `always`: the bot will turn all [đŸ‘Ĩ user](../access.md#-users) text messages into audio (voice) messages. This is to allow for [Text-to-Speech-only mode](../features.md/#text-to-speech-only-mode). + +Example: `!bai config room text-to-speech set-user-msgs-flow-type always` (this can also be set globally, see [đŸ› ī¸ Room Settings](./README.md#room-settings)) + + +### 🗲 Speed override + +The speed override setting lets you speed up/down speech relative to the default speed configured at the [🤖 agent](../agents.md) level (usually `1.0`). + +Values typically range from `0.25` to `4.0`, but may vary depending on the selected model. + +Example: `!bai config room text-to-speech set-speed-override 1.5` (this can also be set globally, see [đŸ› ī¸ Room Settings](./README.md#room-settings)) + + +### đŸ‘Ģ Voice override + +The voice override setting lets you change the voice being used by the text-to-speech model configured at the [🤖 agent](../agents.md) level (usually `onyx` when using [OpenAI](../providers.md#openai)). + +Possible values (e.g. `onyx`) depend on the model you're using. For example, for [OpenAI](../providers.md#openai)'s Whisper model, [these voices](https://platform.openai.com/docs/guides/text-to-speech/voice-options) are available. + +Example: `!bai config room text-to-speech set-voice-override nova` (this can also be set globally, see [đŸ› ī¸ Room Settings](./README.md#room-settings)) diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 0000000..4a9fe50 --- /dev/null +++ b/docs/development.md @@ -0,0 +1,134 @@ +## 🧑‍đŸ’ģ Development + +This documentation page contains information about **running the bot locally for development purposes**. +This can also **helpful for quickly testing the bot in a containerized environment, with all dependency services included**. + +For running the bot against your Matrix server, see the [🚀 Installation](./installation.md) documentation. + +This bot is built in [đŸĻ€ Rust](https://www.rust-lang.org/) and uses the [mxlink](https://github.com/etkecc/rust-mxlink) library (built on top of [matrix-rust-sdk](https://github.com/matrix-org/matrix-rust-sdk)). + +For local development, we run all dependency services in [🐋 Docker](https://www.docker.com/) containers via [docker-compose](https://docs.docker.com/compose/). + + +### Prerequisites + +- [🐋 Docker](https://www.docker.com/) and [docker-compose](https://docs.docker.com/compose/) +- [Just](https://github.com/casey/just) +- (Optional) [đŸĻ€ Rust](https://www.rust-lang.org/) - for compiling and running outside of a container +- (Optional) an API key for some Large Language Model [â˜ī¸ provider](./providers.md) (e.g. [OpenAI](./providers.md#openai)), though we recommend using [LocalAI](#localai) or [Ollama](#ollama) for local development + + +### Getting started guide + +Developing [locally](#running-locally) is possible, but requires a [Rust](https://www.rust-lang.org/) toolchain. +If this dependency is problematic for you, consider [🐋 running in a container](#running-in-a-container). + +In any case, you will need [🐋 Docker](https://www.docker.com/) as [dependency services](../etc/services/) run there. + + +#### Running locally + +1. Start the core dependency services (Postgres, Synapse, Element Web): `just services-start` +2. (Only the first time around) Prepare initial app configuration in `var/app/local/config.yml`: `just app-local-prepare` +3. (Only the first time around) [Prepare your configuration file](#prepare-your-configuration-file) +4. (Only the first time around) Prepare initial default Matrix user accounts (`admin` and `baibot`): `just users-prepare` +5. (Optional) Start additional services depending on which [agent provider you've chosen](#choosing-an-agent-provider): + - for [LocalAI](#localai): + - Start services: `just localai-start` + - Wait a while for LocalAI to start up. It has a lot of models to download. Monitor progress using `just localai-tail-logs` + - When ready, you'll be able to reach LocalAI's web interface at http://localai.127.0.0.1.nip.io:42027/ (not that you really need it) + - for [Ollama](#ollama): + - Start services: `just ollama-start` + - (Only the first time around) Pull the model configured in `agents.static_definitions` in the configuration file: `just ollama-pull-model gemma2:2b` +6. Start the bot: `just run-locally` +7. Go to http://element.127.0.0.1.nip.io:42025/ and login with `admin` / `admin` +8. Create a new room and invite `@baibot:synapse.127.0.0.1.nip.io` +9. When done, stop the bot (`Ctrl` + `C`) +10. Stop the core dependency services: `just services-stop` +11. (Optional) Stop additional services: + - for [LocalAI](#localai): `just localai-stop` + - for [Ollama](#ollama): `just ollama-stop` + + +#### Running in a container + +You can avoid having a [Rust](https://www.rust-lang.org/) toolchain installed locally and build/run this in a container. + +1. Start the core dependency services (Postgres, Synapse, Element Web): `just services-start` +2. (Only the first time around) Prepare initial app configuration in `var/app/container/config.yml`: `just app-container-prepare` +3. (Only the first time around) [Prepare your configuration file](#prepare-your-configuration-file) +4. (Only the first time around) Prepare initial default Matrix user accounts (`admin` and `baibot`): `just users-prepare` +5. (Optional) Start additional services depending on which [agent provider you've chosen](#choosing-an-agent-provider): + - for [LocalAI](#localai): + - Start services: `just localai-start` + - Wait a while for LocalAI to start up. It has a lot of models to download. Monitor progress using `just localai-tail-logs` + - When ready, you'll be able to reach LocalAI's web interface at http://localai.127.0.0.1.nip.io:42027/ (not that you really need it) + - for [Ollama](#ollama): + - Start services: `just ollama-start` + - (Only the first time around) Pull the model configured in `agents.static_definitions` in the configuration file: `just ollama-pull-model gemma2:2b` +6. Start the bot: `just run-in-container` +7. Go to http://element.127.0.0.1.nip.io:42025/ and login with `admin` / `admin` +8. Create a new room and invite `@baibot:synapse.127.0.0.1.nip.io` +9. When done, stop the bot (`Ctrl` + `C`) +10. Stop the dependency services: `just services-stop` +11. (Optional) Stop additional services: + - for [LocalAI](#localai): `just localai-stop` + - for [Ollama](#ollama): `just ollama-stop` + + +#### Prepare your configuration file + +This is about editing your configuration. The initial configuration is created based on `etc/app/config.yml.dist` when you run `just app-local-prepare` or `just app-container-prepare`. + +Depending on whether you run locally or in a container, your configuration lives in a different file (`var/app/local/config.yml` and `var/app/container/config.yml`, respectively). + +Before starting the bot, you may wish to adjust this configuration. + + +##### Choosing an agent provider + +You can create [🤖 agents](./agents.md) either [statically](./configuration/README.md#static-configuration) or [dynamically](./configuration/README.md#dynamic-configuration) using any of the supported [â˜ī¸ providers](./providers.md). + +For getting started most quickly (and locally), we recommend using [LocalAI](#localai) or [Ollama](#ollama). These services are already configured to run as [local services via docker-compose](../etc/services/). + +**Ollama is most lightweight** (~2GB for the container image + ~1.6GB for the model), but supports only [đŸ’Ŧ text-generation](./features.md#-text-generation). + +**LocalAI requires 4x more disk space** (~6GB for the container image + ~12GB for the models), but supports [đŸ’Ŧ text-generation](./features.md#-text-generation), [đŸ—Ŗī¸ text-to-speech](./features.md#ī¸-text-to-speech), [đŸĻģ speech-to-text](./features.md#-speech-to-text) and [đŸ–ŧī¸ image-generation](./features.md#ī¸-image-generation). + +**OpenAI supports all of these capabilities** as well and does not require powerful hardware or lots of disk space. However, it requires signup and an API key. + +For local testing, **we recommend LocalAI**, because it runs fully locally and supports more features than Ollama. + +###### LocalAI + +[LocalAI](./providers.md#localai) supports all [🌟 features](./features.md) of the bot. + +If you decided to go with [LocalAI](./providers.md#localai): + +- enable the `localai` entry in the `agents.static_definitions` list in the configuration file +- adjust the `initial_global_config.handler.catch_all` setting in the configuration file (`null` -> `static/localai`) + +By default, we configure LocalAI to use the [All-In-One images](https://localai.io/basics/container/#all-in-one-images) running on the CPU. +Performance is not great, but it should work reasonably well on good hardware. + +If you'd like to use GPU acceleration, you may adjust the `SERVICE_LOCALAI_IMAGE_NAME` variable in [var/services/env](../var/services/env) (this file is automatically prepared for you based on [etc/services/env.dist](../etc/services/env.dist)) to use [other available LocalAI All-In-One images](https://localai.io/basics/container/#available-aio-images). + +###### Ollama + +[Ollama](./providers.md#ollama) only supports [đŸ’Ŧ text-generation](./features.md#-text-generation). + +If you decided to go with [Ollama](./providers.md#ollama): + +- enable the `ollama` entry in the `agents.static_definitions` list in the configuration file +- adjust the `initial_global_config.handler.catch_all` setting in the configuration file (`null` -> `static/ollama`) + +The [gemma2:2b](https://ollama.com/library/gemma2:2b) model was chosen as a default, because it's smallest/lightest and should run well under [Ollama](./providers.md#ollama) on most machines. + +###### OpenAI + +[OpenAI](./providers.md#openai) supports all [🌟 features](./features.md) of the bot. + +If you decided to go with [OpenAI](./providers.md#openai): + +- enable the `openai` entry in the `agents.static_definitions` list in the configuration file +- adjust the `initial_global_config.handler.catch_all` setting in the configuration file (`null` -> `static/openai`) diff --git a/docs/features.md b/docs/features.md new file mode 100644 index 0000000..f39ca39 --- /dev/null +++ b/docs/features.md @@ -0,0 +1,150 @@ +## 🌟 Features + +### 🎨 Mixing & matching models + +You can use **different models in different rooms** (e.g. [OpenAI](./providers.md#openai) GPT-4o alongside [Llama](https://en.wikipedia.org/wiki/Llama_(language_model)) running on [Groq](./providers.md#groq), etc.) + +You can also use **different models within the same room** (e.g. [đŸ’Ŧ text-generation](#-text-generation) handled by one [🤖 agent](./agents.md), [đŸĻģ speech-to-text](#-speech-to-text) handled by another, [đŸ—Ŗī¸ text-to-speech](#ī¸-text-to-speech) by a 3rd, etc.) + +The bot supports the following use-purposes: + +- [đŸ’Ŧ text-generation](#-text-generation): communicating with you via text +- [đŸĻģ speech-to-text](#-speech-to-text): turning your voice messages into text +- [đŸ—Ŗī¸ text-to-speech](#ī¸-text-to-speech): turning bot or users text messages into voice messages +- [đŸ–Œī¸ image-generation](#-image-generation): generating images based on instructions + +In a given room, each different purpose can be served by a different [â˜ī¸ provider](./providers.md) and model. This combination of provider and model configuration is called an [🤖 agent](./agents.md). Each purpose can be served by a different **handler** agent. + +See a [đŸ–ŧī¸ Screenshot of an example room configuration](./screenshots/config-status-handlers.webp). + +For more information about configuring handlers, see the [🤝 Handlers / Configuring](./configuration/handlers.md#configuring) documentation section. + + +### đŸ’Ŧ Text Generation + +Text Generation is the bot's ability to **respond to users' text messages with text**. + +![Screenshot of Text Generation - a user sends a message and the bot replies in a new conversation thread](./screenshots/text-generation.webp) + +In multi-user (group) rooms, to avoid disturbing the normal conversation between people, the bot is auto-configured to only respond to messages starting with the command prefix (`!bai`) or direct mentions via the [đŸ’Ŧ Text Generation / 🗟 Prefix Requirement Type](./configuration/text-generation.md#-prefix-requirement-type) setting. + +A few other features (like [đŸ—Ŗī¸ Text-to-Speech](#ī¸-text-to-speech) and [đŸĻģ Speech-to-Text](#-speech-to-text)) combine well with Text Generation, so you **don't necessarily need to communicate with the bot via text** (with [Seamless voice interaction](#seamless-voice-interaction), you can communicate only with voice). + +You may also wish to see: + +- [đŸ› ī¸ Configuration / đŸ’Ŧ Text Generation](./configuration/README.md#-text-generation) for configuration options related to Text Generation +- [📖 Usage / đŸ’Ŧ Text Generation](./usage.md#-text-generation) section for more details on how to use the bot for Text Generation in a room + + +### đŸ—Ŗī¸ Text-to-Speech + +Text-to-Speech is the bot's ability to **turn text messages into voice messages**. + +It can be performed **on the bot's own text messages** (responses to yours due to [đŸ’Ŧ Text Generation](#-text-generation)) and/or **on your own text messages**. + +Text-to-Speech can be enabled to be done automatically or on-demand (only after reacting to a message with đŸ—Ŗī¸), and is configurable for different message types ([đŸĒ„ Bot Messages Flow Type](./configuration/README.md#-bot-messages-flow-type) vs [đŸĒ„ User Messages Flow Type](./configuration/README.md#-user-messages-flow-type)). + +By default, the bot **doesn't** perform text-to-speech. It can be configured for [Seamless voice interaction](#seamless-voice-interaction), where you can **speak to the bot** (instead of typing) and then **hear its responses**. + +Another use-case is to have the bot operate in [Text-to-Speech-only mode](#text-to-speech-only-mode). + +- [đŸ› ī¸ Configuration / đŸ—Ŗī¸ Text-to-Speech](./configuration/README.md#-text-to-speech) for configuration options related to Text-to-Speech +- [📖 Usage / đŸ—Ŗī¸ Text-to-Speech](./usage.md#-text-to-speech) section for more details on how to use the bot for Text-to-Speech in a room + + +#### Text-to-Speech-only mode + +You may wish to have the bot **automatically turn your text messages into voice messages**, but **without** doing [đŸ’Ŧ Text Generation](#-text-generation). + +![Screenshot of Text-to-Speech-only mode - text messages are turned to audio and posted as a reply, without Text Generation happening](./screenshots/text-to-speech-only-mode.webp) + +This could be useful in a room with others, where you'd like to post text messages and have people in the room consume them more easily (by listening to audio). + +To allow for this use-case, you can: + +- disable [đŸ’Ŧ Text Generation](#-text-generation) (via [đŸ’Ŧ Text Generation / đŸĒ„ Auto Usage](./configuration/text-generation.md#-auto-usage) setting): `!bai config room text-generation set-auto-usage never` + +- enable [đŸ—Ŗī¸ Text-to-Speech](#ī¸-text-to-speech) for user messages (via [đŸ—Ŗī¸ Text-to-Speech / đŸĒ„ User Messages Flow Type](./configuration/text-to-speech.md#-user-messages-flow-type)): `!bai config room text-to-speech set-user-msgs-flow-type always` (or `on_demand`) + + +### đŸĻģ Speech-to-Text + +Speech-to-Text is the bot's ability to **turn voice messages into text**. + +![Default flow for Speech-to-Text and Text-Generation - your voice messages are transcribed to text and then answered via Text Generation](./screenshots/speech-to-text-default-flow.webp) + +The default flow is shown in the screenshot above: your voice messages are transcribed to text and [đŸ’Ŧ Text Generation](#-text-generation) is performed. By default, the bot offers [đŸ—Ŗī¸ Text-to-Speech](#ī¸-text-to-speech) for its answers via a đŸ—Ŗī¸ emoji. You can click it to trigger text-to-speech on-demand. + +You may also configure the bot for [Seamless voice interaction](#seamless-voice-interaction) or [Transcribe-only mode](#transcribe-only-mode), etc. + + +#### Seamless voice interaction + +The bot can perform seamless voice interaction (đŸ—Ŗī¸-to-đŸ—Ŗī¸), allowing you to **speak to the bot** (instead of typing) and then **hear its responses**. + +![Screenshot of the Seamless voice interaction mode - your voice messages are transcribed to text, then answered via Text Generation, and finally the answer is turned into a voice message](./screenshots/text-to-speech-seamless-voice-interaction.webp) + +The flow is like this: + +1. 👤 You sending a voice message +2. 🤖 The bot: + - (default) first turning your **voice message into text** ([đŸĻģ Speech-to-Text](#-speech-to-text)) and posting it as a reply. This lets you you see what the bot heard. + - (default) then **answering in text** ([đŸ’Ŧ Text Generation](#-text-generation)). This lets you read/skim text, if you so prefer. + - (can be enabled) finally **turning the answer's text into a voice message** ([đŸ—Ŗī¸ Text-to-Speech](#ī¸-text-to-speech)) +3. 👤 You continuing the conversation via text or voice messages + +âš ī¸ Certain clients (like [Element](https://element.io/)) only support sending voice messages as top-level room messages, not as thread replies. Until this client limitation is fixed, Element users can only send the 1st message as a voice message - subsequent replies in the same conversation thread will need to be sent as text messages. + +By default, the last part of the aforementioned flow is **not enabled**, because we assume **a saner default is to reply with text and merely *offer* text-to-speech to those who want it**. Offering is done by the bot reacting to its own message with đŸ—Ŗī¸, and letting you click this emoji to trigger text-to-speech on-demand. + +To enable automatic text-to-speech for the bot's messages, set the [đŸ—Ŗī¸ Text-to-Speech / đŸĒ„ Bot Messages Flow Type](./configuration/text-to-speech.md#-bot-messages-flow-type) setting to `only_for_voice` or `always` (e.g. `!bai config room text-to-speech set-bot-msgs-flow-type only_for_voice`). + + +#### Transcribe-only mode + +If you'd like to have the bot **only turn voice messages into text** (without generating text messages or voice messages), you can configure the bot for that. + +![Screenshot of Transcribe-only-mode for Speech-to-Text - your voice messages are transcribed to text, and the bot does not generate text messages or voice messages](./screenshots/speech-to-text-transcribe-only-mode.webp) + +To operate in this mode, you can: + +- disable [đŸ’Ŧ Text Generation](#-text-generation) (via [đŸ’Ŧ Text Generation / đŸĒ„ Auto Usage](./configuration/text-generation.md#-auto-usage) setting): `!bai config room text-generation set-auto-usage never` + +- adjust the [đŸĻģ Speech-to-Text / đŸĒ„ Flow Type](./configuration/speech-to-text.md#-flow-type) setting to make the bot only transcribe (without doing [đŸ’Ŧ Text Generation](#-text-generation)): `!bai config room speech-to-text set-flow-type only_transcribe` + + +### đŸ–Œī¸ Image Generation + +Image generation is the bot's ability to **generate images** based on text prompts. + +See a [đŸ–ŧī¸ Screenshot of the Image Generation feature](./screenshots/image-generation.webp). + +You may also wish to see: + +- [đŸ› ī¸ Configuration / đŸ–Œī¸ Image Generation](./configuration/README.md#-image-generation) for configuration options related to Image Generation +- [📖 Usage / đŸ–Œī¸ Image Generation](./usage.md#-image-generation) section for more details on how to use the bot for Image Generation in a room +- [đŸĢĩ Sticker Generation](#-sticker-generation) - a special case of Image Generation + + +### đŸĢĩ Sticker Generation + +Sticker generation is the bot's ability to **generate sticker** images based on text prompts. It's a special case of [đŸ–Œī¸ Image Generation](#ī¸-image-generation). + +See a [đŸ–ŧī¸ Screenshot of the Sticker Generation feature](./screenshots/sticker-generation.webp). + +See [📖 Usage / đŸ–Œī¸ Image Generation / Generating Stickers](./usage.md#generating-stickers) for details. + + +### 🔒 Encryption + +#### Message exchange + +The bot works in both **unencrypted and encrypted Matrix rooms**. + +If configured, the bot can make use of **Matrix's Secure Storage (Recovery) feature**, so that it can restore its encryption keys even its local database gets lost. + +#### Configuration + +The bot also stores its [đŸ› ī¸ configuration](./configuration/README.md) (both 📍 per-room and 🌐globally) in Matrix Account Data, which is **generally stored as plain-text in the server**. + +To overcome this Matrix limitation, the bot can **optionally encrypt the configuration data** before storing it in Account Data. This allows for the bot to be used securely even against untrusted servers, without leaking sensitive configuration data to them. diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 0000000..3ec4070 --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,93 @@ +## 🚀 Installation + +â˜ī¸ The easiest way to use the bot is to **get a managed Matrix server from [etke.cc](https://etke.cc/)** and order baibot via the [order form](https://etke.cc/order/). Existing customers can request the inclusion of this additional service by [contacting support](https://etke.cc/contacts/). + +đŸ’ģ If you're managing your Matrix server with the help of the [matrix-docker-ansible-deploy](https://github.com/spantaleev/matrix-docker-ansible-deploy) Ansible playbook, you can easily **install the bot via the Ansible playbook**. See the playbook's [Setting up baibot](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/configuring-playbook-bot-baibot.md) documentation page. + +🐋 In other cases, we **recommend using our [prebuilt container images](https://github.com/etkecc/baibot/pkgs/container/baibot) and [running in a container](#-running-in-a-container)**. You can also [build a container image](#building-a-container-image) yourself. + +🔨 If containers are not your thing, you can [build a binary](#-building-a-binary) yourself and [run it](#-running-a-binary). + +🗲 For a quick experiment, you can refer to the [🧑‍đŸ’ģ development documentation](./development.md) which contains information on how to build and run the bot (and its various dependency services) locally. + + +### 🐋 Building a container image + +We provide prebuilt container images for the `amd64` and `arm64` architectures, so **you don't necessarily need to build images yourself** and can jump to [Running in a container](#-running-in-a-container). + +If you nevertheless wish to build a container image yourself, you can do so by running `just build-container-image`. +This will build and tag your container image as `localhost/baibot:latest`. + + +### 🐋 Running in a container + +We recommend using a **tagged-release** (e.g. `v1.0.0`, not `latest`) of our [prebuilt container images](https://github.com/etkecc/baibot/pkgs/container/baibot), but you can also [build a container image](#-building-a-container-image) yourself. + +You should: + +- [đŸ› ī¸ prepare a configuration file](#-preparing-a-configuration-file) (e.g. `cp etc/app/config.yml.dist /path/to/config.yml` & edit it) +- prepare a data directory (`mkdir /path/to/data`) + +The example below uses [🐋 Docker](https://www.docker.com/) to run the container, but other container runtimes like [Podman](https://podman.io/) should work as well. + +```sh +# Adjust the version tag to point to the latest available tagged version. +# If building your own container image name, adjust to something like `localhost/baibot:latest`. +CONTAINER_IMAGE_NAME=ghcr.io/etkecc/baibot:v1.0.0 + +/usr/bin/env docker run \ + -it \ + --rm \ + --name=baibot \ + --user=$(id -u):$(id -g) \ + --cap-drop=ALL \ + --read-only \ + --env BAIBOT_PERSISTENCE_DATA_DIR_PATH=/data \ + --mount type=bind,src=/path/to/config.yml,dst=/app/config.yml,ro \ + --mount type=bind,src=/path/to/data,dst=/data \ + $CONTAINER_IMAGE_NAME +``` + +💡 If you've defined the `persistence.data_dir_path` setting in the `config.yml` file, you can skip the `BAIBOT_PERSISTENCE_DATA_DIR_PATH` environment variable. + + +### 🔨 Building a binary + +To build a binary, you need a [đŸĻ€ Rust](https://www.rust-lang.org/) toolchain. + +Consult the [Dockerfile](../Dockerfile) file to learn what some of the build dependencies are (e.g. `libssl-dev`, `libsqlite3-dev`, etc., on Debian-based distros). + +You can build a binary from the current project's source code: + +- in `debug` mode via: `just build-debug`, yielding a binary in `target/debug/baibot` +- (recommended) in `release` mode via: `just build-release`, yielding a binary in `target/release/baibot` + +💡 Unless you're [🧑‍đŸ’ģ developing](./development.md), you probably wish to build in release mode, as that provides a much smaller and more optimized binary. + +đŸ“Ļ You can also install from the [baibot](https://crates.io/crates/baibot) crate published to [crates.io](https://crates.io) with the help of the [cargo](https://doc.rust-lang.org/cargo/) package manager by running: `cargo install baibot`. + + +### đŸ–Ĩī¸ Running a binary + +Once you've [🔨 built a binary](#-building-a-binary) and [đŸ› ī¸ prepared a configuration file](#-preparing-a-configuration-file), you can run it. + +Consult the [Dockerfile](../Dockerfile) file to learn what some of the runtime dependencies are (e.g. `ca-certificates`, `sqlite3`, etc., on Debian-based distros). + +You can run the binary like this: + +```sh +BAIBOT_CONFIG_FILE_PATH=/path/to/config.yml \ +BAIBOT_PERSISTENCE_DATA_DIR_PATH=/path/to/data \ +./target/release/baibot +``` + +💡 If you've defined the `persistence.data_dir_path` setting in the `config.yml` file, you can skip the `BAIBOT_PERSISTENCE_DATA_DIR_PATH` environment variable. + +💡 If your `config.yml` file is in your working directory (which may be different than the directory the binary lives in), you can skip the `BAIBOT_CONFIG_FILE_PATH` environment variable. + + +### đŸ› ī¸ Preparing a configuration file + +For an introduction to the configuration file, see the [đŸ› ī¸ Configuration](./configuration/README.md) page. + +Generally, you need to copy the configuration file template ([etc/app/config.yml.dist](../etc/app/config.yml.dist)) and make modifications as needed. diff --git a/docs/providers.md b/docs/providers.md new file mode 100644 index 0000000..c93f58f --- /dev/null +++ b/docs/providers.md @@ -0,0 +1,170 @@ +## â˜ī¸ Providers + +[🤖 Agents](./agents.md) are powered by a provider. The provider could be a **local service** or a **cloud service**. + +The list of supported providers is below. + + +### Table of contents + +- [How to choose a provider](#how-to-choose-a-provider) +- [How to use a provider](#how-to-use-a-provider) +- [Supported providers](#supported-providers) + - [Anthropic](#anthropic) + - [Groq](#groq) + - [LocalAI](#localai) + - [Mistral](#mistral) + - [Ollama](#ollama) + - [OpenAI](#openai) + - [OpenAI Compatible](#openai-compatible) + - [OpenRouter](#openrouter) + - [Together AI](#together-ai) + + +### How to choose a provider + +If you're not sure which provider to start with, we **recommend [OpenAI](#openai)** as it's the most popular and has the **widest range of capabilities**: [đŸ’Ŧ text-generation](./features.md#-text-generation), [đŸ–Œī¸ image-generation](./features.md#ī¸-image-generation), [đŸĻģ speech-to-text](./features.md#-speech-to-text), [đŸ—Ŗī¸ text-to-speech](./features.md#ī¸-text-to-speech). + +You don't need to choose just one though. The bot supports [mixing & matching models](./features.md#-mixing--matching-models), so you can use multiple providers at the same time. + + +### How to use a provider + +- sign up for it +- obtain an API key +- [create a new agent](./agents.md#creating-agents) +- set it as a handler for some types of messages (see [Mixing & matching models](./features.md#-mixing--matching-models)) for a specific room or globally + + +### Supported providers + +### Anthropic + +[Anthropic](https://www.anthropic.com/) is an American AI company founded by former OpenAI engineers and providing powerful language models. + +- 🆔 Identifier: `anthropic` +- 🔗 Links: [🏠 Home page](https://www.anthropic.com/), [🌐 Wiki](https://en.wikipedia.org/wiki/Anthropic), [👤 Sign up](https://console.anthropic.com/), [📋 Models list](https://docs.anthropic.com/en/docs/about-claude/models) +- 🌟 Capabilities: [đŸ’Ŧ text-generation](./features.md#-text-generation) +- 🗲 Quick start: + - create a room-local agent: `!bai agent create-room-local anthropic my-anthropic-agent` + - create a global agent: `!bai agent create-global anthropic my-anthropic-agent` + +💡 When creating an agent, the bot will show you an up-to-date sample configuration for this provider which looks [like this](../sample-provider-configs/anthropic.yml). + + +### Groq + +[Groq](https://groq.com/) is an American company developing optimized Language Processing Units (LPU) and offering cloud service which runs various models (built by others) with very high performance. + +- 🆔 Identifier: `groq` +- 🔗 Links: [🏠 Home page](https://groq.com/), [🌐 Wiki](https://en.wikipedia.org/wiki/Groq), [👤 Sign up](https://console.groq.com/login), [📋 Models list](https://console.groq.com/docs/models) +- 🌟 Capabilities: [đŸ’Ŧ text-generation](./features.md#-text-generation), [đŸĻģ speech-to-text](./features.md#-speech-to-text) +- 🗲 Quick start: + - create a room-local agent: `!bai agent create-room-local groq my-groq-agent` + - create a global agent: `!bai agent create-global groq my-groq-agent` + +💡 When creating an agent, the bot will show you an up-to-date sample configuration for this provider which looks [like this](../sample-provider-configs/groq.yml). + + +### LocalAI + +[LocalAI](https://localai.io/) is the free, Open Source OpenAI alternative. LocalAI act as a drop-in replacement REST API that’s compatible with OpenAI API specifications for local inferencing. It allows you to run LLMs, generate images, audio (and not only) locally or on-prem with consumer grade hardware, supporting multiple model families and architectures. + +- 🆔 Identifier: `localai` +- 🔗 Links: [🏠 Home page](https://localai.io/), [📋 Models list](https://localai.io/gallery.html) +- 🌟 Capabilities: [đŸ’Ŧ text-generation](./features.md#-text-generation), [đŸ—Ŗī¸ text-to-speech](./features.md#ī¸-text-to-speech), [đŸĻģ speech-to-text](./features.md#-speech-to-text) +- 🗲 Quick start: + - create a room-local agent: `!bai agent create-room-local localai my-localai-agent` + - create a global agent: `!bai agent create-global localai my-localai-agent` + +💡 When creating an agent, the bot will show you an up-to-date sample configuration for this provider which looks [like this](../sample-provider-configs/localai.yml). + + +### Mistral + +[Mistral AI](https://mistral.ai/) is a research lab based in Europe (France) which produces their own language models. + +- 🆔 Identifier: `mistral` +- 🔗 Links: [🏠 Home page](https://mistral.ai/), [🌐 Wiki](https://en.wikipedia.org/wiki/Mistral_AI), [👤 Sign up](https://auth.mistral.ai/ui/registration), [📋 Models list](https://docs.mistral.ai/getting-started/models/) +- 🌟 Capabilities: [đŸ’Ŧ text-generation](./features.md#-text-generation) +- 🗲 Quick start: + - create a room-local agent: `!bai agent create-room-local mistral my-mistral-agent` + - create a global agent: `!bai agent create-global mistral my-mistral-agent` + +💡 When creating an agent, the bot will show you an up-to-date sample configuration for this provider which looks [like this](../sample-provider-configs/mistral.yml). + + +### Ollama + +[Ollama](https://ollama.com/) lets you run various models in a [self-hosted](https://github.com/ollama/ollama?tab=readme-ov-file#ollama) way. This is more advanced and requires powerful hardware for running some of the better models, but ensures your data stays with you. + +- 🆔 Identifier: `ollama` +- 🔗 Links: [🏠 Home page](https://ollama.com/), [📋 Models list](https://ollama.com/library) +- 🌟 Capabilities: [đŸ’Ŧ text-generation](./features.md#-text-generation) +- 🗲 Quick start: + - create a room-local agent: `!bai agent create-room-local ollama my-ollama-agent` + - create a global agent: `!bai agent create-global ollama my-ollama-agent` + +💡 When creating an agent, the bot will show you an up-to-date sample configuration for this provider which looks [like this](../sample-provider-configs/ollama.yml). + + +### OpenAI + +[OpenAI](https://openai.com/) is an American AI company providing powerful language models. + +Use this provider either with the OpenAI API or with other OpenAI-compatible API services which **fully** adhere to the [OpenAI API spec](https://github.com/openai/openai-openapi/). +For services which are not fully compatible with the OpenAI API, consider using the [OpenAI Compatible](#openai-compatible) provider. + +- 🆔 Identifier: `openai` +- 🔗 Links: [🏠 Home page](https://openai.com/), [🌐 Wiki](https://en.wikipedia.org/wiki/OpenAI), [👤 Sign up](https://platform.openai.com/signup), [📋 Models list](https://platform.openai.com/docs/models) +- 🌟 Capabilities: [đŸ–Œī¸ image-generation](./features.md#ī¸-image-generation), [đŸ’Ŧ text-generation](./features.md#-text-generation), [đŸ—Ŗī¸ text-to-speech](./features.md#ī¸-text-to-speech), [đŸĻģ speech-to-text](./features.md#-speech-to-text) +- 🗲 Quick start: + - create a room-local agent: `!bai agent create-room-local openai my-openai-agent` + - create a global agent: `!bai agent create-global openai my-openai-agent` + +💡 When creating an agent, the bot will show you an up-to-date sample configuration for this provider which looks [like this](../sample-provider-configs/openai.yml). + + +### OpenAI Compatible + +This provider allows you to use OpenAI-compatible API services like [OpenRouter](https://openrouter.ai/), [Together AI](https://www.together.ai/), etc. + +Some of these popular services already have **shortcut** providers (leading to this one behind the scenes) - this make it easier to get started. + +This provider is just as featureful as the [OpenAI](#openai) provider, but is more compatible with services which do not fully adhere to the [OpenAI API spec](https://github.com/openai/openai-openapi/). + +- 🆔 Identifier: `openai-compatible` +- 🌟 Capabilities: [đŸ–Œī¸ image-generation](./features.md#ī¸-image-generation), [đŸ’Ŧ text-generation](./features.md#-text-generation), [đŸ—Ŗī¸ text-to-speech](./features.md#ī¸-text-to-speech), [đŸĻģ speech-to-text](./features.md#-speech-to-text) +- 🗲 Quick start: + - create a room-local agent: `!bai agent create-room-local openai-compatible my-openai-compatible-agent` + - create a global agent: `!bai agent create-global openai-compatible my-openai-compatible-agent` + +💡 When creating an agent, the bot will show you an up-to-date sample configuration for this provider which looks [like this](../sample-provider-configs/openai-compatible.yml). + + +### OpenRouter + +[OpenRouter](https://openrouter.ai/) is a unified interface for LLMs. The platform scouts for the lowest prices and best latencies/throughputs across dozens of providers, and lets you choose how to [prioritize](https://openrouter.ai/docs/provider-routing) them. + +- 🆔 Identifier: `openrouter` +- 🔗 Links: [🏠 Home page](https://openrouter.ai/), [👤 Sign up](https://openrouter.ai/), [📋 Models list](https://openrouter.ai/models) +- 🌟 Capabilities: [đŸ’Ŧ text-generation](./features.md#-text-generation) +- 🗲 Quick start: + - create a room-local agent: `!bai agent create-room-local openrouter my-openrouter-agent` + - create a global agent: `!bai agent create-global openrouter my-openrouter-agent` + +💡 When creating an agent, the bot will show you an up-to-date sample configuration for this provider which looks [like this](../sample-provider-configs/openrouter.yml). + + +### Together AI + +[Together AI](https://www.together.ai/) makes it easy to run or [fine-tune](https://docs.together.ai/docs/fine-tuning-overview) leading open source models with only a few lines of code. + +- 🆔 Identifier: `together-ai` +- 🔗 Links: [🏠 Home page](https://www.together.ai/), [👤 Sign up](https://api.together.ai/signup), [📋 Models list](https://api.together.xyz/models) +- 🌟 Capabilities: [đŸ’Ŧ text-generation](./features.md#-text-generation) +- 🗲 Quick start: + - create a room-local agent: `!bai agent create-room-local together-ai my-together-ai-agent` + - create a global agent: `!bai agent create-global together-ai my-together-ai-agent` + +💡 When creating an agent, the bot will show you an up-to-date sample configuration for this provider which looks [like this](../sample-provider-configs/together-ai.yml). diff --git a/docs/sample-provider-configs/anthropic.yml b/docs/sample-provider-configs/anthropic.yml new file mode 100644 index 0000000..b290156 --- /dev/null +++ b/docs/sample-provider-configs/anthropic.yml @@ -0,0 +1,8 @@ +base_url: https://api.anthropic.com/v1 +api_key: YOUR_API_KEY_HERE +text_generation: + model_id: claude-3-5-sonnet-20240620 + prompt: You are a brief, but helpful bot. + temperature: 1.0 + max_response_tokens: 8192 + max_context_tokens: 204800 diff --git a/docs/sample-provider-configs/groq.yml b/docs/sample-provider-configs/groq.yml new file mode 100644 index 0000000..a56fdfc --- /dev/null +++ b/docs/sample-provider-configs/groq.yml @@ -0,0 +1,10 @@ +base_url: https://api.groq.com/openai/v1 +api_key: YOUR_API_KEY_HERE +text_generation: + model_id: llama3-70b-8192 + prompt: You are a brief, but helpful bot. + temperature: 1.0 + max_response_tokens: 4096 + max_context_tokens: 131072 +speech_to_text: + model_id: whisper-large-v3 diff --git a/docs/sample-provider-configs/localai.yml b/docs/sample-provider-configs/localai.yml new file mode 100644 index 0000000..29d63c0 --- /dev/null +++ b/docs/sample-provider-configs/localai.yml @@ -0,0 +1,20 @@ +base_url: http://my-localai-self-hosted-service:8080/v1 +api_key: YOUR_API_KEY_HERE +text_generation: + model_id: gpt-4 + prompt: You are a brief, but helpful bot. + temperature: 1.0 + max_response_tokens: 4096 + max_context_tokens: 128000 +speech_to_text: + model_id: whisper-1 +text_to_speech: + model_id: tts-1 + voice: onyx + speed: 1.0 + response_format: opus +image_generation: + model_id: stablediffusion + style: vivid + size: 1024x1024 + quality: standard diff --git a/docs/sample-provider-configs/mistral.yml b/docs/sample-provider-configs/mistral.yml new file mode 100644 index 0000000..5039316 --- /dev/null +++ b/docs/sample-provider-configs/mistral.yml @@ -0,0 +1,8 @@ +base_url: https://api.mistral.ai/v1 +api_key: YOUR_API_KEY_HERE +text_generation: + model_id: mistral-large-latest + prompt: You are a brief, but helpful bot. + temperature: 1.0 + max_response_tokens: 4096 + max_context_tokens: 128000 diff --git a/docs/sample-provider-configs/ollama.yml b/docs/sample-provider-configs/ollama.yml new file mode 100644 index 0000000..d794859 --- /dev/null +++ b/docs/sample-provider-configs/ollama.yml @@ -0,0 +1,8 @@ +base_url: http://my-ollama-self-hosted-service:11434/v1 +api_key: YOUR_API_KEY_HERE +text_generation: + model_id: gemma2:2b + prompt: You are a brief, but helpful bot. + temperature: 1.0 + max_response_tokens: 4096 + max_context_tokens: 128000 diff --git a/docs/sample-provider-configs/openai-compatible.yml b/docs/sample-provider-configs/openai-compatible.yml new file mode 100644 index 0000000..c8852c3 --- /dev/null +++ b/docs/sample-provider-configs/openai-compatible.yml @@ -0,0 +1,10 @@ +base_url: '' +api_key: YOUR_API_KEY_HERE +text_generation: + model_id: some-model + prompt: You are a brief, but helpful bot. + temperature: 1.0 + max_response_tokens: 4096 + max_context_tokens: 128000 +speech_to_text: + model_id: whisper-1 diff --git a/docs/sample-provider-configs/openai.yml b/docs/sample-provider-configs/openai.yml new file mode 100644 index 0000000..612cdbe --- /dev/null +++ b/docs/sample-provider-configs/openai.yml @@ -0,0 +1,20 @@ +base_url: https://api.openai.com/v1 +api_key: YOUR_API_KEY_HERE +text_generation: + model_id: gpt-4o-2024-08-06 + prompt: You are a brief, but helpful bot. + temperature: 1.0 + max_response_tokens: 16384 + max_context_tokens: 128000 +speech_to_text: + model_id: whisper-1 +text_to_speech: + model_id: tts-1-hd + voice: onyx + speed: 1.0 + response_format: opus +image_generation: + model_id: dall-e-3 + style: vivid + size: 1024x1024 + quality: standard diff --git a/docs/sample-provider-configs/openrouter.yml b/docs/sample-provider-configs/openrouter.yml new file mode 100644 index 0000000..561b40e --- /dev/null +++ b/docs/sample-provider-configs/openrouter.yml @@ -0,0 +1,8 @@ +base_url: https://openrouter.ai/api/v1 +api_key: YOUR_API_KEY_HERE +text_generation: + model_id: mattshumer/reflection-70b:free + prompt: You are a brief, but helpful bot. + temperature: 1.0 + max_response_tokens: 2048 + max_context_tokens: 8192 diff --git a/docs/sample-provider-configs/together-ai.yml b/docs/sample-provider-configs/together-ai.yml new file mode 100644 index 0000000..5a9b8e8 --- /dev/null +++ b/docs/sample-provider-configs/together-ai.yml @@ -0,0 +1,8 @@ +base_url: https://api.together.xyz/v1 +api_key: YOUR_API_KEY_HERE +text_generation: + model_id: meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo + prompt: You are a brief, but helpful bot. + temperature: 1.0 + max_response_tokens: 2048 + max_context_tokens: 8192 diff --git a/docs/screenshots/agent-creation.webp b/docs/screenshots/agent-creation.webp new file mode 100644 index 0000000000000000000000000000000000000000..96851c042f72a1b17436c2df5039f32d8038d954 GIT binary patch literal 91060 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℞@(e#}bBRXyr1z!6KaZo3<%LuXvsNx0o6(^K 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%0DkWL{Cb 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

p(AjpY6 zKLbt!eTTw-z)5=TqAW_k7SQ5oR4m=TgZgMz$=wnb%tMY<(C}3Yk}+VNCgjoh|A^Vm z&{WtUzcM`ReWB;EH((PhMgve_6ZksR5K_)Xq|TPZV%kOp*o5Vg$x4oDEPDJ_eT-~+ zMuXzu`jn+tdM~&-J+K#+I@%G_9raj?O!a7`(Jl0oa1$XC3nbJ$=qb`M+f!zYCB#*S z3Isd%cEmiq++D<$7fXm)CyYjXQ8n)Td>O z=rF)o&d}FC-2MldmGX+Z8W(%a!`Fs0g>;psRwBqVlDM^lufw{D&)Fjem3xWFm;l4c zK^s?&IpX4gmp&57*`~Hp&}zT1fr4MbaCP@+ECb`jq&e7l0dlN>rV~1DX@zkbF!Uwh zAH_=2^1FB`j+B7n>sAA^N5IOEbFn_#HwBiy0$&*(YBnP_&(AWXhg8y9tvoMklVb@& z=#~&Hh!G7%)!vJKB{$7QknHiwX*m%@b=C)vh-PFuO%_H9chRP_`7;8iG z7i&p#Yplu^{??d!rtze@R-CR&)GF)_7`hOe*7HyBT`rSp zV~vUY@+JE0w2**^l~f2U2ar+ckrK~?9+bqoc-SG|M{p}E$189IaRd`FKi^eqFdO4{ z89qin;_mjsb%pkWSffmCkX0BdBT}*M1vmq81tDuM%O5&`#Pt6#PYt`rbw>A?sw7&- zW;M4|wlh(^h3i0Ym2#TlB%Tg~R+Ssq;BOoY^|_ zIc~g)Ybe>2KEC}*jPX+HD>ggkWN=9mYMvi&iY(;~2KbD~zQ&GMIyH+Y$4e%56J`{z zR!n=WG+t$=!~!!C{~$~MnmLD5Qhr?twgrKQagYfA# zb{UJjpLIV0b5*}$0M?3JSPo!k91jKhMn0y|{R;)HtsMLe-eQu%i=BfRM8&IcA1+{1 zHd6){NwJhQ$>uOE#^oWw^b{4+3|RXAtc*6?9BM3=Kz;dUTB=u z+q7gFLvc6lQMNH73x}M2of8k}ZYw;7wVe3QcK{ea>wYg&3f-zp&G(v0*k~y#>=;m~ zD8rFg9v7nSYCuuoLC%<3_{Q^e`7TEb5F@Opp<#m#*ekA-%7`R9FE8e|7{&40yjpQ} z=ZMaz<>rueuaa1ybcusI7p8E6jmhCpqoYJjFLv1QqJvAtdLLvm7)H0b+*+B#1YO z;C6DaxyRX!0(SZ8{6w7Am12|MEbf)K&8A!w_Wp|bA;vPH1a?Nd=1ybXXTRH(5*iY*QT~|PuFg=1C>L^o5c%L@ z@RkK9rYrEs$YZq5{w1*q`IMoVW-h&Lec)W5MyV4YlknMxr`$tq z+MU2*m@+m;U@Zx!{g92}39#^DU)JRkz5tC7xZr;-r zf|@k?8h#`<{@WFp`}u5`S%6g0W;@Y* zZ-*8A$7$uCj#D(hNm8o;;&|YA6#3?DTB>k7`$@}B=|DZ+j4{=Xzp+YxRIS4G30z~r) ztEwVdDqKg1nyDSXvvH)lU;0_V3xk;!@FI$2emHsy#HR8@D7;@;H+N7&2PxWQ%9gSy z|4OYYZ=*4*_R8?0^$j|Z<-0u;IX*Fe2Po)$#9JV;{DajzeI zm6*=ALyY zaPk7zzZX)isMp~Bn_{fM2j>3xE!Jt-XOsgZmN-@Q)KD*-_!#?%{lS7CBPxBIckZCz zx${)-_8~;kjCRXugYY;}uYN?aT&-LUo_p{))>HkkN{%V83z&EFow9I?5(o&tVDyP~ z&#EuS=y+DCG>}1|>*kstdgFF8Ptgk|{xFU^>oX=-XaryjXV;>3s@wxYy7j!`V2mVu z6r{2#-8u#2gs;3m!z;enBS9un|IbAL8qV1}fqZRjt+^@6fQ~59zOIz?gSrkSqe^agw`+P9DK5B zoT^nmc0V%<9KodHT;wd1DlR{VJH0m$I9216;#}Ms-evUAw|59DmzhP3e}ovENfzTu zc6##V^gjz6k9Uce-Yx4~ex+X2jcY3EncV{XG}QcRIk;!lQ_Ml7 znv0IN`#NgmC$P!`<)MeZSb`Ulya-;EW1*zC6c!LrwkHvT_D>I@-Q|9hpRsz?fOpsE zm$uDnmPuwjHNw4&G1^ojypl-8K-pFA&3zF5E zNv{6OrIMwA2@BvEK1ZcVuW*yaKtQSqV}(g;J66&45QPf@Rq5aMUDZ@2`Cw921d3M? zBrj@$_`w63nY{9+YF&;2XOp{#QI43wt#1t!_Pqu>Bix#|AeJG{5EX<%z9cJ z_v`mYkMer&j>UT#VpJp!F?v4R0dKdEGpg@&;Le0JIrA8+Av4j>o%d32c{$T6b z>A@)Qx*iid)6wI8OVlDb1FX3dU8Z?}G1dfrG9 zH4WeiA{%6x#2LMNHbm9joIzjRCf#ZLs2bj&j-CL$<||W_^tsJfiJu0Hy>$tQp;@y{ zccxduxRq+0$D)~LbQNcCa9h=M+bnoclF9j~ofo%81dAQLom*-9EmpH#=3sf6BJ(1g zr^{7GQZ+7}NU{yHOnO<;N8X8`guVp}Z=c~mrfO+yZaJb1wSwUQu?y8$okWTq{GdFq z)~m^`iIE2FTR{3FRsGw0dY>eYhSHPF}I}{w?d+67}UOe zl@8(0!_~zLe}%fX$*9Rx_Kk>yL4mM%b1WPdCsA8ew!9C;?Jltx%Iy#Gep=DI=Rb zuOB9)ayr+y`ILqD2EXPfa3~AOTe~jBd{X{Yw~kV$<0ZANwf_JNp^U+^b%XaS*XOff zzysVR%<#naq5GNL(dH#R;lkN@xarSMhcgfM&3xkF{p}%m-fv(np{4W2g*fl#FR?m? z_l}3*Ya44i!Tx9nufC+Rp=GO1))d*l+wT+kXZzYej-MY&Mx>J3F6X1XHXbJXNhMpw zVsO7?<4M}f_XW!tyi#`GDuhdkZKt{D-_m-AlU06}I$CufJ+Qrr`u<{8*&j)ybV=b( z=ERvodp5kQJ%Y2-*)%aOmD9sz;38=E)T5F(4MhlPU7)tg)}B_d`z5c_`RSwE z-L(18Ch2p%7rR`R+B*4LK#Qu7|5_>KBS9`%(`a=DkeZ&s3;EqA8u z-YzYn>EJ?>c?*r%-YuD6x*Z}j9iATwN*=$9Dhd~3d9b$5Gy49@YSnzZ0LXU{yrU%l zY4%=f4D|Q<%^?1_e9-#%RNZezCXqgX+P0of;ya|QNgsXA>Q1Jt$(1&j-f+OaGC?Pm zeQp$1KXD8Zu!Udp-XP&`J9enXzv8>3;x2n_-WA%_9oZ+3WZP~DCX^?Z`srBwxP*?d z%9>n$xpY=U{uiK`z!7f0eb_VYi{5Fv{__RE#hyYs435%^m7Ms8i*40jJgCwoT^hK@ z;7WDSao{^1i>za&R=Cl9jhtG~`^U_)WJX)@_XiGcaMv;)E^hX%m85GPHguGVLeU2c zclBj;Mv};^g<)x%v_Ejz%zyJM7qFdUJqK5<)9SXtcWWN@IU`_X(7uHKj`^&1|zu#W9E3R8K6BA+)U^|=KkOLps^R4_V zl9Q>s9iP_;7TvjI0Ux)zG$~?D8k4!-iCdeua=fLYxseO!yQER~RtgZNt6q5QG~M;C z_WGD(E6(@e(pDK2$Vza;+dcis7s-&>6xvSfSABR;d)grw`%uyQWxhHRGzY79gCHni z-?Cz^`>gnt?FyED)V73{+>(iG_Xw$3TEV<)bSTP3J8_^c1_ohKs0%FUDlt5_K~?v$ z6vw5YW-}>iaF{n^=AiM5u2`hzRC`__UP#X5_w0~`XpYC%KI{j>)#I>RbjRlz3*6l+ zZMEHT^Q5|RB9vs|L10Xn%X~zZZFO%!D*L?tRCc7?b{ueQdrQd-D@mj^VZJ?ffY+(F zb5m=Zr_B}bMp!?YYJ@#!I6mNkLb;>m?kVx-%3p@(M)q~fY1CZU_q&R#yYA_&55%kC zIJEJrU-tSF>TCgw3+Ic8;jeT zkxVg-VB1m!)@Tv~ck@^Vts=pK)3l%$uSDUH4v7YA;&9SN#+Xl`&GCY4Hgp`od?>GDJ`; zLT4fpODZ>o0#EHNe32RX`65v{N&bbE(i?O9RQDPyM<&51K~abTomK|JEyfXCz@C4Jk+)YR?RACZJj&Esx zl~0kn>tvhj16ZERlPn zy>GA&(6dOBfbqQ7&O}R#OJe3Xx}LQGKr*Gqcrn(&}K)5Dn*i5NN z))D!d;dTq-W!x?89EGh!_1q$E(PV>kw?X))^1^MLxN{m!1nVYBaBq?OFCG?~aXk2J zi4p6IDL0|Zr2Bf0_gKaIfGoeaej!}tO^q>?k6gd)}{ zPzk;_Cl@R7LOD!*CG4rT|2_}dA~*$n&8G0cso72hB5Ohma`x{}*Pp?1bE z=C(wj72^>X=Anm*LE?Ab1P!|B*2vP6J;zjg{iM0__$hx9GJ zb=!Q!*@J~ET+?}~QtOUbZ!H7p4y(0nPr{6O&M2u(y9u+*8}KuS99DZa+4(;4eEd0s zOSCWWJT>cK+=0L;s$$j+ua^5|@HyUQ&vv)p%J>Qjtg&VmL3!MKn)>x~+`bnPBA0D% zTN2Ji!N8ekLV;;Wn0B`$Nt@kn`1%V*2d@B+_Gc?0kVL*kf&r3zOC668D-+LJIkD`h zht|mE4P9DtRPu!5gQI1^BYrrx7?lc4^TXK@_^|cjHrE+=8YAePU(4;!} ztoe_CvCa#>qMmhQbxqLlOQ7N@*3gX79hu}oKSTUePH~kbIpo$J@hhM2N1@rrp-+g;)URaNS%bknD0wrl9|@@K+;kl0gkQ=@+E&fUeE?P} z=qTrWqBhP`a+i0g*mvxNOn40d3egLQ0uT=c$_u-Ic*vrOa5>tHurRB#_W4p3V^u&3 z<{;?Y@0Tyz=#Kml)cF4N);+b4@i1B1w2i9B_`0k`p zxN);b%6F`>e|Rk3wQQ%$+WndRC}4)kr{;JRllqTJG7m#vTY`gr4BJ&Gw7ZI!vLuuw zM9PrCJ-_=wS!=RJ3;>lKejqSjwt2Xl5DAW~%mpofGq;s25R#ke$~P+NHFmsQQqbrr zq>Qe`$)AAGrH6c3w}}dbO^R27M7*!%iHKYhjZxctolo(3_~Z2!FYC1&#HF}-MABh@ z6_gXH7%xwX+HzV)tFSe1WS&o%6E1Da5CzU_;@2~BBCZb5u7Hb=o9R^^1H?F_Am+8 z8$yj%>0si@@O&<;QcL5meHxWg7j2ggg2o4Bdgnz~K5ZPQlE~67OYm z)t6o^1WhGoL4NC!q46>fJsEdv34M0Ny{uj> zca4ETl;shT7NsMaMiWg_i2yOmm~o>$#n zCct|&Z2WLWHEPA@7&mYkppL9@Q6#i)O~(;>NT@NquTq{)zU31V^x@_*Dqv~E60dIU zm|rT41ikYZg`T2`Mc!H*L?0r%=nkS9mg2t5m;V=a6{*Wt z-l1eg6aA0<-y;;!L%R1c*CjAcjx1OIPu6w-l&Cppxd!#tC)zUZ#Q+XP(>kqH?>(ta zl{eV#I_IcZ5Qje!UNcHh&hGT?ij%H@g`?wr19hbCxMH%eQ*LTgTS9*VT;pzequ_b0# z?;hXJV;J=xeP+h89rvOaYCo@O$fTpdZ6a7^+Bb_Y#VOICa!syU-LvE}OSoZ#YwO_1(WC0cay3d@F}_Wd%En@QbqLbHj@Ofe61DvfH93#+ zU$@;1O7f9sbe1=1a6OQ>I%vDZ$D4a-*4u|8r;N790F(SDY!6!Vju|&mE>6jG^?#KE z=GeSkNT0)t>fFQJeBNfxDg1g59*V#H^>e<${|FEl(t`s{a|24Xz$?^Sr>`nlqf=b% z!z{t0{#($OVxh-z{q$S5v9>mq%Jr<9>zP+O6f&UZ^8)?ZEBLFzObYOj>FzG7;m4on zl!LlWV2pGhGPj)>ihB11bJ-iHzh7&J^9yrLtWcHSsk}#eVK#sXhE#Eq53<-O{N`0z zZ1AI(jxjX3MrvCWT;FE^02X1PiNUBi+hG(`aU8DXApmf7s#DCVxML*B>2#5K!}bB@8JyKGuVppQ5F zs(fMQE-WLWvvgTN@Rd?zp3{d9`j3U2C*xjIx5>(<+Z;nmu@VcHhCCKiPkDf7O_wHa zcG1#9<6H%eHjlRrlI@yxq1N!Vchmw|o_fkMnuI7@3L%)+!@QR+4r1tIlMIx*ei8Lf zjOuCp46#Bno?()sT$&+iwqd$Jz%>2y8zLKo;6-i2KZ?qACe&ngW$HjC&Ue}PNvQn^ z-M^&3q2*^xcQ74Z0gP;1Qt~#Hhe8w+XDj1in3r?!U$=@JGL&hJVB%ojfEC~FzSdVA zZCty=CtpH+#hMvjc$q7+j2Ni5%8LW_ z>JV-C8~v+&Jzw-rFa%EXZ4V_(Jdwq|on~3!c`>ZDz#H;7*oCT7185IA)JyvUADzB; z$VU6yZ`~jB{${Uhb`leZpIz9d3uI*lw>_Qk8%usZ9Ds+Y+Zx^2nAeh{{k@v23y*ut zpd7#&ZjHU$mxor{TSYV%dUiwF5n~oDdr2)T=x911=~sITop^>+mtK?VUuIX2N6ie^ zSJPkD-jcUfAeshh?_j0oS%STHu9Oh?is0e*z-&!qVSJZI;otrQ%hKDO9}M97CE%XS zcU8k4bbw2X_^opjL0)lCeH`Sx8FJnEnT)*iBG>X+T?=%W@6+v>D5JXA_YI@~qd+u? zquXxGj@S|7Z5z0^tRFv;^IbxmKw9Qg?~$3FyY~;GkNT6q6z(KkAYYe#Rg=6Er@vh# zZm`~(Bv~_6_>@I)Y@FjU01K1WfBQMtT6YZ})Q4Hz4&Jd}UXzx|X%%O@pyIbnW*lbB zGO^>_ic>(3Pj(G<){(C2W)rxqPYV!5mOkpAAZ|*dlMK0V9TYs z6D0`NLJ7JVselWk0-c)KB{md(w8Pc9XK{c6mFX`Htaqtz+`k#v7$@OS7iP|gWPxtG zYHK`8QUt`hq)Z;5qnpQDPjKN*`4CN0y;}Ou)a!Q?(Dgnl)wcAT`2Ybmt7f@`E15FS zeW^WIbCc{ts<8R}+7WN2|Gl*`(&f)#UQKVAMvrr9M*rPC08L}}Wi0hqJIS-6!82JC zmr%6`Y`k=WXMy*Skcfo>;b5BgKmi>nP_8BfGF?bA@KIak4}r*m-S&UDw3mz;zr}oR ziN0(W2>_syMfP9y2USaK?Sft|3c?<%@&Zmo3blE&+HwJUDB7y8&V~HYK-Vy$a{v@& zyc_&gJ)Y3e+j^EaCDw`SK>K-p)az6Ccm`x4aW(%UupIXmrFhz7OsYA+USCF{$6Cz= zSjnSqIBkuJpn>h0DFFjn_LbI4&qqj1&vLbo#~DMy+TJ#?aR%Y1vasc+84fSCl^6@U zIx~zqKo2ab(bvRN%$|Re8Qu_X816cY+rDp@Oq=1hpEGwAnDD|8UvXo6rL8)SxMM`| zSL+lSuOnUkHi{s+fj`}>;$4I}RonQmUH&}(W{(A3zjcF5E5fXRonTMm>|yI4+Zih3G+Z-*R+yMaLn zK~(ucu0?beaFNuowmFz^5yr7$6%SW|hThpI78W)?tD&&-eQux|Ie9|#|KQ1fXYM18Q zF1-Uq1$;)Nt+8Ae=#OIb*EO?u@3OVLo}cUGk!>BLzUKfNi_7Je&!#4HCf!zB<=SY)9mxvtIbB^-`w;k={df|>Pqyj@NC)Fh%)N{FU{{Zwj8Po zC3KaIi31G<`@9)nwolZnXSO6Mq?(v)pjgZS$)>7n$(>bKl#M?l0K8wp%cb@E$Hc)S z{bjXEl499sK)Tmg+=bryi$KEfscQTH97&b}E2@a~f+($1iXArRbg>BYV&rvrbQUAr?~%7u#RMx(iIC?ttsZ& z=0Z}bH=|hK$sH)kssnvy?(R?SR7p)=)88F#rU;xu z&C+Qknn<$1JNL-M!;BRefGCs!FLfUa>`an$q zYUf3a&xk^O;by%GlhRc0b>hyNJw@KvY)jwUi!1%2vjh^H zUt!;|e}^WP{Pk`0-k}`DRR7&~2@3ViW`t?;8>UO`E~Nu1wp=EjYxFzIT#_PjO7URL1JrVjE$JjHUcMjN-sXdmIR+JMM_ zT02_6i7*?5?elvgripEW{y^2^tkB#hHUWS?J9Q6je#B&o>unPu$mgZ)!`uMS_kmQyv^Qc zJ4Y&0ukZDPeGG%Yrt&+7=hH}^G;edi#|})P7Pb_3kaX)21WNuoopS5MURtBM;u(%| zR6U`f41ag#`V!k7wcKCR9^0zz_?n=Yh~>eXC^?f4MQ>@6@i7_Cer`vg6kYwETr1MD zqwK=4Ls^$`0wUr2P_Hh(>-j!&sc04P)+dUEX$wQ9r0~^3Mp5d;t!$9;R~)=ijewKd z=U=DzEQVCcnlX^#1zDn(x!?DO3+7qqHj4*OjO85Z+!M+pcaDDR?g7e>vYzFul!?8vQha<;#f3Zu7`&0e@i%ZxGvSCiZUgQSsX`aF zn!lucNqRqHrY&H2q-N5zJdP0R3lCGyirz|GG3a&l!>FY7jgvz1cPu*rGxko(`Z1{z zM4M}m!cJUBTe{nahXWGpyXD3pP2Dyq9IR{KjEfn+*t2`!1g zzJ&OP9)osw;JIvSwBmK#FbhD}0#HEo=se=Itv&A)HF*e+I0iqV2)9_Px2~)?d<_#* z)adLfpQUwLyTA{%(aguiW^#@BRfE^zLPoQQ?q-{{ptuvEn1Q}+LfyAOuYdFO)6aD- z67oBZ6ns`(@asTjpnci_Vc;(%clvPw3~5gYQ_*fH(S9e&nCP=X^^^L|_)#c{p;vFo zT}4cM>HyIZj5XT_O5{tJ_9KmWy)$L51d49fLh^Zjj1NrLu3^}0Y4nVOd41p8q?jO2Y}tkP=$O(X$u z8=ZD!bCWIMUTcy&d8zx=P3=xaXNtTXe-=`a!l($SB*%#rjV=hGiLAQrS*D5f z8)uVH!b%@N*c+M>iU_u-Lu;4+tMR*+o+C9EB@&lyen>Mq`J`eV$ZDb?(KMyDFB`?4`|)EseBD$=O;oq!FN*qtw8 zkGvby>_7yv+Bdjje4!5eqc0sDLcO3xQ0d(iln%z`rrOdg1WW&bnwO8e5lsU(lP_9Y zn7~7z>f=l9-#XxY$dk(?r@fP{qHQ`+01m1z+;-k>L4i@w{+CDQU{WCESQH(6UA;61hAP4+a+DCD9;_y}E3vlHq2cM6${#_dTym!LzY6D4LAx z0+pvu;hnsf9Z$s_-y2k#OVCCT6**{aP@u`l2>p`; z4(OHfe;``{#a(j%TV5ZwV{vNk-c$jMgYqU6J3Ss`IjiHo7t29S#BziL?|=^gP<~&& zFlroH2s&CaO2yzH$buIdU`qY74Kd4X9Ds&x4z9&FnmS>`ygj z=7g-NuJ%k2w|WBu_%vQYfQ1h%@T$O}=;n3o9gOUj=)vD0itv;yJ$Ryl&T;q<=5FS8i$!GyNP@mCo&EB;!i~+Zb8AUwgrA4kmS7-)cMo=^ z*e2^v7LWQ{nexc9NMXjyZH{w8MrCO{^I8D`X?8HzpFC%S6-Fvv4*`{_jat9&zJ4)- zHug{h4IhP7!6u;)+LXW(AK>Xu6lBy1F00>OLQNYX`2eGer*&|JF8@o8_%L)Ol#;C~ z^+@0&s4LX)GSSxL_`T}(s#a@MkAR+@2KG=O(t+?yH^Hcv);c#Y!l$G}HEQL;poH@W znrXCbw;b9lN>^e$*xmmeDyO+&D0nqzdJxL$8lawc2L`V7Ci-jRUsQzqo^7*CR z>0n;_^1q&rhTu}zzn3sCX*Fc~i%%p&LM=}sv zQli3_LZ>FC-`Qk`OsEtcBW;x8JC`NmJ9Lb`nx@Imwr9h2jN9poMw}>k@(k!7R*?2R zFH7Nbl3Q4<89KC1C~c{3$mM_3{g2GtaD!2wPC(iBTDKb|+O#Waw_DTn7!s@)We z@2rT5-QQ96AZiZ;9L}}f(tzZZiT-LEk2kjdD{V}v6{5Q33`_QW(~l`2KIMOrs50~} z7_rexjgB8Py|dx$UHcbQkATNTuz;LO)nMGraUH*5B_th zVSzNxr7TS?0cO&!RA^0+W-RzTohmhSNEq{_>Z&1~`y1(SJ5H7w?(C-z5U($67sWUuF+|XC? zXq-YwmeBB>*(G@Iu0n!<)Yyl*Xd)*$^@bml+Gd+gG43)Q4)DI(&N0J)mZX7}zN~k? z{a5|x2N#hWZr(;pzv5P2dyt}Wh<#<%kt*Iq&y7_PqOM>K%_uVm7x}6-Q@r*hX*6VH zopL|~p#SS818##iNc%Wdu6F1Al_4UBR%_3;q3DEM4Z%0#Ngaa2cP*K;S{mYKgOYOm zk0Ry9iDe87FIFEs(hC)6sceAsN~d6koKQ9OoF^d%cu-+rm`ww8#Aly2*W%=Z1i3Wzug5)G7u z{Ag`LgElor-j(ZY+6@?aF}rnbP?XJvHe$t(IWp96sd^w7$*Gybm*1XKZnQUA2*@on zv0V$hX%@Pl*wPPqN3aIk?B%7Z*9gD|P+qVFP`DB}+%X40C~E)5PN+pIM2v>!?$^wU zY%T-yM7{q{MVQK2Rj|YanGM?3D#G*Ek1@!JRKBm7W~vwrbVJNV*4VO?HjyJ9`{?hZB zP_O^Wy8h|&r-d8}52bz<$ibIzcvoOx;bJ|X4>6&jToAeV^p^GJ*Fo1CV?W@hvaKqnm z;VYe_G+-zB5Fj<`X~f2c`$TD30%I?K@jozej(QbyQom{J${q(7t0&g?RR91%ZZ04b z;Os*S?^B!y4;44_9fyN@OO1&J!U80D3$h?3m&yQ5NIR;o4>kLcu;5zxP4QM%$(%|#uO%JM zF4zoHK53jtjz*koyfkmEpDPusQ}|SKMf&$i#_d^_(wqY3S^FL%HmS1?;&F^9%!j~W zHKGoR_mwYs0KivDdCP`Py0_b+;@U6g$b!950FvXb1e=XHu~KvCYn;Q6*P}bXNaf%j z0;#o*Lu|W5^|{FC|Azm~UN8Wzbz!aB=^daQ(Z=YB0ek%D8N`_K=T76;LOpaS`WOj+ z);lCG^d7pY{g%1V?ec8)SbjBu;69aLD1E{etSiH$P*+VPMF5FnPRl@>9ek?>JoHnk zTG-)`rIQ-iOnrM5DYqgVkYlqVipT17`V(!8<&7KJtrd{tUIsGYQ$)W&tcoVqMD~8| zTebG6jRqXTpZ9ZuQyU?46x~?9JdW-Mqwog(2s-@axDA{)Bt31##bS8sR4@C3- z)=GuQ=ZS^B4NWtWL#BW)XZMjZs6L?nyL}*s+o3UG`Q22d6}=;~QZFqi(3ltWSDT~| zejtL3!aV-JjH*9%JL32#m!yM9$IgX#K3aGG#GaEKN}%a^kOyls3<9VDI_mZ^tmau+ zSp69RlyvPc1j~syA7^sInqZvBj0+CyvHY z;nQt}0&wfP`t{{w`$P5G1*1RqVdvf6iu3PGpy3O{51|hdQ3Lx{%KoSLelK)3B_6N# z_Wg4Q0*6248@}66Z^J2s(4&4p#}SgBx~net_(H7LGkvuEFFU?+h9d zAn6uK^}X}|1~1h@MC29^asJ(EL_|Y*481sm!~K-8X9Xx8LNwoYp4{|0epF0^0t?pl zfu+Kr<2q<0x##s5eqS$7jPrv;niWzP`h?!nD6lY^+Ve`_6;bYbMuVaCoEMB&3;(th zn`355aU+if5^*HVpEt=}>2)W3Y`h)kbwAE)`}Lgq6!m$}+x|7?%rA%e^_~p%LE(i2 z7{TZD>I0>WN0;+hcP4Oz zyDISHtq&vz0(U(-UVFnnZR>l+SlZn%cX*WNlsr^_yGsFT8Ig>`wN4xj$m}RNULUyN zY%f5T4n4V5ll)va_^y4+dJA5cQrD-gPsO-pNFp0rJcFP3=&**o47Xvav>aJ5)3rbgjwd?dU(6{ zqDu4<4=-tzLcQxto<&k_2V13j62%@wJjaofY2bV86)hE5qax~q#q%_*Rest!1*{33 zSwhf!n$2O;xad3ob>H^tb_&AlQD*;j=eyX>`w?#ohAu1^!a4)Z!e*M zHRQv9r^T?3l39@q^Fz^tcahUsnL2{U56{kn9onY}PzF3e*%{|s$9w|Y1RYArgmg$| z-a#dWm9j(as?28&khDc!J+IpTmXRhFWoN~n4cQeyg#xA`V*^1-I-?u}7qE~)?*&=& z)j@4kbqVy(quE9!wDnFiZl@1b5By{+ zok5(I1UGbBgg!ev8vMUXR)Ga1`^&y(N2s1d`cF;INq##5H#txC^d%3d?XOR-MiKcL zTUyR6;1KiFADK}N95Z&&NDrQL_FH(sY~*%Npckgo51{%c#ntUl*m0AV%&GAqyY@{S z@YhW$xYKQIy1vEQARD|+)DNIQ9flW55JGW*`>dW%jBI;D+&03LwFg*W5AC-H$Wxd@ z)QFmXLqpG>4`9rr=MnNHjTo9w9!td&G(MQRf>;=mrjmr0C5qL_Kvuv|_2bd8F7y(N zX1W$$JGnu=QS@6A@O5dde%=Q$vu5@T1j>=z0H2y(O4xxX0*Cw`)NDdu!C=fy-gli( zQ{$-ysPJ478P8Sim+oxwM95bY8`D2F7LNH7`q3`jKb zAr-UgJsS6w9aZBR6Io=$QJm|#g6m}SG)~yY5oDkr{0=Sy?}-q;3CTvN_X8adjX^V> z;^Xoc*FpqqJLyEra+2xyIuDsvuzpeuk~hD45w1BpC+$1#J34(`UvvEAo)n(uj?8Tz zsz=Lw^MIh;O7w$|CLeR7n~^`J{tQg!oFp4E&?K^zN`&Na9HwYMQcEKW1Sh7fQ>K|h z3JewQJNR;nMfb6W3)Vl153n$rs~j&x^PZe26AAQ z$WOhz1}fbq!m-`>ES;)Rnu3yUGb2bPdZ7kPNhBSJ3J-)pSP7VfPzp9FrfCIu(il$^ z$mMlcNMhyzK_?+RD+DJ)vaU3V+aYT#v6?!ToM;%!lVL56@0p(&zQTu_FTUIRHPOBh z-4RgCjtjw(>H_gA^vCKL91Ow|Sj@J5DGC^O{%sC}Hutsu!*4o!KSXSrn&lIeE;q4W z2n(exvv&~loRjF(%`;%V@pvND#+*!BgEBbQ3%M2Tzy(#2;@Wm6wUABC;xiY^WJm7g#2>L=VrN@Vr>Zh5EaSRoa zs{6N~dmM`+$UZBVpFN|uXtE6HUHDLr9Qc$f+zCnXSGVar-_ENpdh%qh?i6ct&C564 ze|r)FuQ2^*;~vd`2VHTGO8%Q9djDsemQv^gr@9kbLKQ;KqbQvI!P;sY_qO;B9V}a zcDyF;C#vAo2lt3a_M&2M6@E~cdl`%o)QA!9jku)0EpMwVPwsg6;u(0N3r4x0e zpX;rmVE!BhMn-e}dKuv#!%dZ5lI3m3=17CvG&Zh{- z#vA(%rcT~s#z-o|?Seb&uOcwFp7YY=LMaCa_FZ$h`3qRa_!f+Tg>=SlIA#`!;A8%v zC-&H;2h6g}9c~u101bG;05OYo*sgN# zzTOSWr74(P^((9)@=F^OQspr+O$M-9%ZM%Tt`odedDL9#*P>%EPLvX$WtC#5`9mVb zU<_n!akW&&PB-8Y6{L(HW#wbJr0R6CjAHfhasmYVpVG~R@#O=%-fEHC~FvYgW zOWp>Z0&9ClS0B&zK5vvjvFTl>!)B1i+2HW&lsjcS;OU9+XVbm4#ch+V9zgu%nfBL73ZS*nP91p!W)2AF?< z`ibUXIFirnnkF#8NT5oXhWO`M(<@DEa9Kl%sxWAwyON`gL6(Q3dqdT+p!1rv0qC>4 zYEs@LOn4Q5AQH6udG0=+Cu4qVzKi=p+fXb9GNWKvIXJa1A@ig-V=|YHXR+<||9b8DMTM!>^*-}Fi%T+N}u}&eVZupmdSdr7}buruF z3=uYc=tuIKKICyt=4Yhj&s2j{vPYYJU9B!X2Pc%cNV91j836fh#9DBNQdIk6+?7VP zImDa~YXJy*@Pm1MeUvY1gsBX&AY=gFvP=1MOHXr4s!~Q_=9#1UJU& zIdls`H`|zdtAQ{nGt0qwUrD<{mmopPre(?W*8q-X>wJn$)iQ!R}RGit_^ z_qk|?W~fc>7cr2(8tVAul8GuI}YA%O2BzkI_&zQFwv-hPc7O7$B#<3?*Kpek{%h;u7{q{Po zj3WOB@yObAnTAEan}rfILa?wJgcI7m0o`5x?JQ53-KcY)`{|C=>MH5~B%c^4ynf35 za|;7(wB+y^w|weavmDW2W~{1Mk-8Q3yUH3+O8wTxm4GQ}`YO^bSn1SdG(OUFruxP! z$@sCb_aRTSUL`o24S8o23rR=ltmRMP+JADX94@sNGyMSWh8_i*L>2BBA`nBL+m_lB z1d^2a4`Wa65$TYbW$VRD{JuoTL_l$q#=%MB)Uh6Lfj0=R%*xAKE_s^Xy*H%Q>v}rc zK*1_=RnJyC^<2JT11ZDt0#qrlw*M+>zr6@Ro+P!Lw*?G`Pe?K*ohmG`+ZbU@Bd*F1 zb==4;Q;Czs2pYNB+I{BwfM5xU;Y1-&7=c;fpa)Z+UjwP|G3Dwsg2ZovC#cS|C`!h+ z;eOl$8jOT6qtDR@%kI!xF2ilZhinZOS81Y^+RsC!JY6H4q{Cj7aSc;|d;B5{Yh&<5 zdy-%j4~Zj-DYB8u@8`9Q0tS!3L>;wX&5za+xHW|q3mt0ljr0%Te|)kW{9q{7QS*R$Oy=$qdQ&tTKg z$2oH*J(ZVzEsC}?SnplT$RG9bcV_AZ`_BGdGja4;epRns^yQrwX414fPrVfC-LPuj zn+Z>KkHu27BnmuC|usY6@=6J+hJ}HkydX{q(CFvT? z!@9&ps(jChocuYjgTafcc%2bS+-k$T!)`by^R`Oxc1ocI4@r1bCIk~kw-j#2Za0WF+_YU29`>1?jefkWQ{?splw z6$3levl^5eVIYD2ip^N&8(CLRXDf0Jtn%(!F6;x%l0dfP+iB z1pP-a1FZBgf3*dLvX?+&rbSaBr%ko3M=RHlH0iJ_x>?=` zAZEWk1Vfnn>roDoXL%cTM)H2hHR`zs6*Y(s4upS^lxdr^Dm{3EV^i z9o0ZMtq(PTQo{e-8M!F=&=1n^?uB&BM|j(u&I=}@;c#!Y+fUn+VYKvxINPXBmmKf! zt+KXIFEjSiIe!`3-2lYO@&@D66sj*c%4x74%vnHGyaoDI*AvB#K6m#YcSUGUU)e?O zKb@@m=O?pV!6$45#}P`EYWp1uajD1`B|k~50`sKHAi3B!xCcqLIo3Wxy~$=sx3B*I zq)DFUqZ0MI8e#cqY*R=*xH|^IvXIGchAH|Szuc(+T1O8e9q(QYCVhm>3Qy1U%@79n zVm4Jtv_Lzu@hAEFL7}db#`79r{raQX|A-ll>9rt8*$Ni3^JEhD?W%5sS<%1ty22F|1bpQlF!Kl4MT-ij=M~>O!gK^TcV?YyZ*GqfJ&EFTrgnJlgMV z1Ooe~0w;~;rNlW@i%#jrocmd%?`jMMb6WY zgkI+&T{S#ijR)2ugxJo7BH=sYf}i&Z`qakbUq5>H^ZeSgyA3hC59S~&KK{klJ?xmw zVi2cvKQAt#w?!j@eCll9c*vp_viRO-n)1{hnD+4#Dbj*5mYugEOm;O9G3T-|mf7)> z9vePx=SM@Bfiv^$KUMnA+JkB`qc;iC+S57KK6};XzJcL<`+bid)(OXZm!86@CNTZ{ zXy*WB#)LE>V~X@Jv5kQuxjl<57w?twqS3m%nk5{|2Oi}UcZ~^QN3s`RO)M(jGNsfb zNRKsE_A-Ym+8@Mo6<$6=m3!eTIlEIoefXEQFUizKmtM78GCX1k!ijx#zN-_k&g9c_ ziIWw|#*L5@Q{OtE$tD(#bMa$w_U5}3BEZf}zCfVUvBeJQ4q_sx*Ve(|BWQ~;HD zVcdbcr%h2?xG=?Vvj(- zmLg4Dr0|$G4FyHA3N9Trjw&uwX)aUmmC(0()KB=NG;;+-K{z-?KaFvWLX8OgUaJ>oHgReP{)W7_IPjGMV}kZZuUhy@k1(7aQwN_s5pbU zC*X&JvI>+-uH%=Cv3g8nMFe4_M4~OiHyP4S(5ljjksa5k@kVSy#mG<$d!&eupZ9NVdOG%k%W(awFJ@D_SWjD0Uyq_l%eM_zz7#NHVLo6yNHL*#J4f(M@!^D46$F+g4 zW_g0M)vAKn9P{f6_K&Q~RV2m^NxoB*mZT|WQk7>Y^~)Ys%MRTO`eaGsz$&N+kjNR+ zpgaQi+t${P4;MZ;QPQdlVQdj^#0?E!=D}EeoRGO)@vj`>hwtlteaULMgME(1@qMWe zO{!3W6nZkMwT|H>tkn1XZBF4!!(8AtFKzs@FEoCThs-11S@kfLSlK#SxOvPGZiKY# zC_EG{cM)YH?O=)pmdQ2`$y^g_8jZ^5l8I~iMMi($lySmZ!A>}hHn`D14Wh7ipwzKb zd-A!d<2A&Vp&~xI0lGYpU7ZDIS0&FD?7*@iOpMGx#-nIa!eZ138_oO{lJZ$43p(Vo zl&0`Un6j|&2iH6&BcX-~27r9;6*%=tP@1Na{LQ|Rh{|_~r_1F8>LvQ9_XaYFb4JSK zD~KX}2SgD_t#S6t+tQg5w^9bHCo(c;du%wm-6kReyq&qewVF-t=kA}yuY7|&&eB)$sZZ=}=8Jg@}??^++ zkT)LNd0PKOO<`dqGL+6piE0!py)rFg6|f3P6I575PSCUc+x9DB%E1&GER&q4bNWOL zO(B`AhxyKm#1s~8;jr8gTgW*A^c5RT%ngHi_X2x@Z|FFjl7Rx{;I8kt88~X6<~m5@K0)IX?4^NxgE<O;>=PSWNSWI{+k(ycpQ&2M})c>&Y$&Cedo-5$>ze46shzKh-mPn!e zT{lIxpic@)m0$shyc$>sGNb6AE_-b(e4&^Pwz9^@BCRJ->3Z!9$UeFUW;aonG22y!Oj4|szxmsLyxzP z1PT$q$5Z`4(-!G)wx=%`ulNKX&+?G|*0I%EE%iA|5B~K+U$hO?I4iRz>iF?tqB3P$ zdX;(a0@XYwh&M>Dc@V<*0ua-giMQa1ySBgkz0c$*2TXS?oJ}8Zs5Qi$1zlzRMCPe0 z+7=p9Ds%RdBt#NF3o*nJNI)8Q3qMaMcFpa_dFi1VF#%O(WWyfn7ivAHM?*c4M_e&b z8iV6)1T$e4{|t-{!49k?)trO&=EqJ14+vt=(C(oh=NFD2knYV_>`#9QfCnPQWZx;m z{OvOC$B6}?s`Q2GBq&QjR{o~ctie#?(yMEN^~!6jo(OunokjF{A_3FE$7b&PhgP4V zwvRHyMRI!23-%UlO*vHrCsAUP1Us>N^_lBi$S42tB3VfJuN$56XARoDL}3nr670cH z|F~iR(}~_or3Ukt1Af04U|t{YCmdNjVK8y-ywPCVdT>xvF<^jGckTM75MlzhK{`5@ z`c{GB3u~uqXjC2lgiG(Az@7~miGZF1?Ur}N{}V1Ipl})S;OCIyl(HDaq2lyz;;ZJ;z-1hp8sccQx z$k0>_IS)cB?5UBXGU*5E`(sDhT6OYue7AZ$>~~vdfdoVi+*H==lpYyz2f4vByXE{w z`zA5+s*KP(6}&{|UzfHTa;?Bc$<-P8Ooi6AWU z>PSeYhC#yE@zF|#hv}7jtf?fe(8q0Yg+$!jaSr5?76Ba&&A z`92RV+{tr=N11Y=?^EV+IkQG(xDVQL6)NJa+Ou+h4H>yJtdgW8zvvj8z<8vR!Rv9D zd#TboLqP5lmnQ*eM#woQEMB))}y`W77Jsr=X3LR+&gl4{A)koOrO zqFSZQsM&bQ^!%k>Kzj3w7>rp;C_oNbXU zct{nBu(mmK-TT}1KIo*x3I%knof4N4skC2i&WU9&%O3=PdVVIMsGklr5qzLciKqfc zE*7qeU4c{p0CZX@Qvnsc@8y%)S6B)eqaM&s5Ubw5iOtE#v~)|qFdx;f)7 z86-q+2J8?|h0p4?D0Ie?VYy z(leE&^^#k=VG4>-R((g00qYMo=dE4$ronin zz96ePVtWgVFWeuHEHN4W0z~!?Kx~bZ+WLVo^dpa032J_uKPf)hAgk%F*c+1Wf2u^q z`0Ob3zVJEOG#)T*K(~Fk;0w)MgR!{iSTBUpBqEvG2i3Dvdk+E!IyeP*fci!1o_GMl z{ATOt?IQE`%Za|VgxU(r43~*3fWue61>owqSo)y4^!Ya;ds4A@UQ6Y=nAuaRu35|F z1o$?Wa zM<|oHdlsp7cP(>o#0(OXe|I4hpOSk|u2sOqTo{C>cT|3Dr1?GdP^bNFAZ7qMBy_u` zM+uuN&zgLWMOfQXTQaYlp}qkrX~p+lnVClN4ek5#=e|5C?nZ&6L#P`ktem6A6G$8Q z${(cYihd)kk_TlU&(w9^wMmeMz23IzBS{~N#aIK}0^j`a4X*!%nI3$0altlKlKEA zk$7*!dg|F zKYXL1Lwc+d;FU3ckvo8y*ozRJ`LiJb(DqZE-=y%T8rsrlm`4*)6`{$p@Y2QDFscoN zah&;9+dV}{sl77BycApth!F*7{6auIYo4IURzHO~YZaX3hhBg%6GtVfT~ba>Fjt^qgV6sL_?Do+clc`2Ic^KhJfd)O!!>Rb z=SSXO+J{J|!E#Tage4Z_XN$IWa7hBKnCuzb?bD4WSrn(y$aX&h9>4i*kn{L5f70`iAHv z(R0k}tWYt$j9}~4+Nrr0Lc(-OUIigxdL~Jzr-Xwk z@4Cx?F1d7j$T6z`13AS=ID0R^HETeK&FbltVi6f4>70)MdUpKP56}Av&eOjBWT9TwIw~FLJ9Y8o{=|C!99C9hHTeB^iV+s zqc71Bu?pfWeHKR;c??ca*hfH>>uHs-|K&!F_}|>2*ePKMQpJW*$%ASe%sME;k7>MO zl4XVUirfTsp^~N}uJ&khR`|7Edy;2gJG!sB!mDeq4S}e6Z(|tBC5LcKgd922+ELzL z%n&+7?q0BegsW99ug0Yo0Gh07S`y#LIp>{D+*3!g@@?8_CwYc5r@qK``z{W?NT8?3 z0>l4U+hliCH9L2-wkNWD>ZQwb^Cjo|@mC)}w4)ri6wWTaq)bPXTZG2fSD(c_SLylv z47GmDs*CAI05S~QzdrZ$v0!m_Q$+t%U&84Tvp6zoqT7Np_3as=cJU!Yk`rEWWEiR` zDZIj>s7F9l?njr998u7MDWgLw7ES;(c7vhn{W2Hf`|rTS8wQM-|G@x5UFmp9ZyPY5J+bBy+xCR8n8IKG z7lZ~FU)Lbq%#KOa*>z_DsED&*lbFwOF38OOqvpEwaLvC!I&l8eGtuLL-yp&&siygR zw$`33SqC^aM77dLULqH{+Q-8pShNZl!qh&!)tG4mRtkp#_{W<~1je6C?0VRKE$JZI zrI&@d;cQP98N30kG9GZ~(;x^$L0PyoU|%#(e((tzzOpAUS%Qd+MgZF+o(|M;6Kt4> zi)i&x)t)ei@GD9-HZU(TpM!ViuUxhK#&3Jxjmq`hm9kFM6fV-blRzv>a35FyJJbL= z^-f-IGwVZV$9M{z9`R(0-CuPgR%Nx4#n%MTtsl&B;ic>xj#Mg0_NuBYS3cGEh!_pw zS(}qc?4^6xcmC%|0>eWQ{P~X;x2ES^RB6E&|2VPYxw;`KAV=b{E6u>?Dc6(svYj(W z?yYIzb5&;!3X9)b&(tKpUZLx)Cj{mk~rcq z_H;{8^}*gKe5V$74}p+s3yQ5pKj$Srx9u-wuvGY7wT5YnfV5l3lN_gvAup3r3I@2a zPsA)2HBb~fv6foJi@L2TQP|pSQnCyM$6aM9nm&iQ{pXK<-DOB|=T+jXcKrAEnr|Ci ICG?^HAHTKYPXGV_ literal 0 HcmV?d00001 diff --git a/docs/screenshots/image-generation.webp b/docs/screenshots/image-generation.webp new file mode 100644 index 0000000000000000000000000000000000000000..eceb0ea0d520f3d9d1a8c493f0d6a74361b8e7ad GIT binary patch literal 699966 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

Nm|pH=)ZpY=?@A9Qgkq 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

  • O5!Pz*>%1>U){or%`Ge8g}?feDZ3# zNfOOkV0KJGZG`G1Bwl(>LC9Q`3uY$l^uDgsb4N##o@&_3u!MVH!waG8;76l}&`+0G zZZ59U{I6$X!IwcE>AY;t#3}a~bDVL>4DXr8g-$#Nv=mXXWC219B9WmRmp^sxTkr?V zU3X7ZjwOdg{LA)aPZkb9`zp%typ_eVjA~bfXP{pMVa$U)BA=${t(zGOemaevQF#VP+*km1LM8&~n zX|YX_j`2mAN<&PR0cWbAKB6^#Ue6M!zJW~pKXX(1mo`27yBc$P^Nv4tc;7DhK3-#C z{bP&#NAT)mTK|Ntfg6zKc{Odcubpw}k&xTsYgJ+`M_rA)+E(R$VM=ANVRvoQkEzIW z&=;sOnKOFDL2c>Eg1Gk26q6cvKxw|mXb88Q_y-tUXz)yk>FF4v0wOu-n?&A85>8OW zEhc6Mw6=@hmQoWbfKLTW6+379s+~XL^}QDmW^8uR`IdRhJ`CZ}`KF&kz-Ny+*f~|3 z-ztRH5O<4LWGgQH3^TI}eh+Et*MXGco8dc1e(pA4iht=Kn?HS zM(-+rJ*RyTFgV?XxpA$k=94E>zW)(h98m=ct--Syylz(yHY}D~<9)Oh@hDf1T1+=5 zBb2tKi=8fnr<;m!)TYnAM^j;la%T-m)rxMna^Z04?hg296|(a)$gSv;QZfG+NCvmp ztt$*KPeHZ@>9qLU6B1g@JG-AcXBH%Ea3utGgzmd9oHV`2of6c9Z#Gy|EBn^)Vtk(` zNA80pc|Bck1g~eYRNk0y=>h~W{rk?Ng?!h`Rb_`8d6`j*ublq4CHTTbhcOmI{;}N{ zETGk>CCSV(+nm{nak2|lD-`;M*C_}VJHxjp+`DnJ5*L?Q2`b^y(iwq^``jw{xLXg1 z@KuhC^j{8PAXxK_DH4~1cd7bCMS_9C!P)$sG`5t~q3z01R8vlTBS^q)PEXT6iEAs> z{o+Itd%gOI`L}<%iGjX1?u^>qZ1EK8zxYZ1+#1V+EPeB`BE|m!ML@d0SOp-FV;4i1 zn7F3o5DJ#iuIaW*un6beuw1NxBy||D6`2&MtBDBjFT+r(T^W)r;65B2T<0^qMFejd zYo+c9#L>V^xxMW<&FFvvtIgiD(feR=)1_Qo3RX#ShGe=>7F=}>-hvn>BW^d-DJ<9u zik1;->rK6DTzW}@6lyaN zBf)k+E3}HP&`ATJ$tZV)JgAN>vr-Fu*3vaX z!$d)=#lird$7Yz$#BL;l4Y_ay?zK*f<}|3m<|HS zGDb|+R+P?C;46=_<-{OnMV>~s!DCtYX~F2iOOBoQU;gs5D0^f7Vc6QPxQU&h_rKSTzbKcw9X}z zIS`=e0JH?P)l-`kp_=RxS@}q%06>8~XDnb03zou501FZfr45PkMWb;>q{C7}5Vu0> z2{Ro5sDiR&N6P1P<@eijW-QliGc#=qgfw{Cjj6(1aH_%5twOEPwg|c*)yE7S6FX=H z_P<(M%62W>=}}C?P4;X48Gp0G2pt}w8!heFo9T*_&_s3&U28!|l!QVID3My*0tTWD zGvGk4@J!F;u8aca=D9BwmlDB1$|*ATZh>*=*h%GV=)+v(ERnRL0?bG|qK^Pm1W$bi z3sWLGgwSJcuqKA8YC35nm?IGYQM#xCvJe65t`VCB5t4*tDcLrsy7VNoL$6mS5#-9; zcMV07f(+m0$=cjPD`GtGg#k6C6hJNbGOYxbRdgnzzQD&}1!!PUE{$VP)JB{F)UzuR zqee{bnzjWMq0SKzwq{YY#y3DSoKp@8w#POS=~-uD=LB?5!z43+&v<()omtM7V9TUF z#raAHkgy0GZ(AEQ@xlZPw2|yBxk?F>c^TolPMHawy*O*v^PH{6GFTTU0iPWPrjKO)wceqRg+YdSaOoPO9Me2zz1X8n;_OLUVz1NhPcj zC_%|UR<-P^v0EdSP*8xRRJC-;R*6H~i79aD3?)jJzXpX!OO;@zL&zlaj^T+OpLje#4kutX$&h38)e{uD53SdE}RMWHGS`m8D0Kov==n@+WBFtikPGwhN$hJLzj8@>! z-yaHb0_(<#B{C@gucn4y4l2Nq@4v(DG@nU z8N`@-F|kBk*b}ZZl(Idgsmd)_AY7{e-4J0@1DE3VW^p^oF{ZW9$y71L*4p{tJc*t4 zxm@~8?#l_VC5@Qwor$!{-MP%tm@TA3mbTFwlEgNgV;{-FQaiM(yLDp#jod+QvFSrJ zx7?RqJ0jx}ESh#Xi^;un!dWe3Lqh2$j{PA|7Z8I)rDPY4tH4QWRLXioY@tWrZAnTZ z#xbX%Qp7 zaMNm#6X=Fu1y2CNL z#F(8>*s{qDq@)J|7dTxqXtKJ;$v`p7Jp&4iwJ_MQjU|zETJF@U9Xb@wMWxeH(;V_? z-RC%IdFmGD>TBH3JxfXFEH%@y-Wm5^Gs8mUxlD=^UqWn6P~Fm#3!{YzQ(eno7iM76 zTM89Ztw`4ni_!J`0j1g1UJ!x+ZWs?|iDo<$4Z_2MBifpQqQjz=BV8G>Hpezw%~4Ll z2rZ0RhV)R3y)&m0x1a$mNzJWGm6bd12)&CIooxZB2Hg}&xa=U*#vkVPs=6@no)%utsp>Eb z($Fcy(nbbYD5fgy$wUCilFJns2rD3GZ)ZnBT&>x2&g3LpPj~aadvV=kwaVq(_c{0( z5W^|}_C_`|Y}X8`jT}H#A&bIBBXov@Ha8ie4ke-$hpk*}ZDXdJCeev5&0JQJwGS9Mdg*DP$sSU)Ug;KOsiwu4 z0vSEYG$D#at0=nymS?c_xyh$$(F2nUxSCnyLWHB0>Ya=lp>a!an^hwo2+R# z^)4QFEaki5Na9?E6{*M=iW^`@L0hcq_ySoL3oDzY+qDxnnh0qf3&|?d7B0;c)p>Wh zX-XMnSJkmX!$64x&VZDvpl1-TL9(QzWoEr^Ob4%Jj$Oih#LC=bZn{d)ZHnpq{^ZZu z72LZQXB%%#hK4DO6v|#QV(Nebv9`E%?ys6xWrkuB#TEGcemC#M&2RgcyQlYzv1hl; zmEU^R+w@W_^x-9^P?y_d-V3Zo z=^m?Zq}$6oCEVrXb5Z8SMD$9BxK)e2+%Bs-H{vb2#M&%6R@BL?`<|YnZI}+IIqxfT zr?{MaL%WQreK3dSRlWwf$qY1wSAWNNsQRYO@my~4)Vu`nUh+T|Uh>0 zI#ywO<;M$UT1V>20LvzVfxwkR7FtUH3V}c(Kp8sZwo_6HWeB0K$ht69EX!;MO{?8= z7pMC%_k?oDaZfS(q{}Ea#u-WyXFB29SpuQ9#zq@CO%OrL=qpi**Y?l|5RM^aDVQZQ zuyS-y2tg=jUcH>zfM$h*RrL&&zmB;A_VlBB_Nb@d-R7b1LPtF8K$nB)1FT3iw5s(O zxU;o75^p0wlRYj;;_#qKlv5)~q)K)ndkk#qVu_io9jS&`Ibxm#DRb?^p}gO^M_lc8 zpOIx>&4yR_Idi%jzQ!_t)PB~<_1qlRy!YDOBUZY$Y#f+AJTxghS!+tgoZ}V{xEMrN zG}!>@tco%fq`TV*h%OUZrf_%8NRUORRVx-0#I;NE=JI)()7VYh$$}$@+Gs@f~0qJqu8O>A1 z+u2c?-X2+!rd+-q1fp_-GpM)nMi|jW*bawlwyC8-!4TNe#Y-}XH)kt$xs-4e&E3PJ zLaPb;!R(kXnMdUo=JymW4>P;Fx625w?e4cyN zOs_7Qz~Q)BPHWBUxve!}G$5CAD*0vB?y zr!a)AE1_YhWsS}uSn^OSqS9$D0ppkCa_CU@DLU*`(=cN9gt)-YET=u`!{`O9grpKA zA~rNuTiqg46g08ics6U|Yh)=C);X=Z3pK(fv@8+RBx{!T(k>Lt$r6c3ordlun{nGr zSUu>5b2c-h#v@(R?UYqFVurd1x1_6%C-5D1`OAlgC}%EW|N!~`*7)Q}Qb$gokO zTI6LtM^E}5id*Ik?dpT;nP<=VY0s~BJ_jGM=h>c*#V^jG56ghY>ck_HTB}JKY~i%x zqN1cDJDbZAmh4aqT*%yZoNe?v!hsCZ zS?Gm5B!lq*ZpQ0y++^skrhJ{sh@ECFm17@_lAF?Y=-^chJ8;@pN&&hXQ zuIFwSbdj3qYPFE)$9IKep@d?28a-xPy<=|FXDBXLyA#cDWnE>cAftw|1Y{L}CJ>bt zy|*XSX+A!$FPE6WbuC}_Ww=N{kNxqTETihd7H;%y9|J|j%GeY`oUVg#y8Q0gwG{fGkEu*-*%42 zdIi&?$KYac8t;8h_q_*T64EYlT4*ve^E&alGdXK}_d&B{TMZ!0>2V~hI_0IgW4!lk z%Ra5^%cV~ZH|Q4Ix78>!hh>{@cFZlT>|z(*#+AG*#(A@yV^xKF1WMB+%6FNDm3tpE z-@kAz|Nm+4r@fAIw$3(tDtl`Jb{$KaT3IHgwpdWx8_ zq-m1w5+wnPd*QyE-p2Q7C0EdJ2@(W0N;BDGNRYWv8Dj;&Y|Zo|JBF;tzH{AK=VsU| zC%m#W$vxT|4%z$8mF6|owcr?9g%A#~yUb9MF~(l%DXr0RVtuxnv&vG?+tZA0OEo?3*00 zSb^tIHzdVk`e*C3?;UgHUC-Q4nc28|RbgA@V4v=yyY{`$bJ&ff>)o_h-!vq?#cpls z+%yJ3u=0d62b2BQ&CTV!yFXUn1=! zs!6xgqZ>{V`X(NNggp|ntHVo9awZ?mt2tK-B+{IwbZUOZy_n1y&we+5#oDL25e@%! z;f~ajOH`;5BkTN|>c1X(*#AI{y6|9yPWUBtI*$EiH+ZD^d+i z%4Ru(cC+>%U`LDtBTj@`cZAcY{ie-zc7k^w^BeZojC&J@Kad|b62Nv%c0}3mB(f{v zj4xG?+LI^KT{CF##6-~O=aBRxdhi6t>$(k1R2>=n8LqPa3`aiH13oGY<0y@G!|&uL zve}9K#N1V3XN_?EXSRi!xDXu^1VMl@sK%X$Q(cJIr|_qYw5M5zv1PN^8hIVVFn--3 zY-6_=Y+p}}C*Hy1YtwiHHJEVH={5kJqT!38V z?XkMhxzyM=vY8FFUM0g2ORMGLb~YgWeV*?k@#3CXy? z_x890uhQ+=*vp||LJNvT&=y(+AP|XAc449v3y)lZmuRouxoH&V-g2QD-LSU|-IXo( zjn6iEN8`G8-TAaRxRVq|j3rTl#WBO!Q1{$jalqX)q~$|8>>+Pq4+M-82Yaq|q z_11NmNMife;n4#7J&^RNkG&v$PKflTNS6mC<07}@j*ZLm%o6BPHF`HEVxjh)C95QT z&O{v9ryYrPfa_gNJVHu%h1 z>(z${XPIG+Uz5G*3_h4t7@XVpEH>?}SoH8^dx*P-UVAX2t)z;Iil&F?q$18Ra7{qV$fx;#jWX<0ihc}Xg7wtfN>YY3_|C`F&ZVEV8S&} zLKj=IvLEV1yEOM?SgGi#ExT_wg=dv12)fkWCwQ?WE5Pv zSG|wh9v(HBft504wGi%%}n(M|odY-AC^A;rcZnNciC)@q_@cGwyevEJP z?Y89p&i9{j-p6Z6*Prvq+jZ@GO*6E!&ClweC; z;DT8tU~5Ze>GhC~aB9ybXlIsCx_3w0*6A&0>h|#2emQo$d z7SvLl$tVe@lvtS3D6&puuKVFG32@qEU{@~-T<~I^bXgr}!s2!}8KonHY^)k8veIY) z8_Djrl0dGe<4g{f&6oI?F0yC6K~6rc``FX#K3&dvnOZ+xlbXU4TQy}-?pusyqxOEd zuC6O7{s7r#5ce)pDtah@wrnk0>w6I^wKUPCIy24uJcj?aT9$OqNmr<(Pnp99MG@aiA3 zFKyA}FB$O-7M*ax4|OD}!*l05eoRwuy;1SXjOwlb%#}S7`Wr1qr<)wfNaMOfK%#VH zJi7u!8&1p-naI8I{^t}>#x`d+_BZ03!|H)Mr%7fz=978YJKl_YZ!f!1xrNO>&7Jq$ zK#I#owlM2?`<%!7E{kLU9>Z~wa2I^ObCF7pR}xje7EU-y&S(>jZP(95e^=tH=-#B+AiI%i#T zkZmzAy8JQ{qgQj(@39Txu!2TGuw`Hp4DZ2j67uGw`qxSNxp00PqUY$XL%2Yt4 zHNv<}VPKgRl&+(Y8G08p2xirD?7eIO&0XP!=cn`YT-rOf-sT~CCEXg?+TD$(>8Yft zbQu*U6zr&QDMxh{ecaN8_DnsQ>mqYd$IMZ-o1EwK^)~1B&KX``9d}#L?nI2x_nn8g zI-D~LId(Y5E03M=Y2mD0tgdj zt~_4XeXctF$u-x}!N=SgjgwRo5Im~pFGZXTIDQz9s0w(ZNzR*}P^kC^-sYHOw4A5^ z(cH5`fORQ-Ff&u*_WP{tG`vZs*PZ7GDj({4oebUJ=#l3#EKHpz{65^vZ>IWJ#)^%7 z1@LqH?NQzSsQNkPdH$kauP=}Huk-v>f4cqZYw|SQ)~%VqcX={SKD=}D*`7P|WEGbN zs_E){&}ZMu+HR+p=Wpew{I>jm@vFXXwf%XKO0(-d^{YXBx39c@&iDKN$?yHft@qmx z&-d=%(RASTJj5>tpYE&g5Bl;&K6#*?ocfz9fBy0O_Xq~9y>b==LfM+kV#Qf3kV#c% zFtM!^5-f!>(j-D;ORPYwCb|?4dWT}xSBvt}P;St8l}&E5lqf1J!vIkjBPCiIrp7>| za&17#ijj<#>qvASeD%WKI)L*0{&KqW&16VFTW0C&((&w8$0SbIW+ZOMxJM13k(scL zEV1eIrnFtBvkgOKTK65DxOc^nz5DfTzJKiJOs46%_tIv08B?|mbJ;i_;Mf;SuM266 z^zJ+ry`Y&#V&0wf+82H~IQ?F;mFYe2_`v4V?`MZV#GU$ZUPndnJXW{MbMMbwgUXm3 zd$vHn;n8jqDJHY5k+=mRwA|TCW4{U$uFWVcRn>~iV_~Rq_a)xO|_}x%Q_X-rU@%P zA~`BHQB$z)78?6kU?b*i`FL!(rSmq(XyEiJg=27@ZT!??Q$#Y@b zId*#9@#@3t^#^&a<1o%|rZF$|HB`Be$1>tsJq?+%^cJr7=IaYybUlo(&i?tn=T?Y^ zab0@COPnhCNvXAYaxQMvwBPQ7Ir0(#0vL(Nwrf zV%k9ubg4&p!8wwz$s@hroKYr4a?$iZx(v+2%mPp3_Cyh+Fw&GFgAP6eSOq0QaMH9l zi52Q3NF~YiPV~AO=xk@-iEdqT2N<0&sU?dj1V9s-JbubzP6sC!aEO-ASA7)C2f;~bvs z_xKuef|{41Hk=aMG;#`4xQjQDQe&9O&CcBJ=(|asIZs6#)+zZi+EKplE`N1s|1Wbu zz_!-+f4DjSW_zY`D-X?Stlc~yR5K<9RS~w*G30bWfCOek9smnD`cN4VKopC+fFf;% zM!57VidZo){T8g06<^zF1lct4a6j;uSOVbUUF{}&O_RRNPJ8+aqAi;Zqu9{kVy8Ud zcyFzo@?xe2DV8k)O$=55~ENODB2h7n2Tw%tq1dQ0}OK@aZ(c$1d2 zdf(E~7K!_DnP>TRet%ux_wHx8SAXq)N8fjSpE-Qb8*P;@j>?z8Ag~w3Y2UiQYz?n22aCMOin>2AG%y zWfGJE40LR^RVfJBVbbE=<2cBHd)SxEWAn4KU-jhs@jxC5+zG~2IaVRlt$x9u*)G5w zTlQ*o3~&p>H84SkNgCrOR7s``#JCG9Hp%D)o!zWEWB0}EJHf;b3Q9CV_$Gln5MZN$ zRsriex>Og3BJL5EvyhYd;M?caWZ}3uJM`Sw;HxdG7j^nw)|cDJ!3kCbOiIOx2(+w1 zjvIbzexfy0I^8Vs|@xA#_yjOjYoyQc8nZ|f**HD?9sqgGeOtG@m zkhzy!=gzbxS*LC@53-6}38>?({R2i9kzgplH&Te6N}{Oe9SLwsmHXmmB#N=zmLxR zj{2+ad*4(4+sEvDo1GKScmA#R?SE6&|0ml#=JUnVFLjp#Pkg4p8&32vXUI5t3i#uwu^%r_-L%rs=Y4+WlNwC>u`uHK;?1%ZNKygVk|HIGnrg`u1lH1mHYzPa zm>$JNMsw;u>SOm6`@-Dq_1bep?9PO?+Qz%2c;e0Rr`MX^yd_825_kZR&v2O*aVqK} z#Ij(3#bDQ1nSt+&n-NB{Nq0x{=x8DwV5mti<&adTwHkd%vuiY118|q7qN`ijGsf;M za#WA=;PjU0B+jUMHs$jC>ciDrAA_@)HUmquy3WH+9i1HRZkuPV$4bRc09|i>ww~Xy z3lx^{-non>TCFwZEp`{)gCVZ6Q+$!9Tvr__aW$XxRH%6`^S<;PXHC5hQ}blZnVEAP zQ8%u}SeUf*^7RM1m(}I45T@{D{pG{uXH#(Aj?yy%bxBr54{}ZFrFMw{$(YNi(Jh7_B`UgcbqZ=u6*WE#20d<>HSLG8Y^8)xU7VpcMQ1sLI3fvH4F=lP?2*F@ zf>NTJ*A^kG5GrQm!i|lT4RJKOsETqf2NTqpxn$r)gjwv@6e6vn!OaAnAfTZJ%&n=! zYKrDEHoQ;MGYsetx$kADh#E?vBVgAwW;Gl_N$eccbKckMefXX=V^}fUjoZ(!_v7uf zK01?dwHZm$LLMny+Eh&*D;~{14dfpC%g^;OxmevNI6mL%N$=Z?}TW>ypr_+(*%uyfi7FhQS?SfT`V9pO&jLyU%Xg z3MR1*^_UZQ=lmjj-29yTyw{q&;Ln`HZ82?2j^gsnHvA8IH1W8hOe_>FQ5tk2 zfPGo$BoO^JE>I)sI&`=*3ohCO40GJw*^cfgMK+0d=qvE<%ODX;NPH3`E?x9y*8#zj z?sW{gl4mrWgLKTfS2X*PZ-t|M49xoS^{xyfaU1s9j8yfV7445Sb!SEC9GQ-;&4- zVCm9DM@v2JG15`m9!fmZh-Fy2blMhM9F%lpCmfOSFTs|3Pz`ElqX~lsQ2g}Xl>_+V~w;V@3*7H1(j^KuSJ34lVaKRU0YR!AW-PPUk z*-PKobD!3}KHQHxn1h#`r$=N}d|HfVuFR8YkJ0O#{QyA`kTB6DT^gd~-V;irGyFiQ zsP7Z!m+d1_qm{Gb13l_D*&}n`AZuFjQge*yIG%sp#W0RK0WAdewL$dlr)Qr$LOxsv+k=}n1I|0w5OhzP?onP z%8^{2nnKgsKD^!atc4k}-4)#un2?4T6#|HmYDef*Zs7=&WE(`ZJte2?y1Z;3!o!_o zx7i2Yf97l4`gP&~gFF#^63TLBSSP9V4EiaK@6oCG6UK_S(uhvkg6-3 z%Rq)VrMS~Ty;8>A?FJ{_0Wum`n#6{nHw)ntfL&5Bz!obNU4_k-at=X(bfkpVyzN<> z)sa2VHU@i^s`Kfvs@YS=vN&%si2W+3O=|jbxsm%qGVhjGZxl!Sk_@N7S++!!FO?%A z)V3T71;zKGU8&;x()Y?S%AmG$I&_cX(My#db%dr{e#$rRHCx}9e+c?hT)!1>S1q~8 zi}caP?_>PjqS)TqAp#-*p?OMOQRvJvJ~JPrkcg=+IpRu(bt5Vs&ACK&8bol7OaOGn zs3W|$gvZ9gyDeWhKj&NQeQbrokG939`r*E>f8Y6lneRt`PdHTP=HFX? z_45ON{>?*uA}Y>_euF zsy7gNwe|w3aU?w>RZ?wZ1VA8_7M3Q&1=bJ(+238F;3#LSmN&14SF&uE%WS( zmk5*yPP-)RvQC>z{n5*$p)fVeYm4%>Wa$bvMG=@exK@TJn1hXNepH1FC& z#I=jWnx$r%UZy6v9NeMRs?LOU6N%u$@8k}J0eA5i{-fbKiGLRU`q?YmDF4pN3w}qSPIchcXk9fGFR@@GBVmV z*=)hW?m6oqqCk_5(e%wcVng@R8SDic1ZM}R-r4JU=Q6K&^jbZ^J@Q?DYU{#GeBHTHZn|5~S-D+~uvJk_ z+wZi8zqj|_n z^;Fj7tG&MFKJoS^x8i9w37w;7L`Wn)-dz96)Ag==#I~n^1Ua=8MGCb;~Sy=>>N*vzH5ctz#~*;fh1sYI7@tFq$6T z_l%nRjf&h|=GR^6HHVdRH><+K1Jbe~9?rKNTn5|iD1z>mNXcPhqUTR$9=SC!I zGBViHT{Nt-`7n4JO!FSUT+Ga@i!LpGI%Vy=ee6eohe-1cq@+pl(INlr}R+*S5mY%MAdrhb@$+F z-GUZ;pu&ixGbvHB`;FQ2hY-PV; zQrst(0a|iXdwv)+ILWQm=itzcqewOXSRkWR5$@Grugx zViP+q6>^7xUJ6iB^mV_^iSwSoI*xSnh&TEdWMk%bcFj5GSMT1_TYXS-dw5jzW__@Z z(HS_bV762f7%p_QV?k-1V->N9vC7aXK@fusED)0?7uhbw53MET!F;2*m%rCoQoeC{ zvzeMMFYQA2CZn13IBf_ga;73K$Af1Spj2tvT1) z-bd(2W#3~%syn*@2V!G}8s-ez%4Ve1d1Nc?<@Zd< z7?^h7qY-v^K=}mbos*` zIQP^}ozE|<^z5;@hA(x$+iuZG9iP3=Gs0eyTyHwj1H5Q93|qy%%#KRey?ERH@Xe=l z4CZ{Q-Zhxy>BDHlXjpu=>Ib=uGj(O(a))_jKl1Lu2jAIad7%5?BMIiLy@G}F@w7MG zh&=ne`6}ieH}gwaCyHM`YJc!v^}j!Rr+)Ri@3}0W%=~vq+@guDgLM@Psi;MC!jLs% zflWk}8-yvd7O|Tyzb|FVL+O5OmEK`lsn~njx8a+qr>&Fyyk(U|KF+E==ccDx-fDAL zIs(<4Ep!QzU79+>!>AQ&_4&wI>(LNah!Ar@ zSt+U1o2951`^?sSaS%RZ0S$dxGW6}%u@ zDRp{ZngLe0-`UuGd7XQ?%kp|8IHP1Ck4rYK!A~{tEJvIk`B7t99&9+0e8*G>sHC_8TTbciq9DzNcF&FmO~sTBm#4#RhN`I~ z#2^c75k}e?77emO2myjBD?El#;hr!!v5$XUeem2j-|pT?)T6zGO*|g)nylTTz4zvq z?a%%4YUO(Nge)eY0H}mTNA$=8M<-5_gF`pQW){QU0aFbbSf-a|lEK1U%Mnq&aHo65 znw&-2$4Sow&vEzu*h|ji9rHPy``0`7IUaj1>v3l1eDCALUeA?`!z#itR~D{N5L8Bt zvy|x76>M;qxt1Q~4JF%E*Nf+jGVWrFaveVQ{7rhx7V-p6yFA#|i_6aRVZ9K$=oDSJ z8+O%MtTM%-nd8hEXT9pLb4yR{E~8)vi&2rBy0n1Ii*$*!WcTGy+Yk3V8v*HK)ccGws9nr~QMIED8zw;={Sp?1 z9N4x1!vGaD2!&N7%`i|vQvqzdpe;>{k`*ej)uus!Y9O)$paF=|8KRno0xVNX;4(vk zNT_5-B&i2eL@bh=f_Gd4Z?=)4+u?LgV+mtBcvaKc-5ZWzU*35mbd>>ikvZUM!=s)S z5%qwq+c;yklDrV6*}^6hjzKF;vFhu#mI~{ipKvGNEHWj=_>m9RVaYOLIp!nxH0D%> zru-~vcu)jOJdeW=DpXUF<~FwipLh+0Qn@$p2;XLL%gc*ws2FK4$)W2_?9vF3wi2T0 zGIc`%Wat7aEl2_@Dm3Su97p!t^ZaG^wEJ*9biXpe#d7Q+9zU5|WIzA%%=!7B-2QpJ zi07(3>ehOc*p8BTWUs-=HWR*81R*}roUicUTLr>Zf9H7H{`HvRUB3NtoNuZA zdd|7U+udj!0ebMY1PeO$jO(rpuY0+u=y)EE9#ejD>K>Op{2E&_zkA$oSCsJf^g9LQ ztFWHKWB1jk$-Rsz=jXR$qNdb2X=i)svCiSpGBcMdG`Z$39#&T2N*w}ku zN>>IyD>&Ve7Cz~#x2Y z(2`oPwj{DdEF?@tnhKbppk%378fD7}d1XnkX@w3bT*t(=ZXq%e8oj;@A*rLW$4(S( zC{*T9OsoPytx1Vsqp^#C(t@ERsw6h{z|wHhU2;&c!^SNvaEo|6N z#3;Xca}usbL#;`w*K| zyzhK0DU8hKmxEBddETNmyGoK^KzuuVR-{BmN}b3Tw8$K}@D>ruqVLLV9DhN1N?r~eu z@pDSS+U~%*nL{w9%BzhUH@0E2xKZ*_0^W%4B`%`nj!fX4OnKLqHC;;Ylm|dGwY+soq5mo8?2?y zTH11B$1^0$^NdUt%@R?uA1bRfL7d8<&_irf)}>o3ao)54bgT6}m!n34h462->}iE0Kv}}PvT?I{k3C7Zjb@CAv?i1;Lv3W!lJ+VC z6cJQPFbJTgiUf(UTf~%vrc$*AtAlKhL_?uga+m8FD70DWb3(r~fzSzZ*aM zmrc3u&a~w`^ev4^#j_M#xf#kXe8VTb3%`f@;9GD5J(4GPI5SMaL5yD9-R}_FVr!sH z63RfqwcmhZ1GN-4TN9&h1D=|bJ^3uo>GxDxk1A^y^Ov{BMP%U7-C}wbxSpbN*jUMv zmGrK&1dc&m-`12%Z=X^$JYF&-f8yCGed?;9*G3m?Gmhv$CqnV@HUsikT{!;4s zy7tc}l2ikUfUeFFH7mSs425)7ck+rI&6f^euLyqZKDE|79rrHdT*G1dwG@N)?T}cz z+Eg@v6^s+uVG}Mp@+-38lM-?X(Xc$#^hwgx&(xiZ-ScMZp3fumCAB)l5Pz zBMQt|S!`&N=`I99M0 zx=IT#;%baVj>8aPv5^(FY0T6hhiTE2mB-G_+e#_}=XeJS6EJ$uJgYS}a9SNN&HRh} znJo{bd0w?J?(`;99UMZ>(&~`|gMtigjAj9DC^34xick}gv=vZJ>&}yRY4V~YTLiDP1S%|n%gR!R` zH=pVu*mk!V>Hz1nzV}-96srd>!%dx)FsE|ntWek5=;y&mS$t~Iv+Jnrn)Uv zUdMSJqT0w-=VCIJZpY(B?}Pq+w59V)ieJ$#^uN9xADir~-&yXt^03NEbk8_v8weX_ z8?iAlXgiN)LFmtB({wKTa<}5odwMkK?cICW%VyL)ZQpJ=9epHr-Sl&Q?00+@_#hz} zXNnHE6*F=qFW%uT9NCpCubEfhjEn2m)v6+^)9u=vfu>r>8gx=Lbd3~;Yb#n@tdAZC z(?eHuctU549Y2gOMC!5F-|HpYKo76uZZ~AQI^hQ9d4A7#^5)o2USzkrm-A=f8SxpF z^3&Zj_&js;EzC+Y4FE?#xWD>+*Rb;Io$YDt_i@=@80S0>ukqvVO>@IJmBR6aSE^0^ zGEj4G@#P2gK7B5jTD$v?Uk2vt;Mc!Vm|o}$3O{dtlE1jQU;U`QoPuT4!hA&HzP?yckqIem%M|W zUC^w8!i5wT*e*IL!s-#Hq_(HJ#hlu)ofEm?n4+e-?sb3VYUi9D(O$T3KOZkdxm`w5 zr+V3FTdrc5w-G-?ts-m-cGsh(oXS>+D|0v|G55@0knYkaW>gBEr3Un)*n0S6o_BORWKr zF%82gHkE*FU4?kQ!opfQpB^2){HPhra&YTTuVWrm7XV1NTMo3w%1x}k#*a4m21#r& zlM%hnjikvA3vo1*-nwlai}&i28a91xKxTW$z9AfQ@r004WF-+CiyW-(-0;;% z;ZFn@iE-yurcu{-hq>y$Zai-{_Z@3@-~A|SG-07-Z*3d3O(5sFiD zw+*A$#b&rU+?H*?Me0Je6$oJ?xH=_LLYoR$C;>v)liaVbn^)|^n+JE@i8#84nHP)G zCd&K*1zvOfR&0O$cmMmtKAtZ}- zMjU%N2d9eR1ny?tRT;ou&E<#hXfbuEcDVLYi5p}Upj!>kmij&5n-O~6b5$aT^@9K5 z>&^QTjl{h<9u%c=X9}&~gGQ432?M$NpML;AfCfEZYTj`MvU_*rPv%nw6%-=l0_RG0YWZVTl!3e4gWJ1YcY;?l?g%C4iFA?hA)yvpUM z*rBy9kb1W9@LSL2ZLT^#y~i&<_1Cm^)NyN2lDYn=`glIiQR7kl`n;JRck<8nmA>`L<4k<5xYO;q_BLEPv)RLo&$CmX{mR{Y z&^6p{cLprf)i*K7x!PCP+CI#1ZRcCJ=Wc7T^`Z@sS!c0&jbrS3EN7;C>h}da%_fp_ zhY2s&r+c%WL`7Tyu6<``E4FT<9lsvqbM~&98Fywazl{^V7m&SI%@KS=6iqwQd*9kl zvdvCN8nN#|Gr^AgAh}(=+uSnt@7JvR0P`NruGGV#erC*Z_6*!0bT04W82vN-yWENA ze&zE`9dPrZepxsD^m&iyohmoI!Xyh;AT(`Z$IZTRo=%JDNn8y|U3ll+#1G)c_)68_ z6#~(s)JRB3fmG>*i7nd!)MdyL%aShLyIe2V``o)&!M<*M($2sTn z98GKE&4<5u%^GRn?gHj=L#`5Es(bm35jO?=R@?|C0$X|&BI1!uMm3doXBd6c+NFna z)2sb}1>P=0WH?3#0m|Of8h7{=(vY~v{JJfKYI?K+k3L*+w2vvo+Or#FTR*g7<8GV) z5rCmFF>47x4^cp{FhHfkQCJWGFbD%A%?uODKyonRJh1AKzuDN<`7R} zm_s56VclW{mf&HfEQIZZ1^LnlRulHVs#y8edWVgXLv?vc=hU^RjmICYCh?dCvvuiX z7AY%e;pG%Dh%%0{r$j+vf}JzK*0aLMkh|Ulg7hl}g`fze$pRR{AVZwA%95-bV2#GP zh-5~>ZkFwZ<_>-84k#QVxb_y@i|Zu2)j1%c<&ine2Gh$e({#XPl!7@Vn?WQduFmZB z$`(te7hQucjEhv_+^5-8x53OC!jqughB^BNd%;Dv!s{4j&xTrzJ~AOr8n*qe!F3Nr zo5N1%5kR`Px!SkMfq*(G#_G9d!8WKDrJWUr9rP zf*{c$DFs+i&=r&=1O$c!kdjs@2{pBkY*h)pnr(xE8s%Du#sb=%*a}&IA^@x<3|&Nw z(nN%YjJwo;OMw=KjEP%Ba~xE?0uyYBWYmdn5EBp>0B%IqjEG4}ZdeJztk>np+%&62 zGXUsj0vA#XG`VRL#E6)oHgMH}CAA_3x(wk84=6bGifI{>6EOLS<-h|fL#!xyI1OO2 zF%^gzBg)VS02Bgk1^)H^2dMmJTr?KnvTKis#)oQzLv~soTH*l+ss&7J*|O^30t)Pb zS|eH&6o|xyv3GOqgKAR&(Uj3@bqWH+Nff`sF8skaurfP3+y4_=6c}hi2t!~1hC=}0 z01Hsu3X6zw5;dUFNB~3y33(i$bxPJbW*AeHUULyK@T$AygSxS5N2obypb?4|MnQJa zNJPhkFj_!(r2>dcj9DUV05mWl1%ZqPiUoSj24sfA5>#=43!-8mniu<>?4hG)uW9cO zh7e|ANgnC@IlnnPh+{mWL?Y(Z9`My@xDK%~B#Z(X6h)LV@rJVuFeg$q1qN2X&=+WN?9s zsPZ5o%|JaRdrDR{W(C>+O(*`XzjDVug#vGmr;!R%#2YB_CQE^)Qlwl=X#flkURq3f zBp6g}Z9ENdo!cA$Ktxl30S3S!01XF7fkoYvMv(3RD#4}{EeRS?6kIqUMX&`4QX~XC zN=$?TuZPTmnnSPz1Q^Dy)KC!V^)d8f6)6jr83-TSR3|xR-CtK+b>W(IUUW>xOfTgU zxUM}YOcX>H6vil>pn!BGNkPGa8juOaECf?Tonj!4-?bpE!o8=*PK{RVu{y7|+P`fb z(HVbad%62P^{(n-XRLNQAbH#K#nUPV(jD$;K{0BK0t=|;$oapi-24co)41CwPt(qB zu5lZK2;C#XYHZ<5#=@*T$=LF6=;PxpayHwUUJJ9-dQR)}>Fw*!C(PRW?OAVnG`q8X z1!n_gh7knoYe)#tASnYZrc6QrP%t2XSsFBS6DdVy!2-(CRkT9aDrf^im0r5IrQje) z1fWvb00W?uY)q&GWe7rRPUIp>MgdYzNycU1f*{u%AB_yRB~2dmvZJYK?ndqj+{VHb z(7r%K+@%s~L>FWcCqkGsOMrm}p>i9RE|mf+3IG#TZ49=~a17i8#v~I^Zt@sqLkL9h zgskC-Kq3VI0zhT}Dv?Jd^J+*7!`a(GJ_kqvKJ!!#;VWTrx~bk0h9bofFfQQQMM6t7 zRe*5|MOH!T)SyTR+GwGmu&}U>VZwx^NF6t?Tzu1&yR&_050{mvq(x4=gaMU``FQtN zB&LL@94xdIo0Pd{nc&3Wcy)5|%;%oH0s6YH3N0S+LHe!hk6P4>HsV zGIm!H@B|{zW$%PX$eA9E2jOnR;zE0nahFV4H#sq5&f-z2#1xH1#&knjs3d3!M}ZW@ z354x@I~8+W@&Z%>$*yy}lFCWTC=qz4+@9hIGKSnNj=Hp2qzkU&H#gVt6oH@DA7#A0 z=k|lMM?SZ3>B8Sao|_JPoMs1&6u{6GASq~KI2o%L05m`)f#Cvb4FeV7 z7sNIt18ci8pRZa2w4p-ji50SO+q8QSZwU$XRaFs|2$ihL}NE5I}f=*bIOGOU04b79404%ZMEqT(1Vau>SJP zmMVmc<(p+$ST|b=Cv1KYn-Zu170zMUV=kn2+&OCC3D!xAA7>eLE|@&Y$`#9$}v(46rhGDGc+OT;SG-Y8cKvdbm1 zW9Dy<)2~uaebY163&C_|UgdEn@zX9)1J##Pji~Mf=_x8x>eSdR+bmmZjtXbAmobVl zXDq_3b~a-AO@5+TGL;QbJwL$`f^BU@?&PsKzX=6QrUM>U28)VICbFIn>*xLF6Mxo= zeR%*^-g#|v?{@TZgZmok?G#U&kP-&K3V|Xiuy`g*5P~ioG?gr%5CW+v@G9(MS1F~p zKo(LcmaHXQu!=~_( z+1<9&>gjjOq0s8$)4AJIu~xf*avKzV;)E2uVz>ZIi2PBWL_uLx#@rM1KBe?YVjjn| zt-M2+lbh7D?)>`=K-OCu--}c7L)x@@Osr2C`-hzKRPUvLa-L+tWPv%*4XB>wLJ>SE zHPz8JYb$VhGnJcN_tNFlH|52R;4EFu9i3nHBX**51gu!!mL`aj_V>s@%k)lvwSL_y2JKc`!u(dYKvzAaEZQu8Sxva0X zJnn?pWBQlp%kjq=#XQHy#7cczoD%A2N=^!J1^2Fi7PBYb+@DY_Q^U4monGRsTt_n# zT7`=nqan&e+ZwFlnJBlnXa-~BJh&Ts$m!&uxNJLZ#D;gdcv&+0nv|=YTJn(KuxqYgKVlxrz>T z1*{g|r@l+swI5nym-UlY&FEkA%bu>sL%zGZbjNlj9zT(u{2} zAy5MzZIeJuAzj_VIxrq_^ys z-6EOJxQ$gug$+!#zOK#=Rt~ii(Px}AnGF*U&zJkyrxaSDCr$;`t?fv2U*9&i3zW;x(Z&_J{b2YqY7l$m4dQIY-jz<9N zlNvk&Bmu-VAsGsQq!zBU@>mp=5d|%)3z3jbVYMhm7U6DXHhZ^X2HP zXu9x%Xk?kCv<$UvS}mZTjfx(TRIGWQbMN-e=f(rO3c}T7a+uRspZxVswNmd!sW^$xh=Qtq~^!r2r6c zB9fv=90{2UD6m;WglfYs<{)=;TRR--SND1~ZA`JA`*`)qhk0F-3E#7DKICbC_6fI4 zHJkJ1D24+gP8e|qw@^drmJiyY3$ysPT+=NwV9^rg?OU*wL9%mbb?RQ?F_v|`E!W;m zBRMKDm(a5Se9vCSpO1dKq%Tfurp~yDed$cA>q{Q5c2{ zQ*zzjsx7%dWVs9-5Y=$Rsyh&_;=SuV`_$oW#n}BY57j$?JMV>MPxo$bYjBrUZ8_)r zL|?Pzymatx?B>&%lSOkpyr^jQ!{%0l8my%TwkRuvZ{U9DE zDJ`EB9YYpVl~6ShO1~HDMXt;P-6ssw; zizJw4uxcYh7;$dh6=Rr^I@+<88AdlR;HlZH7RdhWWw5Jrf3X$I^Zj(i6Ll!jc-sa^ zE*m38xg$ef^iDch4V-mA5V2Jdx#W|KOeDc%zbfanAZ}Q3I*0%0s37PzPoegtGpg`wh zi#8K?&{s89x;?a^)@gZ{X)_y(o~wV=M&7i#RCehRZk3>o2mxgPu*&AZ8tyReE@aIv zWMyHpdt|HJho8_c^7t8$ucaNqyf z@#h|Q#Osmce%E>;IzPVp+_j?K_KrFuN7%9CHEe3tkFMSr z#hx;~?jEP3DY47U2t#{3ePC#f()?(i7}9jEdY8^gjB?3hPI;5%TiN6N?h)<#&3s-) zI#UozO>?Yps$nk;km6M~Ziif5XNHg5ie>OA&zCP(IIt~`{S6;_UwwM}ORpb$cCy^6 zj4m#@e3p^%UX`cJ&t~=BpDiY4)$N;p_V8Zo^7`KYxv%}9zTNW0{Lu?PQ-7xJea(w} zx+|CbwRw)rm}7^4kO}g*0y=_0!8N%vhfT`1g@Y^Sf%kqKL*QPw-FG*i zI6-yP19u>7Q1@1Ou$INz9rZ0tbE$@UdCGoWs9QMWtp0Jd&~_PyR?WmQq7HQ{8GJ59 zSJvvGeyBY>g+oR@6^HSA2G7fS&>ENjm6$Bugj(j;FZs}G-lmOs-|ZVT6}{i#c{ zEI8$UeDl4(=eGB8KgH+d(rvevTLD6^zE0JmC0eb=jc6PkciQzBiW&;{r92V4%^)Ed zX$cA}6m~O)3|vE&0|0Vo#b3cAtpV$c?IDl*A9o3t)7gtF&(>J@?q_a)UbXv@b$|7r z?Ir@ul*EVyvW!VAqCA*IyI?E3_>#Y-Lk#Xs$Szz8(jh}yYyyKYNkV`HL9KW+?^xS8 zo7?jOe&kt26*`W}8epYd-S6s6k%Q2A1R9C<@gB{ox_+OoCLb4FRWGb8SKQ0M7wCj# z(7eHTBSx%7YL!W>jy--#2@ST5#26pKvV*Q?+nXt;vC4GT$ScHCGxH)rsl`ub^E&u!f-I_^3TC}RzI5sn4`xXE9l zsmdJZw)IN$eO12~cI4&vui5X_(|!2uBldzce!Tb7%+LQCzfC4iuOMJ9D?uk+W@ZZ;*qPr(pwd%M0K-0th-OKIgVurZRBG5I?9yidqaG ztE7Te=*XaU-sNp2eXjcYzB=~LzxDim<*(f9{H-U)A8~r;bY}1D$v$z0pWUyyCDc6( z^_`#Clx2C1M|prYyS*1GX(%sjb~%M9OO6IfNP{RqAjz5s(v>VRaN&eGH}~vPS9i_4 zSRU%>`gnOte)`(G&$k!vZQ<~|{)=CJeEZ4%C;ic~JV7UJ!xNm?q7VabNLks5=_v%?g2nEW z95S{=2%|mrxOX3`wqy59js?vq=-OOtyNLi-c*Qz#$BoTlZrh}*v6CROPGN0gV~pL% z1ce>LJ>D(ooS4JH=fYy~++WX!!`S(NkCn9$4nx<^Oy}^L&a~DYaHxnpTI4c1iX&#t z;T#;E>%B4SFbA=7z3k;;^)Ii#(z#y_ zI(@DGt?#S0?Rx&Vuls*{z5l)X>)twlzWqG^^TlS}m$KgAUHoqEa>>Lu{upn5-rWjl z5#E{5TVB1`n0%?&UgOihmlqmVIns8my)O<*C}~0H0X4~>szf$zXoj%Bw4?Kt9G5eb zWq7~jI=pv%moqWFGT(l@^Eo@+``s`9<@2a7Ki6pdEe*b-+p#5qJM-T=ZRjfhNO>W~|Nr(P8Mp{0llh@CDXwphPtI%fX@0izO&1RI2`qt$Vr-4? zvk$>(&wRjXe7`Tcf5D{zIyq`@^BWj_;c;|49aV(T!`X*XE*`80e25P@t?Tx-7fjul zf#Xgkcbntxyj0ogY|OU*w0A0(YaSD~lSsQ1;<+sx;#Ab-^)jZcS@IzvdBOuxl@1?x zfySipO0yZ`EUd+Ty<)EHeFuw;WIxBF8rOIJTQsf8y5{m32}d_|vHan8>NL9h^C z#YV^S`^#Oo(OKbj2#4~6Ugp*1=eNhA@%^mp`ttLZcFFqm^MC*U&$aIB+h6DEsv&K9 z-msS+IZqPG^6YOTGEeSSp=<5g}$WzP>)u3!~o&!C-QV{rj5%;25s^y7Ns z{GN|S!$$)hrq6nSId%?%9XF17esEB#B>8}sA4 z=PoWaGmy`E$IE2ujeay%%XZg;vNfL$nRD2AviN@S`}6w0Uax=u{vZFxEB}6b{cqZT z@7(M9UiE3dzvX|-{|Q{fuUEgm?EMXh*|Yb$4BzrIeAX^^<%5jhg6${ULEXc!^iqD) zwTw5Zwb#_>gr=^C*PBZW$gM+GKP#+df4D5?^hUE!EgCD3`uSYE2`EZ@0@ z;3PvT7fyAot})*}o9zU4hMIf~T;rCD@8|Pt4MktI%@mt(lr7a?(K*Gwm)~0bcG(q{ zN7Ke`S-yOKj=zpjXll;w=l%K~>UsThza%VmMkn?dOQi=tu@Hczi4fo!0UoiVr(fIJ zCGO;HZ=vN3I34fIB4Fz>rPfSQJfH|6yKZKmk)S3!q_Ip3Nf+Y4Eki^&n#0(`%`wU? z*ucYns7LB_%)9r{gwj(V$RQKli7n(f+PzJZ=^5V_Crp_HbeS+l&@}>9D56xym@#C6 zu8}tNQ7rsGy^@$EkV_*+UW8=g0Yik7FMz0gf%Y(!KjG`7B>k;?op06Gkj0Ci_`USO zgjBq$(7}7{zrnC^WK5Y9vIYkK{P+KT1H|9}>_G?sfRIH7fzt>ge*Oa8lo)vow%aM$2i6&7)-GezDu`-#j+I z8RM|u9>wr@B-%qz=o8vQ{Vv;jSfE8)BL@xk0$+l}k~YO8LeIRmM!LzXGel&8jLg+Vw{v&1SOqd1PULL=ohDBbXdOliK&EAuQJ_~c5SXY2rP35E0IJ1h ztI*P0sTcu8mIJerh(d)7C`v+vC=3Szju551ZAMV`M3gi{lE_L17KmwDKzg!?mUWEb zDysBhgJyI9sf48y@Cp-=0w$}?qzNt|TxTRS0*a_fAkY^Qq+neDcm#M~9?emtyk9<| zW3kRu&OpWvAVrjza*qr%BrMghu42k4lmrNcC8`P$iwJ$^{%`++l3C}=|LE(E577ybyP@~*KgagpXK8l}q_h|(#{7GUAxlsvLm^<-1ul_UkF z?nLCi>5NKo7q*1Al!x?L{`f8@Q(AcUUf)04U19oBmq(TuYpid_8*m-6v8VPaRLk&} zaFpDzyt%wqV=f;h4ks(p^|kG-bZV)qT&?G1?^=Bw{QNFD=e5M_R6%w0 zBXWo--aDs&Mp^3WNvtLZ7=6|7>|)nC>oNy>-EQk~d(f?lGnQj)g|U)YS01`;m0EGw zy0>LvcI@3792#FHj_yzDH+e+>pmat{9yp@WM209S1bfEzNgo_9{Kmnpum!kvy>mLa%LumRgx1CN#>l}Z?blw5LJ z3M4-WjEKpi5+dX<0l`>g5qm5KU6bdsrh5lOl>*&Sa2r5vB8D&&>sr&qFfBn7sI_}4GUk2mq^C*D;mjKF! zn^Lk7!UC}rt3@tMRS^|Xi3E^hNKlpqWl`Lf28mQ;7!Af0L0;=43%1+JUNliPsfrVHPfbSyBO?dfiPsfvtM}`=G_$cI3}I5wK-z{r}ls?XYUFxGzCW3Rw>jE(bz&yw6HxpUM-L& zT+wuv&DyT)uSP=?r7STTQ)#P5j#M&ocnC6DXu%K>K*cK=Wi_mkpn(I&98g|TAqp5f zBmqkS=E$NW016#+as=L~f#9XU0Fg8R1dt#C$q*s&NNLbCBGe2BhDF7Rts2aP)`AEm z02lxgOF|PO@~|i&4rHRlve`xf6C!7<%mGI@ zFj}nuVF^*9QHF2{07}ANbx<4j zHg1c#PWycSyq*6kVF8UM1OWgLM*{>Ppm7#p0R%jNb_7k1LXT4c+c6FU+yvTAu%H^y zw5p+%Nt6UoAZP#(ny4WG0>Vne1OcQ$q9hRn86H3)q(n0%0S^RIlm!_@L{SLA!$6WF zf&ihF0)fe-nPQ+h9935{JH0Jj7qpsLmc%H_?nkoA7J^kqWxye-^EzS2E*Z#br|?Bg zZ{bO33PGat5L>L+X(!YU$0nZvewiOv!1was|0xUKrWq>eB29(e!H2_Wr^`^YEp}+>fFhK;~ zNs+hZ73|DWhiy6b9q1u8%fDo~;v9cpUNOS;I ztW<;`VObD_C=C#25Rj-6+hgu5{+0-)#ZZggKmPi~|NfWVsF(B-!rH8>wS=%3DwRxR zMq03BMvG*9tIm*N5Gt`$VcZfoCyCO8#bR4M)m=K!khYKKO^xJ@4}JXp&(B}~XlXPo zPyiO)1VL&CA=w}R3m#yj2292Ph(O>1kW(SZT;Oq#qY%q62r@B&vjh^3jy;G)gDN89moxH33 zAm)x}3aFY$jvXpZ|5E)f{RXc-4E4^~tY0dx9tZxp%;^mdSTc)5P*g}^SRG1)gk(0o z17ss3WaTAS3|=e7G-eeowE?m*td?V*z(skx0#9+ohUJl=cjyrtTa?YhmsmTutg1J6 z9*ymnH77oZLfv$cZA=9Fp18hxalY)fyD_!zx?IP(eW<Yl@-r+_z zTE;o!WB8@ld#)ePOT|rBcb;CWdCe!=xPj>I@pkvQwNO}Gk+RtYVU6o=;Jyod2>APm z2rOh`bX*9mh^P<%I}wPTRTL=HJBW})MPS}QLLABC0i+OO)w|1)j+qq zHLKoA8QSW8sK1BG%}RCwz4|iLMr^-B9*eWs=1{d3sJ%nw<=AGAo2l+fbO|A$xFBh6 zrN}sx`d+>@nI3+B&)>DB0HPh@AW|s_ ze8G%ZfI_rej4)Vmp-a>u00IgD3n@)dQ6xfXKp{i~3|%My02T?H9Swj8qyPdG31krU z1sW6tI+9432qFOl2!IO196}Ak6b$Ftwwf9{HGvN)Y++Bh;Hro)i=~jUR-T%DG7s}W zWoy?VJHy8!(| z)NBp_I%Jn1a#{q~FuHbZ;gkJxy(PnO8PwaGJ{D`|mgqevYpFHCL~d6|$II@&OFnNu z9a%X~6%NSorDO3X`LpXKZJoSVABmz4coYsa>+(GDS)innHiq0H;knAg=)xfVzA(jy zp4B6MB;xHc3fSTi9NY6?!bP%t5Yt%UgE;c^Ew2;kI5UxL_WdlXpN5Em_U*V27-(V! z6uh!FrO>FX;Zl7F#D>HkixfhR1w@dsD6&Uj1yE4gQBgoZ?zH-5r*#b!D&6u^SxhU^ z@?_OwIv$X%c|(n+vc&DAdk-a-iUz5sR%DS&$TF$i7MHBgMap2T(%L!CZ|KtD>}o%= zU>|?`vwQtC>l5mVs#4Rb8j?oqhb)P?_?_Qgj_}oRc6wfR@zXIj*9#$rVuq#c7=uA7 z5<$RF6hStS2{4cM=ple$uzCm!EMRgKxEz5x>M;yJ9D-nkB|tS%RX_;T5r&l_X#fF2 zC@=&{06;>55K|)wBO$E-5M>}q=uyD1k7Ng-dM=(t(Hk(7)$$C4pHhZ09nf-isJP%6 zzZe(}a+F1Rrc7;;ook`YSr7SA^J1PyPU*4BkyD1zQY9f$m+d1UeTC=(zEPY3`k zAe#{)U}=Cj_=18BfCPYGh8Bo#2o{=PaML*oGMtiFI3yE|NH&z*%op%|@bn_v*|_bX z;tsLxjC9L2Tv#39nyP8U8+vJ83=7*}cZ@3M%Z4yi5}RIEkJq8hdlm0K!Il8~OY_>6 z#5%Nv;3jNRD|gApy?McemSEeia8;*RN&|tAsv#bWm^knQf50Ut1Y8+YG-I-_>}#?o z9>zD8`ji7C!2=BfazC*_WMsEa!p79hJ_OjX${&k$5IF1sg#?15H42xC22gcaZD#yX@o7q^=aTXdy};C^2=$RO(B1CWR?-Hx!#72IPj9wfrJkCp zk{zv{X@VT4T!Uu=fLASfr!PNGBdvbSb9>u9HLHs8b>pbD^ElqC{-LAOTXj1Fd~G@1 z`Qz)K@+=>${?%#zt$*M@;offBOoRrLX>c+L8u8g7#fQcM)@Uf*w!b`RMG{O0eYsXI zu@*D5taMRbBv~j14CN>S2?(sLYT$+tooPZf00W>*B5asA6AdT=)qx6Tj>2L%0huBw zgb({!iR6*?P*_KsRN*R!Jk#!$Et_wkgsHe~C*>l4bfNa1b}8C%2$91nBt-@QwPH$W z8V}oknY9FV?2p>>dOMS%>2!(ETZ0y%M`QI+WR@|fL0{^H-q529a%Dw$=S^K@&dYJD zC3ar@PK*zTYv(CBWTOEM{TJ!*l=iJz~FE$nZPv|rx-v+hl}d^ahW2d!YATaoxhE58<%?_ zP_6ed(#YKI^PVd?@L3y&a{uGZI=npXJaq}~raSoJ?ONkg#tV8^{;=nF@NB2?c;$62 zFB&h&X-{P|8?+f1nmv%bb`R$>W3C8v4Kf>FW~pSn_1nR%q1$Iv(HwoCB_9nMk6@1H zRfQ)3@&GF=#)Ipl+cB4#jI&i9J>5Onj3u|LR!ykUex+@XR?Buj1@B_K$g`;cpJ(r~x*ECjG8PK|WBPTSMM-V2hviVdv=4D9F9Q{Mlhsg= zNt2Ir`AgQH7WO4V9d~)cRj|iZNWyTO2<3k|*h|A{Z9iMfBpL!tYsdvYk?Y7%yCC3LHibHf6yO})jYMxcvI-0BPQ0>(zt z9iHt&oW&9tHreJ~qi)?{bsUVl`6iFjxgNf7FrISnm+L~Bob_V~hKiASp|_90d@%%D zWX1q6RD@C>#0nH@fR#wau5b76+y7kKw)8mEzLaW2Y> z;vFGQB`Yum;3!4h97$S1L(^4|(HeVv(KMh^oZViJ>hctEPLXF$q!B^ZE`yU{fDyj* zLy79g+P#2=6vbM%B4K2|t^B2W9r~sAk46->!PZ#7HN!#~Ux5n%mQt)pLCTR_D~B>& zGHLl!V+}5iv09`7vONI;ybw(_A{)K53Z#G@79a+pS0jmTw1fz(1d4!KNK$Nx%Lb^X z4#A8`u-G*>KQmss{jm5%*p!~T?mX@}7n0VpvsD7I^|F)wj84ky^s99fKOw6Rk1Iy% zDfU77Hh3R@NLhrmR+*!#;>LJt?BJGsK{DryYp@Fpa#3`LP45BPxtO3yfFAS;q7t)c zF^L5&8Xn09+Xpc-&PLl{tLR2Pee$P{k6Oo&u7$}FB6tYM$U(^jR4_V;2^2ko6$r>G zTfq0fbXw(p`e&MNuh;#dwftaJOM{&kk$#+oeG5P3HlELHZsl-Lf*qV3y;V}rV<=g- z-jrr$R9dyTm$fb?d+VAN%VRScOv7$;p1KcT>JlAZn=V6!W{t+R*%aABfxbe=@&pgh z-g&ZVX}uV;H}v!s_t2mGpUa^z1f%Q1CT#P@doRcMRB#>?`o4Cwtink+A2&foZ}g9{ zx0uc!(?{;bE5^6B}&vtUO|A&;*;cq)X2$eQj#=tW5OPJeF_Mx9)k>ad|oA zl(5oUG$?_a+Tuvn>&p@=>9y+wVn3d%+u6-L%Kc-l;$L?PFwVz5G=3OYJws^YovIn_%N&zE}B^@VA;SDJyoj2g!EK z(sNkyPpvn4SNMe3 z-FE4FyDlD^UkBY?20_C^06_^miUB(SfQyu!Au80c(f!L~o4b?u{_?%P$M*Pk_DSbL zHLJ3shj1VM;nrCNX&2M?r}O>z%xB1sci|ifmon3un^d9x46fWaag|ibX?tm_ zI~kO11-yNuyO*rn~6JnxwG-v(0zo>X>$E z{#X-f1Fv6~kGeeMj9JEb8Xs9z_Q~z4d=_6U(y*$1PrsJ#>phsv-%x&8y&nII?cYDv z%x8zYgH&3#Un8&TVudYeCF4Y18+Q}qlng8-KsXXeL&r1~YiH(ga4A|G+k^CL_t%z( zxad+jrGBULxAXEOqq1w<;wSm=ZJ%kqPH$$qWYjEmp0%BKKTOu}2Jv#h)Eq4Dvqx~~ zM<4fVKvvtTjM_=dcx#L0;-GzpF=dDM8NlbrtV}&S{7DZV<8fo1mVF#qM;S-q)!n&X zUp@KQSoP(IcLe(7IO@~7var|IyeaLs+P+r*)cOTw7J1v0QyS(bHB8i`1Z+DsGD&<% zh7=)vbLv6iqQpRD8?hh*Ye`K_8GAtp79nO6ic^S3O4Qmj)?GL>SwJ{}1nUJ&ED=KW z#`x7<|Mq_V4VZj8^8Q8r<>VJQ%qtz%w#dPz)EV2a=&fyNIxfAe{$s`!oWQbk$ls)$ zFJNkAoO!}5lG2^ zK=!zU5SZGwe{F9Dy1Xy3&%fT4q_5BK%heGrtB4)5q)ym=4zj9G8`vge4j377v2DeN zbfKy`n1FWH01YGwB;{(pp(mJ)90Qkn4)-OfCfoZ=l7cH?&Xd;KnUlAX3Ke7wbj<;` zWypu(wFW}b5I5OO*3xn|6%!6Op7~yvOI>l_6a8-Oq%Cis-MZ>WK!uOsZxEEhDr(vQ* zs<4K0wM)-VQhmTon8g~Uth88bcr_$Dk7$*swWYLqpCfm%XAB&gHApdeGVEfH+M<*m z(Ss%hs>hA&b@tA+_o1csy2bUDPL;OVeOr9;xK(_ryqc1()qhE8MHUdP(AE?X4hus8 z2l@<+(0@QKIHK#IV3Bfma{I<*pLA* z7d=^aK$HO7jZ$B?AzX(bg1Nm;(vRxMCN;88#!f z01{JxxrVD*im&8HVl(!jq&8}l)`$f>fv3cE^+f!pX1Ti-37rCNl5KOfEBJlMptM+MF2rSzQ3|g8n^A% zzm2!3f}!noY#36w`1X9g5B;ol`^e(E~RBDMU3XAL$Fg$}$Q1lhd*?YB<+m205+U6z0 zqWeBi?k=Cw>g4fxiCKE*MgPjypk36m?ByMO*?MADsmsreN4B5i&n31nL+?!Yb`B$m z=z0fTZ9ufVDcOQ0Z7mc0@fE2iEIdMC_sXb zYDNuC;(;txZGnj*g0ZE7Jen8AZR5ASJWt94)`xNQoLgMI)#3eVzna5&FHh&wr^nYH zZ?~5k^QIcD!4ea&><*ss<>JlJgVpsnY7c|fcy<3-<7e`7p=38Hv6Hcc-^0(~Q~j&f zJXjmiSgl9<@o+T*pgO8L$YLvHp6I>s=%V&!5K6A_#Aop_yfbRH65DhWcyJRi+Thr; z(mH(%#{Up#(E+Ri1cp)A_J7{{x3RC@i@tdF<6_x4-chf)yZC#Y@3#k>m5>inkMR&_ zZ3;QC?bN!5ntQ*1d^C5Eb{wTZqPVNAoAJrsxHHqQ^F1HAT6?M)JNIaT3ZhJ&n#`}( zDkuhtD{CqjWbJ5M#L?x+tFnJRrcG|y59!o*4K*M*V|hQU;mz>t>UYuQEfYj4Z|_!7 z6zlCy-^RI~S?(g)@(KB*-o?v4k@k7 zTr#}UfhU{x*f|ZGh9N~FNtKd7Mpvb55v1V$+b zmT1-EY!7+hu;tp49451&a`x&8nkU?SJ)@xzV*ns_V8ft+2z~$t4(|tZSIU^tb|(%P!mCxMndY_gIr%&5wIt8ix5mpRx4zHgE#JMoUCt9;Hm#4> z4?aD8czbyqpFLhydI1}PDHFZ~OXAq-l<)7;e_qqw-6H$5o>6`*VrqI1&)x(gZVYQ4@Nn~Bn8-wcko+%6aa59fZ5gStHrI;ml&n?YE4lmmzZ)(Kzj&WS~hGp zND@+DRV)EQ4G54WS)N;0%L)~44kK9H7f&gxX0)n7GR*;G&&iVYzx@G13%*+rJMNhi zwg^Z0!{BH^pvsT3H@8>GlL_D?=eFxwFLHd3?Z_T$aaXkQrMgT>UoB zd&;W@wXQ`|_YKv?S!#|ob5E8ej7n*4CB0#N!NaxJ6e<}e^loBwCZ%FbF5<>o0Z0$K zj8GyB1UX|cvJ$EN-rzAFTX5ajbB!8mAgcTUn;Ibk-Go` z*y=oyGuBd!C?rUWB9%;N#2R6za=WM`mM|Mjh%A`>v;`n$2L{d3;lwL8QgujR zKnWF5hrWT^9Z$q{{Yg+dSewUsR;`!jgOBTzWVlb;a0eQ}cH7!?z8Q{@HxKXX>A8&4 zW6Cmb_~{)#Gp4gv_lw@Y==HX}+Fu^VZH?=SN~&-N&(>weecSmgAFlcBb6Z|cPjB0H z4fI~OnqPH($=0kg3r~m5;8d+@km26ACUj$$Ty!*}do;&qbjNGB;F0*K&+y~q-R=E} z$KbbB1Tm1rk8Nm}X&WH%<{==F*q!yEFxW!aUT^Q)?z{czz140WEYAxzP^~q-`ON$E zz8h-~>~C;zD0wJlVqCl{+QZ&;B{Mopo}S?$u}53GP2t@RxAX+eWEpasA~($-nbw(E zHKbRmgcjjW4Od;ufK{ofCsE3T8*dt!gYtq}>rRM}jtx|7F3@(dc*N`r3>N3vQ-)u- zE|C_4(zkCtC+?oND$|u;-}6tuj^4pT+7ijz-BRQ)?!R~axukA>D4MMY?V13>T(HNk zNW=HX*o0n#O3+i#vazc)qQ-%M3IZdI*wUbwj0p)9&^pBqj`!rN?$|Aquu>kPq46>} zQomvP{T#pJ`JXa&=3n36f49qNE@2Lqo`&;{cIkbp3q2CUkh+_h_g&qF9j%vTS2dvb z$B@y!B;y zc|UHKr#Jnm8M=JAjpwQ_-i0QW$%$TNNN$zxU~G^>*dv7^5eNnvDw!>z81JsyGFVN4 zEUcYj%ka2!wy8BAd6cW1dBnAtJPmQF7AT?sj#3)yO%iYTw!D;2VA~kRb@{3J`Ez}` z&-m@BUz&MGr^osQHE|$Jl{(IxyZe2`)z;4o<5Vr4mgTgE(=#RF9LH1Dz4U!PV%Xcc z_tkrL_y&0J80ydw!B}tGQW=a#^bQC`{$oK{H@vDFPT*kq}8%?UFkD( zwdhV3ULaW0+=b?cM_%aWrW_q63`?{WOu+m`&sAPC=Uw>5f4N3konHo%cP)Ud#HH;L za?@hc%n>J*iK}(pI<2qPJB^Q&mLObnp|-a1Ooz@pKit_pxz?UXoICW6rEYxQ=9y@l zL(P4tfBcOYDWg6=-nTneO5M|r(j)lcsvp<8@KWL4a!viLa4w$Yo9wN$M%yBHh$7RA zb_EgBa72M}GX}A%Nfc=%O2`7EOMuyf#%T|6wYwU*T8j1Ene~UnO>rY1bN8o=TgKlE zF7of^{9V$1{R8ct+jlRA@3*V&lE5=O#dGlegxnqTX3u#82iLeWxuusa?+-`frCRZ_{KEM1~cY0*++?9T3y~oC0PpDR_T}ZdVkv< z9zw^}uZE63Y&iNa$LsB(z8v|LEi#>1Ulc7pW7l$P6ftmi_J~FX2&`-X!$|?U#W}vW zT&iI0ed=oE9zzCQvjS18(LO_0SXn@#&hFo^ZSh-I$nSHRI085 zOx%6@ono9fg1-IC{dbOgJ>Snib6)1?KgHMY%a=U;srd4BKmXkQ%iF2#>le#Do?kvc zJijin<(=iZ-{%fb6Hi};OX$;aoxaZL(~E-r;<0pJ*5yr)VbZ>xhnI`q#G%OJcgOYd z*iJXPsqW`1KInFybNgD`IGVm|q&cOp!q*wUobg>Al*I=fqgv{5_z3X?4kvk^e1l)U z;(gM_*F#^O{`J^PUC!6RZyUb2_4UA22ml@daWR74zHeL*o4*WgnP>FtLBjS+Wx4`Mdh{+dPMvHS4}82O9b%@~U_-o~s?Q9kQ4d zv2|U&0U9s?<5>{A0NZZ+qy$ls5=)h+sEA}$xtNW}W||>fw#2E<45NG7=j87Ca*q4j zLwHfi$rt}v99yA-PX&;$Gojf%2Wv4RQJU0cy?5@n$rWqD3m}&Km?Xj zlG#Ck;V=#w+qEdBC7X~T#pBLM_Jd-B%!mR~^Ti|5FFAf49zE>hJ92+{+kC!!C2l*n zKk~BJHu@@wzTu7f0|%ZD@Ab#j{qeiCay(AGWqmw#JbtJpR@A~lYvudn_IF=zAIzCr zF8Ag9`S$IP4!&Y!+)ulI>pTr5-YefJ&h6o)ZWr;Ar>7Xb-oF_Uwd|1Z7ZY%;kB{4% zxjoi#>Dtece_Hqk9}g>k<)R$Lk&2|HIJus9oH(ARzf8S7{POI-oILegYW}J<2ebOr zFM&0zlT8A*5tLzo1AO3LE`RUMKfHST5E%DCy#>$n`qJ)l9>+0mlP|Z?9vX{hyH^rV z89wU$b8Y6~7CgIlRXLjmpxhN~tz?YQTK5O#qW!$4Z_)$Rk=--QVgkaL_f=2PE z?b$WspxKmEEz_;5cxjI}MemKlwJ?2fgIt3q)MgVxx}nYY(9UMdtCJ_VVY|jfe!8rc zCa#X0%-QLEyS-QVcs}}!`7VtFyVNo5%KNtP|NVi!JO(4iYAEmYtK>!=9q;SbHZ--> zRwj-%H>}$>dk>0nfG!PWpYFd+qby>?n^{u^swlCQegcg!*#p`&VD$F2ZqH>N_135F z`^0BAH=WP!AM1V>?_D~s!l5bDVz#GlrnRQ^Vdik=T7K3|D+yrqskfF+=O_j#r zR^G`rw63+@v7f!)_dagdw-2xHZj1u{>|(AZ4^*mE#S6DI(xA!~7LW}c(CEn(I)dBOSg`E-mwt1sx7%^Q)tl*z z*tn*1mfk3*cGKnS^z|ySJ)hm1BbJ_PupB$99JQV1@HFdOe7E=CKYjepJ~qET?sLW$ zo{0B6|Jd6F>~%J{!nlmLlV2u|iMQv=<4=$CQRTh7^Lr5yMT-cA_J+ycF~p-KRW{gc zi$N|hUHFUt=vV)jkAP+O_5MCfYUs&q8NGe_%URvmzeOA>aJ(d^<@ej~Z$GzPiue2L zn7yy(zNJUhz1uj&9jjc&>xxBsNsz0|$y+Hm!?$ka&lXe;?G9?^t+ zO?-ZL9mc+Dt#XF`&H2FdvDKCLGo6=%KaKCpSpP6pxaaHp(Ni{tG_-iuXMg(WOfd^w42Y_SF^5Gf;yQ8a*z9RJLfg0C)~C2_O#bXo^KtW z)UNYfw>5nFZJlz*m*xmP9_R#x%-CuqB>i3^}58u|F zbn6$kWe01|MhWv6+y&QMMQrocCJv)_Mo5Krvs*8;sa0C9x-JW3z1y3i%MwZRl-VK6 ztg&Mx+lICl7{cfwo$AF0v9hyTx4G}l)C(p?g=)>m>v$c@!>4aweOf;EEKm)tMOT8Y8MJIbO`{hK8er%W zfz6T*J^T69YQ>Nc?~>9r#-6WkKHk1Q+_@~P?bsI2Dn{YjVu=UI?Gl&lmv>WK^UYV^ zo_kevmuIMA8aMX+&GyH(|1plQW9wU=kH35~+{V3iuCZ0~_54-Y9+|Om@};1s<}dW; zruQn=;84xigA(bk(Fa$As#u`%hYPF{Dnkdx0(b;G-q+S>#Ob*Mj9#O2_fM~g6Hg$< za|JcS{J&?%-vKeQYjAEqOB+@o_^i;vrmZz~vBbk2OBd&|Ap(Nu^|(6wy~n|QbW;~h z9`2T&V-&VADI+iwM)|cfAIZ+W;tk}G$2MN%F0No`N{Xi(4Xe}n_1cjYW$h}H**emV z`QpoUs2Dv`t8TP-zl5hj}})bNJ0?(}&NdWqKWPdyMu9>+$J)_Y|?Y&J;V4%W}OeFSoHNUQ zzJ#u;R-`W$%bV6U%X6ukO6nAiD255q9zm_;hk1L2-4+$t*V&ijVgKdz>rY?3_2Yhh zjHll1jKBzEJB<%Bu^^Y&CF5j8upxu9;(`r{dyJOQp}4u5 ze%*d?`)c-r&H7=KCgAo6QK$i-bTN|BVDHid10W6n0RoGzp^a2pG;qxVIz+7`ytIG- zK!MOAjRG*b@YtAS!OomtPv@Vllv!XqBWKsna4N~6O*7B7u4(#otb#QaZQ9!@XjiB} zJlx9G+*DraQcBq>F|)j2G#}|OL`RtBz36U26JsyzhgBG88zT=Ow&DtPltJ@$QtDF4 zrCI`LQB6f4R7+qDC90}p9|CRXODz$+=hngd8Xm`2?Bg8Y++%j-%$novx{br_^UV}r z+s}O)=Dh%%$D5wlnqot>q0;DcRCKDksSi|dw1(@x07y}@0S#7zY<7IlW=k1%Ugr{) z3L~Z8RSGegR@KF~qoZ_o?f|<+M6&C~xpcZgx#|A2w@|Y(!M(|ts?D3ty1a|`pm}`x z({A6sW1&_fv> zatMG_we;2_>oe=ldb9IBCiK3w{+Mj{`7s}lqt09Q>60C|)!U8laY1R*PjZEeu5khJ zXwvJt9-j|3lu(MpacfQ7>u-MgssHNFKRah~z3TbO-myKD_#%l(V38Ap$6=U!>o z`A z|M9IqQyPA=r$2pL9?vqdqpzQDx1V0e-+YL<;=CiXeSRqG!}V|IUvIq(ldWm$M0PKBr_V<8$X9KK{qsvJZLt_jb-nQ`NMyA<9$| z-Rn}C8oOHO6s#tfRBD*DyN0$tx5PVto&LK|HLS~fxE}8lt&Z23vQuI=>&V_`Jr^3# zmtoVc)izOrlc=K8)ZQ2)H5a|Z4hCQgJ63)Ut<^A}qvpff?ZHd0<2$vB_g}Dely~#~ zn}1QvO1a+ZW7ZHS&YCmdP6g~|h{h+2{JZP?sHYG2cJF`wby+q} z0AP`Pb^X%+^oPH6?hct&Ay;b-iWuG?EC@5yID&A}FujMezJFf+3!mDDPx0n@_jn@q z=YQpkq;WazWu5=>-8y^UZ}mO*W8?2$_n#I}7QFsve){{?jZR0#-X_1#bV|_p@wWY9 zwd$#B(r?15SZ1Dm>theNC&9RzSo8n-A3nXlxht{{MO?@*2LUbXC~by?MmSQCVg!Qj zi`ZlPXkAff7qSWyFBTMo3U&cK=8`z5m|!IE4FNI9O2BXrTTx8!$RUCa4n*Nf*o7f9 zMK2&JBV^!$hC>SMR8%Y@5HKq?w4=`CWV4{{w!W5mD~IP;yz+X=iHk6)-ZP;Ovo5*q zU{y$W&SklDTvcuG=0pI?3jk(YmF?5Inw8xX9GlUk1Jp+B83HAC+HLiSEj2Upp6YE! zSfNBG?d*wbb0!m%Ky`qXS_aAhqoL|c8lpfNmS`gnfm1%as12`m9$L1gcE6tYy8PF= zA;X`(wez=sJmR^v{@-7nf2Ng(zdsvumH`2`M@6_ME{FhH(taarA+XU^leBDAFlUq6 zDoiQDXcyJq@%7Y_GH&`STx`LaZ|3Lm7oR@!^7#h(+ZTeo3bp+e<#FZ~7tVGN+2jz< zJX_G(R1UJ^y_P1OZ?Ei}A?ho~=vA~qGbQ4yUfOyH`@m0@T%b)hqN|vNt5BtGB6RCy zT7+3j+GefywLJJ1c~9!AWm^H++sfO}RiUxyN>g9mVviTC5@bUcEL^U3 zdr1riLBJHY5}SAzkP|U+D-ThEB>+S~M1Y0^ArnF@B&!1Eu-dFdR)8`DBtnZMWR&S> zRS*VU7}H#nIG1{6J<-#ut$GfRjLPovVBdFf6}cD>cHtFgRRZa@?`OsBBMPA&QKvJQ zD)K%vDuOCIAY~&ch;GC51~>$X<*<$gm{cU(J6gU zIM)d$LtY0UEv-@^PB@AaBryG*(aooWnp5S!kOo^Y&mDLf}?=v*oNYB}$J`$F2<%)RdTG zJ;ASXS|5GA<2uLYb=!_r72sQgcfWo}rgN1#V8`pILpRZjyaZnA(Nb_T=LB%$5Jm;p zUW?>-TCd)>E77KTEDoxn&_HENH8gYt=*D!lbjlrkXnESa5-ui7L`FC zgvzA=$7Y8Fb+`~iLiHsS;!yhdEB({|+EYKBm6Ud_b6a+)2_dDP!~_;B%n;BDh=!g> zJH=!;g+h`eNsS>&NY3|s@N(UDdD$J$EP|<51*TQTU2iZ2ELb2z4hAhrD3X%_AfUDJ zW(pWXw(Y`ggoY&*cL9Nhr6di6En7(emh5ED?61r56+DO8C06aR;MnNI)ZA{lwM@kY zICm(4oOa@QCcizPFWNwT?BDPHbeegP+6Ky@=ZL)XeH zGQ>vUN@aa=ke4zU`l``$&3fLkpD4(5D^M;6)tHi%IJ8+)EpDMlDcife}{c=Ba*}8tK`-q%2zrGnhz&B@Wmk+?pPV6OFq)n;kbQLSSXpV3KVJ z(jz{?gG06vum}^zX`cn)NP-BRB7@ah%L*HoO1(gr6gC-Wd5|r6?9O=x9`<>@e}#{; zyqxHmw>N(tsZoE6l|i2PzuQuz;K z*@uAfHg4zDy|cTbx36x<16KO$8{2+pcNdm7&gJG>-@H>icKGu8%F@u)wv^4VI-(Y> zF!fy^CwZKl?>#dH(cBd@8k7QR&&^uY$`Nld6L;@Wmmx! zQVdv8a@QNjf$>IUxnn*L4z1he!3T9k8(Wq3n8#0av~_e((&`vUia)4zK3-)EV=i8| zwni>sb&6BX^R;0Iv96_2*9X4lyo7&VPV;&Cybg~?yU5W7>tqBFWFSLXGpR%s)F8!3 zKm%a|wi#3kO@sgwv`L_fK)5tg5+o=jc0^+iB&vkKqJi3o?bqk&Qss! zy-$67wcSovHqFc3{%)L8dG1!|x69L-A^6sBPDelX`J6j7sdCzf=aWUPM_Tl>Xj_v* zl`xVuCBygVByGeMJnhM3DkPSu0k+ge>KH{ty6I*ZTa!y#Onvt^T`zXG^x7Y>EynJM zaU74tv=VIkwIb55BTRH{^kAA@8W0-wT6Znkg*7#ZVMahQ!p4lbHZHT;H0N4lkTfa+ zZb!w4PiBAdm|AU%-=XG{fZDAJt22d<(ujSCUP_)xC7tf$a#V{QV0F!&t^DKkGW@lY zN~yYTb90*ewf3W%yPwh#YwuFvvim3i4`CCMjkOU}a~dmqwa1KVL00b~(V;Bt>7L?Q ziYmPeH$x!BraUoYvS1&B@u0v@)^_C@1opwxss7k@SkK%($C2Qm$!8;%ugBN@bM|ZF z-=E*1huyGcXsXVlZEAbstlN#AmK#kI6!NTMrP;s^vRpBX8BDX$31xsOr;3xND~XBn zyCZ1w_fySHtSlo(`zF`gW>KGWwy?F=x)Qm-(zKJt<3{4LfJtecK&#nGuo8gAc~+9H zRl74T5^ANLb!#G@_ezQ}wp(wCi4FPJhaZyjzI;BP|Lj@JY8ef%+-0Vqubss=y^fJPx1pbUU5qNPg%fGT1H(4!I|5m=z$pe2ZeFd*X+%F5}f zUW7+(ctD|}FfCwA1z<)*3>Z-)LIgxOjX)tnlw|<1RLa%8DH#!+5NQGsSf ztnqTQEt^eTQ-?=*adQD2OuBSTQJaYf${=C-b3aAgy<;H^it<=MQ;pC>2e5h% z5JW8L5M~Vwny*0@sB)pfDONJ)ArP~}w!)zYfiiTA^D5^uN_E6p?2+PpGf z%GtbCK~`EVYTk4QYC|=Qbuc@yZ-g{?m)Kl}yifb}t3Ug^Eec!=V(6ajoaol*L;^v8 zh9(e#_q`+_d+r6cYav=QZAGYNdnXba0w+dl6)WAP8(Ks#BNa2LpwJ9@awiH>l(Iw{ zJ;@MQ6j^A?kt5hzMg*lG1;|<%F%=*XtB7O-ERwW<$Rmi9MFC2PmSEIS4aho408uTP zNCF#W!}BPuCJRP81u1uJcYRnrcj8Wd2bL5FQM$5U2Sc(oA_`ZJ&zmn%$)++@8Vb7$ zBROo_Y_kPXGajQw3T(|DZv5$HpvZ5Q94x4T2#VQlOt{7g4Qz`Az=*ho8&8a`oV`Zr zDnrRIEGQvm6mAT>DwHr3W9%k~%-jdsEX??5aLjSDtuv14QpnVP%ks19LK&Rro)2DV zKLgI&SHE;|$UUBYOT9U=fo;(wl~%Wl+{};Vw)t0;()Aj7+f0kTRgTV$vh#MHnfE*P z>*T}6x`#T6G|_$4%KgHi+6>$GCdE~(4p)<%^e~U^qM1%qEbBH#1q`Z+$mNb}EFcd7 zTplP!kg}z3;R#XLZg*YPn`DQr&|! z!)7(kDzAi-lJgE*iLP0-T)WoU*+v{=#BI{ZS}K5AS_@6lyw)uUDmv7Kkw7bjUqUn+ zP%BMMWqCC%F(|CD;H|JrW;;{p;%(oi?4}e#Z1^n&8!7<;GS|jpQcUeV8zv!}XtsQt z_IZA*C=eRACjo0s8*ArUI531*bmz{FxhtXBJ*=<+Z(x-kRMcEvT!fOe(A^nP9U*1W z);LlXaf~a+*qzW)0Xt`Fi3l<}Yw(ISxeZn+nt$Z#c7~m;5nYDXt$VNxHop$QRmJPiUHjV1ZDmFk_H}kdRswJu}s6eGPgfU^5 zmQqwzR3}bj>A~}=8w}$ zx}0<79w=A^Y^{}=i97RDUh_IuXf2r4a?jis&6gUSGu(08Fq(d0>X`e{$j%_J7w$VJ zt0Ijg>0;T@+^eT@2~WeOhP^HQgJR2i4ifU_Z^*jD=zH>K!@%Jl*-h zLb}kr#M%G-zal=rzqqXJ^MC%mZlgm1{?A|dg(Ti!j2Lz~LA7jCxS9Ybp6eh?LmGAq ztxUCy3~yyen^C4!5yg#0X(9lH6jVir0lEdwd6nDp0WC0+D-39n2t->7R9c`?EoF3| zRPTilge0Vx8j6M8&PN*tv6B(2s@oyU;2yQf&M}Bou}Bp6xOxe~ST#q2rdrShVLKB8?AzYCG$~mJ?RHj}nm={kA+jMNqM(cbP*peoB6ib`PE-k}m zu_p+b$XpLNy^%$Jli4)3d5k{ST+17kneI;9Qa;wXMBzT}9HoOMVXwVM=Dzm6B0ABe zp@w_&DA{LkE6KKKnqlcq5UTl{R=X%ug-E+4HlV>i1eUf8FW9YXnumF_yV(G!ZMOc= z&_e&s^S_7JpxQ>vyY=TuY-tA$HsM)=T^U-KI-`_BR@)#fGY*&nuvv$u3}{KM<&CMN z1dN$VBTFm*X1JP6m6!@cm<_Hfpjrr^6{J$tg4s);jgVQegH@2;{D}`A*B`QSioSpA z^dMV5emBjedDL^B#_^zcBu)(xkOK&LndftMRx>LARiiQ_cm~i&KmfgH7;Fzgu*WG2 zI6PbK{j)##U;J_RzyEXi#r<^BDd%tj^omT>RCdjf(*mMK7^DB}-T$jXbPP`7 z2u3>P5Wc0nRdzKUknI9?!iRvH0EWN{Q@|QA31xyvby3wUi{OMY6O&n?$$5nq(k>NW zNLFzxygK=M*#LnBNpVDy{a{5%k&=UDSNRFqD0;}E`o3!MmTYF$Du0u+#(G;VCMeBz z+i5~<+!8m`+=l|zr3LLJgQ@JI#d)nz#;O?_x{Bn&5u>1a*3_;QHe?9Fof)C2#5VIS zk6vrMwqaCA=GjZOt#$P5fCV|{Q*4>@l5^}a>FPu1z`cqCvMy?n*IwDHRTu}KgNJ<{ z>5n=NdA;MbsW%}q!DmyOy88{WxfO#w)9-peHm7(LM5Ctk-eI12a>OB_{a7VBq*R7e z6>INP|0PbbUS{}l4klr*+7;0I$Z5%ykGvU5Ug*a}OgQ?5=1X}C8ykDeoTXaFr zP?eJ|n81X41%ld`-}4X{)r{JQZ+HK}GW_OGtK7qUn#=ohMec68S5F`AXK7Y5BM3j) zHz4wwO9)!3R=HN(FIq2g%9>0J5$lXmGqlb`E(O?~)&96K&d&qh7El^0CxX|aO{B)K zN&c^e|0Q6mA&L|LE-=s~1e@p)40ss3iHL~??8tx(>OnKV8TJBPh3pHb)B|u7unx~~ z09+gnWL4VnuHs`J20KNAaVe-NcZNF!?tIGKz2f3@&u+QHGUG|pox{VFvma;1v4(Ld z{+h>M#2pe1pUJwmT)c!KnV1%G{v-B(QS;}91kZ$x=*_I(5AgwLJCZtygxmB2s3QT4 z7y|)-*~e#pZ{xVm^T?3MFVBaw!uU1C>CUHK_`1}1e|AYMi(g#xVd zDSk(ktSN3p`i}3511=Tc5AVtMlj2xYZ(_Tqb{WPQZgiA8pGk;2*6bkJsIVm-+Sh0-+QlVJF1UhZj47imLc0cSCAV6iZ|_UkK9hCFL0*W{c*kTNu;Zk zSK$2n6fHwtU$B&1-w7;U|6Em6A8}_XP`uY-=du@LJ~OmV?YIk}u@Pe8vnrY}YP?ZO z8xo+Qi{x;(S|mJnx6@u6y2GoSDaS0wR;?+CIlmH<>CwZ(#j4iLk<>arxx9V#()rMv zKLF}H-q({I3p~jecM0j`1Ed?`O9J(Ou5wOV`(FZ`T z4@C_!?aPfkI7T*X(Q+uJAke~PoF3X)dpEoh$}y+xn-Hz$NUDhjq(%~z|Arc(57B5T zB*lk>swQ+(la#=UVR7-pG+eh}ix1<&c$fp~77DWDmVx~v_@u1rAxGk+9r5lc@J)aj zCN&^2VVHi{5kRKAXt7PAPC%Anh-PAX+VI=MY45^+=fmHk{rZk7@mroAY(yBS0_esT zV^B0HY}p!WnZtcf_nw!QH)1yd8emPljbM`~01ANg6^WHJV+KSZqAh_7!=hLuIZ?{j zCWc)K182Ax@ud)o7rE6+*#+&(|Q41Ed=$avfv4}QG zFkvdU(=ijySP=;)!E{)|b<~;m)iP7=!|-~^^m?g^kS)}EPQl|f_m%hDpNl_oP3FVp zDwP*n={J2J6w_;EY+O{64kTjtSekUdI=9Ye-jZ1Jg?k-++6dl*>E?Xw5ocSZ`gZqm zc15pBnTTF)W^AVf>i+Hdt31SKIko>IxwLun99pR)Ef=m`1N^HMTy(WY?WB z>Q!`Ah0}oymzs5P^C!`ibnGrrGP~3YXSf*maT>FGbzQVtOjDxNoG{SM5Qn6Q+aZAn zF%2^i3A+9v%*F%XwzN>m-arJQ=6dI@VVN+^*V|5+q?M7jll78idi0v>!!^5t^^l9M zn$v7qmdsii2%YY{XnP=^X2!rlA^hRa>F=30?9c>qCNd057H8O?CEmb{^mXk3oTa$?DcaHg^;#@!{LV55se^ zIiH_wzpvnc1{(S#5MNhc25h-o5aa@UHisK&wDB6l3>CapazGkR(Lp#^5sXZLg2;w8 zqawiY3Ag|Yk|-?%5{0J8W=clItu)Oo$!xXKrx9PNI6LW*O-WbhF_o)TSTWWWdt50g zHjxZxMaYgtlnY@sy7TAgwwnPm^;+fDF9OKY@wnh5I7|7~?xoSf!^8}wIBY{<8L9%5 z(T1gQgRTr300RJ{>;j>Iv_aPZ(rhdOCo9f0Z1Q$$%jv;>y~=h&#nCv9)dlX&Xeu~RD1eF z-EZ{CL*3P_F%jMO*5u1{b1#vvedFM9(vg82-Y4v_XW!OoFH}}-*S-0^3c^7c!UUaN zflvQy?+?4{@Ou8O?8dLS=QBan5)RfE&0a@;Y_I%hZRc-#=zR=<-}?Jw{al zxrXIoy4hf=qpU?qLT@~7?nY!2gu3$)EMzswP8(EW>1{4kk3bOxx|62?(0XR+EHsFR z^$lxSLm6Tk-ith_SI3ZPEN)s2d_GQYKtToKL60DjG)NP?mDNNT8UPJ^wtYI^Ctrf1 z4se*l@I)P^CiQOhAt@l0C3T`6P*Do;)rNkk{aAqL4MG%+1%~yTbXgZ+t|=#-38MoQ zPbEhIyu;LMcK#ZU+FGtw1J@b}a9xM@VArg~{I@OnLUkyAjW90z{hL?sWX$Ojwk_B^ z4up4c6UD81i0u!AbS~e!+%27=0OKA3}Z

    s(f|;#WJ3;#dwT#7J@c3-Yd{BBm}&1!p;heGJjAso1t1n@%}ej*&6%I#>+4hhe0G>$#BGM< zZ@9ng0lai6z79Td-yY&**&q6Smmig(`%q}te8seh^kgSv$h?QP`VGIVwmfT(`F?f< z{`mc$b>3>oOp!nUDi58N5}^@`S79kF-W0(J8~%Pi`Z6mf=*a z@;T07s68C>Dh6%X)fi~*(L9i_m@b?!(G?PKRJ^%vLiB)Xl?ie{hU#Ku%Ax~p45TN> zpy_7j3bFOI^Dh9Nh{zOx1@bB;p$-L7P?!6orn|W;y;8*?Ig3NG%3a&vrH=jdPi~%w zNgal$I>}SyG7lih8y*gy%N21_kzUT9RFPxlQ?c%{LCMou{LLhxD_U!7q?091{)+M4 zrZXCo2i-&=)9*sjxB5qkzkIC!jj@0XP_K-3pT%OJA}aJ->X1G#>p)v)gPm}i4ZzKC zXDyL|xAJ{B6ktLpXOu7k1!8)VsY(z~MJjfF#gWmARuPR!mhx^;&S%lAZMZF7Nm>$C`C`9oot1x4@fDFHhr72ZT9q%sjKc!n~~=HAm>D{Tq!gU52KNJ z>S4CUb-W!s`s<%@12jC=cH8SxO$)Xv3t~;XR%m!V_HoN=fJ&f7QGi6@wGj^ zE~@yn|1vC|4+Fo@pRcZfW^_a~f>oiBsI5X_-v?7cuguY_8Y6{1L*GnF1f~(7QWb_J zGVgQhS-7n>a}+h2?oZ;#7(k_Afa+Du+q`iwRKg0&^06>9=Dfx&5z@<@X7Y~B!z$5A z7d#HKZA%Httvj2XM<4F2&|;b>7lcq~Z2D3V4FThw`qJs;2n1cGBst&TOo7_V+B);m9 z{>JJZ3V!s?uMWPt8lS!XuI*F()9d$r`Aj_f>JQsLTFrn;4P2===`YBH9X=Gg#Dw6? zty?+O5bg6qf^&fe07Wo{7Qs959OWb~Jh8t|UDly<`Idqv+fY;V`AvB;ZHze@x~NOh zPg68dMHrNbqV0TZrWl1Wc9+vj+UnvObg_@B5F0G*?XV1!ZhOs`*Y2Fya8Lz^!f22r7_F&@xIqlwl>iu|@z;odUbG6+m99&E&%LuBOtIoO!L4S9H(Z51pCA z*z@UnvbX8ml^xikMeNK>J@dk8?@R8J?;rJbBC&UhvvQw7$&HzJ$tu@sRY$<=#T;lI zQb=I7eP?7r^@7IUeeaw95ahq#{-zE;w{I~0#NEOEc~?_u5f@0Iue4M^tHO-(X=_4E zY;hHU_1&v4HKLp+cj~&O#5lFXmNha9ItRB8lWgeIy-eNiv*s|o&z{MgL^xH}yP$Mt zM30$Y9z_zvh1=Qq(oM2M=XQpM)ZKNqZ*y*<33wV;-}_XkTg#GRk6+D}b(d{w4^k0+ z4cEp+QR|Z{gXS6JECezESKgoL)&Wr$4WE+m%FtB3Cu#(f7Jbj5FM8dT+(#yp9lIWC zT`frmg#;!sWzF%myjL)7{zuGjrA~LW`AzD%e5Coq^YcIDXWzPh_*ZuyIGW;+8SENdbt!je1pIg}vKz$$r4gONMU{UxUCT z=yB*Vt>p!D?kVdA`SoG^j`^<}b8fHK{`bctgh{Y}`ts+%+UDv~FHD;<$0=CDo2zr@ zuPIJnf;T5t&uh2@ix+A|n@+BZ>#m0Kc!Yvh+1UiV2mscKAjfG-$VyNRimbSQb<7DL zGD@?Gkj9X)xsJRpd*!l??4=ufRi;Q222k}c9a5FWfsQTRhQs7F?l7{46q{^qrhbmy zgRKX+vGUf5UF0(j>szecn6uXrZ|KIPbQf>(GYxk27VDS{ZK1*WaJ}H}XW{S@vtkY;xii$j!lbFjZ(2 zHDLqPLMa!^Yn?EIhgA&jyndVE9346`(%Eh$j2&)AxPS~g?ASR)^z3A~gc=Uv;UqRi zhSTmvR3?GX36elyb9!o+#bajCI#nmPUj*yMDFdA)?WA&`X136jv^+#}%c?@2A|J zG!6>J;tgc3?wq%)XD*A94Ycq<_jEpNbsQ+4Flh!Jfa7~fk zfftK!yAK)hrm$EV=UAQDJ_2{k7yB4SQc#RMwdHo)(MDmFCDA%+NI*xmn05!+um~N{ z1++0RgzK)jK)BY@6kPx|ATTh7q#nb&ScX}_!Hdfc99{PI*$#V?n8=#o`MwTID)O{D zx7f*L(cO98pU-EMLe4SGF|UfOuLt)!Mxf<}dvBeKklc^0%V;oJzxflM5xZ?Y&dQwP zdST+;mQ&cA2am1-fVq(rtKdA$d5C$&UOdOzU=@FT-|?=1qajJ;KrMAdp{5dK+v2_j z%LOm>wlx7eXF>;qrMdG1Fl7yS!l;2QBvc}X0Swr~`G80$>*H^7VH(JB<`NrXWt79L zhO`o~!Bj{w!PHrxtL%abo-USMM0=?zUs5>{!}i!N9U3}ATPTcr+DX#p*rw`lYIXOU z{4~%-RTSiw#lYYRGGF&V?7Si0V?1h~#2uDHCt*8Bo0NQnh zYD1a>cO+WE7O;BOIX<fTD&GG<$I6Q{##cuk3=}pX^uhT4J zuxT8AD1BlBj<9JMLRJXXEWRqT;#i1Bj$-J52J-qAZ{;fQSzpXV99a74$9M2=)V~K# z${E6xgv2AmedWHu$Lg;hB~1%UVGl3Pm5t(*!$I&`m^$(ZeH_%~RRS)T6A(fjHiep# zcZveEl?X-Q8|)c-5oEqNWg41Ml4_aolv+aBG7K4%+l|+)*dATqq;DxRf^)R5qL<|e z+G05GE@JDxnArew_81)%TXGc4Mncz1?y)mPl#Pc;iA8Y&E`~gk# z*)3u?>9%6FYqu_%fP@B}u)ryoCbS*_7684>178EmX06o#E|i#sb(FmVH!wpM;|dqoV1a;r>HZA60!;h3<`J8iTX!l^-iLEJyW_EOIUZK5 zD{-~h%IygEkE~md(`%2CX6}mv_nby8z;W4f*{~@W#(L*+rqSFXCv5)=EKTssuHRl< zf?nNG0`6Ceo?A`z!hDYq(8Z`47T4;O%#%JH$K}RIHKK83!Y*bEg}D*E-^tl1mK>JA z7VMU|N62{kXJqm$^^vRA&bimwQ_qXfwzO3jKl^_r{$G}iP5!^@0Y)89n=rEzWpucQUck8GN*O*7wJ}(1e@!ZRX?JUx8C-0^yN#n zpX*ltpy4;8`eaYcS;Dd7i+i8p%dho+iI=l@7g`^b;E@zxmv8FIIRTi#6RZPf%<^^` zk%KhzjL+0R512R6^2OpNB#)Oz;|`m@LVjyhMV=BqyYg3I;)3bQnGD6Q_q+&QEu*^~>zu{_|`8z`{3g zj={_5<-7ZW_m9UpzMj~~mwrEXjK1u<_Wa$SLFM`Rim5xOZt#6;9aq7CV;Gy!=H$IL z;4$-=#IN>mIOB@%r6F77@(Nf@&Be)@sS&#Auxx!43c;e4YH`h&Hdd$D;C_w@`z3E) zq?LErxG4!yyYsLz%^;3-zJWBkW+DJc&>VY`@7Cg)zb4q3>RAaU0WHL%TMq z>2|C#mIZ*+LfyuECNwunQVuW}+r1${t5HurNm;AG_m)FWCA&k9FTHAFv2{d$oS9+{ zl{u=hT3cpa-`;G;n$G}H$E0!xr7*Dhj>v@9p((C94R;)M?gfu%s$@(DjiQf-=gyy1 zXJ5agJB{sbYagxK*P=leRrJLFDz9$a24!3(Ciozdd)BUKKa3|4_Fcx_i%y z_cqU{=ljLC?NqngT}gP%7u{B+Ms}Ccy|R6oOfN*aBWv)8?AEoU5vcl6WUkvkg#I}D z?<#Gcj(-1C>*v?qmf(sS`w7i{TzTW(Gea-?amF&rUeCN-!o|-@A`eu&Y z$5Q8Z4Z>7smxE&{M>2f5h^61tKZ`HNA0s+$ji(P^KHPu$+j)HbT5GN^pUZbYrFZ6jg1Tt@Q>e@e|n8;a~~dS|2XkdBz~fNH?F-0`cnJHvRzGN($O_yO&G#=q=dIi6g6FZ1`xBbT^HaT90ZRqB?Ob!D7MCwx92n?_Gsgx^5`N9&;ZBEKhq&SF_5XloIw%FHS}iD$%Bd+scSLb;diUiX0>ilr4OKomC1 z0lZ2}0l-6<$&QlpcctI;_Q%`yKlJTvN2?+>0kj3f`S1aDL`(q@7!U;j5J-_oy5Jon z3ndd|Dh*56Y$md`A&9AP0WR8Sq6#cZsbdx(QW!CWl*>?%76}xD2w_nGkR}3?sR2j< z5Fr2q2^5G3p+S>YXqLnoR}i9N5NO(|c{(Q)u2?&KzHrF_+@?d`J0F60)cT>X@g;nY z%bxn` z?zb9B&oKlmcjj$&pZm^CaLQtsp3j*5dgTXv-}O+Ob-~Gxe!maydHcb8_YPstcY#UD zN%hLBljXjmkk^ez$F`I;J72++u5fd>V(ND1Sljrd!x~FkhTfV{bY5N@&_b5pdNPg5 z>A2#0Z`vJ45pq0V*85YxyaX(gLt_4TiCc zg;F;!ACKODaXwvR*4fQH&tGL{d~&}I(pwg-oJ)o{5f-{_@7}h18ZJ7it-`I13%cM& zG!xjW!DUU#EUTrHXYcPJ_PC&43}?HNVM6lsLQsJaK>$U_iEijzh#Lg}5vA0S!h2_Z z6di~4TwYz&?T42zPr;LqPn8moI2NSUNFzkGKoq1!K+r@Xkf_Z|LrQ_e)FeO*5Rf4P z0JjKI5CA|x84Z~LU5*S02!bz+KtvN1O%Y>qFaQxOH3kYf<1Gv0C8NPOk*16gQT3M6 z4jR@cSKPBkU!dfba;%XhCdzWQ+&SN&h@SgwKp6p!`aeZS?qXoR=n1FUGboaLqQs8sZO?RZzVavr>Ut$vEBkcJ z2iI+RwYl1!y6@KBj{Y0zv%MNNTSTDwY4CLV=Ea{5inDL`4?pUuv8LLjdhGjDPstph zp_tL;hI4hSx^9j1mPDz1O@=66?#B00WfL+L;+&P zAOIx>Bty~yg=GVof(8tLhy|coyU{`>54@G4OKJkbCQ@_+j0(^K5`yLJL@@7}CZR9c?(E^9373r4x3fzqzyRacfMbOm`x2y@$2m(nu^z)O)zbJx#a$w zd0pvyzP-=9bVa#XD&1yh4J@$UaIZq6YKP2fe|8*n`YjET)Eh3YfESBq6-mIg*D1ma zD8|mQZ_9q_!Ckl|t6pCC7w^q_-^N|Y>=HFK>5P&bUSXdM*haC`v3EB+!E?&)Eb^++ zinHCG(TZsK{4B7*oWERF`fb;_$n&pjx|_BQ3)T3@HiV`5E-Xw#sm?=Cv?8!HSYyqk z)TktpO;q%h6M!B?cd$t#58h2wJrYMCo*~Kh7EG?D|CQ6G5IjlASsY+r2TFy3p z8O8vCh|67nyI)7(qk*Rk8}689&qpN;QVz10ftKQ=Z>viwzH z86&mnYx#ra1y@@m^``e~A*JBNvEP`3HI52(T3(6(ez@}C&F|;AvpNd%7-d`V2*~i{ zq3RBK(uKAX5kJY^2@x;@frA+h8WJEnUT6(<^MEU<(7k{V@Sxyie=_in)j$V!gf|H+ zfTj3GunRCW+oqp@vQPmd`!U1Ba^FS7_>`S@$OJ`UbXq!|8mGt!t`bQgqoGiOng9?K zfgyw?l&OIP7b!zSO^OsLAV3HU0}6s>2w4yiF^d8S05Bi`00tmJ!2keg5MTgA$3%=o z1Rx**EP(}uDF`hn000`GAg1ZCg)k8c6aWMeE)g+ssJ$lqffZi`e@FvmrYZnRcKIW5qPFtEnPWunp^@5lrGxy@0)n z#8C=)fki41sE3p}Z@)P||ddzb{{A?&7*x ze;+vf-fVSW*g$0`pRhu~CeAs%BynnJbMBik1qN$=$R!14%`rvD5#q*FT8Zj>^z)vl z!{NO7(bE@AkXhI!HEx^dVG9vE9jd;ZrhKK5Xhd~Q)qy*@_Y>R>pi@A=)&()wS2X?NB3liV+M2iFF^()VxXza&43{qok_ z+Ein3jjt>I+m-#E|A+V7^uo=%Tjy?bZsMHl#DuUPQe~Gerp-RQ7DxO(J?C9qhg($9t39rxVkAZp5a!oUhJLb7ls!Dq1Z;) z5^fc8q^amG=xzAa@?Am$T#?%n?)a+VxL{UMc~$jkrqQwyT!lV2ipoEB_^{&_;3kEc z(rCIVAwxkR5-33_Fn7#0I%?5ELc~l0Xaax$AO%KPV9NmlM7gDAK?49v6bk?V0Uop`t0Cj!Uq zrjmyX5r|TA4&2UuErb@jr*y2@g-N{G@ii}(6lYLXn5D<=~ipYrqOkW1KW4& zd-*cP6VD0?-Ebpuli3z@K1>!V@F2*63CpdI6vRfd?UDQJPtpVhtj8{_l0ZVq<=$5V zN9`vqgkv2jYYccfNndy4@oCU{d!su?PWk8R$R~ad9lNz!-AuWSrhW1WwK!dUVq+zc=ZT^SnUCABwb zn|~3I(k}syz|PJK(B$u0d?3+<%Bfs$ntMza&0@0!E|%(p4z&!Q$U2WN;;FL#DSTA% zRb!KcBqS1KKnRQ=1ptH@p$JFH zfr$d1`mtpHFguq1|Hz{o>7PtcP5iiBN(Aqmo7GFp=~M+nn9 zT)Jmd1gl_pb>6oD>R+;5B6;?+I0ojB!_d=_Ab}}C4w-FC8Ajnu83qx#HQ+k+t~b#< zq0U(oT)aHCG#H;gFW;$~6*ZVo1_m%w-o5EGAzBneZRsRSXHaBzz^rWa@rE4oHj#%< zKmM=|6>8h;#^fno8Xmq(KZk5HwZ|;*E~McKd*6o2;t;e7 zz~$ggsG~u2VoF=q54$K-`KrB&v#GV~1@-0N9~;~5R(%NmgFlyJI$d3$TbC~9zeOK0 za`=7sADdO`-*I0)dK>-f*!zLodVn(gXX&e*t6jvoWzcjiG$a7;BY!=sVP5k7r_a|f z3)iRA=s0c|rki6#$rvJoJR@)D8V}G3uQ7}dz(l3qaF-9oW3F!YNc zfE|FY8;i`m!pZSoAVo6ZH^JYa+PCPA3BkZP>a=VMv)A*R$NQx}pL8HV#b>|9dV3C^ zR{y`2Jx{XP&cSApWk|vZOb`YUB9bXIQ5a%c#xjJo8Bm)EXhegeSx8)Qxi}&b0#-1A zK>-Gs00;&Iz~LYUC8uF^7J)Y;BO=Icf`qIECIzuUo2tx03q3{!5)rnB!X~0CY8e#9+@Rq? zb-33F8_Ko<1YTlJu8;aNMXOYx$%5ng+C zOqLN*8iXGGb>|ie?KpmYt$*{RUw8Voje~_Y8Qt8d{;9Mv{cfBKpBCTitxTQU>A70$ z&k3Uzxim^ovwHXH<kcQ@}3de-kg zTSI@DhMX|~bkD%HSLw%=hbJ{9Nv$O==0~xs8@2}`VWRi4D2wG|^YpiL|H;dpRk*DF z`A3u?)QQRnois6n>cd?JKkOyUmtJ45HAt+nxWR0EG@R*QPuC*m#5F5tI>a}3F@e9ycDqaPNO za6;ycAIx>&hkp@wP>#L3Ouk@z!WZnZ&slaf!kK$9(ctYA((ET~PLn@8?VB9);@$>h zaZjFx#BP~DEX)MM#S{jHx9m3@XAc^n%FI697xi3@Pf*rNEUrrXXktze=EZ*Z=(MG# zVX(8KiNi*QVH%g(kp%|)BnE95l)qP6U*h|w4fbvI*g-d$ z27Ga(8b)=s=*ODge=BH|?f&z(IN!j|J%T@l{`!o)dcV80+`QPeZFr|PXFrqrA7j4g zK-+!iKHVt~?GJKd?AOM7(7#Rk+j)L_HIctvo`1j8Uv5_+|NWufwy`$P{UPj--c+ov z6s)HWQN6VF7?#7N_f4~v6z+_tZS6bAuQ^T8oP@G@%(D_m;ayo_&uDUI#WChKo263WDzA2PSX`<-v(0T8c$;J*z8l<(gi2 z$ElQe_Of})7UFt!_a-yu$YjwwC+O>+EkB}|jKby#LuSJ9bo&N^=ClIrMX3xzuDmmM78z^;x8{Io_{ zt&y*}T(wVnRJHhNk0j=Uo;!GD_t3{`&ze~wMIlb50%vK4ZdEC6`j`vAj?(s}vDdVb zzcgf>{_ldXEPg_9u2@&JJ@1%zPL=jgX5U13>qDDcsJgGPw^JkS*tv6UX@iH&-!_|g zUQ2tMH=bbVqp=w(E<0r3pY89@#opfXH>+~Gx?kR@{okv5HBW8)O?0Z~GS+R-L#Y$h z`*i<5(|TqtzSJ%GFfjSmZZ5`{gv;IzkV+*G1XKn~a~TO{!U+$se6RU1RaN_)>plBL zIFM>C--Y~UctFmv`EYVkJW)l!3l`Bpv_6=>zIc3`ga#o9HZID;T!uJmfr^8|-+#NK zJtc^1jcs0Q16K7;Y+kwD+8@>Oe;a(LMCv}shL}ONDB_j%n8|1{LxBOe5SS@RF$|cI zvCQ@wYa(D^K?1-C0f3nl#z4>rfCFTS&^Un21w;Sc3H?Jpf`*7^-F|iUP$h;;megAi!02OA6 z>_9B3y-{FVnJ5H!>PSbYC>lW56baIaOa$%6Ov1(hWW0OPG`hFFLN6PXbd%mhPYIvk z!Mp;|S$6j;mcEJ{1fi?L#`Bo@lToEDf#Q98G+1CpKx9SnV^7J15?zCY)~!a@aoewN zWzt*jam{)nBR_xW569_k{>`?27RNdYF~8m5haymY(#+4~{xKwCoxxkPjVfy=1G`{4 z34D8I=v>&}R6d$Mu6CnWYrmRfVg2P^%09g zZv#wWM2bk!3|Igtx8*L^LF1pqLKQVCizk(rfKpdy1QK?QaY0W8*pV#MJR?K|p3 z%+BqhhQ+DwN$gN0AIHthrE9R))B?!!U*fqt~d`2#V5(bvU#9qR!tm6~f6}Y>1=Do9q1{PwNt>22~=(XxOCq zucq}sZK|uN_+`x*1M?OApxP+C^o z#WcuuPhX_uSvHHP%HH>oRx2Xq7maN4(kuhJMyPmLFD3Ek%mq+{pon1VX1Xy8)N1k< z(LCxONtCHKDTpAJ&goL;FQe~1^YgrZ{5+T(QhWfc24kgU;=a^*&0{&I)<^4+tB*X? z%*%f4?UC298QFQogLBXJjn_W)-v%B=*f7cvvC3Vwudjm2K9lfJw!yVUB@$Ue0iu?e zAQ>WFB&dPtAp>|@83YWZY~vv-Y@@@MG5`uGjRYvF8%$${yQ zz2&_xqp7`e4ehI-vjA>j#zHdd+c>wX#wF) zhnB3^u);;J>YY^$0v*CDcm)o%fM{6pu*v@HPA}|1N1pX;C^c|I*PdRNwzAAfxs8Q^ zMp5*DV1g+kMHt0xigF7>s9=*5GmalDrwjyn0|#?Wr(IesNwMv;kg-EM z!+zscCu!mm@(%rfF#82;w0|!CGmhU{U>`4)-`7Je-njU83UQ$f{r-x7mR)$gYy5xV zmM;D{pp>5X`STpz*&p%-v&uYrKe6Wy-(T+gnFPB3!Ts&hzp(zoG?;doXGgl<=KS%m zO*ek~uh!%7A9tR|!D)Gm2gLvHUH#v){;x3Jw3VRLFvKteUgkuE=%J@8jziB4M z4&mg5QsYLU=cLi$w2q@_DDqR%DaKF`A!cTyCW6rBVPhm@X72O$cP9U&+Je3n{YWy; z{VS%0;+6AQ|M2np>4Aa&)Nur@n9eA&?yOG|ua*eLG*>Zs%#lwlH8Nv9FYbBE=l9RwaNZAl zUx-y(tg%)bEMY4X2#iQTT2NZ;Ls{}lbWn(LVJ1nL8lJRVu%)0jaC+b+Dugmfj2O0C zcPLTkfQ(KmkQmk;xg$g-Q8%hpnq7HYrCTFg#jHqnMLP6sH$Y7;AO~z+@0pl$&wpLbxr}@hvgnv@XAW?{Z3M+dEn0 zy({w}@G(_dLR*Ze9!7Xg&8HXIR!>cqZWRuH0>;pTdy05#@AQ_Ls{kd2wsO&WTl1RV zmfix1=t6X9^bHX?{y2{*^_kM&Q`e}668~l!=lQ*q*sS`e8-7gwmLU;;(9dS>we3~z zC&zuk*OhAMx$|wE2PStZ_Ws(N2~->F*0l0GdG^Xfe?Pl?i1(A+FQ5ACcVD0T^J;6L z>C>ARvw!jYyiDooRyW&JYhh=|*5pINge7gX_n~SYNy_I3jfSGQC<-w@Qrhs%aZ36I z^IgKv8o%>}be=Rg{GU-?aF|tgnxwp)KcTMFGtJ$4BerV@OA9{bDxT^q1tx!4er00BTo;s?z zt9t7bR*^MtX_ywiRC{k~Ez-%F!oKv-{Zscw>KN?mf8pc>zCIX@%$0gTh{Z9503fEA zuo6jRvke}~(ga>HG8l9ncu?5!Q#W;ZJrQ}Kk{52XNA@={4z^>y|91A+X#eYY`q3ky zJ+s&Nd?arGW|2IzsM2sv2%FogST!^pE;5M}rdSCmk5pPjJ#a)-9o~EM*r+1QBZ5ky zIg}7uB%}@-7i!~nmk3chR5k2a2rdG&0Cw2cuGk7@tvOjSp_jA+8b`s_Xlv7uHZL3q zFiKuHmmLuTMX$ih@p!WE_vm}pQUfPk+y$OoKjqG;hQYLZ@hfb3gLHfimZ3{h)MbR` zx3VT2de{-dtr;RKJ%L%?r!{L))fiD>q)w~*Bk~j*{en-iVdiOO1n<8!4{xqi?BPw9 zXKc3rG8UEna`XRxV;Rv>@1eZUPDd()t~VcNdT_Vzc%Iwo4CaxS$=mR`G@WV)tCE%r zm8In^hqwD%M^mr&-0yX#qSA~%Y3EJ7jT%&0R3u_A@gLEA+MQopC9bB9sm<@My^@gD ze_)2x{o|Py$DjDH(+nM3OZvm+|NQ#b|Nd9a@Pp^Ouk%GH9en@pX7jq7-M%fRU)o;A zP5V)yt9sX~FKXvDzpj2ev{ApwJ+`Y}uY^IkbYF&}+)IN{yv6s2;1a)l9;c-s%r-Qn zK&IZ!LnIvEFZq`lzC8`!DE`vZ(J?;#%FC~h;a?r>PfLr1O?Z9K|3z5(xVrmE(lFWL zMno*Pn?RW5oE`Qi|9aH_YngVl(3fQ8@fW`zMTr0F8-KCHz`i--YD$s=38#&n30>Vm z@9w3e-~E+t&!Z2m?I~iTbm$T{YGnF=ET; z%|LYJW?T8VoB!cU?~}tikOqL*N@r9<7U2~ivVu{*6ypLsB6PT=+65y3lh#0j552@M z*Lec+AN}Jh$CrycyUHFL z5&~dz282wX6MGb42v)S*0vJizWKuXL0-L!Gty`R3PN@{FG{h8CJJQ{|!DCKgS!b1Z zy$-I9zyzs$#4E4a*%95BJ(`Pq?#E@b0XwIra7BWi;|)4XiH?^{G-CHMT#=)n%7&0K zUJ42{@LktgV%N#);j6kwJfO_=wN{7>#VpS0J2*I)CS*u7 z9hrLokQGWRwj$1LoC!JRX2r4wUYL?DgjlmvhG8d4>RuM|{tqg)s~63crUK@r&38xJ z)a!{ptxC!55JShFuOII6w$Kvi8eGCFrI)@j^}EY)$lbVZ&2Sa}toKUI|398@NI#1C z_byf@-)V0ux#G}v*UX8kQjri|sK~pUbGhrpoy1C49S%f8@~?zC9i9 zb{dBiewb2h#`2E%IGRpJH~*=^1s?6Ep-w`A<_kii7t#vn^Yg2_*2ntfN}G#PL7@55 zPw~*j4*b^p`zEhu{_M513N2%1I~%Pzc^gMokM%zD2Cb#qa~!%H+9+de)8U6ohYV>= zl@~44tW0Ct>M3x~=hYw7ZU@$ydF!%w4?P>_Svz|1!*%-Ky%x_8w9aZ5Bdi!3MNAA3 zqF8{KG80^aN0bg%3IoVa2m%OJFZ0WnXB1IRnw+uoyc3=KWW>C#{x1BJbM~9(Sm9!#ch$rzzAEq7FIh8Vl1H~ zyvh01?wZA7h8PoR!UV2>^8{1rC=WZE@FDoZeIJ3mq82`((+*JcmXY+`*i63}+r}PK z(o04$lmh3bx#iQ#Dl~RS;t)^0J)EflY-%b!54!RUk@S7j%7dxu{?d3E`MiP3c*lA% zaBRsy3D*D){4X$!B9i=P%WZ+KrkbcSDpv;Atbgq2v9)r+`3FH6@kcX$-pBvi#SC87 ze84)Ve(_z~@b@o;M1ocLrr#H~@1ApU{;!+gPw$Vq=Iol>W0N&L>3cigA4##cDV4f4 zsPc(^GJnH_(2PaV;QSSQ^QZ{9#yk5I7O&(=b7i@)8)T&F!HaNu;PP#e-)P{xs@~$K zUzgcDE+ruY$ThyM^wFTp{_Nq;>2-lZ^LvO5(*pB~;;l#*P!oIkbNqhmb*(o?4g*Nm zX3Rv`Oyk7>V7J;;mjxEy$+Pkv@CeD*F+{eHbhyfCmJ5uh{# zf&i>QDYl?kAOaKFQq{w`_I( zxSz|%_9fWKwX5xYe|d2C)IE>b$x833D8rG)-IKB^lWojnDv(M{ER3`)nXqL(5N!g2L zYQLMt#@NYB@nXht0!TvwDZY=ZxYbcEhP; z|8{ccD*&eV&K1NvvwxowF@N5=Q6Y_1EB|@pFT?o17=1_e3V2H~ao;uj%JL_mzt{1g zFynbu)=AAWMj7+}{iOrt7r>Jx|DU_}s^h=>-LLxdU;m|l`uorK`@_tUTWo&MjCOw# zzQSyae|tgkW^!m|>NPsGxAU2G{*(55o2}BHKF%IFLN|H;c?O+No1cz(UViCzp=Bgp zLq5Kb%&C?WR;OHF^NEx#w+k-7!@ULsifDp=tM+>eVE*mQy-j~V(0v&$2G7T}yngNU zKhu37i1CvMmi|7Wi;IKz3kVE1H*UlfgXkOOKab7FSQaOhPIMBYTFEl*uExEEEMkaW z^=TgeEXTSrqbAZQj(x)wbv})Q52-XQ9EMW0tToSkRTX}(xu@A*yuZXweKS-V-P@HE zE=}WJW$FLUxjS;Bc&*l}dB@l6-7Z3>KKuHA{}DJK%5$^%0*HW}PO+uk8lzUpNz+=B zj%LT(%2xXF-&x{cbT6N&&=qivwb{EVZ*-;mynz4RYoV}UJGA!Ece&X0bc?&NretQW zKYhGXKC}HZJ8%T;Xp}K%a)~R_aRalZhqsUmj*c^^*)C=T<)oHWhk_s*keoo}HlN~1 zOaGFxfHhmk!_(2%zhaH+)jyvWq`Q`neAjA0Ul;;RBApLezTcOdTg=p*+N|%Itv{RG z<9sbMMc4lNpH*2l?Ui-o61Jvf80bKNCl`r%<_Z z>af56Dfyp%V|^7rQ{EjuKlcjU+OUUWz7U&duy;@@7qK2Hy1NfrbyaZ(~AS4v$i zou_wxmPRL*Q~29qSnl7eR~o*l`~hd(E&pA{UrWqcT1wS^$)|(mL{cE)jQM9#CG#24 z=;}R9^_*xQMRp=h#&pgHe(5+#WY~Z9Q`S{gBCg!G{6F+~Qe-f?*#EAXKR!DbJ!%5h z56VZfhOg_$m4h!FU9!byzyE&b;i;A+Ia%huqFD9btK7am3L0Hp*(|I6EJGyw7zK>|jAR1?rb1xh96!n_R=q=yNj8#9`z zi*T*pFvJxb>R+74K8*ZJft-xcbM(Tu!dCXTI#zhmY)Q_S4Dl_h-&N znA_pWjil#xDHr7!i(I#D(D7Z7>Mc~p+{2=#$?IZX;}Al9P61(Am`y1K=)tIMolcRO z+c4bOY}=Dd+T4?OxElk`oo@gEi?khWRa{GZhZQR_pd_&10s;`UAisc9i>~GYvN9fd z6|TTWMAyIAs{`EouHGkG#k-9Abd@QKAe%PE@uYp3jNv|*d(SWw^@cUYatA-2g)weV z&VlUN%mtoGj2&=bTG0hNafVpLfKcuMF};=(=YlA>V>PqBYJlGF<(R``h-xbpTSsOZ z=W1wvbEGzv&%Qut>Yfk(bbA>&x|WeE`rIVMN;j@4SSlsh+p`EfIQ${Z`}P3GB@;0d z8*(>w{~M8%Pzaz6L*xPVYFzyvAN}1XTG7_mL&o0LH_gY2+^G1N@eFR#`;^FC>3&-iKdtmeffto8l2Him8* zx9pm{Gge!5(Q4B@In@rWg5KQCvmcLL$MeLeHF7t0?X`RHqH_LuEkAE}y#C++@BaS( zy!Zd)bG;%%alrzkAvOje#Ha*l!+`4*77!0Rk-C8Xt`i0lIvZ!iD15o+0Y~ea7D|c)nO?cs#_G2o`Wt?ei6v2J+WiGFgI6No@ z(Q#@(^0tUYVWv-&#pU58+p!r( z*p9*r1zlK@)>@DlC>E>?P>?_?@T^IfXg9VIwzsby2UBk`RpiIKYcs{&Kv&eQ@3F<_mzhnkR{Y}NX`!evyKSBe9#`H1o9J_{|Gloa0x<@p(h3!S z7w%h`PhQWTU!MOdk|#>bN89QyY11D&e}~lso|pdOJln}%FO>^yUNc$4b}fC%ZnGkMix)B-gjeOkX;{+F@1P<+YseW=b>5! z1c?#H;lF3_ly?ZPbg%Lvy1}cP^Zmz!fkB9s!~w1(X?@x{-+5Z~dYdrLb&e`}ll%m_-7e>Fi7)%i$(}=3d|LI%AG3Wao_~m5k((%CN=lNhDnJ4Q z1Tdf^6GTEJ@nD$J)df{dK!8IPWViqzbm3B2nVRu*TmH~B9Y00tHYkraL2jEiP}cuw z4mc_*dMBhGvd8VlE7ONLRvuFXT~|-?nTp5!;bxx2-u=cSJf~Qr(N8(Z@?dGQrn@w} zpK7tpJ!UeETj-bsY@}lZGj+;41W;hd(4mE0fiEQHUYZseaO_SDe>EWd$~un>gEM$N z`F$jL4(Hw>Y~U&*K<2bjL15(PPe@Y&Xz>D`zzwcYz(j6Hr@2?_EUcqLJP$Rg=maLY z4O>ybGuWMjIupa{;^wQ#^?Yg^Fs&t9*yYvob1R7mOv`=t++EP(-l1Q`YtH>0f4<9E zSNo>F*S=kU&DPU?_U_uWZQC^6^n7KiB+pSp8C+Tj0SPQEME~@{->zOseRp!JI2)cBPIt_fwEOi9Yq?Taff1`|531=a50Mrd zHi3+B2TDN{*|qIY$&~Xi1Hc|ViawE_WSNpSv*{K2qZG09Z)^G|h9RpG6#wory<&zaQ48#Bd0c~NY6>UjL z4&k--ixyf-9KTq;CU+hq(}&c&R9}=$CgB%lTS@{^Ma(1sLV*x6LWzk5S`bJ|AJRqK zfwD*lKqeSV0vR`*WA-}Q8Jx1xb=+c_6_E6$bJ1-3=U$)JoZDARE5RyXF-Ol)7Vh($ zB?I2}=&{cD=DTy)!R8Z}r|p@O8S1$9I{6svecsM4!s!}x9mXC(jtO-h=h4EwP?y5f zlU6%q>v#9h)N8J5t|ksph9=qoaP5q{*Q}C)rK5AErgTIpQKt^oQEhAXWh_F44G*96 z3Lbt};2BMHU{@XsjwG}Uccg+6(Ss^XCwlLS43uS73RUpN1=*sR7uI&W{Rq3LnM=wr z#$6$FBsGS{;fJRiCo;~PCM=8zvXi+*NeA`2(j`J+r@<8SQ1SxPPUmP-5Fg(1-nrXA zJ*F{_+R(7hZQoyE=To}6c)n#mvD58kGL@+I4rIs)0K*PTm4tE-??k)mpY#%c9*A9OWsAj zNwuB<^FgryKbzAAl1U{GYa}(12Sq#Kw{#P;_&sO4){j+p;56oN%=^TC^r&->k{ zuT+L&3ud8$MazJEp5S6(62BJiz_!8O&@uAZ$ImLDfjjmJ(#AA}uLRfd7u2n-_ThII z^tZeV@nt8~-CvCK1W+OFXs6_RQVZOc{rS?Tjzw58S%{n7?8$m*bg=Pz^T`mokD*Gl zjz%cgWsWx&G-t!gA}0~GmRaFHeW`~o|LlixcER)BW2@f{9#daM-6lrpg%1e8#R)KJ zFwEYdh$AU0rB21o#ODV8q z13o0Uv4X8_!}t!5x8C>7{mC;BxZ`VwpSJzW#uV%$zJs4yo;Yyh%C@aAcgHCfDbGuW z@7Xz~PojYw710=+1`1Lb2o=wO6R|)EG=-ekP!WnNyC>w# z=na_wRSxlSvpa>WGLGlbm?zlD2B%q)J4S}ZHKt2Qd1Bnx9e}K*#ojYbzZXCn2^7X@ ziq1IT(rW5*ay$a(OhB{0MxS@be(L=~uW|3qkA6hEggP+#w+;83 z|0B-y)uMH8{-<&8Vy$vD=C?(^Tln6Ut5zHTewoi7r|}lVGNIM%XS(i3+n=5O>lfw~ z4(H>Ku406E*w%l;_0!2^@_y+*alg#|@IuTl_gH?CZMM=yySMGKiS(K;M`-kK z*8RV+D(J5Ab;__DGh;T3j)CdzI`-E%q1XKJ3!%^#?ta7h!F3PsdOsyGhYvbL@B-rv z_CnnJLu}slK*Kzfd~dJIt|$6xNcBmdIT0iZ*q+Q zkqu<3+aDOukpgg|%Wqi>oWUno{1D&*gyt>lJfKO+(td73_?+|k>KLz|kd&;-ti0pWa`K72hBDf4w{RB)1d_{ipSj4psXrs~&NGK2j7Tpf?;h@qn5zGQgJ? zc%^5Hd*KD_r|v!CbjCyy_sMTIB<2vR^001AL% zVnhIn6@{+fKbef5Z!J@q(-WY_xIxuiiq(E|k{!e2m%OJCsAYvG!2;b$lM%oVi~=vhZ9JjxOfT zjJJ)ajhtBLaa@ksE@5*pxvHGij6I9Qw11CX#;eiIa07%UTD-w1EK46CertFr+Kp-#r8kc7jl47=ml!?t3w6ClzKsbh>pv2@QCIV&h^ z0ER@+QH7xBw=RcP+tH~O)BTmv-To2pv9-SQ26+N*ZV?8yzKYf*5(lT5NM$Z`rphh@wec7-|+LY^^C9c$H0p`ld-4%4|}|S zbvts9S#IGq=}sTO@T(1@xXknO$Nb`V=!~8d#N)v5PNdyfO@blUnbx+ES~|7Ldn97Q zTKygS=JWCYZ1!r0R9V!GY(YsV6ad6Pfn^{Hp^^{) zAgqNB@s%-!8&!Y@B!Vf?l};(DVp?MM4OtK%ZMqtDBwEgH`0ac1tb1yxyI7_TWZ}G= zno90#-jM{iZ?b+Bu=)7u`9b@^$W*=1Pe{LNR>s_7ZsGPh@3 z>W9L>^{${Tb6ZjuXS_dqLoPXO>6hozWHcz18uY~${AE8ky`yH_RA>ks62C6q6n@gr zDt%7PszqcQJy!qMSikD{s5g&yE zd#~~3VSg0tL3W6r!X1&wegrv?Zv_R3m^Cm?4fx@AiceuD5+&3`wQH+oPlhVX@6cF$ zQ{tcCU>#~jrRF*LFJI2eqf>dm86n|(krPbJ&Wz7itS3#4wc+JOD5-A|Nx!-^iBz?| z3bTy$(Zr6N8@6>+)emKor5)d^dQZ+CU2o*6=8E7S=06=LJs-=57bvb`&$qN$Fl$f+qoI)i6$uvOC z0x7R`=mj#x{g8SZ_{JW1q94~7`R>K6ss+0~FQH5NxK7!Znwenb=aqEx(mtML$2#k& zFgIror*rdNCwsbGeSPf>=U5p!A$zfkRdq-;V)rrH40Dj{J9E$bPC8zFhpZTZmg|JK zS9^|brC915Lh3bWZMRG!$~DWN28>gdVT(8hh>;@OXTG6VASi;#vX2&uBBc&3tvrJM z6ak{F$smxpQqqkbQRI*l<;MI4=O9vO8j%wKyKRuk$}l~qN+$A-_&Bk2_<^Kgp_f%c zc4&vu7$(YAqC`^Hyd7E_KRo%iTOL_PiIVWAGrG_B?G4#%D#lgukDmQvbjtbvHT&7Y zbam`!wj+&>w*K+-A?LK2?)%9*pP&0BstZ1UJ-=G>SM|Cuv2s=U`r~MBN7+<%;7^D+mt-PIQ*N% z7ia$eZsxlS!5Nhsm&RxL{P{_-a=FI72hUU*xb)b@i>)Rn70C#rL2_9qBt0oi#4JZq zBBJ{y%BU*9Fma}_wuT7o7g}hd%k+fbx9k?azJw zjMr{?W>cSYn!nYI{r9hc_HqTFsIn~x*jW@+bOAKs9)3-~31StjsbQ_d; zM`@}SXXErAv`fitd&6(db_MvK!Ck2KebYnh>R;|BN||!8M`v@3W)7}ii@UP*J^ehK zJqdXvw;6@(zP|Rde;?;_19NcMjF0{Hak+9Ice5UumxVCB$(cS8m>6d!A?(ZfZ0xz%i z`|(b~yFNu{Qk|~)Eo=WX)gsu2Q&Z$i%$Mghsx0!ozmdGX`fo1#QC=@)|B8Kcr6I2; zMevyU8;><%4s9JP%E0S4{`d>$Jvt=ltbO<7?Xy4Jrk_A%cV!xJi_FvLRl3--4>Q?T z%e_XihE{J>8k$G=bBizK#Otm)9qt@pQyItjz3RWe{f_Dn6P!=FPe?#5mW`)194T60 zY#Wii!(syn+D>B9`V#0-(*+C!k^&vMPimOIXJ!z+Lg4QaG61g{#HTTCeDua!if;>5 z&aW|kbU8vga9Rpu6>P8o%Oc4K+b1#y)zvBj$`WRczdBeb=CL|GpG`EmPO`jsos(Ch zDg-fFOjarISI7D=H#PIZ#!5LG&ad_NY2~i#ljD8v^XAWU?r`hhUrNb0KKwa*{|=gC z6;`(~OKMup00lslR%xNdgo)95mEwtEVUN=Ui+i$&MW- z$Dk{A!yr{MS~wStr5d0lVU$jQ*8qM43I_LZD+OEur7KZ1W)KdvHfOYEgn@vI>}lO# zS!z1v12o#2>58}G2=vF{gQ>tsOUcghW$v9>6jZ|Sge|*{BCDoZAAjWU&TsXO z#^21}-<&))x+!Y()6Or!YwuLns%KYosD+V123HsIcjxSnvo${dwEpJ3qYPm#wf;)3 zln|B4QN%B(Xu0pHeGaS6bv?MgJMJgR3%jJDG7QNP^Lzs;t?DJxba<&2v$s5*_3ba- zy@L;Pj?NXz8-=$|iHrDT)Ty=to8(+Q6V_&Oc0&h5L7Ay(>=~}?-Z5Fv_ksZwfRsaV zbf9;jgY5U|pFzF_bjAZylHP ziri}#S*t|p0l>f9;s1v@csb`2Es1^w@#Cq1&}bQ>Uies1GCc=De;*=Mn{ukVc?$KO zpLEa4cV#WkqdpIJr*tHYUeD))?eU)%%%-Ev8kWhFin|p?h{^&$CYT_B8EJi3oeWy= zy;N2*S6T^;X7^}SrHV?`I7;y8+kRwM?|U8z)hS?J)4FqF;p=H zohXG8v_zO}4h2zQy%hF<#CGVBS{Y5)c2F8J%w8t<+%6kPBo9Zt3A0Rpg!A+pgV>IQ zky&I{#U%id9VoVxVZtL2p@r>MS!Z;Ov*%^R$SLyj=>2#>_jlJ>WYay_?FLshztNkf zqOmiFret-&Cnx_fzn$L1JR&(eb<1#%yUupuDk;joq{ocv7$WU2azxNb_JL{LmG;d{ zkuq}vs6&5#S$7*i zk(w&AEMs20j&Z%}juWjq3UJ|(JbKI@4H%!jU)6QIB$pW(a+BkLUYisnR++C>cKv9U zu99f*!4l#KWXMsZnDBHeAh~z?RP}vymi*u6v8o;%es1(FYe@ZyeWFwX&lb(ZjPjx5 zzQq6U`}fKu7;xHVTY18`ZrD4>2(^`MRB;Jgrv$n35cA%A$SL$BY)_LrRX4oZgO)bMo^Xe;woXlf0Qtv)6%TZ6I6&I%JudX0bNr6Z4^= z2YSE>x?sqZ1Zhd?l?K#XV&?kOHQKu}O}Cc0V}X8gv>@9c%>1S8LHI1yA&jL4FaI98 zGswa=d-GRq+Ya-LpBrSQpOa+JLx)JxhF+Vz2RSCnuDP6L98Am}ACzp?U-%SgkvQ;8 z9E0%HQ?@NUVJk2p|L#*ahMRZc92*HW_ovwxIfs_7?fmW!_w`{u;aK$gT;ZD;uP)V_ z_+1wo{L`?W_{=Vs!K=um;yXf2{qyYep0_#;>ozq-_qrk>1_eq2EQ&@N+krcjANhXy z{?o%p&iK2ruPoP^$zaInD(%<2JB4m#KApaJ)}_o0e@;9+4VJ?1#$)aMf#R_`|5S#s zn3qICSST)A^Hq3jKl#Xy{xZ`yExr4D-^>?E+bg~|XT`nFG`U`ud^K!(@>7k3i^b(0 zTdHv7+BKaQr%cVq$Gv&sze%DE^Yr=MUnJh#`#Fa6C!U2KG24kQZZ+ds*)`5M(E!z6 z=Xqp|ekf1-NbN^Isxh-^PdbN@xtEXPIUl_C{qEQkh8;|obNrm~w9}DZ$B;!Ujp<|k z-V-_Nj+Bk)%0)&AmI&#JDH})&Z-I~v6q}yx4t~@?$D)GH_c%Lt=t|CRcAyAxdQUp- zU=?RNlaW`GCF#j-3g*5BrV}_K$uew+I+Q*^R|o6@7S06obfG{TPGn;bw5=%X3{kRU zlQW;%rU1YiMnS4!(7&*-9PkwbU*$d()Z1F4|8O3$9N=#zet2|a zgwnq(SFW&u7t556CkyTTUmkBv-9JCNpL{QRI8Pe0zauI!q!M8!59Kp)5P?Q(8ci$J zQapfd{4PhS%6Y_z^osT0N1B@7XZ|%BOP->?S9Wb=g&{y_Fob_lyA}veE!dX~9phlx zo4#pSFqH%&@Q(ry!vu#!VF>o*eWQIG|A4yEm2%0%0gjbW$!7Hx8dtxcv$d{E_^4;r zMDbOO3H`x9`H0|C66T;5S%ShCDuv=z@^-;WN0-JC;~TD%!1D-?@vJqOcqdGX-$X8} zJBvji6&{tX;z!gk4cPQ?4S1vWiBy?6s4q$pt&bU&{Wdb^;q@*We8{pZnJx+E%%Ng2*Xw*dba1lEkjFKcj1^Pva_-v}>scFD z(>xmCHWGdT4aYTh7~!|LnuOCg{7*R^%fkuB%S|#q}D*}VF1Nhs7dzVGwdcb7~ycxs(^|eu2BQc7Xy_anLjumS-zYTk;PEhppF@NB0z>Df?#uU$S)QF2-ckvfeeiqhGUF(0hy##oYUs zMgvywF23!{j$Z`L8qY#of@}O_9{=3*YK3X|WT*t!c|5Xj70)9V!cj{kklZo}EHGir6ObPy7CHiZUZ0J%IrqY`U!9(){4#JokTLden!rW*TM1 zz2PCUm%iK%CdNgx$~J7ufs$8QN@cIW+{|=4IrZ>%_LaAnBgpjY*q@Mm`r%@{(32^c z%S*NOlak|H-r=UIs(WHeKQ=A$bJ`qtK_0W5|7u&1I71nGb7MOhuYlk33 zVlz3+qKuOtxd5)?XZw?G;;fl%z{StCA-xW}QrUyXII;|o+1MlWC8DemmKY@a1hZbx z^K&krUmJOS&e&+SV%)-xl$gOTds-#v9(w;FeSN$`OXNGdRB>!od_JB3kQjOX^2zU0 zP7FcQ?qHCiou&HYy02JM69X(twl2b>%)>lC`&{d?0w`Iu6}4OLF?&G<)Ny=1^!IdT z@5e@PA!07?-|B1Ix|;XJZ^;-#jm z(n|_iL*t|7bFMzSztMKLe_(%`e9$bb{D9>JyBAfAS=bCQwT2JId8pW6Fu4QR6Exy? zXFe|X1A-zk1+DZy6WoGbF}>P6H|nw22lY>fE8ei8fVvD{RD#VG6TG z6+QXVWz5I>$GZ=)pMf{QXb{@+dd2xfQchk2SA6K>pM}81njXM!q?_S=>2^;TO>E|79Lu5da>&48!6O|aJbV^mv>)d+Y?4n@bWOu{}9GteI_os9J z$%R(2(baaIwJa96^!(9Qw8(){1s4~ZTU&GR^X)u;`+NtvtnpXVruoPh4`2P9-|V(I zz&nAM>h@zj*q-w?Esmcn)vJ{nlT4yPNkbFt0-lx90kyfL2?oTC*6No!1uL zP`UnCNYoD4ZQJN^4fAX?FL89e9L!GhhaA<09YK=&?yN2nTds&OWgc;8F5Lkhk!zkp z8#9IWoZvEI5_g%*mFs7Y=54a#WY7D0GMyZ^U`wFa;5x7?!~xG<2D^h?Y&@Vcq|okm zW@{Hh7d(=QngZHVhbUZu&m?dmUQ`5o0<=TGI58mf;#|?eG*URP)H7)XvG2i?7t-Sn zk+Y8rc8F2BR2s3#HuMgg=;nOIS|8&e%k39zHofIvbT05-1Y>C?=g&ipBP?bOu} zZz`@uNYj`XUU!c>^Ae?fa%dB$#*G_~igVrkFW$vgxI5mB+YN}_J6{coSRUtvKx&A? zW!qpyeP3~=IFbcAFwFasZ+_V>fyr?01qbWoLA;98pVwfx(4PZ5-*ta061-n;{7ch@8LLBDl9bOGnpf6Jl%;nS@ zh^jU%YEA$D*YS%piJD^(YVhy3`MK;L)cBZ(71TO@ml|E_Sn=jsUk~_ZaRPWJSm3Lw ziXdU6C#zPgLjCQ@Hjbv{ThkkCTqTpOiAnX4^_%e+rRA_P(;)Nz8^?Z?+cx%`yF1t2 zmgC*7kyhRgn%O*KE+=*Q_|iF3^0txi&0l@a{$`ry@@4HYcde0kJ|ELEB^w62YjboA z>)FSDyzff9WH(TVg-gIyzL{i5akE0Eog#FEkPU2TCN zB51{$at2i$mu0ur$kZy(@$}9#PRtghg@eOA$}S+IQ8w+Y0hQg`p3WUv8`HpKD>u;; z5Hz4vRUy!f_OU{$3cY;#8sDB@KW&xG;L7~u3dMWd`|gK(-_5V9PQGMvunML_U7^9~ zd|JAE=c`knuT52|d|X-xLO*O`^DDA(LI^y6GU{PrgA(=s>z^=HEh_?VAHSaayUZ37 zwe>=;Uh!#pbghnUaL&zAw+UYe%wzNqxBI5<7YmbNB4g*_xZl0qaYq&j!3Y2>BoGi0 zASFUkqR{;z`V;1_Rx|pV?stWkl;4!@wiV+$9VL?0@9CFGPbq&BT%|7z_x2BsB2x#? z##y`tQN!0^yRzP)AOXl10Sv-N2ft}M%7Iu@W=UdHFl>NWfHrVqJf$M+0xZdFN z9)B3jGbW6Cn{&o5Ca1*D_WC_)S-nb#hCkTuyfoySqVwFT9t7$;1>{lZvewvhp2G?DL}T5a{o{TUzx5OM&sSHxu%$f*IfvV{TYajGsfTiIS2xjm z;HUe1Sm&dtANTvg(|Eu+1#=9Vm8e9301W_`<^ocPQUn5+-^YGV`dInR>SeC~q5Shy zf2}!L-l#cgt75INBs3;kPEHS>VyB=oyy2&0nc^_4D(x5(~1`P+&P#^Zs|xfEW34H zg#JbCvpQZe9!JRvz8yhEKlSNFN`-goaN`iO}*P? zUL&>o)oe$P!9LFO+;2Gt>5uo9nL~HS&y#z+u-fzSY{qy{OrHeAC!#35dvFkx>_4uE zaEZgf#mvQ$e8N-KyzmWK%pef#3aoKp>R{u9G|m7Au_7f5_N^k}hP>%g2%Ur~02ZQ; zWS_`5EujQWP#{~VVK1CuKUthbCRYW7@oFpU2mqfNRmA}c6b6wx>XZObgDCQvE{=mQ zXosW`FkSbo9xT|6vC{Ix6~;KbDqzLzzXv*mH0A_V1An=?VB$8k^&d(# zIjcYjkr zZ&hc$l?Bz6(Pfd<;Q@L$D6=sw)&7VpVe|a8XLk*sLvB7Q?_N--Pq2p9;zP5DGd(+M zoHIwZZFqW*4aJ<;*djH1y33^1*vlL-XC^DlS@q5>yG#z=0!%`%y#}e_7A~U+^}IEO z?3*^w?u~*{tY{Avsz@p|V1S%N(iIS9W7{m$N$KEbbI6V|+rfQSA_QPII&!oNsqIYA ztYCod&{Cz!kgBo`XY{_ zzI|8M?17zH%L*|u;++9QhDCx%CO$SjEtw9SHKU{I{l?!@zvnR}i2#Dylt}~_kOb$b z!o??+sd*O})g|eVhrXNCSYHo*78RCLiAxSN7ekqNTF;^x^SjTkp4-Py>l^Is>+^m1 zvI@t)ta06A5#g>P#V#8XFlHJMpRIY~jOphUa>l_>np<1o!tZ&Pq)#V82-_tfIdAkw z#);}*G-qBo8SNMDTA3*T>a5jT$Te~vB{KnPQCV$N$iPncP{$D2Bl{@jQOK-JcpYA(%j@{3|ry zR`oG^pW=BYwfgfNM!-Viw(4l{T`WytpiogTBk5C&g~Mki4iWII@3u?XbUNn;^GD?B zrTN{f+f(3DVYt1I@IJ5cleZ$mLwWb;YeWxL*Lm($TOW~83wO)bO`N{Pv~cOf7Sr|D z5|li3y~nA;OQBudK~q7oB>Uz9vn+`VAl1^Da(GtNlyX$Shs}_`_IxNEU}rize~2sT z(#gd-bq8d|bbBH@!<55nq>Vbpu^hYMRr4S&Vu6qv#8uIV3N=dJ&f7I+b)nUPMYx1I z7J}cSrwcfAW~|A$ZK_~H09`z=Fm>hxgh@a1q+J0;TXbX!L4#l)Jk=D1PgiVNfaembg_z5Kk&Z`W^k;og@Y zM*TS8a*uTH{j@xq;MReYpWpuC`QLuK9{29)&fAH)%4&*bG9UlxXFczS-+zseELYHF zo7r9c`S8VOyZeI%N2YJ0`TUn_f|I|$`ZGcXd{`^Ek2sKfJI?SNXA{DA+oI~izz+}D)YXQmkyObmRejGzXLwUvyl z!T2VJ<+tT>eeJ55L|xC9Gp!9zScE zYNmYcuUB^)Gst7#jq0ub^DQ}kw(C0NtG_rCm8P=bR%>wx*1b-;4C|_P*wxWkx_3Su z{&@2n4eXOW#KMW{%1*oOXBBt#G9IF1Jm`<`n6=7LwMEFkMOCnKXI^lBFrqd)ZTJcnRtw;xIXumT=Q^uQVbhtkzF`5>(b#8 zoEQY!c8ofz9?S2?#GWKgEb6> z4ZB`^eJ_VDW)Xcy8d*%Y8|wxQ^v!&g=`zj-W+b`bEB`i+xvM`^R`2dVpW;=!lR7h< z?zZjcw)=+l!pGaYpE=)d@26m>+AXqQvdwFFOrK+)XZZ#0Q>H`R6&xA|Zhpj4hc55& z)3?B=Y4v=&I4aJ?mnw_53i-I~&-3fo`px_^rgz1i%g_FM|NMPk8ovKr@zkroUaz5; z9#S?sLQftxGf`9iel`97&n~}Nt@3<}DVxW+|8PhBmmBo)7ylL7I5tnm>+b6xs3)*@ z)I(Et%cnj+;E{|&U#R~CaNl4oSdh9Pj?I2tUJsk%H{ZWGC>BEuVpSWh+5s{?T$|+#P_kv&Kh8NRSDxC~SUQ^qz>^??An#D2)W1G+e6$kQU9Ot?$(vbNA(4Nm z%2{*uvq~JFqCzUiC#vLh!rT4fnzQobrBz-D9UkI(j+}i>JFP@l2IJIpk=HBByt7^$dYR%X5!QJ+x3mA8M)_RgU&Dd6;^R&-bg-QZN@pM6DejY#F@Rjwk zTZf0e@3x-S+xEG42I?qZUVZjmTR(~Crgj9SatNNtyZk=Q*Oh!Ys|l?Fveot65iiJl zE_<9n9k;2wT)g-A_UbRdBVcHrqdv7-ak?o#WAQxIb~aX@ev|#?zusR{2QzMdP_)c0NT%AOed>OQB4ay2Sp3cwgv(Ie1BZL0OEe z=PHEFoE!c7s{X5aepi=xbN@Tz|7*DY%XVkHy_`wwR=@q&-#x~|!|W6&NBzjhKK570 z!^tqqu*Zk`N#wa=1{nyPQyR@Rl_GmZn4!*$S%`*kC+~(X=1F6)&rh7M8Q=q3W~>F<{~YU{m}9n*=WOtf8IDvD785%gO#7Q!a+t5-X>t;zOKc z%DY<6w4B1bVr}>3^c(*?)XvNM(mZZI`I%)n2a-eaCbFG@*FLZTCF9!WmE{fY5BX2( z)pu|eWFxHVzPvnWTwAuydW*g~ldxLmO+BqEcEi;|$l#jjZ^9kqFtizt=?bC&4yM>0 zR@%eZil^PL(jJeIecC*C@i?BW-yEvPvox?KI?v$Z)<3ID!phd zS8rXD^0&V~e%6>?^z-!Ea_OA=q7OwLq?eW-uAB4f@NVcIo#)&1x2tRTv#zG~T|l|6 zxb}hyOIzy8$q^%YD*b++d4FHpeDd_Mp)Z%b{`F-VhEJ#dv6~VwmK|=>rwf;F%e+7G zf4{mv(LIV>eXhq-3=fgl%kL-omJMhCQ7PmC&d?mK6edzIg`**bQeq3yn8p;Pl^L2O zLb@`i5_%362WTjOtXPdnP_q!f3i!tSU#oBb554`{4vMZ|QKAWDsO_4Dg)pa{bNk50 z+qvu07oR}{lLM^j^3&!e2?sy(WQqTDL{r$IB7V&0Q`hPpPO0N2g=7;T+j%{uc4MF;;pofdUNR z%DS%lR&$&3{S2}cY}eq2F(Nr^xGrPIWLY# z$x~n4ygkrY{*NhjZxG}ure@5m<6K2G_{-IYpGUY1jiX#qgMWX09)5qXUiq`059@AT zJoGDx=5)qC-&uzL*ZdRt)|9!kDtDo=2%+oLu6p=Zw{PADz7!_1-r51kJ>%RkcU)Qh z)cd!BHjH&SF*fA|*{U_{ahzRsAIL}}GxOHfyzSHN)AReB_L$er$9ZludK5j=I!`?s zVr|3Y%`KN09W}`z^KhxC(oIH?j&nw9d0jw=C3NqG$2zGbfjE13Y*#5( z!$bWgZ~bN1#(%J$fuD;Dek}YHdWv7J{L0Vp<9B{se$)TwOTW{Oeg5Ttp1=Hjf5Aw6 zTREEhmiswQw`(lMB>%LQ$fIm2=={!zi44Vsw|xE#YlooxnDzfZZAOPeLS&+e`l8aK{5ED~6*zjZ2m)L=1QiK(Oz!E8i#dZqoX?-5+>%Z}T9{%=w z``t-u=k*Ig(frD1%cI2tk=Ku@TI#8uU$!R&Wdqf zeEx*>n)En%jYHL4)|F>1Qa} zW`@lBrsl}csk_?av)!IQEWTTJ$*XK$*mG}!!KXj?y5p~X!q-grscWit$g<>@t?bEL z@wWe=leHFAtHNF1n*q9H`r~WNXQ*_3|Gn53C`Xu*>jhCgrkRNdQFCG3vW<) zvJSj;Yuy;83tpLNc>n|ODs~JQa0O-}wlg{i!pNXht!7gpcn}b|pQsbiD32i#Y1<^8 zI7LJ?)Js)d^-tPo?Tf1dzYiB~Wi8y&w?xOkk+$@GUw`nYT{6!7e}8$;Z-3zbdi|yU zZ~ec|x1av~{KL=F@osJW;QY(J+mG(?K)gWbT{8!EB`H%AlO9-m(Z*=|)g)F|#mIyi z&=#4u#klwbSM-*I+7K0~n4b_NZ}0v|2%9b&h+9tcxbxk`T1Ypyh4&T4S|8?6KiC}W ziHvhyWuk_T<+c{Vcq}>Tf2}-gIDKq1LsK1sOe#yJr}ugNzPtWXWJCc7ARvVa76Jko z000pZKmY)sAn2k5Lnb%)Acfdjy2)phlX;68Ktli&h@24+*nuE?-hBEvGrPJz*)Lyr zf49JgfA4S0*Y_g5FlW$CHnR9a1+=u&@$zQqb|A&#a>Od;A!bk8M80KQv5Lmr-2bGN zWF5W;;f%#bLeb?7l^8D7p zSn#mq=e1-Jbg(TaK_O(KPmXnp4<){P4N&~`j>Po}@~!M_ZyN>HJea?)v`ZD2TO7Tbn`-a!=CqIf+UaTX zh+Uh6u){cE2IY-cA06)N=egmwZo~dmI<8Ai8!O({G^<^vpIc_<;TS7dj%c%6AO?M# zETesm%K;85!*ULn@0ZJO#UKK}hyY;(g(Cz4KnaM5s3k)gfPf}Q7?lqjSLP=pl|K|W zf`fb`K@vhB6huPfpPo8GDOW7#>p%Qio+p(kbuI6HoqY4x!{6mU{@U%f3v(lTSX0vO zI(&=e?heuJ*RYx8>h^BJ;)L@DOjt)#P6P|o zn>kV!3a5j9J29H0cbe?^5(QmF$U4IL})f{v3u)~z&C0tD3 z7e=Sl`?{Xj`7b~COoMKDZn*C2hd2{pW9pRo!Y)WAb1nh0ILQQ$#VZ?i$R>I+9XE`r znAiVcGQEFz`)O%VXY;Ah`Tu@X{Fxc&^>ldNn`wi0*mG&esd>*-hCS)xd*C2LuX|Hh z6MA)ZA9*UK9iR2uv`T6{cJ=B*QByXnkk;F@3S?z`R4=IqWvP~+rmp<~E#cK|h<7>P zQ+II^*+)x609KmL%6+KiR8*m~^h8f^qI7CCYxa7)4}xw~G1{WJ0}p_AWMLBvqo^a( zfo;@ry!1g37#s#HXYr#Pu2+z$k|t@BX)wB*f~n~%-|?Fo_=V4j>v^DsY-XX6~c%%RuIK)ABh_v2<#fCZ)nCS zpgB5iD0zg^6j?W88{gKxh;H>=ZFc^9P*^V9psvD@f+q4&^t_OaH- zy3^}ou&fjJ$_X1A2vH4nfW0~&wd=BWFhOEo-tlt#^*lcRj*@IQb3{onL{JPl%mGqF zm=G;Y00tn4AOsWu1gd;sD9fR=%FE=#L0-?SpOhv=i3~9UI4DB^6yu`TfBKK+d7&D- z0CFt*_vZRnwcG6KuaDpCfBN;cduOrfQ~Kxp_*cKz?#)Foc|0t163E4{aI(+Mg)mb& z%7OvL%)Op-^PCfBu&0h9CAXDAYp{8U#3fltKs;ZunC6G&6SV&=%jC;!yyGOvS*TM0xr?vZjl2UAgAHV6d#%)ozj%{|#ywSMYx~t=EQf*LD(gv_@ z!UJaha@-d<^G;Z>TPoRexBC8rt5^1#kfZFoQ;sM5$%yB`g)T9xW3~D7 zctwgcoRIKMk2(43axsG;n>(gS#;xZ+^YwSu`E~@z9{Z8C@V9dd6;vYCvJ<0W2qmHo zOd^JjWWsh|vodyDgsn`Ns!b9g+;)Hf3B*k1<9f$Z1xKf%QTfudiO$qcM$=#|n3GgZ zj6*_@Y}aQz2lPaWT>(ceyG}vgxRee1NM4BW6n$uxDIm~=KvQIhI^$E6K5Ab@kPvYW zq{srpLI#JVC<_hD8bl_+Mm+lH2r4ies5bze343j|S8CA3r!x_|~1gj-Eb z0D#1RsA4c_tJlB%PxH8s>u3{QadEMI1$F0&MSeV`a?F$VbE7Y%B+uwIOp{Uy(kV3x zSIK7gxbyVdg0UR0xOwfGPn1icz80D5iDu zr>9sZtAR-rAd~~?Wcz#B{N~r++b>$(mK{1=)wHkauu^rR1kxCoDy;%%F`;0fqpJo=*w^i|abQ_Bw0uc?h$i!;O)Shz$!U#jgX;HFkh9iz?r}=Hrud zoy`rfvfM|ubQVkVkmM73?& z7wNbakBjYdpI>^+nmq=`rDxn03X~9{?k#UZRGprAxH z9<>*k8PG&jflM@tZXzl*3AQqD$^@7+n@9u{Lk0*)aX3YUQn1J?aAX0c)H$BgfP3LC zaCF9Zb%I$}j4~9!6d(YPkOcw~2jDD$zYipubt2S9R*A_3&0Hu6)oMgnb(WfB;)#BaEe4nHU0rPbGb#r(g=zWKmakrB!CD&0#le2(PDlD-OQ=+ zMqxEOLkI$}uV)%Mh{d4FfUAU18orPrB1h)V5xtyd zt45x}D*#khSZ2;334toN@oJ=Me2=WIpO1pBS(-R@M#tmw%20uby;on{LnLu$S&x_M6sa zKi%WIYKo%@UYy4e2?SZbLR)VBVFW1tq z&+(p@rL67KvC+aIumlPVs;DVQw7}3<7;%IyEfHYgvVj76O3E5528tGm5yF;)YReh} zmKei?D*-^r1OP?J%mR}H!$M7x2|@{1!1zY$!TXYjdJJR0gR6jb3RB`?LZV63bp!zr zN`WJkikcB%z!PB*AQ0&QQV#$FV?bdToGJsM2Z91PlZ6H$s6>{)F;rSeo`$4^L*GhK z!2%$lqi-=>rk};7>}WTqf)fHlp(KrJ3tQsWOX8j%va9Ac0LqPRkk&)!kT&hf`cNpW zCMuQ$F!}I2ta4H2B!bh{*{mmBI20hr3FAcbuuf<_*Y?Zj(~rM|GSzwM+%^=-6gkmC zK^xnRB|5&{Q5!IrAgm%0AtnKUjF8F$TnfwaYstn`QLN|JHa}*0*Rf`PUgR_P;Y=xg zylGSjpjpa9VO$lXuK(~u_)BI5VM#=)S!G1dH8~pFv)H{vzwJiI?POTMF7Vgzey5zz z_UBO+%mc)zsuIYj334k%z_}W3*S~AVuBHW4$bo?)p&3A!)o7ptE2x;`n6qwG&9-g2 z4q@Dwx4db|t&I~#to~@vf~dM`*Q6p&%+xu(%+~O`;cSp37duKZk@!|O>qB$wt-+fJhes(=6d zRhoW`NT!SxmEn(l*|j!NRIFlY{y87aS;Hz^od2n!mQlT!e@IT0RUX?uVyMPDZ{{DC zFDO;ISXx?n77Zg=$Wrx)&d$|~-r`0=rmo0#D=pNSV|yL@xYg`2-rm#sf){|Oap+nF zG$&dBr!22oHBR=SbV#0U$6G@!zC=GAa8Qiz2~ScNKELc4&d zO&sD?y`e273d>LqP^}bmD4Sd=Yc{!=N>qrIN#j(snVFtAuA|d5VUm)}26C#TfN^0c zanoiWBJs%Dqm64&Zlx*mRBf8aHDJ$ zWQHZe7*r7mNj?@I0vP!)Q3V46l|rs4z48wc#k>J{w#RdMRagiF7??ysSDROA7>K9lt~br zh$}E4+izVl=k!USgRfN$MO>sx4$Po^ab=1qhQ>>~jig<(|MavX^agN-!%S%2xEfx3 zyNPXUy-lR!#Hx)h!oW5ZGbRuWqB2o;Phn13?ToFX2CN3yuG-|$y`}(`Hu#%FO0C*ONo34+{aR!BPff95E zPy`N|Ho!Drj1+@_7zm2>)S**BkU>I;0FMY=M^ZpNB0z;xkE$S`z={GPOe`u?1hGto zcB%jXLnr}2nI(i0%V=uOUb|#A)npgh5ERT*61I8~2$8U!<&?M!TLO~xR5&&(joVD? zm{Kef-$)FG3!}0ypaWT@l0_sDLn{|#h6b@A8jAYu^Xb#ixekz+QV?OAs9E2O`Qi1g zQIyKUI<{nw_E`!tZzUUpfwgq7G{0!|(R~ z2VC9${T7G!ROexQ$jise49)cFKXM)Xu_909x-nrcLw^6T;Q$<(IbC(Qk)z&$DLT-}sbkREBu6uHKh zuAL}b(o7hC57h*+|2e0fRl`t~Zd<*zwWa2oA_|rWH(UB^FC-`4wf^dS$KU9eBbx+e z9d30|8CI93WR((_E0k@SuC9tLUFIIQdtUeB<;M|e%{4n_!lR(KnmCdRYZcP9v;qS_ z#}X(TFwrpu2QIK^;3Tp)kqoH%^t@sJf0_gUA%=wrU;}Ui#%9t5UdzfRw4p02_w6hC$VqoOQdc2efXlj}N0(1RUv1d(3lp zc^Z+k{Ai^V7ldP(1XNT8bfj=3DKLbbmL@_>QUgmwkc7-&Dtdl9-~Hj2+H)?S-uGMgr^kHlK3gT8&+X%Fhqi$^R+?AiA&>iy`Au)vANle6 z_8+gG`RTm>f!sX*^Hcx7Uz*Qtx1Z`t8wwdO!a1Ge7$L;M^WpY|Fg=EI9AZdH&@7;Zt8% z&w4oj{O+qa=j*5TnNPp_;(LCE-=DlcK2Dq?%E!-5-0$DM`*poEb(-tXHvk^EV+GJfp--LHx`3WevU~Ck0`k7TJ zC~^e4B$GQjrW|}_>wNl_+|A*x^Il%Ko{?ms(u25bq(ljFjId5!D9LNj%@}XyW|o|~ zc*9Mgn`ts;+c=^N0mWqY8b|is$8nJ{Rq!a6a%2!UmQx-SuJKF|Zhd#+ak^bWuG=_U zJfMWGQ)9y593U=m+8nKe*jCf+@^~9tj+WI;#VC{W9mB-*c`zN%?f4cHwJd~BS*^H^ z`b5e`W-bD_G9ds65Q4x+gGB+F03lp$ip+2rKp2VJVgbcahBjAs3pAq8qaX(vfshsKhPzd<*Vk|VwO^F*^PcWrVzI4P zwxC?Mhu{3aKAzuxKEHXw>Dr3C-TeGiu73Q-pS*m0Z*0xt^&j4(370H|U-w%;uS;Im ztG4d8q9_CHRj(HhzUkwyzwgKXM?T??zWwbd{^aF+{rR*0;ne%>xxc^t_dkEuKjM}9 z`t(11Kf3w&_y_a;?Y#T^^_5@0e)@mNaX)_ghmZMG59jm!Pe1?IPaZ$}!#McuS4{u( zeEwM9eqiTE{r)-Ew~uIk{Gjc8VRL?5?eg{mk}sd_e8I<0ZQFyhZ$Im}+;uMuFy#G7 zDo=mpPfz#l{(1lLPme!z_8&j~NB#K^|KQ_W-uzokl`(>Ul z4i54}7a!LXCwa2hlpJYe0ih}DYS^{)ZO)I!*SPM+W~pdHIfM<>fMSe*AW4XbH33zf z1TcaEv2-$TW5SnEn5K}xBpsn3~K`|aj zD_$D*{@CU{s;vs%BI9JhIGb?Nej0BpyK?AzlZfRJWeHv#R9FHlq#%t|;e!ednvo=@ z5d=cQ_SA`}aU&GKU^Oy+ByglzfD*!R1l%PoOCtkJ2R-V_a3OTD3g$}BB@RLiqB2!B z0Sk8}5Vr{gpaTekfMjSlIT}!i3KaBgexgw)asjE4=fC^n^`Abx{QXDk-@kvWhtL1^ zPqpQeNQ;bN(q8}JjX~R734G5j7NIr0E(-5zZMkpSJ@l}3Q_5Ddk?=NQ!OJ}U=qLT- z=jT80v*$PcfAY&8{%PhpFYouum1F+!%D;Sh`s@4cuYa2Vh%GNqesh2P z`Rk|rXI>xL-+k)8ef!*hefhNi$``FGRJNY`E1&%txySwCar_{D;Z;Y-w(b3Tf3Nr7 ze);Ha+)(%T^XFDH=e$32+Rd@sX*W~X<~HZ2&X-TapSkYiSNq@D`DdScPU7)shj;8Z zYMoO@R5q=zm{%{-a5HP5h9hOB>k^Wrg~?dP$46Mh2GXV2gjq|?)CM(*ng~YJNNETb zgBFlztr!7;NCQMH0nNby9~vV7(HM&j8UO*9pn%RbAP#ISx_gh}5};2&Cs~@2*wcvS zw2k%1&6Q3Gc`3AT_HJg2q3xoxj)v=?D5{ZVmMS4NXhED zI?>*>*(DgW8d^&dcjX{!nA1fuIFY@Kr^g|5(&Q2CR~irdBWUQET^tR#L-TWZ0oZeS29RKV4QKftiXUc={{gNi*Tvc0#O7k@_@jtJ&p|p zsLUL}a7M09j#g#G6-Q13LO`VfI&lXy1W6n}v(Q4o@i$n+qrqTnk?&WrMP@bvY; zX<|BRI=1BP`4v4www}lYnw3Iq?g;N(TP`P&bvd73GH-6#qBGc}$FbFbabWUHe|VdA zoRp|@{CK2izzB#QE|2e(&RV|LpyD{f__MAN}~2-~RbWfBUcB@yGkyKmGDU zzx|)@`<CN`NRIuxA#xG?3lcL(EI1?pT3mG2j+VI^+S#)bGy4Z`u6j0 zAMc}T&D=lj{kQ+_KjrVFZ)>i&vhn3p-dm96ksF7)Iqs;#Hppsdj=qkqvv0yAq1jJ=A}H8S6|KXl*1!ze zAiXdk2qeY803snIAXA`$Fq7d0q}buht5Gt(!sm@XD^K-}u;`=6Oxl?zua!Vxw2D^I z&NXCCdxW7*nx_+N_`h>az8iChQxwH;|LFFNPHq zS#*-h*jpS^>y{HXt>=Z-s%?jRC;@bfkLl&D$yTPDaFGkkm$seb$R`YAU)St!rR3VhJ*7V#&s5$Pqlf5%Hrq|Q3MVAfjkOWCY z!azZjga{2bu|_Z|g%Fbh6oWuvQ8AJM%HKi2LWJ9vCGn$FaWJH)M?z;niMp7^XIulRXG;+)%i5>*BYmLYzi-xsJ zNt1)#-q(m|H~lo^s+ zc*|b1fYW>C#>`3ayHp8Mqy*fi2GFT%$Z7Z#eu(VlIFsge-V<_=t2n3Dg0gNL$%&zh z4V5%OtXFba0j)JTB$Xg4OH3fv2v3~@9Yd2D1mnSgM3jR#OpM8>U#K9KmiMGxmQ;dP z-IQifH6w~~m0_1*DF$HOyVK)*p*vdxK)}w64B@ytfE-yRB59O!dftbbqX42(owDY+ zB-q@rj=l@5qXF0iOdu-cm-R+x8x9Iql6~bCdrN!ixI3gRCm>L3s50JaZGpL~b`c|X zV@pk^clttcr8D<)OIxY3*JdegwFPk$kTQ-ak#*}-+FH$;GTM-JlJ|rUy6lvZDi{_X z^VN|VZ*;vdIi8kJPrLJc(%f=B@%q{P{3Bf-)*GgE>W5^p(uSVqsXw25P8_L2nsq;q zV^&Wdu1*x!R0$0iQL<2MAIXM>**Pb|Gp_Uj?%m!12GMFW=+Ldz6dF~drV;fsliegZU$YJ;9# zHQg&yBiE4O5NzUh-I83nFOrbfFcf=r2JgP8a%maEvB0K=vBDzKR88E?-HY${@R57W zNA`Q}d%5#|#FOfNP|nvuY9hVD`};bdvP>78S1Gylv*N z@SUr=!b3R%G;+XTJYFkfLN;E6N`;F#)BOa(SQ^#$S{$_q4*Aw+7#5GRm;iQF5CACx zkU%F&3E9AKDjBqbhQh>1L_(_7pp=#(R$x86G!z*YSBPnM$_+%zH&7=kl8T;R2x4db zBJV&v!B1=yypX7rsV{)DyOJ|zAyt~eitUgUy9LCkh$c@J&73u@h}W3+Jb)`m<1|r^ z>E)AWiwbKSnABQZR&$ctLmMwFy)!r7LrF7F8w#8u6FZSMUD)W0s1Y2?*EnDLsLnE{ zq9`rRXEwKlrUOsJCR`ekOIZ2 zA~si5t?lU6wudqA%NbI+oOR8YoLE7MY(#Aeyh5=`VIRiL7PC9BPX z(JdAx6k&}d{k;Z=AUm;q)zdpKnD~IB)t1V8hC>u|nw@V@wIg z;+9f+m4vZ3fpW<(Mu{`oTkv%P3`ugg5k-wb)Y>E}Py#sIUWd4cU05X51QSix7^HE} zL%XC<2ALQZAOey^BqJD=P-91oZ2)pCOhwz65I_v)04`z(dOXcn#|n_iQR~4ex;#$^ ztM7~lxL+2#Hge;@alpf{=}fsnC&v#hS|m&~DTNl7Ku4OeA$F|>B}Je%#AHlH zq!hBypqP$|xT`xbAYf()ngocUTKyK7u*QQnd++_qezA1}BkZf(4vG3@;3BfR1)pRs zbRh`14*Idfui!1DmC^`Dh#E-2Rr#JnmbfjvhkSQ19qp|ihPY|>oT>U$Wn>^D_BGit z#p&K5Lb~M4)=nBBcvCiXwFlXC3Kr{7OElfw{G{iheY!!EBnNc4pl-sU@3zyfR8^dY z*wP`BZA4p5wcE_Jgs2;)or#Fvl)8cBz|jx|sFWZ;PzdFWU`~YuAxGgt%_((4O+>5IFjQQM zK>?Eih_Derq$(6B#3`c+ltLs$Lf}LcDuE6_6#-xigOmUmNr2H%WE#o=sYX>qb010s zVqzR)yF?Up7@KD1yedBT3hEQ5wZ>@Vxy)I;8ALKhi$-WfI5Q-zM5v<%sb&%!X*mqK zkwCu4iN+aFmSVqfH+qxB93r#2`0lZ9^f#(2+m}yEV za~n@!7QY>zl^$XCaAiN8QuH8bqXEVc1}DIs;5Z7v=n5#qJT059^Q=K_X(B83b?jH2 zqBbQ0kON%7i?5wC7sg7}jJj!n{hV{`bt)%j(04@=A%e*fVr3ABz)?&qy*sSw8us`Y zpBvY7J4iyTDksMLrUiJ85xKCg^f%x7%rN{^l8k=Aj3)T&hh1y*mjnc(ov*GNRyUyT5e03UD z+Y*DZ05FNnV}MExw3_PnkcDcJ0+ECe002OV(lU}-V~X+w7&9VRi>T_5$;{4?1c)0x z2n@iJZT*-~rmas$RSo;Zj1jTU1cfrvaAxS+_!Vh(O0MO@u}Fe>JHb2NU0$=uNzn=0 zFk%deNmOWL4FqC^h~x>*3X|#qga9nC0nie=a%OUYASw|sapZ&yW`Qh9&dLzQfkB3- zAtjLv6a*5|Q3*j*aCY8--Lc$!^&g6FB`S)s$g83=7GeO*y25s{+D0gV2)IB+Bf*uJ zP17mljL7hu;5#=weL(M(X>#kV;4B$y;yNA&QagF*{YTz|x^fH`#6XUH73GTTq_xrO z&;*^rQ>9bx=bUf_W0Eb}xh+w_9XGMTtq*vN@7WlY%$?`#%=O?V8PP4K)TUD=72*&Z zd($g~p#fw{QA?>}iM9&xDVb^tVl9=rrX*D{u1T9UG=SyV9T%b&CIZURl&B;Uw>t@^ zxa=0H50!+9p<6^WPdH&Arrmpz+~QN$S$zbm7^x1{#7;)Kt_V#sW(9>!hGL{T!q><* zM?=tF^xWlK0La)9=HSVo-Rr<<0+YGxaNS=O!^a2FCy+E&oV@mgB(q&86jmD&V@I~s zV3>;8?r=ymOh1Wrv4x{NPO1<(=tJL91RudJKoA6(e>_I|2mSqjQ)f2Kb#@VWBa#Xz0O6G2{x1g;UK7@@nN3@Bb5 z_dt$VLU#lZ)I@?rr(-i1kzmb^ks00DhDz6lTB&pNnwVa6hth?C+YjaYxy(1bdw4+1?%=qK=4YvM4Sly(sMO06ZaNpY_4{Q zSXo((LUsfXnl;jHT!n@~Vr$YupWYT)0G&v9^1|N1gM*x1dCY3jSlgUzo6bv4bI;yZ zJ#LGRhoWzQDgZzf*JI#$ag+a!)tfoJeAHaWn=imlg>pW)P2b zdqM2j5Ns$~z|cmp5tI=?Wh5{_fE1vNQkqKG0*6WJT3K;`l?6FsDH$o4t?c?}71s&~ z1Wkm=0Efhpj?Yp7v=*tX$#Zt9{@#wzG!qMx$~+Y}D=EI zD2Jv<$x*718X--^0ir2Fv?UyZgbtY%pqkQqOn^aAQ9?MI*K-Ezibq%3Ii*Npgt=5| zK`2GD@upCLE)fldKoGP+A`l%TCIjkr4%?k(<}PW2jg|3x(9= zq2UwXO-&E8YyyRZVN{we zbJWWchG$(mMa^{gJg5(656*~oc6X>@N;xnF=0e|!0}>s;E!UMDI_OeJ(LoDbC2=Zlq-R7hm{XtF(E&Cs_y0$@x*;*4OAQ0zr718e zR=8QW(CZMt9;_XF1YveOGtZ@f#~1URX(5fY&fbQYkv4ecy8D+Ij;RWTH1rOin2 z236Z9)5(=Uy$PDDQ#@UD%q3ngm4;d%uv_mNTcmX*B`W)BV0DSLlcNI=5EhPCJVsTu5PMP-Vj)dU4v-H(l}XLLTd&Z6X!_n!$XjF zIGlvxcxU6~&XMZ5jr$Zw>UVuPJ**Z9S?ceQzSe~o8(kOmKrf-B3(8R!Z=kCT^LIGL6;g^ z_&lW-RMw_XMWMRiS6(x_+z1t+UEX9XgsO_j3{JyaKGc>>8%f$^#I-KkmJ`BOt)3vE zI7D~)Hm;Fk!W2SQH!OQhf^4D$W(q{eU}M*{;REBZyL=!GjbYp2 zpn+@5Uy>7h%160bXYJYRyOWE3gGHr@izL#Cml_lUXh4A*p{o;jWyr{)+=KxNR;YV2 zp;+TXC1@n0Eo_`fLjyE|q7m3c0HtOOf>2OKX6Y~j<474z=`fZ78Bo`e^!S*zlmSdw zxYc<+7^Zmd?G-2LLIQ+vrbfM={$zx58gtU^tW)O*M1|QSI4qqwpEk`g<|r#1LW*1H zMj9_q0eCLunb#6ClVUK_@tx_PZSa2}{D0B>6ViVy@sF(j=Z^m~BvL?P1>%@~=<23H z@P1A|f>ERYpV7a4#HK1H_}eS|Z^mZ224(jB@`e70PF#=!SK(SfS1O0x105SMgfNk5vMYuW16%si-ti(Hjg=sok-3nwh|aNd3w5z7OX;Gi&I?_r zaD6pXd=2g|oCsP6Qc_jA%4vnWghEyUm&4g)YlE1dPG_OH8W0M|G7TZ3k`dh%z^a7O zim=KUKJ~sb){c%dch3?J^_D4-C5-u0Uxdji(U`K{OHq^riU?Fun6vv1QL6R{Z}_#c z>C3U)Vp7+=isB3nq%@{6sSXfo!y%idXozM})J6twy5#gS%t;fXI|N>Jl%r+vM$?_d zMiE2=YGOAtr8e@?*ksg5fo0etDgm%XAOR#m*NnARNSs+Wk8UPgWhqw(>aLC?-b`$Tq7A9(T>6|0GlG)M>0*ony8MfiAy}exP)QB-!@1~lVm~`C4~Ns^=0r6TmI2Jl zIU`_*j_BQ%|9Zy*=`O6Z5$EmMei~w-`%fr`!2d@G%u)@12cwt)tG*skr9^= zLd>ROHeAK~%FC`~-WktT-zb7!y|G0Yc9xMq6l zyinHZyyvHiWF*1~emtI$Tu}ga_TRw!1wT(?|D>q_5C7DrD4I&uY zcdk)sz(Dh=nX5Xfy4`EN&UvC_s}Z6VXWUJd=t3k>88%81O3l(Zgqa&zxTOeMQD*7J z;M@{T(^M+WM~MleB8rE!d>|EEBpN{7-SW#NO%0UEg|9Za+iRH&6}m3m;^qgY2k* zSOLUfaqH@D_VF^}3m0#id}VP9a}4)j3&H;@pw99?;o*NDn_st$nEoP%MQjIoRdmFzX@ z1OkO`(luvkm2P8#(XlGruh{BW^->@PsZs*x484Ah>2*kLMJl~)*A>V{4&GRqzWb^w z8nwWw7B@wSLyE_A8i`J@3Ga$!t0bZA(v(owOt4i;1y&ITt34k8)h7J|}g1xL1>jiQo#|2QDTm zfe^bzVnnksQoA%-^KkOhs}1pw4bG*(+miK5$jhH%^OsGdbZd;mN8oWuIX$i;dfY$0 z$;s6xFuXVwiv~yuQ@N`Ytc@&5PD`AiB=+>Rt?bUS2LMPFt3tz;L(XJ^2_UtB8L4he zrYyz;94G`3BAB}E#={6fgfJncfT6TAL^#JqPTw3Wp#>vL@1@A=4$FPGG8JjtDFMtW zqez(+>WiIDK~QD}J+Thu9t5#pXF&#tKCjr$6TWu{JJ*Es)Be`3ldpf@@MrxYz4N3m z*#ECc44VP^|4aLiRDRXZKQ4UY{we*x+b4e=0UKHLFCkipHoIeYBiO%f{9g$7asfVZ z^~)~b@caMwgwHvivN5Lb8lB~5$NycW(AO`i|GlTP8pLQu)&gCKnH3}`$=Dlu$9qv$ zm%)RAgCgji#Vlk6VDkY`cLJJB$iU?mn$&fJj&_MM>!oF$8?6CP(nvTG77MqybLO~S)p)~Zr%gbqeMC4rd4HYnibMJNeRLvSLiXF8-pMRW|GbYAxG52$`PfgQxw#Q z3c|)rrRXHJ#H0t*yonyvip6i;Cr}r5 z%bHLWreOC-q!35BAO_Rk!%Q)%jm4;m8f^k7@J4WAYNEJc3_-L&;RTSQ1^}RFSOiiE z%1EhEMvf^=VhV=Z41n(KVK7zcFdVQe1%=+^1gG%r(X!~642?NWgtQAcjR_*;L}Ukp z3LKp4nVp#1r4S6LkeWdLV(9PPZ-3L;{PxF0ogCo{I1)l zq0Zs|b;#$6|8EJ!SVy)QetPAlWUAG%JjvYpOL%2U>VF?TLNyj%$gxwC6C5CRTi7h~KISH?#`(hpvIjTaTu$7p_08kNBY_(21 z02UUsK#G>3akJO~R9)r?k0z(Yl?*!dinW{MWpXqN#9}njK#Scbl#y5@GAWBON5lv& z08-wwd;8b?x#Bc4WM&#cVD+39!`~EMwNUx`X*Q8RIrD#BJA}uc{cG>&8h1H=U(86) z!~X*$rNqSlM`B|aqju(3u$KX+w{n#Kb)5YB^tQV{jrk!KUp7KHA4p+-pv?gPSx`0y zj?=ik)m~y%`p4_8jtQjYPaNKB`kT2?X-iLtXz7zeE`J{Y@8t)&P*VV{ahHr>>IM(cXfbA>Nw;*QsFFbe z_4L_FaitFwdR@47X~lLYbgyGYh-nkhjm=BV?WC)7hv)G{Ha*5rygDB^<8yQ)$RrdF zopzIru!)!zLrHNH&4S?JHq_WZWNviN^^VQOl9LQ9*?_;3DF`=y(h&36`+a}^{C-*Q z*WSMQ)t=uc5LitsCSIVW8;wbUy`=WI+dR_yTIREkwkw(0mCD+f@S#mioOtkVaaS*; zy$Nh07R&&qLV;wYPC}@08kcIRQ09{wRT`S<-nrMl*9OtIYdzu z(1LOzbvn)f+u4*Picr;Wgb<%LG?Y7L$W0ukZ2+Q}AH4)y*47|G`xf*%oyz_XU*k{i z{LB6pTp^WE7b+8YOf%iTiO7Lb(C;6SXIiU?kteUkoViS@~@viR8DwZIEcU}K(=<=w z?oKysw6-flZbcy&Tev&L@Y%hEWJvodX6n2p!!B#sctX2rF`Gqen4oE|!))y*Oh3MFH*;jC7%=}f;Awynr9r6d--OCl42tw@Ln zH5mX_iBTgIf(_HmHgKVdoWpJ+D4+mjWj6NYREma!O^u+^OX&_%258EOyO0WiD4J=h1Po={tlTK*4j^1sul zCf-B&H1*IabdL<${rZM~p@h0T28V91vPPNH!7{h$w5}YrRyn{Di8V-S@r*r%UH%7% z2T3MWui^-3bCDqGI4+zVRXoOHo>_HW?VT;QdxWPGh!D`{C6XS{ltCaa?aa$9sd%SZX{rP@;dEKdh9*i- zE@x}IB1&q5r{ie0$Mx!+?Rx3hovEEo(M_R}s1(xh(I~e#MM@|{gtKTOt%*fN8(dgQ zV^A6~Vm>7kpo-6(3B^(|&_Ye=T_Z-=taX?;<{UEfW}<|hqBE|wTugLhvAU8P6>0%Z z5h@fC2R~mtgM`pdcYDXa5LO;5bJ*1`#dbdd@QH~X2k^^pzO(eEaNHX-8NFqR`O}w-`0$iQM zDhgO60jheadwkQUSJ%G8yE6rCm6-`~1LbLvEfYbA1`&$_HlsXoe+o4+35aTOZlj zgI9Q>kKKBc)J<;}jGa&tJ$4AJP6=7Dc8MWK=FYfL+s!H20NJ$h*iZg}PeA;Fc%Zit z!6A5z*f$Rj4t}R@{_=Zr>=XFK+yD99w_mNpvL(|5dnR|u4R9Z5Tzawf8q`XH)iwvK0tT=IKQL4X}X!nc*41}7c#ECUt~h_)@p=v6z?~DtMJWs>Tn4T>7VQEFMB!< zrs%!LUwvvoVxy}|l{iqj?De+O8um}S{)tiuM5gF|i2sLKT_+sWMaVtq<_6P&V{&dB zcf(7G^Z`yOzdQB^@*O;liE+1`73a0z#uv*e@=JPpcgx3=uN3-C_LFC;-ISF{za7p{ z(~6os!;FNhHU84=R}qQWvO6I2pCbPp~-HUQBs1wrAmhO>M8=s zDFJDvSaD7)(UXM=$8&k#S-2Bdw`TTc*SQSI6ls`3V|44X32V_uLOE#wRWBPDvpdu)oLW&5Kx(XmJk(D7pU}CCar*Y^s1O^Ko z$;{0USI#qUeLVgjO#gDf|HH4-Uc-qi>G7lo$Jg7xVS5k!-v_m14j!HFM0bdPm+l{N z_18Jf#REY{wx{tx=72lMPB8iLAC38p^Z#+NFG#h+1Vo0vAbafYDaHqeb%rtOzu)-} zo?gqA;<>=q6`WQMcj>2p>`&QCiF~;=EkA~bnm?sJV@+mwvS(Rvjzmsf?f*jzWS9+6 zG=OWR2bKXMYO{ePz1JMyI?A>(ew)hOYHjj#d3CP%iGH z7Wi`P+os_|HnuS7)P{TbY_-$`_dH4G219eSkGfn3A|YjO%qfH*Ndr;TG|{NhHpGV` z#=8ZYqncVh6yX#;dkc&VKZdJUe3qK9A%uy_F-elTmM4K00GXtqWR^%0C_6e8?A~x-CLGQIWz7)fqFrN{OsoQ!=KsppT0un4>bEiz zx%FKBw(GCx&z-B{E~&laWkuX+cEoBPgwP8a0WjLmoYZrqVN!OLzFl+2l+)+rPMft% zRgHkbF_r*IOz0v=R9Gxt@Tx95yTnXXIhr1|3+LPJbadmQd&kiUzVswEmLbwSoxgTqinxTq z^P2|P^?@h8zxHMk`Y-Q3fxrCs{*lxaQaG+Qam?0@B@0@di{71hw{yX>+a ze@Xc_wV$wlLwjl8P#df{W%vIVCSk&U{3*eI-fZK=8`%oCG4V`^!|yp|!-f-KM7>tA$zyN3I*9=N_l zX-{sU_!qz$`K{WA(iQmQg+D6&?@|A|qKtbLUI+XCw&|Z0{qq|B$HIRe|5Hgdc3Eoj zU7~OVc?wi?#`A99h)6GP=e7NlNa;|c65tNLt9J5sbv%Xlilv_Sak_ZGe4UV);lX^p zyjHTDk$$@@&PHNS<=;5hB5|jdggjXxblp>>BV?mWl4*n2(KwXc+Gs5YEL~%G9u3po z7>#W;w%M?;oyNA^@V?VnjT@s$8l$mo+iYx`U!M2+{_NkqW@cx0&frXD9-q-a3S>Qb zSJqgpaCO-RX}Soj!{;0I6(Ywx+D;`VlvNT{{;!Eh1Eq`V0n{+1EwM;>MWsG@6+ua@ zgbT>!O~HXg$l^}?dFls;W7IhTcwy0g4pBBNs@g5)30;H=W()e5Fab8woVovu4+h>2 zx*Y8U@Y17X7Kc62pf2EV8VNJyC#DDFxQ{t8&IhtPq;j_3%38tNFAQHeclMAvieV+&}}v+d|COE&LiKOCKrPKxMRI) zt-M!Ky?uUWxL~T~Sq*dVhjv2849z@(}TK9$cAmJU&s^;Yl%IxWU*xKs7hMBr5qt+&z2)wMJw4C!l@Qn zcSA>~On^PD<^b5JkRw9QN6-Y7(5r<75B6~~v5kqa8646MkcC@&5JzE{MkwLY;KN#(3=bD4jht+iV#<`?{n(X^q}l8m zu*G9ytP_VDVxyPq`x8FTKd)%)#&>B39T8Zo5yn?CtDLysEj<}8noN>+B59BC4b_PF zpF;z5nv16j|Ds)UG}>17-XVr@V%~+wZjV5h*r#9F&o##gmp%R43Vb>T%}x-LbME|W z5pLN2{s+m`#|G%xSa5DHPt97G5LmVMUc3oS_pd8-JevS{JQ4=k*ad9G)nVKf>d#OV zI#xW0flh<>kxBLqzS|S3L=CyAcHmgNRBa8JE;JUL?OWNf`nMar&-`n*$ZV}lF5Qmz zUpOv&hOAm`61HG1pWBX<5;paqP)Z|tYg*Vh^qK$e-*q7Td;luAN>2QFGtDdcS-z0K zL3TMCp;j%Zh~T?xUSol~zW#`=5Xy7?m&LD-tfW1^Io;zzaEn~wOVV@JB37nbXmf*T ztcMalV}B3<6wzZwm|4qnwdsvopRPvay5|Q<3hpH^^eA1kA!N?5H^)bLWe>I{+L()F zwlKCNjC@f<5nNkPo*7-MYx`@_O-__l3_(${HrGB!mA0u!}22c)xP z60NpBhVVxA5{^fATry`5toxonPux`s!wHGKb_qZ0f^N^>dOF@6-{t8NW2W*8&6QHv zB6Z}$X9xC?XHC}BZ~`bfgAd|0#EIYl`6^=wMht3Xi5Yc!MCC0?BRbnycqkk^F>>De zuZN7f;#F3JlRHQoD%|x*>XK?S$kTW&Eo>Y)BIqYOoSq8_RVPri)0FfO*_cJhXlT6r zP{n_j@?C!#3f{HfmX?9u`dlyPNI}F8aN~F7bW>19=`$TVCz`xn->cvAC2X%#aa8S^ zA0|&x;|xU0JAXU|S`u2aeKRpcZ%>m9PF~3%!;qov*K4#~srZ zdZN~!L}xIMV6uSjTp0SvTHK*Vq#$ZfWcF#k2+d;B!j9YTY8-+HntRM|e%(1QqrAm% zi7VMIz2x{Cir(TrOYNCC~iL9hR8dym-nd9m-$vu@~>;vqGl+nyNEwG^K1qt!jlHv^P| zwGc$D;=5mC4gDtlZE9`vtyT4$wx|f@=}8WQnC*17Aex$GMvCL@iV5W)2Hf=Fnlst7 zVVB9q$|1FQ2dY(Unh6a&)qlk=C&ApB=$O_n*~%9o6_WimvTf6+Y#L2s-0zNay~>qB zVfh!1(FAs0`ct(sa}t*?*BOoLo%g0`;88S0}A3jMUm$Pjn~(3&!zp$i(lq=RXp)HBb5zVO+`RJwpB(J677Dn|P8XkJ?gN!J9n z4M|?+1m2<_K;Dm}a*u}(EYiR#VtNSnQ5ba2J9al2n!F>1ha~t?DMEOuJS9sKW6uz( zF1Th=vS*(aM9m?Q-@90>@wS^PRPgi)Y#r&Z;4?|6y+9gn@}A5g9wx3mX0{t>+)y`{ z>+_6QzN+7?u0-DM9^lr3>m43QQ$v>xAf)^W^f5W;*c^JPTSnnwzAT?=`Mjnh>agL{ z)3EK*5UPR_+LK>BE(-aH@r7i#%V%fob`u}h`-_u#=b%W0Yckj_&>g1?p>mGBBmjL#DW0 zyWrc1dvxnhX(IoV)&S;!0IzM2c-_pk2;M&lp>PGj`#A&l14xQZ#~&9#hW-`(RAn%- zVVK8Mh`vLx?1PGWWWtmSUcSWaY}3WL)wwK`2#?Y<0Izeti+>?*(OONo}yI>jT?kmt-2 zA0*~74yPB+pz@dMn zwSQBeyJ+Mvc?WRXxphVW_@6y+gd2vI;#V4Xvzybi^VXp3`Jj0vjxr394eHFy(ck;lM>m>)#xaA|{1tReigh9Gy(sA_n zu~!pqH_0eI79s8NJ#DD94?Ssv_?yY--;S5hnc(_(GSm_hD&^bR7?Cr~ZP34_^%*?) zO;Z35vb2u6i+q{cEUhLuxt3DvU11u+sa9?%&2RzC_?i*fFO7$P(mavwPdL!G#;-ZT zCW#%;E?B>N?wce@%#)6yo}j%@bLwyNc{jnSP+CI+0vgS0!7s*hIet!quv1Cg{waD@ zDDG;$fS=394Yvf|1OX6Xb8lZQ-7hV&IwD@z8=Y>3NO8sH)>i@mXZQTA;RGefXhnQ< zWb$!BiC*9C-8%Gzgd<215kSw5vw6U0_i9pL)!K6U697z-)$vyysM!EO%&|)w$8AND zuQdt~p*OTv!MeO#(nSqJRDP4zMqF7-eNJ@owE=HkBdD#lG&@CmT>bZu{RfcQz?^j1Pt znc6(1OVPQ;|7({W)=X#7uTtJC8~^L5BxR(q2G+M5gqJWnU}xp9MN8$J$d;A>77=4H zdY=o`WRYoEL{ne7gw9mcZwLOXtiFA!`kJNa`B)PkqH9Hb>GBC412fCHKb4Ul#HN)e z%f=)Q;Gs3XHr)0D+GG17Xe+m0KqH*?tY%%(ftt9ef=Q~sH77SlgZw zYzIoRSkhnsFay-uZAnHNBw4*;zo@^4q8&`#2|G+idHP&w8Dj(UMrKhspj_2(T(NB- zC#o+ysbP=?Yp~!kQ!Z4b9e-E1XwpzR;@Q7qrQuq2Y7_hi^?RJYd4y7S_t{49>Se05 z!pkxR$Leut(K&esl~5)$N!7cJ zXopY}mDziess~v0M@6$6&#A2Oxdtvuc>`&CyQL=pP6Y1&%4#g7>6eW_;W_76D605I z!*xaTY#BWt)lw;!S0Q_+U))6MOEO@=o^mJ+>+OJ;wTs<%% z!Q~Udkeg?ja6LQ#Nt|C{6uh$P*RpJYc62#n^e=Kogkr;_HJWf6*K#`e)6E*e>G-i3gK3J5l|Y_vo*8Z4n=ho!A%Yd}P!R57oS ztQ5)2lshFRvnsWP@Q5b_a>`m;6bS)KjG3gQUl2z5+5n)qX4!wDP!2VGqC^`JrqT}u z8UoxA$^>9Udi9%_Jg5Puqh@oWUfx(cz)U45I{p(lxj0zFS4}MzpXG7lI8TTuX&PiT?1co`=5%sKi=woE(Exp zxN8L&1l&oORePKRz!QH4rHH{gs}2Dy7@kxYbdTo=7%@XfY2Rs_`H>Y?+hoil0r+hV zpZmTt)bazA-x8P&_POz(z<4cZ1#woMn<^iQlo>E2qH`bwIt|Ds$`AodC}4*sbErfv z7-F-eXQ(%K@fbE@x(t<7w<0pda}uQK|IfyKOWAxXH$G4Ibtyr$mSJgjOwyNoF*F>- zhl~YC@hAyWN`!#nUzL`Z zN9*x_T11xU`9@VhA4bsx^9?`8oabCE3j*MbOv;fQ^B468V+!TgslXf81YoyKA(&`iWYO(M5JH;tm0r5r0(-2qeG7!Ue2lPS}S=;1bJ|L=>=R zRKcRz5{3hP?Z5oJJ>cR;vbY%^6ID00mpn0oc#}SY$ZSfo=Fw|8o!I_W6?w4#hS^sojF2&Jv`UGNFXt}Ck3k}& zD*U^ioB)wDh^G8LeFU<#*LX&gs3v%&sq`K;YU#VaqXzXk(702aswUMJ zl#OYwLB*qNsiL`2$(KYGbnI!J`h@}v5ukDCjCLO&JHtSZXZuyZt&}wy1w1)ieW<$5 z^pM|T=)o~@PzI6nb&dJ1ubcq_E2F6R+FV-)_N0ZPVn9cSdR3x6T)?y#1MK@zlh8;i z9oFdnVN&~15k=|!+oGIIkB)n|%=*Ljc+NS&?J}t=5&2*)qE-`1xv;1(bMQmTS__7FLScH10qQ6`sc$!9$>Z)K zw`F~^6s*(ZU}ghzLsEqGt_c=oF!3AoBPGcgT>nBM+1VewB^j5?5a;bMcE2tKsO*MN{oK&pw~MwG@S# zXAZhJk8v*FA!NY3VxvzppwNCiv(nlPoLVV;-TVu+{<0xK*DH9ReAise(#xI#K1C+N zR~TKUDdF6mfz;%5xuJ5BV`{R37?>=e5KC{CrrW!36ce-z=oX zK*O&Oq9iJ<>zLwl;iiJCxQ79hDXYteUX&QxgEZ}duyP4QLE3n~g+16ii}B=iVqh0X zk3qO$vnKoKDU%(GWMRHVBKsF;EkHohhSRm(TL-Doc6}lFBLrDOQu|LcJrPO2;cz^* zZMN_fm=kjqB|wNM=+{29VCb-xY>Tm28d=7aGgAv6pP58{g>`N3#TqG3yQVrt0ZY{} zMG7_C9Q#i^n?wri%Q;lJXIxXEE64H~p3NRIKCTu-ero5 zaIICX-qQkRcU8|c*v3XcEpvYss*zdQ@%9roSQfm@CA?A3892*b`U_{+pP*{MbY~Uy zE*yu)EekTh>R8pNA-b2gAl_bQUh^`0++E!gtoxX;++E+DWp!?)sGp+V#g+BCm3b50$l%NoyfS`Frh_m+hr(S$x4mc8VFTZ%M!>L=y(xToZ7zP`gUY zG4OzJ;{La*j(N~O#*YqEmkn2oZPi2*Y?f-fK&xv`V&n244^)fsEjx#o`%Q6n9F5!l zh}X}N($l#ON!@oqfVPUoY+z;te>(wUO7a+6nVAGFV4zo!Seic?H9w$!?Fw8BmNnz zJ+wGi$Vj!=sTI17JpLK450YTYz;1v6UFW#PQ~e#FVBZgZN%eZaB3;U3DGxO(9r ze4zvCV_wC^?K%L2o-eaiOh7wv6q=TH>DR5bJB|!-*8D{G{qmYWrGJUy%MeMJtX|GUwF1^hxmv-&qq#4|bJW?lS-=S{T5W3OLWVnLMaX zWZjApdsaZ*a;abm0_`w~%`pn5^A^YDBYWX(EbaiaA758%zRMPhILxcN0KD!}AI331 zqDW2BPB@?hDkNrrNoG=CfNW)c?f$O_opC0iA*6`^y!(GOV;Z}c0 zrW<22+_Zbo|! zyD(gw3wptIrXIIyS?CZ0Br75i^EO~5Xxd7J&^n#r);ZaneE%0;b1oT*&eIHe1N^Va z54sT}S&|0=&zpI0zK-0P1rSD%e<1-Q*($ov6y(kQigvxZcZT<$03(i3fv^tOq#=_{Clg&={Ol|g-b{|^hN zA*}*H2*0W`3~ddamu9b>EFR%{Iy~8*a>|Rut*%VhR9qmZ(0buj07um(SObrIuIyL? z{eG=DF>1whExgQ!^dp{ux#2K!Eb2{0G}2KI7>aN1Q#?0^k5HVX!z$ca>NB3t&v4BN zsJ;3!ALH4>VMJ8vrV%bu(jF)v0fp=3X;nOu3ujA)C&8US$6HA3e<7_Z}ZNp9MN z0!KV&wL$?mCiXtl5I}|i&}mv4Uiq!m;Mx)~k0ocW4g=sXFxCt+T1FMZlh|7RawxLx z)*JkV6je2BL?%i!s5%j%$y~D+6HTrKO`;dg6}ec!*kN|7@^cV&PoCPUGY+)YN17YW zfsMXAD{<45c)|GE%&n`-&+i8mjhJT5`;2rju;tLk>au?>Se?#=0t=;MfQV1ZU#jaC zB$@qi;ENRPg+#2XCSjzCWtcS9{CbKJ$CcgcR%mf1WAT*c>WE&Q3K{#UVGFz6@~9!NAYs6E^KF)}|)@gjW(&RI$f((4H& zHHUDM{Gb{RpNDs#MA7JxRRsWdNa|X?*vZgoc&vK_dYbox{MbaYE%OirV3+uwjMmsJ z;8+)#+5J9_z85}L`&&o;Xoi4i)IFBxGt>cE$F7t)Z#T?0Y}%?gS<5OK{!)LuL-Vlo zqm^k-3~93ht+}c{>uTue?C$8FA(S;%T;rq>EInuY)Vdic+4)J$EvN&07HEd}Cg@HbVk_nk3$R61U^+7?eUbl<{9R<+! zIhE#p%2(gENJ>mU;B}>R-bDdqcKY+T3z;cu&!K?T%ZJ8niW@{)*CDe#D`>Y;#%?Ov zqI{JnO_1>^pHt@0&`A7`=0kjs*ZanYzmHGBHCnDNj0LtTKP+uHHCN7g)zE({==Y|K zE@!30U$Qqu-4W*vWN)*4j89l_hE(`Zq&fZhXwQr3pQD6=)#p?)nGp$ zg=-^)sfecM=TSS^acy<|QL>L})UILoiHV+`E3D16mu#el^qpy&Wb9j*X_1hDyv7_H z*W->IMGAUM(k`}0CO91Hj7a*xt!Rxefn%(7q~f7g(;9)UFg9TTQi1i(F}z}PIrC0K zzoFF1Q4tO-VK4tJIH{OQ-TIO}c5I=tPkmdlX$pnk!LD+f54(nWWy{oHt}kYUwnmVI zuvr`%m$ba@wwb^ydGH#^wb#|N+s27kQ#(kmw(Ob@Bi%acU0kYDZ)9yJS+j`^-fKW2 zkD)Y-QssxkZBalNdC`Enc##?|+iW^wgHtK}HbK=bJ=wNyaP8o8V%A5iq8t%0Vr9cN z{eAEqN`;aa04%tv(9w+zYBK-BCucwUf>IU2W5mHYnX5Ws&+HR!xF`3jA&{KS?7DXI zBQX?u(imT?ZHL8fleICa9f1a{MseoQmPMD^@`2j@9g~U6)V3Y;pz!IOOU>XOu~ss zjh3Bu`ytR3@A=GN&6#5h?;A5kEUnv>_r%;m`5jp6T^{@^kvrXS z0Ry88M52ASnOw<@WSP)IA{{tLdowCpBpR)eEkx6 z5m=!2jc-8o>v}nJX*}U$UnE7J$P45{i7{D;Lfy~UzXH{QlCas=9`G~kFgnjgnsh&S zUT~bfgu+Fp1E_bDshg2_3L!;OY5wREtaZ%rTwQOCOTFTEI8|EWBZA|H4^EJaBts~| zWk-r@bK~K(Z2A#jKE)L3+g2%9exa#th$hHJE||g6N&op&#N}7nZKK|7Pe7o zEEZW?%FHoq)L-Ix8jeX}`CTRFM?Lij)8=OKnv5&8V~qWZ95=Pu^3w=g$L`s`i(`bAiUC(d)| z4#ZE8$xb0e{Xr}W(xeeW;4E>*@vR&!Z#EUD{u0_rv9&*Nf_{13Bjo_lVwyLcGqCzC zy9eHJ^4mnTQfLu)U8LUxjx+A*Wocr2aQEA{o#20#1q74DD^|^a&)2OH?%lwMI0QFn zY1o9goIlx_urInimck)5xX@qwme*@om&-V@Zwc^o|88SWc46t`WO;AWIIOc1QiY)l zt&$11+AnCryudDO?T*CE1vUJfQ`N7ap<1_{iN^Cg2)*~Jm8+ccA@|hgR!~&N*v17_ z%uqrHYdFMuhnF`=+lJ%gFJRAP#?8-_?p^ns9k%( za^qP$pK2%SdHhO2bZD-+8?}9c8n_e;l+|lwAo;xe+wJj9$_oYH<9# z*2kXxn@Z_YGCp{6{OU^iHYoDM!w!0c%aQS zt7_{gKycWcks|>ROvD}<)fsAg4(!0GmrK!-n*U|D{GqW5c z)e%B26w9!1I!0VHv1HfTu6J3PLyX*m1w4d-@)SB@)yNOiGR)RYh+9m07>Tf0F&g*T zd|B04O6D?FiZf(5Md4jwG@JizF;)3&*_E9)FcxI!dH9I25#gNyIGh;96dMSz;q6+GK-+*&@^iGr*Tt=DE1XVW|pu@ z5z?9hyx-X<1P)DPC+VpFwY>xJs_p3Mll}t3Vc%6zZBN`zfv}F}9*)Dt7iE81OZTgT z7%qlisjK+wozuTXJJQldOU#=S=r|sc9&EJ9IsE2bG?qP+n|u{z5WUN7S}w~=(3WK} zAIHGL2aAV>&CZWP9}HT2Q3_rIlC_xDXAp}20U}&{vX5at9`Sc?v9m=qKN?eq#VYsQ z={bUa((S>E(_T!`MzbfP) zwuk*)t{!6BJ24<|a^97&Kf#{V+I)0{BZO8j5=}PKCD+9?ihZJroN4!uwZ`qyxKB*h zDyj%fg&d_KgHA+OoQE32;CmwpP#G6VUnfZbPtFLXQ`Fi~IBFVDowf zBcOY7*T~kRp{2Lo_)l4t#3#_IlzBAZ!2Dfld-Y% zIhX^88#8sisBJ|><}Vu6|BCaDpz zI<`j6vsf9}XzE^eMPJA={RQ&Y+_X=c4QtD3+28BFp2a^`A#RqLhR9KJ-G#Y8=AncE zx7(Mr!m~PcxQ%@Rz^)~-Heg6EsLyGl=Xec^%}G9_IY>_saW28C9!8yp${{2$KLaJFy^{!4b zw~bN@29$`w)-hKTUD0v@qxoRaeb6_P=}YR`Phk#l@tCBhf~owU)PF<~0n_N%K=0@e)UP315^=#diZg845s0cG<(DGwHMD_er=AKDAl#!^7E>GX=|cTD0o-&lY@{ z@Q3OutvycrrQ5AbA2+P@i zobb&hweZXJlNdQR@L!a<=8IOUgh7}aAs4A_=8&LSf2Dj4Yu2k&&oBy>o5BPlYW85^s=&vFUfZi(jC;jqICoT7Y(q)Z+wo#fu zIWMHxjdk(et!xyHoKE(Om(CXuRFW8Y$r}wn*VtIXF$&E`QGKPRr54&QM_((pFbTI1 z5;+2Z>X${h%r7mVq?Xj=f^AHFM%LDP@&}GGZ>JLLdh zBQ4nBq@Ct(Gu-SFSuPjpvpJso5v3XI5a16kg2_-1c|fphYCHu3m~4f@hB?YLW(SH& zf+qhH33rWz411`|h6Q3$765eP4K?Jf(uM%Q$dQN&L~;v&3jmpf=*FmjWWO;Wtj`j+ z;E|?i0x$SN?}w7{CIn3sz3ba!Umm>&u0O%2;2LT2u7*qzey#E>ZoC_{?bF&<$+w3a z)xM*{qC4dlkvS{;s-;%R-{jy^NvMC045qo&Er^PYs=xA9!vU8>bZlcPa(wx%L$*3L z=X3`(i6-+-CL0k3vFn~!6DG83N;byrjDI~bmfr9I`YK0^IsUAOEx*s?4ZdE?aR0p;z${V3Gu)Sx3j0P|G?NTM20eMwL@#5q*=Ek%4- z-)CnF6&2n82GW8FsAMMMDXn}X$f@Ypd2=_`W2_+jUxUmh?yn3;~q2HfHqHpOoj%gPtF0NJERF9I-LjF%2%@7jqkR$^RJC zU-e1LNBHvo`%8CK`w`k;+m1EbGe;CE3zk_;xq~o7&XqiYp}|v^zCSrT7AwfPsUi~* z6b0jn2DclsM`BZ$>!N~rD@^jG6^aHKc5YKvcWFpKW^Ih`w3zt6u0$Ksq@#>#t9fo& zSSLkw4uJQ)JlPXCd6-%7hwZo|8|XFr%po%E858zDEn@$tMJjku{Rvtk-i9n2cB-5g zsa)gIQ}@;WG2sLYnUMi_>1nbim$6_x$a*pOf>ZK8B)nC#;16Zj?JNK>u!X2nbBK8N zkuWiTu{qKzWNESW^gObgVZ3*^$imB+h4Q=nO7o>PXRR88-5 z{t>x|DiTQf8ndGr?2b4=A2>!3a_Nzq%OA?hlL5MM4kJ)IfAAV!Q27K+^g>;iA3}VI z<~Ox(){iNobU*@V1tdRw_*Ft}kVn>m$M`{kTe<~>OzJ~tT92nsonQ)Cn z!n9dHc2`V|GxqE*yU6wJU!HZkeYQKU8sQA`*zk!%GJ=CX6m=_)o!hgMKv{JG7dj!I z1+cIFJTb%f?v_@+bf=h)xx~DtW$nFNg)HuXoN}>_HgzhNMEU(E>w5iHW(wQIt(O_= zEsGW1;~DAi3k)RK)?5J&EqfFlwnbYn$Ea;jJd9(|w$fjaIO8R|c6cLnXHgl>CoCJdermjr|PWJHouS@$wB zsa!FUM=sV4@1Bm^yWxa5S~u+ynF?{}Rg2{3RW<791^p6q2P=>S{3Hq0b$1;*a;1ZCKf1-zLnAJd5G2XkPzm zd^FXfD|O%bD=|5y-1M+n^U`fAj7t zn|EpYSfO10esVmo!X0CMT_kRKbn54EtelZ~qo!*Z(?H&YVduSo15Emt-y}2HLsC6| z_4kcA2UUO`R#puBlcRV(U5Uel=i5b&>+Jno)a-s1T7UAoT%%iA!9SAMrix9Q_ckw# zdH%WYv^w)B+J`K{dFWi1$$s3#$shnCe?3&40PVQ@ZxpE6h~vuHOS92e&DV~%@sZ%K z+`cAB1n6ook--R!zxy*tu6yuX=02n5u^#&KR5otYGB*Vxc3Ja(OR z?6=%wcZAL&1;ay0igBjJ+3;qZDYYK%f}T(1g={L_80UUC;!p*s1Rva0-F$go_a+YU zx%LFPG_=ZDU@bw9P5RcT}Hp{*k$xr@o_K%<)p6zW#EV zj4|oZC((5PlYqAx9B&JwzWkW|QY4CvrW}We75kZ*j*+Z+B*#baI5FpQ1kPV~CA}>u zmEAlji~4Ac`HPj7JA*Hv1++qW_4F;umOVfzDUAN`mqO;(rxac&$Xd#sph?O4!U1iy zS>vZ(t#ymH^H6qJCoB?<;WdZEWX7@I2BvjdX)mQR@;55t8pEi!K2oWxu^4EvvetO# zfBk=Cd6gRudta}kX2BaHLjQ6SLHP0KcRcx--`;KIuq11O;;3~!YkX3#)n{t+uWi5m zy(u_TmT7HQ@Sv7Nlbf=7uk|1t4FMAAy#>3BOIVp1yB zbP8uI=~jg!0wf?zf9aOaqhRrzE;&8yA^sN0psQ!fx?f9?skBPBB0sa#= zSAh_Ev?f=nj?8-9^7N*SpwCE!I=9Ty*0P>u!O`&vtG;gPI5g2np(wQ5T487KA43R{ zOTABBP3BpKwR1%XpVmf}dL|*WQX%~t?r;IXeD5t7ya5AJ%lde}F!PnD@+wHjC0c2c zW)y4T$ir3Za2&zi`Q}5R+f3>kSD3e}EuFrTz zPYH-7-OtVqYW#rZk7~M9^S6%xreVYp#P<{`IhA!Nin=jpmbsnr7-GF6phR?ppxwOG zi*a>Fr2xEeSTRn#=saK&L&xK{K-a3hXk~IS5*BJDq`i1+xsZ>-mx9^QEL+^Zh$12VrS%H_F`?7H@WZX?s+8;Gg+;x& zV9X*orxAORZe!(gf9OrqLpW||+Fk@jHWRdw@9-4Vyn(*IJik3fywzP~Vv|iIgsOA> z!M6mIPyWuZdNTgWDT9u^kdGha3FH(^HSHXSf=N>ewy&zvsO3}pJgRVR-_^W`4d-;5 zLg+?6!eNxi%f;@eZ*!TYrgXa+HmFf2ZyasQ6$3c~B^1?Bn` zPB`1q|H1b5_7U!QWvOj}^l4WKt3#dS?SAj@oAq-6dpgU~tIrrybmG-KL)nB90{_&1 z`{cVR;rFp0_dPn`yT5xcWB>Vs&rrYx;f)QY+ZhknSqaAz61Wewr8JD*=LfcN_YD$$ z?RvwIC<;c zlHWr9bNTt9wWN{~Vx4SrZ(nFZLkz0^vUl-B=(awLE~XH!pZarSYp9{cN!_s_&9-Xy z=g!zK`nryE@6pX)YX(Di-+U`Ngp*@zi?}W>4V{<#zGSc7Zxwygn!l!w8s9iu_A2ZU z!Y=h{|FXf6KU1~;I&$qWa8Ba76=wMux6{q2i>^7W1iGmopK zhhO9Q#%c$g5G2xs>;0tMg5hn60t9?4xnIu6Lf}AX+d%bKd&NBDDN^e1Lk-s^r8FkL z;!R&!Y|BS(2c3B}!~R8>wY_gzVF4kBO#=HP%?n2Gss%T{b7l$-#-s7iU0BtaqJo=~ z3hgUjAAjC)dp9N7dd7(){Tbz?YPW9=1dtYLXy3b2&JhS%X_eQc4X{U!aCg6j1@r2A zPgm?(JMj;{7I^INQAq!e@`iZ69)X0wYu?vjd$XGLQdhrH^~QO}Gp`mq`8Mu|mKm(D$nmKc7KtByOb2~jJ^&_K^q zMw}4Z)88X#n=Xq_%%dp!F{V1ltbS1a_V5;Hz>AVdtPyY_4Eq@N{;>=4E;pQ7XEb1L zo}SjhCB9L1IEE4`qt!a{58`F<%wJPIi_$xF4R-bvvqWNzbRV`f!i5W zUqJx9;_Pc!21PbYY$8iKmZOX7gxT=8+j--s-Z!!n-^YA97jSw zGI8&{@j(a#g9ZtH>VMsEh1^|kH4V7?FZ9y0TRu3^(o=={cA-RD2I*oYqOS|Y<#S&Q zY*+GGiS&g}#D1p3Rg9w;UKIq|GF{jb?p4Wjmz|cc{rOwD!1HIt1GkC&k0TU&`{w)7eT}Y2fq2?3JHmJ(a+~Jzpzf z2a5`TcK3F7EBKG@$u*Be3Vw`e`4>s+o%0_ zX`C@VTYGNnX+fy8$kPoV|m=Cdu`tkbp0wVC3MkLN6XfJ&Y5-ult(Ju ze`Smcq%UY=w2^6^3$HtX>0DpuMLn?vW#ABt3jZGfpg>>0Pf7Fw;FaEP)!cCa#H&=^ z#wxMmkK`n|h3qwA;UVe8k{MREP@zA|>4Emz&1|GWE+d&l$bKA-${ z2G_pz(~iTkUC7$o>sc&R_4M&X!(Qo{o$p#*-{0M80@8MG{Q*mJVP@^S?tDG)EjVxn@ekLHk=7r*;cgpVJXz?>! z8v{V}=v$jEdH{%8YV-(;wt0C5op$Htb@iw+Ns9XVcp+zA^UqIhP@US*ei=U7TW`GF+6{cIEx0#uiGrfMb_EksI5B~rF zdUX!(GGhK0Pma~06;UCcVJ+vdc^WenET2S;NkLA@O_g2KnqK{x2%E7u95}*AOZkArsn=+ ziXdzmGcoM12xP|VF9!f{H~Kp;?B>3%%ohxD&4=_lu@6rX#I{$ZJ!`%4Y%F4hiDd4flD-kD#k958Vz+!T3|f6-UKQfO+soJEv9CMZ z>X>z7UfD>ur?a*J8bV}dD0C$$O_^I2N)(bBht|fPuZ@A%^7IJwOauTxy_@^0+_UKb zIQS&Xv3yF1dK&a@H5rFeU}baY2<(hN31@k5h)@E+h-=9!Qxf8bxkW1xbF3%sBTy4Z z>pP9wSGYHz8yRb>)ASv$1tm(9a1{VjJV$^M5gZvXe%DeC_3qDAcYj;F>+?F%v*}2| zJUY45s;-Z?CP`mCO4qHN-*-dzRjQsbK+9s5*p&3G`jt3(rtUMcel^9fjootF7ez>Q zA4_fD*q6uzD16&DHNUToyQQt6y47^V%77I5chTgS@&w|ArKe(^6Abp$I6o4k3<&^M zwd7^owKX2CrzUH=akDf4q6hF|U5j5Y)Xo@c5FzDnrKz$phQ|WdMtX~N#1{3~nRQZx z_;xD*(&hX5bq6>ki+Dc#LSy~XF|!0I5W|qVi4l&R?sa2DFMBfqcy`ev!ogZv{n)Xy z=)(I|2Y?Mb0C-$J+JFTD_}*_omb`YaOKU&`pbn_qCI^5T%Aj|v=}0ScusyzFbOB)9 zE@j())F5;W$>EhOW+OVf^0%QL06O%muqCBWngKvRPmRsbo+Ad-GI5`?aqpUIB*G8? zz$wR1|NW{H^f3DJwjTRN)tc6SzjC&%?G1p^?f2#8nRTR>sr!zvF9N_*Mb69se)g|; zx4S0-n46Z0`?x%s+m3l!y?0eG@IE^I@8-Tj*2n-5;nHMdyuTc-QltE`hrILSE8O+> z%RF<~y1*Bq{DPoLH$l{Nx_iufna&T5-=EMUHBiK%)xOM30P+s3J|o`E^QEbk@nh7r zdtZzL0GwP3c)HbeeEa!~d)NQn*fOcu`D;xL=Y}-54SqNJ-K1vLCB2<;L&LsUInwXs zec-nP05E1*Td^DQZct=|u0-uVfWsgUHug0tBEl!99|2Ew4zK0A(ffS78Xa*`&GZY5 zxQ)C&-*@zGHPz@|+-oIyeUCk#z5RChUfWsMC=#TWaN`K*AFh(1#`$GHadnt?#OEnv zpci`MD)8|_4qd5)S>fu5?U#Y>eQ@!3PPzeb<;F2YRjtYL#$ImHOAgnzr$>})QmA^v zZp7tcZZtbGnBq}oa>mr~c0tl-ZQSBeM2_$nk>(w(w!G>!Saq=yp4{VfOXW7ov}H~9 zYtaFaza_d}0jmD-VK3DA>}Tt;vUfV}tKzGu{4wj^YwL4zv*U^Vxqs`_E_p`Ts_V91^-s=q`~%>?6BFV2=F19(}Iy3$1TN4pR8Ez0r1^ zqo2nVkkp{AG`R-umZld(#v>t=I9tO7zJ5GQT6EOV5`ZK`8+Mg!Y=gRQp+5 zuchFLZsU8|=9h68*jV{s{M&5Sr+qNZ_UcaKmX<<(d-)Z2Tl=|Vu?;UX8G=qd#eWSc+oiyC_gwagXy#kp3HZhDr?K+MN`Q+QBL_h!l$d~zxtO*1FGrYRt!NZenO0``}iGQRow2wi=)Z6_hEjk%5 z0I(qtIEJGJ0D{h?g_pl53_^R6gA_QS+Zg3qDqrpT((&a!oohb10oXo$-&3fOOR{O4 zmiT<;(=AmK0FBXj-zTwWX%vQ6=vFFxr`;LTT4VEx&n_qXi;wWdRnrvTPj~Gnefohe zI{3{B1At<|F)tnF(fj=Qe(h_Dtv%82eY5?`pS*s#Dt8P*ciNGB_O}%V<}#^3t))!%%sIaIK(MUIuoJD-Y^ zG5#cZ#OdR;{&=AXVRi2(oB4f$6@f?X7u#p5OzfjL0mF#LNJtQh0;3(Sx2qL%AOHYC zK7zN;%vT?-KBZ$6LD&&pSLxuZhKp&}e$mCr(@nx9J>-|B(!}n>@g(8d7J?+TQpoh3 zGag?b{mI|ZNta*DdYXrx*o)1$_N4Z&_$BZDsoy>MlP_nifE5DiHaB-z5yx)r$T&Uw z`K|eRD%ul7oUF(?tcD{^Fan{qrkEV+xb>c%L4RC|H}M;6EDxQY7f<_Nr#%comfT@= zE9R7JJc(hKG>7Q&F~^TL`eU(SiDSygI(j`Ey?=bMKX32PB)XDw1GfCQSq|uP?#J!=@u@Dc z)rp&nJByO}5Nzp7SC;!dyHJH$e5)!ecBr?UKbg005T&@HU_}f3omnJ|EBN z<4yh;0E+M{dKF+IGXVfx1YSkuiT8|CAd`3xsp$YW1_2N=hI!k(y^V|9v>Y!6U@$xo z_>-1n(we}5_bkb81~LHH0U#2X_OV6Z-(To!e68q&DI$k5D$t90&pB~N>7fVi1(FN_ z0S2^18%aaYVtmr?U}W4kE0e%3S&|w>Qiw*R@Sk`5XFqg3BuG&!ft+MEh9rQs zRG%m6pC`1B!(i~i8xQ9%`|FO|$xbs(q#_-m(!k^I`pA3t-{tS`-Tf|qeLF9{N!Pb> zngj2tq>ls>Wgvr1fHtyLodD2mpf3A*f)sUg#syYU9&ni}fMEhaOQ0xkqRRY&lyRx) z%NW1(uLMZXT>s|OkF+XiBId=D?E30cni|Ci|M#1DpTF<_>T}|k`{I}T#+Un+Z}x~o z1po+*lW`f4EFPKiF~^VB`}<2rQY#9yZB|jn=VRkOUeAxkOOPU2HvCAIE9vy-d3=8} zzppNRYghr`DmB%p*T!0!0um1Tn#{Gx?&fCBDH}?Kh|3dL!|ML$2(|>*Bxbkw>llfWM99;M$w_fB8ju{4f0-0KlDp`5)qFaQ+|u*zmZ>J`8HTlC!b^)Wa1qXZiWrUw{47zw?vd$Y1Fl_jtoM@Zv(DQe-L3}s!{7X?zxoZosGquX ztm>uz(+^wiaX$FL z`T6tRQ=f6#{`h8%B0v5o{_>qa|L*($_-`Nn?uT3c?aR;nzCSzlwby(SUH5fGkh5|D zuyfb@zx>VB01VyJJk7Vy`s8_~$md<>FCTjc_2_p!{>JbA_57Fbv1sI}kNwZLFZjzp zBpre^$s-xULZ7Dw^f$lu`%~X=x$B>Otz3KW=kB{dyb<)2 zS4iJwtBTx;1u(Qv0Ppu&00%|yc2LwVtsqqrQb3oaUo2~!0Q`?ZKH|U6{?q6uSa-`2 zxBwig8e5_{{I@iH*|q|2vr|+&_rE>ezTt03y2`@Gss3x#@16Qlk@#KBb1b0GIaUO|AWv2mq8>@l^|E>uw#(av4Kgc}&y= zxKx;Pm0ZIIE(6uTu*+3-<8Pnb$}PMed8M5po_)kRRf z!Kc8wen(rOO2u&2t79hmThFYifN@np z0*hJqvVmoftuD6wFh$~D2~4zQyu^4|s>>mk91{o15@4dO8dYN5H5GVTT}KUsrN%pz zrJq~;b-R;e49eWB%~|wyOTO;+E3+5^>r@`pPg(FecI~Q0+1U$RyPNaHbqjE;Wy&IC zqOWu&0=~x8+-Jc6XzO*AU1>OL@5{7bx`m%selC=n(AL*#zWU3KYh+LglIt1cYj+-0B|bjnN9*yXC) zS6WD|vVu+t-NY`=C00}9eI?zOU4N3g-*TipG)-0((vqOAP$gpBDp^%?0f9?~iLw?| z1+L>I>Z)lg}9JV&}5)t^_9fGF}3IlpO(+T@l{irid5< z+7e)*t{PQvG;!s+weIrkrtOR(45zOm^P$^b>fO$}>H;9NPDi(fzvsJ`W!tS3(%t06 zu3c5xer#3D`A-kn2_n2wpNwe%-6sh(yqGSEa9-rawJ>EgX3VYP0F0P}Hs1)9OH7*48bLcO@{< zm+=y3$uXTsx?00PT>?z>RipZ};%eB|M*uuz|Md`t=9=MpmS6XU3iGsBvoqASde-zQ zuZP9D`*!Ojr()Nxs)4}5uQS}^tO`}iB4nbkbSB=$ow_vbdubV{OVD*8lop0c5yq_l zp4Vp2Fm=-HQiis^RvWEYIW@Mc1LdCmIKnHymAcR>0Vu${`L$3A?g9W0Lk0LKs0RQ5 z0Inx@n*kE&Ces6y5rvFAK-~mVYKuA~;0d}Q2?X#_(B%PK`bsF0XPVs#{V8=3+Cv_M zZU&dnVEQ=erH|j7`bPHXg&KJV{%-oOApih)zw{mj0093&{7CZd~kAwT*WU`j7WFR)=E_fRZ5nhWN)3vxCog6m+a0WgAKAPK3-U6P1|C~Mv zuI6xQ1J`n7^PxGw8wddK1$*QnTfUln<$HssnH7VesnK?P3WqUH~+MU9{{%Tdg}7~O+sG_ zO+o<6faFIXzunp-2Pt)@^6T`I)HUEF*@Ui`PMmS@ChGOn4?cc4EG|zT(-H;n$K;9u zTq>v*v=iFW=zAYOobWik3$DdZsUYA$Pla=-;Jbl0fQL4ErLv*`000>7h7xaK1s*R9@^4<%a18wlmdWA9)TXC7D3bGHolcH3h;UgxYFRMpz_>2U+@QsF}f`mmzc zlXs?9hH?(BjP%iG-H+J*I0C@cW}gFqrl-2QF)lw>iaF*06I@F=(~sNyxGK@qZ8}l| zjNeJf=zZx(A+j$N+P5_$JE69!H7ytmEA<#D? z0&n3dfWy$ssQU@P{ZxY-1y?ltc(6hqgijf7q5}D_=@tP1@L6IPb>#pqkzDn=dQNcV zbWN^5-e)KPa^(#OLr#q0Rwdp74Ux7UsF4El&s~#7exFJe$n?NyuVkYOIbKzVGqA`0|O;_5>uH+uBKP z1ONcPPrVzu1a?pWQxM4rb>%P}33NO3K9ExnLU#d$wx2wvU#I?w089Y@2VHq#UW1&c zE^Cq;obV!jD}0JP^m6ztyygI&BCmi~K8#-pKa`wsixO{T3R)m*V1|0e1!y;!f*}5x zo~DY%kKcW)6C@BptTqG&JOcr*rjNXq-ogPqMQ%#U(qCboWqv~T00DqM%ezIdr^bC_ z4woKH{YVEWc#Ehu{n*Wq?*eDwF>qxTZ-o!&)!q_K#MKT2RKpm^w%q6d;6l8qfVWZrH^olr zrSLz{&q=PA@v+I@k=z*0rQ4M_AfQi`!Id1;fu5;w19*bG+Wd(F0DwOALGqOe$mLm7 zbE9rKnfWH}UBJ~+ z?}CS`3;HkV%}$T|q>oL0i}<&hhjaP&^f%LQPCgo(j%w2r^j1-A8t?(VO)DQs9wwdX z)O#h-L|iS#!&+U_YBDLX^>`&jZzso^%S=KRBU1_au@(T?Chm+yEUKo)Bo4K~x0Tmd zi46b%0F>36Ygbaw5XqOOFO8a zH@%zM33h=iOoNNmuT$@#O3>xWV*>aB@ayKEq25R}$W!D#>P5gq0G|MUj`}t88>lgG zf@+cxaKdBszljfHr}THh)8Gr~bzcmAnfPm%KTn^9FNLSWxpb=%-vR#g?T^0$$Ki4nf7dXAt3<(z6$&n`YXi0MhE!k^o-udmw;a;{%Yh;i0=$u2mdbbUC28Dz!e{t zJjy@QKSTz-jT7U(;gj-rl0Qj)5A(k8&Dh_e?@2zAoNo5#GJk;nRq{CfAL2_B;Z5EP z`={j3zz?7w0!oK9hYe8Hi4PsshWp%3bIVO`H^199BZ03 z30jOyyOLSY(^e(5{@W+nt1NXR7gbXua*X1k&D+WvoZlIg)cCuPQ}(p3*WT$l^j(1L zUnch5uJ_G(O2G@j!_eDJZ=eL)O}+_inT4f0pnoE_Qvg?(gw9j1hh7h5 z)HL}l@j?Osu#e1xH_-2h%luL1De{HMbM((Mw`t<~xNmwzo&JXS zkLaHu_sA#GFV7V`-Rutsf0FzaNw5#1KN$XOdXsMee~|tydW)YqpCWGre}?`&@G$92 zznETq$0eGGtDw87Hf35<6Q*6vHOxRHp0BF_2wIFx=Jm9iIUvUb*(Nh`Q8hIhS-|J~ z^>>!i`;T>8x9!ouBfxg%$W|$M`Q67Y=ZS9D=S9kPv!}G}pK)v_wM~PqqY(D8yPr-K z`ULn6005k>|t0RX@azqa2n?r*|Qg?Opp=O;I%Z|T>Z|NDuk zHl6J5ME%dg8}qpIcJ#_GWj}uN;{X5v9P5fRervphbD4>@0Gs$0BhwcG0I1p0;jGD} z#v?0RYUf`9#HSDciLKQCLS72L06z3@8NfRy->1ytjo@$5ujCH!YSNjGGotPj0H9R( zPt1RYe^vaA^rHyiztVp}J`TPk{XWI3#lK5`3H>y1k338|)5p=(uy=kw6F+8Hd;Q!0 z#C!$$r}Xd8KLsXv2l$oXvoXN;DLx#$1pF29mn9FtQ{__reFV~`rvo#^p~fzK(;~B%e;|c69FQwhjR%E z6bqBR95WT4Q22eU9WDNV&kc!Awmn`WdiWCJ>82n-{>2$d)VBqfc+ zoRBOG3At!m(Q6h)B>^HxsBC&&&tHI)X;IyEl8iCe% zm0Ttl*B4E1pG%*<8tc(gWvo&K%Nc}5B}ycX7Fe3}!Weyyi=#`1 zn7IgQdSUf*H5Wu?CA!pPemJdWbqNY_wsGatgD+SkB*Z$Oc#?0Wq=6NSF0x|C0z;w- zpu*4qRD-IJ>eB@fTH8m?eD8hu&X~jhKJWfNckFMDEBK9HmOuR^Qa2o_VS%-f!Q7xo zA;hs5vU!jNh=F#YAYoRaT9#OqBs7o+3JMX(h!#l+3M4TJn~JO45jO=@sHVigG89l_ zCw+Tx3tR9i9Fi^i71k?uGEcF!EK9JULJ_eSxO@MJtKq+}Qj z95IQP2wGGD2u-1gKy)~S@E~wNVudN92MII;=mSzkpb6b*L|)BtLnv-+)jr#IF6-xQ;KfQ8a5QVBpk zjP6cB#a4@zi)Pzx+uk@n#*sJXjD%)g+R3y;-YC5=ZAg=KBA#*_p<;>vC#OPLI$i5( z+R~UH1V8+&76UX9mZzLC7n-CcL`{-36AVl}0zxBgk9@HR;7B7P=l~530X0iP2#6%m zh&eSruZs1Tym0x4g#PaRzqsMuKRSM(z398`pWgfR3#~C1+QQnLhg6|NCecBNW@J;c zFs_j%CMK%`MgS&@+Z7uk0uUe=5)g2J2x$l-j28* z2D$4gSCBXlCs+z8xddnIim}{;n}gd#7B-PnSmq1`Npe!Pmk`&PDF_xqd0D%D$A()^hs1yNRR0WBmLJShHw5n=s_QK#})Nxg- zLyXjza|4Zq!hw=6-J?vHISF)7W0yuUDYKe(5h+Dg3Kx?GOiWowt7)Q$&aUang6@fe zHYG9xEw+njOrlV

    LNkfYh)tczF7#@k5U_+sp_wTieo>L`!3u*=j;V_Po` z)*-F=kWsH>Hp;3Z?af}Xe^;6O3!E9 zP4QrcHKIVKmt^}AgL#QGiHspx%^heULgLM^70n_Mu?ZEBC{dD(6$x-9%*ZwIDSA*c zH}?{^R!b>Ts+gM@gOWW_vW~TIASoTl7r|!|PGwk5L@B4Z6^&ly$VG(+5ut{|C5aq45zqi95wylGPsc(p zSD&<3^cI&-VO(8*{*IByzkQdDRmOe${d#Kz6bMCZ(85K`qVwwJg}EMA%NzRLdGjF$ zK_@4CEMkzdNp6oFt5~MC)19JQq#z!fO&@ZJoP)=XnAoGc=ph#3RzyoHNz8;u=+jM3 z{S4;d!>LO;p$^s2hpI)0LNfpyK}-UriMf!_B1K4PjDQpr1WDK^F^WT# zE33t!L!g3>qyy@3%p;Z*=v*?22+`Oo*N9FMgAz^6Q3w-NV%1zXiBcX+8q&;GI2r0x zV~DYqwtaqSuwq1Ua1>%GsX})Tq=*K#GA%%Ba?GA>*#^f<%^5Qlra*S5v88R)7???@ zZ+xLRq1`A4ATfw2XLl}J%SA{+E^abZtdJo$z?LhRG!g@H5fdcWhzU%EU@^%Fls7UZ zk)TJEB&t3`V5P>QfC2DTl^h}#Py%suTp~5HJ?-8b*I$0?{trKU@;8qY_?2IlyT1Vd z)?sxhqFQjXB5DHk$VFgamWBWzV$wsg!Co8|3XZzDkL)drAbT{6XacZ-pky`#a-mu? zW=2L^teDpnPq+o$i92gG9ROzy${+?>(48a|M{tEb_AdM;+b80SLPT9U8KKzhELenW z1k&LwNK&Hv=&kHk*o26Bq+ls9Kn4h{x~M>Mg@r<+AS=ERi5Zhd6Ad(qNdyu^IGMo) z8ZZR~!vpNH#gpT=yf1qZIitmX8Lf4>@x9EXTer9F?-gqhU1=~$MbK?uy}dLm=e1mJ zevBb-SD^rdK9BMz!e!X7E}_6 zfv@trbp z8sqIjd^c5%1wxe7Pwd}vrsBhEXWq!A{CZMiMna#>m{opnIp6GM(8kth722pG`8eE zQ)^$lK$((qImU_$Sb;*w#3E(rhC(7T4S^)EDikD4gT?5r2`w;-A_9ph1_L6845Lb6 zD3p~v@|}2?v7*N?5CVlpHN`N~C1R+0jhHb(hS?HCL;z?2W~d-`N-#>tVu+0(vxk-x zS(znmBq6axAeZ*B5R0ld8z>g3#4w_f?Ucjr&Yo9uDmgeKrF4S52$oibn6M$l+d`KM zjLu3oXxa#*Hb8ml)tDN62oy&sV#FGeA_5aqqQT+A2~9|rT!2X^3L=!Wa>4?L2o=H! zOmGZG9o4|VQL&=a8Y|FbD+LI2Tx>5*)sd9mlD@V6=8t!OqcqE2bnu zAAEQ(Y~AcAsSAB%TiiTRk)-HG=UBx3YBtK) zE+$ygPu13)1WB+gFjfN=ENHNN=tc1#uCNt)3N4J-pKX2Pn?wGT=aMPRy zXlqoXvl@QEuhyGpNCE@QsMP_-*Z`I4NtYnbFPJ43YhpN^A0P#dnF0WzK^yBFkthVg z06>HY2q=V@h>^5PETm{Cj#cxhI1x>d;ZloNqbEQr%e#8MtABgAA<%0fho2A)v&HW(g1i&_q)*8)5Vo1+qx8qOV5y zc<7D%U1M&wa8d~;9TuA#h)^uj!{QKoFyheKPCH2txFhh2Md2!OTty2y$7BwflI%P7 zvP*c7ydAv8uHY&QnT#zWOGYTVEyQM-#B5>oP2yBtlbSqw0cDuTIp%;&>&uZs#ZGw`m_^=D!kK zahFcrG$0@0Xu%5Wgj=!@ZAmL>U|j*`PPi-V1wXY6n_3sgS@I$u!4ek4e83K83O1xK zz~a-gRhYYCz_cHc6|f9VPbBh)2U6+?3PNJ-6^M2SULSu_U56r^e}(h|{J zm6AmDA6fmbT?G66j;JSR!zHB2u+cxZt|wJ+hA3qP%5^;8iL@CN{!iGJb!Q; zJ=B&z+e9;Mw5pJ15t|0v8v>eXGbPN!s+%%MqA1Zx>_Q`sUM((8Fmm!Dr>}r9Ym#Xm zPN?(Z0LbbENFzoCQxZX-P7n%PIUS%OpkQUnsR(kyt(MeC!8XlBu26^w^Dtke7F8>h z8tF~?&GJjY@c>VLc|g%c0tmvaSPCgfFwrd|tb$tr-I5?0E+ir&4M=;yl4>OAKmkQ9 zH1madKo9K>?T?W;sKja(i3A4G5P(dD>tf1QVVIAtNAzG>%vvUjE^&FsX9MOSrjkl> z>tb`fFF6NYvI?tg#Gc@jz=#B)Ys*x&lNj*G9DhT2kPK@vfb6ZW>&;2(5{4-PN*Wps zGzL^yF=8YT1B2ExAq#DdF)4rm0zpPfU;@!0%5hPZi(wF5uBbQEo40OG9ebuphN?P zMWPAWKx-8!ASNRu8!-okLRtx4COkXU3a((&Yl$Eb7ag+#0!nfbh9U`PgeHmrK#55X zouUa?anPor1eKr`kt0?q73)F>aY&32lS#4VoTbb_Gf4$Ff;6U4qcaG|kfjZdc~KDH zOjT^55EUCOEXR_4kth&im?Nu52?n+*NK2RA{D&E)r6pSq89RNG?qQkz&dSNDvqew?I;b2nLh{NFuVFgy-Ud+$6b= zdlskALdY>f6N$yHMkbk*+$pZYY1yS@TDU8>m#;D?js&w~x#9#VF@?&3(yl`{U!A71 z0iaZEUm|>hUg2mc; zz@Q`qM8>?P=A$PTBVbT+k;o7Yql8?Gs0I;n83z@{#OjC3{RgY}$a$eZo*&JB_i)v% zwbppqyyff%?u&2vtDnc7NTkVD)NRAugnqKExa=|s6EX+;#$?oBviZQvWvgABnC0eX zDU|5Cz#_2O5~9bUwTKke5d*`rDoUOWuiT7O83#N$t&l@#n3o`QoSG)4Nd%!;g|j2N zEvEpX0a+pjCWb*;)D#h;NKqVf9c>T+5J3ja6d_71C`eJde{=-qf}}GYF%bhu0}+U% z55B5&iKH8Afo+gsWMS5Gv2KxzGMkeW*UOE#*s5SdVZ~NafrP3-MaJma#`Aj)`<62V zgvMGkJH)DKgURbyYa%mM(k3XrSEqEl%(7Zp3p1J%Hqlx_c6f5g=HLPM_=7!HnlEQ={Qn92BoR>Ho*7j*j zC8;$x4ms9*`n-<|pbIW@X-W`QAwvLI(4Yh%S~4)v#bOOWXhYH%lF8hagfIet9u&zW z1OONT3XsUsg{O+2l-$YRFTWg|Y%Ug@IRQlcf~BO#?c?rc*+%f4{usUQJ}ijW&JS*BY zjZ4OBOB&RA+b4H?Pi8s2hu^3FtGNrN(rm8n60Be?G&4{0mf|=~S){is?hTjHGGi~X zlLf+p+a2_P#nF=1j7=5_1-hKK3WLxRFwl*GQ$S~BlB7g-#T zLLQ*h4J=E;43o%4LlBD-G#U}i<|B#^MPZC#sw=!h!7#Kk(BRp|oxkM#$-}Ub zY&oeSYMQ|!o9ZN;?iR2J(FnupYwM8FG0)X7t;$HY?DS(qVZ#fX^5_!i8FexuRB*n0us(3#2c=`i=7b%HVX22wlPCq zQdC-?a)jh?B1DC&SSYj-fN2H5s3hiefrbDepeQ7wAcCnWgv1=MRpxo3)NYa`{_EBE zSB+;%9yjke`(?M=+y8FqJp4HI_KyF9yW(mzoo~`K(&(TCtFWFtih$2b4$WdZm`Y2B zS0!gjM;F|_IY|(M&=7_$5Frps)MI9bEwC6Gh(oCG>2)|yq*M|Rd^)?spbrR912G>+ z2mvTtC_)fGXo^WvoFu6M{zg!yX&7QG0ttZ#Ap%q=L;#wDf+0{ejI9(zShUF7cDhMP zqcH#>kkVmOJTc0g*XFFWi!K(dNKsTJWtFHY1*Hn516H78X3Ra?a=zKwsatI0EJ9L9 z3r&Ny+PO(~%aq_N8e0k>$SU8F>vgKNq^9NP(0w{mNy&;8j-ZsaOU`itcU9FQyUTlgkQ_?BbztvUkgJ7}b?;kV@^$_>RR{VRAD;#2$feWl_Mrfu z?CH0Q8ny4iaM6jZIe_Hg(c^A(4w6mfVQ@B<2pHI!LrrM_HHdnh^j>$`7f&fG4ukfp zcXid4v}yuH4b{i#Ve6W716InRNh|dYz7e*ZT=U!&ab-SquO_&@Cbd0!pO&b;tcGcm`m)Y9GTP>SwhavlP= zv1UlhzK0v#nqUTu$W3cFT{0K@DNah7q5DCsNu3c|iJxtH`L5v3zzzW*4j5~(qD%NSwRh+oQ;L?!b#TwCWRDlBE zvJ2-_uR2<6pbJR~`qb6+qm||@=WbNz1Pnp85gE&rR8>qn3o(3#(;jaHaM}jCBQM{8 zdf)aiNiNtAH7gh5BDeP5;`Q4PIa2jpx^?ZrUK>M!(XO{vfW6<9N5(_CA?_IQWOI_E zzRs~?D5xW>Ed?Y>%8(==BkP>S$Zk}tJL*WpR*Z_g!zCLA032yriVUSr$tZ_e)xQ|t z)wc^3!H7TvWn@I8MhXGKfJz&yh)cjpDl@7S0MSbTQT1o?ui3wp-^g$Eci;ZE-~TAT z$zR?5SarYK=Y!t6w|a3#TsG(M+*&PE4;I0FSfOQ$(<^tUe2mw_ZKT)OQB1>Lgb+b= zB-UJnoU_6OK&u2|ajOjo1-G(RTnSMDk+P+tB;hJl5oGodm^C(5MiXjJqeI7}j=6?I zjv%B^u9E1HMpp>2w%&9)k|2BBQROnZ z)bwmT`HPo2fqs$=e*T6H`yFDzGOe;oQ_@xm5a`zrvW?d1P_}GcdBs*Id)bv)4$B(a zpdMP7n+p(8*5JlHsZL#jK-5)WF(?YEs0z=S433`cI7j7yRB`d~^Gv@AN(T`o3y0}b zi;YEjG^ZhthdK)+Qa{(z4_tw6?_TsPFF(^vzVcIS-dPN+a%Z5fNwaR=`8v9NCZg4m z%v-jtJV@e=9+4%I+CpI+TJqT0K;y+!kIumkD<@+lg`(GkoD59B&OkIkR<1K-6nd9e zwJDq!M60%wMwwLINvqX}P%0-Z)h1yUgZMnwi&Dv)4RR0KkdXb`8WhzKSH zRn?KAhycoem_Kzt_5CaMqx~BGC;f&Vfc~)lSuP|2Y&2<@KG}{O15LI-_F;2YC0Dtk zca%PlAN3lp0B7Nn2?!sx8bXOtqfjOZ#uaQST4s_`y6)TR3?jAVmWq`$iU1h^WCe+( zQb9G0WW$l^XiIR!mDDJXqb-G$4*g`m z9G%Fkpomvm95$A<7%CHJFcNV+=lLI!NaZw&Z@$Sz>NnCzBC$du2E#%+9qMa#LwchL zqKvEP)%&`8W`@n!UBM%EhahZHcCU#^Azsaq80dh?qK!$HRDrE+CTznl8ws6Q2vR&u z>aM4X6o>}X#>ZAPmInr_%Z7zIP&(4dg22-|^~6Uzz7^QWt9QQLX0c1L#`tpM=Dwa; zW*zZFxm&}vyS*KXAgU6J*gGFB-mog28YwnL-}Ff5GNDjhe?PHyI$yZ~*mzvoNm&^{ zRV%HfDnNlR*1UOPfgd!o56`Nv^BAO@*C`BB&>!4*07XE$zXEgc z4jCn{A6(ptz9iC2d%F_N>_1Y}HX z{1dOB0*TDmD{Z!theE~K6M#7eHqiX)Z^8x?FNZRvaa~|;dDdb^c8RFKq)hFBT+Ou{ zHMiF8Dq9U{Oi%=-Y06TvFlC1!x*#Rh%SE%a>qf)$r z8Z|2Mw)zws0oUl9!oGo-h!G)1i5gRf}r%uC-MbDrey)Helz%ET7Nf)z+$FakAn z0f<$^Oq!7@i6$T>ISJZQ%ur~U-hrQy@KgA?m$~`a|4B4o)t}!_UvbW!nT~Z2vs5}n z!t8zekXf;Cjy1dAS>ahe*qOP-%X6HBkE5d|8Z3h&V!$|AG-Vk*l6B*7sG+>eP0RpR zM6#+xKtNCsDgXp593#MNG{we7Rj#vzf@+)?r)LkgkE~pp42+pW9CXLWlTf!=kY6o#va6+KCeBS<8*%TCS- zW5;acgtV482iL93y%9LJR^2R4D-N8vCvXIuqplgLtVLUp$nSv1I|cE81{oGbyl#!9>S}cZA!n&y1AYp-F*vdeKZsXmoHzKmveiWe}Jch(Io-WCN=`NktSvBLQ%zs)_(uh6+Z+pW83h z6u8_wKbyA~@rFx0XPI!=Xo=D#M2v8E`+|h6$!@O_eI)%+e~Oi$UfgSzK1LttK!^s} zvY`tqKmUv^E4P8e(XgWTe5PL~<$# zjD`PFm;Ed(W8msp_!&e;(fn1=clFw7GpS)KZzYCUKw`=;aGSRXuw^^mv~i`Ga<>zt zXqu&QI|5NDkep=$!KkiQkd68@^hmRr?x~e~w_;a6Jp^c_C`QyGPDQ7O!_!q!?9a#d zRUiF4%jcMYAYiey#0t37uVgugmAdl&=0UlSZ&Oy2i#yp*R}=8*;WHpgOP(nn@|o;O zx7b4TDhr$K7KPDfn*rCnxDRiz?l&uk(hMN4N{A)EP~0F35eQHOYa;1sFMEOASxrs* zi{+u!g1!@<&bBa}h&if;q%7gES(?!M=3uE8{k6V}2ml*YMks<&#+6nHQa5YFK!{F& zQV6ghnrZ|HqKM+t)CY;$&-IrHB9O`c#P`3>{^a@N^m&qs^f{I!ENzCnAp5L<|W44U>M%6f5j%%Vsd9bgh`Es058P zii#jOM!3+iOb@3HMj%2=FNj_W)c~*%4G-bWic%yf3JdUBmMNS;lPSjG#MeczdRc$nX>tb zgyF}G!IGM>EK&j8UTS(dsqLAjachBeYnP5FO|v;_9o7l5yb6OdX_i23=y8vech`LS zylb&$)z-S)esUb{23Sv37nTsvrCa_vvDz_6soOyr*!D@b6u|~0u923 z$%};=h!|nRLX(E9AXvvh&AxMQ2B*20KJ2g1nJ_j~=#bB@_q@ftEtYrX`7>rn0YzlrsS+N)?SrKwSbw1QY2lS48>g{CWHW zcDYPHr(f(-_^3Z+-^(rDMu!E48E~MFx@J1L+RbizEvDpmCtt(_nA+@|(>@lxFfUHf zV`o8tc!r7BvC*-6#QO=vdoLNBW>&eC6(aB|$~7t~IRMqF+U9mTGI%YasBq;P7}21> zO+*k{6Q`h4vgit9p}@A&B-+tQbtv=%KifPf!`|)+YNKN#T?=?+VKC#GO&|;O$TTyI z@&f`jM2O|$>>W}-p1RSIsjM3L>HAOL&xf4W{G>l=>mfcnvXNd-YLP0-Dogez7vZ{2 z2T^ZaJ#_0>7!W}P8fyqrEY?Vanyb>;U1+g|y<%^C+xm0cV!wM7yXT7X7x4F+ZS>KB zpqWH(Vl>ts$2>;oA*##_I3>1Rp|%2sy1tFFQm*N7K?HkoQL~GK5lvL8EM9@sQ*;(5 zj>Vdz*L(MZlL1vm3SXqM>g7Bb8V30>$ z?mgWliqhyIZ|eQgBxn<%1xN{zP+YpMUN7-DIX0(yf3o*_$^CblUk{B4tWZV-ppn61 zrlRE(!KxrMkVHi^QAMgMDS`?DML=!Pnfw`fC&Z48g*df=Oxa)!A_q9u5gv!57fHdD zo%=X2J@c;)ACi`d#4%bbr`17Mkwgvd3Of=~g$ZlV0%n`QeqbC{3rLHssI8K!5YwpH zMk08kX*+jDLNDOyA+RS7Z~;b2DsJ_t#FZf;*EK6%a0v$xU)Ve&IFX4k4bl+{9 zaJCX%VNET80Dw6Ij7@T+@hIqP3c=MIQ}*UBo@K!54Mvi~KkZ{ZL9J^2Qh8DXujkiO z+#rk^z8|ki&rEGPTXS!A56hh)T-#e_2W&B5NtI<2Hbl0ORS~;sT0O-=*t2!fTyg!} zeLnfX?fKNF7rF7apV0Td2me9ba40z1SOg-)@9nQyPS5KSM<&?eC~6c4jfu7bD!1aa;s2suq=Cbj}wy^U!MSaKr?MsEiRN%E{C!#mAm{ z+G>^6j5q8=mP6D;OmZYvNP{k6z1Nlu=#CnRZnxb#`;bP~arfvBZaVC>(c%CQ5D}%q zLp(62fC%!n^EH(FUyiLnDAk5yLIqMgsfb5wO+o5`YN3i6TChq+L6pXut&4Gj<`J0D_+2b~Mv07=)a(Sd8PM z5tJ--7IX`iSr8gu>w>Yitk=oeb0+Ri;zFYvVJ=%~ zh!JaQSW>A}T}ZfU0L)dzwpqHAsuos>?aDGZH* z6RM3vRqQB{O?YaSy&c-)(l3^`Bl z@!;%rQt$K7$9()}CqE8VY2XeGR6{ybkz#|peXM2^7j2W|HArP4%?>Si*ZpXweVGcf zV($Z>=#paExdYgZHf}|NS+3zMs2oOzRf23Ixh{%^Mn$1&l|>Cq3zlp-L8wk_(%^{GDu2=C7=9-k@05Po; z^LT|7*zLacnQ_!j(XzJP-ZhtVXP1%@#o=SW+Tq@bURfoIB(_?Ls!?t9nqV_1HB0Ao zqEK~HjTKGs)As`;9m9=EI>u>@s3jZ560N)`!O^t5|4d)L?LgDXPdIS&M{*7ISbVngHU&oFLN7 z!~$r85txdmKtz2j-y@Zf0ct>;shoojh;W13G6~GA-DOW_`JSqu)8F{uUWD zqXaT?@2$={LTIo9hzwW<%F|ViLoL(@Ih}NdYG)g$$=>TS-L>3&(1-YeV&is zP5!H-p_P#lkFohSRiSo z9Gw-fvzsy=P9HaSTwu#9-tTFip8SJ{_n|7#N*V2H7DSMeQ@bf}uWmSc0q)+$P}dY{ zXjw1vOlS5CBCEYET!FQqQYFofDs9I?D6>70?R9|?AXcJWzEms}a4V<`xXPIHlv}2Z zwA2Yl+`uyJC@!Qmk*Zwb41fSTgl*WU48{_@D>R;&%3jXGS`mrLBS##G zadDO+g|ve_*RJkp7wWBC#J$8JGjHX)(p!?M%gv7aOfIiWgcGI`pw)5up7p<%y7EDF^a!GNT3hdF28y)KvY@!R-cLx`&qL}(`<4R(Nh zRl1c>IMnmubghyY1NAr|AT^IJ#F(;mfzia|PGwr(${UnM60uR*TDCLWa3dq!l{ zP8nt$VL3||!VEju$oH_mA0*1PZm!tPomnSG&is^A-g4{o=05LWPN}L!Trvo2V5BNW zTozO%i;XVtz-KP%@JeWknTdL~TfgIp9vYV}TsyTsK}grqNPa>x8)UVGp@fL1UX@Lp zOQmkzhre1je3;$p9uWJbKo4WjL4XfBniRX5GG z)d(PJfC%%f)Fvztglk4?qnZf?lKw@6DpD0qG68AXHRYtI`bb|ksMaIzc7B`wYY(4e zMVkhhA%h-k%gXCwwRaoSUTmBifo;4oj9lN2G(fob+V%VK`1QEH(ANrqRd*$BF%Vso zI1R*gA{4+FhzJRtP5Yn)*V_}IBvi%6(D{^>$~i4@Uma+ zL(5S=q>HQw!MjRrjDyO`=x!(#E^2C_bU?%=a|yOjt7o&l;bfyu<|r68x~iY~!%-+W z&kYI8CLEb@SYbsQ2ivT#%jkq$xqBcgRgUUu@A0z2u_`E;oB*s~Y>k_DM=6Qa@KJ9I zC246%KhV&ZPk-6%bDhD2wpxKrsvgfkQYg(^=BX-+YHH;}QIfLrp=gY>lva=nB3S^C zF^A`Nyw=(Y(Y6Fn29e3DUV&<`B8eHrI>Sg+H!pOg@3r(40T-7kDh)RjS#BLfJN5jlvA&5p-Wwg2zD2NxU)oM5kudg zqk{>w3dx5c8$g~bAw3PpHq%Pw0w zjlFCc=cR=(GNJ@guvC$@!GLC$*WuUkY4)-hSOSuRocRFGH|@0as>sr%{oobts=PX? z@#G*cih9&4wRACKw7TFr<;_!$H5ZZypS)_6nzE(HWC;*OwoN3eB&v&@GP9`7PR@)Q zz@XDw2AyKGucg))v_S|lN;bU>*6;N1R~`boW^`?YazfXxi7uz2HKZNO0dEsn!cLHHsh}`CV{6C{)GgaOT zfV5I8$O?;+IcX0fvN$ZIg;EU$3$V+Lar*;n&nKzDGRw%$j@tAfc2bP-Ibh|W1eH(& z6Es%Tczb;=KdoM4CybM7S^7oa?&MN!`Z>dhrt9a|#lHlkRM~}snDH1}*4wP{xvZr&fnR9RJb=C}+ZYpFN zIpacf&L(-;%{HQrWed#sJJE$j%n8}zEo>1)?feVKMbSd)%Km1HnX@=en*xV7=LM)0 zcz$pCydQRrx5A3*sBPEe;%bVh5fw8tB0k~TlAbYFtXA%k zl2(LtiE<($sb9pbUz37?(EX6Gg%xuWxA_+>Utw#|sr}}F1b@qw= z5WX~3+KE#t11VKRMlOH>=>)@fC<}ykwJ}l|ZB7z3A8q79Ya)e#lcFHjf}ozLl!j6O zCgv`7u*L!@&0GCmc@hPJ#zA3Xi{g6n+T8WA%Q}@yo!qw5=O)XiJB@5#G}08cdqo|yXMVqAB8;Q^B#rV z>H8WQOct}6yr?dgtA=ADF2*7?U9Yj4OgVvXUt6obHZATvug+i0J=|=yO3z1 zSuNUbZPqgc-igDmo!$3_P^V{>>sj{w2I7oqZnF*>LrA?VR>HwQmC?(cko`Tp@JL25 zy>%``DJ|{zOX6v7j3A3RTtq-4v4%RSHpOrw*RI@(ifWi##^g-~J1<;oTp@uPbHEA$iEeMWT>}w7;o-9ap*&!PC@6)lZK_Bd+{mSX$d1QIgs4f0v9nfAXTnh}D=bv12(BqK zDnKj~ulij#r^ei_ID6@(JSjQ0>#V%ft6xUeqqX~tW(7O;G0-d|arKbepqNEfsE9b% zORiuImOiAv$pS=5A`;0&4NwuVfM%4*z>U;)wv{^FvIX0=!_E{J*!AfOT4+h5WLmc) zrGbD4j*f)IMNbc5hE2~1DpemB0&`5_RFj}0!#!B1#bxU4Q+vQ&>vTSB z9#_hhoeR}iXaO)Z2!&`AWE=X49+R`z+{fM-;S~^5?zIu_Ng`{ya+CpG`gmD?NjT@D zKDE2uij$S>AJQM7QI=c=A4A2fCD8363J;vYE*Fuuhcp1vEp3$qYGB&vKivKvKA4ca9%q|y zIdd#-K9bWJMZdSB8yzDFoAsWViIV47yRkSxwa~4=a@#{`K8sh5>a|}C>6NxL(@BsN z%GcaomPhh@{n8A}VVacknR@PjsotdE_ zGqN328QB5RNtjLL>Ep)Y-ic}zVHD?SVcBzJ{i2F+IXJ`1b~D$@(YXxqlCtYcPFS&ikwKt;&#BI>b= z4LZ)orcjDG3uXyb1Q2D=9?*H^qxX=}PA!hrx6X}HBBYr1(G9l}p{|a!uor`^G5ehE z1+(4W!WDK>*b>WKHcD2eVoy5J7F{(h6p6P$>>v0BFBx`t196dkAUodFuc}Y8+4|n# zb?PjZt|es>l2IfkgcK!(N?C!iXFoK++uQqFz|)7qUQs`>_lt7)7W1yn#l5|=)a)b) z9E`RWa8Xo|vv@sqM+ENpoHAx^FrClId!!}hECDbM+LUx2&cOhwPcx!$Q-z&HZ4A8@POjcNz zM`T1;HyN&H{#G|3MuKwCdp%>V>Rp#7oH{l5jUg%MbxA46H?)Ecki0 z)86&@KE4lkGLYOV6+o-kCTiILoDu^surQdGYH}DX(W3UfF`6>HM727VX(Gu3YGHPj5fr6F+`+d-b6bz^ zTODri{BAs5x@a0cb)92dxklV(@*U%+pTlQgs|ROkEDlr`wThK$rV4rJwR=OUWsR4g z7duhPS^`4MNnXUniJ>@~FcV9#jv3sWjA_#8^8}aNBK&^bLGL#|hG;(S6nlq3A85qw zlkUSi%W{&_;X3^!yGo3R8i~XaDQv<}h=p(UO#)IWBK64zUS~opjp0?bge5GLK(+a- zB)OQZ*9a{xo%7UY3t~AlGD=7cAnybre3&kSGKaXvwHsSzJP$=)7~aqIew9R}oRibe z@v5${rHvw$ij?!5ZVGA^ZfbHeo_pAFHG-C1N+G>4Z^F#`dUV^@;csV9*)pdZwl+~~ z1uoDME#;B}QwpuM3B?NDpDT66HYv8?@alOgUAL`c|zr`K&QtPzyFxSFeo}69} zU!)B%lwu$dLnu@RMFR9KydkAfD>R8Lm#m2<6w`J|z*3+}sx{?}wctj*2d*^M3q~g? z? z7_j%}ep4;D&XkhNLUsQS*jsw!u_YVTo7a8`bzK(XupxE-_FUVm2_I}WXqOw)s{t0g`Raun9wai zHRG^b*JEw0)sA6aM1w{k?-khsVadv285E4`nTDH}YAI~aKUX#9sM_h4!@y<;!>v;S zv?KJM`mi&sfKz*H?&BlEjo!ZNvAKgNj$4#fa&aiTiG|~lMd1g6D+(g#Y7eGLh*>Hb zTZrcLTzsOsVM`|-9W66Evw@=mY{zR|TbJ=hJGiM0MQbW;IhY}5_v1RhYR0R{9jS7@3e12|x%-q={%k^Y`s< zGL9b7p~P~jk)#xr52;3)i;Jb`#3J;pCzc-Wb39SK=;Y#ExOM8y&y1g+2ftZ$0j8do{)V+s20+V2OARZ<`a zX$ctCz3>cf_DAx2@pXQ!+Gj5z>`O^Cz>-jb$|6=91!<_TjK(mll3>)z3S$vULbRcd z+U&Zfj+_eWGp$4Kz6rQl;VkzJR95g7wTSGUqSKyRh>bZJbb8F4Z9Z)~d z9>3TAetW%ny-#guZ`MjBRQ;$GO_WUqR=ZmNh0FbAj|@fToXYO)>}-MAb3J6)YDK$4 zK*j|q)w63h1xzM8K_vjCZBRwGahF7W$P>@OM(p)qnGR8a&Oo>C>u(A?o`Xk^N?d%7 zy_-!J0*BZgeAri=vI3`4QGgthvH>;U& z4QE_w%Wn5ANzfKRrv)-@ZDY*cM8J`YbtuRSanH~_#mw<+6-xjW0Nr@6AZ(IIuj3?p zd%I~i1yM=!^1ilTncWpD&?)iqcuQ~Z;V6EKB{`t=qD1XQquZ;OUGB)J$P^B;>u%rm zr&fK^gIWS4RZ!JY6~Ug&QKVKl6fZ=;(=>r5Mjzm~3&WoEDS=uLQrO6;c4S}JN zvH8yV``Z6Ev_-6#nsgyisph!+HH%EU>E7QH;$VrWdgNOQ$m}(jlYrK zfMj4ss>YC+yXKx!zJ2L)GQ~O@m^3w(h0n>Yd2YN@&>tGHUmY%DuTon z7vm!99{o0+>U;fJd0l+GbL&rE)~MOe29&|QC}lE<4|Ye=h|Q=ObVF4|iKV4s!&Wmw zG5}`CbPqVe%`ygGIF_m=SsV+s|Xh$(G)DAA{baN1!VJ4qd@Sra%eZ%dTmz8GWXq{_*5}U z$sSbDGflNt>LT8Tfjci!auN};8=0a*KX{-aJJ9Li+ny^66+u~MEWl{>{v4xX8P3~m z1KsX>Z%HHVMjbpsb~40JaRns#$~Sg=z+Rj_wYPZgYVF|M=o$;vW|!|s@dQ~!lvO{w zTdx1Y`s$~(ibOResJN<7Be&R7dp@@5*(P@jY{qmVK*7^Zn91gFGsX)ahe5$kcD6Hj z!kJ179&=7SStf0=*%&cA}ZA%_9`=I?^PT7|A17ah(6Z(n<|k9$vbFNY=+ zfkdJ}6B=Os`-pmx!BPw^<%;2F%ve|)1#Wv3#hz(*ueI8P&`pnhE+mTdmPipxq>dp> zpg;-XH_8|~;P{Zn5K!FW z9BGlG0ODFmo7zYHK6s2{o-Np%p8}IW_w6W4J@_>=?L^H^)1NY!A zB}R=<6ag5_p<<{tXN^+W@f|-A7k6mji9@r_(d%@RCIC*z-VDlGC&M(eO}yTp$2+EH zlZN-NMKWl|9(<6>*Wtn6Ag-$^)CI(zgu+VJoKn z#S&$6tHJ=?&6lWP(Zy34pSNCQl4iy+llFEZwf+xf-xCi98X)#FS)kCUYW0Y&;8Q0$SGBdm7>(h0g&r9&4UO(^oQNbom z&EQU2pGSDWcrr6oA!1r2j5uVJSj*U1&*kT`1|bJ?4F~7)A51qqAM@x|RElXoLhLA=5_kT47Vtbh9V!4rU1S#%wg?3Di2xcql9_Ee5F$Igha)gOg zx!qWKT15t{9rmJqU{NcuEeCc& z@I4kC74Ww3w!1`E(Q&wPQtP}MNil~CL_!d|-7Wblw^nLoA~8&N6o`mQ#I@&>tw%RQ zEVyCD$~sN2SUQtHyx@in2pcTA^@_?Ecmx_Zqk9~#7_YpA1K!j_@A&Pd@APvc!HgO3 zz;9q)HPfljbLrvEvAO&4{oBvySGQ}6!!{wPQH=nUQ}i?W`3#b(E|nEYC!cs%JfNzp zNmN?A(V+m*M66l^V=owt~bcGjb&)MI5w5>*_k5YyHjP@7cdU-}>eA`)t3LRmInykNdnn z4R4{VCA_2lz&kgG!>|Z{xduaG93O6Ud4K!R}1#&W>I_cN_yShGGEg7uoQN4AmLKk zl3IufVv(ST4)e>M7ay?abI$c>x3R4GoR0v=%I)xMz@uSnsE!tPvbKBQBct&Bz49L4 zBD_}joc@@XoYkR#YB#>Ot-#K`cXz2bE3PMR+}B@<=)AXBs-q-gRK85=AGq8U^;+ySMk;8jpg8mRiWSHG)u7cAf|-gPDmi z;Tq0h+`Ik=SJ*W0XXc~%Nj|eLfC4@f`#?v3_0(V8O#QnL|5p9()bHxwJxToC6aUvc zzI)Xve7Lov)OkDH$Lo*BpMK24+08A6kwFTihVA%S{T#3)X6Bl^SiICQq=JE!;)U7* za;){BO2$Mn0R(1@I3&vw79)WMA!7kz{7v$1J4TpZ8`KP0WSEphq-kfBD?BKX2=JUAcE+-<%(Q_2Iwf^!e6* zf1DrppC;$R8BskqdU9_xaZ8J;AhPL^0vBYw)ERPt)AS!f{ASjN?g zJJ(K_ZPK}VK2Y#LGvl>4*Ld9RJI&_)^y9a;AM0iP-gWQ|roG;M>;~6EGSf3s%e6Nf|f!#lUMis z;it3h$LH7CpWMPGw^W{70d(s&Ds6AnMHXRk>S##}?wA*{R75K;Bs?(hk9ESowq<87fYf@GGL|zpgSFXyPXNxq}N)-YMnQ{sn(ePg4 z$+fnecP7pP1VvyGqREv8sH7eOsU7x+DGQJ33>d*Sl;XIipkl>XaL5E^#r+uXfxGym zcM$qoGQch4mU%CJCEu)DjJ=|Z-!?xkc&FWMVi4TGUq)`JH{CO zmN!-{2sIUMEjR7(Woqx52%i1;^U4{eK_t>eq#KC_f*=*)0FcN~fG7+}h~`jIg%pwq z1UaE7f+WO&h>A%ZMkUy7R`nMs>l9o@(|Eyd!(Ye&BtZyKps`c}c7Tu;16v3ew8%f4 zr*}{LvtRz{{d{$m41k`ma)$I9&pvx&tw)+NYD=y;-}NqjXK?$$+k5}&CI7VH+UHq) z(Y9EQqvul^ZcB5Yq=HTO`yNq# z&M`}F3GzxcqAe=#V3SRPez>3EOcfmTSns=Mukp%~aZzI;W`8;2wzk$C_R)3qw|FkE zg@$NKN|n@j@YnfU1#@BGY+$Bq9H6;G_o`vv4r+i<1+HZjRz3g#07#`k2szs+2fa@w z4%|d)l^n~hj9M2*y~zV-IFtLCFNg2VpO@P@qJo}s0qTN9M;y!o1xElXQVPj23l$0_ zauC$es0$WK0rzS~r|*DgTyTsz^*&*Qh?D54l*SQdw5tOEflTNt3Wjlz=h;eLL9Z9mQTf3$Z` zDYg{Ck)!#t?XaCZ8#-IN7}66f(@WXcWb@W-=4|az|IBCi^UU5ihSDUG0}ME|!yPQc z75Mv~1+jEM@zYOlEzDgnzBOC|#8TqoF6xkoHAoXtQMeEbabcFG7UtX9tKJ{=>l?Ei zC=g}{K>$UpP$*@hKtU)31s!o{sd(tn(h-Lfab-^TIoH$ajDEkK@7HxgPx02_jSXsS zaTACQ?7k{&Vuzcw{A_qOJj}f`OBMl`rua+?gkL{H6Kcyp{9JqwB4^nbrmG+5nDQ-rcWQ4UM8RB4Cmwbelr zRWiCDN3nR0$ZB7!ds7Ds-5^KJ<*BMQ84jtnr$bXUkm8s{AW)ams;UagbOMD5Rt$FoKYtF#)C^lVt@2S(wBmiXkBG;0R8q0vmlv zcxdhy)lA>U&**dPtL$s?qY)TKVMqX)qbz1PkYNW2IzlS8 zEszEvrwGpWe=SRo2OUDt=UKbX229*-Wr+dI6lS*P$$sR+=jD2Re#(C2vR)?c z%14(s&5BHZI3x%dU|qW*fX%xl*%l^!L!1fscJvFq-hMh>uS+FXLhXfL=jrL#Z|hid zsUGh|TsI@UTZ~Am9tIiC7r%G)E&f4(lU3l1hru*#(%`+yYV=+uk3iYhv94^5ot83z z(ip2$Jn9g}i34LqCZ$w4v6`a{_T%DKz9e_yVWwZB$6y55a<}h z5rH_ua&{1Hl$I$YSr>uX*=-f}Rg^l%^yi7DW1WNesQ#$6kK0AH(Pz)(+4I}*C#kBO zd7dBE+LcWOmI%W;iXdshU=gxF@Hxx5ZnZtuW3jVZ%xR$o^VD%y(K1pxwAd=Nmr-$) zn`(?=LsdXgGBl^KdEK&Id;6+!GY%*##MKI6v8^yzGTI}Bsw~Qo12W)4PDL3fB_bq5 z2{Qn;h0qgKG9Upu?90qmZHLP!g*A^}SfMV1lwMq)mrdz&0AWQ_Mlt}R6bF>_I1H#LiUCLehNquVhSOh z*vG*uA&EG8>=kVxhDz(g+25MrCK^z4DS%pI>3`A`pqGCu1!AKHD zj#6bDDYm4Y;?&H3tEb~wzOL(4GKcRc{f!Oh^ z;D9mX%;HS>ZTBasZ(%8&|C z()y^;m>Jt<5wo(W4L}ZpMR-YS-=UY5*4p*TVYt5Ncu-Z@m5{(~%53#UN~17>eXx=- z9JY&)!uQctHZ4e7Gh}Np9N2F^+`szx{2!mbcO7f?mqP`MPQS{sxJ38dVjt(j_ebxs zyLE%M(Y0xr^3~2*) z&YH!iWA^xVS_=_7V=lH@o*u{T;XZ9wYhFI39^>=>Ly>~A0S#x zcm}LSHJTI^h#q}O;}PhQfGWMi1pFs9Iwk&O@(jd2MF0#YQ@Rdfn+oYsGlP#?9aH|xSSxnZoX zMOr*(PNhWF=$Ba6SXaH@i3J8prtDF!a)}UW$_b%u5==zbAx}5?D9u4kBn^hp(mwCL zE7zj5*)mf>+FNThY1H&`0agqXCJqe~b{07&Y;-s*0Y$?+6(z++hG<9;pvR~rd6a_& z3TLW;_C8x2+&e)wmLVJ3DzSI5tAHV-a>ol9xG2FFpd#B;DBY3^J@3*@4`@?(RtLB{(6Zo)0aC~p(h zFdPKEEX9>hkfX4Ggx4fm6U`NcS-=g0gkPgiur^0N1pd=ErVwI-erMg)RtvGkFhi~M zG%mVwWr2E?h#7k9ibNg^Euc{o9z&8st)TFk@v=(BelqSEYjKWKGD4%IV!M<3Bc&<~ zzCXvJo|S>-x;m_!@j}OO{j$z4FXN=_wk^%PewTR*=JIKkguYhF3{7W^2JK$Hb$*<+ zhdkm*JF8AR8Yf0JAh#_^d5}v3IKCDDDrWKGI$oMr8scL%^&7FLkh za8)pkfMgUxLGrS5$jL}3ui4&gOFIh9w9W__!4sDZR}PDip{PN^Bo&YlWgq}MRLCe< zx}pVytjP=oJGf~)%c2EQSVU+0G6LagZ|D8{r|~!c;~!8BkEN$;MrRz&C_j&K6Z*w( z?|grMe!gyb+xMQoHR-;+_ta1CtL>hbHjVB4oE!Ue|M(~07`D=0ZxhT*G#6uf0AV(^ zl__3nuq^BN$47aOrhXMgTmosMjn@# zAqOTb#8BA`WIE~lJwM9#JliW4sMTIN1@C1GRIa0g21h8t(KN7+_`o+EWm0JbB2{U* zlt2($S*lFTKILc`Kt?Mmv=~pBFqY%yBnx>IB^9-i_Ds>0t5Hf+?VZ`sSZwbapgYEh z<$BjV?kTE}Uf3Jmox7gKDGZ|@wXRz3-1~P9`SEM~)-xQmhv^Vj&zx@Q0fh@J$fOOj za7sosd2+gR3a04nJ%fAdyw#gqx9OlH$!rF**2%gj+M|+^MU}*54Wm=dkoVTQ`8G4A z+R3(BfemwrNfm`#Fp|_Ma;hluNQ!Zi)Knrc>leu%7W1pJduTO@Ctv1F9ncvta;08c zUyvtDh>{qTQL-SMKiS;p2Qa*JbPh(VfM9 zxQQAs_3RzU`hvc1Ti<83=XUnC>%DI8t*xhaP3pO~4c{aCIqm;ZkmgNO8cTk`EDRDh zGY|`mTSyW(1}6T54U$7CUCi&&)Cn4;?v_K`MnLVg?-{1Z6BkFht6P*kBCNq9KK; za<*RY=5t(bVwSdf0+z@nV@@Mi>U1;Z#|4kf?5sVKMtm+Ex@XR)GEc_zz{Q)c#SSKH z7>On@07D_vp^0j~<9z4GRG?0e?Z7M>CW0X&&`elh8bL>B?)YYJ@z|d3BR!z(L2O!K zmuYdG#c(B-iQDcNGEkybGGO4;$vTh`m4dY?(I`noG$?RNCI|2af-b1o5h3IV{OK)f zz%Q{1XYSM6B?M=O1F0(a{@T~l`)Rp-*3JCt5Ew~$*hEp@i?yqxEDf5n(WD_}aiou^ z<{YSQb?7a0Y|ibeT&6{?sXb!T^$^Ovy-^`|hLp=j=ph}})m)qHZ~~*CvLPR3K?yNq zVGo*z!YY6hFfDb3UI_xM_$Jb)rBmQo}jC)gy!pav1Hz~6qiOV#>H+3Rpp z*}9n=URdEWiQ{Pkud+pl&9Xk-_H}w+yp;n3JC8 zhrVhq`?`*K9jNKj_{*?4(AsB#&gXL1PNmz{JtS#8`~C^3ZQuSIJd)r}uEuYvXB~XsnyVpj}B~ zTP9KziORqt0~88eIslNRp`47(K}cEZP-VI@MG7u&IwAsihc_K7VzCQyhh0kt#&n&0 zO&}Ptat=(&MVKhOJGK#RViZJ$pdSD%#W3;(mILvxy zy*Uy#lsfIjHJM;*1F?qAy7(p1!Jxe@*t=f6Z_rAFAPg0Gx$IelNHOtL4LMX7PgQzE zO+tW0S(P59Zk<9*2#ynrdc#krUw*&HL;K%T6vjbPD`6#T6dSbSpdqmf9ZD%6-v^qp z3TF|U3#bhi0S|PPV0kDQswR~ld)8v6AKtHfi&`V>8n^cj{Z|~5q)H|aOi9RDx5qnq zZZ>Xb?`(d1cnQi>$e5z_TyzL26^tQ=x)>LHPx~GW$KmXZ?C^WV zePQ6;de$|scYfF%6< z1)4@9Tw5;hP?5C16)NdrdpyNEd+u zCdL3*P^lHPQy`^PQZNEnC2C59tOPqtfVBt=91D_(D0)zmoVFkijY?vrmW6=#GuZpZ zM*y|f6}os&flCNJ<+{f09rn3@r}OzS{`0`XhQqxNl}Y5XTvD6d=tF9W1N7e7r6nqA zw$L5?)sa&X(MK3X>D-dnNPvKD(-#tsg=^Xzp`NzcZj*8f1j_PI$+QI@^m4#-P;n}r%nv0%s)R1a&{%&)^ScVKOoI|sffCS!tHTXKAkA`NjHLAhYD9_$ zQK>Yn%sV1BWEEza#0j50TGTMgNI9K(=R~YZ9bGGn+l_5mPp9nHFTLIVLE}q89@D}c zg9-zP_w>%$8^POedvfnQZTmfnEy>$jL%5^mS?{0pwrrV7QXWv#s+qzC1b_t^i*^P6 z`Y&%z@WoIhjcPD+CUDyUE(4p8pca=&3x#VEAS}et@@R*j;m4u|%o|_TM@(vg`JhZ5 z=@DFYJPo0JkMgHX@_b!vxFfp)j=`Mmw!J@#%t zaQU7(Q%79P5W0(BH_Ul7;qlC#bIQ4Raocn3-ZVU)=*fuVRlcZFVQhJ%{ddACEijjTl)xgY~TAhKH=L;7ZJu-EvcHVP=z>MpZRct9$PO zvJ4%;03N)v&&^`rHM3)+t6oMfi*A-cSTDuR+U%@kONXRN%P1^jnjxe;DM=l%P(cb) zBULp)?o3_Fq?LKB)QPv@vE&5PLushRwNZ@)^_SLlg1>-IH~%JqI!RV2V2TJ4W)8Ac zf+?QRlb9qxR;G*8A}S|7;RGF&6y_SOF5&s|T)(?I?-(!7Q~1XZ%dPq%w0@|(JRQgS z$ z@eGDsfxrB+Tv?n{nu`nL@vN8}jGJ4sp#&2pEeR-#AZuj;#YPN2qkH&{-p1$V`}V&0 zF@KrA#4QPBmfVZ`!RL?ueDmjTqddl%3Yb`7RHNW{4i-R&u!RDK04^`;eL@7IkXqfo$7qCy;5zXwUwHV_SJ7`); zFwTWjEK&L#&r}6V%+d%E3j<|cj5bQv(z9kJkL7$fyu&**K=(QtlEq_TU@5PuNg7xP zq#kB_(>FZRDafE~ZDc#>5v`)avI5XO<7$~VU-1@KydcSdZB#S@iY8fxApxx+1QwGL zD}aWb8)E~fl$9~ZuC^8?-H%MdyN;)ReBS@l*nh5HTUf9`3k6#; z(`6LW`@~s?u;-pN3su2ly=_mEW7VBK0{>tN7gQlk_C}qmLW{m*}=gaNoVGBEXjIA1i#F#4F)T zl|l>&2ml(BlF*D+l;ji^w}#9hRuoQd5-1t%6c-Pp(G&taq%3OZp4K1z#fNvl{QCJm z>xGXW=bL^$&-3B>!aVh2)m5qr( zmf!lvb2UbUQz;&EEdUm#3J~LSffI%b*ZhFD^!289-olqu*+}7*9`zM@9!vK ztRy1DCRuc?+N8!SOSq;4gd(Ka%=aw$ahTt6h>#gt_7ShxG(ss>iivgKiGV%moWlcDP^%4XmPDLq`P%q)lon zJvc)!Icv_h=J)81$1-N5HP!%XTuUokhqMMMRY(gNFm$rt?3+%Du)A6t5mcHTw7L~4 z7Oh%W07jVsMwx0_SPbBnSmYL^A&sC*66Rngv@|Iksjw-RfuNjrpcGE)xUACvy0T{>mA1=e3bS3zTjghDVPL>Q{e^Itvu;9tJ}yPxn=Q$1W>ACLYAW4wGG&rXl85AV2^*cP@9 zC{sLZ-zN_-RRWq zmcHKP#z***@PS(Z1(f~*e$m%o_+HNqE0R=9f?^`Bn@h3R5$?lCE#QI{(SzID|NDpd ze~E?Roc(48mk=rLS9;{DPG5!HB6tt%->tD-q#*g=I~>#x<<@wI%TAQUF78Pzco8qyGkJluRu?`rFJ zXdG#2O)Mb}$vQZi2~i_p9kB%T#y<7#Rc=<)2kXA`;n?Cv^Layc_z*5bQmSDpUGa70I` zY^SgSN-zb%$nu~UnW-vc3N!(M%Ni~ccQKiSHAYOJJ`o1YgeK`0QayepJGZ}XqG zyPxL$haXZgP`rt)e%Oci*Qfj^_xM=i{q1+}c$_*Sg1A>IaM-V2scVumD3NOH)9MkQ6mXiqu+Mg?IN63k}3I zgDr-xtg~BzRYlejP|Tr8NMLHhsDVj<2K1O9=jMiveio%kZwo(x);wl_Ys+?35gQ5d~FgE420Km{BY}}&KsdpQ4y7N}s)=$^k zK%R(hKzlgQ+dhYfvei@O^w8n#O2IyW%{rt{m3wfcgB0bOTromn8z4SxfsdqA7z(6Z zrd>Qvl@2LJ0W#yp;L`Dyby*{pN_2U4SwX2Q@Rzd)1r$Imh0+`~ zDJGx2GBtvXjU)syT_On)5UMp6B7B6;z+l502nB|F$l+)5k>1eYhA5^|$N1V;By^q*e-?r`N)8|C#3Tx`r=hP8( z3bBH=Y7VWPsq5 z-^#Dk=+OY7Z^R;CKsn^pY5|&H5_XyX0s4$vSXvJzrX+#~2pS*;5#fd)0}Hj(INh>m zTeS2XiK?oVZ5X>P6A6gV(#Df>^VrMrQ}Q%viJ+V}tb#%txo=Vr5vsAp#hHgsoi4blK6im3=i{;S1cv@cs8M zzgV7H=gX+?BA;I#E?=sATH}xF?&Z1sKC9o=@;_C~ri1wUI{&H*ehY{iz2rvBEbpmG z=K~@@)r8POAx9*_VmIWFPDC{+odzUl0QKyb>}g||ROGAx#?$kYj*)(BVk=Z!u*nsFm; zBaguC4$b~t_v>cd_H{dbdG&SFp$A7bGq2KzdhJgKkBOC7!`JcS;&nJfh^2exb?Wt) z=bFfe_+{6z_bP!DAYfq?7fS#!6z-A5*X8RN6=C`wz5xy(KvWfC77{8COW(6b-@$Le zm7|3>-qHeqC@X_VI|AGQ8W}-I9a+y%wd}!FX|*H!7P5^MVjc0YyE(9$L1%K`eqHa5 z13g8v*g;_j+>4t5EPw-4h}bJDCV7zvy_wW=us9VkHpGyo^V+(0I$VO&u6Kha5x#bj z@}YOP!1Ww@GoZCaXh4xgM2o<wj|m_;2;% zrB`2`^>?8%^y|0ysu+Kjak0mN4xRZP6M@sg7{VeTbr2AxQ({e{W|UM^oOoRIG|uA8IJ)~-*QDS*%{_W+@A>&retvfM_RaO%d|o)B zrLbIOrEcQ3a9udn3CemM+=gekL{~s5Flf+vt?HSzfQeWb+Zk{u*~2MLjR_^jqK6oL zlfIEHB!qACw}=^Jv_x8*@~*L;BPLv@`dxJCI}YAzNW>B|A}v4x?Lh?%?E-1UU@Wz& z-sowIJ$Q`i4XbtbT#nNdW*NH|GuF^sJlW6Yi~O<5GOXo?0Mx-rkT?psRLU3gbqUDI z9uqjJoD(TvT%kN%@g%h}!;G!m&IRoZ9WP?e@xCl;^}gN)N*k=0*UIxsTii6(Q=+U@ zz#O%PuG&b9nY!<2LtXaTt_SxjRpnTA9KB}0UAEN2J@+{gTn=x0U}n|4xJhI5@Ui{) z`0{VuZ~xK7FY+_G$uP)n@A&io(fK#ueqJ!2&iy(1h5h`}AOFF2Jbe27m*4%jKjX)a z-&#^I22hN59fUw{npB7ztoA5CaFRc0f78p|9oZ z15l8J>IV!VqIOt~tg?8QbL^^%9c5Mfn)l~ zWk3myec~9M$qOS#=e?(}Lsv(4zY23bx9gk0yC4Uz@j0(42(Ib?rIfQ zxSqP7U&>$FQLO4;JGLIL#*&ExE)UyG8)$3nj$_7GbOl|ORWHg}wJJ!Q?6qIr3i)<--t4u&sqc${dDS#a%d3;?4C89z*fB*d5dZ+0v*`9`I9J}7^ z&E+=tdgB=Gxtc5+*dXlLib)X&1_%pKmJ-3<75L+C#YhT5%9hGzC>mw6s;=&}01~mB zO{}8al2XBna_c0(t`!VF=(E6DNWjGB2!&fk<)#*dZ1C}mtWA7TqM*76~xL9rMWRFWE)9PV$g+x@`uqF8Lz-hT9Sl0XE2nlvc^ zpkOc~b1+D;CN)6`Cles0nRQn+sn+)O#r^rf)xFHXF0^~wViQ^6v&K`nTVK1D=hYtO zZTBCEpC_Jz+pxnfT*qKcVH-7B!qWEZ`X~QSzWJ+np6Ad|wUf@?sRSgW@>78&3S3iV zB1veWOo{iBYfwzZfvCxdsbd#;NYZA^a%)qWOlOtc1!aURK%@3-<)@GMFZTYhanIlU zz@~4{M~^@L=MVbk_UrF&f2B2QlOrpMJOB<80tJNyoTSyrK%#I<(>aqI+ESj|dlF7h zJqzPgdT%)2bK3C@YJnb`R^gBREm|Bl`M8+>1ta;SRqJ0=u=W|Vra-g0$@$d6@tPoy@5gYXT*D9hO)4U zN|jhhn1o#-*ttc?fFx$^&rN%sbHLvGnSA;7@vq+f?XRq5ZvfYpg`r`gk`>henhJm= zA#e+Z3Nrza$l4kSnF9eMByj6OIMTrCfWT!){=ofCzSfYh_kg4$Azg^2+{_*j3Ka2mH;ZB9$F@*_b$kV-gZWTNPT@$GtvYku{ZMDjeH7 zXzmDcT@y0XN`u4GDagjmp|`4PEJTX%3^%Jpmr!XpK-6`EA8-ASHKrts-KWQH%)%xu zXqKKEf4KOE%Rf_gIm))pj~A}V15Vh$Ld9&+vS>*bj1$XmxxT%={U0Ac`P1uoxrAt$ z9yK&*1j@lvmhT0_WA?KRYkQpqO$zn-J~$W|$K>A{%MZ_^&iPzqX%A)`N7t}eu`F4~ z9YaB?2n-DT_2yU8ar^P^v$5`NK7D` z>@it~aSX!@kXh61-0$&8UyC&C_G$sW-t{)m>3Kuh)Oc1ltF|qb+*|RqIDlHV8R3)0 zhV32r!~dSd%8=aBP~t`6V-gOWr5umIhEgQeR)`3Q0tKZAN&=N7OO}*h;A3oU=!wn> ziULpoli-RLdzffr13O`J3sY1g+9D~rcJ!tUrIElcvYG`~V;{=9bxr>8|NrVQ&z}!> zYy|-T*<#639!erIpfHq_q=Z650YIq{hZ58+)YzkdRuNXHL?$xe@KCd^Y(4R9e50wq zTM>wZiESD|IA=`{c_!Q-2Y+*V$)&h3H>Rcn5U4Z*ELjH-u;vot(hZRzYZ~j&lHsm& z_PX=B_X(j#Us@)4Frl;A9j_f!a!4lynK2au{CBunwXi=FD=V13riX7Lo1Sv*RBh zwx2UD<@aRCsb=e${j>U&zS-mEUH(<}QU1%ce~5n>KZHX#Bm)W+vP8ooMFWiJr18l7 z7Z2-*#?0TUedB(&>$~uQ`-gjGtdfZ4eI0Ip<23uDzdy2`9NUU7GGoN%-(R^6sAUp; z;w)Jz+mKYG0LbWM0WuY(nhA}DQBHoFwlB9j;CYSNm0(+F_w^RP<~u4OM2>nu=s?gQ z$BaP{CP!s7zy?b&`V8ABN|v@(xWM#QjcwaQID2JlGbEPq&1j~lEwamDI3`a@*;|c7&wrK7GeyQXeqnJfqdb0qUMT}6qahXw4q{&BI1_i8VkSS z2O{o;1_=lYS>0fV9%;D&AR4GcGl7>$6tQS-flwQpq|s!9+;tzyj$R_!`FPpA&iu14 z{@~a7`a(nzP)R9pW#MrL4GAI=P#{Ug5d(%43?Tqn#s~#O$4HJuXuuq|%pl1D678We ziOVeC&>u1|^?)>S3>73v`CJaCc5n~kcbD(v9Y+r7EhVB5?7%vt3Ree-if|hjAR!Xq zqB;WM2r5+BqvxCFqvx+&Uwb~~SrMza7ZxGI)z}jouIMCAY;Ub+++Y1ZxlVU-OjmBL zbZm@H_}*`RY(JWXwXNqchD{GYSI3TE#~kEBAe?HUlR3L<_@lPy5A3CNZ8dqJXRq;E zYu|F1BPfyR>`B@ia(|Nu@#BR9+NeQGfVKoF0YYpc z5S7C3kM&;1|NNW&_TKK&7S`N-srLPxzkRU;4*J_3M&JGJ-u{EPd942R*F(M-LVmT( z!U!=cNOVyo0wM)*Bta#KB9(DW21~*#W%_RZRM+=U@*iKcUPqQ%FeCDuFB9v$Jrpn_ zfxW|Yg+l}cj5#SFxrG);wn!LK4cdSdVw&=78;xw=cHE+a@t*2%XTx&4eCDl2Ow(As z-76)IOJR`$kNU(7nytVk>9Ijk8ar+zK%P zhNTJu)oQwDixn+;`-)qA1)q{|27#@w5!itM#|5qlZW7S5<|L#DZar?uSs-w2?h#%4 zYFKyez1hIRc@bGW)(d>S>%acR|Nj>_R>YVnmNR?fsNc%Q+pn3%zCV9cfcB@Ni!!?zuket9Q5g7tk7>&Z}G>fUd@;Ia4yZTPw zl|q8FmcrCEWOZ{|p(j)NP_oM|whe|YhC&%M6-&@XH(ruq+p&G?{>L`@(d!l#Q4(Qg zyT8WWPKpBWGajz(^vqk2L;JBSYdc^2X?&r)z|phPcFNW)rgG67hFj;meZ6cxIP_GGf_~d&(h7o>Q5g% z_xkek-6!7vm;Laod4A0tRO0oQo30Qr|N2|fHv}n^kVV#*W6Vkta%rbFRoYEzU{6RY zQV|xMW$O?YxfFW8nm_sZ$75ZuOwR;VbwOFs@mJ z$iS#Tg$iLMEJ;X93%(*6n1z1^ch{aeHn?(c%-WyFzBVjl+xxNd$$DM;A$MDX(m3w#}zMFB;_fZ&_a?oW9K*(^H%~h!?$LMgojgG3%vo8ioe&#Ol@xekwGy@= z5MdAsdTE?O5s}b%T;bdHJNc3PEe;8ktk{KkH!=457b6pxq3agsww$&tQFYcS8Vqh- z%0AQ1)xE8B*sECgbPdvZnf%*!ZGBh`gga+qoeimL9pE=EL7y_$*t4pXI(da^`FQ9! zmhU(H@VNa4u*?f1Cr{}HoB0Yh=_-D$5={^{m#BD&e#Sn+e;E6x;ceImMhhNA(<2Ci zKo$w^?Y~)kr>zw$_E16+yC&1R^=SLm*yEI0>d@u!8OyWzlIwb8xk`5nom4zMoTviL zMXDxq$f!I~HEK7>)`ega1ucz6P-FQNCywpQ*6$>98L88iRAZ=>V>Ocv@yu&XmMoLF zEY(HCyTmKqw4ec$h!LRZona0vBm)FT-rjX<_U4U!vTfA@!&gkpuO+4NJ&WmZL)NU3 zx*oX(Ea0OQFAM4gXg|uhEAWT^k)6Qf+3uXsMkOeduiY#Nv8>G+Eo|j&S5U0xbkd+! zEklEX#?#pbQ-o95sOSgl_nF ze4~gz7<~gHwRnJLyOY#Z1*kV)A=Q+oLkKV?fl^Bs5sUCh?(!(N@~7|q2d@AAY5wo5 zpTm2Y(MkG?effXv@g@0(E!tz0*v+K~kkGVwab4nK>)>@lv2=i@Nr4O4PVb@7TDoXNQ8iH~$gLqB;~Fs%l`a@S4u6x!tX{9R|ECB3q3lWaf1>{%l#acxw%A_F zpR0Vdxl}gO&Q=w}_Br{p@J0N%`E#%ZJuskUK(n@p!UUiJNl1=+{QJ^(Zog@#ZZA8o zs;7+0%-^NFnf0HJF#DJP@ylUZmfRth|WQL(K93e{v29N|6 z0V9$-qCvaUDir}?niR8sUosISLI8neq#y)O4n&&wbs6JXb)61Fnj$;0Q#%oX z2AD|ntq(lR`;0R4AdjA=$NnEY@{eUqJ}Hd-GcMoA7w7ZXv;1@875|^N6W$M3 zRa)WkH29rt;>jv#^W;iG|>dQX0u2%gh%#~Yz^4? zesO=DpMUf9`z5Q(FEUWodGkWa$8o-y>c_xsFdR4*wfE#SG)@B;g$!x5vIB`N8jYZf zxP*cLV+*o)NGv5(-ct>&ksh|PMcS_9d(FmfETRUN5UyF*UfvsEIMA8WIetX=#P zGap9j3jE=}?J$d1mO*J$5^{Wz$brLxGViv}>0Z0tcG_srq*j|kf*Kkkqd>EQ8Z-)1 zv=Rm?zsk4f0tF$XV*mrx3&7Tr%v5#^sMTxE2vUmdn&+5%f7zU~_c`XpKYTg;c71vB z7wZu*me1brUbuiAmfDh@={Wff%@ugrE{o(5AwRId(>j6l6gP z7?`3V`aY0Kurxcir;BLgl_*m{gLiV_qQr$jl4hh6e1A~2*Lm-QO#A>}>w%J`FSAiV z0CtTCtYB{IDUt=hbp7)_{_D)o>6K+U;f_`Q<$Lxpo72a{SI>Xo!RHygmi@Tj{BV1- zy>5FSQjNOy-l=`oI~%=Mv7u(DxV>f#KQHzDkuBIRFW((c$F+Xaoc1+!+TvTzW9>?t ziq|AqY@OkzqnGf|O{u{1?>zt2brf7DDJ49NJb>$6Y4FZcb-ubTeLYyPjgeDvlIwf+ZJ$#=NRWL<6;N27Ri*~GLI&lG2= zr`A|`Pk67#>u3)3cZyZppCvw8te>y{)$7Zj+}t?zs)fnq7)WdLOzhF)1cnkNR1|>< zhBZkTr~x;lOoBy{J%9nBM}XvVV^1ioIoa5zCSGpYl6u#x;l`0^+({T0K~QtRH<4O8 zOh$&1kx%El0>A&yudWPBVpGYP1Ib0gX<5wcoXxjnv)S4$*+GjmXdr4(tJww(jSLE! zIut1>SFu90vig)iSHOf0H7vP#L8&xWq&R@0yJj*w-E~gc8;dCiSjej5jgN26FYo5@ z_WV|uIX%tU7kjOzmuouHExX>YKBhFE@nu)cY5UxSr^juC02GptAz1{mgSVgS_w@OD zubb~b@a|gPrWaRR47xCI%9O}mW&jix!fq^xj2W$@f(Tw46Il_k1XO}9xxCNz^y9ei z8)o?qzC%k2e}*RnDQQqCjmWrl^0iE1=dt{G&-bughu2?%xc}$({KLn0|8~8;kN@G@ zS?3jf`mPi8zRIb3zP;*S-`}2V*W|kwhNo@aZR>E;cB&g|AL)l2cJ15AFYC+bYq`5_ zdK=)ukEdA^dW0^qU;8|gQy!(Wl}e^UMVaA&@$k8MQ#mjNp&rj)ANPM;+kdw5W0n7V zbPe9Z-=MGrs5+`V2hU~yJ8TON5ydH9T@CX}m3boNvBcd!=BBF)B5-lPY z@58@Z^_|9w*nS^_uYarfm<*RU!V9YxOuxbuErWvxDr+ z?7mG33v?Zsnu``~@XW8wt4?{!gk zn#Je!hc8bDzm0x5->Awg_od|MT&86r*JWK7_|h2r_xS}ew_N9(c>1`WLqSS1H&5B+ z&5jTK?&0%S`T4`$e!unG{CM-g^M~F)_#10o&ufnuz!u|&{IFU*YkgT*iQ@3;um2^57M_+d7%Av*YA|Cz5d7256z~$4yT;Olyw^blm?a@ zl+XeZA|MMDR6vWCoDzsy5TYb!mUXl`Gs%S(NCG&SfJ%t}mN3}-gQY)FoMHn{iveuH zRU|Wi49`jvF)3@g9~QU9<67@}_WrFd=U2b~fn?vlbz$bkWjVXbdj8m)r6K_;hu%pK zOIQXBA)6F)3%~+QBM%)&u;HN$3}sP(VX{IA1T=fld3&`ifL8C-WpYckoTwF@gWd3T zJq&lVuBSCMGa6{u0`O#V6uumYRiA*s75K;b!MgE7iWzh4DhB2o3UVkNh1{w~13L-; zOzA?)OkYZ$@v$ZSCnL-fusgzrW3% zKq@aIUpzR^emDIHkMM|ROg%Pp+3&v1&+zS^dp$n>(T~0$-L0G5`Wm^cH9cID6uSu{ zW{czIi~?i=qmGO~s!U3%T4@w}hO&cnWv zFZ3<>+511d{T^p{djFy4ugv}D`2L+ApZ9k^@97x>e6X+Nu15ttKZQTaJIOGfBvbb?MeUmCx0D3G>85r`NOyUCj8d(Z?1mH_WytSPt4z;5BQ1t znel|_K~+l`Uxi9Q#X@Mi1SQrh6gZ@tg+eK7#b}B|-6D`p6^^#REsO-Q6Ez^AV)}#B z5{ix~+Af_(zr1*fmy;61-upk39{O_Z`*!})-zxw3%xlm&msKM`9&0Mk(w~{B?Nvyo zL(oRdX$>0K;@DV5Oi91eR4Rz_J1dRl8}?daaHQvW8A228_J2l_EtBfznlJ zC^2FLMI{XwmmDkKGz75K;Xy7Fc8N8U5T<^ws}A@gG&E8}wX*@0xJ zFdd&fxC$7Iw3ZX9DA0MD2t_K}ctgzhX8hmrzoXml`h9vci$K#FSf+QFpv8yd2}ZJb z7N6bIydS1RpLd?yJb$r%;m}$&1vAaQj?1Fx4hROY8_jpcPcXOV9^0?q_Gi!e?nC5< zGhdy{;#+tjcfj864rp2k*>m2Bbw57_Prv6|o?2sjU@Gv&47Zb<G=WB4kGX%i&iCUpM+I z9{siG&pz@qpW@k@{A%mN$A95d{)#tU)iF(seaNNWXaRLa8)%FQutrj& z5LBzGv{6b31dT!~u!NKg5T@BPPEczhhz6*^Cj3JPL5Do3Y4p3UpLDtXnzMxAbZ36s z=2%y(rS?z!^_qXsm^m@m;sht64Ck_Nf{gqTM4Mp9w9+x`KuCI|v#>^B;SwVX$1ohj zXo1)@v@u{qXu^d7CI}4{q|lDkfJ}M{fsN2enyLgD3`jZ+kQgB$R11Qog#$&30LcnK zVFmtvjgh%~_2*mv_LA4h`~7jQP7{%&03d>oorY{KgAFBqma$=b;DW>>R12GNVId(| zV()q{%kKOq|Ie~dzhy5<4H#_^kTA{H%4uElE}rR|c%mnO*r7`t$NtD4Ki03W;~TWg zg=g0BbRA=seWtt=Hp0e7^Hy2#Y2{>|zVi8d|K#+1%**G!Rtt7FP-(D9PlfH1uP+{R zJNka+XV>%nk9=K}Kw0A!SnR5uL2H?GW@?9NV3Wyhk^!j@5+{`tD;YdS|&^%-mN|IvSM|8aGV^7`dhk0(A;)u;L#%9^jsZ^Lh~&f^>UP#^GP z`nmdF>;I`GHyjUCyaG1_K~qw?GIn7)s%Z$3mFQ_z3re;EMX9J)L=xHosMHb*@Fxl= z9_f@*rAG$pAI|+h`X>HokN3yh*GCh(8sRW;47k8V`S(X%%T$qRi6fB#1PZN_03e+R zWx_|H6pcg&paXB1C}SL#ZfG52RGO$5umvzAbYUh=KtZvJv!J+5K`a{Dz|oi>fOMA) z1QJIf6G*FV0M#KRfoegTW`?HaDFP@0mD+=6y8?f|Vk)b@M}2&E-rv5x&#S-QP&~1t za8A&0Dul8FK>f8&4tY@gGbgYKv~aK=?dHFvsjmRDZ1 zYSo33QV)6{>Qk<~;EgPa2eNL%(kYfyM%gsBq^vHfN45>S2LP!gXeF*=kvj_HV6;>v zC|xv1Ad+H@S*H2%=NB(O|NN&fzv=(;=s({1zf{kI6vZ?El9cr2m2-~*1vwb9TS8$N zC4vHFhEk+pI^q~>!^a$rYP(8hjKHBEHbwx@!mt5E17jKs8$vd;F2NYZ+GvH1$^%qL zX$n{9hyXei!61vGnvud1pup-WLV>D1N`ZpVqq#(3;8x&Y=P{zr8ExLb>HWd|$3N=N zSO5Is-}j7t??>2UpokNJ+;RZu2o4;+tD+%Sc9xZhmq{f9C(2UUqPA&1vxxuuJO6k2 z|G)Pu1~d_qF+wO9h(MyZ^GdIa;#iYhb1mR@UN>{Lo^Skzr|p-@t%pKqA9k(ZP4EvM!*er!hQa-jGRVMh5pXjRovwZMRr z5}X1j`_xbG%}>9so__hi0DVA$zyF_qXCDtc|K>XXSv{L5W@<&}`JDJ!|D6xC%P(Gp z%%oXP)=uOw+pB~sgr=f~4vjMeWP9Vh#G1|;kwpb)c+i?*1H_hV(YU}`N7w>Efrcfz z0D<~oF&JoxP^Vx66cHOU7?@Z>a zZ<_z-_x}I8-iKn1BgHso5(v0U@yT^RE+>7vzZBo0Go8DmOM^JhW4({}Q^;+u#x};~ z)%^?*10w*yp+>$m9}hmu^y7XTk%6U2BDI^%2Bf5w!ZgtCZ8(%xUPiw?ILK$uQ~_tp zN}*ABI+tAP!a>VfPn^^v(z)|!4nPqMu>k`XML-hDx!OmAE$vfkk2cpSNm1MIwsKpU zm59KMs6=jX6TeBmE8mf~s;SrI+wz?vft82}w&gBIR!*@fCM%!ym*XFQuK#oQ#rZ6s z^iKYtM?U|U`xZX)`uydCJBPdZmdF2}$A6jU|7pIG9}it4lB$ zEe6yhJ2pgxwW^&Kh!upXGXc=8&`4AiqCkaWn^(7SA2 z+u=E}>pAosaUaUA7$HL=*u3v%@5{IQ@#gMVFvdOoJlDQ$PV_fV$mcitzPAI;NZbDO z>p$@M^gNf_0Z^u`p}^SQo9A(O@ZrVY+hkwIU4sq8lpsoo6cUgpeC1a2{q)X!n7uK# z&cPOxlx)yU+e@C-u{Tw+k2-a@2NU;5PI9BAj1^0bkphWygwRYJIFpa_`s5&-VY@vjQ#)+6NMO7oun^TzMRY0B6pmrF=26#rn~sq} zAlB#fE_qDcfeb2u?kX)%%L>!TR9FaA0SbhrKvYqws>Wfooh24q=@ES^HPq97x9aED zZT+SHzyE`;AAfVvXC)uUeCq`0U0EO+otmlS&z^GFn6dJlWZR`GA5pWMkZnMVF#yq! zze4}G^^aF3e2zVJ5ymk6T2891z<;~Yh$&7JND8pIfmcp1 z{W<*n{`Wh+<@5XchaYElytQtn3jHooY!p;JvZ3r@p#AQl;GayYu`V#`}}3q z86&aTB+jbHTkjiub#E7WvG)OEHyfHTODQR!4+{{2B*~6fw=s_FhnvcG8WIR}+sf@+ zbTb#{VfQ2g)B%%y*h&Rv4xGi{T2VU0XaIpgX!0=DTp*9>w-uY13RbZz7kRNJ=)zV) z07#@otUGBWRNzp*VQ>p6yb_62glr%;tSJ;9!!|Fu`g!~uf56ve#q1@wR9>|tn6NdW zl~B25B7o$f0)h%j&jKVmK?t5YZhEU0P)7+w>unW}a)K0~R*|;cx|jkIdQ}jb0zs{o z6s}UDTB1~jloV8Gt;3k$mm074ic9a{em^iSWPIj&JC&=4hBdSKD9!WCEpH+Io_VTcAU z5D*Z0EM>xhY10${p=D@*q$s$UB`^)kLKu<&2%!jJVLXs(x z{L2&AAtrU;!j28)nToM|^Zi`h>)x=btZ%&U4)^U@$uSf&@^A_#ah$oPtXiHu!X1t- zSC-~bs4+9yvLa+>WaykahaT30reRDE&er+pBzS*`^UU`hS^FehOxWP8_5Eu<&&!_S z;Pse@RlvwxM48P(nq*~Py>@-IK{kn=>{bL37$l^|%87J^0vZWOW8?ODb1t$mHwJbI zYPKxhW+&=8#bx*G@I-Wwfy3=fGu0kAa44ZxD+z_sXk}+Lm9y#EY`3>v)G=yEOl9P4 zF{LdH16}Un1|w4J;i+Wl(7;MyrZ!?}v!MW8EFoDo31GbDuBb!H;v6sBQnH3_+$492 zo467swJ*x+)Be>;kwXYHAgW5y9cuv8qKam%4#q=yDF`4WrNFJxNR*nY08tVNWW$nH zWhSi`wN$lGAy6hE-9<~dEo-p2MBB?W4)FIN%Tl8)^ts9dyey)!DF1IGI9qmXkU|th z8#D+)T2pPf3wSmOQx32xNst4_bAS1_-an;c&{)HUOZR~zi3$Ol|DOvbRsr2L18PCV zmMuF#P&5DqXoxWs#g+;Y2xT)Qx-y2+atKNri38LTD53#vh(uK<5}0ZQAWW>lzq^lD z(XDZ3wT^g@K#KdmT^u6{cg`gqYF|M_)~SOJxAVe|0KH(gp@?f6Pv>l6@XkH_V@ zX!Q~Pa-SZ1GZQNy<}n#7)!=a_~k`SaWK9DSRgztbaQ8llWBIZ9Owfsn z9o>80Rot|hk)bxQQ4`(NEp?#=xHMwvg3wAT2oR8#h-Ar5a2KXwY;rfzH8smJwkaaS z7Gsf-l1;{|&H^B^5Q!4q1=X?05G`n~I63!f2Vz?3P*L6ANL3y(CaBVBCA6rQvZ6$h zNEftSH4VBI1psT63cb6oqNHHM2pScTf{a=%9QS2kk6*^)KYl+xx+z5|(4gCFjXzKE zzbm;$VH8d}$6D{uoA_8Kl#I?6Mkgt<&I_15-jjMASOtUNyw15l3W3Okv$LP7sfe*|Or0?{@ zry>Oj#4TCbI+hJ(QpKLU&lX>uUfUWvcDslZ^OJBKpv8ch=^nKnzzqyFrS)#_vp#>7&7LCPUQ zg8+a4Qc!n`h9L-6sDSqBb$P9R6F-8hb7np?;yQP}CF&vx=aOYEvx}+=J=htIiNS@$ zIHPsMD#Lxt9G-hJkpVJ6Rz9YlbZ_6ZiA)1zlnq?A#=5CYZ6g)ik(({#Qe1HeGJ%UE z5I}N6K>{$Mge@g@nXDAHW(5f}9IcO$@1TfqEMi)8XY_g~f-3ncIqC~2iCyq68WN7qHEPuJ_y6K^ zf1Mux6-zOq_Ou6utSfQi)*g4!+G4Fe@S=iRP+*C`MTr6e&?pSB3Wx}TP)fvuv-BLs zppLVJoN^8C-i2doa2U+;2r-T%*lsE12{bgwNK7-SGbL68cgOuBZZpn?K`O`-uM8(H9f)+l^oKExOB4SYp{dF=TZU%+q- z_x6qRu%~=2&Z33I4J-*ul@W)i2!|hUVj%N&>vp@EVK-@AtsWf)E5-Be1N3%HOBM_u18hS<3foB7Vgic9vNZr*!U|O}v@B4H7AAE9 zrWBO~7FFG)A`)7P_9d!hsY0TtAOar|LQGHrwow9*$jI(eAyASnBNns*rL3%y-HNgR z02F9<>HB~6k3ao?_14BY-|Da5{u7U{ckwNNHfuduaUD2L;sZ77tT@|^;dL&PJ==Jy z3#(-2=u`zIo>AULYyutpq0IZ@kIzqU|3x%_LX3k#Ru}1WE7@}T z`J&ZxuDM!NH`7Kjvm?M^d54{Ct>WR%ni;R`v+VWE)1m0h36Shm!6XvakrLK7;!c|0 z#ct>yJo=Eo{9KO@=Ogeq9WPJwmmm4loeu8Do0oTJogUZadDV@2>BPWCwh?rP3%hr^ zwvYsI_jSTGBMjYflG$GEwb{*=>pU{&@+W!y zQS*M!H|NXuo)49j&-=vvti1Kvq6${Cl$Zoa-J77fPhGZPmyi@U-(|~fnzxm{vwLgi zX?EJDN4EBcXFNvST0?~f31hd`xYU(n~PB~FS235l?6BQ_C`Y6~RWiZ->RNvuG76#}vb zkrq)yg(lf}KL6D}|NnpQ>wo>-?Vi4VJ&liNfd^mI_JhB*?ZG}WetV9hSVQUAr;gK= zSFO%!;eDB^L@;IH(KNB@Gn>?0to=%^S0Jn_Qf#k^HQ+d_HAJ=h^)c0vgB4)*OyMc z+r#_!-35naMyxO_Z!t|VEk-PPqhm_+_RM_ce3nGLN^%uixB$`Tq9) z(kyT0<;yXzna|AEz0uud+YKxW8^sQyWsO%a_Fj(|R;6jwD1}gAVgV>XAT%09iF9R* zvLX#Bt2U;{T(h^gJ zR7tv}08&+8TeU1~(Ll&B%A##a$nkjp(Qm)`cfS9h&+@Ccad8=U!WNj)-=6zr`SEAL z!+9xPR_@8&?%Q5|Z_BaAN`cNQi7%5t8e$j$5$1cjX~Mlw>(EopPj#;6A8uo;(+M2m zm=(sJ#=wo)M(Gf9R@uO7h>op0Yyc5rimELQWGEOCvbBK{);@mGzy8yFI^O@s`eUBH z{eFE;`AcxRe|gsHd49tE_{h1P4F_52%{H{9>y}hdspsH4@0fO{ zLfRGh=ek^dYmAHRtg8sfy2SHXSXo_pSmWke69d9pZO`i~E2jr_3}sPVk& zI={TkbM|w+K4m<$Zj7V0?An&@1`vm!Bowr3Y`VK6ZzE$jiGqx6DukwW0~AVWBs&77 zfusG56g(8^ZU^N8RGZCO*st3kNadQZ{tE(nl)M0u4}rl+6U)04hjVBY?E7 zpp_O@LJI?77gooGDpnt+s-k_wM1l5MK`JU2V3PyrBM|@;1wbJR164w0mCCZ^?oufr zZc18IN>fl)8f=J3HOF}W{O#+^{Nb-ZbbkupfBD<5|MK_$`CebyA1Eqm3y&@!RlD|x zJDzv-#G&)~MfpEb<&*WpYv!XiI8-{uAZV0OMpsCx;a%xmFrxstdPNhc@uSH$%>ExPWUZNZ`Rs($MJu^%UAV_dq(GS%k`RhuKj7| zb)BD66*RM`)oykJEe&IL$D%ZefZ8PoV#*S3o}m}cQjRfGT#cQ&!w|yQ3IlNfMOz6I z#l0Ksc%c^%k)FFJ$JFj7+f;pXu9>rZMKAe09!=k+KiYkPz#ypT#&mAUAZ8o1V$7}* z>M^<2M)Hgb4cP9A|3VKB&A}JK?qo@t(&4wU79s0r-7|dKN1LRWeag@2P#^F zEYPh8RVG5A6rf^ymQ$!CI|`j5647E2RB>RW%Lu3ngE$8vS56JpN=x?Wwn`z5&|qu} zwrVvK=@n_6<)8kY@4x;2+i&mdkN?mA{TIjiy2iKv;O#$uf-mnj-}!tT*Q~UG2?l;p zXg*dO(ET5=9nvxyl$!gMd@q*oqVb)s$SE=saiwrq{^SqZc|Bk6Ygs%pR7DJjAcO8q zZ&NWv)JGt_zh1d>59?N-3y3gs(1J1R2rXLF!T^Qv2nPV{*t#hvEt)+3@qhf`-}t-J zPk&nG`^{f!(vAXhnQ!lt%h#v9Z`uQxZKKeeEdOb7S>pu77d4FpWT1pV|qNc+8TIAdf9PaoE zNqp{HarIzK0o|rF0Sy3Bp*h4}fOsYv-EFa%zg~a+e{a9M<#D}vIo7;cYxe7mvW~bz z)J`=j!W|L~wGhI<3S*+6*Tlzc zq+_O3w~WVmyA{bL_SCkukylf#RA>T<0BfjuxeeeF3IJRkDK-)zgk4MO5~`|E)ia59 z3Rx0V=rFK$AwY-#0Fn`bNzh18C4p!OCI}V6Ey~u=NE_R+F;N8=(nGrNK3{+S^p~H0 zQop~(w~xnU{rJ_#pMQ3|Kl|G+)=$U!`tujx9{uw8ypOG9`9Qe;HOwsAzp^dgRkSxI zd1DewI9LNrqMN893P}mjtaUrTEbqSl+y7Jkvcw;4JcW0|!jQwHbnP}$DSFU2*fkn^ z^SB#&OgRnP3OjHpogrl5f{rOIXb^{>7`TjV4)^_6pFceEKlum$&L8GK`rrS%fBy0G z?f&FU-H(+)_GYe+v%vx z5tM4d)HG=ln5j~P+xsrGxl8AG@_2sv@7KpS{-MfRGiS#^&D6|Xos<1=OkhGnv4&Eb zrgSTUl!&xzFbIHYiVBaCAV|%v5~aZi3DsKCwP~{@04r@Ts)_>8RDwXoqE$K)YYD3@ zdzrFN^a*+HUa(NIB(}VT7$PR2p+ze|Gn}K{E~E-(p5-Mb)4Rx(WKl>L8TjM>lRif!5xBe@%<;i{_3;uzovdsdzx3he0sfn%kycu`YHOe z=l6H}W2?VA|8np(j7MX4v;1=@)7YKo1TFL!kSvfeVs@1rR$wT3M5uxvFaDEu|HOam zzvX)qe`>fSVkycP5;H|qTY58VKq$6ybiV|~34zchx`uWLK^&5z3I`~<08p7Q1+=0j zf7f6A>-W!o@$q=v_XBtBzyH-QuHXI7=ksjMJRh&gRj29HP?Twmwu;?yu$>g4r>HC( zk>%pr3J8FP#3-_2Wd;6uKVaIC9BSE|#y)uHB9TthVN`^UXCQ?e)<@vv-3|uMY@$A1 z+w9INBF zSt8x7y*3C~K)ZxS1FKq%GBXZhnBb2p(iLm}zXh$)wfU~3*ulh<;t8#l>od)ZF97>Z5`OX>kVfowrwS8;2V zb}`h3t^||9L`Z^?3eUrZFzo|Nf-D{cpm=i5NS$R=7oW@`&0;7=+LU&OjckNnkgzme z5QN6$?O*)ux9@Mi`gHvA?Qw3o{`9;)&v_gBs!uBFb%J`A@#x z{QfUL{-`_IlP&JlGHrD`rSX)5V28=Fv~`QbkpQKba*&{LG-!-K(ZFtTSb_hx6EukD zIWspw00-1UWrP5taYzS|@r=R(unyIuuf`CmJJ*pLo8+~5AC5GRC)EkPs5FsF^C{&P z6A%b23Z1r$LPm=lpit>8aNDz|*vsJWwqGvC{o7-3T4zT)-O;;fjMSpg+!#7DQ(AR3b&CK(T86EdpOg3U5W(f-eaZ4^$k=k>`Bpe53icq0Y zIGmAlHM8q6Thp>&EMQtmY$_eq8r&AdxCJGEj0jjLHe%`oF&IE(O{^V4&<+Bk;t??R zd5}W_C>TjdX449p7M619o(rU*A8yiT~MuwboC38Duy@hXewFN`it%2o@6r&_MvE#6qxes!b2` z*9#t7wTKL2(jZ`t3W%!YBCV(Q_aFbi_ww-%fBD@%`Q^JgaJa-Ykm#stjiDI|rV5Op z)(j930A~Uk5l!*K=fC{+*Uzu|{U!3PzJB`h*NH0^PNn(Y?j3}_>< z?NF?=X#)}q7i(DpN)-wuBZUSCStYtLt-wDPPh%pvMMDA65g1Jf44yPKQ1Ae{cM4Qs zF|KV*vk_F{+DNIkh)@--H)m}h3Q*gSOeSq&D^pRrltM)90E$XO*sw)}w*=C>jC%X+ z&*Jgzm!IEwUBy(4l$pX7pb)#DGL?o>RYVj^Mi6z%0%93DATc257A*;_FldINV8WEO z(LppND(w9fQB9QG$t{^40Hu_{v%06F*PgFSk!w zUSNR%bBaNckcuH4q$IJi5e-rnIFW%#%vNR3F@D}3sSh9uLNuv^P||IZNd>lk{^CF0 zr*HrJzyBBW({KM>uH&+tm?{Q^9ixy`5HS)o!4g|rL z`BX_y+&L!863(L#&TxiB7=nNk0s>5@XhGH3(&C<+RdcMm=G30O;4~86*SqhbpQwiG znTAttU;q&`G%zyi!nH#P*y!RN9`a5$I$OF6+bm zsNkx_Cv2BIAW>*_@IY{6*H7!+y2lnlxUCHGQhhz1kHPmpWVNk?@MAiB*{k;^bjI7i z`|JNa-v0mFto!_eRx6a|rD!U)EILVq>|${}R1 z6l8?tNd%XAu88k?e1!=)Xc7f+8>7%V`#R6k^Yr$={QJMoGz z2#h{VUD{mdi??ifnzAJ=6Km$ap05xS*l>mrF6ARTzwd{5>cw~dz!!GN7H+{QuNb)rzHfvdz<>%gvXVucWYO;-s4zBZ&Yq3t+%n zkfCT&Rw)AAC6>&%)c~xLbwos+phtCLDyS}=!T@^JB~y(gdJOZ-!IMyVmZ{m_xpzF* zZ^_ys9#`{BneW^&GA~#9TDs6%dC+Tl$j`4F?b6%7{{4Ua@azBoh(GxA{U^WUpMC%H z6H(LRI>K={&Ug2_oNDG)p`3?AoKO)Ez*1&mITMbkLU1ZTL`0g4G49*;4j-RCuRrKH zmDFH0C71J5ij;ieca{HRulW7H=(k^e-Cq7(_E#aEHUg?@g3Dk!3%F&~K3t-72nGcR zpgS<&{q^VEezRZq)3EyKuX1C1)^U>?+t$OjrD{?`v!qaTEjBYuXck>5ty7XIEJ{i` zblGJZg_WkTJUR1BW{U>7Y~#rN#4a{p25xAHMv}b|YvZF=gGj5EzLR6b!6tpn(L0QUw}Y ztUzg6$B9Rslt>*yHkD$upfsuwsYaqIWVNsEh43M2F7slx5c3}b3AeTkBjqO|=l<07 zOd^A|jTp1NgeGC!81&VS1BEz*zp@c6C7~qR0!lE!|34@ZU>ks<(gN76AnXzuC}5+o zkO@nS3lg*|f1wx%0GJ9uv@tmJ=*+=UwYzm*7q5$+bzK_H=CSCOaKT2Iot|5p2DS$h zYC6g%&HFvW^Mmv4`TH;5*Y$_bAJ4oDfV6r|`Z)V`zaHlt7=PgGG8#mR#04VK3$;!h z$V;9FJXX99Fy-SqPP*PlKa7t1{>}bAp8nalo{|+H zV_`L;{iUD%r?3CgujlKJA3pnjAI#VP2VVgj22@}SEt<4U0K-_y5G^b~M1l+yNI>lt zlrZrwLRtY7Qi=kBu#!?$g+Ptb)xO*psBh*qJ;^ydcSyWB((OWNR93%LSs31+!)OmP zwImwKih%Z%eX)#^Pv^6nCo5kd-;i&QeD^3dBEXUeh5#~9RMM?Rr9eT8s8|5NYC>y8 zmVo%sXcW;tf-n*kQVCH6X!YpPp>3%j%K6L8yUOgH@KUY^Z&8Vl_KJ_4c4AT0x`!A`-DXTT6-B!f*TuQ44 z?^+aWNu@KJVY`{0z+Hl-T7ZTyFs&GO3$cLG>x3*Npb9Z$ycPKW{vVkX*UGRDJUVhT znBxSf$gV6rGjY`k=ir0`dFFz$dH#0voaLOy&hFG(k9)h%>ye~fu3aaYYrFm9JKyTK zz5n?6{YkHmyyGU*B0D#bBRpENsU$*E%mwVo+u^`7@IZWf#oL2t3|Fj^U%%#`{^7fS z_5Z&7^wt@pwc#Y_sQdRm@cPZS`lshFe|x*}ynei%AN1!nOvQw%X|karff0}bs4&5W zu|yi04G7vfSo&_oiig}_Pyq`OB;x9Z*eG;@Lfs`zAPNarb4M@sk`m9It}1iE3@=vJ z>*$WW9l9^82bTI}?U6KU2k9Q9Cz~qi##djQwm;|02VH3?*ZR{x{CFNrF_IbqEm28e z7shTu31UgPnOLbDgi7xc5wf5`*)bO&Ai@Yjv=6RY^1`I8Yh2T_Z0vFCr|0L!FW>$A zik;;_ujR3MyN{3bL{DO;OTuouk#@JuPSPc&xoHmP<{o3vBxlA9TT2zU2XFW1<8fE# zNFGx%i{s{rdXyd(h?E2h^{A{!jG&*8n-rk3er7nb-uJ z{jF7=&)i@0{8SeZAs-rQ{nzu6?%ddySCnuY|&*yjV`@G%Jd;1H2sXzMsd_TNDeHW#!pXd9$ezwouf86iC{&AP& zj|&&7HB8(t=sjYtX+1_7ljG?5~$WI`!{N-LGBx}C8= ztKlYRB3KI`Xq{>W3RH{$BbCV58r!8YkXra27)i^%x-;`;M|9x%dKIHYSLn_8!|^50 zFOjbfeU*Hv>o3h;dHzzDgRc*LW&P6m;;X;Dt*_5~)%~KBfB}>m8w4=4GU0_0DI+JfUxf!!jKLi_xq@&3bm|G-|`y~n%%?dR*wHV?`ZKks8bF#Gv=!+C@2N+!8Q zviB{QWrkak48d+LOv#(J)tMUU{L0@vrsvl`9P87!Z-4PU-@bhOXD{UWac&3j>SrIX z*`I#PMelVR8PH-axP_9&5ew2H z2!~3f05&N=sFZ+)NNeLJhC`5$a^RDB-%{RJfPgnS5D&f(|LS)-pqIw1%C@}m&6zb> zW}snX3S5c|Mkz5sD4K$Tw1AijfKXuxC;+1EU27I(Kv>XB;F$NLaC*<(-3&u}_B#BS z@0)yTZ~5(^?;U&M%#O=(-<99}*ySjZX0u+-YI7~Q;tn))?VgDpx)OHX9>tPNK%bbW zF-K<@Xxa)a)$8rvU+-6c^u>P7^+)=1^(L;N5R3prVqkJ&(Y}Z0pWoeo`V49Ew%LCd6e`mM3g z_wL8_cD+8{A3WHejqS--@8qFnjqBrQ2yj>psAKEJ$Go}${kS#8ZTd)2H4Fxic-!?|LLu6}%Z`4)A1$}jJE zyyI<&w{`pcrvKyLzyA;4#!tWecD?=SySM9QJi5&yJumO$^+-8yP>U4OAPuVpOS6Zw zNnJ&YP6ONu!YNaSz1I=Xt20fZ4jq`v^?(^Ig#;FX2@og-RWY@OR2C8m%Yc!@GGTLo z1J#m8S=(vu+5UBZ{JPwp8(jX{^Q+&V-=Es88W}kqOIXw@m=K~8P_bEy%>V(QWD9Hw zbWI>d)R}gHA}&x>aTVAiCsqP{lzBX|*j{h_A+%5S{VQLFZ`{!@&)@C%N%#7MZ8+KY zXXpM+>CrNuHFjq*pe|rJZ8j>}9nuRU%-V>A!Q77AMCk39d%N1gG%f(ZefIov&tuAsS#rXzYT{(%x4jxYS$Njj@Tk*E&xR*B`(-{~a<6>6&-w9dcEizx zNZ<8?zQ?UFSYUxIYBls#1?kz=ZLHjEzj+yY?;bd%OMc`QhLG+JAEPiQez?=la7q*O+4_f~KoQKUwR2fBb;s zG>ANkw8(R~J87oVySH?pL+s(%JZegPi}lnmzwDoX@crTLUmWuLa)0~ZzW@6l^be17 zy>|pN(1fTCP(6a10i^@gnk2yh5keeLXf2K{sFH%J16|K@)5$&qtB6(15l&S}Ay#2g zH4&f)ttJ4&P!X9zOSLu`)A2;c)M_Tk6+dS-x$Pt8MHzC^?JvGJodBs8NMJ3uB*CLg zb()ANf`J;4Zc&p0NC6yLKnz;MBQL!du%-=d%<8LthmR_5$Et&d7kR$k%d201y)WzJ z)-vz!hts>^5@qeqa=o{hW!By|YnQMT01X6oXj4vi3GHrXAjybP4)#`Ac|$~a&VC;+_wJ;o(XLW8vr7iWHGeeD{^j5MdiZ)zoWqo(z^MxwozW|e z(s~e}W<=)wte^Jr;B-_Iw=N<85GBSqM%qaj?#nPG+Jn1l$b)5SNbP`UgqP*xG3$Qf z{K8{(j;4{3qyvl_Em68fYZI$wk`8;ea<}Z@#v)P<0>c8Pt05sg|S$oshKaFZ-29={MmPZf%}7{*fBcH` zD8Qnfao|2YI|_4a>yubm?lB8jwz}x>+WkkT@OC{p;QL|F%Ewr~A4x1qRrW;*JklYkqcqy`1?&{p-i4vz?}Jv?HmE@2TcU3?-un?hJci zg{oyLRsm&(v8o(Kr|j$%Q8u8)Wu$Bgqq)f~843k!;tZ|?HG@oHsX`qK z^LgJJSED5hH&MGh`?e2bsZ3B^{NCrYxtVA7p|e!Zp8Z{?xa;_{ulwD%Kd-mPr@i>B z`qjMqHy$6qy<7LW&ES2@`IM64V#rR(9Vj1Kn(kK9Ogcqnmbz*VdmkKTRZP3M!tRXJ zd)0FZGu@q??%{p+$MiDnaU1kRVYuJu<|v#|i#~d~KmVur;oIw*_h*=k<-^?n$<4D! zaJbtQHXC?g9)se#RsTrwLBtqI0YL&VhGjq)4q*)bs?YOV{_tHtB%SQja|3zQG)i2fv$Te>vX(I;DC4d*(aMD9yAAUPqb-2q;xb z$IohjO%Bu%q1gac0t@1b6v$N0?JH_70_z|{i4aLp8{;gJ-EIkxNx?qX*@ zp;VxJ`u2}L&41_L8A{0)pZIC3ul9ZzRw+<{5GNN0A#MX zdY87fjbmrijoZ*Q39u>Bx9O4BzULiBGwMC;W4%nshS|qsf27eVR1p!o?4c#Zphi&? zk^r%o#So)tR!JG>7PIrXIt7ppkr2cdYmF34mH>#gW4Ue_Wmnl2^e7`Ty zZuEA!Zn67kt>YbE_xmT_zM_m2&Q=13DQa^wl63@?4MIdp zB3c`%wiK)u16l@)#H6d!wzM9-3Md3i7qmnOAk>g(K5Jyb3tzw$(2BxBt5$_?Ar>eX zE38ag71<_qYn4s6Y02oar2$Dd>dv9;wToa_L2qZaV6M`1T!us1r985oV+URfZxr`c z&>YweFLGsgz`CDyNU_g@Imc{UF5SU8_D4KN@V(i_e7j%kloA1$gU?A`8mO6baK+X2 zpZ#tAn?DPV)N*`Yas5j1)h|1vh>K*fQbaTZ0alU@2#^4PAOBMsg0n;)B zK4k)?+;t342^vFf&f(^|nYop1LSe%$Y;$pSV4Ea#;%YmLMWob|x$6cVF?H7)>_KUg zw2rqwiJJI+IcF_?`Igz~&#qtngSOAd-<1qw8ESK~ai`~wTs_7qtri_pPIa^BgPwu% zj2f!$8grEc*3=<_og$m4d&E_ZD!^Z2M$69%+; zC9OK_Y05noW&t93F9Mg8msDg?CA8Zk)eV#Gp@g;eZq zkSHP`kgL4(r@obo6Mz51Klj`5e$)B8?;f0AFV#BzIG>ng9%JHIpRUvF!OVHr!Hy(H zUUX2wR48mJ1gHW86gcGSfZ9|^8w+rzLm0w866-al3FapUYGgAUU-62*2ce8P%BppB@Sh_`8VW(ly%4-sx)QFUe=mb*? zY#G|^#Zifyz~P1D)>PhlhOgK2%Dx?+XQ$;gliHoh*)g-@;VLU#ig8HI0&f0v-Hd^} zkJIKdjOmy%bIgjo6`^~?9{wKHIuXg>xpYF~6{L3%>-|hU~ zmq18@3MGI50SqNU1~f>r7zxY>At?qSAPxx%P$nTDE}rbx>oStfR;!DX180xB-1VHO zT!$0@2qB@%1_BM$rLMT3*cgX8^@STP?F2|nKyBxHYD!MFJsh{E^EKS(&pyCg{m{P5 zoLirQs>E}}vzz$ju#DpBG~p4iEL%->`ck(FqwNKcX3chJmJVBhw8&+Tin0yZ{gOR) zmYM$5CtmKr%L3GFpIvdIv%}Sjf(dbqS;>S3Y6ia1VS{PgYNDCJiEk}XlNipN6u~40 z-9b&r()o$lmWI$n8G)pb(P3L9-58Oum_z^qBQDV5f~B@Urf$FP8#h1lgzt^a&fC6l zOi{MdsKoY*+sa}RDyT40KnbhJAcaT-3@{{+N-#Oed0%&!lh2Mv_j#KC^KaQNPfwRG zRj+fLgOjY$5w-LH4-S2|IwNLS0(DVi)4d|Yf(Q@^$fig*knF_*gn$B}23rAIP&ghW z-eN2*aiy^mAZAfyiLj=O{GtV5z*B}0jl6>k45BoEKvD?{x>*@5096Hm(^S&{TcxD7 zH7pgjWP`>fW4MesN+c)(6xf&`Anl5bg_rf2ueC7}=I0%7Q;!p=N1 zJXskl>clu@U>VOBPX<#x5IW^PvAc?KNiPBjn;-#9bOs3<5{9{cLX(oB6q=5r!55s=ShBX^|DU1nAv{X~?+j(fCNi=3$Yp(fGgHX=!Cb)%( z0BVzB%DQa8E_4u$P13`#K67v*y<^%dO} zPn$SLopTy=tgMfy5>w2e^$KdD35KX?S8!G)AQhu9!vlcAGF*ZJoIp+CvVbXQnlWri zi-`e+c1DC&R2U(^DOqWQTM8_V3=A}<0EZU>gkFISlr{|-U@ZPYS^_)0P9GQKb=`Gcs^U(~D1=pC{7>xeYdS9?#hW~|MkNI`?{jC_{^L@VW=f~S? zZ!S-WQwLUqYUEGfyzKt(`!Bye|D^9ip$I_%fD)hu3_v1-fDpil85JT#8w4aJ6vwbi z!UlKU>DDzq?KTSnB7zAn)!djjxw{qC8ij-*(oj%j)WD>;nMpyVK_@9}fQ1#fHl*-i ziWUU*p~vL9fS)kwUGQgT&)v^EHr`~b*Xd7FGc1)o%8fqn+3hA9UG^d!&(pOQ9Wjjw zRo&BZm+oeVwRx;>IX-UvtC7~#i0&p^MnP<2t=O(PS7F>nYNuFBcv3s9*Q!uiD-U(j z<@_sH;c7ZeVv?e063RwGz%G-lBLjvogpiDmSI{K^hY%7<(n<>jAutR8x)g%YdVI?F z|L>#gI{U_b@%XfHNM1ro%n2_&c2{m~!!GLv+a@cQ?!4F!)xH{PuadrMw`<>%d{Kxm|1I{H)-ogAHy>|#R4T_>?KU~7n#4RmkJdp5=2@xVHfL#H) zh7~qVX++Cl8ikgX0EBKzkwt8pY0ySl_HcL7rcGYX>uJAU_WF1Aea`du$38R^MpTms zwSb8cMDCJ`8(a+|ljy!zv~3!kyRxAFL#8eqCO8o~BBfA7z0-1|SQ>&LH#bX5Yu7^E7O zkO&9@kO2iKMFRvVP$3#LiU~0QGSp3Ji9IykvdXd-`D_zl)G-bj-H*sGZmJ#J%~D-P#A1 z{jj;6i?#KN%bf19cQyM7FtB7=v`wbF4_F_FW*vG??M{}2w-7;1sMxFaOa>%0CzfOz z+H^Zjy$NyY;4-FgT51S$e3On&OElp~Dv+^Eve9t^sn}(Kbl8J#hSdCw}8k^Y^dKyIQ%~3opsBo=tAuu>xmyC4rySmhFA^Fq$0g zfpd|nA&sN5iNMUR%SB(>Z<{UsQSo}_-9kkOU1iFFOq!`OX!J$(cLh|9p{am@RyJx?7N!CRLKa*csDKDif@w&XP7MtW z(|(~pxaGdWW~ft`#~x}Z6B!1Y2CxQ5wj+12CEZ3AwYs2?23;>e!N_z+C_%5fgQcoo z1AZ}QZp*x?$8#{J=UMZd>ya&2&W$I^r*O}65b|2#{dwl1p9MBu6JOr(hs zr#t`VrtN{h;B1QfqkrzpOJM?IpaBhF5QPYV03A?b0SG`MDx?JhRHQAtyTb*qcF6@V z2pDWij&jF`7>%(=0_>F9z<@zRVz8k0OWs9OBS{1s?v6#0o}j2{CYSS$h7q(mbW2D3 za4`E0E-yMe8;b^Hqe@qSwlUZ)ff?z!+LCM{ESSD2$L5?mK1|lpxn;>D`#MI#2%4}EPh;UC6bCV2mo(c5IvCgpn$VE|Aq)UP zr6w^%f+QxS1QsGLx`-+-_nY7S`L3`2)byY8nMdC|`^V>zYXMqC4&Vjfv=H8pFfTN>SgUgU*|m8<#LN_m5M*0Kkqd zTUt6O)!Io+DiI6;TXUhqMRfx>kVqv$h?DEXzP-Bt+P^2iTE6+a>!05A?RoCs{44+X z+vPI3PCHZ=EEUFy6DX*_-LOW83rMTg>NHHAa__OM0!9?@+w)xk5DXy(XbTJsq=T^q zLYb)wga%W>EHsdbC>B(Y&e>MW9{$)~^}w0Br#CaWws?)#XfB*qMgy`flMSObDeTr( zc0~6SKu|ywCQS@r)hpMvnU%(>R6ykuiA3Mkflt+(Y*IpSIDlXnukd42z_ zDVb}DIxDMl{)XSK$C?M_W9ZM`=lR%QFXz$kU(Vwe6)xfzaWAH&V;Xi_PN`qWjXd$rzqO>)EYh^$k32bNzjf=DdBo%t`NIW_aHZ+o{Beq%P?D)~b zam3Owf@W!9YjzpLA?ZjrG8z_|CUq-qL?E%D0+5&tQex($tZTpgkI#Pp(?)$OkkRdW z`kibX_I$9$5!#v?qcr85W%uK}<(hZCdu%S(^)NIzT8azc6eN`L4FY6`42hHh5l3Rk zw!$hP+-85;%U1K;j`VvH;T#lV&>Ffi0!wQqBnnTAFajes+KRHpFrl{gW#50vkFU;e zUObP}$Cr7#zj!`hKC*wDd>Nk3_viPSTck~4n1R}Y4eJV*m1r!bG_jbgpPJUNY*5)y z`4vPPaRtn$x`9wqcbbh;GR~&ZDporL0TtGWq|+QgN@xQcC_p1dFBrQtxKu&Twp4}g zx=$zR&@C8eFxb=DL0JG{)2%>Ez%Zaj5TUWbyxtB)N3pH1jVH8U?c~kNO@)2b(|#OQ zaM}l)z~g%4Q$Dqw)5olLbLmew*L|YS)Zjd7%mi-6N1BNhW^|>G-#+foZhrpjmw%-R zx`CsGkYNcZ!2lAJhyn`0AXQ?FVTb`mCuR*99T#hAyxP6xMXzwla@yLQxoCxVX{+d zsp(8++3j@G4pLqq=t1A)U7d$oWh>PVc4P-F{{$i~8ruj-dK_u62)AZ5j-H&+_{@@=$^*;nHOUvqBm_HIzW);NfMtQ}@6=fvu9(}^XUG1w$h7T8eC zqTmRk$)X2nb!!#8V(*xs!#=qh$mMx|eWjIm1b4EJj_9a4SSw>-hK>w7p`dGHL_|$= zD3GLrkf;;iGA{hZ*MIhP|FPhq6Q0iY!u9;@W%lC7wRhc}rNPpgEfs(+)IvZ7(?gTC zAWTY~9s)jV?e_X*MOG$U$Q6hkJc1mO^_=HzS5jF-2na$%M-ObJGZafHnzltqVC+p- zo)mOYv^98zMUP#yU6fGMicZ;}ca24gIJBv@pxYd~H10N4!;%Go6^0PhkoI>eDg}x$heCo;Xm$qeH?=(H% zOn!3sAH9A28;aMl&$s)_7oIx{kD!hRxEO_K0h7o8DTOgksm8=or8)yf$6e-TMh?3> zCvqW{&0nTO+eslp!)H!(bc2$`%E%9M(?23ZMg2HoUPgAS{>v40;s} zwkzY-Gw0noj$voHS@AST@eqKFrl8DnALJqLc!rL9s=Ae0MQ0dDU^j(XP^wU9DIMDZ z%*6B1x1qhg0lUZ6le&!=kqpU@0%AOl*J7}sqg&j9!~uFNL6`$3OfjVpB0|JURbp}; zsZtYRNCF|{KvGv)E$9Qsm(ua(_Gh6r!pxLW#l7$2B0gaDWxbe zfK(P0;DV&lnR<~?_(ee5g+K(Zz|~(Nt7V2ur(eTwz;0ZNjo5-p=~lpGpDK;PtXh*w zRRSxOg0yzDI-q5jS+_)}gIo4Ab(bJ$wn{;_lvxZ-*@{*R*9AZ=j8GIJShz8Si)lj? z-Xo&PvC?>AD(@<`t9%;QrL+gA3r9fu)GaKd*61}uYNs8Z z;(g$g1}{7ROeL~ozTaihRK0)v<=5{}3LBvX6_C^*qFT{S6+4p|a_m%RxT<$^v(M9k z8@y~D%hwlI+(^8cFq0xhTr0wYRe-1@Drl9UwMpYa6eN@w?X)SGQCLSJOjM&HkK2{8 z@7r+{FJ@#ZRbo7Ai~%fN?i-$R1`|yu%x8uQcD6K;OHwGkXh$8iENp0&W9Du0FsDK$ zt)dk5@$ zmM*C~dKs@7J6@ZY&lCG)iG@5w$rW8+-gJ5XwMk+fs<&V+Ng zimeR53vR%I1_cu+I8335VMLIEaDl3F&GF^y%O6jFiKbi)gHT<^M37c_Lz>A7@oGP{7L&B?%OgfuityTXP+1k!?<0uWt5dP+*p z%X2}f5KshBB81`!%yych=K6q!S!I|gvLErr)hujUZhAz771}D<(*Y=D5x`07)~v)J z0!2hbfQyZ-S#3qz8X%M|zTg&vx2)|pcGpFqt|@_0mxcfUWqhFf<$LrC{iFWkdQX2- zU!u45NAN!DO+CoK8SVmg58Pm43!->wT}4ZyK`8+s3zb1@GLQxU41%P}w*jutYcKj} z`tJU@xn2M1`ciQ(&M&2&fBxgk_v7==^~<~SHP%OIrlclrP!t8;5srj7Hp8hh%;+&W zM&BR29~{mKn|;}Sj1TOoAgRQgGHGNeIHBiLV3gV=Dq6vcO2#qSSQ`7Mi&=98y%eg@ z87pl$#OS^=D$=B8I=u>MnUN-a!=s)8qU?mq)^jE>Gg?`PfLaG`hb<7UOw*IT;~CaT zG_{hgJHZL4Ydp3C2N?;QxN8dodb34}Da#Og7n|0bHO(_>b0TUDJMgds0OBT3 ztqhxu7_5sb!=djlsSL{h*=o3@wzJmSENaALIo@|X;@(rk=-^xVgME$ z#EV1>m+2MPDw+~&Xh%~CB|;G5R!4}MJe3r*gvH2+q)3I-+r2z@b#Z^a?O)XQm#nHA zQ++gDSz3miwe#vnYCHEvdQ_^C>|EyrYUC=HUfCa6nXRmTo7rQmnXO_UI@*SrC9*iy zz$S)lz$}3kn8JaDAP}bI8n(2MiLeR}tY>kCQ#1xqvOy;raA-{_#|b-@e2~+aVW+CH ztmtmF)iuu4Z3cpr#A-FL7$6WYZWWED5+kV8Kpv& z0x@)Pkw76NBeXCk07hUyK?wkCO<`yN(b#1Xr)aP)T68ewgcUD1!88ux61j+$&`PxE zb@Vk#rvLzu2945LLP7w7kdVSb1R34NJq<(Ase5Yf@j(tkGFPH71Q3cAfC!1D7vN|L zim5_$b4&+OkJ+c{^USmRglQmF2nmUUg-aYoL53bq(isL6RZ}A9 zgc%eF8lG?_3O8=l1qKrofOYE{sj0-3Sye_816m^m0HlN|umupIkuaJD7&JOp#fv}$ zg)pSniHJnI0$F2E7wLKU8~dKP;Q>%varNtHwGb4X2C(sz%$&-K6D?a7Kmf#)fI@0x zg)kT?w2c-hgDq?~bi)*-MIpE-D=<<^QiPz?K!AaO0Z>j76H-%BQIJ3Ytk^-r0>)l5 zZV3r!0AwSsr7l$4AcKv1p}s^Flsxvy)8nN;oI_Hzswn1(MU9UxTHQ6xkE2e7bB?=n zTvox(7=sWaNpoCr1A}TvGn`6*f-Gvvlqu?3V3eb3j@oxe-kWFl+5Mz^R>IESX)l|^ ziY!$sQvLr6t6{^4u5qcu!C65aEIzPjbtOGIT3SbST-^u0WmxxczkQa+>B1e$I%voI4;5Qa6V09jNjL#v`@#5-H&Okc+@oCm$;L;QsV8v>RA z+M=7+Q9_~-S*0~fu`|-rCC9nQ1QkOHArl6WjPhv77PmMF92CTv*xtXaQW@DQxqh8~ zkHfp3oce^r;Y)4$I>lCfJr14#U(ekgYllj*R=qm9WKUI`M$v|?*eL5ITPz|n8o0u4 z+K>zcB_u*XsTE-elO&=s=Kn9vlB=v?WdOLPu#=eR5*ZjWtazA5ZfA5T*(HuX(d>NIVu}E7hsN!QYfiV(ljEJgR4@iVV2UF3m)~ZK*lanYSfg) zo@{B-Rj3wS)t06V0095$XbB1g zC;}t}ApoF(hD;AgeImupcnK}Q8e+(3E@Pfy z)_@H!*f3Y2I`F_OlO1!+QLEk#C0iZOIRaeQaqGdSx@HKR>|hWCV1cLsDR4tl#$aL) z5CQ@=&bU)s7gvc1_E2x`Q+ZRL#QX9S=ACl4d!5Q980tOA#$=$lRL(2|N10V-c{47! z0y0t_iO*Q^UvQDexAv59aGmPcIC`(qq7ZMl_`oq-f9}*QGH6LK&a}QJ8J_ zOiNKaf>bRxGD+9=r`LR@Z=98kdA82RUlR-{?$o`EbQnuG&R3O=p#rKiya5FuNKr+= zltmyxqD)vB5JVGFp-{m`lB^tW8fKrkQL#%e}^hg7j6i8&G z5CABy5hSQenCK*gBn1#sU|QDV3Vb?#S=(sc6KhyXvtX-G%XJG5rKBkm#Ga;F0OqQL zD}bs zAR&VcC;|?dGJ=o+Mi_D{H<4g1Xn;15LqSp)i@H!hQ*R9>(#DLFl!8~DS>9}ql>H&# zwJKwp$U(>16kyZ7LudrR0|bl~l%N(#nn6m+WyZvgH5)lfxTzg?4V4-Q>>|UCJ7B6e zatFzYmG1#tyPFzjM@})qAwj2+(5R|v3kfygWYDFPzy``jCyTYgnKUbfb`X@H0h=r; zEePDp>7AqzRs?Md#;mrCL?R2JpjIhIgWYy7eZzNsu{5_+PPDo z*+}m-#e>)vWxJZg%)(S3N3*c$2}&iDfC-}$4Lfdlf`zS{C};@*K%~+p3lK=9m{K7S0t&z=OdaE5NI8N~f+(_ppw?9Z7VZihRdTJb>qy0m zYtN%*dVcW-u+cC6e9q_09!s}P0UZg9J-FE;(`cNlEe8}90uxhGiVF~y2%)9gqD2HE zVaNegrfH0fk#T?#CuGFrI2;Lu`^ha1F;1q`fO4B03F6D4;HD)vxrrTK2BXY!nBVE= zPrh(@{lqqD(kPcdYCJqYNJl7w7PY8ZEH%w~&GDImqA5B>Nfy+ox^e~)fXNT2K!yZN zDJ>X(GxtcYRXSf5kv#~S3kbp*3O(oQ1J8aX9?vxtm zDsR{KJF6mVX28NQs|W=th5;f(Nq|y>kfDT#rIL7Ohy zNBBA$q`8sve7e*)Xkl6@bhxc3QzRyl)(ba3VmDw3NR-_#q>+G*yeR21rTF;fg z1Wzq01QH!v6!HSI!e+p%UT=(O={tc-|K5Qu~kAPY-MA%&n2 z;HG1gN|?b&hli0!N`%xCnFu2Spdgf>9EmW-L;_`OiOa-3u_v}f7|DEc+&V67FVFs~ z&dYxP*ZcYVyM5}@wPvpU$Fx@qCY~#IF098pjyI)A-Mqb0bVi{Vx28TivP7eVf++^% zAOHdoAp-&spbU@*z*1sh69l3Vq%t5t8g=ZH85}k`Ag)=;kBX6gj`kWTM)@-8)3)(=>QHUzjX3+4!Bv*i;^a0V7}6AA$zZ@Cgdl|t z3>AXWWNB)P4o^tg0VD)qCoMo&GK?Vvz`)x;5I74;g%JWFAtbiI2G^8`6eC3lB@Gc6 zpmb!zFs^Z6)X*dmgiH|)@2?z0#PCZLM-aOL*WwJm*F8>KJ&QTbtj@wu-`s!pxPN=e z-+WF#et9l=GN=0O+64t$<0Q#-2z%})9`0&dww)S5S{b2CV8tpJAp}@bfB=Hp)<^@S zC8fmz8i8uT2qgiql%#+NDJhUL6Hx>vKpbXD0qKGlx69TNje8zna(vi45~N&Q_AY(XI#&``+8SiDn7Rl3NyBUkNxc+kW9MDF&6-k3Y6idFo|Lr6nAr*-LQWlKWC z0@TO`3nuPHLJ|OItt=Tqgb9FHX1JFQ+h{r}nGgpVrGQB+lx=voiP~*xdZMWTLIyM^ zYKlQqKte1>AnKZ_W6ScjD%t7W!gI3iF7};y$M@t~85g5=sCQ^Wlh6bPvH%JZ5>N&# z5)nyM08Lng3Mc{rGFmeTD9L~lA_ft%D3Oq2nsOA#FhRF8N*pC}Ui2~{qdjI< z;On?=8rC`UrswM}dvn))d7pQ$>(A~#clXl|7yefdfBv8T|IZ0`iO$=Lyl%T=a@1(-WPuR3LLpeHTLD002o?&c6|gW! z$cBbvz#H)eiQII!2dZK)H$0x!I@#46OKBd(`Sm&Li!{3B>UZah@8+g5L7bRzS__y5 zS04S#SrBi}?zR8yw=e(g%lYxCM3P_*=mZMTkSSD31_?xfAyGKGGNOh}=~c6ok?uX4 zYayB#Yq4y^u*b}HQEuuoA*;N*%X`b-#Uqyj}yB?D;)5H_JbZEhDsb9)GoTF3|pJ!5p>8BwE)Qo z3?T>tWXy}eQh+qX6cZ2%!jzDOw2fFwQp{pVdW9Zn3;;AO6mqe#je-;o%V@mF4lNl<3KDV>4$2s45Lh~N7yyDYY=l&> znIxo>&MXsXgg{e65Mfvtgag+B$9Qx`rBxP+M8&K^H50J+VdtwKetrDcfBvC+O0oEB zhW|eIJ41$b$(t+Co-gib-WGmX=8yjLm|uV8?;m=W&pGd+4s(iX$AW+SflCM%RFft2Bfh6tbw0%X@W86dE(C=$QCrav9N z-ffWQX|grdGj5e1y>SYv7Uh`7I<`PELPb$lxk_P~3Tve*@QOzO6af&L2uva*0~kP4 zgv}x{5u+)Y2~Z3XAkBmj0!uT>h85xv0ujDfx~Y(Ij9k*ddfAF?;)n^6jge}h!xmd3 z8#Y7NRdbY#Ly)PMOnR$_6V!D|{aJX8(x&%{>qD$JhO{ z-}5hAKK}jJ&wuja&wu&byjNbluQ{W6>3)kgNH8Lim!0gDY3PW9Dtah2upomG6UQ7^ zC%F`r@)STA=#tPYLjWNaA^M& zSxMlVr^09w5gIMYE;5|-7Rqd*3<(U}@zK7?7t{Bytmr|0SWzhA9gfuBF!-~VDhFZsHq z7{AKl1I5r>|Wk3UQ;WGgYvi>ih}7(E3yon^J-qcQrq_=KQ$cq%HS~h6s3{k3vrV`fj z5eNYk-p~>fibT>t=|)6Y9l`~H1pynAE=f$KprFehc*3HW&VW&FyAu^$-t}bPGSRFC7zdP6;9!M3fX=EiY9q%Ptol&jOyCJ+ zx@a~i(0v;rD<-8iGdbfHA1bnoV-O^HKPl<5R6;`R+<%mu`4oyN!xP<3G z1=)2-2@SOdfK*0;5E=|Li!EC+fgnOkBn*{-1Vn&=pUEHM-*NpN73*y{PaIKhT^bo) z!mY>?#HUfi0BLVS)nQa>63)sT?3!gRh*}10d+J?Lbfpw2r45?or?2=I{>?vLFYc%M z{Qc!V>wG!pfAjzSZ~yu~b-wd^^1t_$-}m|R%Y3@J0`va$cmLcT+`GKEFLgjp{qb%d z$NowF2QT(N`P29B-uw03e}4EMe&Y8(KYzHr_v;@YFW>w5anD_}(ojp&DUwJB(;hI9 z#D-60k|ifFVmdN;vaoA5xmMoBnQ@RAcA-wC>$y(nc^*f)Vj39M0t1u)HY_lZbm3sa z2D1RP(S?GT5F_2T@kP3b!-i{o2Z;TtH@{QX?mrw(iU=!kBUp<;RoDhyhHDp&vFUWW z`F?df=+j@34H~dM^+YqL>L8DvXkw7pP>~wj4?J&}yL)dxde}#2cwU)rlvmBBWy%&Q z3^Tb#xwq6gVh*adpUF)JNA+}u_Bnp)Z7)U^^SkM>!Q7tKGU<5i1 z0GXm2Ogl(H&|HJ{Oy1(sg%ie^Ngd@O8XkBAk|Gs!8kCGmv>Fj)Zl{@f3R6J}Rzc-d z!I{&!EUMAs2*@thI5 zh;3se=Jq*o7_o%Yp37ADIOZLClQx`oO>i_vcJ?$DdZTZ!&( z1JGfaae>M-qc;btK;;rn-9;1cI-lTT@>Q?ARo)@5*@w>$G;f$M2nl$rJ{YnRHN!Pp(RWj5GPnz93}+QVCB*BUi7AMpUZB9aE87H#V&L=E7%2<>msz z0Ok7V!`rQad2)SVLP$b{L?$H@HXTB!j*ycfui<65$&1+c@={H@N0(l%@AJ#;7gmm<`8rYRF?A+d zvmT;ka4C^ck3%d$8LGHKyH(a{0SgL%N=N+ppTB?gqWAdWpFN*Ve(w8Q`MLeB`yKfi z`McXUfBQfGa{uk~&0|g)Qn86ZTmc0csMUpgn;d38y?*}vgKBito=)Apaj|db^EmOR z$Uojc|J)z@-#+kvTl^0`e9ebfZqrUSDHTe3gfr4;hXl3977A1rUGKK7WM;bwy*nJ) zLm4{qIQH@9&9^&W=F5A#_UdmEO3+Lrk}w=13<1K48d3LX z-H5*q{Hf-|u7Y&yOF>AO5>>{r2{9hRZ&% zP(m;;)okor`bZyC1#%Bhx@up^+vY@Tl!Zfbx=ml~=EN>nrK6QvPyt0s=tR>(icr1dZYRf(#t>!V`Nb*|&hl@TqLnaYh?wRxWM zTa(H-#cRdX13kznF-IR7)X%TimA%~iV&Be8TT5Fjb`IrjA|yb&LL)>oY%-eie#SIL zTbB(RyHEh;ltj%T_h1Q4=5{W5=B#S9;1hb)u2)2L*>j7UKoW@l1 z8~*X9$M18%bo2SRp59Ndwe_PoBM~x!OhRru(3Djdml0{xT2ZD{mKzlvEw^0_Nc!Vn z`1gMPORs+Vi`&{s`@PxHIqfAH~@AJ0@6a;V|(6Ofks zp<@eRr=8#v9k*^9q9bd^4|G=(zek7FO8}ekCCg9Q{NTklA^PpOK^_SKiCR@H=@!;_ zFL0{tqW92<-c5FMp3MU<-q!8;1gyXM-ESYB-~!87E)>xve*f{yAB_3u^y4c(zU=SM z!>7C+`@Yx9uh#pwb^mhp^ZfW<-{(8eg+1*_F7@nQo-5ECo;$8p3SQ_1H+F~ZR5FLy z-wD6W55ia-3G* zBTqNInXm+K=Qxo>X8n?FuT_lNbne-@lvS-;mnp}#MvvHxtk@77s?1VSr6`n?93>_$U~*>o=l>?&5AR=|-rr_E zKAhKQyB+qlmSuCC+>JoB(FeT+HO03-bz9ODNX1ZQE2T)l#r^OLt%yioQ7a(yr9Y=ePgv z8Q)!S>&uC6XCsL*fp89IJ;DSVt%&Vzi{u!Z5wX-l#uFCr`RB41^%Lxu ziW-)Q1TCZzT?Z?SjniJ}a7(I3gsa)tz1zqA<=5xU!g8z@O?0vbn5tTldLzT0=w z#ccwk4xC~pN()2Vz*j3`lM0l}^WyQ)6F!O!mJ%BD<0r)mev zrd`>*luw`Exuhh<<#p@AJE#xlK)6}Y^;n*6VI?-Fajgt#=^}H1$-OsS!F_Dgl*s*QeKvF&vJ|1jG-L{jKQJMi9OPlq=ku)sKVAf%huQi!U!Rduna+sfRLo1hys8_ zU;uH`EP}fnMvO_64r3$;BRwKE^9=FB^^bp1|DV|RfA?4U*#6}8^m=aZ**?UhCO9F6 zLlU^|L?yyqhoS>vSU0Zj7m_M@+17LyClZ6tFQ4DAi`F`ouX!HRMY$Z_HHE6G+aFC`TP|x-_B3@lKuQKKmYpr<@d+=+}B_}^z*K? z?=QWdWjNn$~U@F5JuF@gw*x|XU@#hOXCk6 z@BH!G^>gVQ zj;&gqecV@LEtJKHkw{23=h2WYLJ~LA%FTPcBZg%dMm8 z4;NvoWE5H`5Tp+rVardZkMCcj(XGK)9XHc`t7>?{FCD^m4EqnKm4n|T>iS&cpaYdU6z>gArVlP zG0aFv3pL%eX}K_piK2=Y*y)^iGOuUe;@lH1oEatt&(l2CsoU<_vu`Jbs|0y05YBbd zFnL}!Rn)>k4R}`|FUu1L(ynobpd4=Wa_du$E0)#JEzYUNqeIk;!u7nJUVHFu`SSaJ zQ{R97)7LNW-SRK~yZ*Ib{agO!ub2Jz|3BP+`Ir7vg&RS9kl{^ZLVndqZDO_E#LMt#Kv4fB2MvLdF=2 zDg%qa9?OU*8!-$@6CpsdfLPLk1)_iwP(T@6Nf+4f<+jwTykO3^tEK`57+D(Ad}Whq zG&~wnaTeSeH!(lT`S-{Cq#JIY4i_dN6bCHv#(|}=c3Ze(nVkDn$fm$T{`tS^aSAcO(z$<=Ke0f$NFdUIzRU- z7j-2_mp8&iDkZH2nzJ}G}p(Tr8LiOp!uA%W3iiF65uj9?QJi3m+uQc#!?*n|{GX`quj)ST3kG6KX> zmJ4+TAOzmAdHoDufBW?77r)Na%lq{Dxjy}H|9m{pf4FA)UmW${w@l!RP9e%YWJ1`_|mPC%gaJUwB{6Z~qnM9sU*Xroe@oK!pVXni_f7$uU4!o7ZtL$Bp;bAMfA& z_4}{>DgSK#r_Dc~Pg7sr>w4U8_Qs}787APtc{#@|2J~P~##*zA774F%c#h-Q705xb zn6-F1hpjX=xFvv^GTmiQ_vtNkx|JPg+B%hKq~2u%ScW4r+@&3TJk0FV_qji?p?-$O-&7~|c;sF-A*ri=%k>k#}EM?uSn?;YQ+3bv5x)1fY`T4ueFV8ve zU;qB)IiJR-Gwai(do80bCYdpJ;biH(Ww$vWx=~?y%8?@vV)MWWxg4_VPkPMAqqujs z$9!fEIh&`?H^093Yx@(!GShRmvQKw*37NcS9y8D?k=OV6VdfmsBGgiAS8U0S zsyI>=SWq^^Vr_*I5gV&OBsLm1#^5COs+TXygwj#UPFvduapUU)d+*)V?wPggJYeMQ zoCRG(v}@~NhoE8utChbfu)Cl1`}p*}WPKhV=l4~f*E4(j=8yO53_)C7ieeU}9Rep3WUe#m2m;TH3ae2=7{Qk*j^%;+P|Kxu4mJLfbfvjXn%7TVA zGOfG3=z{8qIXxbr6PerO(6aByuo$|w`+5pKd&@uj_5IahZtsI1e}C$KHNM<)77SR; zl2dGDJ??Z1`}jqkje_I-$Nyqy?Vr~^zwUE) zFYnxb!y_?+)o+wS;wdkD(M#UV;SzeMcJSB^dQRh$ypSinwgU4wfxT1ow0(k`pq7=C zxaYj#J{DYJ97p$g*dLGm&HQ-W?l2$w$?kvthj0Gl z|Jz?YbFy%c^66DVd%c_I=9y>v%hT`X>lZMyC-1L6{wC?K+`0eJdS`#?{qvdo-fvH;^Xt$1 zD}6iQFw)sxZEu}nlL&H>BuLOG&|*!fR-;-wfMeQn|K6uwtY2o{UNaB{a-A$^(TwLh zr@~W~*NdfibAvil5@(mLh!#LvkZ48E=r9=o43VKqbd>;zywZEyect!S^SQtB2EX(5 z>O1CX0LEGxSs2Jb9FSlvVThy`e{0>K*kEsATetcKE_=iuxB1+s6LlE|BHY4!{cA> zYrOqa*N^}F)IXgwcy8|B^L*t{4g2DJFJJRHx9k?S6KMoX26{Gzg7sHE=%ia&YZOh29wcCqgq^+Fr|=_Z z+O|8pQ(LDh%}Nf*1D_7x&q#*fl@Z`(OTe|Eo{)@wr}U*l$1C=dH2pSSPul$1jr66AW^B+CIPDJh5R zK_ASgeSXUI*z3{Td#m?JKE3aT&%*ARxp#lwj-HD?cW<2U;U(+oTfZJGXofYF7OH8p zLdOP>v*|S3YvN4AwFF_@-mYVdGgY?i(?#-zSCXT;X@C#ycMf`_D*_!tt;qFYm!)=g zvn|pAWMaaqFgTcABr#Om2?cYi%XA0K({WudzvlVfo*(Y4%#-&PwpnePZJ5r%R)`~3 ziO6XkB3EVbcDU2Uo8q+fh;#RL-LSk{d*gFj^~?S~zua-|-k$HhPUrWl6#A{-SMQ+J zPVcB|kNwGGzc1Hb^~gJ(#=Sw6iUab)vt*YrEjA1kl@ z+&A|+K6{?*RcCV}`_L;>3%0>5*^E|0k@WFmrn>t*>vPGO{UPr1{NVZc+^@&=oOC$x zELl>Z$GLekKYc#b~z%t{W5d}i#mqDOKIr}y&IWu`0%5$qjqKG6$`kecdJhPYd znJ$1>mR1rqV0J4IMOHl3L9;oTN1v%fULGj0rU;l&O^Z4SCnhs z=^o8GG!)a^i(RO6^HhT&XVx|XrUZ?u6N~^mfYo7lzn$zQUpwdQoGK_KiUA5QyzGLd zi%Gi3np)x}a*f7?fFwmFR5P@ofDwD6tFbt70FC9x9rp3Y?k#f}N7zL*V8EKSQ`zJu z5eM=Lw6=DiBiZWR=l53i?qh!5jrI80?}GU{4G;KT_$FV|GyI8t+*{i(zV7?$`=$^6 zoY+?)Uh~c8^pM9as*qMSZQ6L;8jaoH3uijL>}Of{Q&+M~NDQ-#x9O_a4)T8%Js~Z!|d(XEb43T@GE@vd>XIu`BMAy%_-e{g$-sM z8MfTdoDX#C-pE$_*sX*x_B!Qy^!syoD$v7yyc$oK?$<}vv*qK^A3g6;V9vYz@CnuC zHDBN7+&6)H#RlmSvkv)G$c8&EX~=7K?%vtg`Z=@vWAA(U?)=ya_`xp88soV4#=9p* zO=j0Q0-F-Txg2w{$#fy`9D3HAz5)9fU->wh$IOx2pRQT;(I=MA`~&X2cb=Ot%cS(A zOK!B2?&s@I++Ucxr=N3v7qW!c*dFHovQ{9OY|q^8vXwn-?$2d+=627KKE~V#x9uX|r#xz2dF?|$E@b$$Q#Gx-Jc2k##~#Ib$7UvCc>^X_<6`u2RS3aYD5*7PBd z!)aR3#g!f2i|f!a?7A`Ec0aMp`J3i5rvqArNxtd(lerssfG3{IdA3d4Zk9L_fTC(j zfUF(jb}dD50vLAM(Gnx+^oyf8>XjVl@Sf3a>*(h^ht4`IdowmKrOL)eulnxe&fetS z@hY8fU2mV?PhNid^5=Z^vOmmse&g%%>&tKH>-6O?5BKl~@BLwX{nq2$Z{nBh@<%!H zrDdJn+~@nF78@S9a`WAQzRTxr+|J&-e(LjEKiu`{^}cRtX_BzW1xrxl?9g31nk={?y|)hR)xAQS2B|xodz8AioaDq_%F4XTZ+_wXLq9t2H`hNuiE-9oVDC#` zAJ@+D`&WHWm7d=5XPUcz-}`=k_2s`jYtQPl-o~D{!`W`6dyKSpZ+naT!p`ut39hl`Q!CnXLPGiyQLUS9O;j5#ZT)of|I-hbz3kW_hEA8= zHD--uyD#~K)wuUt|GBfh?KSsyI@il@IUinJAIE)7=Qz{yd_TM|F#srq8;=SBsG$-~ zo88!L`dn_s3RuAj{93)S9aK5k1+V?TzK`Idgyb;_HC{Q z8@@c~C@^gMVgZo^L|9T1(5TW1bNcdPKWy%32UMMGk0SSa>wBa3?Qj7`cJDGpIpy3#EG=;*FN~>*;qKk}ZnRl-)xkS?=lpi| z%{?>w9p2$R{f<{B->ZLKWn4p<+lC8V&TuYsvKeE;3X2r0=T=DF#`{#XU@mE6W4(Sp z-(xSgZQ1+?w!8y#a?ME zH@hxIjusWf;fjetS%nSCGcB}Zhe&V-+AXzuoJ0e!ZK&e4hB;wmtGaFS+rO8+V!MXq-0;`#fx2Vlg?$9y{ROJR*z^Q#nJ`RIsm+tRs_3_WEWI9hZozI?l*YO zz3pPVw&!x{V$SBQZ;mVTIFRGMA9>s*WA9`XB3pcDw(`38>Rvf_buZ4*jO=8m=az1I z%Wf-mNz++Pk_c!xTi|^ppm(^~b%}Iams#JJh+ebYFQ5IzADp+d&*f`*0r=b7H|G<+ z{CGZI{oyU2U#_otzuo7A{vz*Rlz(Ub_4nfq=@s_DJi^(ybNX<;Jh}aieOzsq$EVlI z$h6ern&RF8HO#{pp15~-#?+Ph@b=cPmt}13+ez!4;c`*G*6%zw-{1NDd2RQ3?rYy~ zJl|jM*K7LVYd?D{HCGVwZdO@v++6F~T&H}kvrR^vX0!u}%tan30ZkH6^)Vs6O#Ffc z_p)ba8Df#SU!JFSN4v3G*s$D#bk0m-gn0E@X4kH?_PeFcyPt2MZ|SRf-QO$B>^%RR z{+8c5yZFdOf17u4`~EC;jX&zO-_o7$h2Nt*P8VAiRK9K4;%c#~RfgPj%var>pIp|* zJ@32xqfp%WbG$#@?Vs@SkAB;~|H8k0aPY5dyTZrbkDs8vAM+RcT0HM^z15!U-gv%0 zUq0yht*;Mazs4&F_SkXR-6799_mR$PaP96=n_fNZJ;|hFv`jm78GhviDWL7^e z`|-3E%K`ySL zeCKqY+W?!fJf2PVv33G{NlZVQMcik;KIeS+oSS`BJhhb=;INcoo1L%s{lx}& z13FT#EmgO%;qi*oT*PitU+>fRTkiY4`~Cc|JNcSF zKYhrzpY!dh)8(SQc;1|Q<8ok&3FFk-@g|Dp(H!M4Bvr% zeLml>cjEW6tmh}?9#?xUo|(H}zRAb2L4H@f_JMxB{$h+UI!HB z@$nHmul@e{bK1{8ykEP&w%>3u*Q1$KY19}1PyzxfrfvZ9kXA0cj%!}VtH-N@kFU)A zac>0@BS?qtPO5x+-U?9Gqt}FCONn9!z`zBCwK6!MW>1IGYSRvP&C1T(awBA2>0x#i z827NdDq9tTsJaPkAx27c7tkU|n<2~Cjw!2U=wh^Uj%Vt@M4k;M@tm#gDTO3!NcBul zWt}n##vPsr-Ojmxl+e%i-G-&e;}c&W_wA#f&O#n;yIR@S;XDFm-L{Dg+X_XKfR!bT zQBrZtPAaYFU1etP*O-b@Nf~$1awei~4eTftw+6M+lU?D39oaFg@$$~Nv}wj@?b$mk*m3#X&-)cC zOjOVm0TtfdK5lcGI@rS9sG4hh_O5Dj3kWI=s#QF#Rr`r^Z{>!SZ?hc|cBD^`tM`Hz zX?m(b~G-tM2uTfoKtB@3n|jJ)zf0R!K71Kx0OS+ z&>0-}brU0%LBQ<}iolm(YbEpuWOZz99SCw-qJV-R)sqbj-~l}{3YgIkqVVy#1`(6W zkTqciuHyp%HG(c=DO$mD2I$?(Npd$ zN>@}NJ=rA(>$baS$e>37OvoaMW!YWs%JNVaZBOVPGRa|^vR|W)$?A1K-FmhNYtPNC zsexrRUWLGAuz2uw*p|oB!eb6APRN5kYIb-@D@v-!s?wHCBI)Z1L`4=X(kz8^DpBGKUUxOX;RaRpj()CuS=}qNSy-1IB2xPdB;39u%N)a0G}U zpgw}P&?X3AkQlTwG8)4!r$7xAoBDXDAB9>tGYpkVp=nkCE()S-l?E!f#Aao4;X>th z2@7J{wgy{(fwU(R14!*|tTY1DCq` zU>xtpbhti?OZ3cwwsLy5l^`Kql$&sy_OvVjr3Ngx5ZFWj4uz%1q~WX*B{0lmuLnIb zwVsw{OEC|zD;;HL8eG&W%>-*JFqO(E8%0-QSg2A$mr^YwO5MVa!r-mU2qhCS*m&~9 zos^HmRvg*cot~M+)wY`1zK}}fyv==e`@XmL{P2ARmHEgI&%Tq;B0u4#s$L;_+V3$wDC_C+});Q3QIp1pXcs!&8h^8a4< z|G%G~TYu`Tak|hk@4{2h*)tkDo#mX))^yj61{EzjxfgLvje;wSCaA{&%_17M;Vnt; zb*RVHn{i9ViwmZjeDy+OP2vh_yCq6FAnY9|XJorY7ZkIDjXMn+CT)@hQ4O0yHi5Co z!s#C7UVX3YvGN@`wy?G>C3M21QD@kk8mh6-aiHc^d-xGURENIT67++dN@79p6lbQY-69K=zunx?QcZJ;=ll!cPg z1aidki0Cxhz!SR`36kl|nvRpH6X+EM+D0M;mnJ|grDcM4T0sdaQ!JnX1=*-{rUZ+^ zGaA&QVM{`!OFD!_ba}44yMXn?Xn06!vUBIQJ|)FfX0i01exk!s3XREfJ z*~vQ2VfGf+a*bH0=Ax=5tF1D%#`Y7l+7gUWvB7O1=`FEpB{Au;Mx&S~d+Ze-ej9IK z1avi*D@{#>W>PpiVPyhCL9b{e7znlxz@ z0h6V*Oaz(OC`+PNV<$m?vK{GdyU}SqY{hUx@V&s)JwH7B?mF9smLTRE8VE<5p;t?U zQm~lQiQ_0qen0Qc%u|YnVpX#O9<0Dw6{aX9RW0^AiYgaPRRyE5ya5jM5a+xSY=(HnW~Fwf!iLq z1_Y)9BC4>UP;;w=s;fYx%@VCrI@!SPP-vt(Rw9X=d6P=Ct+Zf;1E(*sYMlp!{? zajh$-A}vu93{qe%RqbPW$`{{CF0Sr{dWQr#rf%C-$GDNYn!9xlQYgIWNlXiOQYbJC z1KdGMD>}ToXwxJbQn##S535&VObQfAK@lipB|tU9z1A3WW?Q9-*={qm^j)Qxq*czYgU&j{DjhmAZ?IRUs$9732Ka zWj03J3eam=30jFEY@%#d+AL8HAuHE$8a9Pet7sTWCCxb;RImw&FbW&yJ`hw{GL2fI zVhT!1HUSHPRXMa^u}h3LS_Rc~&Dv7Hr9Orw2Zj(H&bW&`nR+&WU1?_}Y!pMaS6etN zQYZjaEhGfHYz#wywVtFcPiW02ze}ysI*9fu4-Z7gnff~BaEuh zR+ugoQl(UsN>X@9x>{-(dV@OMN)bu9ZX>Q&^4>j2o6DQp9?@1%o(dE|;jXf*yH$ss zJV-`Q5%$MoK*V45so4Mwm+rA-Hy z2o@HKZhQ@i7x-FuVnY(Q&=cl@?S?E_>8=V0Y&4S!qiJZ^N!vIywlpeI+DY0)gsPZR ze3q$^7P4_F#S9UQ8LeURvLvON?<`1vJgnwl`dA646FhwhA07SMQJ0%t~#KhhHyj)ECPWLK)_a} zl`T`6wj-+yLGN?`5Y>gc8h1!Xru%UTCm8g})hPHV|mrAg48U(V}*(eM6 z1a01xAKBBsqX4*Jq3pp%jU0rOC=nS@a1oGYhmY`}7a5iSP}C8zbAI81kroTuDT1KU zMD>uis6}RS7S-xpYs3OYjVK0lz>123iIJ#8K*AVpA*(4qe3czBt zxFDspLP5kVdqU zgH9q0SfN;=1f^)A$O_oN+N$?%KFXG68gVvzxG zqa&ecLL`An6_92g{V-A)rGvxhXEU^cg3eSRq)=rOQl*TtKn2c5C7{w0sh~tnqiPzU zRE5Q4%&sscbE5(H{B8pwul zA&?RXPN^&`umI5zBLgZ@wISF_WEG(T3#pVV1g(^os@-sfG+bq|0#zuWN?34(kP0kT z0tEnspg@5j1X@P|t~R!^)B_k=SOc`6+POrc&|p?WBo!N`0G$#hv-8Qi3 z*b5k)xMWs-BbPk@;UXYl*djsSU}5A9fkw%N2P-fhRe@CsVM&L9l+qqp@}fXA=orO8 z$wCo~fLh~>QPf1V2%^#CY0HRUAy6f%+EIWaj#U&@W5LX@FcFE=J|SEbBMJhEMQTui zb_)^J0+lkLW#|HwLK#Ulph_Y^DkA}u5UYR&3Z+;8rVId3T8a&_C=j<$i-ExcD2fPy zz*Gyhm?}U3kPHMI7Xe~~1VYjXAPA}gW`bZy02P422!tpEK&4ozAVkZv0xR%23X0Pn z32F%fv=SGg(^NogIkI4vAt;bQkhK6aBo#3f6b3a0e31zY0B@LBxL}I_LJbHac8TaAL}{He3MrHVO9}}JU>yP>XccTFjmQcBq!0qc zU`u0`2+Cl!qD6`b(gF(rWgs-dC{REIfCxYXv?K?@6Qq)OPy&%WWbhb3VHf}ph#a&~ zV0VohGR*9hzK|sse07@Doim50a2UJ)Qg98D^ zVq!$FWjD|Of&c&|fPk_BP(W##Y1I&b5(2aYgTab|rlugNAeLGTW{nNDLXdX5X^j#| z3S((d#fnf=U|C6sw5$>q0SS>#6(W&Jf+|V{0tiug4Qf291g%uCaTrpPlS~Q_5};!W z2_*@Wk-IRlr57aym)!OfI{E?v63l`E$&jJOA#h8d_)a1wE=!CkX%ZARaMhs%3`Ukp zkOPuM0Xw-6k{|&i0wAJF6wj0l#1U0dK@5#U6A=kS4u_$mgQQUcB#fvhwIb38AQAu- zQaR+Pk!}Jh1S$(F6AM&A3IQsGlC8o3$W{=c^e6z8wxz%-Wzq`-Krv7(?uMm846s53 z6re4IR%(PxK!K^K5CBL{3iERY{iz*Pn0<@r&aZVsBJsLn@i4YcB0Rcck)4&RfC<<2u(1I!p z1llsC4FsiNMS`gb0$Ku;O=n4Lnkt~nLShSLfe;!{SWt|lR1;ejTC<=ukn~Lq4yr9C z*+x?aAgO>FX-&ZnQGhO8gE6A0jG!cfps0j|R)tDbOA!zQBvKhJg;Xkm3<{NKMMD~p zNx%wGfh7$CH<%caL;$P=v+xkmWNt*%hFpRj@dXOrWM37t`+WJy(xByvcg zPzWY%7!eYq+J=HQk}86V!IT1kq}#{{rCUg$TgW6T04l^1;Fhw&>XHpw0))&SkqrY1 zN}<{n2(5OdL|7|XMoy^6uZ%B*G*Wd3ye7tT$vKk2C<+O=#FB3w9PBOZ;jFxxwbyp?*P!ewMB5*k2c z6&s}+0!rT`1o99F7I9D zB!*$;;i0&gz^bY&!9{E4wDXW6Oll{FNt^|XR1;f*5(vX^MVlG4B}zuiiAL(KOqjmn z13;UF7F3ybJBSU^)Da*Fm5GsCG=yAEA!L&hzwAR+el4COqCQTBDx`6VU;+z z7%~Nm06|NknpH}4s$EQIi4;CkL>L^#e21+J3PS*3a^i|~43Y&Wf<ikfnR5=a$Lfuw9j8O;VUT7XJPr9{v`q%5ek5CSNQ zhyhfQEeZ{*TLu(?rvO$6t1J)*f>~A+2B<4g7Jx!ygatv$4raMRY;1`}SXu6PDxfWD zY7it9BHg5>1PN)UuC@^fAeeeB6rcnObekBAvPOiWtRzfP%RyTx5CMpl4VD5RDkBXP z4udU)h5!Ja>J21A8g(6oDkOoXBV|oayCrIjV(nPu4#0wr6ZTE%lthRM%i>&g%Ewj( z#JPk3Fb*gY8Z=829BCsp#9ml2VZ+cy1gO*yBt!(wGQ{CUkXE}wP+6#;rFs!&0{7HK zEe*10Le&n!h%}-WNwfhNCQ+rv-QoUdXRUr_qT%a@o0+iWA2C{`znkXp+r~qhc zLpM>Dx!6HUg94?21u9mXV$@L1quM*$OewQ^7JJrNCXh9!1w(iDx{L40h@$vh=l-} zXo@0BH4StciY^t%mH}1WD3k^vDNz7~D^*1b;A)gBWLA|(;RS*swG~2HV1>3MPTu>rwajs4tg@dxfPIN$SqeV#dNOP>6i=ly0OfHYBFmt zk#@9g)LDvwV!(-71=gw%NUdeUmLU!W4Hb=!xPVx&6Ig-kRB0#?)(By$E6HGO5~6_; zAiz*ADVvVi9bxqlB1INRG|etNO$J3Zml@QgD2nJ8`i&;JY+}K}F|xDRa$+knZxS*9 zvkEpSte}i2Av~;wtT6A5>r+Dp{qJ+CgY3T!mmPX^j>VjhfQMz|2xL zriMvHf-sUuWe^%G31X-uSdA#9s{;_o01K*s6;Y9v21-f+rJ)5?q*_6s01714Q%WNg zEK$;hSrrBgwiGH{R4Bn7q17CsvQiXq;J{*}iz+9+big1oVC7@X(^0SI7K7L_dvRm83sh*(#qVbo=XRfMpmV^)Awgn4l<3V?f*0a#peVs7$8 zbf-AtVV4{lWWY-sM_Mvn;jJCyWQJU?U2M8YEu=AtOLz9PdCfi?iiVy$Ja4xUA1_S$ zs*j|dMoqz;RS-z189}HDk;qcUuphmZmhpCsswNl4%R860Ip9 zts>D86b!CQg${EP*dUt)9LWU`R_;LxXc3}V$pK{m=`BxTkh0oCLTwMX8pr~ufLU@D z1&v3hpx+*67<1`io2jHrqCtR(AdD)Rcl8+>c3eRO5J*c#$dIy{V6al5fVKi>3$!UL zDnbI6R8U710#?%KM+dcGsjT2jFp#F%yD3vKEEZ9LDqL0og_U5Ga2F)9-2@dy5CTQz zG$(=@WVI0`1rpgtMZl_nR%$|)!U`}!YJ#jPwS|pys}jJtT7}NgBUMmVC~Bu8U`cv= z-JDTVSnQqvyUBFz)oBbZ0Cj9LwW5-6U1fmXVs34myyHEE)>R z0F{jB&hgwcvt1pwrgw*XId^i|YvP8!YiGo!1RFxI#8x}WGV&(A%j3jD?o#Q}1VFo; zc?CKCh=|zEt4BIdZA%&RGkjxU4OkvO#jg(8< z!UaeSDky9*EolqMi5fH8bCjle+*5W!^7XzPwUkAqfGGUNl!$xlvRlWks4g2QB~%76 zJ(7os*nkL7qo@>=LP~>_z{p%`v({xgw2)+A!62(1G)R$#SilkEh%OOgiV&2u>}40= z7FJU*&QW7a3!%6+WekF)g9K%uDgqD?1OOHcE(jzWuu*7$ho1;OQ?z&z9uQItc?6TP z?#LC`C%X!$Fol3^Xi|c}D&!)T7*@dIHY2-pWVIXJ0A<;$DNDG4La`v+)r!EDN&o>w z4k}RqDnOA01WQ~EwzhWRxq}tq+#09G|PsH6bND;p4v(7 zEO2yiElo7E#n48eDYF)#b6vFAOkf*5>C|8(nkAju?qwn*mIkp!oarc`C=9FvVXG1g zi{%7eHie}oMJ2orEpn#S1$dPp8a8a}w3}(TR4~8>$pE*tEm&o`MG%-!0j&g$ras$>R!_4vGaKMSyI%Q1MXmjHL)h++-=Ucw>Uc6%JjELX@2_ zfGM210l056l7X)T(v7N^>vmJ&I(Q-vf2{Ej7MdJY3I2#*W zJrHcm3Rf7|F^}6B_sfpEFaZ;JiRxLiXvQR6C$X#}AK<%7E07v6JAB~VocO(bNZ4Gq zVwv6xGpq&0<#y;Tne%25CfYR+4VjWH*47{$7>T+ntVL0Hn~s&-O6R_zyZ5rx9Cd%? zVpsme-SQpx)%jU$STByX$V!(Mg4=1WBWbyncms2C-=D5naCMgnC{k-9 zL_O%$Sr8DjWI8W>(5HNCS!^6xx}w=FG4RY=HUl!vISNPMGV_KJLV7}j^yi=-5VKq!g!&e>qv#+E{DcA;Ft4T+V(igvifaB(9Vl@v&q z2$e7uu;blOv8<7x!h5K|yoQk>E8tC7p(APz?ur#pSoJ0kWLX2*#g@|+G@S-u17kyj zd8t9-2x9^t_B!!8U{Xfv@%hm^CezLBR=6UMdiR!zUK>-Eopg5=O*F;nb_P$&thrh5 z6JyFPxq3B9(;W%7b8_8I+)Q$Xo38Dgw%|HtHw&h+%+~4ZxYRJ#LfYVk!>>mV@jj$h zdLf!AYu90mZftDFaBVfrbun}=dUF=-qD=VO{5kn`^~TrC(|idQP-N`qxz9X!C85Mj zh^%cLxs_mZ#Vvh*tk}*#xcbIv-ZDfIP9}-p;#Hcw(nvSLKx9l`K)pQxUnF&`CJDqxwpx-W4CmldQMv*71WBEco`aHWrLn{ zst$4*(J}zR;JR3$bO4dCn1UrrAn;&CXv5i{RsdX~DJ+Z=dt?oOq6Vl@F43kDfVQJ9 zZ_q{xgTrM{EMO~PFL_41s00`VVhb_|^JF^n1j`drZHaea$TM0g6CVbW-HAo4h_z@gsBfONx>_k(J%{uRcO%(!j7_ZIRqDZ zWR!&^bniPAoLQ<-M*Hf>kSRx|8fCewNR6i)UZ|1TtSqgf!=Ck>)ez8GqDfd$iIa5F z2TC|G31>|}mPC>Sf(V?cXkrqZVLd`|Cz73{1*M&>$MVQR%i(IXKma!F_ z?JokS0?)70C+oz?I_Wd(q~rCP>uZ92vR(snzOqhi&R1-powQ+0LFt*5w8mVDLq}nTo;tGtGc&B1b;E))m1R8mf}9u(4eQYnTgEn&cuGf&HqMy^ zIpT9n#0*TpCKsFJ%8`*X$w=lAWz3XMJ%uaq&-%5QH^_X(&L^dtVG<51@Mio0WxV=B5X@IHe zFw4|2p3*WzXe+=}mCxLvv%bKm^t#dCP~}ePs?lDzS4yMy^(WQ^%re2Lm=Kv9ONLWS zfLT{ia|ll+=}s#)tw+JC(w*WPG@=9j^OrdGab7Xm#?n`~1MtoWWJLpbo4x z%Mq~LUG|z(Wr%&ohvu@n83&#*y8f5|bc$BPoDpMf9jyct+nPh_q6R?=dXIMy8QE53 z79+(YgDEqx5b+TVHo_pl#&uL|NCIhkrH-Is6G0&kns=v5Qt*aRx z^i)F?&8$lR4g`fvAcnd=#lQj&2$h)}GvlgfqohdZ z=t2@F9o1nJCI}noNjaXyNQV~)M<(XR$Ih<6KkEm}4buq$T%AOzdpCx4?Eqq&WGB$Q z-Jw^=l}qI##!!CcHc|!#zo5Q>&#@qs#n^z8^|HAvj^=`M6pRWD zsI?^s)7QEA^lk+Q%f4=;MQX7%q8k|lrRplCSq<$f%EVcuer`>yZ4(MWL>bOt!jOk` z_zX`u-O#jBBHh-sLu`cxixbF&jI0XX)Z7k&$~GDy7OQX~3xMsRiW0OGg_s=ivNw_r z&Fnb&MVb>&^>U<-X`X|S)I6b7V=>bR88pl+g)TIt!ZALT;;0=g*sRz1eupOi1QQ&$503JI40?+2kUTd zWDSYs#TJYpgbw!P-NA*6fq*J3lF`PxBa#>)bWeLox|0ko&`vv$9fP?pMFv>~f|;5C zX9=FLkx;K(=Y%=C$k0I)r>-D0G9hZ}BarR-0)q=Q0aFZ(vW=X&cvhp@4I)kjaGKoE ziXoGI!n>jtQQ?Kb)1FMDRFUX~8cCxFh?PT8op%@^s3!LjDnPpJUXoi_4<921DAU(0i+a!%`x})0S z2GtdsD;;2C#Zg9~1I;UA7)07s&@t#JTMdCk2Qr5QEI?*psIkCgz#)WqqXQ;@tTQjv ztdC(nkV}kZ9>yq9(-i8kndD(;f$_}9Tu_+HfyC6w z9vK-mNYKg}AatTwXf+)oMwdt=?P6%;(87hnOrtYlkm>Dmib!edfp%K_? zDoA$AH|L8E9UwexrpJ*2$H)|wNz}r)OvlSAuHeMdI5NEwtqPJrlp-o9WI8pcf{q4_ zf_P|9P^9gU-zrwCcm!N^nwUmZuv=s>yOuVz!*;|CQXkP;ot^YaNjv@J7!8P3kI|AF z%D z#>9K5;fZZ(7zB+psxd6VRMw)RRp1aMQHIFK3ZLu55;U2?z?cgzDUoq_i6BFI)z(2cQE0d0{?p=yqA(wRu+!nS&f!xa-)kQL3BdZ3) z%cz@#j&iJx5rkSTOtK6vrK;IYq9~EzIIn9;+>%1zsHuWUlZ}%1vn4@-UT`Y|6uBW? zw?ofl=lTXJ!A2ceyk)#&6mN8gSejJA6!5$SO$Mh$oN-~qC6hAFJYS|xWy_Z=c+j^a$3@A33mtC$dayPc#U(B!< zU|DaI)knUu?)4aAFVZ2kXJD5(3#l!dv9#DCu-5Nf#-E5~>DZ_+M9`K*qvA=OjbFo8 z`C`uSnMh;aOaWk#U3Phqjb*q}hXgxU(%Nx_YdFR}6{w82k_z-wKMr@fraiBq0qO^x z#HnsI{D6T_VoArmZ?BThNQr7Cg5GjMCnvsSF!h%=L z0a4S+nJI=QYSd_*#&HBRjtmW2UV(r3<0WESHpO%+Eh8;a0xA|#&?{;pw*n~??5j2^ zq2-7~uQ2Cau!OigmB6Ux8y27ySfDjtpU636DNfblpk^T>cAZH?!I6ZJXPvnMVOYY5 za+X3LT5Mz#0NY_I=i&|uSy7Eskl0p9%_a#ZC7aOD^%l;qX+@;Rn^aPOaY`qxLrktL z2}m$Gt++P}II^>p9J(8ds}Rmn#m0?EaCd`rLxbVY&hc_zo99kla{&eoqSA3+psv%k zrG@KAbd{>At1G$^q($_=T2vX0MOZosZ7@q6q^ZsjrqW`VkjNKnyx<*Um3D;6#9Aux zxPrqP89Q9#70%evqmwHW16!ezlNLyToMn=^v<*NgHv$6enoT9`xiqqHgGd$%F%_P= zmxU5R5fw+&Mp;lYQ4#ENPO3p8*ru9NO+nep+Kg96tb6sE|sKp6HK8CIH(nCEbl@jXaUR>+|tYM$M-j9 zo-Ni(xgLBQd)Itp+qQH5?OcQ2v5aiJ_ibM8k-KB{hO;G7Zs0qTkv5szp!_QU6QGfy zL=hNz&`@$nd1M@2=!t)ND&-&uvh6ADth0*5@Q!v4zaN5>IQ2**3j3iTu|$RJ+QOtjaR*R2w4;a zlj{c7LJGVTmXU&rCnC!IsAdEUm)M|>0LIL^WF+I)qXvHP_+A{cy+i4R-co*xj}IS-Zhxot&vfg0STiSb31%cvU9RF|loZHA=BhQ_)8Glu*iQi$~qnk zRib-3ukSMyEzp+G$i(8NfN(Fm)TU13~u6M{EbxaoH|G3yTRqaw;uVO1l0j+wa} zISbXWy-eMzTsTS=$f`}z znvVp}FZsZ6es3&%Rd)sc!G1^<-GebLDG`M;WK0#)=)ewoOp>MCkdr05oi32i*)21QBvj_RYY--P1lKKsv$C=l$97Alu}9( zs)U$@+YYg$FlTH-?3zYju{IY@y*I`E($l`ZJ0iC)Y>Nz1S^_uLXoyj@gil6F$+L10YzdM zFVu)XL#sZur4;X(DuI;F*ZP!-01Q)Mt3Y8gg2x<#r(nJ5X#^R(FcBU2FsBEzwBNho1qDAF@SKpkKVz^p&WRK=rSZSz00$asc z!-ZJ|nFtm*grit?s!&-CR(3Umr9;ST*_#y0Vu|W)V_@B>LLvmB+@flnMV3aPDEZzA zlKJ*N@!6hcL;N~|yf)L9n?t`_>5NMsau@XIy|lBjH&lfX5STKfrFmT0jt$;y(o_=* zlHAiiB%oH&sNHd^%p-TE)fa0eD8RzBl>jRbQ9jHEb84oJ#XulUDwB~(QiP5c z=u(9>1E;k!%OKQf=AqWIX4BHd^hvvg(o$Jeo3dsLHLcJ{yxW-wJq)|RSrRl9FUvE% zJa{@F!5R%zK?#PEQD{ZRf&~V%3P^k=STv|Nyy_x&lG=2Wx>Ya0t7)c}!m~jgNX;T$ z1qE<1yZ{NSjAoflVn=O2RBSuSkg&$Hdf5Oa;f^d8nRP_Puz1A7hIni#7HVQdv>=0+ z7ZL)oSg}M=8FII8H*YO3(XPDR$xkR0(7%as)_)&g`$ zm~a(?_POcVimc?K)>Px&#>BGqgiBAIHcrZLn)B>_>$n9(NC%V>x~77A)5%t4d$9Mq z<$f)5Z}f)qYaQy{7NRb;Ww##xDbDRu_ii6A(dGNB?)QkVd(Lb5fMJq5w={K+eC(+8 zZk>sfoaZQdnHo-vR77cV9Wt7cHRL3tlUsu%aAB(Co|WWoFntq%y{TyqCDBOJ5EogX z5Bk(Zqgpp=cRGoHQDrZl$kU}``e@rzTYq*Um=As#X)?G=?F31_oHvz`2bOzB=X&G| z-g&w`E`ovww9i@hPgBOuYS=n@d*ObI+sw2%85Tir$HOq`5_@tg>Lg7Cg-(3|4IWIs z2b;QN=7bw85_6DeMY)OC>#ykOA_D+^s2sJX^gBvCJTWg{5zkd;Bc%$ZIJou$})__zt;C z?F`pl(+eH7nDgWfI{QTc4wA*s?%!klm3SH|VtjTy0X59svJS{Nl&Dcdo4Zcd!w4WM z7Djz;2h%Dc8Jxj^R=#CYGsDd6K1V?bES0jF#1@c_r>=ON&NSm=a^^|SYr-r%x0ccz z?TW(1>#dTUl95f>8?tysu_D7Oqu7X42@M@RYSL4sl@`6my}FlW*N9-Dj+73LxMh^L zRy6~VC^3#kJBN$CaN@-rUROg=bwyK8$y^MUW9F99{=d)fWU&9BRO93d z%%By<%2TC>V~omXNoi?7MgbAvs`{l&SYLXKqAr*8&Zew@vn%lTa8)>*DW)b)%}gcG z+^W&!fMP~FtRO|Jx&d?#GR8?Z+GMRZ+2|5ERs<=|CBRnHIN>G9Wn8mIVv}N#l@XI~ zL>aiD1&m@RXgjExDG@Hzv{sW62^ET*R16>oYB2PRXYh(AmTm`>?BuD*s=20C>O}22 zMHNY0%d!%KYG|Zrs^WIxF0^z-5l35H!dK62qwfuNr_=vk?z_o3hDI?BX3+XIqEl|5 zU2hRM`MfV&yUkqKHQU;RuqVBeJhS_)n>rIocevaoR0(Ng5yOsNp~wt-&~&1p1aC=~ zV$m5Olf<-==8K%lM|$X^OsB3;N>iGI43w2PVaOp7#-8OM116Ir#v^qXHz(OJv_s-K zKq*#^HR*VuX=7rka6C>q=cR3T(2@ zOnPRUvf@E_KSguFZm-eXjmp+K(;R^h1O^ii%QF2Bfj_l2P^I|QJTP@i5 zEhmm=;{XmfHJvGC+uAt|-4|cQ6Pv1LQnRxU_>2OCx;fU+G{_jTwrZ*i(D6);dS*wW zOpl&@1;+MD=GFd{X&qTsK}~m5?4VVJ!!u=U_;59s5c&jteE0=lVam7eD|525uEZIv ztg~%1md($)S`8;psemB1&SuDfat}|gYM5#kS{2ooX?5LmF}U7uxhMN)9{0u}IWEKX z`s(@qw)ysz0j!m)`$3aAEsETPt)BUR_;<1iJ+0oK%H3pz()?Y6hAq z#gyo!>Z|)rW*t{y7t}$XLw9x+#gzjjVO27H>Ac~0Wncy$!wg;(vDq@%2We*HG*L~a zIWSkwis&306a(~_lvE^9VEsyYRg}-9S4>0k+$u`+`QqN&qH$;kFdGXz&D=Ax{mw5iA8YeR#Dea zy(;))FXNWCljI{FFS8|*b92FIZp_u4CKKQ3h?P<@5TQ{asIw=s6N-lrzZt-}07}nu!cjWvOk)cUS zKY?0=Lmbm9&kABQ$ex$4+48KWFjxmEIhL&d(fpZ9$}ai|@%YiM2O+N{>i?H)FH4cW|E&$6m55drd~;F4B8 zP{-wLfA4R-nzQt1E&31R=i5<74=s@sG*xc28hW_(1NGKU5o<06*3xUk;8BG{VZ_B^ zm%PA))v&toEZ#K_WKn=Lw%9t!AtMD+B3aR|b7gYUPGUzZ8}n?})1}$76ty#tt$1nS zyZf|B%bSO{ZryY%zbdA*2WbZp)ns2Q&}SdmFiRNsWnS}DDaM%b8yp-e5n?gv0bO+A zr5SmW@;>r6Ho2tf&e0i{5U#%I=1x|r^{OfEpjjo?F4%0Fw=$VygB#00Xg4m{jo}g+ zU?tRHtS9;xzluF%97I+@=onee7{}0Rj1kLOO%6f|#bhgs_3ZulTrSq2%_-oOz-fRn zNX$C>QCp$PM3t)Ra^d+x>rxXJqVnt8eSTfbnDxpT)>r9YjaT6B&#Ob54rbURaj81V zF^*cL$(#)`&DFBo!~nfBs{=A^L*Eo$RRSq3X8$2cd=3gFVi02wg@!6pbP zWFt&`W*SpOPre=Ht2mr#(V{^|ybpl~h%rJv^f4||@+HhuP}2`@VPq+Y`@wZanp})6 zvta|Wg=~ntB{tVei-XTI^c=OgFZQ2b8xmxz-#Y zfL-vOjcKK`w6r?I>ud^&EAzPP`zz9iDn(*}gN;}o4;ccIM>1nQ2Xa(M3?_7?9g~fV zCKfBzFoj7X$xx{b&oYMsR*t+fb`=zrX;D;?Dy^^-(dvY@=ouD5m$MItPC)=e~Vw|%8oOo>)D7$q@lVUvo} zR%X(i*fO2@}zy)nHQ~DNL zUK5jZW}ybpyyx|%uW~Q_6$In{v&w$HM7)1%HU%srl;RBQ{%_=LZ%|=k3)76JChq`| zgr{XJ^|{M6urAH*073V4y`SByt5Zv-+;5sV@w6|^Ez!3poLB zr>O(a%Nrg7$E^BGBUi>fKMO^LE)!Dr#A0GVc&^p-Y?Z2cv_d2Go+~k}az+taqC_>i zwl`S|)_O|6$ef*NEj>#O{x^7#s4MU{ZVEcd+&awehEpfqd%WQdCd@r~ zAX{mMxH#7avldh9&3RVKgyAwyrz(dE7{hw7ZIP+k8e`lkIf3o7*UlX)Ltqe=DEM{p zOrh_1@ZYNYJS=Ny7Tg&Jml*Rp{rFbG9AJ**uvH*~}s zRDA{dYF%T~XEN~g^sHIm@>ie31>CL`UQG2IwwihJv&i_fW{gsqK9Pm#-|=lDt??Nj zG1LRYpP|?puca2Diz&0s(Yc$?^hGNl@Kze3Re}OVi6+*F;zW`&pe0R)5lxcJYHsOD z_SEBHcH3ukcEoWz-({*;$BKtRbF=8?=Yx5Iq{h=Q8FI?gS|c)&GvnoY{3YypV#E9ULp@+dhoRTab&26PF3d)qD;yR=7ieZtfL!Q$z+d?NVy?AMHLPkQ?@;(!*y+lK^KEd z1dzJsvFyebS5Pe-QYB_ z-gq%6Q6Z>i4B&NzhX%wY$-GnFJwbq7cwBL z%?+!uNJ{E?cP%v6QZrK@A7Z?4=?xW{xWQB#UX(>L^$0LjiYDB|WDE|LRzE%w8=0|$^2v;bSRw-XWD_OY|x@Itx-SdYyknY z<_-QBGb-aOe<93<`cKOJddnmmvOY5hg98M~`wl>nDj$3AGZHB)6r7c_&n>YO& z-}!TGH(#rrXiSn@%-+23$zEMs&)lO7ipGJ0XqTeiueZ&o2R zi;I0-YAtkaSIKW~3(GZKTQ6ICJ}ggOPHrdb9=%QXYm*9}JvYei=5g3!ooLHt-_!3zYNQFO8!ThyykI5X)-J-UV8i&d zSpb#xv&6oRZH4|oHD(t(#{yfyBmuOanWa^(4CetezV3y)eH?C*IUKH=>%1Ls6nBld*_{+wUhy{A?UobH`1Q5t zIQWLPbT^`%Mn#^dv4Q&*v8#KdGWxE+rpL-v%;7vmHA$|>n8F3xWtL`8MC?HEFL^p8 zjO$Uc=frLAIlOefIv;$jeKQh&(Roof=Mcwr;*us$`#6iuwQN(nq0C;r-|k-3+rW!? zB};42w1*qM2hDXm+>gGVwZ6{9v0PNwe=~0^#OML5+n;xGHxSFDnwrp*`|7Zcu(Q9f zAm1#^lb$($)p<+69Bs6h>O7f`(#jbAdGfz~zHI*`ike;~i!EebU=?D>Wr5Zh`lHq4 zKl4fT&FVOoDWB0td<=dH5BNxMzsJ=y)w!^m7ILj+bBYPfAwk24bf3>2%mw#XW^(t= z&&}E8;QI2`<|VN$xX9;8)%U|?zW&dveEa_o`$FHydwb=5-%ahQ(R<{($MduZSRj-DE!aWBaWhOVz zb9%MV3^J<ap36z9U;yQd9@QCnzbR+&dsWsHGh#}d zxgL&wQerKeZ@b#iUV*>$aBIV^^TKZRIIcd7dn?W%YQsj?6h$y(hp7^;Cr9OcrOAEd z{3Dc=4L<29cZRCDA!RtX<(%fJ9z6Mpht>Mi(s;@lRlf5a%t%9DIO<{r&1?&!^MvND*8Ax=m_m= z1m*%)h8f-qBc5n1HsGB~`$aQ)1vZgS@A&Bq*COLp;DvELrENyBZ+VeO`;%1J%Al|^ z$?d9qMNWSRB~SS#E?&GEDoultBVyopLLM{eh{1T!t#UMGrS3y&$hZ?pR_qS_^qvptUM`q^Zx^rs+%DNhph0b6!_9Q}a5v>5KDOGomr zS7WGKWu$3hbVdF$w&T>8+65ioI%)*AA~2a$~a$cP_onkbQ;RJP(BBy64$`7VD}I z@%`a{^`qkoa#`-KjCQf{?Pm_Bv2__kCvSkAQ;K@VAm7UNloU0CL(X<1OdXV5>Vv@Ho{(7 z%$AUmv$zUqta~7+Fb*jTP&%lx3#2RIIXHCh((-4EGYw+ukygKG0?2Q(Ib_=>VU=Rr z&FoM;6$lBjM4sO#>dV76ZZUlxRMFF7-GMY(@K7n9r&Aid9PV1;Ve1g@B0f2m$a2ZP zv#xh?b*EXhm(q1BY)I>hVpAstx%QTDUB^2&(HTl;o=X3h^R>qyq+Sa~2KwTmRXppYUttV`+E5fdwrGm+woPftDXB->);zn z)@6Sbx$I8I9bsxK?aL)Tw>Is9bU*xNcj_Y;Dh|@X9aIUTU9yI%bm}&bR92Q$Ie>>(_aWOqJ7# zD9XQZj<%FK9b07vf4y=a9V14u4k;^%DY+Bk&9$oOFs2)ulDFJ%0u^MuW08K+^6 zbDLWM%6Xd{bj~mWkx&n25f&?d4b?dQssIT_Y+O^h>JBI#Gp8ptO^_}@)l#|c znAZ00{TBmM?1yrz+|7ixNmuT6>v9#_i$mXQl!N)z&lc|kZAHU*yhbBjJ?Oq}gLD9_xj2Nc{iFl(8;AA|JhR71zHgqd=bODrj-1JAThxL_^B>$YZH73jygahx%&To^~+*2tBpdyNSe z>!osE!&Dtg8UTVk(d4W`?nPfGIUdwqfxnWH*toGWl0sz;cbG9&yH|MJl5mX6B#Y~_ zQ*(VL*Z3-(`059o=qs)ZH$0qMZW+`FuF1BYEv_a@HE}pn3Kgja;V)6p@l`_iP2gA+ zZs$%Z29)-<^=;`kGRnE3N`pT?QyNLmH~p8g6bu(>?-zRL`NU9pgHCH!Zd?bpbzC;) z_MP1q)4q|bP{-Dseml^$H7{ga_iSx(tcv>jF#YUtNIC5rQ0eA%KP(^Z*NYETnlFdU zK|g6F`kwZALLteZ*Ym4I$3wOFDRwJaENq}zmVw8)^fX|0)Xty9|6aLW5JnhuFwWLy zwryuz3tC$Sz=^0c44h;Ym!AL!uv8dyL6)B!VF@59Y79m)ptM98N)JwYPAAA*uVkm| zo1f%VqDM*h=A21Y#JJBOL1Pmxn@M|B6nT>2oHy3J1CUXRg*ATKV)cub*NJUgj3xt0neK0+-uZnQKPS!}Sq zKHZMK=mcFnM0q0OTR)a*y~l?MUF9*+6%HiO!aYhT^(4IIa7{DUsjcm726 zv$a2e?DmKv$aC}4^~?vSK5(zLB3+HIiz?H~6s&ng@ca5JPqwF;$i0@JnWONLT#8>8 z|91XciDCMq#m4;ldwzI*U%aM!?Z5ox?{DVJE2ZVqwEMfZ{;t0?McwYIRkzkIuDQOg z%pD=!LwED}HnFZ6@qPL#@8VeZ<>gJa-1C(Ed#wBN;G5eMnB4I0cGN*%FQeUu-1l|% z>${lF!5KL+dgg!=yViNTSSFXF_EIN)Gzk@*&5(M}CYosng1-Ijez<5HQwoKhHeY zbQ&&c2>X;_O_mN|4U;5yt&O`o*d!WuG7shYmpx}u z(8|$df3jX#SJx}f_FM+6_IA83HR`tE{bS|!MM;f(Z>q0rLAR4^FnVDIwr{M1E0t#6 zx7I)XKzT6EAa0GfiR?bF&XX%k#?T6eA|Z;QROf+dqlKjJcnGuu;&v8F=b( zzkjRlrGGESBgas^LF@8(Z2Gd~(*E%8vy9r}>)hzN*Z6HYd<%?IdHUJD<|ABzzdpoH zS_CcJ#;D7*Q>QEe^f)faz%bX7e8%gV8h?(T>1XLoLDC@5E(sD?`I|SmP8|6d|LGp2 z7B177`l#dwY;#$_l-sOvM#YP$doe?yS+`H51YpT57 z{qAw8#N3(RJ9^g2guI>EC^qFXP*v8UeRD~_cn@76{iF`cLCJM{rQYVY@95=r$^Lj}0k{(-@?TxVFh4!pY^k$4o0~YJoN5eePLNjEPQ>d%;+gD`;eSMYVw*m^E zf1%^~dE-KW47P-P=Uii&FTL*6?u*!_VbMdM#eXhkQw@Kg`{`k6$!3ng^ z9EDf9%x}N_C5zm*ZE@e@mP}G}yP==PqjMEuI` zsX_sC!lOF9sxkuz--MWRV#tiKOlEqWal9#$vm7)E<$2m){D?um#pFHTv#dM)F^xR) zfyi6l<3>r<@Uhi))El&IZVSN~--wWY|8Dqy_|vT3JSU%C{rUZ4F2^hISC?UfL7eNP zrzc$4W@oF(oF6+TNk4j?mpnn%7E>i>TT~dvbEC9wXOGQtj@Hx<~8X^ z?NIvat76y1J`V%W9CO0$JpXv+*SWlD#+(0I{ki+7)Bk+mcHsVfnDM(k_d5LF_lM7G z=ZnvqK)=;LM4gVe2$j3`RrnE*=9gL{XStqvA4fI-tY@=-tbXYWwpJpYP;1p#KL|pY zd`NnYGG158_uw21Ro$dcN!AwH7=T-Ioj21^^$ZO=m)o^wpEFQcS!WU}s>Rl8<{ao~ zd!2K2=&ptQ2z@j=5rQM+cLt}}61!>*eoHo=`=^p_NPp*_$M^M+#~{8lJMAA*|9kR8 zZ~m*SUjJX^-}$!(<(cwl4e6Q6&hz{OpNr#Ol$`nZxoNGp=y``Z+nVh}>Q%;^+kL<7 zj)bs3pPBUV%siguMPWN)xnApz#@^PX3Wfpb8`EQppC0@BDs(#R>$P)s_O0h>T2WU# z<9-|~Ux6>a-LcxDPP`R9e+E{FA&wpes<_g1Ys>FX56#nKwv@$N{#Qp6)#+k$gfrirfhL2GjjR5 zS={3bGmyS=vAc3pl)eTNHw++LWeh|*;2hydasE8lK*gyfzG$S>7~WjUtQW^C(2)ghLQJ0uLrj-#BBhaLtn zG*L24WR}gC$&!Tw1Q1dw#M3$%GOQDtZpnv7WX@M~9u;iu&e0nK&!EbSk-Kwp+v5ZA zLBHeW{$|a45<>nOuic-&{Wv%Om-pcxk0jdqi7f4ekKgWQ{PUe-hr<7H4!|h3spwx$ z9PRgeG>^R>_ixr|L#PQu2g!AJq8PZKb$wamR*Z*J5*xz!h^IXb!YJ$=;WI1rC}`o7Z1g-RdNi6w%>B4FyS zQ#Wc|xD~`%ufbZxpyiYiNeKkX+BWP=EQC6g4(&p>&;mgSqjgJq>}c3B2bC%gIW&}k zuvEtGYBlG^s>as0fNwSUsJO5skCF^d_OCfak?K_e>*ZeXf&{V3RZW8$`L=YxyAoV0 zcC|3Mw&1#UwN}NmgxZn_uB*zkX`XAHAH$8lU+=|VI`_3Am zSyE|l?Q$&@GR6_iv2>R)62K*9h)u)un78z{s8m;&N#L}0|) zkbyYh(VP%!rAIgrpUhpyhRofW!CJZ;_O+Z80BOhddvMA*k`-%qL!hQ4jomtL zFcP0eSC^I76KH4^_5?Q~QZ-5;(P%Utj-1ShW=gd-UL$^F%V&%yZO>O)DvwCO)f7YD(he`gdzt`ppcaV#Y0L7d#6uJ zbp4P(WZ&VDp83A!)w9Rd`FnokX3mJ}t^k>^mttKUdazy1;&sym!Pa&0`k8#Z@O1R^ zV{a)seII^ z%4}t3NH8-^Z3tAFYi&W@wkJr5~KId}{X79N_#`nvE`?YoO`=_pbzFnBZRUehL+2gE!usPVk zv&ABsJ*S{F*_!OB%LoDj zK&gY&9z3PCyp`$zUNC5(2s3+0Qwdsg#TLf4fdq>yo1_TP6|oCzJD6N5;M8?FG5*m{ zF1NSk)25dK8#PUc3Qo=SFeefZpE|}^ld!B^2E<9q210d+x1GzUn^H!)K=&&#Y`!2_ z1H`M{zR$vHC0G!e8n$Y-K!(tH>fRHI!_j6Z(!`WDxwvq)elAl+@YLgIO_YIxWE#0HRaw;N!1IiYt65{xH3X{D?#4@WZ)^L!gx7(smHkgII73 zBFe^cr~_ufxXXyBpqHsaEjf}xi3h2Pu^pqJ6(87P>^1ekL?w2=r2w(4_fS*LR$@d) zi~Oz&Xi8e2_Z<<&1qL_v-_%h-#dSx&xBka(eu0nm`(FC`>bEaHzklapetuWL57)SXW(aG*`32UG^ga!a<%_U6=^<}4Ztgt$8iBgr~D9bnb0$WSv2N7P(Z%uj)pOVJ|k3QQ7OGO9p@y$u1d_zG=OnGnrqtTK{vFkNqp zo#n0#E5TweWkJhOsjC3cMY}bzos1`5kyS%;KmIa+YQjB?2rZ!1+d$58brV4^1E{qE z#2DBb-U_Nwk<#p?3?`Ykm$1p2!Od=0wNRGuNb~@pg+hG#zf+_#(ecHP0lmbE1XWD+w|@fE5!3{N4n>mt^Ql6C2cVD@{=t z5|xkE5I;60=3$VCmj*h-^u)Ga@fGf%rnbhzyoBwnGi$8?SypUKLA8W61*#ILwK-Cx z{@xHX^+)GL(Uv^x>h{Y|bEy3f9HPHa)VUqk9|E@xZMNNN-MS3JVD|Ae6CG zz=#{FLjDrG%Xk{PNvOtz4fuK6WH1IeE_A`2CEIIOzF*3<}^ zuyD>lU|Zz3*41pqpXU|50zwMQKAR^a8$j-c5E za}X++xI@%1i=n70^Ezozr2yHn*s!C(5*1;m(zL6Rs^phpHR5*h_D94u4#{3m{`~3J z*Ts61CwlJy4Y&gQFc!LODC?=(in_e+FuD2Zqv*D;HXTY{lIrp@Gf8y=Yq=ispqMe~ zl|mB2WY;u{mBu2F$UxLaDBea*xuGEA8brBkq?LeNgtOwz1|zY&cF+}|Vg?A&OhW@A zVhgx@sz6{RcX`~li7>hU)<~FxS{PSM?o&hD|HP+Ag$sN3h+p<6g5fxK#7TJ zmwl4ceZRIIf+yc^ctOrk^m*+P4W}$_+dgG)z}5g&4ML7{W4vFxpZkZ!BnExZsZz1W1^fClZl%X`Iz zgk9_acST0Ku7&gp+q16AqlD&u*{7?o(N?`yhwyrHmp%1SR973~!2E3xK}JG$Mz(mB zbFN=zQJ41^G9u2a0lU$=RLo`%k!ov=Iktqj=O~ywEv+1(m8Y&GX*Lr^!&Swso`|)w z!;|FYyyZa-vZVQ~3Sq}tV@5(yk_H^hNd_<>;n-M%iHkxG4O2hUc3j7JmVRw~G6iw3 zVn?KEiUQ~&xpaFHQt*>zJW(7WVLVZ%)Ko||MvdtYb5zR?rfyv_>m^<>^w6{;h?Y6= zq0BNUJwsV1>A0eiu=X=}e&na@xLLTk+i4L~ibOe}D7`j!yiFRX8ZBj)$gf~aMX)wH z)hUKfA<;mPYUqp>9=73G3grx&azvD7x?ZpkQ5Lc1Zb)&p<#)}b4b>mjrA1Vyb;&*!*nl9HSSQ0kTmjAamICo$(bjAt7*%7=yGQ9SKO@$MFA!ncwNEv zLTk3$7A0i)6>~N9x(Evw2&d4se(iC@mP<5&)Z*rnlRZm&W{w|KTMzK;%G^BCWI%1l zv|{>*Cvz33V*r!_B2+L2K|+bpQXnxM09r(pL3WFd!8rAbC%eiklp?D9&HWeUdWEq@ zRbiQv$ac^%T$N~&RE9`1CsF&DEh(a0k|L#{q?43pdySOq0%~&}su&-2xW-h2c#<9> ztuS*WX&T~yep=F(veTA5XBe7LfjZ=pP#OZrg2S^NVS7M_+_nNUZG|>BJPqkHt)s6h z-R#j!%5sRN(3Cq`w8I`M?qHxUL#Xt=P|HxnfJ%&FqbwS#O*ER7nxP!0QgRtM#4h)s z$L9DF!?_k}az!MCsd;0@dGj>Vxm?pF&4B2l5J?!~GE;6-3F9ta%Jk!eF#tFK!Hgo1 zK|9BtK*t zT^%mgPMB;<{hRsZ`l3H71imQ4v4yqA6Z2KAZJ>BceGC5S+D{EZ{;ELPD|lUu)K$R7 zgY*B*K5H_XY5nQeGmgt!rvEkeEK25^Y5N7(8^x}@4))6XB>|fvV@Cp@12K(qu+_4*GcKV8hD)P626aQx7;0dqO7xF_pNx#s zk#UdLmaO%}6LJtS$qvAY$73709<}r{`w|Zv;ecszl@z4A)4;4l%Sp1ebUdh8sMVWF zgm$u=>8UMHjNwf60)Iv!I7ML$%In$_f=o+Y*(xXQ0iC09gf+@)ow(?f7>`lRYjIfQ zc#@X8+0HX}HLTA?7&6crsZx}xmN3S35A`N^bd%O-tEfolHxo9ABB_Q6P%0P0RsvHS z9p*S$mu6(%WFD*w8oxjc+EX`>D$5S=@cc_*nmdH#uT8Q!N7XVCm(ZJKS<^WcRp8nx zSpo>LCxMz4Kq%f|7hpk0K!yxMK_|uP2W)L=0Uff8?F^`4EIZ<080EffdBzy-hr;pF zcz$)i^b&Aed%ZKx1x4$KW?MIHrhYi@&VQ$0tb9D-r(hCLcAxw|}vx7WrXYL*U9$L{HVe0z?)i5cZM(Sz$(Ub}Gal^fw(k+aH!U>mQx z1~h~@o*H4A1jH;7qBI(iZGaR=xx9v?3>5~Q0%5dLpwuyyFF&?o>v$y9d?(#2_T*6e zA!)z4w$$O?dMvs#Byn3eV=*Xo(JTk`%?2+R8Fif4c#1%lVQoInr1dy$#*%*B(tL^2`nu&D>|Kug_V#>S&cIS3I`Lk| zvw6O3PMm#dct+o@OG>VoG-GmZXKjJQ!L-Rc0Y{A^y1a(zuvT`=o_bNq*a>7RE4*H0gpp!N+AI){|sx>#X@QapH zkS&`gcd(^(jd{#bVrFxMR!2?Xas7*`-;kQ?JPk~E?p4hW2dXomYlxf{XHhcQ-1`hG zObZTAWM#dcm9J7WEz0$RtApWb!F8F2uV^-X^1{OHeT zlaBPlFC#Afb9MzX!dyff#7dnBHoraCZkpKaa^0iRzCZDpVw<#riWeqnQeHuA2aiT! z1cjj+43%{X;vrF}9a7~s9iWOWQb{G4N=Av4L}9p?^@c+>aG<~8Kev5XMyfmC(nqDM zm|U}`Yuqk6*=ru)knPl6X-;e@uq{4o(^S5<`6A{HIr@c0xGaZ1~m_CrNzNK~cd^mfIbGOZ)h z%<7C0?*%*9z@R`>Lr~IIDhN5MqouPcfnHU5s!0Ma2`W4|-IRj&kD%X0f1y?+%VZ@< zgA>{2_g5lO08~3&AV!Xef*TJGRcTlO6lV zPdG33Cy#nOvBvSLIXlnqB8XO#?s@OtRa?d6d$WQv1mGAWRlE@O)EiVV}vCaA?rDmpv|*v2B=BH@eHhqT^Cdb590>&>#UzCQbr*%1!)}>yu?^X zwu})R7!nURP1^N=(s{GZI76o=Aav8~+K4PWDe7bmZaSt@G?GY+s1uF`_X!iVIY59v zn*~`DsE|oL+c~Dvl-6k+Zai(4*P%hHmSN6efU!Q12+{yLR!=q>z1Hx?^<(-%V0YWu zmT$BLRuz=y5$0VuN0ZIs`laz0Z`KROI_0Eu$Jj!7k)R?Ab7YhZCg)Y|>|~L)oARv3 zszrob+M~-wv+hp00n+8Co5bW@))?DrPu&|y13@M*m8@b?9;2i{i<-EJO8`RCaimLw z5~Lrn(-ktC1PBsq$FgIvyglBFp+TWoQWI)pEL0IR?Bdm^N#0Qia*F5kyVsMdvCj{x>HzBx$G^`M7bgzL93x* zq^6w=3$WtgEVp2zjxa{Jj-zoF6WdmzS82p&W2I#ty0%6+4LBpRtlG@l znH6?0Pl#wf2^e@vtd($lJCTy7^WRt1d6=4P!*Na+0Hal#`06MJNEg=$y zx3i8$eL3Nl?S8%9&bOz;y;dLRsV1U*T6PWLer>1XmvWUCHI3D(Ma?laZcbTOL9y1x z2$r=)HlRWFP#fbRgL;@0Wtfz>PiZVEB&Rp@yQ!G8y|f+j1PxFt)AJ{q1{7U=z(~TS zbudrydAz@_{ghVku;)61dwSWBoKj-_m zvc+@E*{lB=-v-LGrD&J5*qjkUlf!iig*Lf%3A;95@$efSeDJ4hL z?k*>7Bg{l7L66Ne+@vh4LVBE!y4_<)z=UQ$0Er!Lu_iRSW>*{&j{K6{beb5?eFX5Uw@AFU+*)F4gFe%YTWnqB$o0D zkYhsEDk4Mpyp5CG1s#|sE|Fs5OdvQrgoKKM=z*J^2RF0Y)3N44>08GGjPU@Aw4@%u zv2b<_5skD&ykN!I6z8WqTs=28v4IP(emjJzih?MS-JLm+2UA zNvR0*BBTloBV5bm*m6p{BNFZwYm()l4R-eO9du-xwK*%(gpM3G7;l;4<4 zOyaVJggG$c6u{_FUaC{2Ip?J54M1;bjAKS5ItSDIkOkJ%O@i15B(BXZBT1*MleN8t z1kOG>DUs@Tc2vWNX*-^++>YdI=L8RQn&xn1;!1Tr=cxlbSbEttC*2-(CNd~$GRb<6 zZRS+oN)S*$vsv<`R6V@)-&`B{RBp*-qA0*MT{c=)tqWLJUCfN_f@GqSP`Rjn5LA|I z7EQ~|yTzxiUZx3C%(B#hgzW1GY9uttc2Dhwj`L*RMA9;lC1X?*XPz>W7QOlX_X_&vZ}R z(cs3AC!6MZ(7J6>pp3bWAeCAn>!3%zsGvXi+xg#f`_{c);uJTPOTToo1i>rN15ZMZ z$6?!xBc{%+grjo_O6 zL_u3)jlib$q5Rmkedtkdx0BAR&YFh}X7c}A@v&I2QT3Y0F}@Z>8rkcZQ(t6fzFUi} zJM~+1I=|5mt`608aUcnE=9n)>CVu=Y>*{!6;5gutQX-**or`()+&QB65A`^;P2V_? zzK=+5hd6qFdQmLAaofzz9aD~rA)Kf{iH#w4)wpIiwQcL9%xn9Y>gYpXU2{5Sqy6#R z)_ipII74QFfBxj1zbbym{@wk1$?qwHi2+|A_Ka6zJVuT%WJ*lkSVSpK>9xDjDY54D z-s^oYpQO~#YsnIv*pAmol!?r6M21L9B{p`?Swa510t2or>mbY|TF(<=M_L&*j73ai zWFDWa)d;q&uLC+YjJDC%<49JP%irE^5Yv^lbDmF#WPKacy6LH+xE3$*_r)nCiH&59 zsq#)s&?@X?yDPwIXe(uHwAQwTc1$F>MAg{_bQ}t%xN%eBKHu8qb0k8l z78j>A$9mvX#@!FC9_PH{Z&W;Cwd_%>kvpfUgD6>zNnln?!j_hXpU>K8U0#u?gA@2aGlQV@N|BYidB~A@(SQIsW$p@wZt;bXq=!A_O+^$1b&}j zpE)RCDiR;`&`_sivd+-JiHIibEEpRdX2&ccSX5;CerbU8g2#!Wrb8P~xZ$-1n~7Zy zuxESDxVa}~Hu}qv_-pF|i{#u>`}6V{bBK?%Pe}(;oyjk!zF~&Da=g};AImRd9k-K#HejX?Xe^ED2-Km?vr$lb7+K zLKg*6ph6vWf8ij_{O%KD&YFpIqBS~f&Cu=};?;e3>45?HkoS2DqP<` zh1bJaim*BbTM*wPXqPp%6DY@)IG6;}(7ss{u8L!qT2zE|*yb^gn8dzOrpV2CZDQOq zW8NLtU{#14I{TYzvz>JGI`4yDCa`S!g^7;C%j^m`JRBC-652pvmS(FCTDRd@#&%nq zabE4m2X-Rxs#Juz0yAP<>!NxilnFOOK$OgQ7erkOrXtaJ%h<_$<1)3?0LywZO=X^5 zsLf7SFCRIcE~Km-eqL0|qINlx!*=I)`UrhI@%q-=$1U3^UfxR|+agq*?d#&$w%kV< z-fOO31lL<1o`dlW_~)FzTRsuH3|U$an4PnI6Of8BH@WI`&%5C1p2<|2h##DSIexoQ zLhFXRyep5B8WScjW2)!T2*b6KUJ`N2tQfLYlT9n;ftw)~2#auZjDah3+p(<%DgzJ@ zL_@3jphX(12uM}TPWCz#LZXbG=Q`7z^?`J0s_s@lZ2fHbr&lCRRBf98A|#K|FhSC- zX+W4YM30yvAtYUDaG#HEbl(EuF2s(08RGKmsdGEi>FDoH^C1huLeRac8m z6{b?L6+*tz)&b%r2-~)-_Qv{N5mO0T#kI&0o1Gl0p5lR(hFaW^x_!+OzfXRK@MW8= zGufp}ZMB&f>+)Ugll%SgubOtab)&j7eYI)L?2oyw;KGBDlHJ$vA~o=j@Hlo zvzqG3xSq9W;V9`wi#)2)K`oY+&*Qz?e~SylYB*;N*6IrIeaE2tDMXj`hR;fa%SF_? znT>9Mu}0g&GVH7#m*T=a1Lv`CIwx+PBE05PE<@0jQNl55@wjSo5UouPl||yQ5M?`y z+1d;q-PYG0rPsX{c{#~HMn1BX-+cA&e^aXbT-$P)nr`e;hEogHrS6x9oI zCFCC+IoR9jS?xWyC4Xi#{5tc?bvb=X`^dL|M|#pKPB-m>_EL4b;5u!TG*M2^Mx>za>eE{juj17g z!I{WU`*FO%-8k+(cYaPHiVCIEd<{9rdZ$}#5jxO#$Q0$qA?Y(s_Ia58DAN*>sLsp!dp7Mx-v6(dA>pji!wyoZ0+RV7S?Mw%-M7T`I478+auT&GCM3Jg=hqiwH8l%DG0DL2jXg{_Prn3I9 zv^{msR)~jdwLojvBsl?YgGoTKF=s*eepeyaRWc6+2bVpr4F0;(sT$yrS!&!k^`k+v zmws`xwSYM3bo6RX!h7dd7L*^?^7Wq)qQ{E% zd0{I(ZNiFJZYyhU(lZ5duRbVw&m->rD<4AS0vwbfu0S4e09GEM4#<_l@Ud_wlHANJ zgT90x`WvmM18vI$llFufcVY`kZbFxPl2Q@O47Do&7sAH&uvM?x7@voz1=N?xs(g}) zvIpV-21`Yo;9RpFGp?~bW+;)V8FA)@K{JXQaW_l?1`twAmKYI$5CI)FH-zn~?pLnQ zFY`sGCpz+B8_67_7Hx&A#Aip{={UUx>QMSaUldv1%c_4Z=O5;6=pSd&Yona|nGn|G z9AJWQwBtGnnwqD37zNoW{EEl3xd)2|GqN_7q(?FXQ(@uR9ThORy8ksK`v#3)P)-@ z{dx$sF0MmW+ex&pRsSaYg4$B5tf>g4rt7^&>jJe@rgxVX)BG?e7I_|runsq*Oxc0; z{*lk`nD`)R^BtMqd0rvsMCMjzExlT|4U*He{^OH^sL>fB<#2>pAq%{#z1!@3MJm&IlT#xkt2x7>+vDJ)?3_GB#ftnJf z9&oq-055`CgoIMk(15X^FiKdW^856CACQ}>s-I`@2xeEH-bR~!b)@KmFb_)tSF9xF z?2P+%$2diTkhR%Locnm%^nmq6bd~gA%5LfMv@Z_A3w-ud&b?n`CZn6t<(9ap$~xx# z+WUp$pg+R9pC74@t>a78e!joi(0Al7>aH0HpggX5TiSacpWMW)C;ZQFKH7Asm&4iY zizaTwe{EhVk zMD&lpe|)Ncp3W3&OgZqIcM?wg^!RC9=1xcQ}2y)8FC| z?$R}Z4aB;Ujm+FP!(%dKZY}K0AT~lIRYPD+e%roJP}x_v=VO=Ke(RaCE6Jtuyf=$? zbgOQMfzwIsOl)8}bJB0?sv{UWc3TmFII399S-{XxSuoXS>($d7kacMpahW!aH|y|4 z^oY@LCoN;Sw!;wZaVyD^qd}0(X1qaJ_3j7j7Cmq_8Tz0fxHv?L}>CTdBaB z{@UDjd2HJR2BUVN>;1AFOLC>UEz`%X*?z7E&yU}WJ2Y#_=WUP23*|q{x-??)vUa-~ z+B2BTuBzEv9`2;oSt&6p73Xu+Pog7B-SW&KsyiU7Cb1U~H_ z3+>vbcZHL2fq7~ybXr~mLwCr^i|t-fUc5-z>OT9-0xWZW)MEn~?2jv~#V`9&QxWbT#7MF7E42M!PngV%Xf6u^D|a&$gZ^ywZGb zpW9DdKJ9k9Kji)SwzDob>bU)5o1kK%VnJAeNC{hoiYeAdX~5u5oAVh;Dp7xW~e9sIf({duHWE zfY?xT;2@oCEu9y@%ULo@A3n}>ERv_C_;Vjtr_DUkQzl`C2E1ULxomSNdc%OwRbGc@ z)ELP&Y%q)qQoQ86ki%&lO3NN z!UZTUDaROws$+r}M+hLQ1%+k#m=is1Sa(OxI*NqgMilzB@G<*);}X2e{3o=$&?|7J z!+2u=QROn0DF-M_qN_p2i%eI8INk=amNgL2Y8b9)Q=lLOhMh9>2B{IW*q+N3II5|? zb_R2#iH6+ZwRjp_E(69!$MSn#L(sY|EpP#anva;o(u=M0GmWc-v4&$&Y3I&rfw>egRcGU-%8Xyc zXTBTn124xf=UMfB)iA#WByJNRs4jQdIKO?vD;1e>ECE@jxNHwSF2 zKs9!Rj4DxHj`b_$ z_nZXb97%*iAlOHhr?3u-j8E;ZJ|o_sFdx3*1Oq5eV&b&hr(}+qWM?OD^OpW*=3DYH zSMHNd0c4yI%t?%Em1ekAqfGNTv?_Eb^%?tVt96gVtNcd#ncL($6=s6>oXE`MxZdCI zm)jNyzT9;NHbOa@`{q>8@m7YK{`xO<5ge=I&A7q7T`zHQ$eKb*yQnIzt}L}{G_5Lt z7T=V*Na||xUI6>&t&$14rDiH$HgYn#vNVP6vmDscoacIk8DqC8Ut|?i4e2J|)Pghy!F7g`pcg7DOH3;8+M&Eoz}T%0>qmvT}c}dfuw> zIN`agj&VsSn8E|a(-eR_gIjVj2%}tht)5xrr(wC$@!74f^cOT6I52q{iV>n@uE0xC z!J?;>1@!gunB3}v*sU$k@R*J4XYqamS+6N93OHOHr`mdbJ?FQ@@WONEvh|Dmet0y3 zXfg7-^}TL*ymKLkJ$0GRXV;A!KYFX@)M;e$^;|EGoR60+N5{9ne*4dIh~L)!cCY^Z zpUX~Mvz0%7uI_c}!o_3n{*bIcGoDxENoSD?svkF+GiW?xg7a-mEyF24a$6$nw0`kH z3CY?k&gFbr0u4*siVrK}v~OqU&AMre^qGGidpn=GJ{jWMz4>%pzj*$6>Wj3R*QtaR zIdaZkjJMh28DnpAD&No>+b=@9(*g|6fdXt}b8oQw79(Q|ql&icQJJyLOyNHEslnHK@lSJRdr;E9{x%%3U^ZHiv%&{bl2e<}Zx-b$Q7$9>ka> z%kzxW0M8S={Sk)k<~fhQ`3l_Ez9eG}nsBsLxdVoM26l(A!W;@;=QXKP#H>ncwF;pu zrAVc=ZMN+L?zG`cI`+n>Fu@nh) z^>&Nd>c>BWn&WE*bsK%4>PUeDV z1i5S}`oj|(-#^}tCTm|DT+nIi_ao9uTO6F`787{K&=3ccdJ;^e-kEm03k}!36~B8V z!f2O%{)KaV{zrJg{jcxous(gh=&!EerlHzin)I^Y#KdXD+@8IYvMtl+(7&nh|8h6g z?5YjzecwxLip8ZMUV#rT5o5@D80PYxa}QTK13A%01Guy`5KQ zjhurJzD{g|rc@$wTd zzbgn>Ivj6=26w$$G5W1TT=o9jnp*n?@H`&D<)!73D_0Ih#qKtyk$ZpPpfQvR1BKQ? zlpMx25tUY^F{-M(OQ%P9*&}9ke<6XDejE${ZJr`&wiQ2@tIIs)pFt0DYkpv>KuofO z5Cq-cH0|??+1!$3L4)SuO4(M(nw>F=%akm)Wtbzt<<2AwoocLd$*WEv2~4X#0Y43ZDnmR4S@4amg{I>CRLl=5<_V#nm z;;*%I&N0vLGq-utH;*;H=Nt&$`Rv!nUG>)M;W{=aY{I5|9N8ytIlwe;InqW=m#)cI zS|w0hn#t>gYxCn4m(prog3Ni5YoXF!jXRL?D6Ddnio$iRalJhQ<=@_q$)`_Nwu`)0Glkz(#4HK`*%AECeCC-lEx4P;B5&PvPQY?T9rUe=nW}DFFe? zE8uw$#YT3GI;b5O69zt2VjI|886Q)Z28w`LY(duESSc}O&En&F+5n z`1NP3*EKz>CSv2VL@g^-3E?GZp){galP5GWHF}#;C2c#QUd5wxbA$Zyx+kX?o0S-8 zH;SI!(~?*MRWqthqh`r&1!u8Suf#j`Wif#%uNIk_ii1OJwM31iYvAD!j)5I+Ah0%q z8D3J8OqX7n=cglVvDeK5x5A}6c6{=bKI`eeP&;vAg@HlwZDe6Sa7HiUgY2r9Vrq<7 zm*&(JK-o06@z;3#F(gt831Yel&`pwE+}U<3;bi7&p5ye0$R$HCX)~#u#AU8+B!}2t zYi7So9>dr6tNPj+OzB8w9MOl>c9=;R#Vcv*dG^i6+wa#<4MSh_PB>cX;cC7~BHS5o zE*j5-j2Q<)d21HQ1Lm1uL2JjUTrIle5gO3va4xmCqo!5|8oScl`zrsIc1=Ph6)kxM z)$G)lRJ>wC&!>eogiKsi?9~iG(3=aN35Sz_eK}gX=LFy-VANqTm7347Mx)}hY{%`G z6DzmRND^E%<-RcP{JK=2YJPrA-N0bgiyM(7*lZ?V3AdIyPjt9Wv#){+zbCT(g0V8^>%R-T9bvzK=ot zhTr7=g-R$b>fr8qb=UU#*6a7fZ)aTSff|3ZL-$0jj%3rPJ!eBMGk;fa!?m#G+bPYf zum3+LzD+)lq*85TC$!p7d+T-z{iM|N=0F{nsL+LPv2rXem&#?cpE`y8M?Y4$l_y>| zBxGtIz@fxy&Gh$&$$A=iJ&%uvI4)y=(NMSNsp{)CyyQ6By0VSsW{@MU-R&uZM09)Y z(@5mJo?lshd^K>N(yw*Lbc+c`ZN0LSyqwf;+yA#L}wpdjk%l82cpX5VLD0Zxo7lVk*9TK+Riy>y61-`>4bQvAJ6BLPn*>4 zIRh}P2Il(qadz}xZ&d$%0s-&Ym3PY_XSwFro1?SoZ`fPhL)&C;MRTd?+VYKqYh5io z-fMFm_ipy;YtGi=z`1HQ@LGSC#_mUXa%ubY78g_~ZkJJ!M!&6|%XqF{Uz4Koo_q&; z;`aM)ZwtOz=cC6=l`G!QWi0Ts@g7^nemYD>-(c>Th%+(~8r3VfHlo!?z3uT0se?nO zyBc!$DlLK9(1ocTkXrHlIQlcc@3pmVu8%^|`l%XJ3HC#8Q1A?XxR)vcr~t|X+-I0_ zO1zx7iN75oWx3%>_zj7PG?>t_(iP|*D9M#GkEzTE&(pj(f&!GDO&II@SR#xKMWNv1 z#m0JoX`CA`QLE^99sG;4eL5KJbL(K0{-!V^!^qHk!nJfKKHuwisWl!uZz#>V>uLD% zj34g&{PWuKTedSe-fc9VnAY~K=XLL&f1P-1OtW_MRaU4~s5+}7vD5IobZM?b!zu_K z-p< z&P&cI?ODaFy-81=9zFeFHF>E-*spEZOyZ=YAG?~iml#kqJ65b1CvP7IlAM1d z`QMA0XjAG)qd;pzQ8E=uc{uOmd-5qiGCwkpo=J1gwYhF)G0xN_B9o-zCUk21UbYXG zvo4V{SLe&dpXO!0f6n=qEPd=cXU^sR{46`?|9rRHbFBIE&LWTd>$6{+Ip3ex=Pc9p zJ>R~z@6hDA_ma;O_Pp-mESUD)b9>?iZ?s(YO}XXErZv0z?l#_4)2LhOh+O?0W*{`j z*PXv;uu)hzzR?Rqdt0@R54eXuIqoZATNwQ-Fn0R;$F?)>W55 z+4We5$Z72L3K#sw6As}5dn0S7;UScSz42^x!Cct2%F5 zZR7?c8yRu79be#%y)mrXIh=!44bjPk-r~-UxyPl^m(9U4=4lISCEPOo zgirMNv={v`;Jz^~Z|!Pb+&sRF1+!-YB9aN2OGD0N8kj%!yu}6<0J6=_AUeb#GQ23Q zIemKR*vMJ_qX8eRDRCTZSZTe)Y{`Cwbpo z0~&}!ZPdv{*$=GwMGf-jUCyp^e|+8-^<1BQ;&d?2(!h9Tv{FF!V^$_ERXwABGjFA3 z8z7~7ecbazJsRMl^_r{U>9~#mmiOPT{poA@*P(RuW(yOa~y((83SbvtQ&VK;5PxeMDwAg#MqTgi9t;ln zmtYU?3aAqR7uLzp$gVRHReH?CE~1e2G_Z+QVA51u$2$U{`=vP$gBE| zb+Ls=7wz7y+qXGtyNAkwEH1K#`2Q8(bm;X@o2kc-!Kf^_fUkB+SGoO*-u|nYN*(9z zx{qiyQ%RW73TaG_JJCnx`-qtfMejsgWk$|4InLwjk{i{>{xZp3< zi?M}K^N7k|*-6(q&!AMBp53DAoM7Q3Cv=wPG4pft$jO;E&Y5q>FX`{B2vFxGYo(Yc zDnr=dIAxu0bG9R`zqX}b_4Fr2?g&4n`v!j7>tdja-Sr5bkFSsI#QVgRJjFhq!RvW{ z&(k&YW`f(y^|*8GzABGx51;OG*M>#Eu|FQoQSz^Ei`zP^$#Z(YM*8Q))zj$5zXZGF6nWBJH>bA5c9%miX+hE`J+uimzMp+tx^R>OcAyRCqxW=q~OO?6SORk7CMJ6de?cB^8Vus0~ z2TBbuC&OzHF5%s;EWUU$@mib$RgOT;@P`~=MT?=?-b z&H0hLP^9}+mLge)7&q3GUvPq&z(V9U24K07QPQf8OHv&>^HPf~(zz4O)o&J6Tv=Hs zchL3>?(<`w-h?1xMp%gNugJI>5T?H%Uaccx!)u_@fgnAEWeut@Yt_nsocU9w)H%i% z+LsJ_O)5Wc^UT!DZm`YT=F|D~Tg*3ezVUpw_*VU^zPBdqH+Qr6EA3x}-ZI7^@a~g-;Wrw-86Qu)+T<3=TpZ)rFKllAh=kuqJU;h01<-1U*kN*--QEKQ)4?imewmlg(~h!M)u&SqtsMr7Z=+FF@<*eRsDa~^>g0u zb*b>{ zv@!b4;Q({~PWAzMDZh+;x}U$lzrLQX|L<3IPM+~x^3|JWcN@FNK1S6PmDa)gLCqUL z9x+Ou7uaywFljm!k`t24Sz$meYtRcNI6t}XYnp%1B=Hh}!Snqe>ZV`tUCrF9;W{l1 z30h(zmcRfZ!XTw!T+uLqLfL}Vq-dT&0O1NO;ywE!zE6>V;%RK?yOYBlj)HheEzfFc zx6Y7-4w#q+pDO!3dzvM;*g6*)p1}cF${u)l%=xDQ(EcmkwxkjJD)wxBSEbex32D`3Cx;kS1?=%02x1mv zAaeawB4OAMCl9G!J}I4Dn_%GN(#bVBB#KGJx=2AJGIoLoQu9JE;@K7`d^>wV)tuS) z57}u3VX`z!w(L-Jaq!2*yH%k|#0~`;1<@e3!x-gQcz`UB0#1-hv7j#qDeLSBh7sOZ zNEnh5>{LJj634g$Y={j^b`QKT+93<9YerH^%EE&u^_}=s%*ry%mMSTW!(akMEMK%Z)GWc?hKpAcqt7Q%AN?~n_>|W)Xv5uNduPNtNltxF%%~ip1A=j`%pCWVEWUVS@IlH7) ztckX_Rlb{3<~EmI@hoJ`ksYg_xj2bWQae^Il4{9E!^zGz&Rt%9hylk|hmENdFw8`R zO$H`S6FjAiF;*asP>7oFL9T#wfDI7@(vj7n0#eY-U3Y7JX@K)sgRMS;w_HA5y+6ia zMWr553u6IG6h4X#7ci_`JK852n!wnB8BJx2zbTQJD_~|YKbf+ttvg_4uR@Dor`;tG z9DhG;;3jKQ&6$18z7rl!SK@liCvGVymC1FK4^zHwUS#!Je~f-vI+0kbkp^p6TL&=c z0m1Q!1BUOrZ@VTz)8m7WBX75wpZ9W<>vXMwwD^(o)W7$`YskEQga?M(EWe|>mLaBz zWg9*n&hQ+!0k=5et0%5}{ft{&0PsMy)K=>F{-(vBR6m^DQPojDuXZJB%oE&&j39+J zH&<&-*G$RT)Q6#yokbw5S|qda&f5#h;S(MPN&xOlck%S$hYZ+RK-PhKB-XVJY0 z{drIGyqt4@>#URRU1M35bH@Em31T9e1M)7imU#E$zKEMxPwOBpSrRBc}{Nxh+JQwkks8;o#Cj zM-W?`heB(7(MWO3E||7aZD|$_g}g?Ng(mIF#I{1h9b6f@6=AWnhnsUk7%sfGWnI`- zwAa+^b=frE(V56QC+N%vs*P%di3L!n7v=@W2!UYT7fte+MoX(Y_T&g!YvJpG(R~)u z@XLiv3M3wcaSP0c)=P&%yyh~GoQHpD(}s5or4@YUUhIGiy~`v|_8uwmKr}~uEK)b< z0ljU!H=W#zs0i~|Ckl{h|5zHB@fzTF<2I_K9#Qd3$Zhfa)#3=gfl znoo3Bpuc6V^B#7&6}aA}-AcOFUFLC?x-sOeEzh7+j1fwpk;f2Cg`dp*C_3wOQ%~dt z=D}9&6E4e5#Y6^^ngVs|=ts46sf<~RsUWRgsS(WOL`E2uX6486W7||g)Twk{#X+qo zSS^hh!iDH;yib{nH ztiWO_gsHG2yWj?iM%^L+oc8U*l51)TUdHTvO;el?TO21FPBC<840Q;@mZV8t!FEuA zN0+4pCGe;M%T$i$;IJ70M?kp0)e;pd12iLzR_~667$|JkTPh87CSqoonP7O4+y;b6 zvj|iKL}%6r1Bgj>j@E*{h{`ByM+uY;;{l^3(`aP^UEqK!!p0FZ3@B89EJ>Q7k*Ka# z0TdJ|9KZl}z}9G4otFw+_mD*^uU&OxY)a^}RG6!1?HQ|5lgf*ATN$%jM4cQQh@g;X z3hid5H;9JExWz+2TUWxQ@UV?(6nzXQq^vH^#WmM@i|C3e(p9>F09&IUfhkior3h&f zwQIeeMaG6u);^t222B7m^lieD+7orsM3HxqR2KvSVR@|jG=@MKWLZR?>5nvM@0v+SE=Aki(hkFd&>(nsu09o=jS^*ZtigP*@pofR2aE(Dr%eH&o$1G!? zSikVummUYkli8I+5nv|yoC@`9C^)jL)3IVM|em|0Xu zg~!-LY_*Uz9x^j6a}kxM32l;leU|i`r|_xI#Je#T!*I}ush??&<|SuHEW)nRQPF^kt&(Avw6XT#>mCstL+Av(JP90059! zC>tyKDqM_Mu!0Ka(nzkEIC6Ae%6Ci(!ZNd}2_%@H2Th!G-c!THY&Un+PNJ0(_E0UA z4)QTK#phi(B(u~|Lv?RQtj$#tHfy9!d8Q@S&Py)L-N~*LyxIs1>FqHi3K2O*tIBF= z4%AtKsL+!j0euVfm@JJ1zKYqI13g9+;4&GxtSPgv>|K{k=bF{eL=OYmEGJpfRIj}K z$UnTBJ3F8Eyx$@cUALZwam?d=J4Q$teL?F8oaTYn8IllYqFSrSOqfd4Bq4ikdI0NX zL!<~8=+Ur7n4>Gn$)}j;FFT&XjE(>j<%pMBk<|&PJwlmOW5+Z=t{8%{q%j3U*s_Q- zIhz;}frBfq@w)>1#NB-qOCDx?E84U(t>|ZbMuzhtK`x%gvbdqR%W|K$%SLkFPJE9F zmPAK-oEEv&!jG}>iH{ZZtT7Mdc^LrUdGv0ya^;#89omJp=ROSA^e{vxEoU}-XPyGu^`C!PQ(5m1*KOd&?_H2BObL7zB zZgjyM5^)C~QtgsF=td6XANuqh}RYtoN=h`xUJ>N08fVD5Gm{INkKTqW1%BGkKE9oh$Kpl5zZvoY*X!doVnZ78;1TAgyDn~Ie9V!7Kv=OmNqvbiQ4(h8gIf+MRQAEQ~8Q&$S z^El4xpAOU)Y<=4IoVw&;*7B5LEe(ZnzGhu8Qtd#pC7$MQlx=D{M+b(YsB58FGNlEmwLGLb#%ph6 z&0BG1MNV=zW*?tVX;NGU0h$~qnkn6B9A0QcV>ME0sKKbXjX4(4BAl$Dt`t^YG}*B{ z!t2=eWCZzH3YZ zVTQXomo|+*@*EC78N2jUmfV$YGNIgMZp>s(l%$HSMcOC2OOgR`5eEYRkQ2`&HXNX} z;8IoHOWJYK?(F6Qa}#aHSPu>1DMXOi2aZA(hctICfMBbUy2Vsx@EchP2`+Z#sX*lZ z6me7q*j>M~?~+Vsm?l$eqx|FbXSSnoDA>M1zV1 zn$2j6p0hg(l&YvCONzKsF_HnHnGQCE^mI}ahYO=Kp-}}x8;+x%98pwELZdUT$ElfA zgtWCIuE;TCAS{atPE+rZ%^DRHT};G%#><6Qx;2G;dAc2CIDJ*xJT6j=j_;Ma6&R;om8xSCJ|Mb zFtyCg=)@s6A`rH=*wWWzb}(je32}s1y2&xfJfrZ}ICbq#u{$Pdz64r?9C_Erd$h+t zQ`1E7CHlrC_RPuX@%HF3F^4F*Ai>f!Qx*+TQ;?v;7z8x2qzTxSy$UB4R;BA@hFa}enyQ=u(Ll->5mBM6Tz06zP<_VZN~kb*Y<*w)>q zL=MsEkRLFV_PJYS%3PI68mF|*sWXL^kW#KudsmO^(q=QJR2_O<(kd+^3d0<0SB7U% zH*_)T(A7R>p2PNIA9P?9J?|e&@Y1a&W7=`MkyK+av-9$>c5SZQ2jrmA!XYhIe37kG zBVfyM!0Se~a3t=4L3gkY>ozbm4?GRH2An&Z)q`UWRyb$WLS8*;chND(1IZMS{Icp;m&!g0|)Crjx$brFV$fw)^=$oW7s=Ns2fx*{n za~UTm#F#F~Sb>r?FrSX^1@5cdGRs3dHm<;#{@Djml=VJJ%`yrk3XQ?X1!={+H!wQwMBbC}68G8Cn zLwD|a^?VI6ja=pdH}!U@&3&r+*lE6)>sL?x;?CapV`Z~bO{L7{`QvObx9jm-{x`>+ z6-#hRrCx3Vs5$lR`sAuP5A7W9Ro4xgI4cjA!`RSNUp+`H-R3m17iT^%Wx6e->9RlG z&4L{KJiv;TLP6m3_yNa{*=r}~&#MUCvo~C1F6nV3OGm8t_RNtiGs#Zo(`^rHwyu3% z!rdP^lSUGADNPZFI^mcSh_FdT+H6TW85>MwazO2+M3N(wVMl{%q}Huq#lZ3y(p0OS zopJXv(!{f17cf{wWw+*jY(F!zyd8swWl&p ziaJtM4NC~3nhUHgbKc`f8ED2vO`p2aaMfl?i=0x|?Fi}ZaV14i&8p*|o8N_MU~(!IN-q8qmjeprs^IjYSOPMEox)NZtC?OY+j-$FeAR5CfAX*E7h;bNOA zDvn&W9O6yumJqC&9$a~e;C<^%&Q1LsDvQoJ4xP`-v~=~oRjrI&Epz0jJ?j_jy97ma zJ0<`I;AkPdrGThdTips2GJ~x&{fZE9IcX~<{62B3@Vt7LXa4B2s?3^NL4X{XmW-AiC_*%`HG4*&XIR&gqg*4Z ziusHdgRm^q7*`5c4k=;taOS47Z=nqF(vZ8PW4m*e_M4z;M3bq{6FiDa?hP_pg|JiK zU5-V3_irBZYjEE+&2o9(5Ao`Dz9T%@KsyTzPc8O(6q=um(S&7qhn zEO1R_YYyb>!zP35c_nTw0_7kKf*qjuHH(_KB9$U#?zLRSnPrHbSpB@Kc`gbO=HqHe z0RuomS3QE$N^{qO*N5(^)|~<#a;MDdP+b41HYJlbpSjujXkNu%n`LK3grY{&t^b{v^Q80jXBR zXT+m#=rRo?mpq-vbGcz1A|`T?CFujub|el6fS@o(DgkBWx4ivX{3Y2vGJUgNn-gwx z`D?T{!hOW+>o|`eVvR>aofGLHE6uXaw$Alv34aqR zSaWy+BIo`Z$#KdMtPX3bF#4)#Omknzg+rsD;+n}|WUJ`T=Jn1pW#|NR!E~m0sk!`6 zeI$%)=sT|Tp`Ipr?;gWV#hYoAS5RLShYv9CxC z{C>N6X;o)yIG=dOem6OrYYElcnIVVx>_jE#zCOAf3)g}%UflY;T zOfm_)FapJ_YM?QRmQbfkno1FX993(?<&6Z7Ya^50LMs(eEba7C5fk`b5+Kr+@Kss> zC1ElErfQ367SamCvi;y-#nwGNitP>c`kcsM0&{SS> zlxmrbp0z0E>4GAo1NBTPSdW^m4MWta`1PVZvc!5m=BFh|<)drVcT^xWQBeU3pNH{* z#*yYI<3*3T$3)VYJ+Lvl6m#$6F~*ov6!0rRK%II7NCcvkm~|vwAS7)9bHu>0Cr5?! z#d!=KiTlBYaS6s&jcS+`lEbl&VO|nBvMy}sfD!_B5KRE7S)`r*l22G0lVHLFfDO0; z5_e~2*Sqg?N%)5kA&~3w?pu!DlzTlUD|_{+=>6F9)1~O{^acDHIZL$V^kEiy-OBnQ zaKhJ$6mP*TGTFD)*yc|eCx+UtHd~;EV>}hu06X44-@iLCe3p?PUa!B$KM&1c?gFL% z!yn&ap0{4RLjvD@uGRIvZN1!ID&|T2JN*ccH6Oxr%oTQPw=(Rn7CYnKthkyh#sEJFe87Y?hdQHdvs)3tVT&`doS>5s3 zaX;u}`;u~2MNg0Ocvs`*6>h^-RBQU;y_K~(-J8n`#(X++>ppvKfW1XDDfi=ahUD3v zS>MZXnSU9*?@xLdc6j{Ur+=E|TY6D{&A8TI`=cJ)bK*VoZOV~rV_m0V%7OtPSnj=s z*X^?22Dm$M7v+8%w}J004jx-BYffgW8@l$hqTN7oKA~O_0^klyc{ZOpzNeE#@|y?x1G5vNZc0iH4xo*3P& zMof|oB$1nkkX+K0lQNSGM(Nm}NQzOE;G_{w6WgsBvv`kjI(5iw3W5l+UCNl?g|Urk zkH)lDAQRM*?xdK-`*8X@Q_{+$XWJ48&nO{nu*Bl3T6!OwTp&=m&D{<7OZrQ=zSCRi z6=J5R)6I$!m$_wkL$=L%jbR~y05iJ}B4biSpfK`sX=W_ee7mqI;;;>Vok}koW z8IxU3dv7Ac0ef`|&aOcKYq`nDZm!Bz}C>Por;-4soCooUWDQ2bU$K zyA8QqAwVD|U8tEdmY|@_hF8hMy{2uy_^6ipx zYX>dbklRY}`|tn07+OB*`Lh&=U$Ue4~Wq|ys$)Qj4HrSJ|aE?cgkBoN7ic06kzc&j)0nUCVHmQ~j zGT2vu+le;S#k%;9PZ%;=FK}ALLm8#dB!ZCxS3B2}ag}u(6OR@8C4tJNxvwT_wT~p~ zHtrsrlPQ5R94k2&;w@@?ICI9)0}vB&MWcs+YS!cQsuHU0<1C+N7wQlX6>Yvf8SoU| zU3}+Zx64aCOK52ok9QiKP=?-9-PjvoDSs#P2~2wO~wiET5SNf(bz z-MN7!r9W;*%S;pq$GZ#AZWCnF42_?G3RUER>EgEAErpA;A7iT=OXpl2AudEg0w+Tv zl4WV~Xhv}ldwV^LRV$SPp4l#zVtI5CM5>BF2WoMuOa{pTOxQSY~KQvidA78`dFBKLSv$sDl>9JgsJGP5Hm)nmU_@gZDH)7Ye~Ntc1R}1*f)Jy zsaaB5P2O^?hQjR?b`1HoG?+ru>vslZH75PusCDF8X@}CO-gT-HXnkiQII68MIPh(f zqCHhCv4;7c!7J{sc;lke(Igz}`t)4;0`Y=Efm@B6S&hrLMq0-Pl*1bezMQ12iOX7< zQxaoGTL>F*5h&w2u`s6V14_3`fizS z`<`Eh$9PV-+Uqt);?oH5fd@PRHC={~$^Zd&Bv{yzn}?8?tSC`=8Krw;8*Fj~n3)Cg zk{8g4oxS(e%*!_=Wq-0)K)ReABj*7ua}v6w?&IA}TtKV>w|jYda3th+y2GqgQ3JBA z2lMVP4&%cdNST~^OyaV^po=PFmX;l@VX$oJtQX&FdW(hzVHzOFPlyr_B@o1w+%Df+ zt`$dF7rw3>xle^sR1*fai#0&Q^u!9q`;T=c&x;;Ymwc#xF57*aiYZhmN{@?oDMdF* zB_W@2FbF3b9^CV4M&@%4Jz=8F%As1YO>Wubf;beQrlchz9*HWj z?ruG{a|O>Z@8RBnvvj!cGI*0?$CdGXqUS&xX(h~cc!j7Y3);JyVA}dbf-k6SmL?De zg32Y$w=}FKt0E_O_HU)z=0c<;l&fQ0IuvQMgs3tINORuF3cJy<`%0=!Gs&uyJBKI@ zOOUAmQY4u@7gA1%9v_aI%C6i63b11)ZuK0EShD*nK1^Ys_akBX7844ceq1Zo(CtMnd86M3Upa?Wrrl*X|j;iSgq7DM%7qOpuGv;tV6Yu1Rz zhD#<8_@>4fGB$K~0nT5MdId)A2DU~^-&Lk2U-w3VoE%E! zg`{K3ZIjtX$OhCNW^w#(n+?^IH=H5*iC5ATQ>XGSuWK*mA9vFPx%bXz#HLw02=oa4FyXOq7|iw#&Q%PnSrWP}BQMOw#is0&*9c9cVmJHXJ!k!#oe1wTp)3aGZB_GO zmjb`bnIX>ZZj0`XEPi6MKw^`b7hAp3Mabn8ir}z+*m-;GHN>8xuTqy+^JDo=r_;$e zbbiV4k^A~;$9!_p67MF{r&oKg=33xkaT4bM{k-MCM<2Le9``rgr51QRBpz2z<0*6P z`iw{a;@3Sr@3lT3?0w8)C_WIDm5LE_ILNHdZ95(gxa*@HSoHE|qSUS)rGsPO?MKKyee}nRrfQx<;t>5_VCEMwm8 zL0Ipmk7K7^uCoQg^n$1piIl1!6Dtc13H`aN=xBg(sj>c!5Uztygud4p1Kj5l;`)o z5D!0WgKXD5OOum2>sz+sscy8jj@HOC^Oc+6s^-+lHI^=Y+v>TDUbC7k7-Qqe^MPhj zh*y+R0*lwPVPu^#eZ?Ak*F;6#(MQ(@Lt}JQ;QDIjseN2gm&vYQ$DN)z2Z>b~k@cW? zR>sgibUCyvQNnS4E^AhXW+Xi!lBduqpad5)eOL{>0I2jUk{EYM?*IxTssMUS=hnwx zo-uIPl9|_6ZUZ z?0uzXn*qa+gixHtg)X}{aO{x=a>Ix461F`m7vwCGzL_7qJ#D&^^J6V->$(m?IVwHu z^pyrtvNwkF&Vg;0%|vaxIvj$+NodfqUvv{Vladz<#iuUzxZI5aONiS6Fl<^V25Yovuu8W`#!{6)LQ@lDf0 z^8T9Zfh5A&GSm*o8k;KWDnqm%<-sh8wLYB9-TxYQV{;xDunGsCgLv|4j9d7Sz^JhrHzd&c!o&&U=C2|*95h|BKDNt46xX5aMWyu zgPh@U`3KX_$S0w5L;)eW_0U#;Frv}M))E|n?$ATFYmk11!Qt9WmmAL@r+&*>dBP<& zFQ#4VK={vwLDrDYMg?8GU~jEOzjx(Pajjfl`TB6xy-W37Aj$^yP0X&HRn^NC^sKiOpQWqu!4D~7)UYC?oZ+a#<+yg{MuN)Zg2AD zci(l3UOzp@!D^7}2hQ{mCyaEkok-;hcGwaP2L+IsEj>~B+W`<7BP4PK>JbFE9vw=N zYq9eV(2Hs&2yBW>m+WhOmLb_Np-zI#hWR4zVziUNJEeN+ye<}u z(Bbs5zD>R=*(K=!PAWw+ou;=%C0M7LShMXp*Wh1=9HgSJ`+I`dA$gn24{LfdMu(T> zro2un8q(OesOm^R(=sWlnKV7!StbHXtLugsKQJR#y0s8U3obthm`MMEY<# z0iTI$h#A{7u4ilw&ZJP+j^t@YtlG96KNYeO9v~QX$sB^ChuJYMNiU}2F0O*({n2OV zKEwJIOP1lNo*afYpWR*q4z$fCM7mo$O~^0eFPAmq9l<%#jpl*w zmck1a5L~srO%k@L!R?xo@l22_X218^kJeUa+0_nuqLT`7fhtPKz&t|c)B&hHIfpMo zMKMGY0x}`GVpN!jGbedu-iCsnx|jo<6xj|ijx`Y z9ZiMzhHi|_ocfznH{!MTK^%rLcS2?tV3&hi*X=uSJ7^AFHQKHsU8x%CRUqBwjZU+X z9W?~<+F*pq>?$efT#rd~Cn;5yQkUz3o&b#q#cpkqWPhlSK@!T#Gpo1eD2}lCSB5mZr0kKOo6riKmBGh36Wr*ZnG0@o+ z=zOz!H62~4nXYNIZr4aF#x@tJ}rieXM9!&KC zJ555>sD`FlwTU;@-QU_4Yie~8?M0E9P}k_Ec^ll z^K6*mHQf3R=Kb6UbL1&e?JQ=dq(qdQf)N@JdZ%ATnZ++IO|{!M6PFL^3C%= z;Ck8S&THUAtqHdF_Ptbg?Z&E>KHh6w_jd@&qBDhTXFO;wayafOV@z9s6QG%KS4unG za1sJcVdJDRzAtldU5HhcSe8JN>OIBk(QC76w(HZ!dL8%KD^Ej^>H~COFG|!jZ)kP8n%d`-EgbOHer3^)zB@n?Ez4dKZ-(sRT(&*eQ! zzsz6V?esC)BbOt6Af?Yay>ksUL^TGHK5kaV{unfJ(KAW2L|`hGrel}>ju8|KHT`$y z@31n_Dql1tfM6Ys?~G++Dk#@Yu5 z4G|kQ&RfpvOk!1?syfWN54z`w<*fcD8ghSZS=vKFK_H=C%Vx!q?@N-oSXSB;Ap9vJj zu-&+cS)`ABTe1z>>t)Y`U^DbKz>VPWLT?(Em@jS8oClopx^Iv42GRsXIE%9sT? ziNg9m0Ugpy@`{*aY5`7(T13sk8|y_T$t}R3l`zsdl#hms2u$rpf>g6Tyq&$-IQ8w! z%k|@E_~u316t6*G>r*{-q=Z2*TB)>VA>nW?loF?n<`}!#K0EjTyJ~h<6>>Q3tfQGT zCbE4pSaYO!#6Qn_jo+SmZfBP=mMr!aEA?PJJx{l%zO|37F-1eu-P3P#i8KomIGfMw znt#m-i!ugP{2QJy0@)Qv&3zEgtNoO(^Uleu0I|%6@2S_~a@lr*N!cuQ%)N0*eMhTV z=J38vrXk@TJPB|+J!vfOD>uTVamsNVXF*?Wx@wbpBMZP)3cFc>;}FEepabPTu-8qP zW=md`w0l|5F^EgXUU zAp4M@lw0!3+|?>8{7Q(~=7G7B;keO-ZS_(HguSp#ks??h@o7V}uoB1x5;ME2(p8~2 z_;Um}F<=meJ8mclsu}1SPKc`|7gka!CV*xaTM5H6b0Cs9@9dw&T&f-2x(a2hXeo)Z zE=}1zm8g%a9R!^QDbo-bMw0C?cu|Z2L9Uo8)Nj2|^ zI&sz!a_+0TSr_5A>sDD+`rWeoQSY}!D7{ra>)@*0%tTQk{`U3&7^wEmG7cNsIm$Gg z=wU+SHc9hr!7@1r=X!uM#GT@t`}N=yQHXO8)YxZ#n%mcK84v2tmUr&NkU0KQfze%6 zjG)jL*AbqVF~M-jB0!eeN_Tp;o>5b}k5S=CC(o&XfZ>8Dhbu6XG#a>C-3z;9%{}S& zmbiKe-&T8M7JSM@d-8`Cd+C2Bp82+X&pA7N*E}CakxY2K6w*zBy&vvrUZUxRYeC@H zo0`HDPYt9Fgt%o=+y`VIasT|*!>*Tj``OpAzQwbZcZMpit9r7ZMshsQ{guxPs>ql~ zHZukQ%EW>iY>uq`@%u-$te;D7oh|Bs*;n?JbGgu6=f}IbXy%6NolA11bH5lL+jm)g z|K<}v>mU0-^JwEaSgKCqeiQd{J|ED7lgnD5^eKh2RoyTL&*RsLJI>sEDvt0J7It59 z%zW~*-FBU)HQ&rfY^%MdYV>0l`hn!ev#5awH%i?dS|-;6L?@h}?|tq*yl$fP>I@8t zAxyej=p$u#d2CsE+ITbV=5I}xWu&hvTd$MC5I_Z8S29S3%|n4t>;!Y^Pj10h1ucHJ zs!_FK3id&s3bUoJxVuOR2vl)ZsDT&YxiO_JzGC88q#TyET}j)5NTns5aH_7i6`PBX z)s3sy@i_vp3LAZyUbFQO!KzyA1 zbHuAs* z%jP}=gD(Z{%0EqP49YhF=Fk)Ec;kz;YxlJPh7P@=Z)`d*XUMtMvHl7|E#BhO2#kPq zis@3vz?Zm}zT3FHs5PS7JAbMVRrdQ4y?7CiI$ke59~=aZxzAC@T^CZdg2X;{*}*-O zp|I3BuPH(sxLlJDA{rB20xW$zo`is$bh{RtN64^(Vw>I@!9rr2?}qnlL!KYeH`Gs? z$dfo&1NAi%;n@wqF};Wt0AZV$Dv$))sI;P1oSYdtLsxSzoI@*TSKx#x6SkMD?Qy?9 zf2OVJB{!XK%k+0m-v{mH+gdLD$*GUs@-H9qHGWgR{kX|2K#vN&)-ttkqB17XQeN$< z4PEW4Py-^GE==NS?&s&gr{h!5vFqp=%zusVH|a8;e9YIXi8-|NiFsA-=NUd<>HA7i zKYBjd=o;KD@vv*7jiT8^&+__*|SzuJ=%RwXM4qFr!a z3gg00Dtq5*xH91!)E9&8R#aR#Uck$)spmgG; zf|Z`?(x1FMm(TU`TAw|%`f2?4&YxyHZ(iQ!p31ck^@hB3N7Ql2sgJb0jHhBsy!O}|3vVx%M#_m_%s|(iI%W6DCQDU+O0*1XV`ad4Nv0f8KSS9 zk{l^GMRH)T7f*}Cdoq<^k;z2vpg#xyhl_wTQC12rW(49)$*Kitdts73TSGeb+`*+ zyqpDUf_|{A4RniN&7RwBysq*1(<$CO<@L89y5AgjXSM6-uW?q^cDlPui(Y^Ge$*9l zUyoqewdP5E{C1YqlJ7d@aq4z19xx5Yfg@HIitNE0gLM0O!j!AQuHg|~ud~+rlos_I zEBv^(v|1w!S?9Mb7(;~I)Tbg&GiI$MBE1}To2bA4P$`DB{qYwMBz*9}fLpOtO zXP9geKiqjcc>3h+v-pwimd~Hh$C<2+Ma~gcRn^|xwy!+Lxggj08vLHL+*x^=&#V*? z*05p~i9+1sZBuoxVFE-^5O4+7c{v#2m`=XFw>>-K8|&RS%>_xhR)1RGP)4BM1-@oB ze9QN?nck1Le;&b@HAhD&6z#kOph#{qb_imL)AC?pQE-Y+308r-jENUy=X`KkF-w zWu%Ncj_QUMvMCb$W30%fyr5wB(Ah8BcQKghc_+h1F8PR>Mj{pDNqj^*h_Hd&d#M+B z+6%3un=CA-i1V(y1Itf7?01Lr=v8QFcxZG~1mTF16S2kC~ zoyHE6!z3M8mhwJ`&fm=z=y$dO+FQ{E-kEuTC-U61Q|q z;y|(c!Mn8(UfW7lb8pMd=gJ0xLHCFI)2;1!J8b9tTq=BYIDh-G-Eo5onRuOXM}0W_ z+RbD2^G)4xb&X=9bWDxxFT>(qyunhM*fmnmDm+EdJ%fo&1w}{%LX#bUmQIQx2uJqU z2a&`&vd1TTon$=eASeV_aSndG_{+&(60)Hp%E#A0l_9@U_Yse@eh}y)I$Z3R7JWbf zM|!-?Zp<~H4mwo09a=T~rp=AQlpAlFEBcOA;6_M&hwCDs<@)Zs&dZd%biK#A1X4^CBV6KtE-CkRRz_SnD$D*5e8 z{qs4G(MR?>{Uo;T!|l__k-o9-I>dhR1J108m9Pu%s_m!=+BLd@tzu|4eX=16O?*S+ z9Rek1I`a#?0%|&^!XzK_^W}|X;o$^)m?q!Xr2Gsm@Xoq5;Y8=T?t?#=(u}3%aXnR> zTo#!v6ncwR*A=Re<4N=$jL%`<0*psR-Ym(Y#>_!lS*nX`YCB{w+{3y6p6}wG-@Lsu z)Jy?uHjF%)7`f`0^}RRPFP9N*vUxAxnn85s%4r-_d3jc$O|11<>t3bgl8~q_?YMqA z61JLT2YuFu>Q3VyL$pKn9TOdpBi8y**do~zJd4&Yl}H&! z@gNA@w>w8V?eiX9gO7AivF6*-fI;%CILWW$TrtWs8ah91^1>>rjGOKJY;EuTYO-^I z2iw-KKgBk?tOo64lii&A=bKW^I3<^^{x$1o*WVc4*0e3{X8-t4&Lt18#I7sWKWkV2 z?#E;MgUqe~_oYnfAOLQEtC5&_1yn)G}TP!1VCWs=bE=nVsJFYkkgC<(OXt9_+ z&-gs@5cHw=Oq>E1Lk&3Oqa#)%JIrwCz0od*4{!tRn5!Re@mykUk;3?bi1Y+8k92G* z765PTwo+539l>zq0qy{<+Pgu{YCDr1^X|CLOl@l$&Xd<(AO1EfO#6IGZIW|L_G__y zn~W2l*1wsYxtVe~oUIdVcG}n3s-ILCbcVL78#bo5iw6+g9WmRUxKJIW`hiaKe2vA@ zmFMM5OxOeW=~<;_`lE7Q$esED%$PFMq$!B$88L{VdkvcnMF1EVrBy&>8pAD3hFR~Y z4X($a=H=JF9&7G@zBogq=AJznx_fahzv}qh@EJ1WJni4X!Lq$+(+URXdYdKBjHPq%u58Z{U%Plm> zF42R{)ZQOo{nJ~$$tQ*TKBsD1QD@2ceq-xZ-0gfn)${X3!=VL2m-Xxz)#YJqLyQ`G z<7kfSX!($M+3hMHSG~HI^rELnuaD*-EF7Q{w#frt$NJIpu`BEOz5g(HI&n1q##44a zJNeUGINrC<*Na*|4_@w3`F^~ca<`J_mQHGf*~c7pCJ*~myO-$PX596JfB8DT*Ziy- z0kuos#n-3%EAbYeZ9hKIA)%KKufzVyhu5i_E|o9ss@$|qJu-CrEHCXJFML#{DYE=2 z0S(`IJ0-nsgwxBVA3l9Dy>CrJ6ZEeAjJ=>Gh%zx(s2_iyI) zDwKZquK>}vx~^4ygOl<3csriJDdg(21UVq7i!Ybmu>E_4zJ-68>m%{AYO; z`y8nY^~FM|Ozy^@8yVhtlbY69w0>7q+^q4djlbIPX;pdq?i&qzfzS7KZRUMb`dxL{ zzZ{MaU8{Qet0sPlQbho9$AY(tbz3rK5s@<9^b4f-xWvx!Y<)s>;d(zZZ(k4nx$-Ek zFJ3=?dvj;29aTr*=YGO==Rx^siyN#VN!a8~(1ruPkqZV0{#ov{#cG4n8qO`i4M z!$d}R0wBj)yiE#w0DvSpGHnR*VW(3%&lICWPeGA>9CcT=hC1_=4;fpEq_?A6D}qgM z?*jz;Sm&@QgU}SmUQQ^@Q3SpRBn(PT$79srf>@1oNtnZqU_m@ zal8cc#n92D;xQH%I;3v=<2=3OW4}7<(y=eCC)tNt&BKkmB@&W#?E}ks9n?O8_wZoK z5Ht;#aI3c7K1?CwGtNxmbX0n(JDMdH}A@Fke70yKRP|EzkSh<3!l}m<*|lk!)0Y^@FcAW zqO0IZcu~ubipD9cm@U(=Wl^A;C91Jbs@Cohe3DVV2o;i*oC+1wK4CiK@?Z{5Td883 z^l1FL<&7qpJJHX@UZK^}wZWp<0+&PCGK&wCoG0dEST%GIrxeCU0x>T@G*tqRkK#oX z%)BFno2UDEQNDSCb2^ev3L~1AGr7be##V!atXu#zX4HMOft%r^r@LXcKz)+W-=q)l zqWpJmenSv81lRVh-7;Th*DF5)pN@Q+e7X$_vTW|)2EFzCi@TTz7P+@U?Qg5!7KyPq zK6WebGkaxh*h8+Wo|2!FJ(ja;jmqTE!`7YmTujO|-_8^@9;~TJajKibN{B??KU}Wo z-MdO3GPMPCIugztW>IPr&q731KgD@`U7wb5e4U50dSsR#tS}>3PbhJ`lpVvb@X+C? z%+BQLCo*?Iz4VgoyPeY?GtP6~?-dW8(vLabt@O2nJEZGz`R=G0EgrACunPYG zq8W13L?=vie$giJ*-77arV)z3)YR z5^>|K#D{F?P6FDOcORaHg2Ks!&luZ%foZl;LI4PGEJH`%vwq0BqB1oL5wwr>q_@#5 zISE9HMXLKy=WyE}pC16mVJ}maZsfh1`Pp)Ev%s_|V|TW4KR9KU-5%K(u3@$ z0;;;&NYnF|5A8en9A^(EmdmNe%ITf6+pAqXAY$3?!nrb4Tu*8{8$r&BOXpyt#*8TG zS3q_5*waYH;H~njX^Q%4g|31kwb&XUT(Fp&X~?HxcDDdt8gU~BoQb~Cd{Yhq_C^j8YsUiK~+_^IE;VpVs*_!zBlOC7mImQ>9 zS$zLjI;Y*=TiZTQFmoKATEH`pDu{Jo^8JGMG!<=yqN57Rd)wO!4)xkPPGw=9mV^0F z`hUk%IBR!Uhc06sK*T&@CIS{d-kkfksO(fV#Eue%zH5|EIW04#Pjk`US{I6_XO z7*d4MU}e9L#I~m;`H%rQ?z3fra%G{=!`&^yZ8#oI;DB~FO|~%2Z4x}?5;o{qv0^|$ z$BhAk=QR?|;ECeRJ;{d)(E=%94Dsd((a> zjIlkh*gF4i{F`S{ILd;s>%N{kpZo*xPS40xSfcCv5!+mmVbcAui>s@fB`-^KXYg3= z|LUi#uus>zJCcrw@(=INzt7yRUF#{hhi9AzUtWxT*lX-9@aL+=^{&+W-(G*)wO(Z2 zov&YdeSA~c`1SRZo#$LpNRHAYUKCwe8pYCc*b^{Na9I zK3{)y-tiOP$s%NTba%|g{Jvi0G(`)_2@% zd_guhW_zdjjbX0NRo5I>@!@^i%TLcNjK3syrdy{ZeR=4+ljUCYoIlN4c+4tXTjAx2 zFHcXcnP225Chq_6yRVPglKzDc^To#xYqU2teVn~@5q#XA#~BRwN9%Z-8E(t9n{^kj znSOAY@ov9O*F9Ceoj)1givC-dw~@<``Mk$KHp6iR%vKvG!(t1;obU)>8imk^HO(hJ zS($Xiy4~p^(HPwU)6IA=?-N{{>3+|*zXPDDKYDl^WXCu$YLZd#@TAw97TU!v!n!dH zg2>g!paSBHf7S6Tj$e5?Ivk?-@l1QT+p)2w^)mNL-#6aq)z4LDSoIQr>tA8xj-M1X zF7IQRU!2#e<^!&U-D&>zY*jkbaQeCHa$W#N@l@zD%eXz(Wt{67ynejKX|6SQm>SRt z=y!!%-KW&3?usx(RGmi*=`J`A-PpNXhVkm8)w%$VxqBKTnFCT>*1^ddwlK07S9XlP zhj^yU^L}P7+-^vlTDaK^ycu3O`Ndz*aeAfO%bH{Cr+44pePXtleY=;=jZb}ROo!Gw zwS4xUg9pkXTIV_^?Ql$*P5Zo_xz4tQnNEPM(C%=X7QF&bKGyHWKWk0rO=ia2E7g*_ zeGp0}!Nix9#+p~#j~;m)e6e}zDu3tneaPRP&U&>2$fO_x$5C(#I%;ZasRg1Oe87je z8f@#_$Ir;?&Yn1I@BIpDwHSe3a1FX@u0w5uzP~=j@3QW~7K`999a(1pKS030-!mNq z$ul9TwWk6X9UbmlUq3FxXASFnyt4ANefR!_wmTV@_u7uVUwGf2kJ+c(%VQ0)7QN!H zqv!fkVHw&Ha~sx+k4(6*9dNyjnQkO{o~Db&6Sj!nFvBUIDC6-ayKog%fs7LnAE9&9e^IJD~wTIWL= zdaHwP*Ujp~-x{41Y~O;zxxFSu1#oj}{rj4;(7k)p{J71y7pYk2U{yWGowY~jGN4H0 zwLvex)vs!{)@n-mNXi-VOo$2q#mr@OX9dX^rI@HGBXPGT$;G6NK8uVhiPoBdkGxi| zS$`kcpgJafl7AXZ5YNf)FHas*LB|M6#Ht(K19$E^rI{>29u2pJxA*fGi9Y}yeE4z| zP~l}HO7v;x0xW?Gz{CoU?ufoQVfQAAgRRcB%szE47CkM?PPD0%-#gx+wB_m^vtJ^_ zI!9EQ^p-(z(-G|9b;QQ#pk$xcBB}YY7U3-C_1pU6eScZ~alc9De!#?h9Ze!*JUTq? z_^AsmR>TL(m*h$>Dua2$Luj&=nUW`(#le4zcOiv-RS4%@^XgY%K6cC z?)5SC9eeEB^?UA*oH3u{$;+stGg#Rd(Ed`tgGBbmouKXbnDe9Dk)4`ikX z=eU83`>2R4()#_T%NNU9IF!rwXPJ?ArQd|%^{1d3KUARnQuUpNA5GJ1 z@+I1EK~?=JslXKdx`5J5t+p_Q(weAo*3^bAE{t8ZXISpa8&tbY+=Xd62w|37hCK^6 zV`!NP*n_;MP)?fw=LEUe^9-L*e-!#-5}L4Ye>?1h(INybMgT(WMJEB%unk9rCi8B@ zLs{+Pca*=isNpqIu0+}Bl;Q7geG;mC`nr$$*lwtZw_pd61~ zn2;1B@HOFNMUe;M^n}^EC7|4Al{M>3=ZNT)b0TAboDMbu2036ACZVFs2l={Bv7c_u z3+j^^zmw-VKOD+{PoDc3oXj<$U!RY!>0gY)^|{siHuhx924iq$l`yb3TB&7{9&UkG zwflk3GI>|vD*t$wMtW}c7*f(QZ_&O77UWCt{q#BZQGULDb^2|-S@)XF`B%POH`Sl| zzfSv;4i0R_{CpWdVIa9vkR$6Gj5Pb?#NCkpkbV@p$DWGYg`sWUyIKFkc;1HBoJ==^ zw-21)$B&w~FgM@BOVukXSugl`#i;s;6K2e_zP86Wuh4MHtjS-k9_yrVKZsBBi``(E z*ag=Edo#9ZVLqzy5(!V;Vjul%Y~Ou-@T~Dk{_)h@$){{z-pu?ad>LQF_ANWz_-0ov zbJxCoRBLRHw!h(+Y=ZIeG~1Ek8;W16=W@RE;cxsG+i6hjeMf zQWUa%?&3#>@u`lOZJ2s0{(ZHVD#L`6$g6z8tG9=4?}vy%?qQggP1nX3%Wo$iJ5F?Y z;eNRyocFhk z7tjAwTmAYKHJ0c&vi}T$-wVSKR1hR6p=|+ndUc^OfJ|INYWQ_Ld6mL-{RP0vjX$IkJx*@B#AbX3v&U!xCf)w2+-U?kYt2?U_xV zUj_ZX=1-#5>N0)5>3>iIDtj=D&&_*IeRo%fnUA9OBf?$_mPVDY^{ZX_z%yOW`P|Pw zbXYzOAFX}Mn%m_CcrAlHlKb3OuuFAzt~psxoUPjnr0hRD+QRqVcxtyxB<4bjW>+sPljr!>o)g$d}Stn@@M zAJLx*$7+km`=cNG>jXco|H3-X$orVlVk-Ih$=;76XN_8&F5H~dx*y|HU8MVD*0(TR z7?EGlQNuEqLeAXZ*8N-lTh9E0uVMJNQn0OEfuG#}RbAIDcs;3SPdB*-^ELY{zgM|0 z>2o24%Xuar?t^RleO~{1kKE3(2i}t|)?Q&O9EkHme!vRq0y%-oX^!FZ&fn|g_aJYW zHWdxxSO;od!s&DrtAwMR)(htQbPEkyEN>>jAWKnq361hGfDUiH zy8$jGg(IzA)JzS=45FKMtu{)$Pk;rC#NPc*eq2{#cQ-Zwo3}?%p1>J?I^{noCm|&A zS~%wq!&*6`U<}1u*XL!*6)Voo@!rifEwQuaTh5;c3g>ncJ1n)&*2R~S-#%n~>}`3) za7*{?=>uj;(Z-MBpT~R2@j(4i`TR%!k#nmvZpMD(mczy`ZG-M$_PFtYyr*?aym8z? za<@p`%0s&(ozH4HInxS*#*Eo=c@tHMz@GE*dLrJ50#1T)$aKSTK%Eqb=Z=d2&+ZLX zU;LQGH2w8k#fn?#YakoGFgr`hj1Mngptzttg{b| zwSf1r%bEr)$5&p~_jb-%tDTw!v#yxC?rP0XyafBSKehtpVN&^JDwr1w)=^r9t6fn* zQWSaN-J09_AQg;7c-I+DnyKV&5aaE{9Z-oDOc>MVAuL-yyRpjQ;*>aU@f>{?*^Vbk zbMANY*vsMk{IySe&8z=v93v`vnIpH?`xupGUnl(-7>CFjkzRNtxB0C1|M4H@|9Z8`OQ&bzIp}m!f>)4-q zsqyic+n0JA<6512$UZ$49+yj8D#wDwg?+a>9^Z_|vbPT4T%oqfneXS$F2zoPVZS&n zWi_MEDeDE=-8BSM2DZYZIy_NC{mL))ZiHRiC2n?FEo2i4TaXGWfz|=&n3aeNijWQr z8c4F}c!k#FYpp*WTkWVgl%RRQ( zR#yn^>A?k!Q|-R~67W6^4s84JHovRnUA?tEo?|j%)6QX5DD9GxirNm={Z?A(>g(L(_)hDT|f(Z}E14Ndu zk99(MVtVrMVNM&V!SNEqP06z6=$wythn+d(FH+eLOX}(bNS3TKdKXA!sJlsYP_=)nX8X~Xj`>DU$^OB&xeCzo8%qx$p zE#D@`y5>B~<$#^urik05Mx*el2@NE@o^5B~ys~PLr|y;2eqCxR+XPpoi1`u26*0pZ)T)t~f^VKxm*=R0_t1l?_~wreeRGpT|#23gG31;=tI z=LNyT+T*?JvT%WRypHs_q#jSM(PMLgtF63Z|A8?6zT!H(X=`W$pgHv1x?Yn+zKbc zuM+?hU8H!%t}Zjp-007V7?{D(D7LWyib^9j`}CaDvWht6`6)){I5?;IUi)MM&e$x& z7FVOAi4VI_%QX5vs``mv6CFVhBCDEE*7&$BmO>$p@pqeW+6+d|@N*d7@9W2^wPlC! zaOe@3RkT}$LtJ0EqT~CD{QH*0T;1+X8wkB~gn~O~5;i zK8u=paEl?QxH)zsm}2naW*|v&s4Cb;OwknRg@={vIOzrlNRyP%^`9r zR-S*;x&U>bE9@|%(6Ucb+xDU0r8`sqWWEb31t0sZv{eK+OLX>Uc^~)VciVQlmy3Pl zS;sc6dS0;lW*TH_v_$DuFAbE-exW8nza~lL(|S!wQ?XwR=9}z42y&Lvph$K(xXhf? zp1%1E+{B|)qZPHJKbAjA&atMh)~ZpJ2gYOj(l#}pQVAlnBZwQa3e0?pkg`i~j^un5 zOcl$f6hnidU55suJr#_j!afA({^CXHG9gljK&|V~U%JPG%zh2@${(=;~e6i?tsRiJJ=B$v3Lk(9n%PAYdGKuO0 z6l>6F^gK?e-Z%w*sxO6E)X=F^$UH)r9*+J|e|fSn$I+WSN5 zXpxWZMl{>~@k{J^yzl4}k?^^75PTJFn!c#rl&^$6NE&R(XbGkf3Qi&w#r+5$WcEiQ ztT-*8qo$WQT!^Z)KA5q*YN=6_<|b4|aG@O5(1w(BMEiTjVKI?n^5K#^yBq}j;|*LI zxHbon4V)#Zy>Wn7sZ~kUyc|M-f^Az+4}&2QWx(`ct`02kx(K+m*;ojL z`H@j$Y<3m1$`A+Pl?`UCCocPaY&DmBELVKsG10A?;#$vh`B=-pd{I4Xl)P4czG*M~ zyRVR3ea1fCeved?e-fVuS~KlvkV%?_h|uYstokbJN8B>Nfp4+hz2Q?B&QVuCMQs~GF9Lko{ zY@Q9Yc5Nf(;1aXH`U(Gd^|RmcJh?+>Wq@?X>wR$Z_Q!YM7S>If`|SsaR4KJR99WKK z%l>Tad}j6fE^^gtD;9F_Xi%`pmsyW+YaYL0LZfDB5|)8x(0X<2d%gWBnuVB44BiHy z9pT(79)Ih6YwCumm|Mm$CY-^eW?{+XIeL)MIbdch1mK3cN)(ZhkSOFVml$bFQ8+z{iAy+b6ah~Rf+md7 z1z?sq>=KbPLd4qicliCnA+=DqK%?Dav{8<=Svog)o}H|BjH0Up($%+2)k9`_@b#XoTOdy)kr= zZ-}u`8jNh<9hu0AGiTqd#=OE6zzwr)yK3)5TSFmZLDiIu)sf8!+8#?UEObLdq!F?i zL`W01X2nX4Bq1vR99xj85I8oYZvt!3bk^ILNVT^aLhqvuN}w%hZbURAgXmPgEnv~eKQtKZ$v!+3OM}ph2X9V>b*Dl zkpq78%h#_@YucQJucz%u+T67IZ7tt7zArIy*iw8R%ZHWb3N_O(JvL`XeGCvzoxQWy z91!FU#&_Q~C0}O#>7wl!`J8U)YJ(!S-Mu<)%9DMe7(SS8OSiq>^m#{)hw`2zyuML8 z<7#8iGPPn$Fii|hT(-0H%vrLkw&r!*WZyHDKvuN{7y=!frBDu*`?u; z>iS4Qdh60J7%O`%E*ZwohxM@USG+Mk0#kWU8dIX%j77v1aLAk46OjppPC*70i_&#^ z!$E1NawCo;st|x^@F7s20=`a3b}&P!6dQY54Pzhf2VxW~ z>vfDkoG(1DK9K zni5Y3dptF3Dm@jiRO~8cxH!B*q_9`Mwq;FL%-49Mri_>TJbz5zL_ddrXe*mnc&+W& zx+$dteWpoeVjdw&`oZyQw$JOGiNqxtcRu@6vzCNwA?)hgdXXr~A{x=iEr#8Q+_V>M z+Hn)sR5s28Scm|6th!f*FB`8#dnj+J0T6ZBoe8yhxOIRDFaGC2yuRJd7HaX~QC5wl zVS247Uykq8^-c+IrZ-($`*kn%EDVo^iZ}pOz0d6|3P$k2q_vT&P&z2_1{3VjB$Mb9 zLk$a_n{wWls+ei0$$FQ)d*t&+!a<A&x*zk90YDnj)Mz}3eT&rzI%ybQ94eRWfaJblp8FYYVUak7P#w^47$cpcU? z7DDf-r&2qYa*aOjhfI%G4`*uQu}5cr(Jw%m** z@*Yf>22ObTWSJr<4qRiOZ_izFtjuFdoC**PjFM|up+6rt7FFqhev0?0L3jNy@u*$# z?&+xXZ5Br6GvlFBrJv|8Of0p`K=7F$p5#D<@qk2xGZD#q=9vM5AZn_Y>k`lw=5{`q zA*_JPeGJ|Qk!&GW+uv>m2h|+ng1WZ8;2|J{veN>KLjcw3zS=;9JP33X9oR4dXnruf zXmv%&6DDg@yleRCGy>6ld%@*deXpA@lQ~xFi;>0r-b{aYxwDp^bxHNzumK$1(iQvJ zUiYIeW0w7$IqdCa4ce7cIApjy3vr5!ik+_xzCM#M36KJ6U7~<&2H$4AYx_rAUXgVa zt@*=4m|6&TNLZ`rlLnRNr{R@HilfYY{K!n@dRRJg&hIvCYG|7iU-kjd#-Rv{CGdyX zi@;KbZxe1();5=|i0AXQ%SE;Z!=s9$o8J31Bi+k8Vf}#OVao!GT6V)X2YsqqW+rdg zr+zFvJI`BNc1MOoE~*#DfW1i97MipHZ)s5ID(ia3I4~(%BR4jS25e{GD#n?xC#e`^ z3q2|_MrBvu>kseK;dey`R90CNT~FmY)HTsWF%H>}#|K)58G3SWUbVXYEZ=sIz*@ul zPFrT*vAUfvaW8acmjdm0$+vG5uA9|S_`vaGs>TXrBezWKR1dbj-PA<8u{mYfh~@Sp zWrsNulMU3cI#(~rem`sej%|D!arZj3mG-%Iq>>5yD5f>@X)RLHTAqi==2(6t$2QL= zomH~tjmw{R?C0>-i%*%oV2a8iL=by6OKDVv4~LFo09xhCldb^upXzQuek-uu;c4X2 zoaGJb%gOucrq>Z30*A?8i`)0u7T$zh8a%F?vfuB}|3YaL=GJ@{-jv|u3{57ikau3A z?NFumRDE+JOs!(4R|VfN`_N*Y=R-GK$&;lVdC-5f%@2c^yLrz&y9;Y?^?u$xbr*rx z^Hp$&ch!{iJhX%99XV=UWpSq^pr~;;ynfNEvCl_1vV4hDRNor{VS)-w__$ zKOWXq!9}jPKX{;ucF7#afIi#%EkR7uY!RViA#^BGQ__YU?edYRk`oEnYfvGrNJG8L z3}g$QhXB?!R^OIZ5DQU?(jpfiDxct4I0nUWkb_#6ccF-fMUvRe1UBhWYXJ*Dyj*!yEWRInZ6;%bPeGHaJO-)TIOpZ4)HGFG`0xnl* z^y#{acnx;q*AEDetOpemW-3Bukcv5R)}7^&Hu9)Riz8q%2PxP@}_0M z3Ce~-BP5E9Uq-SfQcShouHg4T+e*74opD`N0i>D1AyGLZB4YVgscjn_Q(0Si1)d}a zj^lQNka{VK385itoD2bxDk4@F1Cj|gYybdRTTmJ}Z?=W70Y+Qnc}YnKhp4)j*l8(2j5($yhxMzil3fe^ryMsK)*0g~f% zI%VCKhQiR$Vq`{h#e|tgLK=JD$Mo=oSxwHdI_(RzN@&OkrlLpC^)=9_RAxRyJV|BD z%Yk5?q`Vg`0BIGV%U4PxpDZKHmpH^1z8t!BE?$PikwV?kZX9L^NAQVydF z+YUUs%4G={)YFztQ7p`30!V6SjwNWN$);9_YFZq}Iz3M|KSr~h8j3?gO{Np>o8@Q| zPQ~8J(*hi;>Tw%=m(i%RT&+|+ThTT`6)~Dj&6;&ma%JLFl)7iK7fQ?@N6iIkxy9d& zyEU&Sh`3hk6XTLcr*pz_(4~_srCc~A$$*1MW~Yb;Qlg+kh!M&qLYq^O7CvqQfM5{@ z87(_t9|C<(%H%|Ull6dvF5$&tG!D?iq9l9uo@JFPOkhlm_N0uv_w`vu=(=-~IdYmv ze~$!nW%FD*d(n1U#tL%42g@wdyM78gtme8Yh$20h{I*R3j4BtXBB5D4D`?SRxW4D+bmXgT@#6R%BkWiuU2|bC)%iGY4NLC zrr?Pi79cxSj6@$VE_@orDQXxGB~@kKyraZs%AlJPsSdX2{Z*h~xQx2G=Se2d*tw3r zjoszoF*!}QCtEf~S_YffGEUi^w!eaO!&sZVi)je!HCKA-`E=kESwkp&(i4dfRXmB_){cCa z7%T%<7A6XzAyQ>jSSv3b_m;Zqg@WZ?Yu6jk$~JH#Tn0+%I;1|($PPw7 zdW*U!zAh+JsHLc&8WehH%~E<^K^XNYz3wu;^S$<$ib$n?wbzk*`@YgN;EVYs5w|g~ z$FH9$M6xNO^9Pjcv4`>)^Bvq5CmeP8=9iw$#}D_wG7nmm&#Z>pqemsEGT-+>w*X=F zkKb;VCO!oah>CzHeYURXa0jFWw<8rmD<9S!S5K@mEd1z>C@gP#qUQUZD z9y>nlM=@Sw=IAa=3tf~)WKc79?5?NY8Dw5-u0<>CdiE+KW1sLtz`n+g+=u?z#ggR! zlT;4A^{6IViLyYNK}_73ON+Ws?k-(%$ircDl!y>zw$M#gqiuK>76s=>=UL@Nxye&W z2_{9GWX{YSN&!+>8Slu^l*goK+ENF^EO=Y#;UQpm2Hgd3o5PEEQap=9X_7JQE6tZ( z-i+WfmB5|EbQ*MFs5R^2!d)E;l-ejauuFf5ee!Y>RKOz0wu=8pG z%~x105bqC_1U;@cXn#6aB=+IkE@@)h#v1mSH&5qXYf!SY&(i8e zHbLBsc8s+|02H8jxkpz7QeyNjd+k)VP(68{@P*}iD8)<0dKu)+J-_)Q{{EZC&kbK? zAk)ibHJM7!)&(zfPcfI;AbFO?(n>MSQ(uD?0*Ml{q z`^;<2;QOfNN#?PAVKw#Qu*xX|Z?3J+wfhnha`p0D{`M57J9~2sUo+v;H@j{ldcb+` z&pt_`y|en}yOSdOGK;e%H>V}$oD)}BzIC~mIi^ebYvC%jUmC3ZOhZcb<}rZ;0cNw6b2984SgA7ii_3hC5{T@F z%G~h>&Z~3ddcI^lH+fqc(dlv;UR5DlW$a(5Ocf2(T1o85T(` zeN|fI%c3e?ZNm8!MEzI~L-)bJ?U4f;w(Gw+` zSOz@92UH!y4(q^{UZL*wSm+Rws&ZT9P^{zxjn57QW>V+F3II`Klh(BL3>wxkCmBTs z!U*L8T0&3)j3}K*6oXU*@UE-2PIg$`+>B4umc(Q^&jX7lzw;)Mo~RaS8}&D27z~J< zRqRq|SJv36FpbT|-6qJ~GZjZJixHiY_K5PB3JFw`Tx%v=bu*t{x-9pMh3<>!u`s1~ zKC(*CEz^ZMSELs_PhC&2_tiHi+PKs2(6}3!JI|*EstXqZz z4PmX>kPg7-=4F^MR*2D?4>~xq9x%VNG|ShO>3# zrZ>i&qCkl>EnO4o3LJS;dETRi?N}xd(C7%nJiii7C0CoSi&EusG-12R&~w1`YTXuo z8_oQ@kW&V~%G`kx*Wh#DFqluJuqxxY0UlgqcM^H}AT(kY>!8U*nHc6ZKOQ+saSAG@&f}xPwj>OKuM!%&@qUMX{J?@)=2^O9J{K`79Hi@n zgA*?p!3cqvMqr+I(bG7%L)JA%8#b*(`4C9I5(a1xF_FO_B|v3sHxjryK{>oQq@;ib z%^lxLd$7y)HWRpD(fDvI4uWb~;b^R_it!Nlea9JBc<9BV= znm_ne&Gh5bnat7A`9WRayjXMX?#lFI-T zM7YL65`f!6@A2F5^GpAsG7st(NzbaRjl^E6;LA(wICgE;Ay&2B5ZcPnOu6fMJYkLH z35AKfaL)YhwC1e6 zJbNiBl@zhZ7&@l-KJjD0Mtix}F4ehXv|wF`cjMZnqDr4Q!NNyK!u|$BQDe3 zmQvU!e0rvjczbWpQZkyj>E5dLCpQ0JYVN z!-(N>tMl?ZwK2ifYUL-^=Qfen-`VU;|A=D)eBac^o#kG;^e2@CS!dMQGWN|O>i%AT*M>Y#dHmEht-*;x zikJ7;<&*OOk!^Wc`FW*xRbuSMv)b#0fiJSgquWjR;p6Ry70upYt_{l}b=UL}dF;jd zsC(rvY&K1}`p(kx@JF$&R+2L$bu}P?k*9SXI7% zY}>wLo{vpMM&~k*yMF~9n!E*D((E0Ykf9u>(pSH9>}$8xB#0G6LX&-_Si44T0R?HB z=_HMSdIu&c;5O>(SFp!*nKA#W<=_VlQ;xw~tp|wk7P>rHqpU_726V$Cj%y#NeC4bw z@1xp83LSGx-FCoa2s=IG{;Wok=U(qlq@?~}c5-%oqEOQGJB%t^4?OTGA0E@{`=T*n zGk{M3k6kNxEWPqPrfS`J%(hcD^_Al-4^O+DO9E}f@u6p-hFbpj&EMa{uJE$qaU7Cm zv^-X-=o$5Ib@wYth0`vEbIj^h4l4ht7AN4X9>dK&41HC>syXdU27xi^EKK=Y zDWGbqs`b2N+4eJiom{YtgN6A|9scOx24GiQER^l`R+Xz%^c*uAacsPkhriJST!`-iG~ z!EZY6;av0jNON+ZU~6q!$*%i}$#P(h9rI53)WxTm9+`Afyb33P;uFd44ssb%#xssp zT+%&pV$MTgep#OrrNWENtgEpUM!_ib+{!02W+}bf_A8RtAwK z8|LLhs#67jFp^g9pSg?^<)QW=;j-6B7CXh}Mp7_w6W%uVz-?hCA8I^wQS28L>yo+m5oESQ}Gs38buK~^<% z1&zsdaNM;@+l9Tu2d}z}pnZK@ik%&DK3N@oO83nar{;fo;2ZIpnn2%~iWR&1{U%|Q zHuNi&K$8$ZMB66VXe4_iJe^QiT01-i8pJnD)ofp^>#PBt~R zT1`TyA$YoI#u-vkH3p{4(D|}9wf+Wf6TDN!IHxE}4jAiuia*Ec2|0P*i}Ux(VMOD_ zdiOTs;jNq7;(JCB`NMO_@^*w+s|6ye@mjlU-L;g;7;H(Y2u7E@13G5_ zQ{?oV{jNBn>y(`a4)^A1$wR;k;ge0U4QO%+W-x+eW}_m9a1~gb!x29f?80!owPT#c zT@;K2T$biViEG?kjD||vdM?Sx)SJkY&)lB5O&&HF!1Q3UUzq2_gaf;T2yN0NU9NMS zI9*l|usxP2dE{5swy0Bd-7Ek9?GAo?Pi;7v-pv@>0Fv%Cg709nwnB@`7b1$xZ zTf=1Fi)x?{9Ky;IRaY*piQSVaHchbR&c!h9F9DOz zM?KC~PaRoEpZuT}7G?_549j36@w7=vX2l{N$F2Q?-`eSihBW44A?ylW?289RiIx?} zdnRkZXYR1bsOlD>1P5?g>`*#F0djfYP78}swxqDsmg#FFL_#-1)kB0<3*8fOAn;(Q zLuaUc%%%DTP9}!HAzH;KO{73oP}Oue>0wc`M`tK+I@;h06Cs#@&XCF=sjHvebSKSq zObpf4ps)t z>V|aAS_zm7CAJ=Q?Nx2KJ-Jp5kEtO_$`Dl4*sHe{Zy+7(Czzc3#hn=TIyzR2)TRZoHCq&Z=XpkZ#yy}gXzd>59Bth0S0IwJ+88mVbK)TH;iy-IV} znJE7Btk0{*p_tG{)rmOuy!;-24Ec7pW;#AL$zB zrnX>SFw<)66P02IZ_^BnVtku_mkagu)U!F&W}86 zuk>E;uXX#YkBfKFJ2X-|p)1|plHHTyny@+CW-qxk!gkuLE_5H*sN!Spkag_j5bZwg zh5Gg8t1`(E)Nn!H8CE;;Xq$U9jW(#vdrg{~nw@tFlfoQ^Fg?+l1O??uC#!v2WHUyz zph`IFZLDdSRJ>F!60bH%fqg}nIC^OL*1L_ zL8dzV)yjLci?ZV-ezN%BtZn_GYRQwu>G+N-ieHB5>xY#W*A@I*$SNFQ*$fP140V3n zfj6$}_jw;a9U}6oMUk$r6o%?VYqua`>sBmM51hw3uzn0m3M?g(6^a9y8`i&3)*@rF z^u}zWdiq+dvIHI(@RZ)O?sDn(`;q$uA z#NO$p^cTppbfv|DXJRa|+`vmJL=gXT-Fphd~yb!j> zm_;6%_=|uJ4#f)8Hfd?;*%ChI_gyEFCordf-2tlxvR?7ZjWrN2MR zT2Dcc7n<52&=bnDi3SU|$y;qt5+gM?UJZl;Is%^FyutWDYoKwRVPNQhWretd3aU1s zSQunl5Tz4BZXXRQ2g=zQ=m3qQv1s5>AfrPDG9ed;g>$Z4GDO#n*|QR=V@lR5O%hRw znl_uDS8>@NQT#F{91CuvH6GuW9&q1m{B0=SixhGkzP1osAtR*Va$?;!u=lFb-Eg`- zU&ICHoTJL=J4pdcc*h#4lT90p_KwiD5Bbs4T06_x7JF_}sGh?wGAs45BVC=~#o*K# zig!&~XLV;8yB?(}5ip{%*y59E4rK4~mKp*&!A-g+Brv$y(lY9RIdU$Sxn2*QP`N0k z#u-|fHwZIWj}a>==H*?YK;>S4!^6z|faClj0|XTf3SG8i0VKI0SknP@&WgI4t{NIO zItuuX5(_D$d#5r>F>4N-k!v(aj8%9UQE2A0jkYtedgXtv!zmnk%!A~aTx1M6^WY=d z!)0XFBOhIZdEk;%5&;#oTgK52<|c_VQ^84GC&yXFmAwkJ25P%sSRl}5P zaOVkPC{=sZM2I9(B*w#0l;TK^PoD=c5F}87<9<1!v+62K&^3vVvBEqAOs%hhJn}fj znpr%^S#DNT-vto{2^jT{%-vKShZGsY6jCF?mC&?qQeXX<%u?75o$5pwKZ!cKS zF@L9H#uY<+^{Sk_U7zyOR9Pq_Tbn#NRNkr-_`oOj^ZOY+-EO_s5^5PG79 zi~vHhO9&_`R}Dw%B+wZeWQiDnvXc@70i#$O7?1|Ym1H)S1svKqvyC}`gBQf6p{JD? zM5csN!~dz`{DH8NFfJ>|^GHFi3b zh6KHp9=2(Br!m6JOM~1+g>og7U7aG5T^vRh9N4t=foy0Rp>+*1sZRTxVQ*9hFCLjQXfPqdhO^>R!$q0>`7lkrmlPq>!*!7D zMvO*!<#)C0qC}L?1@oLDZ%`*ZR6g9HZtrVsM0z6e`V!i&!(tT%sGGDUYAKsUR)pxE z(8VY>W8vbcb~#ku?ma|YDJU+qgWRM9wA_)ULWHe~rvBODTAj~o3g&a50n4M0bAUzW z$6l;FlWiB8VjanCvFD6xDXUoggq1u~x~6V!DFt?I4z_xNeF7m$o*&QpaGbU?n%#cs zuAS;aTWnHWtO84lQ4|qx6L1le%xI4zvcwx4RYC@V~X+KwH){4^A zRk3-O!r^m3gvizWoZFTv$ zdVAkwb75GyxWA-TA-Rs`vEp?$_d9J$eZv_xYJ5ibZw_gwH_#a~s91miP^A;I6eG4W z5S5pOzG^mb3JAb;W^LuS?`orSwbt}2H2oW$HNw??$(&`vycpI3d)F_j^OM4Sh~WTm zcX`e9{nz^0{mac1<=dcZqbn|Md7nK0a_8Tjv;dx-a2#*9=R=LNTpO$b@7d9A^N7-} zL3f-jNX5+D*20c7_T+tyV%Cc%eD?}i1s$(e(nP4fv`5q1X6=2{rl+96Oz{}&vgAwG z4fH<77B|8741-tua};m>X4g*KeT7Y%0DPYc^U4nyqx2q;o9EI_LOXQ%&6=IbE$))++6L{afH zEJjrCI$xcx{fu8edAa}K^ZfSy-|F)uSj_>|*U#z@WGPcekW!Mv!d1IoU3J=QZr^m7 z^XX4M{tuql*@&WaFxlxv)2dZ7w{^L^Ptq5gf3#A%;w`Qol>Ce(dcbKju;GV#h81Oe zzy-xBT{3Ft-Sjx9%ExgdKbnXk&Ml-baSSK ziqr}2_dh~i&DsI4#UdENI)vQTuDg3m)TwDgwj7z}()xMbCO=q>QFS%1NS8BTjx6hk zPxfUd0Z!LZk6?QPH%=Ja%q$c}2$w2OuQA-`M168-uX)joJsQl$LHo0%n{FxHPL|;3 zN!zgvDO@#V3RZCJJC98sZMb>nnnB!lb=(y_iFPkSm^*!SzhAAt}aFJ%mA95+k?+X&I9L|COuFO~Xm=Deu*Moy#5vq2sS&_*w-*UoOG6fFta%;Z&Ot(q30 zD)ph@#YywF4(DUD%V7^a^d)5h7@O$mZU!J&ZJ+D(Ddaz2^xOh^N|lDBlAcF5e8;=M zPO<5{hi9+K{pc!f*{EV@sWHc&4ikPa>=3ukxNY&R-uG2QQHz`nJI#_DzwzP zUBHO{0TU1Bf6U7djm5WEY}e`5Mn|Uh%2bSbH(tkSR4x*fmqfHpjeT=H4_A2+Rt1}H zT9h!O?i?6JW3$gmIbu{B6;5 zt`Zd`{X0|N>g4#obN_(z_|Y-#gx4}H?A*1>Q7%m>>jbDENd-h5iNb>SoJ}z~0tfbd z-v8iPlhwRulPA)LfcDZOrhq{tZ3}x`#6!y1Ij<*7*RTL~GzuwjB)Njb+*x~=PPu_G zz#t;Ula4g&=nbMM5!mfdg`I||KH1eQy+zJI-GuA&sO=cGI<>p(V0v1qQdfiZz;g7} z$;op6@b)oU(ifjtzo=H~8L`H^8XZmADxaD`@<|eqKR$#+JhE_&HHp+p6VPv}BO^|= zu%u&3%>DE{aXZ0pUc>6oL+j-P84g}OY#);h9K%AovdRX2nS0%vrnflB8nSgMeJn%e zG1KagS>uk*mjxev=XTf<1yy@I1tlf;D#||p)ahpC%~yKyRO;<2Rjr%61~`2rxu|)r z#<~P{X5>9hN>Sm^Lb@KJCJw|%VgwP9n<)#CA=q-n2#bI!57ac)6Q*d|yG`nUmWnNv8nNl%$iDBXl`O z2!N%E6iCoBL_M5TBu$7>Taq429#6|;0p(N6Dji}JZ9J?M=~2Xl%{EQB4yJ9;q-X%%zA5RPcF}>U0zi@veUl-Ld~u80fL0vDrVs_WKy zp81{PrJLW?M=vYSww6{U%5J|uy79%=SH17@^soW-*f>8XXQTery9E5Kmvg4({psIQ zXRJTM3e+6XQM&PQ{IC7fB&!+yWQy6UbOEC2MTvwdE2R<>hD z?+P<3hgbjwof{kfMQ{m}gxqa<_O_b^BXZ?BUN2DQg$_(o}| z2Jymco!zZQOcYg0Ml&Mrfain}nQ9P(HJqLJ) z6z#U+w_|+AaBF!%*b2VerH!`K&3R7W3)-o=!*;VCZ#>1grRS~}vpexla4yEWJMa44 z%8u_UwZ6sNp5bk@4K58s^0P_Q$mchb7|`eJ+;=wH1aZa)wGx73#m9Z~(e57;-Zh&usr9ehU-I@a%c^|8WZd7at0x#r_r zflIG3T18X9nxP&lw{uHf@T8Bg&F`!W!>@8`w0MpXYp@_G=&!%}T6Ig-xm%!v>!CKA zR=G^*HH}RUr{5VymN4q_1WJi&BjwSMrM87&X-YFT067yDs(Gi!U;P{a_8a&31G~8E z2RU=m7~~UFoS+A5-o&2MyxZa1@OWHQXRUBEoZCG6=vYQsp0>m?^(mw0HMA|&mhCiM z)Lpt=&h><);aQLQ41Uk$Wg=dmK0Xu=qxJpWuAiIxukXg+o~Mhy{_ygDn_Bbzsx3*! z7K>ue)cu~0N*#W-4WU;K_9;OR8o;n9fEofAy=_+QS@245$9!3d%~N|}@8rNu@*!}2 z{kOg@d12@nD?Ws#tm%0H1qI`b56&dZsS@qA!3Y%@G2lU+o%Yib*MsH)z->jET%oRT zT;V>rEH~RequNq{l`%0}w8jaXGV4(2X(epVUNmY(1!UyevF&`kywCo)BK*`~{1Ro* z`h9u#_tpxCid2JVbNKK}mGwB4llmM|6MwM1YKkQ93SS`5tjzb1S&)K)IV*hI(n5a7 z+{X}`p~uoxMdI1Ec0=GY(FA9&EG0|t5BX;yeU{J1ZrB(nokPY8jg+noGs#Yn{Ymho z!)Snga+3sxd*09K3oUti^O?VKIpMW_ynQ+2!F;ur`u4{79JF~L(Iz)h_9{-Z2O!2J zS{`Fd%(H#!b<3$#pa(#vM5s5{0`zV+onk0b8z&^zOhgL6N_XQ48BT-QG>m}d42Pbf zHr5QL@~WlP{$EZ1w^aRn$0Kx<`n3xa@@)TDWMtCBN~S0OLg?7p>HvlRUJmmOf4pHJ z*12?uJNJs3LiA2o{b8H3-+p$4=ZSX$BeOo3^wOHQ@< z-MTz*sd5GLxSN8VeS@kO$IX~+2ThwU5 zZ~=ALLBsbGAWb5fw*Z=1nH?FQs~`7~AKMS-s7=?PlIS>Uk0E}8l}s^#(}v;(EZ>rL z-UrqVusV97JOy=aoH3ysLXm*JZchV)Q5?ZPl6fOz0A+Y}dEtx`90>Q5$=^LYrhc{6 zZF{ga&S7;OBp`j*ruThwmt4-<8W!?J*0<}mEEX{x#}A8%NNWI$pmwRar#NgZg-^@Q z!^pFIP5EKGx&m4v<#IE>TYlZ@)cGWAJ;|<}{i#)T_J*E||2WSNlJ4>+mtRb{gxr8j zRyZm~GczV3D`cHvTRB6XDGw4DbVC^xkjjq*QSwxW1^Wlwgv|FIo`*obo-%yUq%fFr z0;Xsi$C4z7tBoR{^_X4>bcNn!M;W`~W=A;$z#4YKLovDz=}@IG>2wjcWn5!Zj>)kK zvKZ3F99azPhJr2BbbfyS{aqTZw8CYNFXjH_{PBg}PdL9UuCMC)UCeVPYIeT;#nGq5 z6wgl2STB_5bTV$Tt|i1s-#AxBw6+5?2x(DKqFYu5BZF<6jx(n?FT0I$Lq=(+eClS+ z)XajdgQ~G>R+G2KL&EdfMTiv4z>Um2o`U6sma#@y0VLxn>2sc2Y-=u!PkF58>S}4a z`8fD3;iGpcmN>*XxAYkbEVh-DdcI-E;A!r6|I8aw(X(?wgdDj z)jn|?1Ex7(*w7%W^wEARpdB`cgF(xf?naR)bQ>OA9-H9pREbVb)z+BpG}o<%)ujXm z1=Td22&_vZLhfP`lZr!|2l3s7Pd3MzQIM!&E1BY~=#r^4iOP0k!&Fd?m<+LMsuSkH zLd!yk3B}V`2ql+FTG#XWaKR1?GGI6GbV8x84pyWSwdp$}aLmpY!4u?b_ip*?nhmXI zX41w24s5o427i6ha5OVDjFZEZ1R?6(5VOOFqe}Umxq#>sb4p{#Dy2lls1GKM85TrM zAOs}&1Ol`OU##_{#Y8bwm%@>4&FBao6CoKwAPE&L@v)nu;c4lR=I%Hhnu7{w(s*gr ziYWkb$|77~1-K9|pOkU(I12&8FVpk(+`lRhqYsnb1 z!oejy2ph=KMicJoP!4!XYY$y581B_VqPq8hfnec{NQec~43aI3OH)lr(eu0?E?07u3J*z54QN zX+M3Qm#zJ1u2?dzos^i#HeuONq#LTHCzmCPZdZC8se*1AX?YY`I+WEb!XkjoZ;nfd zp2Bz4SB;O!<7HXE8uX*JDRR822epWc%e>e+j-q%>#57M)2h&^i;d`3zNPlKo7 zmxjb^pyleHdM#*XHRu**A_r#2nK?J(;<^Slc5JG>y6R^UAJeHu$y0kq3RrNZuuY^CWQ~kt z9E;hof~g$XMq(p#@nmYF0GWxhRGR%h+_6olW^x@ugky6*He0wUy2<&j@-XWTyFa~$ zha^pI-j8c@CH%FRb+^8sWG3uCeD_r}CRkpaWRb$1_E6J{Kz1hM7MbyxWfO^`ds&lC z)+PlYE8?hQWMKMOE<#{U^I`dK_;kgH z^mv{yKgMvHu*}!}in3x{ju2I@nPtA`E5qz<|6K3b|LW;m`+ahkvRNHZy?OHD-s40{ zHC?McjT&a56LTiU^Y&s+DKE%^1Yi{mI=(kg#63C=UJ#vKM>7ure3%G0R>LwtTWm{X zVJ`21ZL#1W0Eim7MTcD~@gyc|Mi&K`0DIJHlc|Ku7iS1_U?htuv#dVw(~*8&(f4@B z##LXw-TAGs9G_Rmfn%Q96+f05tNV+qxSB6_EJq61X8!UM<*KWaF0q!kf4KO}z`w%l&UkFUy6bhB?WuSJ#9k)^Tn4wf?RBAQ`n>Pb* z`vu|n@TSHE%f`HFA0}7rqRck1cG1_f>9ei2PkXD<^qX}nts4(pbXQ*lTtV&_<5W7F zKqrz4nhv@GJ9tR_W_uz)3xFxG#UqW@`JnO^?yY$oty7M(c~;q&u1r8(y0|YRT54RK zH2F;TqbFBU=6r*_cv=-dbX6WB5Uuh6rJmV9!YoVS7*`3|OEeXtM>S;ZKx2;PbuM}P zMZ!;@T1+NQ4E4y}(nm)pxItv+(0xM6YKwtUOc42~Pl{`}bFS_*AB#{eH}UYX+lTjR z_(a=X9)eqZ0Y2rE#qC=M1|50D5^z(2W49vC(FSBGb zQ47n?<@dMy^|Ai11V3W^zJ$%%-T?~Hsp%X?g?`IETlbuwzn(s)Q_Q7iiM4!&)C&Pj zN&OS+nS>87?N-xurVwTNXv)XA7^T&=L1aRD)!{pjCly?=H3ED-mnNW zXo7vrtcv@RG^34W4R8Smr{&owLQoc*p1~9XPP5yTgGQ9ujnF4OnDbWDJfGuTd3u?- zT~BqQ7y+>Hu|$tByzk{vH9`ftaE`ZchZZ;-Zg(B><#Lv8#R>nheQJFEbbnX?4d_rp zwSU$7JMYcxrtTNQrJOW?iB{>fF2@2m53&X_zy=$ZO@R|X<;Q;P5|Np{Xd_?h*b&s| zZ_td^OzoadGZMoZphjKa2gmne;U!9~g)p`QxDZO-nHP6i(TLwlt3USxNdB8$Rt9S)Pag&&}k!f zsQ@^d0z?oxIW*I$#Jy5rH(FlttZUbD7NzT~4?VR!>=i2dQ~T}75Hf4duxpi=*mi9E z@@AMD;GTx)XwNx`5)6AeX>m30Z+=4%iJ}X@x$7KkISbuzu-}TR)?27lSr6Z|qN9~G zMvK4zi*4~_Q#?k|W2a_kj6{%}prZ=DMmc69#IK+**{M`_s21?xO5Gmj);lS{ zOhFb!;nYJdMP*%jY8|Tgqc(myg?kDxvKx2sVy$o+xy5GVwc*-1r*EvqN3}NZnJFD8{L8{j)!%+vq~=< z7Ad195J#l1*fl$=K9$Eg+M$r8$1BBRDF=!bIhr|2)=XSX8FV3VvUQ?XpcXn4!}47Wk!vop=Cvn@YqcgXQBF+j zW%+pis1PFiqROk+x!Vw2$lO`r+PJ$8Zo#FPLGkpM4|fpel8fs}TjO>Umm%2HJKQ>s1h4tox0kDL=&GqoT?=WZ zdu)v8RI|vA)xov~bxshW))p#RL|AxL_WS0+yt&t4)p;b&U^wN#zzV2PJ2p`IA5nSPa8)mMee1WBORjR@ZN$wT`qSp4Ol+r!Q9$UQ?iyUT zb$a8Z`iIZM;)j|mJAubMz8*VUE!Av(MB{0>E5>I7Mccr3!z{bW^$C?C=~3UEt`qyi z%AGjM49mxHxFDIxA*>!PKQO6SkY7$~#uOjQf4r<0i~;Kkc>;sEfK9WOJbLPB%K6z@ z!|nw*#(1@#pG;?(N9%ayAWb;uQ-qaNp@GCy4;5UOBLU^of*P3lWicVN3Wz{lTJ7LN z_B80{1V#-v6Uk5nXYZI3ViXKi6=bp|H5Dk*t%frtbA+9QAKkC_QYqF_{|I*`u6b8mFqaTMMO5eR1eMuYUh5>|?>dmhB4x zdN_chPJ!z<$dE6_A>Y#o-A4jg!8wt` zxsB(c73uTBxo=;zXp(o@zw4al?yq*d+tU@u>n+x)nL*!YlH0bIq1Y0Bb(T!05_<`7 zyY9?7e;Xgx)!o5v4l?Xic$8BG`1Urun4>Kti2&Z1B4uQ{IgN_WG;#E8+ANlCd%(5O zZm20&!Tz23oL?4_O5l|wu-VIm9SU;oR1c>}w^o(?CLP!0P@GvPc+9z1u9Ib>wdIgT zkpO`d0hD%;Omf1CKK#d5NZe5uZ|4%z7$X7|LN4FDie?1tW(;9IQI3qg@b&q<{>VR_Wr5=^apu)T&?@Tc!c5NSdn7qnf9$s+T6qN*T(po zMeO8dkQxl;WHcu2+??Fo8?WoC%@3^OlrD*5{d8kF=e`>*&r5k6XqptzC7G4Di*Uhi z<94ErpOlNURld)%AOL|Pgusc&?1C9JHeKk#`Mhs*m{AwD`R1sZXGhAJhXB=*P2ivt zLwgp6gxDD5^A2L-FbjhKCUr#|1f`zyqGdAZqjr|5sHah)7B0{VV;qm-4*S4jS!L-K zccZcDnF^pC%l47vXz8l44e)58ube~e&Rd`;M_%(ib`&l{e0?0kP#Z=kY@=2=wYEz= zN03H85|N6LZqu~Y)2v*JDalDgU|TZsJ~0_GoPQ$8v@~lNYgK)Y(LO&G!x_37I8cy? zm^q+HT-v_|x?z#(hkSK^{G)p+aoMNN^W72%--cU*OmlAD=_vfeQ06Yb9Bd=FS6X}e z_$}k5&aIBS)V|$Btvau}TsC^JJ5&)yVG}4Rid0%fj5cAB!sfC|7E3qMBDJ_I@P$gt3!WF53Qb<-18C&X7OOxHr!C$ibHT|up zf$MF7`$!Lx6S$@H=IfF34Y~@>R09>bjYRIK(JLJ{IlNgGHm(z$UrC~`?c+{$!zSE7^1gHHKapXD@WimZzE<7E0ACCWt+38K5W z1hAC~Na>OQ!n$No0!%wqNIjHqY{5to%?v{{Wfi<+Hi->6NC8dEPnFt8M$S4{Qi`xR zGXjP-m8wf;M|n5K+0kPOPMPZ%yk3rH|9l#{mRnr)k@1U1O`N}5yIm9m=|z4va(j*k z^ts$>eHgLn#;S_lQTcl9^Dc}Ec@pLK>*N(7k5B1&jPg-2Vv6^JA5yNuv;qY-mY?J0iK>Opo{_l<`edk6DH?cWv>9}ooi5uPyM2a3v0s|ZDzV9ODovUL z(GEb(B0u>!0)66z3tJ zPq7@z01ZvW6COPzGVZRV%_DZV_lUT<=O}}=-6+ealx_u*m!XrRy~dRa?^+qE zn!_Yyo>{8!++PbWTlPhJ7g#Ct)2QbCy;85+%MFU{uHyI1!to4&b)T+&Zx$$dyS-Ch z)GZfxFLA_>ayDEQta+3MO1dwbwq^JjQ7_EaWf$_?ryF!S)An*O3^ghw(^#u+_4zR% zBQISE6iFGf)*;mG+@zae+>08>3qHF zuE)#!puP)wZoax)-K-7!(f0Fs`1qzih)(Id0g3{Brj}io_btAmD$`NlHSL_*@%eGz zgJpyMCVrD3wJT;jLiXeY>bL_|M7{9N*#I0?0m7lT5wi-4F=I{Dl`P0Kx}w&k8tD*S zAW_bFELEy3MfWvL8AJBEO2UGRL4W0-4DDrz%Hd8c8RtL?Xx@BZbR<(Co zg9>+E)%~v2K^9NsRysm67efH$8_%LN&Du(w30!jQm}7ToLfep2~dM*y+*oTffp zm}{Smz41_p4|RNaVmF&z&+9AXl?2|*B$4A+D?};P#FE z0&v9))4yxe()uyXgE%uPEEYmtg;EwwGm*n#Svf-hOvJ2mVmK#iM(vc6nL2Td;u9mL zX9pbzx&WecCPVyiA1 z_`H5I`_^Py#R!ut>#(|h={E@@xKSAFY-`2HzTg`q?^4g7)|EcLP=6Ol9amQTOYHOANa2-* zcq8jOg`%8gX#oA9{g9WhrIvJ$`_J-oESWf8lYp&$FNF)nBcR`=(RQ zJ%;&DH4T(alx3U0*!slc^E01vJ;MXJUY5AKZ&Mz6_4pKL9kZbR=Ih^n+irOO%fo-l z-~2JJ-rB!C-}UlyK@Zpc!|ij%vwOPXA5)-xblvkHSd{LP!;-{H|!|J}jEI9CyON11%{13-HhQh^`) zyiX+f=RVu^2X~J=Z3EV{rPOTeI*bF=BQ~4$4yIU5zc}Z!*d(pD%IfiPF#G4R$boXUT@!oJLn)3tIrE{EsXj;yFYdQ z^&zi<>%gV$XPbpay4ea}2NP1VWBN0@2ScaDn{4D(1qKNNN;j)^fKujEYEDRL+Rhp* zh-bRv;teaYBPU$GBk~x~Q`Aj*G`7Nu(cha==YCl|J=LzXERU?5F5fbxZr3m7Z$18T ziXZRbUpIP{l4!}l|M_3TIB@(C)y|qpcz^Zfpz4zS=TkaQKb;hRo&t(;Lc71{HQc(s z_K)D}D|gz~Ti9EPyWG`>zi30=Rh^#0n6Szjy`SfNrtsrN&;4Ld<`u`Y57d40=3APu z_aD`iT)aZ;HEv8YSmlY`W2h$oxFO30M1V7U3<|xpru9IPkw{1+pFo(N zVvsDI+lCVB#fP9;fdZJEg#a{ajHqQ&%4EIH-O-{A@hs_d3U?t*Hz<1sIyGgM&pS=0 zy~A;}GpN)+bcpf!s`iIAIEmdaheJZlpj~6LiWsl?`Eh)@_CIIEy!d*?34?bIIp~RIjfOhjwx9FyIq@h0#WY#_e3=Fs@6W#A zyKrpGc%Ps%X4ed(-?6=Z5uj^LD&6%NzUp|JNe-A8P9vkhMX)G)HHXwaC0h@DJdo|rCXTH3 z=uWbT0d`8d;q>kwvA+wv{Ur((s!n2{nzc;;1WMJ-Sqw7)pbAzRVm;|xu!~%K4TZkQ zx-p+Zso060xDK&Tvy?EWM|V8U81O+X31S#3+GlMl*7Kf6ow;IzGfl5b-%5k=XXX## zg?J!POkmccJ`lH<0}0ZuEK#)SVvlijMA@lNuGYHCsuBk0rdi&1Aq9mnhIk67P-ZSo z5KP*m=OR-LVIGSo?IHNB$|i0OTGaKs^{w(kCMYJ-VH%G|>G8$PkKJW6R?|`#JX zsL!dB->@+QH?6Ob>ARqgGKU~pBT_EEeakN~-JkM?%BO_#d=GJU z=Z;he`ox8R9NSMqddX}SKL>+A&eKgd|MRv%{XfdoRXJ8v6K}@4t@9T(^&#>Qu&zQ1 z(ILo^6L<|{s%X`F)$(u$0TZ}4#p0Bh3^*7XeUgQZTAS9Eu7vB%%Zh=opgS0ywU)Pw zZBc#(FBn6^omy8Jr6pI(=cbTzfkWR`p5D~^EOgsx^)13@2ekH4jFl9#gRxA2`t3|m z5?^@+H7f1WBF8a(`lEY7NpbzoK;F~BY#WD5vAMLZ;}PyQLk)t_HZ%@ybPj9oynCG1{n^+`*F(uaq6e025UTpZ?< z`qQ)Be80Y3=id%~oFC4+f4XbN`u0-{s=xnu`OE9Pa#v3e8R0p>(%76tQiMuY1sX zf)7@%Wq-)~itfrY=~ZkM4~9raL`vCW{B%m9agBuX2m?8z$RZkdI}x1mN11)apWaCu zY!|Agh)4vz2(?+53L#MR7CoVIai!yvuqe~2F-1IQhf%d9^i2d_n5ctDFGtz|IVvn# z?y|VoRFL$HHe92RvA&iXsG)3E9-*-U4jpET)Ob#`N*lY>?bzm$Zg$x`0d1!NaM2dP zzxA}{aZV4Ql&K0g0Wc)_5QfWxs=~65Vp^WD<_vuRjPt4iMp+fRk{ImcoJdI9nH$R) ztAm$WgvGVdsNW>Fz0~nf7ygD6qLj02IVQR9E6k;maS*3VPEOg71JwZ?oTGhCfFfxH zYFa!aQ!oe=;rM^J_E6|FkGU&3blUX52xmNlecH}L;BGu{xjVZV!U9a(JJc*1#PCtt zAE(91F*|{Z%pC2G(By`eYkRXR-k+!a4)<$YGq0ESijFmF&K7h3VL$1r#7ey90+#)z z#+v%Me|u@^-|K&UXi2*5|1;F~`@r*y5=G}KE zWtZpiq2%E1pUrQ)Tc8dpyBlI$`R?U;UgEre|AUJ1(___LC+pvJ+b>=G>Ui}(&8pPt zt*@K)uWgUd<1^k>chCj9OTC=S5x$YU<>%jBzlz`c-=0pi>!-`}4EOK<#-F<&yu0T= z{}0CxuggvKtxd=}23J?SE#$m>Zp zA$$&iypUxF5Tw27wg2(IvNif1?bq{`UP0;psBj*vjrmG1V}n}Yn~|RC``y!LUxWMj z-hQugVe|@k7hn1b_`1VxZ*)DM_77TKrvDBfqQv9Ny)p#PaQ)M`7DF9syJjR`IUk5; zLC0s%$hUBR@18LoO82!6nlp5>VgAqQ{>7l>rT#4DMJjRJF+7Qy`re0{xC$Yx=S^F! z?|OX*{haeR&I($+0~ByDyI@UQ7k%Nu+w(my0bvBqa4!2}5{c}c#4gQn612IHX3=eF zL{!2tl8CMmMx)D5H-+fVty#-rc6(sJW$52O?q4?gSI&t)P37h3yuNfD9LoE7_%-Q~ zPoJFr*jIdLkHPDj0xMs|U!OnTc!`%bzI}HQnkQ%II)7CkmiQOT@Ve%YLUMIsM^s6lfRX4t4+ufo zRU}aBfDQ)G2a00KiP_zhB^k|7k)7;4BUaYz8SY`OXOFfQpUg44%wOZRDkZwEI`^j4BjmfoR44P>**?8oL> zUC=~(-Otyb=!p3--|!lv6${cS1qsfhyUWcKX_AkFMs)y{_yYDqwLwfckLA%@f~xN zv>gz@Qdh6m3?zlzL}bq0x7dMo<%w3tNmz;WjUiw(Qojbe7uJT(4r|)O;O^*t+m>a_ zYRTrBnb#t!v-mF@<#nCou(F&7enNK1Rc1FTe3w4ZNcX%Z=IEc(-I>%9R&nQ-+Y8=V zwM{qwBz-Fq!eAy{$P!>|4k74OWO!CmlctotF!z?2Sr3BRSQqB3N}|;`KpuGXAd@^n z=e-KnU&k5Ld*8@(a5COTH>wIC!Y+~*y5H5oq@Hzh1;h!RnPt%&@B`}djerM`h;q6( zPQ&ByFYO;9%~7^VuHlK;9k}lRvU3oWg~n$i4A=#T1exJ!Qb}x7rimg@?k^+1lIM=*^SM9%>S4~|gWmF!Tpk?04Bdb`{ zKFhCRJB@3=a;oYX5kDEf*=y~(&zEho^mtyEDuFS0=IizSu(98a)9g;goLE;OMwg>B z72K{8K+}i1=6N~@ltwoa;xtVsqb$?SUgLE*D<1K=tQe1d8E%ZrxN~tOlyL4RMJ51v zymu37WEWi_nBs=`K8Z0H10W>8Qji&y+v^Pik~1SVbf2ze#kj-A_d`IVsFqk6tyV;B zhp?j&%8a}i#VBz@ltiKp^?H%wr{o>h;vkB2(SjaKiN3d@C;>Lzk!6G?WTL`j7aWC- zE1s?hq=^~uwO4!a0n>J=WV+jgBd6KAWn%4nk#Nz5ELYmUWI4Klyii(82Y6Q!TSr+hY( z&d$dr*g(S*NZQ0sU6qDNqoBqG>vn5 z=-lgI&5Uj`k~K;)r~SwrsC@I|2mYNo{qyLxxQ6LK_Bq>#zpS|X|Eapt?M-#e^FzAO zF`4;5mwP1~r$C*vz7?EY-z@KqIbGi`-SS;)7cg=~-rLpd34zM{kG+D%mA4oQ^FY2> zRC=X;M+edsUqrg2y6A4|CS>l{ePD-&%g1O9cmskYf{Fpg3I-I7)Xo`^VWk6ss89i? zq0iHY0WJt5NCHB`J>ZQA391BjCkv#8q;wT_A_(F#;n^r_p#Ya8@!%@a1OSbrtjWK%h^Y7a{VCkn9?KQ57EVoo3Be(Ur#q#-u-p~XyRp^Lh^_@%H7l-DB@s87UE-jn#%_+ zHR1aKo_~7UpRfOqx}sHocJp6`|Hqfpu0R0G#QK6)8}RV`kQ6jQ+@f@{=@O(^^16N z-fdU&PF-cM=%7AW9ie978unC&q~6ejKNGxyVXcXolahL8yTnL;|IzszrN3OQ?82^k29WDtNFU-@ss1eAF8IYUXtgX zAlFA84}0kQpI;&BNyDA2uI76yT+)-&pwMG< zl5k>Tpeimi3^C^b>0N|9XNZL?bHl7FJB-PEH%uM^^@_Fa2e2zFl?D=~&8@z%5}C;a zAT#SxfJ%T?KjhdX-R&T5m{*+@IgNHXLAr`aX095{+p&apg))bnCiUVBe; zht;d1h?wZt`jF)3_$9mgXdeL3@vveE4|}@o;_d6hJvMv^>jQB`r@W@tU2QP;H?LmJ z)H|NU*KNM1_iEJ@6eaA_%a+q2s{w{`b8jBA_o}jv??K04pKTNPWw_uUoqnn77~<&h z=MND2hhm?D4_ow-n~^f9c@-`H@cy62H+e^Y8vk{Ps&>=vWY4t?&-o{UzmVyjo2uT0 zcjm=ef7z#v9}#~2Pl@u^>;M0=|7`v9*Zf+%l8Kv#S>~`7VvxJEVifdyBxm+3tcBhK zfVn|O?`qFN$C!XiJTPpZ&)~XAxV5Kly2`#3>oi=cHdz|XSs$;|V?b~caY{9^4#4_Q&3I=^b}-7p`&{4sC8li6setSUZ=m5F%S zXK}SX9ng5OGl{q871YL^o-IeB72;;<3S5gdf)(1t3=dKd;sz^&*aE;=X$4vw3FB0O zS*+acei#8$X(}!sD)uAZKI{{E@SejO?u`hRj8!X{`(2i}tTkBWLIGs1!?M9f)q-L{ zC}=eU2Tvoc8B=HgU1BiUh94lIzW!{^t z7SX{N%as%&pF*PX@~T+|h*+^|M$S7~2cgLqj*^H+6?-cd@@8psV|Um%m4nFf%4)W_ z<&%L1=v}S9b@Om?rQoT~xy%B}fp{d|y?p(Af4bPpsFx#_Yp?n3ZZZOmRLc*!KA{lh zpt+}MgHRnY@lpvqdFkzaV!GgtilVn^N?tIb2{%eR$vm2!!yIUE08SLALa`I695sjC zf)qj=Nv?s^7amDtCMw*4zFs~A+D#cKK^|<5yRJ+oa+OYi3sbd_*zG;u>ARp8r%ItF z+}PJ;B#C4-c=6LRr#^>_X2Ft7)-9Vpv(gae9L`krrFC*fo-XueRa2l=@;NcQ_T>5P z@YT9Krr#d?ywfDYi-SoLz8@HOrHkKclJ*9qKC zUweA=L|?aPrky3E*qpiC>8aL^HrP6P*5m?xlaeUHbWJed%&! zTdQ}P><$kg3uiP(^Fn*HE`2-V;zd|tE0RG27P!#?(9U7F8VX>R6ddv*wK$wDeCa&n zPR>;4EUsfQ1C?DxzC6x3eJ)L;I+Gax7bJBzsn1-_G$^rF5ZwgwD0$_)zm>}|F75Nb zJn!K8w*NmxeY7|X7u~!NK0p|;%s4HA~!K#7n(*vR0(v6EH? z#g%66Kw&v2&yw1kh!jE?_6g6s2Sti>6am2MEcYTWaumdXQ;Et;Rh5HcaLzilia?PZ zpj+SzMi35V=nws?D$#ffyTUe~ccabz{JG>$iXI4)vrNsbP} zG!94ebRiQ*j1V?K?FmpuTDnbz;^duVh=8O`RWgMDTPE0pH!U8doj6LUsEBW<*i`ushNe^`RN!t#Qa{4 zG;aRrAHV+L@BMhXuFccvt#Mu8)B4!exMcA-ZNTEo`&7Oj`YWdAD(u31bD)OY4T+4( z&+}=?a5+crH*Pe$Hz(*kM@`!#r^oZ7kH3AH)T_N?6V^s+&`o5bB4=f)I4H$7ssUC+ zCafOn`p&MIZCvao-5r2YXN$545VEr9wBg?WNAYDfeFfjO*Bd%Cou?X?vlnB2EdW7j zeYo}|3rYdf<=0+2^IVsm(AvYv-TVNP?K#nY2yZulE-Gg5#xx7HLCWG*TO)s4Z$5@DWV!lePzdzq0enO)NkcLv~s=% z!mC{7X&q;=Y4mPjKg7&-Oc1b0Llz7u2(S!TQ-4aGB06W7H72T@j1`nvqMWj}YSg`+ zzwgiMT~4sBdS3lJ(t&7-@S2Ps-RV0*F1BhqoW=k%{w}}$`XGK_WYSu^9Wb4Al#W1z ztQqSar_H}0RyjRui|rNM7vr0TJB3_&^WDhH!S4lp$z*P*iq!ZR^TSXxBSS&$1(;^g@p$m%Cy z$D!i$5SZ)6Q1N6Ol^s)zWYh?D0I{rFhlB<;UPXisAvLRsQWbZ#L7lGGbW*c{#n0Y& zNYGA{uM^C`?O|Mal-H0aft_4gciBODy55cBa=)riGP64P?~ndJw@gd2(qgFyj%mF6 z11{e`!*IH7b7Yg>uFw4CKK-HW2E%deami1?-)XsX6Xx^W_d=FiByGL*TOTPqP z0pa_%Aeb^&3+)9TP8gnFjyem0R4S?tIy+NEcTWa_SMU=l0ujr` zC@Q&;^r3qNz@?DDm6#j9UgJIC>4Yw;qhL#ar;u!GG4*9*L`B@Xc@|~H?YX0JCML-z z1rAZm35Rz#wTz372%5NL9*KEQ#>4vkZRfDWPr>yL_Sa6{ywS|nUA(`cT4{3eaaH4B zpL^Ih?N~QRX)|TpA;8esM{hXsH&reSUE-EorNw7uO&}#_aTZe(7PC#r(IU_Ho;ImYXHf?Pa2K$_-j6evf3aku_(qv_b zoT+443NL;fnP`Eaaa>qN@VBm>62ZXSjDdVD`JBDwS^$e|AbK9Q&h-pDGq<0P)R z#?JMv$ps*0zq5d>ym3By$OBMX3ISlci>8p=Z%%KP$M3qZ?%~#Djw!TtDSto}mB%z~ zR8eewK^5;e`O4SBHSGmBt0`;D%9ap!7d@XEeQ)CZo)1kL@AjN?z2+i!-lk(tU647a zvWw*gklX{46MU>m|sRl zIltVMM^>VYn{OS7JDIw$(5l9A7rxZc26Y;x-JG3!Y7;2PkcI?=i)`+**Ed^jQhqF- zFDc4q%@D6EEhsYQau(E~ACD*Lf^iG#C0YKe1Ru^xogl?#8By?pN3c+Y3@Lv2Lo@<{&{Br*0+J0$y z|D&Iw=MVUl=>E-5+EZ*yP|{frZ-h-M1yk!NJfilhyU4=^I>KG0D2(AqpTd_hxVm^z zeYFMb|KzsdRr{`lwB!1c~l(S;s7D+Sp7&ZB(i6!=Qb*UPaM;IyA~z#vs`$`_bf_Gale|arHOzA?CPXZMV*QsWAtNdrc)M| zWimYsd}XQ>M$LKprVH-cxJ*5aPn`0Zj}Bqh)b23SiXTH|hc~5Wc)1e*IoH4yFmUFP z4au!NaY{(xP2oGMSJ@3@SFDEwr8+ZH#d6EY!|>?CP%HLemSwGRRu{i*k4*`uqGnfWIInJ&j2;DTYFBiFl16k}q9}LSXa$U=Hp*;{AWdm&* zUe*fsq_s92Wm8gP0Gg6Qa1EU`L;u*Du5sm4x!m>X#3zh}vhg-GRZYkBuw(7cEnL)L zbBCojotuZgn?axf<$FD~M)P=Nz4(c9gXRR~Y3!*3_ZjuP`0_y^KfU=qze{G_cf^xh6n`UwZPKFraNU0sKN`=YEr9&bM^vapMH zM}NKxDC&Nlz`Dor!X2Lr|EZVvaWN3Wue{nmzQ6xUpFOiR9vZlKpz0$!HYYYWb;Zt# zuAB*cs5+xJ$sXBU8)l?Jvyl{{Q@C_pkkB zT=nR?;{{H=912-yU`8!g(fQ)y$tVSW1*j4`)+4PS^=ZH?w)7zP>ay|v{qe`=%hfKq zAN`>_S@VAuab~lyf2HUJ!#A=Y`2SOj5NGzI^IOAzttyJX6sX*Ci z9mA>Hu8zWh;&H{PGE2>f`RH|pTn`ykfM&Dy%4aL?z~{pYHxm|78^2Vmr`@(7kw^>w zxfMb#kVEmSkY$O^IF=T&deVbAa|>Vx@THdwGvmi5`l6Q7o=wxMnzA&E0!meIG!vAw znMQtkYwUJ-zJtdHUC}?qliBbf8epn?{ITtF-Xgzq%pZXR;0P0#tR=boLzuA?qB@2QbhELeHf^rd$@W;;(* z?W7M&@q}aG0 zH&$yHBAh4rtF4zBHSwa!brWxguXP{K4rF@5$j49e_oq4Nsr`<5iWiUJOuKfPtDhoK z*sf`zJQ9Kg7ElH{SUWCsjb3k|BBlnRwt`i&aWYkQf~okPz;Bcu)~57d`1x<1ETiMt zR_R~5@VOql+-JV8|F&Ka4D!MIMWknbZflQm$04`Yts$d&qUZbI$BXF(G$!-1i9d7k z&$Yc&*r=R3)X9lzP|bkd8%aCeCWQb@k7OZcHL{*s*C`| zdU(^_$m@m_`#4u{TIt%1peh(Td1VOe;!5tbe3EFkFrhpx&9m3@ucU9<5G$~?tKkCR zpdon*s_iu6PIhK55Jz`~-A9nCXR8=rDdow_W2xV}!p$mp9mp5WyC1EDwN7JS%*pE9 zjKR|jto3r2+qM)YFWGa|t52pWK!^~bUOhkBzW3X`HLa|sFw2i0Vd)I2>~>%CW1M{B zKQecs!i@41*$du%rKIP@u>pKfJW_o4xPFCk3?n6(MMgU}$+DvHHL2qCaT?XR-Nokj z#l*6Q5C00z)H6IKJUR!-crKNqb4monuV)?dr}f=baa6= zSZ2y(YLI@fDs{$Q4uB98F*6pG4nNuYlsu|3>ZTL23Q-FFcri~ z!nKpp0b#KP9fo)s&Pt&@iV$Q>HDfTOjKa{MjH#n?aga=UMj)Wd35d)SWX2dvLk843 z5V@_P-($R+W)hV%&fQt|EJBTEP-8CHPE>Dkp^(g$3y7-h#8jFnc_4ggtYQyp($0K5 zt^;$N*i03wxW7ai7Jwkh zzyKJb5F;zmkj-~+KX{>*Qy5TiCeT+gKzgUFG^-TM!S`Io6Q5n0sCryAbP22p^J9H- zuBk=Ft%06{`iXC^j&Qok49);iwXQfn+o=5*SBJv2L>dIyA&iIWIFryh z7N*kwMj&i*5D?O^R~&C%#Mlpx`-)q17R)(Q1f`7tr4tQ_$uQ1^xf}D|D`iav_fMyu z)F_k28Ky={6J+dp85t(Yz{KGY-~c3$20Mzn60NkWDQ@JFq!@Q^6fbXXarfZ_Pq9Pp z3rpkK7d>{I3Yr}&q8l&^C)P}%HG`Q>L3&jf%ZM`G$A-_CIEu#3qP@yNppK>?bEgKe zQY5un!4R1+O244<=m908kTX31Ric-J5Y=ZJh9B+mhgh&d<;#2`s8g?=CJwL72r-vHndw#`Qmijf~{Rxk* zPk}-oZ+Ce$iu>oWyd$%Gj(nl-$DyT>m*92Z0NydlVlj+`pwDdr*OM2z0_Uc*P#4^r zONE3Im@3@iiM^opF6Kktb=$MMryR#b3xCYl-_YwN@$bCen7Wamt%SvV&*NkIl*YU> z;bk5h>#O5A+^Vm!Og8#!4y%g#0d|&;wU1!Tzg+zZ z*RFmlLXIKEP6Lt+pW!7*R)p}@XA6H+_A*OU+&5;a4_rdcQ07bN{gM6sBrP|$-duT8 z@M+EGr#0W3#TkG>_u|$it6kkcE|@_3xV2F`;o3?AU@zA|y-73Wa&YVioS&9LZ$3W% zJ>)nv)o)CWYVhIB(tzVbS<~izUD7J;++kj;WqoRh@xVMnNspO`ek_Vv<_z#=EyJA5 zp8-=Ny>Ov*fd|!mExC z4}t6L5|Q-bWB7E!bRm_oz$LiCs<8(OagwKItxFf(_u079smH^-yY*6e3Y`uDOj(d_ zwa?&}na(8*&|_fBYXn!wbY^ zp;O1sS)Q9RRrzvhOz)3w`_<-;i|+dM{a5&@P?ZpBgZ!w9LexmQO9d6wC@TpS{jQnR z0F!`Inith8_7@9N4$$C=NFhen>wy4=Xlcxi-4AhwRn0HU=Y{}GqW znnwQ4?IcbG`s>Q?{Zml&e>Ke$K?qwaQTrc1!uR`Mjbv8ykn#QSJ7wo@Qc~9`SFvjJ zcRiiy=`{b^i1yw;hPYk+y1U)Lon_TYFg?HS%*CVf`m*gGK>_W4Q`5a2$4aOag;bPj zZx=c=F$0sSjznIIA`wKK%XKTYTMg`ct9_O5Qum1|pc*;um5%y(akdP^%>B;(nO<*w zKX^I4I$d49`1a%S`zMwPclM*r*`k;E!LS`{8z_g*KrrzuOg_cd*HZwps~gHjeV}`G{FL*d$R?_c6(z;_qSw;y zje7H30$F={h!6VeeRpktxz0_r8=tLHl=|2blrhEYITqnl+DDw%zPt)QmN+=`s5;dp zr32EY8qx{t$W3bQWkWMsoF=B6H;r;|?u*)mt!Q-*!N<|7f_+els<=wA1H53Vvs^Ze z8Jzx>R<#kH2L0@@fEAl7>y3L~>d?YuGq%-a-g(*tb-ME~G$w%lwol; zqjG8?&ymOFe1z2QwYbr$c}{p(g$>lf5t`KvWf^ZWYr;b;a!j_n!t#n206kbBGU}o6 z^ep`xhPSxBOAuHQT}ilmvfkmN>#b2=x5_x#Pgezx69MNlwS`EL9_r= z0>`ZR7Au`~zuF&b$Olr0QN&PCQn&ETX?*8-huA%YULw~MOa@s&2{edCR3+xlf^{Yk zGkNW)IwSy&UNP2o$FLPZB$`p(0tTRViF*PAuCX4RX(g;k%UuZ*!Bv~R!X2q$9bfUA ze`K2fZ)^nuOY}iAm(H(+b_{yr@NlEFBab34dd)Lt--b|ATd%>3M}2wJ@71s!;mXb zj@IMxS|gTnzxm_(`k`N!lwZ>O^{jsoZoRM9c&iwjnKGl<-P`wKDvDK$yux3~pWHt} z)i|nf?Kd{308b+dVVi6N^nrdo_Tva4@EhlE^v1baYK2(E$c}v0dfc`!RjLcD98fz& zoT)fR33Z|WN#WGN%-T+_J68z6DrQ{9u`;4dM5<~rp~gyZ8-<$fH8P?&k6h)SUvP-xlElfIAaKi;SxYB7s)EX@d7>3-uuWg80rlyYB zU|?-!%As6jaX$3B#Ilqnf_MUZFjs~?HLdIFZ|h~1KIMK^03g*354>rw8mCKG`0VHx ztjEx=@%3TOjkkW&#fhG~g)h}=vN$pCRja`bH^;f%?oal2#CX+yxZF?ky}%D@>*#P3 zpHuQ~e3v{=j;}BLtNX5Z`G4lux;yP~oOp7!hUtLjduj>O5CBSp{bIyt&yRzSui}>H z@1Gql^L+T+V}Gt~VtNdT&p-Y2P|oMyA)h=M$%1Yb-&kk3&5E!ai1id=@~5&dn2~s7 ztJ*vZDq=P0Hx_ZwJrdPKNrJfwyc+7Idxf_tHj$YV^ZJPOnb*Fe1DL-uV&~D|_C=!F z(EMHn=<8VdV*m5-w#kk$(_oo7Ac-sxU7T-y0Vq?{OCR>ycT=u?c_uB#)jf9Wz9IIC z=X|`s4l}Ht^;Iwc%oa%rdTAdd0;rZXJbl9$ejG!dZJ%j=t%p&jllPrX@oaK`jNV6B z7HP|&^znk#8KliZ?Isoy5qRa@Ktwm6Kw>Ym)0Oy;6xHp_z$JpOJ}f<~*;Y*6NDQ^P z5^*7Ta#BJ^1rEbY6thB2sNKo?>BC_!6|71cj}G^vU@D%&LEuoHi7Gj>2@-X%ExSsa z-WPNtK%{}3!;zQ-0VYcd=h^mKk(qhIcgqwwsZ&~FQy&7S7)r4~Y7ILJFhf!^r;X>0 zmhDu^)F3nrCpKGC*>+^=+w1nR!tE8!4r;f?(?mVC$sUug6_SVI-&g8WT9~=_-hrgM zGNC)zZq<@`;SZ}!_M-TZugC8jJi4PR zmlwYK#ozV!TGt;>{fDe~j8lc{Zo1pK%sfGK#E#`%=g)EXjn_Co{+Mm|yHiyG>CIIl ziue>pTWF1+k?s3y^*QW*&u{a`r~mB#|9F1=|Npe#&*1EMq}4A?Z!`(~ACbSAUVHAP z-+ZR1A4E$tp>}CLyRBDbFQ}%j70D+C-E5O28A0=CDC&8gStP6?&yucYyoY+F{FLcU zR{PTIY{B|jUNe;S?5jJ+?tc&Oojnn!Q&wg6aTI6Sn0a--Tmwfx@g$WKvjY0Q1R&aAwGwo@Mz5^!}LlWQPVD$`awUrcqiw^IFD=I!TVZn9=7XX$FgKyXY|Z$h-S zI0(O#{x+~Ad?okF-xX{a{4)Q-{!c5^pMN=mzRB^;7r+X(4)E zRc+Ra3qLx$Lw+%M8lNycfBQzjF6Z1z?~Vqz-x|;Trm(<*e$I2Yfc) zHy>**(}e4})nmBw_T)8pBD_3fk`ZF0@<)QhC zGqZ3Zq+=EhI(=`xRYP3GTZ@};EGz-u5Ukn;C8_qRzk@% z2ycWB;Bsd=+!G_UbB^*3WfZWRfmd0Q*D4||?M~$aa9i(TZ+5WS-A5AQb?=YW=hA~N z-SJ2v!ex4D^W<_9(3Jwqq(DOF&K2uJA*ifFv|+f-8nRBzBdV%Xg&03P)1SgmLUC7L z&V?&l?+X+t)2;V@GPC; z9XTGBdBs>z59k(si;8ZmY%W8a`G~B9k&r1fvSkFcgc1f7vrfE^fct{OiqCu3ZVK!X z+vCz{jd>BI-MJFStlLl6kH|;0PHC^9H}dIcK-g*aA&dQdGdj`c{A^DEd_{TH@6`M9 zgan*+i8nW`Ghi!cof?aPJwXLJg*=lsGDG<7G2KnwORCOIlxyQ!j#Q|Qa*PsTW=yg& zs`t1Z>P_mir+Gnq)uX|MDArf+tsF2Bb>X9}2xTB^2?T|aMHsTbJc@`Y)Fk(m!<`A% zh8&OwgAi6xbti=Zf6vF$AJx2m+O5yo{O1i&fSl zV}miG(J>K4sX%j@so&PFoHi|!k#C0|M{^3Zj_-#+>yB<#E0jTTBH$DcsAt+~tJSH4 z$G!x%;#%ad_+fh^xp@IbzzKW#wc!|c@g429P=>&A3mNscjPx2Q&6I3RiHYKvtjP%N z789s+QuNpDPhJ9JiEq@f2DLXhdpfq-6G7)3998m#q-h|X?<1!zYji5u(x{Wp=`zZu zSH-cE)*{p6;|ttNT|(TZ7rHL2vtHOM8&$m;LSnhrV;*>2iXtno_j--v<>J(*uT{TE zo-OdS4jbT`zH(2K{=G78=JoJZy#{O5bkr32>HKl`C>F=q>@Q57-odzzG>K63G_CWare#R=2GchZiex}jcjD^7t zP!VuJCd48$tzVWWn0$%LjS-~Otn6@z6#x>rc4~9*WEsV+Y1 z2CGeOZmLkgk^R~aW%xzxHIA`WCExbzZN&U(yQ(ZdJAe5_@7k%W^u#`51XIi;C+4C# zoS`q|MayRR7PZvVW`uppB!|JiwXooN4_5) zsfBg9$HVhcW-niH6m_a+-+_tiUhjTHKW~X(^3O-=`t?6XXfM=&-X} zYWh6CTPbSY!9C|(+}-_{AxnH#A*Fr5%(W7@ZQ2s171wjWUeCC^<62sIu=81t=TUP; z`RTyevClb7|8k8pw|gDqw-ag+iQ@1`8l};?`}&#kw_kp$eO^!T50?D@wz0?cvxmVSqdIZb zx$W!@9>zTjr6rIw^u{F~;g!zjDZNe2Spqw|4Qt;5!gFG8^-;LB{pyx)kpGxJHZPlz z%X#>(dW@%rHST?Wy1$lpm;P!cP;!7v+$V%twL!!h7<{|_BXj>W=5@Te!Q?*mrLi}o zc#_k9EAjWbasG8`E@cX+$MaC;`ju*NTtgDXMskdra@XN-5<5;0c}n;(%Xic_NTz*0 zpe?H!xha&Vu&EH#*LkZui2;pE-|AwlGrtBJXq{5o+5J;!5MH1g!1qzzF`9N~Wh`m`M zbVL>8G+rJAa=4ZiomH_{*^OytRHlR(FURAR7{@mpsqB}|mJ-e}Pw7)QcU&^blcmhX z(j|+rUtOJ{#{5(^iXoT4vTPUN=6zXk+Kdg3dGT+yZBI(GT$10a{7~KtkAoPM!>IDE zm^JcaKMz00JT>V7mzvf)Gy`Ot^_^nNVb;yFu~Yim;+ez_3aRT%=GCbAChyYOtdCK; zg9g=vqB^H^)ta`Qc&;J+@_GVlyy5)~#onze1Wc}Wk_S?f7HX`eC-(Ne6?=*2(C>Y{ zb7RG;0hgY~x*79Y`};MwdByFIYMg$p-0HjIZ7UCfZyj*&pvNHqD?zRawXIv~8NR&S z4Qspw)>sb@P3hriZ?*j>>e!fgA^v?44_CQ_-ATvU4f~blXiiPJ!ppgPqhjtsZ71q> zz=Tim8(-a*X`eW`hi?Q<9;Y01P=z@Qk9V^2I_yOF#fDW=%Mc(K@lnVLlCNOGS#wiL zfP;vwTjdc!`l=m{1dS%GW};#gLCitY;y9ydhutGZZB-T&1hrn+mRWw`*Z=a< z=q7PL_>m5d&yZ;}-naXgI?hMd^ZpJ*cwBkqx`XS+PV3CLYn0doP1~ss z4WR9+l%NRM3^8-^T9N?430u*j`;GkdI7_`etlNja7JMnE;{{Iu;UW{qv+{R`;)cU+ z5sMx6=QhA65IQuQU_l|8y!>rJhW3<}Z0oo+uq50p(AD7qbZD;9Ev09H=Rte2j!kZ? z!=qdfOJEXw5ja*Grf6bS%g1_$BFt_Kn81gd60A-Rw)SwF{!TmIClgk4*Db@Q%rF1 z6zzIcq(T928%;U+E(-9H28n1ZdL^4h7VsFh6%m?9s1a9`J7Lb^((U)`n!+o%!>G~Q zhvnANnKC{`V5C-oQOX7iodParRM<}AVn{+ zuf!#YK8@oe=KeYRe;M|CN z1y&u(fSN!hXbvt1NdUyGOt1>oW4#b;tR01f3sOZrmr~1mdw}P>`FYjXo3;VA71Y+P z{Ai#8N#rOvq_*VxS#hw;U|*hramySKz$${kk8XzreAobHSwQ#C6&^Kvf)ZE(Upq8` zS0vvc36#JPbQ4Y;Qo;NbxvdJ7NlB+giwd`e6|sowgqznjlDi?SbXg-VJm!Ab42!&d zQJK8!E0Q0-M7p9CLtqcuzw{i-ik$eX;6cdUtaz%@47q5bmPq(V#YN zXVx+2m67McQsZjIZlhUIYStpmPF_dT0UcsDNicAq`mlx?4anJ*@-|?(SQ?!o^ew`$ zp<)G8iJ3A)en4iQPL!Zgc7;@HS(J%N+Puwt77!TrkA}z$aTy1!9ieZlhzvOcViVdi zWdP{~T%?pSdzR~c3O3EOXC_{x<2=3k5Xb`X3YM;6@6EpV2k4n!LXY*Bd3;DW@!P4gi#|5&}H*MbDk6Za;t_{F{>>K!!$b*T-UIbA&^rFc0eShJSG%Q}18$v^y;? z8P70Fj#F_SeM2F+B%UuhQa11at7<<9;MD5PZT;>m-KD`Ia1e; zVcy7jd>6lpBv1ZQMo#$62KOVZa7nX7e&(mIdR%!p<5&*B>w@EY;Ih|qJs)G@<3qh# zz1&(K{x(+TgD&~-`fo&Q@$Ol^$uymDVmI$F(c{c|zO8}ZEb~QG=ay+H^{=OOP7>MO zeLGJUhfe!`Bj4<*(2w(Y@$PK8Tv=*IQ!maq34whXj1hdoMB@ySC|H&AiM>8N*7*%( zicTQdN=5NAypm|@xB);lC*B{0GnXy%cIvh~gcyD33>XE)h}`VYtKK!lq_2-F3fX5_cLpfr(RWyqS7vvW)9Nx;YM<}U zgBk8)y0N0i{Z#zNfq^1Q)btvo+8AN^Sc3_=fdJ#CWU6E$iYjBNA|hi47J|e8Bn4I0 z;sQ_z-Ok$qKwHERVn&@fWYJ3_?>+zzM70dA)$}6x zW6}HF^ZM>^C;GE_;JF?$!Pi&u=hm6+n8M92gp@o_&s{>pWbit)4&TCerimyv-xIN{ zpUj6JDrNH!X;f7s>@sZj)PKu)oG9-Vn$$q0FBSU@-ASr)=q$6XrNYPlEGrGw z-0)~2+1^|Og3re{;Rr=2AAofgc87Zo^H}X~tGSeaS*Vv3r*wytr+1frePrG3hi$)Y zzZKR7N&p%{#F4>^A@Bwm525fPP~=E4lfNM*y3a~uvc~0xwm3e+&Il!_CJ0ok$rU!= z@M?p&qn?PzQ=c*P>Lwj7;pdRuwMNQ$Bg|Y&l^#lU5CrGi_{=PAUoTlMJm)#UsFcd7 zdpWF#90g!zF$~i(i*}N#+AZinM4>VyO{7-2Qm!3V=OKhs*fcgZ2C_5e$Oz80Q0B9d zT?2-|nIk%cCOohSC=sg}XU^f;EadKEui8Aln(v0A9WZtAK?T%W;DO1m-FDtWm*F{m znbR92C?S_s1#6!{N^?Xl9GJ<>&pFihX!e}DJwcf~`)@~toreJI1q>K)TS}!oW`T~b zp(+G%fA@F2ST}HAWFt)7Ye<#IJMU#F+IY>h^1Cf z6W1ziQLVS4?5PV|3QyM5fl`~1rmgBQrm%cP$wg2@fW7a)XbzQZ%H!;wxIew)W22{u z+6D(vB{kU>mj?W9md<6}#rk8vd(&w@&eJ|$T`KEB)`uBsLQCw*A=|uvYRc=@gSxb) zFvv=)!_2NprQI*{0Q>nWztnj4IE#4Cb9Ql}32g;kOqYNNjKNkY+g{tS0TjZ(p#mt! zk}kldP#ImoYOESeZj9Eri&NPQk=G+Qin#mVx(r92C;XhUmETZEIaOuXB>7e6XXqxf zVo)hd%3MNoG%QI$2(@>)iI8YMqk^R}C$tGU1S?GEN4T~1_@2#V;fh*8{O!ucYFyK;HSCAzwg-4>}g!o$5bL<{Xd6XGf zf4p1kM?2-gy%U2OD|lF`g@ zoY+sb{dKY3KiY1ysgiQs{6R1IyfZm}pFe#(gTE7sr1RRv^_oxrKRo^S$KT|nU$bnI z)N&98W*I(z zC~EyXr~l>}|E16H{lmMd0;$*jZohfaaW7Yb`WSp^`6tCKY84k7?DDcZmo()4$k0A!(-JCD_)b*!}HVlPdMSl|J zic6b{+$KqlSAWAi_tOG93C0P*2~AejGHp*COszn`b}Lgl zP93^JRWv8-pl1-Q$r;Ee;#>ne8rII@0D9BoJcnis4C`}Cbmy$U);0Su-Yk1gvx?^- z03Fn}pnSA@t~9~KgTav%6yh-PaTsh9B#7=Zz!uDM6Yz$mAwJ%Ka+Q=sHd=B@ZrZPq zWZj4XnG}}>q=)Vdqz6qJh_Ky?P|&;fHWXmeS!`o zBB5mp7AQmNMxm4Jvja%fV0)^>EOi}}kcP(Qj^d0D_6O^4KIS{s06fj`N#h6RQ_0!= zH--v9_CKsY8TR#?2KV>~YvPjk%xh&YtWamE+=ef$Fz=1r(|fi%2G%!Gy3tQfCV{rZ z$bnR;E>{tOV?RwShy(n-#W&%LCH^pp% zLM`Gr%9vX?ZpT1UfDF};WLu|Qa=1*i$}R(S@@?ANVh^1RNkIg@CHnRT2pCH{c*AbC z1Ai*+h2O|n@uB=G`Ku58OHsM#(Ndq`@zSfTVBJtavx`Asppsv8@z%(2N&-1VPxYYr zo?MCT>8~q2A+3T!AP6N>G9J3P?#nkP+XxOEBEV$~nbTB!i7-XDthk0fDYZQ7^vX@B z-9kBu{@~0JScXRV{OCuROQlc4o*AlqDD~+9_SoXtU*}AYye(fch-+ z9?)@_$D~BK-QM$UroG}rVT=>GoJ+<^x!`=nEiw>AR3&fQeS=|ztN>z`BssQWEG^Syd2{NsmN$6BttB+LG2+snrz*%wpanx zOjIys5C|vus^zR@s=Ma&r2*ew-iD>_6Ba%yu4b!ep6wiD>cTX+wq%;H`BF%RS9847 zOPxMOmaE8oI&YsQUnFS)En82>1Z&T1{C2D?ZocSRwVHH1PUU1{OAfAA*%T`2jObJK zXFaY?iwx`_kUB+F45ZdR#E_dNs)3P#Gew{jE!Xf$2^zsL@dQ%PH4Msj5W*1@avB85 zW+qF@XQSPIrQ6?st>0Wxuko**@^3uBd;3=HzQf0d_ap+k@@IS{xm3d99v2`J3gouw3$Dd`J^93*PJ810w z{qlS8rFAtCdIfO-C#XQZ02kXLI(V;ygea2b&j3WSG3tO0NZB9*9;EixG7q?$r*_I>) z)_i)Z7QW6+2waQxUiI%2!4f(GE^XMT1f)pp;!MP` zqDdR=`ORKM7efP795k8ydQjDatCOmLtbxVBy|Cgq<7oTUb^H4t%fSBkzW>*UZ`{7a z;68m3zdA`dDMp8EXw2L6rH0YH>SSkWMqQrQM2GqejscPx=25eV+4t=pp;@Um>eAL2r2W~8%5sC1g|B%bPEyM$A{1r{BI9be2fc3!%N)%Ba=bLX7RxkA<(U1q zyT0ath4(y^_JcDQhA@m^0E%;XMA8xSNb4JEy2qBc7upRA?I6ZsYhk>r&eI`9s%?qL z+T&in#&1P%j3?Y3xtax>3U0CE>i@=Ha4iDc)6iFkC)?+Ew;cr~h?o0-#efGkPP)m! zU_q`0EW;e|6=_uDz_~$SBw^QpiL8)g>PbvzwosK{(j|h8*;V7MO2GJ0{v~ZOJp`CC zoDA22mau_u@MaPqM0cs|ltdyZAZB?$^YvWWLF?%O+f(MGVr_NS z@z}0fVbk4!ZEm_%d1&R8gm zG&>L5RkjftjL1i|?Zgk=1@;Q8c-bx8ePrh?-7UCUexrT29pyYGpjvyJ zRpwCoz&!b<>lojy+!vMA)qH|k>ZnincsYlY1r0{A?CVW=KHdODw0u*uS8Bep2p`5h zEbZOi|8}1yUKrBwT9Infs0N=mbN47cLBz0z5ar<{AWhZK$j$Q2z)|h`JIu`{iULX+ zY+H2@>xxD;k#lqM+!<5B8B+@8_>JC$@Cb*QqAJJwpIY znI@=-i38~igQ?cw-<3%pOFO2X%w%oBNRJstIpF1G`b1t#K@AX?2@;i(+iUsV3Gu{J zZGT?<(~JJ{@{jO*AcHBMfG22b@9~DMP%7Y+3R46k0uN9amEjJ!jYy=L)X~ofL11FK zbgD!hU;{u(6=^ocfG)5lLL?Bj&Tr4FZ#hwi*W77X(;y=)kv<804jhT!Q*C7{k*>Vu zrkPnAfsimF?nMMLlf;Ru!nzPPaOJ z2#zCTd|yi4Ql`V7lRUG-h`IO`&)5+?B?weDrff7uKqtHOc4|(SkeSVsiWJRTTgPot zl|QD`&Y^XN;e7KDh&6VslA}t&xXX?OMpEX`Xdkx`xQ{{Ae(%vCb8w&S4( z=i8>ZK<%487{B-Zz!hr3aI%{tO?!6J;+h2sdXbqO#=0M=N9r!*MtK>1qFjaXb9tREhy0pqJylO3(Pyy z-p=j$WB&Ok#N*e-Uj9^cT=rVDm+b|=2;JMh1P;MN(>2ghGLA#`43|t#0+Z4V5Cf(F z2%rcFAPPB>ogsPMdHAAqXHLIy_AC zNT@+Pp;w9s&e%p~N7)73j%)))JGWKmDq^GjoQGqP#YFV1Dd_2Kl07%pH!r0PkKH)n z+WHyiF6V>noK3b%r@)jjtpE~b)zq2PbPN4zgapbMnGm#7`8F;NrTd{X1Z(yQvNGQ~ zFvc;2RR6ZYK$hckB}8W~#%2OZ6;m)cj@Zbw0+>`O+sT4R+Oo@afz%e30# zYICLzI>zs=qNiRS(qL&{!vQCGfB8}V!D3~|3LBHZ`*_`>TfvU2ozC;aTOYM*XLES? z?Jv5FFwN)JU;d*&tM$9J=<9H*!)ex)Z@(Qx)hAhYPO$xTeU5SJhw<2_Tr~w9K2^@@ zNg0KWx9gBd8q@dpZ|a2SrWXdb1Tp1Yk9IwJ*~p-Tf#V;_9!#50H0^OE?-_&Kce;f?;G}? z{Cbg=NBd{d?;yG0jFiA*altnm+s_T3Zc5ns5DPQ~@8F-A9!32GiQ##m*8$OynN|X2 zxG@X^F;U~B0aC{#1OQqXgpjEKx4?zaGbE%UD73zD4}4($?F06nPj-()JfbN4TzCu$ ziMNAj>Tp7c7)*eu6INhfkZ%L_cgmHO3z}z2?~~QnC&WI7O}=!H(93Xd{1KV6$?j&6 z#k0L;p2vFSx>>Gvj`m()K59N1C-6p@Lec=8r8Oes#vpQCi?^}XgP34~omw#$oD^uF z)O>T9jvq7jiHJPi*K`9Qod9L3K8A!^GIV-2fy#ErEYiyza}xG^Ss ze;VW-BfAu`AdSR=9S&A*vCI^~$)Jc4*2dJ5x4PvCBQA<*@{F;r(&ZnUKTgozzt3ak z)~vX_&s*`d{>-Q@Q$(L;053q$zgc|XVmGQ9tD7l0@XBc{eGiiwB?+Z`8+n&tDgVcH z2)|#b>3q57&fJBtt3+qUtO8wucNx8tywBsT$9SB+@5^UOy|UGk6+MKC+os=Ecbo0l zAA4U4M~9gGIDI88fkW7f!1bF&BV@Z;JE32?Y8ky zbD`T>6SJ8TuA#F>zbcp5>@7C=$vjb$PmP8IlOqdzm6W=SIZA{a;4xw1=KIcx30Z-J z%mE&gu50WMYxxi8l|!@2JF2Z$wPy8L{?I=3esh}YaN$*Dt5^%k2PKP)Tjr78M@^mC z$aIF=bKqppM~uiX3&gC=ciHd%|Ni$0^*#Ojzp`Kd$^ZQ`_@77r*Z1!4Q~jX&iQ4Q8 z-2lxiGT;fTbZR=p9ae{f2B>cqc0tNNPGGZb*Z#|1ZjE;H$K}t-mFmI}Hq&jwoahD{ z>V5rC_tK6PBbY7KG<0l8zv<|2GLlm=QAHq}Rtp=isip3CzI~frX+@DpxvIHN)RXcT76x=KGwy5)WKERX`bNqaGHhu zxwjyn!>!x;J*p&BzBjjTZ*^PznjkP$3ZBhRZ&30i#Cwu3jn|}Hh@WeE8DL$nqq)LE z(kB54H&>g-)WfXR99{Lv2%9HDEqbBjCwg@;&tno%M-)jTcFv(nX|Fh{S8#pKNt^Mm z#NHEgUI$9Q=^n#FfF?DR_kS?J(1IlxN&t$A2FTbWhlJuigWV9qfE%}lNfo3e)-+FxwgO?xhfR`V4J zJo#WhhN;bIWM@--fL2d+DuG~>fs_E;nk2mmM{0y63$>`8&RC#29I06;U57y}zHU3D+oy$9J| z=E4ASvSs**)kklymA68(tQ^ zUKAD1?$}@tLtf6~TA2X$8<%?I{m346G4LE@Sc@hGEu1*D8SjT_zn8pvm>&9BuRpwA z|GM{g=gS|yP)1wCy@cI~Ue|pYsY(JzsqA55Su3l0tffnu89EMop0&H4y$7w|@wtW_ zFz@kS|F!ss?)e}1@Bi3;f7<`P^jgT?A>+&hFRRXZ#a(1mh}B61)o8PXh1 z%x)$C$sQbV#!KaFgY5Omw~u?^R(#vME+}oWPsw@Sv(m?)9Xpkxa?3bU0vgdka4_he zPAU#q_erCny(=bH=qyrmkn!-F-oL>v=tnM^^|9Y^xIj(OUiS9`+B*Y*&rW`Z9A@u=YIefn7*tknkwV;eaGae)v zDFND#_nfI$!i~=DI=Ryk-ffXwUbo51!xu1qDnFh7flfUbSLH(qVBS=KVm>==F0> zEO}q+4r5xtsO7XFjAQ*sJ&En5AEstlnx@Q0)YY9Nm!*0##yo z3$z+)0YO<)!YsQ|-|T%A9ip4my4?faU;;RxKlR`5_kXwf73vA>mO=y8RnIj5qGxe& zJj$A}I0qN&2ZoDOS5U;TzKD=V5F|CtD?9yR{GBnJk(R9C%R#<_qSc8HI{ar zcSTP>7b1GmE&GXX>}3}T9l*f*iOU-wmVWa`4<)D+%cZ0sF>1&*q^R>f=>-gZCX3U~ zQ};!5qSWNw4Z~?G%xkZpJJ+juEcWr8+5cIuzXW{|yLD^eywXK|XTyhlzR6z>HGk-? z@8xy7$llxvl4k7lm7YVb`wj>lmCSxS=hdaNj@5S#h|{2B`B&#B+d(zA@W>Ae<83u8-?OAoFTkjfdC16XX89 zbszrl@>8b8n9*sRB3<+v4NST+b~CZuqS$F&XEL8Fp}$l@s70558w6&qNHThtj>BJXnvrUdgAyKhOD@Q_r9@ zJ{fxSSt)oraXz(i^k?s3aLTamv)vEejb|hu+wqlr_uy{KVKGN;$34$K4r`Bh-zc!m zRAlmT?~i_a!k24qtJ-quiehq^S!?QWZqiwC9f)~s@G>bwiH)>TG(jwBc{~2U~y?d8t|mKuDvG~qAMly zYFiHH8T=UDT1a}#v9Ib8Ak;b{c=>p{$uM%V^}1I_tQ2|jQe{FGs3J$jNk*U*^eUz% z_JTpzwXvYnqVagp$Jq=luk`zkD?6Sb;NFAm$y1uIJ_NchnG?wt@D6NqCFD4q8Uyfx zFr#S$8Kj7?02nYJ8|bF|k%|hy{9*^f>5&(DhN5(gg2H)!8_g1=Hp75+p>34}g%XUY zq(HBx8VXXRjV=`cL8|KMQTw;#37(nSDFR`q)Hc>kD~$@~!i--i1htD2UE9wIyuG9a0Jk4%LZ4Dx|4-|w~6WzQ6i;cHj`?(q`v|X@?f=g2<&2R_~QN5GO zaj%*X`cQDlA5Z%8&VFwGj}Oo39|v5{iNIA_6bPVloV?tb;TdnxJ3*Ig)OfbX4PywK z%bXQ5M#*SX7Z8_Y@8y4Xb%5WG_V^IKg~QZ7nA64+awO8Tc5|j4Pn(}y&*9hLOqKKL zGym?-|MT+xOcsKiBc;c^W|6y7GR>-+dOeK>tTT)rrGo;Y@nV-PJs)8c?sU@4V3S>-ZEiO|L*+ zv5xvxN!_C{2Ey8?`*lg@V_n^0J>woSYgAf`2YgbhiXI9@@=a5y$Ihz;bN9Gwm{UB; zY=L^^r;=C)cvALowEgN~xtOpj1ggIZQaj5pK5f3B_u2G`e*Va9NNG``I{6;GDEI z=9CW#jWP&D>f~)uM$um5O+|(3-o?_$xUkOY3+n230sXKvU41XcY@dJra5+vOBA0F5 z6copE*M7dN$o5!Yk8MTr{qj-acVV1 zt(lc4@9EZ)KEOZ?cBfa1j)VJ)=C^nZwxxr4Fe)zPG(vC^lyKm19us1RNWG!v;t5vVjbciC2 ztgH5)AxdmVZ2(<;hmA7_mMeguQXwdorlx78?n#|8F#2_?U(-L?pQj!+wlyeV5zxmj zLplds%mj?2u@cIe-DoX$qC3-xuo=^OuXW?jy4PydZYy+Nh;cojlXZEpS7VT(BBD!1 z6_z5|PT9XEmbNyr1nc8v>M?IA-@@D-QT_SLUeBcAr~UVK!{_<_^y_?h>;AzwT`#cC>kr2fj~(XreZ~-9KdRE8fCQW zY*ra&&Dm;%d?uX2GXNiDy=*lIjsrVUL%3o+@s?;?4A7BQ*>ys-DAmlnZSgGaQPpKyQmeIAqy`2PFc&q4XS5A zH_dLaGrJi(4}l}Td~p8Iel$Na+v2b2xp@^!O`LMEY>oGXmta%83$Bfyo^v^e%jE6b;JYc+qh|FnL`gy`-WcnZ z-7&7E3$i`y7&t*p6JCQgPfrK8&q9mz=<8o!{L5Ko+g}}+e;Er@GU1OMKGRYZ-mHi| z`D0c~UAlQw@Z}#cH2w6}I~jT%P3;Yh$CZyizJae9ecpTuRnt`2Q?!SotCWdQg~sA> z08_V}*@3@RNk0ZkKq(=$?v%ap^)4T(=Z|7bipW?n;$5B%H3j>bpZ}?Y>j9+J=~o*n zr(CJ=e36Ay5jt_yRe~kHJ)AAi#739-wa59j)jLJH`wRS(e9CVp9(v!cd9xdCTpRpY zFafus2r>WP&*6I}q*yX|W;Ts)zpi(yz?xY`JvEDC#))1e?kuAp3vg2L+WL4qQR(-6 z6UaQ*JOaQv&L7U(-`+obJZ~-cfiE$IQ;tlKiPf5;e@6L`9E4N$xWv}!gh4NuDZ?BD zX3<5liI~`d&D0Y{%6bj&U#?~GFWUL3H1eaM=)35HL)_*InP+iU6-TK|MNeIizw_62 z3O>G{wUn>q&FF6U<9Tj$-_qYcvze@iere^kZJ9hK_`!Uc*t)aBJPx%?rf%-RIrq<* zZ&!16dDuBV&bTrAo6B8ej*GX``J4Ome_j9lQS5L1{CWS~zwG#Q+v)k!N8ZNs=ld7w z%P&tXU43E7`HG6f3C*#AzN3rTM6X60g_cUfi?{7AIfGmQXgq;PAhU81P}mZbVP7fm z5Zvs!-q(}w$BRF>`R(4{XPyR}hx?b)^Urbrrz%;q4VSp3!|Y`}6?y5RcnGYsCnP?8XXLGEx_^#0s3Yd<0YvLI4@Px*0_K3V zo(IvRr+Q{x3(_)Loz4jqT$BP)JV8mIdkNX7`zS!vP<3P-kMKZNnM_t`bF_!VaZ@35 zFVGjsm6XOw-5)(_=rSnBVPP)1Dr!LnE6$s)=aMVh{f#5MTC4_I+Q}aF0%6L_Veq}} zC;6=A#cP7!qPWz<-J~gYVI_r|_z$?pKhbCR7&r%R5&_Tl3ougxl0Tz(_~(h^x3_|4QDp zDts+eSEpuwmzmV&z-=btFK2<;QCLU~fAI*E}fiJ;6FVaBu#Vz4YTgVL+c zRe8uVCn=`R`nf{kP_BF**_;z+Q|8bTc?`~Phalti)#YSb2{P|+OQk_gERGzZyr?uo z4Vy-JNOlw0IjuE$`1zesAP!1cxu$zXL@3QhF$|>%6G+-HIV^LAtdoeMM1#aJO*06d zz0~}LtI6UN=hU%}gT_5-`?_{!anZG7VQ^qMcqFNZC`N$KP0KY5cUjt+Om<7Rf+s{##ZL*@wDvgN+OOVN(6^1JJd8R!zL1th&HuKc?tJZ z??(3(=w-cr^Q5?j*DZ1;BB+OFkt{3iGLXF=VY~+FAmvv1Q6u4;;W|%p!A* z%qq#W#tfBCA}Y2OS1Xj2B+!r;Wolru6{t=TFk}@lfsm~EbWtzi@%s7l&t^fcM+U4_ z3A<(M6ZE(UCX4isr-`s4iqI(6s!P>|yixe^0Mem}YxBO82tZJ12n+xT&oMxRW6ON9 z&>OI};K4asMpeUcjRaIYcMmq(mdxn5gc>TAGiB88Q$47LaD07ZyMww@b2yU+jQ>G`gk9FYSD zQ`%hRpe{Rn2|5Xx;z_JcWkI=yY>_%phO!hGz%>i1wmhktv$oXBhHQdmyw;XNJ`vTZ zP)=YcP^+Dq1wmoH7Q;n1r@v4`c$eHFH&ZkQ#O>S8}965zWHuAvFP* ztX4;R6>?Hm@161m_`tmXY^8ZhWac68K}pMCoV2?Dk__Op%Z1bo)!$dA++u>chnbxf zC$)dw&riBL)8%}-Ve(pmz*Tbz!w_bt;i$c;+n9Dof^tPP@n-AW%_PXu>uJm(p1gOz zO;VqxhtB!oc8*`R?O2C%)L&Y6bWxX&Ij&=4m0cdQ@yt`{?s6(-ekC8d*}fS|RD6f1~hbK%S= zCQU5An74x;!oNN{{=Z-Uync81Uq3J7xlS6ju-y9+(Ft^YJsS_Ek3>Y!boWf;G+NIg= zZoh$DEGS7JptXJI6rqgBX7JhUAV8R$FYM2~NjtU;&0d2(%FIx+rJ* zW1C#alrjEj+ukQ2J#z}Of|&zl&-vFG6|=amc#T>$2llcC?$94m0*I!<%*a)4crcGBZ@eDfa+j8LeZ` zYk#^psATOFHNXya;KN))tfM}qyg}z~?w~sOJeK~pk3X)32qg3EhD7K7HZ%v&?@))C zrd*YWsB?uCRAG#U>sm*yl2b>JZ17H5ez2a|hxbV%irLK~Bsa^NUyn=OU#~lowT{{M zSLXZInXko{vt@h;ywGv{GN#5tgsA-~5lkZ+Rtfn{g{~G$d@h=T5FZbEHG6a49j=}S zfv%(H*rNd`2YTrs=x}8uQa6NE#xSb2u8;-o%Jiq)Sew@SU67GxWopiIBJQ5-ypvEf zy2Ax~Q>o17hYMAhHjCAh)P@s{g_HzG4I;xr%v0s17HOY&jn<z}ew!xvCoeBM?q4;Jt^Xiplbj+1jiw@;MqL1ED8)joL~%)Kq|I7V5wsfD~C}a zr3iv8MP^mmQ}J{q#?`D3XN4f-uv!9Q{u<$FX>vTCYnTcAvJM>VzMc z!~`GW^>{n+PHu;OVpAzr>ORO>1AeRC5}-7Upuh;{@n}5vynw51ktfPbJ~>w}0TIuf z`CjOoFr{K`tao{McR>Sbdc|IH$X(hrsNGLL^X1K(z977Tr|d}e=BtnALU~>AW!p_% zdK@O=6Rs2BFiH*k46RnD%^y!b`h{Lw_YvjfEb6yISys8j7l0J+L-1DW&eN&`Wq>4+ z7&nOlCW60(zz8cvZJh$xT(chBI>}l1UWT2d*dhs>NKTWogh%s0Qi35g;t`lgB#W&B zlX+Kawv|)An5cLNFbUEsWQg&ar*pz2lA==RXrM>*29tFIOO*7r>l;1dpDwM)QB)eB7~7(MHv+t3VJgHxG->O&T$XDq0TRbwYR%RcH)^E^~IuH zEgunI6jnz-?!o^r+wMq4{QsIE1 z4KV-!5{i;R0n!Gf^M<+U`sfHouI+the$Bh5z35|H?V?v@wry|JD$@PSSG#B1l8V7g zkeV?Ss3s7>DUxw!M9`!_4N!;y*38w>M&Sh>4>!joNCj3zL=2+95(EXM5JGJnAoT^L zQ9FVPGg?vavfXBwq?1OGm@=dydrC;a=rs@mBDfF(YMn>_71>Y1TWO8fHrys?1g>JS z=V$|C^c(?`BH+yNm1I}`1lcl_C_eZo&1x{16t5xzK~&X+B-)L`Y^1}bFaP?*k+&Yb z3C*OQ-OzQV;hE1RJRe-Qa;Loo|t$R?< zta~5FH6-tld!-j4z*obSc(v#^TCJ&jU14G9J}GGo+#nIx-o(1$v~QClAQ?sWgY;?0 zm2eLp(^^y;GyuC7gB5X%H>z8>UmIM?;(bM`^%W9_YsbOdM^q|eIo<<<7y?90?Ga^+ zC2>h%On>O9l5G>ELW4?VMUJLydSo=U>g*_EWvIIsn!+d((2*vp8(n*IUxsJ6C_Ck{wsI>YQwKXyqHatjy0K+vmrwdF77iBtl|1#MA?kD!jLCL+fPcTMsB*{jfSivQk z8p<}52rVylU0wC=O8tw@Ql8y?iLRgG<7K||cuVn>*L-)&{OFf{{Bgw>j`px_5l@qk zvf$n{698x?t}@1`(i&h1gflywTXkx<{vXeol&F+)xl9r79P&QiKBclqM)HXP4bTH`y1E`YkF;AU&((cx-%FWZh~GI9&)C|i}zWEbP;2m!FW>njQ3I(FPTj?eSy zd@n!0wOl2pH{H8YZ4+j(obUUfy!XYx#;UH{j4X32nXbS!tK=*=cjvr4+NkgGgQvA0 zE*e(}TVCaXd1rn<`62!2tdO`WO^_Conng0yx;7^7;VkKDgq2dE1YlE?aZ+v|4Vne# z=*_4$lxBavn3m!A+aK-1im&?F~~2*vUUS0{6uh_;a9YcgViH;kdV z;^(X5o+gkW;h8L>MhZ^_o;>?Uu z5kR1b+5pTD$WFsVAxP29nK6j%&G-@zMZ>P8vK&!0ij&2w_D&9k2LZc zztye9WoF!5DeRPSh||y@JbjXZMl%9$@WgSHt;!7Ydr`CuOj0$~3OA5(n+?;#c%mj4 zHBi1*F6@jL*?u^;o9=(9{%@|!?LD?g3BnY0zP^5ba?hjJRebt$_w5ZHK9@wp&=rI0S13W<(gQ#I{Fh9k4dtj2*y6 zI*8C!0>xAj)jz(Qie?&w(iJzQJIxM5Kb-7$Uo7~egU-7RC9;pDV zgVd=ENHV~3i8Q7(b_F7nLY7x%QnG{517n-GR(q4r%7x5KLI{RHVrUf{kHRbWMWy95 z;Gkw%YyXy96UeS2-HfeIjZl3<#U;(m&_O#W4P$)qH)jeBN?g3b{-q!96O2t_nA9*6 zk|5C=c!Wr#z&NBEPf{QOfFdAR5)yiCZ_FGCTG#&B@IQG485Q-MV9n=(r?9a7sg9(F~;a9EZ)tfxp|@tE7d zAF>$L$r7CaP_xd+8*DVsm@ zpv(^MOl<&US1CoP;h?2G5RS2+8hy=77S^} z-GP)N6@)^11{UBBdOp;PVuNO-NS2UKH<%!fLhUdddr_wy#8RemzyoCjRel|HQ18j+ zxpW1ni~`xJ|8|!>z$hIf(#f=xM42AtLI+RMR2RUQBoFZFv+ZK-#=GIFHjanxLje8s z{FJLgEEWv>n8!O|t92&?rj$mY1%=G9G9G|WDTLw}H4gZuHAvZvjM{pmM&79+vZJ+j zPnVR%-8R&#*nJ5|)30a76ijIE_d`(g(^va%VbzmZ_hI_AR>X`LJ7qgw1O?Cm(G;pj zc;}lrCW5Cx7E7<~3F<}g!AS>4f`k+ii3u4Huowv-6I3ToAZ8lk7rt!J5r||1titzU z-J8+4E4YV``R?+d_i?q3$1Qtv+LOVjhE>4`fI*>%aO9*&ixys8M`d@cg|c`Y(l4xJ zdnmjy307_*Cmv_91h}Z|Ax9DokQi?uZg2?Gh*2W6x?j_6UFggN#*RB1>vZKA;9}B| zBvd75Erh0!yY2E?Tm5cQt<*>8M#hzyv$t-D#V~Jy91#OH8#&BWBtG>RX`loK<5WbH zgn$drojR@^vt2!b+-QsbD=z9BL?BD?a!nD?v2~9S&4AHlNRoc!aHx+-pz<+H4f;#- z^&j!8ML&?J9Lb6*NzR{JFPp7gf`+AW_JEH-3EwZ$v;7r2PdKO%*++rarULV|^W4{C zVImme9?3>^K}{kLAYw!_Eh08Cj07!sr(s1@CcK7tb5(5bmWzDp=I^n}jh!o3)bcu|E60IJt z1(+n5-O1TuSW7aMMI2k8{p`L zUbEP)hZWsDqe4`Bnpz$KC$+Vr?>O%GVZamIMXpHg|E&J@L8n$rQttg<0_Vdm&4l(e zp|WDs#TIuBPW!LXU&r?GJ;g9sT3MUaIOZ(ej%5cFGO9r{(D)q@$vN%t+`j-h@b0?% zx(@*eMG2zD%-X2SiRObtX&EfyFjubUI2b4`-ffwx7N{8`BpWq>bVr$z;b{i!sCTyd z0n*l9SjbMoU6OZTt=!O!*{zMStKaq6lR`AfSjkU_vwz$#ez_NCe*%q{@Y0Gmtj^AbN&S+8*el zUuRy!z4zG9QyRYxx^8qDyg)_P=G2aC=g%;Dhy=P0wRGBCt_4Y1R~%D zI(Q;+nZ8?dXFAzi%JE)YFSt}Zat0JY8f37J*7WQ4Z4G*Cuz{p=1Jgb!*(ML2l9EN| zD3LXz)B(t03__5kHQVqIjJGsMp{Xev9+L-1%_V5PJ5-sF^3%j{DNry* z_DWV;96*{!52d6Z>n;!SEpY;67V}J2Bx`w4JR#zfO1KCp%J&0e$1{>o?IFi7=I?ud8+i!0 z&jNy{zJV%1n~I3+guO7@PS5rwQWDOz85%{0;C2H~55-`Rlt*!hQyb6z_Dlu6jJcO%!@`nvj09D}2vmWb03{p?=@cm}jd|zp zZ@xVc%_aHfILo2&%)&<0#OSD7#hqCt(_tbicj^swf^0+-FaxV50}0zg5+i2HYdRTX zmW!w?KmamjGH0q=%B*e5KEu7now1f7JxhXZ+u<({C8$tXBY55B%ZyAgVl-7xlS*lu z%(x8aj3dDpY{T2-UmUD?*_b)5@OhSBcY_H?CMU9qRt}G7<*;~Na#D^+C;}s=iem=9 z#GI8N1Ww3M2Bc>oQU{G9^O81;XY(-{)3Wg%eLRBkDqf$siuyE97tcs$5(YC~nwKsX zZ>9YU47*ebv9OQGo+@tf*zyX~ZjnIvuU0x}qXu3y*6>-{Z{;_az;l{Vnmlibr|% zo0-ii!O^tfm_WH)b!|}U1?IemcbB!vhd3DbJxH2a9Pr zn2zMpnlmtJc3-Y_c?fCKM} z?;|UrzWxyXmch@@?Y|$`SCWEN0Vs==r{|>i8*)J6;FoKy z>j)#q3ofl;8J+}nk99m*GSQ+6(qUEOM962r5%D3%BTeQoLx&S!Qs}_2l!f0IU$$RL zZ;opO#OI8922@__?yp;@P74Yyv|o37tun9h6jZWFAPF~N0c2pP38Lh8kph)f{xj1a$O(tHST&@s&Nv-e(>GgQ&-_%cubUC^#-(%ef5|ARFa%+7nce5=&;E@83B^?D?2A$ z{n`DDwCi}-ts*ytKBwV4HF$vB6&hDKY=Tu-A^GCFoEs8XOA3|6mIyN=%h0aK?IHpI zw~Ut-q>2tp)v!bTX1u)aIpRdP7%2Hb1d53tQIQIHBl*Bf--XtmY-#GmC2=v_&v&_t z>QZIw6^rlIw52-R-ZFoqKkZDWmWagR=NTP~*cIq2lqO0?QPWjDc!oxuO11GyBlAGZ zw_)j2g%KZ4=t9NhX;y%J4E{$+h{uUFR#Jve7h2I<2H$)z411jXAR4npoQ-C3JaDm7 z05OKg-FUA7Kur1eRj)!exyMPIN(zcs72|Zbmzah6ElzDCR$h3)4ein-Z4^BM;puQGKsw-R{m1{?FTcrqhw1YujbqHr<#( z2ex|R=emkna@N4UCnhEVQ8;{Te+Bi87^8Pe;Fg47sPn%FRC)~Zb+*5(2FfT7D| zG+0H33%NB7u1R~t5HvG$7s`soQav@!9FapC6n6*-dW4(!b!sYS$C+_rAlZE8IWK6; z9Z=N*##x@{!6N7#vRGq~jUr=Qg(i6mTV;*NEvD28%0aY8`Jgd94M-!_xWo{;fzcX+ z%#9>ve93v%Ia?SHa<2MQ0({yoRcwdGYv=57y19J#y^dQ+wWrbx_b&`&WP)%-u9l71 z5Hnk1PD58YD_6s^wde9q!$(U4lRKcc9LhQC!h^=!hnIGcsWrSmF}&P9EI*ibmS@Ii zSCdK(VSx!sGtJq8k#-q7HH1N1OajW{y=bQI;?*81O z$1GoST3e!*qI7ZQ;%fk>T1-i&L#x-yxmJoSA+A|89D#Ov7 z-Z@z)Q^qaxokE_Ks2LmT)K6uGo|zSP0TB2BK#VNaO&WQpiIXk<9mUDqd!MC+0)7H&9n-2gQ;Jm}*S% zCdr8i6Hz44CVR@!l4qCDn4QCgGjsrxdWz;bQGms20VFX*QF548cU$e9THD=CQB{&< zU0z{|MUS@Q3Tw$0g-c;2H&B?o`W9m;PLb8^)VrlAP7y5rJFK zdfG2xuivh1zP5b9lySP!-Nct_Psv3?+IFvJWBIV4)Oc0(>f!(pIH<@nB1?!e z%xOH2@O&xX-d^aJJ0eNZnv&d2fqGL1{DfNdhj-le5v6!<^+a}c9~&BeF`qm4DGse# zUtzDAuH}xyA5MoVpCqOb?3kPifCiGXkBQ)1I;vX-ok)e*Ci!$~%83ct4o=uQ?tQ@k z5~r0s1h62OYu-w9fLNl}R7+YjL(Yq!2Ry<^NDLHD!U#xV5-(}8_vs&1etOf9Bqgzf zw4_c(1XY(|Qg!jIbO|?wQuT2nbfmvwRS!C=e%;#{TxPs#H@hKxiGk9HMXumKDSiU< z1#v(^^2qxEni_nwE<%wHN=o8d*)7u1?IOM#OeM?@vuKmk=cqsT~q=ac;P1^(qf z{?ES>88tEU*^+;8TmfqGbY|#5#FtHfVPr!eDo>9U8mso|MNemW4;%q+%;dt~e8|$Z#9ggZ18?2mdcd!g3;7GJieehpo3U`p~SE<7T)xU_a1f(h!F))QtbPxLTxC zMj8Kh6>Y}dqoOH_oY)n6Cb7yYYn7Tuk~^}6bFOwG>f3NNFq{(*@a+$PB~a4 z%Ia!M=-3j91=@%~uk3FFgy-lUx(9qdpT3T2dphD$W-JW&u5 zU=H7COVTY4!mR{DWq49d05D88jD#vl1IoNk?pAEjfc8LXgdIt^VSEu0)0J z3=yqCx|Zz|dqtLr5)ypB&)r%MC;4NT&f7~ZKRt3|R#+WIbb-KAs1)q^$Q`pYUFxY@ z=*|sp@+#r7xLWfiC3>gCK^N?XJq{@l(XrrHRKS6=R%~UH)fj)>chQbLTMb99UY*>|?NU=ZIrkaWO=o;vFKLj$InqksRx3g1Q zLo*Y^6q&QrGN{ov`80vVd~N2IU5FRXan$Osd#E)H37P_;vD;V?bbAVEq1SX(1h>cL zT9Kg$>k{3h+~xjEjh91P(+}eFhM!n#4E+3x9ep^MSKp_uff?PtEO)+98z?Jvqxr0~ zs&g+lh?oFu%W7^0e;4w??d#iP;_D7R(#Z?XbW{Bg44(l~U@rhlRHzUZ2i1@>vJ)$+ zz{OCU43LoI;ab9M8W~k2DaT@x5E`#VYIsE&jP)2g<4PoirNe&7f9rou<=^=K`hp(Z zF{^9OFQLC5<;`Fc31>!cslG*MHJy93n5}2@Um$OJuJ!p{#vXZ0c|zEjcHHx933$g4 zMc4FE4g!yvrsicLR*0gXRn#8$qQi69Jxgob{xfH<`9HC?!Y&x`1&X*-DzP0b`>&0I zfsfvELSAs$vP0$uArSePoN~K`=LHBSdu99lSf@=BVo2_r3egE!S$lMeUYT0&RQIes zQ_4s~bcm4f%3w^gqh&Y=P%8ouRcTnFgXF`-G7}t= ztwJ+N^={iWlW;X$BBWkdzlqPOWwltOnTKTO%3MfPvIHE8!r>qn$vTve9#%|oC!<}%el|>>n+YFJmC|z6?x^zuqqD$&SF*G zK3x(LgyDo-h%p-z!Mmama(XVw)#TQjg3;kw>9G%nq;xYeXeJ?bWD0~lYT316YSfkj+`!#cPNr9Ch^7P*h_(6nq`jIE*kV8c zq#)@w?R3H+n!gQOoLwtWvfzQMbaRpEGy@YIw@4t|x=c+#JXHU;7|&VEXu-IPMTFNf{+wt zSM$4my8pZ%AIn3P_U_MaUn(}_wYk{mlc`z3tY~cwW)T1>Ya+jJV~NL*kF#6^@fZnY zU=z$I)r@@#<#P7`0|6B~dKb9nctk@Xrxd#af~`4`abue^zOhmlV>M~RF(4V3!%~Dp ziJs3pK3hHs*QciP>igr{Z^Psvfc=4j8^{nD@*J78F`U<^Wv)67WC}&Y2Pzt9FlrbH zEg%X~PPEv95nWxQjF9ZT(@^2F{ldJGE2Jflf|zj+xn~myD2nVUoL51#W{e5VL%B^I z-M`&W)gL9Z%xOvY#>!;zJ$-0(0AE0$zXCXCG(bvVVR@TzPg^V1iHhfZ(k!NeOjgez zUN|{Wrep*W5GV^5c{V^K1*jr1f;GB(KqPzVxK=Dk9GD_PgJ2d6+8|qCI9(x3BO#n^ zIU{J=W^hjutzDx+k{J~OD;Pons!C`~nM*?jL<|lL;3`Kyhuv{kVGX9Hm&AjGm&|fN z(j*(Vj$Z9{`Q_$7uh^tR#9~Pp=L64UJb?GtjWr$}b2zsWI5DbFLY{BNf;kojSUEI0 z2h-#!dCI256cZz#7Se@xb1hEUa{Df>L1`kARVWq(U0l0D&|I-HI(2Q53{5 zwHq6ah;3Q^q_Wv3qB7B(q_mi7$U$Ch& zS~w83-(JK*Qwyu@YTa07av&Z|4qvBAS6&j-eGDd3m=b-R<}2X)b5y?%e&9F}5xJ`m zfmlle?i7o2KLX;tt=9ysI{P|u`by%5|4?xcRL2&ADOJ)XV#Q2_a68H2;%`0Bx9Rj= z-_Sj_jqng~(Zt8e{Tzo|n6K(B<`~8*O3@wZ!1Hz5ouwN)oW9iVu6R}br0t1OCv%?K z?cdjw-uU|wQ%98njN0IDhdXsxqe4yuUBHLAh&`O_?gmCprh(d3rxW$;G~LTSRlV5B%CW3oFWbu+0P8~965cj> zr4~k^bNgl%b2~uVeTgaN%5nmYJylG$OhfG`JdI(S9!kzILxtg@JpH=Yq8SKZJC=qN zB_Q0b0KvH#z9w?ZRHG3ikOHQUwZk@+(BZgKNODwn4aw4Ue`;KvCQ>*pIT}J4bLb)% z+M)^(B>a{v-DEQY=nt2m|M31i-u<>NPU-7E|HDlA@CaA^OW+_5xga;70SeHV0o~GT z?5Y|z8c{FFgr5v#NA00Uq-Co}R3>%mK#E`j9S4#ktQnH%W!P8TDgWXR=2m$=axp-@ zbYt2AOmyTSXYF4OjIa(|DiJt0sv-73Uh79L=j1=F{8ZSAMoAp4!aBlYtgRnsn5fb& zB}OevCWV^u8CCW58J|{8bbBM|ObWaV2&YV%piC;gw&UoTo#zMfzWJ>o^$wR$Tj4mK zJP&~zHe<%fNYX*tav}1XAL|g59q6?M)c^@DP)OCpphs}-_#S?aX8B#Lj+h(ZC*$(1 zVr~&GM_N1U-nv6ow<>HT^CS`3yH{r-N_e!T5;eg6!i@MLT##G0pjlw=)QcdBWLW?* zP7SF^B;j5iGm%nYkqA7bkB+I)d8Wdo4T?!6ponY|=yd~RV$uZOIkT^&Ga-IV*I^ng z8Rtx(KxWW&hZ9Vu{j|-ei^Jsv6%iT*o;%vwW zI1VF0LK(rz83ggX3y@&*IdSN@HI+o0iBp7Nsr^w$dc%eB4VKrG&@dM|=z}W0rLaU%cfCplb z?L|H(qlv3otya@}zTCn;YB@&aGxfY~ez~%pq;92ipN*>W;YuE!Evl@uhjfpoQI3TW zkqrWr8OHH&M{y(TUDznf9hqJvAp+XUDz?Lpj1-5m9WJw(4rJkp$>F;D!`=c zOiDkg#YR2`E{>$#FoTb5l_DN$alHwPGH+ zVyUdhP<35QR%d2MCYp%|H9_ald`1Q9lrCaU@2~XWM(^%JU`>U9imoBK8(9pB{ee<; z9LRuy6=4-12Lpp?0xJ-M@j=rJ8(d~a$FrY|(ja7nBo#y`T5zXHboLA}vrKRY0CB&S zvIo^{(SL&`Xv*>Qe(@d!K!VGxSuft zQgq@03lRuMpbAt=_lzn@A{0hN2#Dxlh$<5Tidj@*;RxDHaFcBtQofcC;7ezRo#*sH z38*w?4ilZ)xy+QQ1n9lmd8Fu{?Qyd?CO^K|_%;YdNCt~3!GxVCSox^d zns;cf&1|lJ^D3_7t@=MI;}TI6pn*|^ODgjS=?jaPuFRc0z66g|2(qsv-ZR$AiML2Zuh7$k zJ!T)GlwdZP044prY1wX8oz~06GI9R~37=!BP9I~ai0ZMFC8&Irl!#B4iv^WKJSr#^&L23%(@#)KnfCk^7-x5QV^0@9zkjR_0bz($Q0U2~ zIY}vEBOxt9iKantfnx(8%1sI*%Nr&%DMFR$_QL=1{{*UK4jNtQ!lQsVbWJ|)G(`gv z8ai$7Ip>ud2yRewuno*6q6IcDh@lui=EA74a(i?NXz7>3q})9>|Fk zYE!~|DFq9Ul&v(NgWT$QOi>4`kh3^@M)&l#J9B`g7YyQ|CsricGs=|+SYV>}k#G0I zHoMF%arw036Zp?w{^#&{8IL~!2r<(?K|QEN%Mg>jg(5jwL7B0UyH;!WllR`&BZ{oj zJTP6);y~`7)_yt4F@~8;g`|d#!~}>CV{y}pAw?odDFdX90|gK&qT=QG?l%!vDu*8K zBum^%X(KK;76rla1f@)Xq$rzM*Rn3h|LOk~Q&9R3C9p$;;h@Dn?g<-?;;9~b%kAp4 zi`tLqpRy9FL_+m0&=|U_ui+GAnyfl%9~%K#&|^G1+FU;F>4$zXIehjdtxre#{J>K3 zN~DwJRSO`w7+WMO1w=q#0z-z9nugTLTR+`y)A}nYmRve=l&_y&vf+c6On!9;x}v@lhf;Pd8k3JV*%eG*a~_IkdoPg z{9&a4KW1*MCUN0Dv34lQEX^my5`k85E#ZhepWicP6D~fRZ|65H7OA6tfpCc=IR-RBAvI1@#BFBmbx?|S3Fqt~q#*Gx5 zkE1pNCp!%yA;9gqpe;S{a9&_~AP8k(fUxvx8X#gOsTL76?Qs(-p`&7^rCK!R8kpAf zwxV9c7?`OFG1O>5JgNs-=0UYwP%#RGMgZWTT+nhIfY276#xWO{pfNi|waqI|#)X{0 zHDq`!B+8XfgD0d@ z9gt3))>0VAdS^m)Q2@k^I;WvvSuN<)`v4#}F>%qgUkb)NA=6iK#3V7e?sHuAWSI%a zIe&Z~q;Qt|rjMxSApouoMgxEaTQ-6fpvYKM6CovvEjj2Qj1QC*4#108-s&(hXk55W zk;0v%k`N1d8ZXNuYC@VB!XP6uP#K*uv3w&>EH9H7ARz=oVzSBwD3D16Wsi0vX(Ax7 zR+G%VD9kYK9>Wx87p|*jD zMqt&UN2Eh8qk@7g>3BJqBI-aqfEolr6)q?EO$|VZSfot$5_HZ0Gm`+#z#;=jaT!L2 zw~#vXgeVvQ$_%no)25ZPqbPvYo>#mq`IT`ZGvX3F0W0M}2;hR4pjPlKN!d{k_9fh{ z^h4S8`$Y>dokgP95^Vybps&p&S~K%#7IL5u5;b-;M6*1>#Y;*c75rMHK1^kC+lYbEqiL#bQV{Fw(F!ff^ZTqWaq^k8YJq z15-M3(rVq@rQ|Eq-EnTGNfI^cX1|_7MqNI!#W=&TEiKV}VV`)L#bw^JemfQ;s zSRGJ$f_ea6F^_R$2kh@Sk9Em8*r`+?gt$izO}2bSOf^lAs>p;ZE}kqSfoRC;CYO-{ zl>u{}*~<_T$gHy5!fOv$rjzmtgw*g5xVn8nQmE+Mb&uz!S}~o)Sl5ulvFd)OKiloL zY0WL>FWu)&0gF%axhR|CYmX1Cxd&Z|*f(Z515}JtL2EcHQVCB3G?-kBUnnm??xd;F z5Hg`n&L+E*hstbw&~V_j*rQ1;v_#5FDkWH%Nes7?Y5~RK2Gs%JtLX9n&Nryg zx@4nkal*@SLEH%lU?h&japY{bWY&syibRS8lpsK5NhL2I z-fQY2?^kb34|rlzx`gp$QQFlE(jmi86v6l=yb>3+Z?4}&q=)J!uV2>7a_yoRYHw4Y zxvs7u{(4gJ=*BxqANC#Sl& zTu!NvhA~&3L5n=nz^;R3E~-@rCJ%w%_~t);KrEc8iB~$7JrsMu?|R9iJishrLpPV(Z&POtl1QR7#B$5;lV6Ne5mhzjH(k?`J|Tv! zjTyG}qBN(Ae5UIT7}{T}hU(kIf2oQ{jfXsEk2Tfv*W-tOynbo@_~<|A{hJ>=s}FcS zpROPFy8rg&R`2a!kIO&2Z%WneKY$PV^%I(~A8y#J-MNpqF9Ckv#rul#!C+-~ zmHX5?Hl3B-X{)#+#KWPjXI%--*yxR~!_+yX$I6&9)jPnIzf5}&LKCdTG*-kM!LC{g z(|X^j{WII6%S1O;+?s}`sKgeK7`-m#$@08;I5RNNfdUBOUDfd2hYbM6oB^0&Xxkd1 zOfE6`l4p47-QE@D^BKWdYmrT(S3x|046G~>jV3_C_Q>j;0mo?&lSHKgp;+zgsiK!X)cxr`9uL7! zaLs;FY4>aSqH#MhxxKQz{mJDDX64*;5`9Tni|#(SgiqVUmlq`fBV^Te{Rpm z4}bW`zBs#UZa<&p&=b2}L%NN;9CnQ$?HN#Qd4;_-+M#S3K>z_6fb=W?`z=HGE-YdV zq&(>X*o8@i%{vet&-c;sqnY#N{k`@+yIFTg#DsJTNmMI}ESJE|gkyW>d>-Qc>oPO1 z8=j+08BX+c4!to(tRA1Ii+FkimYRKkP+Uf<1YxV&P`1yF>{vEL{&;?Wzx3~S`2HlX z8$ZRqKfVI1;C@+uG?U{YiGmX$lRrX*0WG!Gn3*?#afHhAK3xo(qSlAmdZFRYmMD!S zNlGlB>oY3EOiOe-XBjj?;)2T^0?etC5Cok22|p?a)shX=hRdx^VIf8s$F=S0x)Dt5 z2djtLkg`iDPf{orga^}$p~puO)^$i?GSwrns?$uThm5QdkE5l}fRi0;+r)6Fd@XZN zZiVM8EdVHB#uu@65-z1^^Qt zR76=z8wktV3LTuWgAGzj|2V_nbsG7vT>fQ~R6nM4LeaD#UfoZRewtRE2`#8W$iy()+ik(|I0>tJ}6{tT9nIGIwyODO8UY*ST^Y*9qO4SEkiJRz{2Z4YW zNz76>w|-)jGTnmYsu1)J2CaU7eZm~T0Nz?g(7@*?*+d=!zs3LQ8hw{*@pa0`b&vF( zSoB@sVV)}JtM2o|@2jupz>eMP2=e>RIqm05yI8m6fo(7uZj{O{WTvrEEiXO~e%qYF zd8eOpxxiwfVu;o1T2e&XJAg8&9c{>ZUU&zw`s&@c+-qeXe*b*``={Ht)VbdO@chev z|I06*-{|kcRy$`f$MH-DHi zJbb2RQIxTJ{m(-7{v7$iqtJ=J*Kqlr{{E{~#hK`nEwVfX4@w=;#rG)ETh{Ws(bA-G zUc#TsNyJ9aOK~4wurHKynYB|!6oVtHxMDT#V5++Em>KH`=KtvcQwS|Grh|eYR0ZvB zb_Wu6$0MFi`E18&s#QS1oJ-FM5qR+Cqt(zO6Y<>x@hhYWyAi`ze_X-g9Jawn04oC5AZT6FJiQ z#j?Df@5vd^bsyH{gxg^=bKJI)KUr)(4NXX2P@)XY>hpe?-U~%un zfT6yWYv~;%F;k+uHIkOHWNtU7daO^*#ugV<2F_sj-G{($P5*TSgNq$Fy#*%RQ$xGM z!|zp@^E6&5M?SN4d*ca9*(FT)$#2i!M+m6APA-vSF|UGczJ8o@ke92Ja=4%HYJPKK zt1S1H4PA=5^{t2BTn~;9zSmVc9k#Di@baGHyK6fKuWK4}`LS+a%l>IiheoA7D6ZaL zUB;9^P@l$DVnDMsAcrjQ%&=sF5hP+(%IRBl7HRWX6_T=jn5xiUUX69JS;TWW?Jh4{BzSk-@!r?H?nmH9f$WF$3LQOpX z)wi>6q>;FH>>juy#&9Do07RnT!ccAE?8yaZ8?~hfa)-V#iW4H1!`aA@Xj}0BsdWzL ztGoWxeQUFu_f5a^8)wsa$S`&HIB})0=MB+e4P{u~S5l95srHL}tZwxGXuA1(;|<@$}m#&={WFSG>S> zj72BuxPAsmZ9TCZ-c7dGw;fpoug%BQ#nr${Dv`BOffy>qB671J2*2>-v15CNHovqm zCT)cbCN1Y&;x5*>1bwlN z#YO0LpcZkWma1Be!4OoLMu@FkgqtkA;V&Kv*U}i(0Z)ZL*jnYKPB3V2uP%0t8@r6jA|% zX+tGo0>Ekt+>d%Ddv)h}C+;AinD+gfI()BJe7y|_V2Vb`sxwVAS1YX+EhESr;r!9} z`}0*fc7iqb&K=TwcF2{%iL>@oV#w~!v)*_Xo)F&?-%VV0JcG0&MFxV^5HHK4`U&`P zTGJ2<;qm1NGn8O+U=Q{AO%*H-jmOLQ|yg zm+w1D@!PmwI+y4f(}4^cP4Ws-Xdnt4TFXO!DS<6EgEkq%GTiF^;J9{+Yw6=deO+mF z7%XeI{2C6h)gPv}i(~64I3cK$W>q4vReKT=vq}UZNQF2+Z%!k+BoeSxSr^jQA;2ls zwKv@!uf2uY2`%4EJqcD@C=3}&Slts;t8zB$nyLkb=S{+*OukbSc!;K1L$6*YXGy+`0bD8{o%LAAyCUFIMpd+>eW;sUUhK$ zb8rD|a9y|S`nRBH)|V6atA-g_EitMP1~sya`SrzU%pLUHzS-qDe<}+u_hH;{+bJ}_ zqsANkhT{X6Ak;MQs`SCY4kh|vha=B0=yv^q`%tN}M<)I*P1fmNr0Jp_1zgtm z$ZYXrqnAhoSlX&`#o8f`jPI-tuj6bE_HNV!khv<1p#s8TTdqTlJbd*Og%ajag*V@} z&Ch~HATXTFQS;X9unV=AAb5z|Sh=&$J@5`VBOYcTH%@LvBrvMOlc<&j;*q` zoAR=>$4s(Ft?u&au>AO`dFy;fU3iU8&&yX(I z`K@1by3h8{x_f`URyZ6o_p#$h>3|=Y$RWx(d(8W@y-#ja5)k?6<(UNgO#Yt!abF-w zfv5QM*DZ?NG~WtkaKe4XXXn}pYX^zEz%FNYkRb2_h;ASQD27lf{#@ZY8Hh$ZQZc%85GAYUKL8KXX-kc(xZY_N+&U8FSzu zSpqM8nrCu-y-v(W*6}kacMZ#%+5K)Tci(>E6zGp${=tbTU;6$vd`<+3E~+SaqYT0? z2>JuLG*%)C8jdAI0AJsRYaNTPqx$Kos9m;H%(OBIWvImh1552R@oJJ>+BKq5GB43W&7NFdZ7!T2@JWku5_&(X;!H8Vty$_fa^a`pJ`!r|2W z!Ag12Kam!wjt%x^cgNEqi&u4HsO^aOxN(pDz91X8Q|LSde)rvf6~D%t zk8!0oSmR@9S|MW~VHL4Smvjv*Pr=Rz z&-mg}Ux(ETl_5EPo}D{2F<%OKFAkWG?)~vMo_^o!pGD_+ImlHgbC^Gt4a*h+&BXAp ztguy=@K<@5^Gvyxv> zgmVCCvJn+=^{kT&a)JFJqBcm znx4RgqZbFkehCPLY5NUA)yGklh zxE^jk|8NU7Xg;>ZJ1(dBp3ddtO*x!yH52d7e!IC${vkTWL|G_d(*olBvN^yMyb>G} zqH8FHtqIw!UF@P~SYjpSBnSt)SORnpU7`_Eq6|nnBGrbZiwW3-8#EzH^#~HM=s8wn zRfq2KRWy6BCJ55OP#~AW3CR=>#q@2GR+Nsx5WL9>BpI%c#Jdg`1qP)M&T5V7r#NzR z?kb>y*|dpJh_kDywrXn!%~^-r`w)~<0mDP!cc1=C=_A;+U>^HLyYBC1UhO?)Bc?IR zM#qMmgtKSOH1p+ZnqNEVnlU;S7u-@%hd^;nD-)PXaEN+Mo72V-w}b63x)h&ZSPdt9ju$N4E6q$pT~QOn=|Ei z%&O}r^hUWT=8#5STq*lrwqR3b?O#7RUi4kh1BUCS413r3ZP^8$OFtJEkNXaBY0QBH zIENMmJfcT%o#`8v?&&T_T&QP{iixm2IBPgMwigiO^#}sJ6gs2BIKzT3!z_Ub9tpj* z+dnU`RsdlrO*LA2^(Kcqpl$XVjzE+~>~SXHG}yYWaPo~WZtNbv5al7MpBTyIwIwB_ zG?K+a@Gz>3I5QG8M`8sK#|mn_(PVNKp4zAUP;U|Qz_oiH|q)cuLK#^Y3;;~>_W zOG)g&PXMKUP@V0*=poT>Pd>MOT9JD%BeM>(D>jpd!0*I=+w&LmuB5UFQ@zWe!25&vHEE~bemsY-?mR^It?IA6qX90gpFa$iWIiOs4=@E!59n2 zkO4?3IWle$E)+mgbc&%_&<$(z4X2<4Qp?iSK{LX7d}d3n+q?uQt-ls(!2=MCjSF8h zT(qAPJwyx@J=gbdjOX)LnyCBd4y1V0?+JU>FPrbK2tEn8>(6|1_cWNRU(qW7<~%$7 zX9T}-k-J5HnP1+qH}LirtN9LVLY;~lfICVBR|)86v;{Oz~&e*Ayl^=p_GDUpUCU5Z0)EypXO>@r6c zhuC!V%}7p2R6Wp!>Rgko1WAU4OAr+p-Qo!^eD`2~JYWS9l zv~cBN-+HM2hV+qPL##opaL2>#Yf3^@ZyPxANJ;6z`qHdz8R^Q6L0=wN=m`z5ieuR# z4Fd#OHOWBe>y?^E@>U≪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μ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 IfB%0!0O;*94*&oF literal 0 HcmV?d00001 diff --git a/docs/screenshots/introduction-and-general-usage.webp b/docs/screenshots/introduction-and-general-usage.webp new file mode 100644 index 0000000000000000000000000000000000000000..fd718362a86aac44b546a323ad6f49ec98a64060 GIT binary patch literal 53506 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

    0l(4IheYXOEq>BQaJsdYN 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

    0-&P4b&8*RU2K21 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

    iqxI~R)uRe=g>uA_pp9|j{(e~fy}ci= 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%0AqW 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/speech-to-text-transcribe-only-mode.webp b/docs/screenshots/speech-to-text-transcribe-only-mode.webp new file mode 100644 index 0000000000000000000000000000000000000000..785effe9d424dc396217afd6caaf99d3e9136902 GIT binary patch literal 13290 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/sticker-generation.webp b/docs/screenshots/sticker-generation.webp new file mode 100644 index 0000000000000000000000000000000000000000..50ce0e4f03d273e5957ed2c0e126a76eeec21da2 GIT binary patch literal 133288 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�W2(ryOljx5Rh~a08mz*T-m+s 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 CXk(H9 literal 0 HcmV?d00001 diff --git a/docs/screenshots/text-generation-prefix-requirement.webp b/docs/screenshots/text-generation-prefix-requirement.webp new file mode 100644 index 0000000000000000000000000000000000000000..2257c54e23fbabd3f2abf9734c9fa112709a86ac GIT binary patch literal 161658 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ξhp3&T%*V6;%p!5n?gAwRX_RL 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�p2yZ$PzTzhvz10`cjN%?jqT7VNJlZmz~=WJP* zKm!>M%S6|edk17UY*m1SHzpV*+O8ZlX8~KVD6WQpir);Cl~z7(5*jw#EL*S*pb~BT R^q-&p^V5HR`p^IQ3IKmod`tiU literal 0 HcmV?d00001 diff --git a/docs/screenshots/text-generation.webp b/docs/screenshots/text-generation.webp new file mode 100644 index 0000000000000000000000000000000000000000..48875cd813c38ca6400f6ab0a622d636ab67342a GIT binary patch literal 11496 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 T_CH+t&z1jN`OlUATv-kP%Av-1 literal 0 HcmV?d00001 diff --git a/docs/screenshots/text-to-speech-seamless-voice-interaction.webp b/docs/screenshots/text-to-speech-seamless-voice-interaction.webp new file mode 100644 index 0000000000000000000000000000000000000000..9776daf1b982504e6cb42c5f216854b67d6e6a26 GIT binary patch literal 23928 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 literal 0 HcmV?d00001 diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 0000000..6e74feb --- /dev/null +++ b/docs/usage.md @@ -0,0 +1,99 @@ +## 📖 Usage + +This document covers how to use the bot in a room. + +The [🌟 Features](./features.md) page also includes details about how each feature works and can be configured. + + +### đŸ’Ŧ Text Generation + +This is related to the [đŸ’Ŧ Text Generation](./features.md#-text-generation) feature. + +If there's a text-generation handler agent configured, the bot **may** respond to messages sent in the room. + +đŸ–ŧī¸ See screenshots of: + +- the [default Text Generation flow](./screenshots/text-generation.webp) for 1:1 rooms +- the [Text Generation flow in multi-user rooms](./screenshots/text-generation-prefix-requirement.webp) (where the [🗟 Prefix Requirement](./configuration/text-generation.md#-prefix-requirement-type) setting is auto-configured to "required") + +Whether the bot responds depends on: + +- ([🔒 access](./access.md)) whether you're a whitelisted bot [đŸ‘Ĩ user](./access.md#-users) + +- [đŸ› ī¸ configuration](./configuration/README.md) whether there's a configured `text-generation` handler agent (or a `catch-all` handler agent). See [Mixing & matching models](./features.md#-mixing--matching-models) + +- (🎨 agent capabilities) whether the configured `text-generation` (or `catch-all`) handler agent actually supports text-generation. The provider may lack support for this feature or it may be disabled in the [🤖 agents](./agents.md) configuration + +- (the [🗟 Prefix Requirement](./configuration/text-generation.md#-prefix-requirement-type) setting) whether a prefix (e.g. `!bai`) is required in front of messages sent to the room. For multi-user rooms, this setting defaults to "required" + +Room messages start a threaded conversation where you can continue back-and-forth communication with the bot. + +Unless you've enabled the [â™ģī¸ Context Management](./features.md#ī¸-context-management) feature, all messages will be sent to the agent's API each time. If the context management feature is enabled, older messages may be dropped. + + +### đŸ—Ŗī¸ Text-to-Speech + +This is related to the [đŸ—Ŗī¸ Text-to-Speech](./features.md#ī¸-text-to-speech) feature. + +If there's a text-to-speech handler agent configured, the bot **may** convert text messages sent to the room to audio (voice). + +See: + +- a [đŸ–ŧī¸ screenshot](./screenshots/text-to-speech-only-mode.webp) of the bot's [Text-to-Speech-only](./features.md#text-to-speech-only-mode) mode + +- a [đŸ–ŧī¸ screenshot](./screenshots/text-to-speech-seamless-voice-interaction.webp) of the bot's [Seamless voice interaction](./features.md#seamless-voice-interaction) mode + +By default, the bot: + +- will offer tex-to-speech for its own messages which are a response to voice message from your, as part of the [Seamless voice interaction](./features.md#seamless-voice-interaction) feature. This can be adjusted via the [đŸ—Ŗī¸ Text-to-Speech / đŸĒ„ Bot Messages Flow Type](./configuration/text-to-speech.md#-bot-messages-flow-type) setting. + +- does not turn your own text messages to audio (voice). If you'd like for the bot to operate in such a mode, use the [đŸ—Ŗī¸ Text-to-Speech / đŸĒ„ User Messages Flow Type](./configuration/text-to-speech.md#-user-messages-flow-type) setting (see [Text-to-Speech-only mode](./features.md#text-to-speech-only-mode)). + + +### đŸĻģ Speech-to-Text + +This is related to the [đŸĻģ Speech-to-Text](./features.md#-speech-to-text) feature. + +If there's a speech-to-text handler agent configured, the bot **may** transcribe voice messages sent to the room to text. + +See a [đŸ–ŧī¸ Screenshot of the default flow for Speech-to-Text and Text-Generation](./screenshots/speech-to-text-default-flow.webp). + +The speech-to-text feature triggers automatically by default, but can be adjusted via the [đŸĻģ Speech-to-Text / đŸĒ„ Flow Type](./features.md#-speech-to-text-flow-type) setting. + +If all your messages are in the same language, you can improve accuracy & latency by configuring the language (see [đŸĻģ Speech-to-Text / 🔤 Language](./configuration/speech-to-text.md#-language)). + + +### đŸ–Œī¸ Image Generation + +This is related to the [đŸ–Œī¸ Image Generation](./features.md#ī¸-image-generation) feature. + +This feature is not configurable at the moment. The configuration (size, quality, style) specified at the [🤖 agent](./agents.md) level will be used. + + +#### Generating images + +Simply send a command like `!bai image A beautiful sunset over the ocean` and the bot will start a threaded conversation and post an image based on your prompt. + +See a [đŸ–ŧī¸ Screenshot of the Image Generation feature](./screenshots/image-generation.webp). + +You can then, respond in the same message thread with: + +- more messages, to add more criteria to your prompt. +- a message saying `again`, to generate one more image with the current prompt. + + +#### Generating stickers + +A variation of [generating images](#generating-images) is to generate "sticker images". + +See a [đŸ–ŧī¸ Screenshot of the Sticker Generation feature](./screenshots/sticker-generation.webp). + +To generate a sticker, send a command like `!bai sticker A huge ramen bowl with lots of chashu and a mountain of beansprouts on top`. + +The difference from [generating images](#generating-images) is that the bot will: + +- generate a smaller-resolution image (currently hardcoded to `256x256`) - smaller/quicker, but still good enough for a sticker +- potentially switch to a different (cheaper or otherwise more suitable) model, if available +- post the image directly to the room (as a reply to your message), without starting a threaded conversation + +Some models (like [OpenAI](./providers.md#openai)'s [Dall-E-3](https://openai.com/index/dall-e-3/)) can only generate larger images (`1024x1024`, etc., for a higher charge), so we switching to a smaller/cheaper model (like [Dall-E-2](https://openai.com/index/dall-e-2/)) is a way to generate a sticker cheaply. diff --git a/etc/app/config.yml.dist b/etc/app/config.yml.dist new file mode 100644 index 0000000..ea477bf --- /dev/null +++ b/etc/app/config.yml.dist @@ -0,0 +1,153 @@ +homeserver: + # The canonical homeserver domain name + server_name: synapse.127.0.0.1.nip.io + url: http://synapse.127.0.0.1.nip.io:42020 + +user: + mxid_localpart: baibot + password: baibot + + # The name the bot uses as a display name and when it refers to itself. + # Leave empty to use the default (baibot). + name: baibot + + encryption: + # An optional passphrase to use for backing up and recovering the bot's encryption keys. + # You can use any string here. + # + # If set to null, the recovery module will not be used and losing your session/database (see persistence) + # will mean you lose access to old messages in encrypted room. + # + # Changing this subsequently will also cause you to lose access to old messages in encrypted rooms. + # If you really need to change this: + # - Set `encryption_recovery_reset_allowed` to `true` and adjust the passphrase + # - Remove your session file and database (see persistence) + # - Restart the bot + # - Then restore `encryption_recovery_reset_allowed` to `false` to prevent accidental resets in the future + recovery_passphrase: long-and-secure-passphrase-here + + # An optional flag to reset the encryption recovery passphrase. + recovery_reset_allowed: false + +# Command prefix. Leave empty to use the default (!bai). +command_prefix: "!bai" + +access: + # Space-separated list of MXID patterns which specify who is an admin. + admin_patterns: + - "@admin:synapse.127.0.0.1.nip.io" + +persistence: + # This is unset here, because we expect the configuration to come from an environment variable (BAIBOT_PERSISTENCE_DATA_DIR_PATH). + # In your setup, you may wish to set this to a directory path. + data_dir_path: null + + # An optional secret for encrypting the bot's session data (stored in data_dir_path). + # This must be 32-bytes (64 characters when HEX-encoded). + # Generate it with: `openssl rand -hex 32` + # Leave null or empty to avoid using encryption. + # Changing this subsequently requires that you also throw away all data stored in data_dir_path. + session_encryption_key: 9701cd109ed56770687dd8410f7d7371a4390dd3feb8ed721f189a0756c40098 + + # An optional secret for encrypting bot configuration stored in Matrix's account data. + # This must be 32-bytes (64 characters when HEX-encoded). + # Generate it with: `openssl rand -hex 32` + # Leave null or empty to avoid using encryption. + # Changing this subsequently will make you lose your configuration. + config_encryption_key: a9f1df98d288802ead20a8be2c701a627eabd31cf3d9e2aea28867ccd7a4ded7 + +agents: + # A list of statically-defined agents. + # + # Below are a few common choices on popular providers, preconfigured for development purposes (see docs/development.md). + # You may enable some of the ones you see below or define others. + # You can also leave this list empty and only define agents dynamically (via chat). + # + # Uncomment one or more of these and potentially adjust their configuration (API key, etc). + # Consider setting `initial_global_config.handler.*` to an agent that you enable here. + static_definitions: + # - id: openai + # provider: openai + # config: + # base_url: https://api.openai.com/v1 + # api_key: "" + # text_generation: + # model_id: gpt-4o-2024-08-06 + # prompt: You are a brief, but helpful bot. + # temperature: 1.0 + # max_response_tokens: 16384 + # max_context_tokens: 128000 + # speech_to_text: + # model_id: whisper-1 + # text_to_speech: + # model_id: tts-1-hd + # voice: onyx + # speed: 1.0 + # response_format: opus + # image_generation: + # model_id: dall-e-3 + # style: vivid + # size: 1024x1024 + # quality: standard + # + # - id: localai + # provider: localai + # config: + # base_url: http://127.0.0.1:42027/v1 + # api_key: null + # text_generation: + # model_id: gpt-4 + # prompt: You are a brief, but helpful bot. + # temperature: 1.0 + # max_response_tokens: 16384 + # max_context_tokens: 128000 + # speech_to_text: + # model_id: whisper-1 + # text_to_speech: + # model_id: tts-1 + # voice: onyx + # speed: 1.0 + # response_format: opus + # image_generation: + # model_id: stablediffusion + # style: vivid + # # Intentionally defaults to a small value to improve performance + # size: 256x256 + # quality: standard + # + # - id: ollama + # provider: ollama + # config: + # base_url: "http://127.0.0.1:42026/v1" + # api_key: null + # text_generation: + # model_id: "gemma2:2b" + # prompt: "You are an assistant based on the gemma2:2b model. Be brief in your responses." + # temperature: 1.0 + # max_response_tokens: 4096 + # max_context_tokens: 128000 + +# Initial global configuration. This only affects the first run of the bot. +# Configuration is later managed at runtime. +initial_global_config: + handler: + catch_all: null + text_generation: null + text_to_speech: null + speech_to_text: null + image_generation: null + + # Space-separated list of MXID patterns which specify who can use the bot. + # By default, we let anyone on the homeserver use the bot. + user_patterns: + - "@*:synapse.127.0.0.1.nip.io" + +# Controls logging. +# +# Sets all tracing targets (external crates) to warn, and our own logs to debug. +# For even more verbose logging, one may also use trace. +# +# matrix_sdk_crypto may be chatty and could be added with an error level. +# +# Learn more here: https://stackoverflow.com/a/73735203 +logging: warn,mxlink=debug,baibot=debug diff --git a/etc/assets/baibot-torso-768.png b/etc/assets/baibot-torso-768.png new file mode 100644 index 0000000000000000000000000000000000000000..b90b6f85100cd9391a9a332e6a4ff16b657f1562 GIT binary patch literal 78468 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�!n;2Q;!f;9qk`0GrCJdcxXLlJxtRe)3f74Mf-xibb~FYN z1#H?d7mi4By1Mb&$*M0sMi{`0%kf~bs}v(4&PT7186ZLaXt=dgL=HuZiI}gOUTS}^ z3UF~maWPGMj*Z<{uS#~+8>NuP${!;8-@y4Yz!HX>u*sYmK` zwjU|GZoReb`<=AA1^!Sm30JYA#SJf5V5Ga4X4QbvehZ30demPl?5A4_7`ZuJGcP4a zKMKK&Sl_omo5TB%>{;B33&yq|+SM!txIXy8Y!c|{F`i>r!!-Y#3+;wHVHQ2rpqck* z!5fwO1cg%SW%aXQ%hC8@Z4VJO0!9TiBC^aQ&YHyS8!I?d}SSvEZxZmBHg?Xbw1GB1#?H zCFN!93`OI=?y<-a@TIR_BWru&qAKAK9V?Q+RYMB1MXUq;#^hZ1m`9VO}`6R#vQH+vf z7S*sM% zMXGf|^}Eq0j`?V*8aQdXng)`RjtS34SCXHuK6tp1DckRBCX zW7Z)Iw9L3=#k1Wn((7cfp~qE(^e@^ERDJ`$Jk2;5@ZPJPSz|qz>UMm3(8|(;WpGA7 z=Y7vg_9|i+)RU(}vt7ma9-J%NDbx5bsmS9e)X)xH?m}dB5^&mZ+CLpcZ6GZs#aHqv z4ybc_n`ITrf{))-3zxL5)?opopfQiNVzLhr{U94gpj(c9kF>;m*#jS_=FjYQv(35u zQ`d&w>OcpI7ch`k8y=tPRkuDy?p-!ue|49caMJ4j)Vy^DmadzRz?FtTuMr<22U~b zs&-b0camG3@AQmSz5dHh zgO)1D-bqe_7{wX?p9^ppVgy@u9<}_yP3uhz?i)tA1vvqh{B){lmC=a?V1kw8DQRp) zi@rA;35Nxcy47ECXe+&e=@hW|pP6{Yf&o8o6xJDVsJ+lm^0c-< z*+hz8(Z4B{{+q)?YC+9vy+D0|ile|^7PS25fpuT1;b{C~f%Sr$1+!|OK41MU>yPEA zRx8s861ope$M6(}%v+KfM1`=))Y7^1GN{bkGzC`-$cXx`V%j!)99V_4c~ z+z|JJ#zg|2nVv|0PIBAC;e|sy$#!h&cny@Bj(*Si41VAQ7(~(Xtbx(e&usPzEg%Pk z53AspJ2Gbn{+vOfoqPygni!ol%MJDe2DzRnHo-2F?eAM%`O&2PlMW4{T~mg1XJalF zN&YS(3uSs`_vNzXK^@q6X0YeGIy#vzl72SdsGEuijVu0FRDwDL|^>5-n)LUgl8|B@`{X6dXq$ z$5J6AzM}sKq3;;p^ZV+hS%%DiE^^RfRnQT@RVl%>*cVQO<_klWd&P_?p@WsIK_+zt z*~?|VCuO;s?tr)oVaX7-pzIfzJ1YGyM71ObEl9IkUe2d^LxvYEK+4_=_8OtuZ~O#z z9m7j=lbL}2P{_QqcBP6e1Yq@Kme?YW+|_`qSSkSB^_R=iksrXevoR?7a3dF_F*@nO zbAGzN373)Dm@gM`WmkS7`n3b--uL86ywGE=oA%A3m8Y|734PQKQph}sWIsY7n~^Y6 zEfv6SJrvUzu&ohS^;Cmw!yf@4c;L9Unp*+b#7^Xe(^wNwk|RBF};{`+3O=H}6zbg~|7QttKe;*y0<|x{V?;{P}R8@iz z`bP09CKN3JS%NYe7KRL6N}``GrscQeXv+TnLGihl5~#4o6H+%uzZVrEK5}qp{32i; zNTRxeLjOi4M=yF7Gm-^y;EQ_T8=#mG{g<|`5pHHS1d+1K5(pg(LOh2qj4iuXEWNcU zhosC{K^9rS;+maoDWq_v@uV|378x*sA=`S+-ADycD&701pE3Sj0QrdzoBgNyizZ6X z4#Ra|zmU>dxy$!5FFkj(9J%3_^l)yJFc<2<(an*0n70|B^lxEwY- zd+u50AZ&pgbmZZ|aeS#~m!B}iNl`X_f#380Ah)_8pK^bRe;ixv#~G0?F)GfZQ$~<$ z=tF0RO~R5PE(mJ}rowC<<|owlDot_iIpKu^%nKj@wO^F!4fX#mLr#)zH#2I^6!fHe z0Ra9GW*^ z!57u6k(zo#ei;Rh)NIP$gK2Rsd%Co9o7c2+;m7aUnVmXUGWqXEKPpqfQVhNy7yW{$P3lMC z#l)FC5N#7^%kdaIFue*!W?iYhr_qDh7D48@mnji?WZ^tpDt;bgQ(Y#o6#JH&8xPO) zEx2w|MH6b!0yfQiP9_jjOs`FW=KJG`S?Eql!3p=Oi#U9-C$UdpjmXpbp$O@Pg-ZLt zRqz>epuGK9Whl%VxFPep9}*&wc{5dPUWt+s1XVpzz;_%#uy0JyY%kb#%7lm!Nmj6 zBhxTfC*oM>WkVm{c#%}mhabc$)9`iljHcWA{=L|pdup<|M4Mw~aWm(;IM>k*_cmZ) z&oNUMWUF$z9P04Dg**3q@n0F%&2&16gBN1!4s_8(wxFfvmo!OjNnj8KcrZ$F3_hrp zm+Ss^nr{r=@qqytcW)67ffnODoXnsNqB+P_(-{!YCpzs?rIdA<7X5;e;lC7^scW3e zKoqDON2K@Sbug=xGuLBx+JN8hxC-}u%HN?<)DmU`v&{+c@9K4TDY7RDs1fOg0Dy$R z#)(wO2m6I+Fc-jPES<#OJ*jmMsPoo}jZ~h<(^bB9MN&)g*Eo%w=w^wbIbptK`)T9L zmw)~%N84LE?r8a_%-?9(%=!7;(k0BdX?K4Wr`mmjK_ilwoV=dMc@b;bK_sVYfl%ML zktR*P&!?b#&M|s=#kwKlruly;p<>TIFI>8XB)NgG01*RU!NO1!_ECHoa!7qoQ88?e zoQA7rP66TpMJ@BF=4NvAnAznbz*^j3BuRJok?jL;dF#w+A0`uF2SHzIp&20uqEw5K6 zDyvI?O~&tKJ8`=T9niBGdbqS;;QS&MZ^o2gZ_ytmacd_G(%J10S30uzb&pW+VP6 zWhx2!Jp#loPR;=P2M4OhPZ*XL9i#Hf^PI;FEDHQSFX7(yfx;W1`Yi)?z&e`}Wvtyt zpoy_jJCh@2#bWh>AUF3CVM>z>rJTY~Zc~Z@(?w~(t^u!>l?voK)*GP*tYJ+We~EsA z3#Q~DHY!6Eso^TZpXQx1D9mSHx2$cM{~WjM7+9IXn>t2q(vFUE-h;}aW>g-&ZViX8&nVHnpVnlXa1O4-Yp(iXrM#_r6TRs!JXMJ zJ!{k|m^>e#Hj~P3cUw&LNB@=tmntzy+X(}{V}e!S{b#i>BLBorXc?>-G%+}i9qY28 zg~bBTh}hWsm?=G3F7Ry?pI?%+k+Z&=CCRl8)C$Y$MrAV~_uh$al(mG=C@N0@nVHv$ zwhHm;7f4B4RVl$b9k@u}fGK2Kbw>!>pqf$=Q}}v6TQkz&AZuN;M<{8Byqj8Ke0nxA z{QKV{oD5aUfx`v~+TPHA^;i~QwI2*A&9H}rx}23>e~$~n0U;f)9XANo?tP9*bN~P}8RfEtkn!Pu9JP6Nz!m4;Dh{^Yc#w73XH#hMlnixNw?F$;~ew zAJ$1bAX`#?@b;~<@q|n}lPrT@HoI1HcH#IzLHTTpnqF88ywx8%@XK-xhacuT?TO#< z?kn{|VcjXYJ`z~S52H7E7S0ygyuxnWvUYgb_BJx|Ev*eYt>F~ja2LNdYu*eW1gSZD zVHSC#0FFBryxSJRqVa5P%o;sLxin#FIg6>n^{OS-9q`CA@P9Los_F){?Ar{0A`^4& zugn*aZqwyoRe5F41(#nLW`pRbGy5N&oGUr#hWaCMzTF#-B>balgQ$vDWUA%U^hx2K zF{-F@uHJDY^H9{!Z2?6ezTf^9sS!T^}v6NZh`^NB5E+q*v z86yk!wo30`hwGnx4MY;Y zke4Xzv&^r_`x9!tr1`b(-*1QH>UI2JP_l5|4{Gy-%1xHJvwy40@dhzYt@pi1PLzeZVd zQkJyIUs=z6HR^evRfwJvQMP z24?_i0(8+5*s_ZH_}BsvSAfMk=_6vyspXY?;LmW+5_>%RkN)!)R5vA$b=LboL3_wy z!B4^2`)bH_F8{nq{6M!76+>t|KhO6>I36EwS_F7B_yvLj8XB$BHeJwXEJG@$_%aAC zJp&TV+-uhehd~gxngR#@PMCd{=^-~rz4M~BSfwiqly^QwiWo*O7h*yZ_WzfK(4|N( z0`)7x|L6tXDPPYt5klo~y46eOgw83Bj-KBt`p+k_NAJ>41 z`7c*~&$5eP#}TLa?M$_~yW~8(Jp)6+NE8+)Jx}#N*xds^ccs(D2d6OHILyU4@asE? z>8X%KoXw7eM*t|K>u9F^tDJ6GCh$A4s81VCf?NI{R5(hlVBMP>XNdoiQvjUAM?3BI zd!1TF4QrUb1ABT!s8n&|7X?=Vy@*7dnLC9;EH3kIh(v<;SBq#+!wDS_(>e91unlN2 zL)RX&M`m0$BgU@}XX9f zZxN-4lexA1+GBE@@TxYyHcGz$H<*}UOPp?gv?b;Nh{q^femRc5$X&0;zCV1qV=$&# z1H|L_dlQgk)kR;=6=stiXa{nZ^rxPT{H>bl=#C97c-*kdj&S*Th?gEg+k~^oBu{-ZdUO{^0zi%elu7?0>5BaU}xJpBP z6IE5^M$JkY`|h;|UXO=JG^%UR0l}kT3rLsU5ckjjc9Oa+VQ&SuIvr?JQWlR5XwYbmQpugJX~vJQX+G&eSK{e@?3vzvc_u@iQ-+XUSx zuHiZb5pVd8R-2JoGS4&H9z)6h-0e(~PI^g&dIn16W>!>~^PjldP_I{kf-^_oKBZ z;)=fzm%j+bUx;ui;P#++b5MhAASLl&2-(^~yfuJ~rbasXn@>Ju_Vn+#aLV=Ueb8@H za!tF)IshgUY-{D_OU`HAs+D$|Vk-lO4!7F`-Drsbgp)WWkH=N&(<};b>=B05o{sMpL6{P5AN=drpMCc7rj)G;PfF{w#~LSh;!)k3RW~p*4>G z{Sk~DKGd)+PAC8dP*rOkfbJpyN}8qs&HCKmHUDhhDOfd^1tR!V(C7xH#J z5R1k6`$PZYzB~S6vSsOwT(HFaMF;kUla4{`GZDPmw3}_28}GP_a76z}X+c3g*Z=7< z!*;}CaUu?Bc4wp(A{jC*0?!;r8GixgB}qcP4M_1YBjt(`l3fAKt;k z@D3jK^Eag=R$EQSqPc|U&!%JHJY6N^oZ^?o`2zeNwID~?|_NQRt zUWmMWldbCnA#nHVgRfT~eES}RjK>JipF{BbZwUQ30~reTyhacFIPGh$IrnsK``3Rm zu5Uor0WgWj@4uVb)4wykj;pK!@32vL2MxtDa4@c-Qd~vFNq?AREQ;FFM7*()cylB1 zrUs(x*AiQ^g6R4+DRUHZ^Kw&i9V<{Y+_cwM*CgctKq3lIR#t-7n;s`dXPkTj|9tcb z-NnH1c${1RdN0pC`jE+%r71J#fLR4~zu6NmJ_}K3tWYycW)SM=;Od)iHMGW{0sT4u z%+pM)((l$Q4a=+*&9qZFV|-+P<;|9pe?nh7Du9XEl(-yMy2h`onB!sRA+ z+yrvRO+ZE?gl2q0+h-pTS+Ug6x+|A1;ra{D=C+3)$LCMq!_BS9Ishi{*?VvC*3@Tp z&lheFdAsdR{-k}$89v&ORGx5qaFtc!D*N>*jv8#E{qv7#ediTZJmc=jNrm@s5n5^h z)~sF6q+KT_rIaA0WJC2v1`SM)y!gI-dUM)|$Mfh@|JA+52cLY(J0E<+?+*NpiI$}& z@{_NOFXHjQ<>w*}-p}}2Su%#3Zoiu)%U0-~FNENp+ixK^$9R)QDJ2~akpBdT>O8#A zf}*6q4Cq@^pXJee@7ApN;~6-FlGDz|J7BOymgz@$yyWk(FZp}yOJwCTTHkq<(CqIM z;s-idv1Ac9UveS0KJZA|DjaT2dc~(4$nr(=dGNMd^i39myj}L7>M!?Ga>j+^j2L67 zPPUTo!+*$;RQ~zi#I-Esg-0K@bbTvPT*F#+*CtroP6BT?7Qb4rq~k- zh8!aunFyELD4Z~$g~H;sSabEoFlEPwZXsGM@EBRBtB;~hMVvOoNZs+<2t?hZTY zUT5*#+1zvE6iv-Sos8@BD{r{jZX?o_KywqLD7RpM~qoC-5vrgyHr~XT0lYVXS z=U;h^y(jI?u}2(co?+=ipbcJoPyhUWy%G1^43%Z3nUp2{QB{?TuAD+cQ$@DL_zNi*Gd5`(%piC4SaPnvgQlk*COGX&&GVmo_(6t^9K%j~>}i2@sUw>Lq?2i% zf5I0ZXn&~ZjNG2`%Wt%I^S_x*d2GVxN7-o-?vpPh=f;2FIpY$P@w+2D#w7*cef0$% z`P&_76*3b-kdx$Tn5wFpiiS5+TT@5W;s!Nl;rIKv_`I_XuXDxqHyO%PPFw!<6twEp zsvgi6asQvQoBu4o;+DJb;q$M*F|@|y{r2IoLk=>@A_#{g#2s{BOGOG$L!&VV%r2yq zJom`Ik{+-4d{kU{V^W*{NX-V;{_W3HKYD++n}0hI9xtV5T}+lhX?HwR_RcswVbhxf+&a36an zqOY;EgLht@%DuN-XGm8#)#PX@hSPq^6N|^GuCCKO&o0hA;}m-LG8U!{21A^7;l+l! zl%^fu%|yQcnZCJwdm;XQb0YUYOO`Eo=Eax!=cE5Iw1&s+<}Wu)G0CC?!8T{8|7<22 zv)%z%y{_vGt`N@MV$JySb5<`;P8~;hyp;c83f>_jx*w>j)V=sLD{r`r_Jsyg9#e%7 z6drLLB`2Q?8egl{mS!Hj{U(bHOAXF_cRH9y{&pu#4ca`voZ+J>`@_|yoT{6J>?waQ zHy_uod*i+I7Ch%&jWTMS?rVMa-rL-B(-c&P^(*KKuLdVgN__=y&CM+Y0_Jxyw1V86 z94@`^Jj3fOUA}@-&%fAEv!b+N&3fc*|Inv8QCW`o+f7iG-TY_yC7*opC0ChHx_9Ak_BeFo)F)~9- zOVkqu`}~HIQ?xq)Grs(s&)$2>BCD(?>i}qE)_2qR?0;`-n&a->m(q);Akw&FpfYSU zp0h5;d-07ZLwddubjDX7z0be?dYj3XSwn74&)t1D6N%`5$gHofb&O(0Pn>q*aqKvD zd&BE|JL7vUzWUmdu&uB1`NS-{uJCNU4ZauZ$k9`YcKQOt1s#@ zHN10i77@rXzMin!!#D0JZcB8#o8ShboH&pwYf6J&(%y5$Cn3JXoJ>StOV7|pc0 z1|UB_zuU%HibFeezx(P7NsUwTeH0yiVvplmXHIA13(sgbL24kyu-J{ zGkPpJJMDqU?PRkj1g;$?q6`~D{I#cv&zYg=y8pTFZ;aVtJOhW?+cmH|v`FGLx3o}J zqQ6M9zM+ZY;zIJ$pnLN0p+mTN%9UJwld-O&0AEj^!G4Dx#WN58lO4uxXM%P1A{Q)% zdmn{mtCFAOb|LoL6OKO&h7PjIv@B`Pj2~xl%DER&-`Hq)t%E1;&k?^n*aWM7CLW79 zru*-fSX~2C>S8gIOq;M*@D+gm%GFMNL7r(A^l_oqTP-4M4X9PZ$u zyKZ%~GLW}3$EOQwYK;~1N-0^puG-Omk1aXt)Dt;iA9HTn8)|Af{G?NP{hj}rvYsup z1>v55!ym3sZu74wFn%mtaUQ(#7+iaCcJrU5OJ08CEsi|#G*dSJCB?=3{dS#=E4#s| zwM<6RGm{}VuY0iwC)NOb^4>dylZaXimy3cu_wRAs#;H#d4{Ce;-GxOA_|wf4?Xi!h zc_~2%N>0BJPw#$7Pmxmc&|SBsO*-#pvJOC!y!X;nYSyhydc5KyA`om5too3dVedyupLco`R7akVMw4JqZDACPBUihTRSu8VyOeTW^l zgX51t+;I)!%_k9mzX@^ZWJIC%G`cL?4v#$fG#6ZPwP{83cieO>RTbvfmbB`XxwV*R z#GIZsUEy|hU)SeE2jGJ@UQKFT-h_#`in{Mr6W*|%z>IG-T|c+~Kn7lS2YE>p72Ac# z$)W6`t2)ns=z`^o<~w>%(;3+mpd^UKqP+Z6k`?otC_d?&9z$n# z1mLNcV8$#&MHzDFAn+GJp&wCFgsduuUX_Txy?&DMbl$r>i&F`-wsOVwH}Trr=4~h@ z@3#-f9(A~B>utt~#lM@0SX=`T3U|N0)1GZh=Fert;)O|#&7atFlsEA8Cz?`!iuTxt zs#DKJ@oJITwg-2wJ`^8&DoxM)JLx&kJ^B!P{^np@?&LEf>?G>|B*9l7yr)U_GjHeJ z9i95K86gBYUJtI)3e;{KfX#G#`zfNJfPy1BFA5Unz3^Ok4UvcMgr=UW;#V(U%IxXi zvg1VO{jKsf6m8G=ex@ncR8^Jr8#Xd%Q1YQiJ2~XQ132aQV|eC;mrYx9?Yi|GdD3ZI zboN`8w&P5fZ)t& zgy+vrYW#*ZtNHx>ci8`T<~!O}kWB$fg129MKIyTF-%s&L=U8Zsx#Z`0@eCiG^!U)n z?+{(ob%PI4T7mb1Ym$~cef8O=lfHH;$@eFpn$a9+)zuBSGXkw`1X?<;xo{$P|K%pr z>H#(ri^aMB;YZl@fP;A9wKvkHHX=(FBgErz?*7L=`Tfafn7a8FLhz5f{z9MLy-Ztk zGx4Z1i+?v`wF=Pm*~x7Toj^F;!51ICpVZi#QQP;}uv85N30GJ5xR$%Pgn>8Qm3Etd z0ED3Q)blhoZ+-r;f2B>+)2su~1B>R&V#)mEJK7Z=e+Ein^11MKqbP!sgAPl+L79}a zztz2jm?$Yn3>cEsa$vF3DI9sy>3lyceIB$~vS?-2+<6>)%n96m|AVG~_AfZ=G=6)~Z%kctGXaO@ z{zIZL(@F=x<8kxR=U;a_#z``uGrs(sP(hS<3yZq#0RUYKY}mn^d z;#|4!Wbq$(D6X>Pi|3zz>|d5k(3(Nk0qBNcTPxpw@=?;`{f8X+v$%emQTf}$$lYo8 zq{qja8z`Kx3+1~{qA=2eYxXqc#-GE1TDk>);lRrI0>3r~!0c1IhQ{W!Qp71ME#Z}C z9%ty_L6%+P>+hy>?CIyQ{}D&?#B)<=Y)%i=q%2vsCKikHANsU!}K0Lkq^f)fog9A`9*Yp3VhlW zoI1iCrrWT7eQjFl3is{PoA+Ov%3ixqwDdZ2<}Ki=8*X8{iFT@X1WBK9vB&?UYEHhK`T{r-$JxMW_+s{{Z& zU^zveGSkM70^>#=Gnil)75b+vK=j6M!N&G{f-kzcu^EnsFz!V}j2a2Cu^vo>=Tn4E zE}W9rAgDfqv;d&-FVE>vsW_ZY)Yf`dQ<4)VqY(#wO2?vw^Qo`(q`e&{bI#(Um1_`} zI02Jp&cW(+8?Zm?DE=(3M4Ow^GzEn~V7IrzoRNvdDbuj(^YyrM?>@D)IIR{xns;DC z9KF&DxlaD=3hg0awGEz?^W-7}D&<>-9Y&VD?>j9SF<)#(#Qb;AXJo>^eS}Pi3jLQX zC+{l^78nNlWb%FOQB4iXZ(O73(DS3nfOdo3)`H6gvmI2Rx@OxydDueMOv;s!c;Ny^GAP*z@n-FyFQQtuZYfq?@eF)%s` z`hWU542F&-{mB!PFnOZ{>Dwc5cC z9_p>TvW6cw9-63ucv4L^{IfXMg5e3HDSPETN&wIeMH0$?0D$d90YE20!Wak%W6*B5 zqtS8(_CKzny`c_I8yh^PHeFXPLe)Qtc&)p)Do|VV0R0GR5B-5)G=gCmVhPHd<+m_; zl<)5WQ513Sehr2Vjgif15-A_PzZl~a$KiuzD^Ydl`KKj&Lv7t7)Yd(6t0Kg4S|tEb z@Hv%Lw{h@jHVzy)=GXh4)o5T&-HPc`r%+!@&gws%(98g^EQ^z8gF}!Y|7;F%Ln@=z zfF0zWm;<9>p&LHZt80S>hC%4`WIWE;No0Og$p8c=`Df1%+cF#nO=L7hZvu;2r$hLR zWMD=z@in5g8luEW$i?{<%zk5`RQIT$4pD>Gg~Dzl)8sF`dKC*&=nVg8YjdEk{xKrL z>DBYnVobsd$jLs0RqHn5;E`j2c1JODqvVVnvWkQx~3#AS2h6v z02oXr;sBuJiti=-x?;7~!64|tvSb6++hLJE*u-h03biD6gzSS@})ey;mJj-%Lg$_GOrnIMzR<26Auy?Zn~qy)Z*3 zJl}`RFu>mhtu`C36crNNYbB`n{a<0!8t_RI(Q+c&qpiI~-p`5>0J!1)?J6`jG!WZs zqI&P?zqbfoB(q2ZfGfp?a5^1eC44l|L@*jrbDu1Q?{GSy4hca!rLKRM%Y_FuR>TYn z-hnF9r%u7k6Oxd+GY#LF(*xe5doDK*=W_D`>VrZD48y=6vGJbgqy#P)<&w<#MHEHJN?MJ+ z7v2gg=BLcXwy!t(HRBQt&A*+{3IG^}!Je$6gtk;%ASUnhNpfR`Q8EBN#szuHcq=lX zZn#leBFSDoKnVbRMR7j4S^;eYgHe*b=!b{hYOSNbhChf155t-j%TQuDiO*JjN_Bvk zfirU_gQEK0D>T(>}ENUEu#wDCsv!?j* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/etc/assets/baibot.png b/etc/assets/baibot.png new file mode 100644 index 0000000000000000000000000000000000000000..f34ca89b67c0910fa213fe8908c8d685c777b63b GIT binary patch literal 88901 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šbIVv~{$-H-4St^!jy^ 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 W0-Mk_#pbi1^y2C2=d#Wzp$P!6;leHe literal 0 HcmV?d00001 diff --git a/etc/assets/baibot.svg b/etc/assets/baibot.svg new file mode 100644 index 0000000..dab37cf --- /dev/null +++ b/etc/assets/baibot.svg @@ -0,0 +1,568 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/etc/assets/baibot.xcf b/etc/assets/baibot.xcf new file mode 100644 index 0000000000000000000000000000000000000000..b94c5d184bda85d0cdf93ed34e7c097ebe0b97b0 GIT binary patch literal 668911 zcmd44cVHD&`aeA7mgJ_8kX|5_B0cpcA%tF%+!T_~ds9&nrMQ;e#ja~x%c6qab=9>O znhi*T2$mIbMUW2Z_4YR9{65dz=;FS+0{i~+C7I03ndhAIv~%Vu=L}b^UUNh0%`2`< zy=hEV7RPbo-oSxNj(ZYEBo3a(pZ+)!I8G1+{J{^$H`1T8^k)zLa8WpdCOyh=bl_h! z4jqmwaK!dqQ$sPR{}s*=SE28btJf^MYSqZA)~#NNB95NFHFW)kTdrG`x_<3-t5;rO z8hYhbE7o4Oc3tXF?KE=TRm+#9j?sRyuE68v|KV{~s`f*VZ(e`HvK6bZzbZ9r4DN3E z)m`7s$c@*p-jKTb`W08NT2D3BUU}vERU1+@_zSKBm%j!koTD$GW6i1!%T_Miu#Cz< z3xB?N{LO2wOTB5;y7jBqUO#R~)~GQ;-`2tK>vFct)gYs z^;d1UI=!SYf6S$T&sn|l(x9u>tzLEghGiQ-S9(d-MVhWz1!-<1*jeCpdP(+0;OG9U zLVAfgd-TQHpLfad)mN|Guy)jB(x_T!1~~a2+n&4ThEW?=zqzJM18?O z@tMF)*p-2ET3z70tUYjkAuMoy=SA(z-|N7*W+);UyMH-RIXL%yT*x2zu-Fgf@{+S*Qpm=hg@(SdcidzPwmscemKw{ ze@CD@&WL+@M(q#kyT*yjq-%zMIA>gN{qy|L#}GWx{^_3m`3mQ~eMeuPx&wh{VU>O7 z`GK?ccQ5|Zfq(i`?ZoNF^qnX4ovQ<9qdjmo-5fZF4eUFQ>N}SN&K$QX;{V6NGmi1& zI5lEvF{cdwn_9$4;*28-E98`jKY9dKz$rpZNoA+b#+e|Qw)Fb7@2x#U>c|1Xbop-PFE09)X!oEa*E+vYd^*wF)>AYHY}M_ zgd439j2#VOitmqNBBzL(?2(LlLYd-UA;fb^@GZ{%j8UWQ<$Nsa-{Fp8Y&RM`Hadn= zf*x~6Gj?S^rhY#-ic_K<_r)+Z?HKOA%!=fcgqM|Ars)5qgfm$^l+A~8O2(&398agvNzR??NAsDSmya&I>yTeo zgP2!UykBk{6UAS_bqj`}%eUCnlhmgX}*Y`-p9NI*&Qn(aTFX>MscdFaK; zP(cqROuGJ*A~uvUoSIq zSG;eJV6xOOg6{{$jck-6m}GzNigRidQ%~pjWSsnU z9#j3fxXOc+)s;{pmA}f&)F%a8iCb{BU8Jj>xcW+mE8RD^I;344#?_aG~CGu0KI z#M2d8dn?hhFB^U2_|e;Ltuvc2*8y|=$13QtnTZ}d zuI}P-#osfAsXO9BI5pv;QB3_I58TKt2?<$X1TDem_(!RO5P zU71WdvDSoX;h!}^llJS^#0F%96OcRqZ(@fmwO=QZE^)V@&60`0|EcCMH z&P*{4lT^md9cm=*+y6R*9|ToQf4W1(V70$EUbq77lst`TNA_+T8#a=YP5EzPUXh&# z>hxKhtSkN8DKc5vvphVH^Mo(mDYLI@;`jniimupa;>Us{(5vMNF8G5hgI}YJCRhsQ|BM=2E}9ZOZ7;CD*=V zRic>u9$v1gm?h(w6c3BryCTix1)C$R+Q2 zhck6wc0W#voVd-S4q@t>10o6Maobvz45oDcDIx|sSMF zwXaJ^2C%W_gL6J;uyp#*DVQrIe)PHzZT+F6^|xFx2yokj_kw>{)Ml+;O1xQ`|P;z+yBEe6oo(i zbGg%X@QpV<*!AgIza+_m!epbu)C8qfl0C=Yx%aM5J<_Rh{rdNhPpUiRmt;kjgYY~A za3-Y*x5rjP<+$XRJpat(1VJ?DA9kZ1MUkTvQRV@rQ+j1d?yTl`K`(GcXO4|9gb5)& zal&aIdKBasz=+C8s)C=rVPcTc2n|2cUM2>I^$QP9`NZw<`RQ?gKpGTPRs^|Oc`wWu z6dY{iC!KfPXb256g@>6Qba*`IDi&aR4Mu)K2sQ-=2MMz~{jWz5NT_jkr`PY7baFq1 z2NW-R6+B-t-{?$rxH9U;N|6-WJwvNzTMGJ?dIzXKz`5#4BVP;{uu1AA1G1%Jz_ z2||zwJmG44{fgW^UNnY;n1c0_&-w(vUSn@RS%rwDv$E%fNHl2-3+8U}16F>}U zlEEPDkF59~G3mlUufveM7Y(3~`$IxP1(PdCEIQ_we85@>BVuJy;{AtY_2^i=DKscF zB-pg9lk`ksr}K5d%49Mcu5I`GW!Xn`_H{sg@{-_h_Q`77y3pXzu+WeoL*n}$ji)ku zqF*RFbA%egAM8PA8e$^-l~GYI_4<91{oW`@51JEXSlaFvWTptJy?ZgRfJj4w;vTp9 zMMQ2cR}8Im zK+*kYuLnxM7d1_m&;6i= zw1Y>tR@tW>nj{8?hKJH`uukB5dA*VFz#tX%I&jAz80~taA*kjb+FS#^8x=2D!j4u4 zn?#6|g$hA@FmL38It)g1Lw}4qV~Ek9H_kgIc_1Y)M!`J6%iW5fwOkuz3h#%JPXjU3 z6fB1Drq1A?VDM9K2sRoFLikPRWSSC05ZI+E^h1(U9WRanYr{f9^d=WHLL288&SH?& zWaKlRvtgK$EYO!8jM1S#mtU5CymeS`Xhc5^Q=Lf&7J{rKqF`P0k}shIsDO@WI0Qiy z3Y6dDIda#C5TiZ_gOv|)V-O}U{=@}mLBxsO~x6$*qgBV}c;mkT57c z4O(N^fWq~AZ7}owIvH(Z!cq;&DHRo|uH_y7D*qfa_MEg?B|=!oS_fYB39VF56rs6#q-?Wma0h>>sm4rld?h=}YT z`4kuz1W>|3PmtkqyVNzy5E|Y;GPJbqr=tFGF|n~>mS(>{RCa1zX|U8Yaiy&xCNv7| zgiLJisELSVt>$a$b_?U$FgeToT zKOQo0Kx4(vb%G%QX>&wOtPo}Gx2RWscOaM;8ymB{#|M->#51iz5UK{rZJrGgco-cO zdZSZ0niUZjpAa9F^S#FxFZ=pHMY&07E02tcjfsou|EMh6=Y_|`$Hzv;zv`noAvVAU zaJIE!FagC!B<(^Ek3_`8qvd{!x_#0>`3z0^u7{#g6c-zwdrFqo&r|xx#l=KLq`i-s zM@p5OPnGviOpJ?<4PER&{qC}e*!cLE=!nuLzduPnrD5axYdUC;O^6G>ljdXPvB)^6 zNo+*){g@8I!CIr-O~Z+PPoaUtxP-*m=ofX0{n*&pL|n#14E|JmnK4Y}8o1}lxESg- zA$IszDoI{?NQk!+OTwq0#E2p0LMk*4@FPe^@mKc$FqycTln@hpgH46H%j(&wQ6McQ zCc6Lnc1#5_P|@C9Jci8oC;*YI8{-p_ladl+`w#t;)B(@gvxzZrs1_d?|5%RZ&b*s8K}zar^)@}65`_$lA_Y?YE@JWaq3m;23JfV; z<>g*gemEKYh0Z3%M4F#C?$x2QW~wMl-tK?gH#$5r3TlCtV`dyD&D7makvDp(wUrR7`YCbV6c$eEC<*D`Nuv8stgrbX6qU zN=isfPK@mrn>Fu-yEni1>Kkvq@#?ep%*{=V2#tnJ zzJDu*Du!!JY#d}8laL%26B)ItiD72M8wq%}p)NXXUq3J|X<%|fToeXPTx@K7f)Fpn z^+KfRjk*epzoSR-`bAP_>di&(74OUW(Q(O%Li{OIfs7!?gm`E#U7^27)5zESkSTS6 zxr?S@E0j-RCpKlr#w8_V^u!8re7qRff!ZXM{vpY$4>Qd4nsEcs1Su^v44_Z`lMiNN znu-SPz%UN_O?6|PQ4uN2_DD>VeGp!Fq;UmxPFAksW^{MoV=M__+Wv_f_+pfL)zU&ncBVsxP2yqI=p$ZJ9%gK+P z`11kAnybKo#*F!Z{WKO-L+H;6EC>x?%pv{? zz%Z3(UG}+={V~T!RQH^lJ|JblfaK`vE|Hm3C)y1B{?cUE!2$6}V0`$DPV3^hS3#A}_BzznK~8m3?1&v4&_tKTQ4q^1r`j{Uu)o-0hqNKa2o zDEtXyo5iXpeg>x+wwXyOX{o7630oNREsFtMN@B`eiXs3|fVU0Q1=gw_9GwDsQWFR5 zMV-xY1JhGdlH-=yWq~EDXHdjEj}1&oP0L7$9}n8tmxGf)P*Uum9n|FjYNDwwDJ3H< zGcEpVKl-=NOi0a0Pf3oc>=0Qz;Vv+{D!p+N4StW#4G z;%~O1MEzM#dfXV8pxC-^ADEVro|%!7Jf;z4L=$^0V<4ECnwpsMlv`lD3M&Zp_yBJW ztQSJJKQc5iH9ccc+JMCMPT(psoBP_tf$6|6Bk77~Jupu|IWj1CBFIg>j}J>s0;4k1 z5(*A!h-rULS&~x+i5dQ+L3egg4W8HX4P>azxb zhv+&fe*U+L+7Ce>tL)joFg`9RWngN?pv(d5?bMQpgJ-rUGE>viGBPuOXvtqrNd_uc zc-AXfzxz{O6kc6Wl0k#gYEBTYM%HE9m^3ggGjmX8MtX8;<>tfPZW;RBiljp4;n&uW zO^8WM9+;Yv4nk)gLJg3v(>nTR>uijPjLb~*l@ga|UbykWt$%yx{SV%KyPDsxjGIDh zl%%W9Ax246j5q}LL(>vSE^|Q!|GQ&P;`}KsSJOM!J}0CDlSndRkI!>U~zcl>v=fMva%=w@U`356(d<6+?*5{r6bMR})(r`yrlg>8Km(_!v^7UG zaD$3CBx*XE9xF(UPaH6C07hi0K1CSl8;}?~c;z0y5p#o)bpj1)o_<>XcJ0J;mGVK|@E6n|1Tc`&&q% zSqSMh5Ef|WA_ecElc(i}FY0%Hvb*8SADbPro`nXU8rev$9~;I+vMUf3?9YaBQ8X*l#aQgARy zk2vrE97ej^ki@Yhx@P~tT~Y#K!ofJ=aIhp3{>C669Eu|XeTK6z!1Y6-CzAE!hO>E`<$5pf#O~V?((9Yy^6VqY&0<97}Lev@ep@6>J!}a@C5p>$G$^ z%D4ga2mk&rC32Ar<(q)h{~7>HL0vj1$VY@<@Gt$w3vPa9PG2xE{kg!iW#9FkPyPp3 z6s30u%15OJ&XYd~oXax<=gJ5B&ff>li~B;a%jyI790!Y9Ag>E1q@ZSVm?H7EAj=-b zNUmbg!6?<70R@lUDs%05bf*gj3O#nH?2EC%1E24PyP)E+LzN$m;KiK%Fs3C^J<_o#pOTw+DnH$=$;<)=!~3oJY>l1!p6anA@7wi)9zpw z>CrF76d|lfv7iQ{z>PbK1)!MlA~RKjiADZ`Ox==$1Im8E+Vkn-4}IJXDiu6-sM1H- z23`8P@8OTpy>ezrn2r|=^UuP>$GvpO5*rZ~qKkP8o+|D=KhBSVQ*VrU1?D&I{r0UR zO$L4Nl&|5O(Y@65oF%7t^(PLn0c1%opY7Cl$2&Y^o#I}0!F_-Ut+Ab+3ovkrg@n82 z9te0x1(1c;OwJJERvIZx68*eH2BbhONoa)(SQyxJr@-FTfl93x$>ll!*;9YnNsbL+ zrAUX?USTwid8HS8qWi8t4A2<_{fy6n7w+Zbv*P-NhUk;;=?OePK07rwIHX@x?HQS< zmcO?o#)OB2_n&%Pqf$CFEea8>5YzNC#AJtbd_|lw$P^rLi=6=*hwOMRuYX9)uysEI zcL+gJI=9_>%cHxy0;&TC%pb2{8We42D%DnoLJd@wu!tg7h1 zC%OR-G(EsAkK2F>12k|;dMiPHpx1I1$C^dl`%s+><}A+M3O13FYTQDBs~zPYn-lkl zgJp5c0gmMu&UMx%tKRE)e&JyR3deA^X1l_ql{^>yx(BL<5@!=!VzzUL zVfrD&VNk`^Yy}Cv{cnEnqA&nJ+|4$0iGaNiF-7>Ss6@>GisY+RQqR}~)sGthBGxGZ zcWVj9I&rjP3C2$v%`nKoQjKExRS-Qu(Fhef(C(>*Qy`Aoz$4Ywy7`VrzsDfZ?lDFW zZ2J8lpKR6MPgK?S)t$e;?ZFlddrfYN-1E*oo8EyykgXy)DoXcv-*&-nMFU#<7)|I5 zSX29g>ejeSe{dTx>W$Pf1V^?hQVX~vVexni5>^l}y>0^{rI|qo^+q>IiTkVJe(O7g- zufP=4(k-Pwu&@9>z&3!ahghNgfD`b?G!s)BjJOHVt_^B(=>$YM0ZW62VqqQ$o&dFk zrVt8tocO%qIE?^2cF0oKXHVSm`v<f>o z{?w)2GwY709((Yi2kv~qPC{@f-8-In>am9(zUOIZAnqmWu9u&C@`*?8d)BGl%dXE~ ze&*@N9=`WuP)N^}ec*75mtGA4O3BnF!f0G6phHWB;0=Lr z$1jr9LuF`QLM#ztr$LF?2;2#bNCRDK&v}hGnAd4!)(B7(C<|TB5EV>T5Eb3Irh@xk zs|_e3k41=FEb-!84Y zzf%c3pFIujNk>2LWWPKor;=ns^_|P6;EJ>wLx~F1ITJ}aDMJO+CSd?h!!ZMca9${0 zPXct?fHU4&+C)QEGgL-pQs+NA=+#BHJacuwx#h*vr0?`j_h5UwG-&26ExGd*vVRzw!4spZ|y|fF$NQ_};s3 zzxB!sZA6lT`M>&b`@3(y`f`g_ooC**Pj`Iq&fj)8={*heTxtGv*N)H0p8~jmaETjl z7=d~Nm8xb+qv1aOkn;)zHCS*PXp%8N9bwe~Di}0Vn_AZQJ)zQoPZ}^A1bB4q-+y%$ z9$o-_=05cL(@#8m1h)Xi>;1^vue|=(&98U%J$HZc7UE(rJbM5GnGkj#c<0@>-hBPJ z4}k~4I}d*N;X8kS?fEx-T6@g3fBTO2-~IdZ?}MKN@BjA058iw0^_RX0P{dr#+unZr zt#`ixIO;>>a_6yQXKj5%k&n~Ic}Sm_LLm)|9HJ6T(cGYHSn5Qh3Do}lH&DW(x}ZV< zuMYxf7Ux?ID)3AG6G|5gs*ic-MW;cz=i%bqUtUDafw+NDv3?FT@`WYWZE@-tUP-@S zz?l5p(zUlBCW2<5_BSm?d&h3L>PZ*P)_Bp~hyqnPdZ3H$3B*SrKo=`b@D~H)4-3it z)dmmMP&dvcKZh~kGao}_F^=UJCL1Xf69kA>{Y-QG~@Sn}lNgrE&un`vtN5 zzQc_5D`rfP1kI8F$4gZIr2@dQ4f%Lt)L_|5dEnWu@_AcDof%ySh7DV>owHS4X$i?r^%@Ixp|zy}ZZkcA*Ng$fA$;yM11d z!`j>3dj50-=RMWcW9_v%J)+m>L#v(uB+Nt~Y(t;l>#}uscJ<@D?L9WT!{zpdYEUkh z8|?{x=FDBp|UynmXG(Lp$wsdv(I@}&0 zPfeJBq2N|MUcFC24pZl))GZQPod0lpFUZiS0G#Lz^61=>*XQ$kMW2h1#To&!;(|D- zt=sDI3ZRxqR0zUj!d#vR+9KuSPL+KZgaWVBO0gxrVs`?4`B{)0tFLbUi*L+ zjCBb$oHmz638dl!uSK-2L)(Ou4rCZfaNvg|iJZ@hG?m{=C=zj$TqQ!ad(qD%o!{V- zVY`zkXqAB^aNaJ5m(nGGLVO)Yzv>4jA`s`%nGVLigf3C2!wH#piQ`(V}~?r_yx+TrY1ZCDGp$bngZ$Im~a|zM4}!|)5-xT z0;ED@8_*h&tNPF|!t_3a-zhbB+1cp+#c7A23%LwpjnE@h9)3p*SG0t9-!4pFN`Nv4K1YtTtniQB758rb@Ew0amPAddITZsav7cSSZhmPLRfKd6T~AZ4LS62W6u zz;M-r39=Vh>tN%GiWT%@5~9^VNR0wh>VsF100Z}kl_XsHA?7JwrynL2stFz^)pA2O zD66f5V}}Jk9>0eWqPc@K&IyF|gb`%ratUA%ScLIQrC8(P^tAZuz}#Czu0MPR7KnO$L5MTl_wk)q%;8d^$`S67+@M zN~h;prj^c^JbvP|@dYK5CX|dTE*>{w@`U0^GfKu5mrR>Fd3F-#o>@9&>a@udCzKQ$ z3dF*mg2ICQyxg1|bH2G~e96@D6K2M6&Y9DuPMkDx+&HvQBo?v)omrRPlb4&DM?dDm z{K9eLCQqJWiQqi7QzuUtKd!K-NEoXY6$%BsndR%vN`79RkSpZKfHn*HQo-19<0tmx zY*Qyq9A8{mP+&%{I2qBbhdR&B%FfQw<@)o?`S}H7L%ELGQ^uE!8#lJ7zzn*@hf7H%~N&a8kwO5_Dap763pn%hbM*&*$;^LY|n*=dkRc96ndhLqoxE z8>UQ}Fc!@ffNU|JH%ruXt{#o%0a^s4KF3dF=9_~!U)dzEpwKMjG4!j?mw;?;o-UW= z>CrIt4O!7MH++tgorATu zF36@3D3cJxTouprnTCi2Sls0pz!ptHLM{W@I#?s%bzy;ER`c_8IYO>4FCWiybAkYD z)PQlP%i#ek7Z(?o zygUO4WI6g=A63iE$rd0e9TtjH3u3mClbtPa(sZztB#y(6lALU`O_hLgF6cxhPz;H< zK?)kl%F50{XPkF>$yo3!2aqC^1wH6<7!E$$fhGt`uny!2d1!SEw&PJH-=tz7mz^!< zKxU{1F_1Kf)zFMU0cgr`=b|tCLc2r|=H{x#7v<-Yss$0B#XN|ao|7!lK%Rp-%O_qF znfe^x+=<0zzzf+d#|Z8y&}EI6`3A^UpGWxS>7Zz&k0SUpxwsJRi&=6GP}ZS_I}eIp zG`5&DD4(Hn7g{G_p&w}ASg01bNSt?$*Z7bP#^eGsG1r-sYc85FckLhkxMA6J617>c z>4nQ&Si17oyYKwnl8Jz`=VA{VdPhCdF%d1y@B*vyD>naN^C3FnY29e2SnFo!ng;#HH zrf7uhZP~uM5WvMyS%@0!v5|}b32sjM^GRB);By}QT}gpC-)NQ>Z|_C{0yDdonhWy5 z33MuC*&towK5Cf@)_jKraad*P*txg}n3>%uE1dj17PjJDNwES~+Y8eQ3urc=x-@P` zXZ-*h|5~p|?<`q4d*4LD)Nd{{ul&kqM3K$=^)=?g;<1HhQUTHzUK=asy01L~y}D$Z z^VJG%X35Jh$iD9^GWvq-Joiw3VQ~>EK?!Jhk=iP&j)5n%3RRLmo?C!vOETv?)1fUh zaCbgmpy8H>(TFidH846>A4k-IIsuKoyKRUefTq zrAPe;h-sk`yZ@tkg#-`&WIfvzj0F%%=d*eFC8&V`=E1x`BMc)qU$GqU(z{eM5S*`7 zfxY>}(yV*VLR3MD_w0Syd8n69BSgq{X@VO2LN8t%qSB4mq}24_B;bKc1%>9t2fPNw z2_gHwzA`6wd{Kcmuux4CaKW-~yebx~N$!1D7eSdlq}=15Y?2hC?CyAFYHsfMu?2ak zqUM0tpb8k@d(sEXM)n@LdnzVIL8~)%+}!s&eK2bzr+x1#b6(!0vCu>)FAdsnG5Ao^ zJpJJ#HqFMfeRJ3JVyFc%qoAO0?6{@xo^z5(;coxYv(Skt)5vof8l~PNt|Q#vW1HlFPJxXR&7;vwOFN8SK+U%vZB1) zQdv=1J$v@TIrFcH;e6LET{It1LY-1uGgGV}tHeqJ!1Uz=R%x+RRM*tanhjrU(Y!gcYO1TMglYyDp~7ep z%2}CMs+N`OEdI)>%F3#mP|mY%ePqu!^f;lzlR;jR9gbE&1$bht% z%H0-%x6oe^6;w+_5a+sb(VW?JGpj04*5&9*OSw@4)|D&hNYsE? zsgCn6udA)DtQ4wz03jqqiyv2@4tQ#ql=0=vqSFW`E|#IrY(m>2RO*4H1wG?wnGSr` z1BzJWM`<~+21JyJoO@nfHN;;=;_YKfSx`9|6D$(-R3_j`Mjc?~g$zJ!Ss5I)WwWX( zD=eTKH1KHLMX)$fgeue(5l!M{bk8}L%$|t~0K$*K0`!G)1H?nshyVe^kva%7_)-^W zMSu~!Bue>Gru71x#4;~XCvjs8Fu`#AZ-k%(3TsOGSAN zXr%t2`KT-3d_=<90YCHXSwose+^npe{c0zLK9QbbYS-&?D=TI~sRBqcRH9L;)V%8y z5p{!?*YY?C7L3PKwf?YdWLA~QhksX5iCTC7$rP80{%U~wEM>3sBF?7=bT6~LUIl2tLQ16CdW_cc zjc4Gv>EOl4UtC*ZF_g=%+bFu}QkmneDho;05`+-}lFP0;E(dAR&iboR*JmkxnbtoT zuuh3tU#+mzYDnuaY>9u$qHp{r*6V$DvDP0rUHS;cCxe)$_3^UuI#M1|UuaEPDJhpy z{hHmxZ0(yNJCaL9rRCbM{IpI8xPUPm%gSd}mJ6jkO<54T#?9*wOF_)%|8ip$>WCGX zb!(n)g)e8tX1BNImY2=0DlaXC8lxi`w;m$fQuF8;gd!cP|EE9CsiwY2$*bh6cJ?6e zVa1-d{p-N}c{9tknl$0ioB(Z|_tbGG(%yE-arlw>GoiU44VqtRU9-K7vYwK!Ywv~{ z%s%w~vhn)h$keP!b(@}ldB;yK&|&vCee%lIO><}D42}sk2uYlkH}+4Ty85yAzwMyV z5*EEe2N1#WdFVu%QDP3U(; z^5Ulv7GW$ zmukk+6gl}X-D&|=t;iwk&Z~vEP^KJIi?E+L=|%roEcae^rkE*%{w5VOweHwBrrz%x z$Joauj5XnqH}T^U&Za9ICvfa6Vd~u;z|A}|j%~u8d$r^II8L_rb~caY;2zt0I!+aG z6n1i2J6n$u@&i2+r@Z zcb>`8lJpd~fkSTZY951oEO3Tp16Ldk9UrZw^kAuyWKrg|wVxWLm5H#!D5xd7d)rQq zL1G61Jc@5nY|rNfsFUI! zfv}bq+@!8hETB0A>H>j0ifvLM1-U5HiM@x3al-(p01e$ZPfGA|6pPr6PwDvfN~HBT6!E(v8`iT?<*{ zz*03Aj+<7S#fe#bHm{lf=CPCOkTfA*4!`7F$@wLvOGa~iwm*wJCRoQ(Zehtp%P7v2 z4YxYKuw+W@NKTjIfLV`9C@CnOS~-%#vz%P=cCtNL**WYMiAcFGOA_^S-u=ZXo{y;z+Y6fWsRX8fe7_8Vd`*>{A9SaS^8|h*7daE*!Qi) z3p9%PJlR}O0yuF-8!-arW%$LMj^g4LrqvMXRiSt@7FU2^?M&S-Iy zrGpB!3$Gl>1uQowinOk(<}6+fr9rO(*|xee*kzS9^Or$s%7bBH`pRIQ)h=8GW|paB z6N*|PnyZ?#5X>yI;+06IFWJB7qi(@)jtqQV8Ej%IsF{nghg-hft-+wDs(FwX%sdgD zmC>6KU0Y^BgDPN?!!E*$ne4T?;T%jy&2|oWAb9i60Ui}REC^U0Vi{sxWikLzm)t5N zITEO)C-W2y`N$wHrxLQ5G*cAsa9~wlR!#H-+yF0G6;zB$z*Q@T0l>qyM=4ONqE0nS z1PF?Fe^cA)Oi&M&lxxPN=C6Pabtu#nBrymI@|Oj}f}kM&_U$W%24hNLlJ)In8KN2a zMfvQr(}MDmj+8xLTsJTe*-J@n+KlKF@|?2m-AN*)d}a5i)ut?DeX&ZYHh2t&PYC!w zpQazp;cF%S?RnxTEV`84&t~u=u>oJ{ye6EMi7H>_h$HCizaw%4hpq14nZ@CBwyz7( z&dS>ZwX=GnXgF4Bs-ETA$^WQ!l6Pt+<+yfIZ5N)DAGAB^ZSCZ}O*=JXNTGG*qe0r) z`TMZp+zp(sY3H+B-u}EZmh*hOa&TgFQqG-C(VXkt)uF-Rp$2{Y{njYXwQEFBWdHsV z{Y;}ij^dn8#~J#C_m7B-j=j3IKj(Zb$`E3Tj*3c-9rZ14AMM8*L&G9sl41t^1Gj&T z=Jck1Q4vug1*iLS(y=m*4;K5WA?u?#_XnALP-s|~IQoki&iimYw)uvPelC{twcL_B zbnJC|;yJ1Hz@EeHo48$g-}(|czw6Ww-+kkZYZk{m5cDFFSX>x#`Rg5-z24 z?X6u+Clp-D=X*P?%{DAq_4k}>J$2lNt@XasCw^#?5;$x%^h%p_=|sKj?9m_3c6mX4 z_qHutUwq}wgHBNI+4bP#o1c98>1XzPL4C^$f8MMAb_V1t*7jb% zMt*M>$p7N{Nd-#|g8Y_ReON^FG6>CkZd(7$)EM&*xNNB%IA&PV1Y9aTtI~y0>K(lx z|EZxvN6z~S-o(JT!18;BJwQI-r_g_5#@?AT&f4cjV?XSPp z3-UX5?B2cOowv^t`DgZi`pMT_AfI8yCDX`v*+Bjecg`+dc^KqdZyYuxGj**UG`B4t zJ!V+uj1#!*ScSmk=$ezbbly}nVZ!8x?I8b|lJQek9s>C%Zm3xGHj#hsvqQE3`LxC$ z7UMV?Lzv+^E+(vi4q^R&b(plLF<6rji?JV%89_s6gOrFlAxj!HbOwtxwT z#FAzp@m?DxIXy09gpr#<8cy(7Dd$P4Dj${*^g56#L{^oT?6By5LOL56Qshx#6jBPB z>^7gy&ASwBO#t1AsOWJy97yew(Mc;+-CV29jg<_5(fbTq4j87P&eNt@h+1dBA+Ua- zFT0DXoTtO4CGBLh;)?po0snVG;yOFF{175rERz;Wl1h9;Yo^3!@) zu?ETwQ$AYkTQ(rNwdAxINR-1ZY3g!nP?WEu#4oA>e-EX)1%C%63Muc1Hi z+$}cR>W#O+BEnCSXrDZ9GQyREJC+tsS7eD=4A$3~mwG zN~(>-y%(XZ)?O$0MW~1n4Qz3wrYS9`*V5T;oyPb;GFs2ctvyyJI7fMDH_?qerj{(! z^3@*ZHn@0nCZi{xfwTV9*6EpLYS{UzV`~rM;sAD?NQ@4|t3q^r2M4(LF2sp##L0%nl(L@TR#fMhTTH(d$HP?qEpr9pMXMuDsI)umL z5UdfL)Z+rrAT^Inbpxv+u)!6+2DYBMpp$NAZ)aOew-w*D>T!F6iCfS;ozL2*I|O0t zYCf?qhLgHUw*{~iLU7r!M9AgTJ9wwZj&(sjc57!7=A0gpDA{lTWu32)Rv?+uC^!Fil-pXF)KOYi>I|nzOfc21+npIIOL3 zWsjW~tg3_h#;~{bwvXhjM~uZ;y8M`qsL~&;;8nv^QVS!(v*@S z%Dple`7JQ=VS2+dH;=#OjjxZLI`;MJ*OZJ!`UQ46pMM-F26O(5hxZ&gb^6D~Cu%7L zl)q%WmgS(70Hx}Xc7b2u%^x@Gx{cS(E)mRp0cA5OpDX0M@^bTws;{~E=GB#jBISCy zX@y7;Q__cWx|FYUYyD?u<&tY4k%yNbj651M3xx_&T*zbQp-qmB6$%-WuDq7n3uLX~ z%V;?_$~04B489PY3(8a=eI(=rYPu}rkn5o?^R&#N4yj7Y4kFEmdmd?Fvj&YkCi2&u zGO46UL>?WzXzhX|5vZ8$>{Ah<4Gclk_SdzfcCGc$tO`8Yl?i zI?JX_n^Z!1%z*Z37^6`z7>(PtuEtnWL-BN)mXeyFy`GItFzS)%D3mk#}*s;aq zCrp?!y>ez{B*zyk7$?LX%G}BY#l=Nfm{F)VI|~YnCrq3?aq4u-taX@ykQ*(49C&ou zT`*zBv zkO3ERy(EmH3DYYu?^Km&D<~*)UOZvie3X!e(^$_h95-Q7>AcaLR5J|-3TA&{@nmEV zMsmG%Q_D)HVrdE3P%>#6@(GxVW>;b%%%n*ZCrp|$wXCdi&L~cvKYQFnVXD_sKBcUp zV&w_UBKHM^cuIe0^pm?! z2`p+Dc;NeMjVoqXmX({}#UtE6sT+!D5N^7FQx7H zC^|r}0nJiA5hp?!`4j{;gmM@{%NNhBsnSHRm0BuH7M{W$0l+|52K|w=%V7y!xopY2 zx|%8^kr9PK+fGtiif_O< z8M;zC3Nd7=XV%PKxN7CHNKURrGAYP%zT8qZb7qA$;Lx)+@+xN5&Z?a=f63K|a+Pb`SPU;uS?*hxs)I!zIIa7Yti5Dy7uNj z-g?{b|9I!U_ik8x{VM}G|NXOpT^Z>J1XWcxcflymzoNDhEFw|KmfD3kVQyJiqm3dE zT3%T@Zxv>w#j~m{ns~4xU@;1$E0H@#V$O$n*vvVLZ$zb8l&T}{RMyOyzjQrJqpRm@ zsWMC|^A;{%g~08~S&J9WsjEi%y1Hi0!ey(j#e}qWY0b=;)it$sv*#^XvUKHIOh~tG zoLwu-_AXvJf62;~S8o`Gyvd6`$Co1%R_2L5;E^;#n)M}h+2qSw%?OYxttL5 zUz(LM*um@9CCvHEDUU*`2j2@EddpW1e0Nash9Qw-D*U^PKGG`Ljy%^7A8nlXQwGC! zPEYUYPdDcF$LBRmzED$`OLBA^umAfU(-TA*J`1B^8n^;@-n}6E+>fb;3_~Vaue)!%yufO)Uhps6d6c=j1o2F|+R+NgtQ!@Nx;ivln4B`Cv6-WlH{T+F~IcTo8hrh&!yf z@$RY!!;PWt2a3BjZ^<`6w7TMtkjs-CJ65I$xHV1R=@zkf#94pCs8GB_u;Vj*&0%a$ zk?kknT{1LWfXs9Qr`-5ntH;y!#S7~uCI#`MkgCi6;G6v)zVxSs6Gp^`==for0eJ{o z7!KnZiHPoIEfWLxfYK*0py3_(?cF0dy$_#kBM%JjjO4Pmk3jx|*1A(Y3CW?69IZ7a z2Z@%9!-?_PJ4Ydd0|zPqC3ziP#}NF5vqMX5VVS#aoya_qk3}9T+QD|I_LE3Xp@jTk z;3GNOk78Q}JV_pFaq;;TckgLzp8?9`7P+1Fvj|cniG(G^j^5rLe4rF57A(c;Y-!5J z7Cyi1b@sL%GjlNdtv%N6LQb}JbhP7}rQI!?#N8ZOy;zeeYO4y#94?qJ9id-X3$}pa zh_z`j2n)tf9>IB0qS@?Xjt@zV{Be^j`U=Uy)FCI5S2U@7q}C?vZ`cJC{D*}!9bSZH z%8)sO+=IDzYSkJlqu!~^pPN5+a^*@093AK>n^QEgblwyV+*Y;z=f zCYG+oo;H{vWP+JXrj#zp;oM|ln#p#tfCn%>U`b3atIp@VMPp%yOe>oQ9!#7x1>+t( zD6J^39n0}Ei3NClSm;%Ysa#v8pmv9zXg)*@sOFT^8q{*8*nSa!d7`C3ishNNvy15LkK(gl|E3 z9QIM&f>n9A@gb3cX>KKiU+J%^TQGmoS`c14YtHf&OF{Ue6-!q`_*Y&{lp`p7xDcUd zgrZ${^&5c@wJd)!T%Zf(r`f?H5xiDl(QNzkLos*|-*&!|Esmy$xAXNp-5832 zcWlYgWg!qIsi*#!iLf|Etna|0SUv~AFiCEC)@;f{K+LbYKU+RPgg{i;dF-~~Aw2ME z*>`((r~tec4mAnDOV1Nto5cEG9oXx>7RTtmJ@00mwJ#FjOdm_1goF0xhp)e3)v6U& zk6gZS`SRg#Q25X-f%9|tdIJ4>etX~yBsf=?*rnCmvxlASyvQ~y z#K$}is-$b=8yxkYe|*0ExA$5F*Q*VU;y!!h7u=baSO5EdE8Z7e&jZl?&tshz*>Dv^ zO$z&*`?>S%H}_m&_ZKh~8r}Q$AL;z9T~~lLDF6dpB#IOjL#*>CK;qCGfnL%pq`@$-h?+;@ezoEDnG>j{ysdZEF#?-T3A z_FW-r3Vc8M{!(^bwQCV>pQcTF8&0xI-*qMXpn$^eo~3PczoCBbo^RSNegBo<_tZD+-FwD%Ih(MsTj`fgSVFzMvAy|! z+k{mwSvrssxcp66^$qnu_OxH-CM+xmX^@-NbYI3MEG)ool-tkRE@u-~piZ;>vNvI& ztCl9)CGWu^@Mh~}Y{9~2{6<@AGg3b=L&@C352Xx#V+$6RB!Yg>a%p?8uyMc9x3BGt z?J{;@35~8M&U%TPuwaV@-`izwz^Zjg8H1|2fb0#2G(?`sWx76^qceHfqj^#kW=`LWZMav@h?oajT?Udeqee2iSEnGwh6x8 zn{QhE-hsx3`cvOrLe8xVZrQE3EqwMMaI9x%FDdf|cj`8I+yf2!gnHjzrS($sZ`kpA z>un=8HGZzE@7dXT@f@7s_1$t?<}D4MH|iSPFP*+vF3u6i#d+6psT=FR5F3RC*DFU) z{Z>ZK)|Zj8Bji$onw%MA(=@J>TFz?E0@MzHUnKxqFcbY(BiJVJxCH zU+&YP9!SCK@a!*{KYJkacdD(k{ruVU=Y?}!P3>(>XHGu#MdLn63l>2DKjG=V98jbN`lQbaUSZ1gP6*Kp!wjtCd%wKMe*FP9tjy&3nEExmpGNK87B6t&+6%WfTY1 zw>13Z_5C`9$1LU<_DOXy`ER9OcL*-)?U+7nza|8Vk`{3b1HKz_4z&llo8LWD+2 zSba#lu0!l%ow|_grKtflPkE4O}g06+Ag&5=!n0RZMw)}Y5P^%b?8jxesh;D_Uuy7E63RG>)2a# zdAoF_>~_!(dM;(3t`|5V$=cQ?w1e3x+@)^RZPyUY$!cqBZEI_9ns~_@b$hT;x4o^k zwXI{?rc2zY+w!lCy7-_3ja))m|B zlWQ(@ude%Fdv%3&YZG?iU+QLE*9Dt(g?1;GJ@tRytc%fAxMjj+ZPta~(BTF z?q*%B?wsY5FK@FhHfOXuW-pk2d7E`@G6q7;Y)S?rzkVsZbukFg3*mODn{^$SoaQW> zav7U-g%0nOITJ5?udV@1_l?D8#x8fWE@nb*?6gbYtc$JI?Vh&QDKoH;;Iek>@)&3B zrSmS_t@|ZjL0CF+NxOA{XB#*8(%1gj5QM*A?GGlrp7P6C`s27@=}#NpWAe9CE@$nJ z1M5w4>(6xH3s0lCOI-VN{+G2sISb!z?r3YXO}oh2pKfjKPfkw4mH)u%s5UP7B8z{{ z(QG~~_xUz7-px(A`0}4Fs*sy|#~*G#)Qt|hW?s@7AR*U&*WK$r?gsU3j@cJq3dG-S zt9Y$N`yQ6na%szfe0SYlxTUodV)dM!bZJY1@NJ1Z?-}!GbGNR;+TNUXDNBQ}8Y}l! zZupE;lzR?MTH=XG1)N8QLHe@j_x_l@nVaTTA zJwdR}bRE7j?%x&>^<21!C_8@Gy{EgwJA7UEaK(RKN7Q@4I-;D|F^@HOnZPGsPw_<; z6uHXgab>kdu|+R-bp?Y%5;x|T)kP=%va~++NW2e5?+iC1Dw7bhMSZ{Pf zTW?fZHK}gJ(xuCmue@@3nR#Nx46X|jz}!7;@S4wiJABzb5_Qso<6U7evY z;l&OoU?;A;Z+|zG7+vsfuJ(?}hF=yed9?*gmbT6)s1e`c8#HJ0S#%HtKwtZdlLE__ zTt6>k8qamdcgWYQ*xxI37%}a&w{=hcw{=Y=TrU~;!J54+-@d-7BVcU{ZLMdq{P9;S zo~lm(D@>oJfN>35S$TL57!E@l{d+rqSJJm2$`x1;#f|U5C+VOaMgZ|Riygj`Eogwu zY`(o^@&9MJR36vaNjj^8wI57Cau7bmi%)#wOPKg5^Kq$*+jG%REa>pHS`&67(#P?w z+_VS(P78+ZPPkj4lhh8{r7GfHX=6lT=Is6vAo8EWmg<^N1e9!v|y%1YB zgfDU7+>gAk@C!Xb_yww#?tJKd1YpRW48TC$!P`IeegiPz+3c;q^WPnS0n3@2Qn$RH z01QMdE#+@}{HFIAfB`rkdFHnF7k~j(L2>Ajr|x`j0T>2w)h|By=$-E^0E61@fAlFz z%ZTtj1Yn@?$A0zp_Y{DE&`zIt^5*vze}N-hN@F+qx4xeM3<^YBDtI5i^Zf*10RGWC zKK1?sFc5D#QXIMaiT4qIVdP}|g-9{&UHb300LJB`^qGH`0WfDr7E4F&dd~*H{cLD2 z5|zJLzV`i@0Czz=-TmVcy7TXP?TtKb|JZvq1kP`G_Uku1H_Xx~ z`1k)TW8moe!q=Yt$ahDGz)%>t_h(rI<7mBM{a3%f;*SP7u5M)HlRw)q7|YQwdW*kF z9QIggAV2Sc_h=nVpqdYzz3{iYIX+C$&k3OIJ@B5)g!4P=3AmN;CH=O8GB0`g33S)h~SVy4&vgga?ip!qp2u_llojNsN~LyH1)V7i5%D@2L>3 z5s+0}`{*CMZWX#Kx2<}Y)$&~lVv6V-V9pVlfA@EL{20J+Hc075w^yy1$IP1fI^02t zV%JbAJ^a~MDaHB0yjQmc7S6+gh4alE))1pueX0DF&kyOq;7oD&hIbh~-`9mlc$C8@ zp!!)e<^QrvXLuHK{x?4MPGe~AHjWLjvpk|Y*{*wpa$^siu#X-I?4xh+2rc9jNiNKp zqG$d)1LAPD1^T&aK%CRw9Sx`8qT%4Qd`cV~zcQs70p~nic&p)WW^u5Q3xD%LjyZDS zZ|3;pg77zUIRweV-^}M+BnyAD0CQ>={$?R}3V*X0Q)>%gqa%PL*2JtmXya`@9FU5Q~X zOYq8+-?Gc;f9Rfm+swo3o+jcBWh3`cma1zH*k%4d>r$TZ8>7~K^t!z()i0Lk)<3rA zD+CwD=gS2r#^=j)1@L8zM8@Y!8JdjGWle6z=ZiUQfLocLFY^6ltusJh$Z=T&5i%3> z`C!bMpwAON%>;dpKfY>${z1?kn4n*PGqtln{{V+dIm>g-G#SM^-E7Va&gPuQcbl6J zpJHzAvj1`P;dRT}}~Tif@459N0R<)rE8)4gbbT{!sv za_qGos65f_`l!_VNq6Djvq!y-H=n}_phcDd#L!l_cLhfpIQ-H-MJY-L_;+K4W08{l zqu+~AvI{k+?9+)U9K=oP_@`Z@qc=|HUEFqd;?Yq>QEETnqn0fYy_ru{q)Y@K1yuU( z+kQMwl%1PvDMOJ#-kELa-v5~SXpdOSeOGRsl$rNjR~hJ`+&yo3iqF zwr0WxDU^~0VH%YSEJ2u#{Ya@gR!JXDrCJ=Olu|hnr5cGTPb8)+hH&A+JEAeU*y7?i zPef!IAR?0s9FC1%H7FCOcoIt*7iJf4+l6H+j14I6x56;Vq@Ti3CabrixZa7Av6=7{ z=FDrw>{guolku5)N4hE%h33ZPS0?{1L=&#@U7VqWGr`FyO~+*dChSl_VYX$+;7l#$ zQ$4J%l>>b54%Sr6Lr;|CQ_o~E1^r;z;wzCXpM?nC-xjfn=vPE+!hL|IPl?*ZF*+5Z zHn}MH7QjA44G|{_+@w*<+5SZErUBP@e_(AP_X>GVSSs!nEEiHj=3aptgmbURgo$*I zq1!3`6?|?AS~KQkA@PBnEOITH+OS;VtDY7^=4tUiQ)z)APj@>hfF&Szi??^C6?H&9 z7Xv4KE{^!k%>;I*EJq@o@VhwbV{^caRnr6S3kqZDp@8tfA~%eYzzySwzct+KrxY$h z{unr0n?FXokLiV8WTw&HDgs^ieotL5+gLuXKy*7K`P`RUWR>JvDTd)ftt2A)DGFFpEE&pXm7g8`WuBr{`# zD}SbrlMP~-8VN%$30*O|X2b7Z<#n34G?W=4d>5g|S6|~_;dRteWYC2eS1hp8FZSxQ z7DIf*#RR)xT_*zBAXK=#ZWSJEz1N-0Vmg6CFVU|?xezGq@-@SWEZ!+nt>D@`s)%7< zS^c9d(siOjD{z?4Z!`!V_OZW@(W-)XhZhs#OD!pg*!6p*Ua%Nl_{f|HC3b~}{M7~G z4nm6MS16>|H3t#t5{jA-*o#Zm$YR5aEOtXjCQCr8=*jS6!xml)ED$ogVF>|)EyS3Y zjSw}x{~bZbez`NQ0Oc;q*f2q{T$C{nXYG<=3@gys@QFZU*UK-Nk(>xNHWmaMQ$#NY z9$wP(u6Sb>YT5#JS;(;g7jn!+kbXzhF??=5e3b=>#&MazW4$zoT7tl1WsCk?jXl-} z`V?lYWYL{Z2|v~sq?Z)H`CSpn3LjcsDs_D;ysG?;AY}anAuE*>jQO2$$Of^Lxx&R< z#!RCciVWCMrmeWVOswf8_{-y<&cK3bWclTnSk&b3y8@Dpt+=vev60^ul&qJaWG?!# zbC#FadH0F9WG=F?bgR|SWFv$obKwvE4UenHO5(8LbJhJWpR3=afym1I3Ad}^!0qZy zQ0vm2=hcXLUU?Y?7?DerIbRL(B;&ha06pDd-soX6rf3xold5l&2_~v+)_2A#4~Z!FTUL;DVZ?i zD}Ce~Y$~Upo@HYd<5x=^rv~y-+whU$`%|X38q!1LtDLOPDw*sE-tI&0z{7E+ks^_< zzrOSWPH!7u8ga3#zjeD;Xejx&KIQpws4RtW!^IqbxG@Wuck8D~&Xr8Df(V@&7CP^*KD9l@ zv5w(&J;;6J%d89q(fj2cI$sVq-jEBp=aIN> zea!|%*i#b(-TTdgJk1qrSwWM7*vtx`cjx_{!T`(7-eT{e22t$2hlv`k*n9X>TkJjc zPQ*Dbcw&dv;?S+iw|`bWMAvmWj7S%y{;t2xA`{0MVszc0OZ)iE7I_%2dpyf~tt4Py zdy5M#{LV;xBO7jTv4c+y##h*IeT5Lg;j4*`U`i~4^jXMVjt?UiFk!<_4aql3nHwzX zZ^WYVjS?8o1@^5*<}>LXk@h`k{I7IwPTfpJNN5G=&P%hM9%CStF)I~7@zeB*f@3}L!sV@*m$&9$cqJkqOE0A5 zLL^7$vw0VbRLd>uJU52|&&_*rmSk0QYYn}_f%EQH!?dFi>x%rY6(BdxPl^k1F%HyW zf7PAyJ~Rug>?A&)RiDoL_lddbR{!>51m2y0a3f+j4oV#Y z_kV-4Pjz^l&UDn5qwwsNkMCCy+)>oHq(aKZONB3N!-1Q83y1Ae$%yFCQR?U@QH@Eb zsFusMoNE9skWX=j5T7XJH(1-D@-*%zS(;zIzT}nhDJL%SRIlJdAW!mOVHEXvdU67X z!4*b!DuQDpk=KG4jtxY0b1@w2j7>;p#UoD1X3};x2 z;TR?0qQ!8GaQ3yua13*ncR?{6J#R8+Lw4h;qyg3urm!Ml=jL=0-IzIp)T2;&qO>aSh)bb9HFAbIh#)U4dh6 zEl51!np+2Q$I4^v=APTY36d5^Ku)@xh2TO6#0VHrw7>zAJwLoLbcUD5EwrgA1;>!v z_wG1S?FYUSZYg1-4Wl3j$>wpXu=z7aQeDk^_r4>-)S(YtlNg`!vEpT0 zWFtIw=ewiAeBNVA#|i|q4{i1`c-Gz<$%e6*W#{b*g2r@JgT~BwGowTPT$N}xO3_HB z3{Miy!r&5mSu%vK&%Ha?!ykBg7O_O7Q3RZ@{w!35ZVo~~3|B)yT-M3Sz?@&rI}m4m zk1N%`mmmb^dtpY35Qq_o@l4ho5+yt9Pnvv@-rra*6)`dT9Gh4e;cD-=2Q*{sb}t zm*{V=c6opMwcz^u|3+DozWtO-{~O_o|Ndq|aIGTw7YDKHE0=)zjwwNO%W=^>QBHc-pQlYm4|JLJ6PSdsS~OpVRRP!2v?)? z-DCAc_3E+Zzc@o(XOREm4E3MG8R|=5Rw9OMJC0oksOvj_^7wS^5&2V2PiJADJUd;J zG8$Ki&rN4@f;BsNYWfnQke@s=owv?EabUXO&}r#Qy#N2sNB@b=MArfAI-LDO z!S5o%EN%4i-p0mDf9mf)aPa>~>woCr|8DsIVT1qM@P9tR|LKbV6t+y9w*FJtvPQe} z!hZ%gK9PHIlaoL7$-95~-p3w(@}W=9zvqE_9=zuv$D#ip#F2YH1k@eC`tJ==_CYu9 z>fgWnLG_N{XH{GT9Qohj55<3>FMTn%em%JUL2&&`yV{=j;9Qbvzq9|8a2resKM9aNQPM z-*nfZi|iUoI=DiO|Kgs{?{?QE4o9IStAgh>!S&|gdS7sLLD@n}z7{)#ai4qs(nEIT&&KiZ`h`F3e5qshl5tZJt-zHx#CgVj)uEYy}zK9wfTup%Ls& zu#Cpi5>fZq(Rp;Jq#`nJ70MsuXr?!Z5x-$46cl*5mkey8FrJbL(GaJ`l{)CmjGR=f zFxK-L5bW#c6hMqSINO451$+6(Am%xkFHtH#n%zTm$lb?=)emhGF0`9apo1?T>30TB zqx~Iwmw6-mJ9`I*`g+>;y|ltB?0#+EzSs9`teMI|BVaMt&xs8~y_^Uzg)!>7N@c8T5$Em|^(+?KY<(7bgm!tJ8Ap{>%sT3H1#;HO{ zo_j&o047W7M9+g9Pc>La57ZvweqbEkWlF<){9Lo4-h(Zv=*iV zYr)?6Ub(+miP4Y(*IcDBR`#_Bl z1>VL6yFpE^Z(yLm?*wXwSrgd2t?)`?j4M|03*e<7m4?<52NjNR23*nDAUozW#4RDv zDN!zg7li5zy|@703E_SbauEKELHIt=gU4W*NYm+{O0W21teZSn#=@U)CFCP1l2XQKO{m9JFJCEf?-yBR;JqwD z6<&|QRs1|raRo4hF32aFPAV)jpbS?=$}9qg>sRuuv%H4E6wx!Og~eW}K-n+>WGP%J zEaM<1P8O|{3M)M90Oe^`#iYL`=5z4gi#7gIGz|WXMJQJmqK8<(j~Oja@aLhYc<0Z5 zVgh;kji>B5-+z(mozdVE>Gp{_e;EX}zlJtvM98sz-u;RA-~4>OH$C<9`<;%g-}P3P z@|$Eeb-vfgT@5hQrHV}{{^`Dfw7LK;g|%!9?x$f>m7rQvx=YCnCyQl?D;dsIvY3PT zI0MVX<$SNCT-kM)Tl8q86R!TO_UC+^X7aK2Zx(h*9P zbcdRa%lRH)0TA6e6B^-5p3Bm0IhfVHA|vG~?)nRv!HfkcqBMh32Qda0z@%mcxXY0G z&-E?OY>j-#^5jNsaMVy-;LAQo&NpI!f~F1Cv8USQUkLH#sgbDu5jnYSAWy5Jz+nF&qJjYePegfDndZ{UjY2YD+7P zm9B&+0hJ6ErD#F8zQDHZqFh^6Q#O}Yp10g}B!eZ*+Vs-T?}tTEv4LNLjobBly4@*F zF6c2}A+N~BUaaRHa{x=Lg<8{5yZE25R7h+LfS#s(i>6|vO|+))XQAl$Aip{|H9Fy4 zY1O>bwEH?}CX3iolYIM>8mH+xXSz_T;r>M8L{zRaIX~YUkM#l`KS8ZY&?qvmF401q z{2IHL{R1n7XTccZUbIX-_tBuN^6HJwEaShUjx;XaIVeRZPfyi0j}f@7rKL4Zyt5)7 z%5=J>c_yFh(G;nCGFw{1Eg}1OMzKzgHqXHJR^in0O^U77k|wxXE7rl3i8Yt`R?jqZ z;7AKrztOhJ7CyXVt+b=hdbs%v8pv`_(_3CV*nYg@=$kv!o14{9xVcD~=H}_zIilJi zQbXxoP_RH<9L~Ig^MifaX@_EG@Oj53I9+OesjH-8zEKo)?MbJa6tB()gz2e4!KbYx z-LflNj`;(WDRjNeKrQZ^ibR@+ZL?^73(5>44A=kCX#37|ny_+o(|lHHKo-xb)Q$l& zPLb6KH0{8vv}v~5z!7R564o}qtR~7(xagfqqx*zZ%$(0+5Zce0_KG&D#HGtGyww`P zo8t_{R3@)^)0^ZaY>xA9g$bH>rn=QAH|>E0gU*VIW-YuG0mbSN3+$$!?8-y_aXfo@ z5bAZm4N4%-OeLBN&u{66up@YDxnIj@WKXJv_JrM;in;92vbpIkG;dIDT1ti99h(3% zY`gRf_Te!m1^bIF9bw5W)l_-(P+OSRr-OC^hYs?_s4-|oYfel+{~*0wFF7MifOtwc^u zFdbW7dimv7c5G>BYin(8iBUbAo}Nmi`>necMu(wDI>kz@B|R<^bQUNTSy&VexB5Yb z49zj7*ZO0%x3IWd>Zs9Y=+jKoow_9ItwI4N=xcf^1|fja1bD}*Mn)9?Kt`y!l5TF` zwidJ{Y}J})3`Xl9V483QE^2^8#7>EcZmuC?Y8o>P#bHc{b`h>h{DtU<=mj80JtSHE z1Yy+584tQ?g7uzA=LH)m)7ncyjfi$)7D8!@{jHu@Q(6U@1ieMjJ6scLQHCHXMKcsF zMo*NfwHH>VA|iPJNa*otjG?74y^qKp!A$SfeN=#JRVDz<5QQO$y=xR!q{N67j?ieD z!Xer2GnfR0^j%Pi`jlLipyvdh{^vndr-h<~bp^3hV>1ya%uV$c_^d{Tsacx zI)S#w3?{l%^mSHU1UPIQln7D68VU&ybWaRO=2l%+3(cgEAs14xKr6KN0g?o9lHw!@ z#~0YDAq_YHIz|(r=B4C+C{;<*>4lohbn_*uNedSNpZh^uHeYBjjrlV`e+#x~^VwXn z!D*_bnrg{5bSp>XtRapLlv&3lok>}+*VGtb68Mxgj>lE0Wb--JlutVXEuyyOP+Hy; z3h%j`-Za=%Wa$f=YF?HJDXXR^60hEKViqgsq0m;o7~;5mM081j@7m>PFd;Vcm%Dj3dob+l)ChlU8O zn!_i9Hm&-ZA_g&q?k4C}zqn-%Dj5q3h~)4M7*TFrd3}t;%9cmFp+QB`$i#WNNWVz7 zKzOc>j!|*S3Oo}k=SLOzr<3+)Lam6f8qIXJ^UdO`7A^PjbsX*%2ow?pb*7r@=qx(> zLIU38`$fq{8Nx6FBKl#MYN9tCujXJbrvZo{ zn-S23BOS+kRD?2$s*}es+=X!T>8D69$8&sjIYW}qJ`h%hBiVC+oR~xk9@L%{^bwH< zeB;ZNe$WaTcD7NN<6%e|4?ugdumM@}`7K^#=p59!Hc0)#x(uDHW0W3`?OHbib zV&~NWMC;6Ly|lCcV_X^DG<%%fSi2MiM5n*lg@{KwE}H+4hTEw+xx(pD67B zh_g<#UKG~UiiwQ~#%O#6T{$*H88PC8YFt&`C6pbpCrg{aVC5v>gI`C(3wa6GaCN{+ zs`7X$CZ?%@t30U0St+WRgS;lVPNq>m(`c*03TSBym_~jAEenWXN^TKaT4HxpB%0~B znQ>zmUW7m~9-7s7wvKX9H#aMolK!nmfe!J5?IthDpM(K5|;>Ya)?fOrAbo?9{W#C{>kLe}<;cy)ZP zkXtkIqAA!1q_ZJ_#V~HOPV-S)cm|Fepv}k>n=boQ$*|Z4X3Ya%uxx~Uha_1Dhrke} zbn5_|3eaw~NDiPyq=A64D5y6i>U$#dVy)7UV5A&#p><*j>PiWElQdwycuKJqtF`LB z;)Y#Dq*faAtxzlaJDtr&3&Rtf^6q#Nc*1l^DaABmz^2d-a zCoD%03Yfr@&~wAi*@AB)t5&P!h+GhLRYA~l*g<1 zEpr&W#H#z{ivUo+v&pjcS}Lz(UK)8spjVb0Fw9WYv!2KEn-a{MMjLb>RK?KmHk4{@ zEUGpI6bcSiUC#Y{R!t3lM(0>rzgS0}K5JmvE8Y4YUgwcdwwx85WQBI^HL)lG~t2CwJj_VYI*#tvwzj2gAGSF0} z&=guw`s7rZI@4U!u9uRU30o-%3J^X}(mks$gb;G*0fuVJp{7`hN-6kqmlQGGRuf%0 ziGi9!^w%WKRxR+=G>uOsn~Iwys2s0XN@#trG}r^fr+^fl?O#0MVE));+y~>qf6=fBz;WD#(#B zkxoY@iD@^Q!3ap`F7aO?7oA^m^Z;( z4@!nq4XqOhL<1F#B*cx29z@uQi!h>786ty>)`GmUXM-@H2?0Swq@z297Bw938-#yw z^kfwFMzMU2dahGyEF)MT?diqoM3R{tKv7-)2Xquyv?qWM6ahf$3KAZcSfv|<7&W8{ zS@4t)i^*LBaQU5b02cwr1a-zU;|&He4MqyqTBbM4s6~wf zP~$=b?MDFLPzAY3xsccu(V?~&#GV-o;&>W~SyUxwt zPW6s`O=^+Rl8GHOutX>PFFnAPYk9JyITIw*sYwaR$6qZ{PGHhuhfS~WsekSdCuoox z?nFAEsp4mAoLgp>We;_)5{MdXCMcz0YW3@?H3|aadZBp#@>))GslnU(WGIXvud4Q_ z>cN|49Fr;d1YskUXcZR46o@LXQ3~s7OyKHWNoEOtZFpCTSPX)O8|a;x2rjnK@>Kgp zjM|vMUMI>(>N8YTY-^%QL^X-nvt3oB1*ECb&=bj?7BC#BvY;JRCd>{jrH8azA_q%s z<{`R)a*A;AZI9O;E;3t`1HtJiq@Z`|D``*0$0)hZwrB0~da4fylc|k$9H7jT&De z?IrYyqgbbvV#O(?ILbz0E&(|JqI5~1;1ppcdZEU6F?xX5NMbr>IzK3eFcqP;Mc)y~ z8oY^yAYqCc30uKysf1H>@pP91tz(ZDaoymQblT*dEZQHiD zZQH($Vw_OdLPK?Qp(2Rw(+JdiRjOrM>UZwF^`2**Yi(_5jhKUP8cUU?NvXQ@z?NNq zb`C~~@wDyvdBpkz9_mY_+jf1iF&U40^Z(nH*0$ED;86)l&*K6)&6si$ z>8H1}Jv6>Ho`{_DM{TWbZCj!o5v5X-(5onPT86fEJTksEk&K@HJKMKz-O`4t2oO(C zHKzMo+IBqHn5?UbPy0_hwry?M5@`t;n4)x&G=Qry1MF@|x3=wgcznF3CUN>#cWv8> zdMj)t9c6=N$Vy79r17_I-TCJ+bf|kRTt3mxy z)6%YTt=nGy!G)72oqpEGf3$rE2s33BlvUKoGSnT-(R2l^XiKQIORcuHZQuRMKmOr2 ze)n7d%-W!WjC7h=KT+v7P#jUT%($a1-Hd6+i?6=^V%yfOtfcKUZR#CIcWOPx8PRC# zmbM+cUw-AqZQ-p$ZCkgQs#iLlY0?QwotN3twtd%*UAuSg*s*DwN=rq(o-D)7o&ctb+B#6kH37+$F8~aPg7gafU;EdzOdCg(X_VP z&TQ27BsPTLD;k#U9-neWi{Wo0-+M`F*$4QhQ$u^Ac5nC7Mw#pGisVXNxhy&teQ!zA z$Coou$Yc$&U?JoqHkrN4y8WRdS2Y!6dowwili7#@>MQ^vO!l?ur zB2XI|7@-7t5;%5evO~|`_lZ02xa-M1{aroswa*C-%%Zd_g3U?UzM&WHz3cYd?tJXU z{_b9tKqJ+et)Z1Lvd<8E_CRLn`FroY?Y27}-9E^e8cdAZ$?04oQyR0~Le${qdvCw( z*4rQ0Hl&e&Noxa@5qZpj^++I}k>>mFxc#=!3a<6k~Um zj8H3PI5)KQo?C9c<+i5}4C<^1Xuc%0hY0I1BhbVQbmjW?ed+EyKk?vS)#OJkBjE+$)uN7wJ0UH>gbjB0W}5%z+u!>B z8+t_&S-q}Kyx>e{0x5t51rkmov|`7Pv)4jIu&2h{RxJuaKdia6?^{tHfdEv3L@ae~ zCl@Jz0XRfP%%?VSShVYlvsZ)B60rqo|4{0mf3ka&u;>Zd?%4JpFG=m0`Nks;-v9Jw zSWNlju!RbKnGC!cuysoy;4BRIxZ z1yDqWFpL@sbyCQBc-@scgz2$#zu?MDt{jaLr$Ip`11@4%b6a`yi%&fI=#yVL3=T!C zg=rTGCyJ~k3Di9lp`m@xJo3n6kAL+jIYFtYb*F*}3dT#_6vS%hz^^>`;KPr7BU=F& zMkbk?neIc1sT_fzFtT#Lw6FEY|CGuFBr45rtb53dB2QZ7 z#gPytkUIVApDd~0of=0PwF=o(#NQaY2x(QFk&z(?5=mpC=~*76SR{=J1Gh1YU0ZW9 zSq2#OmgNqel_*B`9;zpE7)*GOtLVw6k#X9r)lS$fHrU_^RoN_)UF0Jqhti!qnQ0Jv zyE8MRWSNNc%xQ0HWe@c2*SGBeW+PR8JtL3O$q}I@}vL`3vR=3 zYasJxc{-Q08DL0=V+x}r*Q#I#OJ-S=Hj|oJHUZ)61ir^$9ObN-Zf--_iIx;4E6j6* ztLZDjjeU~gFKeCh$SP__sB`SL3QKHYoV>XGph>CR0yP!tX#LB$qT0xfs;DJFpK^V^ z*+`5HO^_yXB>}HL%agb$_!o!**xjfEY(X{aK}Ag;F8!w(2MF!D8e%ArRIoqr9EgOZ z4MQNp_N4Kdx-KEP09&H#-igE{q;OD6LZbbVQ=N=J%UIh26T~2Q5NV~+1r(WVcTF_p z5FX`A9WIm4HNsV4vz!^G?!{j!OckJL=g@|dblj*_vVeESt@>zCfO}P&ep9PAmvignEI3JH$Uh*X4o#ZjD&nZyUaUbOqrW*Q$hKkBlG$MFL*T3R0 z+sD^f-5^n)Jw*o!^Q=hEYE6aggJrD*#wl(*`mm{CZI{OJ7I_@ctrTaoyouCvEvcP4 z!9)JPa^m{m?4hCdG5h5$lf@Mb4;IqAbaIKPC()Vu*Ai$J=2RX4d|NQIbICFyOPEgp z0&5KQ_)?|iOTfYO`snb)0od+Fe_fXB&ce{!bKP1&$Pf=(T2 z419%Lj-SGakuRD!QDxOJEV3dnIAXxg_oiUs8|FIB#twsfN}4$4TH~6ruBHZffvuEk4}gnQb882dQ*t*`=XEqGi_)#Vyw2M3l~~^*3(3}( z1|1=!s(CY}J3wFU}b|D6LgF8gf_wA?Du2!^xGX-?6w_f#1*K!Q1Qy5)sE zsF$_xJ1m9LL&WpKczScwabBJ<5QQlmNf%R_H>Eo8#uJcA3a2p)-PH7xZ5bM%vncr0 zJZXy>K~b~0sr6vbU>{cR!31iNvQ(Ojn_746-VG2eDM=)T#rMm87Ws-+R4iQ*7fpOM zGO($|Y*^T*I`xUt?lKkgSyO}$1bd^_Sv}9RD(L`EGNVv3V%tqx zqt2bgr1MTpp`J{sAfbSEcvY!tNQ^J7u_T!ssb@JIsa@km@jBu|K#t15GUg_8trx>( zut_T**p)k-Ujz4Q<1}rcyjwhK>vpz2E<0&xtPijvWx>g+Dl3)}w+Q}97lC&h<&9_T zbO6*yLTwY!-Pg||W=t|=1q{wZ%w~EB6r~rKO&cpz>{cULo#WdfV^b*ciqBGzfohK9 zB*(hpFI*Y~2l0n<=A+a#f`tcmpDG#7#j_kS&G8|&@3F8bh(My8GigUhj*xwNp)s0* zuZQI&D-cG1~eHI+zaBZR+ z3~7&N2J-n4LG6PE=Akp+(T?e**10A)pn-^u*kQU5Eh|lT+;k@9J;kEXf=Ftnv|#H3 zJ|2mIQjAY$El5BEY1K*MDS9Wz@*}nY2`q7~BkB5rGFo;VGioo7RBI~aq8Zvk6A350 zNcJV6m6b>r=uyK)kcdPC^;UU7Y_DRvt|T z#s%_M3Sk()Tj=;{RuQ`^gq(bWsvV056iKBMdn6hFZtkVpkeH&nS=DJ#RB1OFtkR|O z6KXIDRQ^$oN)}8?3fWzaHC0ENyQ6@~O0w9D8s*lN*IEP~!NjX= z&B_GEb%7a|ZKhi10?L_j@Rfmcjt4>v_COrMvH8I&iNh4!lTn_Kvr-ySz*?!Hx^P%1 zMS0VG7-$K4uy(`sxtNcWR#P65t&&J_cx4Qkz!i@**jX9tAB9){rYy;kKzm-<>L6cr6iU2oEhd72)HA(V)Cj^qF&UQxsz zggK=|P)Kn_IVwu$tI&~(n+#53EFHxnqb{xD5bIVpTY7~8Vg({Pbj0L{quP zKRZ29MlmSU&gXuT8OWSVj=b6?p&OGYb|ci;G-^=GoI+5cSPK`*mISIzUL-PB5oe;7 z&x9F}ECnJfy^yOsdf*4dxgcNhF~{*aWkcpU=G;7sTTxo7E@zkXBt}t+u{sjCz%9r@ z#<>fHo5h?!*aiO6Dh9b|{Lkc69lb(mNwy<09iJo0O~KblB<7fy7jZUn@Rs^5Wh{oq z9issLD8}1BV;V10L*)n~ipk&xiq1T;1*P2nV(>CBT@aRHg(7x5NUf;TR0t)Y$Ul`l zTfoSTN}53!uQbq{ZIH!XA4yV2p=5!DzKIHq1&;bc%@ZKtYz7hGH&?aeP=w+11=hc+ zBHc+F>v%3nM$}Rg{%bSHX-S{sI6dR9AhlB?TV8m66Ld3^Hq*K3$l)q#_?Cbxk{Zpt zmU@1Z+;XO-@{|)?FjkDVSM)XrYfhC$J9am1+RRj{XDW>u{N&Y2jKw@k=Hy(gQaEo6 z?oU0xIi1=(fqv4d3G#-wGe z%Z3sZ)1u;Rsb=0h4hVYfg-x4NC}DwtIZ1%NXfvOy%2@GeYSU)yrp7a2@By3xgAgmH zE*J`*+e)b;^#TP{c@jv{LKHLGj6k$9S~|FClj1+)$RvV(A_d~jJ=7Is<$>Ls0bK7u zeM)X=AV^+$nsBkqT2wSwF5orUvgw6zQ_)P?q$XvV$VF-#^BFj!H8;a*jdtv4+O#Qb z##uUECX#~H-2`?t5G0Ehmjr5YGTpXMW-I{xOa<|fSnUa?Z+#?4PwZ?FI* zV_R!WbE-v1m9JG;etqCB#!JxB3NH!&A>qL^dWn)Fv8EP|bM!+`ZnMQ|Zl0nj3ZO08 z%#t+(;#ml93s-3?!@c%05JTR`@ZfanL74fz$*YaZlW{YXH(G6an2vdmNu@tPm})4) z2~C1Yy|sF)kX4e;5F+|kfd~mG?v5Fb#kSWEdmsP^UK<*#paofikd0 z(*#q-K3RHEY}o;+mkP_12;rb8QBjc4pfbq`Nr@m!oD64=hFF|y)X-?$Hc&Yi z6sahMr?`x%xJu2Lr4hkcLtjpnsu`?-4MADUKS`ve(sVqTxMpJ_#7Jvq2dyE>adq}- z4*8~C&(Nxv)(V~;7 zpo|~&nqguo;Fw6~?WTU5Y#;ryS?I}sQbphcCE~X?P9lAkl)<5{YN-hGt6rsF*5p|S z6G5tG8izr(!CeG6j<;jqN8wH^PWA5ds%Zg6U27E1;H3&HjpL}0AUw$4LubFEVDE1=v4ja=wq8CM9IHHgrH`nGtr?&a8})!_J6VndaCqli4z4DHl7 zpee&(m6FU1A&KDlg|2oXIRYFu9P(rg=+pBM`zw4!&rxS(qVGU0_7%cBpt)u;+WGy; zz_9?8aa%G@8dXa>#!qX~VD1QqFnnC)Be#dkivW#3>unq2Fuw>CEq7uitq=H09!Al4rHP&vk-Rn3gyARE`6@_^|Sd1UJ@%O zb6&(YG$ENCw!e&^&K9PdDCdzyzWYAN)-$j+w%tPCEWNC*0b2u3*+yepkpQIETo^PH zQB92ecWsWf#Da2$PUixu#a8{v+E~L(jXq6k)wVSI&H%fcKjAS^-7|a2BU$H!#<_jnJ^>zUJd-Tu?g^tQIY=m=o_*ZM(-i&8Ebv za$gkW?!zSyJin?i)q7`#$eKlGl;TXo8|_n4l^dBov_N4(>1h%Wy2HHmF_y)RO}X0D zHl^WfjR3Gfa~q;rgxiXC-o+%d7{ggFgENs#J7q%p0e6dlr??XC7FN7?3BL~;-yMjR z5GfSr^20P1ju?5t3?61uLpHVNiD~DzLJdU_4j9W$wqKmAB*(F<2?>-MDcPWd$X!EJ zkjz59H#pQtLZRm2!KF+@L{U74)JDuDoGhlK9=TVDomzu+3d4{@U=k*+GN6^I2>rmN z!@QFxH!!s>Ionjq=w70(Gl9!l|LRHJIM}{QPJ;L%ED=Vjd@fMbpjwo%FvhheYYGGy z=h0fNS^fr|N7(BkS##)1kRhj`8EzE1oz1NcO_sj`LD&J^fFc>gncPVQE1x2y4)l$z z4atMbN+czlVj;*4Ne0C-UX~Y-JP_691^gtrkWv)PX%^+)#8pxXwWwCmxd@xZC-)bU&7lnEO=1>BxcVL~Cv!Na_lbV<|Y3;1Jr9pcerbS(Q-$pXA!CQx}P< zBOD%=G(Te528WM(pWv1C4*-x)7(}gY040I7Lv;zVgh-m^z***1^KU{viB&DqB>B?v zYfEDU<*_`o$ZDc$pvAA%LZK9TcN)QQ)F77$k!%BW8W3^FIjL6fk_iqqG{Z@p00s3M`DigD4N(Q;*x)=W-IBAuWj3Ng*?NjIt_D6C0g#3ehb;M3Y)t-| z7edBJ2#y&pUVF@>j~ANFmXk(0`z>Nq&sc?A@`(dfCf3@zaDO*BvsORqaAb`{8xhp57G(XC_(Ddb6#wMlKu zKg_&c^cwQ$JZ{Eeimk*$ULptzMG%|~m`K72VMq)koswkHLFU6Tadv<_Nj;w?ohvwtD--| zt2lojWA?+Mr8@_WEH*|4nnrxCh#06elL9Dq3kjkbl_eiOqXdn9<546YRFFu}KnG5_ zD)%Nj*cdYbBpwHXUks@tEgCd*2sh?frzFF$mO}73br7WrE+H0K(g&%hl|J6l%MyK1 zwhk`GxKSuDNA}mi+K?dv-&~|>X#*gMfRVIo16T1HBFZ4S#;LHL#2hP5heoIpB5dVF z#uY-JLeA@r0vI|=nvpcz!Xx;AJx*;U0Z+0VflO1BOg!6*pvJHL)jhNYs2(d3Z*t1z{crfas!-R+qvgCRc2< zffA#p!>*Uzz|MKPQCZX2$VDqdnc~fDq#2X}1cDMprV?pU^cpm%c68mI#_d`BHhN#< z?{X@soXqQVZEzmn?6T~x5W*q6w9M+*+`n+B6XjuqFL4mC?6vUHB1qJ%ptzN-=o)?^ zH>YZ+C>d=F`ON+*O`au*7P4(b#IfzBwwuXoU)zn*3#L94g<>QU$yB%4=GKDj70Hm& zPJVPrt`-&{YHDTMPj&XDBTW^Rz-`Iwi*7^H9;|&%Td7mYsS$TvCx{>|0^l)o_|q0E zeRw^u+ zL^87Y2ix0PV-%RkRz@#%=}y{c+xh5(cp@I1^WS#hUSytAlJZO805B4l*UB-hWy{tb zkB^H*BcXHua{HFHR$Q@cPm-*^fsk+Lme{S3Q5W$F`<2E>c;uXKS{uC37*6*#x3up1)AQ@1 zHFfJ=*nxi@o^D|_dFdmh+~a?#yJG1qJ7l_L>$dOz<`YkS?FVg)sTE%`%1RF@o2xL` zWXG49kXmfdE&b`%ZEdaFc5K_q1)WF~ia-*07YdLdh}!W?_ZUv2UE*I_4vDR;TibB) z!rf3bLktUV%L5inzolpiHTS1DK(w`mQv8qEpuD;8`xlu*4^l{}l(cG!9gR2PmbP%K zYyd&6e(D&?Lh4cO6vaU0DVvJ5f7$1*L#p;{-9qAE6zc0iD5RIOQrB6*l3G-6QJmzi9QfYk2EuGjl8908Iu{3acIj@ z>0?_IZty(Sg9vFs*NpL;O$?rO%~li=Xt~rnEm{?dMoEvSiKwA8=JC{vwkWpjX%vzo zQGp-Mvzn{;>$l9aHWTUDT*oP;X$6Y1RnS`QCsmmKzmSo#GFOQ*A|cG3DSy#St)!Y= zz=6uFpt6+lXlrHlx01)jJc`T`)e5@jTBkMw0qr-<1<~Z=aOf08XE1oeWH@gD5zVz) z$!JV%e9|*D%D~WJ7;t3AAHrQT22Kqu>BV9sC1jSWc@tiwfJ{J+ViiD&0%|x92O?hZ zEY%;c3LdRaeJ_MYQc%CjqGcNlT6lD)X8?dSWm?Zza56}A&ZJLQ!+ekwW0W2vy3s#{ zKz9M-r>BMliO6idh&7_FRfGZx=@DuYPkzT zlUb)Tuv7R1M{nW|navHQAGrPIn{N4i`BXYph{*({EYXd`d{AdYgD>27+f6s!@TKE~ zcElhOlRihRipq6jN)Z>L>kyk#_|}_myx|K+d%Jo>`H0>K=oynLijI(++R;ZiRd!{E zHh<=pn{K%A>9+>D@O!LktZJamM4y?6)d}9ax<;Gsx%sA>Zhrg#PJME7nesQ@_~?QDoP0s8g52=}B2AJ-0c6@GG(%LDd^W5zw4{^ZTK-h9i(jy?yNXkerMXwwK?M> zuDki}zvv4*Ges>sVXS%(p;yb$6+;0{O?IfOcYpK${Fm*=abWBg(H984PY`HMsV71d zFAk!Hguxw#kZUF_{~zP$<=bL#Zveq**L# z?!=?SAouA(qFy7OL593lq)!bS>s3!7sbw5p?k=M5)xdur3k!JRZenLXE@6_rkC!vxnFh2|Ge<&NO+2fl`%D$ zf;htNSf3MZNExD@_zQ--oV%!9B+5xs_b* z(^@(y9r|s^je}fc3(fjmz-m?)t+e$v&xRwEq^c#h(eb(}Kv>TzimbzWEnz0a;kVs!aiwE-3?tW8o}X}EsC*LR8$@Tvln3y4CS^`;}zbVfS$(gliH zm32zGTH^57_bn1s6@nZmulA+iRe%|gP@_l2RCQe&&v^A6woF1JNo+t=7Sik$lBe~_ zWgN;NW6?i4)=IVDwN3%8m1yj#FsmBsv)2k6!lT%l7t|);`#em?ypVHaAXlC@q@fg|*b2g#n*Ci68V9*mz7z!!$EWnQXWZv(Jao znOp?%SWv_>G?VsM98s6V$8i}%)BC+lpd&}W4>1*o&y(7S5uOTr;-Ej3Q`K))^^ zEjSRA8Vu1#PrM5;iUwLoS5u}9k~i59>CHI;(3@EL>Kh~}(nz0y6L^-vhHz(ynrbs+N=hm#W`L%aQHQcq5JjV8^81ec_UE5^{BzIy zxOH2kOU2Nsg;5R_d&~ZwFF*a*0}uX{?>oJhi*Dz{;|;LQz2(X)Uw-P52S59t^91LV zXg~sLohLC)%sVk>di~0)zy8D{4?XyM!^FRo8FD;0qe8L)2@Pa!Ea82u*oSezYa5?< z^r1(7XV5&HEu5fa=XIuOa8|yYTTprJna3Y}_|b0+NEHYpk2gC_HJ}GDCO%T^G9`q+ z_Y03d{LsT+?Ssu%h7+DQFmODfQ5yE3TJ!x^pMK=whaURIKt-pZxu}1VJIL5wHs6Tt zO}jZ<@?U%W;fEi3^bd;_7k$x5CjtSzT(ngX*Y}d&@x}Y@eeiStfKNJoYIO3UcB2hc zWeJK7R{Y%Vww?P2Ips@I4@oiNQo0E%{GX8AgK`q@6iP9L4<#KBf4Oj;)GFB6q|%Y% zRgxallm^3%F^*W(*OG=MLPBIinPKK4zzb8RMr~9yt%-AGR8CI&LbHnjDNA%sVhJgV zE2W`Hy+@KpYoQ>`@t#?seJ4+1AxJA^w&|3XHmgqUB613&j*4jdRodxEl02I5Xj+g{ zD+Qe9*amL?t9IH7YsYDc)PMv%LZ0Eyz)RB6Y``>kR$22qiITL$vg58Jdrmbwsqj$6 zGib4awV`aZbf|buOeEb4;wi9zj*Ve35Z8Z_(x%~--ff0ePTFb#93*b|Gtf&ts&JZ- za)z==(@3j>Ah1&->jqsWl0L;}lI$*u+)g^95a{6<*cFk=39igJr3TBF0(mCzE#_JBGgrT!VS~mpO*H_% zQ>m-^X{g*23Q^#&Ocp{%)wCIrDF8w_>kKhwj2YExJA=OMu_|zrf?nEh79FUvIF^jn zno!ns%Tl%kq*lqG8D|S%7Ary`N99VaC@>WjSE@6;609K>BjQv+X@DvmtgTI3V3M;2 zl0Nk*P3#E`VU4w>R;4MN$?6zq%6F|g+HIgAnf^ z{eo6+OqoxZVr}S<9(@wrZyZJjw8G*r7{~Eq2n9-V15)rRj1WdwG#tXCN<6`PwQGk0GkYBUZ4l`zjM+{q3XBbVmF-dWSBwR zh8I@`-U}NWHdr_T6C*UETSEYX^JH@n5JAkio%{knu4D_q;0^#8Fxh}JT1V)D?>IU< zl~*{2Kqh7p5X`(=@&+mSOvq%B5|Dt6zWEGICb%SgH)iC(%z(mK^Oxf#aE zChRg#WRe?j_Qjc=hNaSzU$lH^tLY`xSHv`Bn8pt@v>-{sO(DrOLS06Uh%wF&S=<)9 z@97YUTaqH`H_l@Mai#9<040tpktZ?|7CXL<8Zla;hPgx|Kx#cvFibspx{?y6jQnmT zz%zq%X)LL0K$%OfTqh*1K~zasswyuDX?4qpLvQ2?Un#VJt%+D5{ z1ZAqZW$V_RDma0*N-f*A@1__|AV6JgZr#2^kIho(HmA01+y3$_eAY`y?DwcKw8o~6 z)%igLC3|%iQ3T|CVMhHeZQFOeGRv#8LF)7xWWYOikuo_QYAtWyMd`+>6m`pXWytT| zNy#bPwoP3p&HG+Ou}~0G+d)6nL6tyCi~w{JRm*RE>kd|h zsnRvaT0dJXrQS)`fT;~c_{33hB1fvUf@csgP9-F!qsS~z+J27AK{5v(IE0C$5XTV- ze>k^mK?S5alq-}hyjaL0V>m|CI41yc0s{#`jKPA84iZIx!~7}steSFcx$OUpx%5eN znn^JdCV&!OtCH{x5-Ef-!$zaS`@w#xQR7zZ_&%fLDJ)*Y>H6T^R7ec3DR{L2(x*mt%>wvQUY}-afz9Uli>ooN}2)##-cTOiF$Wujz~m7=njD!QIBMZ zXF+(W6CYG6h9pB+(h|Ucy2JbqT&aWwyu-2@b7`9hbu4xW1a$fxS_ib}xF8d?no}`y zO-;GlgAJsv7EF$`5G<5Nl*b?%%raaFy9~+JEEz(UGD42S7MHC_COB9J<#OFrp>s`% zcr=A|#f_V}*Mvw~Ve3%ry?W@PxR`01d(4(?)o~tCt{39y(TiqCgxxFAmN0xJhjNwlFTvqhsaS`dQoDTJ{yi@ z7<5CfQ(HcOsR(GsMOzguIw$C1RxHG8#(GinRdaT%EHv-n2nX+OMkPKzuHd%9YIl#u z5G-B}0wJ1Qt{arNG+1KAwCm~yeGX{EbIDFI?g(4?wCIf`DPk@S$c6x-q6yGg;A0hR zP6KtT7+JCftYdLt)30%}f>hAt!?dLtQurR^Bnr{2HQ{Dbi9(J9I>6Cc!?O#CrBG}E zO-VfnCKppoG^Tr2Jh1A$GcSYSGvb;dIeM(dxDCc!B@h)G47!UJFaBMC;3QidpGDqT$$k7>Ms2wAE5DJtSuRIRa!nh`alCWGS$6e*~h zB*R(=ei)9Rs@NsTI9vhsHBpRRiFTdEfJ_oKC*x&sp_4;Eq>Ld%D^uC{6TakzQJEAl zLE;E(B7gu{0RGUfigH5*ct2M}Mk(~F>X zWlSv=tzsz#DabMufe%YeN+6i~7N^Ij$C<`B^!kF}v3yK!W|9OO~`d58KM!nEWA|oh6^04Hd?PYiO968#)|K;z0 z?YDk(WHdj@|05V!&+)pt4jehW?VUdq04deWLW_;`?y+ZZj<8Ng+ zK)3zy;e%Vg^~`5~@1?HcVUl-e_PyQS)q?^PGVA!h;{$`k!%WwnC6-Bf}h-!(oZT3%uUFhhBd>*T>}J9Dt`-X_y7H=g`3;9o@rY zd0Y$1W4*@~dHpXRKfZ6@k&fQJf&Q-cqn(SrfmaUfXAJ_=@#C5HgG*Usd-feZ-hTYp zf!B9m=!IYQcW;bFyp1f|Vz%4!x>>fzj=Z*g%eK8oyK*esT>HyE{DWV;>-t+ix$%d4 zvh>=MJ@mteuDxj0(&ej`EWiAY?*egGcX#^nD_4@Va^;F;D_1O7Io~VvbpGQ_3zvph zMwa`_!Ylp7^St4nuJ5gxzj(>=rAwBEmxPy9mM;MbU4OrN{_9Pf+EDSFxE?&5B z(ZcYe5XJjD{?nX!^JXttuyFC>g$ough%BlsT{7G2?SA7^bLY;RJ9Fac7c5*zON+yc zDoYlz@^{_1aN&aUB4Ka%^yQ0|FIg~u!Ggt0XM1DascV)jTyR#DjL_N3E?mA~-lC-| zSCY~7k5?^SH2<8Mh&K{jxNO<-MW;o*I;B7N;U!BJT`)1~6(^s4=4tWy-e}iz7tz(c zv!W}!(ayiWX#SGL3+J4+(i`1;)$BzJ<}H{vWd-l!UGo5Q!R%R$HJ*R&9B=sTXBW)} z^beeKW^KZ&%vcPJ$6wemd-nXfky(|~qfxJX)}lqMuA^U?JA1+0x%21EnR~(X3H6iC zoomV6t-my9?z|;nb;0~Ob7s$-eZhi-;5+->OJ~iQzi8RAg$w4*o=y6~1x(@LKe>F) zoOz2EECif6^XAWAG;e`7aQrXV&Zez}it$je*0hFuxvhXE?K%vxc(4pF8jil zZnSu2J*iH98``q3x)?8Qi@Jp#psh#_ek zz52E%e+0ySVQ|maZ@c!|Yp%X#!-lIrcHR14A~E0J{P4P~uO(%@{#|?R+Ie1oe&ENS zSabD;Yp=QH+N((oulHB87>8cCZT0#MS6@T@@P^9zHQ{xja^&TESFc%rHEGvez2WK& z>(*~ryOyO?==sX!YgCrrXd<#Mv|g!uZoG8$>UGy#vwq#Wwd>Y}*Ou3I<&Dyo=*Yj1%cYX1)l^?oz{u$>iUU&7{)gN8Ab`2TK>f4W8vGS4y zF&5al*Id1h3Tv*u`eQ7l((9kPY}F+fgjrwmtB0> z<>#{a-uTp|S6q7WRac%_>-po^5HinPe#MoSUUuchrzO2g@A&YL;) ztV`CcTMs@9`<_^P#bqB|efbq1x%9&qt-9pOD_5^$4d#Dx7hPSo`lFX!dfA6BzUb1c z)~sdn`k%Y=Dw0=UdDRtHUUAi$HEUNd@QMS^-EsNl;j2m@a&>rZWz9zydWF7!dhBCs zR!2WtTnl!uX9@Pd^yiP?xSpC~B$jC;PK`o?N{v>UoONzGFG=?;4k{($$|@noG@zYW>9t){hQ~qVpGZgp~h8 z0|!L;->LVP0?3O%H-j(s6aEZ?JaoYGU!Crivj<-~%_|+w9e-sSpYWqyU3;f`g`w=* z$Bw-|#mkQk=HBec?wQP8ak%qP?!aVkY_wP$II=JE@+2?B22<#Jt^Lp>RtCiG*s(XW zFHQ7N^b`vDfxVq?PV|Ue#KC~WuOB=_ddVLf%a6Xj@90FYa=;JgOCv}3x0C+2etC3s z=;;3A+&@{~f7v~0lzEC0AXH`xmrE_qyopE7sh ze7=zPALf4Q?Ai0!l^z3$qvy_neeasR1wB~tSU^M%GP7qUJ(=`SLMJf2Pp0je+3)9j-)ln7d9UB~`{TXd zBs;4;<$lUq&-b}2<@cR)_LQj?tbMJS4w}lRc*dqCI*0_7aA2 z{OLQ5bkNK{9-{rjdz$H>w&o)p)I$dy>guI~?)qnQ4;^&rwU5>J(m|JB{OO;((?the z`SFi@>US-@bkLRgOE12$ri%`mcJ-B)T(as=@0dv6r>?&8@=LDx2dB}iqto(Nd~9{& zVJN-&$}6W`e(ANldvyNEX`j5}vMZm^`KPbE{PHWOUHY)nTynL}FTbyy^D{p)?b0i+ z_{3VZ_^eM|{)uUqU-mWK|LCVK|KzmGul#o_bK2#fymH!gf9d1?r>^|u)mLA&a91zq zd||J;=5t?b)cvbJ{pqVdJ*TRd^S-OEx#rWK|9*QvJ@lz7ulmf|7y9U-E3f+0S9kO> zg|576{&R=>=%G)|`&$Ps9$Zz?)<+M$)sOdoPDr@_`;V0Q@-V$}svMPyo9`v#B6tRyG+y=99z)%bQ#(!M z$TCcvU)L`eCs<+}*GpBz73pj0xvQ6o_a5M)1*O+26kBz$6y{S!THPhcapZhTh2Y!; zF+&v&X^crf!OB5vHHS%AK&qG(W-g~FD+&vmbSd$+jW_Lj%kuRty<1VFc?>e`U zx2OcABR3&KjPnB8(__um4DFEINtf7l(M3{MF2Jyt25z}|03yjGn&}#~RXDhjd76X( zq0+FLq*H_M#9%aHiS0_hf zT&me4BS4GPni!HS#?Zt$$Y@;uK28noDjuneG^+Ve!W85~kQJj!X_Lpz!j6afCrXN{ z86J{a&*3*$*-gNvnF4_+Np-j<5e3v)*TqeGgdjypB?&^s+SIraUP=9$#N4F)c$Xy$ z=6FmT$-*T1L6;kkvgqu)&sNduwI zj0G7d0wy&Oq-NXJZQHlk?%1K^7&%~tV8TU+6YbEaY;R#FL7bUw+iG|2-n)Cp4*kEg zcH55aTQ`$jzM>d(8eWC9VGYAY;alETfSc{l{9yImFVDE;zQ;Elcz%zn!GxrSK2w|Y zPc1L1-bY(%5K?X3v3GyfzfV8AED;2;M9FcN+*9%V^Luu0Cs&Q6pc*LNFgd`EA~HO< zaqG6)y_>&%>G)JUT~u6@F2WL|=wmaapRV4yAC`ze|$1i zTwIjRX0pXaC2X!wzH`G%2X<}Sz6n{ReM*qY(W4o~gi@TH-TVLX#nIW)l9HmLOgbAB zbrctsl@^Wt{2%x4t=&eDAGs1!hJ@M7P*2Uqt-B69^O>?#QE8?qmKn}wVnxy7Xu2o+ zk>BjyRl98iPR8`&n{vK2r)5L+_PtMkZd7quaZx6N;Z7!<39`|m4v0*~FZ>n3g6N|v z=(CTN1hKJdq7zkb-udj8%d(}VMOiYX(&=O(NVcVEST-Gtee&7bZOi~V+Pq2Ihl%%I zh6{{RZ|%0_eCV;`wCV<0{g_H}01pzy$^otv&smSmGj z+I7X>4(!{zch8=kd-gta71gCvsbu|o z^PQdBiLj+lfxa`MS1!mK8O^ObcF*VaNv6}W_mFuX)CHT~*}S!O-_AL7R4frK|5oj` z&70L)eM8-kHX{22TWj~;PD80TcI=;DqN8^31=);HdT;I%iBvL?3?@J^!MaqJSqIgt zkZrr4f3PUVOyym@_rMGL_wC%VBeuPH*WOEHiDkGOi(OMuyKU3vjT?$(cURrEW!s+p3!p2Rh%-Mv z@z|c=#fBI5?|F9Nm}DBlQt{$d+xX&b*;u2+5sive&07Rt+xyBdCdOm&c#JWRpK#l6 zE4I}9^_w3_#)?F5BJ$oRcIq=+Mh?^yV%2YM+Fbkm&g)}AG>+LCuXfRK7hLjzlhct{ zRZa;9~fzi=KOysB1eCYV3Wcg)CUVhJ3M%8+`3f+^aO~UA=gIjmMuzztf zP?-rnCw%YtlB6??W};|rZuj;roA{iJtL~tOk-cx*`O@a;X?iP&59s5QO2slw>1<-u z-2dLWQ}Ndr3BKBV=)H?^swJ8Q91B!gDc7>k08 zwpdwf`Zm|r9@z1~*=leiny%+{&hmmCzjW)K-MhDM<~3xd@DCrHKCSueyo%n$)}7Dq zdFq}ooOfa(rsijg#=n2=V>|cO?w}1;jU4J>ZU$+4^t# z{NTAg2lmv~Zr_T1o=qy{kjp}SFovsYf(?f@vwZG({=m&JNK?s=SMpukQ@f2>PuEtN zvw2XYr+)=1t8(Z{Y~8l2b}s1?$?JFT<8!uSE5p5s#Z3WTggSvotk-(c5g&#Uc{g&A zL{WOh2p|!j%4p_@m@%}U2@RSZ74oLv4giu!+K6Wz(Q96d^OQk}+VzEBS!e6e&bC>wI5;l9-uqfK_g~l_GZL3vs zFg7l1ha2>`FkJ$C)do2YjT1R7=O<-`(@8AlW$zMu?CSm!ElbEdiJwT3(S$SvB!xc3 zp2={)sG?jIGNPfbfHvL*BPKKo8yrz!le}ynsVTs5j#fl9_4*7Gp@f{RxI}8U|d(=UZ@UkHL`z%xlJ=1i`qb zm~5R|T4K$^P5d{A-*(a#Xo3_cq_r~KEOW1xf!3BbWCKA4Y(4?q0aN2|4qArW zI%C~^hr2t8_}0=E!}oomVZ04beN%I5TYGnB-R^(<_UFI;YwlpPg@tQtk?zYeBnukf zgf8r<+Pj)|{Brf|>puVaFWxZgwr^F`QCd6k<4$UPjm9*$62NWicW=E3E3_|OPt3vT zGZueyJN%ipHnK~#Vq7EA3}V7{HvMVYg4qNDyzzz`rr$JuRxrEyu0J<*Bh+ZcK5k@s zG>mOLte|jj|9Z*d1@qk{Dt3osjID-qC@*PjT1&&%{?vc@BH$Pg$ougTo9jM zKX2~bdGqGZnmK3w{5fBLvAYG47D@{;d%}@Gb6;D_AMRSbXyKyR!dD??*38-S<|_59 zxwGf~M+2c1A>76q`lZ>BX?zKlk=D+Qs~0U=yoh{@7u>e)yN`VDo||XRn?HBP%(-*s z+*;L+d`J2n8gWfJJ}u2JH@3g?{ach}@uJ1Id~4&|tz8{;H4n|6GjHzfS+i!(dZe+n zm2d#)TF6dCpC3Z%F+V!DESV2+Z!Ny{=XHI^^E$eF>i=W*ocZ%+PoFt`^?`QU-^38e zSDU6J6S2QR_a473wyjxGj91uJF)gc{}O2KG`F^g#bN0*|Z<_lv0$4K8W?G^diWXQ?Tifncv}M79 z`E!5Y-Kp6ZG`F?3xA#>nm@#YC^qXdU^PSEXq7u0MM9O>tHaB-x+`cea@W#SR`sAeuLEO@Y@f}n901EzUmbXkolAJuL$46R3niCJN|y_g82&;ES$UiZTN_7ye|!8 z?CAW}teG=rPQT&K{f8BkP;<K`f)t2VYzu!7%&fEoy=dNq)?CNN533$`mT06R*o;!Qa z%o#U+g`6!-jIk|4CCvTiu7BM=fBxM03+69>U3|>8fOv;3t?gZ1kItUMw3>d$p6*tP zk(m>7wB^N~9ZToUnY(cD{6)FL9qrHt{jF^s-7l<|%_N_7)0$Vh6v1(PV|z<$*K6yU zjLx*}hgO1+zHi>XselagLw{Om@Z#K|r&A4T3jdr~Foq4lo&s(@?;ryT0^&IY^ z)d+>#{&vR#y*hIj{Hn8)q`cE(5VE$mwe>x{Xcn*4yoC!F{rgKjz1>~iJw45Txnmx$ z!rZxYZrjk)uGCHAV8ynz_q?=n9*O7h<}FzH+6Em>}Ud4@R4tBYH#a(YyFJb zb7m7nbk3aFB$_dMb}*-N=4{4y#@Fh)`6e_sO=x_vxxKZccjK*mWM7H(7ThTQt{<~9>JwR_t=vw|<>Z@dW_f?0=&ZTi*!=Cestm`)@sH_X7Y+x%Kb zYg~ok_xqQ6JNWEl>q>Z6J|biJ1!%NsnjG%yZg}~7d}OEJc=Kbs zn|cnn$65&*($uWA;}Bl~jBF)JZtoiY3-L&AxZztZeTVe|P;(C-75^AFj2_W?e2dmm z4b`;`{CVb=Z@6K`FAsNhcXU|e=_gS;zEL_U=y=#cu0l+ID%2i98w*v9I9e!D-LWL{ z10t;zDVUhb3=aYn>P^2$TK=eT9C3ITTB69zqyz;jY3k@)IaKtB=8E~Hlcy638PP|g z0<$^5WJ9JOdZ5yj)vG0-w(3f_n>wsVu-uWNi6wN;C*>s3Ez>R`qigfTJ&wYN(GX5% zq~gNEaU?8YBO?7T>0o*EH0qG8hRg+GgOjWbZXGjts&#{GAc)!_?HxP{o-B$~h<;-R zk0*74WYTewj*=)iHY9)2;Am2*THTd*GV5O5Qsz?AKpRVyX_TnSEt!J8@sGczqa`~a zX>h5GQI<(&4YDy(0hXkg)0im+6;mGlMtB`FV=6<`?L(*GqIGmY0Z)*adr4=CMz}?o zdQJXy+}EAT2?~dYyI!vO+aI6&@7lKqa7`$UEQRkg({Pcy>i9!rOTEtTdx0?E`PicSp-vpoc2cfpqd-V!mC4t z&c8jle(l;d{9Cnp)ryt;UA|)Z@?}4Mr!Yh(=4nx=F_s*{OEJcFh5o0%cF+3N!P;P5 z``XoHTe)J{(&Z~wE&V|qvP3Cs#l0eV|HDL*fyjMx-QDZf-o0+!J?qx24pz3TS-q0> ztysBy*{^YcC=EQ<0Haw^kK(EhN({X;Sa|8X_pV!W_u6&$-Fx@F|Ng7r|Mmy#SFBo2 zMw+;K&#=P%=CPKN?VrC#4a}1M-`{)p-D}s}z5d?&f4RSt`VT+J?;K@;fvO znXRVir#hmA&Y{9<--5a|YuBy6=gID5q2=%st5>aAvuf$mJHK1cR8k%OO_L%Zqs1&K zbUl0DI#qJ_x+l=sNusp#yI^(q%4JKI-M2#lZ1fgrc&N+Y@>aU8_h+lu(r0T|f3H<4 zeaS+5gTbR`(li`-uj4~qyf}xxy?V{vYu4VqrXpErRFQ?@z3W%5Sg~~3 z%3t&-m&cjq+jGPfbT^=rR&2$>T_(#k^5qstlIWh)+T zTkl!DX6>4FYrofRE=7aEc713Ig@3MOQY>HbZ;UQIp_kW<*r-C&lh2h=z2dnc8&3C%hj$p90fQD4z&uhrAdey(xGu(Vv{DZ^iuF(1VH+TaWm3v=M z4+jM1LASHe^qsZqV`~Q<>EIg!Nrk~Nr0r_`;i^^i>-x1nKU^42@xl&0wT2#G=KN+L zC`{lTZvE}us~N9#>(>6Y&t5V48132mAh*bO|3Bq$ly`TWUiTeqSKPgZky>}p9~xtY zCf>(ndCxoXvlrT72%mp}i`>bq8~3fAPA7V9?!I8L=brd83x0Wx?0 zfa$w(IdA2PWp~~A)jOB2SV?a|+?v%t>7*TepBPE&gf~fk@Sau6m+6bKY&nCyd<8>9 zJ65k+`OQ}lQVwgu7(YZXHub=>jBBv0VaYPR^dw}Gty;5c`MOQkJz6_)GO9@#E4(rM zua!%d+_`k=lBM>ApmyH;B`f}$Z>_%JnuDVm4_P3b=q|f!{gbaAj;m+wp)X@) z^l$iX5(c{y+UbC}mT^ zy3}V86<-i3Mk!W)UkzABgYj^CPkq(Kyjp~FdUh5Vx*{$ zM97`{9X9T2{^uki(JhmD%#v0XZK=Q=rI&rOTIap^RdR7K0Pv#bA_Ij?WHP= z!*?eozEaH)GEKiKLMEM``f!;z}o|3p5!-my)Yv zvB6U#W0tJIEvZgG2_b2adW&jCg@Hw9frQ>(gQSOLy!?w4i+Id%~6<#M}1Z zKoZXfjhk~w1Wu1AXfLv+RxH&Ahq`v>oPr+8+uMuHg3Ka%fI>rq2bGQq14k1>!VIh< zT@1=-OWs(tS2n9e&c!Pe4_ZuqB@@HnondKTtuX1%Ket4l(JaB3+2oKLoNSoOqu#K| zmEj*8B>Cr;4VgbTM<^6xMub+by9XJul~UbekGnP12yYqdwGon(P^7DL3tD2_Bg&73 z4`ha?63UGG2LbOEIEr)U%*!2=&c*JN+#$=A`0^&uke@CiU5r3?v!omD$Tp#T+?O;% z+;~doY7|Y9O`ypTloUp^Y}9xKAj_=^#f&^E%~MCT(v z_sJr2zjyEHnYhlQ!+RoT9Ooi&ydBN0E5k90D;EpI>^zh&=(c+ff@1kIwn+lfdZ2M| zu}mpf>S2wf*zKZM(htd0IH+wp<$eK+G?%x~_htnv)~IHYhD^hEluslc*)tg}(xFFO z7$L!tGbh!ld_<(>FaI#XGq=iK2Twfet(onK5*xNau4XW#!=AE9O_G@-W6?tPruM_= zoOa;mPQ^9z1XiW7m>Zh975xQta+ug9ya%$)OElmxua7{M2EzsiI>o$^t*c&^{wAJ; zKs(<_jk3j4pA6M?fOVZg6B`=nhsmitW@_0;U|VfMwY#IPR&|}XeW<<}1gAYxbU5FM zZnmm{%^}0Paoiow6A)fZ3OR_iEemLxXW^zlW{f*T(0K+-FM}#R3Back z&Wi!^Q$IDWVZ1G~8 z$xILzE^rof-*d8w&_)7YMWLWJEAIr$11svt9o-$NOXp)rA@e_->!+#}MfrPJ<8BV*2!#T*IpDw6LR+f0#; z9`fOy-rl}`Yy*wLX5FRWe1A_L%mB`KB&e^!4=}NV7175)2tW5>Q7DEB&xn;uN+P%d z!+Fv_pc?gn7O{O3I1ktYkeArde1?aJrAirW^eoJU?y-}Fq`slyVmvVQTesUS8R6K@ z$Li$G67LO*v(l^4;w((M5CD4t`1d?e@6?ENxk~}o=b&O<2Gsq3*^G^f{C~TbS{ljb zF8Ck6RBq^jFMi>INFtYi=892?sGZ%EDK5!g5Q*mo9zQu&T%5Xq;O_lZznYNB78Uz> z?tQ7EY>6elwJclASu!_x%Za6ur!wKk)j!w|?bjZp!@lmDRU?<+fY>y#B$PM-u=2c0?|8MDs`2WfY{>qO+?|vlpSqtI)F};b(QN`yb)?x`evx68aNIFh~7{SN$=;~kqU`H-k|`R!N+;3c;Yt5ycZ!NX^Ndc0j{V~Am8tMplK+n`HI-Wz z{X-?q{=Jb%dL_rnK|1zTj_05ZwUpxp@nm8-$Meu3TCZa)k^aU-k^XaI ziPX0vyFM7nzb_FFzRi=fVu{$-rbZfn_LW=a%$q%b;k?h6qjB?z`|rIE_RvG`jWk@A zEGj~wE*goW;g!i2WlFM%?3l%8M%pgUl$K@Eu}CzEHd`i}N(V(l<(aFjGwLDxsNe9j zuO+w~y6xLL;~WQX{mOS-@6Y_of4oXlK6mPA7yO3fb*H}fJwM@i{i$cX_h%euoPOGSe$Mfx)6O{S zcO0jmamLwyp)+nc!{pU~rzVxckeEzeaz3M^hi~-0#>NmWrE5YT^y}x=p&M|ub@Z;SvP6qFL;KA4I;u- z-2c*X%GCGk`K{+p{oudojK$|q{Xk`8h|ZXM!TIMu%ag_Lzu^7P zOpOe__~$2n7yQ2Czn=KKsOp)Cb%O+RuINv)5cb?TSx);_B8n%cjJufzxbsuUHjQa&xMi02M@iC8E0MHTQBcBKhk{=0bFM{lG5gPUYiiHT#a}NZfImQFzb4o#0|~l zYJLd?RCEGgtgjn`6mrDs%JBooJ11 z+q@AaFsXr|Rm_G~n_6)aToboIPO~$p?ylLmW5?}@Y;mUi8+(HtZRmn+gaps1tVx(8 zBxjpCNMK+%9?|LscCwpmAD&n`Ds|?cccY9gRctbeQ6P&3*dw7?Uj2ir9kgZ37Bt#WO=aiq z%JkxVC`|1;#$vJmAeG%OYS~-1)ov$GusOOh*r0u|Occbbk6*wY2sBZO)g!eB-P?N|glFsFvn9l6pzWwP8cCsin2QV(tw$PG9gO z!f$C1G$YHl;Ju_V&!|m7b65X{#W#NGrbRW~l+ltvEyf+1vY$PoRi-N2o4OA!`O+6} zSpH@w$}!XyYZmW9yIk#>b*_qoMs{c|?Z2M)rFl=$yf5R-|mS}S-^3XFt&8;!s6s1$-%Uo&Y z!O3>DDckDD8oEa6v-|2+JWI=SxYcDUdQ_8<;-gY{@W-)@s6fcMxV$YZ9?vK=ZH6Gw z)O4h@=s|kq`p3Pzj%5pNx<;;~sVKUNGU~M8z^KqHHOeqbPw@zAKui_w`X?IgXaE&c zoGA&aGo7n6*5(ccxoRUWoCe>rEeD$e_CbZh=H++XdDrrsc2U}}v4bffjL@cp4Y0P0 z+V9HeO0>|sYsDRREnU6AHjr#u!{ltA4{DcX`x51217$*j19#tk`(3N{t7sld%q>AP zyWi16eIu!ZL6Z(5Q)mW!-~RPBlCtxXuscDuB-Wl#rxIdHEKl^mLgA^Uw=Agf*0ykh;e ze^mG8rVZ7|0$2{KdTL%DmVX)^OPG)A*f%%8oIX9$Tf?Wi<_)wLGK2lYLoaJFfZtMc zxVob1Wo@1*C&826-CEJ~q_3)?VrM7(Vo@CDQO8!6ILp*kRry@?AxKtR>68BaThbZV zGaOImauu~59{8}oeGh0uH63Pstg3$QxxF3of+QV~eCLZ>2p}U)vUS6L_nji%8k2UZ|dspX?h)-lGp}`l!QKFxz37>7*g%qfhIkGgJqKP zi1dM#Wo1>ahUK-dMx6#A&?6JXXklehb~%8g7%Hn;PxjoyaL5#fdqLpM?(IDRr)1=z-x* zd3mD;`GV!&LC_ucI|BH_3UTdEhTahmk-1`1dbrRjmv*N|>sthZupeWtfI>f!A1%m%w-UA01kTK^hnuMzVGq!&8|Q9;BghU^rCh;c*{ppnD3l zKxXxA1I*~*zWz2>TZ88g7nKE~?wuCcIKdF#jh<$da$%WLpt;wptE;bX>gYwusILRw zDoYNv=%K=Z)G5|C=%BStb)&IO7oqkoYRw(HE$dn%l>uF0^X*0xq=pC27IMWEmOnHc z%GtFRs0{Z)Pk-W0v*aob4(7D5x#a+B1aFQl39de`Jg#qU&cemu#v3?lF({(gU;cv& zh2}sXZ{X>XPP(u#(C>G}c8U(`LP21av!9%Kt~0~1;7q)t4UJwBa*8=t@e*hafI#i$Kby*=iuQM!Z~_{NfNf>pCMm_e}=3C){kKcKJ7!1 zp(Sieqa6|B35hxO|I_cx$l+NfSq!ma(IAz=0IQ_9cyw{Hc+5>~ssDV}7p7f#&9yho zx^6s%d>1ai`)l_uz4L+Jo)^ha#jI)tN&-7CjA+js+{fPi3PP0K&++P5DseZ*&tcXl zzRf8@iFp`ZWTPu4{ricsIruea>~+_D?(<)KlqawK>5+$j_@hUE{c^*}v!b;N-L3_ZY`-O__YQm^0ryck+95{K4e2 z&-xX|CoVnjqm@vy?WvlOk|$90y>ZsuIn!_W^yQaccFpuza~Iw;YtetvTP@H2@~6M} z%^&~t#II%qAMd^MpEX-IRaEY3g_1QFU;NQOK}i8hzJAHY7mJ_q@TDKU7*0q2N0)u< zBhPSr^y44?kSKfXV;{co4;+8}@ry1Hhve~(T=aoIbA0-m4_~z#N)B$==ae{);XGDY zN`@!=e`ZfOe-PdveK|4G|2*!#4)@`#Zm_?pZr{{Me&<`wUA+PCF_W{a<+Z7i_7|J* z!v&8VUt9V9_J)1<$T`&Bc^JP^`22!z-re*Px87{;;0FJC`DS)B9K?6Z%gx;C3won+ zyw~2ut@an1JA3-9tbu%gYs2&0+S%CE-QVAb7m&XGuEsa_OpSCN=xF8Bid(MU_Qpf| z&Wm)v(t=gO;f~h&x8FQ)L8RyTCVWoSA9~{;?34bzue|y8Yp?8I7k!lWP{}c`81ZUfR8D$FALbg1yl_L%R+&Ktj{L-PpYC z*>?aVvpqXsZQ@qji@Qj(cR#nVD}Gt2T3^{&yJzn{3~cx9*wh z{(-%FcJF&jw;JDh`GsA3_Xp1p?BBN!X3kXHro8o1a3K2pz=8b-o-4{U=&c5fcDy-5Z_g`BMDjs=@-Mm>o53efOGe|7XnbhY zjR#?W)h$TJ6On;vBsKZhch@`%!+G@SKAcJyOnbN8QgJb$-%O z=S4@I7aw(Aa@2Vl=d`!b&hKT;;j3BQD*yEGoI~U^os&kio_f^zSe^3=_`UlldhZ|K zz0hMLJ7)Ky_cquud**k-<4?k)x-t^Up82F5?Y|>=>5Xsn+pXxMd;Iu#pCA9~bw{5& z*RMB!-H*GM`tjh?emoQ&n}6lkJwNhep~8+q>d$^0b-y1cbo%ks@A~lr7y0p$ABV?Z zhsVE$$LGT1*6?^BJiZwoTf^gkA3v_~r{_Li9v)8!k7tF)3&Z0l{P_8huIbnL_4L`{ z@wV`|GCV#I9={hJf9l6uSNrj<{|t{|d+&NSyxtrh_l3vT!(+1_zwZ4Ue7DZ8zuOfa zH797t_cY&hJjRa?hsU3U_y3yn`_*B4w`zWoeyfjLu=S(i^_AfRr(BBtOn*^WzFczi89HigGtKQ8R@46 zfBO7PyzJkpMBdwx%=mkm%=mkm%=mkm%=mkmoaEny7_#r=D zm-XXP|NbQZ%_m0k34hO$+a~+-cP9F=&*x>b&-*3W_ucURqjpTCeVkL}JN>%+V0iTJ zL8{!_ohmQ*{qVg?eR#cJ-<0&@JzM?wE1%b?Uq9p5zpe?7KEG4H_W7Oqwa@R=Gd`}! z;yvAlC4SsJ&yR0C=*LcPC;n3HI(?S6EBz_|PNZ-5a?;p=QxpV#Tl{=H4_ zd)1#m@AEZXzs;{Zy?@f3-aqNiM!!FJnjJH#gda!y_-Bsu_b7A5*?#}r@cJWb{rZzv z`0?}p9m?F`?{VfvpRbu4{ri}?)$7kJ^Kr;5^Y<;Y%-^@nG9Q=BG9Q=BG9Q=BG9Q=B zG9Q=B@*=Nq`7z<~)bKbZJbpMlhV(4|f?q%6>sjVUJ|8l_Z1($q2(nGPj<{LcI3bQ9h>24Z9u|OR3nvD z{2akAlHzI{CRV4s8o`N@6o&tkBuS&iYH}=;VNKPQbh#l?i9KbCxG4%tSA{W1q)Sae z;HoH5mCH=XW1d&WQG9QeTqaR4Dz+%Sx`M1n*>Gu(sZdLoH(Nd6NwW};MS3V9U`qPf zCLO|IO>S6`okzq(DM*(JG{P#W0H=9AC_PpAZ6WTmj^^Y_GAXoE%>h-JBu`d`9Gb{m zmAH6)Vx#Gw!mH#a5)}lB6QP2z>Qm%vG2C227Kf204O-lRQ6~~nDx+xxhmm|PUeygx zu1Z`vN#F=6!vAQ-B3(srlH5v7BPf#mEu_@ z>2SFaL+r*8Lev(;@lok`L4!}|^%T+OlxT2AOQpFoYhx0sDLh$)TQKs*(7!JuO;Y2w zp*lmI3H+x?B063}1#{SR*yE-hpUE9#H*2bLB~@}thcdRZm72bJsXBHX4ah53uGnt6 zFtWV53+AQxn>l-yRw&|dv?Q`bYF$oqV54$ZZQ_ukHB$Q@CA!r+^r>n{Q?rFK*7#AT zHPL2{wCCv~(IoM-hG!HlR7;gi5^8m!WT*H@tAWxKPVGo*5^x*Nq&YQ{G+UvaR8UO-x6NFkGuXtWmmCx1Cz^p7B zDzl8A4Sg|%!fw|5l^`EmhRR$(WNVW%qXBQ@pvlmu4pJ&JLO^m`$;7KnQg4z@r*7+F zdrse0Qh#M4j0#Wx#u&Ohqo6vlI>=R>=cAmUWO=HY$|Y39NknP_baRQTC1xw%11>So zNb*HFFW1L?UJtrluH)>1qW&-cbP*6U(P}^5|uxg5*OEJsZMznZUl~aNn;U&)^iJjEt@JL z(ls*IR2UwF=pW*$6TyXC2nTe*L-D#PPC-PVo*yDs`N65D^yEk|73>2P586_q5U#ou z>%{zA7)u_WJE;}^#S2ErTwg4XJb%>}hdFWA9cmLH#yy?%w_)1Tau?J}G7ja`V1Zsm zBmWQ}#}zXt)E%#PcRuc#CaYfa_%5m<6amPi3!Hr)8buC@D)dQ%MAHzIFi$(sYtm#W zpi@kAuUa5aLU6*tAhSji4K?pdp-s4qeB8qFKr=D~Y$701?r4-jwhp5t#y5{Lit?;D zF>0m$gCteT93i;sfveT@GZi@?K0Lkt@Gs6kUzGneAsgM$T9RwocoNpGoQ z6H`gR3n4!}Wi-<*Lp0T5mdM_3#SkWgaVduv8)R zGK+o%WJ>ZxA*nPWcn=ktnSbsYDrKqUxQ0Z0YU;A}7D|k2()5xX6{UG*1=(|=Lh(!k z4VloL)^|ds1=Oq>RS-qUdcwPt)K+uGzJ)kuBEcamLZfL3y+9S}1?!^`B~WrqA3d2L z*{4y1OpWL3)26AZP~G(1R00`EFsT0Jabv^Okp%upZD^R{H{`boWsZ?c^+p&$ZHm4Z z_R;VU%M^Rb6iiEBlL9$Zg}x-xteHX=QlY+|dL$K-BNq_Jh-DhBM99~?(3&uX_UPNK zBd-H*0H?gkdSe-lq#h93Te43*VSpLh|9M8Y+VhdrLtMqeoPMtFP|Qlwb)4C$Qjbn& zHBkGzPqZi~n3Yn76I|V{R`Tglr_yd3Ftxt-aK1m^FUe#EnMN@(#PmREeh6`f1cxy+ z`Nzm5fCW&^B3JC|iw$H6;1lDATyJ0u!n$}q==ZC*=^hY+H6Z8@<)GrA7_>4z3rH^E zWOA?+cNK;FCXKDC2SFS)Kqi%#v<}FSROQ9Zb4bvyu|?`jO&&f-`U&zW5@UQztmi|e z924Ryq-&ICfkHP8WJGfqw^nL09yVBZk8vloNK?gBc{nJDP@GadJg<~_%y&mjkzxm8 z5R#;K<$J+>uw-1VMS3m61AQV?J*8Qcq$s(_V7gj9O-h7wni5cNu58Ediei#iju^U+Ict0Xz#SzBK-*wFLM1{uhx`- zZo6-<=%BaCdM$qBJSwXZbr2m$oBr2R(QNOW9%-H{)YZtj$7!B2AbW27hC2hITo%`I z-fmjBupZd+ScF>}AW zv4ht}(Kfoq!@*OjbigT3?$EXOg@K~os(gbNZW_*G=r8%B zFXPS_Ji2GqUjBv($K!|`n^nWquBwv=TdTT~zB?6vCzdOwzC`sgnVqh9(SB)SU-?r5k31EV@fqtCSVc0FBU2RD4 ziV8G|0cNyGK<&0ZUnhX36s8;{U{?Zo5b{lcaukCS)XEQBs=$+(#zAe}1e4IY6`Vq}^nwsnvo$SgDUm_tN1HEhG= z=rnYK2$Z%>fONdIVI+(81X)p;RjYuSwrk6p4mQA48q3-#j+nn^lt&Q0WW=~y7*897 zBzreE%^u4gIy0oCSVUSi(yCS+^;TEbK&(vS*{*8;Pj_e@sPGhnOFc1))INtNW3>fW z&#N{D1g;3gP0%|8pNHF;V^Z5U3kdDm)1>Eh*WNQr zr}?z=9BC^b`=ff+P($8n;8|f{EC62!JOhSscwYoO5!{IiqbkkdC|?cJTxQWEbd;JE zqQNDWP=>FGvB7fSoI{B*zzIj>DWH@s*r(uzLRcm(1wsCv#-6~kUjXV6tk%O*?U>HL zpFBcMx_1mesg?_xJX5T^Bh zF#kTT1Yjo_AO#8YS9o#4yHL7FdeTy5#Oa@01r~-T@FNH+C|C`M550$DpkSz0q=g`j zqXjPHtN^Eny^U(7up2a*wfo7|BGZ!`1RuHKJv#=Fq#(P2MD|9CvwMPJOSWDppQ{Ad zBG*<3|6a68crYskZP8D?qkSaOWXK3gO0`l->&d|)ZV96)(5~TrwU+xOP>^|7(H;*1 zC8SK6^08_hM^1z94!2JL&uX`&pKp%FLx>PBeL|+f(8-Jd8H&B|`(`6ChqXZyg6xgoFZpFDCmpdL5W9C}rxd}Xqvn;1*6w()yB?tlu*r*KQ z0vB2cQ_0fK9*y`Aid#QSkgOnugdwy^lPOy{KjcW2xik`h0P(;G=r|>p1cvn+Sjz#% zM!E|kGL`fyV9!ExfXYB3CWHXUfi93DWCbQG%X4uPIVf=giZv7xLnsbUF(6M82eKqd zZiaJF!;gZsg93>$s{t{M*(?Hrg32N8gL5SC0O2Zg(Fi03`o!LSUQ#Lfig!#JYK3jG zxgzdjZ6|oEf5>PmDMjRDgeU2Olwm_jdeXE~7&4hFC4~fCx>rO))L$hb)HU0=7`Mwv z201iOZNcW=`Yi>@Ezy1Xo=RAc|Inhi!nC-@mN((8$c#Gr1TxMZf zNaO%tj5YC)_4OB{Ea@wN+lv`bxSoYGFg~hr+DJP=s~pJ8FbVJj{!!>gopnaeT(nGR ztp!|Z3Dm+GM`)3>Wme0Y)}0tj3?R$yu_UPs@$9rLiu>#IkhXwB`yN{LLqnU<#*?64OE{~!A`6(KA~n_S$b)`~%9fjd z$z*`JGH_!tZET$22e_LCUFkfaAS_%~Un`7kzDiG26UirUK`KN1IxdgmKeL7kmkD^N zNAL}A)N4FULO@dQly`mJTNS`SahfF|pjZ?5&_Y_T&LPi8-)kW!fh;SGLl3FqebPbd zY3p#IBw5DE^E~I^dySKZK%D+Oxe>t_ZD9skCOUR9ZeOCYNA02>GH8&MSmQG?oaz+e zD$%65KsR+-sRpS8*~BPyxTZ8pD~w`!7)Oba)J{rJ;Ca=er@CgA3HCXFa@YRCbkx!) zC}eQDS9$4v-4WSxXr3XfLwkucw2@$Q0amAaIOrlsKnd2h<5IEl^=ha^^?mAc>lBJt z6^^P5r6tHCP)x$WSiQ7X)7ZBORO(YcOiRB=e5HY=5Vv|!Mw@S%O~Uu;8U1W#GgOGR zr~-(~j4QSVd8H|v`5J^YPcoL}WC%>%^1<13oC?Pvh2_uF$ZDtaEy~Uo+E2!i0q;XP_+Zrqr(*DLR{) zRiAztHc9H)(blV)N!nk;1$^rp%Qg7nRM-3BFj$`$eZe${c;TkEl|gN_wn<#5O{5E0 zCBHENYZm!d2$C5m+GB5-lDS}pt}sGMDN`~P-VjPo8o5Hefp87%yL`%7%f>krG&2^V z@$3wqrHr?n0%ZzRDX@FgfM-fr3?`5PUI&aoJqnPap|S0X;Vg+W>DGX<#nib>3C(`c zS&3L&g%C7G;WE%P&qf$X%Gs@z18)#Uxe(xSX3!-lh41J95IITM5{O9>G4gOHDjU@N z7-)p9G|s6gnoky%4rJk-%dz3E1oD zE@#@DoMl@Qi8)-5ecH)%{ZD;V<4aYryL8Y#l68T?!>00!4z>rH&J=>d}UPI@zJ11ja3k{FbEb zQl2W+(M~|U95xo<<^bHRc$HE%f@&qi7pR{?8E`UMrHGkqF$`t1At6c1b_A!8v&gcb zenOgatXgjP)+1VV8VTf`L7B$qiYv!+4$6h8>wx<>p6j~AKx&zRR`I843 zs8Y90XKEazKzv1In#`#R0+Uu+W%0`L3hiQ&T)|pbc^PU>kxIp-D30A(Wx#c5MG1+R z6rPAY6}CIcKzkNq*pNVXnU@_Siy9Sh995aG5QSON(-n4)HdTzSj8bfjUy4>zY`U_a z5=dE*qRAN^(*lx1cAUI%RZt;fQjn40u}Y5`9dt7t7~`q6f=vadF()uq*%KDaA+RK) zc&4&h-ExY4gyROFgn*)eUA=rAh=-~rQUECl>&UN!7LMWE93?8X{naw;!J8CjN-QM@ zxC*so3$s)paPDB`3o!a>E~q0g7_uK#Ly8;@)e4QrQm;63Vs#$Rk}u{iD}4b6qbk&P zAlfLndW6EXqHSU(t0 z23x_;gRaBYM|2V?wI6Z5tI`T$+nzvBSNK%0RW+%FVny49hf1(x zLV!~M7f>&#m<&T$2|Y<+1vL$RVup7qPgsrmLcrJmiub2(RZ0L8zr#keb|r%2Vt<1> z1^R4@L@qXnC^3ji+N~2IXiE+;G{Bx1?kl43xan_&Bn!ckL0dyqcT|G?6#@kp+jf(t z^iZYdm(^_Woa|}=|MVZ3wEsY#iZdz@M%BzikI3pyqHUrafOgx;n$HdE3pmY!ce+o3 z8fUSL`8$I7(Xp{wL|UO`}hx3*DmOuc5Es0?&9{h)vTwxq4HI=wW~yrZ>^ zz+gJb1|q?yAWD(8{WP{XlmP!}ih4%i9wioP)b7~Sks8KJiHRYERKPgW7rlqJC$g<* zL&G?mlu`@i^~0%v{dliKbtCnl`aHug%aouN$S>oopjUzjZxrm~6CkD0#m%}B(EB~JRYZ|mZa`w2a_jjD7KNa7vp@x>{o?oBn1t2#^7t?r$VI{ zX8*)LP|ebPa{WdrSFuAg%`j~y=`dH2?4mYEARh-xjY9N@ViaHB`catU=Lb??Dbx@g zHcB@Gpehg~sC2yCu7Kk~nQ}k^ViU6)7PCRb!Td?UFHkQqRJs7#G00=fh&L4>Q(fsd zUfTwqMmf6I*bGN)5r|(S?EUfmkIj}7c zL>Z73KN^laNH&?DA{+^H6zkuBWr<;4JhG5mxHDyYnPL(M#17JJ!s9~N8Un+%y6N~? z{Yumz9;v3lvg85I4r1}w;B|Nz6T!;5rezAQJ!GbnU^oMbW~7bWqLZi95pbn4>08t`DF>0BB55n`cdt4;@c3mOCQtB&UG5NlZ2QSdSVQ3~PSYom6%PUW|>c^4TTPqg0L0Rn!f{G$#D?YND zz!s*WluGP&%9Kc~i^vtNIF@~d2|RRBPU-Q=(>N2+qv&S0i8(nJR18;Elt@GX84@Ij zOFk)=0R5`Y9^;&|a}l#%Rv5s09u`pog|qt@5vurowjDY38N;ld5n#OXSlb^3kR3N9 zovy@%9<>CLBXEp6`6qBuOvzA_VL&CWu{{)aAG&7+2aMa8T%YO{L1^ySD5WWdK_~RD z?*uh3w87DA^36pGI!TdcB%Efc6UsKWIIEejvd(`b^@vU}Y5^oKqFAkpT2%!eVv-hUoda5!A_d$z}o-@z%d5+Ko}_2*e$?iP3I)r&<46U@L;e&ohF8= z;E<_TiyyCzft1fROum)UQ9UdOS}(0-5rle06l9J5(j$FcEE~y~6rbwpI;#f1%)_rDt zK>x(i2+=e*oDW3P)Jd4exj}0MUlzDCAV`({4s|9}8xP%vP1}wV#@Wnvpvt-nitM50 zghY6-Zg4T5HYR9H%FR!NM&D}Wu09*P?6 zk3$YSmJkBz+|Age#wnyFP^J7Op?3G0ij3@td_{g8$%LR$1!t?Y@1&2ioVOq;pj!mNkre!}hUI^~Le3Rd;*{T7_$sEekw0kY<2W-0czm zY{EgGG>p^vBdE57eTV?1G$5HVt+GMKbwA!ab1L zd^}RMm8DKelgGPRLI{J{lv4~IwD6If`+#Q2ey-K$>e3d!a)-+bpeG5y)YIAIl@y$7p1z`A%R@yiZw0WVR4jQ1y+o2IRYkdlRtE( zbllZmrKJK&0nnsLWucymMj%F2btzb+3=X^0iNzoXvY9Ff^s1HAl8|l&O);pE6y&7- zGzP-Lrg~)PPaq2fQU%)?B^PP4&<9cx5eAZCD!MAx8W}Wu-V(UGg1W#z=#dR_8odUO zmG?q5Cs*|$9*ST7K`y09q}$@BUqlkA;Yb_#EPm@Eb&zwMkf9+( zA;#li`D$}8KGZ5H<=Q$=7%~ul@$Kzb#qSFd(bCWY&KI3RW&X-#S)b- zxZ4FPBlyn>mTXpV#*%Br6(VxQ&QR}hybz*TOIh)KSaHINrD$k8vV?G*Eg)J%v?#a; z8g)-CI>M?-YpB71pVd&LB{k)8e<(;amMXJwT%46(fK^nGNhXpsnsv>Yx-8COV%eG^ z4G-~=ZRHaCR1#!W#0o!Jd|_K}vcMHvR7oq`DLK5MKxvM+hNrV7h0x;Yvbc;`>~e9k z<&xOZo77>9@$CSrf%054R*m)*P#UjA)(ILWmyt_D0HSyVeM*M53|*SFa#e@3<26{L z88-!&vRbehwzf%K*m6p9*4fRjvI|^Q1I4$d{Itys5*kNYJH zD79%@_epjvcWg4h>oz)rFJ?_rCH04)Lat+@6T*kyMJb;W6V-11qMNSXh79Hmr&0^1 zKMli5e^(K;-EwaVPniUk%K~vRaPIqCom?Vbtv+T*R=-5IgG$Z9vdG*!$Bay!tbGBfzRv8P; zmN@a-Ca|E1%aURFQ!3XcP&8!$22}-+=8>tSl zJf)^A_;)qGsU$z2=_0@iL)aLYOdr!T9&ZGQi5i1TCT^!4$RskO4Xy^tY5=qmmDU&#!R3ptv9ZTWVsQ}qK8O9omrH&-qF7ckkRUo^TNM$5*I4pGEzwBkTWoT5>&WzxYod0{cwmTCIz74*q(- zv5?ZX`U^g!R8~e$&NZ=ltnxgxL{FwZfu=OvK)Y{(azi|TGchF-u(+bI?2fUDi!}gX zMCuTaP5izXILhFfm`_Sc6@Vt-2VO#qdzCaIMw^8f;HBJ8BzA^LrR+%h#htR&mkQfK z1*!uoNp@el6a+qla|H3?fmOYS^Emg5oS>7urz8rm+khkx8U)JtpC+*&N&GyrcMsE*QJU1=OzJ0gl(AsQq?9fiH{c|& z|><=|~d%t>#Ag{7@qg~mpcNWxfO6a`3+XfdY4 zRd}qTOwi{VJ%JlmQ<~;LYK&@RF*evh8->fXG_y`C&v;w$ZG?oGiX07yb)kkAV0S=X z{kTxZj;8`BVuq==)KephuLXl629s!K2(e7!NQL4LdH2ff--Py{K=NuF)E@~=GEpP` z2z<#HjWDfDv1epfN3{x^VZ)@UC0V*MOKQ(evNDS(SrALIeQB=>I%^hs$Vw&A&v|)9 zgL*>IQVA=fx>bhyPTHU9ZL|!y%WZMd#A#H8)~z9k(QI+}Vzh}m%R$nl+G+eK(dlB& zP}Q7SAwC+zZ91RQRCYNvw3-_Th|n~Ua}pa+=!UZhLEbQ~m0y`a7&tX3VR^!m@| ze-RaE=*50U+W}IA*A-P2Dr2Y{&^MMtuQTmto{`RY$);hUuGKrDx)co5x;d@F$(FTw zLfzO|S*89$nOxl|QP=4$agi~8a_se$#w|@(Q{-etoeqg0WZl(Fm!hicQb4$nsSSWZ zc))o57`oNX?wDfQ%Nll3J@Zh+rcYa z+;FS$svrZDY1)&MNGCPXuq8sCYLNlUV@RiGr*cgskNgN~mB3jZ8U)NF-#vrpS$g9` zFyh1|(>-;Yb+bA$Wqi6*NG3j*n3`&kgwYZO8%DEDK|;V#3a3)e6lg0TlQ#S**A}7Q zgejIqrH^Q7!Za)%5ur-KcM_K{?8HvQTLP%CI26^6@ZDt8Ci$?5kOyg3v9S(CnA$rL z2A=q2p$g~e@Mg6MQIlc@AjLFERF4)f3KMADYsp(!0QADE7{EoWt`tm}D2y|?b2E^M zYNpaFOmoFP-3BtO#Cu-YZU`P&+MG9<)sbkBTnCI^a2Fa`5;D40SHgzHkj zy->t)R9jDFutWwDP?Nl>TY$Xg7vOX&egt}c2t28uI&EF*^c?zA`ohC03uP7-%h@3e zs6_BXP%ivL>&ps!6Whqe9sbqliz(q-#*(v9XK^edrG%a-R!=d5l!0}^z!RTRE$;gG zhMXegL|H9nwk~MtQ4!9zfd!-`Q=rDVUM`vO^^TPe0hHx}OsFd2hB#YbB3qqRB2S9- zz2<){L=D(*NY1GB5^1WhFMQXjg717I)mo!S2~E~1f}bq;S`TRmS+w*zvL*_bb)E>( zDlUeIBw0|bBB3L+p?5E20!%3v?pQ&lmNmjDvBV~sa}=TO3m5~IE}=<>Dn!dt;f+{m zxP(y+L3+s&=31g)A;V3E;)+8?9I{k(gq33$R8U3SBe8L$;aE&(*jU@OEWiA@V4$IC zTBG#BEaJ(OIW!deO}`_JOoBya7%j?WWFkHyb3s|(3sX|eGL7Oy!*sHo7JpMbxR7Nh z;1IIR%*Prnr5DwYs#Ofx5?F{CvX~@~>k*?omw7qHC<)so;>6Rl!WHODnUZAAGRh^e zK&@#M&&DZ4nJOSuxYccC5aLuBjweNh>Pk?Eb}{@VO>qcBIB_*zMTu8J)5^`lyi-34 zYuT1UnKREv$SR63bq54wLtR7Sz^`h_Dlpoy!a}G!`JW&NIam0d7IL=tO5<8CK zacKLlw?RO*^aw&XUu@KqbRU6w1}=9BBtzDLh+Ae3xX|7m9MVxKS>dlf=)Za{@qQg+j?* z9SW8Er6610YKI9ZYjxFcec<*df)qkdBN9q@l)ypf+f4>(p#uk(&p_R|;y77Qv=7oD zPT-MeRD-qyBP{&R6OG9qsprtWv8H#jWxaiD7=a3zza${KTxa|#P09oLAjTpQu z)V&#MnQi{@&i7LF66*>Ln!%B9mKcvR_P^N3DGaTPe4pm1Kh?YwXzCP>=9A0>pn{Pl zE-nPiXc3oa489YZ{$=pYurHVWi56Vo!WbAeB{0qmdnoz;a9C`*T%py4e50men_+5z z$SE+HR|4adlUNW-j6bHcGL~Hs4U4(fVTqtv-_2AQ<`OuGrC0*AQK)3aA%@VLmP}V- zv6Tr=@V|^Mq`Q_jBYU#QrA}J>9xR$kC%M;YX3h`?%COkSP1uM$vr5`tq%#M|aQ1{$ z%=j9k0|5lE9eLsORZftK80@H6j$m$rB6LTN?56mIRlQ45b5*B?I$T5xB?-vTngs`m z#==j`N!%*H_W?i)Co2A8e%JGx0E7^-`v5;-!wYRR1TO6!FcUCh029AFMnbi7>F^JX z?T+xvd1L{VRDayP0F$9my)N=K>nHFXOvwV0LBoYmuhzcDIbM1wTEym(cNzA1Xa(DH z$A%TpHwCnhSZMSiHjf^B%=kXDWW#D;$xD#5fb$w42_HGPuaG^&|HIsy$61zDb-sD0 zh`2ZA@y0x6R#nzO);v>%fXwtm5S51lji?O>Dl{@E6hjLFEkoN)sSgna8>AYg1(~7h zMrKr{7M4;Y6rxbj8MJ}NHHw!tiM2z{Q{NOso=q!Xt1eBOG+sH%a6}8j(2tz=l*o14v-pm6pe7!^OllPynz}#ZEZFktjN`K=6a2 zhgdzKnaONQI#2K)tpJuzmT}D`*a%q!>AXus=nD|548@sntG$K;<6vg z4ZibX-3g3ZM9|ThGxTbT7BV4QscDm2#1BnhtZ5O+h+19C)s$37nvaUHn+f&~fu=J_ z5VN!z+iSsC>Skv6K}>Uysn!*LoR$pABAWu}@A6lnH!ANOGS@m4105kvD0Vc%(>_TX zF03x7&Jfl%*TE!8+F8SBvgSHODMKI;8D0r9MmAu5#opPF4Zv* z@i$4x`U%7+$XI11NX`Evk^zfSRV|-b7T4 za6Xf})W;>-rf8=%Wy;i|G~+-JvMRc2%{~ihrG0sh+ZnJt!9(L$}YE!=}sOqOipuI+2i1u(hkhNo#5wT5Ex z4C+L!yB=#;8zH|&C@I$1rZFnO+B!;O@Ul1jD`7S+OA)T!_%2(aol=sqcQ`v#uhvg@RNOPA)wNkoHi>U@Q^czJE z8}$$c{*}yxKrvk#M1+VnO9R>YYC9Ap@@(njg5PLXGWtw@avXTsSCOo1qcrCB~TEG8ztm`FgCDuvGN66M+{M@zxm+m=q30xP^#|QQph{@ z0Tt$lPEr$%@d{9=5D2xeJl{6@l;Ht0g&nM+5o`e!t`brch$hvZb8kCSW6ieDj zbCpL8$losR!%PC3g!ii+EW}e3cA*?ouaZD?0?;aqW6VA^jLCsQdyHB`2sK^7wnSW@ zG|!cTU4Id*A2t~^%sax6;@u?|8RC>r7j>N zAo`$>NWgD{_Zgg7OmeK*;AUK}3)(Cc8oB{cXBv#c#`!HvM!w~phxj4VO4Wd3lmda4 z5m)ugd44f;M75f71eVW*$d(VOM4v)~^@Rx~1Qb!$7FFI+HG{yCifa;?4tkI?BC9Q- zWr&J)5Z8sx(-4#iB%5NqjX~aWYfDO%u*GDc=WwVaOBp&Mq`4&qLuI8gF2TOFKq;XW zVCH%J?Zj$x6+c3vRBI?Sbx?+G3}j6wkT%Mah~S50gs7KwQ0cYBQix1uxE?fQQEL}+U1-88!Tijnk+k8gD>f;^#B335h2{&v z7)YKXi`-2%0Zst%Qgkr-a~B2ub8(u0sS>mLiWDD55}nDS}&=_r?4?gCB)U z4O^Pf{tbU`*|nA=&>P5)e25*baL4uhP__tRvP7i|IB%NM-_V$Y;pU0J*UmHH*dWKa z%JD>@*i_`XZXQMGK6+z-!Zw957|^6*l7&wBV+a%D@ns%*#wtVyM#Dx@39+z9ERTp{ zs9-CgTvHb13Ea_!A0TH~d7u5Ga71>g(Go$ljb36@j~49;ZwhWmQK5hE%kA>Zr?*}o z54Z{Ig+hbtwjOdjs3@23b1(a0u9-?a#taQ zN+Wnj2s)mrcq%RL%PLdsRH{6mpFC}d_crcy|S z?F=q?xd`cOJ}60YFm;*1!Wxh4yStg95ee;x6FK|>l)(~@R6>Q~FXpq5HRnSXk4`dW zk4PJ)4RW*{)=@Enz|l;|O7=f+{;db@bCTjP44YIMDD<$;&Mi=_lUDWf!p;%Ubb|+^ zuv`jKieQ{2!LsOzDz>JLXTm>JkZ9$yHdf+G!y49Pxil<=3NII8M1+#dGXE{VoBWnl zdP8M}Y?6s{^IT9#KFKS>VGuKjU&2*`k+mFkL-kW$qA z#7b_EhVBq@0R0F>0eg)rJga3VxDhZY+I@_!+}z)t&bAb;(uvm0&}jOQ0sIkrjz2t7 zka`~VP~Y0)d&VDh_5jS`Vk{a#8}sa(tD4Lnlwq;z%hPRwWJu*ZdzWRG*CWZgjrMbiZm=~D5IRk{=Z4S0a{5^@pl zBC(f025w-)(L0SNRS=(}5{HF(WLhaU*eyd!T5HwB_!;#}$!A!JMNNh)IZBTB)Umjj z)L~8JN}tf7_*%Le3!UlJ!bD91S^Vl|N2np7L`_LN@w+I1Cdoe>d}!@~r=bDY{he%C zEmEApn^j{K(OscMpokVZ*K7=I0c9bkk5HBfnWXhCOe-RbL@1#xQrZ~{Em2$GU5F&+ zlEp$TKu5780l@LF*CxZNgxuplIu$-qK4gIj&vRBxyonNL>bT4yXej$6lS(W=@*!l5 zI?w+s34lD|%Nzue* zs+fx5l)?huC-*_AYP1QUJdG@4KXkoDHgSE;7W{l`VOOW5#>zD@PgM+Wtdz)fj%`aj zlzbYET|l!+#tG9CD>UL!GAy-c$f8Pp0um%RAlNM5NyMyQMeG9jb-62h2(nZ)OSa?> z#yTyZ)yswM>_TXaaXP$wdGJjJ*ue`Z(q{)18OR}UNz6+IJ4egLU_}+`V6-ox>9gzn z_lb*kLeI=2-6^UlF=}<(n~8j$f(WOAefHymbhu^6c2q*nB*lo|@c;}_R6B?-1H?&8 z2#!6@Q$?EemgVbAzL0`cye3IX*ff2+4r5NqT6> zJ%fR4VYSu!9TiYwWyF}G)BuY)5)_Fk>QWMCvNIltH-#Zgth7yrjF6Nx;Z8QiDz2b3 z9LldwBn`DEWqjz#8G4&bcSzY$J?%Tkz@YwdDNFRoUR~Bworw*)il5ief;KY|%0I{T zZvL9_O`#U)X1T@hJI;>wXk*v&PPWVjXAOUBfEpZ8tsEfGBK)b@d$ZiKawiY7a*aT* ztoQ0ZSkN`r&D50k*qKFC8VOY6}vFL|~J5^o-!B<#A_Z|C?3|#j4=oyg^$bf%T?+X;*gU+Ji z=bvkqESG4$FXV`ClZX))Shs_I-i42o~A;&ou!AEQD!wE@n|}SlU7ki5;rC z2qO>9k}-nw7l<&3kU}Z9t{NHAuHTFa0_);Oh#A&+_wiv8;F@Js3zU`)%~s8g3;1!X zFHlBDB^3g$$gGc`P*OP0ts7d%R@UU(1tbR9`eE7xTQ`mSst;(~a!a)a5c&Zu- z!;LOA6fc4)QbOqyVN%(@ipazPl87IiMMM=YFHEjbdq+&kob8{oJ=8v#(}Vm1(GO9SqKAkasPhR0|^^!gm{50{#b{UDNkWe zO7VHd!dqO3%6RyZa}_eg9SRQ`knTX_y5pAoOZj~RKTqW6`cP&NXa_||*nSjZunkqP zi$sJU#Gn*fF-$IsEbXB;LG%fAMYoy8)Fb~xh8+yJ^*S6X=z z?!$FJ^+gx$Avz+!=+;ha(IkVQD=mdJD6rb#b8J76cc41lgyoMTrGt|xmSc^PG}d<5 z5%M5+c=rU+3H&KiB~QodyZ6SwEkd1N|)4_1%$E6HXpNU1f8$63KlTs1?BtiHf;sV4}=V zNV>xOpn$+s4nj*vJt0h|4%@h5#~g(emz;3)g3-<+2r9Ci19v2KMJSI#b(CPSNvM~> zNuA`OJL+YEd7*0w?mCO`sHZXNZVTbF%~+TejDb^c!W>3;;F~vckQ6QxbD~WB)$JDwadTb+(n?%*5M++2>PH8S=h+7aV1=Sr@iF{FV%hfGSJ}V$U zzXWzEk4peLtn|uj5{>P~F)4A+7pWPdjv>K4JhPo;ybJ9M0!CWgQuG;xf+FjG2YMKlD9Qi>L`YV437;M;5J`OC zoF6qXL#(!fSHs~ZGm@A&R^0)j?Wk$6)&jDRs+tkJvpG4^vSXBTQ6@(PB|@zG$rBk+ zb2MZm!EEKvBe*2JMNeczju2K;Ifn{n0WY_(7N9IbVWC*$Q8)I57R6cksO4MU?n4b5 z3B{rephQ+-HKz~uB0IuH!9wcQ>=*5?+W z-e^uAYm1~x5}ddTWQP!gLih`*OxQoL*tNeMSpnsP{yj#h4sV*|pDeUNWdfoHZav5; zA&Th7ocSyxM<8oZA@W5hq6%_^$J5~T!Xq4aLScbxQ950dqr;=oG6-O`4TQ+qkB1N$ z1IbKXv^N$Kj$sdz6OCXDH6|(A51J9|8)q_Ur{$WXw={7BS>P2~BtXhR{RSe0GRRGV zU=e$Q%%jF8cgMO`2>!9&s|mS?r5^nRk@Qrr9FaktW(ejBP!D z7(t98wJ}wQz$c3YPV!Eo%Wx=Itf7dsQ@CTAl8Ox)d}ywZ!WxE@MQq@g`3YyAMQIc{ zvUoXi)CGwuV<{qr5K~BoD4B^?34+h(QDSS-^(aFr#@S^dBT2OsQK-pM3?|!z&F#sGwhl-~ZDoEXIw3fs!M%>~ zNQFi9UP^D8nzDdChW}wyU}OzGr6`CfrsNm089O#kp>$z#>B?j#Z~Iskg=2Ifh=4KV zi7P@&2Hy)*kLgog-hchV!{AQwXBA-4SIZld6*pw(w z<9x5hd4#*OAA1&54KCtat$HAyNEk8`Y2jCeI_DI5(%0QJ$5SlBdJ#lsE2cq~{r(%m zM8sqWNC^a>fS7jC#Kn$JyuuO29BS5aM>I-H0ps4@g)THA%4RNBu9Ceh#hES1&ITi> zBSKgwg_1?|oV9HP2jbw^48_yRg}_4o*ncZUI2JBRUSPEH^2h%oB#A!(+WhZBXDGBp@S~#4}}mz^-5EuhnG-H6jgQ^j3%gy zz(5A6L|!E!Kr^iQ&NSsF<@HcX(p)PXK;Xe0ZF^SWWT8+g(p_1p5-)Wp1U@A)Yevja zqDZdxN!cjoInA}6IA1jiQ%l08D`%u_K<@Ae71+ZxUrWeO-kCax$WjXZADx301@u)( zKU82o=d!Tb(X_Kc2}hz6;5r4{Owy~CM9o45mI+l7mG>_ng%gP^w+LxIs>_P_iTzA~ zBcx^-LRJb9D20^jA&O%fCsmy)dX$Q=eg;RA29*~hDJ!i#pf=g7OaIb@ASip}Is7MPts14lG&U6eFP$g3{gd;U_LW*%yMxYW|(v{qe)n>Ggvkr7i z0!0uFnq0~Xh+GtC2ytO$2GbDU#L7wNeIklWE>3L;5z6p{IFS?i#y~l3uIyl3DPbhN z67ouDh?)&6SND;uH(V=~g$#vKq8*7wNrGcmlsRZ8T$K^NilP1RH1a0eFXa-X2Zg?f zVXP~cs*ccMw4sqPgQ>=0w0?vaetHmGT7h6l@^r~4(HStFNYN!4LVBVh#4%W=j3SQ4 zr0536OEwamCNx?-^ry%JQMLn=Aq$gmI=OJd1b$T4Ja`O6zqVAT?4w)`ks^KdPZ>hDR&ErW%mfgYCkd>tz zbs(~Bk$ZJ;5}1jLF(ptE(qyU=A(`QiRLUhOQ$9Gk7!?KJ{N{<6A=y0Pdem8#6kz#G zF=yf?*2tK!#`O^|&k!iXj-@dVKf(=XnKHCQbEIjaJp~(5Rt*Au88Cb@vv~`cpw0!B z_6CZj1Kay?a?=P^#4TMd7J;jgFgFe?-FfF-g*(^pI{3E-|L)-58U@B2ZOC&GKN;aP zztp^wpS$u0x9?su0|z-C0Ow5bMoeUC!`hc}cW&Nw@ZeqEl=t@?K=f3@c6RB&olAEv z*+l-}kY~g5u!soRA!K?9PrExe?mBpvDlK$Akf-U8nuAz`S50R?vOT|XDR&@$Xa252 zZB;n5q80QZJ%g$a8=`LQlx-)MRo0Noc201qkO#eyC%G37c@OM1=zz^y02Ni3J^Tk&-|KX_hH)F8!Sc2$gLVab)J&Vpo{)Fx82H z${*NXI>7NM$ZA;tq#SZ{MCs8p9(Ld|r>KUI$5;rQLcA3(-V#Jbn-kDcshrBEQZ)jy zkqXftB5G9wkSwpsB%g>O_!*qI#j~(EwzR=-`Dj&opU&AiU$OJ-x zP9dJ6Dcm0}h1wkztt-(x0#riHeovE8Ri_qD77}5J{`iczl3AyR{L9l0h|1BE5L9ZgSSDf$?-yRm7@ zfbaNWT2%+?W{mT2HETG+JWyW?G2f=k>3-7NDVn$6i9jNuGO3+8ebfpWIs-^bAn0v} zb5QL*Q!TPEs*FI2!eu#TjnKIip(1VQRAZCiuFrWegEOi%2)uK1!wb!ZasO3Jch%Sz zkd^tGHm1$}-U9Z|V(drM_1I}S|1rtCw+ub|U`)GSCnb7utL$W_oTDnD~eom*wsfKIzlaL<8!bx1|v06!?vl0!Ti&m-(Fw4ADyMof== zm$E$DlNBQ!L$kL!(-y?_AO|_Uqy_)Viv!4wO4RvjHn4%Gv|$gR3GE0@#nvYRs1N(w)GqWn zq2iacIaDYmdVRea+bjYyQzldz)WlrykPf;j^QbA=iBxEX?F%;#vcTdp$INQeVkr2_ zCOjC7a)vvGK^~|ZNpRZC6b8FZ4rNGO$l~-_?=u`Al|ib%(E4Prm)4ccCgw!p)U~iN zU@VMgtP+BxTg@7Td3q}Y85Ge2KRa%;(}%l-0-@oN`bk^M7{rBm6=xvd<8*>&q^Jb=i zp_TdRSL+M!yyMlbGim|Rfo*|=I zvzNHS5t}VEH8>WzQ@0-W)L=%^U4JM8;=nGB+i0o>uwr2~Hl&xZ4WMdiig$63KcHTP zZMr&y(DbY|x0+kqO}%UgITyQX&W~cNZEo6O3$DjERhHRKOCR-+u&qX<2lP$rT#mw4 zj%|6L9aWDLx}5Okafc4@IUQORJ90Pm(5Gq4%F+=b>Q#hChpMX+6-ek5%o&<4LNwDc z6<{6+L1EM(?Dc~^DLkIkgOo{%1iPNhd*P4{RpB>8kRTKSdi?~a(H97Lie6`?KON?a z5Mli)7f3W@VT!64N61Q-hl|)Rj{i{kld26`@O*cSW|AU8kFbT5C$er})Qmdikm&C$ z7?Oh}P1B(&Nd;(z|6;k+$PCFU`o}Yx%p9CD^B&VIt2PJ;b%(?3X}qea((xJ5l#v}n zMdHBeE}q6zgJ*7QJ|&3*)AL<~dUmeMWn8AZHT@Z3NOTrYGsTo4l%!7}l6Fb?YBjjz z%fZrSZv*s_a|5>aHb{zRniiR0vniK4uHJ^~9sSSDYq{1rZj;Fload3iE7fnRb*eEd z995nNr&0kA&a;wy77;Nr{Frjc@spSsL7A_{C;~V7q?fnY^PeRnbY{K4^JZx*xw3f& z(AtJ$dfRV00c%4urfxKy6W!Yo z(#A>BMy8_nH1kt`0l6`L1>eh^*5te``ihrZu5_VL%t4E(11NA?b$g$5b{e(qtB5rx zrj(EHOfIEES9%+s1tVpULGW(|mdV)LfDOGQh^BJ{IqE0a2Of=kb5TW_fvxs!!KYM= z`I=_ZG!pv;K_u?l*jz%-QzQ)crM0+hLq*4Cc>lh1TU2AGj$(1=LFk=OJ?*PCmJX;D zLwn@jmK+;a#(idbHU|$dD^VgH7VMlscDps+|p10iu)7a!Bx0*JdyY4Jc&6Sj3N zQ8U*aUf=08P6cFH<(eu`RJ3I&>dac#9u-5wu;wT(Wf zj+Xw_)rOs<%Q7Oj#KC=ZrIoiBPaDAoviNvC-JqjnK<+${&dagvT9yz+*5N3#C33Z{ z(S@Lfaz>HnO@Iy@FY}hrV&+<@;wg*gZbHeMW@lEk)JiO(LJ2jl#G~f3-krqGRxVV? z=bHY1e!6`po%HBJ`{Rssjwi;rA2=kG-|fWmK7`S&`k_MtcAAGcd=voi7p;(Zn%^8*?<|MY^`4c`<}QDna!^o!Xo!MaH!E&Z=B-8>R@Hqdm$+o$MU)5SyBCQ>@&0 zDU6F&lEu70ekJBQOpi@KUZ#t(N_!!1V3nc5$!I<@#x52v5K$=g)4k-SEuPVKG1W?H zQ9G>rfM|vX$#Sdo*?JOT-MORrXb46?(XtK66kRP+E8YQ5OLy%lDPweS&qAKa991pT zl4`Pjk`=i+xK4waD$e-emLO{-ws96oEVBTGX;84;PObmyQd;XYW-aH+F>1KSreO^Z z>i+p-eT*FK3}#%In27T@mKY?5#7ZB-7q_kQ#W}FOvF^!rLdo`Fd(Cr~$y2S{Bwp-m zY;HChq_%JDYpiWH*4G8;CrCXxH!ax8>0J)Q8g>L~@bVxUY z4lcLoo5C*DY*ES!mR|NI{>^8ZNGhh>#J5uHwhFu$G}YQdE1zwJ1dANPb6gs-_ULey zIfxa_zYi|LN^-!d61NSx5}pwujkK6iL^zH%=wx!kv{&mVi zr=14{9t6J(4Pjj+s7x}?4);<*e!U5uiCHo~6^NOVe+f*t8?9Yw1Y& zA;B&rmbF+T%l_AAnyFi?EoSsMs2OF9M(e5odz7@&FtkcNw$7|^C&^ z8b5V@{(pTC) zVnD3c6QO8;@DRlc90n6&A7-Q`<~SpiYVaV0ld@p;)KJ}dk&RTUP-1yaoaV9s6e4tL zbDGDv8P+`Qp_kAwxJAs!$Q9RSd6d*ZypYwcpP<+32U-~ho>Y)734lo-0S99|l- zc~}Y`CzmOJaS&PQK;&s%BmR>B=BoFeZLPOKR+L z_u*W?pa-~;zHvMdwdD3sXrF`!soUL-G5=y*rm$rOg7Xg9mF1t|A=XEnUz`&_B58Iy zGiJiWaEdAHX9n4QW^`&2|C0T4F}n>UFCNxub08w>OA@wUA8DA&(|KkJ9JEL0waljO zrR+16?ukBNd?oxYZ71U;M_gtjDX_KG{$wid%j1cc!XM-iKv70HMn5{wFQ*Ra^eXzE za&*Zr245q)-I@K@@x=l}3THSPa~^B6p-RXI`~qs@xXhMCy%mn1Y+(n^w;Xn)HocQX z%n!PK+j@~M)TE~9+S;a4h}O`%qVPq**B7!KIg~@R9;(R>JtY#D+DA3$S|7A7rnK-2 zRBad<=njCENNcDgHEL)?RJfsNrtIW#GU-4`oON~%YZ>+vGwQ^kVqIN1wtxt|zoT1L zO`I^PYQK{W6k;I^?V~zQ5vj`h?Mc_EKHBq00NI6wBy_dx4tfdfAc1Dh)Yi$wFoLEw zG|fS_&qCWu#E4`>OGP~AC#l~DtvC8E3st8ML`qm0vEhb(G}Ep3B2Z>_F=RGjf0~g} zWOO9l0mQOWur>MV*egUj{%L%{oD0iP_QDl@)aFu28&E~W>po<@$V~3!ekp7C(RvzI z0hnV9c+D`{UKLuyu4sdDI!q*C>*W=;OBOZXO~62y@l>Sx5nTG`}$@XqZ`b& z*e53|sHW|(Q2HJ*ZJh;yFSYX$442a}_MREwmdwW8N`w_g*g!9ak&{d?c|h-BJgmi5 z6f;=UTi%l(f=}`x_?29A{4PcP$s}e)Y{B6LGg7DnhG;rvC^z4rUcC5Y*AxK;-0FL9 zLP~MY<0DTFUl}XOEdCbLn4-l3WJQdXk>fN-TDdkUOekSp<()}ZR%;MxY%P(2$&;ZM z9E}KIlo`LIHre6`!surw(5;&Eu(3i$^oNP&6rny3^@@LCz9N@13CkCwpF&rY#}~k% zj|y=kWEeWAD=M}cc?XlBO)H~qx+Udpbmy92(E$>U*TgOai-R~VnoJ`73WF06}V`ZX49$z=P z%gj&i0d|$D=nhpGaMI4WO0ehzDdPNHK-7NZ!q)qU_50sRo&5wkUJGN7MdUE=E&bu+ zP2F`IP$dtR`-*DA)@mH4bLz=2pAL>DzH+PSF0DISKB-23x&knSFzJd2;N>+b%>r!5 zOb-zrewUM(E+ISucffbTeC1eeWg9Jsu#klsH05;xg0w5@oncrENlnXDj8$(#2(HR# zZ797B>^Ca0llR!pZAwde{-p4BU#Z0)g4UrIR|7wtH1JWpS55gmD)p8HA$g3Qvnb4j z2_=I>2Y{Pe%#@(QsTE!9Jw@X&hKh;Jvq{TNGvsxLYadW>aBqm^-iGjFYDDMW((Uhw zdO7Z^F=X-3^OIlXv5!K@kG`Lq>W&p5jt5CaRNrG#^OV%YukN^_heC%nDv9S#y8VQh zHlr*u;E*Sa^|DLXfB;J(RuEhGUeq9Bfc1fkfW_|Xdy|1ivykQj`ED3LD+^m#SUaZl zx0k;{xs%}~vT!YY*cK!7BO769ScnQr8#?%h`6KQ%vzf~9XHB$%JDqzH79{N}(qZK- z|2iA!WqUrZd2RzuiCw{}6E&vbQ0Z*6UerHna5XcUD~ngy+vtRtbA2)ZRqAPJKr@oSm+jW#T!A+7)x-F`*;VV6xoI(-F7kuQxl>Fq{jvX^a+Jr^D=n`TBrYwKvJ ziM+(q-kn@M7U4g$!BU+xEH2#!A)};zpYss|aS+T)^{G##E!zz~ykEl4@(`rm=ERo_Sw-~))Ypm9X z4X&29?Im-fs|mZJJ8sW)JG&Ix4foJjWo9??gqbu?Jh1FSHOiF^K#|&;SoAoO$EG}R zZX+(;q?1EyBBSnh9SuuL0PhF+jQy?Ci9-9784;8) z@)#15*}*Lqx96-|9!!s{*)nz^*{V9gPNS5SC!%Qc@Z}-JXyj3dKUb9So{Cx)MF`TO zb@~81S=@A=2R!ibWr3+nR-f1pQ5CXe%c$lZyJl@J$-ahxC*mPM-G&fl zq%VvyN0gp5taxRdE>e#uOq;sFv)0wh&J{vpmU=GV|LZeMbg9Hzw2Nq~$)*vH5&6QH z6vn!Qz7&fN2Zb`h<-!G$FC4d&j5}DZ&lY7R!7{zwRT0sEybkD+p`Z^I3py z6M8Iql=dqKr>W9&2klx_+VRjsrFzRp99ZaU-GdH1q;TtAC^HOd|4aLc$Cv=wCYsFV zi@88{{ZX~A#;w3gcgj4VBVlkAQHZe2XvY(eE|SwQjQji{w@7Y{cxWwkti{Zj&?mK~ zxiDL47DkONIRNjlA=UV!Lv7Xsn_KngmM^cLpdw}}1*|$!!`hRCHjO!2#&!%fTw{^b z^b@OoO3m*W%CyoHckF5Bo?AzDw_}HMwQrTzIv0kzWcUjkkn&Z_E>$L-W;J1Dk2kg5 zrRy;DgyWjVE5dq(5hz3=>c?J|8F03C3^mx=GULt86@o^~YNjbp8Bu6Xn8UV;VX6aC zhxJIjO?s+OBjgAo!%}xHzsytQLSWZEwqwzg7-L){vRd||JO;8b1(JI1Dp?FIaW3Dv zXOFc>wQN@@b$c^2A0mmg?2c<&Try_JFEowC5kWQUMDPt96oN}i3TUGQCc7lnX)#Ob zbVT{sxE;Z0>O}Al3{&b-NK}z3;YNBFs+iIY^)0R|>ZTs#uS7%GF*S4kxOpyMYU~se zWjlsdY^Y(`qX9+;-p5R^I)B1E*)m4LfO9$8BQ=#y*J-BcY1^7LEr^>IS7wpJ=+FN~ z(_LW`0pO}yerbL2o_p`R=it(%wPQ;M@4dVB>HqS!SHJ4bAFJK--~$IQsU2Oaed4#D zcj;JHxue`SfAb68@fWoR_SQ}>9<06psbi&GyYi)ud}X~OpKlwx@l6+yQ2Udo4dzSj z9hI)GQujt@rM*x(uXcLrfv^4BkzJ*7S68Ky?`rnsyBj^-J)Irxd$6b-{NUqq#Y&~C zJKvS--u6$UhkTu#yK5&8-t(J1yE;0{U6roRPKxHbi(Ok>FCb_w{z^xwqoXTdY2&d; zxvpkqzP5Jv{lC_h@8~EOD%)KY*{pO{I`dr{-PBQ;1J?DxJIaM}N1@W_&O%k7<=6kmVn)^eevTrO6Qc9jQy?yvsk#44k={^&Q}y0_R~nW?QDyyt1V z+B?d$MQ6(weE9JC>e_04eXX&vdghxi>1dm&H6Hl0zET^6=gUX0shwS4U3CTlWocW8Z$Pg!>2lZeXgv#Zlggx@N`SqSYYRX=fN z&3WEtJsXX+v(vQ`i!a$#vJ>TU;p&H0Nz_lBDce|EovEGtsa>TGN><8+pINaaxCXb6 zq+=kTsXh9PU2P3&%iq##&OkYzZ(shc#`@Y!?ZmUG zmQ)g7bt=BAzIRb=W1Ye$eqmR!Tw&UExBc{^k#2;<&Bodq9Xh)B+FgZUe0Rqc-(8ib z?D2B+2o6uzP96L}`>rt@$-{hl%;E{|HR~b zeYwcwU{-eQdfp*bIjejr>H6yb_?6k(<|i)LRmzikq@(oeL)(z={?7EXKl+X0T*R)!p6O(?0&}*MI2aw|(N)-+IPazP*ii=8=Q@ui2Hj-`&lN%k(Lut za)l0FqB-W}w?8$xi+5_17pgnov%xFEyI0=m?BZ3Pubnyg@ca8@A8%HHbl=xzCC}R) ziT8c`ODcetWv43a94ScpRI%U*WPhiSFu#?Y$tK6Td2vQeC}f(_`shYs6Tq7acW%E>EDzclBcz*3TTNfBN6<8yoB&92&`wt`83mj_!T#trvLKz~aj<8X6oPDU3G9@}rIF z$WVXJ;Cb~!hfh8Hmd6bYkB(OPH#RmtJ~lo!S{)u7*n>cJ^sk>dI50|0xv^8@lM@r; z;}fQijO?bRM}L1$-v~F=YJMy?zCAISA8%NAw7Q_Y_&e49YGEWdYGQMuZG3BNbY#AM zcICwHj`deZhKEP;)h!y#k2l9kCRXR_k1n77$Y}r2@QAeVe|&T_U(Jo?#y4nrv^rb= z{_?56zodtwF;$#M#(B^^WRv{m9|tZ-kC9 z^9=P}y+j=iKEEh!8ylzJG+kd_sXwuwZdB>a;LJzYR{<<32J)8kvTps4>H6^_Utj1S z9-$dJ_-~gt*5dPso{nI!etp-s$g}d1>cH^G=vZ~AZ|2i$>uYU+S6g47uAf?ddp|uM z9UUI-dHlmlvI>htAma;JKlvNI1H&?Lxclc<*4I-YeBxdxtdjcj&H;u94)*-U$@TS4 zrD;CRt26cEztlYhMR2G44QE|%x*NImnfmE}*EKLSY?0pAomTdP#x~X&zqa+0Z|v$D za?D1$UvSI?#P2x&3c|To*Vd*nHGOcfk0HsAobA8y`>QfSA+SUZt80zv`lClaGu1ON z=(HFd{YzvV55~#EZ!lfRrgU~=`5TvY4&;YVF|oRze`H-I>ike@Cw)z{zAKM*s0xG_4|`)iMEi=4MO zU)ny>A3b;ll~*-Mpl6bfaz7okV^cG;bNSiaOk;X#ygE=luW@Ljx%{4M ztJSI5>AAW2h56kJ^K)}E(_gF*OYp6kXU;py&pP)6?^f)s5{xTo{*> z;#_|I^xQn<7Z&ChXm*aTPV=_&#;2zWv!@`0s%NQi7NY03W@n~mE&T8`qhm8ObA{PQ zXJ%(7?CZqX$mkRq$;s=q@$1#`$^7hLQfH2V#Oylt8_N%IskS;4Ghp+s^$!3#XXsNmR zomY>I&NLov{{3DmnuYMWsgWoB1F3D)kZ*3Sy=P{+ab%5W=OrhN85Tv%co7-C?oZNU{Rh~fb=u^JO-je5=&6&pL8-~WG^0RAmGo!zF zk}mY|?BuI^$7dMr`ML2ou5E7iF`Z@_r(fA0GiG*f^sO8DtsZ>x$oU)n<5LX&?CkiP z*ztDJk$khcLBiVy$E0t5ZuF&Rn_Io)o^G7l`0&{1q+>NV@#N(Js^!_{*A|AyCnaoZ z?(;k&-^q>dTt85CBF;KwkT%;m`htF|fbC<`f5TJ$Z+A5Fq%>|B8lIS* z&CfKZ25qF*i6lGs|#KPxil*u_|pBNo$^Z<7{K&;inEV)Uyqz z^qWrPn+3{koqY4yTx09^s^j^Y9Ir!TZ1fFBnk41v$maKcbF#`jy#MCWaeAJg%gwG$ zO#Pp=RY=J<*SAjH@iU{p-=7?x$#WcSnis<=4#d!scf;A#XlUb(;&kAA1@+TsJ(*4Efm7Yfg> z-47zPGuO4zQFzh42d}Q3WfNBJEVaG&p{1+HovSp;mHh0N9=fWw?#fSm_P#4>rxfQaok-rfpQ@ox-$W%)DX{pg9t2I7RE>XTv$+d0&!TlH}jy!EwnMa$u{@uM; z9ZocEP1`vL-Swo}L7uGseYF(3tIm#HvtNuSKiHSIBWx&hl|SXl=IY^}*wt3f6}CTc zFD1^d{KPKP*{K$D@8!wn>LXXNOMHP*+A8DhR ze7Vulw(I<_qck~n_<3$j*&KD0cKsw>`Ak0>aJLbZdHKDU)lNP!ZOzQk@xgm|kSoSE zx6C$uubn-WXWwBJoo%I8Ed{GeXc9Kc#l4@u=ki*vBUfJSU{l}T{q}o=pKH`XHT5CuFejnXZL@spT4%f#tS#auRnU^>iSs(m+I)i*q@&`jDt}%H`1t%_FsMfiL2`QYJPO1I`GPs zl`HF~6~qxhhNk}H#NjK<7b48y6@P#1iu(32G6s8y(ZOG>qdPt|s5s(2XL#X@C%Eq( ztj4})Y;^F|+;2RwXLxk1IKDZ2-NRT(8vlK4pgKN|L^L`w^MzBF)lZywLH7vK3}Vpe z(0fjynLg3{uY<$LTRf@uy{x{%ldW&C=Ev8^#;Zdkf5DRz>xZ7wE3KnrBLmZ)KS`eTdoSrn zTw3Qz--X|xo)c@I7#=ha`=7p>|Ap=1=A$p_8OgKD+ZyTlh0E*fU!3ei^y7ZB+W$Kz zE~~FSvjd3@a@m1R{r8iX)lYWyhe$}B!%z69mCNeQzWnfNNNq#a_h5rMg=illW_9oh z4?TK$y~)mQZFpp8c=97hNj{ByIgE%uH1f-J*+06??rvyf@aBIwzI;XfjGG*iXa4-i z@|E?oV+z^>!*8gw%Uz|}p@Gp~{TD_$S8WXSpa0H7$F8ZbjSLOld|Um*GM9a0&%e|7 z?bp;BPksM`j~-dRuHJaCehj@o4r!QnZrSy8ybzF ziD!Pb*}Sf?J~2Lc{(o*XuWjTfH>%^m+1S2@tHwli^etPPS2wo#22X8_PW`1qU~Vcm z-I$uLKK^^ns~W5iGaFMAuU*@`vavnG&HCKzzkK1PCk8jl4WUOfu;K= z>Km6ePJV8dB@A(nW$FC=+m|&qPrrC%IzP8IPrZ}B-$W=~Z~o=@WGs*yGb68TY+l+p z(R}1_0V+#kit>jymjj|lA&&^MbUiNS_^r?w)sH3ULk*6Jln9b8K9iDP2 z+?<;peFYu*${qwlgi0l-4>sx0bA}LlkZ%z>_I!;FogAK+m`**Mc=}FiiJljAJnPGk3n3;ImBk=4L$urZ_vs06M{$g{JdnBFd$*IZ7iC;$+xV&+Cc5Zr# zMR4q?-)%A?XQpA@)WqZkpWEEHvT=5ff>V>T?`$xrtF*)QZyjT_*AS*BF8kma=D^z2 z`1I4i#J-lxv4t0ZQytkgjmGmn{0OV&b&bXk*cLRn5MseB``_mM!ZNwP6t?k`*rUZX zU~U)Cko-u%$|tk_Zj|l@i7Q5aBZBF|sX;u80v31({YeNJ2bNx^14DXo5Ga@d17jzQ zzHSPb;Pv?!Np1v~>BE77@M$y;o}W?#(TnhFcnYL=Vft6B1!WM|kEa4o0(Wp&CXO3~ zty|RcZCo=?$K-5q!%gdMDpa7K2zM!}bn=Es)oY;Faios|#8nQrfl(T(66p@(dz3Kz zGOQtwr-&NKI%2$9xfElEdJ}!6Pe@KvmOG}(fbs0t}D4l=up#cTQ$NP z=4guuc!nfrWy6T*tX5j=6EXInNGnn4mi&5M~gq(s?>Ue7}mZ7^68NM=ml~ zyP{ulv>iSd<(R9(u-CBWZD!VKhbWb@bvRCc!%~#JCnQ=mvEo}j&lyM3cPKz6Abco2 z#4Jh2)}A%V7fio*fiA;LfCdNB->%aP{I_CXfU(4Sf?l2sa z$1%HlA{nhR-r_5R=;W4!pdS-eXCFw_Imd%=k`oPuh;$#*%=g=vlv}sgbRDzppwQXj z3)j5;dVXKa&vxzh-atZoHU=j~cD7_9C1dJQBr>Vhe;* z3%bxtKqR-Jt0N`Bh!X%o9}TNX(YM4!aLNdDPEw2L|UkMz2zxD^g7imZmAv7g;-SKkN zmcs+cLv$fZ-syIoWq=kUL`4TU7v8q%C0Wiwl>Z^FYW3oq=n8apu zuB3F29CpN=2jY)tj4G1f6mCF=m?eSW5!d6~@^BckhKrQ^ls9smXW-%wk-yU*hEB8? zFJbYpg0{DF{l%|Cy?c_IKMQ^3MFI8nbo z2dQo+wO_GRvH}|!PaSw1hD27(Gu#uxS_>SI+4OmyXTH-dKfL~U7PCH%t*A!T zj25LmlR}nyipX-urTz!unNbbkmF1``mBm(+{!^QSi^CTW(kloT<9q09Y{!$|pIA8@fG9c9k%v>U+%cit&SI`tvAASc5A zm9}+Oj1Ot@bb`nnLVz8K2f_fI(Yi?*d;~u5rO^eIf5{&yJU|^qPlwlak6|<|yg3v4 zGD7>2gY}rN2=S_nz@;;T2OH>4AS|n6<58g({6~|YQ1THx4CBxMXbkZtn2VCPjHUX+ z6~g=x+e46X%S=_hYv%$X5?Nr@yX{QZ;Rmz!XQL$ zf{}$^NKk7W4?RhA9!h*`xmqOG8Z%1*0mm;NJEMHDv!KZfA(955w34<+$#IBB8`sv5K&lJ}wRWTyJqW^S z+NwMs?lV@ddyAI&?8S&P;B|#dKS6GyM>fiBM%wUrhO11aVoc+7wjszYICpvdN8`

    wkLN>==VYZlg-J8qMRGH1L?(0o%#A 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 UlC~a5k{_$Pf_q5R+7xFS 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 literal 0 HcmV?d00001 diff --git a/etc/services/core/compose.yml b/etc/services/core/compose.yml new file mode 100644 index 0000000..1754a9a --- /dev/null +++ b/etc/services/core/compose.yml @@ -0,0 +1,41 @@ +services: + postgres: + image: docker.io/postgres:16.3-alpine + user: ${UID}:${GID} + restart: unless-stopped + environment: + POSTGRES_USER: synapse + POSTGRES_PASSWORD: synapse-password + POSTGRES_DB: homeserver + POSTGRES_INITDB_ARGS: --lc-collate C --lc-ctype C --encoding UTF8 + volumes: + - ./postgres:/var/lib/postgresql/data + - /etc/passwd:/etc/passwd:ro + + synapse: + image: ghcr.io/element-hq/synapse:v1.114.0 + user: "${UID}:${GID}" + restart: unless-stopped + entrypoint: python + command: "-m synapse.app.homeserver -c /config/homeserver.yaml" + ports: + - "${SERVICE_SYNAPSE_BIND_PORT_CLIENT_API}:8008" + - "${SERVICE_SYNAPSE_BIND_PORT_FEDERATION_API}:8008" + volumes: + - ../../etc/services/core/synapse/config:/config:ro + - ./synapse/media-store:/media-store + + element-web: + image: docker.io/vectorim/element-web:v1.11.77 + user: "${UID}:${GID}" + restart: unless-stopped + ports: + - "${SERVICE_ELEMENT_WEB_BIND_PORT_HTTP}:8080" + volumes: + - ../../etc/services/core/element-web/nginx.conf:/etc/nginx/nginx.conf:ro + - ../../etc/services/core/element-web/config.json:/app/config.json:ro + +networks: + default: + name: ${NETWORK_NAME} + external: true diff --git a/etc/services/core/element-web/config.json b/etc/services/core/element-web/config.json new file mode 100644 index 0000000..80a2e68 --- /dev/null +++ b/etc/services/core/element-web/config.json @@ -0,0 +1,13 @@ +{ + "default_hs_url": "http://synapse.127.0.0.1.nip.io:42020", + "default_is_url": "https://vector.im", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "bug_report_endpoint_url": "https://riot.im/bugreports/submit", + "enableLabs": true, + "roomDirectory": { + "servers": [ + "matrix.org" + ] + } +} diff --git a/etc/services/core/element-web/nginx.conf b/etc/services/core/element-web/nginx.conf new file mode 100644 index 0000000..b72cb4e --- /dev/null +++ b/etc/services/core/element-web/nginx.conf @@ -0,0 +1,60 @@ +# This is a custom nginx configuration file that we use in the container (instead of the default one), +# because it allows us to run nginx with a non-root user. +# +# For this to work, the default vhost file (`/etc/nginx/conf.d/default.conf`) also needs to be removed. +# (mounting `/dev/null` over `/etc/nginx/conf.d/default.conf` works well) +# +# The following changes have been done compared to a default nginx configuration file: +# - default server port is changed (80 -> 8080), so that a non-root user can bind it +# - various temp paths are changed to `/tmp`, so that a non-root user can write to them +# - the `user` directive was removed, as we don't want nginx to switch users + +worker_processes 1; + +error_log /var/log/nginx/error.log warn; +pid /tmp/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + client_body_temp_path /tmp/client_body_temp; + proxy_temp_path /tmp/proxy_temp; + fastcgi_temp_path /tmp/fastcgi_temp; + uwsgi_temp_path /tmp/uwsgi_temp; + scgi_temp_path /tmp/scgi_temp; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + keepalive_timeout 65; + + #gzip on; + + server { + listen 8080; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + } +} \ No newline at end of file diff --git a/etc/services/core/synapse/config/homeserver.yaml b/etc/services/core/synapse/config/homeserver.yaml new file mode 100644 index 0000000..c3ea818 --- /dev/null +++ b/etc/services/core/synapse/config/homeserver.yaml @@ -0,0 +1,1457 @@ +#jinja2: lstrip_blocks: "True" +# Configuration file for Synapse. +# +# This is a YAML file: see [1] for a quick introduction. Note in particular +# that *indentation is important*: all the elements of a list or dictionary +# should have the same indentation. +# +# [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html + + +## Modules ## + +# Server admins can expand Synapse's functionality with external modules. +# +# See https://matrix-org.github.io/synapse/latest/modules/index.html for more +# documentation on how to configure or create custom modules for Synapse. +# +#modules: + #- module: my_super_module.MySuperClass + # config: + # do_thing: true + #- module: my_other_super_module.SomeClass + # config: {} +modules: [] + +## Server ## + +# The domain name of the server, with optional explicit port. +# This is used by remote servers to connect to this server, +# e.g. matrix.org, localhost:8080, etc. +# This is also the last part of your UserID. +# +server_name: "synapse.127.0.0.1.nip.io" + +# When running as a daemon, the file to store the pid in +# +pid_file: /homeserver.pid + +# The path to the web client which will be served at /_matrix/client/ +# if 'webclient' is configured under the 'listeners' configuration. +# +#web_client_location: "/path/to/web/root" + +# The public-facing base URL that clients use to access this HS +# (not including _matrix/...). This is the same URL a user would +# enter into the 'custom HS URL' field on their client. If you +# use synapse with a reverse proxy, this should be the URL to reach +# synapse via the proxy. +# +#public_baseurl: https://example.com/ + +# Set the soft limit on the number of file descriptors synapse can use +# Zero is used to indicate synapse should set the soft limit to the +# hard limit. +# +#soft_file_limit: 0 + +# Set to false to disable presence tracking on this homeserver. +# +#use_presence: false + +# Whether to require authentication to retrieve profile data (avatars, +# display names) of other users through the client API. Defaults to +# 'false'. Note that profile data is also available via the federation +# API, so this setting is of limited value if federation is enabled on +# the server. +# +#require_auth_for_profile_requests: true + +# If set to 'false', requires authentication to access the server's public rooms +# directory through the client API. Defaults to 'true'. +# +#allow_public_rooms_without_auth: false + +# If set to 'false', forbids any other homeserver to fetch the server's public +# rooms directory via federation. Defaults to 'true'. +# +#allow_public_rooms_over_federation: false + +# The default room version for newly created rooms. +# +# Known room versions are listed here: +# https://matrix.org/docs/spec/#complete-list-of-room-versions +# +# For example, for room version 1, default_room_version should be set +# to "1". +# +#default_room_version: "4" + +# The GC threshold parameters to pass to `gc.set_threshold`, if defined +# +#gc_thresholds: [700, 10, 10] + +# Set the limit on the returned events in the timeline in the get +# and sync operations. The default value is -1, means no upper limit. +# +#filter_timeline_limit: 5000 + +# Whether room invites to users on this server should be blocked +# (except those sent by local server admins). The default is False. +# +#block_non_admin_invites: True + +# Room searching +# +# If disabled, new messages will not be indexed for searching and users +# will receive errors when searching for messages. Defaults to enabled. +# +#enable_search: false + +# Restrict federation to the following whitelist of domains. +# N.B. we recommend also firewalling your federation listener to limit +# inbound federation traffic as early as possible, rather than relying +# purely on this application-layer restriction. If not specified, the +# default is to whitelist everything. +# +#federation_domain_whitelist: +# - lon.example.com +# - nyc.example.com +# - syd.example.com + +# Prevent federation requests from being sent to the following +# blacklist IP address CIDR ranges. If this option is not specified, or +# specified with an empty list, no ip range blacklist will be enforced. +# +# (0.0.0.0 and :: are always blacklisted, whether or not they are explicitly +# listed here, since they correspond to unroutable addresses.) +# +federation_ip_range_blacklist: + - '127.0.0.0/8' + - '10.0.0.0/8' + - '172.16.0.0/12' + - '192.168.0.0/16' + - '100.64.0.0/10' + - '169.254.0.0/16' + - '::1/128' + - 'fe80::/64' + - 'fc00::/7' + +# List of ports that Synapse should listen on, their purpose and their +# configuration. +# +# Options for each listener include: +# +# port: the TCP port to bind to +# +# bind_addresses: a list of local addresses to listen on. The default is +# 'all local interfaces'. +# +# type: the type of listener. Normally 'http', but other valid options are: +# 'manhole' (see docs/manhole.md), +# 'metrics' (see docs/metrics-howto.rst), +# 'replication' (see docs/workers.rst). +# +# tls: set to true to enable TLS for this listener. Will use the TLS +# key/cert specified in tls_private_key_path / tls_certificate_path. +# +# x_forwarded: Only valid for an 'http' listener. Set to true to use the +# X-Forwarded-For header as the client IP. Useful when Synapse is +# behind a reverse-proxy. +# +# resources: Only valid for an 'http' listener. A list of resources to host +# on this port. Options for each resource are: +# +# names: a list of names of HTTP resources. See below for a list of +# valid resource names. +# +# compress: set to true to enable HTTP comression for this resource. +# +# additional_resources: Only valid for an 'http' listener. A map of +# additional endpoints which should be loaded via dynamic modules. +# +# Valid resource names are: +# +# client: the client-server API (/_matrix/client), and the synapse admin +# API (/_synapse/admin). Also implies 'media' and 'static'. +# +# consent: user consent forms (/_matrix/consent). See +# docs/consent_tracking.md. +# +# federation: the server-server API (/_matrix/federation). Also implies +# 'media', 'keys', 'openid' +# +# keys: the key discovery API (/_matrix/keys). +# +# media: the media API (/_matrix/media). +# +# metrics: the metrics interface. See docs/metrics-howto.rst. +# +# openid: OpenID authentication. +# +# replication: the HTTP replication API (/_synapse/replication). See +# docs/workers.rst. +# +# static: static resources under synapse/static (/_matrix/static). (Mostly +# useful for 'fallback authentication'.) +# +# webclient: A web client. Requires web_client_location to be set. +# +listeners: + # TLS-enabled listener: for when matrix traffic is sent directly to synapse. + # + # Disabled by default. To enable it, uncomment the following. (Note that you + # will also need to give Synapse a TLS key and certificate: see the TLS section + # below.) + # + #- port: 8448 + # type: http + # tls: true + # resources: + # - names: [client, federation] + + # Unsecure HTTP listener: for when matrix traffic passes through a reverse proxy + # that unwraps TLS. + # + # If you plan to use a reverse proxy, please see + # https://github.com/matrix-org/synapse/blob/master/docs/reverse_proxy.rst. + # + - port: 8008 + tls: false + type: http + x_forwarded: true + + resources: + - names: [client, federation] + compress: false + + # example additional_resources: + # + #additional_resources: + # "/_matrix/my/custom/endpoint": + # module: my_module.CustomRequestHandler + # config: {} + + # Turn on the twisted ssh manhole service on localhost on the given + # port. + # + #- port: 9000 + # bind_addresses: ['::1', '127.0.0.1'] + # type: manhole + + +## Homeserver blocking ## + +# How to reach the server admin, used in ResourceLimitError +# +#admin_contact: 'mailto:admin@server.com' + +# Global blocking +# +#hs_disabled: False +#hs_disabled_message: 'Human readable reason for why the HS is blocked' +#hs_disabled_limit_type: 'error code(str), to help clients decode reason' + +# Monthly Active User Blocking +# +# Used in cases where the admin or server owner wants to limit to the +# number of monthly active users. +# +# 'limit_usage_by_mau' disables/enables monthly active user blocking. When +# anabled and a limit is reached the server returns a 'ResourceLimitError' +# with error type Codes.RESOURCE_LIMIT_EXCEEDED +# +# 'max_mau_value' is the hard limit of monthly active users above which +# the server will start blocking user actions. +# +# 'mau_trial_days' is a means to add a grace period for active users. It +# means that users must be active for this number of days before they +# can be considered active and guards against the case where lots of users +# sign up in a short space of time never to return after their initial +# session. +# +#limit_usage_by_mau: False +#max_mau_value: 50 +#mau_trial_days: 2 + +# If enabled, the metrics for the number of monthly active users will +# be populated, however no one will be limited. If limit_usage_by_mau +# is true, this is implied to be true. +# +#mau_stats_only: False + +# Sometimes the server admin will want to ensure certain accounts are +# never blocked by mau checking. These accounts are specified here. +# +#mau_limit_reserved_threepids: +# - medium: 'email' +# address: 'reserved_user@example.com' + +# Used by phonehome stats to group together related servers. +#server_context: context + +# Whether to require a user to be in the room to add an alias to it. +# Defaults to 'true'. +# +#require_membership_for_aliases: false + +# Whether to allow per-room membership profiles through the send of membership +# events with profile information that differ from the target's global profile. +# Defaults to 'true'. +# +#allow_per_room_profiles: false + + +## TLS ## + +# PEM-encoded X509 certificate for TLS. +# This certificate, as of Synapse 1.0, will need to be a valid and verifiable +# certificate, signed by a recognised Certificate Authority. +# +# See 'ACME support' below to enable auto-provisioning this certificate via +# Let's Encrypt. +# +# If supplying your own, be sure to use a `.pem` file that includes the +# full certificate chain including any intermediate certificates (for +# instance, if using certbot, use `fullchain.pem` as your certificate, +# not `cert.pem`). +# +#tls_certificate_path: "/data/synapse.127.0.0.1.nip.io.tls.crt" + +# PEM-encoded private key for TLS +# +#tls_private_key_path: "/data/synapse.127.0.0.1.nip.io.tls.key" + +# Whether to verify TLS server certificates for outbound federation requests. +# +# Defaults to `true`. To disable certificate verification, uncomment the +# following line. +# +#federation_verify_certificates: false + +# The minimum TLS version that will be used for outbound federation requests. +# +# Defaults to `1`. Configurable to `1`, `1.1`, `1.2`, or `1.3`. Note +# that setting this value higher than `1.2` will prevent federation to most +# of the public Matrix network: only configure it to `1.3` if you have an +# entirely private federation setup and you can ensure TLS 1.3 support. +# +#federation_client_minimum_tls_version: 1.2 + +# Skip federation certificate verification on the following whitelist +# of domains. +# +# This setting should only be used in very specific cases, such as +# federation over Tor hidden services and similar. For private networks +# of homeservers, you likely want to use a private CA instead. +# +# Only effective if federation_verify_certicates is `true`. +# +#federation_certificate_verification_whitelist: +# - lon.example.com +# - *.domain.com +# - *.onion + +# List of custom certificate authorities for federation traffic. +# +# This setting should only normally be used within a private network of +# homeservers. +# +# Note that this list will replace those that are provided by your +# operating environment. Certificates must be in PEM format. +# +#federation_custom_ca_list: +# - myCA1.pem +# - myCA2.pem +# - myCA3.pem + +# ACME support: This will configure Synapse to request a valid TLS certificate +# for your configured `server_name` via Let's Encrypt. +# +# Note that provisioning a certificate in this way requires port 80 to be +# routed to Synapse so that it can complete the http-01 ACME challenge. +# By default, if you enable ACME support, Synapse will attempt to listen on +# port 80 for incoming http-01 challenges - however, this will likely fail +# with 'Permission denied' or a similar error. +# +# There are a couple of potential solutions to this: +# +# * If you already have an Apache, Nginx, or similar listening on port 80, +# you can configure Synapse to use an alternate port, and have your web +# server forward the requests. For example, assuming you set 'port: 8009' +# below, on Apache, you would write: +# +# ProxyPass /.well-known/acme-challenge http://localhost:8009/.well-known/acme-challenge +# +# * Alternatively, you can use something like `authbind` to give Synapse +# permission to listen on port 80. +# +acme: + # ACME support is disabled by default. Uncomment the following line + # (and tls_certificate_path and tls_private_key_path above) to enable it. + # + #enabled: true + + # Endpoint to use to request certificates. If you only want to test, + # use Let's Encrypt's staging url: + # https://acme-staging.api.letsencrypt.org/directory + # + #url: https://acme-v01.api.letsencrypt.org/directory + + # Port number to listen on for the HTTP-01 challenge. Change this if + # you are forwarding connections through Apache/Nginx/etc. + # + #port: 80 + + # Local addresses to listen on for incoming connections. + # Again, you may want to change this if you are forwarding connections + # through Apache/Nginx/etc. + # + #bind_addresses: ['::', '0.0.0.0'] + + # How many days remaining on a certificate before it is renewed. + # + #reprovision_threshold: 30 + + # The domain that the certificate should be for. Normally this + # should be the same as your Matrix domain (i.e., 'server_name'), but, + # by putting a file at 'https:///.well-known/matrix/server', + # you can delegate incoming traffic to another server. If you do that, + # you should give the target of the delegation here. + # + # For example: if your 'server_name' is 'example.com', but + # 'https://example.com/.well-known/matrix/server' delegates to + # 'matrix.example.com', you should put 'matrix.example.com' here. + # + # If not set, defaults to your 'server_name'. + # + #domain: matrix.example.com + + # file to use for the account key. This will be generated if it doesn't + # exist. + # + # If unspecified, we will use CONFDIR/client.key. + # + account_key_file: /data/acme_account.key + +# List of allowed TLS fingerprints for this server to publish along +# with the signing keys for this server. Other matrix servers that +# make HTTPS requests to this server will check that the TLS +# certificates returned by this server match one of the fingerprints. +# +# Synapse automatically adds the fingerprint of its own certificate +# to the list. So if federation traffic is handled directly by synapse +# then no modification to the list is required. +# +# If synapse is run behind a load balancer that handles the TLS then it +# will be necessary to add the fingerprints of the certificates used by +# the loadbalancers to this list if they are different to the one +# synapse is using. +# +# Homeservers are permitted to cache the list of TLS fingerprints +# returned in the key responses up to the "valid_until_ts" returned in +# key. It may be necessary to publish the fingerprints of a new +# certificate and wait until the "valid_until_ts" of the previous key +# responses have passed before deploying it. +# +# You can calculate a fingerprint from a given TLS listener via: +# openssl s_client -connect $host:$port < /dev/null 2> /dev/null | +# openssl x509 -outform DER | openssl sha256 -binary | base64 | tr -d '=' +# or by checking matrix.org/federationtester/api/report?server_name=$host +# +#tls_fingerprints: [{"sha256": ""}] + + + +## Database ## + +database: + # The database engine name + name: "psycopg2" + args: + user: "synapse" + password: "synapse-password" + database: "homeserver" + host: "postgres" + cp_min: 5 + cp_max: 10 + +# Number of events to cache in memory. +# +#event_cache_size: 10K + + +## Logging ## + +# A yaml python logging config file +# +log_config: "/config/synapse.127.0.0.1.nip.io.log.config" + + +## Ratelimiting ## + +# Ratelimiting settings for client actions (registration, login, messaging). +# +# Each ratelimiting configuration is made of two parameters: +# - per_second: number of requests a client can send per second. +# - burst_count: number of requests a client can send before being throttled. +# +# Synapse currently uses the following configurations: +# - one for messages that ratelimits sending based on the account the client +# is using +# - one for registration that ratelimits registration requests based on the +# client's IP address. +# - one for login that ratelimits login requests based on the client's IP +# address. +# - one for login that ratelimits login requests based on the account the +# client is attempting to log into. +# - one for login that ratelimits login requests based on the account the +# client is attempting to log into, based on the amount of failed login +# attempts for this account. +# +# The defaults are as shown below. +# +#rc_message: +# per_second: 0.2 +# burst_count: 10 +# +#rc_registration: +# per_second: 0.17 +# burst_count: 3 +# +#rc_login: +# address: +# per_second: 0.17 +# burst_count: 3 +# account: +# per_second: 0.17 +# burst_count: 3 +# failed_attempts: +# per_second: 0.17 +# burst_count: 3 +rc_message: + per_second: 100 + burst_count: 1000 + +rc_registration: + per_second: 100 + burst_count: 1000 + +rc_login: + address: + per_second: 100 + burst_count: 1000 + account: + per_second: 100 + burst_count: 1000 + failed_attempts: + per_second: 100 + burst_count: 1000 + + +# Ratelimiting settings for incoming federation +# +# The rc_federation configuration is made up of the following settings: +# - window_size: window size in milliseconds +# - sleep_limit: number of federation requests from a single server in +# a window before the server will delay processing the request. +# - sleep_delay: duration in milliseconds to delay processing events +# from remote servers by if they go over the sleep limit. +# - reject_limit: maximum number of concurrent federation requests +# allowed from a single server +# - concurrent: number of federation requests to concurrently process +# from a single server +# +# The defaults are as shown below. +# +#rc_federation: +# window_size: 1000 +# sleep_limit: 10 +# sleep_delay: 500 +# reject_limit: 50 +# concurrent: 3 + +# Target outgoing federation transaction frequency for sending read-receipts, +# per-room. +# +# If we end up trying to send out more read-receipts, they will get buffered up +# into fewer transactions. +# +#federation_rr_transactions_per_room_per_second: 50 + + + +# Directory where uploaded images and attachments are stored. +# +media_store_path: "/media-store" + +# Media storage providers allow media to be stored in different +# locations. +# +#media_storage_providers: +# - module: file_system +# # Whether to write new local files. +# store_local: false +# # Whether to write new remote media +# store_remote: false +# # Whether to block upload requests waiting for write to this +# # provider to complete +# store_synchronous: false +# config: +# directory: /mnt/some/other/directory + +# Directory where in-progress uploads are stored. +# +uploads_path: "/tmp" + +# The largest allowed upload size in bytes +# +#max_upload_size: 10M + +# Maximum number of pixels that will be thumbnailed +# +#max_image_pixels: 32M + +# Whether to generate new thumbnails on the fly to precisely match +# the resolution requested by the client. If true then whenever +# a new resolution is requested by the client the server will +# generate a new thumbnail. If false the server will pick a thumbnail +# from a precalculated list. +# +#dynamic_thumbnails: false + +# List of thumbnails to precalculate when an image is uploaded. +# +#thumbnail_sizes: +# - width: 32 +# height: 32 +# method: crop +# - width: 96 +# height: 96 +# method: crop +# - width: 320 +# height: 240 +# method: scale +# - width: 640 +# height: 480 +# method: scale +# - width: 800 +# height: 600 +# method: scale + +# Is the preview URL API enabled? +# +# 'false' by default: uncomment the following to enable it (and specify a +# url_preview_ip_range_blacklist blacklist). +# +#url_preview_enabled: true + +# List of IP address CIDR ranges that the URL preview spider is denied +# from accessing. There are no defaults: you must explicitly +# specify a list for URL previewing to work. You should specify any +# internal services in your network that you do not want synapse to try +# to connect to, otherwise anyone in any Matrix room could cause your +# synapse to issue arbitrary GET requests to your internal services, +# causing serious security issues. +# +# (0.0.0.0 and :: are always blacklisted, whether or not they are explicitly +# listed here, since they correspond to unroutable addresses.) +# +# This must be specified if url_preview_enabled is set. It is recommended that +# you uncomment the following list as a starting point. +# +#url_preview_ip_range_blacklist: +# - '127.0.0.0/8' +# - '10.0.0.0/8' +# - '172.16.0.0/12' +# - '192.168.0.0/16' +# - '100.64.0.0/10' +# - '169.254.0.0/16' +# - '::1/128' +# - 'fe80::/64' +# - 'fc00::/7' + +# List of IP address CIDR ranges that the URL preview spider is allowed +# to access even if they are specified in url_preview_ip_range_blacklist. +# This is useful for specifying exceptions to wide-ranging blacklisted +# target IP ranges - e.g. for enabling URL previews for a specific private +# website only visible in your network. +# +#url_preview_ip_range_whitelist: +# - '192.168.1.1' + +# Optional list of URL matches that the URL preview spider is +# denied from accessing. You should use url_preview_ip_range_blacklist +# in preference to this, otherwise someone could define a public DNS +# entry that points to a private IP address and circumvent the blacklist. +# This is more useful if you know there is an entire shape of URL that +# you know that will never want synapse to try to spider. +# +# Each list entry is a dictionary of url component attributes as returned +# by urlparse.urlsplit as applied to the absolute form of the URL. See +# https://docs.python.org/2/library/urlparse.html#urlparse.urlsplit +# The values of the dictionary are treated as an filename match pattern +# applied to that component of URLs, unless they start with a ^ in which +# case they are treated as a regular expression match. If all the +# specified component matches for a given list item succeed, the URL is +# blacklisted. +# +#url_preview_url_blacklist: +# # blacklist any URL with a username in its URI +# - username: '*' +# +# # blacklist all *.google.com URLs +# - netloc: 'google.com' +# - netloc: '*.google.com' +# +# # blacklist all plain HTTP URLs +# - scheme: 'http' +# +# # blacklist http(s)://www.acme.com/foo +# - netloc: 'www.acme.com' +# path: '/foo' +# +# # blacklist any URL with a literal IPv4 address +# - netloc: '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + +# The largest allowed URL preview spidering size in bytes +# +#max_spider_size: 10M + + +## Captcha ## +# See docs/CAPTCHA_SETUP for full details of configuring this. + +# This Home Server's ReCAPTCHA public key. +# +#recaptcha_public_key: "YOUR_PUBLIC_KEY" + +# This Home Server's ReCAPTCHA private key. +# +#recaptcha_private_key: "YOUR_PRIVATE_KEY" + +# Enables ReCaptcha checks when registering, preventing signup +# unless a captcha is answered. Requires a valid ReCaptcha +# public/private key. +# +#enable_registration_captcha: false + +# A secret key used to bypass the captcha test entirely. +# +#captcha_bypass_secret: "YOUR_SECRET_HERE" + +# The API endpoint to use for verifying m.login.recaptcha responses. +# +#recaptcha_siteverify_api: "https://www.recaptcha.net/recaptcha/api/siteverify" + + +## TURN ## + +# The public URIs of the TURN server to give to clients +# +#turn_uris: [] + +# The shared secret used to compute passwords for the TURN server +# +#turn_shared_secret: "YOUR_SHARED_SECRET" + +# The Username and password if the TURN server needs them and +# does not use a token +# +#turn_username: "TURNSERVER_USERNAME" +#turn_password: "TURNSERVER_PASSWORD" + +# How long generated TURN credentials last +# +#turn_user_lifetime: 1h + +# Whether guests should be allowed to use the TURN server. +# This defaults to True, otherwise VoIP will be unreliable for guests. +# However, it does introduce a slight security risk as it allows users to +# connect to arbitrary endpoints without having first signed up for a +# valid account (e.g. by passing a CAPTCHA). +# +#turn_allow_guests: True + + +## Registration ## +# +# Registration can be rate-limited using the parameters in the "Ratelimiting" +# section of this file. + +# Enable registration for new users. +# +enable_registration: true + +# Optional account validity configuration. This allows for accounts to be denied +# any request after a given period. +# +# ``enabled`` defines whether the account validity feature is enabled. Defaults +# to False. +# +# ``period`` allows setting the period after which an account is valid +# after its registration. When renewing the account, its validity period +# will be extended by this amount of time. This parameter is required when using +# the account validity feature. +# +# ``renew_at`` is the amount of time before an account's expiry date at which +# Synapse will send an email to the account's email address with a renewal link. +# This needs the ``email`` and ``public_baseurl`` configuration sections to be +# filled. +# +# ``renew_email_subject`` is the subject of the email sent out with the renewal +# link. ``%(app)s`` can be used as a placeholder for the ``app_name`` parameter +# from the ``email`` section. +# +# Once this feature is enabled, Synapse will look for registered users without an +# expiration date at startup and will add one to every account it found using the +# current settings at that time. +# This means that, if a validity period is set, and Synapse is restarted (it will +# then derive an expiration date from the current validity period), and some time +# after that the validity period changes and Synapse is restarted, the users' +# expiration dates won't be updated unless their account is manually renewed. This +# date will be randomly selected within a range [now + period - d ; now + period], +# where d is equal to 10% of the validity period. +# +#account_validity: +# enabled: True +# period: 6w +# renew_at: 1w +# renew_email_subject: "Renew your %(app)s account" + +# Time that a user's session remains valid for, after they log in. +# +# Note that this is not currently compatible with guest logins. +# +# Note also that this is calculated at login time: changes are not applied +# retrospectively to users who have already logged in. +# +# By default, this is infinite. +# +#session_lifetime: 24h + +# The user must provide all of the below types of 3PID when registering. +# +#registrations_require_3pid: +# - email +# - msisdn + +# Explicitly disable asking for MSISDNs from the registration +# flow (overrides registrations_require_3pid if MSISDNs are set as required) +# +#disable_msisdn_registration: true + +# Mandate that users are only allowed to associate certain formats of +# 3PIDs with accounts on this server. +# +#allowed_local_3pids: +# - medium: email +# pattern: '.*@matrix\.org' +# - medium: email +# pattern: '.*@vector\.im' +# - medium: msisdn +# pattern: '\+44' + +# Enable 3PIDs lookup requests to identity servers from this server. +# +#enable_3pid_lookup: true + +registration_requires_token: true + +# If set, allows registration of standard or admin accounts by anyone who +# has the shared secret, even if registration is otherwise disabled. +# +registration_shared_secret: "y4aTYam;zxKZ#MnaHRrGDPs4&dS*3VEv_&Ck_;pe1=CrtM8*=7" + +# Set the number of bcrypt rounds used to generate password hash. +# Larger numbers increase the work factor needed to generate the hash. +# The default number is 12 (which equates to 2^12 rounds). +# N.B. that increasing this will exponentially increase the time required +# to register or login - e.g. 24 => 2^24 rounds which will take >20 mins. +# +#bcrypt_rounds: 12 + +# Allows users to register as guests without a password/email/etc, and +# participate in rooms hosted on this server which have been made +# accessible to anonymous users. +# +#allow_guest_access: false + +# The identity server which we suggest that clients should use when users log +# in on this server. +# +# (By default, no suggestion is made, so it is left up to the client. +# This setting is ignored unless public_baseurl is also set.) +# +#default_identity_server: https://matrix.org + +# The list of identity servers trusted to verify third party +# identifiers by this server. +# +# Also defines the ID server which will be called when an account is +# deactivated (one will be picked arbitrarily). +# +#trusted_third_party_id_servers: +# - matrix.org +# - vector.im + +# Users who register on this homeserver will automatically be joined +# to these rooms +# +#auto_join_rooms: +# - "#example:example.com" + +# Where auto_join_rooms are specified, setting this flag ensures that the +# the rooms exist by creating them when the first user on the +# homeserver registers. +# Setting to false means that if the rooms are not manually created, +# users cannot be auto-joined since they do not exist. +# +#autocreate_auto_join_rooms: true + + +## Metrics ### + +# Enable collection and rendering of performance metrics +# +#enable_metrics: False + +# Enable sentry integration +# NOTE: While attempts are made to ensure that the logs don't contain +# any sensitive information, this cannot be guaranteed. By enabling +# this option the sentry server may therefore receive sensitive +# information, and it in turn may then diseminate sensitive information +# through insecure notification channels if so configured. +# +#sentry: +# dsn: "..." + +# Whether or not to report anonymized homeserver usage statistics. +report_stats: false + + +## API Configuration ## + +# A list of event types that will be included in the room_invite_state +# +#room_invite_state_types: +# - "m.room.join_rules" +# - "m.room.canonical_alias" +# - "m.room.avatar" +# - "m.room.encryption" +# - "m.room.name" + + +# A list of application service config files to use +# +#app_service_config_files: +# - app_service_1.yaml +# - app_service_2.yaml + +# Uncomment to enable tracking of application service IP addresses. Implicitly +# enables MAU tracking for application service users. +# +#track_appservice_user_ips: True + + +# a secret which is used to sign access tokens. If none is specified, +# the registration_shared_secret is used, if one is given; otherwise, +# a secret key is derived from the signing key. +# +macaroon_secret_key: "q_&1433pm~0X#wN@JF=f+aN=RknLk^U84+7J8fwGrWDQv2;.,F" + +# Used to enable access token expiration. +# +#expire_access_token: False + +# a secret which is used to calculate HMACs for form values, to stop +# falsification of values. Must be specified for the User Consent +# forms to work. +# +form_secret: "g2:tvyaCbugJrP#1w.+6Eta:xxIfvl*HIF:o#8+qTbU7tPlUhY" + +## Signing Keys ## + +# Path to the signing key to sign messages with +# +signing_key_path: "/config/synapse.127.0.0.1.nip.io.signing.key" + +# The keys that the server used to sign messages with but won't use +# to sign new messages. E.g. it has lost its private key +# +#old_signing_keys: +# "ed25519:auto": +# # Base64 encoded public key +# key: "The public part of your old signing key." +# # Millisecond POSIX timestamp when the key expired. +# expired_ts: 123456789123 + +# How long key response published by this server is valid for. +# Used to set the valid_until_ts in /key/v2 APIs. +# Determines how quickly servers will query to check which keys +# are still valid. +# +#key_refresh_interval: 1d + +# The trusted servers to download signing keys from. +# +# When we need to fetch a signing key, each server is tried in parallel. +# +# Normally, the connection to the key server is validated via TLS certificates. +# Additional security can be provided by configuring a `verify key`, which +# will make synapse check that the response is signed by that key. +# +# This setting supercedes an older setting named `perspectives`. The old format +# is still supported for backwards-compatibility, but it is deprecated. +# +# Options for each entry in the list include: +# +# server_name: the name of the server. required. +# +# verify_keys: an optional map from key id to base64-encoded public key. +# If specified, we will check that the response is signed by at least +# one of the given keys. +# +# accept_keys_insecurely: a boolean. Normally, if `verify_keys` is unset, +# and federation_verify_certificates is not `true`, synapse will refuse +# to start, because this would allow anyone who can spoof DNS responses +# to masquerade as the trusted key server. If you know what you are doing +# and are sure that your network environment provides a secure connection +# to the key server, you can set this to `true` to override this +# behaviour. +# +# An example configuration might look like: +# +#trusted_key_servers: +# - server_name: "my_trusted_server.example.com" +# verify_keys: +# "ed25519:auto": "abcdefghijklmnopqrstuvwxyzabcdefghijklmopqr" +# - server_name: "my_other_trusted_server.example.com" +# +# The default configuration is: +# +#trusted_key_servers: +# - server_name: "matrix.org" + + +# Enable SAML2 for registration and login. Uses pysaml2. +# +# `sp_config` is the configuration for the pysaml2 Service Provider. +# See pysaml2 docs for format of config. +# +# Default values will be used for the 'entityid' and 'service' settings, +# so it is not normally necessary to specify them unless you need to +# override them. +# +# Once SAML support is enabled, a metadata file will be exposed at +# https://:/_matrix/saml2/metadata.xml, which you may be able to +# use to configure your SAML IdP with. Alternatively, you can manually configure +# the IdP to use an ACS location of +# https://:/_matrix/saml2/authn_response. +# +#saml2_config: +# sp_config: +# # point this to the IdP's metadata. You can use either a local file or +# # (preferably) a URL. +# metadata: +# #local: ["saml2/idp.xml"] +# remote: +# - url: https://our_idp/metadata.xml +# +# # By default, the user has to go to our login page first. If you'd like to +# # allow IdP-initiated login, set 'allow_unsolicited: True' in a +# # 'service.sp' section: +# # +# #service: +# # sp: +# # allow_unsolicited: True +# +# # The examples below are just used to generate our metadata xml, and you +# # may well not need it, depending on your setup. Alternatively you +# # may need a whole lot more detail - see the pysaml2 docs! +# +# description: ["My awesome SP", "en"] +# name: ["Test SP", "en"] +# +# organization: +# name: Example com +# display_name: +# - ["Example co", "en"] +# url: "http://example.com" +# +# contact_person: +# - given_name: Bob +# sur_name: "the Sysadmin" +# email_address": ["admin@example.com"] +# contact_type": technical +# +# # Instead of putting the config inline as above, you can specify a +# # separate pysaml2 configuration file: +# # +# config_path: "/data/sp_conf.py" +# +# # the lifetime of a SAML session. This defines how long a user has to +# # complete the authentication process, if allow_unsolicited is unset. +# # The default is 5 minutes. +# # +# # saml_session_lifetime: 5m + + + +# Enable CAS for registration and login. +# +#cas_config: +# enabled: true +# server_url: "https://cas-server.com" +# service_url: "https://homeserver.domain.com:8448" +# #required_attributes: +# # name: value + + +# The JWT needs to contain a globally unique "sub" (subject) claim. +# +#jwt_config: +# enabled: true +# secret: "a secret" +# algorithm: "HS256" + + +password_config: + # Uncomment to disable password login + # + #enabled: false + + # Uncomment to disable authentication against the local password + # database. This is ignored if `enabled` is false, and is only useful + # if you have other password_providers. + # + #localdb_enabled: false + + # Uncomment and change to a secret random string for extra security. + # DO NOT CHANGE THIS AFTER INITIAL SETUP! + # + #pepper: "EVEN_MORE_SECRET" + + + +# Enable sending emails for password resets, notification events or +# account expiry notices +# +# If your SMTP server requires authentication, the optional smtp_user & +# smtp_pass variables should be used +# +#email: +# enable_notifs: false +# smtp_host: "localhost" +# smtp_port: 25 # SSL: 465, STARTTLS: 587 +# smtp_user: "exampleusername" +# smtp_pass: "examplepassword" +# require_transport_security: False +# notif_from: "Your Friendly %(app)s Home Server " +# app_name: Matrix +# +# # Enable email notifications by default +# # +# notif_for_new_users: True +# +# # Defining a custom URL for Riot is only needed if email notifications +# # should contain links to a self-hosted installation of Riot; when set +# # the "app_name" setting is ignored +# # +# riot_base_url: "http://localhost/riot" +# +# # Enable sending password reset emails via the configured, trusted +# # identity servers +# # +# # IMPORTANT! This will give a malicious or overtaken identity server +# # the ability to reset passwords for your users! Make absolutely sure +# # that you want to do this! It is strongly recommended that password +# # reset emails be sent by the homeserver instead +# # +# # If this option is set to false and SMTP options have not been +# # configured, resetting user passwords via email will be disabled +# # +# #trust_identity_server_for_password_resets: false +# +# # Configure the time that a validation email or text message code +# # will expire after sending +# # +# # This is currently used for password resets +# # +# #validation_token_lifetime: 1h +# +# # Template directory. All template files should be stored within this +# # directory. If not set, default templates from within the Synapse +# # package will be used +# # +# # For the list of default templates, please see +# # https://github.com/matrix-org/synapse/tree/master/synapse/res/templates +# # +# #template_dir: res/templates +# +# # Templates for email notifications +# # +# notif_template_html: notif_mail.html +# notif_template_text: notif_mail.txt +# +# # Templates for account expiry notices +# # +# expiry_template_html: notice_expiry.html +# expiry_template_text: notice_expiry.txt +# +# # Templates for password reset emails sent by the homeserver +# # +# #password_reset_template_html: password_reset.html +# #password_reset_template_text: password_reset.txt +# +# # Templates for password reset success and failure pages that a user +# # will see after attempting to reset their password +# # +# #password_reset_template_success_html: password_reset_success.html +# #password_reset_template_failure_html: password_reset_failure.html + + +#password_providers: +# - module: "ldap_auth_provider.LdapAuthProvider" +# config: +# enabled: true +# uri: "ldap://ldap.example.com:389" +# start_tls: true +# base: "ou=users,dc=example,dc=com" +# attributes: +# uid: "cn" +# mail: "email" +# name: "givenName" +# #bind_dn: +# #bind_password: +# #filter: "(objectClass=posixAccount)" +password_providers: [] + + +# Clients requesting push notifications can either have the body of +# the message sent in the notification poke along with other details +# like the sender, or just the event ID and room ID (`event_id_only`). +# If clients choose the former, this option controls whether the +# notification request includes the content of the event (other details +# like the sender are still included). For `event_id_only` push, it +# has no effect. +# +# For modern android devices the notification content will still appear +# because it is loaded by the app. iPhone, however will send a +# notification saying only that a message arrived and who it came from. +# +#push: +# include_content: true + + +#spam_checker: +# module: "my_custom_project.SuperSpamChecker" +# config: +# example_option: 'things' + + + +# User Directory configuration +# +# 'enabled' defines whether users can search the user directory. If +# false then empty responses are returned to all queries. Defaults to +# true. +# +# 'search_all_users' defines whether to search all users visible to your HS +# when searching the user directory, rather than limiting to users visible +# in public rooms. Defaults to false. If you set it True, you'll have to +# rebuild the user_directory search indexes, see +# https://github.com/matrix-org/synapse/blob/master/docs/user_directory.md +# +#user_directory: +# enabled: true +# search_all_users: false + + +# User Consent configuration +# +# for detailed instructions, see +# https://github.com/matrix-org/synapse/blob/master/docs/consent_tracking.md +# +# Parts of this section are required if enabling the 'consent' resource under +# 'listeners', in particular 'template_dir' and 'version'. +# +# 'template_dir' gives the location of the templates for the HTML forms. +# This directory should contain one subdirectory per language (eg, 'en', 'fr'), +# and each language directory should contain the policy document (named as +# '.html') and a success page (success.html). +# +# 'version' specifies the 'current' version of the policy document. It defines +# the version to be served by the consent resource if there is no 'v' +# parameter. +# +# 'server_notice_content', if enabled, will send a user a "Server Notice" +# asking them to consent to the privacy policy. The 'server_notices' section +# must also be configured for this to work. Notices will *not* be sent to +# guest users unless 'send_server_notice_to_guests' is set to true. +# +# 'block_events_error', if set, will block any attempts to send events +# until the user consents to the privacy policy. The value of the setting is +# used as the text of the error. +# +# 'require_at_registration', if enabled, will add a step to the registration +# process, similar to how captcha works. Users will be required to accept the +# policy before their account is created. +# +# 'policy_name' is the display name of the policy users will see when registering +# for an account. Has no effect unless `require_at_registration` is enabled. +# Defaults to "Privacy Policy". +# +#user_consent: +# template_dir: res/templates/privacy +# version: 1.0 +# server_notice_content: +# msgtype: m.text +# body: >- +# To continue using this homeserver you must review and agree to the +# terms and conditions at %(consent_uri)s +# send_server_notice_to_guests: True +# block_events_error: >- +# To continue using this homeserver you must review and agree to the +# terms and conditions at %(consent_uri)s +# require_at_registration: False +# policy_name: Privacy Policy +# + + + +# Local statistics collection. Used in populating the room directory. +# +# 'bucket_size' controls how large each statistics timeslice is. It can +# be defined in a human readable short form -- e.g. "1d", "1y". +# +# 'retention' controls how long historical statistics will be kept for. +# It can be defined in a human readable short form -- e.g. "1d", "1y". +# +# +#stats: +# enabled: true +# bucket_size: 1d +# retention: 1y + + +# Server Notices room configuration +# +# Uncomment this section to enable a room which can be used to send notices +# from the server to users. It is a special room which cannot be left; notices +# come from a special "notices" user id. +# +# If you uncomment this section, you *must* define the system_mxid_localpart +# setting, which defines the id of the user which will be used to send the +# notices. +# +# It's also possible to override the room name, the display name of the +# "notices" user, and the avatar for the user. +# +#server_notices: +# system_mxid_localpart: notices +# system_mxid_display_name: "Server Notices" +# system_mxid_avatar_url: "mxc://server.com/oumMVlgDnLYFaPVkExemNVVZ" +# room_name: "Server Notices" + + + +# Uncomment to disable searching the public room list. When disabled +# blocks searching local and remote room lists for local and remote +# users by always returning an empty list for all queries. +# +#enable_room_list_search: false + +# The `alias_creation` option controls who's allowed to create aliases +# on this server. +# +# The format of this option is a list of rules that contain globs that +# match against user_id, room_id and the new alias (fully qualified with +# server name). The action in the first rule that matches is taken, +# which can currently either be "allow" or "deny". +# +# Missing user_id/room_id/alias fields default to "*". +# +# If no rules match the request is denied. An empty list means no one +# can create aliases. +# +# Options for the rules include: +# +# user_id: Matches against the creator of the alias +# alias: Matches against the alias being created +# room_id: Matches against the room ID the alias is being pointed at +# action: Whether to "allow" or "deny" the request if the rule matches +# +# The default is: +# +#alias_creation_rules: +# - user_id: "*" +# alias: "*" +# room_id: "*" +# action: allow + +# The `room_list_publication_rules` option controls who can publish and +# which rooms can be published in the public room list. +# +# The format of this option is the same as that for +# `alias_creation_rules`. +# +# If the room has one or more aliases associated with it, only one of +# the aliases needs to match the alias rule. If there are no aliases +# then only rules with `alias: *` match. +# +# If no rules match the request is denied. An empty list means no one +# can publish rooms. +# +# Options for the rules include: +# +# user_id: Matches agaisnt the creator of the alias +# room_id: Matches against the room ID being published +# alias: Matches against any current local or canonical aliases +# associated with the room +# action: Whether to "allow" or "deny" the request if the rule matches +# +# The default is: +# +#room_list_publication_rules: +# - user_id: "*" +# alias: "*" +# room_id: "*" +# action: allow + + +# Server admins can define a Python module that implements extra rules for +# allowing or denying incoming events. In order to work, this module needs to +# override the methods defined in synapse/events/third_party_rules.py. +# +# This feature is designed to be used in closed federations only, where each +# participating server enforces the same rules. +# +#third_party_event_rules: +# module: "my_custom_project.SuperRulesSet" +# config: +# example_option: 'things' + + +## Opentracing ## + +# These settings enable opentracing, which implements distributed tracing. +# This allows you to observe the causal chains of events across servers +# including requests, key lookups etc., across any server running +# synapse or any other other services which supports opentracing +# (specifically those implemented with Jaeger). +# +opentracing: + # tracing is disabled by default. Uncomment the following line to enable it. + # + #enabled: true + + # The list of homeservers we wish to send and receive span contexts and span baggage. + # See docs/opentracing.rst + # This is a list of regexes which are matched against the server_name of the + # homeserver. + # + # By defult, it is empty, so no servers are matched. + # + #homeserver_whitelist: + # - ".*" diff --git a/etc/services/core/synapse/config/synapse.127.0.0.1.nip.io.log.config b/etc/services/core/synapse/config/synapse.127.0.0.1.nip.io.log.config new file mode 100644 index 0000000..b69695b --- /dev/null +++ b/etc/services/core/synapse/config/synapse.127.0.0.1.nip.io.log.config @@ -0,0 +1,36 @@ + +version: 1 + +formatters: + precise: + format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s' + +filters: + context: + (): synapse.util.logcontext.LoggingContextFilter + request: "" + +handlers: + console: + class: logging.StreamHandler + formatter: precise + filters: [context] + +loggers: + synapse: + level: INFO + + shared_secret_authenticator: + level: INFO + + rest_auth_provider: + level: INFO + + synapse.storage.SQL: + # beware: increasing this to DEBUG will make synapse log sensitive + # information such as access tokens. + level: INFO + +root: + level: INFO + handlers: [console] diff --git a/etc/services/core/synapse/config/synapse.127.0.0.1.nip.io.signing.key b/etc/services/core/synapse/config/synapse.127.0.0.1.nip.io.signing.key new file mode 100644 index 0000000..9273d97 --- /dev/null +++ b/etc/services/core/synapse/config/synapse.127.0.0.1.nip.io.signing.key @@ -0,0 +1 @@ +ed25519 a_FEMe JGs8Fk83GHIrVyhBYa/VRUFbU4+Fxtf8iOsJ7CMamcM diff --git a/etc/services/env.dist b/etc/services/env.dist new file mode 100644 index 0000000..bb034f0 --- /dev/null +++ b/etc/services/env.dist @@ -0,0 +1,12 @@ +SERVICE_SYNAPSE_BIND_PORT_CLIENT_API=127.0.0.1:42020 +SERVICE_SYNAPSE_BIND_PORT_FEDERATION_API=127.0.0.1:42028 + +SERVICE_ELEMENT_WEB_BIND_PORT_HTTP=127.0.0.1:42025 + +SERVICE_OLLAMA_BIND_PORT_HTTP=127.0.0.1:42026 + +# See https://localai.io/basics/container/#all-in-one-images for the list of available images +SERVICE_LOCALAI_IMAGE_NAME=docker.io/localai/localai:latest-aio-cpu +SERVICE_LOCALAI_BIND_PORT_HTTP=127.0.0.1:42027 + +# Variables below are added later on, dynamically diff --git a/etc/services/localai/compose.yml b/etc/services/localai/compose.yml new file mode 100644 index 0000000..3b86fdf --- /dev/null +++ b/etc/services/localai/compose.yml @@ -0,0 +1,20 @@ +services: + localai: + image: ${SERVICE_LOCALAI_IMAGE_NAME} + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/readyz"] + interval: 1m + timeout: 20m + retries: 5 + ports: + - ${SERVICE_LOCALAI_BIND_PORT_HTTP}:8080 + environment: + - DEBUG=true + volumes: + - ./localai/models:/build/models:cached + +networks: + default: + name: ${NETWORK_NAME} + external: true diff --git a/etc/services/ollama/compose.yml b/etc/services/ollama/compose.yml new file mode 100644 index 0000000..c16a06a --- /dev/null +++ b/etc/services/ollama/compose.yml @@ -0,0 +1,13 @@ +services: + ollama: + image: docker.io/ollama/ollama:0.3.9 + restart: unless-stopped + ports: + - "${SERVICE_OLLAMA_BIND_PORT_HTTP}:11434" + volumes: + - ./ollama:/root/.ollama + +networks: + default: + name: ${NETWORK_NAME} + external: true diff --git a/justfile b/justfile new file mode 100644 index 0000000..83a41bb --- /dev/null +++ b/justfile @@ -0,0 +1,239 @@ +project_name := "baibot" +container_image_name := "localhost/baibot" +project_container_network := "baibot" + +# Show help by default +default: + @just --list --justfile {{ justfile() }} + +# Builds and runs a development binary +run-locally *extra_args: app-local-prepare + RUST_BACKTRACE=1 \ + BAIBOT_CONFIG_FILE_PATH={{ justfile_directory() }}/var/app/local/config.yml \ + BAIBOT_PERSISTENCE_DATA_DIR_PATH={{ justfile_directory() }}/var/app/local/data \ + cargo run -- {{ extra_args }} + +run-in-container *extra_args: app-container-prepare build-container-image + /usr/bin/env docker run \ + -it \ + --rm \ + --name={{ project_name }} \ + --user=$(id -u):$(id -g) \ + --cap-drop=ALL \ + --read-only \ + --network={{ project_container_network }} \ + --env BAIBOT_PERSISTENCE_DATA_DIR_PATH=/data \ + --mount type=bind,src={{ justfile_directory() }}/var/app/container/config.yml,dst=/app/config.yml,ro \ + --mount type=bind,src={{ justfile_directory() }}/var/app/container/data,dst=/data \ + {{ container_image_name }} {{ extra_args }} + +# Runs tests +test *extra_args: + RUST_BACKTRACE=1 cargo test {{ extra_args }} + +# Builds a debug binary (target/debug/*) +build-debug *extra_args: + RUST_BACKTRACE=1 cargo build {{ extra_args }} + +# Builds an optimized release binary (target/release/*) +build-release *extra_args: (build-debug "--release") + +# Builds a container image +build-container-image tag='latest': + /usr/bin/env docker build \ + -t {{ container_image_name }}:{{ tag }} \ + . + +# Runs a docker-compose command +docker-compose services_type *extra_args: + /usr/bin/docker compose \ + --project-directory var/services \ + --env-file var/services/env \ + -f etc/services/{{ services_type }}/compose.yml \ + -p {{ project_name }}-{{ services_type }} \ + {{ extra_args }} + +# Runs a docker-compose command against the core services +docker-compose-core *extra_args: + just docker-compose core {{ extra_args }} + +# Runs a docker-compose command against the localai services +docker-compose-localai *extra_args: + just docker-compose localai {{ extra_args }} + +# Runs a docker-compose command against the ollama services +docker-compose-ollama *extra_args: + just docker-compose ollama {{ extra_args }} + +# Runs all core dependency components (in the background) +services-start: services-prepare (docker-compose-core "up" "-d") + +# Stops all core dependency components +services-stop: (docker-compose-core "down") + +# Tails the logs for all running core services +services-tail-logs: (docker-compose-core "logs" "-f") + +# Prepares the core services for running +services-prepare: _prepare-var-services-env _prepare-var-services-postgres _prepare-var-services-synapse _prepare-container-network + +# Runs LocalAI (in the background) +localai-start: localai-prepare (docker-compose-localai "up" "-d") + +# Stops LocalAI +localai-stop: (docker-compose-localai "down") + +# Tails the logs for LocalAI +localai-tail-logs: (docker-compose-localai "logs" "-f") + +# Prepares LocalAI for running +localai-prepare: _prepare-var-services-env _prepare-var-services-localai _prepare-container-network + +# Runs Ollama (in the background) +ollama-start: ollama-prepare (docker-compose-ollama "up" "-d") + +# Stops Ollama +ollama-stop: (docker-compose-ollama "down") + +# Tails the logs for Ollama +ollama-tail-logs: (docker-compose-ollama "logs" "-f") + +# Prepares Ollama for running +ollama-prepare: _prepare-var-services-env _prepare-var-services-ollama _prepare-container-network + +# Pulls an Ollama model +ollama-pull-model model_id: + just -f {{ justfile_directory() }}/justfile docker-compose-ollama \ + exec ollama \ + ollama pull {{ model_id }} + +# Prepares the app for running locally +app-local-prepare: _prepare-var-app-local-config_yml _prepare-var-app-local-data + +# Prepares the app for running in a container +app-container-prepare: _prepare-var-app-container-config_yml _prepare-var-app-container-data + +# Prepares the user accounts +users-prepare: services-prepare + just -f {{ justfile_directory() }}/justfile synapse-register-admin-user "admin" "admin" + just -f {{ justfile_directory() }}/justfile synapse-register-regular-user "baibot" "baibot" + +# Starts a Postgres CLI (psql) +postgres-cli: services-prepare (docker-compose-core "exec" "postgres" "/bin/sh" "-c" "'PGUSER=synapse PGPASSWORD=synapse-password PGDATABASE=homeserver psql -h postgres'") + +# Creates an administrator user +synapse-register-admin-user username password: services-prepare + just -f {{ justfile_directory() }}/justfile docker-compose-core \ + exec synapse \ + register_new_matrix_user \ + --admin \ + -u {{ username }} \ + -p {{ password }} \ + -c /config/homeserver.yaml \ + http://localhost:8008 + +# Create a regular user +synapse-register-regular-user username password: services-prepare + just -f {{ justfile_directory() }}/justfile docker-compose-core \ + exec synapse \ + register_new_matrix_user \ + --no-admin \ + -u {{ username }} \ + -p {{ password }} \ + -c /config/homeserver.yaml \ + http://localhost:8008 + +# Runs the clippy linter +clippy *extra_args: + cargo clippy {{ extra_args }} + +_prepare-var-services-env: + #!/bin/sh + cd {{ justfile_directory() }}; + + if [ ! -f var/services/env ]; then + mkdir -p var/services + cp {{ justfile_directory() }}/etc/services/env.dist var/services/env + echo 'UID='`id -u` >> var/services/env; + echo 'GID='`id -g` >> var/services/env; + echo 'NETWORK_NAME={{ project_container_network }}' >> var/services/env; + fi + +_prepare-var-services-postgres: + #!/bin/sh + cd {{ justfile_directory() }}; + + if [ ! -f var/services/postgres ]; then + mkdir -p var/services/postgres + chown `id -u`:`id -g` var/services/postgres + fi + +_prepare-var-services-synapse: + #!/bin/sh + cd {{ justfile_directory() }}; + + if [ ! -f var/services/synapse ]; then + mkdir -p var/services/synapse/media-store + fi + +_prepare-var-services-ollama: + #!/bin/sh + cd {{ justfile_directory() }}; + + if [ ! -f var/services/ollama ]; then + mkdir -p var/services/ollama + fi + +_prepare-var-services-localai: + #!/bin/sh + cd {{ justfile_directory() }}; + + if [ ! -f var/services/localai ]; then + mkdir -p var/services/localai + fi + +_prepare-container-network: + #!/bin/sh + network_definition=$(/usr/bin/env docker network ls --filter='name={{ project_container_network }}' --format=json) + + if [ "$network_definition" = "" ]; then + /usr/bin/docker network create {{ project_container_network }} + fi + +_prepare-var-app-local-config_yml: + #!/bin/sh + cd {{ justfile_directory() }}; + + if [ ! -f var/app/local/config.yml ]; then + mkdir -p var/app/local + cp {{ justfile_directory() }}/etc/app/config.yml.dist var/app/local/config.yml + fi + +_prepare-var-app-local-data: + #!/bin/sh + cd {{ justfile_directory() }}; + + if [ ! -f var/app/local/data ]; then + mkdir -p var/app/local/data + fi + +_prepare-var-app-container-config_yml: + #!/bin/sh + cd {{ justfile_directory() }}; + + if [ ! -f var/app/container/config.yml ]; then + mkdir -p var/app/container + cp {{ justfile_directory() }}/etc/app/config.yml.dist var/app/container/config.yml + sed --in-place 's/synapse.127.0.0.1.nip.io:42020/synapse:8008/g' var/app/container/config.yml + sed --in-place 's/127.0.0.1:42026/ollama:11434/g' var/app/container/config.yml + sed --in-place 's/127.0.0.1:42027/localai:8080/g' var/app/container/config.yml + fi + +_prepare-var-app-container-data: + #!/bin/sh + cd {{ justfile_directory() }}; + + if [ ! -f var/app/container/data ]; then + mkdir -p var/app/container/data + fi + diff --git a/src/agent/definition.rs b/src/agent/definition.rs new file mode 100644 index 0000000..4d391e1 --- /dev/null +++ b/src/agent/definition.rs @@ -0,0 +1,55 @@ +use serde::de::Error as DeError; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +use super::provider::AgentProvider; + +// Custom serialization for AgentProvider +pub fn serialize_provider_to_string( + value: &AgentProvider, + serializer: S, +) -> Result +where + S: Serializer, +{ + serializer.serialize_str(value.to_static_str()) +} + +// Custom deserialization for AgentProvider +pub fn deserialize_provider_from_string<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + let s = String::deserialize(deserializer)?; + AgentProvider::from_string(&s).map_err(DeError::custom) +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct AgentDefinition { + pub id: String, + + #[serde( + serialize_with = "serialize_provider_to_string", + deserialize_with = "deserialize_provider_from_string" + )] + pub provider: AgentProvider, + + pub config: serde_yaml::Value, +} + +impl AgentDefinition { + pub fn new(id: String, provider: AgentProvider, config: serde_yaml::Value) -> Self { + Self { + id, + provider, + config, + } + } +} + +impl PartialEq for AgentDefinition { + fn eq(&self, other: &Self) -> bool { + self.id == other.id + } +} + +impl Eq for AgentDefinition {} diff --git a/src/agent/identifier.rs b/src/agent/identifier.rs new file mode 100644 index 0000000..9ff7d0a --- /dev/null +++ b/src/agent/identifier.rs @@ -0,0 +1,101 @@ +use std::fmt; + +#[derive(Debug, PartialEq, Eq, Clone)] +pub enum PublicIdentifier { + Static(String), + DynamicGlobal(String), + DynamicRoomLocal(String), +} + +impl PublicIdentifier { + pub fn from_str(s: &str) -> Option { + if let Some(rest) = s.strip_prefix("static/") { + return Some(PublicIdentifier::Static(rest.to_string())); + } else if let Some(rest) = s.strip_prefix("global/") { + return Some(PublicIdentifier::DynamicGlobal(rest.to_string())); + } else if let Some(rest) = s.strip_prefix("room-local/") { + return Some(PublicIdentifier::DynamicRoomLocal(rest.to_string())); + } + None + } + + pub fn as_string(&self) -> String { + match self { + PublicIdentifier::Static(s) => format!("static/{}", s), + PublicIdentifier::DynamicGlobal(s) => format!("global/{}", s), + PublicIdentifier::DynamicRoomLocal(s) => format!("room-local/{}", s), + } + } + + pub fn prefixless(&self) -> String { + match self { + PublicIdentifier::Static(s) => s.to_owned(), + PublicIdentifier::DynamicGlobal(s) => s.to_owned(), + PublicIdentifier::DynamicRoomLocal(s) => s.to_owned(), + } + } + + pub fn validate(&self) -> Result<(), String> { + let prefixless = self.prefixless(); + + if prefixless.is_empty() { + return Err("The agent ID must not be empty.".to_owned()); + } + + // We use a slash to separate the agent type from the agent ID. + if prefixless.contains("/") { + return Err("The agent ID must not contain the `/` character.".to_owned()); + } + + // Spaces are used for separating command arguments, etc. + if prefixless.contains(" ") { + return Err("The agent ID must not contain spaces.".to_owned()); + } + + Ok(()) + } +} + +impl fmt::Display for PublicIdentifier { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.as_string()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_public_identifier_from_str() { + assert_eq!( + PublicIdentifier::from_str("static/abc"), + Some(PublicIdentifier::Static("abc".to_string())) + ); + assert_eq!( + PublicIdentifier::from_str("global/abc"), + Some(PublicIdentifier::DynamicGlobal("abc".to_string())) + ); + assert_eq!( + PublicIdentifier::from_str("room-local/abc"), + Some(PublicIdentifier::DynamicRoomLocal("abc".to_string())) + ); + assert_eq!(PublicIdentifier::from_str("abc"), None); + } + + #[test] + fn test_public_identifier_as_string() { + assert_eq!( + PublicIdentifier::Static("abc".to_string()).as_string(), + "static/abc" + ); + assert_eq!( + PublicIdentifier::DynamicGlobal("abc".to_string()).as_string(), + "global/abc" + ); + assert_eq!( + PublicIdentifier::DynamicRoomLocal("abc".to_string()).as_string(), + "room-local/abc" + ); + } +} diff --git a/src/agent/instantiation.rs b/src/agent/instantiation.rs new file mode 100644 index 0000000..9608bf0 --- /dev/null +++ b/src/agent/instantiation.rs @@ -0,0 +1,154 @@ +use super::{ + provider::{self, ControllerType}, + AgentDefinition, AgentProvider, PublicIdentifier, +}; + +// Dead-code is allowed. We do not use these enum struct payloads directly, +// but these errors are being print-formatted (`{:?}`) in error messages, so we wish to keep them. +#[derive(Debug)] +#[allow(dead_code)] +pub enum Error { + // Contains the error message from the validation function + ConfigFailsValidation(String), + // Contains the agent ID + ConfigForAgentIsNotAMapping(String), + // Contains the error from the constructor function + ConstructionFailed(anyhow::Error), + // Contains the error from the YAML deserialization function + Yaml(serde_yaml::Error), +} + +pub type Result = std::result::Result; + +#[derive(Debug, Clone)] +pub struct AgentInstance { + identifier: PublicIdentifier, + definition: AgentDefinition, + controller: ControllerType, +} + +impl AgentInstance { + pub fn new( + identifier: PublicIdentifier, + definition: AgentDefinition, + controller: ControllerType, + ) -> Self { + Self { + identifier, + definition, + controller, + } + } + + pub fn identifier(&self) -> &PublicIdentifier { + &self.identifier + } + + pub fn definition(&self) -> &AgentDefinition { + &self.definition + } + + pub fn controller(&self) -> &ControllerType { + &self.controller + } +} + +pub(super) fn create( + identifier: PublicIdentifier, + definition: AgentDefinition, +) -> Result { + let controller = create_controller_from_provider_and_json_value_config( + &definition.id, + &definition.provider, + definition.config.clone(), + )?; + + Ok(AgentInstance::new(identifier, definition, controller)) +} + +pub fn create_from_provider_and_yaml_value_config( + provider: &AgentProvider, + identifier: &PublicIdentifier, + config: serde_yaml::Value, +) -> Result { + let definition = AgentDefinition::new(identifier.prefixless(), provider.to_owned(), config); + + create(identifier.to_owned(), definition) +} + +fn create_controller_from_provider_and_json_value_config( + agent_id: &str, + provider: &AgentProvider, + config: serde_yaml::Value, +) -> Result { + match provider { + AgentProvider::Anthropic => { + provider::anthropic::create_controller_from_yaml_value_config(agent_id, config) + } + AgentProvider::Groq => { + provider::openai_compat::create_controller_from_yaml_value_config(agent_id, config) + } + AgentProvider::Mistral => { + provider::openai_compat::create_controller_from_yaml_value_config(agent_id, config) + } + AgentProvider::LocalAI => { + provider::openai_compat::create_controller_from_yaml_value_config(agent_id, config) + } + AgentProvider::Ollama => { + provider::openai_compat::create_controller_from_yaml_value_config(agent_id, config) + } + AgentProvider::OpenAI => { + provider::openai::create_controller_from_yaml_value_config(agent_id, config) + } + AgentProvider::OpenAICompat => { + provider::openai_compat::create_controller_from_yaml_value_config(agent_id, config) + } + AgentProvider::OpenRouter => { + provider::openai_compat::create_controller_from_yaml_value_config(agent_id, config) + } + AgentProvider::TogetherAI => { + provider::openai_compat::create_controller_from_yaml_value_config(agent_id, config) + } + } +} + +pub fn default_config_for_provider(provider: &AgentProvider) -> serde_yaml::Value { + match provider { + AgentProvider::Anthropic => { + let config = super::provider::anthropic::default_config(); + serde_yaml::to_value(config).expect("Failed to serialize config") + } + AgentProvider::Groq => { + let config = super::provider::groq::default_config(); + serde_yaml::to_value(config).expect("Failed to serialize config") + } + AgentProvider::LocalAI => { + let config = super::provider::localai::default_config(); + serde_yaml::to_value(config).expect("Failed to serialize config") + } + AgentProvider::Mistral => { + let config = super::provider::mistral::default_config(); + serde_yaml::to_value(config).expect("Failed to serialize config") + } + AgentProvider::Ollama => { + let config = super::provider::ollama::default_config(); + serde_yaml::to_value(config).expect("Failed to serialize config") + } + AgentProvider::OpenAI => { + let config = super::provider::openai::default_config(); + serde_yaml::to_value(config).expect("Failed to serialize config") + } + AgentProvider::OpenAICompat => { + let config = super::provider::openai_compat::default_config(); + serde_yaml::to_value(config).expect("Failed to serialize config") + } + AgentProvider::OpenRouter => { + let config = super::provider::openrouter::default_config(); + serde_yaml::to_value(config).expect("Failed to serialize config") + } + AgentProvider::TogetherAI => { + let config = super::provider::togetherai::default_config(); + serde_yaml::to_value(config).expect("Failed to serialize config") + } + } +} diff --git a/src/agent/manager.rs b/src/agent/manager.rs new file mode 100644 index 0000000..0f5dec7 --- /dev/null +++ b/src/agent/manager.rs @@ -0,0 +1,68 @@ +use super::instantiation; +use super::instantiation::AgentInstance; +use super::AgentDefinition; +use super::PublicIdentifier; +use crate::entity::RoomConfigContext; + +#[derive(Debug)] +pub struct Manager { + static_agents: Vec, +} + +impl Manager { + pub fn new(static_agent_definitions: Vec) -> anyhow::Result { + let mut static_agents = Vec::with_capacity(static_agent_definitions.len()); + + for definition in static_agent_definitions { + let identifier = PublicIdentifier::Static(definition.id.clone()); + + match instantiation::create(identifier.clone(), definition.to_owned()) { + Ok(instance) => static_agents.push(instance), + Err(e) => { + return Err(anyhow::anyhow!( + "Failed to create static agent {}: {:?}", + identifier, + e + )); + } + } + } + + Ok(Self { static_agents }) + } + + pub fn available_room_agents_by_room_config_context( + &self, + room_config_context: &RoomConfigContext, + ) -> Vec { + let mut agents: Vec = vec![]; + + for agent in &self.static_agents { + agents.push(agent.clone()); + } + + for definition in &room_config_context.global_config.agents { + let identifier = PublicIdentifier::DynamicGlobal(definition.id.clone()); + + match instantiation::create(identifier.clone(), definition.to_owned()) { + Ok(instance) => agents.push(instance), + Err(e) => { + tracing::warn!("Failed to create {} agent: {:?}. Skipping.", identifier, e); + } + } + } + + for definition in &room_config_context.room_config.agents { + let identifier = PublicIdentifier::DynamicRoomLocal(definition.id.clone()); + + match instantiation::create(identifier.clone(), definition.to_owned()) { + Ok(instance) => agents.push(instance), + Err(e) => { + tracing::warn!("Failed to create {} agent: {:?}. Skipping.", identifier, e); + } + } + } + + agents + } +} diff --git a/src/agent/mod.rs b/src/agent/mod.rs new file mode 100644 index 0000000..9fc1bf4 --- /dev/null +++ b/src/agent/mod.rs @@ -0,0 +1,21 @@ +mod definition; +mod identifier; +mod instantiation; +mod manager; +pub mod provider; +mod purpose; +pub mod utils; + +pub use identifier::PublicIdentifier; +pub use manager::Manager; + +pub use definition::AgentDefinition; + +pub use instantiation::create_from_provider_and_yaml_value_config; +pub use instantiation::default_config_for_provider; +pub use instantiation::AgentInstance; +pub use instantiation::Error as AgentInstantiationError; +pub use instantiation::Result as AgentInstantiationResult; + +pub use provider::{AgentProvider, AgentProviderInfo, ControllerTrait}; +pub use purpose::AgentPurpose; diff --git a/src/agent/provider/anthropic/config.rs b/src/agent/provider/anthropic/config.rs new file mode 100644 index 0000000..073927f --- /dev/null +++ b/src/agent/provider/anthropic/config.rs @@ -0,0 +1,71 @@ +use serde::{Deserialize, Serialize}; + +use anthropic_rs::models::claude::ClaudeModel; + +use crate::agent::provider::ConfigTrait; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + pub base_url: String, + + pub api_key: String, + + pub text_generation: Option, +} + +impl Default for Config { + fn default() -> Self { + Self { + base_url: "https://api.anthropic.com/v1".to_owned(), + api_key: "YOUR_API_KEY_HERE".to_owned(), + text_generation: Some(TextGenerationConfig::default()), + } + } +} + +impl ConfigTrait for Config { + fn validate(&self) -> Result<(), String> { + if self.base_url.is_empty() { + return Err("The base URL must not be empty.".to_owned()); + } + if self.api_key.is_empty() { + return Err("The API key must not be empty.".to_owned()); + } + + Ok(()) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TextGenerationConfig { + #[serde(default = "default_text_model_id")] + pub model_id: String, + + #[serde(default)] + pub prompt: Option, + + #[serde(default = "super::super::default_temperature")] + pub temperature: f32, + + #[serde(default)] + pub max_response_tokens: u32, + + #[serde(default)] + pub max_context_tokens: u32, +} + +impl Default for TextGenerationConfig { + fn default() -> Self { + Self { + model_id: default_text_model_id(), + prompt: Some("You are a brief, but helpful bot.".to_owned()), + temperature: super::super::default_temperature(), + max_response_tokens: 8192, + max_context_tokens: 204_800, + } + } +} + +fn default_text_model_id() -> String { + ClaudeModel::Claude35Sonnet.as_str().to_owned() +} diff --git a/src/agent/provider/anthropic/controller.rs b/src/agent/provider/anthropic/controller.rs new file mode 100644 index 0000000..0ab941d --- /dev/null +++ b/src/agent/provider/anthropic/controller.rs @@ -0,0 +1,251 @@ +use std::fmt::Debug; +use std::str::FromStr; +use std::sync::Arc; + +use anthropic_rs::completion::message::ContentType; +use anthropic_rs::{ + client::Client as AnthropicClient, config::Config as AnthropicConfig, + models::claude::ClaudeModel, +}; + +use super::super::ControllerTrait; +use crate::agent::provider::entity::{ + ImageGenerationResult, PingResult, TextGenerationParams, TextGenerationResult, + TextToSpeechParams, TextToSpeechResult, +}; +use crate::agent::provider::{ImageGenerationParams, SpeechToTextParams, SpeechToTextResult}; +use crate::agent::AgentPurpose; +use crate::conversation::llm::{ + shorten_messages_list_to_context_size, Author as LLMAuthor, Conversation as LLMConversation, + Message as LLMMessage, +}; +use crate::strings; + +use super::config::Config; + +struct ControllerInner { + client: AnthropicClient, +} + +#[derive(Clone)] +pub struct Controller { + config: Config, + inner: Arc, +} + +impl Debug for Controller { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("Controller") + .field("config", &self.config) + .finish() + } +} + +impl Controller { + pub fn new(config: Config) -> anyhow::Result { + let anthropic_config = + AnthropicConfig::new(config.api_key.clone()).with_base_url(config.base_url.clone()); + + let client = match AnthropicClient::new(anthropic_config) { + Ok(client) => client, + Err(err) => { + return Err(anyhow::anyhow!( + "Failed to create Anthropic client: {}", + err.to_string() + )); + } + }; + + Ok(Self { + config, + inner: Arc::new(ControllerInner { client }), + }) + } +} + +impl ControllerTrait for Controller { + async fn ping(&self) -> anyhow::Result { + if !self.supports_purpose(AgentPurpose::TextGeneration) { + return Ok(PingResult::Inconclusive); + } + + let messages = vec![LLMMessage { + author: LLMAuthor::User, + message_text: "Hello!".to_string(), + }]; + + let conversation = LLMConversation { messages }; + + self.generate_text(conversation, TextGenerationParams::default()) + .await?; + + Ok(PingResult::Successful) + } + + async fn generate_text( + &self, + conversation: LLMConversation, + params: TextGenerationParams, + ) -> anyhow::Result { + let Some(text_generation_config) = &self.config.text_generation else { + return Err(anyhow::anyhow!( + strings::agent::no_configuration_for_purpose_so_cannot_be_used( + &AgentPurpose::TextGeneration + ), + )); + }; + + let prompt_text = params + .prompt_override + .unwrap_or(self.text_generation_prompt().unwrap_or("".to_owned())) + .trim() + .to_owned(); + + let prompt_message = if prompt_text.is_empty() { + None + } else { + Some(LLMMessage { + author: LLMAuthor::Prompt, + message_text: prompt_text, + }) + }; + + let mut conversation_messages = conversation.messages; + + if params.context_management_enabled { + tracing::trace!("Shortening messages list to context size"); + + conversation_messages = shorten_messages_list_to_context_size( + &text_generation_config.model_id, + &prompt_message, + conversation_messages, + text_generation_config.max_response_tokens, + text_generation_config.max_context_tokens, + ); + + tracing::trace!("Finished shortening messages list to context size"); + }; + + let messages_count = conversation_messages.len(); + + let mut request = super::utils::create_anthropic_message_request(conversation_messages); + + let model = match ClaudeModel::from_str(&text_generation_config.model_id) { + Ok(model) => model, + Err(err) => { + tracing::debug!(?err, "Failed to parse model ID"); + + return Err(anyhow::anyhow!( + "Failed to parse model ID: {}", + &text_generation_config.model_id + )); + } + }; + + let temperature = params + .temperature_override + .unwrap_or(text_generation_config.temperature); + + if let Some(prompt_message) = prompt_message { + request.system = Some(prompt_message.message_text); + } + + request.model = model; + request.temperature = Some(temperature); + request.max_tokens = text_generation_config.max_response_tokens; + + if let Ok(request_as_json) = serde_json::to_string(&request) { + tracing::trace!( + model = format!("{:?}", request.model), + ?messages_count, + request = request_as_json, + "Sending Anthropic create message API request" + ); + } + + let response = self.inner.client.create_message(request).await?; + + tracing::trace!(?response, "Got response from Anthropic create message API"); + + // response.content usually contains a single element, but we support handling multiple to account for all possibilities + let mut text_parts = vec![]; + for content in response.content { + let content_type = content.content_type; + + match content_type { + ContentType::Text => { + text_parts.push(content.text); + } // There are no other content types to handle yet, but there may be in the future + } + } + + if text_parts.is_empty() { + return Err(anyhow::anyhow!( + "No text content in response from the Anthropic create message API" + )); + } + + Ok(TextGenerationResult { + text: text_parts.join("\n\n"), + }) + } + + async fn speech_to_text( + &self, + _mime_type: &mxlink::mime::Mime, + _media: Vec, + _params: SpeechToTextParams, + ) -> anyhow::Result { + Err(anyhow::anyhow!("Speech-to-Text not supported")) + } + + async fn generate_image( + &self, + _prompt: &str, + _params: ImageGenerationParams, + ) -> anyhow::Result { + Err(anyhow::anyhow!("Image generation not supported")) + } + + async fn text_to_speech( + &self, + _input: &str, + _params: TextToSpeechParams, + ) -> anyhow::Result { + Err(anyhow::anyhow!("Speech generation not supported")) + } + + fn supports_purpose(&self, purpose: AgentPurpose) -> bool { + match purpose { + AgentPurpose::TextGeneration => self.config.text_generation.is_some(), + AgentPurpose::SpeechToText => false, + AgentPurpose::TextToSpeech => false, + AgentPurpose::ImageGeneration => false, + AgentPurpose::CatchAll => true, + } + } + + fn text_generation_prompt(&self) -> Option { + let Some(text_generation_config) = &self.config.text_generation else { + return None; + }; + + text_generation_config.prompt.clone() + } + + fn text_generation_temperature(&self) -> Option { + let Some(text_generation_config) = &self.config.text_generation else { + return None; + }; + + Some(text_generation_config.temperature) + } + + fn text_to_speech_voice(&self) -> Option { + None + } + + fn text_to_speech_speed(&self) -> Option { + None + } +} diff --git a/src/agent/provider/anthropic/mod.rs b/src/agent/provider/anthropic/mod.rs new file mode 100644 index 0000000..53504c4 --- /dev/null +++ b/src/agent/provider/anthropic/mod.rs @@ -0,0 +1,43 @@ +mod config; +mod controller; +mod utils; + +pub use config::Config; +pub use controller::Controller; + +use super::super::AgentInstantiationError; +use super::super::AgentInstantiationResult; +use super::controller::ControllerType; +use super::ConfigTrait; + +pub fn create_controller_from_yaml_value_config( + agent_id: &str, + config: serde_yaml::Value, +) -> AgentInstantiationResult { + let config = match &config { + serde_yaml::Value::Mapping(_) => { + let config: Config = + serde_yaml::from_value(config).map_err(AgentInstantiationError::Yaml)?; + + config + .validate() + .map_err(AgentInstantiationError::ConfigFailsValidation)?; + + config + } + _ => { + return Err(AgentInstantiationError::ConfigForAgentIsNotAMapping( + agent_id.to_owned(), + )); + } + }; + + let controller = + Controller::new(config).map_err(AgentInstantiationError::ConstructionFailed)?; + + Ok(ControllerType::Anthropic(Box::new(controller))) +} + +pub fn default_config() -> Config { + Config::default() +} diff --git a/src/agent/provider/anthropic/utils.rs b/src/agent/provider/anthropic/utils.rs new file mode 100644 index 0000000..a4c2e88 --- /dev/null +++ b/src/agent/provider/anthropic/utils.rs @@ -0,0 +1,32 @@ +use anthropic_rs::completion::message::{Content, ContentType, Message, MessageRequest, Role}; + +use crate::conversation::llm::{Author as LLMAuthor, Message as LLMMessage}; + +pub(super) fn create_anthropic_message_request(llm_messages: Vec) -> MessageRequest { + let mut messages = vec![]; + + for message in llm_messages { + let role = match message.author { + LLMAuthor::User => Role::User, + LLMAuthor::Assistant => Role::Assistant, + LLMAuthor::Prompt => { + continue; + } + }; + + let content = vec![Content { + content_type: ContentType::Text, + text: message.message_text, + }]; + + let message = Message { role, content }; + + messages.push(message); + } + + MessageRequest { + stream: false, + messages, + ..Default::default() + } +} diff --git a/src/agent/provider/config.rs b/src/agent/provider/config.rs new file mode 100644 index 0000000..6a9ef13 --- /dev/null +++ b/src/agent/provider/config.rs @@ -0,0 +1,3 @@ +pub trait ConfigTrait { + fn validate(&self) -> Result<(), String>; +} diff --git a/src/agent/provider/controller.rs b/src/agent/provider/controller.rs new file mode 100644 index 0000000..617664d --- /dev/null +++ b/src/agent/provider/controller.rs @@ -0,0 +1,172 @@ +use crate::{agent::AgentPurpose, conversation::llm::Conversation}; + +use super::{ + entity::{ + ImageGenerationResult, PingResult, TextGenerationParams, TextGenerationResult, + TextToSpeechParams, TextToSpeechResult, + }, + ImageGenerationParams, SpeechToTextParams, SpeechToTextResult, +}; + +pub trait ControllerTrait { + fn supports_purpose(&self, purpose: AgentPurpose) -> bool; + + fn ping(&self) -> impl std::future::Future> + Send; + + fn text_generation_prompt(&self) -> Option; + + fn text_generation_temperature(&self) -> Option; + + fn text_to_speech_voice(&self) -> Option; + + fn text_to_speech_speed(&self) -> Option; + + fn generate_text( + &self, + conversation: Conversation, + params: TextGenerationParams, + ) -> impl std::future::Future> + Send; + + fn speech_to_text( + &self, + mime_type: &mxlink::mime::Mime, + media: Vec, + params: SpeechToTextParams, + ) -> impl std::future::Future> + Send; + + fn generate_image( + &self, + prompt: &str, + params: ImageGenerationParams, + ) -> impl std::future::Future> + Send; + + fn text_to_speech( + &self, + text: &str, + params: TextToSpeechParams, + ) -> impl std::future::Future> + Send; +} + +#[derive(Debug, Clone)] +pub enum ControllerType { + OpenAI(Box), + OpenAICompat(Box), + Anthropic(Box), +} + +impl ControllerTrait for ControllerType { + fn supports_purpose(&self, purpose: AgentPurpose) -> bool { + match &self { + ControllerType::OpenAI(controller) => controller.supports_purpose(purpose), + ControllerType::OpenAICompat(controller) => controller.supports_purpose(purpose), + ControllerType::Anthropic(controller) => controller.supports_purpose(purpose), + } + } + + fn text_generation_prompt(&self) -> Option { + match &self { + ControllerType::OpenAI(controller) => controller.text_generation_prompt(), + ControllerType::OpenAICompat(controller) => controller.text_generation_prompt(), + ControllerType::Anthropic(controller) => controller.text_generation_prompt(), + } + } + + fn text_to_speech_voice(&self) -> Option { + match &self { + ControllerType::OpenAI(controller) => controller.text_to_speech_voice(), + ControllerType::OpenAICompat(controller) => controller.text_to_speech_voice(), + ControllerType::Anthropic(controller) => controller.text_to_speech_voice(), + } + } + + fn text_to_speech_speed(&self) -> Option { + match &self { + ControllerType::OpenAI(controller) => controller.text_to_speech_speed(), + ControllerType::OpenAICompat(controller) => controller.text_to_speech_speed(), + ControllerType::Anthropic(controller) => controller.text_to_speech_speed(), + } + } + + fn text_generation_temperature(&self) -> Option { + match &self { + ControllerType::OpenAI(controller) => controller.text_generation_temperature(), + ControllerType::OpenAICompat(controller) => controller.text_generation_temperature(), + ControllerType::Anthropic(controller) => controller.text_generation_temperature(), + } + } + + async fn ping(&self) -> anyhow::Result { + match &self { + ControllerType::OpenAI(controller) => controller.ping().await, + ControllerType::OpenAICompat(controller) => controller.ping().await, + ControllerType::Anthropic(controller) => controller.ping().await, + } + } + + async fn generate_text( + &self, + conversation: Conversation, + params: TextGenerationParams, + ) -> anyhow::Result { + match &self { + ControllerType::OpenAI(controller) => { + controller.generate_text(conversation, params).await + } + ControllerType::OpenAICompat(controller) => { + controller.generate_text(conversation, params).await + } + ControllerType::Anthropic(controller) => { + controller.generate_text(conversation, params).await + } + } + } + + async fn speech_to_text( + &self, + mime_type: &mxlink::mime::Mime, + media: Vec, + params: SpeechToTextParams, + ) -> anyhow::Result { + match &self { + ControllerType::OpenAI(controller) => { + controller.speech_to_text(mime_type, media, params).await + } + ControllerType::OpenAICompat(controller) => { + controller.speech_to_text(mime_type, media, params).await + } + ControllerType::Anthropic(controller) => { + controller.speech_to_text(mime_type, media, params).await + } + } + } + + async fn generate_image( + &self, + prompt: &str, + params: ImageGenerationParams, + ) -> anyhow::Result { + match &self { + ControllerType::OpenAI(controller) => controller.generate_image(prompt, params).await, + ControllerType::OpenAICompat(controller) => { + controller.generate_image(prompt, params).await + } + ControllerType::Anthropic(controller) => { + controller.generate_image(prompt, params).await + } + } + } + + async fn text_to_speech( + &self, + text: &str, + params: TextToSpeechParams, + ) -> anyhow::Result { + match &self { + ControllerType::OpenAI(controller) => controller.text_to_speech(text, params).await, + ControllerType::OpenAICompat(controller) => { + controller.text_to_speech(text, params).await + } + ControllerType::Anthropic(controller) => controller.text_to_speech(text, params).await, + } + } +} diff --git a/src/agent/provider/entity/agent_provider.rs b/src/agent/provider/entity/agent_provider.rs new file mode 100644 index 0000000..9cb0284 --- /dev/null +++ b/src/agent/provider/entity/agent_provider.rs @@ -0,0 +1,198 @@ +use crate::agent::AgentPurpose; + +#[derive(Debug, Clone)] +pub enum AgentProvider { + Anthropic, + Groq, + LocalAI, + Mistral, + Ollama, + OpenAI, + OpenAICompat, + OpenRouter, + TogetherAI, +} + +impl AgentProvider { + pub fn choices() -> Vec<&'static Self> { + vec![ + &Self::Anthropic, + &Self::Groq, + &Self::LocalAI, + &Self::Mistral, + &Self::Ollama, + &Self::OpenAI, + &Self::OpenAICompat, + &Self::OpenRouter, + &Self::TogetherAI, + ] + } + + pub fn to_static_str(&self) -> &'static str { + match &self { + Self::Anthropic => "anthropic", + Self::Groq => "groq", + Self::LocalAI => "localai", + Self::Mistral => "mistral", + Self::Ollama => "ollama", + Self::OpenAI => "openai", + Self::OpenAICompat => "openai-compatible", + Self::OpenRouter => "openrouter", + Self::TogetherAI => "together-ai", + } + } + + pub fn from_string(s: &str) -> Result { + match s { + "anthropic" => Ok(Self::Anthropic), + "groq" => Ok(Self::Groq), + "localai" => Ok(Self::LocalAI), + "mistral" => Ok(Self::Mistral), + "ollama" => Ok(Self::Ollama), + "openai" => Ok(Self::OpenAI), + "openai-compatible" => Ok(Self::OpenAICompat), + "openrouter" => Ok(Self::OpenRouter), + "together-ai" => Ok(Self::TogetherAI), + _ => Err("Unexpected string value"), + } + } + + pub fn info(&self) -> AgentProviderInfo { + match &self { + Self::Anthropic => AgentProviderInfo { + id: Self::Anthropic.to_static_str(), + name: "Anthropic", + description: "Anthropic is an American AI company founded by former OpenAI engineers and providing powerful language models.", + homepage_url: Some("https://www.anthropic.com/"), + wiki_url: Some("https://en.wikipedia.org/wiki/Anthropic"), + sign_up_url: Some("https://console.anthropic.com/"), + models_list_url: Some("https://docs.anthropic.com/en/docs/about-claude/models"), + supported_purposes: vec![ + AgentPurpose::TextGeneration, + ], + }, + Self::Groq => AgentProviderInfo { + id: Self::Groq.to_static_str(), + name: "Groq", + description: "Groq is an American company developing optimized Language Processing Units (LPU) and offering cloud service which runs various models (built by others) with very high performance.", + homepage_url: Some("https://groq.com/"), + wiki_url: Some("https://en.wikipedia.org/wiki/Groq"), + sign_up_url: Some("https://console.groq.com/login"), + models_list_url: Some("https://console.groq.com/docs/models"), + supported_purposes: vec![ + AgentPurpose::TextGeneration, + AgentPurpose::SpeechToText, + ], + }, + Self::LocalAI => AgentProviderInfo { + id: Self::LocalAI.to_static_str(), + name: "LocalAI", + description: "LocalAI is the free, Open Source OpenAI alternative. LocalAI act as a drop-in replacement REST API that’s compatible with OpenAI API specifications for local inferencing. It allows you to run LLMs, generate images, audio (and not only) locally or on-prem with consumer grade hardware, supporting multiple model families and architectures.", + homepage_url: Some("https://localai.io/"), + wiki_url: None, + sign_up_url: None, + models_list_url: Some("https://localai.io/gallery.html"), + supported_purposes: vec![ + AgentPurpose::TextGeneration, + AgentPurpose::TextToSpeech, + AgentPurpose::SpeechToText, + ], + }, + Self::Mistral => AgentProviderInfo { + id: Self::Mistral.to_static_str(), + name: "Mistral", + description: "Mistral AI is a research lab based in Europe (France) which produces their own language models.", + homepage_url: Some("https://mistral.ai/"), + wiki_url: Some("https://en.wikipedia.org/wiki/Mistral_AI"), + sign_up_url: Some("https://auth.mistral.ai/ui/registration"), + models_list_url: Some("https://docs.mistral.ai/getting-started/models/"), + supported_purposes: vec![ + AgentPurpose::TextGeneration, + ], + }, + Self::Ollama => AgentProviderInfo { + id: Self::Ollama.to_static_str(), + name: "Ollama", + description: "Ollama lets you run various models in a [self-hosted](https://github.com/ollama/ollama?tab=readme-ov-file#ollama) way. This is more advanced and requires powerful hardware for running some of the better models, but ensures your data stays with you.", + homepage_url: Some("https://ollama.com/"), + wiki_url: None, + sign_up_url: None, + models_list_url: Some("https://ollama.com/library"), + supported_purposes: vec![ + AgentPurpose::TextGeneration, + ], + }, + Self::OpenAI => AgentProviderInfo { + id: Self::OpenAI.to_static_str(), + name: "OpenAI", + description: "OpenAI is an American AI company providing powerful language models.\n\nUse this provider either with the OpenAI API or with other OpenAI-compatible API services which **fully** adhere to the [OpenAI API spec](https://github.com/openai/openai-openapi/).\nFor services which are not fully compatible with the OpenAI API, consider using the **OpenAI Compatible** provider.", + homepage_url: Some("https://openai.com/"), + wiki_url: Some("https://en.wikipedia.org/wiki/OpenAI"), + sign_up_url: Some("https://platform.openai.com/signup"), + models_list_url: Some("https://platform.openai.com/docs/models"), + supported_purposes: vec![ + AgentPurpose::ImageGeneration, + AgentPurpose::TextGeneration, + AgentPurpose::TextToSpeech, + AgentPurpose::SpeechToText, + ], + }, + Self::OpenAICompat => AgentProviderInfo { + id: Self::OpenAICompat.to_static_str(), + name: "OpenAI Compatible", + description: "This provider allows you to use OpenAI-compatible API services like [OpenRouter](https://openrouter.ai/), [Together AI](https://www.together.ai/), etc.\n\nSome of these popular services already have **shortcut** providers (leading to this one behind the scenes) - this make it easier to get started.\n\nThis provider just as featureful as the **OpenAI** provider, but is more compatible with services which do not fully adhere to the [OpenAI API spec](https://github.com/openai/openai-openapi/).", + homepage_url: None, + wiki_url: None, + sign_up_url: None, + models_list_url: None, + supported_purposes: vec![ + AgentPurpose::ImageGeneration, + AgentPurpose::TextGeneration, + AgentPurpose::TextToSpeech, + AgentPurpose::SpeechToText, + ], + }, + Self::OpenRouter => AgentProviderInfo { + id: Self::OpenRouter.to_static_str(), + name: "OpenRouter", + description: "OpenRouter is a unified interface for LLMs. The platform scouts for the lowest prices and best latencies/throughputs across dozens of providers, and lets you choose how to [prioritize](https://openrouter.ai/docs/provider-routing) them.", + homepage_url: Some("https://openrouter.ai/"), + wiki_url: None, + sign_up_url: Some("https://openrouter.ai/"), + models_list_url: Some("https://openrouter.ai/models"), + supported_purposes: vec![ + AgentPurpose::TextGeneration, + ], + }, + Self::TogetherAI => AgentProviderInfo { + id: Self::TogetherAI.to_static_str(), + name: "Together AI", + description: "Together AI makes it easy to run or [fine-tune](https://docs.together.ai/docs/fine-tuning-overview) leading open source models with only a few lines of code.", + homepage_url: Some("https://www.together.ai/"), + wiki_url: None, + sign_up_url: Some("https://api.together.ai/signup"), + models_list_url: Some("https://api.together.xyz/models"), + supported_purposes: vec![ + AgentPurpose::TextGeneration, + ], + }, + } + } +} + +impl std::fmt::Display for AgentProvider { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.to_static_str()) + } +} + +pub struct AgentProviderInfo { + pub id: &'static str, + pub name: &'static str, + pub description: &'static str, + pub homepage_url: Option<&'static str>, + pub wiki_url: Option<&'static str>, + pub sign_up_url: Option<&'static str>, + pub models_list_url: Option<&'static str>, + pub supported_purposes: Vec, +} diff --git a/src/agent/provider/entity/image_generation.rs b/src/agent/provider/entity/image_generation.rs new file mode 100644 index 0000000..f34096a --- /dev/null +++ b/src/agent/provider/entity/image_generation.rs @@ -0,0 +1,31 @@ +#[derive(Default)] +pub struct ImageGenerationParams { + pub size_override: Option, + + pub cheaper_model_switching_allowed: bool, + + pub cheaper_quality_switching_allowed: bool, +} + +impl ImageGenerationParams { + pub fn with_size_override(mut self, value: Option) -> Self { + self.size_override = value; + self + } + + pub fn with_cheaper_model_switching_allowed(mut self, value: bool) -> Self { + self.cheaper_model_switching_allowed = value; + self + } + + pub fn with_cheaper_quality_switching_allowed(mut self, value: bool) -> Self { + self.cheaper_quality_switching_allowed = value; + self + } +} + +pub struct ImageGenerationResult { + pub bytes: Vec, + pub mime_type: mxlink::mime::Mime, + pub revised_prompt: Option, +} diff --git a/src/agent/provider/entity/mod.rs b/src/agent/provider/entity/mod.rs new file mode 100644 index 0000000..339f2a9 --- /dev/null +++ b/src/agent/provider/entity/mod.rs @@ -0,0 +1,13 @@ +mod agent_provider; +mod image_generation; +mod ping; +mod speech_to_text; +mod text_generation; +mod text_to_speech; + +pub use agent_provider::{AgentProvider, AgentProviderInfo}; +pub use image_generation::{ImageGenerationParams, ImageGenerationResult}; +pub use ping::PingResult; +pub use speech_to_text::{SpeechToTextParams, SpeechToTextResult}; +pub use text_generation::{TextGenerationParams, TextGenerationResult}; +pub use text_to_speech::{TextToSpeechParams, TextToSpeechResult}; diff --git a/src/agent/provider/entity/ping.rs b/src/agent/provider/entity/ping.rs new file mode 100644 index 0000000..95676bc --- /dev/null +++ b/src/agent/provider/entity/ping.rs @@ -0,0 +1,4 @@ +pub enum PingResult { + Inconclusive, + Successful, +} diff --git a/src/agent/provider/entity/speech_to_text.rs b/src/agent/provider/entity/speech_to_text.rs new file mode 100644 index 0000000..2052cde --- /dev/null +++ b/src/agent/provider/entity/speech_to_text.rs @@ -0,0 +1,8 @@ +#[derive(Default)] +pub struct SpeechToTextParams { + pub language_override: Option, +} + +pub struct SpeechToTextResult { + pub text: String, +} diff --git a/src/agent/provider/entity/text_generation.rs b/src/agent/provider/entity/text_generation.rs new file mode 100644 index 0000000..43a6352 --- /dev/null +++ b/src/agent/provider/entity/text_generation.rs @@ -0,0 +1,10 @@ +#[derive(Default)] +pub struct TextGenerationParams { + pub context_management_enabled: bool, + pub prompt_override: Option, + pub temperature_override: Option, +} + +pub struct TextGenerationResult { + pub text: String, +} diff --git a/src/agent/provider/entity/text_to_speech.rs b/src/agent/provider/entity/text_to_speech.rs new file mode 100644 index 0000000..027fd94 --- /dev/null +++ b/src/agent/provider/entity/text_to_speech.rs @@ -0,0 +1,10 @@ +#[derive(Default)] +pub struct TextToSpeechParams { + pub speed_override: Option, + pub voice_override: Option, +} + +pub struct TextToSpeechResult { + pub bytes: Vec, + pub mime_type: mxlink::mime::Mime, +} diff --git a/src/agent/provider/groq/mod.rs b/src/agent/provider/groq/mod.rs new file mode 100644 index 0000000..1cf93ab --- /dev/null +++ b/src/agent/provider/groq/mod.rs @@ -0,0 +1,26 @@ +// Groq is based on openai_compat, because it's not fully compatible with async-openai. + +use super::openai_compat::Config; + +pub fn default_config() -> Config { + let mut config = Config { + base_url: "https://api.groq.com/openai/v1".to_owned(), + + text_to_speech: None, + image_generation: None, + + ..Default::default() + }; + + if let Some(ref mut config) = config.text_generation.as_mut() { + config.model_id = "llama3-70b-8192".to_owned(); + config.max_context_tokens = 131_072; + config.max_response_tokens = 4096; + } + + if let Some(ref mut config) = config.speech_to_text.as_mut() { + config.model_id = "whisper-large-v3".to_owned(); + } + + config +} diff --git a/src/agent/provider/localai/mod.rs b/src/agent/provider/localai/mod.rs new file mode 100644 index 0000000..2eb445c --- /dev/null +++ b/src/agent/provider/localai/mod.rs @@ -0,0 +1,33 @@ +// LocalAI is based on OpenAI (async-openai), because it seems to be fully compatible. +// Moreover, openai_api_rust does not support speech-to-text, so if we wish to use this feature +// we need to stick to async-openai. + +use super::openai_compat::Config; + +pub fn default_config() -> Config { + let mut config = Config { + base_url: "http://my-localai-self-hosted-service:8080/v1".to_owned(), + + ..Default::default() + }; + + if let Some(ref mut config) = config.text_generation.as_mut() { + config.model_id = "gpt-4".to_owned(); + config.max_context_tokens = 128_000; + config.max_response_tokens = 4096; + } + + if let Some(ref mut config) = config.text_to_speech.as_mut() { + config.model_id = "tts-1".to_owned(); + } + + if let Some(ref mut config) = config.speech_to_text.as_mut() { + config.model_id = "whisper-1".to_owned(); + } + + if let Some(ref mut config) = config.image_generation.as_mut() { + config.model_id = "stablediffusion".to_owned(); + } + + config +} diff --git a/src/agent/provider/mistral/mod.rs b/src/agent/provider/mistral/mod.rs new file mode 100644 index 0000000..4da5e82 --- /dev/null +++ b/src/agent/provider/mistral/mod.rs @@ -0,0 +1,22 @@ +// Mistral is based on openai_compat, because it's not fully compatible with async-openai. + +use super::openai_compat::Config; + +pub fn default_config() -> Config { + let mut config = Config { + base_url: "https://api.mistral.ai/v1".to_owned(), + + speech_to_text: None, + text_to_speech: None, + image_generation: None, + + ..Default::default() + }; + + if let Some(ref mut config) = config.text_generation.as_mut() { + config.model_id = "mistral-large-latest".to_owned(); + config.max_context_tokens = 128_000; + } + + config +} diff --git a/src/agent/provider/mod.rs b/src/agent/provider/mod.rs new file mode 100644 index 0000000..587b356 --- /dev/null +++ b/src/agent/provider/mod.rs @@ -0,0 +1,25 @@ +pub mod anthropic; +mod config; +mod controller; +mod entity; +pub(super) mod groq; +pub mod localai; +pub(super) mod mistral; +pub mod ollama; +pub mod openai; +pub mod openai_compat; +pub(super) mod openrouter; +pub(super) mod togetherai; + +fn default_temperature() -> f32 { + 1.0 +} + +pub use controller::{ControllerTrait, ControllerType}; + +pub use config::ConfigTrait; + +pub use entity::{ + AgentProvider, AgentProviderInfo, ImageGenerationParams, PingResult, SpeechToTextParams, + SpeechToTextResult, TextGenerationParams, TextToSpeechParams, +}; diff --git a/src/agent/provider/ollama/mod.rs b/src/agent/provider/ollama/mod.rs new file mode 100644 index 0000000..918a3b9 --- /dev/null +++ b/src/agent/provider/ollama/mod.rs @@ -0,0 +1,24 @@ +// At the time of testing, Ollama can be powered by `openai`, but we use `openai_compat` for better reliability +// in the event of future updates to `async-openai`. + +use super::openai_compat::Config; + +pub fn default_config() -> Config { + let mut config = Config { + base_url: "http://my-ollama-self-hosted-service:11434/v1".to_owned(), + + text_to_speech: None, + image_generation: None, + speech_to_text: None, + + ..Default::default() + }; + + if let Some(ref mut config) = config.text_generation.as_mut() { + config.model_id = "gemma2:2b".to_owned(); + config.max_context_tokens = 128_000; + config.max_response_tokens = 4096; + } + + config +} diff --git a/src/agent/provider/openai/config.rs b/src/agent/provider/openai/config.rs new file mode 100644 index 0000000..9522681 --- /dev/null +++ b/src/agent/provider/openai/config.rs @@ -0,0 +1,190 @@ +use serde::{Deserialize, Serialize}; + +use crate::agent::provider::ConfigTrait; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + pub base_url: String, + + pub api_key: String, + + #[serde(skip_serializing_if = "Option::is_none")] + pub text_generation: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub speech_to_text: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub text_to_speech: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub image_generation: Option, +} + +impl Default for Config { + fn default() -> Self { + Self { + base_url: "https://api.openai.com/v1".to_owned(), + api_key: "YOUR_API_KEY_HERE".to_owned(), + text_generation: Some(TextGenerationConfig::default()), + speech_to_text: Some(SpeechToTextConfig::default()), + text_to_speech: Some(TextToSpeechConfig::default()), + image_generation: Some(ImageGenerationConfig::default()), + } + } +} + +impl ConfigTrait for Config { + fn validate(&self) -> Result<(), String> { + if self.base_url.is_empty() { + return Err("The base URL must not be empty.".to_owned()); + } + + Ok(()) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TextGenerationConfig { + #[serde(default = "default_text_model_id")] + pub model_id: String, + + #[serde(default)] + pub prompt: Option, + + #[serde(default = "super::super::default_temperature")] + pub temperature: f32, + + #[serde(default)] + pub max_response_tokens: u32, + + #[serde(default)] + pub max_context_tokens: u32, +} + +impl Default for TextGenerationConfig { + fn default() -> Self { + Self { + model_id: default_text_model_id(), + prompt: Some("You are a brief, but helpful bot.".to_owned()), + temperature: super::super::default_temperature(), + max_response_tokens: 16_384, + max_context_tokens: 128_000, + } + } +} + +fn default_text_model_id() -> String { + "gpt-4o-2024-08-06".to_owned() +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SpeechToTextConfig { + #[serde(default = "default_speech_to_text_model_id")] + pub model_id: String, +} + +impl Default for SpeechToTextConfig { + fn default() -> Self { + Self { + model_id: default_speech_to_text_model_id(), + } + } +} + +fn default_speech_to_text_model_id() -> String { + "whisper-1".to_owned() +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TextToSpeechConfig { + #[serde(default = "default_text_to_speech_model_id")] + pub model_id: async_openai::types::SpeechModel, + + #[serde(default = "default_text_to_speech_voice")] + pub voice: async_openai::types::Voice, + + #[serde(default = "default_text_to_speech_speed")] + pub speed: f32, + + #[serde(default = "default_text_to_speech_response_format")] + pub response_format: async_openai::types::SpeechResponseFormat, +} + +impl Default for TextToSpeechConfig { + fn default() -> Self { + Self { + model_id: default_text_to_speech_model_id(), + voice: default_text_to_speech_voice(), + speed: default_text_to_speech_speed(), + response_format: default_text_to_speech_response_format(), + } + } +} + +fn default_text_to_speech_model_id() -> async_openai::types::SpeechModel { + async_openai::types::SpeechModel::Tts1Hd +} + +fn default_text_to_speech_voice() -> async_openai::types::Voice { + async_openai::types::Voice::Onyx +} + +fn default_text_to_speech_speed() -> f32 { + 1.0 +} + +fn default_text_to_speech_response_format() -> async_openai::types::SpeechResponseFormat { + // The API defaults to mp3, but we prefer Opus because it's smaller. + // Our clients should all have support for it. + async_openai::types::SpeechResponseFormat::Opus +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ImageGenerationConfig { + pub model_id: String, + + #[serde(default = "default_image_style")] + pub style: async_openai::types::ImageStyle, + + #[serde(default = "default_image_size")] + pub size: async_openai::types::ImageSize, + + #[serde(default = "default_image_quality")] + pub quality: async_openai::types::ImageQuality, +} + +impl Default for ImageGenerationConfig { + fn default() -> Self { + Self { + model_id: "dall-e-3".to_owned(), + style: default_image_style(), + size: default_image_size(), + quality: default_image_quality(), + } + } +} + +impl ImageGenerationConfig { + pub fn model_id_as_openai_image_model( + &self, + ) -> Result { + match self.model_id.as_str() { + "dall-e-2" => Ok(async_openai::types::ImageModel::DallE2), + "dall-e-3" => Ok(async_openai::types::ImageModel::DallE3), + other => Ok(async_openai::types::ImageModel::Other(other.to_owned())), + } + } +} + +fn default_image_style() -> async_openai::types::ImageStyle { + async_openai::types::ImageStyle::Vivid +} + +fn default_image_size() -> async_openai::types::ImageSize { + async_openai::types::ImageSize::S1024x1024 +} + +fn default_image_quality() -> async_openai::types::ImageQuality { + async_openai::types::ImageQuality::Standard +} diff --git a/src/agent/provider/openai/controller.rs b/src/agent/provider/openai/controller.rs new file mode 100644 index 0000000..22be4d8 --- /dev/null +++ b/src/agent/provider/openai/controller.rs @@ -0,0 +1,465 @@ +use std::ops::Deref; + +use async_openai::{ + config::OpenAIConfig, + types::{ + ChatCompletionRequestMessage, CreateChatCompletionRequestArgs, CreateImageRequestArgs, + CreateSpeechRequestArgs, CreateTranscriptionRequestArgs, + }, + Client as OpenAIClient, +}; + +use super::super::ControllerTrait; +use crate::{ + agent::{ + provider::{ + entity::{ImageGenerationResult, PingResult, TextToSpeechParams, TextToSpeechResult}, + openai::utils::convert_string_to_enum, + }, + AgentPurpose, + }, + strings, +}; +use crate::{ + agent::{ + provider::{ + entity::{TextGenerationParams, TextGenerationResult}, + ImageGenerationParams, SpeechToTextParams, SpeechToTextResult, + }, + utils::base64_decode, + }, + conversation::llm::{ + shorten_messages_list_to_context_size, Author as LLMAuthor, + Conversation as LLMConversation, Message as LLMMessage, + }, +}; + +use super::config::Config; + +#[derive(Debug, Clone)] +pub struct Controller { + config: Config, + client: OpenAIClient, +} + +impl Controller { + pub fn new(config: Config) -> Self { + let openai_config = OpenAIConfig::new() + .with_api_base(config.base_url.clone()) + .with_api_key(config.api_key.clone()); + + let client = OpenAIClient::with_config(openai_config); + + Self { config, client } + } +} + +impl ControllerTrait for Controller { + async fn ping(&self) -> anyhow::Result { + if !self.supports_purpose(AgentPurpose::TextGeneration) { + return Ok(PingResult::Inconclusive); + } + + let messages = vec![LLMMessage { + author: LLMAuthor::User, + message_text: "Hello!".to_string(), + }]; + + let conversation = LLMConversation { messages }; + + self.generate_text(conversation, TextGenerationParams::default()) + .await?; + + Ok(PingResult::Successful) + } + + async fn generate_text( + &self, + conversation: LLMConversation, + params: TextGenerationParams, + ) -> anyhow::Result { + let Some(text_generation_config) = &self.config.text_generation else { + return Err(anyhow::anyhow!( + strings::agent::no_configuration_for_purpose_so_cannot_be_used( + &AgentPurpose::TextGeneration + ), + )); + }; + + let prompt_text = params + .prompt_override + .unwrap_or(self.text_generation_prompt().unwrap_or("".to_owned())) + .trim() + .to_owned(); + + let prompt_message = if prompt_text.is_empty() { + None + } else { + Some(LLMMessage { + author: LLMAuthor::Prompt, + message_text: prompt_text, + }) + }; + + let mut conversation_messages = conversation.messages; + + if params.context_management_enabled { + tracing::trace!("Shortening messages list to context size"); + + conversation_messages = shorten_messages_list_to_context_size( + &text_generation_config.model_id, + &prompt_message, + conversation_messages, + text_generation_config.max_response_tokens, + text_generation_config.max_context_tokens, + ); + + tracing::trace!("Finished shortening messages list to context size"); + }; + + if let Some(prompt_message) = prompt_message { + conversation_messages.insert(0, prompt_message); + } + + let openai_conversation_messages: Vec = + super::utils::convert_llm_messages_to_openai_messages(conversation_messages); + + let messages_count = openai_conversation_messages.len(); + + let temperature = params + .temperature_override + .unwrap_or(text_generation_config.temperature); + + let request = CreateChatCompletionRequestArgs::default() + .max_tokens(text_generation_config.max_response_tokens) + .model(&text_generation_config.model_id) + .temperature(temperature) + .messages(openai_conversation_messages) + .build()?; + + if let Ok(request_as_json) = serde_json::to_string(&request) { + tracing::trace!( + model = format!("{:?}", request.model), + ?messages_count, + request = request_as_json, + "Sending OpenAI chat completion API request" + ); + } + + let response = self.client.chat().create(request).await?; + + tracing::trace!( + ?response, + "Got response from the OpenAI chat completion API" + ); + + // We only request 1 result, so there should only be 1 choice. + if let Some(choice) = response.choices.into_iter().next() { + match choice.message.content { + Some(text) => { + return Ok(TextGenerationResult { text }); + } + None => { + return Err(anyhow::anyhow!( + "No content was found in the response choice from the OpenAI chat completion API" + )); + } + } + } + + Err(anyhow::anyhow!( + "No response messages choices were returned from the OpenAI chat completion API" + )) + } + + async fn speech_to_text( + &self, + mime_type: &mxlink::mime::Mime, + media: Vec, + params: SpeechToTextParams, + ) -> anyhow::Result { + let Some(speech_to_text_config) = &self.config.speech_to_text else { + return Err(anyhow::anyhow!( + strings::agent::no_configuration_for_purpose_so_cannot_be_used( + &AgentPurpose::SpeechToText + ), + )); + }; + + let filename = audio_mime_type_to_file_name(mime_type).unwrap_or("audio.ogg".to_string()); + + let language = params.language_override.unwrap_or("".to_string()); + + let request = CreateTranscriptionRequestArgs::default() + .model(&speech_to_text_config.model_id) + .file(async_openai::types::AudioInput { + source: async_openai::types::InputSource::VecU8 { + filename, + vec: media, + }, + }) + .language(language.clone()) + .build()?; + + tracing::trace!( + model_id = speech_to_text_config.model_id, + ?language, + "Sending OpenAI speech-to-text API request" + ); + + let response = self.client.audio().transcribe(request).await?; + + tracing::trace!( + ?response, + "Got response from the OpenAI audio transcription API" + ); + + Ok(SpeechToTextResult { + text: response.text, + }) + } + + async fn generate_image( + &self, + prompt: &str, + params: ImageGenerationParams, + ) -> anyhow::Result { + let Some(image_generation_config) = &self.config.image_generation else { + return Err(anyhow::anyhow!( + strings::agent::no_configuration_for_purpose_so_cannot_be_used( + &AgentPurpose::ImageGeneration + ), + )); + }; + + let original_model = image_generation_config + .model_id_as_openai_image_model() + .map_err(|err| anyhow::anyhow!(err))?; + + let model = if params.cheaper_model_switching_allowed { + // Switch to a cheaper model + match original_model { + async_openai::types::ImageModel::DallE2 => async_openai::types::ImageModel::DallE2, + async_openai::types::ImageModel::DallE3 => async_openai::types::ImageModel::DallE2, + async_openai::types::ImageModel::Other(_) => { + async_openai::types::ImageModel::DallE2 + } + } + } else { + original_model + }; + + let quality = if params.cheaper_quality_switching_allowed { + // Switch to a cheaper quality + match &image_generation_config.quality { + async_openai::types::ImageQuality::Standard => { + async_openai::types::ImageQuality::Standard + } + async_openai::types::ImageQuality::HD => { + async_openai::types::ImageQuality::Standard + } + } + } else { + image_generation_config.quality.clone() + }; + + let size = params + .size_override + .map(|s| { + convert_string_to_enum::(&s) + .unwrap_or(image_generation_config.size) + }) + .unwrap_or(image_generation_config.size); + + let request = CreateImageRequestArgs::default() + .model(model) + .prompt(prompt.to_owned()) + .response_format(async_openai::types::ImageResponseFormat::B64Json) + .size(size) + .style(image_generation_config.style.clone()) + .quality(quality) + .build()?; + + tracing::trace!( + ?prompt, + model = format!("{:?}", request.model), + size = format!("{:?}", request.size), + style = format!("{:?}", request.style), + quality = format!("{:?}", request.quality), + "Sending OpenAI image generation API request" + ); + + let response = self.client.images().create(request).await?; + + if let Some(image) = response.data.into_iter().next() { + match image.deref() { + async_openai::types::Image::B64Json { + b64_json, + revised_prompt, + } => { + let bytes = base64_decode(b64_json)?; + + return Ok(ImageGenerationResult { + bytes, + mime_type: mxlink::mime::IMAGE_PNG, + revised_prompt: revised_prompt.clone(), + }); + } + _ => { + return Err(anyhow::anyhow!("Unexpected image type")); + } + } + } + + Err(anyhow::anyhow!( + "The OpenAI image generation API returned no images" + )) + } + + async fn text_to_speech( + &self, + input: &str, + params: TextToSpeechParams, + ) -> anyhow::Result { + let Some(text_to_speech_config) = &self.config.text_to_speech else { + return Err(anyhow::anyhow!( + strings::agent::no_configuration_for_purpose_so_cannot_be_used( + &AgentPurpose::TextToSpeech + ), + )); + }; + + let speed = params.speed_override.unwrap_or(text_to_speech_config.speed); + + let voice = if let Some(voice_string) = params.voice_override { + // This is a hacky way to construct a Voice enum from the string we have. + let voice: serde_json::Result = + serde_json::from_str(&format!("\"{}\"", voice_string)); + match voice { + Ok(voice) => voice, + Err(err) => { + tracing::debug!(?voice_string, ?err, "Failed to parse voice"); + + return Err(anyhow::anyhow!( + "The configured voice ({}) is not supported.", + voice_string + )); + } + } + } else { + text_to_speech_config.voice.clone() + }; + + let response_format = text_to_speech_config.response_format; + + let mime_type = response_format_to_mime_type(&response_format).unwrap_or( + "audio/mp3" + .parse() + .expect("Failed parsing default mime type"), + ); + + let request = CreateSpeechRequestArgs::default() + .model(text_to_speech_config.model_id.clone()) + .voice(voice) + .speed(speed) + .response_format(response_format) + .input(input) + .build()?; + + tracing::trace!( + model = format!("{:?}", request.model), + voice = format!("{:?}", request.voice), + speed = format!("{:?}", request.speed), + "Sending OpenAI text-to-speech API request" + ); + + let result = self.client.audio().speech(request).await?; + + Ok(TextToSpeechResult { + bytes: result.bytes.into(), + mime_type, + }) + } + + fn supports_purpose(&self, purpose: AgentPurpose) -> bool { + match purpose { + AgentPurpose::TextGeneration => self.config.text_generation.is_some(), + AgentPurpose::SpeechToText => self.config.speech_to_text.is_some(), + AgentPurpose::TextToSpeech => self.config.text_to_speech.is_some(), + AgentPurpose::ImageGeneration => self.config.image_generation.is_some(), + AgentPurpose::CatchAll => true, + } + } + + fn text_generation_prompt(&self) -> Option { + let Some(text_generation_config) = &self.config.text_generation else { + return None; + }; + + text_generation_config.prompt.clone() + } + + fn text_generation_temperature(&self) -> Option { + let Some(text_generation_config) = &self.config.text_generation else { + return None; + }; + + Some(text_generation_config.temperature) + } + + fn text_to_speech_voice(&self) -> Option { + let Some(text_to_speech_config) = &self.config.text_to_speech else { + return None; + }; + + // A hacky way to turn this enum to a string + let voice_as_string = serde_json::to_string(&text_to_speech_config.voice).ok()?; + Some(voice_as_string.replace("\"", "")) + } + + fn text_to_speech_speed(&self) -> Option { + let Some(text_to_speech_config) = &self.config.text_to_speech else { + return None; + }; + + Some(text_to_speech_config.speed) + } +} + +fn response_format_to_mime_type( + response_format: &async_openai::types::SpeechResponseFormat, +) -> Option { + let content_type = match response_format { + async_openai::types::SpeechResponseFormat::Mp3 => "audio/mp3".to_owned(), + async_openai::types::SpeechResponseFormat::Wav => "audio/wav".to_owned(), + async_openai::types::SpeechResponseFormat::Opus => "audio/ogg".to_owned(), + async_openai::types::SpeechResponseFormat::Aac => "audio/aac".to_owned(), + async_openai::types::SpeechResponseFormat::Flac => "audio/flac".to_owned(), + async_openai::types::SpeechResponseFormat::Pcm => "audio/L8".to_owned(), + }; + + match content_type.parse() { + Ok(content_type) => Some(content_type), + Err(err) => { + tracing::error!(?err, "Failed to parse content type"); + None + } + } +} + +fn audio_mime_type_to_file_name(mime_type: &mxlink::mime::Mime) -> Option { + let mime_type_string = mime_type.to_string(); + + let file_extension = match mime_type_string.as_str() { + "audio/flac" => "flac", + "audio/x-m4a" | "audio/m4a" => "m4a", + "audio/mp3" | "audio/mpeg" => "mp3", + "audio/mp4" => "mp4", + "application/ogg" | "audio/ogg" => "ogg", + "audio/wav" | "audio/x-wav" => "wav", + "audio/webm" => "webm", + _ => return None, + }; + + Some(format!("audio.{}", file_extension)) +} diff --git a/src/agent/provider/openai/mod.rs b/src/agent/provider/openai/mod.rs new file mode 100644 index 0000000..a61f213 --- /dev/null +++ b/src/agent/provider/openai/mod.rs @@ -0,0 +1,46 @@ +mod config; +mod controller; +mod utils; + +pub use config::Config; +pub use controller::Controller; + +// openai_compat needs these, so it can convert from its own config types to these +pub(super) use config::ImageGenerationConfig; +pub(super) use config::SpeechToTextConfig; +pub(super) use config::TextGenerationConfig; +pub(super) use config::TextToSpeechConfig; + +use super::super::AgentInstantiationError; +use super::super::AgentInstantiationResult; +use super::controller::ControllerType; +use super::ConfigTrait; + +pub fn create_controller_from_yaml_value_config( + agent_id: &str, + config: serde_yaml::Value, +) -> AgentInstantiationResult { + let config = match &config { + serde_yaml::Value::Mapping(_) => { + let config: Config = + serde_yaml::from_value(config).map_err(AgentInstantiationError::Yaml)?; + + config + .validate() + .map_err(AgentInstantiationError::ConfigFailsValidation)?; + + config + } + _ => { + return Err(AgentInstantiationError::ConfigForAgentIsNotAMapping( + agent_id.to_owned(), + )); + } + }; + + Ok(ControllerType::OpenAI(Box::new(Controller::new(config)))) +} + +pub fn default_config() -> Config { + Config::default() +} diff --git a/src/agent/provider/openai/utils.rs b/src/agent/provider/openai/utils.rs new file mode 100644 index 0000000..c392e7a --- /dev/null +++ b/src/agent/provider/openai/utils.rs @@ -0,0 +1,55 @@ +use async_openai::types::{ + ChatCompletionRequestAssistantMessageArgs, ChatCompletionRequestMessage, + ChatCompletionRequestSystemMessageArgs, ChatCompletionRequestUserMessageArgs, +}; + +use crate::conversation::llm::{Author as LLMAuthor, Message as LLMMessage}; + +pub fn convert_llm_messages_to_openai_messages( + conversation_messages: Vec, +) -> Vec { + let mut openai_conversation_messages: Vec = + Vec::with_capacity(conversation_messages.len()); + + for message in conversation_messages { + openai_conversation_messages.push(convert_llm_message_to_openai_message(message)); + } + + openai_conversation_messages +} + +fn convert_llm_message_to_openai_message(llm_message: LLMMessage) -> ChatCompletionRequestMessage { + match llm_message.author { + LLMAuthor::Prompt => ChatCompletionRequestSystemMessageArgs::default() + .content(llm_message.message_text) + .build() + .expect("Failed building OpenAI system message") + .into(), + LLMAuthor::Assistant => ChatCompletionRequestAssistantMessageArgs::default() + .content(llm_message.message_text) + .build() + .expect("Failed building OpenAI assistant message") + .into(), + LLMAuthor::User => ChatCompletionRequestUserMessageArgs::default() + .content(llm_message.message_text) + .build() + .expect("Failed building OpenAI user message") + .into(), + } +} + +pub(super) fn convert_string_to_enum(value: &str) -> Result +where + T: serde::de::DeserializeOwned, +{ + // This is a hacky way to construct an enum from the string we have. + let enum_result: serde_json::Result = serde_json::from_str(&format!("\"{}\"", value)); + match enum_result { + Ok(enum_result) => Ok(enum_result), + Err(err) => { + tracing::debug!(?err, "Failed to parse into enum"); + + Err(format!("The value ({}) is not supported.", value)) + } + } +} diff --git a/src/agent/provider/openai_compat/config.rs b/src/agent/provider/openai_compat/config.rs new file mode 100644 index 0000000..1a547fb --- /dev/null +++ b/src/agent/provider/openai_compat/config.rs @@ -0,0 +1,261 @@ +use serde::{Deserialize, Serialize}; + +use crate::agent::provider::openai::{ + ImageGenerationConfig as OpenAIImageGenerationConfig, + SpeechToTextConfig as OpenAISpeechToTextConfig, + TextGenerationConfig as OpenAITextGenerationConfig, + TextToSpeechConfig as OpenAITextToSpeechConfig, +}; + +use crate::agent::provider::ConfigTrait; + +use super::utils::convert_string_to_enum; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + pub base_url: String, + + pub api_key: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub text_generation: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub speech_to_text: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub text_to_speech: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub image_generation: Option, +} + +impl Default for Config { + fn default() -> Self { + Self { + base_url: "".to_owned(), + api_key: Some("YOUR_API_KEY_HERE".to_owned()), + text_generation: Some(TextGenerationConfig::default()), + speech_to_text: Some(SpeechToTextConfig::default()), + text_to_speech: Some(TextToSpeechConfig::default()), + image_generation: Some(ImageGenerationConfig::default()), + } + } +} + +impl ConfigTrait for Config { + fn validate(&self) -> Result<(), String> { + if self.base_url.is_empty() { + return Err("The base URL must not be empty.".to_owned()); + } + + Ok(()) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TextGenerationConfig { + #[serde(default = "default_text_model_id")] + pub model_id: String, + + #[serde(default)] + pub prompt: Option, + + #[serde(default = "super::super::default_temperature")] + pub temperature: f32, + + #[serde(default)] + pub max_response_tokens: u32, + + #[serde(default)] + pub max_context_tokens: u32, +} + +impl Default for TextGenerationConfig { + fn default() -> Self { + Self { + model_id: default_text_model_id(), + prompt: Some("You are a brief, but helpful bot.".to_owned()), + temperature: super::super::default_temperature(), + max_response_tokens: 4096, + max_context_tokens: 128_000, + } + } +} + +impl TryInto for TextGenerationConfig { + type Error = anyhow::Error; + + fn try_into(self) -> Result { + Ok(OpenAITextGenerationConfig { + model_id: self.model_id, + prompt: self.prompt, + temperature: self.temperature, + max_response_tokens: self.max_response_tokens, + max_context_tokens: self.max_context_tokens, + }) + } +} + +fn default_text_model_id() -> String { + "some-model".to_owned() +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SpeechToTextConfig { + #[serde(default = "default_speech_to_text_model_id")] + pub model_id: String, +} + +impl Default for SpeechToTextConfig { + fn default() -> Self { + Self { + model_id: default_speech_to_text_model_id(), + } + } +} + +impl TryInto for SpeechToTextConfig { + type Error = anyhow::Error; + + fn try_into(self) -> Result { + Ok(OpenAISpeechToTextConfig { + model_id: self.model_id, + }) + } +} + +fn default_speech_to_text_model_id() -> String { + "whisper-1".to_owned() +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TextToSpeechConfig { + #[serde(default = "default_text_to_speech_model_id")] + pub model_id: String, + + #[serde(default = "default_text_to_speech_voice")] + pub voice: String, + + #[serde(default = "default_text_to_speech_speed")] + pub speed: f32, + + #[serde(default = "default_text_to_speech_response_format")] + pub response_format: String, +} + +impl Default for TextToSpeechConfig { + fn default() -> Self { + Self { + model_id: default_text_to_speech_model_id(), + voice: default_text_to_speech_voice(), + speed: default_text_to_speech_speed(), + response_format: default_text_to_speech_response_format(), + } + } +} + +impl TryInto for TextToSpeechConfig { + type Error = String; + + fn try_into(self) -> Result { + let model_id = convert_string_to_enum::(&self.model_id)?; + + let voice = convert_string_to_enum::(&self.voice)?; + + let response_format = convert_string_to_enum::( + &self.response_format, + )?; + + Ok(OpenAITextToSpeechConfig { + model_id, + voice, + speed: self.speed, + response_format, + }) + } +} + +fn default_text_to_speech_model_id() -> String { + "tts-1".to_owned() +} + +fn default_text_to_speech_voice() -> String { + "onyx".to_owned() +} + +fn default_text_to_speech_speed() -> f32 { + 1.0 +} + +fn default_text_to_speech_response_format() -> String { + "opus".to_owned() +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ImageGenerationConfig { + pub model_id: String, + + #[serde(default = "default_image_style")] + pub style: Option, + + #[serde(default = "default_image_size")] + pub size: Option, + + #[serde(default = "default_image_quality")] + pub quality: Option, +} + +impl Default for ImageGenerationConfig { + fn default() -> Self { + Self { + model_id: "stablediffusion".to_owned(), + style: default_image_style(), + size: default_image_size(), + quality: default_image_quality(), + } + } +} + +impl TryInto for ImageGenerationConfig { + type Error = String; + + fn try_into(self) -> Result { + let size = if let Some(size) = &self.size { + convert_string_to_enum::(size)? + } else { + async_openai::types::ImageSize::S1024x1024 + }; + + let style = if let Some(style) = &self.style { + convert_string_to_enum::(style)? + } else { + async_openai::types::ImageStyle::Vivid + }; + + let quality = if let Some(quality) = &self.quality { + convert_string_to_enum::(quality)? + } else { + async_openai::types::ImageQuality::Standard + }; + + Ok(OpenAIImageGenerationConfig { + model_id: self.model_id, + style, + size, + quality, + }) + } +} + +fn default_image_style() -> Option { + Some("vivid".to_owned()) +} + +fn default_image_size() -> Option { + Some("1024x1024".to_owned()) +} + +fn default_image_quality() -> Option { + Some("standard".to_owned()) +} diff --git a/src/agent/provider/openai_compat/controller.rs b/src/agent/provider/openai_compat/controller.rs new file mode 100644 index 0000000..bb071d6 --- /dev/null +++ b/src/agent/provider/openai_compat/controller.rs @@ -0,0 +1,445 @@ +use openai_api_rust::audio::{AudioApi, AudioBody}; +use openai_api_rust::chat::{ChatApi, ChatBody}; +use openai_api_rust::images::{ImagesApi, ImagesBody}; +use openai_api_rust::{Auth, Message, OpenAI}; + +use super::super::ControllerTrait; +use crate::agent::utils::base64_decode; +use crate::{ + agent::provider::{ + entity::{TextGenerationParams, TextGenerationResult}, + ImageGenerationParams, SpeechToTextParams, SpeechToTextResult, + }, + conversation::llm::{ + shorten_messages_list_to_context_size, Author as LLMAuthor, + Conversation as LLMConversation, Message as LLMMessage, + }, +}; +use crate::{ + agent::{ + provider::entity::{ + ImageGenerationResult, PingResult, TextToSpeechParams, TextToSpeechResult, + }, + AgentPurpose, + }, + strings, +}; + +use super::Config; + +#[derive(Debug, Clone)] +pub struct Controller { + config: Config, + client: OpenAI, +} + +impl Controller { + pub fn new(config: Config) -> Self { + let api_key = config.api_key.clone().unwrap_or("".to_owned()); + + let auth = Auth::new(&api_key); + + // The library we use chokes if there's no trailing slash + let base_url = if config.base_url.ends_with("/") { + config.base_url.clone() + } else { + format!("{}/", config.base_url) + }; + + let client = OpenAI::new(auth, &base_url); + + Self { config, client } + } +} + +impl ControllerTrait for Controller { + async fn ping(&self) -> anyhow::Result { + if !self.supports_purpose(AgentPurpose::TextGeneration) { + return Ok(PingResult::Inconclusive); + } + + let messages = vec![LLMMessage { + author: LLMAuthor::User, + message_text: "Hello!".to_string(), + }]; + + let conversation = LLMConversation { messages }; + + self.generate_text(conversation, TextGenerationParams::default()) + .await?; + + Ok(PingResult::Successful) + } + + async fn generate_text( + &self, + conversation: LLMConversation, + params: TextGenerationParams, + ) -> anyhow::Result { + let Some(text_generation_config) = &self.config.text_generation else { + return Err(anyhow::anyhow!( + strings::agent::no_configuration_for_purpose_so_cannot_be_used( + &AgentPurpose::TextGeneration + ), + )); + }; + + let prompt_text = params + .prompt_override + .unwrap_or(self.text_generation_prompt().unwrap_or("".to_owned())) + .trim() + .to_owned(); + + let prompt_message = if prompt_text.is_empty() { + None + } else { + Some(LLMMessage { + author: LLMAuthor::Prompt, + message_text: prompt_text, + }) + }; + + let mut conversation_messages = conversation.messages; + + if params.context_management_enabled { + tracing::trace!("Shortening messages list to context size"); + + conversation_messages = shorten_messages_list_to_context_size( + &text_generation_config.model_id, + &prompt_message, + conversation_messages, + text_generation_config.max_response_tokens, + text_generation_config.max_context_tokens, + ); + + tracing::trace!("Finished shortening messages list to context size"); + }; + + if let Some(prompt_message) = prompt_message { + conversation_messages.insert(0, prompt_message); + } + + let openai_conversation_messages: Vec = + super::utils::convert_llm_messages_to_openai_messages(conversation_messages); + + let messages_count = openai_conversation_messages.len(); + + let temperature = params + .temperature_override + .unwrap_or(text_generation_config.temperature); + + let max_tokens = text_generation_config + .max_response_tokens + .try_into() + .expect("Failed converting max_response_tokens from u32 to i32"); + + let request = ChatBody { + model: text_generation_config.model_id.clone(), + max_tokens: Some(max_tokens), + temperature: Some(temperature), + top_p: None, + n: Some(1), + stream: Some(false), + stop: None, + presence_penalty: None, + frequency_penalty: None, + logit_bias: None, + user: None, + messages: openai_conversation_messages, + }; + + if let Ok(request_as_json) = serde_json::to_string(&request) { + tracing::trace!( + model = format!("{:?}", request.model), + ?messages_count, + request = request_as_json, + "Sending OpenAI-compat chat completion API request" + ); + } + + // This library is not async-aware, so we need to use `spawn_blocking` to run the request on a separate thread. + let client = self.client.clone(); + let response = + tokio::task::spawn_blocking(move || client.chat_completion_create(&request)).await?; + + let response = match response { + Ok(response) => response, + Err(err) => { + return Err(anyhow::anyhow!( + "Failed to get response from the OpenAI-compat chat completion API: {:?}", + err + )); + } + }; + + tracing::trace!( + ?response, + "Got response from the OpenAI-compat chat completion API" + ); + + // We only request 1 result, so there should only be 1 choice. + if let Some(choice) = response.choices.into_iter().next() { + let Some(message) = choice.message else { + return Err(anyhow::anyhow!( + "No response message in choice was returned from the OpenAI-compat chat completion API" + )); + }; + + return Ok(TextGenerationResult { + text: message.content, + }); + } + + Err(anyhow::anyhow!( + "No response messages choices were returned from the OpenAI-compat chat completion API" + )) + } + + async fn speech_to_text( + &self, + _mime_type: &mxlink::mime::Mime, + media: Vec, + params: SpeechToTextParams, + ) -> anyhow::Result { + let Some(speech_to_text_config) = &self.config.speech_to_text else { + return Err(anyhow::anyhow!( + strings::agent::no_configuration_for_purpose_so_cannot_be_used( + &AgentPurpose::SpeechToText + ), + )); + }; + + // This library does not support passing the audio data as a byte slice, so we need to write it to a temporary file :/ + // + // This temporary file will get auto-deleted when the variable goes out of scope. + let temp_file = tokio::task::spawn_blocking(move || { + let mut temp_file = match tempfile::NamedTempFile::new() { + Ok(file) => file, + Err(e) => return Err(e), + }; + + match std::io::Write::write_all(&mut temp_file, &media) { + Ok(_) => (), + Err(e) => return Err(e), + } + + Ok(temp_file) + }) + .await??; + + let file_path = temp_file + .path() + .to_str() + .ok_or_else(|| anyhow::anyhow!("Failed to get temporary file path"))?; + + let language = params.language_override.clone(); + + let request = AudioBody { + file: std::fs::File::open(file_path)?, + model: speech_to_text_config.model_id.to_owned(), + prompt: None, + response_format: None, + temperature: None, + language: language.clone(), + }; + + tracing::trace!( + model_id = speech_to_text_config.model_id, + ?language, + "Sending OpenAI-compat speech-to-text API request" + ); + + // This library is not async-aware, so we need to use `spawn_blocking` to run the request on a separate thread. + let client = self.client.clone(); + let response = + tokio::task::spawn_blocking(move || client.audio_transcription_create(request)).await?; + + let response = match response { + Ok(response) => response, + Err(err) => { + return Err(anyhow::anyhow!( + "Failed to get response from the OpenAI-compat audio transcription API: {:?}", + err + )); + } + }; + + tracing::trace!( + ?response, + "Got response from the OpenAI-compat audio transcription API" + ); + + let Some(text) = response.text else { + return Err(anyhow::anyhow!( + "No response text was returned from the OpenAI-compat audio transcription API" + )); + }; + + Ok(SpeechToTextResult { text }) + } + + async fn generate_image( + &self, + prompt: &str, + params: ImageGenerationParams, + ) -> anyhow::Result { + let Some(image_generation_config) = &self.config.image_generation else { + return Err(anyhow::anyhow!( + strings::agent::no_configuration_for_purpose_so_cannot_be_used( + &AgentPurpose::ImageGeneration + ), + )); + }; + + // It seems like some OpenAI-compatible providers (e.g. LocalAI with StableDiffusion) skip some requirements + // when they span multiple lines. + let prompt = prompt.replace("\n", " "); + + let size: Option = params + .size_override + .or_else(|| image_generation_config.size.clone()); + + let request = ImagesBody { + model: Some(image_generation_config.model_id.to_owned()), + prompt: prompt.to_owned(), + n: Some(1), + quality: image_generation_config.quality.clone(), + size, + style: image_generation_config.style.clone(), + response_format: Some("b64_json".to_string()), + user: None, + }; + + tracing::trace!( + ?prompt, + model = format!("{:?}", request.model), + size = format!("{:?}", request.size), + style = format!("{:?}", request.style), + quality = format!("{:?}", request.quality), + "Sending OpenAI-compat image generation API request" + ); + + // This library is not async-aware, so we need to use `spawn_blocking` to run the request on a separate thread. + let client = self.client.clone(); + let response = tokio::task::spawn_blocking(move || client.image_create(&request)).await?; + + let response = match response { + Ok(response) => response, + Err(err) => { + return Err(anyhow::anyhow!( + "Failed to get response from the OpenAI-compat image creation API: {:?}", + err + )); + } + }; + + let Some(data) = response.data else { + return Err(anyhow::anyhow!( + "The OpenAI-compat image generationAPI returned no image data" + )); + }; + + if let Some(image) = data.into_iter().next() { + let Some(b64_json) = &image.b64_json else { + return Err(anyhow::anyhow!( + "The OpenAI-compat image generation API returned no b64_json image data" + )); + }; + + let bytes = base64_decode(b64_json)?; + + return Ok(ImageGenerationResult { + bytes, + mime_type: mxlink::mime::IMAGE_PNG, + revised_prompt: image.revised_prompt, + }); + } + + Err(anyhow::anyhow!( + "The OpenAI image generation API returned no images" + )) + } + + async fn text_to_speech( + &self, + input: &str, + params: TextToSpeechParams, + ) -> anyhow::Result { + // openai_api_rust does not support text-to-speech, so our only bet is to do it via async-openai and hope it works. + // At the time of testing (2024-09-09), providers like LocalAI can be used for text-to-speech via async-openai. + // + // So.. below we try to convert our Config struct to the Config struct from the openai module + // and invoke the openai controller. + + // Quick check to make sure doing work below is worth it + let Some(_text_to_speech_config) = &self.config.text_to_speech else { + return Err(anyhow::anyhow!( + strings::agent::no_configuration_for_purpose_so_cannot_be_used( + &AgentPurpose::TextToSpeech + ), + )); + }; + + tracing::debug!("Converting OpenAI-compact config to OpenAI config.."); + + let openai_config = super::utils::convert_config_to_openai_config_lossy(&self.config); + + let Some(_text_to_speech_config) = &openai_config.text_to_speech else { + return Err(anyhow::anyhow!( + strings::agent::no_configuration_for_purpose_after_conversion_so_cannot_be_used( + &AgentPurpose::TextToSpeech + ), + )); + }; + + let openai_controller = super::super::openai::Controller::new(openai_config); + + tracing::error!("Invoking text-to-speech via the OpenAI controller.."); + + openai_controller.text_to_speech(input, params).await + } + + fn supports_purpose(&self, purpose: AgentPurpose) -> bool { + match purpose { + AgentPurpose::ImageGeneration => self.config.image_generation.is_some(), + AgentPurpose::TextGeneration => self.config.text_generation.is_some(), + AgentPurpose::SpeechToText => self.config.speech_to_text.is_some(), + AgentPurpose::TextToSpeech => self.config.text_to_speech.is_some(), + AgentPurpose::CatchAll => true, + } + } + + fn text_generation_prompt(&self) -> Option { + let Some(text_generation_config) = &self.config.text_generation else { + return None; + }; + + text_generation_config.prompt.clone() + } + + fn text_generation_temperature(&self) -> Option { + let Some(text_generation_config) = &self.config.text_generation else { + return None; + }; + + Some(text_generation_config.temperature) + } + + fn text_to_speech_voice(&self) -> Option { + let Some(text_to_speech_config) = &self.config.text_to_speech else { + return None; + }; + + // A hacky way to turn this enum to a string + let voice_as_string = serde_json::to_string(&text_to_speech_config.voice).ok()?; + Some(voice_as_string.replace("\"", "")) + } + + fn text_to_speech_speed(&self) -> Option { + let Some(text_to_speech_config) = &self.config.text_to_speech else { + return None; + }; + + Some(text_to_speech_config.speed) + } +} diff --git a/src/agent/provider/openai_compat/mod.rs b/src/agent/provider/openai_compat/mod.rs new file mode 100644 index 0000000..9fc6c12 --- /dev/null +++ b/src/agent/provider/openai_compat/mod.rs @@ -0,0 +1,70 @@ +// The openai_compat provider aims to support a wider ranger of OpenAI-compatible providers. +// +// The `openai` provider is based on `async-openai`, which only aims to support the OpenAI API spec. See: +// - https://github.com/64bit/async-openai/issues/266 +// - https://github.com/64bit/async-openai/blob/05d5a1b4fa6476829dd1a34447b80279cf89d4f8/async-openai/README.md#contributing +// +// This module uses its own configuration, which avoids using strict types tied to OpenAI, +// and thus allows for more flexibility. +// +// Communication with the OpenAI-compatible API is handled by the `openai_api_rust` crate. +// Since this crate is not async-aware, we need to use tokio's `spawn_blocking` to invoke it. +// +// Certain features (e.g. text-to-speech) are not supported by `openai_api_rust` yet, so we may try to delegate them to the `openai` provider. + +mod config; +mod controller; +mod utils; + +pub use config::Config; +pub use controller::Controller; + +use super::super::AgentInstantiationError; +use super::super::AgentInstantiationResult; +use super::controller::ControllerType; +use super::ConfigTrait; + +pub fn create_controller_from_yaml_value_config( + agent_id: &str, + config: serde_yaml::Value, +) -> AgentInstantiationResult { + let config = match &config { + serde_yaml::Value::Mapping(_) => { + let config: Config = + serde_yaml::from_value(config).map_err(AgentInstantiationError::Yaml)?; + + config + .validate() + .map_err(AgentInstantiationError::ConfigFailsValidation)?; + + config + } + _ => { + return Err(AgentInstantiationError::ConfigForAgentIsNotAMapping( + agent_id.to_owned(), + )); + } + }; + + Ok(ControllerType::OpenAICompat(Box::new(Controller::new( + config, + )))) +} + +pub fn default_config() -> Config { + let mut config = Config::default(); + + if let Some(text_generation) = &mut config.text_generation { + text_generation.model_id = "some-model".to_string(); + text_generation.max_response_tokens = 4096; + text_generation.max_context_tokens = 128_000; + } + + // We don't support these, so let's remove them from the configuration. + config.text_to_speech = None; + config.image_generation = None; + + config.base_url = "".to_owned(); + + config +} diff --git a/src/agent/provider/openai_compat/utils.rs b/src/agent/provider/openai_compat/utils.rs new file mode 100644 index 0000000..bcf723c --- /dev/null +++ b/src/agent/provider/openai_compat/utils.rs @@ -0,0 +1,78 @@ +use openai_api_rust::{Message, Role}; + +use crate::agent::provider::openai::Config as OpenAIConfig; + +use crate::conversation::llm::{Author as LLMAuthor, Message as LLMMessage}; + +pub fn convert_llm_messages_to_openai_messages( + conversation_messages: Vec, +) -> Vec { + let mut openai_conversation_messages: Vec = + Vec::with_capacity(conversation_messages.len()); + + for message in conversation_messages { + openai_conversation_messages.push(convert_llm_message_to_openai_message(message)); + } + + openai_conversation_messages +} + +fn convert_llm_message_to_openai_message(llm_message: LLMMessage) -> Message { + let role = match llm_message.author { + LLMAuthor::Prompt => Role::System, + LLMAuthor::Assistant => Role::Assistant, + LLMAuthor::User => Role::User, + }; + + Message { + role, + content: llm_message.message_text, + } +} + +pub(super) fn convert_config_to_openai_config_lossy(config: &super::Config) -> OpenAIConfig { + let text_generation = config + .text_generation + .as_ref() + .and_then(|tg| tg.clone().try_into().ok()); + + let speech_to_text = config + .speech_to_text + .as_ref() + .and_then(|stt| stt.clone().try_into().ok()); + + let text_to_speech = config + .text_to_speech + .as_ref() + .and_then(|tts| tts.clone().try_into().ok()); + + let image_generation = config + .image_generation + .as_ref() + .and_then(|ig| ig.clone().try_into().ok()); + + OpenAIConfig { + api_key: config.api_key.clone().unwrap_or("".to_string()), + text_generation, + speech_to_text, + text_to_speech, + image_generation, + base_url: config.base_url.clone(), + } +} + +pub(super) fn convert_string_to_enum(value: &str) -> Result +where + T: serde::de::DeserializeOwned, +{ + // This is a hacky way to construct an enum from the string we have. + let enum_result: serde_json::Result = serde_json::from_str(&format!("\"{}\"", value)); + match enum_result { + Ok(enum_result) => Ok(enum_result), + Err(err) => { + tracing::debug!(?err, "Failed to parse into enum"); + + Err(format!("The value ({}) is not supported.", value)) + } + } +} diff --git a/src/agent/provider/openrouter/mod.rs b/src/agent/provider/openrouter/mod.rs new file mode 100644 index 0000000..56b0c43 --- /dev/null +++ b/src/agent/provider/openrouter/mod.rs @@ -0,0 +1,21 @@ +use super::openai_compat::Config; + +pub fn default_config() -> Config { + let mut config = Config { + base_url: "https://openrouter.ai/api/v1".to_owned(), + + text_to_speech: None, + image_generation: None, + speech_to_text: None, + + ..Default::default() + }; + + if let Some(ref mut config) = config.text_generation.as_mut() { + config.model_id = "mattshumer/reflection-70b:free".to_owned(); + config.max_context_tokens = 8192; + config.max_response_tokens = 2048; + } + + config +} diff --git a/src/agent/provider/togetherai/mod.rs b/src/agent/provider/togetherai/mod.rs new file mode 100644 index 0000000..ccf0a2c --- /dev/null +++ b/src/agent/provider/togetherai/mod.rs @@ -0,0 +1,21 @@ +use super::openai_compat::Config; + +pub fn default_config() -> Config { + let mut config = Config { + base_url: "https://api.together.xyz/v1".to_owned(), + + text_to_speech: None, + image_generation: None, + speech_to_text: None, + + ..Default::default() + }; + + if let Some(ref mut config) = config.text_generation.as_mut() { + config.model_id = "meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo".to_owned(); + config.max_context_tokens = 8192; + config.max_response_tokens = 2048; + } + + config +} diff --git a/src/agent/purpose.rs b/src/agent/purpose.rs new file mode 100644 index 0000000..242a591 --- /dev/null +++ b/src/agent/purpose.rs @@ -0,0 +1,67 @@ +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum AgentPurpose { + CatchAll, + ImageGeneration, + TextGeneration, + TextToSpeech, + SpeechToText, +} + +impl AgentPurpose { + pub fn from_str(s: &str) -> Option { + match s { + "catch-all" => Some(Self::CatchAll), + "image-generation" => Some(Self::ImageGeneration), + "text-generation" => Some(Self::TextGeneration), + "text-to-speech" => Some(Self::TextToSpeech), + "speech-to-text" => Some(Self::SpeechToText), + _ => None, + } + } + + pub fn as_str(&self) -> &'static str { + match self { + Self::CatchAll => "catch-all", + Self::ImageGeneration => "image-generation", + Self::TextGeneration => "text-generation", + Self::TextToSpeech => "text-to-speech", + Self::SpeechToText => "speech-to-text", + } + } + + pub fn choices() -> Vec<&'static Self> { + vec![ + &Self::TextGeneration, + &Self::SpeechToText, + &Self::TextToSpeech, + &Self::ImageGeneration, + &Self::CatchAll, + ] + } + + pub fn emoji(&self) -> &'static str { + match self { + Self::CatchAll => "❓", + Self::TextGeneration => "đŸ’Ŧ", + Self::SpeechToText => "đŸĻģ", + Self::TextToSpeech => "đŸ—Ŗī¸", + Self::ImageGeneration => "đŸ–Œī¸", + } + } + + pub fn heading(&self) -> &'static str { + match self { + Self::CatchAll => "Catch-All", + Self::TextGeneration => "Text Generation", + Self::SpeechToText => "Speech-to-Text", + Self::TextToSpeech => "Text-to-Speech", + Self::ImageGeneration => "Image Generation", + } + } +} + +impl std::fmt::Display for AgentPurpose { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(self.as_str()) + } +} diff --git a/src/agent/utils.rs b/src/agent/utils.rs new file mode 100644 index 0000000..a97029a --- /dev/null +++ b/src/agent/utils.rs @@ -0,0 +1,146 @@ +use base64::{engine::general_purpose::STANDARD, Engine as _}; + +use crate::{ + agent::{ + AgentInstance, AgentPurpose, ControllerTrait, Manager as AgentManager, PublicIdentifier, + }, + entity::RoomConfigContext, + strings, +}; + +#[derive(Debug)] +pub struct AgentForPurposeDeterminationInfo { + pub instance: AgentInstance, + pub configuration_source: AgentForPurposeDeterminationInfoConfigurationSource, +} + +#[derive(Debug)] +pub enum AgentForPurposeDeterminationInfoConfigurationSource { + Room, + Global, +} + +#[derive(Debug)] +pub enum AgentForPurposeDeterminationError { + Unknown(String), + + NoneConfigured, + + ConfiguredButMissing(PublicIdentifier), + + ConfiguredButLacksSupport(PublicIdentifier), +} + +pub async fn get_effective_agent_for_purpose( + agent_manager: &AgentManager, + room_config_context: &RoomConfigContext, + agent_purpose: AgentPurpose, +) -> Result { + let (agent_identifier, configuration_source) = + match get_effective_room_agent_identifier_for_purpose(room_config_context, agent_purpose) + .await + { + Ok((agent_identifier, configuration_source)) => { + (agent_identifier, configuration_source) + } + Err(err) => { + return Err(AgentForPurposeDeterminationError::Unknown(err)); + } + }; + + let Some(agent_identifier) = agent_identifier else { + return Err(AgentForPurposeDeterminationError::NoneConfigured); + }; + + let agents = agent_manager.available_room_agents_by_room_config_context(room_config_context); + + let Some(agent_instance) = agents.iter().find(|a| *a.identifier() == agent_identifier) else { + return Err(AgentForPurposeDeterminationError::ConfiguredButMissing( + agent_identifier, + )); + }; + + let agent_instance = agent_instance.clone(); + + let supports_purpose = agent_instance.controller().supports_purpose(agent_purpose); + + if !supports_purpose { + return Err(AgentForPurposeDeterminationError::ConfiguredButLacksSupport(agent_identifier)); + } + + Ok(AgentForPurposeDeterminationInfo { + instance: agent_instance, + configuration_source, + }) +} + +async fn get_effective_room_agent_identifier_for_purpose( + room_config_context: &RoomConfigContext, + purpose: AgentPurpose, +) -> Result< + ( + Option, + AgentForPurposeDeterminationInfoConfigurationSource, + ), + String, +> { + let (agent_id, configuration_source) = + get_effective_room_agent_raw_id_for_purpose(room_config_context, purpose).await; + + let Some(agent_id) = agent_id else { + return Ok((None, configuration_source)); + }; + + let agent_identifier = match PublicIdentifier::from_str(agent_id.as_str()) { + Some(agent_identifier) => agent_identifier, + None => return Err(strings::agent::invalid_id_generic()), + }; + + Ok((Some(agent_identifier), configuration_source)) +} + +async fn get_effective_room_agent_raw_id_for_purpose( + room_config_context: &RoomConfigContext, + purpose: AgentPurpose, +) -> ( + Option, + AgentForPurposeDeterminationInfoConfigurationSource, +) { + let agent_id = room_config_context + .room_config + .settings + .handler + .get_by_purpose_with_catch_all_fallback(purpose); + + if let Some(agent_id) = agent_id { + return ( + Some(agent_id), + AgentForPurposeDeterminationInfoConfigurationSource::Room, + ); + } + + tracing::trace!( + ?purpose, + "No specific agent found for purpose in room, falling back to global.", + ); + + ( + get_global_agent_id_for_purpose(room_config_context, purpose).await, + AgentForPurposeDeterminationInfoConfigurationSource::Global, + ) +} + +async fn get_global_agent_id_for_purpose( + room_config_context: &RoomConfigContext, + purpose: AgentPurpose, +) -> Option { + room_config_context + .global_config + .fallback_room_settings + .handler + .get_by_purpose_with_catch_all_fallback(purpose) +} + +pub(crate) fn base64_decode(base64_string: &str) -> Result, base64::DecodeError> { + STANDARD.decode(base64_string) +} diff --git a/src/bot/implementation.rs b/src/bot/implementation.rs new file mode 100644 index 0000000..29e077c --- /dev/null +++ b/src/bot/implementation.rs @@ -0,0 +1,419 @@ +use std::sync::Arc; +use std::{future::Future, pin::Pin}; + +use mxlink::matrix_sdk::media::{MediaFormat, MediaRequest}; +use mxlink::matrix_sdk::ruma::{ + events::room::MediaSource, MilliSecondsSinceUnixEpoch, OwnedUserId, +}; +use mxlink::matrix_sdk::Room; + +use mxlink::{ + InitConfig, LoginConfig, LoginCredentials, LoginEncryption, MatrixLink, PersistenceConfig, +}; + +use mxlink::helpers::account_data_config::{ + ConfigError, GlobalConfigManager as AccountDataGlobalConfigManager, + RoomConfigManager as AccountDataRoomConfigManager, +}; +use mxlink::helpers::encryption::Manager as EncryptionManager; + +use crate::agent::Manager as AgentManager; +use crate::entity::catch_up_marker::{ + CatchUpMarker, CatchUpMarkerManager, DelayedCatchUpMarkerManager, +}; +use crate::entity::cfg::Config; +use crate::entity::globalconfig::{GlobalConfig, GlobalConfigurationManager}; +use crate::entity::roomconfig::{RoomConfig, RoomConfigurationManager}; + +use crate::agent::Manager; + +use crate::conversation::matrix::{RoomDisplayNameFetcher, RoomEventFetcher}; + +const ROOM_EVENT_FETCHER_LRU_CACHE_SIZE: usize = 1000; +const ROOM_DISPLAY_NAME_FETCHER_LRU_CACHE_SIZE: usize = 1000; +const ROOM_CONFIG_MANAGER_LRU_CACHE_SIZE: usize = 1000; + +const LOGO_BYTES: &[u8] = include_bytes!("../../etc/assets/baibot-torso-768.png"); +const LOGO_MIME_TYPE: &str = "image/png"; + +/// Controls how often we persist the catch-up marker to Account Data. +/// Consult the `DelayedCatchUpMarkerManager` documentation for more information. +const DELAYED_CATCH_UP_MARKER_MANAGER_PERSIST_INTERVAL_DURATION: std::time::Duration = + std::time::Duration::from_secs(10); + +/// Controls what federation delay we will tolerate. The timestamp that gets persisted +/// will be based on the last seen event's `origin_server_ts` minus this duration. +/// Consult the `DelayedCatchUpMarkerManager` documentation for more information. +const DELAYED_CATCH_UP_MARKER_MANAGER_FEDERATION_DELAY_TOLERANCE_DURATION: std::time::Duration = + std::time::Duration::from_secs(90); + +struct BotInner { + config: Config, + + matrix_link: MatrixLink, + delayed_catch_up_marker_manager: DelayedCatchUpMarkerManager, + global_config_manager: tokio::sync::Mutex, + room_config_manager: tokio::sync::Mutex, + room_event_fetcher: Arc, + room_display_name_fetcher: Arc, + agent_manager: Manager, + admin_pattern_regexes: Vec, +} + +/// Bot represents a bot instance. +/// +/// All of the state is held in an `Arc` so the `Bot` can be cloned freely. +#[derive(Clone)] +pub struct Bot { + inner: Arc, +} + +impl Bot { + pub async fn new(config: Config) -> anyhow::Result { + // Take some potentially problematic configuration values out of the config early on. + // If we'd be failing, we'd like it to happen early, before we log in, etc. + + let initial_global_config: GlobalConfig = + config.initial_global_config.clone().try_into()?; + + let admin_pattern_regexes = config.access.admin_pattern_regexes()?; + let persistence_config_encryption_key = config.persistence.config_encryption_key()?; + + let agent_manager = AgentManager::new(config.agents.static_definitions.clone())?; + + let encryption_manager = EncryptionManager::new(persistence_config_encryption_key); + + let matrix_link = create_matrix_link(&config).await?; + + let catch_up_marker_manager = create_catch_up_marker_manager(matrix_link.clone()); + + let delayed_catch_up_marker_manager = DelayedCatchUpMarkerManager::new( + catch_up_marker_manager, + DELAYED_CATCH_UP_MARKER_MANAGER_PERSIST_INTERVAL_DURATION, + DELAYED_CATCH_UP_MARKER_MANAGER_FEDERATION_DELAY_TOLERANCE_DURATION, + ); + + let global_config_manager = tokio::sync::Mutex::new(create_global_configuration_manager( + matrix_link.clone(), + encryption_manager.clone(), + initial_global_config, + )); + + let room_config_manager = tokio::sync::Mutex::new(create_room_configuration_manager( + matrix_link.clone(), + encryption_manager.clone(), + )); + + let room_event_fetcher = RoomEventFetcher::new(Some(ROOM_EVENT_FETCHER_LRU_CACHE_SIZE)); + + let room_display_name_fetcher = RoomDisplayNameFetcher::new( + matrix_link.clone(), + Some(ROOM_DISPLAY_NAME_FETCHER_LRU_CACHE_SIZE), + ); + + Ok(Self { + inner: Arc::new(BotInner { + config, + + matrix_link, + delayed_catch_up_marker_manager, + global_config_manager, + room_config_manager, + room_event_fetcher: Arc::new(room_event_fetcher), + room_display_name_fetcher: Arc::new(room_display_name_fetcher), + agent_manager, + admin_pattern_regexes, + }), + }) + } + + pub(crate) fn admin_patterns(&self) -> &Vec { + &self.inner.config.access.admin_patterns + } + + pub(crate) fn name(&self) -> &str { + &self.inner.config.user.name + } + + pub(crate) fn command_prefix(&self) -> &str { + &self.inner.config.command_prefix + } + + pub(crate) fn homeserver_name(&self) -> &str { + &self.inner.config.homeserver.server_name + } + + pub(crate) fn global_config_manager(&self) -> &tokio::sync::Mutex { + &self.inner.global_config_manager + } + + pub(crate) fn room_config_manager(&self) -> &tokio::sync::Mutex { + &self.inner.room_config_manager + } + + pub(crate) fn room_event_fetcher(&self) -> Arc { + self.inner.room_event_fetcher.clone() + } + + pub(crate) fn room_display_name_fetcher(&self) -> Arc { + self.inner.room_display_name_fetcher.clone() + } + + pub(crate) fn agent_manager(&self) -> &Manager { + &self.inner.agent_manager + } + + pub(crate) fn matrix_link(&self) -> &MatrixLink { + &self.inner.matrix_link + } + + pub(crate) fn user_id(&self) -> &OwnedUserId { + self.matrix_link().user_id() + } + + pub(crate) fn reacting(&self) -> super::reacting::Reacting { + super::reacting::Reacting::new(self.clone()) + } + + pub(crate) fn rooms(&self) -> super::rooms::Rooms { + super::rooms::Rooms::new(self.clone()) + } + + pub(crate) fn messaging(&self) -> super::messaging::Messaging { + super::messaging::Messaging::new(self.clone()) + } + + pub(crate) fn admin_pattern_regexes(&self) -> &Vec { + &self.inner.admin_pattern_regexes + } + + pub(crate) async fn global_config(&self) -> Result { + let mut global_config_manager_guard = self.inner.global_config_manager.lock().await; + + global_config_manager_guard.get_or_create().await + } + + pub(crate) async fn is_caught_up( + &self, + event_origin_server_ts: MilliSecondsSinceUnixEpoch, + ) -> Result { + self.inner + .delayed_catch_up_marker_manager + .is_caught_up(event_origin_server_ts.0.into()) + .await + } + + pub(crate) async fn catch_up(&self, event_origin_server_ts: MilliSecondsSinceUnixEpoch) { + self.inner + .delayed_catch_up_marker_manager + .catch_up(event_origin_server_ts.0.into()) + .await + } + + pub async fn start(&self) -> anyhow::Result<()> { + self.rooms().attach_event_handlers().await; + self.messaging().attach_event_handlers().await; + self.reacting().attach_event_handlers().await; + + self.inner.delayed_catch_up_marker_manager.start().await; + + self.prepare_profile().await?; + + self.inner + .matrix_link + .start() + .await + .map_err(|e| anyhow::anyhow!("Failed to sync: {:?}", e)) + } + + async fn prepare_profile(&self) -> anyhow::Result<()> { + use std::time::Duration; + use tokio::time::sleep; + + let mut delay = Duration::from_secs(3); + let max_delay = Duration::from_secs(30); + + loop { + match self.do_prepare_profile().await { + Ok(_) => return Ok(()), + Err(err) => { + tracing::warn!( + ?err, + ?delay, + "Failed to prepare profile.. Will retry after delay..." + ); + + sleep(delay).await; + + delay = std::cmp::min(delay * 2, max_delay); + } + } + } + } + + async fn do_prepare_profile(&self) -> anyhow::Result<()> { + tracing::debug!("Preparing profile.."); + + let account = self.inner.matrix_link.client().account(); + let media = self.inner.matrix_link.client().media(); + + let desired_display_name = self.inner.config.user.name.clone(); + + let profile = account + .get_profile() + .await + .map_err(|e| anyhow::anyhow!("Failed fetching profile: {:?}", e))?; + + let should_update_display_name = match &profile.displayname { + Some(displayname) => displayname != &desired_display_name, + None => true, + }; + + if should_update_display_name { + tracing::info!( + ?profile.displayname, + ?desired_display_name, + "Updating display name.." + ); + + if let Err(err) = account.set_display_name(Some(&desired_display_name)).await { + return Err(anyhow::anyhow!("Failed setting display name: {:?}", err)); + } + } + + let should_update_avatar = match &profile.avatar_url { + Some(avatar_url) => { + let request = MediaRequest { + source: MediaSource::Plain(avatar_url.to_owned()), + format: MediaFormat::File, + }; + + let content = media + .get_media_content(&request, true) + .await + .map_err(|e| anyhow::anyhow!("Failed fetching existing avatar: {:?}", e))?; + + content.as_slice() != LOGO_BYTES + } + None => true, + }; + + if should_update_avatar { + tracing::info!("Updating avatar.."); + + let mime_type = LOGO_MIME_TYPE + .parse() + .expect("Failed parsing mime type for logo"); + + account + .upload_avatar(&mime_type, LOGO_BYTES.to_vec()) + .await + .map_err(|e| anyhow::anyhow!("Failed uploading avatar: {:?}", e))?; + } + + Ok(()) + } +} + +async fn create_matrix_link(config: &Config) -> anyhow::Result { + let session_file_path = config.persistence.session_file_path()?; + let session_encryption_key = config.persistence.session_encryption_key()?; + let db_dir_path: std::path::PathBuf = config.persistence.db_dir_path()?; + + let login_creds = LoginCredentials::UserPassword( + config.user.mxid_localpart.to_owned(), + config.user.password.to_owned(), + ); + + let login_encryption = LoginEncryption::new( + config.user.encryption.recovery_passphrase.clone(), + config.user.encryption.recovery_reset_allowed, + ); + + let login_config = LoginConfig::new( + config.homeserver.url.to_owned(), + login_creds, + Some(login_encryption), + config.user.name.to_owned(), + ); + + let persistence_config = + PersistenceConfig::new(session_file_path, session_encryption_key, db_dir_path); + + let init_config = InitConfig::new(login_config, persistence_config); + + mxlink::init(&init_config).await.map_err(|e| e.into()) +} + +pub fn create_global_configuration_manager( + matrix_link: MatrixLink, + encryption_manager: EncryptionManager, + initial_global_config: GlobalConfig, +) -> GlobalConfigurationManager { + let initial_global_config_callback = move || { + let initial_global_config = initial_global_config.clone(); + + let future = create_initial_global_config(initial_global_config); + + // Explicitly box the future to match the expected type + Box::pin(future) as Pin + Send>> + }; + + AccountDataGlobalConfigManager::new( + matrix_link, + encryption_manager, + initial_global_config_callback, + ) +} + +async fn create_initial_global_config(initial_global_config: GlobalConfig) -> GlobalConfig { + initial_global_config +} + +pub fn create_room_configuration_manager( + matrix_link: MatrixLink, + encryption_manager: EncryptionManager, +) -> RoomConfigurationManager { + let initial_room_config_callback = |room: Room| { + let future = create_initial_room_config(room); + + // Explicitly box the future to match the expected type + Box::pin(future) as Pin + Send>> + }; + + AccountDataRoomConfigManager::new( + matrix_link.user_id().clone(), + encryption_manager, + initial_room_config_callback, + Some(ROOM_CONFIG_MANAGER_LRU_CACHE_SIZE), + ) +} + +async fn create_initial_room_config(room: Room) -> RoomConfig { + RoomConfig::default().with_room(room).await +} + +pub fn create_catch_up_marker_manager(matrix_link: MatrixLink) -> CatchUpMarkerManager { + let initial_global_config_callback = || { + let future = create_initial_catch_up_marker(); + + // Explicitly box the future to match the expected type + Box::pin(future) as Pin + Send>> + }; + + // Intentionally not using encryption, to make this resilient even if we lose our encryption key. + // We're not worried about the catch-up marker being read or tampered with, as it's not sensitive data. + let encryption_manager = EncryptionManager::new(None); + + let catch_up_marker_manager: CatchUpMarkerManager = AccountDataGlobalConfigManager::new( + matrix_link.clone(), + encryption_manager, + initial_global_config_callback, + ); + + catch_up_marker_manager +} + +async fn create_initial_catch_up_marker() -> CatchUpMarker { + CatchUpMarker::new(0) +} diff --git a/src/bot/load_config.rs b/src/bot/load_config.rs new file mode 100644 index 0000000..d37d3e6 --- /dev/null +++ b/src/bot/load_config.rs @@ -0,0 +1,110 @@ +use std::env; +use std::path::PathBuf; + +use anyhow::anyhow; + +use crate::agent::AgentPurpose; + +pub use crate::entity::cfg::{defaults as cfg_defaults, env as cfg_env, Config}; + +pub fn load() -> anyhow::Result { + let config_file_path = env::var(cfg_env::BAIBOT_CONFIG_FILE_PATH) + .unwrap_or_else(|_| cfg_defaults::config_file_path().to_owned()); + let config_file_path = PathBuf::from(config_file_path); + + if !config_file_path.exists() { + return Err(anyhow!( + "Config file ({}) not found. Adjust the {} environment variable to use another config file.", + config_file_path.display(), + cfg_env::BAIBOT_CONFIG_FILE_PATH, + )); + } + + let config_str = std::fs::read_to_string(config_file_path)?; + let mut config: Config = serde_yaml::from_str(&config_str)?; + + // Allow environment variables to override some configuration keys + for (key, value) in env::vars() { + match key.as_str() { + cfg_env::BAIBOT_HOMESERVER_SERVER_NAME => config.homeserver.server_name = value, + cfg_env::BAIBOT_HOMESERVER_URL => config.homeserver.url = value, + cfg_env::BAIBOT_USER_MXID_LOCALPART => config.user.mxid_localpart = value, + cfg_env::BAIBOT_USER_PASSWORD => config.user.password = value, + cfg_env::BAIBOT_USER_ENCRYPTION_RECOVERY_PASSPHRASE => { + config.user.encryption.recovery_passphrase = Some(value); + } + cfg_env::BAIBOT_USER_NAME => config.user.name = value, + cfg_env::BAIBOT_COMMAND_PREFIX => config.command_prefix = value, + cfg_env::BAIBOT_LOGGING => { + config.logging = value; + } + cfg_env::BAIBOT_ACCESS_ADMIN_PATTERNS => { + config.access.admin_patterns = value + .split(' ') + .map(|s| s.trim().to_string()) + .filter(|s| !s.is_empty()) + .collect(); + } + cfg_env::BAIBOT_PERSISTENCE_DATA_DIR_PATH => { + config.persistence.data_dir_path = Some(value); + } + cfg_env::BAIBOT_PERSISTENCE_CONFIG_ENCRYPTION_KEY => { + config.persistence.config_encryption_key = Some(value); + } + cfg_env::BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_CATCH_ALL => { + let value = if value.is_empty() { None } else { Some(value) }; + + config + .initial_global_config + .handler + .set_by_purpose(AgentPurpose::CatchAll, value); + } + cfg_env::BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_TEXT_GENERATION => { + let value = if value.is_empty() { None } else { Some(value) }; + + config + .initial_global_config + .handler + .set_by_purpose(AgentPurpose::TextGeneration, value); + } + cfg_env::BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_TEXT_TO_SPEECH => { + let value = if value.is_empty() { None } else { Some(value) }; + + config + .initial_global_config + .handler + .set_by_purpose(AgentPurpose::TextToSpeech, value); + } + cfg_env::BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_SPEECH_TO_TEXT => { + let value = if value.is_empty() { None } else { Some(value) }; + + config + .initial_global_config + .handler + .set_by_purpose(AgentPurpose::SpeechToText, value); + } + cfg_env::BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_IMAGE_GENERATION => { + let value = if value.is_empty() { None } else { Some(value) }; + + config + .initial_global_config + .handler + .set_by_purpose(AgentPurpose::ImageGeneration, value); + } + cfg_env::BAIBOT_INITIAL_GLOBAL_CONFIG_USER_PATTERNS => { + config.initial_global_config.user_patterns = Some( + value + .split(' ') + .map(|s| s.trim().to_string()) + .filter(|s| !s.is_empty()) + .collect(), + ); + } + _ => {} + } + } + + config.validate().map_err(|s| anyhow!(s))?; + + Ok(config) +} diff --git a/src/bot/messaging.rs b/src/bot/messaging.rs new file mode 100644 index 0000000..11967be --- /dev/null +++ b/src/bot/messaging.rs @@ -0,0 +1,334 @@ +use mxlink::matrix_sdk::{ + ruma::{ + api::client::receipt::create_receipt::v3::ReceiptType, + events::room::message::OriginalSyncRoomMessageEvent, OwnedEventId, + }, + Room, +}; + +use mxlink::{CallbackError, MessageResponseType}; + +use tracing::Instrument; + +use crate::{ + conversation::matrix::determine_thread_context_for_room_event, + entity::{MessageContext, MessagePayload, RoomConfigContext, TriggerEventInfo}, +}; + +#[derive(Clone)] +pub struct Messaging { + bot: super::Bot, +} + +impl Messaging { + pub fn new(bot: super::Bot) -> Self { + Self { bot } + } + + pub async fn send_text_markdown_no_fail( + &self, + room: &Room, + message: String, + response_type: MessageResponseType, + ) -> Option + { + let result = self + .bot + .matrix_link() + .messaging() + .send_text_markdown(room, message, response_type) + .await; + + match result { + Ok(result) => Some(result), + Err(err) => { + tracing::error!( + room_id = format!("{:?}", room.room_id()), + ?err, + "Failed to send text message to room", + ); + None + } + } + } + + pub async fn send_notice_markdown_no_fail( + &self, + room: &Room, + message: String, + response_type: MessageResponseType, + ) -> Option + { + let result = self + .bot + .matrix_link() + .messaging() + .send_notice_markdown(room, message, response_type) + .await; + + match result { + Ok(result) => Some(result), + Err(err) => { + tracing::error!( + room_id = format!("{:?}", room.room_id()), + ?err, + "Failed to send notice message to room", + ); + None + } + } + } + + pub async fn send_tooltip_markdown_no_fail( + &self, + room: &Room, + message: &str, + response_type: MessageResponseType, + ) -> Option + { + self.send_notice_markdown_no_fail( + room, + crate::utils::status::create_tooltip_message_text(message), + response_type, + ) + .await + } + + pub async fn send_success_markdown_no_fail( + &self, + room: &Room, + message: &str, + response_type: MessageResponseType, + ) -> Option + { + self.send_notice_markdown_no_fail( + room, + crate::utils::status::create_success_message_text(message), + response_type, + ) + .await + } + + pub async fn send_error_markdown_no_fail( + &self, + room: &Room, + err: &str, + response_type: MessageResponseType, + ) -> Option + { + self.send_notice_markdown_no_fail( + room, + crate::utils::status::create_error_message_text(err), + response_type, + ) + .await + } + + pub async fn redact_event_no_fail( + &self, + room: &Room, + target_event_id: OwnedEventId, + reason: Option, + ) -> Option { + let result = self + .bot + .matrix_link() + .messaging() + .redact_event(room, target_event_id.clone(), reason) + .await; + + match result { + Ok(result) => Some(result), + Err(err) => { + tracing::error!( + room_id = format!("{:?}", room.room_id()), + ?target_event_id, + ?err, + "Failed to send redaction to room", + ); + + None + } + } + } + + pub(super) async fn attach_event_handlers(&self) { + let matrix_link_messaging = self.bot.matrix_link().messaging(); + + let this = self.clone(); + matrix_link_messaging.on_actionable_room_message(|event, room| async move { + this.on_actionable_message(event, room).await + }); + } + + #[tracing::instrument(name = "bot_on_actionable_message", skip_all, fields(room_id = room.room_id().as_str(), event_id = event.event_id.as_str()))] + async fn on_actionable_message( + &self, + event: OriginalSyncRoomMessageEvent, + room: Room, + ) -> Result<(), CallbackError> { + if self + .bot + .is_caught_up(event.origin_server_ts) + .await + .map_err(|e| { + CallbackError::Unknown( + format!("Failed to determine catch-up state: {:?}", e).into(), + ) + })? + { + tracing::debug!( + event_origin_server_ts = format!("{:?}", event.origin_server_ts), + "Ignoring old message event", + ); + + return Ok(()); + } + + tracing::info!("Processing message"); + + let global_config = self + .bot + .global_config() + .await + .map_err(|err| CallbackError::Unknown(err.into()))?; + + tracing::trace!(?global_config, "Global config"); + + let room_config = self + .bot + .room_config_manager() + .lock() + .await + .get_or_create_for_room(&room) + .await + .map_err(|err| CallbackError::Unknown(err.into()))?; + + tracing::trace!(?room_config, "Room config"); + + let trigger_event_sender_is_admin = mxidwc::match_user_id( + event.sender.clone().as_str(), + self.bot.admin_pattern_regexes(), + ); + + let trigger_event_sender_is_allowed_user = match &global_config.access.user_patterns { + Some(user_patterns) => { + let allowed_user_regexes = mxidwc::parse_patterns_vector(user_patterns) + .map_err(|err| CallbackError::Unknown(err.into()))?; + + mxidwc::match_user_id(event.sender.clone().as_str(), &allowed_user_regexes) + } + None => false, + }; + + if !trigger_event_sender_is_admin && !trigger_event_sender_is_allowed_user { + tracing::debug!("Ignoring message from non-admin/non-allowed user"); + return Ok(()); + } + + let payload: Result = event.content.msgtype.clone().try_into(); + let payload = match payload { + Ok(payload) => payload, + Err(err) => { + tracing::debug!( + msg_type = event.content.msgtype(), + ?err, + "Ignoring message not supported by us", + ); + return Ok(()); + } + }; + + let thread_context = determine_thread_context_for_room_event( + self.bot.user_id(), + &room, + &event, + &payload, + &self.bot.room_event_fetcher(), + ) + .await; + + let thread_context = match thread_context { + Ok(value) => value, + Err(err) => { + tracing::error!(?err, "Failed to determine thread context for event"); + return Ok(()); + } + }; + + let Some(thread_context) = thread_context else { + tracing::debug!("Ignoring message with unknown thread context (likely not a threaded message or a top-level message)"); + return Ok(()); + }; + + let room_config_context = + RoomConfigContext::new(global_config.clone(), room_config.clone()); + + let trigger_event_info = TriggerEventInfo::new( + event.event_id.clone(), + event.sender.clone(), + payload, + trigger_event_sender_is_admin, + ); + + let message_context = MessageContext::new( + room.clone(), + room_config_context, + self.bot.admin_pattern_regexes().clone(), + trigger_event_info, + thread_context.info.clone(), + ); + + let bot_display_name = self + .bot + .room_display_name_fetcher() + .own_display_name_in_room(message_context.room()) + .await; + + let bot_display_name = match bot_display_name { + Ok(value) => value, + Err(err) => { + tracing::warn!( + ?err, + "Failed to fetch bot display name. Proceeding without it" + ); + None + } + }; + + // The first event in the thread determines which handler processes the current event. + let controller_type = crate::controller::determine_controller( + self.bot.command_prefix(), + &thread_context.first_message, + &message_context, + self.bot.user_id(), + &bot_display_name, + ); + + tracing::info!(?controller_type, "Determined controller"); + + let _ = room + .send_single_receipt( + ReceiptType::Read, + thread_context.info.clone().into(), + event.event_id.clone(), + ) + .await; + + let start_time = std::time::Instant::now(); + + let event_span = tracing::error_span!("message_controller", ?controller_type); + + crate::controller::dispatch_controller(&controller_type, &message_context, &self.bot) + .instrument(event_span) + .await; + + let duration = std::time::Instant::now().duration_since(start_time); + + tracing::debug!(?duration, "Controller finished"); + + self.bot.catch_up(event.origin_server_ts).await; + + return Ok(()); + } +} diff --git a/src/bot/mod.rs b/src/bot/mod.rs new file mode 100644 index 0000000..5114123 --- /dev/null +++ b/src/bot/mod.rs @@ -0,0 +1,8 @@ +mod implementation; +mod load_config; +mod messaging; +mod reacting; +mod rooms; + +pub use implementation::Bot; +pub use load_config::load as load_config; diff --git a/src/bot/reacting.rs b/src/bot/reacting.rs new file mode 100644 index 0000000..019a377 --- /dev/null +++ b/src/bot/reacting.rs @@ -0,0 +1,262 @@ +use mxlink::matrix_sdk::{ + ruma::{ + events::{ + room::message::Relation, AnyMessageLikeEvent, AnySyncTimelineEvent, AnyTimelineEvent, + MessageLikeEvent, + }, + OwnedEventId, OwnedUserId, + }, + Room, +}; + +use mxlink::CallbackError; +use mxlink::ThreadInfo; + +use tracing::Instrument; + +use crate::entity::{MessageContext, MessagePayload, RoomConfigContext, TriggerEventInfo}; + +#[derive(Clone)] +pub struct Reacting { + bot: super::Bot, +} + +impl Reacting { + pub fn new(bot: super::Bot) -> Self { + Self { bot } + } + + pub async fn react_no_fail( + &self, + room: &Room, + target_event_id: OwnedEventId, + reaction_key: String, + ) -> Option + { + let result = self + .bot + .matrix_link() + .reacting() + .react(room, target_event_id.clone(), reaction_key) + .await; + + match result { + Ok(result) => Some(result), + Err(err) => { + tracing::error!( + "Failed to send reaction to {} in room {:?}: {:?}", + target_event_id, + room.room_id(), + err + ); + None + } + } + } + + pub(super) async fn attach_event_handlers(&self) { + let matrix_link_reacting = self.bot.matrix_link().reacting(); + + let this = self.clone(); + matrix_link_reacting.on_actionable_reaction( + |event, room, reaction_event_content| async move { + this.on_actionable_reaction(event, room, reaction_event_content) + .await + }, + ); + } + + #[tracing::instrument(name = "bot_on_actionable_reaction", skip_all, fields(room_id = room.room_id().as_str(), event_id = event.event_id().as_str()))] + async fn on_actionable_reaction( + &self, + event: AnySyncTimelineEvent, + room: Room, + reaction_event_content: mxlink::matrix_sdk::ruma::events::reaction::ReactionEventContent, + ) -> Result<(), CallbackError> { + if self + .bot + .is_caught_up(event.origin_server_ts()) + .await + .map_err(|e| { + CallbackError::Unknown( + format!("Failed to determine catch-up state: {:?}", e).into(), + ) + })? + { + tracing::debug!( + event_origin_server_ts = format!("{:?}", event.origin_server_ts()), + "Ignoring old reaction event", + ); + + return Ok(()); + } + + tracing::info!("Handling reaction"); + + let global_config = self + .bot + .global_config() + .await + .map_err(|err| CallbackError::Unknown(err.into()))?; + + tracing::trace!(?global_config, "Global config"); + + let trigger_event_sender_is_admin = + mxidwc::match_user_id(event.sender().as_str(), self.bot.admin_pattern_regexes()); + + let trigger_event_sender_is_allowed_user = match &global_config.access.user_patterns { + Some(user_patterns) => { + let allowed_user_regexes = mxidwc::parse_patterns_vector(user_patterns) + .map_err(|err| CallbackError::Unknown(err.into()))?; + + mxidwc::match_user_id(event.sender().as_str(), &allowed_user_regexes) + } + None => false, + }; + + if !trigger_event_sender_is_admin && !trigger_event_sender_is_allowed_user { + tracing::debug!("Ignoring reaction from non-admin/non-allowed user"); + return Ok(()); + } + + let reacted_to_event_id = &reaction_event_content.relates_to.event_id; + + let reacted_to_event = self + .bot + .room_event_fetcher() + .fetch_event_in_room(reacted_to_event_id, &room) + .await; + + let reacted_to_event = match reacted_to_event { + Ok(value) => value, + Err(err) => { + tracing::error!( + ?reacted_to_event_id, + ?err, + "Failed to fetch reacted-to event", + ); + return Ok(()); + } + }; + + let reacted_to_event_any_timeline_event = match reacted_to_event.event.deserialize() { + Ok(value) => value, + Err(err) => { + tracing::error!( + ?reacted_to_event_id, + ?err, + "Failed to deserialize reacted-to event event", + ); + return Ok(()); + } + }; + + let reacted_to_event_sender_id: OwnedUserId = + reacted_to_event_any_timeline_event.sender().to_owned(); + + let AnyTimelineEvent::MessageLike(reacted_to_event_message_like) = + reacted_to_event_any_timeline_event + else { + tracing::debug!( + ?reacted_to_event_id, + "Ignoring non-MessageLike reacted-to event", + ); + return Ok(()); + }; + + let AnyMessageLikeEvent::RoomMessage(reacted_to_event_room_message) = + reacted_to_event_message_like + else { + tracing::debug!( + ?reacted_to_event_id, + "Ignoring non-RoomMessage reacted-to event", + ); + return Ok(()); + }; + + let MessageLikeEvent::Original(reacted_to_event_room_message_original) = + reacted_to_event_room_message + else { + tracing::debug!(?reacted_to_event_id, "Ignoring redacted reacted-to event",); + return Ok(()); + }; + + let reacted_to_event_payload: Result = + reacted_to_event_room_message_original + .content + .msgtype + .clone() + .try_into(); + let Ok(reacted_to_event_payload) = reacted_to_event_payload else { + tracing::debug!( + msg_type = reacted_to_event_room_message_original.content.msgtype(), + "Ignoring reaction to message of unknown type", + ); + return Ok(()); + }; + + let thread_root_event_id = match reacted_to_event_room_message_original.content.relates_to { + Some(relation) => { + if let Relation::Thread(thread_id) = relation { + thread_id.event_id.clone() + } else { + reacted_to_event_id.clone() + } + } + None => reacted_to_event_id.clone(), + }; + + let thread_info = ThreadInfo::new(thread_root_event_id, reacted_to_event_id.clone()); + + let room_config = self + .bot + .room_config_manager() + .lock() + .await + .get_or_create_for_room(&room) + .await + .map_err(|err| CallbackError::Unknown(err.into()))?; + + tracing::trace!(?room_config, "Room config"); + + let room_config_context = + RoomConfigContext::new(global_config.clone(), room_config.clone()); + + let trigger_event_info = TriggerEventInfo::new( + event.event_id().to_owned(), + event.sender().to_owned(), + MessagePayload::Reaction { + key: reaction_event_content.relates_to.key, + reacted_to_event_payload: Box::new(reacted_to_event_payload), + reacted_to_event_id: reaction_event_content.relates_to.event_id.clone(), + reacted_to_event_sender_id, + }, + trigger_event_sender_is_admin, + ); + + let message_context = MessageContext::new( + room, + room_config_context, + self.bot.admin_pattern_regexes().clone(), + trigger_event_info, + thread_info, + ); + + tracing::info!("Handling reaction via reaction controller"); + + let event_span = tracing::error_span!("reaction_controller"); + + crate::controller::reaction::handle( + &self.bot, + self.bot.matrix_link().clone(), + &message_context, + ) + .instrument(event_span) + .await + .map_err(|err| CallbackError::Unknown(err.into()))?; + + self.bot.catch_up(event.origin_server_ts()).await; + + Ok(()) + } +} diff --git a/src/bot/rooms.rs b/src/bot/rooms.rs new file mode 100644 index 0000000..811b72c --- /dev/null +++ b/src/bot/rooms.rs @@ -0,0 +1,145 @@ +use mxlink::{ + matrix_sdk::{ + ruma::events::{room::member::StrippedRoomMemberEvent, AnySyncTimelineEvent}, + Room, + }, + InvitationDecision, +}; + +use mxlink::CallbackError; + +use tracing::Instrument; + +use crate::entity::RoomConfigContext; + +#[derive(Clone)] +pub struct Rooms { + bot: super::Bot, +} + +impl Rooms { + pub fn new(bot: super::Bot) -> Self { + Self { bot } + } + + pub(super) async fn attach_event_handlers(&self) { + let matrix_link_rooms = self.bot.matrix_link().rooms(); + + let this = self.clone(); + matrix_link_rooms.on_being_last_member(|event, room| async move { + this.on_being_last_member(event, room).await + }); + + let this = self.clone(); + matrix_link_rooms + .on_invitation(|event, room| async move { this.on_invitation(event, room).await }); + + let this = self.clone(); + matrix_link_rooms.on_joined(|event, room| async move { this.on_joined(event, room).await }); + } + + async fn on_invitation( + &self, + room_member: StrippedRoomMemberEvent, + _room: Room, + ) -> Result { + tracing::debug!("Deciding on room invitation"); + + let global_config = self + .bot + .global_config() + .await + .map_err(|e| CallbackError::Unknown(e.into()))?; + + let sender_is_admin = mxidwc::match_user_id( + room_member.sender.clone().as_str(), + self.bot.admin_pattern_regexes(), + ); + + let sender_is_allowed_user = match &global_config.access.user_patterns { + Some(user_patterns) => { + let allowed_user_regexes = mxidwc::parse_patterns_vector(user_patterns) + .map_err(|e| CallbackError::Unknown(e.into()))?; + + mxidwc::match_user_id(room_member.sender.clone().as_str(), &allowed_user_regexes) + } + None => false, + }; + + if !(sender_is_admin || sender_is_allowed_user) { + return Ok(InvitationDecision::Reject); + } + + Ok(InvitationDecision::Join) + } + + #[tracing::instrument(name = "bot_on_joined", skip_all, fields(room_id = room.room_id().as_str(), event_id = event.event_id().as_str()))] + async fn on_joined( + &self, + event: AnySyncTimelineEvent, + room: Room, + ) -> Result<(), CallbackError> { + if self + .bot + .is_caught_up(event.origin_server_ts()) + .await + .map_err(|e| { + CallbackError::Unknown( + format!("Failed to determine catch-up state: {:?}", e).into(), + ) + })? + { + tracing::debug!( + event_origin_server_ts = format!("{:?}", event.origin_server_ts()), + "Ignoring old room join event", + ); + + return Ok(()); + } + + tracing::info!("Handling room join"); + + let global_config = self + .bot + .global_config() + .await + .map_err(|e| CallbackError::Unknown(e.into()))?; + + let room_config_manager = self.bot.room_config_manager().lock().await; + + // We force-create a new config when we join anew to ensure we: + // - always start from a known clean state + // - record the last join timestamp, so we can accurately service the room (ignoring past messages, etc.) + let room_config = room_config_manager + .create_new_for_room(&room) + .await + .map_err(|e| CallbackError::Unknown(e.into()))?; + + let room_config_context = RoomConfigContext::new(global_config, room_config); + + let event_span = tracing::error_span!("join_controller"); + + let result = crate::controller::join::handle(&self.bot, &room, &room_config_context) + .instrument(event_span) + .await + .map_err(|e| CallbackError::Unknown(e.into())); + + self.bot.catch_up(event.origin_server_ts()).await; + + result + } + + async fn on_being_last_member( + &self, + _event: AnySyncTimelineEvent, + room: mxlink::matrix_sdk::Room, + ) -> Result<(), CallbackError> { + tracing::info!( + "Leaving room {} because we are the last member", + room.room_id() + ); + + // We are last in this room. Let's just leave + room.leave().await.map_err(|e| e.into()) + } +} diff --git a/src/controller/access/determination/mod.rs b/src/controller/access/determination/mod.rs new file mode 100644 index 0000000..bd65528 --- /dev/null +++ b/src/controller/access/determination/mod.rs @@ -0,0 +1,63 @@ +#[cfg(test)] +mod tests; + +use super::super::ControllerType; + +#[derive(Debug, PartialEq)] +pub enum AccessControllerType { + Help, + + GetUsers, + SetUsers(Option>), + + GetRoomLocalAgentManagers, + SetRoomLocalAgentManagers(Option>), +} + +pub fn determine_controller(text: &str) -> ControllerType { + if text.starts_with("users") { + return ControllerType::Access(AccessControllerType::GetUsers); + } + + if let Some(patterns_string) = text.strip_prefix("set-users") { + let patterns_string = patterns_string.trim().to_owned(); + + let patterns_option = if patterns_string.is_empty() { + None + } else { + let patterns_vector = patterns_string + .split(" ") + .map(|s| s.to_string()) + .collect::>(); + + Some(patterns_vector) + }; + + return ControllerType::Access(AccessControllerType::SetUsers(patterns_option)); + } + + if text.starts_with("room-local-agent-managers") { + return ControllerType::Access(AccessControllerType::GetRoomLocalAgentManagers); + } + + if let Some(patterns_string) = text.strip_prefix("set-room-local-agent-managers") { + let patterns_string = patterns_string.trim().to_owned(); + + let patterns_option = if patterns_string.is_empty() { + None + } else { + let patterns_vector = patterns_string + .split(" ") + .map(|s| s.to_string()) + .collect::>(); + + Some(patterns_vector) + }; + + return ControllerType::Access(AccessControllerType::SetRoomLocalAgentManagers( + patterns_option, + )); + } + + ControllerType::Access(AccessControllerType::Help) +} diff --git a/src/controller/access/determination/tests.rs b/src/controller/access/determination/tests.rs new file mode 100644 index 0000000..21052b6 --- /dev/null +++ b/src/controller/access/determination/tests.rs @@ -0,0 +1,58 @@ +#[test] +fn determine_controller() { + struct TestCase { + name: &'static str, + input: &'static str, + expected: super::ControllerType, + } + + let test_cases = vec![ + TestCase { + name: "Top-level is help", + input: "", + expected: super::ControllerType::Access(super::AccessControllerType::Help), + }, + TestCase { + name: "Anything else goes to top-level", + input: "whatever", + expected: super::ControllerType::Access(super::AccessControllerType::Help), + }, + TestCase { + name: "Users", + input: "users", + expected: super::ControllerType::Access(super::AccessControllerType::GetUsers), + }, + TestCase { + name: "Set-users", + input: "set-users @user:example.com @bot.*:example.org", + expected: super::ControllerType::Access(super::AccessControllerType::SetUsers(Some( + vec![ + "@user:example.com".to_owned(), + "@bot.*:example.org".to_owned(), + ], + ))), + }, + TestCase { + name: "Room-local-agent-managers", + input: "room-local-agent-managers", + expected: super::ControllerType::Access( + super::AccessControllerType::GetRoomLocalAgentManagers, + ), + }, + TestCase { + name: "Set-room-local-agent-managers", + input: "set-room-local-agent-managers @user:example.com @bot.*:example.org", + expected: super::ControllerType::Access( + super::AccessControllerType::SetRoomLocalAgentManagers(Some(vec![ + "@user:example.com".to_owned(), + "@bot.*:example.org".to_owned(), + ])), + ), + }, + ]; + + for test_case in test_cases { + let result = super::determine_controller(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} diff --git a/src/controller/access/dispatching.rs b/src/controller/access/dispatching.rs new file mode 100644 index 0000000..03ed3c4 --- /dev/null +++ b/src/controller/access/dispatching.rs @@ -0,0 +1,45 @@ +use mxlink::MessageResponseType; + +use crate::{entity::MessageContext, strings, Bot}; + +use super::AccessControllerType; + +pub async fn dispatch_controller( + handler: &AccessControllerType, + message_context: &MessageContext, + bot: &Bot, +) -> anyhow::Result<()> { + // Only the help command is available without access control, so that all users can get familiar with how the bot's access system works. + match handler { + AccessControllerType::Help => {} + _ => { + if !message_context.sender_can_manage_global_config()? { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + strings::global_config::no_permissions_to_administrate(), + MessageResponseType::Reply( + message_context.thread_info().root_event_id.clone(), + ), + ) + .await; + + return Ok(()); + } + } + }; + + match handler { + AccessControllerType::Help => super::help::handle(bot, message_context).await, + AccessControllerType::GetUsers => super::users::handle_get(bot, message_context).await, + AccessControllerType::SetUsers(patterns) => { + super::users::handle_set(bot, message_context, patterns).await + } + AccessControllerType::GetRoomLocalAgentManagers => { + super::room_local_agent_managers::handle_get(bot, message_context).await + } + AccessControllerType::SetRoomLocalAgentManagers(patterns) => { + super::room_local_agent_managers::handle_set(bot, message_context, patterns).await + } + } +} diff --git a/src/controller/access/help.rs b/src/controller/access/help.rs new file mode 100644 index 0000000..3b445b8 --- /dev/null +++ b/src/controller/access/help.rs @@ -0,0 +1,183 @@ +use mxlink::MessageResponseType; + +use crate::{entity::MessageContext, strings, Bot}; + +pub async fn handle(bot: &Bot, message_context: &MessageContext) -> anyhow::Result<()> { + let mut message = String::new(); + message.push_str(&build_section_intro()); + message.push_str("\n\n"); + message.push_str(&build_section_joining_rooms()); + message.push_str("\n\n"); + message.push_str(&build_section_users( + bot.command_prefix(), + bot.homeserver_name(), + message_context, + )); + message.push_str("\n\n"); + message.push_str(&build_section_administrators(bot.admin_patterns())); + message.push_str("\n\n"); + message.push_str(&build_section_room_local_agent_managers( + bot.command_prefix(), + bot.homeserver_name(), + message_context, + )); + + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} + +fn build_section_intro() -> String { + let mut message = String::new(); + + message.push_str(&format!("## {}", strings::help::access::heading())); + message.push_str("\n\n"); + message.push_str(&strings::help::access::intro()); + + message +} + +fn build_section_joining_rooms() -> String { + let mut message = String::new(); + + message.push_str(&format!( + "### {}", + strings::help::access::room_auto_join_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::access::room_auto_join_intro()); + message.push_str("\n\n"); + + message +} + +fn build_section_users( + command_prefix: &str, + homeserver_name: &str, + message_context: &MessageContext, +) -> String { + let mut message = String::new(); + + message.push_str(&format!("### {}", strings::help::access::users_heading())); + message.push_str("\n\n"); + message.push_str(&strings::help::access::users_intro()); + message.push('\n'); + message.push_str(&strings::help::access::users_access()); + message.push_str("\n\n"); + if let Some(user_patterns) = &message_context.global_config().access.user_patterns { + if user_patterns.is_empty() { + message.push_str(&strings::access::users_no_patterns()); + } else { + message.push_str(&strings::access::users_now_match_patterns(user_patterns)); + } + } else { + message.push_str(&strings::access::users_no_patterns()); + } + + let can_manage_global_config = message_context.sender_can_manage_global_config(); + if let Ok(can_manage_global_config) = can_manage_global_config { + if can_manage_global_config { + message.push_str("\n\n"); + + message.push_str(strings::the_following_commands_are_available()); + message.push('\n'); + + message.push_str(&strings::help::access::users_command_get(command_prefix)); + message.push('\n'); + + message.push_str(&strings::help::access::users_command_set(command_prefix)); + message.push_str("\n\n"); + + message.push_str(&strings::help::access::example_user_patterns( + homeserver_name, + )); + } + } + + message +} + +fn build_section_administrators(admin_patterns: &[String]) -> String { + let mut message = String::new(); + + message.push_str(&format!( + "### {}", + strings::help::access::administrators_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::access::administrators_intro()); + message.push_str("\n\n"); + message.push_str(&strings::help::access::administrators_now_match_patterns( + admin_patterns, + )); + message.push_str("\n\n"); + message.push_str(&strings::help::access::administrators_outro()); + + message +} + +fn build_section_room_local_agent_managers( + command_prefix: &str, + homeserver_name: &str, + message_context: &MessageContext, +) -> String { + let mut message = String::new(); + + message.push_str(&format!( + "### {}", + strings::help::access::room_local_agent_managers_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::access::room_local_agent_managers_intro( + command_prefix, + )); + message.push('\n'); + message.push_str(&strings::help::access::room_local_agent_managers_security_warning()); + message.push_str("\n\n"); + if let Some(user_patterns) = &message_context + .global_config() + .access + .room_local_agent_manager_patterns + { + if user_patterns.is_empty() { + message.push_str(&strings::access::room_local_agent_managers_no_patterns()); + } else { + message.push_str( + &strings::access::room_local_agent_managers_now_match_patterns(user_patterns), + ); + } + } else { + message.push_str(&strings::access::room_local_agent_managers_no_patterns()); + } + + let can_manage_global_config = message_context.sender_can_manage_global_config(); + if let Ok(can_manage_global_config) = can_manage_global_config { + if can_manage_global_config { + message.push_str("\n\n"); + message.push_str(strings::the_following_commands_are_available()); + message.push('\n'); + + message.push_str( + &strings::help::access::room_local_agent_managers_command_get(command_prefix), + ); + message.push('\n'); + + message.push_str( + &strings::help::access::room_local_agent_managers_command_set(command_prefix), + ); + message.push_str("\n\n"); + + message.push_str(&strings::help::access::example_user_patterns( + homeserver_name, + )); + } + } + + message +} diff --git a/src/controller/access/mod.rs b/src/controller/access/mod.rs new file mode 100644 index 0000000..f829769 --- /dev/null +++ b/src/controller/access/mod.rs @@ -0,0 +1,8 @@ +mod determination; +mod dispatching; +pub mod help; +mod room_local_agent_managers; +mod users; + +pub use determination::{determine_controller, AccessControllerType}; +pub use dispatching::dispatch_controller; diff --git a/src/controller/access/room_local_agent_managers.rs b/src/controller/access/room_local_agent_managers.rs new file mode 100644 index 0000000..7487578 --- /dev/null +++ b/src/controller/access/room_local_agent_managers.rs @@ -0,0 +1,67 @@ +use mxlink::MessageResponseType; + +use crate::{entity::MessageContext, strings, Bot}; + +pub async fn handle_get(bot: &Bot, message_context: &MessageContext) -> anyhow::Result<()> { + let message = match &message_context + .global_config() + .access + .room_local_agent_manager_patterns + { + Some(patterns) => strings::access::room_local_agent_managers_now_match_patterns(patterns), + None => strings::access::room_local_agent_managers_no_patterns(), + }; + + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} + +pub async fn handle_set( + bot: &Bot, + message_context: &MessageContext, + patterns: &Option>, +) -> anyhow::Result<()> { + if let Some(patterns) = patterns { + if let Err(err) = mxidwc::parse_patterns_vector(patterns) { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::access::failed_to_parse_patterns(&err.to_string()), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + } + + let mut global_config_manager_guard = bot.global_config_manager().lock().await; + + let mut global_config = global_config_manager_guard.get_or_create().await?; + + global_config.access.room_local_agent_manager_patterns = patterns.clone(); + + global_config_manager_guard.persist(&global_config).await?; + + let message = match patterns { + Some(patterns) => strings::access::room_local_agent_managers_now_match_patterns(patterns), + None => strings::access::room_local_agent_managers_no_patterns(), + }; + + bot.messaging() + .send_success_markdown_no_fail( + message_context.room(), + &message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/access/users.rs b/src/controller/access/users.rs new file mode 100644 index 0000000..2961dbf --- /dev/null +++ b/src/controller/access/users.rs @@ -0,0 +1,63 @@ +use mxlink::MessageResponseType; + +use crate::{entity::MessageContext, strings, Bot}; + +pub async fn handle_get(bot: &Bot, message_context: &MessageContext) -> anyhow::Result<()> { + let message = match &message_context.global_config().access.user_patterns { + Some(patterns) => strings::access::users_now_match_patterns(patterns), + None => strings::access::users_no_patterns(), + }; + + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} + +pub async fn handle_set( + bot: &Bot, + message_context: &MessageContext, + patterns: &Option>, +) -> anyhow::Result<()> { + if let Some(patterns) = patterns { + if let Err(err) = mxidwc::parse_patterns_vector(patterns) { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::access::failed_to_parse_patterns(&err.to_string()), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + } + + let mut global_config_manager_guard = bot.global_config_manager().lock().await; + + let mut global_config = global_config_manager_guard.get_or_create().await?; + + global_config.access.user_patterns = patterns.clone(); + + global_config_manager_guard.persist(&global_config).await?; + + let message = match patterns { + Some(patterns) => strings::access::users_now_match_patterns(patterns), + None => strings::access::users_no_patterns(), + }; + + bot.messaging() + .send_success_markdown_no_fail( + message_context.room(), + &message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/agent/create/mod.rs b/src/controller/agent/create/mod.rs new file mode 100644 index 0000000..e97d82f --- /dev/null +++ b/src/controller/agent/create/mod.rs @@ -0,0 +1,418 @@ +#[cfg(test)] +mod tests; + +use mxlink::MessageResponseType; + +use crate::agent::provider::{ControllerTrait, PingResult}; +use crate::agent::PublicIdentifier; +use crate::agent::{create_from_provider_and_yaml_value_config, AgentDefinition}; +use crate::agent::{AgentInstance, AgentProvider}; +use crate::controller::utils::get_text_body_or_complain; +use crate::entity::globalconfig::GlobalConfigurationManager; +use crate::entity::roomconfig::RoomConfigurationManager; +use crate::strings; +use crate::{entity::MessageContext, Bot}; + +struct ParsedAgentConfig { + agent: AgentInstance, + config: serde_yaml::Value, +} + +pub async fn handle_room_local( + bot: &Bot, + room_config_manager: &tokio::sync::Mutex, + message_context: &MessageContext, + provider: &str, + agent_id_prefixless: &str, +) -> anyhow::Result<()> { + if !message_context.sender_can_manage_room_local_agents()? { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::not_allowed_to_manage_room_local_agents_in_room(), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + + let Ok(provider) = AgentProvider::from_string(provider) else { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::provider::invalid(provider), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + }; + + let agent_identifier = PublicIdentifier::DynamicRoomLocal(agent_id_prefixless.to_owned()); + if let Err(err) = agent_identifier.validate() { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::invalid_id_validation_error(err), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + + let agent_exists = bot + .agent_manager() + .available_room_agents_by_room_config_context(message_context.room_config_context()) + .iter() + .any(|agent| *agent.identifier() == agent_identifier); + + if agent_exists { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::already_exists_see_help(agent_id_prefixless, bot.command_prefix()), + MessageResponseType::InThread(message_context.thread_info().clone()), + ) + .await; + + return Ok(()); + } + + if message_context.thread_info().is_thread_root_only() { + return send_guide(bot, message_context, &agent_identifier, &provider).await; + } + + let Some(text_message_content) = get_text_body_or_complain(bot, message_context).await else { + return Ok(()); + }; + + let parsed_config = parse_agent_config_from_message_or_complain( + bot, + message_context, + &provider, + &agent_identifier, + text_message_content, + ) + .await; + let Some(parsed_config) = parsed_config else { + return Ok(()); + }; + + message_context.room().typing_notice(true).await?; + + if !try_to_ping_agent_or_complain(bot, message_context, &parsed_config.agent).await { + return Ok(()); + } + + let agent_definition = AgentDefinition::new( + agent_identifier.prefixless(), + provider, + parsed_config.config.clone(), + ); + + let mut room_config = message_context.room_config().clone(); + + room_config.agents.push(agent_definition.clone()); + + room_config_manager + .lock() + .await + .persist(message_context.room(), &room_config) + .await?; + + send_completion_wrap_up( + bot, + message_context, + &agent_identifier, + &parsed_config.agent, + ) + .await; + + Ok(()) +} + +pub async fn handle_global( + bot: &Bot, + global_config_manager: &tokio::sync::Mutex, + message_context: &MessageContext, + provider: &str, + agent_id_prefixless: &str, +) -> anyhow::Result<()> { + if !message_context.sender_can_manage_global_config()? { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + strings::global_config::no_permissions_to_administrate(), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + + let Ok(provider) = AgentProvider::from_string(provider) else { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::provider::invalid(provider), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + }; + + let agent_identifier = PublicIdentifier::DynamicGlobal(agent_id_prefixless.to_owned()); + if let Err(err) = agent_identifier.validate() { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::invalid_id_validation_error(err), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + + let agent_exists = bot + .agent_manager() + .available_room_agents_by_room_config_context(message_context.room_config_context()) + .iter() + .any(|agent| *agent.identifier() == agent_identifier); + + if agent_exists { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::already_exists_see_help(agent_id_prefixless, bot.command_prefix()), + MessageResponseType::InThread(message_context.thread_info().clone()), + ) + .await; + + return Ok(()); + } + + if message_context.thread_info().is_thread_root_only() { + return send_guide(bot, message_context, &agent_identifier, &provider).await; + } + + let Some(text_message_content) = get_text_body_or_complain(bot, message_context).await else { + return Ok(()); + }; + + let parsed_config = parse_agent_config_from_message_or_complain( + bot, + message_context, + &provider, + &agent_identifier, + text_message_content, + ) + .await; + let Some(parsed_config) = parsed_config else { + return Ok(()); + }; + + message_context.room().typing_notice(true).await?; + + if !try_to_ping_agent_or_complain(bot, message_context, &parsed_config.agent).await { + return Ok(()); + } + + let agent_definition = AgentDefinition::new( + agent_identifier.prefixless(), + provider, + parsed_config.config.clone(), + ); + + let mut global_config = message_context.global_config().clone(); + global_config.agents.push(agent_definition.clone()); + + global_config_manager + .lock() + .await + .persist(&global_config) + .await?; + + send_completion_wrap_up( + bot, + message_context, + &agent_identifier, + &parsed_config.agent, + ) + .await; + + Ok(()) +} + +async fn send_guide( + bot: &Bot, + message_context: &MessageContext, + agent_identifier: &PublicIdentifier, + provider: &AgentProvider, +) -> anyhow::Result<()> { + let sample_config = crate::agent::default_config_for_provider(provider); + let sample_config_pretty_yaml = serde_yaml::to_string(&sample_config)?; + + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + strings::agent::creation_guide(agent_identifier, provider, &sample_config_pretty_yaml), + MessageResponseType::InThread(message_context.thread_info().clone()), + ) + .await; + + Ok(()) +} + +fn parse_from_message_to_yaml_value(text: &str) -> Result { + let mut text = text.trim(); + + if text.starts_with("```") { + // Try to strip ```yml and ```yaml first and fall back to the generic ``` later. + text = text.trim_start_matches("```yml"); + text = text.trim_start_matches("```yaml"); + text = text.trim_start_matches("```"); + text = text.trim_end_matches("```"); + } + + let config: serde_yaml::Value = serde_yaml::from_str(text).map_err(|e| e.to_string())?; + + match config { + serde_yaml::Value::Mapping(_) => {} + _ => { + return Err("Not a valid YAML hashmap".to_owned()); + } + }; + + Ok(config) +} + +async fn parse_agent_config_from_message_or_complain( + bot: &Bot, + message_context: &MessageContext, + provider: &AgentProvider, + agent_identifier: &PublicIdentifier, + text: &str, +) -> Option { + let config_yaml_value = parse_from_message_to_yaml_value(text); + + let config_yaml_value = match config_yaml_value { + Ok(config_yaml_value) => config_yaml_value, + Err(err) => { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::configuration_not_a_valid_yaml_hashmap(err), + MessageResponseType::InThread(message_context.thread_info().clone()), + ) + .await; + + return None; + } + }; + + let agent = create_from_provider_and_yaml_value_config( + provider, + agent_identifier, + config_yaml_value.clone(), + ); + + let agent = match agent { + Ok(agent) => ParsedAgentConfig { + agent, + config: config_yaml_value, + }, + Err(err) => { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::provider::invalid_configuration_for_provider(provider, err), + MessageResponseType::InThread(message_context.thread_info().clone()), + ) + .await; + + return None; + } + }; + + Some(agent) +} + +async fn try_to_ping_agent_or_complain( + bot: &Bot, + message_context: &MessageContext, + agent_instance: &AgentInstance, +) -> bool { + bot.messaging() + .send_notice_markdown_no_fail( + message_context.room(), + format!("âŗ {}", strings::agent::configuration_agent_will_ping()), + MessageResponseType::InThread(message_context.thread_info().clone()), + ) + .await; + + match agent_instance.controller().ping().await { + Ok(ping_result) => { + let message = match ping_result { + PingResult::Inconclusive => format!( + "❓ {}", + strings::agent::configuration_agent_ping_inconclusive() + ), + PingResult::Successful => { + format!("✅ {}", strings::agent::configuration_agent_ping_ok()) + } + }; + + bot.messaging() + .send_notice_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::InThread(message_context.thread_info().clone()), + ) + .await; + + true + } + Err(err) => { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::configuration_does_not_result_in_a_working_agent(err), + MessageResponseType::InThread(message_context.thread_info().clone()), + ) + .await; + + false + } + } +} + +async fn send_completion_wrap_up( + bot: &Bot, + message_context: &MessageContext, + agent_identifier: &PublicIdentifier, + agent_instance: &AgentInstance, +) { + bot.messaging() + .send_success_markdown_no_fail( + message_context.room(), + &strings::agent::created(agent_identifier), + MessageResponseType::InThread(message_context.thread_info().clone()), + ) + .await; + + bot.messaging() + .send_tooltip_markdown_no_fail( + message_context.room(), + &strings::agent::post_creation_helpful_commands( + agent_identifier, + agent_instance, + bot.command_prefix(), + ), + MessageResponseType::InThread(message_context.thread_info().clone()), + ) + .await; +} diff --git a/src/controller/agent/create/tests.rs b/src/controller/agent/create/tests.rs new file mode 100644 index 0000000..b8355bc --- /dev/null +++ b/src/controller/agent/create/tests.rs @@ -0,0 +1,61 @@ +#[test] +fn agent_config_parsing_works() { + struct TestCase { + input: String, + expected: Option, + } + + let provider = crate::agent::AgentProvider::OpenAI; + let sample_config = crate::agent::default_config_for_provider(&provider); + let sample_config_pretty_yaml = serde_yaml::to_string(&sample_config).unwrap(); + + let test_cases = vec![ + // Invalid input + TestCase { + input: r#"Hello"#.to_owned(), + expected: None, + }, + // Plain text + TestCase { + input: sample_config_pretty_yaml.clone(), + expected: Some(sample_config.clone()), + }, + // Generic code block + TestCase { + input: format!("```\n{}```", sample_config_pretty_yaml), + expected: Some(sample_config.clone()), + }, + // YAML code block (yaml) + TestCase { + input: format!("```yaml\n{}```", sample_config_pretty_yaml), + expected: Some(sample_config.clone()), + }, + // YAML code block (yml) + TestCase { + input: format!("```yml\n{}```", sample_config_pretty_yaml), + expected: Some(sample_config.clone()), + }, + // JSON code block + TestCase { + input: format!("```json\n{}```", sample_config_pretty_yaml), + expected: None, + }, + ]; + + for (i, test_case) in test_cases.iter().enumerate() { + let result = super::parse_from_message_to_yaml_value(&test_case.input); + match result { + Ok(config) => { + assert_eq!( + config, + test_case.expected.clone().unwrap(), + "Test case {} failed", + i + ); + } + Err(_) => { + assert_eq!(test_case.expected, None, "Test case {} failed", i); + } + } + } +} diff --git a/src/controller/agent/delete/mod.rs b/src/controller/agent/delete/mod.rs new file mode 100644 index 0000000..59a807f --- /dev/null +++ b/src/controller/agent/delete/mod.rs @@ -0,0 +1,195 @@ +use mxlink::MessageResponseType; + +use crate::entity::{ + globalconfig::GlobalConfigurationManager, roomconfig::RoomConfigurationManager, MessageContext, +}; +use crate::{agent::PublicIdentifier, strings, Bot}; + +pub async fn handle( + bot: &Bot, + room_config_manager: &tokio::sync::Mutex, + global_config_manager: &tokio::sync::Mutex, + message_context: &MessageContext, + agent_identifier: &PublicIdentifier, +) -> anyhow::Result<()> { + let agents = bot + .agent_manager() + .available_room_agents_by_room_config_context(message_context.room_config_context()); + + let agent = agents.iter().find(|a| a.identifier() == agent_identifier); + + let Some(_) = agent else { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::agent_with_given_identifier_missing(agent_identifier), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + }; + + match &agent_identifier { + PublicIdentifier::DynamicRoomLocal(_) => { + if !message_context.sender_can_manage_room_local_agents()? { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::not_allowed_to_manage_room_local_agents_in_room(), + MessageResponseType::Reply( + message_context.thread_info().root_event_id.clone(), + ), + ) + .await; + + return Ok(()); + } + + delete_room_local_agent(bot, room_config_manager, message_context, agent_identifier) + .await + } + PublicIdentifier::DynamicGlobal(_) => { + if !message_context.sender_can_manage_global_config()? { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + strings::global_config::no_permissions_to_administrate(), + MessageResponseType::Reply( + message_context.thread_info().root_event_id.clone(), + ), + ) + .await; + + return Ok(()); + } + + delete_global_agent( + bot, + global_config_manager, + message_context, + agent_identifier, + ) + .await + } + PublicIdentifier::Static(_) => { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::not_allowed_to_manage_static_agents(), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) + } + } +} + +async fn delete_room_local_agent( + bot: &Bot, + room_config_manager: &tokio::sync::Mutex, + message_context: &MessageContext, + agent_id: &PublicIdentifier, +) -> anyhow::Result<()> { + let mut room_config = message_context.room_config().clone(); + + let mut was_deleted = false; + + let agent_id_prefixless = agent_id.prefixless(); + + let mut agents = Vec::new(); + for agent_config in room_config.agents { + if agent_config.id == agent_id_prefixless { + was_deleted = true; + } else { + agents.push(agent_config.clone()); + } + } + + if !was_deleted { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::agent_with_given_identifier_missing(agent_id), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + + room_config.agents = agents; + + let room_config_manager = room_config_manager.lock().await; + + // We may unset all handlers in the room config which refer to this agent. + // We intentionally do not do this, because we do not support "agent edit" yet and ask people to do "agent delete" and "agent create" instead. + // We'd rather not magically reconfigure the room on agent deletion and obstruct this use case. + + room_config_manager + .persist(message_context.room(), &room_config) + .await?; + + bot.messaging() + .send_success_markdown_no_fail( + message_context.room(), + &strings::agent::removed_room_local(agent_id, bot.command_prefix()), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} + +async fn delete_global_agent( + bot: &Bot, + global_config_manager: &tokio::sync::Mutex, + message_context: &MessageContext, + agent_id: &PublicIdentifier, +) -> anyhow::Result<()> { + let mut global_config = message_context.global_config().clone(); + + let mut was_deleted = false; + + let agent_id_prefixless = agent_id.prefixless(); + + let mut agents = Vec::new(); + for agent_config in global_config.agents { + if agent_config.id == agent_id_prefixless { + was_deleted = true; + } else { + agents.push(agent_config.clone()); + } + } + + if !was_deleted { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::agent_with_given_identifier_missing(agent_id), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + + global_config.agents = agents; + + global_config_manager + .lock() + .await + .persist(&global_config) + .await?; + + bot.messaging() + .send_success_markdown_no_fail( + message_context.room(), + &strings::agent::removed_global(agent_id, bot.command_prefix()), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/agent/details/mod.rs b/src/controller/agent/details/mod.rs new file mode 100644 index 0000000..d6a2515 --- /dev/null +++ b/src/controller/agent/details/mod.rs @@ -0,0 +1,84 @@ +use mxlink::MessageResponseType; + +use crate::{agent::PublicIdentifier, entity::MessageContext, strings, Bot}; + +pub async fn handle( + bot: &Bot, + message_context: &MessageContext, + agent_identifier: &PublicIdentifier, +) -> anyhow::Result<()> { + let agents = bot + .agent_manager() + .available_room_agents_by_room_config_context(message_context.room_config_context()); + + let agent = agents.iter().find(|a| a.identifier() == agent_identifier); + + let agent = match agent { + Some(agent) => agent, + None => { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::agent_with_given_identifier_missing(agent_identifier), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + }; + + // Access checks + + match &agent_identifier { + PublicIdentifier::DynamicRoomLocal(_) => { + if !message_context.sender_can_manage_room_local_agents()? { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::not_allowed_to_manage_room_local_agents_in_room(), + MessageResponseType::Reply( + message_context.thread_info().root_event_id.clone(), + ), + ) + .await; + + return Ok(()); + } + } + PublicIdentifier::DynamicGlobal(_) => { + if !message_context.sender_can_manage_global_config()? { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + strings::global_config::no_permissions_to_administrate(), + MessageResponseType::Reply( + message_context.thread_info().root_event_id.clone(), + ), + ) + .await; + + return Ok(()); + } + } + PublicIdentifier::Static(_) => {} + }; + + let config_yaml_pretty = serde_yaml::to_string(&agent.definition().config)?; + + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + format!( + "Configuration for agent `{}` (powered by the `{}` provider):\n```yml\n{}\n```", + agent_identifier, + agent.definition().provider.to_static_str(), + config_yaml_pretty.trim(), + ) + .to_owned(), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/agent/determination/mod.rs b/src/controller/agent/determination/mod.rs new file mode 100644 index 0000000..df0fc2d --- /dev/null +++ b/src/controller/agent/determination/mod.rs @@ -0,0 +1,99 @@ +#[cfg(test)] +mod tests; + +use crate::{agent::PublicIdentifier, controller::ControllerType, strings}; + +#[derive(Debug, PartialEq)] +pub enum AgentControllerType { + List, + Details(PublicIdentifier), + CreateRoomLocal { provider: String, agent_id: String }, + CreateGlobal { provider: String, agent_id: String }, + Delete(PublicIdentifier), + Help, +} + +pub fn determine_controller(command_prefix: &str, text: &str) -> ControllerType { + if text.starts_with("list") { + return ControllerType::Agent(AgentControllerType::List); + } + if let Some(agent_id_string) = text.strip_prefix("details") { + let agent_id_string = agent_id_string.trim(); + + if agent_id_string.is_empty() || agent_id_string.contains(" ") { + return ControllerType::Error( + strings::agent::incorrect_invocation_expects_agent_id_arg(command_prefix), + ); + } + + let Some(agent_identifier) = PublicIdentifier::from_str(agent_id_string) else { + return ControllerType::Error(strings::agent::invalid_id_generic()); + }; + + return ControllerType::Agent(AgentControllerType::Details(agent_identifier)); + } + + if let Some(remaining_text) = text.strip_prefix("create-room-local") { + // `remaining_text` should be something like: `PROVIDER ID` + let remaining_text = remaining_text.trim(); + + let parts = remaining_text.split_once(' '); + let Some((provider, agent_id_string)) = parts else { + return ControllerType::Error(strings::agent::incorrect_creation_invocation( + command_prefix, + )); + }; + + if agent_id_string.contains(" ") { + return ControllerType::Error(strings::agent::incorrect_creation_invocation( + command_prefix, + )); + } + + return ControllerType::Agent(AgentControllerType::CreateRoomLocal { + provider: provider.to_owned(), + agent_id: agent_id_string.trim().to_owned(), + }); + } + + if let Some(remaining_text) = text.strip_prefix("create-global") { + // `remaining_text` should be something like: `PROVIDER ID` + let remaining_text = remaining_text.trim(); + + let parts = remaining_text.split_once(' '); + let Some((provider, agent_id_string)) = parts else { + return ControllerType::Error(strings::agent::incorrect_creation_invocation( + command_prefix, + )); + }; + + if agent_id_string.contains(" ") { + return ControllerType::Error(strings::agent::incorrect_creation_invocation( + command_prefix, + )); + } + + return ControllerType::Agent(AgentControllerType::CreateGlobal { + provider: provider.to_owned(), + agent_id: agent_id_string.trim().to_owned(), + }); + } + + if let Some(agent_id_string) = text.strip_prefix("delete") { + let agent_id_string = agent_id_string.trim(); + + if agent_id_string.is_empty() || agent_id_string.contains(" ") { + return ControllerType::Error( + strings::agent::incorrect_invocation_expects_agent_id_arg(command_prefix), + ); + } + + let Some(agent_identifier) = PublicIdentifier::from_str(agent_id_string) else { + return ControllerType::Error(strings::agent::invalid_id_generic()); + }; + + return ControllerType::Agent(AgentControllerType::Delete(agent_identifier)); + } + + ControllerType::Agent(AgentControllerType::Help) +} diff --git a/src/controller/agent/determination/tests.rs b/src/controller/agent/determination/tests.rs new file mode 100644 index 0000000..d99e0ab --- /dev/null +++ b/src/controller/agent/determination/tests.rs @@ -0,0 +1,131 @@ +#[test] +fn determine_controller() { + use crate::agent::PublicIdentifier; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: super::ControllerType, + } + + let command_prefix = "!bai"; + + let test_cases = vec![ + TestCase { + name: "Top-level is help", + input: "", + expected: super::ControllerType::Agent(super::AgentControllerType::Help), + }, + TestCase { + name: "Anything else goes to top-level", + input: "whatever", + expected: super::ControllerType::Agent(super::AgentControllerType::Help), + }, + TestCase { + name: "List", + input: "list", + expected: super::ControllerType::Agent(super::AgentControllerType::List), + }, + TestCase { + name: "details", + input: "details static/agent-id", + expected: super::ControllerType::Agent(super::AgentControllerType::Details( + PublicIdentifier::Static("agent-id".to_owned()), + )), + }, + TestCase { + name: "details with invalid agent identifier", + input: "details agent-id", + expected: super::ControllerType::Error(crate::strings::agent::invalid_id_generic()), + }, + TestCase { + name: "create-room-local no arguments", + input: "create-room-local", + expected: super::ControllerType::Error( + crate::strings::agent::incorrect_creation_invocation(command_prefix), + ), + }, + TestCase { + name: "create-room-local only with provider", + input: "create-room-local openai", + expected: super::ControllerType::Error( + crate::strings::agent::incorrect_creation_invocation(command_prefix), + ), + }, + TestCase { + name: "create-room-local correct", + input: "create-room-local openai my-agent-id", + expected: super::ControllerType::Agent(super::AgentControllerType::CreateRoomLocal { + provider: "openai".to_owned(), + agent_id: "my-agent-id".trim().to_owned(), + }), + }, + TestCase { + name: "create-global extra arguments", + input: "create-global openai my-agent-id more arguments here", + expected: super::ControllerType::Error( + crate::strings::agent::incorrect_creation_invocation(command_prefix), + ), + }, + TestCase { + name: "create-global no arguments", + input: "create-global", + expected: super::ControllerType::Error( + crate::strings::agent::incorrect_creation_invocation(command_prefix), + ), + }, + TestCase { + name: "create-global only with provider", + input: "create-global openai", + expected: super::ControllerType::Error( + crate::strings::agent::incorrect_creation_invocation(command_prefix), + ), + }, + TestCase { + name: "create-global correct", + input: "create-global openai my-agent-id", + expected: super::ControllerType::Agent(super::AgentControllerType::CreateGlobal { + provider: "openai".to_owned(), + agent_id: "my-agent-id".trim().to_owned(), + }), + }, + TestCase { + name: "create-global extra arguments", + input: "create-global openai my-agent-id more arguments here", + expected: super::ControllerType::Error( + crate::strings::agent::incorrect_creation_invocation(command_prefix), + ), + }, + TestCase { + name: "delete no arguments", + input: "delete", + expected: super::ControllerType::Error( + crate::strings::agent::incorrect_invocation_expects_agent_id_arg(command_prefix), + ), + }, + TestCase { + name: "delete too many arguments", + input: "delete agent-id extra arguments", + expected: super::ControllerType::Error( + crate::strings::agent::incorrect_invocation_expects_agent_id_arg(command_prefix), + ), + }, + TestCase { + name: "delete", + input: "delete static/agent-id", + expected: super::ControllerType::Agent(super::AgentControllerType::Delete( + PublicIdentifier::Static("agent-id".to_owned()), + )), + }, + TestCase { + name: "delete with invalid agent identifier", + input: "delete agent-id", + expected: super::ControllerType::Error(crate::strings::agent::invalid_id_generic()), + }, + ]; + + for test_case in test_cases { + let result = super::determine_controller(command_prefix, test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} diff --git a/src/controller/agent/help/mod.rs b/src/controller/agent/help/mod.rs new file mode 100644 index 0000000..022cd79 --- /dev/null +++ b/src/controller/agent/help/mod.rs @@ -0,0 +1,79 @@ +use mxlink::MessageResponseType; + +use crate::{entity::MessageContext, strings, Bot}; + +pub async fn handle(bot: &Bot, message_context: &MessageContext) -> anyhow::Result<()> { + // Anyone can access this help command, because certain subcommands ("list") + // are also useful to regular users and it'd be great for them to learn about them. + + let mut message = String::new(); + + let can_manage_agents = message_context.sender_can_manage_room_local_agents()?; + + message.push_str(&format!("## {}", strings::help::agent::heading())); + message.push_str("\n\n"); + message.push_str(&strings::help::agent::intro( + bot.command_prefix(), + can_manage_agents, + )); + message.push('\n'); + message.push_str(&strings::help::agent::intro_capabilities()); + message.push_str("\n\n"); + message.push_str(&strings::help::agent::intro_handler_relation( + bot.command_prefix(), + )); + + if can_manage_agents { + message.push_str("\n\n"); + + message.push_str(strings::help::available_commands_intro()); + message.push('\n'); + + message.push_str(&strings::help::agent::list_agents(bot.command_prefix())); + message.push('\n'); + + message.push_str(strings::help::agent::create_agent_intro()); + message.push('\n'); + message.push_str(&strings::help::agent::create_agent_room_local( + bot.command_prefix(), + )); + message.push('\n'); + + if message_context.sender_can_manage_global_config()? { + message.push_str(&strings::help::agent::create_agent_global( + bot.command_prefix(), + )); + message.push('\n'); + } + + message.push_str(&strings::help::agent::create_agent_example( + bot.command_prefix(), + )); + message.push('\n'); + + message.push_str(&strings::help::agent::show_agent_details( + bot.command_prefix(), + )); + message.push('\n'); + + message.push_str(&strings::help::agent::delete_agent(bot.command_prefix())); + + message.push_str("\n\n"); + + message.push_str(strings::help::agent::available_commands_outro_update_note()); + } else { + message.push_str("\n\n"); + + message.push_str(strings::help::agent::no_permission_to_create_agents()); + } + + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/agent/list/mod.rs b/src/controller/agent/list/mod.rs new file mode 100644 index 0000000..a7f8f97 --- /dev/null +++ b/src/controller/agent/list/mod.rs @@ -0,0 +1,39 @@ +use mxlink::MessageResponseType; + +use crate::agent::AgentPurpose; +use crate::strings; +use crate::{entity::MessageContext, Bot}; + +pub async fn handle(bot: &Bot, message_context: &MessageContext) -> anyhow::Result<()> { + let agents = bot + .agent_manager() + .available_room_agents_by_room_config_context(message_context.room_config_context()); + + let mut message = String::new(); + if agents.is_empty() { + message.push_str(strings::agent::agent_list_empty().as_str()); + } else { + message.push_str(&strings::agent::non_empty_agent_list_block(&agents)); + message.push_str("\n\n"); + + message.push_str(strings::agent::agent_list_legend_intro().as_str()); + for purpose in AgentPurpose::choices() { + message.push_str(&format!( + "\n- {} `{}` ({})", + purpose.emoji(), + purpose.as_str(), + strings::agent::purpose_howto(purpose), + )); + } + } + + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/agent/mod.rs b/src/controller/agent/mod.rs new file mode 100644 index 0000000..6c53a4f --- /dev/null +++ b/src/controller/agent/mod.rs @@ -0,0 +1,54 @@ +use crate::{entity::MessageContext, Bot}; + +pub mod create; +pub mod delete; +pub mod details; +pub mod determination; +pub mod help; +pub mod list; + +pub use determination::{determine_controller, AgentControllerType}; + +pub async fn dispatch_controller( + handler: &AgentControllerType, + message_context: &MessageContext, + bot: &Bot, +) -> anyhow::Result<()> { + match handler { + AgentControllerType::CreateRoomLocal { provider, agent_id } => { + create::handle_room_local( + bot, + bot.room_config_manager(), + message_context, + provider, + agent_id, + ) + .await + } + AgentControllerType::CreateGlobal { provider, agent_id } => { + create::handle_global( + bot, + bot.global_config_manager(), + message_context, + provider, + agent_id, + ) + .await + } + AgentControllerType::List => list::handle(bot, message_context).await, + AgentControllerType::Details(agent_identifier) => { + details::handle(bot, message_context, agent_identifier).await + } + AgentControllerType::Delete(agent_identifier) => { + delete::handle( + bot, + bot.room_config_manager(), + bot.global_config_manager(), + message_context, + agent_identifier, + ) + .await + } + AgentControllerType::Help => help::handle(bot, message_context).await, + } +} diff --git a/src/controller/cfg/common/generic_setting.rs b/src/controller/cfg/common/generic_setting.rs new file mode 100644 index 0000000..ffebe6d --- /dev/null +++ b/src/controller/cfg/common/generic_setting.rs @@ -0,0 +1,35 @@ +use mxlink::MessageResponseType; + +use crate::{entity::MessageContext, strings, Bot}; + +pub async fn handle_get( + bot: &Bot, + message_context: &MessageContext, + value: &Option, +) -> anyhow::Result<()> +where + T: std::fmt::Display, +{ + match value { + Some(value) => { + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + strings::cfg::value_currently_set_to(value), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + } + None => { + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + strings::cfg::value_currently_unset(), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + } + } + + Ok(()) +} diff --git a/src/controller/cfg/common/mod.rs b/src/controller/cfg/common/mod.rs new file mode 100644 index 0000000..7663916 --- /dev/null +++ b/src/controller/cfg/common/mod.rs @@ -0,0 +1 @@ +pub(super) mod generic_setting; diff --git a/src/controller/cfg/controller_type.rs b/src/controller/cfg/controller_type.rs new file mode 100644 index 0000000..659c35f --- /dev/null +++ b/src/controller/cfg/controller_type.rs @@ -0,0 +1,74 @@ +use crate::{ + agent::{AgentPurpose, PublicIdentifier}, + entity::roomconfig::{ + SpeechToTextFlowType, TextGenerationAutoUsage, TextGenerationPrefixRequirementType, + TextToSpeechBotMessagesFlowType, TextToSpeechUserMessagesFlowType, + }, +}; + +#[derive(Debug, PartialEq)] +pub enum SettingsStorageSource { + Room, + Global, +} + +#[derive(Debug, PartialEq)] +pub enum ConfigControllerType { + Help, + + Status, + + SettingsRelated(SettingsStorageSource, ConfigSettingRelatedControllerType), +} + +#[derive(Debug, PartialEq)] +pub enum ConfigSettingRelatedControllerType { + GetHandler(AgentPurpose), + SetHandler(AgentPurpose, Option), + + TextGeneration(ConfigTextGenerationSettingRelatedControllerType), + SpeechToText(ConfigSpeechToTextSettingRelatedControllerType), + TextToSpeech(ConfigTextToSpeechSettingRelatedControllerType), +} + +#[derive(Debug, PartialEq)] +pub enum ConfigTextGenerationSettingRelatedControllerType { + GetContextManagementEnabled, + SetContextManagementEnabled(Option), + + GetPrefixRequirementType, + SetPrefixRequirementType(Option), + + GetAutoUsage, + SetAutoUsage(Option), + + GetPromptOverride, + SetPromptOverride(Option), + + GetTemperatureOverride, + SetTemperatureOverride(Option), +} + +#[derive(Debug, PartialEq)] +pub enum ConfigSpeechToTextSettingRelatedControllerType { + GetFlowType, + SetFlowType(Option), + + GetLanguage, + SetLanguage(Option), +} + +#[derive(Debug, PartialEq)] +pub enum ConfigTextToSpeechSettingRelatedControllerType { + GetBotMessagesFlowType, + SetBotMessagesFlowType(Option), + + GetUserMessagesFlowType, + SetUserMessagesFlowType(Option), + + GetSpeedOverride, + SetSpeedOverride(Option), + + GetVoiceOverride, + SetVoiceOverride(Option), +} diff --git a/src/controller/cfg/determination/mod.rs b/src/controller/cfg/determination/mod.rs new file mode 100644 index 0000000..6ec7e18 --- /dev/null +++ b/src/controller/cfg/determination/mod.rs @@ -0,0 +1,141 @@ +#[cfg(test)] +mod tests; + +mod speech_to_text; +mod text_generation; +mod text_to_speech; + +use crate::{ + agent::{AgentPurpose, PublicIdentifier}, + controller::ControllerType, + strings, +}; + +use super::controller_type::{ + ConfigControllerType, ConfigSettingRelatedControllerType, SettingsStorageSource, +}; + +pub fn determine_controller(text: &str) -> ControllerType { + if text.starts_with("status") { + return ControllerType::Config(ConfigControllerType::Status); + } + + // Someone pasted our instructions verbatim. + if text.strip_prefix("CONFIG_TYPE").is_some() { + return ControllerType::Error(strings::cfg::error_config_type_not_replaced()); + } + + if let Some(remaining_text) = text.strip_prefix("room ") { + return match do_determine_controller(remaining_text.trim()) { + Ok(handler) => ControllerType::Config(ConfigControllerType::SettingsRelated( + SettingsStorageSource::Room, + handler, + )), + Err(controller_type) => controller_type, + }; + } + + if let Some(remaining_text) = text.strip_prefix("global ") { + return match do_determine_controller(remaining_text.trim()) { + Ok(handler) => ControllerType::Config(ConfigControllerType::SettingsRelated( + SettingsStorageSource::Global, + handler, + )), + Err(controller_type) => controller_type, + }; + } + + ControllerType::Config(ConfigControllerType::Help) +} + +fn do_determine_controller( + text: &str, +) -> Result { + if let Some(purpose_str) = text.strip_prefix("handler") { + let purpose_str = purpose_str.trim(); + + if purpose_str.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_invocation_incorrect_more_values_expected().to_owned(), + )); + } + + let Some(purpose) = AgentPurpose::from_str(purpose_str) else { + return Err(ControllerType::Error( + strings::agent::purpose_unrecognized(purpose_str).to_owned(), + )); + }; + + return Ok(ConfigSettingRelatedControllerType::GetHandler(purpose)); + } + + if let Some(remaining_text) = text.strip_prefix("set-handler") { + // Something like: + // - `PURPOSE ID` + // - `PURPOSE` + let remaining_text = remaining_text.trim(); + + if remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_invocation_incorrect_more_values_expected().to_owned(), + )); + } + + // This will be None if we're just dealing with `PURPOSE` and lack an `ID`. + // In such cases, the whole thing is the purpose string. + let parts = remaining_text.split_once(' '); + + let (purpose_str, agent_id_string_option) = if let Some(parts) = parts { + (parts.0, Some(parts.1.to_owned())) + } else { + (remaining_text, None) + }; + + let Some(purpose) = AgentPurpose::from_str(purpose_str) else { + return Err(ControllerType::Error( + strings::agent::purpose_unrecognized(purpose_str).to_owned(), + )); + }; + + let agent_identifier = match agent_id_string_option { + Some(agent_id_string) => { + let Some(agent_identifier) = PublicIdentifier::from_str(&agent_id_string) else { + return Err(ControllerType::Error( + strings::agent::invalid_id_generic().to_owned(), + )); + }; + + Some(agent_identifier) + } + None => None, + }; + + return Ok(ConfigSettingRelatedControllerType::SetHandler( + purpose, + agent_identifier, + )); + } + + if let Some(remaining_text) = text.strip_prefix("text-generation") { + return match text_generation::determine(remaining_text.trim()) { + Ok(handler) => Ok(ConfigSettingRelatedControllerType::TextGeneration(handler)), + Err(controller_type) => Err(controller_type), + }; + } + + if let Some(remaining_text) = text.strip_prefix("text-to-speech") { + return match text_to_speech::determine(remaining_text.trim()) { + Ok(handler) => Ok(ConfigSettingRelatedControllerType::TextToSpeech(handler)), + Err(controller_type) => Err(controller_type), + }; + } + + if let Some(remaining_text) = text.strip_prefix("speech-to-text") { + return match speech_to_text::determine(remaining_text.trim()) { + Ok(handler) => Ok(ConfigSettingRelatedControllerType::SpeechToText(handler)), + Err(controller_type) => Err(controller_type), + }; + } + + Err(ControllerType::Unknown) +} diff --git a/src/controller/cfg/determination/speech_to_text/mod.rs b/src/controller/cfg/determination/speech_to_text/mod.rs new file mode 100644 index 0000000..613ceae --- /dev/null +++ b/src/controller/cfg/determination/speech_to_text/mod.rs @@ -0,0 +1,87 @@ +#[cfg(test)] +mod tests; + +use crate::{controller::ControllerType, entity::roomconfig::SpeechToTextFlowType, strings}; + +use super::super::controller_type::ConfigSpeechToTextSettingRelatedControllerType; + +pub(super) fn determine( + text: &str, +) -> Result { + // Flow Type + + if let Some(remaining_text) = text.strip_prefix("flow-type") { + let remaining_text = remaining_text.trim(); + + if !remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_getter_used_with_extra_text( + "flow-type", + remaining_text, + ) + .to_owned(), + )); + } + + return Ok(ConfigSpeechToTextSettingRelatedControllerType::GetFlowType); + } + + if let Some(value_string) = text.strip_prefix("set-flow-type") { + let value_string = value_string.trim().to_owned(); + + let value_choice = if value_string.is_empty() { + None + } else { + let value_choice = SpeechToTextFlowType::from_str(&value_string.to_lowercase()); + + if value_choice.is_none() { + return Err(ControllerType::Error( + strings::cfg::configuration_value_unrecognized(&value_string).to_owned(), + )); + } + + value_choice + }; + + return Ok(ConfigSpeechToTextSettingRelatedControllerType::SetFlowType( + value_choice, + )); + } + + // Language + + if let Some(remaining_text) = text.strip_prefix("language") { + let remaining_text = remaining_text.trim(); + + if !remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_getter_used_with_extra_text("language", remaining_text) + .to_owned(), + )); + } + + return Ok(ConfigSpeechToTextSettingRelatedControllerType::GetLanguage); + } + + if let Some(value_string) = text.strip_prefix("set-language") { + let value_string = value_string.trim().to_owned(); + + let value_string = if value_string.is_empty() { + None + } else { + if value_string.len() != 2 { + return Err(ControllerType::Error( + strings::speech_to_text::language_code_invalid(&value_string).to_owned(), + )); + } + + Some(value_string) + }; + + return Ok(ConfigSpeechToTextSettingRelatedControllerType::SetLanguage( + value_string, + )); + } + + Err(ControllerType::Unknown) +} diff --git a/src/controller/cfg/determination/speech_to_text/tests.rs b/src/controller/cfg/determination/speech_to_text/tests.rs new file mode 100644 index 0000000..75c443b --- /dev/null +++ b/src/controller/cfg/determination/speech_to_text/tests.rs @@ -0,0 +1,136 @@ +#[test] +fn determine_controller_other() { + use super::ConfigSpeechToTextSettingRelatedControllerType; + use super::ControllerType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![TestCase { + name: "Unknown", + input: "whatever", + expected: Err(ControllerType::Unknown), + }]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} + +#[test] +fn determine_controller_flow_type() { + use super::ConfigSpeechToTextSettingRelatedControllerType; + use super::ControllerType; + use crate::entity::roomconfig::SpeechToTextFlowType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![ + TestCase { + name: "flow-type getter ok", + input: "flow-type", + expected: Ok(ConfigSpeechToTextSettingRelatedControllerType::GetFlowType), + }, + TestCase { + name: "flow-type getter extra args", + input: "flow-type some values here", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_getter_used_with_extra_text( + "flow-type", + "some values here", + ), + )), + }, + TestCase { + name: "flow-type setter", + input: "set-flow-type transcribe_and_generate_text", + expected: Ok(ConfigSpeechToTextSettingRelatedControllerType::SetFlowType( + Some(SpeechToTextFlowType::TranscribeAndGenerateText), + )), + }, + TestCase { + name: "flow-type setter", + input: "set-flow-type unknown-Value", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_value_unrecognized("unknown-Value"), + )), + }, + TestCase { + name: "flow-type unsetter", + input: "set-flow-type", + expected: Ok(ConfigSpeechToTextSettingRelatedControllerType::SetFlowType( + None, + )), + }, + ]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} + +#[test] +fn determine_controller_language() { + use super::ConfigSpeechToTextSettingRelatedControllerType; + use super::ControllerType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![ + TestCase { + name: "language getter ok", + input: "language", + expected: Ok(ConfigSpeechToTextSettingRelatedControllerType::GetLanguage), + }, + TestCase { + name: "language getter extra args", + input: "language some values here", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_getter_used_with_extra_text( + "language", + "some values here", + ), + )), + }, + TestCase { + name: "language setter 2-letter code (ja)", + input: "set-language ja", + expected: Ok(ConfigSpeechToTextSettingRelatedControllerType::SetLanguage( + Some("ja".to_owned()), + )), + }, + // OpenAI does not support 3-letter codes, so we won't be allowing it either + TestCase { + name: "language setter 3-letter code (jpn) fails", + input: "set-language jpn", + expected: Err(ControllerType::Error( + crate::strings::speech_to_text::language_code_invalid("jpn"), + )), + }, + TestCase { + name: "language unsetter", + input: "set-language", + expected: Ok(ConfigSpeechToTextSettingRelatedControllerType::SetLanguage( + None, + )), + }, + ]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} diff --git a/src/controller/cfg/determination/tests.rs b/src/controller/cfg/determination/tests.rs new file mode 100644 index 0000000..7e4fe75 --- /dev/null +++ b/src/controller/cfg/determination/tests.rs @@ -0,0 +1,212 @@ +#[test] +fn determine_controller() { + use super::super::controller_type; + use crate::agent::{AgentPurpose, PublicIdentifier}; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: super::ControllerType, + } + + let test_cases = vec![ + TestCase { + name: "Top-level is help", + input: "", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::Help), + }, + TestCase { + name: "unknown commands is help", + input: "whatever", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::Help), + }, + + TestCase { + name: "Status", + input: "status", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::Status), + }, + + + TestCase { + name: "per-room handler getter - catch-all", + input: "room handler catch-all", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Room, + controller_type::ConfigSettingRelatedControllerType::GetHandler(AgentPurpose::CatchAll), + )), + }, + TestCase { + name: "per-room handler getter - text-generation", + input: "room handler text-generation", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Room, + controller_type::ConfigSettingRelatedControllerType::GetHandler(AgentPurpose::TextGeneration), + )), + }, + TestCase { + name: "per-room handler getter - invalid purpose", + input: "room handler invalid-purpose-here", + expected: super::ControllerType::Error( + crate::strings::agent::purpose_unrecognized("invalid-purpose-here").to_owned() + ), + }, + TestCase { + name: "per-room handler getter - invalid purpose with spaces", + input: "room handler invalid purpose here", + expected: super::ControllerType::Error( + crate::strings::agent::purpose_unrecognized("invalid purpose here").to_owned() + ), + }, + TestCase { + name: "per-room handler setter - too few values", + input: "room set-handler", + expected: super::ControllerType::Error( + crate::strings::cfg::configuration_invocation_incorrect_more_values_expected().to_owned() + ), + }, + TestCase { + name: "per-room handler setter - catch-all", + input: "room set-handler catch-all static/agent-id", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Room, + controller_type::ConfigSettingRelatedControllerType::SetHandler(AgentPurpose::CatchAll, Some( + PublicIdentifier::Static("agent-id".to_owned()) + )), + )), + }, + TestCase { + name: "per-room handler setter - catch-all with bare agent id", + input: "room set-handler catch-all agent-id", + expected: super::ControllerType::Error( + crate::strings::agent::invalid_id_generic().to_owned() + ), + }, + TestCase { + name: "per-room handler setter - catch-all unsetter", + input: "room set-handler catch-all", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Room, + controller_type::ConfigSettingRelatedControllerType::SetHandler(AgentPurpose::CatchAll, None), + )), + }, + TestCase { + name: "per-room handler setter - text-generation", + input: "room set-handler text-generation room-local/agent-id", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Room, + controller_type::ConfigSettingRelatedControllerType::SetHandler(AgentPurpose::TextGeneration, Some( + PublicIdentifier::DynamicRoomLocal("agent-id".to_owned()) + )), + )), + }, + TestCase { + name: "per-room handler setter - too many values", + input: "room set-handler text-generation agent-id more values here", + expected: super::ControllerType::Error( + crate::strings::agent::invalid_id_generic().to_owned() + ), + }, + + // We have few global handler test cases. We've exercised the per-room handlers enough. + // These share the same code path, so we don't need to test all the permutations again. + TestCase { + name: "global handler getter - catch-all", + input: "global handler catch-all", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Global, + controller_type::ConfigSettingRelatedControllerType::GetHandler(AgentPurpose::CatchAll), + )), + }, + TestCase { + name: "global handler setter - text-generation with global agent", + input: "global set-handler text-generation global/agent-id", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Global, + controller_type::ConfigSettingRelatedControllerType::SetHandler(AgentPurpose::TextGeneration, Some( + PublicIdentifier::DynamicGlobal("agent-id".to_owned()) + )), + )), + }, + // This test case passes, even though the handler function will subsequently reject using room-local agents for global handlers. + TestCase { + name: "global handler setter - text-generation with room-local agent", + input: "global set-handler text-generation room-local/agent-id", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Global, + controller_type::ConfigSettingRelatedControllerType::SetHandler(AgentPurpose::TextGeneration, Some( + PublicIdentifier::DynamicRoomLocal("agent-id".to_owned()) + )), + )), + }, + + // We'll only test one handler per sub-category to ensure proper routing is done here. + // Extensive tests for each sub-category are done in their respective modules. + + TestCase { + name: "per-room text-generation/context-management-enabled getter", + input: "room text-generation context-management-enabled", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Room, + controller_type::ConfigSettingRelatedControllerType::TextGeneration( + controller_type::ConfigTextGenerationSettingRelatedControllerType::GetContextManagementEnabled, + ), + )), + }, + TestCase { + name: "global text-generation/context-management-enabled getter", + input: "global text-generation context-management-enabled", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Global, + controller_type::ConfigSettingRelatedControllerType::TextGeneration( + controller_type::ConfigTextGenerationSettingRelatedControllerType::GetContextManagementEnabled, + ), + )), + }, + TestCase { + name: "per-room text-to-speech/speed-override getter", + input: "room text-to-speech speed-override", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Room, + controller_type::ConfigSettingRelatedControllerType::TextToSpeech( + controller_type::ConfigTextToSpeechSettingRelatedControllerType::GetSpeedOverride, + ), + )), + }, + TestCase { + name: "global text-to-speech/speed-override getter", + input: "global text-to-speech speed-override", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Global, + controller_type::ConfigSettingRelatedControllerType::TextToSpeech( + controller_type::ConfigTextToSpeechSettingRelatedControllerType::GetSpeedOverride, + ), + )), + }, + TestCase { + name: "room speech-to-text/flow-type getter", + input: "room speech-to-text flow-type", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Room, + controller_type::ConfigSettingRelatedControllerType::SpeechToText( + controller_type::ConfigSpeechToTextSettingRelatedControllerType::GetFlowType, + ), + )), + }, + TestCase { + name: "global speech-to-text/flow-type getter", + input: "global speech-to-text flow-type", + expected: super::ControllerType::Config(controller_type::ConfigControllerType::SettingsRelated( + controller_type::SettingsStorageSource::Global, + controller_type::ConfigSettingRelatedControllerType::SpeechToText( + controller_type::ConfigSpeechToTextSettingRelatedControllerType::GetFlowType, + ), + )), + }, + ]; + + for test_case in test_cases { + let result = super::determine_controller(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} diff --git a/src/controller/cfg/determination/text_generation/mod.rs b/src/controller/cfg/determination/text_generation/mod.rs new file mode 100644 index 0000000..5f4b778 --- /dev/null +++ b/src/controller/cfg/determination/text_generation/mod.rs @@ -0,0 +1,201 @@ +#[cfg(test)] +mod tests; + +use crate::{ + controller::ControllerType, + entity::roomconfig::{TextGenerationAutoUsage, TextGenerationPrefixRequirementType}, + strings, +}; + +use super::super::controller_type::ConfigTextGenerationSettingRelatedControllerType; + +pub(super) fn determine( + text: &str, +) -> Result { + if let Some(remaining_text) = text.strip_prefix("context-management-enabled") { + let remaining_text = remaining_text.trim(); + + if !remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_getter_used_with_extra_text( + "context-management-enabled", + remaining_text, + ) + .to_owned(), + )); + } + + return Ok(ConfigTextGenerationSettingRelatedControllerType::GetContextManagementEnabled); + } + + if let Some(value_string) = text.strip_prefix("set-context-management-enabled") { + let value_string = value_string.trim().to_owned(); + let value_opt = if value_string.is_empty() { + None + } else { + let value_string_lowercase = value_string.to_lowercase(); + Some(match value_string_lowercase.as_str() { + "true" => true, + "false" => false, + _ => { + return Err(ControllerType::Error( + strings::cfg::configuration_value_unrecognized(&value_string).to_owned(), + )); + } + }) + }; + + return Ok( + ConfigTextGenerationSettingRelatedControllerType::SetContextManagementEnabled( + value_opt, + ), + ); + } + + if let Some(remaining_text) = text.strip_prefix("prefix-requirement-type") { + let remaining_text = remaining_text.trim(); + + if !remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_getter_used_with_extra_text( + "prefix-requirement-type", + remaining_text, + ) + .to_owned(), + )); + } + + return Ok(ConfigTextGenerationSettingRelatedControllerType::GetPrefixRequirementType); + } + + if let Some(value_string) = text.strip_prefix("set-prefix-requirement-type") { + let value_string = value_string.trim().to_owned(); + + let value_choice = if value_string.is_empty() { + None + } else { + let value_choice = + TextGenerationPrefixRequirementType::from_str(&value_string.to_lowercase()); + + if value_choice.is_none() { + return Err(ControllerType::Error( + strings::cfg::configuration_value_unrecognized(&value_string).to_owned(), + )); + } + + value_choice + }; + + return Ok( + ConfigTextGenerationSettingRelatedControllerType::SetPrefixRequirementType( + value_choice, + ), + ); + } + + if let Some(remaining_text) = text.strip_prefix("auto-usage") { + let remaining_text = remaining_text.trim(); + + if !remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_getter_used_with_extra_text( + "auto-usage", + remaining_text, + ) + .to_owned(), + )); + } + + return Ok(ConfigTextGenerationSettingRelatedControllerType::GetAutoUsage); + } + + if let Some(value_string) = text.strip_prefix("set-auto-usage") { + let value_string = value_string.trim().to_owned(); + + let value_choice = if value_string.is_empty() { + None + } else { + let value_choice = TextGenerationAutoUsage::from_str(&value_string.to_lowercase()); + + if value_choice.is_none() { + return Err(ControllerType::Error( + strings::cfg::configuration_value_unrecognized(&value_string).to_owned(), + )); + } + + value_choice + }; + + return Ok(ConfigTextGenerationSettingRelatedControllerType::SetAutoUsage(value_choice)); + } + + if let Some(remaining_text) = text.strip_prefix("prompt-override") { + let remaining_text = remaining_text.trim(); + + if !remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_getter_used_with_extra_text( + "prompt-override", + remaining_text, + ) + .to_owned(), + )); + } + + return Ok(ConfigTextGenerationSettingRelatedControllerType::GetPromptOverride); + } + + if let Some(value_string) = text.strip_prefix("set-prompt-override") { + let value_string = value_string.trim().to_owned(); + + if value_string.is_empty() { + return Ok(ConfigTextGenerationSettingRelatedControllerType::SetPromptOverride(None)); + } + + return Ok( + ConfigTextGenerationSettingRelatedControllerType::SetPromptOverride(Some(value_string)), + ); + } + + if let Some(remaining_text) = text.strip_prefix("temperature-override") { + let remaining_text = remaining_text.trim(); + + if !remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_getter_used_with_extra_text( + "temperature-override", + remaining_text, + ) + .to_owned(), + )); + } + + return Ok(ConfigTextGenerationSettingRelatedControllerType::GetTemperatureOverride); + } + + if let Some(value_string) = text.strip_prefix("set-temperature-override") { + let value_string = value_string.trim().to_owned(); + + if value_string.is_empty() { + return Ok( + ConfigTextGenerationSettingRelatedControllerType::SetTemperatureOverride(None), + ); + } + + let value_f32 = value_string.parse::(); + + let Ok(value_f32) = value_f32 else { + return Err(ControllerType::Error( + strings::cfg::configuration_value_not_f32(&value_string).to_owned(), + )); + }; + + return Ok( + ConfigTextGenerationSettingRelatedControllerType::SetTemperatureOverride(Some( + value_f32, + )), + ); + } + + Err(ControllerType::Unknown) +} diff --git a/src/controller/cfg/determination/text_generation/tests.rs b/src/controller/cfg/determination/text_generation/tests.rs new file mode 100644 index 0000000..5e4234b --- /dev/null +++ b/src/controller/cfg/determination/text_generation/tests.rs @@ -0,0 +1,332 @@ +#[test] +fn determine_controller_other() { + use super::ConfigTextGenerationSettingRelatedControllerType; + use super::ControllerType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![TestCase { + name: "Unknown", + input: "whatever", + expected: Err(ControllerType::Unknown), + }]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} + +#[test] +fn determine_controller_context_management() { + use super::ConfigTextGenerationSettingRelatedControllerType; + use super::ControllerType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![ + TestCase { + name: "context-management-enabled getter ok", + input: "context-management-enabled", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::GetContextManagementEnabled, + ), + }, + TestCase { + name: "context-management-enabled getter extra args", + input: "context-management-enabled some values here", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_getter_used_with_extra_text( + "context-management-enabled", + "some values here", + ), + )), + }, + TestCase { + name: "context-management-enabled setter", + input: "set-context-management-enabled true", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::SetContextManagementEnabled( + Some(true), + ), + ), + }, + TestCase { + name: "context-management-enabled setter uppercase", + input: "set-context-management-enabled TRUE", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::SetContextManagementEnabled( + Some(true), + ), + ), + }, + TestCase { + name: "context-management-enabled setter non-bool", + input: "set-context-management-enabled non-Bool-Value", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_value_unrecognized("non-Bool-Value"), + )), + }, + TestCase { + name: "context-management-enabled unsetter", + input: "set-context-management-enabled", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::SetContextManagementEnabled(None), + ), + }, + ]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} + +#[test] +fn determine_controller_prefix_requirement_type() { + use super::ConfigTextGenerationSettingRelatedControllerType; + use super::ControllerType; + use crate::entity::roomconfig::TextGenerationPrefixRequirementType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![ + TestCase { + name: "prefix-requirement-type getter ok", + input: "prefix-requirement-type", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::GetPrefixRequirementType, + ), + }, + TestCase { + name: "prefix-requirement-type getter extra args", + input: "prefix-requirement-type some values here", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_getter_used_with_extra_text( + "prefix-requirement-type", + "some values here", + ), + )), + }, + TestCase { + name: "prefix-requirement-type setter (command_prefix)", + input: "set-prefix-requirement-type command_prefix", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::SetPrefixRequirementType(Some( + TextGenerationPrefixRequirementType::CommandPrefix, + )), + ), + }, + TestCase { + name: "prefix-requirement-type setter (no)", + input: "set-prefix-requirement-type no", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::SetPrefixRequirementType(Some( + TextGenerationPrefixRequirementType::No, + )), + ), + }, + TestCase { + name: "prefix-requirement-type setter", + input: "set-prefix-requirement-type unknown-Value", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_value_unrecognized("unknown-Value"), + )), + }, + TestCase { + name: "prefix-requirement-type unsetter", + input: "set-prefix-requirement-type", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::SetPrefixRequirementType(None), + ), + }, + ]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} + +#[test] +fn determine_controller_auto_usage() { + use super::ConfigTextGenerationSettingRelatedControllerType; + use super::ControllerType; + use crate::entity::roomconfig::TextGenerationAutoUsage; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![ + TestCase { + name: "auto-usage getter ok", + input: "auto-usage", + expected: Ok(ConfigTextGenerationSettingRelatedControllerType::GetAutoUsage), + }, + TestCase { + name: "auto-usage getter extra args", + input: "auto-usage some values here", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_getter_used_with_extra_text( + "auto-usage", + "some values here", + ), + )), + }, + TestCase { + name: "auto-usage setter", + input: "set-auto-usage only_for_voice", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::SetAutoUsage(Some( + TextGenerationAutoUsage::OnlyForVoice, + )), + ), + }, + TestCase { + name: "auto-usage setter", + input: "set-auto-usage unknown-Value", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_value_unrecognized("unknown-Value"), + )), + }, + TestCase { + name: "auto-usage unsetter", + input: "set-auto-usage", + expected: Ok(ConfigTextGenerationSettingRelatedControllerType::SetAutoUsage(None)), + }, + ]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} + +#[test] +fn determine_controller_prompt_override() { + use super::ConfigTextGenerationSettingRelatedControllerType; + use super::ControllerType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![ + TestCase { + name: "prompt-override getter ok", + input: "prompt-override", + expected: Ok(ConfigTextGenerationSettingRelatedControllerType::GetPromptOverride), + }, + TestCase { + name: "prompt-override getter extra args", + input: "prompt-override some values here", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_getter_used_with_extra_text( + "prompt-override", + "some values here", + ), + )), + }, + TestCase { + name: "prompt-override setter with multiple words", + input: "set-prompt-override Hello! You are a bot", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::SetPromptOverride(Some( + "Hello! You are a bot".to_owned(), + )), + ), + }, + TestCase { + name: "prompt-override setter with multi-line", + input: "set-prompt-override Hello!\n\nYou are a bot", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::SetPromptOverride(Some( + "Hello!\n\nYou are a bot".to_owned(), + )), + ), + }, + TestCase { + name: "prompt-override unsetter", + input: "set-prompt-override", + expected: Ok(ConfigTextGenerationSettingRelatedControllerType::SetPromptOverride(None)), + }, + ]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} + +#[test] +fn determine_controller_temperature_override() { + use super::ConfigTextGenerationSettingRelatedControllerType; + use super::ControllerType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![ + TestCase { + name: "temperature-override getter ok", + input: "temperature-override", + expected: Ok(ConfigTextGenerationSettingRelatedControllerType::GetTemperatureOverride), + }, + TestCase { + name: "temperature-override getter extra args", + input: "temperature-override some values here", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_getter_used_with_extra_text( + "temperature-override", + "some values here", + ), + )), + }, + TestCase { + name: "temperature-override setter", + input: "set-temperature-override 0.5", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::SetTemperatureOverride(Some(0.5)), + ), + }, + TestCase { + name: "temperature-override setter", + input: "set-temperature-override unknown-Value", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_value_not_f32("unknown-Value"), + )), + }, + TestCase { + name: "temperature-override unsetter", + input: "set-temperature-override", + expected: Ok( + ConfigTextGenerationSettingRelatedControllerType::SetTemperatureOverride(None), + ), + }, + ]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} diff --git a/src/controller/cfg/determination/text_to_speech/mod.rs b/src/controller/cfg/determination/text_to_speech/mod.rs new file mode 100644 index 0000000..530be75 --- /dev/null +++ b/src/controller/cfg/determination/text_to_speech/mod.rs @@ -0,0 +1,158 @@ +#[cfg(test)] +mod tests; + +use crate::{ + controller::ControllerType, + entity::roomconfig::{TextToSpeechBotMessagesFlowType, TextToSpeechUserMessagesFlowType}, + strings, +}; + +use super::super::controller_type::ConfigTextToSpeechSettingRelatedControllerType; + +pub(super) fn determine( + text: &str, +) -> Result { + if let Some(remaining_text) = text.strip_prefix("bot-msgs-flow-type") { + let remaining_text = remaining_text.trim(); + + if !remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_getter_used_with_extra_text( + "bot-msgs-flow-type", + remaining_text, + ) + .to_owned(), + )); + } + + return Ok(ConfigTextToSpeechSettingRelatedControllerType::GetBotMessagesFlowType); + } + + if let Some(value_string) = text.strip_prefix("set-bot-msgs-flow-type") { + let value_string = value_string.trim().to_owned(); + + let value_choice = if value_string.is_empty() { + None + } else { + let value_choice = + TextToSpeechBotMessagesFlowType::from_str(&value_string.to_lowercase()); + + if value_choice.is_none() { + return Err(ControllerType::Error( + strings::cfg::configuration_value_unrecognized(&value_string).to_owned(), + )); + } + + value_choice + }; + + return Ok( + ConfigTextToSpeechSettingRelatedControllerType::SetBotMessagesFlowType(value_choice), + ); + } + + if let Some(remaining_text) = text.strip_prefix("user-msgs-flow-type") { + let remaining_text = remaining_text.trim(); + + if !remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_getter_used_with_extra_text( + "user-msgs-flow-type", + remaining_text, + ) + .to_owned(), + )); + } + + return Ok(ConfigTextToSpeechSettingRelatedControllerType::GetUserMessagesFlowType); + } + + if let Some(value_string) = text.strip_prefix("set-user-msgs-flow-type") { + let value_string = value_string.trim().to_owned(); + + let value_choice = if value_string.is_empty() { + None + } else { + let value_choice = + TextToSpeechUserMessagesFlowType::from_str(&value_string.to_lowercase()); + + if value_choice.is_none() { + return Err(ControllerType::Error( + strings::cfg::configuration_value_unrecognized(&value_string).to_owned(), + )); + } + + value_choice + }; + + return Ok( + ConfigTextToSpeechSettingRelatedControllerType::SetUserMessagesFlowType(value_choice), + ); + } + + if let Some(remaining_text) = text.strip_prefix("speed-override") { + let remaining_text = remaining_text.trim(); + + if !remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_getter_used_with_extra_text( + "speed-override", + remaining_text, + ) + .to_owned(), + )); + } + + return Ok(ConfigTextToSpeechSettingRelatedControllerType::GetSpeedOverride); + } + + if let Some(value_string) = text.strip_prefix("set-speed-override") { + let value_string = value_string.trim().to_owned(); + + if value_string.is_empty() { + return Ok(ConfigTextToSpeechSettingRelatedControllerType::SetSpeedOverride(None)); + } + + let value_f32 = value_string.parse::(); + + let Ok(value_f32) = value_f32 else { + return Err(ControllerType::Error( + strings::cfg::configuration_value_not_f32(&value_string).to_owned(), + )); + }; + + return Ok( + ConfigTextToSpeechSettingRelatedControllerType::SetSpeedOverride(Some(value_f32)), + ); + } + + if let Some(remaining_text) = text.strip_prefix("voice-override") { + let remaining_text = remaining_text.trim(); + + if !remaining_text.is_empty() { + return Err(ControllerType::Error( + strings::cfg::configuration_getter_used_with_extra_text( + "voice-override", + remaining_text, + ) + .to_owned(), + )); + } + + return Ok(ConfigTextToSpeechSettingRelatedControllerType::GetVoiceOverride); + } + + if let Some(value_string) = text.strip_prefix("set-voice-override") { + let value_string = value_string.trim().to_owned(); + + if value_string.is_empty() { + return Ok(ConfigTextToSpeechSettingRelatedControllerType::SetVoiceOverride(None)); + } + + return Ok( + ConfigTextToSpeechSettingRelatedControllerType::SetVoiceOverride(Some(value_string)), + ); + } + + Err(ControllerType::Unknown) +} diff --git a/src/controller/cfg/determination/text_to_speech/tests.rs b/src/controller/cfg/determination/text_to_speech/tests.rs new file mode 100644 index 0000000..c681764 --- /dev/null +++ b/src/controller/cfg/determination/text_to_speech/tests.rs @@ -0,0 +1,252 @@ +#[test] +fn determine_controller_other() { + use super::ConfigTextToSpeechSettingRelatedControllerType; + use super::ControllerType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![TestCase { + name: "Unknown", + input: "whatever", + expected: Err(ControllerType::Unknown), + }]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} + +#[test] +fn determine_controller_bot_msgs_flow_type() { + use super::ConfigTextToSpeechSettingRelatedControllerType; + use super::ControllerType; + use crate::entity::roomconfig::TextToSpeechBotMessagesFlowType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![ + TestCase { + name: "bot-msgs-flow-type getter ok", + input: "bot-msgs-flow-type", + expected: Ok(ConfigTextToSpeechSettingRelatedControllerType::GetBotMessagesFlowType), + }, + TestCase { + name: "bot-msgs-flow-type getter extra args", + input: "bot-msgs-flow-type some values here", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_getter_used_with_extra_text( + "bot-msgs-flow-type", + "some values here", + ), + )), + }, + TestCase { + name: "bot-msgs-flow-type setter", + input: "set-bot-msgs-flow-type only_for_voice", + expected: Ok( + ConfigTextToSpeechSettingRelatedControllerType::SetBotMessagesFlowType(Some( + TextToSpeechBotMessagesFlowType::OnlyForVoice, + )), + ), + }, + TestCase { + name: "bot-msgs-flow-type setter", + input: "set-bot-msgs-flow-type unknown-Value", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_value_unrecognized("unknown-Value"), + )), + }, + TestCase { + name: "bot-msgs-flow-type unsetter", + input: "set-bot-msgs-flow-type", + expected: Ok( + ConfigTextToSpeechSettingRelatedControllerType::SetBotMessagesFlowType(None), + ), + }, + ]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} + +#[test] +fn determine_controller_user_msgs_flow_type() { + use super::ConfigTextToSpeechSettingRelatedControllerType; + use super::ControllerType; + use crate::entity::roomconfig::TextToSpeechUserMessagesFlowType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![ + TestCase { + name: "user-msgs-flow-type getter ok", + input: "user-msgs-flow-type", + expected: Ok(ConfigTextToSpeechSettingRelatedControllerType::GetUserMessagesFlowType), + }, + TestCase { + name: "user-msgs-flow-type getter extra args", + input: "user-msgs-flow-type some values here", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_getter_used_with_extra_text( + "user-msgs-flow-type", + "some values here", + ), + )), + }, + TestCase { + name: "user-msgs-flow-type setter", + input: "set-user-msgs-flow-type on_demand", + expected: Ok( + ConfigTextToSpeechSettingRelatedControllerType::SetUserMessagesFlowType(Some( + TextToSpeechUserMessagesFlowType::OnDemand, + )), + ), + }, + TestCase { + name: "user-msgs-flow-type setter", + input: "set-user-msgs-flow-type unknown-Value", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_value_unrecognized("unknown-Value"), + )), + }, + TestCase { + name: "user-msgs-flow-type unsetter", + input: "set-user-msgs-flow-type", + expected: Ok( + ConfigTextToSpeechSettingRelatedControllerType::SetUserMessagesFlowType(None), + ), + }, + ]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} + +#[test] +fn determine_controller_speed_override() { + use super::ConfigTextToSpeechSettingRelatedControllerType; + use super::ControllerType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![ + TestCase { + name: "speed-override getter ok", + input: "speed-override", + expected: Ok(ConfigTextToSpeechSettingRelatedControllerType::GetSpeedOverride), + }, + TestCase { + name: "speed-override getter extra args", + input: "speed-override some values here", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_getter_used_with_extra_text( + "speed-override", + "some values here", + ), + )), + }, + TestCase { + name: "speed-override setter", + input: "set-speed-override 0.5", + expected: Ok( + ConfigTextToSpeechSettingRelatedControllerType::SetSpeedOverride(Some(0.5)), + ), + }, + TestCase { + name: "speed-override setter", + input: "set-speed-override unknown-Value", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_value_not_f32("unknown-Value"), + )), + }, + TestCase { + name: "speed-override unsetter", + input: "set-speed-override", + expected: Ok(ConfigTextToSpeechSettingRelatedControllerType::SetSpeedOverride(None)), + }, + ]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} + +#[test] +fn determine_controller_voice_override() { + use super::ConfigTextToSpeechSettingRelatedControllerType; + use super::ControllerType; + + struct TestCase { + name: &'static str, + input: &'static str, + expected: Result, + } + + let test_cases = vec![ + TestCase { + name: "voice-override getter ok", + input: "voice-override", + expected: Ok(ConfigTextToSpeechSettingRelatedControllerType::GetVoiceOverride), + }, + TestCase { + name: "voice-override getter extra args", + input: "voice-override some values here", + expected: Err(ControllerType::Error( + crate::strings::cfg::configuration_getter_used_with_extra_text( + "voice-override", + "some values here", + ), + )), + }, + TestCase { + name: "voice-override setter", + input: "set-voice-override alex", + expected: Ok( + ConfigTextToSpeechSettingRelatedControllerType::SetVoiceOverride(Some( + "alex".to_owned(), + )), + ), + }, + TestCase { + name: "voice-override setter preserves case", + input: "set-voice-override Alex", + expected: Ok( + ConfigTextToSpeechSettingRelatedControllerType::SetVoiceOverride(Some( + "Alex".to_owned(), + )), + ), + }, + TestCase { + name: "voice-override unsetter", + input: "set-voice-override", + expected: Ok(ConfigTextToSpeechSettingRelatedControllerType::SetVoiceOverride(None)), + }, + ]; + + for test_case in test_cases { + let result = super::determine(test_case.input); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} diff --git a/src/controller/cfg/dispatching/mod.rs b/src/controller/cfg/dispatching/mod.rs new file mode 100644 index 0000000..1e54e50 --- /dev/null +++ b/src/controller/cfg/dispatching/mod.rs @@ -0,0 +1,124 @@ +use crate::strings; +use crate::{entity::MessageContext, Bot}; +use mxlink::MessageResponseType; + +use super::controller_type::{ + ConfigControllerType, ConfigSettingRelatedControllerType, SettingsStorageSource, +}; + +mod speech_to_text; +mod text_generation; +mod text_to_speech; + +pub async fn dispatch_controller( + handler: &ConfigControllerType, + message_context: &MessageContext, + bot: &Bot, +) -> anyhow::Result<()> { + // Anyone can access Help and Status. + // Settings-related access checks are done in dispatch_config_related_handler(). + + match handler { + ConfigControllerType::Help => super::help::handle(bot, message_context).await, + ConfigControllerType::Status => super::status::handle(bot, message_context).await, + ConfigControllerType::SettingsRelated(config_type, config_related_handler) => { + dispatch_config_related_handler( + config_type, + config_related_handler, + message_context, + bot, + ) + .await + } + } +} + +async fn dispatch_config_related_handler( + config_type: &SettingsStorageSource, + handler: &ConfigSettingRelatedControllerType, + message_context: &MessageContext, + bot: &Bot, +) -> anyhow::Result<()> { + if let SettingsStorageSource::Global = config_type { + if !message_context.sender_can_manage_global_config()? { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + strings::global_config::no_permissions_to_administrate(), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + return Ok(()); + } + }; + + let room_settings = match config_type { + SettingsStorageSource::Room => &message_context.room_config().settings, + SettingsStorageSource::Global => &message_context.global_config().fallback_room_settings, + }; + + match handler { + ConfigSettingRelatedControllerType::GetHandler(purpose) => match config_type { + SettingsStorageSource::Room => { + super::room_config::handler::handle_get(bot, message_context, *purpose).await + } + SettingsStorageSource::Global => { + super::global_config::handler::handle_get(bot, message_context, *purpose).await + } + }, + ConfigSettingRelatedControllerType::SetHandler(purpose, agent_identifier) => { + match config_type { + SettingsStorageSource::Room => { + super::room_config::handler::handle_set( + bot, + bot.room_config_manager(), + message_context, + *purpose, + agent_identifier, + ) + .await + } + SettingsStorageSource::Global => { + super::global_config::handler::handle_set( + bot, + bot.global_config_manager(), + message_context, + *purpose, + agent_identifier, + ) + .await + } + } + } + ConfigSettingRelatedControllerType::TextGeneration(controller_type) => { + text_generation::dispatch( + controller_type, + message_context, + bot, + room_settings, + config_type, + ) + .await + } + ConfigSettingRelatedControllerType::SpeechToText(controller_type) => { + speech_to_text::dispatch( + controller_type, + message_context, + bot, + room_settings, + config_type, + ) + .await + } + ConfigSettingRelatedControllerType::TextToSpeech(controller_type) => { + text_to_speech::dispatch( + controller_type, + message_context, + bot, + room_settings, + config_type, + ) + .await + } + } +} diff --git a/src/controller/cfg/dispatching/speech_to_text.rs b/src/controller/cfg/dispatching/speech_to_text.rs new file mode 100644 index 0000000..9a2d408 --- /dev/null +++ b/src/controller/cfg/dispatching/speech_to_text.rs @@ -0,0 +1,78 @@ +use crate::entity::roomconfig::{RoomSettings, SpeechToTextFlowType}; +use crate::{entity::MessageContext, Bot}; + +use super::super::controller_type::{ + ConfigSpeechToTextSettingRelatedControllerType, SettingsStorageSource, +}; + +use super::super::common::generic_setting::handle_get as setting_get; + +use super::super::global_config::generic_setting::handle_set as global_setting_set; + +use super::super::room_config::generic_setting::handle_set as room_setting_set; + +pub(super) async fn dispatch( + handler: &ConfigSpeechToTextSettingRelatedControllerType, + message_context: &MessageContext, + bot: &Bot, + room_settings: &RoomSettings, + config_type: &SettingsStorageSource, +) -> anyhow::Result<()> { + match handler { + ConfigSpeechToTextSettingRelatedControllerType::GetFlowType => { + let value = &room_settings.speech_to_text.flow_type; + setting_get::(bot, message_context, value).await + } + ConfigSpeechToTextSettingRelatedControllerType::SetFlowType(value) => { + let value = value.to_owned(); + + let setter_callback = Box::new(move |room_settings: &mut RoomSettings| { + room_settings.speech_to_text.flow_type = value; + }); + + match config_type { + SettingsStorageSource::Room => { + room_setting_set::( + bot, + message_context, + &value, + setter_callback, + ) + .await + } + SettingsStorageSource::Global => { + global_setting_set::( + bot, + message_context, + &value, + setter_callback, + ) + .await + } + } + } + + ConfigSpeechToTextSettingRelatedControllerType::GetLanguage => { + let value = &room_settings.speech_to_text.language; + setting_get::(bot, message_context, value).await + } + ConfigSpeechToTextSettingRelatedControllerType::SetLanguage(value) => { + let value = value.to_owned(); + + let value_setter = value.clone(); + let setter_callback = Box::new(move |room_settings: &mut RoomSettings| { + room_settings.speech_to_text.language = value_setter; + }); + + match config_type { + SettingsStorageSource::Room => { + room_setting_set::(bot, message_context, &value, setter_callback).await + } + SettingsStorageSource::Global => { + global_setting_set::(bot, message_context, &value, setter_callback) + .await + } + } + } + } +} diff --git a/src/controller/cfg/dispatching/text_generation.rs b/src/controller/cfg/dispatching/text_generation.rs new file mode 100644 index 0000000..64ed659 --- /dev/null +++ b/src/controller/cfg/dispatching/text_generation.rs @@ -0,0 +1,155 @@ +use crate::entity::roomconfig::{ + RoomSettings, TextGenerationAutoUsage, TextGenerationPrefixRequirementType, +}; +use crate::{entity::MessageContext, Bot}; + +use super::super::controller_type::{ + ConfigTextGenerationSettingRelatedControllerType, SettingsStorageSource, +}; + +use super::super::common::generic_setting::handle_get as setting_get; + +use super::super::global_config::generic_setting::handle_set as global_setting_set; + +use super::super::room_config::generic_setting::handle_set as room_setting_set; + +pub(super) async fn dispatch( + handler: &ConfigTextGenerationSettingRelatedControllerType, + message_context: &MessageContext, + bot: &Bot, + room_settings: &RoomSettings, + config_type: &SettingsStorageSource, +) -> anyhow::Result<()> { + match handler { + ConfigTextGenerationSettingRelatedControllerType::GetContextManagementEnabled => { + let value = &room_settings.text_generation.context_management_enabled; + setting_get::(bot, message_context, value).await + } + ConfigTextGenerationSettingRelatedControllerType::SetContextManagementEnabled(value) => { + let value = value.to_owned(); + + let setter_callback = Box::new(move |room_settings: &mut RoomSettings| { + room_settings.text_generation.context_management_enabled = value; + }); + + match config_type { + SettingsStorageSource::Room => { + room_setting_set::(bot, message_context, &value, setter_callback).await + } + SettingsStorageSource::Global => { + global_setting_set::(bot, message_context, &value, setter_callback).await + } + } + } + + ConfigTextGenerationSettingRelatedControllerType::GetPrefixRequirementType => { + let value = &room_settings.text_generation.prefix_requirement_type; + setting_get::(bot, message_context, value).await + } + ConfigTextGenerationSettingRelatedControllerType::SetPrefixRequirementType(value) => { + let value = value.to_owned(); + + let setter_callback = Box::new(move |room_settings: &mut RoomSettings| { + room_settings.text_generation.prefix_requirement_type = value; + }); + + match config_type { + SettingsStorageSource::Room => { + room_setting_set::( + bot, + message_context, + &value, + setter_callback, + ) + .await + } + SettingsStorageSource::Global => { + global_setting_set::( + bot, + message_context, + &value, + setter_callback, + ) + .await + } + } + } + + ConfigTextGenerationSettingRelatedControllerType::GetAutoUsage => { + let value = &room_settings.text_generation.auto_usage; + setting_get::(bot, message_context, value).await + } + ConfigTextGenerationSettingRelatedControllerType::SetAutoUsage(value) => { + let value = value.to_owned(); + + let setter_callback = Box::new(move |room_settings: &mut RoomSettings| { + room_settings.text_generation.auto_usage = value; + }); + + match config_type { + SettingsStorageSource::Room => { + room_setting_set::( + bot, + message_context, + &value, + setter_callback, + ) + .await + } + SettingsStorageSource::Global => { + global_setting_set::( + bot, + message_context, + &value, + setter_callback, + ) + .await + } + } + } + + ConfigTextGenerationSettingRelatedControllerType::GetPromptOverride => { + let value = &room_settings.text_generation.prompt_override; + setting_get::(bot, message_context, value).await + } + ConfigTextGenerationSettingRelatedControllerType::SetPromptOverride(value) => { + let value = value.to_owned(); + + let value_setter = value.clone(); + let setter_callback = Box::new(move |room_settings: &mut RoomSettings| { + room_settings.text_generation.prompt_override = value_setter; + }); + + match config_type { + SettingsStorageSource::Room => { + room_setting_set::(bot, message_context, &value, setter_callback).await + } + SettingsStorageSource::Global => { + global_setting_set::(bot, message_context, &value, setter_callback) + .await + } + } + } + + ConfigTextGenerationSettingRelatedControllerType::GetTemperatureOverride => { + let value = &room_settings.text_generation.temperature_override; + setting_get::(bot, message_context, value).await + } + ConfigTextGenerationSettingRelatedControllerType::SetTemperatureOverride(value) => { + let value = value.to_owned(); + + let setter_callback = Box::new(move |room_settings: &mut RoomSettings| { + room_settings.text_generation.temperature_override = value; + }); + + match config_type { + SettingsStorageSource::Room => { + room_setting_set::(bot, message_context, &value, setter_callback).await + } + SettingsStorageSource::Global => { + global_setting_set::(bot, message_context, &value, setter_callback).await + } + } + } + } +} diff --git a/src/controller/cfg/dispatching/text_to_speech.rs b/src/controller/cfg/dispatching/text_to_speech.rs new file mode 100644 index 0000000..9a28e6b --- /dev/null +++ b/src/controller/cfg/dispatching/text_to_speech.rs @@ -0,0 +1,134 @@ +use crate::entity::roomconfig::{ + RoomSettings, TextToSpeechBotMessagesFlowType, TextToSpeechUserMessagesFlowType, +}; +use crate::{entity::MessageContext, Bot}; + +use super::super::controller_type::{ + ConfigTextToSpeechSettingRelatedControllerType, SettingsStorageSource, +}; + +use super::super::common::generic_setting::handle_get as setting_get; + +use super::super::global_config::generic_setting::handle_set as global_setting_set; + +use super::super::room_config::generic_setting::handle_set as room_setting_set; + +pub(super) async fn dispatch( + handler: &ConfigTextToSpeechSettingRelatedControllerType, + message_context: &MessageContext, + bot: &Bot, + room_settings: &RoomSettings, + config_type: &SettingsStorageSource, +) -> anyhow::Result<()> { + match handler { + ConfigTextToSpeechSettingRelatedControllerType::GetBotMessagesFlowType => { + let value = &room_settings.text_to_speech.bot_msgs_flow_type; + setting_get::(bot, message_context, value).await + } + ConfigTextToSpeechSettingRelatedControllerType::SetBotMessagesFlowType(value) => { + let value = value.to_owned(); + + let setter_callback = Box::new(move |room_settings: &mut RoomSettings| { + room_settings.text_to_speech.bot_msgs_flow_type = value; + }); + + match config_type { + SettingsStorageSource::Room => { + room_setting_set::( + bot, + message_context, + &value, + setter_callback, + ) + .await + } + SettingsStorageSource::Global => { + global_setting_set::( + bot, + message_context, + &value, + setter_callback, + ) + .await + } + } + } + + ConfigTextToSpeechSettingRelatedControllerType::GetUserMessagesFlowType => { + let value = &room_settings.text_to_speech.user_msgs_flow_type; + setting_get::(bot, message_context, value).await + } + ConfigTextToSpeechSettingRelatedControllerType::SetUserMessagesFlowType(value) => { + let value = value.to_owned(); + + let setter_callback = Box::new(move |room_settings: &mut RoomSettings| { + room_settings.text_to_speech.user_msgs_flow_type = value; + }); + + match config_type { + SettingsStorageSource::Room => { + room_setting_set::( + bot, + message_context, + &value, + setter_callback, + ) + .await + } + SettingsStorageSource::Global => { + global_setting_set::( + bot, + message_context, + &value, + setter_callback, + ) + .await + } + } + } + + ConfigTextToSpeechSettingRelatedControllerType::GetSpeedOverride => { + let value = &room_settings.text_to_speech.speed_override; + setting_get::(bot, message_context, value).await + } + ConfigTextToSpeechSettingRelatedControllerType::SetSpeedOverride(value) => { + let value = value.to_owned(); + + let setter_callback = Box::new(move |room_settings: &mut RoomSettings| { + room_settings.text_to_speech.speed_override = value; + }); + + match config_type { + SettingsStorageSource::Room => { + room_setting_set::(bot, message_context, &value, setter_callback).await + } + SettingsStorageSource::Global => { + global_setting_set::(bot, message_context, &value, setter_callback).await + } + } + } + + ConfigTextToSpeechSettingRelatedControllerType::GetVoiceOverride => { + let value = &room_settings.text_to_speech.voice_override; + setting_get::(bot, message_context, value).await + } + ConfigTextToSpeechSettingRelatedControllerType::SetVoiceOverride(value) => { + let value = value.to_owned(); + + let value_setter = value.clone(); + let setter_callback = Box::new(move |room_settings: &mut RoomSettings| { + room_settings.text_to_speech.voice_override = value_setter; + }); + + match config_type { + SettingsStorageSource::Room => { + room_setting_set::(bot, message_context, &value, setter_callback).await + } + SettingsStorageSource::Global => { + global_setting_set::(bot, message_context, &value, setter_callback) + .await + } + } + } + } +} diff --git a/src/controller/cfg/global_config/generic_setting.rs b/src/controller/cfg/global_config/generic_setting.rs new file mode 100644 index 0000000..90b255a --- /dev/null +++ b/src/controller/cfg/global_config/generic_setting.rs @@ -0,0 +1,38 @@ +use mxlink::MessageResponseType; + +use crate::entity::{roomconfig::RoomSettings, MessageContext}; +use crate::{strings, Bot}; + +pub async fn handle_set( + bot: &Bot, + message_context: &MessageContext, + value: &Option, + setter_callback: Box, +) -> anyhow::Result<()> +where + T: std::fmt::Display, +{ + let mut global_config = message_context.global_config().clone(); + setter_callback(&mut global_config.fallback_room_settings); + + bot.global_config_manager() + .lock() + .await + .persist(&global_config) + .await?; + + let message = match value { + Some(value) => strings::global_config::value_was_set_to(value), + None => strings::global_config::value_was_unset(), + }; + + bot.messaging() + .send_success_markdown_no_fail( + message_context.room(), + &message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/cfg/global_config/handler.rs b/src/controller/cfg/global_config/handler.rs new file mode 100644 index 0000000..e5b08dd --- /dev/null +++ b/src/controller/cfg/global_config/handler.rs @@ -0,0 +1,162 @@ +use mxlink::MessageResponseType; + +use crate::{ + agent::{AgentPurpose, PublicIdentifier}, + entity::{globalconfig::GlobalConfigurationManager, MessageContext}, + strings, Bot, +}; + +pub async fn handle_get( + bot: &Bot, + message_context: &MessageContext, + purpose: AgentPurpose, +) -> anyhow::Result<()> { + let agent_id = message_context + .global_config() + .fallback_room_settings + .handler + .get_by_purpose(purpose); + + let Some(agent_id) = agent_id else { + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + strings::global_config::global_config_lacks_specific_agent_for_purpose(purpose), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + }; + + let agent_identifier = match PublicIdentifier::from_str(agent_id.as_str()) { + Some(agent_identifier) => agent_identifier, + None => { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::invalid_id_generic(), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + }; + + let agent_exists = bot + .agent_manager() + .available_room_agents_by_room_config_context(message_context.room_config_context()) + .iter() + .any(|agent| *agent.identifier() == agent_identifier); + + if agent_exists { + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + strings::global_config::configured_to_use_agent_for_purpose( + &agent_identifier, + purpose, + ), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + } else { + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + strings::global_config::configures_agent_for_purpose_but_does_not_exist( + &agent_identifier, + purpose, + ), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + + Ok(()) +} + +pub async fn handle_set( + bot: &Bot, + global_config_manager: &tokio::sync::Mutex, + message_context: &MessageContext, + purpose: AgentPurpose, + agent_identifier: &Option, +) -> anyhow::Result<()> { + if let Some(agent_identifier) = agent_identifier { + let is_allowed = match &agent_identifier { + PublicIdentifier::Static(_) => true, + PublicIdentifier::DynamicGlobal(_) => true, + PublicIdentifier::DynamicRoomLocal(_) => false, + }; + + if !is_allowed { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::global_config::not_allowed_to_use_agent_in_global_config( + agent_identifier, + ), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + + let agent_exists = bot + .agent_manager() + .available_room_agents_by_room_config_context(message_context.room_config_context()) + .iter() + .any(|agent| agent.identifier() == agent_identifier); + + if !agent_exists { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::agent_with_given_identifier_missing(agent_identifier), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + } + + let agent_id = agent_identifier + .as_ref() + .map(|agent_identifier| agent_identifier.as_string()); + + let mut global_config = global_config_manager.lock().await.get_or_create().await?; + + global_config + .fallback_room_settings + .handler + .set_by_purpose(purpose, agent_id); + + global_config_manager + .lock() + .await + .persist(&global_config) + .await?; + + let message = match agent_identifier { + Some(agent_identifier) => { + strings::global_config::reconfigured_to_use_agent_for_purpose(agent_identifier, purpose) + } + None => strings::global_config::reconfigured_to_not_specify_agent_for_purpose(purpose), + }; + + bot.messaging() + .send_success_markdown_no_fail( + message_context.room(), + &message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/cfg/global_config/mod.rs b/src/controller/cfg/global_config/mod.rs new file mode 100644 index 0000000..da9ed03 --- /dev/null +++ b/src/controller/cfg/global_config/mod.rs @@ -0,0 +1,2 @@ +pub(super) mod generic_setting; +pub(super) mod handler; diff --git a/src/controller/cfg/help.rs b/src/controller/cfg/help.rs new file mode 100644 index 0000000..5a51ee3 --- /dev/null +++ b/src/controller/cfg/help.rs @@ -0,0 +1,547 @@ +use mxlink::MessageResponseType; + +use crate::{ + entity::{ + roomconfig::{ + SpeechToTextFlowType, TextGenerationAutoUsage, TextGenerationPrefixRequirementType, + TextToSpeechBotMessagesFlowType, TextToSpeechUserMessagesFlowType, + }, + MessageContext, + }, + strings, Bot, +}; + +pub async fn handle(bot: &Bot, message_context: &MessageContext) -> anyhow::Result<()> { + let mut message = String::new(); + message.push_str(&build_section_intro()); + message.push_str("\n\n"); + message.push_str("\n---\n"); + message.push_str(&build_section_status(bot.command_prefix())); + message.push_str("\n\n"); + message.push_str("\n---\n"); + message.push_str(&build_section_handlers(bot.command_prefix())); + + message.push_str("\n\n"); + message.push_str("\n---\n"); + message.push_str(&build_section_text_generation( + bot.command_prefix(), + bot.user_id().localpart(), + )); + + message.push_str("\n\n"); + message.push_str("\n---\n"); + message.push_str(&build_section_text_to_speech(bot.command_prefix())); + + message.push_str("\n\n"); + message.push_str("\n---\n"); + message.push_str(&build_section_speech_to_text(bot.command_prefix())); + + message.push_str("\n\n"); + message.push_str("\n---\n"); + message.push_str(&build_section_image_generation()); + + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} + +fn build_section_intro() -> String { + let mut message = String::new(); + + message.push_str(&format!("## {}", strings::help::cfg::heading())); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::intro_long()); + + message +} + +fn build_section_status(command_prefix: &str) -> String { + let mut message = String::new(); + + message.push_str(&format!("### {}", strings::help::cfg::status_heading())); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::status_intro(command_prefix)); + + message +} + +fn build_section_handlers(command_prefix: &str) -> String { + let mut message = String::new(); + + message.push_str(&format!("### {}", strings::help::cfg::handlers_heading())); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::handlers_intro_common()); + message.push('\n'); + message.push_str(&strings::help::cfg::handlers_intro_purposes()); + message.push_str("\n\n"); + + message.push_str(strings::help::available_commands_intro()); + message.push('\n'); + + message.push_str(&format!( + "- {}", + strings::help::cfg::handlers_show(command_prefix) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + strings::help::cfg::handlers_set(command_prefix) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + strings::help::cfg::handlers_unset(command_prefix) + )); + + message +} + +fn build_section_text_generation(command_prefix: &str, bot_username: &str) -> String { + let mut message = String::new(); + + message.push_str(&format!( + "### {}", + strings::help::cfg::text_generation_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::text_generation_common()); + message.push_str("\n\n"); + + // Prefix requirement type + + message.push_str(&format!( + "#### {}", + strings::help::cfg::text_generation_prefix_requirement_type_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::text_generation_prefix_requirement_type_intro()); + message.push('\n'); + message.push_str( + &strings::help::cfg::the_following_configuration_values_are_recognized( + TextGenerationPrefixRequirementType::choices(), + ), + ); + message.push_str("\n\n"); + message + .push_str(&strings::help::cfg::text_generation_prefix_requirement_type_outro(bot_username)); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_show( + command_prefix, + "text-generation prefix-requirement-type" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_set( + command_prefix, + "text-generation set-prefix-requirement-type VALUE" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_unset( + command_prefix, + "text-generation set-prefix-requirement-type" + ) + )); + message.push_str("\n\n"); + + // Auto Usage + + message.push_str(&format!( + "#### {}", + strings::help::cfg::text_generation_auto_usage_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::text_generation_auto_usage_intro()); + message.push('\n'); + message.push_str( + &strings::help::cfg::the_following_configuration_values_are_recognized( + TextGenerationAutoUsage::choices(), + ), + ); + message.push_str("\n\n"); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_show(command_prefix, "text-generation auto-usage") + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_set( + command_prefix, + "text-generation set-auto-usage VALUE" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_unset( + command_prefix, + "text-generation set-auto-usage" + ) + )); + message.push_str("\n\n"); + + // Context Management + + message.push_str(&format!( + "#### {}", + strings::help::cfg::text_generation_context_management_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::text_generation_context_management_intro()); + message.push('\n'); + message.push_str( + &strings::help::cfg::the_following_configuration_values_are_recognized(vec![true, false]), + ); + message.push_str("\n\n"); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_show( + command_prefix, + "text-generation context-management-enabled" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_set( + command_prefix, + "text-generation set-context-management-enabled VALUE" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_unset( + command_prefix, + "text-generation set-context-management-enabled" + ) + )); + message.push_str("\n\n"); + + // Prompt override + + message.push_str(&format!( + "#### {}", + strings::help::cfg::text_generation_prompt_override_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::text_generation_prompt_override_intro()); + message.push_str("\n\n"); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_show( + command_prefix, + "text-generation prompt-override" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_set( + command_prefix, + "text-generation set-prompt-override VALUE" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_unset( + command_prefix, + "text-generation set-prompt-override" + ) + )); + message.push_str("\n\n"); + + // Speed override + + message.push_str(&format!( + "#### {}", + strings::help::cfg::text_generation_temperature_override_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::text_generation_temperature_override_intro()); + message.push_str("\n\n"); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_show( + command_prefix, + "text-generation temperature-override" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_set( + command_prefix, + "text-generation set-temperature-override VALUE" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_unset( + command_prefix, + "text-generation set-temperature-override" + ) + )); + + message +} + +fn build_section_speech_to_text(command_prefix: &str) -> String { + let mut message = String::new(); + + message.push_str(&format!( + "### {}", + strings::help::cfg::speech_to_text_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::speech_to_text_common()); + message.push_str("\n\n"); + + // Flow Type + + message.push_str(&format!( + "#### {}", + strings::help::cfg::speech_to_text_flow_type_heading() + )); + message.push_str("\n\n"); + message.push_str(strings::help::cfg::speech_to_text_flow_type_intro()); + message.push('\n'); + message.push_str( + &strings::help::cfg::the_following_configuration_values_are_recognized( + SpeechToTextFlowType::choices(), + ), + ); + message.push_str("\n\n"); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_show(command_prefix, "speech-to-text flow-type") + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_set( + command_prefix, + "speech-to-text set-flow-type VALUE" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_unset(command_prefix, "speech-to-text set-flow-type") + )); + message.push_str("\n\n"); + + // Language + + message.push_str(&format!( + "#### {}", + strings::help::cfg::speech_to_text_language_heading() + )); + message.push_str("\n\n"); + message.push_str(strings::help::cfg::speech_to_text_language_intro()); + message.push_str("\n\n"); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_show(command_prefix, "speech-to-text language") + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_set( + command_prefix, + "speech-to-text set-language VALUE" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_unset(command_prefix, "speech-to-text set-language") + )); + message.push_str("\n\n"); + + message +} + +fn build_section_text_to_speech(command_prefix: &str) -> String { + let mut message = String::new(); + + message.push_str(&format!( + "### {}", + strings::help::cfg::text_to_speech_heading() + )); + message.push_str("\n\n"); + message.push_str(strings::help::cfg::text_to_speech_common()); + message.push_str("\n\n"); + + // Bot Messages Flow Type + + message.push_str(&format!( + "#### {}", + strings::help::cfg::text_to_speech_bot_msgs_flow_type_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::text_to_speech_bot_msgs_flow_type_intro()); + message.push('\n'); + message.push_str( + &strings::help::cfg::the_following_configuration_values_are_recognized( + TextToSpeechBotMessagesFlowType::choices(), + ), + ); + message.push_str("\n\n"); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_show( + command_prefix, + "text-to-speech bot-msgs-flow-type" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_set( + command_prefix, + "text-to-speech set-bot-msgs-flow-type VALUE" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_unset( + command_prefix, + "text-to-speech set-bot-msgs-flow-type" + ) + )); + message.push_str("\n\n"); + + // User Messages Flow Type + + message.push_str(&format!( + "#### {}", + strings::help::cfg::text_to_speech_user_msgs_flow_type_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::text_to_speech_user_msgs_flow_type_intro()); + message.push('\n'); + message.push_str( + &strings::help::cfg::the_following_configuration_values_are_recognized( + TextToSpeechUserMessagesFlowType::choices(), + ), + ); + message.push_str("\n\n"); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_show( + command_prefix, + "text-to-speech user-msgs-flow-type" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_set( + command_prefix, + "text-to-speech set-user-msgs-flow-type VALUE" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_unset( + command_prefix, + "text-to-speech set-user-msgs-flow-type" + ) + )); + message.push_str("\n\n"); + + // Speed override + + message.push_str(&format!( + "#### {}", + strings::help::cfg::text_to_speech_speed_override_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::text_to_speech_speed_override_intro()); + message.push_str("\n\n"); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_show(command_prefix, "text-to-speech speed-override") + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_set( + command_prefix, + "text-to-speech set-speed-override VALUE" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_unset( + command_prefix, + "text-to-speech set-speed-override" + ) + )); + message.push_str("\n\n"); + + // Voice override + + message.push_str(&format!( + "#### {}", + strings::help::cfg::text_to_speech_voice_override_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::help::cfg::text_to_speech_voice_override_intro()); + message.push_str("\n\n"); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_show(command_prefix, "text-to-speech voice-override") + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_set( + command_prefix, + "text-to-speech set-voice-override VALUE" + ) + )); + message.push('\n'); + message.push_str(&format!( + "- {}", + &strings::help::cfg::current_setting_unset( + command_prefix, + "text-to-speech set-voice-override" + ) + )); + message.push_str("\n\n"); + + message +} + +fn build_section_image_generation() -> String { + let mut message = String::new(); + + message.push_str(&format!( + "### {}", + strings::help::cfg::image_generation_heading() + )); + message.push_str("\n\n"); + message.push_str(strings::help::cfg::image_generation_common()); + + message +} diff --git a/src/controller/cfg/mod.rs b/src/controller/cfg/mod.rs new file mode 100644 index 0000000..a1e1350 --- /dev/null +++ b/src/controller/cfg/mod.rs @@ -0,0 +1,12 @@ +mod common; +mod controller_type; +mod determination; +mod dispatching; +mod global_config; +mod help; +mod room_config; +mod status; + +pub use controller_type::ConfigControllerType; +pub use determination::determine_controller; +pub use dispatching::dispatch_controller; diff --git a/src/controller/cfg/room_config/generic_setting.rs b/src/controller/cfg/room_config/generic_setting.rs new file mode 100644 index 0000000..a9e49b3 --- /dev/null +++ b/src/controller/cfg/room_config/generic_setting.rs @@ -0,0 +1,38 @@ +use mxlink::MessageResponseType; + +use crate::entity::{roomconfig::RoomSettings, MessageContext}; +use crate::{strings, Bot}; + +pub async fn handle_set( + bot: &Bot, + message_context: &MessageContext, + value: &Option, + setter_callback: Box, +) -> anyhow::Result<()> +where + T: std::fmt::Display, +{ + let mut room_config = message_context.room_config().clone(); + setter_callback(&mut room_config.settings); + + bot.room_config_manager() + .lock() + .await + .persist(message_context.room(), &room_config) + .await?; + + let message = match value { + Some(value) => strings::room_config::value_was_set_to(value), + None => strings::room_config::value_was_unset(), + }; + + bot.messaging() + .send_success_markdown_no_fail( + message_context.room(), + &message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/cfg/room_config/handler.rs b/src/controller/cfg/room_config/handler.rs new file mode 100644 index 0000000..ab869ed --- /dev/null +++ b/src/controller/cfg/room_config/handler.rs @@ -0,0 +1,141 @@ +use mxlink::MessageResponseType; + +use crate::{ + agent::{AgentPurpose, PublicIdentifier}, + entity::MessageContext, + strings, Bot, +}; + +use crate::entity::roomconfig::RoomConfigurationManager; + +pub async fn handle_get( + bot: &Bot, + message_context: &MessageContext, + purpose: AgentPurpose, +) -> anyhow::Result<()> { + let agent_id = message_context + .room_config() + .settings + .handler + .get_by_purpose(purpose); + + let Some(agent_id) = agent_id else { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::room_config::room_not_configured_with_specific_agent_for_purpose(purpose), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + }; + + let Some(agent_identifier) = PublicIdentifier::from_str(agent_id.as_str()) else { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::invalid_id_generic(), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + }; + + let agent_exists = bot + .agent_manager() + .available_room_agents_by_room_config_context(message_context.room_config_context()) + .iter() + .any(|agent| *agent.identifier() == agent_identifier); + + if agent_exists { + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + strings::room_config::configured_to_use_agent_for_purpose( + &agent_identifier, + purpose, + ), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + } else { + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + strings::room_config::configures_agent_for_purpose_but_does_not_exist( + &agent_identifier, + purpose, + ), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + + Ok(()) +} + +pub async fn handle_set( + bot: &Bot, + room_config_manager: &tokio::sync::Mutex, + message_context: &MessageContext, + purpose: AgentPurpose, + agent_identifier: &Option, +) -> anyhow::Result<()> { + if let Some(agent_identifier) = agent_identifier { + let agent_exists = bot + .agent_manager() + .available_room_agents_by_room_config_context(message_context.room_config_context()) + .iter() + .any(|agent| agent.identifier() == agent_identifier); + + if !agent_exists { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::agent_with_given_identifier_missing(agent_identifier), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + } + + let mut new_room_config = message_context.room_config().clone(); + + let agent_id = agent_identifier + .as_ref() + .map(|agent_identifier| agent_identifier.as_string()); + + new_room_config + .settings + .handler + .set_by_purpose(purpose, agent_id); + + room_config_manager + .lock() + .await + .persist(message_context.room(), &new_room_config) + .await?; + + let message = match agent_identifier { + Some(agent_identifier) => { + strings::room_config::reconfigured_to_use_agent_for_purpose(agent_identifier, purpose) + } + None => strings::room_config::reconfigured_to_not_specify_agent_for_purpose(purpose), + }; + + bot.messaging() + .send_success_markdown_no_fail( + message_context.room(), + &message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/cfg/room_config/mod.rs b/src/controller/cfg/room_config/mod.rs new file mode 100644 index 0000000..da9ed03 --- /dev/null +++ b/src/controller/cfg/room_config/mod.rs @@ -0,0 +1,2 @@ +pub(super) mod generic_setting; +pub(super) mod handler; diff --git a/src/controller/cfg/status.rs b/src/controller/cfg/status.rs new file mode 100644 index 0000000..cb354fe --- /dev/null +++ b/src/controller/cfg/status.rs @@ -0,0 +1,759 @@ +use mxlink::MessageResponseType; + +use crate::{ + agent::{ + utils::get_effective_agent_for_purpose, AgentInstance, AgentPurpose, ControllerTrait, + Manager as AgentManager, PublicIdentifier, + }, + entity::{ + roomconfig::{RoomConfig, RoomSettingsHandler}, + MessageContext, RoomConfigContext, + }, + strings, Bot, +}; + +pub async fn handle(bot: &Bot, message_context: &MessageContext) -> anyhow::Result<()> { + let mut message = String::new(); + + let agent_manager = bot.agent_manager(); + + let agents = agent_manager + .available_room_agents_by_room_config_context(message_context.room_config_context()); + + // Room handlers + message.push_str(&generate_room_handlers_section( + &message_context.room_config().settings.handler, + &agents, + bot.command_prefix(), + )); + message.push_str("\n\n"); + + // Global handlers + message.push_str(&generate_global_config_handlers_section( + &message_context + .global_config() + .fallback_room_settings + .handler, + &agents, + bot.command_prefix(), + )); + message.push_str("\n\n"); + + // Agents + message.push_str(&generate_room_agents_section( + message_context.room_config(), + &agents, + bot.command_prefix(), + )); + message.push_str("\n\n"); + + // Text Generation + message.push_str( + &generate_text_generation_section(agent_manager, message_context.room_config_context()) + .await, + ); + message.push_str("\n\n"); + + // Text-to-Speech + message.push_str( + &generate_text_to_speech_section(agent_manager, message_context.room_config_context()) + .await, + ); + message.push_str("\n\n"); + + // Speech-to-Text + message.push_str( + &generate_speech_to_text_section(agent_manager, message_context.room_config_context()) + .await, + ); + message.push_str("\n\n"); + + // Image Generation + message.push_str( + &generate_image_generation_section(agent_manager, message_context.room_config_context()) + .await, + ); + message.push_str("\n\n"); + + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} + +fn generate_room_handlers_section( + handler_config: &RoomSettingsHandler, + agents: &[AgentInstance], + command_prefix: &str, +) -> String { + let mut message = String::new(); + + message.push_str( + format!( + "## {}\n", + strings::cfg::status_room_config_handlers_heading() + ) + .as_str(), + ); + message.push_str(strings::cfg::status_room_config_handlers_intro()); + message.push_str("\n\n"); + + for purpose in AgentPurpose::choices() { + message.push_str(&generate_handler_line_for_purpose( + purpose, + handler_config, + agents, + false, + )); + message.push('\n'); + } + + message.push_str("\n\n"); + + message.push_str(strings::cfg::status_room_config_handlers_outro(command_prefix).as_str()); + + message +} + +fn generate_global_config_handlers_section( + handler_config: &RoomSettingsHandler, + agents: &[AgentInstance], + command_prefix: &str, +) -> String { + let mut message = String::new(); + + message.push_str( + format!( + "## {}\n", + strings::cfg::status_global_config_handlers_heading() + ) + .as_str(), + ); + message.push_str(strings::cfg::status_global_config_handlers_intro()); + message.push_str("\n\n"); + + for purpose in AgentPurpose::choices() { + message.push_str(&generate_handler_line_for_purpose( + purpose, + handler_config, + agents, + true, + )); + message.push('\n'); + } + + message.push_str("\n\n"); + + message.push_str(strings::cfg::status_global_config_handlers_outro(command_prefix).as_str()); + + message +} + +fn generate_handler_line_for_purpose( + purpose: &AgentPurpose, + handler_config: &RoomSettingsHandler, + agents: &[AgentInstance], + is_for_global_config: bool, +) -> String { + let agent_id = handler_config.get_by_purpose(*purpose); + + match agent_id { + Some(agent_id) => { + let agent = agents + .iter() + .find(|a| *a.identifier().as_string() == agent_id); + + strings::cfg::status_handler_line_agent_found(purpose, &agent_id, agent) + } + None => match purpose { + AgentPurpose::CatchAll => { + if is_for_global_config { + return strings::cfg::status_handler_line_catch_all_agent_not_set_globally(); + } + + strings::cfg::status_handler_line_catch_all_agent_not_set_in_room_default_to_global( + ) + } + _ => { + if is_for_global_config { + return strings::cfg::status_handler_line_non_catch_all_agent_not_set_globally( + purpose, + ); + } + + strings::cfg::status_handler_line_non_catch_all_agent_not_set_in_room_default_to_global( + purpose, + ) + } + }, + } +} + +fn generate_room_agents_section( + room_config: &RoomConfig, + agents: &Vec, + command_prefix: &str, +) -> String { + let mut message = String::new(); + + message.push_str(format!("## {}\n", strings::cfg::status_room_agents_heading()).as_str()); + + if room_config.agents.is_empty() { + message.push_str(strings::cfg::status_room_agents_empty()); + + message.push_str("\n\n"); + + message.push_str(&strings::help::learn_more_send_a_command( + command_prefix, + "agent", + )); + + return message; + } + + message.push_str(strings::cfg::status_room_agents_intro()); + message.push_str("\n\n"); + + for agent in agents { + let PublicIdentifier::DynamicRoomLocal(_) = agent.identifier() else { + continue; + }; + + message.push_str(&format!( + "- `{}` ({})\n", + agent.identifier(), + strings::agent::create_support_badges_text(agent.controller()), + )); + } + + message.push_str("\n\n"); + + message.push_str(strings::cfg::status_room_agents_outro(command_prefix).as_str()); + + message +} + +async fn generate_text_generation_section( + agent_manager: &AgentManager, + room_config_context: &RoomConfigContext, +) -> String { + let mut message = String::new(); + + message.push_str(format!("## {}\n", strings::cfg::status_text_generation_heading()).as_str()); + + let text_generation_agent_info = get_effective_agent_for_purpose( + agent_manager, + room_config_context, + AgentPurpose::TextGeneration, + ) + .await; + + // Effective agent + + let text_generation_agent = match text_generation_agent_info { + Ok(text_generation_agent_info) => { + message.push_str(&strings::cfg::status_entry_effective_agent( + text_generation_agent_info.instance.identifier(), + text_generation_agent_info.configuration_source, + )); + + Some(text_generation_agent_info.instance) + } + Err(err) => { + tracing::error!(?err, "Failed to determine text-generation agent"); + message.push_str(&strings::cfg::status_entry_effective_agent_error()); + None + } + }; + + // Prefix requirement type + + let effective_prefix_requirement_type = + room_config_context.text_generation_prefix_requirement_type(); + let room_config_prefix_requirement_type = room_config_context + .room_config + .settings + .text_generation + .prefix_requirement_type; + let global_config_prefix_requirement_type = room_config_context + .global_config + .fallback_room_settings + .text_generation + .prefix_requirement_type; + + let prefix_requirement_type_set_where = if room_config_prefix_requirement_type.is_some() { + strings::cfg::status_badge_set_in_room_config() + } else if global_config_prefix_requirement_type.is_some() { + strings::cfg::status_badge_set_in_global_config() + } else { + strings::cfg::status_badge_using_hardcoded_default() + }; + + message.push_str( + &strings::cfg::status_text_generation_entry_prefix_requirement_type( + effective_prefix_requirement_type, + prefix_requirement_type_set_where, + ), + ); + + // Auto usage + + let effective_auto_usage = room_config_context.auto_text_generation_usage(); + let room_config_auto_usage = room_config_context + .room_config + .settings + .text_generation + .auto_usage; + let global_config_auto_usage = room_config_context + .global_config + .fallback_room_settings + .text_generation + .auto_usage; + + let auto_usage_set_where = if room_config_auto_usage.is_some() { + strings::cfg::status_badge_set_in_room_config() + } else if global_config_auto_usage.is_some() { + strings::cfg::status_badge_set_in_global_config() + } else { + strings::cfg::status_badge_using_hardcoded_default() + }; + + message.push_str(&strings::cfg::status_text_generation_entry_auto_usage( + effective_auto_usage, + auto_usage_set_where, + )); + + // Context Management + + let effective_context_management = + room_config_context.text_generation_context_management_enabled(); + let room_config_context_management = room_config_context + .room_config + .settings + .text_generation + .context_management_enabled; + let global_config_context_management = room_config_context + .global_config + .fallback_room_settings + .text_generation + .context_management_enabled; + + let context_management_set_where = if room_config_context_management.is_some() { + strings::cfg::status_badge_set_in_room_config() + } else if global_config_context_management.is_some() { + strings::cfg::status_badge_set_in_global_config() + } else { + strings::cfg::status_badge_using_hardcoded_default() + }; + + message.push_str( + &strings::cfg::status_text_generation_entry_context_management( + effective_context_management, + context_management_set_where, + ), + ); + + // Prompt override + + let text_agent_prompt = if let Some(text_generation_agent) = &text_generation_agent { + text_generation_agent.controller().text_generation_prompt() + } else { + None + }; + + let room_config_prompt_override = room_config_context + .room_config + .settings + .text_generation + .prompt_override + .clone(); + let global_config_prompt_override = room_config_context + .global_config + .fallback_room_settings + .text_generation + .prompt_override + .clone(); + + let (prompt, prompt_set_where) = + if let Some(room_config_prompt_override) = room_config_prompt_override { + ( + room_config_prompt_override, + strings::cfg::status_badge_set_in_room_config(), + ) + } else if let Some(global_config_prompt_override) = global_config_prompt_override { + ( + global_config_prompt_override, + strings::cfg::status_badge_set_in_global_config(), + ) + } else { + ( + text_agent_prompt.unwrap_or("".to_owned()), + strings::cfg::status_badge_set_in_agent_config(), + ) + }; + + message.push_str(&strings::cfg::status_text_generation_entry_prompt( + &prompt, + prompt_set_where, + )); + + // Temperature + + let text_agent_temperature = if let Some(text_generation_agent) = &text_generation_agent { + text_generation_agent + .controller() + .text_generation_temperature() + } else { + None + }; + + let room_config_temperature_override = room_config_context + .room_config + .settings + .text_generation + .temperature_override; + let global_config_temperature_override = room_config_context + .global_config + .fallback_room_settings + .text_generation + .temperature_override; + + let (effective_temperature, set_where) = if let Some(room_config_temperature_override) = + room_config_temperature_override + { + ( + Some(room_config_temperature_override), + strings::cfg::status_badge_set_in_room_config(), + ) + } else if let Some(global_config_temperature_override) = global_config_temperature_override { + ( + Some(global_config_temperature_override), + strings::cfg::status_badge_set_in_global_config(), + ) + } else { + ( + text_agent_temperature, + strings::cfg::status_badge_set_in_agent_config(), + ) + }; + + message.push_str(&strings::cfg::status_text_generation_entry_temperature( + effective_temperature, + set_where, + )); + + message +} + +async fn generate_speech_to_text_section( + agent_manager: &AgentManager, + room_config_context: &RoomConfigContext, +) -> String { + let mut message = String::new(); + + message.push_str(format!("## {}\n", strings::cfg::status_speech_to_text_heading()).as_str()); + + let speech_to_text_agent_info = get_effective_agent_for_purpose( + agent_manager, + room_config_context, + AgentPurpose::SpeechToText, + ) + .await; + + // Effective agent + + match speech_to_text_agent_info { + Ok(speech_to_text_agent_info) => { + message.push_str(&strings::cfg::status_entry_effective_agent( + speech_to_text_agent_info.instance.identifier(), + speech_to_text_agent_info.configuration_source, + )); + } + Err(err) => { + tracing::error!(?err, "Failed to determine speech-to-text agent"); + message.push_str(&strings::cfg::status_entry_effective_agent_error()); + } + }; + + // Flow type + + let effective_flow_type = room_config_context.speech_to_text_flow_type(); + let room_config_flow_type = room_config_context + .room_config + .settings + .speech_to_text + .flow_type; + let global_config_flow_type = room_config_context + .global_config + .fallback_room_settings + .speech_to_text + .flow_type; + + let flow_type_set_where = if room_config_flow_type.is_some() { + strings::cfg::status_badge_set_in_room_config() + } else if global_config_flow_type.is_some() { + strings::cfg::status_badge_set_in_global_config() + } else { + strings::cfg::status_badge_using_hardcoded_default() + }; + + message.push_str(&strings::cfg::status_speech_to_text_entry_flow_type( + effective_flow_type, + flow_type_set_where, + )); + + // Language + + let effective_language = room_config_context.speech_to_text_language(); + let room_config_language = &room_config_context + .room_config + .settings + .speech_to_text + .language; + let global_config_language = &room_config_context + .global_config + .fallback_room_settings + .speech_to_text + .language; + + let language_set_where = if room_config_language.is_some() { + strings::cfg::status_badge_set_in_room_config() + } else if global_config_language.is_some() { + strings::cfg::status_badge_set_in_global_config() + } else { + strings::cfg::status_badge_using_hardcoded_default() + }; + + message.push_str(&strings::cfg::status_speech_to_text_entry_language( + effective_language, + language_set_where, + )); + + message +} + +async fn generate_text_to_speech_section( + agent_manager: &AgentManager, + room_config_context: &RoomConfigContext, +) -> String { + let mut message = String::new(); + + message.push_str(format!("## {}\n", strings::cfg::status_text_to_speech_heading()).as_str()); + + let text_to_speech_agent_info = get_effective_agent_for_purpose( + agent_manager, + room_config_context, + AgentPurpose::TextToSpeech, + ) + .await; + + // Effective agent + + let text_to_speech_agent = match text_to_speech_agent_info { + Ok(text_to_speech_agent_info) => { + message.push_str(&strings::cfg::status_entry_effective_agent( + text_to_speech_agent_info.instance.identifier(), + text_to_speech_agent_info.configuration_source, + )); + Some(text_to_speech_agent_info.instance) + } + Err(err) => { + tracing::error!(?err, "Failed to determine text-to-speech agent"); + message.push_str(&strings::cfg::status_entry_effective_agent_error()); + None + } + }; + + // Bot messages flow type + + let effective_bot_messages_tts_flow_type = + room_config_context.text_to_speech_bot_messages_flow_type(); + let room_config_bot_messages_tts_flow_type = room_config_context + .room_config + .settings + .text_to_speech + .bot_msgs_flow_type; + let global_config_bot_messages_tts_flow_type = room_config_context + .global_config + .fallback_room_settings + .text_to_speech + .bot_msgs_flow_type; + + let bot_messages_tts_flow_type_set_where = if room_config_bot_messages_tts_flow_type.is_some() { + strings::cfg::status_badge_set_in_room_config() + } else if global_config_bot_messages_tts_flow_type.is_some() { + strings::cfg::status_badge_set_in_global_config() + } else { + strings::cfg::status_badge_using_hardcoded_default() + }; + + message.push_str( + &strings::cfg::status_text_to_speech_entry_bot_msgs_flow_type( + effective_bot_messages_tts_flow_type, + bot_messages_tts_flow_type_set_where, + ), + ); + + // User messages flow type + + let effective_user_messages_tts_flow_type = + room_config_context.text_to_speech_user_messages_flow_type(); + let room_config_user_messages_tts_flow_type = room_config_context + .room_config + .settings + .text_to_speech + .user_msgs_flow_type; + let global_config_user_messages_tts_flow_type = room_config_context + .global_config + .fallback_room_settings + .text_to_speech + .user_msgs_flow_type; + + let user_messages_tts_flow_type_set_where = if room_config_user_messages_tts_flow_type.is_some() + { + strings::cfg::status_badge_set_in_room_config() + } else if global_config_user_messages_tts_flow_type.is_some() { + strings::cfg::status_badge_set_in_global_config() + } else { + strings::cfg::status_badge_using_hardcoded_default() + }; + + message.push_str( + &strings::cfg::status_text_to_speech_entry_user_msgs_flow_type( + effective_user_messages_tts_flow_type, + user_messages_tts_flow_type_set_where, + ), + ); + + // Speed + + let agent_speed = if let Some(text_to_speech_agent) = &text_to_speech_agent { + text_to_speech_agent.controller().text_to_speech_speed() + } else { + None + }; + + let room_config_speed_override = room_config_context + .room_config + .settings + .text_to_speech + .speed_override; + let global_config_speed_override = room_config_context + .global_config + .fallback_room_settings + .text_to_speech + .speed_override; + + let (effective_speed, set_where) = + if let Some(room_config_speed_override) = room_config_speed_override { + ( + Some(room_config_speed_override), + strings::cfg::status_badge_set_in_room_config(), + ) + } else if let Some(global_config_speed_override) = global_config_speed_override { + ( + Some(global_config_speed_override), + strings::cfg::status_badge_set_in_global_config(), + ) + } else if agent_speed.is_some() { + ( + agent_speed, + strings::cfg::status_badge_set_in_agent_config(), + ) + } else { + (None, strings::cfg::status_badge_using_hardcoded_default()) + }; + + message.push_str(&strings::cfg::status_text_to_speech_entry_speed( + effective_speed, + set_where, + )); + + // Voice + + let agent_voice = if let Some(text_to_speech_agent) = &text_to_speech_agent { + text_to_speech_agent.controller().text_to_speech_voice() + } else { + None + }; + + let room_config_voice_override = room_config_context + .room_config + .settings + .text_to_speech + .voice_override + .clone(); + let global_config_voice_override = room_config_context + .global_config + .fallback_room_settings + .text_to_speech + .voice_override + .clone(); + + let (effective_voice, set_where) = + if let Some(room_config_voice_override) = room_config_voice_override { + ( + Some(room_config_voice_override), + strings::cfg::status_badge_set_in_room_config(), + ) + } else if let Some(global_config_voice_override) = global_config_voice_override { + ( + Some(global_config_voice_override), + strings::cfg::status_badge_set_in_global_config(), + ) + } else if agent_voice.is_some() { + ( + agent_voice, + strings::cfg::status_badge_set_in_agent_config(), + ) + } else { + (None, strings::cfg::status_badge_using_hardcoded_default()) + }; + + message.push_str(&strings::cfg::status_text_to_speech_entry_voice( + effective_voice, + set_where, + )); + + message +} + +async fn generate_image_generation_section( + agent_manager: &AgentManager, + room_config_context: &RoomConfigContext, +) -> String { + let mut message = String::new(); + + message.push_str(format!("## {}\n", strings::cfg::status_image_generation_heading()).as_str()); + + let image_generation_agent_info = get_effective_agent_for_purpose( + agent_manager, + room_config_context, + AgentPurpose::ImageGeneration, + ) + .await; + + // Effective agent + + let _image_generation_agent = match image_generation_agent_info { + Ok(image_generation_agent_info) => { + message.push_str(&strings::cfg::status_entry_effective_agent( + image_generation_agent_info.instance.identifier(), + image_generation_agent_info.configuration_source, + )); + Some(image_generation_agent_info.instance) + } + Err(err) => { + tracing::error!(?err, "Failed to determine image generation agent"); + message.push_str(&strings::cfg::status_entry_effective_agent_error()); + None + } + }; + + message +} diff --git a/src/controller/chat_completion/mod.rs b/src/controller/chat_completion/mod.rs new file mode 100644 index 0000000..171c093 --- /dev/null +++ b/src/controller/chat_completion/mod.rs @@ -0,0 +1,599 @@ +use mxlink::matrix_sdk::ruma::events::room::message::AudioMessageEventContent; +use mxlink::matrix_sdk::ruma::OwnedEventId; +use mxlink::{MatrixLink, MessageResponseType}; + +use tracing::Instrument; + +use crate::agent::provider::{SpeechToTextParams, TextGenerationParams}; +use crate::agent::AgentInstance; +use crate::agent::AgentPurpose; +use crate::agent::ControllerTrait; +use crate::controller::utils::agent::get_effective_agent_for_purpose_or_complain; +use crate::conversation::matrix::MatrixMessageProcessingParams; +use crate::entity::roomconfig::{ + SpeechToTextFlowType, TextToSpeechBotMessagesFlowType, TextToSpeechUserMessagesFlowType, +}; +use crate::entity::MessagePayload; +use crate::strings; +use crate::utils::text_to_speech::create_transcribed_message_text; +use crate::{conversation::create_llm_conversation_for_matrix_thread, entity::MessageContext, Bot}; + +#[derive(Debug, PartialEq)] +pub enum ChatCompletionControllerType { + ViaText { prefixes_to_strip: Vec }, + + ViaAudio, +} + +struct TextToSpeechEligiblePayload { + text: String, + event_id: OwnedEventId, +} + +enum TextToSpeechParams { + Perform(TextToSpeechEligiblePayload, MessageResponseType), + Offer(TextToSpeechEligiblePayload, MessageResponseType), +} + +pub async fn handle( + bot: &Bot, + matrix_link: MatrixLink, + message_context: &MessageContext, + controller_type: &ChatCompletionControllerType, +) -> anyhow::Result<()> { + let mut original_message_is_audio = false; + + let speech_to_text_flow_type = message_context + .room_config_context() + .speech_to_text_flow_type(); + + let mut speech_to_text_created_event_id: Option = None; + + if let MessagePayload::Audio(audio_content) = &message_context.payload() { + original_message_is_audio = true; + + let response_type = match speech_to_text_flow_type { + SpeechToTextFlowType::Ignore => { + tracing::debug!("Intentionally ignoring audio message"); + return Ok(()); + } + SpeechToTextFlowType::TranscribeAndGenerateText => { + tracing::debug!("Will be trascribing and possibly generating text.."); + MessageResponseType::InThread(message_context.thread_info().clone()) + } + SpeechToTextFlowType::OnlyTranscribe => { + tracing::debug!("Will only be trascribing audio to text.."); + if message_context.thread_info().is_thread_root_only() { + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()) + } else { + MessageResponseType::InThread(message_context.thread_info().clone()) + } + } + }; + + let Some(speech_to_text_created_event_id_result) = + handle_stage_speech_to_text(bot, message_context, audio_content, response_type).await + else { + return Ok(()); + }; + + speech_to_text_created_event_id = Some(speech_to_text_created_event_id_result); + + if speech_to_text_flow_type == SpeechToTextFlowType::OnlyTranscribe { + tracing::debug!( + "Intentionally not continuing with text generation after transcription" + ); + return Ok(()); + } + + // We've pushed a transcription to the room. + // Let's proceed below where we potentially handle text-generation. + } + + let text_to_speech_stage_params: Option; + + if message_context + .room_config_context() + .should_auto_text_generate(original_message_is_audio) + { + let speech_to_text_created_event_id_reaction_event_id = + if let Some(speech_to_text_created_event_id) = speech_to_text_created_event_id { + let reaction_event_response = bot + .reacting() + .react_no_fail( + message_context.room(), + speech_to_text_created_event_id.clone(), + strings::PROGRESS_INDICATOR_EMOJI.to_owned(), + ) + .await; + + reaction_event_response + .map(|reaction_event_response| reaction_event_response.event_id) + } else { + None + }; + + let response_type = MessageResponseType::InThread(message_context.thread_info().clone()); + + let text_to_speech_eligible_payload = handle_stage_text_generation( + bot, + matrix_link.clone(), + message_context, + controller_type, + response_type.clone(), + ) + .await; + + if let Some(speech_to_text_created_event_id_reaction_event_id) = + speech_to_text_created_event_id_reaction_event_id + { + bot.messaging() + .redact_event_no_fail( + message_context.room(), + speech_to_text_created_event_id_reaction_event_id, + Some("Done".to_owned()), + ) + .await; + } + + // If no text was generated (due to some issue), there's no point in continuing. + let Some(text_to_speech_eligible_payload) = text_to_speech_eligible_payload else { + return Ok(()); + }; + + text_to_speech_stage_params = match message_context + .room_config_context() + .text_to_speech_bot_messages_flow_type() + { + TextToSpeechBotMessagesFlowType::Never => None, + TextToSpeechBotMessagesFlowType::OnDemandAlways => Some(TextToSpeechParams::Offer( + text_to_speech_eligible_payload, + response_type, + )), + TextToSpeechBotMessagesFlowType::OnDemandForVoice => { + if original_message_is_audio { + Some(TextToSpeechParams::Offer( + text_to_speech_eligible_payload, + response_type, + )) + } else { + None + } + } + TextToSpeechBotMessagesFlowType::OnlyForVoice => { + if original_message_is_audio { + Some(TextToSpeechParams::Perform( + text_to_speech_eligible_payload, + response_type, + )) + } else { + None + } + } + TextToSpeechBotMessagesFlowType::Always => Some(TextToSpeechParams::Perform( + text_to_speech_eligible_payload, + response_type, + )), + }; + } else { + tracing::debug!("Not generating text due to auto-usage configuration"); + + let response_type = MessageResponseType::Reply(message_context.event_id().clone()); + + // If we got text from the user, perhaps it's eligible for text-to-speech. + + let MessagePayload::Text(text_payload) = &message_context.payload() else { + // Audio message, or a notice or something else. + // We don't wish to proceed with potential TTS for non-text messages. + return Ok(()); + }; + + let text_to_speech_eligible_payload = TextToSpeechEligiblePayload { + text: text_payload.body.clone(), + event_id: message_context.event_id().clone(), + }; + + text_to_speech_stage_params = match message_context + .room_config_context() + .text_to_speech_user_messages_flow_type() + { + TextToSpeechUserMessagesFlowType::Never => None, + TextToSpeechUserMessagesFlowType::OnDemand => Some(TextToSpeechParams::Offer( + text_to_speech_eligible_payload, + response_type, + )), + TextToSpeechUserMessagesFlowType::Always => Some(TextToSpeechParams::Perform( + text_to_speech_eligible_payload, + response_type, + )), + }; + } + + // We're potentially dealing with some text in text_to_speech_eligible_payload - either coming directly from the user or generated by an agent. + + match text_to_speech_stage_params { + Some(TextToSpeechParams::Perform(text_to_speech_eligible_payload, response_type)) => { + let _tts_result = generate_and_send_tts_for_message( + bot, + matrix_link.clone(), + message_context, + response_type, + text_to_speech_eligible_payload.event_id, + &text_to_speech_eligible_payload.text, + ) + .await; + } + Some(TextToSpeechParams::Offer(text_to_speech_eligible_payload, response_type)) => { + send_tts_offer_for_message( + bot, + message_context, + response_type, + text_to_speech_eligible_payload.event_id, + ) + .await; + } + None => {} + } + + Ok(()) +} + +async fn handle_stage_speech_to_text( + bot: &Bot, + message_context: &MessageContext, + audio_content: &AudioMessageEventContent, + response_type: MessageResponseType, +) -> Option { + let agent = get_effective_agent_for_purpose_or_complain( + bot, + message_context, + AgentPurpose::SpeechToText, + response_type.clone(), + true, + ) + .await?; + + tracing::debug!( + agent_id = agent.identifier().as_string(), + "Handling speech-to-text", + ); + + let reaction_event_response = bot + .reacting() + .react_no_fail( + message_context.room(), + message_context.event_id().clone(), + AgentPurpose::SpeechToText.emoji().to_owned(), + ) + .await; + + let speech_to_text_created_event_id = handle_stage_speech_to_text_actual_transcribing( + bot, + message_context, + &agent, + audio_content, + response_type.clone(), + ) + .await; + + if let Some(reaction_event_response) = reaction_event_response { + let redaction_reason = if speech_to_text_created_event_id.is_ok() { + strings::speech_to_text::redaction_reason_done() + } else { + strings::speech_to_text::redaction_reason_failed() + }; + + bot.messaging() + .redact_event_no_fail( + message_context.room(), + reaction_event_response.event_id, + Some(redaction_reason.to_owned()), + ) + .await; + } + + let speech_to_text_created_event_id = match speech_to_text_created_event_id { + Ok(event_id) => event_id, + Err(err) => { + tracing::warn!( + "Error in room {} while trying to transcribe via agent {}: {:?}", + message_context.room_id(), + agent.identifier(), + err, + ); + + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::error_while_serving_purpose( + agent.identifier(), + &AgentPurpose::SpeechToText, + &err, + ), + response_type, + ) + .await; + + return None; + } + }; + + Some(speech_to_text_created_event_id) +} + +async fn handle_stage_text_generation( + bot: &Bot, + matrix_link: MatrixLink, + message_context: &MessageContext, + controller_type: &ChatCompletionControllerType, + response_type: MessageResponseType, +) -> Option { + let agent = get_effective_agent_for_purpose_or_complain( + bot, + message_context, + AgentPurpose::TextGeneration, + response_type.clone(), + true, + ) + .await?; + + _ = message_context.room().typing_notice(true).await; + + let prefixes_to_strip = match controller_type { + ChatCompletionControllerType::ViaText { prefixes_to_strip } => prefixes_to_strip.clone(), + ChatCompletionControllerType::ViaAudio => vec![], + }; + + let params = MatrixMessageProcessingParams::new( + bot.user_id().as_str().to_owned(), + message_context.combined_admin_and_user_regexes(), + ) + .with_first_message_stripped_prefixes(prefixes_to_strip); + + let conversation = create_llm_conversation_for_matrix_thread( + matrix_link.clone(), + message_context.room(), + message_context.thread_info().root_event_id.clone(), + ¶ms, + ) + .await; + + let conversation = match conversation { + Ok(conversation) => conversation, + Err(err) => { + tracing::warn!(?err, "Error while trying to create conversation"); + + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::error_while_serving_purpose( + agent.identifier(), + &AgentPurpose::TextGeneration, + &err, + ), + response_type, + ) + .await; + + return None; + } + }; + + tracing::debug!( + agent_id = agent.identifier().as_string(), + provider = format!("{}", agent.definition().provider.clone()), + "Invoking LLM for text generation with conversation.." + ); + + let span = tracing::debug_span!( + "text_generation", + agent_id = agent.identifier().as_string(), + provider = format!("{}", agent.definition().provider.clone()), + ); + + let start_time = std::time::Instant::now(); + + let params = TextGenerationParams { + context_management_enabled: message_context + .room_config_context() + .text_generation_context_management_enabled(), + + prompt_override: message_context + .room_config_context() + .text_generation_prompt_override(), + + temperature_override: message_context + .room_config_context() + .text_generation_temperature_override(), + }; + + let result = agent + .controller() + .generate_text(conversation, params) + .instrument(span) + .await; + + let duration = std::time::Instant::now().duration_since(start_time); + + tracing::debug!( + agent_id = agent.identifier().as_string(), + provider = format!("{}", agent.definition().provider.clone()), + ?duration, + "Done with LLM text generation" + ); + + let result = match result { + Ok(result) => result, + Err(err) => { + tracing::warn!( + "Error in room {} while trying to generate text via agent {}: {:?}", + message_context.room_id(), + agent.identifier(), + err, + ); + + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::error_while_serving_purpose( + agent.identifier(), + &AgentPurpose::TextGeneration, + &err, + ), + response_type, + ) + .await; + + return None; + } + }; + + let text = result.text.clone().trim().to_owned(); + if text.is_empty() { + tracing::warn!( + agent_id = agent.identifier().as_string(), + "Agent returned empty text", + ); + + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::empty_response_returned(agent.identifier()), + response_type, + ) + .await; + + return None; + } + + let send_message_response = bot + .messaging() + .send_text_markdown_no_fail(message_context.room(), text.clone(), response_type) + .await?; + + Some(TextToSpeechEligiblePayload { + text, + event_id: send_message_response.event_id, + }) +} + +async fn handle_stage_speech_to_text_actual_transcribing( + bot: &Bot, + message_context: &MessageContext, + agent: &AgentInstance, + audio_content: &AudioMessageEventContent, + response_type: MessageResponseType, +) -> anyhow::Result { + let src = &audio_content.source; + + let media_request = mxlink::matrix_sdk::media::MediaRequest { + source: src.to_owned(), + format: mxlink::matrix_sdk::media::MediaFormat::File, + }; + + let media = message_context + .room() + .client() + .media() + .get_media_content(&media_request, true) + .await?; + + _ = message_context.room().typing_notice(true).await; + + let span = tracing::debug_span!( + "speech_to_text_generation", + agent_id = agent.identifier().as_string() + ); + + let mime_type = audio_content + .info + .as_ref() + .and_then(|info| info.mimetype.clone()) + .unwrap_or_else(|| "audio/ogg".to_string()) + .parse::() + .map_err(|err| anyhow::anyhow!("Invalid MIME type: {}", err))?; + + let params = SpeechToTextParams { + language_override: message_context + .room_config_context() + .speech_to_text_language(), + }; + + let speech_to_text_result = agent + .controller() + .speech_to_text(&mime_type, media, params) + .instrument(span) + .await?; + + let transcribed_text = create_transcribed_message_text(&speech_to_text_result.text); + + let result = bot + .messaging() + .send_notice_markdown_no_fail(message_context.room(), transcribed_text, response_type) + .await; + + result + .map(|result| result.event_id) + .ok_or_else(|| anyhow::anyhow!("Failed to send transcribed text")) +} + +async fn send_tts_offer_for_message( + bot: &Bot, + message_context: &MessageContext, + response_type: MessageResponseType, + event_id: OwnedEventId, +) { + // Offers may be enabled, but there's no guarantee that whatever agent is configured can actually do TTS. + // So.. do not complain if there's no agent available. Just silently ignore it. + let speech_agent = get_effective_agent_for_purpose_or_complain( + bot, + message_context, + AgentPurpose::TextToSpeech, + response_type, + false, + ) + .await; + + if speech_agent.is_some() { + bot.reacting() + .react_no_fail( + message_context.room(), + event_id, + AgentPurpose::TextToSpeech.emoji().to_owned(), + ) + .await; + } +} + +async fn generate_and_send_tts_for_message( + bot: &Bot, + matrix_link: MatrixLink, + message_context: &MessageContext, + response_type: MessageResponseType, + event_id: OwnedEventId, + text: &str, +) -> bool { + let speech_agent = get_effective_agent_for_purpose_or_complain( + bot, + message_context, + AgentPurpose::TextToSpeech, + response_type.clone(), + true, + ) + .await; + + let Some(speech_agent) = speech_agent else { + return false; + }; + + crate::controller::utils::text_to_speech::generate_and_send_tts_for_message( + bot, + matrix_link, + message_context, + response_type, + &speech_agent, + &event_id, + text, + ) + .await +} diff --git a/src/controller/controller_type.rs b/src/controller/controller_type.rs new file mode 100644 index 0000000..5d30703 --- /dev/null +++ b/src/controller/controller_type.rs @@ -0,0 +1,27 @@ +#[derive(Debug, PartialEq)] +pub enum ControllerType { + // Denotes that the message is to be ignored. + Ignore, + + Help, + + UsageHelp, + + Unknown, + + Error(String), + ErrorInThread(String, mxlink::ThreadInfo), + + ProviderHelp, + + Access(super::access::AccessControllerType), + + Agent(super::agent::AgentControllerType), + + Config(super::cfg::ConfigControllerType), + + ChatCompletion(super::chat_completion::ChatCompletionControllerType), + + ImageGeneration(String), + StickerGeneration(String), +} diff --git a/src/controller/determination/mod.rs b/src/controller/determination/mod.rs new file mode 100644 index 0000000..737235d --- /dev/null +++ b/src/controller/determination/mod.rs @@ -0,0 +1,154 @@ +#[cfg(test)] +mod tests; + +use mxlink::matrix_sdk::ruma::OwnedUserId; + +use super::chat_completion::ChatCompletionControllerType; +use crate::{ + entity::{ + roomconfig::TextGenerationPrefixRequirementType, MessageContext, MessagePayload, + ThreadContextFirstMessage, + }, + strings, +}; + +use super::ControllerType; + +pub fn determine_controller( + command_prefix: &str, + first_thread_message: &ThreadContextFirstMessage, + message_context: &MessageContext, + bot_user_id: &OwnedUserId, + bot_display_name: &Option, +) -> ControllerType { + match &first_thread_message.payload { + MessagePayload::Text(text_message_content) => { + let prefix_requirement_type = message_context + .room_config_context() + .text_generation_prefix_requirement_type(); + + determine_text_controller( + command_prefix, + &text_message_content.body, + prefix_requirement_type, + first_thread_message.is_mentioning_bot, + bot_user_id, + bot_display_name, + ) + } + MessagePayload::Encrypted(thread_info) => { + if thread_info.is_thread_root_only() { + ControllerType::Error(strings::error::message_is_encrypted().to_owned()) + } else { + ControllerType::ErrorInThread( + strings::error::first_message_in_thread_is_encrypted().to_owned(), + thread_info.clone(), + ) + } + } + MessagePayload::Audio(_) => { + ControllerType::ChatCompletion(ChatCompletionControllerType::ViaAudio) + } + MessagePayload::Reaction { .. } => { + panic!("Handling reaction as first message in thread does not make sense") + } + } +} + +fn determine_text_controller( + command_prefix: &str, + text: &str, + room_text_generation_prefix_requirement_type: TextGenerationPrefixRequirementType, + is_mentioning_bot: bool, + bot_user_id: &OwnedUserId, + bot_display_name: &Option, +) -> ControllerType { + let text = text.trim(); + + if text.starts_with(&format!("{command_prefix} help")) || text == command_prefix { + return ControllerType::Help; + } + + if let Some(remaining) = text.strip_prefix(&format!("{command_prefix} access")) { + return super::access::determine_controller(remaining.trim()); + } + + if let Some(remaining) = text.strip_prefix(&format!("{command_prefix} provider")) { + return super::provider::determine_controller(remaining.trim()); + } + + if let Some(remaining) = text.strip_prefix(&format!("{command_prefix} agent")) { + return super::agent::determine_controller(command_prefix, remaining.trim()); + } + + if let Some(remaining) = text.strip_prefix(&format!("{command_prefix} config")) { + return super::cfg::determine_controller(remaining.trim()); + } + + if let Some(prompt) = text.strip_prefix(&format!("{command_prefix} image")) { + return ControllerType::ImageGeneration(prompt.trim().to_owned()); + } + + if let Some(prompt) = text.strip_prefix(&format!("{command_prefix} sticker")) { + return ControllerType::StickerGeneration(prompt.trim().to_owned()); + } + + if let Some(remaining) = text.strip_prefix(&format!("{command_prefix} usage")) { + return super::usage::determine_controller(remaining.trim()); + } + + // Regular text message that does not match any command. + // If it mentions the bot, it's a chat completion. + // Otherwise, it depends on the prefix requirement for text generation - it may be routed for chat completion or ignored. + + if is_mentioning_bot { + // Different clients do mentions differently. + // The body text containing the mention usually contains one of: + // - the full user ID (includes a @ prefix by default) + // - the localpart (with a @ prefix) + // - the localpart (without a @ prefix) + // - the display name (with a @ prefix) + // - the display name (without a @ prefix) + // + // Some add a `: ` suffix after the mention. + // + // There's no guarantee that the mention is at the start even. + // It being there is most common and we try to strip it from there + // as best as we can. + let bot_user_id_localpart = bot_user_id.localpart(); + + let mut prefixes_to_strip = vec![ + bot_user_id.as_str().to_owned(), + format!("@{}", bot_user_id_localpart), + bot_user_id_localpart.to_owned(), + ]; + + if let Some(bot_display_name) = bot_display_name { + prefixes_to_strip.push(format!("@{}", bot_display_name)); + prefixes_to_strip.push(bot_display_name.to_owned()); + } + + prefixes_to_strip.push(":".to_owned()); + + return ControllerType::ChatCompletion(ChatCompletionControllerType::ViaText { + prefixes_to_strip, + }); + } + + match room_text_generation_prefix_requirement_type { + TextGenerationPrefixRequirementType::CommandPrefix => { + if text.starts_with(command_prefix) { + ControllerType::ChatCompletion(ChatCompletionControllerType::ViaText { + prefixes_to_strip: vec![command_prefix.to_owned()], + }) + } else { + ControllerType::Ignore + } + } + TextGenerationPrefixRequirementType::No => { + ControllerType::ChatCompletion(ChatCompletionControllerType::ViaText { + prefixes_to_strip: vec![], + }) + } + } +} diff --git a/src/controller/determination/tests.rs b/src/controller/determination/tests.rs new file mode 100644 index 0000000..5655dd6 --- /dev/null +++ b/src/controller/determination/tests.rs @@ -0,0 +1,196 @@ +#[test] +fn determine_text_controller() { + use super::super::chat_completion::ChatCompletionControllerType; + use super::ControllerType; + use crate::controller; + + let bot_user_id = mxlink::matrix_sdk::ruma::owned_user_id!("@bot:example.com"); + let bot_display_name = "Bot"; + + let command_prefix = "!bai"; + + struct TestCase { + name: &'static str, + input: &'static str, + is_mentioning_bot: bool, + expected: ControllerType, + // This value only matters for some of the tests. + // We default to using the No variant for most tests where it's irrelevant. + room_text_generation_prefix_requirement_type: super::TextGenerationPrefixRequirementType, + } + + // We only have top-level test cases here. + // Each submodule defines its own test cases. + let test_cases = vec![ + TestCase { + name: "Help", + input: "!bai help", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::Help, + }, + TestCase { + name: "Prefix only leads to help", + input: "!bai", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::Help, + }, + TestCase { + name: "Prefix and unknown command leads to chat completion", + input: "!bai something-else", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::ChatCompletion(ChatCompletionControllerType::ViaText { + prefixes_to_strip: vec![], + }), + }, + TestCase { + name: "Access top-level", + input: "!bai access", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::Access(controller::access::AccessControllerType::Help), + }, + TestCase { + name: "Provider", + input: "!bai provider", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::ProviderHelp, + }, + TestCase { + name: "Usage", + input: "!bai usage", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::UsageHelp, + }, + TestCase { + name: "Agent top-level", + input: "!bai agent", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::Agent(controller::agent::AgentControllerType::Help), + }, + TestCase { + name: "Config top-level", + input: "!bai config", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::Config(controller::cfg::ConfigControllerType::Help), + }, + TestCase { + name: "Image generation", + input: "!bai image Draw a cat!", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::ImageGeneration("Draw a cat!".to_owned()), + }, + TestCase { + name: "Sticker generation", + input: "!bai sticker A surprised cat", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::StickerGeneration("A surprised cat".to_owned()), + }, + TestCase { + name: "Regular text triggers completion when prefix not required", + input: "Regular text goes here", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::ChatCompletion(ChatCompletionControllerType::ViaText { + prefixes_to_strip: vec![], + }), + }, + TestCase { + name: "Regular text is ignored when prefix is required", + input: "Regular text goes here", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::CommandPrefix, + expected: ControllerType::Ignore, + }, + TestCase { + name: "Command-prefixed text triggers completion when prefix is required", + input: "!bai Regular text goes here", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::CommandPrefix, + expected: ControllerType::ChatCompletion(ChatCompletionControllerType::ViaText { + prefixes_to_strip: vec!["!bai".to_owned()], + }), + }, + TestCase { + name: "Command-prefixed text triggers completion even when prefix is not required", + input: "!bai Regular text goes here", + is_mentioning_bot: false, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::ChatCompletion(ChatCompletionControllerType::ViaText { + prefixes_to_strip: vec![], + }), + }, + TestCase { + name: "Regular message with bot mention triggers completion stripping bot id and display name (no prefix requirement)", + input: "Regular text goes here", + is_mentioning_bot: true, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::No, + expected: ControllerType::ChatCompletion(ChatCompletionControllerType::ViaText { + prefixes_to_strip: vec![ + "@bot:example.com".to_owned(), + "@bot".to_owned(), + "bot".to_owned(), + "@Bot".to_owned(), + "Bot".to_owned(), + ":".to_owned(), + ], + }), + }, + // This test case is the same as the one above, just with a different prefix requirement. + // We expect the same result. + TestCase { + name: "Regular message with bot mention triggers completion stripping bot id and display name (command_prefix requirement)", + input: "Regular text goes here", + is_mentioning_bot: true, + room_text_generation_prefix_requirement_type: + super::TextGenerationPrefixRequirementType::CommandPrefix, + expected: ControllerType::ChatCompletion(ChatCompletionControllerType::ViaText { + prefixes_to_strip: vec![ + "@bot:example.com".to_owned(), + "@bot".to_owned(), + "bot".to_owned(), + "@Bot".to_owned(), + "Bot".to_owned(), + ":".to_owned(), + ], + }), + }, + ]; + + for test_case in test_cases { + let bot_display_name = Some(bot_display_name.to_owned()); + + let result = super::determine_text_controller( + command_prefix, + test_case.input, + test_case.room_text_generation_prefix_requirement_type, + test_case.is_mentioning_bot, + &bot_user_id, + &bot_display_name, + ); + assert_eq!(result, test_case.expected, "Test case: {}", test_case.name); + } +} diff --git a/src/controller/dispatching.rs b/src/controller/dispatching.rs new file mode 100644 index 0000000..e73c362 --- /dev/null +++ b/src/controller/dispatching.rs @@ -0,0 +1,108 @@ +use mxlink::MessageResponseType; + +use crate::{entity::MessageContext, strings, Bot}; + +use super::ControllerType; + +pub async fn dispatch_controller( + controller_type: &ControllerType, + message_context: &MessageContext, + bot: &Bot, +) { + let result = match controller_type { + ControllerType::Access(controller_type) => { + super::access::dispatch_controller(controller_type, message_context, bot).await + } + ControllerType::Agent(controller_type) => { + super::agent::dispatch_controller(controller_type, message_context, bot).await + } + ControllerType::Config(controller_type) => { + super::cfg::dispatch_controller(controller_type, message_context, bot).await + } + ControllerType::Help => super::help::handle(bot, message_context).await, + ControllerType::Unknown => { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::error::unknown_command_see_help(bot.command_prefix()), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) + } + ControllerType::ProviderHelp => super::provider::handle_help(message_context, bot).await, + ControllerType::UsageHelp => super::usage::handle_help(message_context, bot).await, + ControllerType::ChatCompletion(controller_type) => { + super::chat_completion::handle( + bot, + bot.matrix_link().clone(), + message_context, + controller_type, + ) + .await + } + ControllerType::Error(message) => { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) + } + ControllerType::ErrorInThread(message, thread_info) => { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::InThread(thread_info.clone()), + ) + .await; + + Ok(()) + } + ControllerType::Ignore => { + tracing::trace!("Ignoring text message"); + Ok(()) + } + ControllerType::ImageGeneration(prompt) => { + super::image::generation::handle_image( + bot, + bot.matrix_link().clone(), + message_context, + prompt, + ) + .await + } + ControllerType::StickerGeneration(prompt) => { + super::image::generation::handle_sticker( + bot, + bot.matrix_link().clone(), + message_context, + prompt, + ) + .await + } + }; + + if let Err(e) = result { + tracing::error!( + "Error handling message {} from sender {} in room {}: {:?}", + message_context.event_id(), + message_context.sender_id(), + message_context.room_id(), + e, + ); + + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + strings::error::error_while_processing_message(), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + } +} diff --git a/src/controller/help/mod.rs b/src/controller/help/mod.rs new file mode 100644 index 0000000..d22f6a5 --- /dev/null +++ b/src/controller/help/mod.rs @@ -0,0 +1,90 @@ +use mxlink::MessageResponseType; + +use crate::{entity::MessageContext, strings, Bot}; + +pub async fn handle(bot: &Bot, message_context: &MessageContext) -> anyhow::Result<()> { + let sender_can_manage_global_config = message_context.sender_can_manage_global_config()?; + let sender_can_manage_room_local_agents = + message_context.sender_can_manage_room_local_agents()?; + + let mut message = String::from(""); + message.push_str(&format!("## {}\n\n", strings::help::heading_introduction())); + message.push_str(&strings::introduction::create_short_introduction( + bot.name(), + )); + + message.push_str("\n\n"); + + // Agents + message.push_str(&format!("## {}", strings::help::agent::heading())); + message.push_str("\n\n"); + message.push_str(&strings::help::agent::intro( + bot.command_prefix(), + sender_can_manage_room_local_agents, + )); + message.push_str("\n\n"); + message.push_str(&strings::help::agent::intro_handler_relation( + bot.command_prefix(), + )); + message.push_str("\n\n"); + message.push_str(&strings::help::learn_more_send_a_command( + bot.command_prefix(), + "agent", + )); + message.push_str("\n\n"); + + // Providers + if sender_can_manage_room_local_agents || sender_can_manage_global_config { + message.push_str(&format!("## {}", strings::help::provider::heading())); + message.push_str("\n\n"); + message.push_str(&strings::help::provider::intro()); + message.push_str("\n\n"); + message.push_str(&strings::help::learn_more_send_a_command( + bot.command_prefix(), + "provider", + )); + message.push_str("\n\n"); + } + + // Access + message.push_str(&format!("## {}", strings::help::access::heading())); + message.push_str("\n\n"); + message.push_str(&strings::help::access::intro()); + message.push_str("\n\n"); + message.push_str(&strings::help::learn_more_send_a_command( + bot.command_prefix(), + "access", + )); + message.push_str("\n\n"); + + // Configuration + message.push_str(&format!("## {}", strings::help::cfg::heading())); + message.push_str("\n\n"); + message.push_str(strings::help::cfg::intro_short()); + message.push_str("\n\n"); + message.push_str(&strings::help::learn_more_send_a_command( + bot.command_prefix(), + "config", + )); + message.push_str("\n\n"); + + // Usage + message.push_str(&format!("## {}", strings::help::usage::heading())); + message.push_str("\n\n"); + message.push_str(strings::help::usage::intro()); + message.push_str("\n\n"); + message.push_str(&strings::help::learn_more_send_a_command( + bot.command_prefix(), + "usage", + )); + + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::Reply(message_context.thread_info().last_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/image/generation.rs b/src/controller/image/generation.rs new file mode 100644 index 0000000..4e58b8c --- /dev/null +++ b/src/controller/image/generation.rs @@ -0,0 +1,179 @@ +use mxlink::{MatrixLink, MessageResponseType}; + +use tracing::Instrument; + +use crate::agent::provider::ImageGenerationParams; +use crate::agent::AgentPurpose; +use crate::agent::ControllerTrait; +use crate::controller::utils::agent::get_effective_agent_for_purpose_or_complain; +use crate::conversation::create_llm_conversation_for_matrix_thread; +use crate::conversation::matrix::MatrixMessageProcessingParams; +use crate::strings; +use crate::{entity::MessageContext, Bot}; + +// We may make this configurable (per room, etc.) in the future, but for now it's hardcoded. +const STICKER_SIZE: &str = "256x256"; + +pub async fn handle_image( + bot: &Bot, + matrix_link: MatrixLink, + message_context: &MessageContext, + original_prompt: &str, +) -> anyhow::Result<()> { + let response_type = MessageResponseType::InThread(message_context.thread_info().clone()); + + let Some(agent) = get_effective_agent_for_purpose_or_complain( + bot, + message_context, + AgentPurpose::ImageGeneration, + response_type.clone(), + true, + ) + .await + else { + return Ok(()); + }; + + let params = MatrixMessageProcessingParams::new( + bot.user_id().as_str().to_owned(), + message_context.combined_admin_and_user_regexes(), + ); + + let conversation = create_llm_conversation_for_matrix_thread( + matrix_link.clone(), + message_context.room(), + message_context.thread_info().root_event_id.clone(), + ¶ms, + ) + .await?; + + let prompt = if conversation.messages.len() >= 2 { + // Skip the first message, which contains the original prompt (which we already have) + let other_messages = conversation.messages.iter().skip(1).cloned().collect(); + + super::prompt::build(original_prompt, other_messages) + } else { + original_prompt.to_owned() + }; + + message_context.room().typing_notice(true).await?; + + let span = tracing::debug_span!( + "image_generation", + agent_id = agent.identifier().as_string() + ); + + let response = agent + .controller() + .generate_image(&prompt, ImageGenerationParams::default()) + .instrument(span) + .await?; + + let actual_prompt = response.revised_prompt.as_deref().unwrap_or(&prompt); + + if *actual_prompt.trim() != *prompt.trim() { + bot.messaging() + .send_notice_markdown_no_fail( + message_context.room(), + strings::image_generation::revised_prompt(actual_prompt), + response_type.clone(), + ) + .await; + } + + let attachment_body_text = format!("Generated image based on: {}", actual_prompt); + + let mut event_content = matrix_link + .media() + .upload_and_prepare_event_content( + message_context.room(), + &response.mime_type, + response.bytes, + &attachment_body_text, + ) + .await + .map_err(|e| anyhow::anyhow!("Failed to upload and prepare event: {}", e))?; + + matrix_link + .messaging() + .send_event( + message_context.room(), + &mut event_content, + response_type.clone(), + ) + .await?; + + if conversation.messages.len() == 1 { + // If this is the beginning of the thread, send helpful instructions + bot.messaging() + .send_notice_markdown_no_fail( + message_context.room(), + strings::image_generation::guide_how_to_proceed(), + response_type.clone(), + ) + .await; + } + + Ok(()) +} + +pub async fn handle_sticker( + bot: &Bot, + matrix_link: MatrixLink, + message_context: &MessageContext, + original_prompt: &str, +) -> anyhow::Result<()> { + // Stickers are always sent directly to the room - no threading. + let response_type = + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()); + + let Some(agent) = get_effective_agent_for_purpose_or_complain( + bot, + message_context, + AgentPurpose::ImageGeneration, + response_type.clone(), + true, + ) + .await + else { + return Ok(()); + }; + + message_context.room().typing_notice(true).await?; + + let span = tracing::debug_span!( + "sticker_generation", + agent_id = agent.identifier().as_string() + ); + + let params = ImageGenerationParams::default() + .with_size_override(Some(STICKER_SIZE.to_owned())) + .with_cheaper_model_switching_allowed(true) + .with_cheaper_quality_switching_allowed(true); + + let response = agent + .controller() + .generate_image(original_prompt, params) + .instrument(span) + .await?; + + let attachment_body_text = format!("Generated sticker image based on: {}", original_prompt); + + let mut event_content = matrix_link + .media() + .upload_and_prepare_event_content( + message_context.room(), + &response.mime_type, + response.bytes, + &attachment_body_text, + ) + .await + .map_err(|e| anyhow::anyhow!("Failed to upload and prepare event: {}", e))?; + + matrix_link + .messaging() + .send_event(message_context.room(), &mut event_content, response_type) + .await?; + + Ok(()) +} diff --git a/src/controller/image/mod.rs b/src/controller/image/mod.rs new file mode 100644 index 0000000..fcfd033 --- /dev/null +++ b/src/controller/image/mod.rs @@ -0,0 +1,2 @@ +pub mod generation; +mod prompt; diff --git a/src/controller/image/prompt.rs b/src/controller/image/prompt.rs new file mode 100644 index 0000000..70eff73 --- /dev/null +++ b/src/controller/image/prompt.rs @@ -0,0 +1,111 @@ +use crate::conversation::llm::{Author, Message}; + +/// Builds a prompt from the original prompt and other messages in the conversation. +/// +/// Only messages authored by the user are considered. +/// +/// Messages that say "Again" (regardless of casing) are ignored. They are considered special messages +/// which trigger re-generation, but do not need to be included in the prompt criteria. +pub fn build(original_prompt: &str, other_messages: Vec) -> String { + let mut prompt = original_prompt.to_owned(); + + // Make a new messages vector that only contains messages we care about + let other_messages: Vec = other_messages + .into_iter() + .filter(|message| { + if let Author::User = message.author { + message.message_text.to_lowercase() != "again" + } else { + false + } + }) + .collect(); + + if !other_messages.is_empty() { + prompt.push_str("\nOther criteria:"); + for message in other_messages { + prompt.push_str( + format!("\n- {}", message.message_text.replace("\n", ". ").as_str()).as_str(), + ); + } + } + + prompt +} + +#[cfg(test)] +mod tests { + use super::build; + use super::{Author, Message}; + + struct TestCase { + original_prompt: &'static str, + messages: Vec, + expected_prompt: &'static str, + } + + #[test] + fn test_build_prompt() { + let test_cases = vec![ + // Simple case + TestCase { + original_prompt: "Generate a picture of a cat", + messages: vec![], + expected_prompt: "Generate a picture of a cat", + }, + // Only a single user message + TestCase { + original_prompt: "Generate a picture of a dog", + messages: vec![Message { + author: Author::User, + message_text: "Must be blue".to_owned(), + }], + expected_prompt: "Generate a picture of a dog\nOther criteria:\n- Must be blue", + }, + // Multiple complex user messages dispersed with assistant messages + TestCase { + original_prompt: "Generate a picture of an elephant", + messages: vec![Message { + author: Author::User, + message_text: "Must be blue".to_owned(), + }, + Message { + author: Author::Assistant, + message_text: "Whatever".to_owned(), + }, + Message { + author: Author::User, + message_text: "Must be 3-legged.\nMust be flying.".to_owned(), + }], + expected_prompt: "Generate a picture of an elephant\nOther criteria:\n- Must be blue\n- Must be 3-legged.. Must be flying.", + }, + // "Again" is ignored. + TestCase { + original_prompt: "Generate a picture of a grizzly bear", + messages: vec![Message { + author: Author::User, + message_text: "Must be blue".to_owned(), + }, + Message { + author: Author::Assistant, + message_text: "Whatever".to_owned(), + }, + Message { + author: Author::User, + message_text: "Again".to_owned(), + }, + Message { + author: Author::User, + message_text: "again".to_owned(), + }], + expected_prompt: "Generate a picture of a grizzly bear\nOther criteria:\n- Must be blue", + }, + ]; + + for test_case in test_cases { + let actual_prompt = build(test_case.original_prompt, test_case.messages); + + assert_eq!(actual_prompt, test_case.expected_prompt); + } + } +} diff --git a/src/controller/join/mod.rs b/src/controller/join/mod.rs new file mode 100644 index 0000000..2818598 --- /dev/null +++ b/src/controller/join/mod.rs @@ -0,0 +1,28 @@ +use mxlink::MessageResponseType; + +use crate::entity::RoomConfigContext; +use crate::{strings, Bot}; + +pub async fn handle( + bot: &Bot, + room: &mxlink::matrix_sdk::Room, + room_config_context: &RoomConfigContext, +) -> anyhow::Result<()> { + let agent_manager = bot.agent_manager(); + + bot.messaging() + .send_text_markdown_no_fail( + room, + strings::introduction::create_on_join_introduction( + bot.name(), + bot.command_prefix(), + agent_manager, + room_config_context, + ) + .await, + MessageResponseType::InRoom, + ) + .await; + + Ok(()) +} diff --git a/src/controller/mod.rs b/src/controller/mod.rs new file mode 100644 index 0000000..94c670c --- /dev/null +++ b/src/controller/mod.rs @@ -0,0 +1,19 @@ +mod controller_type; + +pub mod access; +pub mod agent; +pub mod cfg; +pub mod chat_completion; +mod determination; +mod dispatching; +pub mod help; +pub mod image; +pub mod join; +pub mod provider; +pub mod reaction; +pub mod usage; +mod utils; + +pub use controller_type::ControllerType; +pub use determination::determine_controller; +pub use dispatching::dispatch_controller; diff --git a/src/controller/provider/mod.rs b/src/controller/provider/mod.rs new file mode 100644 index 0000000..528bf45 --- /dev/null +++ b/src/controller/provider/mod.rs @@ -0,0 +1,97 @@ +use mxlink::MessageResponseType; + +use crate::{agent::AgentProvider, entity::MessageContext, strings, Bot}; + +use super::ControllerType; + +pub fn determine_controller(_text: &str) -> ControllerType { + ControllerType::ProviderHelp +} + +pub async fn handle_help(message_context: &MessageContext, bot: &Bot) -> anyhow::Result<()> { + if !message_context.sender_can_manage_room_local_agents()? { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::provider::not_allowed(), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + return Ok(()); + } + + let mut message = String::new(); + message.push_str(&format!("## {}", strings::help::provider::heading())); + message.push_str("\n\n"); + message.push_str(&strings::help::provider::intro()); + message.push_str("\n\n"); + message.push_str(&strings::provider::providers_list_intro()); + message.push_str("\n\n"); + + // How to choose + message.push_str(&format!( + "### {}", + strings::provider::help_how_to_choose_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::provider::help_how_to_choose_description( + bot.command_prefix(), + )); + message.push_str("\n\n"); + + // How to use + message.push_str(&format!( + "### {}", + strings::provider::help_how_to_use_heading() + )); + message.push_str("\n\n"); + message.push_str(&strings::provider::help_how_to_use_description( + bot.command_prefix(), + )); + message.push_str("\n\n"); + + for provider in AgentProvider::choices() { + let provider_info = provider.info(); + + message.push_str(&format!( + "### {}", + strings::provider::help_provider_heading( + provider_info.name, + &provider_info.homepage_url.as_ref().map(|s| s.to_string()) + ) + )); + + message.push_str("\n\n"); + + message.push_str(&strings::provider::help_provider_details( + provider.to_static_str(), + &provider_info, + )); + + message.push_str("- 🗲 Quick start:\n"); + message.push_str(&format!( + "\t- create a room-local agent: `{command_prefix} agent create-room-local {provider_id} my-{provider_id}-agent`", + command_prefix = bot.command_prefix(), + provider_id = provider.to_static_str(), + )); + message.push('\n'); + message.push_str(&format!( + "\t- create a global agent: `{command_prefix} agent create-global {provider_id} my-{provider_id}-agent`", + command_prefix = bot.command_prefix(), + provider_id = provider.to_static_str(), + )); + + message.push_str("\n\n"); + } + + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + message, + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/reaction/mod.rs b/src/controller/reaction/mod.rs new file mode 100644 index 0000000..f355eba --- /dev/null +++ b/src/controller/reaction/mod.rs @@ -0,0 +1,50 @@ +use std::ops::Deref; + +use mxlink::MatrixLink; + +use crate::{ + agent::AgentPurpose, + entity::{MessageContext, MessagePayload}, + Bot, +}; + +mod text_to_speech; + +pub async fn handle( + bot: &Bot, + matrix_link: MatrixLink, + message_context: &MessageContext, +) -> anyhow::Result<()> { + match &message_context.payload() { + MessagePayload::Reaction { + key, + reacted_to_event_payload, + reacted_to_event_id, + reacted_to_event_sender_id, + } => { + if key == AgentPurpose::TextToSpeech.emoji() { + if let MessagePayload::Text(text_content) = reacted_to_event_payload.deref() { + return text_to_speech::handle( + bot, + matrix_link, + message_context, + reacted_to_event_id, + reacted_to_event_sender_id, + text_content, + ) + .await; + } + + tracing::debug!("Ignoring text-to-speech reaction to non-text message"); + return Ok(()); + } + + tracing::debug!("Ignoring unknown reaction"); + + Ok(()) + } + _ => Err(anyhow::anyhow!( + "Reaction controller called with a non-reaction message" + )), + } +} diff --git a/src/controller/reaction/text_to_speech.rs b/src/controller/reaction/text_to_speech.rs new file mode 100644 index 0000000..eaac21a --- /dev/null +++ b/src/controller/reaction/text_to_speech.rs @@ -0,0 +1,100 @@ +use mxlink::{MatrixLink, MessageResponseType}; + +use mxlink::matrix_sdk::ruma::{ + events::room::message::TextMessageEventContent, OwnedEventId, OwnedUserId, +}; + +use crate::entity::roomconfig::{ + TextToSpeechBotMessagesFlowType, TextToSpeechUserMessagesFlowType, +}; + +use crate::{ + agent::AgentPurpose, controller::utils::agent::get_effective_agent_for_purpose_or_complain, + entity::MessageContext, Bot, +}; + +pub(super) async fn handle( + bot: &Bot, + matrix_link: MatrixLink, + message_context: &MessageContext, + reacted_to_event_id: &OwnedEventId, + reacted_to_event_sender_id: &OwnedUserId, + text_content: &TextMessageEventContent, +) -> anyhow::Result<()> { + // If we're in a thread, we're likely dealing with a bot message, so we should start in the thread. + // Otherwise, we're likely operating in "TTS user messages" mode, so we should reply to the reacted-to message and avoid threads. + let response_type = if message_context.thread_info().is_thread_root_only() { + MessageResponseType::Reply(reacted_to_event_id.clone()) + } else { + MessageResponseType::InThread(message_context.thread_info().clone()) + }; + + if !is_allowed_to_tts_for_event( + message_context, + reacted_to_event_sender_id, + matrix_link.user_id(), + ) { + tracing::debug!("Ignoring request for on-demand text-to-speech (via reaction) due to room configuration"); + return Ok(()); + } + + let speech_agent = get_effective_agent_for_purpose_or_complain( + bot, + message_context, + AgentPurpose::TextToSpeech, + response_type.clone(), + true, + ) + .await; + + let Some(speech_agent) = speech_agent else { + // We've already complained about this in get_effective_agent_or_complain + return Ok(()); + }; + + crate::controller::utils::text_to_speech::generate_and_send_tts_for_message( + bot, + matrix_link, + message_context, + response_type, + &speech_agent, + reacted_to_event_id, + &text_content.body, + ) + .await; + + Ok(()) +} + +fn is_allowed_to_tts_for_event( + message_context: &MessageContext, + sender_id: &OwnedUserId, + bot_user_id: &OwnedUserId, +) -> bool { + // Whether we're allowed depends on who the original message sender is (the bot or some user). + // + // The user may be an allowed bot user or someone else. + // Regardless, we've been invoked by an allowed user, so if the user wants TTS for a foreign message, we should allow it. + + if *sender_id == *bot_user_id { + match message_context + .room_config_context() + .text_to_speech_bot_messages_flow_type() + { + TextToSpeechBotMessagesFlowType::Never => false, + TextToSpeechBotMessagesFlowType::OnDemandAlways => true, + TextToSpeechBotMessagesFlowType::OnDemandForVoice => true, + TextToSpeechBotMessagesFlowType::OnlyForVoice => true, + TextToSpeechBotMessagesFlowType::Always => true, + } + } else { + match message_context + .room_config_context() + .text_to_speech_user_messages_flow_type() + { + TextToSpeechUserMessagesFlowType::Never => false, + TextToSpeechUserMessagesFlowType::OnDemand => true, + TextToSpeechUserMessagesFlowType::Always => true, + } + } +} diff --git a/src/controller/usage/mod.rs b/src/controller/usage/mod.rs new file mode 100644 index 0000000..2ac178d --- /dev/null +++ b/src/controller/usage/mod.rs @@ -0,0 +1,21 @@ +use mxlink::MessageResponseType; + +use crate::{entity::MessageContext, strings, Bot}; + +use super::ControllerType; + +pub fn determine_controller(_text: &str) -> ControllerType { + ControllerType::UsageHelp +} + +pub async fn handle_help(message_context: &MessageContext, bot: &Bot) -> anyhow::Result<()> { + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + strings::usage::intro(bot.command_prefix()), + MessageResponseType::Reply(message_context.thread_info().root_event_id.clone()), + ) + .await; + + Ok(()) +} diff --git a/src/controller/utils/agent.rs b/src/controller/utils/agent.rs new file mode 100644 index 0000000..99c5fa6 --- /dev/null +++ b/src/controller/utils/agent.rs @@ -0,0 +1,63 @@ +use mxlink::MessageResponseType; + +use crate::{ + agent::{ + utils::{get_effective_agent_for_purpose, AgentForPurposeDeterminationError}, + AgentInstance, AgentPurpose, + }, + entity::MessageContext, + strings, Bot, +}; + +pub async fn get_effective_agent_for_purpose_or_complain<'a>( + bot: &'a Bot, + message_context: &MessageContext, + agent_purpose: AgentPurpose, + response_type: MessageResponseType, + complain_when_purpose_unsupported: bool, +) -> Option { + let agent_info = get_effective_agent_for_purpose( + bot.agent_manager(), + message_context.room_config_context(), + agent_purpose, + ) + .await; + + match agent_info { + Ok(agent_info) => Some(agent_info.instance), + Err(err) => { + let error_message = match err { + AgentForPurposeDeterminationError::Unknown(err_string) => Some(err_string), + AgentForPurposeDeterminationError::NoneConfigured => None, + AgentForPurposeDeterminationError::ConfiguredButMissing(agent_identifier) => Some( + strings::room_config::configures_agent_for_purpose_but_does_not_exist( + &agent_identifier, + agent_purpose, + ), + ), + AgentForPurposeDeterminationError::ConfiguredButLacksSupport(agent_identifier) => { + if complain_when_purpose_unsupported { + Some(strings::room_config::configures_agent_for_purpose_but_agent_does_not_support_it( + &agent_identifier, + agent_purpose, + )) + } else { + None + } + } + }; + + if let Some(error_message) = error_message { + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &error_message, + response_type, + ) + .await; + }; + + None + } + } +} diff --git a/src/controller/utils/mod.rs b/src/controller/utils/mod.rs new file mode 100644 index 0000000..9f493c1 --- /dev/null +++ b/src/controller/utils/mod.rs @@ -0,0 +1,29 @@ +use mxlink::MessageResponseType; + +use crate::{ + entity::{MessageContext, MessagePayload}, + Bot, +}; + +pub mod agent; +pub mod text_to_speech; + +pub async fn get_text_body_or_complain<'a>( + bot: &Bot, + message_context: &'a MessageContext, +) -> Option<&'a str> { + match &message_context.payload() { + MessagePayload::Text(text_message_content) => Some(&text_message_content.body), + _ => { + bot.messaging() + .send_text_markdown_no_fail( + message_context.room(), + "This command only works with text messages.".to_owned(), + MessageResponseType::InThread(message_context.thread_info().clone()), + ) + .await; + + None + } + } +} diff --git a/src/controller/utils/text_to_speech.rs b/src/controller/utils/text_to_speech.rs new file mode 100644 index 0000000..28e74f9 --- /dev/null +++ b/src/controller/utils/text_to_speech.rs @@ -0,0 +1,168 @@ +use mxlink::matrix_sdk::ruma::OwnedEventId; +use mxlink::{MatrixLink, MessageResponseType}; + +use tracing::Instrument; + +use crate::{ + agent::{provider::TextToSpeechParams, AgentInstance, AgentPurpose, ControllerTrait}, + entity::MessageContext, + strings, Bot, +}; + +pub async fn generate_and_send_tts_for_message( + bot: &Bot, + matrix_link: MatrixLink, + message_context: &MessageContext, + response_type: MessageResponseType, + speech_agent: &AgentInstance, + text_message_event_id: &OwnedEventId, + text_content: &str, +) -> bool { + _ = message_context.room().typing_notice(true).await; + + let reaction_event_response = bot + .reacting() + .react_no_fail( + message_context.room(), + text_message_event_id.clone(), + strings::PROGRESS_INDICATOR_EMOJI.to_owned(), + ) + .await; + + let result = do_generate_and_send_tts_for_message( + bot, + matrix_link, + message_context, + response_type, + speech_agent, + text_content, + ) + .await; + + if let Some(reaction_event_response) = reaction_event_response { + let redaction_reason = if result { + strings::text_to_speech::redaction_reason_done() + } else { + strings::text_to_speech::redaction_reason_failed() + }; + + bot.messaging() + .redact_event_no_fail( + message_context.room(), + reaction_event_response.event_id, + Some(redaction_reason.to_owned()), + ) + .await; + } + + result +} + +async fn do_generate_and_send_tts_for_message( + bot: &Bot, + matrix_link: MatrixLink, + message_context: &MessageContext, + response_type: MessageResponseType, + speech_agent: &AgentInstance, + text_content: &str, +) -> bool { + let params = TextToSpeechParams { + speed_override: message_context + .room_config_context() + .text_to_speech_speed_override(), + + voice_override: message_context + .room_config_context() + .text_to_speech_voice_override(), + }; + + let text_content = if let Some(text_content) = text_content.strip_prefix(bot.command_prefix()) { + text_content.trim() + } else { + text_content + }; + + let span = tracing::debug_span!( + "text_to_speech_generation", + agent_id = speech_agent.identifier().as_string() + ); + + let text_to_speech_result = speech_agent + .controller() + .text_to_speech(text_content, params) + .instrument(span) + .await; + + let text_to_speech_result = match text_to_speech_result { + Ok(text_to_speech_result) => text_to_speech_result, + Err(err) => { + tracing::warn!( + "Error in room {} while trying to generate TTS via agent {}: {:?}", + message_context.room_id(), + speech_agent.identifier(), + err, + ); + + bot.messaging() + .send_error_markdown_no_fail( + message_context.room(), + &strings::agent::error_while_serving_purpose( + speech_agent.identifier(), + &AgentPurpose::SpeechToText, + &err, + ), + response_type, + ) + .await; + + return false; + } + }; + + let attachment_body_text = strings::text_to_speech::alternate_body_text(); + + let event_content = matrix_link + .media() + .upload_and_prepare_event_content( + message_context.room(), + &text_to_speech_result.mime_type, + text_to_speech_result.bytes, + &attachment_body_text, + ) + .await; + + let mut event_content = match event_content { + Ok(event_content) => event_content, + Err(err) => { + tracing::error!( + ?err, + "Error in room {} while trying to upload TTS via agent {}", + message_context.room_id(), + speech_agent.identifier(), + ); + + return false; + } + }; + + let result = matrix_link + .messaging() + .send_event( + message_context.room(), + &mut event_content, + response_type.clone(), + ) + .await; + + let Err(err) = result else { + return true; + }; + + tracing::error!( + ?err, + "Error in room {} while trying to send TTS payload", + message_context.room_id(), + ); + + false +} diff --git a/src/conversation/llm/entity.rs b/src/conversation/llm/entity.rs new file mode 100644 index 0000000..5a0fe73 --- /dev/null +++ b/src/conversation/llm/entity.rs @@ -0,0 +1,17 @@ +#[derive(Debug, Clone, PartialEq)] +pub enum Author { + Prompt, + Assistant, + User, +} + +#[derive(Debug, Clone)] +pub struct Message { + pub author: Author, + pub message_text: String, +} + +#[derive(Debug)] +pub struct Conversation { + pub messages: Vec, +} diff --git a/src/conversation/llm/mod.rs b/src/conversation/llm/mod.rs new file mode 100644 index 0000000..8af5c53 --- /dev/null +++ b/src/conversation/llm/mod.rs @@ -0,0 +1,10 @@ +mod entity; +mod tokenization; +mod utils; + +#[cfg(test)] +mod tests; + +pub use entity::*; +pub use tokenization::shorten_messages_list_to_context_size; +pub use utils::*; diff --git a/src/conversation/llm/tests.rs b/src/conversation/llm/tests.rs new file mode 100644 index 0000000..2a1d2fc --- /dev/null +++ b/src/conversation/llm/tests.rs @@ -0,0 +1,84 @@ +use crate::utils::status::create_error_message_text; +use crate::utils::text_to_speech::create_transcribed_message_text; + +use super::*; + +#[test] +fn test_messages_by_the_bot_are_identified_correctly() { + let bot_user_id = "@bot:example.com"; + + let matrix_message = super::super::matrix::MatrixMessage { + sender_id: bot_user_id.to_owned(), + message_type: super::super::matrix::MatrixMessageType::Text, + message_text: "Hello!".to_owned(), + }; + + let llm_message = convert_matrix_message_to_llm_message(&matrix_message, bot_user_id).unwrap(); + + assert_eq!(llm_message.author, Author::Assistant); + assert_eq!(llm_message.message_text, "Hello!"); +} + +#[test] +fn test_notice_messages_by_bot_with_speech_to_text_prefix_are_cleaned_up_and_considered_sent_by_user( +) { + let bot_user_id = "@bot:example.com"; + + let source_message_text = "Hello!"; + let message_text = create_transcribed_message_text(source_message_text); + + assert_ne!(source_message_text, message_text); + + let matrix_message = super::super::matrix::MatrixMessage { + sender_id: bot_user_id.to_owned(), + message_type: super::super::matrix::MatrixMessageType::Notice, + message_text, + }; + + let llm_message = convert_matrix_message_to_llm_message(&matrix_message, bot_user_id).unwrap(); + + assert_eq!(llm_message.author, Author::User); + assert_eq!(llm_message.message_text, source_message_text); +} + +#[test] +fn test_notice_error_messages_by_bot_are_ignored() { + let bot_user_id = "@bot:example.com"; + + let source_message_text = "Some error happened"; + let message_text = create_error_message_text(source_message_text); + + assert_ne!(source_message_text, message_text); + + let matrix_message = super::super::matrix::MatrixMessage { + sender_id: bot_user_id.to_owned(), + message_type: super::super::matrix::MatrixMessageType::Notice, + message_text, + }; + + let llm_message = convert_matrix_message_to_llm_message(&matrix_message, bot_user_id); + + assert!(llm_message.is_none()); +} + +#[test] +fn test_other_notice_messages_by_the_bot_are_ignored() { + // Also see `test_notice_error_messages_by_bot_are_ignored()`. + // That one passes accidentally, because we ignore all messages by the bot that are notices + // (except for speech-to-text-created transcriptions - see `test_notice_messages_by_bot_with_speech_to_text_prefix_are_cleaned_up_and_considered_sent_by_user()`). + // This test is to make sure that we don't accidentally start accepting other notice messages. + + let bot_user_id = "@bot:example.com"; + + let message_text = "Something something"; + + let matrix_message = super::super::matrix::MatrixMessage { + sender_id: bot_user_id.to_owned(), + message_type: super::super::matrix::MatrixMessageType::Notice, + message_text: message_text.to_owned(), + }; + + let llm_message = convert_matrix_message_to_llm_message(&matrix_message, bot_user_id); + + assert!(llm_message.is_none()); +} diff --git a/src/conversation/llm/tokenization.rs b/src/conversation/llm/tokenization.rs new file mode 100644 index 0000000..28330f1 --- /dev/null +++ b/src/conversation/llm/tokenization.rs @@ -0,0 +1,287 @@ +use tiktoken_rs::get_bpe_from_tokenizer; +use tiktoken_rs::tokenizer; +use tiktoken_rs::CoreBPE; + +use super::{Author, Message}; + +fn get_bpe_for_model(model: &str) -> CoreBPE { + let tokenizer = tokenizer::get_tokenizer(model) + .or_else(|| tokenizer::get_tokenizer("gpt-4")) + .unwrap(); + + get_bpe_from_tokenizer(tokenizer).unwrap() +} + +pub fn shorten_messages_list_to_context_size( + model: &str, + prompt_message: &Option, + mut messages: Vec, + max_response_tokens: u32, + max_context_tokens: u32, +) -> Vec { + // Loading the tokenization data is an expensive process, so + // se construct the BPE instance once and then use it for all messages. + let bpe = get_bpe_for_model(model); + + // We want to retain the prompt in all cases, so we always count it first. + // We also always reserve enough tokens for the maximum response we expect. + let mut current_context_length: u32 = if let Some(prompt_message) = prompt_message { + calculate_token_size_for_message(&bpe, model, prompt_message) + max_response_tokens + } else { + 0 + }; + + messages.reverse(); + + let mut messages_to_keep: Vec = Vec::new(); + + for message in messages { + let tokens_for_message = calculate_token_size_for_message(&bpe, model, &message); + + if current_context_length + tokens_for_message > max_context_tokens { + break; + } + + current_context_length += tokens_for_message; + + messages_to_keep.push(message); + } + + messages_to_keep.reverse(); + + messages_to_keep +} + +/// Calculate the token size of a message for a given model, with a preloaded CoreBPE object. +/// Related to `calculate_token_size_for_model_message`. +fn calculate_token_size_for_message(bpe: &CoreBPE, model: &str, message: &Message) -> u32 { + let (tokens_per_message, tokens_per_name) = if model.starts_with("gpt-3.5") { + ( + 4, // every message follows {role/name}\n{content}\n + -1, // if there's a name, the role is omitted + ) + } else { + (3, 1) + }; + + let role_length = match message.author { + Author::Assistant => bpe.encode_with_special_tokens("assistant").len() as i32, + Author::User => bpe.encode_with_special_tokens("user").len() as i32, + Author::Prompt => bpe.encode_with_special_tokens("system").len() as i32, + }; + + let text_length = bpe.encode_with_special_tokens(&message.message_text).len() as i32; + + (text_length + role_length + tokens_per_message + tokens_per_name) as u32 +} + +pub mod test { + #[test] + fn message_size_counting_works() { + let model = "gpt-4"; + + let bpe = super::get_bpe_for_model(model); + + let message = super::Message { + author: super::Author::User, + message_text: "Hello there!".to_owned(), + }; + + let tokens = super::calculate_token_size_for_message(&bpe, model, &message); + + assert_eq!(8, tokens); + } + + #[test] + fn shortening_works_with_english() { + let model = "gpt-4"; + + let bpe = super::get_bpe_for_model(model); + + let max_response_tokens: u32 = 5; + + let prompt = super::Message { + author: super::Author::Prompt, + message_text: "You are a bot!".to_owned(), + }; + let prompt_length = 10; + + assert_eq!( + prompt_length, + super::calculate_token_size_for_message(&bpe, model, &prompt) + ); + + let mut conversation_messages = Vec::new(); + + let first = super::Message { + author: super::Author::User, + message_text: "Hello there!".to_owned(), + }; + let first_length = 8; + + assert_eq!( + first_length, + super::calculate_token_size_for_message(&bpe, model, &first) + ); + + conversation_messages.push(first); + + let second = super::Message { + author: super::Author::Assistant, + message_text: "Hello!".to_owned(), + }; + let second_length = 7; + + assert_eq!( + second_length, + super::calculate_token_size_for_message(&bpe, model, &second) + ); + + conversation_messages.push(second); + + let third = super::Message { + author: super::Author::User, + message_text: "This is the 3rd message in this conversation. It shall be preserved." + .to_owned(), + }; + let third_length = 21; + + assert_eq!( + third_length, + super::calculate_token_size_for_message(&bpe, model, &third) + ); + + conversation_messages.push(third.clone()); + + let forth = super::Message { + author: super::Author::Assistant, + message_text: "This is yet another message that shall be preserved.".to_owned(), + }; + let forth_length = 15; + + assert_eq!( + forth_length, + super::calculate_token_size_for_message(&bpe, model, &forth) + ); + + conversation_messages.push(forth.clone()); + + assert_eq!(4, conversation_messages.len()); + + let new_conversation_messages = super::shorten_messages_list_to_context_size( + model, + &Some(prompt), + conversation_messages, + max_response_tokens, + prompt_length + max_response_tokens + forth_length + third_length, + ); + + assert_eq!(2, new_conversation_messages.len()); + + assert_eq!( + new_conversation_messages.first().unwrap().message_text, + third.message_text + ); + + assert_eq!( + new_conversation_messages.last().unwrap().message_text, + forth.message_text + ); + } + + #[test] + fn shortening_works_with_japanese() { + let model = "gpt-4"; + + let bpe = super::get_bpe_for_model(model); + + let max_response_tokens: u32 = 5; + + let prompt = super::Message { + author: super::Author::User, + message_text: "あãĒたはボットです。".to_owned(), + }; + let prompt_length = 14; + + assert_eq!( + prompt_length, + super::calculate_token_size_for_message(&bpe, model, &prompt) + ); + + let mut conversation_messages = Vec::new(); + + let first = super::Message { + author: super::Author::User, + message_text: "こんãĢãĄã¯!".to_owned(), + }; + let first_length = 7; + + assert_eq!( + first_length, + super::calculate_token_size_for_message(&bpe, model, &first) + ); + + conversation_messages.push(first); + + let second = super::Message { + author: super::Author::Assistant, + message_text: "こんãĢãĄã¯ã€‚ä슿—Ĩは元気ですか。".to_owned(), + }; + let second_length = 15; + + assert_eq!( + second_length, + super::calculate_token_size_for_message(&bpe, model, &second) + ); + + conversation_messages.push(second); + + let third = super::Message { + author: super::Author::User, + message_text: "これはįŦŦ3ãŽãƒĄãƒƒã‚ģãƒŧジãĒぎで、äŋå­˜ã•れぞす。".to_owned(), + }; + let third_length = 22; + + assert_eq!( + third_length, + super::calculate_token_size_for_message(&bpe, model, &third) + ); + + conversation_messages.push(third.clone()); + + let forth = super::Message { + author: super::Author::Assistant, + message_text: "これはもう一つぎäŋå­˜ã•ã‚Œãžã™ãƒĄãƒƒã‚ģãƒŧジです。".to_owned(), + }; + let forth_length = 21; + + assert_eq!( + forth_length, + super::calculate_token_size_for_message(&bpe, model, &forth) + ); + + conversation_messages.push(forth.clone()); + + assert_eq!(4, conversation_messages.len()); + + let new_conversation_messages = super::shorten_messages_list_to_context_size( + model, + &Some(prompt), + conversation_messages, + max_response_tokens, + prompt_length + max_response_tokens + forth_length + third_length, + ); + + assert_eq!(2, new_conversation_messages.len()); + + assert_eq!( + new_conversation_messages.first().unwrap().message_text, + third.message_text + ); + + assert_eq!( + new_conversation_messages.last().unwrap().message_text, + forth.message_text + ); + } +} diff --git a/src/conversation/llm/utils.rs b/src/conversation/llm/utils.rs new file mode 100644 index 0000000..1071665 --- /dev/null +++ b/src/conversation/llm/utils.rs @@ -0,0 +1,51 @@ +use super::{Author, Message}; +use crate::conversation::matrix::{MatrixMessage, MatrixMessageType}; +use crate::utils::text_to_speech as text_to_speech_utils; + +pub fn convert_matrix_message_to_llm_message( + matrix_message: &MatrixMessage, + bot_user_id: &str, +) -> Option { + if matrix_message.sender_id == bot_user_id { + return convert_bot_message(matrix_message); + } + + convert_user_message(matrix_message) +} + +fn convert_bot_message(matrix_message: &MatrixMessage) -> Option { + match matrix_message.message_type { + MatrixMessageType::Text => convert_bot_text_message(&matrix_message.message_text), + MatrixMessageType::Notice => convert_bot_notice_message(&matrix_message.message_text), + } +} + +fn convert_bot_text_message(text: &str) -> Option { + Some(Message { + author: Author::Assistant, + message_text: text.to_owned(), + }) +} + +fn convert_bot_notice_message(text: &str) -> Option { + // Notice messages sent by the bot are usually transcriptions of previous messages sent by the user. + // Such transcriptions are prefixed with an emoji and blockquoted. + // If we find a notice that doesn't match this pattern, we skip it. + + if let Some(text) = text_to_speech_utils::parse_transcribed_message_text(text) { + // This is a transcription message. We remove the prefix and consider it as a message sent by the user. + return Some(Message { + author: Author::User, + message_text: text.to_owned(), + }); + } + + None +} + +fn convert_user_message(matrix_message: &MatrixMessage) -> Option { + Some(Message { + author: Author::User, + message_text: matrix_message.message_text.clone(), + }) +} diff --git a/src/conversation/matrix/entity.rs b/src/conversation/matrix/entity.rs new file mode 100644 index 0000000..bbb41bc --- /dev/null +++ b/src/conversation/matrix/entity.rs @@ -0,0 +1,38 @@ +use regex::Regex; + +#[derive(Clone)] +pub struct MatrixMessage { + pub sender_id: String, + pub message_type: MatrixMessageType, + pub message_text: String, +} + +#[derive(Clone)] +pub enum MatrixMessageType { + Text, + Notice, +} + +#[derive(Default, Clone)] +pub struct MatrixMessageProcessingParams { + pub(crate) bot_user_id: String, + pub(crate) allowed_users: Vec, + + // If non-empty, these prefixes will be stripped when processing the message + pub(crate) first_message_stripped_prefixes: Vec, +} + +impl MatrixMessageProcessingParams { + pub fn new(bot_user_id: String, allowed_users: Vec) -> Self { + Self { + bot_user_id, + allowed_users, + ..Default::default() + } + } + + pub fn with_first_message_stripped_prefixes(mut self, value: Vec) -> Self { + self.first_message_stripped_prefixes = value; + self + } +} diff --git a/src/conversation/matrix/mod.rs b/src/conversation/matrix/mod.rs new file mode 100644 index 0000000..10a930f --- /dev/null +++ b/src/conversation/matrix/mod.rs @@ -0,0 +1,11 @@ +mod entity; +mod room_display_name_fetcher; +mod room_event_fetcher; +mod utils; + +pub(crate) use room_display_name_fetcher::RoomDisplayNameFetcher; +pub(crate) use room_event_fetcher::RoomEventFetcher; + +pub(crate) use entity::{MatrixMessage, MatrixMessageProcessingParams, MatrixMessageType}; + +pub(crate) use utils::*; diff --git a/src/conversation/matrix/room_display_name_fetcher.rs b/src/conversation/matrix/room_display_name_fetcher.rs new file mode 100644 index 0000000..b13bf02 --- /dev/null +++ b/src/conversation/matrix/room_display_name_fetcher.rs @@ -0,0 +1,56 @@ +use mxlink::matrix_sdk::ruma::OwnedRoomId; +use mxlink::matrix_sdk::Room; + +use mxlink::MatrixLink; +use quick_cache::sync::Cache; + +pub struct RoomDisplayNameFetcher { + matrix_link: MatrixLink, + lru_cache: Option>>, +} + +impl RoomDisplayNameFetcher { + pub fn new(matrix_link: MatrixLink, lru_cache_size: Option) -> Self { + let lru_cache = lru_cache_size.map(Cache::new); + + Self { + matrix_link, + lru_cache, + } + } + + #[tracing::instrument(skip_all, fields(room_id = room.room_id().as_str()))] + pub async fn own_display_name_in_room( + &self, + room: &Room, + ) -> mxlink::matrix_sdk::Result> { + let Some(lru_cache) = &self.lru_cache else { + return self.get_uncached_value(room).await; + }; + + let guard = lru_cache.get_value_or_guard_async(room.room_id()).await; + + match guard { + Ok(value) => { + tracing::debug!("Returning existing cached display name.."); + return Ok(value); + } + Err(guard) => { + let value = self.get_uncached_value(room).await?; + + let _ = guard.insert(value.clone()); + + tracing::debug!("Returning now-cached display name"); + + return Ok(value); + } + } + } + + async fn get_uncached_value(&self, room: &Room) -> mxlink::matrix_sdk::Result> { + self.matrix_link + .rooms() + .own_display_name_in_room(room) + .await + } +} diff --git a/src/conversation/matrix/room_event_fetcher.rs b/src/conversation/matrix/room_event_fetcher.rs new file mode 100644 index 0000000..b3b0dde --- /dev/null +++ b/src/conversation/matrix/room_event_fetcher.rs @@ -0,0 +1,46 @@ +use mxlink::matrix_sdk::deserialized_responses::TimelineEvent; +use mxlink::matrix_sdk::ruma::OwnedEventId; +use mxlink::matrix_sdk::Room; + +use quick_cache::sync::Cache; + +pub struct RoomEventFetcher { + lru_cache: Option>, +} + +impl RoomEventFetcher { + pub fn new(lru_cache_size: Option) -> Self { + let lru_cache = lru_cache_size.map(Cache::new); + + Self { lru_cache } + } + + #[tracing::instrument(skip(self), fields(room_id = room.room_id().as_str(), event_id = event_id.as_str()))] + pub async fn fetch_event_in_room( + &self, + event_id: &OwnedEventId, + room: &Room, + ) -> mxlink::matrix_sdk::Result { + let Some(lru_cache) = &self.lru_cache else { + return room.event(event_id).await; + }; + + let guard = lru_cache.get_value_or_guard_async(event_id).await; + + match guard { + Ok(config) => { + tracing::trace!("Returning existing cached event.."); + return Ok(config); + } + Err(guard) => { + let event = room.event(event_id).await?; + + let _ = guard.insert(event.clone()); + + tracing::trace!("Returning now-cached event"); + + return Ok(event); + } + } + } +} diff --git a/src/conversation/matrix/utils/mod.rs b/src/conversation/matrix/utils/mod.rs new file mode 100644 index 0000000..8c2c3b2 --- /dev/null +++ b/src/conversation/matrix/utils/mod.rs @@ -0,0 +1,284 @@ +#[cfg(test)] +mod tests; + +use std::sync::Arc; + +use mxlink::matrix_sdk::ruma::{OwnedEventId, OwnedUserId}; +use mxlink::matrix_sdk::{ + ruma::events::{ + room::message::{ + MessageType, OriginalSyncRoomMessageEvent, Relation, RoomMessageEventContent, + }, + AnyMessageLikeEvent, AnyMessageLikeEventContent, AnyTimelineEvent, MessageLikeEvent, + }, + Room, +}; +use mxlink::{MatrixLink, ThreadInfo}; + +use super::{MatrixMessage, MatrixMessageProcessingParams, MatrixMessageType, RoomEventFetcher}; +use crate::entity::{MessagePayload, ThreadContext, ThreadContextFirstMessage}; + +pub async fn get_matrix_messages_in_thread( + matrix_link: MatrixLink, + room: &Room, + thread_id: OwnedEventId, +) -> Result, mxlink::matrix_sdk::Error> { + let messages_native = matrix_link.threads().get_messages(room, thread_id).await?; + + let mut messages: Vec = Vec::new(); + + for matrix_native_message in messages_native { + let Some(message) = convert_matrix_native_event_to_matrix_message(&matrix_native_message) + else { + continue; + }; + + messages.push(message); + } + + Ok(messages) +} + +pub async fn process_matrix_messages_in_thread( + messages: &[MatrixMessage], + params: &MatrixMessageProcessingParams, +) -> Vec { + let mut messages_filtered: Vec = Vec::new(); + + for (i, message) in messages.iter().enumerate() { + if !is_message_from_allowed_sender(message, ¶ms.bot_user_id, ¶ms.allowed_users) { + continue; + } + + let mut message = message.clone(); + + if i == 0 && !params.first_message_stripped_prefixes.is_empty() { + let mut message_text = message.message_text.clone(); + + for prefix in ¶ms.first_message_stripped_prefixes { + if let Some(message_text_stripped) = message_text.strip_prefix(prefix) { + message_text = message_text_stripped.to_owned(); + } + } + + message.message_text = message_text.trim().to_owned(); + } + + messages_filtered.push(message); + } + + messages_filtered +} + +fn is_message_from_allowed_sender( + matrix_message: &MatrixMessage, + bot_user_id: &str, + allowed_users: &[regex::Regex], +) -> bool { + if matrix_message.sender_id == bot_user_id { + return true; + } + + if mxidwc::match_user_id(&matrix_message.sender_id, allowed_users) { + return true; + } + + false +} + +pub fn convert_matrix_native_event_to_matrix_message( + matrix_native_event: &AnyMessageLikeEvent, +) -> Option { + let Some(content) = matrix_native_event.original_content() else { + // Redacted message + return None; + }; + + let AnyMessageLikeEventContent::RoomMessage(room_message) = content else { + // Some state event, etc. + return None; + }; + + let (text, is_notice) = match &room_message.msgtype { + MessageType::Text(text_content) => (text_content.body.clone(), false), + MessageType::Notice(notice_content) => (notice_content.body.clone(), true), + _ => return None, + }; + + Some(MatrixMessage { + sender_id: matrix_native_event.sender().to_string(), + message_type: if is_notice { + MatrixMessageType::Notice + } else { + MatrixMessageType::Text + }, + message_text: text, + }) +} + +/// Determines the thread context (relationship within the thread + first thread message payload) for an incoming (new) room event. +/// This room event is assumed to be the "newest message" in the thread (or a top-level message). +/// If the given event is a regular reply (not a thread reply), this function will return `None`. +/// If the given event is a top-level message, this function will consider this event as the start of the thread. +/// If the given event is a thread reply, this function will inspect the thread root event and will return the thread context. +/// If the thread root event is not found, is redacted, or is of some unsupported MessagePayload type, this function will return `None`. +pub async fn determine_thread_context_for_room_event( + bot_user_id: &OwnedUserId, + room: &Room, + current_event: &OriginalSyncRoomMessageEvent, + current_event_payload: &MessagePayload, + event_fetcher: &Arc, +) -> anyhow::Result> { + let Some(relation) = ¤t_event.content.relates_to else { + // This is a top-level message. We consider it the start of the thread. + let thread_info = ThreadInfo::new( + current_event.event_id.clone(), + current_event.event_id.clone(), + ); + + let is_mentioning_bot = is_event_mentioning_bot(¤t_event.content, bot_user_id); + + return Ok(Some(ThreadContext { + info: thread_info, + first_message: ThreadContextFirstMessage { + is_mentioning_bot, + payload: current_event_payload.clone(), + }, + })); + }; + + let Relation::Thread(thread) = relation else { + // This is a reply or a replacement, etc. It's not a thread. + // We don't care about this. + return Ok(None); + }; + + let thread_info = ThreadInfo::new(thread.event_id.clone(), current_event.event_id.clone()); + + let start_time = std::time::Instant::now(); + + let thread_start_timeline_event = event_fetcher + .fetch_event_in_room(&thread.event_id, room) + .await; + + let thread_start_timeline_event = match thread_start_timeline_event { + Ok(value) => value, + Err(err) => { + return Err(anyhow::format_err!( + "Failed to fetch thread start event {}: {:?}", + thread.event_id, + err + )); + } + }; + + let duration = start_time.elapsed(); + + tracing::trace!( + thread_id = thread.event_id.as_str(), + duration = ?duration, + "Fetched thread start event" + ); + + let thread_start_timeline_event_deserialized = + match thread_start_timeline_event.event.deserialize() { + Ok(value) => value, + Err(err) => { + return Err(anyhow::format_err!( + "Failed to deserialize thread start event {}: {:?}", + thread.event_id, + err + )); + } + }; + + let AnyTimelineEvent::MessageLike(thread_start_message_like_event) = + thread_start_timeline_event_deserialized + else { + tracing::trace!( + "Ignoring non-MessageLike thread start event: {:?}", + thread_start_timeline_event_deserialized + ); + return Ok(None); + }; + + let (thread_start_message_is_mentioning_bot, thread_start_message_payload) = + match thread_start_message_like_event { + AnyMessageLikeEvent::RoomEncrypted(room_message) => { + tracing::warn!( + "Could not inspect thread start event {} because it failed to decrypt: {:?}", + thread.event_id.clone(), + room_message + ); + + // There's no way to know and it doesn't matter anyway. + let is_mentioning_bot = false; + + ( + is_mentioning_bot, + MessagePayload::Encrypted(thread_info.clone()), + ) + } + AnyMessageLikeEvent::RoomMessage(room_message) => { + if let MessageLikeEvent::Original(room_message_original) = room_message { + let room_message_payload: Result = + room_message_original.content.msgtype.clone().try_into(); + + let Ok(room_message_payload) = room_message_payload else { + tracing::debug!( + msg_type = room_message_original.content.msgtype(), + "Ignoring thread start message of unknown type", + ); + return Ok(None); + }; + + let is_mentioning_bot = + is_event_mentioning_bot(&room_message_original.content, bot_user_id); + + (is_mentioning_bot, room_message_payload) + } else { + tracing::error!("Ignoring thread start message which appears to be redacted"); + + return Ok(None); + } + } + other => { + tracing::trace!( + "Ignoring unknown MessageLike thread start event: {:?}", + other + ); + return Ok(None); + } + }; + + Ok(Some(ThreadContext { + info: thread_info, + first_message: ThreadContextFirstMessage { + is_mentioning_bot: thread_start_message_is_mentioning_bot, + payload: thread_start_message_payload, + }, + })) +} + +fn is_event_mentioning_bot( + event_content: &RoomMessageEventContent, + bot_user_id: &OwnedUserId, +) -> bool { + if let Some(mentions) = &event_content.mentions { + mentions + .user_ids + .iter() + .any(|user_id| user_id == bot_user_id) + } else { + // For compatibility with clients that do not support the new Mentions specification + // (see https://spec.matrix.org/latest/client-server-api/#user-and-room-mentions), + // we also do string matching here. + // + // It may be even better to match not only against the MXID, but also against the bot's + // room-specific display name. + // + // We may consider dropping this string-matching behavior altogether in the future, + // so improving this compatibility block is not a high priority. + event_content.body().contains(bot_user_id.as_str()) + } +} diff --git a/src/conversation/matrix/utils/tests.rs b/src/conversation/matrix/utils/tests.rs new file mode 100644 index 0000000..f7ede76 --- /dev/null +++ b/src/conversation/matrix/utils/tests.rs @@ -0,0 +1,218 @@ +use crate::conversation::matrix::{ + MatrixMessage, MatrixMessageProcessingParams, MatrixMessageType, +}; + +#[test] +fn is_message_from_allowed_sender() { + let bot_user_id = "@bot:example.com"; + let allowed_user_id = "@user.someone:example.com"; + let unallowed_user_id = "@another:example.com"; + + let bot_message = MatrixMessage { + sender_id: bot_user_id.to_owned(), + message_type: MatrixMessageType::Text, + message_text: "Hello!".to_owned(), + }; + + let allowed_user_message = MatrixMessage { + sender_id: allowed_user_id.to_owned(), + message_type: MatrixMessageType::Text, + message_text: "Hello!".to_owned(), + }; + + let unallowed_user_message = MatrixMessage { + sender_id: unallowed_user_id.to_owned(), + message_type: MatrixMessageType::Text, + message_text: "Hello!".to_owned(), + }; + + let parsed_regex = match mxidwc::parse_pattern("@user.*:example.com") { + Ok(value) => value, + Err(err) => { + panic!("Error parsing regex: {}", err); + } + }; + + let allowed_users = vec![parsed_regex]; + + assert!( + super::is_message_from_allowed_sender(&bot_message, bot_user_id, &vec![]), + "Bot message should be allowed" + ); + + assert!( + super::is_message_from_allowed_sender(&allowed_user_message, bot_user_id, &allowed_users), + "Allowed user message should be allowed" + ); + + assert!( + !super::is_message_from_allowed_sender( + &unallowed_user_message, + bot_user_id, + &allowed_users + ), + "Unallowed user message should be ignored" + ); +} + +#[tokio::test] +async fn process_matrix_messages_in_thread() { + let bot_user_id = "@bot:example.com"; + let allowed_user_id = "@user.someone:example.com"; + let unallowed_user_id = "@another:example.com"; + + let allowed_user_message = MatrixMessage { + sender_id: allowed_user_id.to_owned(), + message_type: MatrixMessageType::Text, + message_text: "Hello from the user!".to_owned(), + }; + + let allowed_user_message_with_prefix = MatrixMessage { + sender_id: allowed_user_id.to_owned(), + message_type: MatrixMessageType::Text, + message_text: "!bai Hello from the user!".to_owned(), + }; + + let allowed_user_message_with_prefix_no_space = MatrixMessage { + sender_id: allowed_user_id.to_owned(), + message_type: MatrixMessageType::Text, + message_text: "!baiHello from the user!".to_owned(), + }; + + let allowed_user_message_with_prefix_full_width_space = MatrixMessage { + sender_id: allowed_user_id.to_owned(), + message_type: MatrixMessageType::Text, + message_text: "!bai Hello from the user!".to_owned(), + }; + + let bot_message = MatrixMessage { + sender_id: bot_user_id.to_owned(), + message_type: MatrixMessageType::Text, + message_text: "Hello from the bot!".to_owned(), + }; + + let unallowed_user_message = MatrixMessage { + sender_id: unallowed_user_id.to_owned(), + message_type: MatrixMessageType::Text, + message_text: "Hello from an unallowed user!".to_owned(), + }; + + let parsed_regex = match mxidwc::parse_pattern("@user.*:example.com") { + Ok(value) => value, + Err(err) => { + panic!("Error parsing regex: {}", err); + } + }; + + let allowed_users = vec![parsed_regex]; + + let message_processing_params_basic = + super::MatrixMessageProcessingParams::new(bot_user_id.to_owned(), allowed_users.clone()); + + let message_processing_params_with_prefix_stripping = + super::MatrixMessageProcessingParams::new(bot_user_id.to_owned(), allowed_users.clone()) + .with_first_message_stripped_prefixes(vec!["!bai".to_owned()]); + + struct TestCase { + name: String, + messages: Vec, + message_processing_params: MatrixMessageProcessingParams, + expected_message_texts: Vec, + } + + let test_cases = vec![ + TestCase { + name: "Messages by unallowed users are ignored".to_owned(), + messages: vec![ + allowed_user_message.clone(), + bot_message.clone(), + unallowed_user_message.clone(), + ], + message_processing_params: message_processing_params_basic.clone(), + expected_message_texts: vec![ + "Hello from the user!".to_owned(), + "Hello from the bot!".to_owned(), + ], + }, + TestCase { + name: "The first message with a prefix gets stripped if params configure it (regular space)".to_owned(), + messages: vec![ + allowed_user_message_with_prefix.clone(), + bot_message.clone(), + allowed_user_message_with_prefix.clone(), + unallowed_user_message.clone(), + ], + message_processing_params: message_processing_params_with_prefix_stripping.clone(), + expected_message_texts: vec![ + "Hello from the user!".to_owned(), + "Hello from the bot!".to_owned(), + "!bai Hello from the user!".to_owned(), + ], + }, + TestCase { + name: "The first message with a prefix gets stripped if params configure it (no space)".to_owned(), + messages: vec![ + allowed_user_message_with_prefix_no_space.clone(), + bot_message.clone(), + allowed_user_message_with_prefix_no_space.clone(), + unallowed_user_message.clone(), + ], + message_processing_params: message_processing_params_with_prefix_stripping.clone(), + expected_message_texts: vec![ + "Hello from the user!".to_owned(), + "Hello from the bot!".to_owned(), + "!baiHello from the user!".to_owned(), + ], + }, + TestCase { + name: "The first message with a prefix gets stripped if params configure it (full-width-space)".to_owned(), + messages: vec![ + allowed_user_message_with_prefix_full_width_space.clone(), + bot_message.clone(), + allowed_user_message_with_prefix_full_width_space.clone(), + unallowed_user_message.clone(), + ], + message_processing_params: message_processing_params_with_prefix_stripping.clone(), + expected_message_texts: vec![ + "Hello from the user!".to_owned(), + "Hello from the bot!".to_owned(), + "!bai Hello from the user!".to_owned(), + ], + }, + TestCase { + name: "The first message with a prefix remains untouched if params leave it alone" + .to_owned(), + messages: vec![ + allowed_user_message_with_prefix.clone(), + bot_message.clone(), + allowed_user_message_with_prefix.clone(), + unallowed_user_message.clone(), + ], + message_processing_params: message_processing_params_basic.clone(), + expected_message_texts: vec![ + "!bai Hello from the user!".to_owned(), + "Hello from the bot!".to_owned(), + "!bai Hello from the user!".to_owned(), + ], + }, + ]; + + for test_case in test_cases { + let processed_messages = super::process_matrix_messages_in_thread( + &test_case.messages, + &test_case.message_processing_params, + ) + .await; + + let processed_message_texts = processed_messages + .iter() + .map(|message| message.message_text.clone()) + .collect::>(); + + assert_eq!( + processed_message_texts, test_case.expected_message_texts, + "Test case {} failed", + test_case.name, + ); + } +} diff --git a/src/conversation/matrix_llm_bridge.rs b/src/conversation/matrix_llm_bridge.rs new file mode 100644 index 0000000..4528190 --- /dev/null +++ b/src/conversation/matrix_llm_bridge.rs @@ -0,0 +1,34 @@ +use mxlink::matrix_sdk::ruma::OwnedEventId; +use mxlink::MatrixLink; + +use super::llm::{convert_matrix_message_to_llm_message, Conversation, Message}; +use super::matrix::{ + get_matrix_messages_in_thread, process_matrix_messages_in_thread, MatrixMessageProcessingParams, +}; + +pub async fn create_llm_conversation_for_matrix_thread( + matrix_link: MatrixLink, + room: &mxlink::matrix_sdk::Room, + thread_id: OwnedEventId, + params: &MatrixMessageProcessingParams, +) -> Result { + let messages = get_matrix_messages_in_thread(matrix_link, room, thread_id).await?; + + let messages_filtered = process_matrix_messages_in_thread(&messages, params).await; + + let mut llm_messages: Vec = Vec::new(); + + for matrix_message in messages_filtered { + let Some(llm_message) = + convert_matrix_message_to_llm_message(&matrix_message, ¶ms.bot_user_id) + else { + continue; + }; + + llm_messages.push(llm_message); + } + + Ok(Conversation { + messages: llm_messages, + }) +} diff --git a/src/conversation/mod.rs b/src/conversation/mod.rs new file mode 100644 index 0000000..9d02ad3 --- /dev/null +++ b/src/conversation/mod.rs @@ -0,0 +1,5 @@ +pub(crate) mod llm; +pub(crate) mod matrix; +mod matrix_llm_bridge; + +pub(crate) use matrix_llm_bridge::create_llm_conversation_for_matrix_thread; diff --git a/src/entity/catch_up_marker/delayed_catch_up_marker_manager.rs b/src/entity/catch_up_marker/delayed_catch_up_marker_manager.rs new file mode 100644 index 0000000..5b0e78d --- /dev/null +++ b/src/entity/catch_up_marker/delayed_catch_up_marker_manager.rs @@ -0,0 +1,181 @@ +use std::sync::Arc; + +use tokio::sync::Mutex; +use tokio::time::Duration; + +use mxlink::helpers::account_data_config::ConfigError; + +use super::CatchUpMarkerManager; + +/// A service that records roughly until when we're caught up on processing events. +/// Roughly, because we account for potential federation delay and we don't persist the marker too often. +/// +/// If the matrix-sdk's state-store is kept intact, we (usually) won't be given the same event twice. +/// In such a happy path, we don't need to keep track of anything and there's no problem. +/// +/// If the state-store is lost (a very rare, but possible event), we can recover our encryption keys, etc., +/// but the Matrix SDK would try to feed us the same events again. +/// Responding to many old events again is annoying to users and can be a huge waste of resources. +/// +/// In order to handle state-store-loss better, we need to record until when we're caught up in storage that won't get lost (such as account data for the user). +/// Because state-store-loss is a very rare event, we don't need to be very exact about the specific timestamp we're caught up to. +/// In fact, being behind is necessary, to allow for federation delay (see `federation_delay_tolerance_duration`). +pub struct DelayedCatchUpMarkerManager { + catch_up_marker_manager: Arc>, + + /// `persist_interval_duration` affects how often we persist the catch-up marker to Account Data + /// A too small value means there's needless overhead. + /// The downside to a larger interval value (and a larger federation delay tolerance value) is that that a state-store loss will mean that + /// we will reprocess some of the same events. + /// Since this is a very rare event and the downside is not so bad, a large value is recommended. + persist_interval_duration: Duration, + + /// `federation_delay_tolerance_duration` affects what federation delay we will tolerate. + /// A larger delay than this may mean we ignore events that are actually new to us. + /// This is necessary because the timestamp given to us (see `catch_up()`) is based on the "origin server" timestamp. + /// If federation is slow, we may actually receive old events later on - they'd still be new to us, + /// but we may ignore them if we've marked this "origin server timestamp" value as "caught up". + federation_delay_tolerance_duration: Duration, + + /// Holds the timestamp to use for updating the catch-up marker's `caught_up_until_event_origin_server_ts_millis`. + /// A value of `0` is used to indicate that no update is scheduled and the next iteration should skip updating the marker. + next_catch_up_marker_event_origin_server_ts_millis: Arc>, +} + +impl DelayedCatchUpMarkerManager { + pub fn new( + catch_up_marker_manager: CatchUpMarkerManager, + persist_interval_duration: Duration, + federation_delay_tolerance_duration: Duration, + ) -> Self { + let next_catch_up_marker_event_origin_server_ts_millis = + Arc::new(tokio::sync::Mutex::new(0)); + + let catch_up_marker_manager = Arc::new(Mutex::new(catch_up_marker_manager)); + + Self { + catch_up_marker_manager, + persist_interval_duration, + federation_delay_tolerance_duration, + + next_catch_up_marker_event_origin_server_ts_millis, + } + } + + #[tracing::instrument(name = "catch_up", skip(self))] + pub async fn catch_up(&self, event_origin_server_ts_millis: i64) { + tracing::trace!("Locking to catch-up.."); + + let mut next_catch_up_marker_event_origin_server_ts_millis_guard = self + .next_catch_up_marker_event_origin_server_ts_millis + .lock() + .await; + + if *next_catch_up_marker_event_origin_server_ts_millis_guard > event_origin_server_ts_millis + { + tracing::trace!( + ?next_catch_up_marker_event_origin_server_ts_millis_guard, + "Already have a more recent timestamp scheduled", + ); + return; + } + + *next_catch_up_marker_event_origin_server_ts_millis_guard = event_origin_server_ts_millis; + + tracing::info!("Configured catch-up timestamp for the next update"); + } + + /// Tells if we're caught up until the given timestamp. + /// + /// This intentionally uses the latest (cached) data stored in catch_up_marker_manager (Account Data), not the `next_catch_up_marker_event_origin_server_ts_millis` value. + /// `next_catch_up_marker_event_origin_server_ts_millis` is used for scheduling the next update only. + /// The actual timestamp that will get persisted durign the update will actually be adjusted by `federation_delay_tolerance_duration`, + /// so comparing against `next_catch_up_marker_event_origin_server_ts_millis` in its raw form would be incorrect. + #[tracing::instrument(name = "is_caught_up", skip(self))] + pub(crate) async fn is_caught_up( + &self, + event_origin_ts_millis: i64, + ) -> Result { + tracing::trace!("Locking to check if caught up.."); + + let mut manager = self.catch_up_marker_manager.lock().await; + + let marker = manager.get_or_create().await?; + + let is_caught_up = + marker.caught_up_until_event_origin_server_ts_millis >= event_origin_ts_millis; + + tracing::debug!( + ?is_caught_up, + ?marker.caught_up_until_event_origin_server_ts_millis, + "Determined caught-up status" + ); + + Ok(is_caught_up) + } + + pub async fn start(&self) { + let inner = Arc::clone(&self.catch_up_marker_manager); + let persist_interval_duration = self.persist_interval_duration; + let federation_delay_tolerance = self.federation_delay_tolerance_duration; + let next_catch_up_marker_event_origin_server_ts_millis = + Arc::clone(&self.next_catch_up_marker_event_origin_server_ts_millis); + + tokio::spawn(async move { + let mut interval = tokio::time::interval(persist_interval_duration); + + loop { + interval.tick().await; + + tracing::trace!("Catch-up manager doing work.."); + + let mut next_catch_up_marker_event_origin_server_ts_millis_guard = + next_catch_up_marker_event_origin_server_ts_millis + .lock() + .await; + + if *next_catch_up_marker_event_origin_server_ts_millis_guard == 0 { + tracing::trace!("No scheduled updates to the catch-up marker"); + continue; + } + + let mut manager = inner.lock().await; + + let marker = manager.get_or_create().await; + let mut marker = match marker { + Ok(marker) => marker, + Err(err) => { + tracing::error!(?err, "Failed to get or create catch-up marker"); + continue; + } + }; + + // To allow for some federation delay (specified in federation_delay_tolerance), + // we adjust the value we'll actually persist with that delay duration. + // For more information, see the documentation for `Self`. + let caught_up_until_event_origin_server_ts_millis = + *next_catch_up_marker_event_origin_server_ts_millis_guard + - (federation_delay_tolerance.as_millis() as i64); + + marker.caught_up_until_event_origin_server_ts_millis = + caught_up_until_event_origin_server_ts_millis; + + tracing::debug!( + ?caught_up_until_event_origin_server_ts_millis, + next_catch_up_marker_event_origin_server_ts_millis = format!( + "{:?}", + next_catch_up_marker_event_origin_server_ts_millis_guard + ), + "Updating catch-up marker..", + ); + + let result = manager.persist(&marker).await; + if let Err(err) = result { + tracing::error!(?err, "Failed to persist catch-up marker"); + } + + *next_catch_up_marker_event_origin_server_ts_millis_guard = 0; + } + }); + } +} diff --git a/src/entity/catch_up_marker/entity.rs b/src/entity/catch_up_marker/entity.rs new file mode 100644 index 0000000..fd55207 --- /dev/null +++ b/src/entity/catch_up_marker/entity.rs @@ -0,0 +1,37 @@ +use mxlink::matrix_sdk::ruma::events::macros::EventContent; + +use serde::{Deserialize, Serialize}; + +use mxlink::helpers::account_data_config::GlobalConfig; +use mxlink::helpers::account_data_config::GlobalConfigCarrierContent; + +#[derive(Clone, Debug, Default, Deserialize, Serialize, EventContent)] +#[ruma_event(type = "cc.etke.baibot.catch_up_marker", kind = GlobalAccountData)] +pub struct CatchUpMarkerCarrierContent { + pub payload: String, +} + +impl GlobalConfigCarrierContent for CatchUpMarkerCarrierContent { + fn payload(&self) -> &str { + &self.payload + } + + fn new(payload: String) -> Self { + Self { payload } + } +} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct CatchUpMarker { + pub caught_up_until_event_origin_server_ts_millis: i64, +} + +impl CatchUpMarker { + pub fn new(caught_up_until_event_origin_server_ts_millis: i64) -> Self { + Self { + caught_up_until_event_origin_server_ts_millis, + } + } +} + +impl GlobalConfig for CatchUpMarker {} diff --git a/src/entity/catch_up_marker/mod.rs b/src/entity/catch_up_marker/mod.rs new file mode 100644 index 0000000..d4afb6e --- /dev/null +++ b/src/entity/catch_up_marker/mod.rs @@ -0,0 +1,11 @@ +mod delayed_catch_up_marker_manager; +mod entity; + +use mxlink::helpers::account_data_config::GlobalConfigManager as AccountDataGlobalConfigManager; + +pub use entity::{CatchUpMarker, CatchUpMarkerCarrierContent}; + +pub type CatchUpMarkerManager = + AccountDataGlobalConfigManager; + +pub use delayed_catch_up_marker_manager::DelayedCatchUpMarkerManager; diff --git a/src/entity/cfg/config.rs b/src/entity/cfg/config.rs new file mode 100644 index 0000000..8d1397a --- /dev/null +++ b/src/entity/cfg/config.rs @@ -0,0 +1,401 @@ +use std::path::PathBuf; + +use mxlink::helpers::encryption::EncryptionKey; +use serde::{Deserialize, Serialize}; + +use crate::{ + agent::{AgentDefinition, AgentPurpose, PublicIdentifier}, + entity::{globalconfig::GlobalConfig, roomconfig::RoomSettingsHandler}, +}; + +#[derive(Debug, Deserialize)] +pub struct Config { + pub homeserver: ConfigHomeserver, + + pub user: ConfigUser, + + pub persistence: PersistenceConfig, + + #[serde(default = "super::defaults::command_prefix")] + pub command_prefix: String, + + pub access: ConfigAccess, + + pub agents: ConfigAgents, + + // Contains the initial global configuration values. + // Not all properties of the object make sense to be configured statically, + // so not all of them will be reflected onto the actual global configuration. + pub initial_global_config: ConfigInitialGlobalConfig, + + #[serde(default = "super::defaults::logging")] + pub logging: String, +} + +impl Config { + pub fn validate(&self) -> anyhow::Result<()> { + self.homeserver.validate()?; + self.user.validate()?; + self.persistence.validate()?; + self.access.validate()?; + + if self.command_prefix.is_empty() { + return Err(anyhow::anyhow!( + "The command_prefix ({}) configuration must be set", + super::env::BAIBOT_COMMAND_PREFIX + )); + } + + self.agents.validate()?; + self.initial_global_config.clone().validate()?; + + Ok(()) + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ConfigHomeserver { + pub server_name: String, + pub url: String, +} + +impl ConfigHomeserver { + pub fn validate(&self) -> anyhow::Result<()> { + if self.server_name.is_empty() { + return Err(anyhow::anyhow!( + "The homeserver.server_name ({}) configuration must be set", + super::env::BAIBOT_HOMESERVER_SERVER_NAME + )); + } + + if self.url.is_empty() { + return Err(anyhow::anyhow!( + "The homeserver.url ({}) configuration must be set", + super::env::BAIBOT_HOMESERVER_URL + )); + } + + Ok(()) + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ConfigUser { + pub mxid_localpart: String, + pub password: String, + + #[serde(default = "super::defaults::name")] + pub name: String, + + #[serde(default)] + pub encryption: ConfigUserEncryption, +} + +impl ConfigUser { + pub fn validate(&self) -> anyhow::Result<()> { + if self.mxid_localpart.is_empty() { + return Err(anyhow::anyhow!( + "The user.mxid_localpart ({}) configuration must be set", + super::env::BAIBOT_USER_MXID_LOCALPART + )); + } + + if self.password.is_empty() { + return Err(anyhow::anyhow!( + "The user.password ({}) configuration must be set", + super::env::BAIBOT_USER_PASSWORD + )); + } + + if self.name.is_empty() { + return Err(anyhow::anyhow!( + "The name ({}) configuration must be set", + super::env::BAIBOT_USER_NAME + )); + } + + self.encryption.validate()?; + + Ok(()) + } +} + +#[derive(Debug, Default, Serialize, Deserialize)] +pub struct ConfigUserEncryption { + pub recovery_passphrase: Option, + pub recovery_reset_allowed: bool, +} + +impl ConfigUserEncryption { + pub fn validate(&self) -> anyhow::Result<()> { + if let Some(passphrase) = &self.recovery_passphrase { + if passphrase.is_empty() { + return Err(anyhow::anyhow!( + "The user.encryption.recovery_passphrase ({}) configuration must either be null or set to a non-empty passphrase", + super::env::BAIBOT_USER_ENCRYPTION_RECOVERY_PASSPHRASE + )); + } + } + + Ok(()) + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct PersistenceConfig { + #[serde(default = "super::defaults::persistence_data_dir_path")] + pub data_dir_path: Option, + + #[serde(default = "super::defaults::persistence_session_file_name")] + session_file_name: String, + + #[serde(default = "super::defaults::persistence_db_dir_name")] + db_dir_name: String, + + pub session_encryption_key: Option, + + pub config_encryption_key: Option, +} + +impl PersistenceConfig { + pub fn validate(&self) -> anyhow::Result<()> { + if let Some(data_dir_path) = &self.data_dir_path { + let path = PathBuf::from(data_dir_path); + if !path.exists() { + return Err(anyhow::anyhow!( + "The persistence.data_dir_path ({}) directory ({}) must exist", + super::env::BAIBOT_PERSISTENCE_DATA_DIR_PATH, + data_dir_path, + )); + } + } + + self.config_encryption_key() + .map_err(|e| anyhow::anyhow!(e))?; + + Ok(()) + } + + pub fn session_file_path(&self) -> anyhow::Result { + let Some(data_dir_path) = &self.data_dir_path else { + return Err(anyhow::anyhow!( + "The persistence.data_dir_path ({}) directory must be set", + super::env::BAIBOT_PERSISTENCE_DATA_DIR_PATH + )); + }; + + let mut path = PathBuf::from(data_dir_path); + path.push(&self.session_file_name); + + Ok(path) + } + + pub fn db_dir_path(&self) -> anyhow::Result { + let Some(data_dir_path) = &self.data_dir_path else { + return Err(anyhow::anyhow!( + "The persistence.data_dir_path ({}) directory must be set", + super::env::BAIBOT_PERSISTENCE_DATA_DIR_PATH + )); + }; + + let mut path = PathBuf::from(data_dir_path); + path.push(&self.db_dir_name); + + Ok(path) + } + + pub fn session_encryption_key(&self) -> anyhow::Result> { + self.parse_encryption_key(&self.session_encryption_key).map_err(|err| { + anyhow::anyhow!( + "Encryption key specified in persistence.session_encryption_key ({}) is not valid: {}", + super::env::BAIBOT_PERSISTENCE_SESSION_ENCRYPTION_KEY, + err + ) + }) + } + + pub fn config_encryption_key(&self) -> anyhow::Result> { + self.parse_encryption_key(&self.config_encryption_key).map_err(|err| { + anyhow::anyhow!( + "Encryption key specified in persistence.config_encryption_key ({}) is not valid: {}", + super::env::BAIBOT_PERSISTENCE_CONFIG_ENCRYPTION_KEY, + err + ) + }) + } + + fn parse_encryption_key( + &self, + value: &Option, + ) -> anyhow::Result, String> { + let key = match value { + Some(key) => { + if key.is_empty() { + None + } else { + Some(EncryptionKey::from_hex_str(key)?) + } + } + None => None, + }; + + Ok(key) + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ConfigAccess { + // Contains the admin whitelist patterns before parsing into regex. + // Example: `["@*:example.com"]` + pub admin_patterns: Vec, +} + +impl ConfigAccess { + // Returns the the mxidwc-parsed regexes for the admin whitelist. + // Example: `["^@\.*:example\.com$"]` + pub fn admin_pattern_regexes(&self) -> anyhow::Result> { + mxidwc::parse_patterns_vector(&self.admin_patterns).map_err(|e| { + anyhow::anyhow!( + "Failed parsing access.admin_patterns ({}): {:?}", + super::env::BAIBOT_ACCESS_ADMIN_PATTERNS, + e + ) + }) + } + + pub fn validate(&self) -> anyhow::Result<()> { + if self.admin_patterns.is_empty() { + return Err(anyhow::anyhow!( + "The access.admin_patterns ({}) configuration must contain at least one pattern", + super::env::BAIBOT_ACCESS_ADMIN_PATTERNS + )); + } + + self.admin_pattern_regexes()?; + + Ok(()) + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ConfigAgents { + pub static_definitions: Vec, +} + +impl ConfigAgents { + pub fn validate(&self) -> anyhow::Result<()> { + Ok(()) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ConfigInitialGlobalConfig { + #[serde(default)] + pub handler: RoomSettingsHandler, + + pub user_patterns: Option>, +} + +impl ConfigInitialGlobalConfig { + fn user_pattern_regexes(&self) -> anyhow::Result>> { + match &self.user_patterns { + Some(user_patterns) => { + let user_patterns = mxidwc::parse_patterns_vector(user_patterns).map_err(|e| { + anyhow::anyhow!( + "Failed parsing initial_global_config.user_patterns ({}): {}", + super::env::BAIBOT_INITIAL_GLOBAL_CONFIG_USER_PATTERNS, + e + ) + })?; + + Ok(Some(user_patterns)) + } + None => Ok(None), + } + } + + pub fn validate(self) -> anyhow::Result<()> { + self.user_pattern_regexes()?; + + for purpose in AgentPurpose::choices() { + let agent_id = self.handler.get_by_purpose(*purpose); + + let Some(agent_id) = agent_id else { + // None is OK + continue; + }; + + let config_key = format!( + "initial_global_config.handler.{}", + purpose.as_str().replace("-", "_") + ); + + if agent_id.is_empty() { + return Err(anyhow::anyhow!( + "The {} configuration key must be pointing to a valid agent id or be set to null", + config_key, + )); + } + + let agent_identifier = PublicIdentifier::from_str(&agent_id); + + let Some(agent_identifier) = agent_identifier else { + return Err(anyhow::anyhow!( + "The {} configuration key specifies an agent id (`{}`) that cannot be parsed. {}", + config_key, + agent_id, + crate::strings::agent::invalid_id_generic() + )); + }; + + // We only allow statically-defined agents for now, although DynamicGlobal may make sense too. + let PublicIdentifier::Static(_) = agent_identifier else { + return Err(anyhow::anyhow!( + "The {} configuration key specifies an agent id (`{}`) which does not refer to a static agent.", + config_key, + agent_id, + )); + }; + } + + let _: GlobalConfig = self.try_into()?; + + Ok(()) + } +} + +impl TryInto for ConfigInitialGlobalConfig { + type Error = anyhow::Error; + + fn try_into(self) -> anyhow::Result { + let mut entity = GlobalConfig::default(); + + if let Some(user_patterns) = self.user_patterns { + // We'd rather fail parsing this during startup than at runtime + let _ = mxidwc::parse_patterns_vector(&user_patterns).map_err(|err| { + anyhow::anyhow!( + "Bad initial_global_config.user_patterns ({}): {}", + super::env::BAIBOT_INITIAL_GLOBAL_CONFIG_USER_PATTERNS, + err + ) + })?; + + entity.access.user_patterns = if user_patterns.is_empty() { + None + } else { + Some(user_patterns) + }; + } + + for purpose in AgentPurpose::choices() { + let agent_id = self.handler.get_by_purpose(*purpose); + + entity + .fallback_room_settings + .handler + .set_by_purpose(*purpose, agent_id); + } + + Ok(entity) + } +} diff --git a/src/entity/cfg/defaults.rs b/src/entity/cfg/defaults.rs new file mode 100644 index 0000000..cf5113b --- /dev/null +++ b/src/entity/cfg/defaults.rs @@ -0,0 +1,35 @@ +const CONFIG_FILE_PATH: &str = "config.yml"; + +const NAME: &str = "baibot"; +const COMMAND_PREFIX: &str = "!bai"; + +const PERSISTENCE_SESSION_FILE_NAME: &str = "session.json"; +const PERSISTENCE_DB_DIR_NAME: &str = "db"; + +pub(crate) fn name() -> String { + NAME.to_owned() +} + +pub(crate) fn config_file_path() -> String { + CONFIG_FILE_PATH.to_owned() +} + +pub(super) fn command_prefix() -> String { + COMMAND_PREFIX.to_owned() +} + +pub(super) fn persistence_data_dir_path() -> Option { + None +} + +pub(super) fn persistence_session_file_name() -> String { + PERSISTENCE_SESSION_FILE_NAME.to_owned() +} + +pub(super) fn persistence_db_dir_name() -> String { + PERSISTENCE_DB_DIR_NAME.to_owned() +} + +pub(super) fn logging() -> String { + "warn,mxlink=debug,baibot=debug".to_owned() +} diff --git a/src/entity/cfg/env.rs b/src/entity/cfg/env.rs new file mode 100644 index 0000000..89f0647 --- /dev/null +++ b/src/entity/cfg/env.rs @@ -0,0 +1,38 @@ +pub const BAIBOT_CONFIG_FILE_PATH: &str = "BAIBOT_CONFIG_FILE_PATH"; + +pub const BAIBOT_HOMESERVER_SERVER_NAME: &str = "BAIBOT_HOMESERVER_SERVER_NAME"; +pub const BAIBOT_HOMESERVER_URL: &str = "BAIBOT_HOMESERVER_URL"; + +pub const BAIBOT_USER_MXID_LOCALPART: &str = "BAIBOT_USER_MXID_LOCALPART"; +pub const BAIBOT_USER_PASSWORD: &str = "BAIBOT_USER_PASSWORD"; +pub const BAIBOT_USER_NAME: &str = "BAIBOT_USER_NAME"; +pub const BAIBOT_USER_ENCRYPTION_RECOVERY_PASSPHRASE: &str = + "BAIBOT_USER_ENCRYPTION_RECOVERY_PASSPHRASE"; + +pub const BAIBOT_COMMAND_PREFIX: &str = "BAIBOT_COMMAND_PREFIX"; + +pub const BAIBOT_LOGGING: &str = "BAIBOT_LOGGING"; + +pub const BAIBOT_ACCESS_ADMIN_PATTERNS: &str = "BAIBOT_ACCESS_ADMIN_PATTERNS"; + +pub const BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_CATCH_ALL: &str = + "BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_CATCH_ALL"; +pub const BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_TEXT_GENERATION: &str = + "BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_TEXT_GENERATION"; +pub const BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_TEXT_TO_SPEECH: &str = + "BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_TEXT_TO_SPEECH"; +pub const BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_SPEECH_TO_TEXT: &str = + "BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_SPEECH_TO_TEXT"; +pub const BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_IMAGE_GENERATION: &str = + "BAIBOT_INITIAL_GLOBAL_CONFIG_HANDLER_IMAGE_GENERATION"; + +pub const BAIBOT_INITIAL_GLOBAL_CONFIG_USER_PATTERNS: &str = + "BAIBOT_INITIAL_GLOBAL_CONFIG_USER_PATTERNS"; + +pub const BAIBOT_PERSISTENCE_DATA_DIR_PATH: &str = "BAIBOT_PERSISTENCE_DATA_DIR_PATH"; + +pub const BAIBOT_PERSISTENCE_SESSION_ENCRYPTION_KEY: &str = + "BAIBOT_PERSISTENCE_SESSION_ENCRYPTION_KEY"; + +pub const BAIBOT_PERSISTENCE_CONFIG_ENCRYPTION_KEY: &str = + "BAIBOT_PERSISTENCE_CONFIG_ENCRYPTION_KEY"; diff --git a/src/entity/cfg/mod.rs b/src/entity/cfg/mod.rs new file mode 100644 index 0000000..c4917b6 --- /dev/null +++ b/src/entity/cfg/mod.rs @@ -0,0 +1,5 @@ +mod config; +pub mod defaults; +pub mod env; + +pub use config::Config; diff --git a/src/entity/globalconfig/entity.rs b/src/entity/globalconfig/entity.rs new file mode 100644 index 0000000..eb91660 --- /dev/null +++ b/src/entity/globalconfig/entity.rs @@ -0,0 +1,64 @@ +use mxlink::matrix_sdk::ruma::events::macros::EventContent; + +use serde::{Deserialize, Serialize}; + +use mxlink::helpers::account_data_config::GlobalConfig as GlobalConfigTrait; +use mxlink::helpers::account_data_config::GlobalConfigCarrierContent as GlobalConfigCarrierContentTrait; + +use crate::agent::AgentDefinition; +use crate::entity::roomconfig::RoomSettings; + +#[derive(Clone, Debug, Default, Deserialize, Serialize, EventContent)] +#[ruma_event(type = "cc.etke.baibot.global_config", kind = GlobalAccountData)] +pub struct GlobalConfigCarrierContent { + pub payload: String, +} + +impl GlobalConfigCarrierContentTrait for GlobalConfigCarrierContent { + fn payload(&self) -> &str { + &self.payload + } + + fn new(payload: String) -> Self { + Self { payload } + } +} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct GlobalConfig { + pub fallback_room_settings: RoomSettings, + + pub access: GlobalConfigAccess, + + pub agents: Vec, +} + +impl GlobalConfig { + pub fn new(user_patterns: Option>) -> Self { + Self { + fallback_room_settings: RoomSettings::default(), + + access: GlobalConfigAccess { + user_patterns, + room_local_agent_manager_patterns: None, + }, + + agents: vec![], + } + } +} + +impl GlobalConfigTrait for GlobalConfig {} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct GlobalConfigAccess { + // Contains a list of patterns that will be used to specify the "allowed bot users". + // These remain as patterns and are turned into regex and made use of on demand. + // Example: `["@*:example.com"]` + pub user_patterns: Option>, + + // Contains a list of patterns that will be used to specify "allowed room-local agent managers". + // These remain as patterns and are turned into regex and made use of on demand. + // Example: `["@*:example.com"]` + pub room_local_agent_manager_patterns: Option>, +} diff --git a/src/entity/globalconfig/mod.rs b/src/entity/globalconfig/mod.rs new file mode 100644 index 0000000..8476d33 --- /dev/null +++ b/src/entity/globalconfig/mod.rs @@ -0,0 +1,8 @@ +mod entity; + +use mxlink::helpers::account_data_config::GlobalConfigManager as AccountDataGlobalConfigManager; + +pub use entity::{GlobalConfig, GlobalConfigCarrierContent}; + +pub type GlobalConfigurationManager = + AccountDataGlobalConfigManager; diff --git a/src/entity/message_context.rs b/src/entity/message_context.rs new file mode 100644 index 0000000..1964729 --- /dev/null +++ b/src/entity/message_context.rs @@ -0,0 +1,122 @@ +use mxlink::matrix_sdk::ruma::{OwnedEventId, OwnedUserId, RoomId}; +use mxlink::matrix_sdk::Room; + +use mxlink::ThreadInfo; + +use super::{ + globalconfig::GlobalConfig, roomconfig::RoomConfig, MessagePayload, RoomConfigContext, + TriggerEventInfo, +}; + +#[derive(Debug)] +pub struct MessageContext { + room: Room, + room_config_context: RoomConfigContext, + admin_whitelist_regexes: Vec, + trigger_event_info: TriggerEventInfo, + thread_info: ThreadInfo, +} + +impl MessageContext { + pub fn new( + room: Room, + room_config_context: RoomConfigContext, + admin_whitelist_regexes: Vec, + trigger_event_info: TriggerEventInfo, + thread_info: ThreadInfo, + ) -> Self { + Self { + room, + room_config_context, + admin_whitelist_regexes, + trigger_event_info, + thread_info, + } + } + + pub fn room(&self) -> &Room { + &self.room + } + + pub fn room_id(&self) -> &RoomId { + self.room.room_id() + } + + pub fn global_config(&self) -> &GlobalConfig { + &self.room_config_context.global_config + } + + pub fn room_config(&self) -> &RoomConfig { + &self.room_config_context.room_config + } + + pub fn room_config_context(&self) -> &RoomConfigContext { + &self.room_config_context + } + + pub fn event_id(&self) -> &OwnedEventId { + &self.trigger_event_info.event_id + } + + pub fn sender_id(&self) -> &OwnedUserId { + &self.trigger_event_info.sender + } + + pub fn payload(&self) -> &MessagePayload { + &self.trigger_event_info.payload + } + + pub fn thread_info(&self) -> &ThreadInfo { + &self.thread_info + } + + pub fn sender_can_manage_global_config(&self) -> anyhow::Result { + Ok(self.trigger_event_info.sender_is_admin) + } + + pub fn sender_can_manage_room_local_agents(&self) -> anyhow::Result { + Ok(self.sender_can_manage_global_config()? + || self.sender_is_allowed_room_local_agent_manager()?) + } + + pub fn combined_admin_and_user_regexes(&self) -> Vec { + let mut combined = self.admin_whitelist_regexes.clone(); + + if let Some(user_patterns) = &self.global_config().access.user_patterns { + let user_regexes = mxidwc::parse_patterns_vector(user_patterns); + + match user_regexes { + Ok(user_regexes) => { + combined.extend(user_regexes); + } + Err(err) => { + tracing::warn!( + "Error parsing user patterns for room {}: {:?}", + self.room.room_id(), + err + ); + } + } + } + + combined + } + + fn sender_is_allowed_room_local_agent_manager(&self) -> anyhow::Result { + match &self + .global_config() + .access + .room_local_agent_manager_patterns + { + None => Ok(false), + Some(patterns) => { + let allowed_regexes = mxidwc::parse_patterns_vector(patterns)?; + + Ok(mxidwc::match_user_id( + self.sender_id().as_str(), + &allowed_regexes, + )) + } + } + } +} diff --git a/src/entity/message_payload.rs b/src/entity/message_payload.rs new file mode 100644 index 0000000..98d09a1 --- /dev/null +++ b/src/entity/message_payload.rs @@ -0,0 +1,47 @@ +use mxlink::matrix_sdk::ruma::events::room::message::{ + AudioMessageEventContent, MessageType, TextMessageEventContent, +}; +use mxlink::matrix_sdk::ruma::{OwnedEventId, OwnedUserId}; + +use mxlink::ThreadInfo; + +/// MessagePayload is like matrix-sdk's MessageType, but represents only message types that the bot deals with and payloads are massaged a bit. +#[derive(Debug, Clone)] +pub enum MessagePayload { + Text(TextMessageEventContent), + + Audio(AudioMessageEventContent), + + Reaction { + key: String, + reacted_to_event_payload: Box, + reacted_to_event_id: OwnedEventId, + reacted_to_event_sender_id: OwnedUserId, + }, + + /// Represents an encrypted message + Encrypted(ThreadInfo), +} + +impl TryInto for MessageType { + type Error = String; + + fn try_into(self) -> Result { + let payload = match self { + MessageType::Text(text_content) => MessagePayload::Text(text_content), + MessageType::Audio(audio_content) => { + // We can consider inspecting `audio_content.voice.is_some()` and ignoring audio which is not a voice message. + // + // However, at the time of this writing (2024-09-10), certain popular clients (Element iOS) send voice messages + // as regular audio messages, without voice annotation as per MSC3245. + // For this reason, we handle all audio. + MessagePayload::Audio(audio_content) + } + other => { + return Err(format!("Unsupported message type: {:?}", other)); + } + }; + + Ok(payload) + } +} diff --git a/src/entity/mod.rs b/src/entity/mod.rs new file mode 100644 index 0000000..bb6ed3a --- /dev/null +++ b/src/entity/mod.rs @@ -0,0 +1,15 @@ +pub mod catch_up_marker; +pub mod cfg; +pub mod globalconfig; +mod message_context; +mod message_payload; +mod room_config_context; +pub mod roomconfig; +mod thread_context; +mod trigger_event_info; + +pub use message_context::MessageContext; +pub use message_payload::MessagePayload; +pub use room_config_context::RoomConfigContext; +pub use thread_context::{ThreadContext, ThreadContextFirstMessage}; +pub use trigger_event_info::TriggerEventInfo; diff --git a/src/entity/room_config_context.rs b/src/entity/room_config_context.rs new file mode 100644 index 0000000..0487e02 --- /dev/null +++ b/src/entity/room_config_context.rs @@ -0,0 +1,183 @@ +use super::globalconfig::GlobalConfig; +use super::roomconfig::RoomConfig; + +use crate::entity::roomconfig::{ + defaults as roomconfig_defaults, SpeechToTextFlowType, TextGenerationAutoUsage, + TextGenerationPrefixRequirementType, TextToSpeechBotMessagesFlowType, + TextToSpeechUserMessagesFlowType, +}; + +#[derive(Debug)] +pub struct RoomConfigContext { + pub(crate) global_config: GlobalConfig, + pub(crate) room_config: RoomConfig, +} + +impl RoomConfigContext { + pub fn new(global_config: GlobalConfig, room_config: RoomConfig) -> RoomConfigContext { + Self { + global_config, + room_config, + } + } + + pub fn speech_to_text_flow_type(&self) -> SpeechToTextFlowType { + self.room_config + .settings + .speech_to_text + .flow_type + .or({ + self.global_config + .fallback_room_settings + .speech_to_text + .flow_type + }) + .unwrap_or(roomconfig_defaults::SPEECH_TO_TEXT_FLOW_TYPE) + } + + pub fn speech_to_text_language(&self) -> Option { + self.room_config + .settings + .speech_to_text + .language + .clone() + .or({ + self.global_config + .fallback_room_settings + .speech_to_text + .language + .clone() + }) + } + + pub fn auto_text_generation_usage(&self) -> TextGenerationAutoUsage { + self.room_config + .settings + .text_generation + .auto_usage + .or({ + self.global_config + .fallback_room_settings + .text_generation + .auto_usage + }) + .unwrap_or(roomconfig_defaults::TEXT_GENERATION_AUTO_USAGE) + } + + pub fn should_auto_text_generate(&self, original_message_is_audio: bool) -> bool { + match self.auto_text_generation_usage() { + TextGenerationAutoUsage::Never => false, + TextGenerationAutoUsage::Always => true, + TextGenerationAutoUsage::OnlyForVoice => original_message_is_audio, + TextGenerationAutoUsage::OnlyForText => !original_message_is_audio, + } + } + + pub fn text_generation_prompt_override(&self) -> Option { + self.room_config + .settings + .text_generation + .prompt_override + .clone() + .or_else(|| { + self.global_config + .fallback_room_settings + .text_generation + .prompt_override + .clone() + }) + } + + pub fn text_generation_temperature_override(&self) -> Option { + self.room_config + .settings + .text_generation + .temperature_override + .or({ + self.global_config + .fallback_room_settings + .text_generation + .temperature_override + }) + } + + pub fn text_generation_context_management_enabled(&self) -> bool { + self.room_config + .settings + .text_generation + .context_management_enabled + .or({ + self.global_config + .fallback_room_settings + .text_generation + .context_management_enabled + }) + .unwrap_or(false) + } + + pub fn text_generation_prefix_requirement_type(&self) -> TextGenerationPrefixRequirementType { + self.room_config + .settings + .text_generation + .prefix_requirement_type + .or({ + self.global_config + .fallback_room_settings + .text_generation + .prefix_requirement_type + }) + .unwrap_or(roomconfig_defaults::TEXT_GENERATION_PREFIX_REQUIREMENT_TYPE) + } + + pub fn text_to_speech_bot_messages_flow_type(&self) -> TextToSpeechBotMessagesFlowType { + self.room_config + .settings + .text_to_speech + .bot_msgs_flow_type + .or({ + self.global_config + .fallback_room_settings + .text_to_speech + .bot_msgs_flow_type + }) + .unwrap_or(roomconfig_defaults::TEXT_TO_SPEECH_BOT_MESSAGES_FLOW_TYPE) + } + + pub fn text_to_speech_user_messages_flow_type(&self) -> TextToSpeechUserMessagesFlowType { + self.room_config + .settings + .text_to_speech + .user_msgs_flow_type + .or({ + self.global_config + .fallback_room_settings + .text_to_speech + .user_msgs_flow_type + }) + .unwrap_or(roomconfig_defaults::TEXT_TO_SPEECH_USER_MESSAGES_FLOW_TYPE) + } + + pub fn text_to_speech_speed_override(&self) -> Option { + self.room_config.settings.text_to_speech.speed_override.or({ + self.global_config + .fallback_room_settings + .text_to_speech + .speed_override + }) + } + + pub fn text_to_speech_voice_override(&self) -> Option { + self.room_config + .settings + .text_to_speech + .voice_override + .clone() + .or_else(|| { + self.global_config + .fallback_room_settings + .text_to_speech + .voice_override + .clone() + }) + } +} diff --git a/src/entity/roomconfig/defaults.rs b/src/entity/roomconfig/defaults.rs new file mode 100644 index 0000000..89b5a91 --- /dev/null +++ b/src/entity/roomconfig/defaults.rs @@ -0,0 +1,17 @@ +use super::SpeechToTextFlowType; +use super::{TextGenerationAutoUsage, TextGenerationPrefixRequirementType}; +use super::{TextToSpeechBotMessagesFlowType, TextToSpeechUserMessagesFlowType}; + +pub const TEXT_GENERATION_PREFIX_REQUIREMENT_TYPE: TextGenerationPrefixRequirementType = + TextGenerationPrefixRequirementType::No; + +pub const TEXT_GENERATION_AUTO_USAGE: TextGenerationAutoUsage = TextGenerationAutoUsage::Always; + +pub const TEXT_TO_SPEECH_BOT_MESSAGES_FLOW_TYPE: TextToSpeechBotMessagesFlowType = + TextToSpeechBotMessagesFlowType::OnDemandForVoice; + +pub const TEXT_TO_SPEECH_USER_MESSAGES_FLOW_TYPE: TextToSpeechUserMessagesFlowType = + TextToSpeechUserMessagesFlowType::OnDemand; + +pub const SPEECH_TO_TEXT_FLOW_TYPE: SpeechToTextFlowType = + SpeechToTextFlowType::TranscribeAndGenerateText; diff --git a/src/entity/roomconfig/entity/handler.rs b/src/entity/roomconfig/entity/handler.rs new file mode 100644 index 0000000..40155f0 --- /dev/null +++ b/src/entity/roomconfig/entity/handler.rs @@ -0,0 +1,60 @@ +use serde::{Deserialize, Serialize}; + +use crate::agent::AgentPurpose; + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct RoomSettingsHandler { + /// The agent used for any of the tasks which do not have a dedicated agent for them + catch_all: Option, + + /// The agent used for text generation + text_generation: Option, + + /// The agent used for transcribing audio (voice) to text + speech_to_text: Option, + + /// The agent used for converting text to audio (voice) + text_to_speech: Option, + + /// The agent used for generating images + image_generation: Option, +} + +impl RoomSettingsHandler { + pub fn get_by_purpose(&self, purpose: AgentPurpose) -> Option { + match purpose { + AgentPurpose::CatchAll => self.catch_all.clone(), + AgentPurpose::TextGeneration => self.text_generation.clone(), + AgentPurpose::SpeechToText => self.speech_to_text.clone(), + AgentPurpose::TextToSpeech => self.text_to_speech.clone(), + AgentPurpose::ImageGeneration => self.image_generation.clone(), + } + } + + pub fn get_by_purpose_with_catch_all_fallback(&self, purpose: AgentPurpose) -> Option { + match self.get_by_purpose(purpose) { + Some(agent_id) => Some(agent_id), + None => self.catch_all.clone(), + } + } + + pub fn set_by_purpose(&mut self, purpose: AgentPurpose, agent_id: Option) { + match purpose { + AgentPurpose::CatchAll => { + self.catch_all = agent_id; + } + AgentPurpose::TextGeneration => { + self.text_generation = agent_id; + } + AgentPurpose::SpeechToText => { + self.speech_to_text = agent_id; + } + AgentPurpose::TextToSpeech => { + self.text_to_speech = agent_id; + } + AgentPurpose::ImageGeneration => { + self.image_generation = agent_id; + } + }; + } +} diff --git a/src/entity/roomconfig/entity/mod.rs b/src/entity/roomconfig/entity/mod.rs new file mode 100644 index 0000000..a9cc83b --- /dev/null +++ b/src/entity/roomconfig/entity/mod.rs @@ -0,0 +1,89 @@ +use mxlink::helpers::account_data_config::RoomConfig as RoomConfigTrait; +use mxlink::helpers::account_data_config::RoomConfigCarrierContent as RoomConfigCarrierContentTrait; +use mxlink::matrix_sdk::ruma::events::macros::EventContent; +use mxlink::matrix_sdk::{Room, RoomMemberships}; + +use serde::{Deserialize, Serialize}; + +use crate::agent::AgentDefinition; + +mod handler; +mod speech_to_text; +mod text_generation; +mod text_to_speech; + +pub use handler::RoomSettingsHandler; +pub use speech_to_text::SpeechToTextFlowType; +pub use text_generation::{TextGenerationAutoUsage, TextGenerationPrefixRequirementType}; +pub use text_to_speech::{TextToSpeechBotMessagesFlowType, TextToSpeechUserMessagesFlowType}; + +#[derive(Clone, Debug, Deserialize, Serialize, EventContent)] +#[ruma_event(type = "cc.etke.baibot.room_config", kind = RoomAccountData)] +pub struct RoomConfigCarrierContent { + pub payload: String, +} + +impl RoomConfigCarrierContentTrait for RoomConfigCarrierContent { + fn payload(&self) -> &str { + &self.payload + } + + fn new(payload: String) -> Self { + Self { payload } + } +} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct RoomConfig { + pub settings: RoomSettings, + + pub agents: Vec, +} + +impl RoomConfigTrait for RoomConfig {} + +impl RoomConfig { + pub async fn with_room(mut self, room: Room) -> Self { + tracing::trace!("Determining room members count to decide on a suitable text-generation/prefix-requirement-type default"); + + let members = room.members(RoomMemberships::ACTIVE).await; + + let prefix_requirement_type = match members { + Ok(members) => { + let members_count = members.len(); + + let prefix_requirement_type = if members.len() > 2 { + text_generation::TextGenerationPrefixRequirementType::CommandPrefix + } else { + text_generation::TextGenerationPrefixRequirementType::No + }; + + tracing::info!(?members_count, ?prefix_requirement_type, "Determined text-generation/prefix-requirement-type based on room members count"); + + prefix_requirement_type + } + Err(err) => { + tracing::error!(?err, "Failed to get members of room - will default text-generation/prefix-requirement-type to No"); + text_generation::TextGenerationPrefixRequirementType::No + } + }; + + self.settings.text_generation.prefix_requirement_type = Some(prefix_requirement_type); + + self + } +} + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct RoomSettings { + pub handler: handler::RoomSettingsHandler, + + #[serde(default)] + pub text_generation: text_generation::RoomSettingsTextGeneration, + + #[serde(default)] + pub speech_to_text: speech_to_text::RoomSettingsSpeechToText, + + #[serde(default)] + pub text_to_speech: text_to_speech::RoomSettingsTextToSpeech, +} diff --git a/src/entity/roomconfig/entity/speech_to_text.rs b/src/entity/roomconfig/entity/speech_to_text.rs new file mode 100644 index 0000000..d960e48 --- /dev/null +++ b/src/entity/roomconfig/entity/speech_to_text.rs @@ -0,0 +1,59 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct RoomSettingsSpeechToText { + pub flow_type: Option, + + /// The language of the input audio. + /// Supplying the input language in [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) format will improve accuracy and latency. + pub language: Option, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq)] +pub enum SpeechToTextFlowType { + /// Voice messages are to be ignored. + #[serde(rename = "ignore")] + Ignore, + + /// Voice messages are to trigger text-generation. + /// This may potentially trigger speech-to-text, but that's not what we care about here. + #[serde(rename = "transcribe_and_generate_text")] + TranscribeAndGenerateText, + + // Voices messages are to trigger transcription. + #[serde(rename = "only_transcribe")] + OnlyTranscribe, +} + +impl SpeechToTextFlowType { + pub fn choices() -> Vec { + vec![ + Self::Ignore, + Self::TranscribeAndGenerateText, + Self::OnlyTranscribe, + ] + } + + pub fn from_str(s: &str) -> Option { + match s { + "ignore" => Some(Self::Ignore), + "transcribe_and_generate_text" => Some(Self::TranscribeAndGenerateText), + "only_transcribe" => Some(Self::OnlyTranscribe), + _ => None, + } + } +} + +impl std::fmt::Display for SpeechToTextFlowType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + SpeechToTextFlowType::Ignore => { + write!(f, "ignore") + } + SpeechToTextFlowType::TranscribeAndGenerateText => { + write!(f, "transcribe_and_generate_text") + } + SpeechToTextFlowType::OnlyTranscribe => write!(f, "only_transcribe"), + } + } +} diff --git a/src/entity/roomconfig/entity/text_generation.rs b/src/entity/roomconfig/entity/text_generation.rs new file mode 100644 index 0000000..7464f7f --- /dev/null +++ b/src/entity/roomconfig/entity/text_generation.rs @@ -0,0 +1,111 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct RoomSettingsTextGeneration { + /// Controls whether initial text messages require a prefix to trigger text generation. + /// This could have been a bool, using an enum allows us to add more options (e.g. CustomPrefix) in the future. + /// Even if set to "required", prefixless-triggering could still happen via an initial voice message (see auto_usage). + pub prefix_requirement_type: Option, + + /// Controls whether text generation is automatically triggered (depending on message type). + pub auto_usage: Option, + + /// Controls whether conversation context management is enabled. + /// When enabled, the bot will automatically tokenize messages and try to shorten the message context intelligently. + pub context_management_enabled: Option, + + /// Allows customizing the system prompt that the agent would use + pub prompt_override: Option, + + /// Allows customizing the temperature that the agent would use + pub temperature_override: Option, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq)] +pub enum TextGenerationPrefixRequirementType { + /// Text Generation is to be triggered for any text message + #[serde(rename = "no")] + No, + + /// Text Generation is to be triggered only for messages that are prefixed with the command prefix + #[serde(rename = "command_prefix")] + CommandPrefix, +} + +impl TextGenerationPrefixRequirementType { + pub fn choices() -> Vec { + vec![Self::No, Self::CommandPrefix] + } + + pub fn from_str(s: &str) -> Option { + match s { + "no" => Some(Self::No), + "command_prefix" => Some(Self::CommandPrefix), + _ => None, + } + } +} + +impl std::fmt::Display for TextGenerationPrefixRequirementType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + TextGenerationPrefixRequirementType::No => write!(f, "no"), + TextGenerationPrefixRequirementType::CommandPrefix => { + write!(f, "command_prefix") + } + } + } +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq)] +pub enum TextGenerationAutoUsage { + /// Text Generation is to never be performed + #[serde(rename = "never")] + Never, + + /// Text Generation is to always be performed + #[serde(rename = "always")] + Always, + + /// Text Generation is to be performed when the original message was sent as audio (voice). + /// The voice message would be transcribed to text (subject to other configuration) + /// and text generation would be triggered. + #[serde(rename = "only_for_voice")] + OnlyForVoice, + + /// Text Generation is to be performed when the original message was sent as text + #[serde(rename = "only_for_text")] + OnlyForText, +} + +impl TextGenerationAutoUsage { + pub fn choices() -> Vec { + vec![ + Self::Never, + Self::Always, + Self::OnlyForVoice, + Self::OnlyForText, + ] + } + + pub fn from_str(s: &str) -> Option { + match s { + "never" => Some(Self::Never), + "always" => Some(Self::Always), + "only_for_voice" => Some(Self::OnlyForVoice), + "only_for_text" => Some(Self::OnlyForText), + _ => None, + } + } +} + +impl std::fmt::Display for TextGenerationAutoUsage { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + TextGenerationAutoUsage::Never => write!(f, "never"), + TextGenerationAutoUsage::Always => write!(f, "always"), + TextGenerationAutoUsage::OnlyForVoice => write!(f, "only_for_voice"), + TextGenerationAutoUsage::OnlyForText => write!(f, "only_for_text"), + } + } +} diff --git a/src/entity/roomconfig/entity/text_to_speech.rs b/src/entity/roomconfig/entity/text_to_speech.rs new file mode 100644 index 0000000..72e3b85 --- /dev/null +++ b/src/entity/roomconfig/entity/text_to_speech.rs @@ -0,0 +1,110 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct RoomSettingsTextToSpeech { + pub bot_msgs_flow_type: Option, + + pub user_msgs_flow_type: Option, + + pub speed_override: Option, + + pub voice_override: Option, +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq)] +pub enum TextToSpeechBotMessagesFlowType { + /// Never do text-to-speech for bot messages automatically and don't offer it + #[serde(rename = "never")] + Never, + + /// Never do text-to-speech for bot messages automatically, but offer it via an emoji reaction for all messages + #[serde(rename = "on_demand_always")] + OnDemandAlways, + + /// Never do text-to-speech for bot messages automatically, but offer it via an emoji reaction if the user message that prompted the bot message was audio (voice) + #[serde(rename = "on_demand_for_voice")] + OnDemandForVoice, + + /// Convert all bot text messages to audio (voice) automatically if the user message that prompted the bot message was audio (voice) + #[serde(rename = "only_for_voice")] + OnlyForVoice, + + /// Convert all bot text messages to audio (voice) automatically + #[serde(rename = "always")] + Always, +} + +impl TextToSpeechBotMessagesFlowType { + pub fn choices() -> Vec { + vec![ + Self::Never, + Self::OnDemandAlways, + Self::OnDemandForVoice, + Self::Always, + Self::OnlyForVoice, + ] + } + + pub fn from_str(s: &str) -> Option { + match s { + "never" => Some(Self::Never), + "on_demand_always" => Some(Self::OnDemandAlways), + "on_demand_for_voice" => Some(Self::OnDemandForVoice), + "only_for_voice" => Some(Self::OnlyForVoice), + "always" => Some(Self::Always), + _ => None, + } + } +} + +impl std::fmt::Display for TextToSpeechBotMessagesFlowType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + TextToSpeechBotMessagesFlowType::Never => write!(f, "never"), + TextToSpeechBotMessagesFlowType::OnDemandAlways => write!(f, "on_demand_always"), + TextToSpeechBotMessagesFlowType::OnDemandForVoice => write!(f, "on_demand_for_voice"), + TextToSpeechBotMessagesFlowType::Always => write!(f, "always"), + TextToSpeechBotMessagesFlowType::OnlyForVoice => write!(f, "only_for_voice"), + } + } +} + +#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq)] +pub enum TextToSpeechUserMessagesFlowType { + /// Never do text-to-speech for user messages automatically and don't offer it + #[serde(rename = "never")] + Never, + + /// Never do text-to-speech for user messages automatically, but offer it via an emoji reaction + #[serde(rename = "on_demand")] + OnDemand, + + /// Convert all user text messages to audio (voice) automatically + #[serde(rename = "always")] + Always, +} + +impl TextToSpeechUserMessagesFlowType { + pub fn choices() -> Vec { + vec![Self::Never, Self::OnDemand, Self::Always] + } + + pub fn from_str(s: &str) -> Option { + match s { + "never" => Some(Self::Never), + "on_demand" => Some(Self::OnDemand), + "always" => Some(Self::Always), + _ => None, + } + } +} + +impl std::fmt::Display for TextToSpeechUserMessagesFlowType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + TextToSpeechUserMessagesFlowType::Never => write!(f, "never"), + TextToSpeechUserMessagesFlowType::OnDemand => write!(f, "on_demand"), + TextToSpeechUserMessagesFlowType::Always => write!(f, "always"), + } + } +} diff --git a/src/entity/roomconfig/mod.rs b/src/entity/roomconfig/mod.rs new file mode 100644 index 0000000..1a8df4b --- /dev/null +++ b/src/entity/roomconfig/mod.rs @@ -0,0 +1,13 @@ +pub mod defaults; +mod entity; + +use mxlink::helpers::account_data_config::RoomConfigManager as AccountDataRoomConfigManager; + +pub use entity::{RoomConfig, RoomConfigCarrierContent, RoomSettings, RoomSettingsHandler}; +pub use entity::{ + SpeechToTextFlowType, TextGenerationAutoUsage, TextGenerationPrefixRequirementType, + TextToSpeechBotMessagesFlowType, TextToSpeechUserMessagesFlowType, +}; + +pub type RoomConfigurationManager = + AccountDataRoomConfigManager; diff --git a/src/entity/thread_context.rs b/src/entity/thread_context.rs new file mode 100644 index 0000000..207a18f --- /dev/null +++ b/src/entity/thread_context.rs @@ -0,0 +1,13 @@ +use mxlink::ThreadInfo; + +use super::MessagePayload; + +pub struct ThreadContext { + pub info: ThreadInfo, + pub first_message: ThreadContextFirstMessage, +} + +pub struct ThreadContextFirstMessage { + pub is_mentioning_bot: bool, + pub payload: MessagePayload, +} diff --git a/src/entity/trigger_event_info.rs b/src/entity/trigger_event_info.rs new file mode 100644 index 0000000..4474fa7 --- /dev/null +++ b/src/entity/trigger_event_info.rs @@ -0,0 +1,27 @@ +use mxlink::matrix_sdk::ruma::{OwnedEventId, OwnedUserId}; + +use super::MessagePayload; + +#[derive(Debug)] +pub struct TriggerEventInfo { + pub event_id: OwnedEventId, + pub sender: OwnedUserId, + pub payload: MessagePayload, + pub sender_is_admin: bool, +} + +impl TriggerEventInfo { + pub fn new( + event_id: OwnedEventId, + sender: OwnedUserId, + payload: MessagePayload, + sender_is_admin: bool, + ) -> Self { + Self { + event_id, + sender, + payload, + sender_is_admin, + } + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..46ccd88 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,10 @@ +mod agent; +mod bot; +mod controller; +mod conversation; +mod entity; +mod strings; +mod utils; + +pub use bot::{load_config, Bot}; +pub use entity::cfg::Config; diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..0a1f253 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,31 @@ +use tracing_subscriber::fmt::format::FmtSpan; +use tracing_subscriber::EnvFilter; + +use baibot::{load_config, Bot, Config}; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + match load_config() { + Ok(config) => run_with_config(config).await, + Err(err) => Err(anyhow::anyhow!("Failed loading configuration: {}", err)), + } +} + +async fn run_with_config(config: Config) -> anyhow::Result<()> { + let subscriber = tracing_subscriber::fmt() + .with_file(true) + .with_line_number(true) + .with_thread_ids(true) + .with_target(true) + .with_span_events(FmtSpan::NONE) + .with_env_filter(EnvFilter::new(config.logging.clone())) + .finish(); + + tracing::subscriber::set_global_default(subscriber).expect("Failed setting global subscriber"); + + let bot = Bot::new(config).await?; + + bot.start().await?; + + Ok(()) +} diff --git a/src/strings/access.rs b/src/strings/access.rs new file mode 100644 index 0000000..b486474 --- /dev/null +++ b/src/strings/access.rs @@ -0,0 +1,25 @@ +pub fn users_no_patterns() -> String { + "No user patterns are configured, so the bot can only be used by administrators.".to_owned() +} + +pub fn users_now_match_patterns(patterns: &[String]) -> String { + format!( + "The bot can be used by users with a [Matrix user id](https://spec.matrix.org/v1.11/#users) matching the following patterns: `{}`", + patterns.join(" "), + ) +} + +pub fn room_local_agent_managers_no_patterns() -> String { + "No room-local agent manager patterns are configured, so new agents can only be created by administrators.".to_owned() +} + +pub fn room_local_agent_managers_now_match_patterns(patterns: &[String]) -> String { + format!( + "The bot allows users with a [Matrix user id](https://spec.matrix.org/v1.11/#users) matching the following patterns to manage agents: `{}`", + patterns.join(" "), + ) +} + +pub fn failed_to_parse_patterns(err: &str) -> String { + format!("Failed to parse patterns: {}", err) +} diff --git a/src/strings/agent.rs b/src/strings/agent.rs new file mode 100644 index 0000000..f50ce78 --- /dev/null +++ b/src/strings/agent.rs @@ -0,0 +1,345 @@ +use crate::{ + agent::{AgentInstance, AgentProvider, AgentPurpose, ControllerTrait, PublicIdentifier}, + utils::text::block_quote, +}; + +pub fn invalid_id_generic() -> String { + "The provided agent ID is not valid.\n\nIt must have a prefix (like `static/`, `global/` or `room-local/`) followed by a unique identifier which does not contain `/` or spaces.".to_string() +} + +pub fn invalid_id_validation_error(validation_error: String) -> String { + format!("The provided agent ID is not valid. {}", validation_error) +} + +pub fn agent_with_given_identifier_missing(agent_identifier: &PublicIdentifier) -> String { + format!("There is no agent with an ID of `{}`.", agent_identifier) +} + +pub fn already_exists_see_help(agent_id: &str, command_prefix: &str) -> String { + format!( + "An agent with the ID `{}` already exists. Send a `{} help` command to the room (**not in this thread**) for more information.", + agent_id, command_prefix + ) +} + +pub fn incorrect_creation_invocation(command_prefix: &str) -> String { + format!( + "Incorrect command invocation. This command expects a provider ID and an agent ID. See `{command_prefix} agent` for help." + ) +} + +pub fn incorrect_invocation_expects_agent_id_arg(command_prefix: &str) -> String { + format!( + "Incorrect command invocation. This command expects an agent ID. See `{command_prefix} agent` for help." + ) +} + +pub fn not_allowed_to_manage_room_local_agents_in_room() -> String { + "You are not allowed to manage room-local agents in this room.".to_string() +} + +pub fn not_allowed_to_manage_static_agents() -> String { + "Statically defined agents cannot be managed via commands to the bot. Consider editing the bot configuration.".to_string() +} + +pub fn configuration_does_not_result_in_a_working_agent(err: anyhow::Error) -> String { + format!( + "The provided configuration does not result in a working agent. The following error was encountered when trying to talk to the agent API:\n```\n{}```", + err, + ) +} + +pub fn configuration_agent_will_ping() -> &'static str { + "Checking this agent's API. Please wait.." +} + +pub fn configuration_agent_ping_inconclusive() -> String { + "Basic check results are inconclusive - this agent may or may not work.".to_string() +} + +pub fn configuration_agent_ping_ok() -> String { + "Basic checks succeeded.".to_string() +} + +pub fn created(agent_identifier: &PublicIdentifier) -> String { + format!("Agent `{}` created.", agent_identifier) +} + +pub fn post_creation_helpful_commands( + agent_identifier: &PublicIdentifier, + agent_instance: &AgentInstance, + command_prefix: &str, +) -> String { + let mut message = String::new(); + + message.push_str(&format!( + "To make use of the new agent, set it as a handler for a given purpose ({}, {}, etc.) either globally or in this room.", + AgentPurpose::TextGeneration, + AgentPurpose::SpeechToText, + )); + message.push_str("\n\n"); + + let supported_purposes: Vec<&AgentPurpose> = AgentPurpose::choices() + .into_iter() + .filter(|&p| { + if *p == AgentPurpose::CatchAll { + true + } else { + agent_instance.controller().supports_purpose(*p) + } + }) + .collect(); + + if !supported_purposes.is_empty() { + message.push_str( + "Choose and send to the room (**not in this thread**) one or a few of these commands:", + ); + message.push('\n'); + + let is_room_local = matches!(agent_identifier, PublicIdentifier::DynamicRoomLocal(_)); + + for purpose in supported_purposes { + message.push_str(&format!( + "\n- {}", + &set_as_purpose_handler_in_room(agent_identifier, purpose, command_prefix,) + )); + + if !is_room_local { + message.push_str(&format!( + "\n- {}", + &set_as_purpose_handler_globally(agent_identifier, purpose, command_prefix,) + )); + } + } + } else { + message.push_str( + "This agent does not support any handler purposes and cannot really be made use of.", + ); + } + + message.push_str("\n\n"); + + message.push_str(&format!( + "For more information about configuring handlers, see `{command_prefix} config`\n", + )); + + message +} + +fn set_as_purpose_handler_in_room( + agent_identifier: &PublicIdentifier, + purpose: &AgentPurpose, + command_prefix: &str, +) -> String { + let purpose_emoji = purpose.emoji(); + + format!( + "{purpose_emoji} Set as **{purpose}** handler in **this room**: `{command_prefix} config room set-handler {purpose} {agent_identifier}`", + ) +} + +fn set_as_purpose_handler_globally( + agent_identifier: &PublicIdentifier, + purpose: &AgentPurpose, + command_prefix: &str, +) -> String { + let purpose_emoji = purpose.emoji(); + + format!( + "{purpose_emoji} Set as fallback **{purpose}** handler **globally**: `{command_prefix} config global set-handler {purpose} {agent_identifier}`", + ) +} + +pub fn configuration_not_a_valid_yaml_hashmap(err: String) -> String { + format!( + "The provided configuration is not a valid YAML hashmap:\n```\n{}\n```", + err + ) +} + +pub fn creation_guide( + agent_identifier: &PublicIdentifier, + provider: &AgentProvider, + pretty_yaml: &str, +) -> String { + let mut message = String::from(""); + message.push_str(creation_welcome(agent_identifier, provider).as_str()); + message.push('\n'); + message.push_str(creation_example_config(pretty_yaml).as_str()); + + message.push_str("\n\n"); + message.push_str(creation_howto().as_str()); + message.push_str("\n\n"); + message.push_str(creation_raw_or_codeblock_ok().as_str()); + + message +} + +fn creation_welcome(agent_identifier: &PublicIdentifier, provider: &AgentProvider) -> String { + format!( + "You're defining a new agent (`{}`) powered by the `{}` provider.\n\nSend [YAML](https://en.wikipedia.org/wiki/YAML) configuration that describes it.", + agent_identifier, + provider.to_static_str(), + ) +} + +fn creation_example_config(pretty_yaml: &str) -> String { + format!("Below is an example:\n```yml\n{}\n```", pretty_yaml.trim()) +} + +fn creation_howto() -> String { + format!( + "{}\n\n{}", + "Copy, modify (with your own values) and send back the configuration to this message thread.", + "You may omit certain configuration keys (or set them to `null`) - this signals to the bot that certain capabilities are not supported by your agent.", + ) +} + +fn creation_raw_or_codeblock_ok() -> String { + "You can send the configuration as-is in a plain-text message or optionally wrap it in a [Markdown codeblock](https://www.markdownguide.org/extended-syntax/#fenced-code-blocks).".to_string() +} + +pub fn removed_room_local(agent_identifier: &PublicIdentifier, command_prefix: &str) -> String { + let mut message = String::new(); + + message.push_str(&removed(agent_identifier)); + message.push_str("\n\n"); + + message.push_str("This room may still have it configured as a handler. If so, handlers will fail with a friendly error message."); + message.push_str("\n\n"); + + message.push_str(&format!( + "Use the `{command_prefix} config status` command to see the handlers for this room.", + )); + + message +} + +pub fn removed_global(agent_identifier: &PublicIdentifier, command_prefix: &str) -> String { + let mut message = String::new(); + + message.push_str(&removed(agent_identifier)); + message.push_str("\n\n"); + + message.push_str("Neither per-room, nor global handlers were adjusted. Some rooms may still try to use this now-removed agent for a given purpose. If so, handlers for them will fail with a friendly error message."); + message.push_str("\n\n"); + + message.push_str(&format!( + "Use the `{command_prefix} config status` command to see the handlers for this room, as well as those configured as a global fallback." + )); + message.push('\n'); + message.push_str("This does not cover everything, but it's a start."); + + message +} + +fn removed(agent_identifier: &PublicIdentifier) -> String { + format!("Agent `{}` removed.", agent_identifier) +} + +pub fn purpose_unrecognized(purpose: &str) -> String { + format!("The `{}` purpose is unrecognized.", purpose) +} + +pub fn purpose_howto(purpose: &AgentPurpose) -> &'static str { + match purpose { + AgentPurpose::CatchAll => "used as a fallback, when no specific handler is configured", + AgentPurpose::TextGeneration => "communicating with you via text", + AgentPurpose::SpeechToText => "turning your voice messages into text", + AgentPurpose::TextToSpeech => "turning bot or users text messages into voice messages", + AgentPurpose::ImageGeneration => "generating images based on instructions", + } +} + +pub fn agent_list_empty() -> String { + "No agents are available.".to_string() +} + +pub fn non_empty_agent_list_block(agents: &Vec) -> String { + let mut message = String::new(); + + message.push_str(&agent_list_intro()); + message.push('\n'); + + for agent in agents { + let provider_info = agent.definition().provider.info(); + + let provider_display = match provider_info.homepage_url { + Some(url) => format!("[{}]({})", provider_info.name, url), + None => provider_info.name.to_string(), + }; + + message.push_str(&format!( + "- `{}` ({}), powered by {}\n", + agent.identifier(), + create_support_badges_text(agent.controller()), + provider_display, + )); + } + + message +} + +fn agent_list_intro() -> String { + "The following agents are available:".to_string() +} + +pub fn agent_list_legend_intro() -> String { + "Legend:".to_string() +} + +pub fn error_while_serving_purpose( + agent_identifier: &PublicIdentifier, + purpose: &AgentPurpose, + err: impl std::fmt::Display, +) -> String { + format!( + "There was a problem performing {} via the `{}` agent:\n\n{}", + purpose, + agent_identifier, + block_quote(&err.to_string()) + ) +} + +pub fn empty_response_returned(agent_identifier: &PublicIdentifier) -> String { + format!("The `{agent_identifier}` agent returned an empty response.") +} + +pub fn no_configuration_for_purpose_so_cannot_be_used(purpose: &AgentPurpose) -> String { + format!( + "This agent does not contain configuration for {} {}, so it cannot be used for that.", + purpose.emoji(), + purpose + ) +} + +pub fn no_configuration_for_purpose_after_conversion_so_cannot_be_used( + purpose: &AgentPurpose, +) -> String { + format!( + "This agent's configuration was converted to the OpenAI format, but conversion failed. There is no configuration for {} {}, so it cannot be used for that.", + purpose.emoji(), + purpose + ) +} + +pub fn create_support_badges_text(controller: &impl ControllerTrait) -> String { + let mut support_badges = vec![]; + + for purpose in AgentPurpose::choices() { + if *purpose == AgentPurpose::CatchAll { + // This is not a real purpose that users care about here + continue; + } + + if controller.supports_purpose(*purpose) { + support_badges.push(purpose.emoji()); + } + } + + if support_badges.is_empty() { + return "❌".to_owned(); + } + + support_badges.join(" ") +} diff --git a/src/strings/cfg.rs b/src/strings/cfg.rs new file mode 100644 index 0000000..1ccd166 --- /dev/null +++ b/src/strings/cfg.rs @@ -0,0 +1,356 @@ +use crate::{ + agent::{ + utils::AgentForPurposeDeterminationInfoConfigurationSource, AgentInstance, AgentPurpose, + PublicIdentifier, + }, + entity::roomconfig::{ + SpeechToTextFlowType, TextGenerationAutoUsage, TextGenerationPrefixRequirementType, + TextToSpeechBotMessagesFlowType, TextToSpeechUserMessagesFlowType, + }, + utils::text::block_quote, +}; + +pub fn error_config_type_not_replaced() -> String { + "The `CONFIG_TYPE` placeholder in the command was not replaced.\n\nIt should either be set to `room` (for room-specific configuration) or `global` (for global configuration).".to_owned() +} + +pub fn create_display_text_for_value(value: impl std::fmt::Display) -> String { + let value = value.to_string(); + + if value.to_string().contains("\n") { + format!("\n\n{}\n", block_quote(&value)) + } else { + format!(" `{}`", value) + } +} + +pub fn value_currently_set_to(value: impl std::fmt::Display) -> String { + format!( + "This configuration value is currently set to:{}", + create_display_text_for_value(value) + ) +} + +pub fn value_currently_unset() -> String { + "This configuration value is currently unset.".to_owned() +} + +pub fn configuration_invocation_incorrect_more_values_expected() -> String { + "The invocation for this command is incorrect. More values are expected in your command." + .to_string() +} + +pub fn configuration_getter_used_with_extra_text( + getter_name: &str, + remaining_text: &str, +) -> String { + format!("You're invoking a getter command (`{getter_name}`), but passing additional text (`{remaining_text}`) as if you're invoking a setter.\n\nPerhaps you meant to invoke `set-{getter_name}`?") +} + +pub fn configuration_value_unrecognized(value: &str) -> String { + format!("The value `{}` is not a recognized choice.", value) +} + +pub fn configuration_value_not_f32(value: &str) -> String { + format!("The value `{}` could not be converted to a [floating point number](https://en.wikipedia.org/wiki/Floating-point_arithmetic).", value) +} + +pub fn status_room_config_handlers_heading() -> &'static str { + "📍 Room-specific handlers" +} + +pub fn status_room_config_handlers_intro() -> &'static str { + "This **room's configuration** specifies the following handlers (**taking priority** over global handlers):" +} + +pub fn status_room_config_handlers_outro(command_prefix: &str) -> String { + let mut message = String::new(); + + message.push_str(&format!( + "Use `{command_prefix} config room set-handler` commands (see how via `{command_prefix} config`) to configure the handlers for this room.", + )); + + message.push_str("\n\n"); + + message.push_str( + "If a particular handler is unset, the catch-all handler would be used. If the catch-all handler is also unset, the global configuration would be used.", + ); + + message +} + +pub fn status_global_config_handlers_heading() -> &'static str { + "🌐 Global handlers" +} + +pub fn status_global_config_handlers_intro() -> &'static str { + "The **global configuration** specifies the following handlers:" +} + +pub fn status_global_config_handlers_outro(command_prefix: &str) -> String { + let mut message = String::new(); + + message.push_str(&format!( + "Use `{command_prefix} config global set-handler` commands (see how via `{command_prefix} config`) to configure the default handlers globally.", + )); + + message.push_str("\n\n"); + + message.push_str("If a particular handler is unset, the catch-all agent would be used."); + + message +} + +fn status_agent_not_found() -> &'static str { + "not found" +} + +pub fn status_handler_line_agent_found( + purpose: &AgentPurpose, + agent_id: &str, + agent: Option<&AgentInstance>, +) -> String { + let agent_status = match agent { + Some(agent) => super::agent::create_support_badges_text(agent.controller()), + None => status_agent_not_found().to_string(), + }; + + format!( + "- {} {}: `{}` ({})", + purpose.emoji(), + purpose, + agent_id, + agent_status, + ) + .to_owned() +} + +pub fn status_handler_line_catch_all_agent_not_set_globally() -> String { + format!( + "- {} {}: *not set*", + AgentPurpose::CatchAll.emoji(), + AgentPurpose::CatchAll, + ) + .to_owned() +} + +pub fn status_handler_line_catch_all_agent_not_set_in_room_default_to_global() -> String { + format!( + "- {} {}: *not set, defaulting to global config*", + AgentPurpose::CatchAll.emoji(), + AgentPurpose::CatchAll, + ) + .to_owned() +} + +pub fn status_handler_line_non_catch_all_agent_not_set_globally(purpose: &AgentPurpose) -> String { + format!( + "- {} {}: *not set, defaulting to {}*", + purpose.emoji(), + purpose, + AgentPurpose::CatchAll, + ) + .to_owned() +} + +pub fn status_handler_line_non_catch_all_agent_not_set_in_room_default_to_global( + purpose: &AgentPurpose, +) -> String { + format!( + "- {} {}: *not set, defaulting to {} or global config*", + purpose.emoji(), + purpose, + AgentPurpose::CatchAll, + ) + .to_owned() +} + +pub fn status_room_agents_heading() -> &'static str { + "🤖 Room-specific agents" +} + +pub fn status_room_agents_intro() -> &'static str { + "The following agents have been defined in this room:" +} + +pub fn status_room_agents_empty() -> &'static str { + "No agents have been defined in this room." +} + +pub fn status_room_agents_outro(command_prefix: &str) -> String { + let mut message = String::new(); + + message.push_str( + format!("Use `{command_prefix} agent create-room-local` commands (see how via `{command_prefix} help`) to define agents in this room.").as_str() + ); + + message.push_str("\n\n"); + + message.push_str(format!( + "You may also use any of the globally defined agents. See `{command_prefix} agent list` to see the full list of agents." + ).as_str()); + + message +} + +pub fn status_text_generation_heading() -> String { + format!( + "{} {}", + AgentPurpose::TextGeneration.emoji(), + AgentPurpose::TextGeneration.heading() + ) +} + +pub fn status_speech_to_text_heading() -> String { + format!( + "{} {}", + AgentPurpose::SpeechToText.emoji(), + AgentPurpose::SpeechToText.heading() + ) +} + +pub fn status_text_to_speech_heading() -> String { + format!( + "{} {}", + AgentPurpose::TextToSpeech.emoji(), + AgentPurpose::TextToSpeech.heading() + ) +} + +pub fn status_image_generation_heading() -> String { + format!( + "{} {}", + AgentPurpose::ImageGeneration.emoji(), + AgentPurpose::ImageGeneration.heading() + ) +} + +pub fn status_text_generation_entry_prefix_requirement_type( + value: TextGenerationPrefixRequirementType, + set_where: &str, +) -> String { + format!("- 🗟 Prefix Requirement Type: `{}` ({})\n", value, set_where) +} + +pub fn status_text_generation_entry_auto_usage( + value: TextGenerationAutoUsage, + set_where: &str, +) -> String { + format!("- đŸĒ„ Auto usage: `{}` ({})\n", value, set_where) +} + +pub fn status_text_generation_entry_context_management(value: bool, set_where: &str) -> String { + format!("- â™ģī¸ Context management: `{}` ({})\n", value, set_where) +} + +pub fn status_text_generation_entry_prompt(value: &str, set_where: &str) -> String { + let value = value.trim(); + + if value.is_empty() { + format!("- âŒ¨ī¸ Prompt: not using a prompt ({})\n", set_where) + } else { + format!("- âŒ¨ī¸ Prompt ({}):\n\n{}\n\n", set_where, block_quote(value)) + } +} + +pub fn status_text_generation_entry_temperature(value: Option, set_where: &str) -> String { + let formatted = match value { + Some(value) => format!("`{:.1}` ({})", value, set_where), + None => "not set".to_string(), + }; + + format!("- đŸŒĄī¸ Temperature: {}\n", formatted) +} + +pub fn status_speech_to_text_entry_flow_type( + value: SpeechToTextFlowType, + set_where: &str, +) -> String { + format!("- đŸĒ„ Flow type: `{}` ({})\n", value, set_where) +} + +pub fn status_speech_to_text_entry_language(value: Option, set_where: &str) -> String { + let formatted = match value { + Some(value) => format!("`{}` ({})", value, set_where), + None => "not set, using auto-detection".to_string(), + }; + + format!("- 🔤 Language: {}\n", formatted) +} + +pub fn status_text_to_speech_entry_bot_msgs_flow_type( + value: TextToSpeechBotMessagesFlowType, + set_where: &str, +) -> String { + format!( + "- đŸĒ„ Flow type for bot messages: `{}` ({})\n", + value, set_where + ) +} + +pub fn status_text_to_speech_entry_user_msgs_flow_type( + value: TextToSpeechUserMessagesFlowType, + set_where: &str, +) -> String { + format!( + "- đŸĒ„ Flow type for user messages: `{}` ({})\n", + value, set_where + ) +} + +pub fn status_text_to_speech_entry_speed(value: Option, set_where: &str) -> String { + let formatted = match value { + Some(value) => format!("`{:.1}` ({})", value, set_where), + None => "not set".to_string(), + }; + + format!("- ⚡ Speed: {}\n", formatted) +} + +pub fn status_text_to_speech_entry_voice(value: Option, set_where: &str) -> String { + let formatted = match value { + Some(value) => format!("`{}` ({})", value, set_where), + None => "not set".to_string(), + }; + + format!("- đŸ‘Ģ Voice: {}\n", formatted) +} + +pub fn status_entry_effective_agent_error() -> String { + "- 🤖 Effective handler agent: error determining agent\n".to_string() +} + +pub fn status_entry_effective_agent( + value: &PublicIdentifier, + source: AgentForPurposeDeterminationInfoConfigurationSource, +) -> String { + let set_where = match source { + AgentForPurposeDeterminationInfoConfigurationSource::Room => { + status_badge_set_in_room_config() + } + AgentForPurposeDeterminationInfoConfigurationSource::Global => { + status_badge_set_in_global_config() + } + }; + + format!( + "- 🤖 Effective handler agent: `{}` ({})\n", + value, set_where + ) +} + +pub fn status_badge_set_in_room_config() -> &'static str { + "**📍 set in room**" +} + +pub fn status_badge_set_in_global_config() -> &'static str { + "**🌐 set globally**" +} + +pub fn status_badge_using_hardcoded_default() -> &'static str { + "📝 using hardcoded default" +} + +pub fn status_badge_set_in_agent_config() -> &'static str { + "🤖 set at the agent level" +} diff --git a/src/strings/error.rs b/src/strings/error.rs new file mode 100644 index 0000000..e8135a1 --- /dev/null +++ b/src/strings/error.rs @@ -0,0 +1,15 @@ +pub fn unknown_command_see_help(command_prefix: &str) -> String { + format!("Unknown command. See help (`{command_prefix} help`).") +} + +pub fn error_while_processing_message() -> &'static str { + "An error occurred while processing your message. Please try again." +} + +pub fn message_is_encrypted() -> &'static str { + "This message is encrypted and I cannot decrypt it right now, so I cannot properly serve you." +} + +pub fn first_message_in_thread_is_encrypted() -> &'static str { + "The first message in this chat thread is encrypted and I cannot decrypt it right now, so I cannot properly serve you." +} diff --git a/src/strings/global_config.rs b/src/strings/global_config.rs new file mode 100644 index 0000000..85739db --- /dev/null +++ b/src/strings/global_config.rs @@ -0,0 +1,67 @@ +use crate::agent::{AgentPurpose, PublicIdentifier}; + +pub fn no_permissions_to_administrate() -> &'static str { + "You do not have permission to administrate the global config." +} + +pub fn not_allowed_to_use_agent_in_global_config(agent_identifier: &PublicIdentifier) -> String { + format!( + "The agent `{}` is not allowed to be used in the global configuration.", + agent_identifier + ) +} + +pub fn global_config_lacks_specific_agent_for_purpose(purpose: AgentPurpose) -> String { + format!( + "The global configuration does not specify any agent for the `{}` purpose.", + purpose + ) +} + +pub fn configured_to_use_agent_for_purpose( + agent_identifier: &PublicIdentifier, + purpose: AgentPurpose, +) -> String { + format!( + "The global configuration specifies that the `{}` agent is to be used for the `{}` purpose.", + agent_identifier, purpose + ) +} + +pub fn configures_agent_for_purpose_but_does_not_exist( + agent_identifier: &PublicIdentifier, + purpose: AgentPurpose, +) -> String { + format!( + "The global configuration specifies that the `{}` agent is to be used for the `{}` purpose, but such an agent does not exist.", + agent_identifier, purpose + ) +} + +pub fn reconfigured_to_use_agent_for_purpose( + agent_identifier: &PublicIdentifier, + purpose: AgentPurpose, +) -> String { + format!( + "The global configuration has been adjusted to use the `{}` agent for the `{}` purpose.", + agent_identifier, purpose + ) +} + +pub fn reconfigured_to_not_specify_agent_for_purpose(purpose: AgentPurpose) -> String { + format!( + "The global configuration has been adjusted to not specify any agent for the `{}` purpose.", + purpose + ) +} + +pub fn value_was_set_to(value: impl std::fmt::Display) -> String { + format!( + "This global configuration value was set to:{}", + super::cfg::create_display_text_for_value(value) + ) +} + +pub fn value_was_unset() -> String { + "This global configuration value has been unset.".to_owned() +} diff --git a/src/strings/help/access.rs b/src/strings/help/access.rs new file mode 100644 index 0000000..9010ced --- /dev/null +++ b/src/strings/help/access.rs @@ -0,0 +1,80 @@ +pub fn heading() -> String { + "🔒 Access".to_owned() +} + +pub fn intro() -> String { + "This bot employs access control to decide who can use its services and manage its configuration.".to_string() +} + +pub fn room_auto_join_heading() -> String { + "👋 Joining rooms".to_owned() +} + +pub fn room_auto_join_intro() -> String { + "The bot automatically joins rooms when invited by someone considered a bot user (see below)." + .to_string() +} + +pub fn users_heading() -> String { + "đŸ‘Ĩ Users".to_owned() +} + +pub fn users_intro() -> String { + "The bot will ignore messages (and room invitations) from unallowed users.".to_string() +} + +pub fn users_access() -> String { + "Users can **use all the bot's features** (text-generation, speech-to-text, etc.), but cannot manage the bot's configuration.".to_string() +} + +pub fn users_command_get(command_prefix: &str) -> String { + format!("- **Show** the currently allowed users: `{command_prefix} access users`") +} + +pub fn users_command_set(command_prefix: &str) -> String { + format!("- **Set** the list of allowed users: `{command_prefix} access set-users SPACE_SEPARATED_PATTERNS`") +} + +pub fn example_user_patterns(own_server_name: &str) -> String { + format!("Example patterns: `@*:{own_server_name} @*:another.com @someone:company.org`") +} + +pub fn administrators_heading() -> String { + "đŸ‘Žâ€â™‚ī¸ Administrators".to_owned() +} + +pub fn administrators_intro() -> String { + "Administrators can **manage the bot's configuration and access control**.".to_string() +} + +pub fn administrators_now_match_patterns(patterns: &[String]) -> String { + format!( + "The bot can be administrated by users with a [Matrix user id](https://spec.matrix.org/v1.11/#users) matching the following patterns: `{}`", + patterns.join(" "), + ) +} + +pub fn administrators_outro() -> String { + "Administrators cannot be changed without adjusting the bot's configuration on the server." + .to_string() +} + +pub fn room_local_agent_managers_heading() -> String { + "đŸ’ŧ Room-local agent managers".to_owned() +} + +pub fn room_local_agent_managers_intro(command_prefix: &str) -> String { + format!("Room-local agent managers are users privileged to **create their own agents** (see `{command_prefix} agent`) in rooms.") +} + +pub fn room_local_agent_managers_security_warning() -> String { + "Letting regular users create agents which contact arbitrary network services **may be a security issue**.".to_string() +} + +pub fn room_local_agent_managers_command_get(command_prefix: &str) -> String { + format!("- **Show** the currently allowed users: `{command_prefix} access room-local-agent-managers`") +} + +pub fn room_local_agent_managers_command_set(command_prefix: &str) -> String { + format!("- **Set** the list of allowed users: `{command_prefix} access set-room-local-agent-managers SPACE_SEPARATED_PATTERNS`") +} diff --git a/src/strings/help/agent.rs b/src/strings/help/agent.rs new file mode 100644 index 0000000..f39801d --- /dev/null +++ b/src/strings/help/agent.rs @@ -0,0 +1,60 @@ +pub fn heading() -> String { + "🤖 Agents".to_owned() +} + +pub fn intro(command_prefix: &str, can_see_providers: bool) -> String { + format!( + "An agent is an instantiation and configuration of some **â˜ī¸ provider**{}.", + if can_see_providers { + format!(" (see `{command_prefix} provider`)") + } else { + "".to_owned() + } + ) +} + +pub fn intro_handler_relation(command_prefix: &str) -> String { + format!( + "Agents can be set as **handlers for various purposes** (text-generation, speech-to-text, etc.) globally or in specific rooms. Send a `{command_prefix} config status` command to see the current configuration." + ) +} + +pub fn intro_capabilities() -> String { + "It can support different capabilities (text-generation, speech-to-text, etc.) depending on the provider used and on the configuration of the agent.".to_string() +} + +pub fn no_permission_to_create_agents() -> &'static str { + "You are neither an administrator, nor a room-local agent manager, so **you cannot create new agents by yourself**." +} + +pub fn list_agents(command_prefix: &str) -> String { + format!("- **List** all available agents: `{command_prefix} agent list`") +} + +pub fn show_agent_details(command_prefix: &str) -> String { + format!("- **Show** full details for a given agent: `{command_prefix} agent details FULL_AGENT_IDENTIFIER`") +} + +pub fn create_agent_intro() -> &'static str { + "- **Create** a new agent:" +} + +pub fn create_agent_room_local(command_prefix: &str) -> String { + format!("\t- (Accessible in **this room only**) `{command_prefix} agent create-room-local PROVIDER_ID AGENT_ID`") +} + +pub fn create_agent_global(command_prefix: &str) -> String { + format!("\t- (Accessible in **all rooms**) `{command_prefix} agent create-global PROVIDER_ID AGENT_ID`") +} + +pub fn create_agent_example(command_prefix: &str) -> String { + format!("\t- Example: `{command_prefix} agent create-room-local openai my-openai-agent`") +} + +pub fn delete_agent(command_prefix: &str) -> String { + format!("- **Delete** an agent: `{command_prefix} agent delete FULL_AGENT_IDENTIFIER`") +} + +pub fn available_commands_outro_update_note() -> &'static str { + "To **update** a given agent's configuration: show the agent's **details** (current configuration), then **delete** it and finally **re-create** it." +} diff --git a/src/strings/help/cfg.rs b/src/strings/help/cfg.rs new file mode 100644 index 0000000..59a0b6c --- /dev/null +++ b/src/strings/help/cfg.rs @@ -0,0 +1,273 @@ +use crate::agent::AgentPurpose; + +pub fn heading() -> String { + "đŸ› ī¸ Configuration".to_owned() +} + +pub fn intro_short() -> &'static str { + "Various settings for this bot can be configured **📍 per-room** and **🌐 globally**." +} + +pub fn intro_long() -> String { + format!( + "{}\n\n{}\n{}\n\n{}", + intro_short(), + "Room-specific configuration values override the global configuration.", + "When no configuration values are set, the bot uses hardcoded defaults.", + "In commands below, **replace the `CONFIG_TYPE` value** with either `room` (for room-specific configuration) or `global` (for global configuration)." + ) +} + +pub fn status_heading() -> String { + "📃 Status".to_owned() +} + +pub fn status_intro(command_prefix: &str) -> String { + format!("To **show a summary** of the configuration affecting the current room: `{command_prefix} config status`") +} + +pub fn handlers_heading() -> String { + "🤖 Handler Agents".to_owned() +} + +pub fn handlers_intro_common() -> String { + format!( + "{}\n\n{}", + "Different messages (text, audio, requests for image generation, etc.) in the room are handled differently and can potentially be served by different agents.", + "When no specific agent is configured for a given purpose, the catch-all agent would be used.", + ) +} + +pub fn handlers_intro_purposes() -> String { + let mut message = String::new(); + + message.push_str("The following purposes are available:"); + message.push('\n'); + + for purpose in AgentPurpose::choices() { + message.push_str(&format!( + "\n- {} {}: {}", + purpose.emoji(), + purpose.as_str(), + super::super::agent::purpose_howto(purpose), + )); + } + + message +} + +pub fn handlers_show(command_prefix: &str) -> String { + format!("**Show** the currently configured agent for the given purpose: `{command_prefix} config CONFIG_TYPE handler PURPOSE`") +} + +pub fn handlers_set(command_prefix: &str) -> String { + format!("**Set** the agent to be used for the given purpose: `{command_prefix} config CONFIG_TYPE set-handler PURPOSE AGENT_ID`") +} + +pub fn handlers_unset(command_prefix: &str) -> String { + format!("**Unset** the agent to be used for the given purpose: `{command_prefix} config CONFIG_TYPE set-handler PURPOSE`") +} + +pub fn text_generation_heading() -> String { + format!( + "{} {}", + AgentPurpose::TextGeneration.emoji(), + AgentPurpose::TextGeneration.heading() + ) +} + +pub fn text_generation_common() -> String { + let text_generation_description = + "Text Generation is the bot's ability to generate text based on the input it receives."; + + let input_types = format!( + "This input may be received directly as text, or as audio (a voice message) transcribed to text by the bot itself (see {} {}).", + AgentPurpose::SpeechToText.emoji(), + AgentPurpose::SpeechToText.heading() + ); + + format!("{}\n{}", text_generation_description, input_types) +} + +pub fn text_generation_prefix_requirement_type_heading() -> &'static str { + "🗟 Prefix Requirement Type" +} + +pub fn text_generation_prefix_requirement_type_intro() -> String { + "Controls whether all messages trigger text generation or just those prefixed in a certain way." + .to_owned() +} + +pub fn text_generation_prefix_requirement_type_outro(bot_username: &str) -> String { + format!("Regardless of the setting, the bot will always respond to **direct mentions** (e.g. `@{bot_username}`).") +} + +pub fn text_generation_auto_usage_heading() -> &'static str { + "đŸĒ„ Auto usage" +} + +pub fn text_generation_auto_usage_intro() -> String { + "Controls how automatic text-generation functions.".to_owned() +} + +pub fn text_generation_context_management_heading() -> &'static str { + "â™ģī¸ Context Management" +} + +pub fn text_generation_context_management_intro() -> String { + format!( + "{}\n{}", + "Controls the bot's ability to **intelligently drop old messages from the conversation context** when it gets too large.", + "This feature relies on [tokenization](https://en.wikipedia.org/wiki/Large_language_model#Tokenization) performed by the [tiktoken-rs](https://github.com/zurawiki/tiktoken-rs) library which is [poorly well-maintained](https://github.com/zurawiki/tiktoken-rs/issues/50) and only works well for [OpenAI](./providers.md#openai) models.", + ) +} + +pub fn text_generation_prompt_override_heading() -> &'static str { + "âŒ¨ī¸ Prompt Override" +} + +pub fn text_generation_prompt_override_intro() -> String { + "Lets you override the [system prompt](https://huggingface.co/docs/transformers/en/tasks/prompting) parameter configured at the agent level.".to_string() +} + +pub fn text_generation_temperature_override_heading() -> &'static str { + "đŸŒĄī¸ Temperature Override" +} + +pub fn text_generation_temperature_override_intro() -> String { + "Lets you override the [temperature](https://blogs.novita.ai/what-are-large-language-model-settings-temperature-top-p-and-max-tokens/#what-is-llm-temperature) (randomness / creativity) parameter configured at the agent level.".to_string() +} + +pub fn current_setting_show(command_prefix: &str, setting_path_parts: &str) -> String { + format!( + "**Show** the current setting: `{command_prefix} config CONFIG_TYPE {setting_path_parts}`" + ) +} + +pub fn current_setting_set(command_prefix: &str, setting_path_parts: &str) -> String { + format!("**Set**: `{command_prefix} config CONFIG_TYPE {setting_path_parts}`") +} + +pub fn current_setting_unset(command_prefix: &str, setting_path_parts: &str) -> String { + format!("**Unset**: `{command_prefix} config CONFIG_TYPE {setting_path_parts}`") +} + +pub fn the_following_configuration_values_are_recognized( + values: Vec, +) -> String { + let values_with_backticks = values + .iter() + .map(|v| format!("`{}`", v)) + .collect::>(); + + format!( + "The following configuration values are recognized: {}", + values_with_backticks.join(", ") + ) +} + +pub fn speech_to_text_heading() -> String { + format!( + "{} {}", + AgentPurpose::SpeechToText.emoji(), + AgentPurpose::SpeechToText.heading() + ) +} + +pub fn speech_to_text_common() -> String { + let intro = "Speech-to-Text is the bot's ability to **turn audio (voice) messages into text**."; + + let text_gen = format!( + "The generated text can be used for {} {}, or not (transcription only).", + AgentPurpose::TextGeneration.emoji(), + AgentPurpose::TextGeneration.heading() + ); + + let text_to_speech = format!( + "The bot may also turn the generated text response back into a voice message (see {} {}).", + AgentPurpose::TextToSpeech.emoji(), + AgentPurpose::TextToSpeech.heading() + ); + + format!("{}\n{}\n{}", intro, text_gen, text_to_speech) +} + +pub fn speech_to_text_flow_type_heading() -> &'static str { + "đŸĒ„ Flow Type" +} + +pub fn speech_to_text_flow_type_intro() -> &'static str { + "Controls how voice messages are handled." +} + +pub fn speech_to_text_language_heading() -> &'static str { + "🔤 Language" +} + +pub fn speech_to_text_language_intro() -> &'static str { + "Lets you specify the language of the input voice messages, to avoid using auto-detection.\nSupplying the input language using a 2-letter code (e.g. `ja`) as per [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) may improve accuracy & latency.\n\nIf different users are using different languages, do not specify a language." +} + +pub fn text_to_speech_heading() -> String { + format!( + "{} {}", + AgentPurpose::TextToSpeech.emoji(), + AgentPurpose::TextToSpeech.heading() + ) +} + +pub fn text_to_speech_common() -> &'static str { + "Text-to-Speech is the bot's ability to **turn text messages into voice messages**." +} + +pub fn text_to_speech_bot_msgs_flow_type_heading() -> &'static str { + "đŸĒ„ Bot Messages Flow Type" +} + +pub fn text_to_speech_bot_msgs_flow_type_intro() -> String { + "Controls how automatic text-to-speech functions for **messages sent by the bot**.".to_owned() +} + +pub fn text_to_speech_user_msgs_flow_type_heading() -> &'static str { + "đŸĒ„ User Messages Flow Type" +} + +pub fn text_to_speech_user_msgs_flow_type_intro() -> String { + "Controls how automatic text-to-speech functions for **messages sent by users**.\n**Only works when automatic text-generation is disabled** (see Text Generation / Auto usage).".to_owned() +} + +pub fn text_to_speech_speed_override_heading() -> &'static str { + "🗲 Speed override" +} + +pub fn text_to_speech_speed_override_intro() -> String { + format!( + "{}\n{}", + "Lets you speed up/down speech relative to the default speed (`1.0` when unset).", + "Values typically range from `0.25` to `4.0`, but may vary depending on the selected model.", + ) +} + +pub fn text_to_speech_voice_override_heading() -> &'static str { + "đŸ‘Ģ Voice override" +} + +pub fn text_to_speech_voice_override_intro() -> String { + format!( + "{}\n\n{}", + "Lets you change the default voice configured in the agent configuration.", + "Possible values (e.g. `onyx`) depend on the model you're using. For example, for OpenAI's Whisper model, [these voices](https://platform.openai.com/docs/guides/text-to-speech/voice-options) are available.", + ) +} + +pub fn image_generation_heading() -> String { + format!( + "{} {}", + AgentPurpose::ImageGeneration.emoji(), + AgentPurpose::ImageGeneration.heading() + ) +} + +pub fn image_generation_common() -> &'static str { + "Image-generation is the bot's ability to **generate images** based on text prompts.\n\nThis feature is not configurable at the moment." +} diff --git a/src/strings/help/mod.rs b/src/strings/help/mod.rs new file mode 100644 index 0000000..c58652d --- /dev/null +++ b/src/strings/help/mod.rs @@ -0,0 +1,17 @@ +pub mod access; +pub mod agent; +pub mod cfg; +pub mod provider; +pub mod usage; + +pub fn heading_introduction() -> String { + "👋 Introduction".to_owned() +} + +pub fn available_commands_intro() -> &'static str { + "You can run the following commands:" +} + +pub fn learn_more_send_a_command(command_prefix: &str, command_parts: &str) -> String { + format!("To learn more, send a `{command_prefix} {command_parts}` command.") +} diff --git a/src/strings/help/provider.rs b/src/strings/help/provider.rs new file mode 100644 index 0000000..8917f54 --- /dev/null +++ b/src/strings/help/provider.rs @@ -0,0 +1,7 @@ +pub fn heading() -> String { + "â˜ī¸ Providers".to_owned() +} + +pub fn intro() -> String { + "Agents are powered by a provider. The provider could be powered by a local service or a cloud service.".to_string() +} diff --git a/src/strings/help/usage.rs b/src/strings/help/usage.rs new file mode 100644 index 0000000..2408795 --- /dev/null +++ b/src/strings/help/usage.rs @@ -0,0 +1,7 @@ +pub fn heading() -> &'static str { + "📖 Usage" +} + +pub fn intro() -> &'static str { + "The bot can perform various tasks, such as đŸ’Ŧ Text Generation, đŸ—Ŗī¸ Text-to-Speech, đŸĻģ Speech-to-Text, đŸ–Œī¸ Image Generation, and more." +} diff --git a/src/strings/image_generation.rs b/src/strings/image_generation.rs new file mode 100644 index 0000000..4c13734 --- /dev/null +++ b/src/strings/image_generation.rs @@ -0,0 +1,15 @@ +pub fn revised_prompt(prompt: &str) -> String { + format!("💭 Revised prompt to: {}", prompt) +} + +pub fn guide_how_to_proceed() -> String { + let mut message = String::new(); + + message.push_str("💡 Respond in this thread with:\n"); + message.push_str("- more messages: to expand on your original prompt\n"); + message.push_str( + "- a message saying `again`: to generate one more image with the current prompt.\n", + ); + + message +} diff --git a/src/strings/introduction.rs b/src/strings/introduction.rs new file mode 100644 index 0000000..0191611 --- /dev/null +++ b/src/strings/introduction.rs @@ -0,0 +1,146 @@ +use crate::agent::utils::get_effective_agent_for_purpose; +use crate::agent::utils::AgentForPurposeDeterminationError; +use crate::agent::{AgentPurpose, Manager as AgentManager}; +use crate::entity::roomconfig::TextGenerationPrefixRequirementType; +use crate::entity::RoomConfigContext; + +fn hello() -> &'static str { + "Hello! 👋" +} + +pub fn its_me(name: &str) -> String { + let mut message = format!("I'm {name} - a bot exposing the power of [AI](https://en.wikipedia.org/wiki/Artificial_intelligence) ([Large Language Models](https://en.wikipedia.org/wiki/Large_language_model)) to you. 🤖"); + + if name == crate::entity::cfg::defaults::name() { + message.push('\n'); + message.push_str("My name is pronounced 'bye' and is a play on [AI](https://en.wikipedia.org/wiki/Artificial_intelligence), referencing the fictional character [🇧đŸ‡Ŧ Bai Ganyo](https://en.wikipedia.org/wiki/Bay_Ganyo)."); + } + + message +} + +fn purposes_intro() -> &'static str { + "I can typically be used for the following purposes:" +} + +fn no_text_generation_handler_agent() -> String { + format!( + "There is no configured handler agent which supports {} {}.", + AgentPurpose::TextGeneration.emoji(), + AgentPurpose::TextGeneration + ) +} + +fn introduction_outro(command_prefix: &str) -> String { + format!( + "You may also send a `{command_prefix} help` command message in this room for more information." + ) +} + +pub async fn create_on_join_introduction( + name: &str, + command_prefix: &str, + agent_manager: &AgentManager, + room_config_context: &RoomConfigContext, +) -> String { + let mut message = String::new(); + + message.push_str(hello()); + message.push_str("\n\n"); + message.push_str(&create_short_introduction(name)); + message.push_str("\n\n"); + + let mut got_text_generation_agent = false; + + message.push_str(purposes_intro()); + for purpose in AgentPurpose::choices() { + if *purpose == AgentPurpose::CatchAll { + continue; + } + + let mut purpose_intro_line = format!( + "\n- {} {}: {}", + purpose.emoji(), + purpose.as_str(), + super::agent::purpose_howto(purpose), + ); + + let agent_info = + get_effective_agent_for_purpose(agent_manager, room_config_context, *purpose).await; + + let current_status_text = match agent_info { + Ok(agent_info) => { + let agent_instance = agent_info.instance; + let provider_info = agent_instance.definition().provider.info(); + + if *purpose == AgentPurpose::TextGeneration { + got_text_generation_agent = true; + } + + let provider_display = match provider_info.homepage_url { + Some(url) => format!("[{}]({})", provider_info.name, url), + None => provider_info.name.to_owned(), + }; + + format!( + "✅ enabled via the `{}` agent, powered by the {} provider", + agent_instance.identifier(), + provider_display, + ) + } + Err(err) => match err { + AgentForPurposeDeterminationError::Unknown(err) => { + crate::utils::status::create_error_message_text(&err).to_owned() + } + AgentForPurposeDeterminationError::NoneConfigured => { + "❌ no agent configured".to_string() + } + AgentForPurposeDeterminationError::ConfiguredButMissing(agent_identifier) => { + format!("❌ configured via `{agent_identifier}`, but the agent is missing") + } + AgentForPurposeDeterminationError::ConfiguredButLacksSupport(agent_identifier) => { + format!("❌ configured via `{agent_identifier}`, but support is missing") + } + }, + }; + + purpose_intro_line.push_str(&format!(" ({})", current_status_text)); + + message.push_str(&purpose_intro_line); + } + message.push_str("\n\n"); + + if got_text_generation_agent { + message.push_str(&simply_send_a_message( + command_prefix, + room_config_context.text_generation_prefix_requirement_type(), + )); + } else { + message.push_str(&no_text_generation_handler_agent()); + } + + message.push_str("\n\n"); + + message.push_str(&introduction_outro(command_prefix)); + + message +} + +pub fn create_short_introduction(name: &str) -> String { + its_me(name) +} + +fn simply_send_a_message( + command_prefix: &str, + prefix_requirement_type: TextGenerationPrefixRequirementType, +) -> String { + match prefix_requirement_type { + TextGenerationPrefixRequirementType::No => { + "**To make use of me, send a message** in this room (e.g. `Hello!`) and see me reply." + .to_owned() + } + TextGenerationPrefixRequirementType::CommandPrefix => { + format!("In this room, I'm configured to require the command prefix (`{command_prefix}`) for text messages.\n**To make use of me, send a prefixed text message** (e.g. `{command_prefix} Hello!`) and see me reply.") + } + } +} diff --git a/src/strings/mod.rs b/src/strings/mod.rs new file mode 100644 index 0000000..c2aa17a --- /dev/null +++ b/src/strings/mod.rs @@ -0,0 +1,19 @@ +pub mod access; +pub mod agent; +pub mod cfg; +pub mod error; +pub mod global_config; +pub mod help; +pub mod image_generation; +pub mod introduction; +pub mod provider; +pub mod room_config; +pub mod speech_to_text; +pub mod text_to_speech; +pub mod usage; + +pub const PROGRESS_INDICATOR_EMOJI: &str = "âŗ"; + +pub fn the_following_commands_are_available() -> &'static str { + "The following commands are available:" +} diff --git a/src/strings/provider.rs b/src/strings/provider.rs new file mode 100644 index 0000000..a550a1b --- /dev/null +++ b/src/strings/provider.rs @@ -0,0 +1,110 @@ +use crate::agent::AgentInstantiationError; +use crate::agent::AgentProvider; +use crate::agent::AgentProviderInfo; + +pub fn invalid(provider: &str) -> String { + let choices_string = AgentProvider::choices() + .iter() + .map(|choice| format!("`{}`", choice.to_static_str(),)) + .collect::>() + .join(", "); + + format!( + "`{}` is not a valid provider choice. Valid choices are: {}", + provider, choices_string + ) +} + +pub fn invalid_configuration_for_provider( + provider: &AgentProvider, + err: AgentInstantiationError, +) -> String { + format!( + "The provided configuration is not valid for the `{}` provider:\n```\n{:?}\n```", + provider, err + ) +} + +pub fn not_allowed() -> String { + "You are not allowed to see the providers list.".to_owned() +} + +pub fn providers_list_intro() -> String { + "The list of supported providers is below.".to_owned() +} + +pub fn help_how_to_choose_heading() -> String { + "How to choose a provider".to_string() +} + +pub fn help_how_to_choose_description(command_prefix: &str) -> String { + let str = r#" +If you're not sure which provider to start with, we **recommend OpenAI** as it's the most popular and has the **widest range of capabilities**. + +You don't need to choose just one though. The bot supports **mixing & matching models** (by setting different handlers for different types of messages - see `%command_prefix% config`), so you can use multiple providers at the same time. +"#; + + str.replace("%command_prefix%", command_prefix) + .trim() + .to_owned() +} + +pub fn help_how_to_use_heading() -> String { + "How to use a provider".to_string() +} + +pub fn help_how_to_use_description(command_prefix: &str) -> String { + let str = r#" +- sign up for it +- obtain an API key +- create a new agent (see `%command_prefix% agent`) +- set the new agent as a handler for some types of messages (see `%command_prefix% config`) +"#; + + str.replace("%command_prefix%", command_prefix) + .trim() + .to_owned() +} + +pub fn help_provider_heading(provider_name: &str, homepage_url: &Option) -> String { + match homepage_url { + Some(url) => format!("[{}]({})", provider_name, url), + None => provider_name.to_owned(), + } +} + +pub fn help_provider_details(id: &str, info: &AgentProviderInfo) -> String { + let mut message = String::new(); + + message.push_str(info.description.trim()); + message.push_str("\n\n"); + + message.push_str(&format!("- 🆔 Identifier: `{}`\n", id)); + + let mut links = Vec::new(); + if let Some(url) = info.homepage_url { + links.push(format!("[🏠 Home page]({})", url)); + } + if let Some(url) = info.wiki_url { + links.push(format!("[🌐 Wiki]({})", url)); + } + if let Some(url) = info.sign_up_url { + links.push(format!("[👤 Sign up]({})", url)); + } + if let Some(url) = info.models_list_url { + links.push(format!("[📋 Models list]({})", url)); + } + + if !links.is_empty() { + message.push_str(&format!("- 🔗 Links: {}\n", links.join(", "))); + } + + let mut capabilities = vec![]; + for purpose in info.supported_purposes.iter() { + capabilities.push(format!("{} {}", purpose.emoji(), purpose.as_str())); + } + + message.push_str(&format!("- 🌟 Capabilities: {}\n", capabilities.join(", "))); + + message +} diff --git a/src/strings/room_config.rs b/src/strings/room_config.rs new file mode 100644 index 0000000..e979489 --- /dev/null +++ b/src/strings/room_config.rs @@ -0,0 +1,67 @@ +use crate::agent::{AgentPurpose, PublicIdentifier}; + +pub fn room_not_configured_with_specific_agent_for_purpose(purpose: AgentPurpose) -> String { + format!( + "This room is not configured to use any specific agent for the `{}` purpose.", + purpose + ) +} + +pub fn configured_to_use_agent_for_purpose( + agent_identifier: &PublicIdentifier, + purpose: AgentPurpose, +) -> String { + format!( + "This room is configured to use the `{agent_identifier}` agent for the `{purpose}` purpose.", + ) +} + +pub fn configures_agent_for_purpose_but_does_not_exist( + agent_identifier: &PublicIdentifier, + purpose: AgentPurpose, +) -> String { + format!( + "This room is configured to use the `{agent_identifier}` agent for the `{purpose}` purpose, but such an agent does not exist.", + ) +} + +pub fn configures_agent_for_purpose_but_agent_does_not_support_it( + agent_identifier: &PublicIdentifier, + purpose: AgentPurpose, +) -> String { + format!( + "This room is configured to use the `{}` agent for {} (either directly, or through a {} fallback), but this agent does not support being used for {}.", + agent_identifier, + purpose, + AgentPurpose::CatchAll, + purpose, + ) +} + +pub fn reconfigured_to_use_agent_for_purpose( + agent_identifier: &PublicIdentifier, + purpose: AgentPurpose, +) -> String { + format!( + "This room has been reconfigured to use the `{}` agent for the `{}` purpose.", + agent_identifier, purpose + ) +} + +pub fn reconfigured_to_not_specify_agent_for_purpose(purpose: AgentPurpose) -> String { + format!( + "This room has been reconfigured to not specify any agent for the `{}` purpose.", + purpose + ) +} + +pub fn value_was_set_to(value: impl std::fmt::Display) -> String { + format!( + "This room-specific configuration value was set to:{}", + super::cfg::create_display_text_for_value(value) + ) +} + +pub fn value_was_unset() -> String { + "This room-specific configuration value has been unset.".to_owned() +} diff --git a/src/strings/speech_to_text.rs b/src/strings/speech_to_text.rs new file mode 100644 index 0000000..e055734 --- /dev/null +++ b/src/strings/speech_to_text.rs @@ -0,0 +1,11 @@ +pub fn redaction_reason_done() -> &'static str { + "Done transcribing" +} + +pub fn redaction_reason_failed() -> &'static str { + "Failed while transcribing" +} + +pub fn language_code_invalid(value: &str) -> String { + format!("The value `{}` is not a valid 2-letter language code as per [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes).", value) +} diff --git a/src/strings/text_to_speech.rs b/src/strings/text_to_speech.rs new file mode 100644 index 0000000..e9f9ee7 --- /dev/null +++ b/src/strings/text_to_speech.rs @@ -0,0 +1,11 @@ +pub fn alternate_body_text() -> String { + "Generated speech from text".to_owned() +} + +pub fn redaction_reason_done() -> &'static str { + "Done with speech-to-text" +} + +pub fn redaction_reason_failed() -> &'static str { + "Failed while doing speech-to-text" +} diff --git a/src/strings/usage.rs b/src/strings/usage.rs new file mode 100644 index 0000000..5d6f8ef --- /dev/null +++ b/src/strings/usage.rs @@ -0,0 +1,62 @@ +pub fn intro(command_prefix: &str) -> String { + let message = r#" +## 📖 Usage + +To get an **overview of the current configuration affecting this room**, send a `%command_prefix% config status` command. + +To **adjust settings**, see `%command_prefix% config`. + +### đŸ’Ŧ Text Generation + +If there's a text-generation handler agent configured (see `%command_prefix% config status`), the bot **may** respond to messages sent in the room. + +Whether the bot responds depends on the **đŸ’Ŧ Text Generation / 🗟 Prefix Requirement** setting (see `%command_prefix% config status`). +Sometimes, a prefix (e.g. `%command_prefix%`) is required in front of messages sent to the room for the bot to respond. +For multi-user rooms, this setting defaults to "required" + +Room messages start a threaded conversation where you can continue back-and-forth communication with the bot. + +### đŸ—Ŗī¸ Text-to-Speech + +If there's a text-to-speech handler agent configured (see `%command_prefix% config status`), the bot **may** convert text messages sent to the room to audio (voice). + +By default, the bot will offer text-to-speech for its own messages which are a response to voice messages coming from you. Simply click the đŸ—Ŗī¸ reaction on the bot's message and the bot will convert the text message to audio. This is configurable via the **đŸ—Ŗī¸ Text-to-Speech / đŸĒ„ Bot Messages Flow Type** setting. + +The bot may be configured to also turn your own text messages to audio (voice) via the **đŸ—Ŗī¸ Text-to-Speech / đŸĒ„ User Messages Flow Type** setting. + + +### đŸĻģ Speech-to-Text + +If there's a speech-to-text handler agent configured (see `%command_prefix% config status`), the bot **may** transcribe voice messages sent to the room to text. + +By default, the bot will also perform đŸ’Ŧ Text Generation on the text. This is configurable via the **đŸĻģ Speech-to-Text / đŸĒ„ Flow Type** setting. + +If all your messages are in the same language, you can improve accuracy & latency by configuring the language via the **đŸĻģ Speech-to-Text / 🔤 Language** setting. + + +### đŸ–Œī¸ Image Generation + +#### Generating images + +Simply send a command like `%command_prefix% image A beautiful sunset over the ocean` and the bot will start a threaded conversation and post an image based on your prompt. + +You can then, respond in the same message thread with: + +- more messages, to add more criteria to your prompt. +- a message saying `again`, to generate one more image with the current prompt. + +#### Generating stickers + +A variation of **generating images** is to generate "sticker images". + +To generate a sticker, send a command like `%command_prefix% sticker A huge bowl of steaming ramen with a mountain of beansprouts on top`. + +The difference from **generating images** is that the bot will: + +- generate a smaller-resolution image (`256x256`) - smaller/quicker, but still good enough for a sticker +- potentially switch to a different (cheaper or otherwise more suitable) model, if available +- post the image directly to the room (as a reply to your message), without starting a threaded conversation +"#; + + message.replace("%command_prefix%", command_prefix) +} diff --git a/src/utils/mod.rs b/src/utils/mod.rs new file mode 100644 index 0000000..b362efb --- /dev/null +++ b/src/utils/mod.rs @@ -0,0 +1,3 @@ +pub mod status; +pub mod text; +pub mod text_to_speech; diff --git a/src/utils/status.rs b/src/utils/status.rs new file mode 100644 index 0000000..9d99420 --- /dev/null +++ b/src/utils/status.rs @@ -0,0 +1,11 @@ +pub fn create_error_message_text(text: &str) -> String { + format!("âš ī¸ Error: {}", text) +} + +pub fn create_success_message_text(text: &str) -> String { + format!("✅ {}", text) +} + +pub fn create_tooltip_message_text(text: &str) -> String { + format!("💡 {}", text) +} diff --git a/src/utils/text.rs b/src/utils/text.rs new file mode 100644 index 0000000..b6f2432 --- /dev/null +++ b/src/utils/text.rs @@ -0,0 +1,19 @@ +pub fn block_quote(text: &str) -> String { + text.lines() + .map(|line| format!("> {}", line)) + .collect::>() + .join("\n") +} + +pub fn block_unquote(text: &str) -> String { + text.lines() + .map(|line| { + if let Some(stripped) = line.strip_prefix("> ") { + stripped.to_string() + } else { + line.to_string() + } + }) + .collect::>() + .join("\n") +} diff --git a/src/utils/text_to_speech.rs b/src/utils/text_to_speech.rs new file mode 100644 index 0000000..61fc068 --- /dev/null +++ b/src/utils/text_to_speech.rs @@ -0,0 +1,69 @@ +use crate::agent::AgentPurpose; + +use super::text::{block_quote, block_unquote}; + +/// Creates a text message which is based on transcribed audio. +/// This text message is prefixed with an emoji and blockquoted, to indicate that it is a transcription. +/// To reverse the process, use `parse_transcribed_message_text()`. +pub fn create_transcribed_message_text(text: &str) -> String { + block_quote(&format!("{} {}", AgentPurpose::SpeechToText.emoji(), text)) +} + +/// Parses a transcribed message text, reversing the process done by `create_transcribed_message_text()`. +/// If the provided text string does not match the expected format, None is returned. +pub fn parse_transcribed_message_text(text: &str) -> Option { + if !text.starts_with("> ") { + return None; + } + + let unquoted = block_unquote(text); + + let emoji_prefix = format!("{} ", AgentPurpose::SpeechToText.emoji()); + + if let Some(original) = unquoted.strip_prefix(&emoji_prefix) { + return Some(original.to_string()); + } + + None +} + +pub mod test { + #[test] + fn test_transcribed_message_text_creation() { + let text = "Hello there!\nHow are you?"; + let expected = format!( + "> {} Hello there!\n> How are you?", + crate::agent::AgentPurpose::SpeechToText.emoji() + ); + assert_eq!(expected, super::create_transcribed_message_text(text)); + } + + #[test] + fn test_transcribed_message_text_parsing() { + // All good + let text = format!( + "> {} Hello there!\n> How are you?", + crate::agent::AgentPurpose::SpeechToText.emoji() + ); + let expected = "Hello there!\nHow are you?"; + assert_eq!( + Some(expected.to_owned()), + super::parse_transcribed_message_text(&text) + ); + + // No blockquote + let text = format!( + "{} Hello there!\nHow are you?", + crate::agent::AgentPurpose::SpeechToText.emoji() + ); + assert_eq!(None, super::parse_transcribed_message_text(&text)); + + // No emoji + let text = "> Hello there!\n> How are you?"; + assert_eq!(None, super::parse_transcribed_message_text(text)); + + // Different emoji + let text = "> 🌸 Hello there!\n> How are you?"; + assert_eq!(None, super::parse_transcribed_message_text(text)); + } +}